summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.prev-version1
-rw-r--r--.tarball-version1
-rw-r--r--.version1
-rw-r--r--ABOUT-NLS1327
-rw-r--r--AUTHORS236
-rw-r--r--BUGS6
-rw-r--r--COPYING675
-rw-r--r--ChangeLog12187
-rw-r--r--GNUmakefile127
-rw-r--r--INSTALL368
-rw-r--r--Makefile.am119
-rw-r--r--Makefile.in2338
-rw-r--r--NEWS1011
-rw-r--r--README60
-rw-r--r--THANKS27
-rw-r--r--TODO120
-rw-r--r--aclocal.m41756
-rwxr-xr-xbuild-aux/announce-gen704
-rwxr-xr-xbuild-aux/compile348
-rwxr-xr-xbuild-aux/config.guess1774
-rwxr-xr-xbuild-aux/config.rpath672
-rwxr-xr-xbuild-aux/config.sub1907
-rwxr-xr-xbuild-aux/depcomp790
-rwxr-xr-xbuild-aux/do-release-commit-and-tag179
-rwxr-xr-xbuild-aux/gendocs.sh510
-rwxr-xr-xbuild-aux/git-version-gen227
-rwxr-xr-xbuild-aux/gitlog-to-changelog516
-rwxr-xr-xbuild-aux/gnu-web-doc-update216
-rwxr-xr-xbuild-aux/gnupload480
-rwxr-xr-xbuild-aux/install-sh541
-rw-r--r--build-aux/ltmain.sh11429
-rwxr-xr-xbuild-aux/mdate-sh228
-rwxr-xr-xbuild-aux/missing215
-rwxr-xr-xbuild-aux/mktempd135
-rwxr-xr-xbuild-aux/test-driver153
-rw-r--r--build-aux/texinfo.tex11848
-rwxr-xr-xbuild-aux/update-copyright302
-rwxr-xr-xbuild-aux/useless-if-before-free240
-rwxr-xr-xbuild-aux/vc-list-files113
-rw-r--r--cfg.mk80
-rwxr-xr-xconfigure58273
-rw-r--r--configure.ac573
-rw-r--r--debug/Makefile.am2
-rw-r--r--debug/Makefile.in1970
-rw-r--r--debug/test/HOWTO240
-rw-r--r--debug/test/Makefile.am19
-rw-r--r--debug/test/Makefile.in1811
-rwxr-xr-xdebug/test/build_leak_list11
-rwxr-xr-xdebug/test/test261
-rwxr-xr-xdebug/test/test_disk_bsd93
-rwxr-xr-xdebug/test/test_disk_dos172
-rwxr-xr-xdebug/test/test_disk_dvh93
-rwxr-xr-xdebug/test/test_disk_gpt77
-rwxr-xr-xdebug/test/test_disk_mac77
-rwxr-xr-xdebug/test/test_disk_pc98101
-rwxr-xr-xdebug/test/test_disk_sun93
-rwxr-xr-xdebug/test/test_fs_ext297
-rwxr-xr-xdebug/test/test_fs_fat180
-rw-r--r--debug/test/test_fs_hfs90
-rw-r--r--debug/test/test_fs_hfsplus94
-rwxr-xr-xdebug/test/test_fs_linux_swap68
-rwxr-xr-xdebug/test/test_fs_reiserfs97
-rw-r--r--debug/test/testrc40
-rw-r--r--dist-check.mk174
-rw-r--r--doc/API286
-rw-r--r--doc/C/Makefile.am28
-rw-r--r--doc/C/Makefile.in1898
-rw-r--r--doc/C/parted.8166
-rw-r--r--doc/C/partprobe.855
-rw-r--r--doc/FAT759
-rw-r--r--doc/Makefile.am17
-rw-r--r--doc/Makefile.in2322
-rw-r--r--doc/USER.jp1786
-rw-r--r--doc/fdl.texi505
-rw-r--r--doc/parted-pt_BR.texi2901
-rw-r--r--doc/parted.info1708
-rw-r--r--doc/parted.texi1267
-rw-r--r--doc/po4a.mk91
-rw-r--r--doc/pt_BR/Makefile.am5
-rw-r--r--doc/pt_BR/Makefile.in1885
-rw-r--r--doc/stamp-vti4
-rw-r--r--doc/version.texi4
-rw-r--r--include/Makefile.am1
-rw-r--r--include/Makefile.in1969
-rw-r--r--include/parted/Makefile.am56
-rw-r--r--include/parted/Makefile.in1968
-rw-r--r--include/parted/constraint.h101
-rw-r--r--include/parted/constraint.in.h97
-rw-r--r--include/parted/crc32.h39
-rw-r--r--include/parted/crc32.in.h35
-rw-r--r--include/parted/debug.h88
-rw-r--r--include/parted/debug.in.h88
-rw-r--r--include/parted/device.h172
-rw-r--r--include/parted/device.in.h168
-rw-r--r--include/parted/disk.h503
-rw-r--r--include/parted/disk.in.h451
-rw-r--r--include/parted/endian.h85
-rw-r--r--include/parted/endian.in.h85
-rw-r--r--include/parted/exception.h136
-rw-r--r--include/parted/exception.in.h124
-rw-r--r--include/parted/fdasd.h299
-rw-r--r--include/parted/fdasd.in.h299
-rw-r--r--include/parted/filesys.h116
-rw-r--r--include/parted/filesys.in.h108
-rw-r--r--include/parted/geom.h106
-rw-r--r--include/parted/geom.in.h86
-rw-r--r--include/parted/natmath.h144
-rw-r--r--include/parted/natmath.in.h112
-rw-r--r--include/parted/parted.h61
-rw-r--r--include/parted/parted.in.h57
-rw-r--r--include/parted/timer.h66
-rw-r--r--include/parted/timer.in.h66
-rw-r--r--include/parted/unit.h101
-rw-r--r--include/parted/unit.in.h93
-rw-r--r--include/parted/vtoc.h387
-rw-r--r--include/parted/vtoc.in.h387
-rw-r--r--lib/Makefile.am14
-rw-r--r--lib/Makefile.in4923
-rw-r--r--lib/_Noreturn.h50
-rw-r--r--lib/alloca.c167
-rw-r--r--lib/alloca.in.h72
-rw-r--r--lib/arg-nonnull.h26
-rw-r--r--lib/argmatch.c293
-rw-r--r--lib/argmatch.h345
-rw-r--r--lib/assert.in.h27
-rw-r--r--lib/assure.h57
-rw-r--r--lib/attribute.h226
-rw-r--r--lib/basename-lgpl.c70
-rw-r--r--lib/basename-lgpl.h78
-rw-r--r--lib/basename.c64
-rw-r--r--lib/btowc.c39
-rw-r--r--lib/c++defs.h331
-rw-r--r--lib/c-ctype.c21
-rw-r--r--lib/c-ctype.h364
-rw-r--r--lib/c-strcase.h56
-rw-r--r--lib/c-strcasecmp.c56
-rw-r--r--lib/c-strcaseeq.h181
-rw-r--r--lib/c-strncasecmp.c56
-rw-r--r--lib/calloc.c55
-rw-r--r--lib/canonicalize-lgpl.c469
-rw-r--r--lib/cdefs.h715
-rw-r--r--lib/cloexec.c83
-rw-r--r--lib/cloexec.h34
-rw-r--r--lib/close-stream.c77
-rw-r--r--lib/close-stream.h20
-rw-r--r--lib/close.c75
-rw-r--r--lib/closeout.c135
-rw-r--r--lib/closeout.h34
-rw-r--r--lib/config.h.in2445
-rw-r--r--lib/dirname-lgpl.c86
-rw-r--r--lib/dirname.c38
-rw-r--r--lib/dirname.h53
-rw-r--r--lib/dup2.c189
-rw-r--r--lib/dynarray.h284
-rw-r--r--lib/eloop-threshold.h83
-rw-r--r--lib/errno.in.h279
-rw-r--r--lib/error.c409
-rw-r--r--lib/error.in.h118
-rw-r--r--lib/exitfail.c24
-rw-r--r--lib/exitfail.h18
-rw-r--r--lib/fcntl.c629
-rw-r--r--lib/fcntl.in.h445
-rw-r--r--lib/fd-hook.c116
-rw-r--r--lib/fd-hook.h119
-rw-r--r--lib/filename.h112
-rw-r--r--lib/fpending.c63
-rw-r--r--lib/fpending.h29
-rw-r--r--lib/free.c53
-rw-r--r--lib/fstat.c94
-rw-r--r--lib/fsync.c87
-rw-r--r--lib/getdtablesize.c124
-rw-r--r--lib/getopt-cdefs.in.h66
-rw-r--r--lib/getopt-core.h96
-rw-r--r--lib/getopt-ext.h77
-rw-r--r--lib/getopt-pfx-core.h66
-rw-r--r--lib/getopt-pfx-ext.h70
-rw-r--r--lib/getopt.c811
-rw-r--r--lib/getopt.in.h61
-rw-r--r--lib/getopt1.c159
-rw-r--r--lib/getopt_int.h118
-rw-r--r--lib/getprogname.c300
-rw-r--r--lib/getprogname.h26
-rw-r--r--lib/getrandom.c190
-rw-r--r--lib/gettext.h300
-rw-r--r--lib/glthread/lock.c749
-rw-r--r--lib/glthread/lock.h791
-rw-r--r--lib/glthread/threadlib.c108
-rw-r--r--lib/gnulib.mk2658
-rw-r--r--lib/hard-locale.c47
-rw-r--r--lib/hard-locale.h28
-rw-r--r--lib/ialloc.c21
-rw-r--r--lib/ialloc.h100
-rw-r--r--lib/idx.h134
-rw-r--r--lib/intprops-internal.h392
-rw-r--r--lib/intprops.h335
-rw-r--r--lib/inttypes.in.h1028
-rw-r--r--lib/langinfo.in.h224
-rw-r--r--lib/lc-charset-dispatch.c82
-rw-r--r--lib/lc-charset-dispatch.h40
-rw-r--r--lib/libc-config.h204
-rw-r--r--lib/limits.in.h134
-rw-r--r--lib/localcharset.c1159
-rw-r--r--lib/localcharset.h137
-rw-r--r--lib/locale.in.h305
-rw-r--r--lib/localeconv.c103
-rw-r--r--lib/long-options.c139
-rw-r--r--lib/long-options.h40
-rw-r--r--lib/lseek.c89
-rw-r--r--lib/lstat.c104
-rw-r--r--lib/malloc.c51
-rw-r--r--lib/malloc/dynarray-skeleton.c528
-rw-r--r--lib/malloc/dynarray.h177
-rw-r--r--lib/malloc/dynarray_at_failure.c40
-rw-r--r--lib/malloc/dynarray_emplace_enlarge.c77
-rw-r--r--lib/malloc/dynarray_finalize.c66
-rw-r--r--lib/malloc/dynarray_resize.c68
-rw-r--r--lib/malloc/dynarray_resize_clear.c39
-rw-r--r--lib/malloc/scratch_buffer.h135
-rw-r--r--lib/malloc/scratch_buffer_grow.c56
-rw-r--r--lib/malloc/scratch_buffer_grow_preserve.c67
-rw-r--r--lib/malloc/scratch_buffer_set_array_size.c64
-rw-r--r--lib/malloca.c112
-rw-r--r--lib/malloca.h126
-rw-r--r--lib/mbrtowc-impl-utf8.h138
-rw-r--r--lib/mbrtowc-impl.h262
-rw-r--r--lib/mbrtowc.c157
-rw-r--r--lib/mbsinit.c69
-rw-r--r--lib/mbtowc-impl.h44
-rw-r--r--lib/mbtowc-lock.c150
-rw-r--r--lib/mbtowc-lock.h125
-rw-r--r--lib/mbtowc.c26
-rw-r--r--lib/mempcpy.c33
-rw-r--r--lib/minmax.h60
-rw-r--r--lib/mkdir.c93
-rw-r--r--lib/mkstemp.c50
-rw-r--r--lib/msvc-inval.c129
-rw-r--r--lib/msvc-inval.h222
-rw-r--r--lib/msvc-nothrow.c51
-rw-r--r--lib/msvc-nothrow.h43
-rw-r--r--lib/nl_langinfo-lock.c150
-rw-r--r--lib/nl_langinfo.c574
-rw-r--r--lib/open.c209
-rw-r--r--lib/pathmax.h83
-rw-r--r--lib/progname.c92
-rw-r--r--lib/progname.h62
-rw-r--r--lib/quote.h46
-rw-r--r--lib/quotearg.c1080
-rw-r--r--lib/quotearg.h431
-rw-r--r--lib/rawmemchr.c123
-rw-r--r--lib/rawmemchr.valgrind28
-rw-r--r--lib/read.c95
-rw-r--r--lib/readlink.c104
-rw-r--r--lib/realloc.c63
-rw-r--r--lib/reallocarray.c38
-rw-r--r--lib/regcomp.c3788
-rw-r--r--lib/regex.c84
-rw-r--r--lib/regex.h699
-rw-r--r--lib/regex_internal.c1711
-rw-r--r--lib/regex_internal.h834
-rw-r--r--lib/regexec.c4221
-rw-r--r--lib/rpmatch.c175
-rw-r--r--lib/safe-read.c71
-rw-r--r--lib/safe-read.h47
-rw-r--r--lib/scratch_buffer.h117
-rw-r--r--lib/setlocale-lock.c150
-rw-r--r--lib/setlocale_null.c411
-rw-r--r--lib/setlocale_null.h82
-rw-r--r--lib/sleep.c74
-rw-r--r--lib/stat-time.c21
-rw-r--r--lib/stat-time.h251
-rw-r--r--lib/stat-w32.c460
-rw-r--r--lib/stat-w32.h37
-rw-r--r--lib/stat.c438
-rw-r--r--lib/stdarg.in.h35
-rw-r--r--lib/stdckdint.in.h35
-rw-r--r--lib/stddef.in.h186
-rw-r--r--lib/stdint.in.h740
-rw-r--r--lib/stdio-impl.h218
-rw-r--r--lib/stdio-read.c168
-rw-r--r--lib/stdio-write.c206
-rw-r--r--lib/stdio.in.h1734
-rw-r--r--lib/stdlib.in.h1678
-rw-r--r--lib/strdup.c54
-rw-r--r--lib/streq.h176
-rw-r--r--lib/strerror-override.c306
-rw-r--r--lib/strerror-override.h57
-rw-r--r--lib/strerror.c70
-rw-r--r--lib/string.in.h1359
-rw-r--r--lib/stripslash.c45
-rw-r--r--lib/strtol.c416
-rw-r--r--lib/strtoll.c33
-rw-r--r--lib/strtoul.c19
-rw-r--r--lib/strtoull.c26
-rw-r--r--lib/sys-limits.h42
-rw-r--r--lib/sys_random.in.h100
-rw-r--r--lib/sys_stat.in.h958
-rw-r--r--lib/sys_types.in.h106
-rw-r--r--lib/tempname.c286
-rw-r--r--lib/tempname.h72
-rw-r--r--lib/time.in.h485
-rw-r--r--lib/unistd.c22
-rw-r--r--lib/unistd.in.h2411
-rw-r--r--lib/unlink.c98
-rw-r--r--lib/usleep.c76
-rw-r--r--lib/verify.h369
-rw-r--r--lib/version-etc-fsf.c30
-rw-r--r--lib/version-etc.c262
-rw-r--r--lib/version-etc.h78
-rw-r--r--lib/warn-on-use.h149
-rw-r--r--lib/wchar.in.h1382
-rw-r--r--lib/wcrtomb.c80
-rw-r--r--lib/wctype-h.c23
-rw-r--r--lib/wctype.in.h732
-rw-r--r--lib/windows-initguard.h35
-rw-r--r--lib/windows-mutex.c95
-rw-r--r--lib/windows-mutex.h51
-rw-r--r--lib/windows-once.c62
-rw-r--r--lib/windows-once.h47
-rw-r--r--lib/windows-recmutex.c127
-rw-r--r--lib/windows-recmutex.h57
-rw-r--r--lib/windows-rwlock.c377
-rw-r--r--lib/windows-rwlock.h68
-rw-r--r--lib/xalloc-die.c41
-rw-r--r--lib/xalloc-oversized.h65
-rw-r--r--lib/xalloc.h211
-rw-r--r--lib/xmalloc.c340
-rw-r--r--lib/xstrtol.c246
-rw-r--r--lib/xstrtol.h51
-rw-r--r--lib/xstrtoll.c23
-rw-r--r--lib/xstrtoul.c23
-rw-r--r--lib/xstrtoull.c23
-rw-r--r--libparted-fs-resize.pc.in10
-rw-r--r--libparted.pc.in10
-rw-r--r--libparted/Makefile.am65
-rw-r--r--libparted/Makefile.in2265
-rw-r--r--libparted/arch/beos.c649
-rw-r--r--libparted/arch/gnu.c930
-rw-r--r--libparted/arch/linux.c3413
-rw-r--r--libparted/arch/linux.h44
-rw-r--r--libparted/architecture.c43
-rw-r--r--libparted/architecture.h38
-rw-r--r--libparted/cs/constraint.c538
-rw-r--r--libparted/cs/geom.c487
-rw-r--r--libparted/cs/natmath.c481
-rw-r--r--libparted/debug.c115
-rw-r--r--libparted/device.c562
-rw-r--r--libparted/disk.c2668
-rw-r--r--libparted/exception.c313
-rw-r--r--libparted/filesys.c295
-rw-r--r--libparted/fs/Makefile.am123
-rw-r--r--libparted/fs/Makefile.in2532
-rw-r--r--libparted/fs/amiga/a-interface.c88
-rw-r--r--libparted/fs/amiga/affs.c292
-rw-r--r--libparted/fs/amiga/affs.h19
-rw-r--r--libparted/fs/amiga/amiga.c351
-rw-r--r--libparted/fs/amiga/amiga.h70
-rw-r--r--libparted/fs/amiga/apfs.c128
-rw-r--r--libparted/fs/amiga/apfs.h18
-rw-r--r--libparted/fs/amiga/asfs.c130
-rw-r--r--libparted/fs/amiga/asfs.h18
-rw-r--r--libparted/fs/btrfs/btrfs.c77
-rw-r--r--libparted/fs/ext2/ext2.h79
-rw-r--r--libparted/fs/ext2/ext2_fs.h329
-rw-r--r--libparted/fs/ext2/interface.c163
-rw-r--r--libparted/fs/f2fs/f2fs.c60
-rw-r--r--libparted/fs/f2fs/f2fs.h57
-rw-r--r--libparted/fs/fat/bootsector.c271
-rw-r--r--libparted/fs/fat/bootsector.h126
-rw-r--r--libparted/fs/fat/count.h46
-rw-r--r--libparted/fs/fat/fat.c162
-rw-r--r--libparted/fs/fat/fat.h163
-rw-r--r--libparted/fs/fsresize.sym13
-rw-r--r--libparted/fs/hfs/DOC92
-rw-r--r--libparted/fs/hfs/HISTORY115
-rw-r--r--libparted/fs/hfs/TODO27
-rw-r--r--libparted/fs/hfs/hfs.c92
-rw-r--r--libparted/fs/hfs/hfs.h648
-rw-r--r--libparted/fs/hfs/probe.c238
-rw-r--r--libparted/fs/hfs/probe.h44
-rw-r--r--libparted/fs/jfs/jfs.c80
-rw-r--r--libparted/fs/jfs/jfs_superblock.h144
-rw-r--r--libparted/fs/jfs/jfs_types.h527
-rw-r--r--libparted/fs/linux_swap/linux_swap.c396
-rw-r--r--libparted/fs/nilfs2/nilfs2.c155
-rw-r--r--libparted/fs/ntfs/ntfs.c73
-rw-r--r--libparted/fs/r/fat/bootsector.c441
-rw-r--r--libparted/fs/r/fat/bootsector.h130
-rw-r--r--libparted/fs/r/fat/calc.c433
-rw-r--r--libparted/fs/r/fat/calc.h77
-rw-r--r--libparted/fs/r/fat/clstdup.c423
-rw-r--r--libparted/fs/r/fat/clstdup.h28
-rw-r--r--libparted/fs/r/fat/context.c261
-rw-r--r--libparted/fs/r/fat/context.h70
-rw-r--r--libparted/fs/r/fat/count.c319
-rw-r--r--libparted/fs/r/fat/count.h46
-rw-r--r--libparted/fs/r/fat/fat.c652
-rw-r--r--libparted/fs/r/fat/fat.h159
-rw-r--r--libparted/fs/r/fat/fatio.c150
-rw-r--r--libparted/fs/r/fat/fatio.h49
-rw-r--r--libparted/fs/r/fat/resize.c876
-rw-r--r--libparted/fs/r/fat/table.c481
-rw-r--r--libparted/fs/r/fat/table.h74
-rw-r--r--libparted/fs/r/fat/traverse.c368
-rw-r--r--libparted/fs/r/fat/traverse.h75
-rw-r--r--libparted/fs/r/filesys.c320
-rw-r--r--libparted/fs/r/hfs/advfs.c332
-rw-r--r--libparted/fs/r/hfs/advfs.h49
-rw-r--r--libparted/fs/r/hfs/advfs_plus.c385
-rw-r--r--libparted/fs/r/hfs/advfs_plus.h52
-rw-r--r--libparted/fs/r/hfs/cache.c239
-rw-r--r--libparted/fs/r/hfs/cache.h118
-rw-r--r--libparted/fs/r/hfs/file.c229
-rw-r--r--libparted/fs/r/hfs/file.h42
-rw-r--r--libparted/fs/r/hfs/file_plus.c274
-rw-r--r--libparted/fs/r/hfs/file_plus.h61
-rw-r--r--libparted/fs/r/hfs/hfs.c1166
-rw-r--r--libparted/fs/r/hfs/hfs.h648
-rw-r--r--libparted/fs/r/hfs/journal.c392
-rw-r--r--libparted/fs/r/hfs/journal.h45
-rw-r--r--libparted/fs/r/hfs/probe.c99
-rw-r--r--libparted/fs/r/hfs/probe.h35
-rw-r--r--libparted/fs/r/hfs/reloc.c676
-rw-r--r--libparted/fs/r/hfs/reloc.h36
-rw-r--r--libparted/fs/r/hfs/reloc_plus.c948
-rw-r--r--libparted/fs/r/hfs/reloc_plus.h37
-rw-r--r--libparted/fs/reiserfs/reiserfs.c94
-rw-r--r--libparted/fs/reiserfs/reiserfs.h109
-rw-r--r--libparted/fs/udf/udf.c175
-rw-r--r--libparted/fs/ufs/ufs.c281
-rw-r--r--libparted/fs/xfs/platform_defs.h109
-rw-r--r--libparted/fs/xfs/xfs.c87
-rw-r--r--libparted/fs/xfs/xfs_sb.h489
-rw-r--r--libparted/fs/xfs/xfs_types.h302
-rw-r--r--libparted/labels/Makefile.am60
-rw-r--r--libparted/labels/Makefile.in2063
-rw-r--r--libparted/labels/aix.c237
-rw-r--r--libparted/labels/atari.c1975
-rw-r--r--libparted/labels/bsd.c654
-rw-r--r--libparted/labels/dasd.c1032
-rw-r--r--libparted/labels/dos.c2612
-rw-r--r--libparted/labels/dvh.c896
-rw-r--r--libparted/labels/dvh.h178
-rw-r--r--libparted/labels/efi_crc32.c126
-rw-r--r--libparted/labels/fdasd.c1442
-rw-r--r--libparted/labels/gpt.c1941
-rw-r--r--libparted/labels/loop.c316
-rw-r--r--libparted/labels/mac.c1604
-rw-r--r--libparted/labels/misc.h48
-rw-r--r--libparted/labels/pc98.c813
-rw-r--r--libparted/labels/pt-common.h55
-rw-r--r--libparted/labels/pt-limit.c161
-rw-r--r--libparted/labels/pt-limit.gperf28
-rw-r--r--libparted/labels/pt-tools.c186
-rw-r--r--libparted/labels/pt-tools.h31
-rw-r--r--libparted/labels/rdb.c1167
-rw-r--r--libparted/labels/sun.c910
-rw-r--r--libparted/labels/vtoc.c1329
-rw-r--r--libparted/libparted.c262
-rw-r--r--libparted/mbr.s85
-rw-r--r--libparted/tests/Makefile.am40
-rw-r--r--libparted/tests/Makefile.in2464
-rw-r--r--libparted/tests/common.c94
-rw-r--r--libparted/tests/common.h31
-rw-r--r--libparted/tests/disk.c112
-rw-r--r--libparted/tests/flags.c116
-rw-r--r--libparted/tests/label.c195
-rw-r--r--libparted/tests/symlink.c146
-rwxr-xr-xlibparted/tests/t1000-label.sh26
-rwxr-xr-xlibparted/tests/t1001-flags.sh23
-rwxr-xr-xlibparted/tests/t2000-disk.sh26
-rwxr-xr-xlibparted/tests/t2100-zerolen.sh69
-rwxr-xr-xlibparted/tests/t3000-symlink.sh27
-rwxr-xr-xlibparted/tests/t4000-volser.sh20
-rw-r--r--libparted/tests/volser.c191
-rw-r--r--libparted/tests/zerolen.c52
-rw-r--r--libparted/timer.c244
-rw-r--r--libparted/unit.c586
-rw-r--r--m4/00gnulib.m485
-rw-r--r--m4/__inline.m422
-rw-r--r--m4/absolute-header.m4100
-rw-r--r--m4/alloca.m4106
-rw-r--r--m4/arpa_inet_h.m474
-rw-r--r--m4/assert.m424
-rw-r--r--m4/assert_h.m473
-rw-r--r--m4/btowc.m4105
-rw-r--r--m4/build-to-host.m473
-rw-r--r--m4/builtin-expect.m449
-rw-r--r--m4/c-bool.m451
-rw-r--r--m4/calloc.m483
-rw-r--r--m4/canonicalize.m4185
-rw-r--r--m4/clock_time.m435
-rw-r--r--m4/close.m435
-rw-r--r--m4/codeset.m424
-rw-r--r--m4/config-h.m413
-rw-r--r--m4/configmake.m4168
-rw-r--r--m4/ctype_h.m447
-rw-r--r--m4/double-slash-root.m438
-rw-r--r--m4/dup2.m4105
-rw-r--r--m4/eealloc.m431
-rw-r--r--m4/environ.m446
-rw-r--r--m4/errno_h.m4131
-rw-r--r--m4/error.m422
-rw-r--r--m4/error_h.m4125
-rw-r--r--m4/extensions.m4232
-rw-r--r--m4/extern-inline.m4130
-rw-r--r--m4/fcntl-o.m4140
-rw-r--r--m4/fcntl.m4151
-rw-r--r--m4/fcntl_h.m470
-rw-r--r--m4/fdopen.m451
-rw-r--r--m4/flexmember.m444
-rw-r--r--m4/fpending.m436
-rw-r--r--m4/free.m452
-rw-r--r--m4/fstat.m440
-rw-r--r--m4/fsync.m417
-rw-r--r--m4/ftruncate.m443
-rw-r--r--m4/getcwd.m4168
-rw-r--r--m4/getdtablesize.m463
-rw-r--r--m4/getopt.m4381
-rw-r--r--m4/getpagesize.m449
-rw-r--r--m4/getprogname.m454
-rw-r--r--m4/getrandom.m480
-rw-r--r--m4/gettext.m4383
-rw-r--r--m4/gettimeofday.m469
-rw-r--r--m4/gnulib-common.m41398
-rw-r--r--m4/gnulib-comp.m42097
-rw-r--r--m4/iconv.m4199
-rw-r--r--m4/include_next.m4224
-rw-r--r--m4/inet_pton.m470
-rw-r--r--m4/intl-thread-locale.m4219
-rw-r--r--m4/intlmacosx.m465
-rw-r--r--m4/inttypes.m4184
-rw-r--r--m4/ioctl.m444
-rw-r--r--m4/isblank.m417
-rw-r--r--m4/langinfo_h.m4137
-rw-r--r--m4/largefile.m4376
-rw-r--r--m4/lcmessage.m435
-rw-r--r--m4/lib-ignore.m4115
-rw-r--r--m4/lib-ld.m4110
-rw-r--r--m4/lib-link.m4774
-rw-r--r--m4/lib-prefix.m4224
-rw-r--r--m4/libtool.m48403
-rw-r--r--m4/limits-h.m442
-rw-r--r--m4/localcharset.m411
-rw-r--r--m4/locale-fr.m4253
-rw-r--r--m4/locale-ja.m4143
-rw-r--r--m4/locale-tr.m4126
-rw-r--r--m4/locale-zh.m4137
-rw-r--r--m4/locale_h.m4174
-rw-r--r--m4/localeconv.m422
-rw-r--r--m4/localename.m455
-rw-r--r--m4/lock.m447
-rw-r--r--m4/lseek.m498
-rw-r--r--m4/lstat.m482
-rw-r--r--m4/ltoptions.m4437
-rw-r--r--m4/ltsugar.m4124
-rw-r--r--m4/ltversion.m424
-rw-r--r--m4/lt~obsolete.m499
-rw-r--r--m4/malloc.m4175
-rw-r--r--m4/malloca.m414
-rw-r--r--m4/manywarnings.m4211
-rw-r--r--m4/mbrtowc.m4793
-rw-r--r--m4/mbsinit.m444
-rw-r--r--m4/mbstate_t.m434
-rw-r--r--m4/mbtowc.m427
-rw-r--r--m4/memchr.m4106
-rw-r--r--m4/mempcpy.m429
-rw-r--r--m4/minmax.m444
-rw-r--r--m4/mkdir.m491
-rw-r--r--m4/mkstemp.m487
-rw-r--r--m4/mmap-anon.m455
-rw-r--r--m4/mode_t.m426
-rw-r--r--m4/msvc-inval.m419
-rw-r--r--m4/msvc-nothrow.m410
-rw-r--r--m4/multiarch.m465
-rw-r--r--m4/musl.m420
-rw-r--r--m4/nanosleep.m4150
-rw-r--r--m4/netinet_in_h.m429
-rw-r--r--m4/nl_langinfo.m480
-rw-r--r--m4/nls.m432
-rw-r--r--m4/nocrash.m4131
-rw-r--r--m4/o-direct.m4252
-rw-r--r--m4/off_t.m418
-rw-r--r--m4/open-cloexec.m421
-rw-r--r--m4/open-slash.m460
-rw-r--r--m4/open.m456
-rw-r--r--m4/pathmax.m442
-rw-r--r--m4/perror.m476
-rw-r--r--m4/pipe.m415
-rw-r--r--m4/po.m4449
-rw-r--r--m4/priv-set.m415
-rw-r--r--m4/progtest.m492
-rw-r--r--m4/pselect.m475
-rw-r--r--m4/pthread-thread.m469
-rw-r--r--m4/pthread_h.m4283
-rw-r--r--m4/pthread_rwlock_rdlock.m4185
-rw-r--r--m4/pthread_sigmask.m4280
-rw-r--r--m4/putenv.m464
-rw-r--r--m4/quote.m413
-rw-r--r--m4/quotearg.m411
-rw-r--r--m4/raise.m436
-rw-r--r--m4/rawmemchr.m420
-rw-r--r--m4/read.m428
-rw-r--r--m4/readlink.m4120
-rw-r--r--m4/realloc.m463
-rw-r--r--m4/reallocarray.m426
-rw-r--r--m4/regex.m4396
-rw-r--r--m4/rpmatch.m431
-rw-r--r--m4/safe-read.m412
-rw-r--r--m4/sched_h.m4106
-rw-r--r--m4/sched_yield.m422
-rw-r--r--m4/select.m4122
-rw-r--r--m4/semaphore.m445
-rw-r--r--m4/setenv.m4166
-rw-r--r--m4/setlocale.m488
-rw-r--r--m4/setlocale_null.m4115
-rw-r--r--m4/signal_h.m4100
-rw-r--r--m4/signalblocking.m423
-rw-r--r--m4/sleep.m468
-rw-r--r--m4/socketlib.m496
-rw-r--r--m4/sockets.m417
-rw-r--r--m4/socklen.m476
-rw-r--r--m4/sockpfaf.m484
-rw-r--r--m4/ssize_t.m423
-rw-r--r--m4/stat-time.m483
-rw-r--r--m4/stat.m487
-rw-r--r--m4/stdalign.m4200
-rw-r--r--m4/stdarg.m476
-rw-r--r--m4/stddef_h.m4119
-rw-r--r--m4/stdint.m4531
-rw-r--r--m4/stdio_h.m4237
-rw-r--r--m4/stdlib_h.m4209
-rw-r--r--m4/strdup.m432
-rw-r--r--m4/strerror.m4102
-rw-r--r--m4/strerror_r.m4180
-rw-r--r--m4/string_h.m4150
-rw-r--r--m4/strtoll.m462
-rw-r--r--m4/strtoull.m462
-rw-r--r--m4/symlink.m457
-rw-r--r--m4/sys_ioctl_h.m479
-rw-r--r--m4/sys_random_h.m468
-rw-r--r--m4/sys_select_h.m4110
-rw-r--r--m4/sys_socket_h.m4206
-rw-r--r--m4/sys_stat_h.m4129
-rw-r--r--m4/sys_time_h.m4120
-rw-r--r--m4/sys_types_h.m470
-rw-r--r--m4/sys_uio_h.m446
-rw-r--r--m4/tempname.m419
-rw-r--r--m4/thread.m417
-rw-r--r--m4/threadlib.m4669
-rw-r--r--m4/time.m448
-rw-r--r--m4/time_h.m4186
-rw-r--r--m4/unistd_h.m4275
-rw-r--r--m4/unlink.m4137
-rw-r--r--m4/unlinkdir.m432
-rw-r--r--m4/usleep.m451
-rw-r--r--m4/version-etc.m433
-rw-r--r--m4/visibility.m482
-rw-r--r--m4/warn-on-use.m462
-rw-r--r--m4/warnings.m4110
-rw-r--r--m4/wchar_h.m4258
-rw-r--r--m4/wchar_t.m424
-rw-r--r--m4/wcrtomb.m4146
-rw-r--r--m4/wctob.m4109
-rw-r--r--m4/wctomb.m419
-rw-r--r--m4/wctype_h.m4200
-rw-r--r--m4/wint_t.m457
-rw-r--r--m4/xalloc.m47
-rw-r--r--m4/xstrtol.m410
-rw-r--r--m4/yield.m418
-rw-r--r--m4/zzgnulib.m423
-rw-r--r--maint.mk1797
-rw-r--r--parted.spec91
-rw-r--r--parted.spec.in91
-rw-r--r--parted/Makefile.am55
-rw-r--r--parted/Makefile.in2085
-rw-r--r--parted/command.c143
-rw-r--r--parted/command.h48
-rw-r--r--parted/jsonwrt.c225
-rw-r--r--parted/jsonwrt.h46
-rw-r--r--parted/parted.c2699
-rw-r--r--parted/strlist.c582
-rw-r--r--parted/strlist.h66
-rw-r--r--parted/table.c245
-rw-r--r--parted/table.h52
-rw-r--r--parted/ui.c1702
-rw-r--r--parted/ui.h98
-rw-r--r--partprobe/Makefile.am16
-rw-r--r--partprobe/Makefile.in2007
-rw-r--r--partprobe/partprobe.c227
-rw-r--r--po/ChangeLog.052
-rw-r--r--po/LINGUAS31
-rw-r--r--po/Makefile.in.in444
-rw-r--r--po/Makevars61
-rw-r--r--po/POTFILES.in78
-rw-r--r--po/Rules-quot47
-rw-r--r--po/boldquot.sed10
-rw-r--r--po/ca.gmobin0 -> 16135 bytes
-rw-r--r--po/ca.po3613
-rw-r--r--po/cs.gmobin0 -> 53773 bytes
-rw-r--r--po/cs.po3827
-rw-r--r--po/da.gmobin0 -> 46294 bytes
-rw-r--r--po/da.po3331
-rw-r--r--po/de.gmobin0 -> 74785 bytes
-rw-r--r--po/de.po3367
-rw-r--r--po/en@boldquot.header25
-rw-r--r--po/en@quot.header22
-rw-r--r--po/es.gmobin0 -> 73647 bytes
-rw-r--r--po/es.po3878
-rw-r--r--po/fr.gmobin0 -> 71324 bytes
-rw-r--r--po/fr.po3379
-rw-r--r--po/fur.gmobin0 -> 73773 bytes
-rw-r--r--po/fur.po3415
-rw-r--r--po/gl.gmobin0 -> 36338 bytes
-rw-r--r--po/gl.po3955
-rw-r--r--po/hu.gmobin0 -> 64392 bytes
-rw-r--r--po/hu.po3337
-rw-r--r--po/id.gmobin0 -> 71369 bytes
-rw-r--r--po/id.po3300
-rw-r--r--po/insert-header.sin23
-rw-r--r--po/it.gmobin0 -> 65161 bytes
-rw-r--r--po/it.po3413
-rw-r--r--po/ja.gmobin0 -> 82612 bytes
-rw-r--r--po/ja.po3279
-rw-r--r--po/ka.gmobin0 -> 77517 bytes
-rw-r--r--po/ka.po3135
-rw-r--r--po/ko.gmobin0 -> 77057 bytes
-rw-r--r--po/ko.po3314
-rw-r--r--po/nl.gmobin0 -> 69996 bytes
-rw-r--r--po/nl.po3791
-rw-r--r--po/nn.gmobin0 -> 16003 bytes
-rw-r--r--po/nn.po3577
-rw-r--r--po/parted.pot2916
-rw-r--r--po/pl.gmobin0 -> 73608 bytes
-rw-r--r--po/pl.po3303
-rw-r--r--po/pt.gmobin0 -> 12170 bytes
-rw-r--r--po/pt.po3594
-rw-r--r--po/pt_BR.gmobin0 -> 72480 bytes
-rw-r--r--po/pt_BR.po3926
-rw-r--r--po/quot.sed6
-rw-r--r--po/remove-potcdate.sin19
-rw-r--r--po/ro.gmobin0 -> 75936 bytes
-rw-r--r--po/ro.po3536
-rw-r--r--po/ru.gmobin0 -> 92400 bytes
-rw-r--r--po/ru.po3355
-rw-r--r--po/rw.gmobin0 -> 1027 bytes
-rw-r--r--po/rw.po3570
-rw-r--r--po/sk.gmobin0 -> 62461 bytes
-rw-r--r--po/sk.po3831
-rw-r--r--po/sl.gmobin0 -> 58397 bytes
-rw-r--r--po/sl.po3782
-rw-r--r--po/sr.gmobin0 -> 92670 bytes
-rw-r--r--po/sr.po3383
-rw-r--r--po/stamp-po1
-rw-r--r--po/sv.gmobin0 -> 72054 bytes
-rw-r--r--po/sv.po3732
-rw-r--r--po/tr.gmobin0 -> 64669 bytes
-rw-r--r--po/tr.po3748
-rw-r--r--po/uk.gmobin0 -> 93455 bytes
-rw-r--r--po/uk.po3784
-rw-r--r--po/vi.gmobin0 -> 78082 bytes
-rw-r--r--po/vi.po3750
-rw-r--r--po/zh_CN.gmobin0 -> 67435 bytes
-rw-r--r--po/zh_CN.po3581
-rw-r--r--po/zh_TW.gmobin0 -> 68192 bytes
-rw-r--r--po/zh_TW.po3215
-rw-r--r--scripts/data/abi/baseline_symbols.txt451
-rwxr-xr-xscripts/extract_symvers66
-rw-r--r--tests/Makefile.am150
-rw-r--r--tests/Makefile.in2518
-rw-r--r--tests/dup-clobber.c103
-rw-r--r--tests/duplicate.c159
-rw-r--r--tests/fs-resize.c75
-rwxr-xr-xtests/gpt-attrs72
-rwxr-xr-xtests/gpt-header-move42
-rwxr-xr-xtests/gpt-header-munge285
-rwxr-xr-xtests/help-version.sh282
-rw-r--r--tests/init.cfg132
-rw-r--r--tests/init.sh589
-rwxr-xr-xtests/msdos-overlap24
-rw-r--r--tests/print-align.c50
-rw-r--r--tests/print-flags.c58
-rw-r--r--tests/print-max.c45
-rw-r--r--tests/t-lib-helpers.sh430
-rw-r--r--tests/t-local.sh196
-rw-r--r--tests/t-lvm.sh82
-rwxr-xr-xtests/t0000-basic.sh78
-rwxr-xr-xtests/t0001-tiny.sh47
-rwxr-xr-xtests/t0010-script-no-ctrl-chars.sh39
-rwxr-xr-xtests/t0100-print.sh60
-rwxr-xr-xtests/t0101-print-empty.sh49
-rwxr-xr-xtests/t0200-gpt.sh49
-rwxr-xr-xtests/t0201-gpt.sh39
-rwxr-xr-xtests/t0202-gpt-pmbr.sh49
-rw-r--r--tests/t0203-gpt-create-on-min-sized-device.sh46
-rwxr-xr-xtests/t0203-gpt-shortened-device-primary-valid.sh49
-rw-r--r--tests/t0203-gpt-tiny-device-abort.sh42
-rw-r--r--tests/t0205-gpt-list-clobbers-pmbr.sh51
-rwxr-xr-xtests/t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh48
-rw-r--r--tests/t0207-IEC-binary-notation.sh71
-rw-r--r--tests/t0208-mkpart-end-in-IEC.sh61
-rwxr-xr-xtests/t0209-gpt-pmbr_boot.sh38
-rwxr-xr-xtests/t0210-gpt-resized-partition-entry-array.sh44
-rw-r--r--tests/t0211-gpt-rewrite-header.sh82
-rw-r--r--tests/t0212-gpt-many-partitions.sh56
-rwxr-xr-xtests/t0213-mkpart-start-negative.sh48
-rw-r--r--tests/t0215-gpt-attrs.sh46
-rwxr-xr-xtests/t0220-gpt-msftres.sh80
-rwxr-xr-xtests/t0250-gpt.sh42
-rwxr-xr-xtests/t0251-gpt-unicode.sh42
-rwxr-xr-xtests/t0280-gpt-corrupt.sh96
-rw-r--r--tests/t0281-gpt-grow.sh100
-rw-r--r--tests/t0282-gpt-move-backup.sh100
-rw-r--r--tests/t0283-overlap-partitions.sh105
-rwxr-xr-xtests/t0290-gpt-name.sh41
-rwxr-xr-xtests/t0300-dos-on-gpt.sh36
-rwxr-xr-xtests/t0301-overwrite-gpt-pmbr.sh44
-rw-r--r--tests/t0350-mac-PT-increases-sector-size.sh49
-rw-r--r--tests/t0400-loop-clobber-infloop.sh40
-rw-r--r--tests/t0500-dup-clobber.sh26
-rw-r--r--tests/t0501-duplicate.sh30
-rwxr-xr-xtests/t0800-json-gpt.sh99
-rwxr-xr-xtests/t0801-json-msdos.sh89
-rwxr-xr-xtests/t0900-type-gpt.sh71
-rwxr-xr-xtests/t0901-type-gpt-invalid.sh35
-rwxr-xr-xtests/t0910-type-dos.sh69
-rwxr-xr-xtests/t0911-type-dos-invalid.sh35
-rwxr-xr-xtests/t1100-busy-label.sh80
-rwxr-xr-xtests/t1101-busy-partition.sh70
-rw-r--r--tests/t1102-loop-label.sh88
-rw-r--r--tests/t1104-remove-and-add-partition.sh50
-rwxr-xr-xtests/t1700-probe-fs.sh73
-rw-r--r--tests/t1701-rescue-fs.sh53
-rwxr-xr-xtests/t2200-dos-label-recog.sh52
-rwxr-xr-xtests/t2201-pc98-label-recog.sh41
-rwxr-xr-xtests/t2300-dos-label-extended-bootcode.sh59
-rw-r--r--tests/t2310-dos-extended-2-sector-min-offset.sh54
-rw-r--r--tests/t2320-dos-extended-noclobber.sh49
-rw-r--r--tests/t2400-dos-hfs-partition-type.sh40
-rw-r--r--tests/t2410-dos-udf-partition-type.sh38
-rwxr-xr-xtests/t2500-probe-corrupt-hfs.sh41
-rwxr-xr-xtests/t3000-resize-fs.sh156
-rwxr-xr-xtests/t3200-resize-partition.sh127
-rwxr-xr-xtests/t3200-type-change.sh73
-rwxr-xr-xtests/t3210-gpt-type-change.sh107
-rwxr-xr-xtests/t3300-palo-prep.sh44
-rw-r--r--tests/t3310-flags.sh134
-rwxr-xr-xtests/t3400-whole-disk-FAT-partition.sh32
-rwxr-xr-xtests/t4000-sun-raid-type.sh59
-rwxr-xr-xtests/t4001-sun-vtoc.sh52
-rwxr-xr-xtests/t4100-dvh-partition-limits.sh166
-rwxr-xr-xtests/t4100-msdos-partition-limits.sh152
-rwxr-xr-xtests/t4100-msdos-starting-sector.sh72
-rwxr-xr-xtests/t4200-partprobe.sh51
-rwxr-xr-xtests/t4300-nilfs2-tiny.sh32
-rwxr-xr-xtests/t4301-nilfs2-badsb2.sh43
-rwxr-xr-xtests/t4302-nilfs2-lessbadsb2.sh47
-rwxr-xr-xtests/t5000-tags.sh81
-rwxr-xr-xtests/t6000-dm.sh98
-rw-r--r--tests/t6001-psep.sh78
-rw-r--r--tests/t6002-dm-busy.sh92
-rw-r--r--tests/t6003-dm-hide.sh67
-rwxr-xr-xtests/t6004-dm-many-partitions.sh61
-rwxr-xr-xtests/t6005-dm-uuid.sh62
-rw-r--r--tests/t6006-dm-512b-sectors.sh70
-rwxr-xr-xtests/t6100-mdraid-partitions.sh69
-rwxr-xr-xtests/t7000-scripting.sh78
-rwxr-xr-xtests/t8000-loop.sh44
-rwxr-xr-xtests/t8001-loop-blkpg.sh62
-rwxr-xr-xtests/t9010-big-sector.sh41
-rwxr-xr-xtests/t9020-alignment.sh43
-rwxr-xr-xtests/t9021-maxima.sh75
-rw-r--r--tests/t9022-one-unit-snap.sh42
-rw-r--r--tests/t9023-value-lt-one.sh32
-rw-r--r--tests/t9024-msdos-1s-partition.sh36
-rw-r--r--tests/t9025-gpt-1s-partition.sh36
-rw-r--r--tests/t9030-align-check.sh56
-rw-r--r--tests/t9040-many-partitions.sh67
-rw-r--r--tests/t9041-undetected-in-use-16th-partition.sh99
-rw-r--r--tests/t9042-dos-partition-limit.sh74
-rwxr-xr-xtests/t9050-partition-table-types.sh57
-rwxr-xr-xtests/t9060-gpt-grow-script-fix.sh100
881 files changed, 435874 insertions, 0 deletions
diff --git a/.prev-version b/.prev-version
new file mode 100644
index 0000000..3f3ae45
--- /dev/null
+++ b/.prev-version
@@ -0,0 +1 @@
+3.5.28
diff --git a/.tarball-version b/.tarball-version
new file mode 100644
index 0000000..d70c8f8
--- /dev/null
+++ b/.tarball-version
@@ -0,0 +1 @@
+3.6
diff --git a/.version b/.version
new file mode 100644
index 0000000..d70c8f8
--- /dev/null
+++ b/.version
@@ -0,0 +1 @@
+3.6
diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..4f50fb5
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1327 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international! The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages. A few packages already provide translations for their
+messages.
+
+ If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site. But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+ Installers will find here some useful hints. These notes also
+explain how users should proceed for getting the programs to use the
+available translations. They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+ When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used. The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+ ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed. So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation. Future versions of GNU `gettext' will
+very likely convey even more functionality. So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+ So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language. Most such
+packages use GNU `gettext'. Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+ By default, this package will be installed to allow translation of
+messages. It will automatically detect whether the system already
+provides the GNU `gettext' functions. If not, the included GNU
+`gettext' library will be used. This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour. The commands:
+
+ ./configure --with-included-gettext
+ ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+ When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this. This might not be desirable. You should use
+the more recent version of the GNU `gettext' library. I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+ ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+ The configuration process will not test for the `catgets' function
+and therefore it will not be used. The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+ Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language. Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package. However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination. If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect. Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code. For example, let's
+suppose that you speak German and live in Germany. At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+ You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries. For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
+country code serves to distinguish the dialects.
+
+ The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc. On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+ Not all programs have translations for all languages. By default, an
+English message is shown in place of a nonexistent translation. If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries. For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+ Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003). During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+ In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect. For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list. The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+ If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended. For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+ subscribe
+
+ Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around. If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator@translationproject.org' to
+reach the coordinator for all translator teams.
+
+ The English team is special. It works at improving and uniformizing
+the terminology in use. Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages. The following
+matrix shows the current state of internationalization, as of May 2010.
+The matrix shows, in regard of each package, for which languages PO
+files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+ Ready PO files af am ar as ast az be be@latin bg bn_IN bs ca crh
+ +---------------------------------------------------+
+ a2ps | [] [] |
+ aegis | |
+ ant-phone | |
+ anubis | |
+ aspell | [] [] |
+ bash | |
+ bfd | |
+ bibshelf | [] |
+ binutils | |
+ bison | |
+ bison-runtime | [] |
+ bluez-pin | [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] [] |
+ cpio | |
+ cppi | |
+ cpplib | [] |
+ cryptsetup | |
+ dfarc | |
+ dialog | [] [] |
+ dico | |
+ diffutils | [] |
+ dink | |
+ doodle | |
+ e2fsprogs | [] |
+ enscript | [] |
+ exif | |
+ fetchmail | [] |
+ findutils | [] |
+ flex | [] |
+ freedink | |
+ gas | |
+ gawk | [] [] |
+ gcal | [] |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] [] [] |
+ gettext-tools | [] [] |
+ gip | [] |
+ gjay | |
+ gliv | [] |
+ glunarclock | [] [] |
+ gnubiff | |
+ gnucash | [] |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | |
+ gold | |
+ gpe-aerial | |
+ gpe-beam | |
+ gpe-bluetooth | |
+ gpe-calendar | |
+ gpe-clock | [] |
+ gpe-conf | |
+ gpe-contacts | |
+ gpe-edit | |
+ gpe-filemanager | |
+ gpe-go | |
+ gpe-login | |
+ gpe-ownerinfo | [] |
+ gpe-package | |
+ gpe-sketchbook | |
+ gpe-su | [] |
+ gpe-taskmanager | [] |
+ gpe-timesheet | [] |
+ gpe-today | [] |
+ gpe-todo | |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | [] [] |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] |
+ gst-plugins-base | [] |
+ gst-plugins-good | [] |
+ gst-plugins-ugly | [] |
+ gstreamer | [] [] [] |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] |
+ gutenprint | |
+ hello | [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | [] [] |
+ iso_15924 | |
+ iso_3166 | [] [] [] [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | |
+ iso_639 | [] [] [] [] [] |
+ iso_639_3 | [] |
+ jwhois | |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | |
+ ld | [] |
+ leafpad | [] [] |
+ libc | [] [] |
+ libexif | () |
+ libextractor | |
+ libgnutls | |
+ libgpewidget | |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | [] |
+ libidn | |
+ lifelines | |
+ liferea | [] [] |
+ lilypond | |
+ linkdr | [] |
+ lordsawar | |
+ lprng | |
+ lynx | [] |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | |
+ man-db | |
+ man-db-manpages | |
+ minicom | |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | |
+ psmisc | |
+ pspp | [] |
+ pwdutils | |
+ radius | [] |
+ recode | [] [] |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] |
+ sed | [] [] |
+ sharutils | [] [] |
+ shishi | |
+ skencil | |
+ solfege | |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | |
+ tar | [] |
+ texinfo | |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] [] |
+ wyslij-po | |
+ xchat | [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +---------------------------------------------------+
+ af am ar as ast az be be@latin bg bn_IN bs ca crh
+ 6 0 2 3 19 1 11 3 28 3 1 38 5
+
+ cs da de el en en_GB en_ZA eo es et eu fa fi
+ +-------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] () |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] [] [] |
+ bfd | [] [] |
+ bibshelf | [] [] [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] |
+ bombono-dvd | [] [] |
+ buzztard | [] [] [] |
+ cflow | [] [] [] |
+ clisp | [] [] [] [] |
+ coreutils | [] [] [] [] |
+ cpio | [] |
+ cppi | [] |
+ cpplib | [] [] [] |
+ cryptsetup | [] |
+ dfarc | [] [] [] [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] [] |
+ dink | [] [] [] |
+ doodle | [] |
+ e2fsprogs | [] [] [] |
+ enscript | [] [] [] |
+ exif | () [] [] [] |
+ fetchmail | [] [] () [] [] [] |
+ findutils | [] [] [] [] |
+ flex | [] [] [] |
+ freedink | [] [] [] [] |
+ gas | [] |
+ gawk | [] [] [] |
+ gcal | [] |
+ gcc | [] [] |
+ gettext-examples | [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] |
+ gip | [] [] [] [] [] |
+ gjay | [] [] |
+ gliv | [] [] [] [] |
+ glunarclock | [] [] [] |
+ gnubiff | () |
+ gnucash | [] () () () () () |
+ gnuedu | [] [] |
+ gnulib | [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] [] |
+ gpe-aerial | [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] |
+ gpe-bluetooth | [] [] [] |
+ gpe-calendar | [] [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] [] [] |
+ gpe-contacts | [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] [] |
+ gpe-go | [] [] [] [] [] |
+ gpe-login | [] [] [] |
+ gpe-ownerinfo | [] [] [] [] [] |
+ gpe-package | [] [] [] [] |
+ gpe-sketchbook | [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] |
+ gpe-todo | [] [] [] [] |
+ gphoto2 | [] [] () [] [] [] [] |
+ gprof | [] [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] [] |
+ grub | [] [] [] |
+ gsasl | [] [] |
+ gss | [] |
+ gst-plugins-bad | [] [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] [] |
+ gtick | [] () [] [] |
+ gtkam | [] [] () [] [] |
+ gtkorphan | [] [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] [] |
+ hello | [] [] [] [] [] |
+ help2man | [] [] |
+ hylafax | [] [] |
+ idutils | [] [] [] |
+ indent | [] [] [] [] [] [] [] [] |
+ iso_15924 | [] () [] [] [] |
+ iso_3166 | [] [] [] () [] [] [] () [] |
+ iso_3166_2 | () |
+ iso_4217 | [] [] [] () [] [] [] |
+ iso_639 | [] [] [] () [] [] [] |
+ iso_639_3 | |
+ jwhois | [] [] |
+ kbd | [] [] [] [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] [] [] |
+ keytouch-keyboa... | [] [] |
+ klavaro | [] [] [] [] |
+ latrine | [] () [] |
+ ld | [] [] [] |
+ leafpad | [] [] [] [] [] [] [] |
+ libc | [] [] [] [] [] |
+ libexif | [] [] () |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] () |
+ libgphoto2_port | [] () [] |
+ libgsasl | [] |
+ libiconv | [] [] [] [] [] [] |
+ libidn | [] [] [] [] |
+ lifelines | [] () |
+ liferea | [] [] [] [] [] |
+ lilypond | [] [] [] [] |
+ linkdr | [] [] [] [] |
+ lordsawar | [] |
+ lprng | |
+ lynx | [] [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | |
+ mailutils | [] |
+ make | [] [] [] [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] [] [] [] [] |
+ mkisofs | [] |
+ myserver | |
+ nano | [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] |
+ pies | |
+ popt | [] [] [] [] [] [] |
+ psmisc | [] [] [] [] |
+ pspp | [] |
+ pwdutils | [] |
+ radius | [] |
+ recode | [] [] [] [] [] [] [] |
+ rosegarden | () () () () |
+ rpm | [] [] [] |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] |
+ shishi | |
+ skencil | [] () [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] [] |
+ sp | [] |
+ sysstat | [] [] [] [] |
+ tar | [] [] [] [] [] |
+ texinfo | [] [] [] |
+ tin | [] [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] [] |
+ vice | () () |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] [] |
+ wget | [] [] [] [] |
+ wyslij-po | [] |
+ xchat | [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] [] |
+ +-------------------------------------------------+
+ cs da de el en en_GB en_ZA eo es et eu fa fi
+ 64 105 117 18 1 8 0 28 89 18 19 0 104
+
+ fr ga gl gu he hi hr hu hy id is it ja ka kn
+ +------------------------------------------------+
+ a2ps | [] [] [] |
+ aegis | [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] |
+ bash | [] [] [] |
+ bfd | [] [] |
+ bibshelf | [] [] [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] |
+ bombono-dvd | |
+ buzztard | [] |
+ cflow | [] [] |
+ clisp | [] |
+ coreutils | [] [] [] [] [] |
+ cpio | [] [] [] |
+ cppi | [] |
+ cpplib | [] [] |
+ cryptsetup | [] [] [] |
+ dfarc | [] [] |
+ dialog | [] [] [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] [] [] [] [] [] [] |
+ dink | [] |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] |
+ exif | [] [] [] [] [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] |
+ freedink | [] [] |
+ gas | [] [] |
+ gawk | [] [] [] [] () [] |
+ gcal | [] |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] |
+ gettext-tools | [] [] [] [] |
+ gip | [] [] [] [] [] |
+ gjay | |
+ gliv | () |
+ glunarclock | [] [] [] |
+ gnubiff | () [] () |
+ gnucash | () () () () [] |
+ gnuedu | [] [] |
+ gnulib | [] [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | [] |
+ gnutls | [] [] |
+ gold | [] |
+ gpe-aerial | [] [] |
+ gpe-beam | [] [] [] |
+ gpe-bluetooth | [] [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] |
+ gpe-conf | [] [] [] |
+ gpe-contacts | [] [] [] |
+ gpe-edit | [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] |
+ gpe-su | [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] |
+ gpe-timesheet | [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] [] |
+ gramadoir | [] [] [] |
+ grep | [] |
+ grub | [] [] [] |
+ gsasl | [] [] [] [] |
+ gss | [] [] [] [] |
+ gst-plugins-bad | [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | [] [] [] [] |
+ gtick | [] [] [] [] |
+ gtkam | [] [] [] [] [] |
+ gtkorphan | [] [] [] |
+ gtkspell | [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] [] |
+ hello | [] [] |
+ help2man | [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | () [] [] |
+ iso_3166 | () [] [] [] [] [] [] [] [] [] [] |
+ iso_3166_2 | () [] [] [] |
+ iso_4217 | () [] [] [] [] |
+ iso_639 | () [] [] [] [] [] [] [] |
+ iso_639_3 | () [] [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] |
+ keytouch | [] [] [] [] [] |
+ keytouch-editor | [] [] [] [] |
+ keytouch-keyboa... | [] [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] |
+ ld | [] [] [] |
+ leafpad | [] [] [] [] [] [] () |
+ libc | [] [] [] [] |
+ libexif | |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] [] |
+ libgphoto2_port | [] [] [] |
+ libgsasl | [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] [] |
+ lifelines | () |
+ liferea | [] [] [] [] |
+ lilypond | [] |
+ linkdr | [] [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | |
+ mailutils | [] [] |
+ make | [] [] [] [] [] [] [] [] |
+ man-db | [] [] |
+ man-db-manpages | [] |
+ minicom | [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | |
+ nano | [] [] [] [] [] |
+ opcodes | [] [] [] |
+ parted | [] [] [] [] |
+ pies | |
+ popt | [] [] [] [] [] [] [] [] |
+ psmisc | [] [] |
+ pspp | |
+ pwdutils | [] [] |
+ radius | [] [] |
+ recode | [] [] [] [] [] [] [] |
+ rosegarden | () () () () |
+ rpm | [] [] |
+ rush | |
+ sarg | [] |
+ screem | [] [] |
+ scrollkeeper | [] [] [] |
+ sed | [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] [] [] |
+ shishi | [] |
+ skencil | [] |
+ solfege | [] [] [] |
+ solfege-manual | [] [] |
+ soundtracker | [] [] |
+ sp | [] () |
+ sysstat | [] [] [] [] |
+ tar | [] [] [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | [] [] |
+ util-linux-ng | [] [] [] [] [] |
+ vice | () () () |
+ vmm | [] |
+ vorbis-tools | [] |
+ wastesedge | () () |
+ wdiff | |
+ wget | [] [] [] [] [] [] [] |
+ wyslij-po | [] [] |
+ xchat | [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] |
+ +------------------------------------------------+
+ fr ga gl gu he hi hr hu hy id is it ja ka kn
+ 121 53 20 4 8 2 5 53 2 120 5 83 66 0 4
+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ +-----------------------------------------------+
+ a2ps | [] |
+ aegis | |
+ ant-phone | |
+ anubis | [] [] |
+ aspell | [] |
+ bash | |
+ bfd | |
+ bibshelf | [] [] |
+ binutils | |
+ bison | [] |
+ bison-runtime | [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] |
+ bombono-dvd | |
+ buzztard | |
+ cflow | |
+ clisp | |
+ coreutils | [] |
+ cpio | |
+ cppi | |
+ cpplib | |
+ cryptsetup | |
+ dfarc | [] |
+ dialog | [] [] [] [] [] |
+ dico | |
+ diffutils | [] [] |
+ dink | |
+ doodle | |
+ e2fsprogs | |
+ enscript | |
+ exif | [] |
+ fetchmail | |
+ findutils | |
+ flex | |
+ freedink | [] |
+ gas | |
+ gawk | |
+ gcal | |
+ gcc | |
+ gettext-examples | [] [] [] [] |
+ gettext-runtime | [] |
+ gettext-tools | [] |
+ gip | [] [] |
+ gjay | |
+ gliv | |
+ glunarclock | [] |
+ gnubiff | |
+ gnucash | () () () () |
+ gnuedu | |
+ gnulib | |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] |
+ gold | |
+ gpe-aerial | [] |
+ gpe-beam | [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] |
+ gpe-clock | [] [] [] [] [] |
+ gpe-conf | [] [] |
+ gpe-contacts | [] [] |
+ gpe-edit | [] |
+ gpe-filemanager | [] [] |
+ gpe-go | [] [] [] |
+ gpe-login | [] |
+ gpe-ownerinfo | [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] |
+ gpe-su | [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] |
+ gpe-timesheet | [] [] |
+ gpe-today | [] [] [] [] |
+ gpe-todo | [] [] |
+ gphoto2 | |
+ gprof | [] |
+ gpsdrive | |
+ gramadoir | |
+ grep | |
+ grub | |
+ gsasl | |
+ gss | |
+ gst-plugins-bad | [] [] |
+ gst-plugins-base | [] [] |
+ gst-plugins-good | [] [] |
+ gst-plugins-ugly | [] [] [] [] [] |
+ gstreamer | |
+ gtick | |
+ gtkam | [] |
+ gtkorphan | [] [] |
+ gtkspell | [] [] [] [] [] [] [] |
+ gutenprint | |
+ hello | [] [] [] |
+ help2man | |
+ hylafax | |
+ idutils | |
+ indent | |
+ iso_15924 | [] [] |
+ iso_3166 | [] [] () [] [] [] [] [] |
+ iso_3166_2 | |
+ iso_4217 | [] [] |
+ iso_639 | [] [] |
+ iso_639_3 | [] |
+ jwhois | [] |
+ kbd | |
+ keytouch | [] |
+ keytouch-editor | [] |
+ keytouch-keyboa... | [] |
+ klavaro | [] |
+ latrine | [] |
+ ld | |
+ leafpad | [] [] [] |
+ libc | [] |
+ libexif | |
+ libextractor | |
+ libgnutls | [] |
+ libgpewidget | [] [] |
+ libgpg-error | |
+ libgphoto2 | |
+ libgphoto2_port | |
+ libgsasl | |
+ libiconv | |
+ libidn | |
+ lifelines | |
+ liferea | |
+ lilypond | |
+ linkdr | |
+ lordsawar | |
+ lprng | |
+ lynx | |
+ m4 | |
+ mailfromd | |
+ mailutils | |
+ make | [] |
+ man-db | |
+ man-db-manpages | |
+ minicom | [] |
+ mkisofs | |
+ myserver | |
+ nano | [] [] |
+ opcodes | |
+ parted | |
+ pies | |
+ popt | [] [] [] |
+ psmisc | |
+ pspp | |
+ pwdutils | |
+ radius | |
+ recode | |
+ rosegarden | |
+ rpm | |
+ rush | |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] |
+ sed | |
+ sharutils | |
+ shishi | |
+ skencil | |
+ solfege | [] |
+ solfege-manual | |
+ soundtracker | |
+ sp | |
+ sysstat | [] |
+ tar | [] |
+ texinfo | [] |
+ tin | |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | |
+ vice | |
+ vmm | |
+ vorbis-tools | |
+ wastesedge | |
+ wdiff | |
+ wget | [] |
+ wyslij-po | |
+ xchat | [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] |
+ +-----------------------------------------------+
+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+ 20 5 10 1 12 48 4 2 2 4 24 10 19 3 1
+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] [] [] [] |
+ aegis | [] [] [] |
+ ant-phone | [] [] |
+ anubis | [] [] [] |
+ aspell | [] [] [] [] [] |
+ bash | [] [] |
+ bfd | [] |
+ bibshelf | [] [] |
+ binutils | [] [] |
+ bison | [] [] [] |
+ bison-runtime | [] [] [] [] [] [] [] |
+ bluez-pin | [] [] [] [] [] [] [] [] |
+ bombono-dvd | [] () |
+ buzztard | [] [] |
+ cflow | [] |
+ clisp | [] [] |
+ coreutils | [] [] [] [] [] [] |
+ cpio | [] [] [] |
+ cppi | [] |
+ cpplib | [] |
+ cryptsetup | [] |
+ dfarc | [] |
+ dialog | [] [] [] [] |
+ dico | [] |
+ diffutils | [] [] [] [] [] [] |
+ dink | () |
+ doodle | [] [] |
+ e2fsprogs | [] [] |
+ enscript | [] [] [] [] [] |
+ exif | [] [] [] () [] |
+ fetchmail | [] [] [] [] |
+ findutils | [] [] [] [] [] |
+ flex | [] [] [] [] [] |
+ freedink | [] [] |
+ gas | |
+ gawk | [] [] [] [] |
+ gcal | |
+ gcc | [] |
+ gettext-examples | [] [] [] [] [] [] [] [] |
+ gettext-runtime | [] [] [] [] [] [] [] [] [] |
+ gettext-tools | [] [] [] [] [] [] |
+ gip | [] [] [] [] [] |
+ gjay | |
+ gliv | [] [] [] [] [] [] |
+ glunarclock | [] [] [] [] [] |
+ gnubiff | [] () |
+ gnucash | [] () () () |
+ gnuedu | [] |
+ gnulib | [] [] [] [] |
+ gnunet | |
+ gnunet-gtk | |
+ gnutls | [] [] |
+ gold | |
+ gpe-aerial | [] [] [] [] [] [] [] |
+ gpe-beam | [] [] [] [] [] [] [] |
+ gpe-bluetooth | [] [] |
+ gpe-calendar | [] [] [] [] |
+ gpe-clock | [] [] [] [] [] [] [] [] |
+ gpe-conf | [] [] [] [] [] [] [] |
+ gpe-contacts | [] [] [] [] [] |
+ gpe-edit | [] [] [] |
+ gpe-filemanager | [] [] [] |
+ gpe-go | [] [] [] [] [] [] [] [] |
+ gpe-login | [] [] |
+ gpe-ownerinfo | [] [] [] [] [] [] [] [] |
+ gpe-package | [] [] |
+ gpe-sketchbook | [] [] [] [] [] [] [] |
+ gpe-su | [] [] [] [] [] [] [] [] |
+ gpe-taskmanager | [] [] [] [] [] [] [] [] |
+ gpe-timesheet | [] [] [] [] [] [] [] [] |
+ gpe-today | [] [] [] [] [] [] [] [] |
+ gpe-todo | [] [] [] [] [] |
+ gphoto2 | [] [] [] [] [] [] [] [] |
+ gprof | [] [] [] |
+ gpsdrive | [] [] |
+ gramadoir | [] [] |
+ grep | [] [] [] [] |
+ grub | [] [] [] |
+ gsasl | [] [] [] [] |
+ gss | [] [] [] |
+ gst-plugins-bad | [] [] [] [] [] |
+ gst-plugins-base | [] [] [] [] [] |
+ gst-plugins-good | [] [] [] [] [] |
+ gst-plugins-ugly | [] [] [] [] [] [] |
+ gstreamer | [] [] [] [] [] |
+ gtick | [] [] [] |
+ gtkam | [] [] [] [] [] [] |
+ gtkorphan | [] |
+ gtkspell | [] [] [] [] [] [] [] [] [] [] |
+ gutenprint | [] [] |
+ hello | [] [] [] [] |
+ help2man | [] [] |
+ hylafax | [] |
+ idutils | [] [] [] [] [] |
+ indent | [] [] [] [] [] [] [] |
+ iso_15924 | [] [] [] [] |
+ iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] |
+ iso_3166_2 | [] [] [] |
+ iso_4217 | [] [] [] [] [] [] [] [] |
+ iso_639 | [] [] [] [] [] [] [] [] [] |
+ iso_639_3 | [] [] |
+ jwhois | [] [] [] [] |
+ kbd | [] [] [] |
+ keytouch | [] [] [] |
+ keytouch-editor | [] [] [] |
+ keytouch-keyboa... | [] [] [] |
+ klavaro | [] [] |
+ latrine | [] [] |
+ ld | |
+ leafpad | [] [] [] [] [] [] [] [] [] |
+ libc | [] [] [] [] |
+ libexif | [] [] () [] |
+ libextractor | |
+ libgnutls | [] [] |
+ libgpewidget | [] [] [] |
+ libgpg-error | [] [] |
+ libgphoto2 | [] [] |
+ libgphoto2_port | [] [] [] [] |
+ libgsasl | [] [] [] [] [] |
+ libiconv | [] [] [] [] [] |
+ libidn | [] [] |
+ lifelines | [] [] |
+ liferea | [] [] [] [] [] () () [] |
+ lilypond | [] |
+ linkdr | [] [] [] |
+ lordsawar | |
+ lprng | [] |
+ lynx | [] [] [] |
+ m4 | [] [] [] [] [] |
+ mailfromd | [] |
+ mailutils | [] |
+ make | [] [] [] [] |
+ man-db | [] [] [] |
+ man-db-manpages | [] [] [] |
+ minicom | [] [] [] [] |
+ mkisofs | [] [] [] |
+ myserver | |
+ nano | [] [] [] [] |
+ opcodes | [] [] |
+ parted | [] [] [] [] |
+ pies | [] |
+ popt | [] [] [] [] |
+ psmisc | [] [] [] |
+ pspp | [] [] |
+ pwdutils | [] |
+ radius | [] [] [] |
+ recode | [] [] [] [] [] [] [] [] |
+ rosegarden | () () |
+ rpm | [] [] [] |
+ rush | [] [] |
+ sarg | |
+ screem | |
+ scrollkeeper | [] [] [] [] [] [] [] [] |
+ sed | [] [] [] [] [] [] [] [] [] |
+ sharutils | [] [] [] [] |
+ shishi | [] |
+ skencil | [] [] |
+ solfege | [] [] [] [] |
+ solfege-manual | [] [] [] |
+ soundtracker | [] |
+ sp | |
+ sysstat | [] [] [] [] |
+ tar | [] [] [] [] |
+ texinfo | [] [] [] [] |
+ tin | [] |
+ unicode-han-tra... | |
+ unicode-transla... | |
+ util-linux-ng | [] [] [] [] [] |
+ vice | [] |
+ vmm | [] |
+ vorbis-tools | [] [] |
+ wastesedge | [] |
+ wdiff | [] [] |
+ wget | [] [] [] [] [] [] [] |
+ wyslij-po | [] [] [] |
+ xchat | [] [] [] [] [] [] [] [] [] |
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
+ xkeyboard-config | [] [] [] [] [] |
+ +---------------------------------------------------+
+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+ 135 10 4 7 105 1 29 61 47 91 3 55 47 8 37
+
+ sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ +---------------------------------------------------+
+ a2ps | [] [] [] [] [] | 27
+ aegis | [] | 9
+ ant-phone | [] [] [] [] | 9
+ anubis | [] [] [] [] | 15
+ aspell | [] [] [] | 20
+ bash | [] [] | 11
+ bfd | [] | 6
+ bibshelf | [] [] [] | 16
+ binutils | [] [] | 8
+ bison | [] [] | 12
+ bison-runtime | [] [] [] [] [] [] | 29
+ bluez-pin | [] [] [] [] [] [] [] [] | 37
+ bombono-dvd | [] | 4
+ buzztard | [] | 7
+ cflow | [] [] [] | 9
+ clisp | | 10
+ coreutils | [] [] [] [] | 22
+ cpio | [] [] [] [] [] [] | 13
+ cppi | [] [] | 5
+ cpplib | [] [] [] [] [] [] | 13
+ cryptsetup | [] [] | 7
+ dfarc | [] | 9
+ dialog | [] [] [] [] [] [] [] | 30
+ dico | [] | 2
+ diffutils | [] [] [] [] [] [] | 30
+ dink | | 4
+ doodle | [] [] | 7
+ e2fsprogs | [] [] [] | 11
+ enscript | [] [] [] [] | 17
+ exif | [] [] [] | 16
+ fetchmail | [] [] [] | 17
+ findutils | [] [] [] [] [] | 20
+ flex | [] [] [] [] | 15
+ freedink | [] | 10
+ gas | [] | 4
+ gawk | [] [] [] [] | 18
+ gcal | [] [] | 5
+ gcc | [] [] [] | 7
+ gettext-examples | [] [] [] [] [] [] [] | 34
+ gettext-runtime | [] [] [] [] [] [] [] | 30
+ gettext-tools | [] [] [] [] [] [] | 22
+ gip | [] [] [] [] | 22
+ gjay | [] | 3
+ gliv | [] [] [] | 14
+ glunarclock | [] [] [] [] [] | 19
+ gnubiff | [] [] | 4
+ gnucash | () [] () () | 9
+ gnuedu | [] [] | 7
+ gnulib | [] [] [] [] | 16
+ gnunet | [] | 1
+ gnunet-gtk | [] [] [] | 5
+ gnutls | [] [] [] | 10
+ gold | [] | 4
+ gpe-aerial | [] [] [] | 18
+ gpe-beam | [] [] [] | 19
+ gpe-bluetooth | [] [] [] | 13
+ gpe-calendar | [] [] [] [] | 12
+ gpe-clock | [] [] [] [] [] | 28
+ gpe-conf | [] [] [] [] | 20
+ gpe-contacts | [] [] [] | 17
+ gpe-edit | [] [] [] | 12
+ gpe-filemanager | [] [] [] [] | 16
+ gpe-go | [] [] [] [] [] | 25
+ gpe-login | [] [] [] | 11
+ gpe-ownerinfo | [] [] [] [] [] | 25
+ gpe-package | [] [] [] | 13
+ gpe-sketchbook | [] [] [] | 20
+ gpe-su | [] [] [] [] [] | 30
+ gpe-taskmanager | [] [] [] [] [] | 29
+ gpe-timesheet | [] [] [] [] [] | 25
+ gpe-today | [] [] [] [] [] [] | 30
+ gpe-todo | [] [] [] [] | 17
+ gphoto2 | [] [] [] [] [] | 24
+ gprof | [] [] [] | 15
+ gpsdrive | [] [] [] | 11
+ gramadoir | [] [] [] | 11
+ grep | [] [] [] | 10
+ grub | [] [] [] | 14
+ gsasl | [] [] [] [] | 14
+ gss | [] [] [] | 11
+ gst-plugins-bad | [] [] [] [] | 22
+ gst-plugins-base | [] [] [] [] [] | 24
+ gst-plugins-good | [] [] [] [] [] | 25
+ gst-plugins-ugly | [] [] [] [] [] | 29
+ gstreamer | [] [] [] [] | 22
+ gtick | [] [] [] | 13
+ gtkam | [] [] [] | 20
+ gtkorphan | [] [] [] | 14
+ gtkspell | [] [] [] [] [] [] [] [] [] | 45
+ gutenprint | [] | 10
+ hello | [] [] [] [] [] [] | 21
+ help2man | [] [] | 7
+ hylafax | [] | 5
+ idutils | [] [] [] [] | 17
+ indent | [] [] [] [] [] [] | 30
+ iso_15924 | () [] () [] [] | 16
+ iso_3166 | [] [] () [] [] () [] [] [] () | 53
+ iso_3166_2 | () [] () [] | 9
+ iso_4217 | [] () [] [] () [] [] | 26
+ iso_639 | [] [] [] () [] () [] [] [] [] | 38
+ iso_639_3 | [] () | 8
+ jwhois | [] [] [] [] [] | 16
+ kbd | [] [] [] [] [] | 15
+ keytouch | [] [] [] | 16
+ keytouch-editor | [] [] [] | 14
+ keytouch-keyboa... | [] [] [] | 14
+ klavaro | [] | 11
+ latrine | [] [] [] | 10
+ ld | [] [] [] [] | 11
+ leafpad | [] [] [] [] [] [] | 33
+ libc | [] [] [] [] [] | 21
+ libexif | [] () | 6
+ libextractor | [] | 1
+ libgnutls | [] [] [] | 9
+ libgpewidget | [] [] [] | 14
+ libgpg-error | [] [] [] | 9
+ libgphoto2 | [] [] | 8
+ libgphoto2_port | [] [] [] [] | 13
+ libgsasl | [] [] [] | 13
+ libiconv | [] [] [] [] | 21
+ libidn | () [] [] | 11
+ lifelines | [] | 4
+ liferea | [] [] [] | 21
+ lilypond | [] | 7
+ linkdr | [] [] [] [] [] | 17
+ lordsawar | | 1
+ lprng | [] | 3
+ lynx | [] [] [] [] | 17
+ m4 | [] [] [] [] | 19
+ mailfromd | [] [] | 3
+ mailutils | [] | 5
+ make | [] [] [] [] | 21
+ man-db | [] [] [] | 8
+ man-db-manpages | | 4
+ minicom | [] [] | 16
+ mkisofs | [] [] | 9
+ myserver | | 0
+ nano | [] [] [] [] | 21
+ opcodes | [] [] [] | 11
+ parted | [] [] [] [] [] | 15
+ pies | [] [] | 3
+ popt | [] [] [] [] [] [] | 27
+ psmisc | [] [] | 11
+ pspp | | 4
+ pwdutils | [] [] | 6
+ radius | [] [] | 9
+ recode | [] [] [] [] | 28
+ rosegarden | () | 0
+ rpm | [] [] [] | 11
+ rush | [] [] | 4
+ sarg | | 1
+ screem | [] | 3
+ scrollkeeper | [] [] [] [] [] | 27
+ sed | [] [] [] [] [] | 30
+ sharutils | [] [] [] [] [] | 22
+ shishi | [] | 3
+ skencil | [] [] | 7
+ solfege | [] [] [] [] | 16
+ solfege-manual | [] | 8
+ soundtracker | [] [] [] | 9
+ sp | [] | 3
+ sysstat | [] [] | 15
+ tar | [] [] [] [] [] [] | 23
+ texinfo | [] [] [] [] | 16
+ tin | | 4
+ unicode-han-tra... | | 0
+ unicode-transla... | | 2
+ util-linux-ng | [] [] [] [] | 20
+ vice | () () | 1
+ vmm | [] | 4
+ vorbis-tools | [] | 6
+ wastesedge | | 2
+ wdiff | [] [] | 7
+ wget | [] [] [] [] [] | 26
+ wyslij-po | [] [] | 8
+ xchat | [] [] [] [] [] [] | 36
+ xdg-user-dirs | [] [] [] [] [] [] [] [] [] | 60
+ xkeyboard-config | [] [] [] [] | 25
+ +---------------------------------------------------+
+ 84 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+ 178 domains 119 1 3 2 0 10 66 50 155 17 97 7 41 2610
+
+ Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect. This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+ For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer. There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+ If May 2010 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
+matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package. Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library. This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+ Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations. The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project. Therefore the information given above
+applies also for every other Free Software Project. Contact
+`coordinator@translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..530a28b
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,236 @@
+This file is part of GNU Parted
+Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+ Free Software Foundation Inc.
+
+This file may be modified and/or distributed without restriction. This is
+not an invitation to misrepresent who contributed to GNU Parted.
+
+-------------------------------------------------------------------------------
+
+We need to keep track of copyright (see the Maintainer HOWTO on www.gnu.org).
+
+
+Leslie Patrick Polzer <polzer@gnu.org>
+ * parts of 1.6.24 PedUnit API
+ * GPT pth_* functions and block size fixes
+ * PED_SECTOR_SIZE -> PED_SECTOR_SIZE_DEFAULT
+ * debugging framework
+ * ext2 "strange layout" fix (experimental)
+ * support for physical block sizes
+ * SCO BFS support
+
+ http://nic-nac-project.de/~skypher/
+
+ Snail Mail:
+ Am Kirchberg 15
+ 89537 Giengen
+ Germany
+
+Andrew Clausen <clausen@gnu.org>
+ * all FAT code (libparted/fs_fat)
+ * all linux-swap code (libparted/fs_linux_swap)
+ * some reiserfs glue code (libparted/fs_reiserfs) with Umanets
+ * most of the API (with lots of discussion with Lennert Buytenhek)
+ (include/parted/*)
+ * generic filesystem code (filesys.c) and device code (device.c)
+ * exception code (exception.c, debug.c)
+ * partition table code (disk.c)
+ * dos partition support (disk_dos.c)
+ * mac partition support (disk_mac.c)
+ * mips partition support (disk_mips.c)
+ * loopback support (disk_loop.c)
+ * some of the PC98 code (disk_pc98.c), with Masahiro Sakai.
+ * misc. hacking on all disk_*.c code
+ * low-level I/O code (device.c, geom.c, linux.c)
+ - init_scsi() stolen from gnome-gfdisk via Matt Wilson.
+ * constraint solver (natmath.c, constraint.c)
+ * command-line, and fdisk-like frontend (parted/*)
+ * stubs for ntfs, hfs, xfs
+ * hacked on libparted/fs_ext2 a fair bit (bug fixes, error handling,
+ support for > 1024 groups, etc.)
+ * libparted/mbr.s (the MBR boot loader code)
+ * misc hacking on GNU/Hurd port
+ * major surgery on GUID Partition Table (GPT) support (disk_gpt.[ch])
+ * progress meter support (libparted/timer.c include/parted/timer.h)
+
+ Snail mail:
+ 18 Shaw St
+ Ashwood, 3147
+ Australia
+
+Lennert Buytenhek <buytenh@gnu.org>
+ * original ext2 code (libparted/fs_ext2)
+ * discussion/ideas for API
+
+Matthew Wilson <msw@redhat.com>
+ * basis of partition table and device code (disk.c, disk_dos.c,
+ and device.c) Has morphed into something that looks completely
+ different now :-)
+ * bug fixes
+ * BSD disklabel support (disk_bsd.c)
+ * Python bindings to libparted
+ * Don't detect AIX physical volumes as msdos partition tables
+ * Code for manipulating AIX PVs
+
+Martin von Löwis <martin@mira.isdn.cs.tu-berlin.de>
+ * German translations
+
+Baty Jean-Marc <baty@club-internet.fr>
+ * French translations
+
+Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp>
+ * Japanese translations
+
+Eliphas Levy Theodoro <eliphas@conectiva.com>
+ * Brazillian Portugese translations
+
+Dmitry S. Sivachenko <dima@Chg.RU>
+ * Russian translations
+
+Timshel Knoll <timshel@pobox.com>
+ * man pages (parted.8 partprobe.8)
+ * bug fixes
+
+Ivo Timmermans <itimmermans@bigfoot.com>
+ * Dutch translations
+
+Ryoji Kawagishi <kawagisi@yk.rim.or.jp>
+ * Japanese translation of doc/USER (user documentation)
+ (replaced by Okuji's version, now)
+
+Okuji Yoshinori <okuji@kuicr.kyoto-a.ac.jp>
+ * doc/USER.jp
+ * contributions to Japanese translations
+
+Masahiro Sakai <ZVM01052@nifty.ne.jp>
+ * most of the PC98 support (disk_pc98.c), with Andrew Clausen
+ * lots of tedious work on parted/strlist.c
+
+Damien Genet <damien.genet@free.fr>
+ * parted.m4
+
+Ben Collins <bcollins@debian.org>
+ * Sun disk label support (libparted/disk_sun.c)
+ * stubs for UFS
+
+Vincent Stelhé <vincent.stelhe@free.fr>
+ * move syntax patch (make END specification optional). Trivial
+ for copyright purposes (no disclaimer needed)
+
+Neal H Walfield <neal@cs.uml.edu>
+ * GNU/Hurd port - libparted/gnu.c
+
+Thomas Roelz <tom@suse.de>
+ * misc bug fixes
+
+Matt Domsch <Matt_Domsch@dell.com>
+ * GUID Partition Table (GPT) support (disk_gpt.[ch],
+ crc32.[ch])
+ * misc bug fixes, including end-of-device workaround
+ in libparted/linux.c
+
+Kjetil Torgrim Homme <kjetilho@linpro.no>
+ * Norweigen translations
+
+Jörgen Tegnér <jorgen.tegner@telia.com>
+ * Swedish translations
+
+Keld Simonsen <keld@dkuug.dk>
+ * Danish translations
+
+Richard M. Kreuter <kreuter@ausar.rutgers.edu>
+ * converted doc/USER to texinfo (doc/parted.texi)
+
+Miquel Matas <miquelmatas@wanadoo.es>
+ * Catalan translations
+
+Andreas Dilger <adilger@clusterfs.com>
+ * lots of mix bug fixes/cleanups
+
+Vicente E. Llorens <vllorens@mundofree.com>
+ * Spanish translations
+
+Yury Umanets <torque@ukrpost.net>
+ * basis of libparted/fs_reiserfs
+
+Bernardo João Torres da Silveira
+ <bernardojts@ig.com.br>
+ * pt_BR translation of FAQ and parted.texi
+
+Wojciech Polak <polak@gnu.org>
+ * Polish translations
+
+Miloslav Trmac <mitr@volny.cz>
+ * Czech translations
+
+Maxim V. Dziumanenko <mvd@mylinux.com.ua>
+ * Ukrainian translations
+
+Giuseppe Sacco <eppesuig@debian.org>
+ * Italian translations
+
+Guillaume Knispel <k_guillaume@libertysurf.fr>
+ * nearly all hfs and hfs+ code (libparted/fs_hfs)
+ * hfs+ support for mac partitions (disk_mac.c)
+ * sync_fast code (linux.c gnu.c geom.[ch] device.[ch] )
+ * various fixes (parted.c ui.c filesys.c disk_dos.c disk.c
+ doc/parted.texi doc/API disk_gpt.c disk_mac.c unit.c fs_fat/traverse.c)
+
+Chris Lumens <clumens@redhat.com>
+ * interactive help fixes for filesystem types
+ * gcc-4 pedanticism cleanups
+
+Wei-Lun Chao <chaoweilun@pcmail.com.tw>
+ * Taiwanese dialect of Chinese (Cantonese?) translations.
+
+Tran Thi Hoang Quyen <banhdauxanhhaiduong@gmail.com>
+ * Vietnamese translations
+
+Eduardo Maestri Righes <eduardo@tteng.com.br>
+ * hidden partitions support
+ * setting MS Reserved partitions through "set" command.
+
+Arif E. Nugroho <arif_endro@yahoo.com>
+ * Indonesian translations
+
+Ithamar R. Adema <ithamar@unet.nl>
+ * BeOS support
+
+David Cantrell <dcantrell@redhat.com>
+ * Added support for Promise SX8 devices (original patch from Jeremy
+ Katz <katzj@redhat.com>)
+ * Brought IBM/Red Hat DASD patches forward to parted-1.7.x
+ Original IBM authors: Volker Sameske <sameske@de.ibm.com>
+ Horst Hummel <Horst.Hummel@de.ibm.com>
+ Original Red Hat authors: Phil Knirsch <phil@redhat.de>
+ Harald Hoyer <harald@redhat.de>
+ * Prevent SIGFPE when FAT sector size is 0
+ * Add virtual DASD (VIODASD) on iSeries support
+ * Use O_DIRECT I/O to prevent first partition corruption on GPT disks
+ * Prevent sector reading exceptions from ped_geometry_check() on Mac
+ disklabels.
+ * Various bug fixes and other things.
+
+Peter Jones <pjones@redhat.com>
+ * Add ped_exception_get_handler()
+ * /dev/mapper read/write support on Linux (via libdevmapper)
+
+Darren Lavender <dl1@hppine99.gbr.hp.com>
+ * Fix SIGSEGV in parted 1.6.19 and assertion error in 1.7.0
+ * Add support for LUN/device resize detection and option GPT
+ header corruption
+ * Fixed off-by-one error in GPT header that allowed for overlap
+ between LDAs of LastUsableLBA and PartitionEntryLBA in backup GPT
+
+Olaf Hering <olh@suse.de>
+ * Fixes for Macintosh disk label code
+
+Debarshi Ray <rishi@gnu.org>
+ * Display disk model and transport type in parted(8).
+ * '--list/-l' command line switch.
+ * Introduce 'print devices' and alias 'print list' to 'print all'.
+ * Alias 'mktable' to 'mklabel'.
+ * Code and API clean-up, bug fixes, and other miscellaneous stuff.
+
+Harald Welte <laforge@gnumonks.org>
+ * SD/MMC Storage card support on Linux
diff --git a/BUGS b/BUGS
new file mode 100644
index 0000000..8223300
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,6 @@
+
+Please see the FAQ (available on the web site at
+http://www.gnu.org/software/parted/) for common bugs from the past
+and http://alioth.debian.org/parted/ for a bug tracker.
+
+=======================================================================
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..24afbe2
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,675 @@
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..a2aaa27
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,12187 @@
+2023-04-10 Brian C. Lane <bcl@redhat.com>
+
+ version 3.6
+ * NEWS: Record release date.
+
+ NEWS: Releasing stable version 3.6
+
+2023-03-24 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.5.28
+ * NEWS: Record release date.
+
+ NEWS: Update news
+
+ tests: Fix syntax-check warning about grep -q
+
+ maint: Update copyright statements to 2022
+ By running make update-copyright
+
+ maint: Bump library REVISION number for release
+
+ maint: Update README-release
+
+ maint: Update to latest gnulib and bootstrap script
+
+2023-03-17 Brian C. Lane <bcl@redhat.com>
+
+ parted: Fix ending sector location when using kibi IEC suffix
+ This fixes a bug when using KiB to specify the ending location of a
+ partition. It was not subtracting 1s like it does with the other units
+ because it was looking for a 'k' not a 'K'.
+
+ This also fixes a quirk of the suffix checking code, it would check for
+ matching case, but converting to the actual IEC value was case
+ insensitive. This now uses common functions for the matching so that
+ case doesn't matter.
+
+ It also adds tests to check for the fix.
+
+ The only change in behavior is that using KiB to specify the ending
+ location of a partition will now correctly create the end 1s lower than
+ the specified location like it does for MiB, GiB, etc.
+
+2023-02-15 Brian C. Lane <bcl@redhat.com>
+
+ tests: Fix formatting and snprintf warnings in tests.
+ The assert message includes sector values, which are long long int, so
+ use the proper formatting of %lld.
+
+ The snprintf warning complained about trying to write 258 bytes so I
+ bumped the buffer size up to 259. The return value is already being
+ checked for truncation so this is just to keep the compiler happy
+ without having to suppress the warning.
+
+2023-02-15 Brian C. Lane <bcl@redhat.com>
+
+ ui: Add checks for prompt being NULL
+ Also removes a cast from const char* to char* when passing to readline
+ that doesn't appear to be necessary any longer.
+
+ Added asserts to make sure prompt isn't NULL after strdup and realloc
+ calls.
+
+2023-02-15 Brian C. Lane <bcl@redhat.com>
+
+ strlist: Handle realloc error in wchar_to_str
+ It could return a NULL if the realloc fails. This handles the failure in
+ the same way as other failures in wchar_to_str, it exits immediately
+ with an error message.
+
+ libparted: Fix potential NULL dereference in ped_disk_next_partition
+
+ filesys: Check for null from close_fn
+ If the filesystem type name isn't known it can return a NULL.
+
+2023-02-07 Brian C. Lane <bcl@redhat.com>
+
+ tests: Fixing libparted test framework usage
+ The fail and fail_if functions from libcheck are deprecated, replace
+ them with ck_abort_msg and ck_assert_msg. Note that the logic of assert
+ is the opposite of fail_if.
+
+2023-02-06 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix problem with creating 1s partitions
+ There was a 1-off error in _partition_get_overlap_constraint that
+ prevented partitions from being created in 1s free space. You could
+ create 1s partitions as long they were done in order, but not after
+ leaving 'holes'.
+
+ This fixes this and adds tests for it on msdos and gpt disklabels.
+
+2022-12-13 Brian C. Lane <bcl@redhat.com>
+
+ tests: XFS requires a minimum size of 300M
+
+2022-12-13 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ gpt: Add no_automount partition flag
+ Add user requested support for GPT partition type attribute bit 63 [1]
+ so the no-auto flag in the systemd originated Discoverable Partitions
+ Specification [2] can be manipulated. The UEFI specification [3] says
+ partition attribute bits 48 to 63 are partition type specific, however
+ the DPS [2] and Microsoft [4] use the bit 63 to mean no automounting /
+ assign no drive letter and apply it to multiple partition types so don't
+ restrict its application.
+
+ [1] Request for GPT partition attribute bit 63 "no automount" editing
+ support
+ https://gitlab.gnome.org/GNOME/gparted/-/issues/214
+ [2] The Discoverable Partitions Specification (DPS),
+ Partition Attribute Flags
+ https://uapi-group.org/specifications/specs/discoverable_partitions_specification/
+ [3] UEFI Specification, version 2.8,
+ Table 24. Defined GPT Partition Entry - Attributes
+ https://uefi.org/sites/default/files/resources/UEFI_Spec_2_8_final.pdf
+ [4] CREATE_PARTITION_PARAMETERS structure (vds.h)
+ https://learn.microsoft.com/en-gb/windows/win32/api/vds/ns-vds-create_partition_parameters
+
+2022-09-30 Arvin Schnell <aschnell@suse.com>
+
+ parted: Add display of GPT UUIDs in JSON output
+ This adds 2 new disk type features, one for the whole disk UUID and
+ another for the per-partition UUID. It adds ped_disk_get_uuid and
+ ped_partition_get_uuid functions to retrieve them.
+
+ It adds them to the JSON output on GPT disklabeled disks as "uuid" in
+ the disk and partitions sections of the JSON output.
+
+2022-08-15 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add a libparted test for ped_partition_set_system on msdos
+ Test the libparted API to make sure the flag is not cleared by calling
+ ped_partition_set_system.
+
+2022-08-15 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix handling of msdos partition types
+ This restores the previous behavior by testing the partition type
+ against the list of known types and skipping the filesystem type reset.
+ Now the sequence of:
+
+ ped_partition_new(...)
+ ped_partition_set_flag(part, PED_PARTITION_BLS_BOOT, 1);
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ Will keep the type set to PED_PARTITION_BLS_BOOT, which is how it used
+ to behave.
+
+2022-08-15 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add a libparted test for ped_partition_set_system on gpt
+ Test the libparted API to make sure the flag is not cleared by calling
+ ped_partition_set_system.
+
+2022-08-15 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix handling of gpt partition types
+ This restores the previous behavior by testing the GUID against the list
+ of known types and skipping the filesystem GUID reset. Now the sequence
+ of:
+
+ ped_partition_new(...)
+ ped_partition_set_flag(part, PED_PARTITION_BIOS_GRUB, 1);
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ Will keep the GUID set to PED_PARTITION_BIOS_GRUB, which is how it used
+ to behave.
+
+2022-08-04 Brian C. Lane <bcl@redhat.com>
+
+ disk.in.h: Remove use of enums with #define
+ The preprocessor doesn't evaluate the enum, so it ends up being 0, which
+ causes problems for library users like pyparted which try to use the _LAST
+ value to conditionally include support for newer flags.
+
+ Instead just define the int that is the first and last entry in each enum.
+
+ Thanks to adamw and dcantrell for help arriving at a solution.
+
+2022-07-27 Arvin Schnell <aschnell@suse.com>
+
+ parted: Simplify code for json output
+ _PedDiskOps::get_max_primary_partition_count is always available, the
+ macro PT_op_function_initializers ensures it. So use
+ ped_disk_get_max_primary_partition_count instead of
+ _PedDiskOps::get_max_primary_partition_count directly.
+
+ libparted: Fix check for availability of _type_id functions
+ Fix a copy/paste error. In practice this didn't cause any problems
+ because the *_set_type_id and *_get_type_id are either both NULL or both
+ set to the function.
+
+2022-05-13 Brian C. Lane <bcl@redhat.com>
+
+ tests: t3200-type-change now passes
+
+ parted: Reset the filesystem type when changing the id/uuid
+ Without this the print command keeps showing the type selected with
+ mkpart, which doesn't match the id/uuid set by the user. So rescan the
+ partition for a filesystem.
+
+2022-05-13 Arvin Schnell <aschnell@suse.com>
+
+ libparted: add swap flag for DASD label
+ Support the swap flag and fix reading flags from disk. Also
+ cleanup code by dropping the 2 flags "raid" and "lvm" from
+ DasdPartitionData and instead use "system" directly.
+
+ parted: add type command
+ Include the partition type-id and type-uuid in the JSON
+ output. Also add the the command 'type' to set them. Remove
+ redundant flags from DosPartitionData and use only the system
+ variable.
+
+2022-04-18 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.5
+ * NEWS: Record release date.
+
+ NEWS: Mention gnulib update
+
+ maint: Update to latest gnulib and bootstrap script
+
+2022-04-05 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.4.64.2
+ * NEWS: Record release date.
+
+ NEWS: Mention bugfix
+
+2022-03-31 Benno Schulenberg <bensberg@telfort.nl>
+
+ bug#54649: [PATCH] usage: remove the mention of "a particular partition"
+ This complements commit b20227adf5 from five months ago.
+
+2022-03-30 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.4.64
+ * NEWS: Record release date.
+
+2022-03-29 Brian C. Lane <bcl@redhat.com>
+
+ NEWS: Add new features and bugs
+
+2022-03-28 Brian C. Lane <bcl@redhat.com>
+
+ doc: Add KiB and mention rescue in documentation
+
+2022-03-25 Brian C. Lane <bcl@redhat.com>
+
+ configure.ac: Add AC_CONFIG_MACRO_DIR
+
+ configure.ac: Add -Wno-portability
+ This is to quiet automake warnings about Makefile.am files using GNU
+ make extensions like pattern rules.
+
+ configure.ac: Update macros for autoconf 2.71
+
+ tests: Remove trailing blanks
+
+ parted: Fix config.h include in jsonwrt.c
+
+ libparted: Fix syntax-check sc_avoid_if_before_free error
+ It is safe to free even if they are NULL.
+
+2022-03-23 Brian C. Lane <bcl@redhat.com>
+
+ gpt: Include xalloc-oversized.h
+
+ maint: Add ./lib/malloc and libparted-fs-resize.pc to .gitignore
+
+ maint: Update copyright statements to 2022
+ By running make update-copyright
+
+ maint: Bump library REVISION number for release
+
+ maint: Update to latest gnulib and bootstrap script
+
+2021-12-01 Brian C. Lane <bcl@redhat.com>
+
+ doc: Add bios_grub to parted manpage
+
+2021-10-06 Brian C. Lane <bcl@redhat.com>
+
+ docs: Update documentation to be consistent
+ This fixes some missing commands in the parted.texi file used to
+ generate the web manual and info document. It also removes documentation
+ for the never-implemented 'print NUMBER' command which only returns 1.
+
+ The parted manpage has been updated to document the available print
+ options, disk_set, and disk_toggle commands.
+
+2021-09-30 Brian C. Lane <bcl@redhat.com>
+
+ gpt: Revert to filesystem GUID when setting flag to off
+
+ tests: Add a test to make sure GPT GUIDs default to filesystem
+ When no flag is set on a GPT partition the GUID should fall back to the
+ filesystem type for fat32, swap, and hfs+ and if no filesystem is found
+ it should default to linux filesystem data type, showing no filesystem
+ and no flags.
+
+ doc: Document gpt linux-home flag
+
+2021-09-30 Arvin Schnell <aschnell@suse.com>
+
+ gpt: Add linux-home flag
+ This sets the partition GUID to the linux home type:
+ 933AC7E1-2EB4-4F13-B844-0E14E2AEF915
+
+2021-09-29 Arvin Schnell <aschnell@suse.com>
+
+ gpt: Map PED_PARTITON_ flags to GUID values
+ Drop the 14 flags from _GPTPartitionData that correspond to a
+ partition type/uuid. Use the type/uuid directly instead.
+
+2021-09-23 Arvin Schnell <aschnell@suse.com>
+
+ keep GUID specific attributes
+ Keep GUID specific attributes when writing GPT.
+
+2021-09-22 Colin Watson <cjwatson@ubuntu.com>
+
+ hurd: Implement partition table rereading
+ We have to tell both the device for the drive itself, it case it
+ implements the partitioned devices, and tell the partition devices
+ to go away, in case they are implemented on their own by using parted.
+
+2021-09-22 Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+ hurd: Support rumpdisk-based device names
+
+2021-09-22 Colin Watson <cjwatson@ubuntu.com>
+
+ hurd: Fix partition paths
+ We have always had an 's' to separate drive number from partition
+ number.
+
+2021-08-25 Arvin Schnell <aschnell@suse.com>
+
+ parted: Add --json cmdline switch to output JSON
+ This outputs the disk's details as a JSON object. eg. a disk image with
+ a single partition from 1M to 100M:
+
+ {
+ "disk": {
+ "path": "/root/disk1.img",
+ "size": "2097152s",
+ "model": "",
+ "transport": "file",
+ "logical-sector-size": 512,
+ "physical-sector-size": 512,
+ "label": "gpt",
+ "max-partitions": 128,
+ "partitions": [
+ {
+ "number": 0,
+ "start": "34s",
+ "end": "2047s",
+ "size": "2014s",
+ "type": "free"
+ },{
+ "number": 1,
+ "start": "2048s",
+ "end": "200703s",
+ "size": "198656s",
+ "type": "primary",
+ "name": "root"
+ },{
+ "number": 0,
+ "start": "200704s",
+ "end": "2097118s",
+ "size": "1896415s",
+ "type": "free"
+ }
+ ]
+ }
+ }
+
+2021-08-25 Arvin Schnell <aschnell@suse.com>
+
+ parted: Allow empty string for partition name
+ This makes it possible to pass an empty string in script mode e.g. to
+ set no partition name (on GPT):
+
+ parted -s ./disk.img mklabel gpt mkpart '""' ext2 1 100M
+
+ Includes a new test for this feature.
+
+2021-08-25 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Check devpath before passing to strlen
+
+2021-08-10 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Tell libdevmapper to retry remove when BUSY
+ This sets the libdevmapper retry remove flag, which will retry a remove
+ command if it is BUSY.
+
+ parted already has it's own BUSY retry code, but when run with
+ device-mapper an error can be printed by libdevmapper which can be
+ confusing to the user.
+
+ Resolves: rhbz#1980697
+
+2021-08-10 Brian C. Lane <bcl@redhat.com>
+
+ parted: Escape colons and backslashes in machine output
+ The device path, device model, and partition name could all contain
+ colons or backslashes. This escapes all of these with a backslash.
+
+ Thanks to Arvin Schnell for the patch.
+
+2021-08-10 Ross Burton <ross.burton@arm.com>
+
+ tests: check for vfat kernel support and tools
+ t1100-busy-label.sh and t1101-busy-partition.sh create and mount VFAT
+ partitions, so check for both the tools and the kernel support.
+
+ Fixes bug#49594.
+
+2021-08-10 Ross Burton <ross.burton@arm.com>
+
+ tests: add a helper to check the kernel knows about a file system
+ Some tests need both the file system tools (eg mkfs.vfat) and kernel
+ support (eg vfat kernel module) to pass.
+
+ There are already helpers such as require_fat_ which check for mkfs.vfat,
+ but if the kernel doesn't support the filesystem then mounting the disk
+ image will fail.
+
+ Add require_filesystem_, which checks for either the filesystem name in
+ /proc/filesystems (so it's built-in, or already loaded) or if the name
+ is a valid module (so can be loaded on demand).
+
+2021-08-10 Ross Burton <ross.burton@arm.com>
+
+ tests: add aarch64 and mips64 as a valid 64-bit machines
+ require_64_bit_ in t-lib-helpers.sh has a hard-coded list of uname
+ machines that are 64-bit, so add aarch64 and mips64 to cover the major
+ architectures.
+
+2021-08-10 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Add swap flag to msdos disklabel
+ Previously you had to set the filesystem type to one of the linux-swap
+ options at creation time. With this change you can now toggle the
+ partition swap type using the 'swap' partition flag in the same way that
+ you can on gpt disklabels.
+
+ Thanks to Arvin Schnell for this patch.
+
+2021-08-10 Brian C. Lane <bcl@redhat.com>
+
+ Move Exception Option values into enum
+ Adding enums together doesn't create a new enum value, so when compiling
+ with warnings you will get warnings like:
+
+ warning: case value ‘96’ not in enumerated type
+
+ for PED_EXCEPTION_IGNORE_CANCEL
+
+ This moved the defines into the enum as new values so that they are
+ recognized as valid members of the enum with the values staying the
+ same.
+
+ NOTE: PED_EXCEPTION_OPTION_LAST *MUST* be the last of the individual
+ options, not the combined options.
+
+ Thanks to D. Hugh Redelmeier for this patch.
+
+2021-07-29 Brian C. Lane <bcl@redhat.com>
+
+ tests/t3000: Use mkfs.hfsplus and fsck.hfsplus for resize tests
+
+2021-07-15 Brian C. Lane <bcl@redhat.com>
+
+ tests/t3000: Check for hfs and vfat support separately
+ Previously the whole test would be skipped if either mkfs.hfs or
+ mkfs.vfat were not installed, leading to missing test coverage. This
+ change checks for them individually so that the test will run with
+ either or both of them installed
+
+2021-07-14 Brian C. Lane <bcl@redhat.com>
+
+ tests/t6006: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+ tests/t3200: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+2021-07-14 Brian C. Lane <bcl@redhat.com>
+
+ tests/t3000: Change dev_size_mb to 267
+ FAT32 needs a minimum partition size of 256MB so this is as small as we
+ can make it.
+
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+2021-07-12 Brian C. Lane <bcl@redhat.com>
+
+ tests/t1701: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+ tests/t1102: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+ tests/t1101: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+ tests/t1100: Change dev_size_mb to 10
+ This is backed by memory, so using more than is needed limits the size
+ of the system it can run on.
+
+2021-06-14 Brian C. Lane <bcl@redhat.com>
+
+ tests: t9050 Use /dev/zero for temporary file and mkswap
+ and clean up the usage a little bit by giving it a proper name and
+ removing the file when finished.
+
+ tests: t0400 - Work around a mkswap bug by using /dev/zero
+ mkswap gets stuck, in some situations, when operating on a file full of
+ holes (see https://bugzilla.redhat.com/show_bug.cgi?id=1971877) so work
+ around that by using /dev/zero instead of /dev/null
+
+2021-06-11 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix potential memory leak in gpt_write
+ _generate_header() can return with 1 after allocating gpt so it needs to
+ be freed in the error path.
+
+ libparted: Fix warning about buffer size in Atari label
+ When the Atari table is empty it copies 'PARTEDATARI' into the id, and
+ the start and size bytes. This can be confusion, so turn it into a
+ union of the string and the non-empty values.
+
+ parted: Fix memory leaks in do_resizepart
+
+ parted: Free tmp usage inside do_print
+ str_list_create calls gettext_to_wchar which makes a copy of it.
+
+ parted: Fix end_input leak in do_mkpart
+
+ fs: Fix copy-paste error in HFS journal code
+
+ libparted: Fix potential memory leak in sdmmc_get_product_info
+
+ libparted: Fix fd check in _flush_cache
+ In theory open() could return 0 so the correct error value is -1.
+
+2021-02-09 Brian C. Lane <bcl@redhat.com>
+
+ t0501-duplicate.sh: Add some more disk label types to the duplicate test
+ Add sun, atari, mac, and pc98 to the disklabels that we test
+ ped_disk_duplicate on.
+
+ aix isn't included because it doesn't support adding partitions.
+ dvh doesn't support boot partition
+ loop cannot be partitioned
+
+2021-02-09 Brian C. Lane <bcl@redhat.com>
+
+ tests: Increase disk size for duplicate test
+ Increase it from 8MiB to 32MiB and start the first partition at 2048
+ sector boundary instead of 32 so that no matter the sector size it will
+ be aligned.
+
+2021-01-28 Cristian Klein <cristian.klein@elastisys.com>
+
+ tests: Fix t9041-undetected-in-use-16th-partition
+ Sometimes fails with:
+ ```
+ + mkfs.ext3 /dev/sda15
+ mke2fs 1.45.5 (07-Jan-2020)
+ /dev/sda15: Not enough space to build proposed filesystem while setting up superblock
+ ```
+
+2021-01-28 Cristian Klein <cristian.klein@elastisys.com>
+
+ tests: Fix test t1700-probe-fs
+ mkfs.ext3 (see version below) was complaining that the filesystem is too small
+ for a journal, which made the test fail.
+
+ ```
+ $ mkfs.ext3 -V
+ mke2fs 1.45.5 (07-Jan-2020)
+ Using EXT2FS Library version 1.45.5
+ ```
+
+2021-01-28 Cristian Klein <cristian.klein@elastisys.com>
+
+ tests: Add tests for --fix
+
+ doc: Document --fix flag
+ Also fix copyright year, to please `make syntax-check`.
+
+2021-01-28 Cristian Klein <cristian.klein@elastisys.com>
+
+ parted: add --fix to "fix" in script mode
+ Use-case: VMs are booted from images that are smaller than their virtual
+ disk. This means that -- almost by definition -- the secondary GPT
+ header will be "misplaced", i.e., not at the end of the virtual disk.
+
+ Without this patch, parted cannot be used for custom/exotic partitioning
+ when the VM boots (e.g., in cloud-init's `bootcmd`). Specifically, it
+ will fail as follows:
+
+ ```
+ $ sudo parted --script /dev/vda "mkpart 2 10GB -1"
+ Warning: Not all of the space available to /dev/vda appears to be used,
+ you can fix the GPT to use all of the space (an extra 500 blocks) or continue with the current setting?
+ Error: Unable to satisfy all constraints on the partition.
+ ```
+
+ This happens because, in script mode, exceptions are usually not
+ resolved.
+
+ This patch adds `--fix`. This allows exceptions to be automatically
+ resolved with Fix. As a result, the following command will work:
+
+ ```
+ $ sudo parted --fix --script /dev/vda "mkpart 2 10GB -1"
+ ```
+
+2021-01-28 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Add includes for gnulib redefining free
+ gnulib redefines free using #define, causing problems with the
+ pt-common.h file. Work around that by including standard header files as
+ suggested by gnulib maintainer:
+
+ https://lists.gnu.org/archive/html/bug-gnulib/2021-01/msg00315.html
+
+2021-01-27 Brian C. Lane <bcl@redhat.com>
+
+ maint: Update bootstrap script from latest gnulib
+
+ maint: Update to latest gnulib
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.4
+ * NEWS: Record release date.
+
+ NEWS: Mention the non-public gnulib commit
+
+2021-01-26 Brian C. Lane <bcl@redhat.com>
+
+ cfg.mk: disable submodule checks to work around broken upstream gnulib
+
+ Include local gnulib change to version-etc.c date
+
+2021-01-18 Brian C. Lane <bcl@redhat.com>
+
+ maint: Update copyright statements to 2021
+ By running make update-copyright
+
+ README-release: Add information for updating the Translation Project
+
+2020-12-14 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.3.52
+ * NEWS: Record release date.
+
+2020-12-11 Brian C. Lane <bcl@redhat.com>
+
+ libparted/fs: Add ./lib to include search path
+
+ libparted: Check for NULL flag_name in ped_partition_flag_get_by_name
+ strcasecmp parameters cannot be NULL according to gcc -Wanalyzer-null-argument
+
+ po/POTFILES.in: Remove xstrtol-error.c
+ Appears to no longer be needed, results in an error when running make
+ check syntax-check.
+
+ maint: Update copyright statements to 2020
+ By running make update-copyright
+
+ configure.ac (AC_PREREQ): Require 2.64
+
+ maint: Bump library REVISION number for release
+
+ maint: Update bootstrap script from latest gnulib
+
+ maint: Update to latest gnulib
+
+2020-12-04 Brian C. Lane <bcl@redhat.com>
+
+ labels/bsd.c: Drop alpha_bootblock_checksum from bsd_probe
+ Thanks to Alpine Linux for catching this. In commit
+ a5f69f396713ab8ac1e57458cbb9af552d2c1659 I change label to actually
+ point to the label and failed to pass the new s0 to
+ alpha_bootblock_checksum() instead of label. So it was writing the
+ so-called checksum off the end of the 512b sector buffer.
+
+ bug: https://gitlab.alpinelinux.org/alpine/aports/-/issues/12161
+ upstream report: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45026
+
+2020-11-20 Brian C. Lane <bcl@redhat.com>
+
+ libparted/fs: Fix GCC warnings suggesting pure for PED_ASSERT functions
+ There was some question about whether or not pure should be used for
+ functions with PED_ASSERT (or exit) in them. It should be fine, since
+ the values checked by the ASSERT are passed to the function directly.
+ Behavior should be exactly the same for the same inputs.
+
+ libparted: Remove disabled code
+
+ fs/r/hfs: Remove disabled code
+
+ fs/r/fat: Remove disabled code
+
+ hfs/reloc_plus: Fix gcc 10 warnings about cast alignment
+
+ hfs/reloc: Fix gcc 10 warnings about cast alignment
+
+ ui: Fix gcc 10 warning about snprintf truncating an int
+ Double the storage to 20 bytes.
+
+ ui: Fix command_line_get_disk_flag
+ It was using PedPartitionFlag instead of PedDiskFlag when walking the
+ available flags.
+
+ ped_assert: Fix incorrect exception option
+ PED_EXCEPTION_FATAL is a type, not an option. A PED_EXCEPTION_BUG should
+ always select CANCEL.
+
+ ufs: Fix gcc 10 warnings about cast alignment
+
+ ntfs: Fix gcc 10 warnings about cast alignment
+
+ nilfs2: Fix gcc 10 warnings about cast alignment
+
+ ext2: Fix gcc 10 warnings about cast alignment
+
+ hfs/hfs: Fix gcc 10 warnings about cast alignment
+
+ hfs/advfs_plus: Fix gcc 10 warnings about cast alignment
+
+ hfs/advfs: Fix gcc 10 warnings about cast alignment
+
+ hfs: Fix gcc 10 bounds check warning
+ binfo is actually a list of structs that cannot be known until runtime,
+ so use a variable length array.
+
+ tests: Fix unsigned warning in duplicate.c
+
+ linux: Fix gcc complains about signed sccanf variables
+
+ dos: Fix gcc complaints when using boot_code pointer
+
+ bsd: Fix gcc complaints when using boot_code pointer
+
+2020-11-20 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Fix warnings from GCC 8 -Wsuggest-attribute=const
+ As GCC 8 suggests, add 'const' attribute to six functions. After adding
+ const attributes, GCC suggested two more functions to add const
+ attributes. Add const attributes to those functions also. In total, add
+ const attributes to 8 functions.
+
+ I read code of the functions and confirmed they are const: they examine
+ only their arguments and have no effect other than return value.
+
+2020-11-20 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Fix warnings from GCC 8 -Wsuggest-attribute=pure
+ As GCC 8 suggests, add 'pure' attribute to 17 functions. After adding
+ pure attributes, GCC suggested three more functions to add pure
+ attributes. Add pure attribute to those functions also. In total, add
+ pure attributes to 20 functions.
+
+ I read code of the functions and confirmed the 20 functions are pure:
+ they have no effect except the return value, and their return value
+ depend only on the parameters and/or global variables.
+
+2020-11-05 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Avoid a GCC warning for unused functions
+ libparted/fs/r/hfs/hfs.c has a '#if 0' block. The block refers two
+ functions hfsplus_clobber() and hfs_clobber(). It have GCC report a
+ warning below.
+
+ CC r/hfs/hfs.lo
+ r/hfs/hfs.c:343:1: warning: 'hfsplus_clobber' defined but not used [-Wunused-function]
+ 343 | hfsplus_clobber (PedGeometry* geom)
+ | ^~~~~~~~~~~~~~~
+
+ To avoid the warning, add two more '#if 0' to disable the two functions.
+
+2020-11-05 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Fix warnings from GCC's -Wimplicit-fallthrough
+ Two case statements have intentional fall-throughs but do not have
+ comments to note it. GCC detects and warns those case statements. To
+ avoid the warning, add fall-through comments.
+
+2020-11-05 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Fix warnings from GCC 8 -Wunused-variable and -Warray-bounds
+ GCC 8 reports two warnings as follows.
+
+ r/fat/bootsector.c: In function 'fat_boot_sector_set_boot_code':
+ r/fat/bootsector.c:274:15: warning: unused variable 'fs_info' [-Wunused-variable]
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ ^~~~~~~
+ In function 'memcpy',
+ inlined from 'fat_boot_sector_set_boot_code' at r/fat/bootsector.c:283:2:
+ /usr/include/bits/string_fortified.h:34:10: warning: '__builtin_memcpy' forming offset [126, 128] is out of the bounds [0, 125] [-Warray-bounds]
+ return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
+ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ To avoid the warnings, remove the unused variable. Use strcpy in place of
+ memcpy checking copy length.
+
+2020-11-05 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Fix a GCC warning -Wunused-but-set-variable
+ GCC warns that a variable 'prealloc' defined for _generic_affs_probe() in
+ fs/amiga/affs.c is set but its value is never used.
+
+ CC amiga/affs.lo
+ amiga/affs.c: In function '_generic_affs_probe':
+ amiga/affs.c:54:35: warning: variable 'prealloc' set but not used [-Wunused-but-set-variable]
+ 54 | int blocksize = 1, reserved = 2, prealloc = 0;
+ | ^~~~~~~~
+ Remove the variable for simplicity and to avoid the warning.
+
+2020-11-05 Brian C. Lane <bcl@redhat.com>
+
+ tests: Update all the dmsetup tests to use ENABLE_DEVICE_MAPPER
+
+2020-11-05 Joe Slater <joe.slater@windriver.com>
+
+ t6001-psep: modify device manage support detection
+ Use the method other tests use -- test an environment variable.
+
+2020-11-05 Petr Lautrbach <plautrba@redhat.com>
+
+ Do not link to libsepol or libselinux
+ Given that there's no code which would use it there's no reason to link
+ to libsepol or libselinux even when they are available.
+
+2020-09-01 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add a test for resizepart on a busy partition
+ This makes sure that the resizepart on a busy partition with the size on
+ the cmdline will work.
+
+2020-08-31 Brian C. Lane <bcl@redhat.com>
+
+ parted: Preserve resizepart End when prompted for busy partition
+ Resizing busy partitions is allowed, but the user is prompted, which
+ erases the cmdline. It is annoying to have to re-end the ending location
+ after answering Yes. This saves the word and pushes it back onto the
+ cmdline after the user agrees to resize the busy partition.
+
+2020-05-04 Romain Perier <romain.perier@gmail.com>
+
+ tests: Add f2fs to the fs probe test
+
+ Add support for the F2FS filesystem
+ This adds a basic support for the Flash-Friendly File System. So
+ we can manipulate the file system by using the PedFileSystem API and we
+ can do basic device probing for autodetecting the current fs.
+
+2020-03-09 Max Campbell <max@0m.ax>
+
+ Removed reference to ped_file_system_create
+ Removed a reference to the removed function ped_file_system_create in
+ the docs for ped_file_system_clobber.
+
+2019-12-20 Brian C. Lane <bcl@redhat.com>
+
+ NEWS: Add bls_boot to new features
+
+ libparted: Add support for bls_boot to GPT disks
+ This sets the partition GUID to bc13c2ff-59e6-4262-a352-b275fd6f7172 to
+ indicate that the partition is a Boot Loader Specification compatible
+ /boot partition.
+
+ libparted: Add support for MSDOS partition type bls_boot (0xea)
+ This type is used by the Boot Loader Specification to identify a
+ compatible /boot boot partition.
+
+2019-12-20 Alper Nebi Yasak <alpernebiyasak@gmail.com>
+
+ libparted: Add ChromeOS Kernel partition flag
+ This adds a GPT-only partition type flag, chromeos_kernel, for use on
+ Chrome OS machines, with GUID FE3A2A5D-4F32-41A7-B725-ACCC3285A309.
+
+ The firmware/bootloader in these machines relies on special images being
+ written to partitions of this type. Among multiple such partitions, it
+ decides which one it will boot from based on the GUID-specific partition
+ attributes. This patch is not intended to and does not manipulate these
+ bits.
+
+ Google refers to these partitions as "ChromeOS kernel" partitions. They
+ also define partitions for rootfs, firmware, and a reserved one; but
+ these are not necessary for the boot flow and are not included here.
+
+ Relevant ChromiumOS documentation:
+ https://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format
+
+2019-12-16 Brian C. Lane <bcl@redhat.com>
+
+ Fix end_input usage in do_resizepart
+ It needs to be set to NULL, since it may not get set by the call to
+ command_line_get_sector
+
+ tests: Test incomplete resizepart command
+
+2019-10-11 Brian C. Lane <bcl@redhat.com>
+
+ maint: Add note about gpg key selection for gnupload
+
+ Switch gpt-header-move and msdos-overlap to python3
+ python2 is EOL on January 1, 2020 so it is time to switch to python3.
+
+2019-10-10 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.3
+ * NEWS: Record release date.
+
+ NEWS: Note the fix for the s390 bug
+
+2019-09-30 Viktor Mihajlovski <mihajlov@linux.ibm.com>
+
+ libparted/s390: Re-enabled virtio-attached DASD heuristics
+ DASDs attached to KVM guest as virtio-blk devices are only handled
+ properly, if the unique DASD geometry is detected. Commit id
+ 61dd3d4c5eb782eb43caa95342e63727db3f8281 has prevented proper geometry
+ detection. Fixed by making sure that HDIO_GETGEO takes precedence
+ on s390[x].
+
+2019-08-21 Brian C. Lane <bcl@redhat.com>
+
+ README-release: Add link to upload registration page
+ Without this you cannot use gnupload to send the new release tarball to
+ the ftp servers.
+
+2019-08-12 Brian C. Lane <bcl@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.2.153
+ * NEWS: Record release date.
+
+ maint: Move NEWS template to line 3
+
+ maint: Update copyright statements to 2019
+ By running make update-copyright
+
+ maint: Bump library REVISION number for release
+
+ maint: Update bootstrap script from latest gnulib
+
+ maint: Update to latest gnulib
+
+2019-08-09 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix bug in bsd.c alpha_bootblock_checksum
+ I flubbed this in e35af6cbc43f5b279e6f0d65ccc904b1ac6c63d2 by trying to
+ switch to using a pointer and ended up writing off the end. Switch the
+ loop in alpha_bootblock_checksum back to use [i] index. It's easier
+ to read anyway.
+
+ doc: Create po directory if missing
+ When running 'make distcheck' the directory tree it uses is created
+ without the po directory. Create it if it is missing.
+
+ dist-check.mk: Remove empty .deps directories
+ Borrowed from coreutils commits 373ba16f332d and 40434e566e52
+
+ Turn off c_prohibit_gnu_make_extensions
+
+ po: Add argmatch.h
+
+ bsd.c: Rewrite disklabel code to prevent gcc warnings
+ Constructing a pointer into a char array results in warnings about casting
+ changing alignment. This changes how the boot sector is handled by adding the
+ label to BSDDiskData with the correct offset (64 bytes).
+
+ Add gcc malloc attribute to ped_alloc and ped_calloc
+
+2019-08-09 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted: Replace abs() with llabs()
+ GCC 9 fails to compile a few C source files which call abs() function.
+ An example of the error messages was as follows:
+
+ CC dos.lo
+ dos.c: In function '_best_solution':
+ dos.c:1773:13: error: absolute value function 'abs' given an argument of type 'long long int' but has parameter of type 'int' which may cause truncation of value [-Werror=absolute-value]
+ 1773 | a_delta = abs (part->geom.start - a->start);
+ | ^~~
+ dos.c:1774:13: error: absolute value function 'abs' given an argument of type 'long long int' but has parameter of type 'int' which may cause truncation of value [-Werror=absolute-value]
+ 1774 | b_delta = abs (part->geom.start - b->start);
+ | ^~~
+ cc1: all warnings being treated as errors
+
+ To avoid the errors, replace abs() function calls with llabs().
+
+2019-08-09 Brian C. Lane <bcl@redhat.com>
+
+ sun.c: Aligned _SunRawLabel to 16bit boundary
+
+ gpt.c: Drop cast of efi_guid_t to unsigned char *
+ This confuses gcc, making it think the uuid_t is unaligned when it really comes
+ from a efi_guid_t entry in _GPTDiskData.
+
+ gpt.c: Align _GPTDiskData to 8 byte boundary
+
+ dvh.c: Use memcpy instead of strncpy
+ The strings are short, so using memcpy isn't much slower (if at all). This
+ fixes gcc complaining about strncpy possibly copying a non-terminated string.
+
+2019-08-09 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ include/parted/unit.in.h: Specify const attribute to ped_unit_get_name()
+ GCC 8 fails to compile libparted/unit.c with an error:
+
+ CC unit.lo
+ unit.c:155:1: error: function might be candidate for attribute 'const' [-Werror=suggest-attribute=const]
+ ped_unit_get_name (PedUnit unit)
+ ^~~~~~~~~~~~~~~~~
+ CC disk.lo
+ cc1: all warnings being treated as errors
+
+ Const attribute is required for the function ped_unit_get_name() because
+ its return value is not affected by program status. To avoid the build
+ failure, change attribute of the function from pure to const.
+
+2019-08-09 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ libparted/labels/pt-tools.c: Fix gperf generated function attribute
+ GCC 8 fails to compile libparted/labels/pt-tools.c with an error:
+
+ CC pt-tools.lo
+ In file included from pt-tools.c:114:
+ pt-tools.c: In function 'pt_limit_lookup':
+ pt-limit.gperf:78:1: error: function might be candidate for attribute 'pure' [-Werror=suggest-attribute=pure]
+ cc1: all warnings being treated as errors
+
+ "Pure" attribute is required for the function pt_limit_lookup() because
+ it does not change program status other than its return value.
+
+ To avoid the build failure, add _GL_ATTRIBUTE_PURE to the function.
+ The attribute cannot be added in libparted/gperf/pt-limit.c because it
+ is generated by gperf during the build process. Instead, add the
+ attribute in libparted/gperf/pt-tools.c which includes the generated
+ function.
+
+2019-08-09 Shin'ichiro Kawasaki <kawasaki@juno.dti.ne.jp>
+
+ configure.ac: Check ABI against ABI version 2
+ GCC 8 fails to compile libparted/labels/aix.c with an error:
+
+ CC aix.lo
+ cc1: error: -Wabi won't warn about anything [-Werror=abi]
+ cc1: note: -Wabi warns about differences from the most up-to-date ABI, which is
+ also used by default
+ cc1: note: use e.g. -Wabi=11 to warn about changes from GCC 7
+ cc1: all warnings being treated as errors
+ make[4]: *** [Makefile:1250: aix.lo] Error 1
+
+ To avoid the build failure, specify ABI version 2 to check ABI change
+ from GCC 4.9.
+
+2019-08-09 Brian C. Lane <bcl@redhat.com>
+
+ Adjust the gcc warnings to recognize FALLTHROUGH
+
+ dos.c: Fix cast alignment error in maybe_FAT
+
+ atari.c: Align the AtariRawTable on a 16bit boundary
+ The casts to uint16_t need to know that this will be aligned. The struct is
+ actually 512 bytes, so it normally does end up aligned. This just makes sure
+ the compiler knows it and stops warning about the casts.
+
+ Change 'time stamp' to 'timestamp'
+ Caught by make syntax-check
+
+ Fix double semi-colons
+ Caught by make syntax-check
+
+ Update syntax-check NEWS hash to cover 3.2 release notes.
+
+ Fix syntax-check complaints about tests
+
+ Remove trailing whitespace
+ Caught by make syntax-check
+
+ Remove unnecessary if before free checks
+ Caught by make syntax-check
+
+2019-08-09 Brian C. Lane <bcl@redhat.com>
+
+ configure.ac: Remove default -Werror flag
+ Warnings as errors does not make sense with the current state of the
+ codebase and it is making it difficult to do new releases.
+
+ We should *show* the warnings, and handle them as time permits, but they
+ should not block building a new release.
+
+2019-08-09 Brian C. Lane <bcl@redhat.com>
+
+ README-release: Updating the release instructions
+
+2019-08-05 A. Wilcox <AWilcox@Wilcox-Tech.com>
+
+ libparted: Fix endian bug in bsd.c
+ You have to add 1 *before* doing the endian conversion, not after.
+
+2019-07-15 Max Staudt <max@enpas.org>
+
+ libparted/fs/amiga/affs.c: Remove printf() to avoid confusion
+ Currently, the affs code in libparted prints a debug line to stdout when
+ an Amiga FFS partition is probed. This confuses tools that parse stdout.
+
+ A prominent example is the partitioner (partman) in Debian's installer,
+ which parses stdout from a tool (parted_devices) that uses libparted to
+ scan the system's block devices. As of now, Debian cannot be installed
+ on a typical Amiga:
+
+ https://lists.debian.org/debian-68k/2019/07/msg00015.html
+
+ This patch removes this unexpected printf().
+
+ Cc: glaubitz@debian.org
+
+2019-04-09 Michael Small <smallm@sdf.org>
+
+ Tests case for sigsegv when false nilfs2 superblock detected.
+
+2019-04-09 Michael Small <smallm@sdf.org>
+
+ Avoid sigsegv in case 2nd nilfs2 superblock magic accidently found.
+ 1. is_valid_nilfs_sb: make sure the subtraction bytes - sumoff - 4
+ won't give a negative number. That as the len argument to
+ __efi_crc32() would give a very large number for the latter's for
+ loop limit, since len is unsigned long.
+
+ 2. nilfs2_probe: Read and allocate enough sectors to hold a
+ struct nilfs2_super_block. is_valid_nilfs_sb() will be passing
+ up to 1024 bytes to __efi_crc32(). If only one 512 byte sector
+ had been allocated with alloca and read from disk that would cause
+ reads off the the end of the stack even if bytes were more than
+ sumoff - 4.
+
+2019-02-11 Brian C. Lane <bcl@redhat.com>
+
+ Fix align-check help output
+
+2019-01-31 Hans-Joachim Baader <baader@gmx.net>
+
+ Added support for Windows recovery partition (WINRE) on MBR
+ Windows 10 uses a recovery partition which is sometimes marked with
+ partition type 0x27 on MBR systems. It wasn't possible to handle such
+ a partition with parted. Therefore the partition type PARTITION_MSFT_RECOVERY
+ is now used properly also on MBR when the flag msftres is set.
+
+2019-01-31 Brian C. Lane <bcl@redhat.com>
+
+ parted: Remove PED_ASSERT from ped_partition_set_name
+ Asserts should only check logic, not wrap functions with side-effects.
+ When compiled with --disable-debug this causes the name field of mkpart
+ to be ignored.
+
+2019-01-30 Brian C. Lane <bcl@redhat.com>
+
+ docs: Update GNU License version in parted .text files
+
+2018-10-16 dann frazier <dann.frazier@canonical.com>
+
+ Read NVMe model names from sysfs
+ parted currently shows the same generic model name for all NVMe devices:
+
+ # parted /dev/nvme0n1 -s print | grep Model
+ Model: NVMe Device (nvme)
+
+ If the model information is available in sysfs, display that instead:
+
+ # parted /dev/nvme0n1 -s print | grep Model
+ Model: THNSN5512GPU7 NVMe TOSHIBA 512GB (nvme)
+
+2018-10-16 dann frazier <dann.frazier@canonical.com>
+
+ Fix warnings from GCC 7's -Wimplicit-fallthrough
+ All of these locations appear to have intentional fallthroughs. Add
+ comments that GCC will detect to mute warnings w/ -Wimplicit-fallthrough.
+
+2018-10-16 dann frazier <dann.frazier@canonical.com>
+
+ ped_unit_get_name: Resolve conflicting attributes 'const' and 'pure'
+ The const and pure attributes conflict:
+
+ error: ignoring attribute 'const' because it conflicts with attribute 'pure' [-Werror=attributes]
+
+ pure functions may access global memory, const functions may not.
+ ped_unit_get_name() accesses non-local variable unit_names, so drop const.
+
+2018-10-16 Brian C. Lane <bcl@redhat.com>
+
+ Add udf to t1700-probe-fs and to the manpage
+ If mkfs.udf is installed this will test to make sure that the filesystem
+ is detected.
+
+2018-10-16 Pali Rohár <pali.rohar@gmail.com>
+
+ libparted: Add support for MBR id, GPT GUID and detection of UDF filesystem
+ This is needed for libparted based applications (like Gparted) to correctly
+ choose MBR id and GPT GUID for UDF filesystem. MBR id for UDF is 0x07 and
+ GPT GUID is Microsoft Basic Data, see why: https://serverfault.com/a/829172
+
+ Without registering a new libparted fs code it is not possible to assign
+ MBR id or GPT GUID.
+
+ Detection of UDF filesystem is done by checking presence of UDF VSD (NSR02
+ or NSR03 identifier) and UDF AVDP at expected locations (blocks 256, -257,
+ -1, 512).
+
+2018-10-16 Simon Xu <xu.simon@oracle.com>
+
+ Fix potential command line buffer overflow
+ parted terminates with 'stack smashing detected' when fed with a long command
+ line argument, and segfaults when the argument is long enough:
+
+ root # /sbin/parted /dev/sda $(perl -e 'print "a"x265')
+ *** stack smashing detected ***: /sbin/parted terminated
+ ...
+ Aborted
+
+ root # /sbin/parted /dev/sda $(perl -e 'print "a"x328')
+ *** stack smashing detected ***: /sbin/parted terminated
+ ...
+ Command History:
+ Segmentation fault
+
+ parted should be able to detect it and exit with error and usage messages.
+ This also makes command line buffer overflow exploit more possible. Fix it by
+ adding length check in the condition of the for loop where command line
+ arguments are copied.
+
+2018-08-22 Brian C. Lane <bcl@redhat.com>
+
+ t6100-mdraid-partitions: Use v0.90 metadata for the test
+ Newer metadata types use more disk space, causing the test to fail.
+
+2018-08-22 Brian C. Lane <bcl@redhat.com>
+
+ parted.c: Make sure dev_name is freed
+ If there was a problem with ped_device_get or ped_device_open it would not be freed.
+
+ Related: rhbz#1602652
+
+2018-08-22 Brian C. Lane <bcl@redhat.com>
+
+ parted.c: Always free peek_word
+ If command_line_get_fs_type failed it would never free it, so put a free
+ in both branches of the if.
+
+ Related: rhbz#1602652
+
+2018-08-22 Brian C. Lane <bcl@redhat.com>
+
+ Fix the length of several strncpy calls
+ These need to be 1 less than the allocated size of the buffer, strncpy
+ will fill shorter strings with zeros, but there needs to be room for at
+ least one 0x00 at the end if the string is the same length as the buffer
+ and has no terminating 0x00.
+
+ Related: rhbz#1602652
+
+2018-08-22 Brian C. Lane <bcl@redhat.com>
+
+ Modify gpt-header-move and msdos-overlap to work with py2 or py3
+ Distributions are starting to remove python2 and only use python3.
+ Modify these test scripts so that they will work with either python 2.7
+ or python 3.X
+
+2018-08-22 Ulrich Müller <ulm@gentoo.org>
+
+ libparted: Fix ending CHS address in PMBR.
+ According to the UEFI specification version 2.7, Section 5.2.3,
+ Table 16, the ending CHS address in the protective MBR should be set
+ to 0xFFFFFF. This also agrees with the behaviour of fdisk from
+ util-linux-2.32.
+
+2018-06-12 Phillip Susi <psusi@ubuntu.com>
+
+ Fix atari label false positives
+ The atari label gets false positives easily, so probe it after
+ all other labels have said no.
+
+2018-06-05 Phillip Susi <psusi@ubuntu.com>
+
+ Lift 512 byte restriction on fat resize
+ As Colin Watson pointed out way back in 2014, when I removed the
+ 512 byte sector size restriction from the fs recognition code,
+ I missed the same from the fat resize code.
+
+2018-06-05 Colin Watson <cjwatson@ubuntu.com>
+
+ build: Remove unused traces of dynamic loading
+ Now that file system operations have been removed from libparted,
+ libreiserfs is no longer used. Remove references to it, along with the
+ dynamic loading build infrastructure which was only used for
+ libreiserfs.
+
+2018-06-05 Phillip Susi <psusi@ubuntu.com>
+
+ Fix resizepart iec unit end sector
+ Fix resizepart to adjust the end to be -1 sector when using iec
+ power of 2 units so that the next partition can start immediately
+ following the new end, just like mkpart does.
+
+2018-06-05 Niklas Hambüchen <mail@nh2.me>
+
+ mkpart: Allow negative start value when FS-TYPE is not given
+ The manual had long documented that negative values are
+ allowed for both start and end values, but until now negative
+ start values were rejected if FS-TYPE was not given.
+
+ Example:
+
+ # parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary ext4 -5MiB 100%
+ (succeeds)
+
+ # parted --script -a optimal /dev/loop0 -- mklabel gpt mkpart primary -5MiB 100%
+ parted: invalid token: -5MiB
+ Error: Expecting a file system type.
+
+ This commit fixes the latter error.
+ The issue was an insufficient lookahead in command line parsing,
+ looking only for digits when skipping over FS-TYPE.
+ The fix is including the minus '-' in the lookahead.
+
+ Originally reported as Debian bug #880035:
+
+ "parted: fails to use negative start value for 'mkpart' command without specyfying FS-TYPE"
+ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=880035
+
+2018-06-05 Phillip Susi <psusi@ubuntu.com>
+
+ Fix set and disk_set to not crash when no flags are supported
+ Loop labels and file images support no flags. set and disk_set
+ would prompt for a flag and accept any string since the list of
+ flags was empty, then fail to look up an actual flag value, then
+ throw an exception with a null string for the name of the flag,
+ which would bug.
+
+2018-05-07 Phillip Susi <psusi@ubuntu.com>
+
+ tests: fix t6100-mdraid-partitions
+ The test was failing because it didn't wait for the md device
+ to appear after creating it.
+
+ Fix make check
+ Make check failed due to some warnings treated as errors. One was
+ caused by a warning that a function could have the noreturn attribute.
+ It seems that this had previously been disabled but gcc has changed
+ the flag from -Wmissing-noreturn to -Wsuggest-attribute=noreturn. The
+ recently added volser.c test also caused a few warnings when not
+ compiled on s390x because most of the functions were no used, so #if
+ those out as well.
+
+2018-04-04 Richard W.M. Jones <rjones@redhat.com>
+
+ linux: Include <sys/sysmacros.h> for major() macro.
+ Since glibc 2.27 this header is required.
+
+2017-12-19 Sebastian Parschauer <sparschauer@suse.de>
+
+ Add support for NVDIMM devices
+ Recognize NVDIMM devices, so that "parted -s /dev/pmem7 p" now
+ prints "Model: NVDIMM Device (pmem)" instead of
+ "Model: Unknown (unknown)".
+
+ In order for a device to be recognized as NVDIMM, it has to
+ have a 'blkext' major number. But since this major can be
+ used also by other device types, we also check that the device
+ path contains 'pmem' as a substring.
+
+ * NEWS: Mention the change
+ * include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_PMEM
+ * libparted/arch/linux.c(_device_probe_type): Recognize NVDIMM devices.
+ * libparted/arch/linux.c(linux_new): Handle NVDIMM devices.
+ * parted/parted.c(do_print): Add "pmem" to list of transports.
+
+2017-12-19 Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
+
+ libparted/labels: link with libiconv if needed
+ gpt.c uses iconv so it should link with it. Otherwise, on platforms
+ where libiconv is a separate library, we get a link failure of parted:
+
+ CCLD parted
+ ../libparted/.libs/libparted.so: undefined reference to `libiconv'
+ ../libparted/.libs/libparted.so: undefined reference to `libiconv_open'
+ ../libparted/.libs/libparted.so: undefined reference to `libiconv_close'
+
+ Since iconv functionality is needed unconditionally (not only when
+ gettext is enabled), AM_ICONV needs to be added to configure.ac.
+
+2017-07-31 Brian C. Lane <bcl@redhat.com>
+
+ atari.c: Drop xlocale.h (#1476934)
+ glibc no longer includes this header. locale.h should work just fine.
+
+2017-06-06 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix udev cookie leak in _dm_resize_partition
+ Add a NEWS entry.
+
+2017-05-25 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix udev cookie leak in _dm_resize_partition
+ The function is setting udev cookies, but not using them when waiting
+ for the task. This results in leaked cookies, which can eventually
+ exhaust the available number of semaphores.
+
+ 'dmsetup udevcookies' will show a cookie remaining afterwards, and 'ipcs -s'
+ will show the semaphores in use.
+
+ Also simplified the exit so that the task is always destroyed and memory
+ is all freed in the same path.
+
+ Resolves: rhbz#1455564
+
+2017-05-02 Brian C. Lane <bcl@redhat.com>
+
+ tests/t1701-rescue-fs wait for the device to appear.
+ After mkpart it needs to wait for the new partition to appear.
+
+2017-05-02 Brian C. Lane <bcl@redhat.com>
+
+ Increase timeout for rmmod scsi_debug and make it a framework failure
+ On some hardware scsi_debug can take longer to remove. If this fails it
+ inevitably results in the next test failing since it cannot load
+ scsi_debug.
+
+ Increse the timeout to 40 loops (8 seconds), and if it hits the limit
+ without succeeding call framework_failure_
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: add test cases for the new fdasd functions
+ The test case uses a temporary file in libparted/tests under
+ Check framwork.It can be issued by "make check" in the test dir.
+
+ libparted/dasd: add an exception for changing DASD-LDL partition table
+ The partition table of DASD-LDL device with the dasd disk label
+ should not be changed according to its character in Linux.
+ When the user tries to modify the partition table, an exception
+ will be raised to inform user of this character.
+
+ libpartd/dasd: improve flag processing for DASD-LDL
+ DASD-LDL does not support flag now, so all the flags are
+ unavailable to it.
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ parted/ui: remove unneccesary information of command line
+ When some command fails, the information still exists in
+ command_line buffer. When in command mode or interactive mode,
+ if an interactive exception prompts, the remained information
+ will be processed as option from user. This will raise some other
+ information or even unexpected results. So before getting option
+ input from user, clean the command line buffer.
+
+ Example: When the disk label is invalid and user tries to make
+ new partition on the device with command like,
+ mkpart 0 50%. Then parted will raise an exception
+ telling an invalid disk label found and whether to correct it.
+ But at this time 0 as the input of mkpart will be
+ considered as the option input for the exception(yes/no).
+ So one more exception will raised with error information.
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ parted: check the name of partition first when to name a partition
+ The previous function works well for the labels supporting naming
+ partition, but not for these which don't. If the disk label does not
+ support partition naming, two exceptions will be raised. Even after the first
+ error indicates it does not support name, parted yet asks user for
+ name in iteractive mode.
+
+ First check if the disk label supports partition naming and if it
+ does, it will continue; otherwise, it will stop and raise an
+ exception.
+
+2017-05-01 Sebastian Parschauer <sparschauer@suse.de>
+
+ Add support for RAM drives
+ Recognize RAM drives, so "parted -s /dev/ram0 p" now prints
+ "RAM Drive (brd)" instead of "Model: Unknown (unknown)".
+
+ In order for a device to be recognized as RAM drive, it has to
+ have major number 1. Also the BLKFLSBUF ioctl shouldn't be used
+ on RAM drives as it is used to zero the device.
+
+ * NEWS: Mention the change
+ * include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_RAM.
+ * libparted/arch/linux.c(RAM_MAJOR): New define.
+ * libparted/arch/linux.c(_device_probe_type): Recognize RAM drives.
+ * libparted/arch/linux.c(linux_new): Handle RAM drives.
+ * libparted/arch/linux.c(_flush_cache): Skip RAM drives.
+ * parted/parted.c(do_print): Add "brd" to list of transports.
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ clean the disk information when commands fail in interactive mode.
+ parted always reads disk information to memory before any
+ operations. The disk that user operates is actually
+ a copy of real one in memory. When the information in memory
+ is changed, it will commit the memory to device to update the
+ disk information.
+
+ Once the disk information is read, parted will never re-read it
+ again unless another device is loaded or the device is re-read.
+ Above work has been done in commit 7eac058 (parted: don't reload
+ partition table on every command)
+
+ Each command of parted always commits the memory when it succeeds.
+ Then the disk information on device and in memory are the same.
+ But when it fails, they might be different. User will be confused
+ by this, and sometimes get undesired result with the contaminated
+ memory. This memory should be cleaned if some command fails.
+ Then the command followed will re-read the disk.
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ parted: fix wrong error label jump in mkpart
+ When the user makes a new partition, if parted fails to add the
+ partition to disk, it jumps to wrong error label. In this
+ situation, this new partition actually is not a node in disk
+ data structure. But in the wrong error label, it pretends this
+ is a node and removes it as a list node, leading to other
+ partition in this disk deleted. This might lead to a memory leak.
+ Because if there are other partitions, it just removes them from
+ list without releasing the resource. And this also leads to different
+ disk information between memory and device. This is confusing.
+
+ But when the new partition is added to disk successfully and if
+ any operations followed fail, this partition should be removed from
+ disk and destroyed.
+
+2017-05-01 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ parted: fix crash due to improper partition number input
+ When the user makes a new partition, if parted fails to add the
+ partition to disk, it jumps to wrong error label. In this
+ situation, this new partition actually is not a node in disk
+ data structure. But in the wrong error label, it pretends this
+ is a node and removes it as a list node, leading to other
+ partition in this disk deleted. This might lead to a memory leak.
+ Because if there are other partitions, it just removes them from
+ list without releasing the resource. And this also leads to different
+ disk information between memory and device. This is confusing.
+
+ But when the new partition is added to disk successfully and if
+ any operations followed fail, this partition should be removed from
+ disk and destroyed.
+
+2017-04-17 Phillip Susi <psusi@ubuntu.com>
+
+ Fix crash when localized
+ The _() macro is only for translating string literals. It was
+ incorrectly applied to a runtime string representing the name
+ of a partition and this sometimes caused a gettext crash.
+
+2017-01-19 Sebastian Rasmussen <sebras@gmail.com>
+
+ libparted: Fix typo in hfs error message
+
+2016-12-22 Laurent Vivier <laurent@vivier.eu>
+
+ libparted: Fix MacOS boot support
+ boot_region_length (or BootSize in the MacOS dialect) is the length
+ of the driver code in the driver partition. This length is used
+ to compute the checksum of the driver.
+
+ libparted updates this value by setting the whole size of the partition
+ without computing the checksum of the driver using this size.
+
+ As the checksum is wrong, the driver is broken and cannot be loaded
+ by the MacOS ROM, and thus the disk is not bootable anymore.
+
+ Moreover, parted try to update the driver list and makes it disappear.
+
+ As parted is not able to insert a driver in a partition,
+ the driver is generally inserted by the Apple HD Tool,
+ this patch removes the line updating the driver size.
+
+ We also simplify the driver list scan and fix endianess use.
+
+ This has been tested... and it works, now.
+
+ I have updated a bootable disk with parted on x86_64 and
+ then been able to boot it (again) on a Mac LC III.
+
+2016-12-22 John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+
+ libparted: Add support for atari partition tables
+
+ libparted:tests: Move get_sector_size() to common.c
+ Moving get_sector_size() from disk.c to common.c allows
+ us to use it in _implemented_disk_label() to test for
+ 512-byte sectors. This change is required to be able to
+ enable this test for atari partition tables for which
+ support is added in a follow-up patch.
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: Update t0220 and t0280 for the swap flag.
+
+2016-12-22 Arvin Schnell <aschnell@suse.com>
+
+ libparted: set swap flag on GPT partitions
+ The filesystem type is still detected as befor, but now setting the
+ 'swap' flag will set the partition GUID to PARTITION_SWAP_GUID.
+
+2016-12-22 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: add test cases for the new fdasd functions
+ The test case uses a temporary file in libparted/tests under
+ Check framwork. It can be issued by "make check" in the test dir.
+
+2016-12-22 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: add new fdasd functions
+ Introduce a set of new functions from the fdasd utility of the s390-tools
+ to keep the code base in parted and s390-tools in sync.
+
+ These new functions are:
+ fdasd_check_volser(): validate the volser input
+ fdasd_get_volser(): get volume serial (volser)
+ fdasd_change_volser(): change volser with string
+ fdasd_reuse_vtoc(): re-create vtoc labels based on the existing vtoc
+
+2016-12-22 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: update and improve fdasd functions
+ Update the fdasd_anchor_t data structure and the fdasd_cleanup()
+ function. Also correct vtoc_changed and vlabel_changed accounting
+ because they are important to rewrite vtoc to save the changes.
+
+ Wang Dong <dongdwdw@linux.vnet.ibm.com>
+ Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
+
+2016-12-22 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: unify vtoc handling for cdl/ldl
+ Merge volume label cdl and ldl. It is convenient to manipulate
+ the same structure. Also remove unused arguments in the functions.
+
+2016-12-22 Sebastian Parschauer <sparschauer@suse.de>
+
+ libparted: Don't warn if no HDIO_GET_IDENTITY ioctl
+ Fully virtualized Xen VMs (HVM) use Linux IDE devices which don't
+ support the HDIO_GET_IDENTITY ioctl. EINVAL is returned, a warning
+ is printed and the device model is set to "Generic IDE" in that
+ case. The problem is seeing the warning all the time. So drop it
+ for this case.
+
+2016-12-22 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: Fix starting CHS in protective MBR
+ The CHS address for protective partition start in protective MBR
+ should be 0/0/2, according to UEFI spec (v2.6, section 5.2.1).
+
+ * libparted/labels/gpt.c (_write_pmbr): Fix starting CHS address
+
+ Reported by Steffen Winterfeldt in https://bugzilla.suse.com/969165
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: Stop timing t9040 (#1172675)
+ parted doesn't have any control over how long this takes, there is no
+ reason to consider this a parted bug if it takes longer than expected.
+
+ Resolves: rhbz#1172675
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ partprobe: Open the device once for probing
+ Previously there were 3 open/close pairs for the device, which may
+ result in triggering extra udev actions. Instead, open it once at the
+ start of process_dev and close it at the end.
+
+ tests: Set optimal blocks to 64 for scsi_debug devices
+ The Linux kernel 4.5 changed the optimal blocks count from 64 to 1024
+ This causes tests using scsi_debug devices to fail because of alignment
+ issues. Set the opt_blks to 64 so that we have consistent behavior
+ across kernels.
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ doc: Add information about quoting
+ Some shells (bash) will strip off the " so it needs to be
+ wrapped in '' to prevent it. eg.
+
+ parted -s ./disk.img mkpart '"EFI System Partition"' 1M 500M
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ doc: Cleanup mkpart manpage entry (#1183077)
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: Fix t1700 failing on a host with a 4k xfs filesystem (#1260664)
+ The problem is that mkfs.xfs won't work if the file it is trying to
+ create is on a filesystem with a sector size larger than the passed
+ -ssize value. So a host with 4k disks (eg. s390) and the xfs filesystem
+ will fail with the error message:
+ illegal sector size 512; hw sector is 4096
+
+ Failures setting up the environment for the test aren't parted bugs.
+ This stops treating mkfs and dd errors as test failures, skipping the fs
+ and logging a warning.
+
+ Related: rhbz#1260664
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add wait to t9042 (#1257415)
+ Also make the new disklabel and first partition all in one step to
+ prevent udev problems.
+
+ Resolves: rhbz#1257415
+
+2016-12-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add udevadm settle to wait_for_ loop (#1260664)
+ Sometimes the device will vanish after the wait_for_dev_to_appear exits.
+ Add udevadm settle in an attempt to make sure the udev system is done
+ flapping around and the device will stay in place.
+
+ Related: rhbz#1260664
+
+2016-10-04 Brian C. Lane <bcl@redhat.com>
+
+ tests: t3310-flags.sh skip pc98 when sector size != 512
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3310-flags.sh: Add tests for remaining table types
+ Add test of flags for remaining table types: aix, amiga, pc98, sun and
+ loop. Note that support of writing AIX tables is not yet implemented in
+ parted and LOOP tables don't support partitions nor flags.
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3310-flags.sh: Add test for dvh table flags
+ DVH table reserves the first 4 MiB for the volume header information so
+ move the created test partition to immediately after that.
+
+ Exclude testing the boot flag as that can only be set on logical
+ partitions and this test script only uses primary partitions so far.
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3310-flags.sh: Add test for mac table flags
+ MAC partition table reserves partition 1 for the partition map
+ partition, so the created test partition will be number 2. Adapt
+ accordingly.
+
+ Setting flags 'root' and 'swap' also sets the partition name to 'root'
+ and 'swap' respectively, so no longer match the partition name in
+ extract_flags().
+
+ Don't test lvm and raid flags as they fail to be cleared with a single
+ set off command. See FIXME comment in the test for more details.
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ libparted: Remove commented local variable from bsd_partition_set_flag()
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ libparted: Fix to report success when setting lvm flag on bsd table
+ bsd_partition_set_flag() was falling through in the lvm flag case and
+ returning failure. Fix this by adding missing return 1 (success) like
+ for the other flags.
+
+ Found as a result of this bug reported by Timo Riikonen:
+ https://bugzilla.gnome.org/show_bug.cgi?id=769831
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3310-flags.sh: Add test for bsd table flags
+
+ tests: t3310-flags.sh: Stop excluding certain flags from being tested
+ Also grep for whole words, grep -w, to avoid flag 'boot' being matched
+ as a substring of flag 'legacy_boot'.
+
+2016-10-04 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3310-flags.sh: Query libparted for all flags to be tested
+ Replace scanning the documentation for an incomplete list of flags with
+ querying libparted for the complete list of supported flags via the
+ added helper print-flags.
+
+ Correct $ME -> $ME_ in the warning messages. Improve the warning
+ messages by including the table type and flag name not correctly set or
+ cleared.
+
+ Plus minor changes:
+ (1) use slightly longer variable name primary_or_name;
+ (2) use longer test partition name PTNNAME; and
+ (3) stop shortening parted unit command to u.
+
+2016-09-30 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: only IEC units are treated as exact
+ If the user specifies start/end of the partition as a unit,
+ whose size happens to be power of two, we treat that as
+ exact address with exact placement.
+
+ Recently, commit 01900e056ec25083 added an exception for
+ percent units.
+
+ This logic however can fail also for cylinders, e.g. on DASD FBA disks,
+ which report CHS=(*, 128, 16) geometry, hence once cylinder is 1 MiB.
+ With cylinders as units, exact placement is not what the user wants.
+
+ Instead of adding cylinders to the blacklist, let's instead
+ whitelist units which should trigger exact placement.
+
+ * libparted/unit.c (is_power_of_2): Remove now unused function.
+ (ped_unit_parse_custom): Specify which units trigger exact placement.
+ * NEWS (Bug Fixes): Mention this.
+
+2016-09-30 Gareth Randall <gareth.randall@virgin.net>
+
+ docs: Improve partition description in parted.texi
+
+2016-06-23 Petr Uzel <petr.uzel@suse.cz>
+
+ Add support for NVMe devices
+ Recognize NVMe Devices, so "parted -s /dev/nvme0n1" now prints
+ "NVMe Device (nvme)" instead of "Model: Unknown (unknown)".
+
+ In order for a device to be recognized as NVMe, it has to
+ have a 'blkext' major number. But since this major can be
+ used also by other device types, we also check the device
+ path contains 'nvme' as a substring.
+
+ * NEWS: Mention the change
+ * include/parted/device.h.in(PedDeviceType): Add PED_DEVICE_NVME
+ * libparted/arch/linux.c(BLKEXT_MAJOR): New define.
+ * libparted/arch/linux.c(_is_blkext_major): New function.
+ * libparted/arch/linux.c(_device_probe_type): Recognize NVMe devices.
+ * libparted/arch/linux.c(linux_new): Handle NVMe devices.
+ * parted/parted.c(do_print): Add "nvme" to list of transports.
+
+2016-06-23 Wang Dong <dongdwdw@linux.vnet.ibm.com>
+
+ libparted/dasd: correct the offset where the first partition begins
+ The start point of first partition must start at least from the third
+ track of DASD, due to the existence of metadata in the first two track.
+ The previous constraint just sets all the device to be partitioned.
+ So when the start point of the first partition start before the third
+ track, (For example if it starts from.0) parted will exit abruptly.
+ And this kind of job must be done with constraint explicitly.
+
+ Then the constraint is modified to exclude the first two tracks and
+ to make the first partition start from the third track by default.
+
+ Reviewed-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
+
+2016-05-06 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix probing AIX disks on other arches
+ Not a likely scenario, but make sure the magic check works everywhere.
+
+2016-04-15 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Remove fdasd geometry code from alloc_metadata (#1244833)
+ commit db20944f changed how the trailing_metadata_end is calculated in
+ dasd_alloc_metadata, removing the need for setting up the anchor struct.
+ But dasd_alloc_metadata can be called in various contexts, and the
+ arch_specific->fd may or may not be valid during these calls. This can
+ result in unpredictable crashes when it uses a stale fd and tries to run
+ the file image code in fdasd_get_geometry instead of the device code.
+
+ The solution is to just drop the unneeded code, and to remember that
+ arch_specific->fd should only be used when ped_device_open has first
+ been called.
+
+ Resolves: rhbz#1244833
+
+2016-04-14 Phillip Susi <psusi@ubuntu.com>
+
+ Add NEWS entry for fat resize fix
+
+2016-04-14 Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+ bug#17883: [PATCH] configure.ac: uclinux is also linux
+ uclinux is used in the tuple for some noMMU linux builds like Blackfin
+ FLAT output, so accept it as linux too.
+
+2016-04-14 Curtis Gedak <gedakc@gmail.com>
+
+ lib-fs-resize: Fix recognition of FAT file system after resizing
+ When resizing a FAT partition, an extra boot_sector memory allocation
+ was causing the original boot_sector information to be lost. The
+ resulting FAT file system was still recognized by GNU/Linux, but not
+ recognized by the proprietary Windows operating system.
+
+ The problem with Windows FAT32 recognition was introduced with:
+
+ Fix filesystem detection on non 512 byte sectors
+ 80678bdd957cf49a9ccfc8b88ba3fb8b4c63fc12
+
+ Fix by removing the extra boot_sector memory allocation.
+
+ Note that since parted-3.0 another code path to the extra memory
+ allocation of fat_create(...) via ped_file_system_create(...) is
+ inaccessible. In an effort to maintain the ability to re-instate the
+ code, add a new boot_sector memory allocation where it is needed in
+ the alternate code path.
+
+ GNU bug report logs - #22266
+ [libparted] jump instruction and boot code is corrupted with random
+ bytes after fat is resized
+ http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22266
+
+2016-04-12 Brian C. Lane <bcl@redhat.com>
+
+ parted: Display details of partition alignment failure (#726856)
+ When alignment for a new partition fails it isn't always obvious why it
+ failed. This adds printing the reason for the failure, in the form of:
+
+ start % grain != offset
+
+ This modifies align-check in interactive mode to print the alignment the
+ error details if it isn't aligned. Script mode behavior is unchanged.
+
+ Also cleanup pointer usage and handle asprintf failure by using a constant
+ string in the error report - "unknown (malloc failure)".
+
+2016-04-12 Brian C. Lane <bcl@redhat.com>
+
+ docs: Add list of filesystems for fs-type (#1311596)
+ Add the most common filesystem types to the parted manpage.
+
+ Resolves: rhbz#1311596
+
+2016-04-12 Brian C. Lane <bcl@redhat.com>
+
+ Add libparted-fs-resize.pc
+ Add a pkgconfig file for the filesystem resize library.
+
+2016-04-10 Steven Lang <Steven.Lang@hgst.com>
+
+ Use disk geometry as basis for ext2 sector sizes.
+ When creating the geom for probed ext2 based filesystems, the
+ size was being reported in 512 byte sectors, regardless of what
+ the actual sector size of the device is.
+
+2016-04-10 Phillip Susi <psusi@ubuntu.com>
+
+ parted: fix the rescue command
+ The rescue command often failed to locate a filesystem due to it
+ leaving cylinder alignment on, which snapped the allowed bounds
+ of the filesystem down to the next lower cylinder boundary,
+ causing the detected filesystem to be rejected due to not fitting.
+
+2016-03-18 David Cantrell <dcantrell@redhat.com>
+
+ Use BLKSSZGET to get device sector size in _device_probe_geometry()
+ Seen on certain newer devices (such as >32G SDHC memory cards), the
+ HDIO_GETGEO ioctl does not return useful information. The libparted
+ code records hardware and bios reported geometry information, but all of
+ that is largely unusable these days. The information is used in the
+ PedConstraint code for aligning partitions. The sector count is most
+ useful. Rather than only trying HDIO_GETGIO, first initialize the
+ bios_geom fields to 0 and then use BLKSSZGET to capture the sector size.
+ If that fails, try HDIO_GETGEO. And if that fails, raise a warning and
+ fall back on the library's default sector size macro.
+
+ This problem showed up on Raspberry Pi devices where users were
+ attempting to grow a partition to fill the SDHC card. Using the
+ optimal_aligned_constraint returned invalid geometry information
+ (98703359 instead of 124735488 sectors). The issue was reported here:
+
+ https://github.com/fedberry/fedberry/issues/8
+
+ And to the pyparted project:
+
+ https://github.com/rhinstaller/pyparted/issues/25
+
+ I've applied this patch locally to parted, rebuilt, and reinstalled it
+ and it is working correctly for the problem SDHC cards.
+
+2016-03-07 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3000-resize-fs.sh: Add very deep directory
+ Create 500 deep directory tree, with longest name of 4000 characters, to
+ the file system being resized to test the fix to prevent crash when
+ resizing a FAT file system with such a long path.
+
+2016-03-07 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ lib-fs-resize: Prevent crash resizing FAT with very deep directories
+ Resizing a FAT file system crashes in libparted/fs/r/fat/count.c
+ flag_traverse_dir() if the length of any path name in the file system
+ overflows the 512 byte file_name local buffer. Increase buffer to 4096,
+ PATH_MAX on Linux.
+
+ Reported in
+ https://bugzilla.gnome.org/show_bug.cgi?id=762448
+
+2016-02-09 Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
+
+ fdasd.c: Safeguard against geometry misprobing
+ Fixes an issue with parted print being run against a logical
+ volume realised by extents on a physical volume residing on
+ a DASD.
+ We must make sure that geometry, device blocksize and DASD
+ attributes are present before we start format verifications
+ If any of it is missing this is not a DASD.
+
+2015-10-29 Colin Watson <cjwatson@ubuntu.com>
+
+ parted: fix build error on s390
+ The preceding dasd probing patches have introduced a compile error
+ when building with blkid support. Fixed by reordering function
+ definitions.
+
+2015-10-27 Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
+
+ dasd: enhance device probing
+ Probe for all device/transport types as every block device
+ could be a DASD on s390.
+
+ Since the calculation of the minimum and optimum alignment
+ is different between DASDs and common fixed block disks
+ we need a means other than dev->type == PED_DEVICE_DASD.
+ For that purpose a static function _ped_device_like_dasd()
+ offering a DASD detection heuristic has been added to
+ arch/linux.c.
+
+ By always providing arch-specific alignment functions the
+ need for DASD-specific code could be removed from device.c.
+
+ Observe fdasd_get_geometry return code for proper error
+ handling.
+
+ Remove the obsolete API check as we no longer require the
+ DASD-specific IOCTLs.
+
+ Acked-by: Stefan Haberland <stefan.haberland@de.ibm.com>
+
+2015-10-27 Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
+
+ fdasd: geometry handling updated from upstream s390-tools
+ Remove the necessity for DASD-specific ioctls for partition handling.
+ This allows to correctly handle DASD-backed virtio block devices.
+
+ Note that this is necessary because virtio is just the transport.
+ A DASD, even if provided via virtio, still has it's unique
+ characteristics, which means that only traditional DASD partition
+ table formats can be used (no MBR, GPT, or similar).
+
+ Use bzero for initialization to make sure all struct members are
+ properly cleared. Also changed partition list handling code to be
+ more similar to upstream s390-tools fdasd.
+
+ Further, enhanced error handling capabilities by providing a
+ return code by fdasd_get_geometry.
+
+ Code is largely backported from s390-tools project.
+
+ Acked-by: Stefan Haberland <stefan.haberland@de.ibm.com>
+
+2015-10-09 Brian C. Lane <bcl@redhat.com>
+
+ tests: Use wait_for_dev_to_ functions
+ Recent changes to udev have made some long-standing problems appear more
+ frequently. udev executes various actions when changes are made to
+ devices. Sometimes this can result in device nodes not appearing
+ immediately. Other times it can result in EBUSY being returned. This
+ patch only addresses devices that are slow to appear/disappear.
+
+ It is best to use the wait_for_dev_to_appear_ and
+ wait_for_dev_to_disappear_ functions than to test for existance. These
+ will loop and wait for up to 2 seconds for it to appear.
+
+ This also changes t9041 to fail if mkfs doesn't work since using skip
+ here may hide cases when the device node doesn't appear.
+
+2015-10-09 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Use read only when probing devices on linux (#1245144)
+ When a device is opened for RW closing it can trigger other actions,
+ like udev scanning it for partition changes. Use read only for the
+ init_* methods and RW for actual changes to the device.
+
+ This adds _device_open which takes mode flags as an argument and turns
+ linux_open into a wrapper for it with RW_MODE.
+
+ _device_open_ro is added to open the device with RD_MODE and increment
+ the open_counter. This is used in the init_* functions.
+
+ _device_close is a wrapper around linux_close that decrements the
+ open_counter and is used in the init_* functions.
+
+ All of these changes are self-contained with no external API changes.
+ The only visible change in behavior is that when a new PedDevice is
+ created the device is opened in RO_MODE instead of RW_MODE.
+
+ Resolves: rhbz#1245144
+
+2015-08-07 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix misspelling in hfs exception string
+
+2015-08-07 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Stop converting . in sys path to /
+ In _probe_sys_block it claimed that ! and . are replaced by / in sys
+ paths, but according to the kernel code only ! is replaced (for cciss
+ devices).
+
+ This is now causing problems with libnvdimm devices, the details are
+ here:
+
+ https://git.kernel.org/cgit/linux/kernel/git/djbw/nvdimm.git/tree/Documentation/nvdimm/nvdimm.txt?h=libnvdimm-for-next
+
+2015-08-05 Amarnath Valluri <amarnath.valluri@intel.com>
+
+ libparted: Fix possible memory leaks
+ * libparted/fs/r/fat/resize.c(fat_convert_directory): Possible leak
+ of sub_old_dir_trav or sub_new_dir_trav in error case.
+ * libparted/fs/r/fat/resize.c(fat_construct_converted_tree ): Possible
+ leak of new_trav_info or old_trav_info in error case.
+
+2015-08-03 Amarnath Valluri <amarnath.valluri@intel.com>
+
+ libparted: Fix memory leaks
+ * libparted/fs/r/hfs/hfs.c(hfsplus_resize): Don't leak embedded_geom
+ when volume resizing failed.
+ * libparted/fs/fat/fat.c(fat_create): Don't leake fs in-case of
+ fat_write_clustor failuer.
+ * libparted/arch/linux.c(_kernel_get_partition_start_and_length): Don't leak
+ dev_fd file descriptor.
+
+ UI: Avoid memory leaks.
+ * parted/ui.c(command_line_get_sector): Don't leak input string.
+ * parted/ui.c(command_line_prompt_words): Don't leak _def string in
+ opt script mode.
+
+2015-07-13 Brian C. Lane <bcl@redhat.com>
+
+ parted: Fix crash with name command and no disklabel (#1226067)
+ A typo (the last I think) from commit 7eac058 wasn't properly checking
+ the result of ped_disk_new so it could crash if there was no disklabel
+ on the device.
+
+2015-07-13 Alexander Todorov <atodorov@redhat.com>
+
+ Fwd: [PATCH 2/2] add verbose test documentation
+
+ merge HACKING and README-hacking
+
+2015-07-02 Sergei Antonov <saproj@gmail.com>
+
+ mac: copy partition type and name correctly
+ Use strncpy() instead of strcpy() to copy partition name and type.
+ This prevents possible buffer overflow, because the source string
+ occupies up to 33 bytes with a terminating null.
+
+ Static analysis tools complain about the code as it is now:
+ Function: _generate_raw_part
+ Destination buffer too small
+ string_overflow: You might overrun the 32 byte destination string
+ part_map_entry->type by writing 33 bytes from mac_part_data->system_name
+ (Destination buffer too small, line 933)
+
+ Cc: Sabas Rosales, Blanca E <blanca.e.sabas.rosales@intel.com>
+
+2015-06-26 Brian C. Lane <bcl@redhat.com>
+
+ libparted: BLKPG_RESIZE_PARTITION uses bytes, not sectors (#1135493)
+ This results in the extended partition vanishing after adding another
+ partition.
+
+ Resolves: rhbz#1135493
+
+2015-06-26 Brian C. Lane <bcl@redhat.com>
+
+ tests: Make sure the extended partition length is correct (#1135493)
+ parted tells the kernel the wrong length when reporting a resize of an
+ extended partition. Make sure the length is 2 for 512b sectors and 1
+ sector for larger.
+
+2015-06-24 Brian C. Lane <bcl@redhat.com>
+
+ doc: Fix url for LWN article
+ Removed an extra http:// from it.
+
+2015-06-24 Alexander Todorov <atodorov@redhat.com>
+
+ tests: Fall back to C.UTF-8 if no en_US.utf8 available
+ Not all distributions (Fedora) have C.UTF-8 so first try en_US.utf8 and fall
+ back to it. This may still fail if neither exist.
+
+ * tests/t0251-gpt-unicode.sh: Test for en_US and fall back to C.UTF-8
+
+2015-06-22 Felix Janda <felix.janda@posteo.de>
+
+ libparted/fs/xfs/platform_defs.h: Include <fcntl.h> for loff_t
+ This is needed for compilation with musl libc
+
+ Suggested-by: Travis Tilley <ttilley@gmail.com>
+
+2015-06-22 Felix Janda <felix.janda@posteo.de>
+
+ libparted/arch/linux.c: Compile without ENABLE_DEVICE_MAPPER
+
+2015-03-23 Brian C. Lane <bcl@redhat.com>
+
+ Update manpage NAME so whatis will work
+
+2015-02-06 Brian C. Lane <bcl@redhat.com>
+
+ libparted: device mapper uses 512b sectors
+ device mapper doesn't use the device's sector size when creating a
+ table. It always uses 512b units. This causes partitions to be created
+ 8x smaller than expected on devices with 4906b sectors.
+
+2015-02-05 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add a test for device-mapper partition sizes
+ device-mapper uses 512b sector units, not device specific sector sizes.
+ This test ensures that the correct partition size is created, no matter
+ what the device's sector size is.
+
+2015-01-13 Phillip Susi <psusi@ubuntu.com>
+
+ parted: don't crash in disk_set when disk label not found
+ Due to a typeo in commit 7eac058 "parted: don't reload partition
+ table on every command", the disk_set command would crash if
+ a disk label was not found.
+
+2014-11-10 Brian C. Lane <bcl@redhat.com>
+
+ tests: Change minimum size to 256MiB
+ btrfs on ppc64 wants 136MiB so expand the minimum temp filesystem size
+ for the t1700-probe-fs test.
+
+2014-10-27 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3000-resize-fs.sh: Add requirement on mkfs.vfat
+ Add test skipping requirement on mkfs.vfat for the FAT32 and FAT16 file
+ system resizing tests. This matches existing test skipping requirement
+ on mkfs.hfs for the hfs+ file system.
+
+ * tests/t3000-resize-fs.sh: Also correct skip_test_ to skip_.
+ * tests/t-lib-helpers.sh: Also update message for requirement of hfs.
+
+2014-10-27 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ tests: t3000-resize-fs.sh: Add FAT16 resizing test
+ Add FAT16 resizing test so that we don't regress again.
+
+2014-10-27 Mike Fleetwood <mike.fleetwood@googlemail.com>
+
+ lib-fs-resize: Prevent crash resizing FAT16 file systems
+ Resizing FAT16 file system crashes in libparted/fs/r/fat/resize.c
+ create_resize_context() because it was dereferencing NULL pointer
+ fs_info->info_sector to copy the info_sector.
+
+ Only FAT32 file systems have info_sector populated by fat_open() ->
+ fat_info_sector_read(). FAT12 and FAT16 file systems don't have an
+ info_sector so pointer fs_info->info_sector remains assigned NULL from
+ fat_alloc(). When resizing a FAT file system create_resize_context()
+ was always dereferencing fs_info->info_sector to memory copy the
+ info_sector, hence it crashed for FAT12 and FAT16.
+
+ Make create_resize_context() only copy the info_sector for FAT32 file
+ systems.
+
+ Reported by Christian Hesse in
+ https://bugzilla.gnome.org/show_bug.cgi?id=735669
+
+2014-09-20 Heiko Becker <heirecka@exherbo.org>
+
+ libparted: also link to UUID_LIBS
+ * libparted/Makefile.am (libparted_la_LIBADD): Add UUID_LIBS.
+ This fixes building parted with the gold linker.
+
+2014-07-28 Phillip Susi <psusi@ubuntu.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.2
+ * NEWS: Record release date.
+
+2014-07-27 Phillip Susi <psusi@ubuntu.com>
+
+ Bump library REVISION number for release
+
+ tests: don't require en_US locale in t0251-gpt-unicode.sh
+ Switch from en_US.UTF-8 to C.UTF-8 so the test does not fail on systems
+ that do not have the en_US locale installed.
+
+2014-06-23 Jim Meyering <meyering@fb.com>
+
+ maint: correct a POT-file updating rule
+ * doc/C/Makefile.am (updatepo): If there is no po/$name.pot,
+ create an empty one. Reported by Philip Susi.
+
+2014-06-15 Phillip Susi <psusi@ubuntu.com>
+
+ tests: fix t9020-alignment.sh
+ This test was refering to print-alignment by absolute path, which
+ broke building with a different object directory, causing
+ make distcheck to fail.
+
+ Document resizepart command
+
+ parted: Add stub resize command for backward compatibility
+ To make sure that older scripts trying to use the resize command do not
+ accidentally run the new resizepart command by mistake, this undocumented
+ stub command will throw an error if called.
+
+ parted: Allow undocumented commands
+ Have command_print_summary print nothing if the command summary is NULL.
+ This allows for a command to be registered, but not documented in the
+ output of help.
+
+ parted: make _partition_warn_busy actually a warning instead of an error
+ This function was throwing a PED_EXCEPTION_ERROR with only the
+ PED_EXCEPTION_CANCEL option. Converted to a PED_EXCEPTION_WARNING
+ with the option to continue anyhow.
+
+ libparted: Add support for partition resize
+ When resizing a partition ( same partition number, same
+ start sector, different end sector ), try to use the
+ new BLKPG_RES_PARTITION request to update the kernel
+ partition table with the new size. Also handle resizing
+ devmapper targets.
+
+2014-06-15 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: excersise resize command
+ a lot of TODOs
+
+ parted: add resizepart command
+ Add resizepart command to resize ( change the end position ) an existing
+ partition. Note that it does nothing to a filesystem in the partition.
+
+2014-06-15 Brian C. Lane <bcl@redhat.com>
+
+ Fix python test scripts for distribution
+ make distcheck was failing because these scripts were not being
+ included.
+
+ Make them both executable and and add the path to the tests that use
+ them. They also need to be included in the distribution so update
+ Makefile.am
+
+ * tests/Makefile.am: Add python test scripts
+ * tests/gpt-header-move.py: rename to gpt-header-move and make it
+ executable
+ * tests/msdos-overlap.py: rename to overlap.py
+ * tests/t0282-gpt-move-backup.sh: add path to scripts and use new name
+ * tests/t0283-overlap-partitions.sh: same
+
+2014-06-15 Brian C. Lane <bcl@redhat.com>
+
+ tests: check name when duplicating
+ Create a second partition with a name when supported by the disk label.
+ Check to make sure that the duplicate has copied over the name. The goal
+ with this was to try to catch the bug fixed by the previous commit but I
+ was unable to make it fail. But this should improve our test coverage
+ anyway.
+
+ * tests/duplicate.c: Add a partition name test.
+
+2014-06-15 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix part dupe with empty name
+ It was setting the original translated_name to 0, not the new copy.
+
+ * libparted/labels/gpt.c (gpt_partition_duplicate): fix empty name
+
+2014-05-28 Jim Meyering <meyering@fb.com>
+
+ tests: use test's "=" operator, not "=="
+ * tests/t1700-probe-fs.sh: Avoid "make syntax-check" error: s/==/=/
+
+ tests: avoid false-positive failure due to symlink
+ * tests/t6000-dm.sh (sanitize): Helper function.
+ Before this change, this test would fail due to difference between
+ absolute name and symlink-including names in "parted print" output
+
+ maint: fix "make syntax-check" nits
+ * doc/parted.texi: Update copyright year to 2014.
+ * tests/gpt-header-move.py: Remove empty line at EOF.
+ * tests/t0281-gpt-grow.sh: Correct reversed args to compare.
+ * tests/t0282-gpt-move-backup.sh: Likewise.
+ * libparted/labels/gpt.c (gpt_partition_set_name): Change "Can not"
+ to "failed to" in diagnostic.
+ (gpt_partition_get_name): Likewise.
+ * tests/t1102-loop-label.sh (dev): Remove trailing space in
+ here document that creates expected output, and strip that
+ same trailing space from actual output.
+ * libparted/fs/jfs/jfs.c: Do not cast alloca return value.
+ * libparted/fs/reiserfs/reiserfs.c: Likewise.
+ * libparted/fs/xfs/xfs.c: Likewise.
+
+2014-05-27 Brian C. Lane <bcl@redhat.com>
+
+ tests: Use mkfs.xfs to create files (#1101112)
+ On s390 there is a bug with mkfs.xfs and pre-existing files. Work around
+ it by creating the file directly with mkfs.xfs. This also works on other
+ arches.
+
+ * tests/t1700-probe-fs.sh: Check for xfs and use direct file creation
+ * tests/t4100-dvh-partition-limits.sh: Use mkfs.xfs -dfile
+ * tests/t4100-msdos-partition-limits.sh: Use mkfs.xfs -dfile
+
+2014-05-27 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add ntfs vfat hfsplus to t1700 probe test
+ Add some new filesystems to test. Adjust how mkfs.* tests, since some of
+ them don't support -V, and add fsname so that the printed filesystem
+ name doesn't have to match the type.
+
+ * tests/t1700-probe-fs.sh: Add new filesystems to test
+
+2014-05-25 Jim Meyering <meyering@fb.com>
+
+ maint: run "make update-copyright"
+
+ maint: remove doubled word: s/on on/on/
+ * NEWS: Remove doubled-word detected by "make syntax-check".
+
+ gnulib: update submodule to latest
+ * gnulib: Update module to latest.
+ * bootstrap: Update from gnulib.
+
+2014-05-25 Sergei Antonov <saproj@gmail.com>
+
+ libparted: mac: support sector size > 512 correctly
+ This patch fixes several problems found when trying to do Apple
+ Partition Map on a 4K-sector iPod. The problems happened because of
+ unneeded conversion between physical sectors and 512-byte units.
+ For devices with sector 512 the conversion did no harm, for others it did.
+
+ List of problems (all are gone with the patch):
+
+ * Partition in OS X, connect to Linux, run "parted <dev> print".
+ "Error: Can't have a partition outside the disk!" is shown.
+ Every partition is displayed 8 times (4k/512) bigger its real size.
+
+ * Exec "mktable mac", connect to OS X.
+ The drive's partitioning scheme is not recognized.
+
+ * mkpart creates partitions 8 times (4k/512) smaller than requested.
+
+2014-05-22 Phillip Susi <psusi@ubuntu.com>
+
+ tests: test loop labels
+ Verify previous fixes to loop labels.
+
+ libparted: don't trash filesystem when writing loop label
+ If you deleted the fake partition on a loop label, loop_write() would write
+ the loop signature to the device, zeroing out all other bytes in the first
+ sector. When the disk contained an ext[234] filesystem and was using 2k
+ sectors, this would trash the super block residing in the 1-2kb part of the
+ sector causing the disk to become unrecognized. Instead, read the existing
+ sector and only modify the first few bytes that contain the loop label.
+
+ libparted: give correct partition device name on loop labels
+ ped_partition_get_path() was returning "/dev/foo1" instead of
+ "/dev/foo" on loop labels. This caused gparted to run tools like mkfs on
+ a device node that did not actually exist.
+
+ partprobe: do not skip loop labels
+ Partprobe was not syncing loop labels. This resulted it failing to remove
+ existing partitions when switching to a loop label.
+
+ libparted: don't create partition on loop label
+ The loop label represents an unpartitioned disk, but creates
+ a dummy partition to represent the whole disk. This dummy partition
+ was actually being loaded into the kernel. Don't do that.
+
+2014-05-22 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: fix loop labels to not vanish
+ The loop label type was using the existence of a partition as a proxy for
+ a filesystem being detected, and loop_write() would try to write a loop
+ signature if there was no filesystem, and erase it if there was. Because
+ of this, creating a partition without writing a filesystem to it caused
+ loop_write to erase the loop label.
+
+ There seems to be no reason to bother erasing the loop label if it is still
+ present along with a filesystem signature, so don't bother with this, and
+ actually check to see if a filesystem is detected in the partition rather
+ than using the existence of a partition to decide if writing the loop
+ signature is needed. Finally, since there is no way to preserve the
+ existence of a partition with no filesystem in it, have loop_read() always
+ create a partition, even if no filesystem is detected.
+
+2014-05-22 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: remove all old partitions, even if new label allows less
+ We were limiting partition sync operations to the lesser number allowed
+ by the device, or the label. This meant that when creating a new label
+ over an old label that had more partitions than the new one allows, the
+ higher partitions would not be removed. Use the greater of the two values
+ for the remove pass, and the lesser for the add.
+
+ libparted: remove old partitions *first* before adding new ones
+ "libparted: avoid disturbing partitions" put the remove of the old
+ partition in second pass. If you simultaneously removed partitions 1
+ and 2, and created a new partition #1 that overlapped the previous second
+ partition, the sync would fail because it would try to create the new,
+ larger partition #1 before removing the old partition #2.
+
+ libparted: don't detect fat and ntfs boot sectors as dos MBR
+ fat and ntfs boot sectors are very similar to an MBR so if you had one of
+ these filesystems on an unpartitioned disk, parted detected them as a dos
+ partition table. Have the dos label code call the fat and ntfs filesystem
+ probes and if they recognize the sector ( their tests are more stringent )
+ then don't claim it as a dos label.
+
+2014-05-22 Phillip Susi <psusi@ubuntu.com>
+
+ parted: don't reload partition table on every command
+ gpt was using a static local variable to suppress repeatedly reporting
+ an error if you chose to ignore it. This is incorrect as the variable is
+ global to all disks, and ignoring the error on one should not suppress its
+ reporting on another. Moving the flag to the PedDisk object made it
+ effectively useless because parted was destroying the PedDisk and reloading
+ the partition table on every command.
+
+ Parted has been reworked to cache the PedDisk once loaded, and only discard
+ it when changing disks, or creating a new disklabel.
+
+2014-05-22 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: fix fat resize
+ The changes to fix filesystem detection on non 512 byte sector sizes broke
+ fat filesystem resizing.
+
+2014-05-19 Brian C. Lane <bcl@redhat.com>
+
+ GPT strings are UCS-2LE not UTF-16
+ There was a problem using UTF-16, it was writing the Byte Order Mark
+ before the string which caused problems with older versions of parted
+ reading the partition name. The test was skipping these 2 bytes when
+ checking the written string.
+
+ * libparted/labels/gpt.c: Switch to UCS-2LE for GPT Partition names
+ * tests/t0251-gpt-unicode.sh: Update the test
+
+2014-04-29 Brian C. Lane <bcl@redhat.com>
+
+ Update NEWS with new DASD features.
+ * NEWS: New DASD support
+
+2014-04-29 Petr Uzel <petr.uzel@suse.cz>
+
+ dasd: avoid usage of uninitialized data
+ In ped_partition_new(), disk_specific data of PedPartition
+ structure is allocated (via dasd_partition_new()). This
+ data is later used uninitialized in dasd_partition_set_system().
+
+ * libparted/labels/dasd.c (dasd_partition_new):
+ Zero out allocated disk_specific data.
+
+2014-04-29 Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
+
+ libparted: mklabel to support EDEV DASD
+ Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
+ which are layed out as a sequence of 512-byte sectors. This patch adds
+ support for mklabel to properly handle FBA devices.
+
+ libparted: Avoid dasd as default disk type while probe
+ This patch avoids setting 'dasd' as a default disk type for
+ 'disk image file' at the time of probe.
+
+ libparted: mklabel to support EAV DASD
+ Extended Address Volume (EAV) DASDs are ECKD DASDs with more than
+ 65520 cylinders. This patch adds support for mklabel to properly
+ handle unformatted EAV DASDs.
+
+2014-04-29 Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
+
+ libparted: add support for EAV DASD partitions
+ Extended Address Volume (EAV) DASDs are ECKD DASDs with more than
+ 65520 cylinders. This patch adds support for recognizing and
+ modifying partitions on EAV DASDs to Parted. The changes are
+ based on the EAV support added to version 1.8.1 [1] of the
+ s390-tools package.
+
+ [1] http://www.ibm.com/developerworks/linux/linux390/s390-tools-1.8.1.html
+
+2014-04-29 Nageswara R Sastry <rnsastry@linux.vnet.ibm.com>
+
+ libparted: add support for implicit FBA DASD partitions
+ Fixed Block Access (FBA) DASDs are mainframe-specific disk devices
+ which are layed out as a sequence of 512-byte sectors. In contrast
+ to ECKD DASDs, these disks do not require formatting and resemble
+ the LBA layout of non-mainframe disks. Despite this resemblance,
+ the Linux kernel applies special handling during partition detection
+ for FBA DASDs, resulting in a single, immutable partition being
+ reported.
+
+ While actual FBA DASD hardware is no longer available, the z/VM
+ hypervisor can simulate FBA DASD disks, backed by either ECKD or
+ SCSI devices.
+
+ This patch adds support for recognizing FBA DASD partitions
+ to parted.
+
+2014-04-18 Phillip Susi <psusi@ubuntu.com>
+
+ Fix filesystem detection on non 512 byte sectors
+ Enable probing for filesystems with non 512 byte sectors, and fix up each
+ filesystem to correctly handle that. Remove unused field from the fs type
+ structure listing acceptable sector sizes.
+
+ tests: fix t2310-dos-extended-2-sector-min-offset.sh
+ This test was ignoring the requested sector size and always using
+ 512 bytes per sector. Fix it to use the requested sector size.
+
+ tests: fix t1700
+ bb181a7e: "tests: Use force for xfs in t1700 and a larger file" caused
+ the previous filesystem signatures to be left in the image file
+ causing mkfs.nilfs2 to complain that there is already an xfs filesystem
+ there, and hang the test suite waiting for an answer to proceed or not.
+ Remove the file between filesystems so it is recreated cleanly again.
+
+ libparted: remove last_usable_if_grown
+ Commit 3398e82a: "libparted: Use common function to calculate PTE sectors"
+ removed usage of the last_usable_if_grown variable, resulting in an error
+ because it is now unused but still defined.
+
+2014-04-17 Brian C. Lane <bcl@redhat.com>
+
+ tests: t1700 change count to seek
+ Fix a typo when changing to sparse images.
+
+ * tests/t1700-probe-fs.sh: count should be seek.
+
+2014-04-16 Brian C. Lane <bcl@redhat.com>
+
+ tests: Use force for xfs in t1700 and a larger file
+ Also use sparse files that are (with 512B blocks) 128M so that they are
+ large enough for all the filesystems.
+
+ * tests/t1700-probe-fs.sh: Make changes.
+
+2014-04-10 Ming Liu <ming.liu@windriver.com>
+
+ libparted: fix several integer overflows with dvh labels
+ Integer overflows was found in libparted/labels/dvh.c, while attemptting
+ assign unsigned int values to int types in some places.
+
+ Defined by unsigned int instead.
+
+ * libparted/labels/dvh.h: Change int to unsigned int
+
+2014-04-10 Brian C. Lane <bcl@redhat.com>
+
+ testing: Use little-endian packing in gpt tests
+ Fix gpt-header-move.py and gpt-header-munge to use little endian when
+ packing and unpacking. This allows us to turn the t0210 and t0211 tests
+ back on for big-endian systems.
+
+ * tests/gpt-header-move.py: Use little endian for pack/unpack
+ * tests/gpt-header-munge: Same
+ * tests/t-lib-helpers.sh: Add requires_64bit_ that checks for x86_64 and ppc64
+ * tests/t0210-gpt-resized-partition-entry-array.sh: Remove x86_64 test
+ * tests/t0211-gpt-rewrite-header.sh: Same
+
+2014-04-08 Brian C. Lane <bcl@redhat.com>
+
+ tests: Use msdos-overlap to setup t0283
+ xxd isn't present in minimal build systems, as it is part of vim. Change
+ to using a simple python script to mangle the msdos disklabel for the
+ test.
+
+ * tests/msdos-overlap.py: New file
+ * tests/t0283-overlap-partitions.sh: Use msdos-overlap.py
+
+2014-04-08 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add emit_superuser_warning for gpt tests
+ When parted runs without script mode it will print a warning about not
+ being superuser. Add the library call to add this to expected output
+ from the tests.
+
+ * tests/t0281-gpt-grow.sh: Add emit_superuser_warning
+ * tests/t0282-gpt-move-backup.sh: Add emit_superuser_warning
+ * tests/t0283-overlap-partitions.sh: Add emit_superuser_warning
+
+2014-04-08 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Use common function to calculate PTE sectors
+ Use _ptes_sectors in _parse_header's calculation to determine if the
+ disk has been grown.
+
+ * libparted/labels/gpt.c (_parse_header): use _ptes_sectors
+
+2014-04-08 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Fix check for backup header location
+ Add a couple of helper functions for calculating the partition table
+ entry size (in sectors) and for guessing the end of the disk based on
+ the LastUsableLBA and the Partition Table Entry size.
+
+ The backup header should be either at the end of the disk, or at what
+ the primary header thinks is the end of the disk. Prompt to fix the
+ backup header if it is located any other place.
+
+ * libparted/labels/gpt.c (_ptes_sectors): New function
+ (_hdr_disk_end): New function
+ (gpt_read): Use new function to test for pri's idea of end of disk
+
+2014-03-05 Gustavo Zacarias <gustavo@zacarias.com.ar>
+
+ ui: switch to new-style readline typedef
+ The CPPFunction typedef (among others) have been deprecated in favour of
+ specific prototyped typedefs since readline 4.2 (circa 2001).
+ It's been working since because compatibility typedefs have been in
+ place until they where removed in the recent readline 6.3 release.
+ Switch to the new style to avoid build breakage.
+
+2014-03-05 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: sync partitions > 16
+ The linux partition sync code was hard coded to only flush
+ the first 16 partitions.
+
+2014-03-02 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: don't require a system id string
+ Historically the system ID field of a fat boot sector contains a
+ string identifying the OS that formatted it. It appears that some
+ recent versions of Windows have stopped bothering with this. Stop
+ requiring this string to recognize fat as valid.
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ tests: Restrict gpt-header-munge to little-endian systems
+ gpt-header-munge uses perl to manipulate the gpt header for the test. It
+ only works on 64 bit little-endian systems so restrict it to x86_64
+ only.
+
+ * tests/t0210-gpt-resized-partition-entry-array.sh: Skip if not x86_64
+ * tests/t0211-gpt-rewrite-header.sh: Skip if not x86_64
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ tests: Add btrfs and xfs to the fs probe test
+ * tests/tests/t1700-probe-fs.sh: Add btrfs and xfs
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Recognize btrfs filesystem
+ Add support for showing 'btrfs' in the 'file system' column. Also
+ allows the used to enter btrfs as the fs type. It doesn't really do
+ anything -- just sets the partition type to linux.
+
+ * NEWS (Changes in behavior): Mention it.
+ * doc/parted.texti: Document btrfs fs.
+ * (libparted/fs/Makefile.am): Add btrfs.c
+ * (libparted/fs/btrfs/btrfs.c): Probe for btrfs
+ * (libparted/libparted.c): Register btrfs
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Add UEFI System Partition flag.
+ This adds support for the ESP partition type on MS-DOS. It also aliases
+ it to the boot flag on GPT which sets the ESP GUID type.
+
+ * NEWS (New Features): Mention it.
+ * doc/C/parted.8: Document esp flag.
+ * doc/parted.texti: Document esp flag.
+ * include/parted/disk.in.h (_PedPartitionFlag): Add PED_PARTITION_ESP flag
+ * libparted/disk.c (ped_partition_flag_get_name): Add esp flag
+ * libparted/labels/dos.c (DosPartitionData): Likewise
+ (raw_part_parse): Likewise
+ (msdos_partition_new): Likewise
+ (msdos_partition_duplicate): Likewise
+ (msdos_partition_set_system): Likewise
+ (clear_flags): Likewise
+ (msdos_partition_set_flag): Likewise
+ (msdos_partition_get_flag): Likewise
+ (msdos_partition_is_flag_available): Likewise
+ * libparted/labels/gpt.c (gpt_partition_set_flag): Add PED_PARTITION_ESP
+ (gpt_partition_get_flag): Likewise
+ (gpt_partition_is_flag_available): Likewise
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ libparted: Add Intel Rapid Start Technology partition flag.
+ This adds support for the irst partition type flag. Sets the type to
+ 0x84 on MS-DOS and D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593 on GPT.
+
+ * NEWS (New Features): Mention it.
+ * doc/C/parted.8: Document irst flag.
+ * doc/parted.texti: Document irst flag.
+ * include/parted/disk.in.h (_PedPartitionFlag): Add PED_PARTITION_IRST flag
+ * libparted/disk.c (ped_partition_flag_get_name): Add irst flag
+ * libparted/labels/dos.c (DosPartitionData): Likewise
+ (raw_part_parse): Likewise
+ (msdos_partition_new): Likewise
+ (msdos_partition_duplicate): Likewise
+ (msdos_partition_set_system): Likewise
+ (clear_flags): Likewise
+ (msdos_partition_set_flag): Likewise
+ (msdos_partition_get_flag): Likewise
+ (msdos_partition_is_flag_available): Likewise
+ * libparted/labels/gpt.c: Add PARTITION_IRST_GUID
+ (GPTPartitionData): Add irst flag
+ (_parse_part_entry): Likewise
+ (gpt_partition_new): Likewise
+ (gpt_partition_set_system): Likewise
+ (gpt_partition_set_flag): Likewise
+ (gpt_partition_get_flag): Likewise
+ (gpt_partition_is_flag_available): Likewise
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ tests: rewrite t6001 to use /dev/mapper
+ This test began failing because using a private copy of /dev/mapper
+ confuses the system. This fixes that and generally cleans up the test.
+
+ tests/t6001.sh: update to use /dev/mapper directly
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ libparted: don't canonicalize /dev/md/ paths (#872361)
+ This is the same issue we have with /dev/mapper/ paths that was fixed in
+ commit c1eb485b9fd8919e18f192d678bc52b0488e6ee0. When libparted
+ is used to setup the device the symlink should be used to reference it,
+ not the backing device name which could change.
+
+ * libparted/device.c (ped_device_get): Don't canonicalize names
+ that start with "/dev/md/".
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ tests: Make sure dm UUIDs are not erased
+ * tests/t6005-dm-uuid.sh: Make sure dm UUIDs are not erased
+
+ libparted: preserve the uuid on dm partitions (#832145)
+ * libparted/arch/linux.c (_dm_add_partition): Set the uuid if there was
+ one.
+
+2014-03-02 Brian C. Lane <bcl@redhat.com>
+
+ libparted: use dm_udev_wait (#698121)
+ This is based on Peter Rajnoha's patch to use dm_udev_wait to
+ synchronize with udev.
+
+ This requires libdevmapper v1.02.39 and higher.
+
+ mailing list thread:
+ https://lists.gnu.org/archive/html/bug-parted/2010-09/msg00007.html
+
+ * libparted/arch/linux.c (_dm_task_run_wait): New function
+ (_is_dm_major): Add cookie and change call to _dm_task_run_wait
+ (_is_dmraid_device): Same
+ (_dm_is_part): Same
+ (dm_canonical_path): Same
+ (_dm_remove_partition): Same
+ (_dm_get_partition_start_and_length): Same
+ (_dm_add_partition): Same
+ (linux_new): Enable udev sync support
+
+2014-02-25 Brian C. Lane <bcl@redhat.com>
+
+ tests: test creating 20 device-mapper partitions (#803108)
+ * tests/t6004-dm-many-partitions.sh: Make sure > 17 partitions appear in
+ device mapper.
+
+ libparted: copy pmbr_boot when duplicating GPT disk
+ * libparted/labels/gpt.c (gpt_duplicate): copy pmbr_boot flag
+
+2014-02-24 Phillip Susi <psusi@ubuntu.com>
+
+ Fix help text for disk_{set,toggle}
+ Fix the help text to show *disk* flags instead of partition flags.
+
+2013-12-23 Phillip Susi <psusi@ubuntu.com>
+
+ bug#15591: [PATCH] libparted: handle i18n gpt partition names correctly
+ gpt.c was simply truncating the UTF-16 characters stored
+ in the partition name field to 8 bits. This corrupted non
+ ascii characters which later resulted in parted crashing in
+ strlist.c trying to convert the now invalid multi byte
+ characters to wchar.
+
+ gpt.c will now properly convert the UTF-16 to the current
+ locale encoding.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: make sure not to treat percentages as exact
+ If 1% of the drive size worked out ot be an even power of
+ two, it would trigger the exact placement. Add an exception
+ for the percent units.
+
+2013-11-23 Daniel Battaiola Kreling <dbkreling@br.ibm.com>
+
+ GPT: add support for PReP GUID
+ PReP (PowerPC Reference Platform) boot partition is the first partition used in
+ PowerPC platform for containing the bootable kernel or bootloader. The firmware
+ searches for this partition and jumps to it for booting. So far no GUID was
+ specified for this partition type and hence booting from GPT disk was not
+ supported on this platform. A new GUID 9e1a2d38-c612-4316-aa26-8b49521e5a8b for
+ PReP partition is proposed to be included in GPT.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ Fix test compilation
+ The tests were not being linked against libpthread but were using
+ it, and recent versions of gcc refuse to implicitly pull it in.
+
+ libparted: avoid disturbing partitions
+ The partition sync logic was first removing all
+ partitions, then trying to re-add them. This resulted in many
+ udev events triggering annoying behavior like auto mounting.
+ Refactor the code to avoid removing and re-adding unmodified
+ partitions.
+
+ Revert "linux-commit: do not unnecessarily open partition device nodes"
+ This reverts commit 2a6936fab4d4499a4b812dd330d3db50549029e0. The commit
+ disabled flushing the block buffer caches on the partition nodes to ensure
+ cache consistency on 2.6 kernels, supposedly because this was no longer
+ required. It appears this was incorrect, and the caches DO still need
+ flushed, otherwise a new fs written to the partition device does not show
+ up in the disk device cache, causing parted to still identify the old fs.
+
+ libparted: allow some common errors to be ignored
+ Partitions that overlap or extend beyond the end of the disk are common
+ errors that usually result in people having to use other tools to correct
+ because parted refuses to operate when it sees them. Change these errors
+ to allow you to ignore them and use parted to correct the problem.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: fix gpt end of disk handling
+ There are two checks for problems with the end of disk. The first checks
+ to make sure that the backup gpt is actually at the end of the disk as it
+ should be. The second checks to see that the gpt's idea of where the disk
+ ends is correct. The handling of the backup gpt location was wrong because
+ if you chose not to fix the error, then as soon as you made any changes the
+ backup would be written to the end of the disk anyhow, only the previous
+ backup would not be zeroed.
+
+ This patch fixes the write path to put the backup gpt where the gpt says
+ it goes, not where we think the disk ends. This allows you to choose
+ not to fix the problems, and the backup gpt will be written to the same
+ place it was before, not the new end of disk.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: handle logical partitions starting immediately after the EBR
+ _blkpg_add_partition() set the length of the extended partition
+ to 2 sectors to allow LILO to be installed there, beacuse the
+ linux kernel does this. If a logical partition used that second
+ sector, adding it would fail beacuse of the overlap. Now
+ _blkpg_add_partition() will limit the length to only the first
+ sector if the second is used by a logical partition.
+
+ Previously parted did create the partition table, and after a
+ reboot, the kernel would recognize the table, and happily create
+ the extended partition as 2 sectors long, thus overlapping the
+ logical partition, but when parted tried to recreate the same
+ table with BLKPG, the kernel rightly rejected it.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ gpt: Revert small device commits
+ The following commit broke the position of the LastUsableLBA:
+
+ 48f236f9: gpt: permit "mklabel gpt" on a 67-sector device
+
+ It introduced an off by one error, leaving LastUsableLBA pointing to
+ the first sector of the backup partition table instead.
+
+ This effectively reverts that commit, as well as adjusting the subsequent
+ commits to instead use 68 sectors as the minimum length. I believe
+ this is the minimum legal size as at 67 sectors, there is no valid
+ value for FirstUsableLBA and LastUsableLBA.
+
+2013-11-23 Phillip Susi <psusi@ubuntu.com>
+
+ tests: t6003-dm-hide: don't hang on exception
+ If the parted -l found any exceptions, it would print the prompt, which was
+ redirected to the log, then hang waiting for input, which never came. Use
+ script mode to disable the prompts.
+
+ parted: fix EOF and ctrl-c handling
+ feof() seems to not detect EOF after readline() hits it, so parted went
+ into an infinite loop prompting for input on EOF. Change test to use the
+ got_ctrl_c variable instead, which is set when readline hits EOF and
+ returns NULL. This also makes parted properly exit on ctrl-c.
+
+2013-10-09 Jim Meyering <meyering@fb.com>
+
+ bootstrap: update to latest from gnulib
+
+2013-10-09 Jonathan Liu <net147@gmail.com>
+
+ dos: improve MBR signature generation
+ Using tv_usec in struct timeval from gettimeofday() doesn't provide
+ enough precision to fill an unsigned 32-bit integer and isn't really
+ random. It it always less than one million when using the GNU C library
+ while an unsigned 32-bit integer ranges between 0 and 4294967295.
+
+ In FAT filesystem creation, parted already uses a better random
+ generator, so move that code into a common function and use it
+ for MS-DOS MBR signature generation.
+
+ * libparted/fs/r/fat/fat.c (_gen_new_serial_number): Remove.
+ (fat_create): Use generate_random_uint32 instead of
+ _gen_new_serial_number.
+ * libparted/labels/dos.c (generate_random_id): Remove.
+ (msdos_write): Use generate_random_uint32 instead of
+ generate_random_id.
+ * libparted/labels/misc.h (generate_random_uint32): New function.
+ Created from _gen_new_serial_number in libparted/fs/r/fat/fat.c with
+ additional check to avoid returning zero, which may be interpreted
+ as no FAT serial number or no MBR signature.
+
+2013-01-06 Jim Meyering <jim@meyering.net>
+
+ maint: avoid new warning/error with gcc-4.8.0 20130105
+ * configure.ac (WERROR_CFLAGS): Disable -Wsuggest-attribute=format.
+ It was suggesting to apply the gnu_printf attribute to vsnprintf.
+
+ maint: update all copyright year number ranges
+ Run "make update-copyright".
+
+ build: update gnulib submodule to latest
+
+2013-01-02 Jim Meyering <jim@meyering.net>
+
+ doc: 1MiB-alignment is not enough for cheap flash drives
+ * doc/parted.texi: Add an example that aligns to 4GiB, and
+ reference Arnd Bergman's LWN article.
+
+2012-10-29 Jim Meyering <jim@meyering.net>
+
+ tests: make t6003-dm-hide work reliably on F17
+ * tests/t6003-dm-hide.sh: Adjust to work reliably on Fedora 17.
+
+2012-10-29 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: don't probe every dm device in probe_all
+ We were probing every dm device. Only probe dmraid whole disk
+ (non-partition) devices instead. This removes the clutter of
+ LVM logical volumes, and dmraid partitions from the list, which
+ usually do not make sense to partition.
+
+ * NEWS (Changes in behavior): Mention it.
+ * libparted/arch/linux.c (_is_dmraid_device): New function.
+ (_dm_is_part): Likewise.
+ (_probe_dm_devices): Use the latter.
+ * tests/t6003-dm-hide.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2012-10-29 Phillip Susi <psusi@ubuntu.com>
+
+ libparted: remove extraneous blkpg add partition ped exception
+ _blkpg_add_partition was throwing an exception if it failed to add the
+ new partition, in addition to _disk_sync_part_table throwing one, and
+ then bailing out. Instead of bailing out, just log the error for
+ reporting later and continue.
+
+ libparted: refactor device-mapper partition sync code
+ The device-mapper partition sync code was still using the remove all
+ partitions, then add new partitions method. Refactor to use the same
+ algorithm as regular disks: try to remove all, and ignore any that could
+ not be removed but have not changed.
+
+2012-10-23 Eric Blake <eblake@redhat.com>
+
+ build: default to --enable-gcc-warnings in a git tree
+ Anyone building from cloned sources can be assumed to have a new
+ enough environment, such that enabling gcc warnings by default will
+ be useful. Tarballs still default to no warnings, and the default
+ can still be overridden with --disable-gcc-warnings.
+ * configure.ac (gl_gcc_warnings): Set default based on environment.
+
+2012-10-17 Brian C. Lane <bcl@redhat.com>
+
+ tests: cleanup losetup usage
+ The unsafe_losetup_ function was failing because losetup didn't
+ recognize that the 'private' /dev/loopX devices were the same as
+ /dev/loopX, it would fail even if one was in use. Switch to using
+ losetup --show which is a cleaner solution.
+ Also use sparse file for loop_setup to save space.
+ * tests/t-lvm.sh (unsafe_losetup_): Remove function.
+ (loop_setup_): Use losetup's --show option instead.
+ Use dd with /dev/null, not /dev/zero.
+ * tests/t6001-psep.sh: Use loop_setup_ rather than losetup --show.
+
+2012-10-17 Jim Meyering <jim@meyering.net>
+
+ maint: regenerate .po, .pot files
+
+ maint: use $(AM_V_GEN) to cut down on build noise
+ * doc/Makefile.am: Prefix each rule with $(AM_V_GEN).
+ * doc/po4a.mk (dist_man_MANS): Likewise.
+
+2012-10-16 Petr Uzel <petr.uzel@suse.cz>
+
+ partprobe: remove partitions when there is no partition table
+ When partprobe detects no partition table on a device, it should
+ tell the kernel to drop partitions on that device, but it did not.
+ * parted/partprobe.c (process_dev): When ped_disk_probe fails,
+ create a dummy (empty) partition table and use that.
+ * NEWS (Bug fixes): Mention it.
+ Addresses: https://bugzilla.novell.com/783419
+
+2012-10-15 Petr Uzel <petr.uzel@suse.cz>
+
+ doc: update partprobe manpage
+ * doc/C/partprobe.8: Add long options, REPORTING BUGS section
+ and adjust DESCRIPTION section because it wasn't quite correct.
+
+ partprobe: remove --no-update long option
+ It was deprecated and scheduled for removal in 2009.
+ * partprobe/partprobe.c (long_options): Remove "no-update" entry.
+
+ build: .gitignore: ignore tests/fs-resize
+
+2012-10-09 Jim Meyering <meyering@redhat.com>
+
+ build: do not rely on automake's AM_TESTS_ENVIRONMENT
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Rename from
+ AM_TESTS_ENVIRONMENT, since it is not honored in automake-1.11.3
+ after all. This reverts commit v3.1-14-g2bd66d7. For now, I'll
+ leave the following commit that made bootstrap.conf require 1.11.2.
+ Prompted by a report of test failure from Phillip Susi.
+
+2012-10-09 Gilles Espinasse <g.esp@free.fr>
+
+ tests: t8001: do not rely on "modprobe loop"
+ Remove 'rmmod loop' and 'modprobe loop max_part=7' commands.
+ The latter command may fail after the first command has run,
+ leaving the machine with no loop support.
+
+ This happens on my chroot, because:
+ - rmmod does not depend on the availability of the loop module,
+ - modprobe fails, since the kernel compiled inside the chroot
+ is different from the running kernel.
+
+ Instead, rely on t-lvm loop_setup_ to load the loop module, if required.
+
+2012-10-09 Jim Meyering <meyering@redhat.com>
+
+ tests: improve test for partitionable loop devices
+ * tests/init.cfg (require_partitionable_loop_device_): Skip
+ when cat fails.
+
+2012-10-06 Jim Meyering <meyering@redhat.com>
+
+ maint: fix an error in the preceding commit log
+ Stefano Lattarini noticed an error in the log for
+ commit v3.1-32-g478e472. Arrange for that error
+ to be fixed in the generated ChangeLog file.
+ * build-aux/git-log-fix: New file.
+ * Makefile.am (gen-ChangeLog): Adjust rule to use it.
+
+ tests: stop using private "dev" directory for losetup
+ Something about Fedora 17's losetup changed so that using a private
+ dev directory no longer worked. Now, simply use /dev/ directly.
+ * tests/t-lvm.sh: Don't use $G_dev_. Not needed, and actually
+ caused the t6000-dm root-only test to fail on Fedora 17.
+ Also, redirect less to /dev/null: that helps diagnose failure.
+
+2012-10-03 Bob Beers <bob.beers.gmail.com> (tiny change)
+
+ doc: libparted/disk.c: correct doxygen comment typo
+ * libparted/disk.c: s/PedPartition/PedDisk/
+
+2012-09-29 Jim Meyering <meyering@redhat.com>
+
+ tests: clean up tests
+ Use warn_ and $ME_ in place of warn and $ME; remove definitions of
+ the latter two. Remove unused code.
+ * tests/lvm-utils.sh: Remove file. All functions were either unused
+ or duplicated/better in t-lvm.sh.
+ * tests/Makefile.am (EXTRA_DIST): Remove it.
+ * tests/t-local.sh (scsi_debug_setup_): Use echo 1>&2, not warn_, to
+ emit to log file only, not console. The diagnostic it emitted (in
+ verbose mode) was more "informational" than a warning.
+ * tests/t9030-align-check.sh: Use warn_, not warn.
+ * tests/t-lvm.sh: Likewise, and use fail_, not error (undefined!).
+ * tests/t-lib-helpers.sh (device_mapper_required_): Use t-lvm.sh
+ and an explicit lvm_init_root_dir_ in place of lvm-utils.sh.
+
+2012-09-29 Roderick W. Smith <rodsmith@rodsbooks.com>
+
+ add support for a new Linux-specific GPT partition type code
+ * NEWS: Describe the new Linux-specific partition type code
+ and the new msftres flag that can be used to override this type
+ code, should it be necessary.
+ * doc/parted.texi: Describe of the new msftres flag.
+ * include/parted/disk.in.h [_PedPartitionFlag]: Add
+ PED_PARTITION_MSFT_DATA.
+ * libparted/disk.c: Add check for PED_PARTITION_MSFT_DATA, with
+ return of "msftdata", to ped_partition_flag_get_name()
+ * libparted/labels/gpt.c (PARTITION_LINUX_DATA_GUID): Define.
+ [_GPTPartitionData]: New member, "int msftdata".
+ (_parse_part_entry): Set the msftdata flag if and only if the
+ PARTITION_BASIC_DATA_GUID type code is in use;
+ (gpt_partition_new): Use the PARTITION_LINUX_DATA_GUID
+ type as the default type code
+ (gpt_partition_set_system): Set the PARTITION_BASIC_DATA_GUID type
+ code on partitions on which the msftdata flag is set and set
+ PARTITION_LINUX_DATA_GUID as the type by default.
+ Clear the msftdata flag in most tests in gpt_partition_set_flag()
+ (gpt_partition_set_flag): Add test for PED_PARTITION_MSFT_DATA, which
+ sets msftdata and other flags appropriately
+ (gpt_partition_get_flag): Add test for the PED_PARTITION_MSFT_DATA
+ item that returns the status of the msftdata flag
+ (gpt_partition_is_flag_available): Add test for
+ PED_PARTITION_MSFT_DATA item to
+ * tests/t0220-gpt-msftres.sh: Accommodate the fact that now,
+ partition table listings include "msftdata" for file systems
+ of type NTFS and FAT*.
+ For more discussion and justification, see
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10456
+
+2012-09-20 Jim Meyering <meyering@redhat.com>
+
+ tests: mac: exercise the just-fixed bug
+ * tests/t0350-mac-PT-increases-sector-size.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2012-09-20 Brian C. Lane <bcl@redhat.com>
+
+ mac: don't let larger partition-table-specified block size evoke UB
+ For example, in reading a MAC partition table on a 512-byte sector-size
+ disk, _disk_analyse_block_size could find reason to ask if it's ok to
+ increase that to e.g., 2048. Upon a positive reply, we would read 2048
+ bytes into a 512-byte buffer.
+
+ * libparted/labels/mac.c (mac_read): If needed, reallocate "buf"
+ to accommodate a new, larger sector size.
+ * NEWS (Bug fixes): Mention it.
+
+2012-09-20 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid syntax-check failure for reversed compare args
+ * tests/t0203-gpt-create-on-min-sized-device.sh: Reverse args,
+ so that any diff output (upon failed test) looks sensible.
+
+2012-09-12 Jim Meyering <meyering@redhat.com>
+
+ tests: show that small dev now evokes "mklabel gpt" diagnostic
+ * tests/t0203-gpt-create-on-min-sized-device.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+ gpt: when "mklabel gpt" fails, always provide a diagnostic
+ * libparted/labels/gpt.c (gpt_alloc): When rejecting a device because
+ it is too small, give a diagnostic, as is done in every other failure
+ path through this function.
+
+ gpt: permit "mklabel gpt" on a 67-sector device
+ * libparted/labels/gpt.c (gpt_alloc): Correct checks in order to
+ allow creation of a GPT partition table on a 67-sector device.
+ The computation of the "data_end" sector number was one too low.
+ Whereas there are two sectors at the beginning of the disk (pMBR
+ and the GPT header sector), there is only one at the end: the
+ backup GPT header. That (67) is the size of the smallest GPT
+ partition table, allowing for *no* partition table sectors.
+
+ tests: update t7000-scripting.sh to avoid new FP
+ * tests/t7000-scripting.sh: Use -34s as the endpoint, not -1s,
+ to avoid a spurious difference. Also, remove quoting artifacts.
+
+2012-09-12 Davidlohr Bueso <dave@gnu.org>
+
+ gpt: require first_usable_LBA <= last_usable_LBA
+ When verifying GPT header integrity, ensure that the
+ first usable LBA is no larger than the last usable LBA.
+ * libparted/labels/gpt.c (_header_is_valid): Reject a header
+ with last_usable < first_usable.
+
+2012-09-12 Jim Meyering <meyering@redhat.com>
+
+ tests: clarify a comment: _reading_ gpt tables on tiny devices
+ * tests/t0203-gpt-tiny-device-abort.sh: Clarify.
+
+ maint: remove unnecessary wcslen use
+ * parted/strlist.c (gettext_to_wchar): Tighten up test for
+ mbsrtowcs failure and remove unnecessary wcslen use.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ maint: tighten per version requirement
+ * bootstrap.conf ($buildreq): Require Perl >= 5.6 (not merely >= 5.5),
+ because that's the minimal version required by modern Automake and
+ Autoconf.
+
+ maint: make Autoconf version requirement consistent
+ * bootstrap.conf ($buildreq): Require Autoconf >= 2.63, not >= 2.61,
+ for consistency with what is done in AC_INIT in configure.ac
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ build: require Automake >= 1.11.6
+ Now that we use AM_TESTS_ENVIRONMENT, we should require at least
+ Automake >= 1.11.2; but since all the Automake version until 1.11.5
+ are vulnerable to CVE-2012-3386:
+
+ <https://lists.gnu.org/archive/html/automake/2012-07/msg00023.html>
+
+ it's even better to require 1.11.6.
+
+ * configure.ac (AM_INIT_AUTOMAKE): Bump version requirement to 1.11.6.
+ * bootstrap.conf ($buildreq): Likewise.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ tests: remove unused AM_TESTS_ENVIRONMENT entries
+ Probably a copy&paste errors, likely from the TESTS_ENVIRONMENT
+ definition in the 'tests/Makefile.am' in GNU coreutils.
+
+ * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Don't define nor export
+ any of the variables PREFERABLY_POSIX_SHELL, REPLACE_GETCWD, CC,
+ MAKE, PERL.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ tests: prefer AM_TESTS_ENVIRONMENT over TESTS_ENVIRONMENT
+ The latter should be reserved for user overrides.
+
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Rename ...
+ (AM_TESTS_ENVIRONMENT): ... like this.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ build: enable subdir-objects Automake option globally
+ That option is enabled unconditionally in Automake-NG, and enabling
+ it also for mainline Automake will help to ensure no unexpected
+ incompatibilities is introduced in a potential port to Automake-NG.
+
+ Moreover, if we have a source file 'sub/foo.c', having it compiled
+ in 'sub/foo.o' rather than in 'foo.o' is undeniably cleaner and more
+ natural.
+
+ * configure.ac (AM_INIT_AUTOMAKE): Add 'subdir-objects'.
+ * libparted/fs/Makefile.am (AUTOMAKE_OPTIONS): No need to declare
+ 'subdir-objects' explicitly now.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ build: prefer pattern rules over suffix rules
+ That is acceptable, because the GNU parted build system already
+ requires GNU make anyway: the $(subst ...) built-in is used in the
+ common recipe for the 'ss-1024', 'ss-2048' and 'ss-4096' targets
+ in Makefile.am.
+
+ * include/parted/Makefile.am (.in.h.h): Rename ...
+ (%.h: %.in.h): ... as this pattern rule.
+ (SUFFIXES): Delete, no more needed.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ build: don't list files with unknown suffix in _SOURCES
+ While this works with mainline Automake (which blindly treats source
+ files with an unknown extension as if they were header files), it is
+ undocumented (albeit admittedly unlikely to change). Moreover, it no
+ longer works with Automake-NG (and that's by design), so the use of
+ such feature would make a port to Automake-NG more difficult.
+
+ * libparted/labels/Makefile.am (liblabels_la_SOURCES): ... don't
+ list 'pt-limit.gperf' here; rather ...
+ (EXTRA_DIST): ... list 'pt-limit.c' and 'pt-limit.gperf' here.
+ (EXTRA_DIST, BUILT_SOURCES): Enhance few comments.
+
+2012-08-30 Stefano Lattarini <stefano.lattarini@gmail.com> (tiny change)
+
+ build: prefer $(AM_CPPFLAGS) over $(INCLUDES)
+ The latter is obsolete, and might be removed in future Automake versions.
+ Moreover, it's already been removed in Automake-NG, so its use would make
+ a port to Automake-NG more difficult.
+
+ * parted/Makefile.am (INCLUDES): Rename ...
+ (AM_CPPFLAGS): ... like this.
+ * partprobe/Makefile.am: Likewise.
+ * libparted/fs/Makefile.am: Likewise.
+ * libparted/Makefile.am: Likewise.
+ * libparted/labels/Makefile.am: Likewise.
+
+2012-08-28 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib, bootstrap and init.sh
+
+ maint: don't prohibit strncpy just yet
+ * cfg.mk (local-checks-to-skip): Add sc_prohibit_strncpy,
+ so that we do not yet enable the strncpy prohibition.
+ There are many uses, and it will be a lot of work to remove
+ all of them.
+
+ maint: avoid new syntax-check failure re @xref
+ * doc/parted.texi: Adjust @xref usage: it must be used only
+ at start of sentence.
+ * doc/parted-pt_BR.texi: Likewise.
+
+2012-06-09 Jim Meyering <meyering@redhat.com>
+
+ tests: add a test to exercise just-fixed code
+ * tests/print-max.c: Extend to provide coverage of
+ ped_disk_get_max_supported_partition_count, too.
+ * tests/t9021-maxima.sh (max_n_partitions): New function, with
+ naively hard-coded max-number-of-partitions-per-partition-table-type
+ values.
+ Use it to ensure that each expected value matches the actual one.
+ * cfg.mk: Exempt this test's use of error from the syntax-check
+ for unmarked diagnostics.
+
+2012-06-09 Richard W.M. Jones <rjones@redhat.com>
+
+ gpt: fix endianness bug in gpt_get_max_supported_partition_count
+ * libparted/labels/gpt.c (gpt_get_max_supported_partition_count):
+ Take endianness of pth->FirstUsableLBA into account (64-bit,
+ little endian) when calculating the maximum number of partitions.
+ * NEWS (Bug fixes): Mention it.
+
+2012-03-26 Jim Meyering <meyering@redhat.com>
+
+ tests: remove bogus envvar setting from t0300-dos-on-gpt.sh
+ * tests/t0300-dos-on-gpt.sh: Remove envvar setting that effectively
+ disabled testing(only in this test) of simulated sector sizes smaller
+ than 4KiB.
+ Also, use a much smaller backing file.
+
+2012-03-24 Brian C. Lane <bcl@redhat.com>
+
+ tests: add t0301-overwrite-gpt-pmbr.sh
+ Make sure parted checks the PMBR before the GPT partition table.
+
+ * NEWS: Update with new GPT behavior.
+ * tests/overwrite-gpt-pmbr.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+2012-03-24 Brian C. Lane <bcl@redhat.com>
+
+ libparted: check PMBR before GPT partition table
+ The UEFI spec requires that a valid GPT disk label have a PMBR
+ partition. This moves the PMBR check to before the GPT check,
+ exiting gpt_probe with a 0 if the PMBR is not valid.
+
+ The previous behavior would cause problems in the following situation:
+ 1. format a disk as GPT
+ 2. re-format it as MSDOS using tools that don't understand GPT
+
+ Subsequent operations with parted would then complain about the invalid
+ PMBR, but would not allow the disk to be used as an msdos disk. This
+ change causes parted to recognize the msdos partition table.
+
+ * libparted/labels/gpt.c (gpt_probe): Move _pmbr_is_valid test.
+ Reported by Chris Murphy in http://bugzilla.redhat.com/805272
+
+2012-03-02 Jim Meyering <meyering@redhat.com>
+
+ maint: post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.1
+ * NEWS: Record release date.
+
+ maint: bump library version to 2.0.0
+ * libparted/Makefile.am (CURRENT): Increment, since I removed
+ ped_realloc.
+
+ maint: update README-release to reflect we now have two libraries
+ * README-release: Two sets of library version triples to adjust.
+ * bootstrap: Tiny fix from gnulib.
+
+ lib-fs-resize: remove unused probe-related code
+ * libparted/fs/r/hfs/probe.c: Remove probe-related functions.
+ There are not used.
+ * libparted/fs/r/fat/fat.c: Likewise.
+ * libparted/fs/r/hfs/probe.h: ...and declarations.
+
+2012-02-26 Jim Meyering <meyering@redhat.com>
+
+ libparted: avoid unwarranted failed assertion during mklabel
+ This could happen when running "parted -s $dev mklabel $type" for
+ nearly any $type, assuming the underlying disk's sector size is
+ larger than 512 bytes. This particular failure was noticed by
+ running tests/t9050-partition-table-types.sh with a simulated
+ sector size of 1024, as is done as part of a top-level "make check",
+ but so far, this failure has shown up only on RHEL-6.2.
+ That test attempts to exercise an ugly part of partition table
+ creation: during creation, parted checks for an existing
+ partition table by iterating through its list of known types and
+ attempting to read the disk, looking for a preexisting table.
+ Knowing this, the test takes all pairs of partition table types,
+ <A,B> and first creates a type of type A, and then creates on top
+ of that (erasing the original) a table of type B.
+ * libparted/labels/mac.c (_disk_analyse_ghost_size): Remove bogus
+ assertion. If the number of the sector with a matching signature
+ is too large, simply reject it by returning 0.
+ * NEWS (Bug fixes): Mention this.
+
+2012-02-25 Jim Meyering <meyering@redhat.com>
+
+ doc: improve NEWS
+ * NEWS: Expand/adjust wording in two entries.
+
+2012-02-21 Jim Meyering <meyering@redhat.com>
+
+ tests: sanitize PATH; do not discard mkswap output
+ * tests/init.cfg (sanitize_path_): New function, from coreutils.
+ Use it.
+ * tests/t9050-partition-table-types.sh: Do not discard mkswap output
+ and diagnostics. This test would fail (e.g., on OpenSUSE 12.1), when
+ run with PATH not including /sbin. Reported by Bruno Haible.
+
+2012-02-18 Jim Meyering <meyering@redhat.com>
+
+ tests: skip failing use of mkfs.hfs unless using newer, fixed version
+ The old, segfaulting version does not recognize the -v option, while
+ the new one does. Use that to skip the test when it seems that
+ fsck.hfs is broken.
+ * tests/t3000-resize-fs.sh: Skip part of this root-only test
+ when fsck.hfs is the always-segfaulting version.
+
+ build,test: update gnulib, bootstrap and init.sh
+ * bootstrap: Update.
+ * tests/init.sh: Update.
+ * gnulib: Update.
+ * doc/po4a.mk: Updating gnulib pulls in newer syntax-check rules,
+ including one that rejects @lower_case@ variables in Makefiles.
+ Fix the sole violation: s/@mandir@/$(mandir)/
+
+ build: avoid non-srcdir build failure
+ * libparted/fs/Makefile.am: s!fsresize.sym!$(srcdir)/fsresize.sym!
+
+2012-02-10 Jim Meyering <meyering@redhat.com>
+
+ maint: placate syntax-check wrt tests/fs-resize.c
+ * tests/fs-resize.c (main): Remove unused #includes.
+ Do use set_program_name, to placate syntax-check.
+
+ doc: mention HFS+/FAT file system resizing in NEWS
+ * NEWS (New features): Mention it.
+
+ tests: test FAT and HFS file system resizing
+ * tests/t3000-resize-fs.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ (check_PROGRAMS): Add fs-resize.
+ (fs_resize_LDADD): Define, so it links with both libraries.
+
+2012-02-10 Christoph Hellwig <hch@lst.de>
+
+ tests: add FS-resize test driver
+ * tests/fs-resize.c: New file, to test FAT/HFS resizing.
+
+2012-02-10 Jim Meyering <meyering@redhat.com>
+
+ lib-fs-resize: use linker script to expose only selected functions
+ * libparted/fs/Makefile.am (libparted_fs_resize_la_LDFLAGS): Define.
+ (EXTRA_DIST): Distribute the new file.
+ (libparted_fs_resize_la_DEPENDENCIES): Make the library depend on it.
+ * libparted/fs/fsresize.sym: New file.
+
+ maint: remove r/hfs/DOC,HISTORY,TODO; add VERSION for new library
+
+ lib-fs-resize: rewrite ped_file_system_clobber
+ Before, it would probe for an existing file system type and then,
+ according to what it found, call the corresponding <FS_TYPE>_clobber
+ function. Now that we have restored only HFS and FAT FS-writing
+ support, only those few types have a corresponding _clobber function.
+ We would obviously fail to clear common types of file systems, and even
+ if we were to restore all previous _clobber functions, none of those
+ were able to handle sector sizes larger than 512. Not worth it.
+ * libparted/fs/r/filesys.c: Include pt-tools.h.
+ (MIN): Define.
+ (ped_file_system_clobber): Rewrite not to use hfs*_clobber or
+ fat_clobber. Instead, simply clear the first three and last two
+ sectors of the specified "device".
+ * libparted/fs/Makefile.am (INCLUDES): Add
+ -I$(top_srcdir)/libparted/labels for new use of a ptt_* function.
+
+ lib-fs-resize: add wrappers for open,close,resize,get_resize_constraint
+ * libparted/fs/r/filesys.c: Implement ped_file_system_resize,
+ ped_file_system_open, ped_file_system_close and
+ ped_file_system_get_resize_constraint.
+ * libparted/fs/r/hfs/hfs.c: Give a few functions global scope,
+ so we can use them from the above.
+ * libparted/fs/Makefile.am: Use automake's subdir-objects option.
+ This avoids conflicts with multiple *.o file names
+ (e.g., fat.o), now that two directories provide that name.
+ (AM_CFLAGS): Disable $(WERROR_CFLAGS), for now.
+
+ maint: update copyrights in r/
+
+2012-02-07 Jim Meyering <meyering@redhat.com>
+
+ lib-fs-resize: re-add HFS and FAT file-system-related code
+ This just adds the code, without hooking it up yet.
+ * po/POTFILES.in: Add all libparted/fs/r/**.c files.
+
+ maint: remove now-unused fat-related functions
+ * libparted/fs/fat/bootsector.c (fat_boot_sector_generate)
+ (fat_boot_sector_write, fat_info_sector_write): Remove functions.
+ (fat_boot_sector_set_boot_code): Likewise.
+ * libparted/fs/fat/bootsector.h: Remove declarations.
+ * libparted/fs/fat/fat.c (fat_set_frag_sectors, fat_free_buffers):
+ Remove function.
+ * libparted/fs/fat/fat.h: Remove declarations.
+
+ tests: set PARTED_TEST_NAME, for valgrind
+ * tests/Makefile.am (PARTED_TEST_NAME): Define.
+ * tests/t0211-gpt-rewrite-header.sh: Clarify a comment.
+
+ libparted: gpt: avoid heap-read-overrun when rewriting 9-PTE table
+ Now that parted can rewrite a corrupt-or-misaligned 9-PTE table,
+ we have to be careful to allocate space for slightly more data
+ when the byte-count required for a PTE table is smaller than
+ the whole number of sectors would imply. I.e., when the PTE table
+ size is not a multiple of the sector size, there is a fraction of
+ that final sector for which we do not read data, but we do write.
+ Ensure we have space for the buffer we'll write and that it is
+ initialized (to 0's).
+ * libparted/labels/gpt.c (gpt_write): Allocate the right amount of
+ space. Use calloc, not malloc+memset.
+
+2012-02-03 Jim Meyering <meyering@redhat.com>
+
+ maint: adjust the URL that will appear in the generated announcement
+ * cfg.mk (url_dir_list): Use this http://ftp.gnu.org/gnu/$(PACKAGE)
+ for the first link listed in the generated announcement.
+ announce-gen now provides the faster mirror link automatically.
+
+ ui: rewrite disk_print_flags and partition_print_flags
+ * parted/parted.c (disk_print_flags): Avoid NULL-dereference on
+ failed malloc. Use xrealloc, not ped_realloc.
+ (partition_print_flags): Likewise; nearly identical code.
+
+ tests: avoid relatively harmless new "make syntax-check" failure
+ * tests/t0209-gpt-pmbr_boot.sh: Reverse compare arguments.
+
+ libparted: remove ped_realloc, now unused
+ * include/parted/parted.in.h (ped_realloc): Remove declaration.
+ * libparted/libparted.c (ped_realloc): Remove definition.
+
+2012-02-02 Brian C. Lane <bcl@redhat.com>
+
+ doc: update parted documentation
+ * doc/parted.text: Add disk_set command.
+
+ tests: add test for GPT PMBR pmbr_boot flag
+ * tests/t0209-gpt-pmbr_boot.sh: New test
+ * tests/Makefile.am: Add new test
+ * NEWS: Add information about the GPT PMBR pmbr_boot flag
+
+ tests: update tests for new disk flags output
+ * tests/t0010-script-no-ctrl-chars.sh: Updated
+ * tests/t0100-print.sh: Updated
+ * tests/t0101-print-empty.sh: Updated
+ * tests/t0220-gpt-msftres.sh: Updated
+ * tests/t0250-gpt.sh: Updated
+ * tests/t0280-gpt-corrupt.sh: Updated
+ * tests/t2310-dos-extended-2-sector-min-offset.sh: Updated
+ * tests/t4000-sun-raid-type.sh: Updated
+ * tests/t4100-dvh-partition-limits.sh: Updated
+ * tests/t4100-msdos-partition-limits.sh: Updated
+ * tests/t4100-msdos-starting-sector.sh: Updated
+ * tests/t4200-partprobe.sh: Updated
+ * tests/t5000-tags.sh: Updated
+ * tests/t6000-dm.sh: Updated
+ * tests/t9040-many-partitions.sh: Updated
+ * tests/t9041-undetected-in-use-16th-partition.sh: Updated
+
+2012-02-02 Brian C. Lane <bcl@redhat.com>
+
+ parted: when printing, also print the new disk flags
+ This adds a 'Disk Flags:' line the displays the active disk flags.
+ In machine mode this is appended to the disk info line, after the
+ device model.
+
+ * parted/parted.c (disk_print_flags): New function
+ (_print_disk_info): Add Disk Flags information.
+
+2012-02-02 Matthew Garrett <mjg@redhat.com>
+
+ gpt: add commands to manipulate pMBR boot flag
+ Some BIOS systems will only boot from GPT partitions if the boot flag is
+ set on the protective MBR partition. This adds the ability to set this
+ flag using the disk_set and disk_toggle commands.
+ * include/parted/disk.in.h (_PedDiskFlag): Add PED_DISK_GPT_PMBR_BOOT
+ * libparted/disk.c (ped_disk_flag_get_name): Add PED_DISK_GPT_PMBR_BOOT
+ * libparted/labels/gpt.c (_GPTDiskData): Add pmbr_boot flag.
+ (gpt_alloc): Init pmbr_boot to 0.
+ (gpt_read_headers): Set pmbr_boot state from PMBR boot flag.
+ (_write_pmbr): Add pmbr_boot flag and set PMBR boot flag from it.
+ (gpt_write): Pass pmbr_boot flag through to _write_pmbr
+ (gpt_disk_set_flag): New function
+ (gpt_disk_is_flag_available): New function
+ (gpt_disk_get_flag): New function
+ (gpt_disk_ops): Add disk_set_flag, disk_get_flag, disk_is_flag_available
+ * parted/parted.c (do_disk_set): New function
+ (do_disk_toggle): New function
+ (_init_commands): Add do_disk_set and do_disk_toggle
+ * parted/ui.c (command_line_get_disk_flag): New function
+ * parted/ui.h: Add command_line_get_disk_flag prototype.
+
+2012-01-23 Jim Meyering <meyering@redhat.com>
+
+ tests: create 128 partitions also in the scsi-backed test
+ * tests/t9040-many-partitions.sh: Tighten up: use less memory:
+ 1 sector per partition rather than 256.
+ Exec parted just once, not once per partition.
+ With that, we can increase the number of partitions to create
+ from 60 (which used to take 2.5 minutes on an F12-era kernel)
+ to the standard-GPT-header-imposed maximum of 128.
+ Suggested by Phillip Susi.
+
+ tests: exercise today's bug fix, creating a GPT table with 128 entries
+ * tests/t0212-gpt-many-partitions.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+ libparted: gpt: avoid invalid free with many (~100) partitions
+ * parted/parted.c (do_print): Remove invalid free.
+ Bug introduced via v1.8.8.1-19-gb56d69c.
+ * NEWS (Bug fixes): Mention this.
+
+2012-01-22 Jim Meyering <meyering@redhat.com>
+
+ tests: test for yesterday's bug fix
+ * tests/Makefile.am (TESTS): Add it.
+ * tests/t0211-gpt-rewrite-header.sh: New test.
+
+ libparted: gpt: rewrite even a 9-partition-entry table properly
+ The vast majority of GPT partition tables have 128 PTEs (partition
+ table entries. However, zfs-related ones have only 9, and when
+ rewriting one (which can happen only in interactive mode), parted
+ would fail to write the full PTE array whenever the PTE array size
+ was not a multiple of the sector size. This fixes the same type
+ of bug as v3.0-45-gce85c51.
+ * libparted/labels/gpt.c (gpt_write): When computing how many sectors
+ to write for the PTE array, round up rather than truncating. This
+ matters only when n_PTEs * 128 is not a multiple of the sector size.
+ For details on how to reproduce see the test or
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10691/focus=10695
+ * NEWS (Bug fixes): Mention it.
+
+2012-01-21 Jim Meyering <meyering@redhat.com>
+
+ maint: clean-up preparing for bug fix
+ * libparted/labels/gpt.c (gpt_write): Rename local:
+ s/ptes_size/ptes_bytes/; declare as size_t, not "int".
+ Move decls "down".
+
+2012-01-19 Phillip Susi <psusi@cfl.rr.com>
+
+ libparted: raise dos partition limit from 16 to 64
+ * NEWS (Bug fixes): Mention it.
+ * libparted/labels/dos.c (MAX_TOTAL_PART): s/16/64/
+ * tests/t9042-dos-partition-limit.sh: s/13/61/ (MAX_TOTAL_PART-3)
+ (adjust/factor some of the logic - jmm)
+
+2012-01-18 Phillip Susi <psusi@cfl.rr.com>
+
+ libparted: enforce dos partition limit
+ The msdos partition table claimed a maximum partition count of 16
+ but would allow you to go beyond that. This resulted in the kernel
+ not being informed of those partitions. Corrected to enforce the
+ limit.
+
+ * NEWS (Bug fixes): Mention it.
+ * libparted/labels/dos.c (next_primary): Return -1 upon failure.
+ (next_logical): Stop no later than MAX_TOTAL_PART.
+ Throw exception and return -1 upon failure.
+ (msdos_partition_enumerate): Convert a negative partition number
+ return value from either of the above two to failure (return 0).
+ * tests/t9042-dos-partition-limit.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2012-01-13 Jim Meyering <meyering@redhat.com>
+
+ build: revert the recent "fix" to avoid make warnings about linux.lo
+ It avoided the warning, but introduced a real problem
+ when building from a clean directory.
+ The real solution will have to wait, since it appears to
+ depend on a fix in automake.
+
+ This reverts commit a3c351c2d1cf2c0000bbc681959695c612bd19a0.
+
+2012-01-13 Jim Meyering <meyering@redhat.com>
+
+ build: don't use -version for convenience libraries
+ Don't use -release, either. This avoids warnings from libtool.
+ * libparted/fs/Makefile.am (libfs_la_LDFLAGS): Remove.
+
+ build: use LT_INIT, to make bootstrap run libtoolize
+ * configure.ac: Use LT_INIT, so that bootstrap runs libtoolize,
+ which creates build-aux/ltmain.sh.
+
+2012-01-12 Jim Meyering <meyering@redhat.com>
+
+ maint: remove useless BUILD_LINUX conditional
+ * configure.ac (BUILD_LINUX): Don't set it.
+ * libparted/Makefile.am (BUILD_LINUX): Remove useless use.
+
+2012-01-12 Jim Meyering <meyering@redhat.com>
+
+ maint: avoid long-standing warnings from make:
+ Makefile:1274: warning: overriding recipe for target `linux.lo'
+ Makefile:1267: warning: ignoring old recipe for target `linux.lo'
+
+ * libparted/Makefile.am (EXTRA_DIST): Rename from
+ EXTRA_libparted_la_SOURCES.
+
+2012-01-12 Jim Meyering <meyering@redhat.com>
+
+ libparted: provide a new convenience function: ptt_geom_clear_sectors
+ * libparted/labels/pt-tools.c (ptt_geom_clear_sectors): New function.
+ * libparted/labels/pt-tools.h: Declare it.
+
+2012-01-11 Jim Meyering <meyering@redhat.com>
+
+ maint: remove "MAINTAINERCLEANFILES = Makefile.in" from Makefile.am's
+ * debug/Makefile.am: As above.
+ * debug/test/Makefile.am: Likewise.
+ * doc/C/Makefile.am: Likewise.
+ * doc/pt_BR/Makefile.am: Likewise.
+ * include/Makefile.am: Likewise.
+ * include/parted/Makefile.am: Likewise.
+ * libparted/Makefile.am: Likewise.
+ * libparted/fs/Makefile.am: Likewise.
+ * libparted/tests/Makefile.am: Likewise.
+ * partprobe/Makefile.am: Likewise.
+ * doc/Makefile.am: Likewise, for mdate-sh and texinfo.tex.
+
+2012-01-10 Keshav P R <the.ridikulus.rat@gmail.com>
+
+ build: insert -I$(top_builddir)/include before -I$(top_srcdir)/include
+ everywhere, for those who perform non-srcdir builds from a pristine
+ cloned directory. There is no problem when building from a tarball,
+ since that includes include/parted/*.h files under $(top_srcdir).
+ * libparted/Makefile.am: Insert it.
+ * libparted/fs/Makefile.am: Likewise.
+ * libparted/labels/Makefile.am: Likewise.
+ * libparted/tests/Makefile.am: Likewise.
+ * parted/Makefile.am: Likewise.
+ * partprobe/Makefile.am: Likewise.
+ * tests/Makefile.am: Likewise.
+
+2012-01-10 Jim Meyering <meyering@redhat.com>
+
+ build: .gitignore: ignore more
+
+ maint: hoist libparted/fs/*/Makefile.am into parent Makefile.am
+ There was no need to have a separate Makefile.am for each file system
+ type, and a good reason *not* to do that (reduce duplication).
+ * configure.ac (AC_OUTPUT): Remove Makefiles.
+ * libparted/fs/Makefile.am (SUBDIRS): Remove.
+ (EXTRA_DIST): List the two non-src files: hfs/DOC hfs/HISTORY.
+ (libfs_la_SOURCES): Hoist file names to here from...
+ * libparted/fs/amiga/Makefile.am: ...here.
+ * libparted/fs/ext2/Makefile.am: Likewise.
+ * libparted/fs/fat/Makefile.am: Likewise.
+ * libparted/fs/hfs/Makefile.am: Likewise.
+ * libparted/fs/jfs/Makefile.am: Likewise.
+ * libparted/fs/linux_swap/Makefile.am: Likewise.
+ * libparted/fs/nilfs2/Makefile.am: Likewise.
+ * libparted/fs/ntfs/Makefile.am: Likewise.
+ * libparted/fs/reiserfs/Makefile.am: Likewise.
+ * libparted/fs/ufs/Makefile.am: Likewise.
+ * libparted/fs/xfs/Makefile.am: Likewise.
+ * libparted/fs/*/Makefile.am: Remove files.
+ * libparted/fs/amiga/a-interface.c: Now that the .o files are all
+ in the same place, rename from interface.c, to avoid collision with
+ name of .o file from ext2/interface.c.
+
+ build: correct my typo in preceding commit
+ * configure.ac (AC_CONFIG_SRCDIR): Correct preceding commit.
+ Keshav's patch was correct, but when I attempted to do the same
+ thing manually I wrote .h.in rather than .in.h.
+
+2012-01-10 Keshav P R <the.ridikulus.rat@gmail.com>
+
+ build: update AC_CONFIG_SRCDIR for non-srcdir-from-clone builds
+ * configure.ac (AC_CONFIG_SRCDIR): List parted.h.in, rather than
+ the now-generated parted.h, for those who run configure not from
+ a distribution tarball, but from a non-srcdir build using a pristine
+ clone.
+
+2012-01-09 Jim Meyering <meyering@redhat.com>
+
+ maint: rename public .h files to .in.h
+ Generate .h files from .in.h files, so that we can continue
+ to use _GL_ATTRIBUTE_PURE and _GL_ATTRIBUTE_CONST in the primary
+ sources, without including them in publicly-installed files.
+ Each generated (and later installed) header file gets expansions
+ of those macros.
+ * include/parted/Makefile.am: New rules.
+ * .gitignore: Ignore the generated files.
+ * Makefile.am (SUBDIRS): Reorder so we build in include/ before
+ libparted, i.e., so that we generate the .h files we'll need.
+
+ parted.h: use _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE in VC'd files
+ However, we will replace those strings with their expansions when
+ installing them.
+ * include/parted/parted.h: Revert part of commit v3.0-83-gd51bfc0.
+
+ tests: root-only test would fail to remove its loop device
+ * tests/t8001-loop-blkpg.sh: Ironically, when skipping this test,
+ there was a race condition where in more than 7 out of 10 trials,
+ this test's "losetup -d $dev" command would fail with "device in use".
+ Hence, with enough testing, I would eventually use up all loop devices
+ and start getting new test failures due to losetup *creation* failure.
+
+ build: fix "make distcheck" failure
+ Ever since "make distcheck" began using sudo (i.e., running "make check"
+ as root, and then running it as non-root), the build-after-root would
+ often fail due to some derived files being owned by root.
+ This change adds a "chown -R $USER ." to restore order.
+ * Makefile.am (root-check): Run "chown -R $USER ." after sudo run.
+ (root_check): Rename variable from root-check, to avoid a warning
+ from automake about non-POSIX variable.
+
+ build: appease gcc's -Werror=suggest-attribute=pure
+ * parted/strlist.c (wchar_strcasecmp): Add pure attribute; make static.
+ (wchar_strncasecmp): Likewise.
+ (wchar_strdup): Likewise.
+
+2012-01-09 Jim Meyering <meyering@redhat.com>
+
+ build: update to latest from gnulib
+ * bootstrap: Update.
+ * tests/init.sh: Likewise.
+ * gnulib: Update submodule to latest.
+
+ maint: remove two generated files in doc/
+ * doc/fdl.texi: Remove file from version control. It is generated.
+ * doc/gendocs_template: Likewise.
+ * doc/parted.texi: Add @node ... before inclusion of fdl.texi,
+ since fdl.texi dropped that part.
+ * doc/parted-pt_BR.texi: Likewise.
+ * doc/.gitignore: Update.
+
+ build: accommodate newer bootstrap from gnulib
+ * bootstrap.conf (gnulib_tool_option_extras): Add both --symlink
+ and --makefile-name=gnulib.mk. Remove stray use of $bt.
+ * lib/Makefile.am: Initialize all of the following so that
+ generated code in gnulib.mk may use += to append to those variables:
+ AM_CFLAGS, AM_CPPFLAGS, BUILT_SOURCES, CLEANFILES, EXTRA_DIST,
+ MAINTAINERCLEANFILES, MOSTLYCLEANDIRS, MOSTLYCLEANFILES, SUFFIXES,
+ noinst_LTLIBRARIES.
+
+2012-01-09 Jim Meyering <meyering@redhat.com>
+
+ libparted: gpt: a smaller device need not render both headers invalid
+ Putting a valid GPT-labeled image on a smaller device, (i.e., one that
+ truncates the backup GPT header, but that does not impact the primary
+ one) should not render the primary header invalid.
+ * libparted/labels/gpt.c (_header_is_valid): Do *not* reject a header
+ when its last_usable value is larger than the device length.
+ This reverts part of commit v3.0-10-g99f9c6a, "gpt: don't abort for a
+ truncated GPT-formatted device". With this change, running parted in
+ interactive mode with such an image/device combination will recognize
+ that only the backup header is corrupt, and will offer to correct it.
+ Before, it would report that both headers were corrupt.
+ * tests/t0203-gpt-shortened-device-primary-valid.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ gpt: eliminate four PED_ASSERT uses
+ * libparted/labels/gpt.c (_parse_header): Convert a few PED_ASSERT
+ uses to friendlier 'test-and-return-0's. Reported by Graham Markall
+ in http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10653
+
+2012-01-08 Jim Meyering <meyering@redhat.com>
+
+ libparted: don't use _GL_ATTRIBUTE_CONST in public parted.h, ...
+ Instead, use the bare __attribute__((__const__)).
+ * include/parted/parted.h (__attribute): Define.
+ (ped_get_version): Use open-coded __attribute.
+ Prompted by a report from Keshav P R.
+
+ tests: fix misleading mkpart usage
+ Using "primary" is fine (and common) as a partition *type* for dos
+ partition tables, but with a partition table of type GPT, it is
+ downright misleading to specify the partition *name* as "primary".
+ * tests/t0220-gpt-msftres.sh: Use "p-name" as partition name,
+ rather than misleading "primary".
+ * tests/t7000-scripting.sh: Likewise.
+
+2012-01-05 Jim Meyering <meyering@redhat.com>
+
+ tests: skip loop-partitioning tests when ext_range is < 2
+ * tests/init.cfg (require_partitionable_loop_device_): New function.
+ * tests/t8001-loop-blkpg.sh: Use it.
+ * tests/t8000-loop.sh: Use it.
+
+ libparted: remove _blkpg_get_partition
+ [I applied Phillip's initial patch, omitting both my adjustments
+ and his own v2 changes. This addresses both of those omissions. ]
+ * libparted/arch/linux.c (_blkpg_get_partition): Remove function
+ and sole use, per patch from Phillip Susi.
+ (_kernel_get_partition_start_and_length): Adjust formatting,
+ remove unnecessary test and correct a diagnostic.
+
+2012-01-05 Phillip Susi <psusi@cfl.rr.com>
+
+ libparted: avoid the HDIO_GETGEO ioctl when possible
+ We were using the long depreciated HDIO_GETGEO ioctl on the
+ partition to get its start sector. Use the new BLKPG_GET_PARTITION
+ ioctl instead. This allows for disks > 2TB and partitioned loop
+ devices, which don't support HDIO_GETGEO. As a fallback when
+ BLKPG_GET_PARTITION fails or is not availible, try getting the
+ values from sysfs, and finally use BLKGETSIZE64 and HDIO_GETGEO
+ as a last resort.
+
+ libparted: remove has_partitions check to allow loopback partitions
+ Commit 1b766b69 added the _has_partitions function to check if a device
+ was a loop device and if so, skip updating the kernel partition table
+ because loop devices did not support partitions. This function never
+ worked anyway, and loop devices now (since linux 3.2) support
+ partitions, so remove this crufty code.
+ * libparted/arch/linux.c (_has_partitions): Remove function and
+ all uses.
+
+ libparted: remove _loop_get_partition_range
+ Commit 1eb0cc30 added support for loop devices to be partitioned,
+ but it only enabled that support if the kernel parameter max_part
+ was non zero. This parameter just reserves minor numbers for
+ partitions in the traditional sequence that hard disks used.
+ When it is zero, it is still possible to add partitions, they
+ just will get minor numbers from another pool. Removing this
+ check allows partitions to be used on loop devices even when the
+ loop module was not loaded with the max_part argument.
+ * libparted/arch/linux.c (_loop_get_partition_range): Remove function
+ and all uses.
+
+2012-01-05 Jim Meyering <meyering@redhat.com>
+
+ tests: fix a bug in wait_for_dev_to_disappear_ helper function
+ * tests/t-lib-helpers.sh (wait_for_dev_to_disappear_): Correct
+ typo: missing expr in subshell.
+
+2012-01-04 Phillip Susi <phillsusi@gmail.com>
+
+ libparted: linux: exclude floppy from device scan
+ Floppies can't be partitioned anyhow, and some people have a
+ misconfigured BIOS that thinks there is a floppy when there
+ actually isn't, and trying to scan it causes hanging.
+
+2012-01-03 Phillip Susi <phillsusi@gmail.com>
+
+ tests: try harder to clean up scsi_debug
+ Tests were failing because the previous test gave up while trying to
+ unload the scsi_debug module. Try longer to remove it, and then throw
+ in a call to udevadm settle for good measure.
+ * tests/t-local.sh: Try harder to release resources here, rather than...
+ * tests/t9040-many-partitions.sh: ...in this one test.
+ * tests/t-local.sh (require_scsi_debug_module_): Now that
+ cleanup requires "udevadm settle", add that requirement here:
+ call require_udevadm_settle_.
+
+2012-01-01 Jim Meyering <meyering@redhat.com>
+
+ maint: update all copyright year number ranges
+ Run "make update-copyright".
+
+2011-12-14 Phillip Susi <psusi@cfl.rr.com>
+
+ doc: add NEWS entry for "Add partition separator only when required"
+
+2011-12-12 Phillip Susi <psusi@cfl.rr.com>
+
+ Add partition separator only when required
+ Device mapper type should not automatically
+ mean add 'p' before the partition number. Fall back to
+ adding it only if the previous character is a digit.
+ This complies with kpartx behavior and linux behavior
+ "since the dawn of time".
+
+2011-12-03 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ build: address a new "noreturn" suggestion
+ * parted/ui.h (help_msg): Declare as __noreturn__.
+
+ build: configure.ac: use -Wno-format-nonliteral
+
+ build: mark functions with "const" or "pure" attribute, per gcc warnings
+ Use _GL_ATTRIBUTE_PURE or _GL_ATTRIBUTE_CONST. Mark static functions at
+ point of definition; extern ones at point of declaration.
+ * include/parted/crc32.h:
+ * include/parted/device.h: Likewise.
+ * include/parted/disk.h: Likewise.
+ * include/parted/exception.h: Likewise.
+ * include/parted/filesys.h: Likewise.
+ * include/parted/geom.h: Likewise.
+ * include/parted/natmath.h: Likewise.
+ * include/parted/parted.h: Likewise.
+ * include/parted/unit.h: Likewise.
+ * libparted/arch/linux.c: Likewise.
+ * libparted/disk.c: Likewise.
+ * libparted/exception.c: Likewise.
+ * libparted/fs/amiga/amiga.h: Likewise.
+ * libparted/labels/aix.c: Likewise.
+ * libparted/labels/bsd.c: Likewise.
+ * libparted/labels/dos.c: Likewise.
+ * libparted/labels/dvh.c: Likewise.
+ * libparted/labels/efi_crc32.c: Likewise.
+ * libparted/labels/gpt.c: Likewise.
+ * libparted/labels/mac.c: Likewise.
+ * libparted/labels/pc98.c: Likewise.
+ * libparted/labels/rdb.c: Likewise.
+ * libparted/labels/sun.c: Likewise.
+ * libparted/unit.c: Likewise.
+ * parted/ui.c: Likewise.
+ * parted/strlist.c: Likewise.
+ * parted/strlist.h: Likewise.
+ * libparted/tests/common.h (_implemented_disk_label): Mark as pure.
+ * libparted/cs/natmath.c (extended_euclid): Mark as pure.
+
+ build: avoid new float-to-double warnings
+ * libparted/timer.c (ped_timer_new_nested): Mark literal floating point
+ constants with "f" suffix, since they are compared against "float"s.
+ * parted/parted.c (_timer_handler): Likewise.
+
+ build: tweak how bootstrap manages ChangeLog
+ * bootstrap.conf: Create ChangeLog only by touching it, so that
+ it doesn't ever remove my in-use symlink (w/vc-dwim).
+
+ tests: two more of these: use "compare exp out", not "compare out exp"
+ * tests/t7000-scripting.sh: Reverse compare arguments.
+ * tests/t2310-dos-extended-2-sector-min-offset.sh: Likewise.
+
+2011-11-29 Jim Meyering <meyering@redhat.com>
+
+ tests: use "compare exp out", not "compare out exp"
+ Likewise, when an empty file is expected, use "compare /dev/null out",
+ not "compare out /dev/null". I.e., specify the expected/desired contents
+ via the first file name. Prompted by a suggestion from Bruno Haible
+ in http://thread.gmane.org/gmane.comp.gnu.grep.bugs/4020/focus=29154
+
+ Run these commands:
+
+ git grep -l -E 'compare [^ ]+ exp' \
+ |xargs perl -pi -e 's/\b(compare) (\S+) (exp\S*)/$1 $3 $2/'
+ git grep -l -E 'compare [^ ]+ /dev/null' \
+ |xargs perl -pi -e 's,\b(compare) (\S+) (/dev/null),$1 $3 $2,'
+
+2011-11-27 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: test for partitions on mdraid
+ * tests/t6100-mdraid-partitions.sh: New file.
+ * tests/Makefile.am: Run this test.
+
+2011-11-26 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: use ext_range to find out largest possible partition
+ Parted uses /sys/block/DEV/range file to find out how many partitions
+ can the blockdevice hold and uses this number in its algorithm
+ for informing the kernel about modified partitions. This works
+ fine for most devices, however, it fails on partitionable MD arrays,
+ because these have 1 in range file. Using ext_range should be safer
+ and work for all devices.
+
+ * libparted/arch/linux.c (_device_get_partition_range): Use
+ /sys/block/DEV/ext_range instead of range sysfs file
+ * NEWS: Mention the change.
+
+ Addresses: http://bugzilla.novell.com/567652
+
+2011-11-26 Petr Uzel <petr.uzel@suse.cz>
+
+ build: gitignore tests/duplicate
+ .gitignore: Add tests/duplicate.
+
+2011-11-11 Jim Meyering <meyering@redhat.com>
+
+ maint: a little defensive programming in a test script
+ * tests/gpt-header-munge: Use "local *F;" to limit scope of
+ file handles.
+
+2011-11-10 Jim Meyering <meyering@redhat.com>
+
+ tests: skip a test if Perl's Digest::CRC module is not installed
+ * tests/init.cfg (require_perl_digest_crc_): New function.
+ * tests/t0210-gpt-resized-partition-entry-array.sh: Use it.
+ Reported by Keshav P R in
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10530/focus=10589
+
+ tests: fix test for udevadm
+ * tests/init.cfg (sector_size_): Fix syntax error in test invocation.
+
+ maint: "make distcheck" now runs the root-only tests
+ * Makefile.am (root-check): New overridable variable and rule.
+ (distcheck-hook): Depend on it.
+
+ build: update gnulib submodule to latest
+
+ maint: adjust the URL that will appear in the generated announcement
+ * cfg.mk (url_dir_list): Use this http://ftp.gnu.org/gnu/$(PACKAGE)
+ for the first link listed in the generated announcement.
+ announce-gen now provides the faster mirror link automatically.
+ Remove now-unnecessary release-related URLs.
+
+2011-11-06 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ build: stop distributing gzip'd releases; xz is enough
+ * configure.ac (AM_INIT_AUTOMAKE): Add no-dist-gzip.
+ * NEWS (Build-related): Mention that we're dropping .tar.gz.
+
+2011-11-05 Jim Meyering <meyering@redhat.com>
+
+ tests: exercise and document the HFS-probe bug fix
+ Simply zeroing out the total_blocks and block_size members of the
+ on-disk _HfsMasterDirectoryBlock would provoke a failed assertion
+ any time parted tried to probe that partition.
+ * tests/t2500-probe-corrupt-hfs.sh: New script.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS (Bug fixes): Mention this.
+
+2011-11-05 Brian C. Lane <bcl@redhat.com>
+
+ libparted: HFS/HFS+ probe: don't let a corrupt FS evoke failed assertion
+ * libparted/fs/hfs/probe.c (hfsplus_probe): Add a check on the
+ search value and reject it if it is negative.
+ (hfsx_probe): Likewise.
+ (hfs_and_wrapper_probe): Likewise.
+ Reported by Flos Lonicerae in http://bugzilla.redhat.com/714758
+
+2011-11-04 Brian C. Lane <bcl@redhat.com>
+
+ tests: t9030 wait for partition removal
+ The removal of the partition may take enough time that the next
+ mkpart will fail. Wait for it to be removed.
+
+ Remove scsi_debug size and set the end of the partition to 800s so that
+ it will fit inside the default scsi_debug size of 8M, even when sector
+ size is 4Kb. This prevents failures on machines with limited memory.
+
+ * tests/t9030-align-check.sh: Wait for partition removal and use
+ a smaller disk.
+
+2011-11-04 Jim Meyering <meyering@redhat.com>
+
+ tests: add a helper function
+ * tests/t-lib-helpers.sh (wait_for_dev_to_disappear_): New function.
+
+ tests: exercise the "GPT vs other-sized partition entry arrays" fixes
+ * tests/t0210-gpt-resized-partition-entry-array.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ (EXTRA_DIST): Add gpt-header-munge.
+
+ tests: rewrite/complete GPT-munging perl script
+ Rewrite and complete this script.
+ It was incomplete and buggy. Now it works.
+ * tests/gpt-header-munge: Rename from ...
+ * tests/perl-munge-9-PTE-table: ...this.
+
+2011-11-03 Jim Meyering <meyering@redhat.com>
+
+ gpt: don't misbehave with e.g., a 9-entry partition array
+ * libparted/labels/gpt.c (_generate_header): Correct size of
+ partition array entries to round up to nearest multiple of
+ sector size, so that we set gpt->PartitionEntryLBA correctly
+ also when the number of partition entries is not a multiple
+ of sector_size / 128. Problem diagnosed by Robert Herndon
+ in http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10173.
+
+2011-11-03 Robert Herndon <Robert.Herndon@quantum.com>
+
+ gpt: prepare for tables with n_partition_array_entries != 128
+ * libparted/labels/gpt.c (gpt_read_PE_array): When computing the size
+ of the partition array entry, use the value of "number of partition
+ array entries" read from a GPT header, not the default of 128 that we
+ use when creating new headers. Details here:
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10173
+
+2011-11-03 Jim Meyering <meyering@redhat.com>
+
+ parted: exit nonzero for certain failures already diagnosed as "Error"
+ * parted/parted.c (do_print): Do not exit successfully when issuing
+ an error about an "unrecognised disk label" or when both GPT primary
+ and backup tables are corrupted.
+ * tests/t0101-print-empty.sh: Adjust expected exit code to match
+ new behavior.
+ * NEWS (Bug fixes): Mention this.
+
+ tests: adjust a test to make its failure easier to diagnose
+ * tests/t0203-gpt-tiny-device-abort.sh: When failing, also
+ emit parted's diagnostics.
+
+2011-11-02 Jim Meyering <meyering@redhat.com>
+
+ maint: correct two comments in gpt.c
+ * libparted/labels/gpt.c (gpt_read_headers): Correct the comment.
+ (_header_is_valid): Fix a harmless typo.
+
+2011-11-02 Brian C. Lane <bcl@redhat.com>
+
+ tests: add new test to check ped_disk_duplicate
+ * tests/duplicate.c: New test.
+ * tests/t0501-duplicate.sh: New test program.
+ * tests/Makefile.am (TEST): Add new test.
+ (check_PROGRAMS): Add new test program.
+
+ libparted: copy flags when duplicating GPT partitions
+ * libparted/labels/gpt.c (gpt_partition_duplicate): Copy flags to new
+ partition.
+ * NEWS: Mention this fix.
+ Reported by Chris Murphy in https://bugzilla.redhat.com/747497.
+
+2011-11-02 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: exercise the new feature
+ * tests/t0208-mkpart-end-in-IEC.sh: New file.
+ * tests/Makefile.am: Add it.
+
+2011-11-02 Petr Uzel <petr.uzel@suse.cz>
+
+ parted: mkpart: DWIM for IEC ending sector numbers like 2MiB and 9GiB
+ Before, if the user specified start and end in mkpart command using
+ IEC units, parted created a partition that starts and ends exactly on
+ these positions. With such behavior, it is impossible to create
+ partitions as follows: 1MiB-2MiB, 2MiB-3MiB - parted would complain
+ that it cannot create the second partition, because the first one
+ occupied sectors 2048-4096 and the second one sectors 4096-3072,
+ so they would overlap at sector 4096.
+
+ With this patch, if the user uses IEC units to specify end of the
+ partition, parted creates the partition which ends one sector before
+ the specified position.
+
+ See also
+ https://lists.gnu.org/archive/html/bug-parted/2011-10/msg00009.html
+
+ * parted/ui.c (command_line_get_sector): Add parameter to retrieve
+ raw input from user.
+ * parted/ui.h (command_line_get_sector): Adjust prototype of function.
+ * parted/parted.c (_adjust_end_if_iec): New function.
+ (_strip_trailing_spaces): New function.
+ (_string_ends_with_iec_unit): New function.
+ (do_mkpart): Call _adjust_end_if_iec(). Use new parameter of
+ command_line_get_sector function.
+ (do_rescue): Adjust call to command_line_get_sector.
+ * bootstrap.conf (gnulib_modules): Add these: c-ctype, c-strcase.
+ * tests/t0207-IEC-binary-notation.sh: Adjust to new semantics.
+ * NEWS: Mention the changed behavior.
+
+ Notable adjustments:
+ - s/isspace/c_isblank/ so that parsing is locale-independent
+ - avoid an array-bounds error:
+ * parted/parted.c (_strip_trailing_spaces): Don't deref str[-1]
+ for an empty string.
+
+2011-10-19 Brian C. Lane <bcl@redhat.com>
+
+ tests: add tests for new pc98 signatures (#646053)
+ * tests/t2201-pc98-label-recog.sh: New file
+ * tests/Makefile.am: Add test
+
+2011-10-19 Brian C. Lane <bcl@redhat.com>
+
+ libparted: make pc98 detection depend on signatures
+ pc98 is not a common disk label. Change pc98_probe to only return true
+ if one of the recognized signatures is present.
+ Currently these include:
+
+ IPL1
+ Linux 98
+ GRUB/98
+
+ This prevents false-positive detection on msdos labeled disks.
+
+ * libparted/labels/pc98.c (pc98_probe): Change to require signature
+ (pc98_check_ipl_signature): Add more signatures
+ (check_partition_consistency): Remove unused function
+ Reported by Zach Carter in http://bugzilla.redhat.com/646053
+
+2011-10-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: use more portable fd redirection in TESTS_ENVIRONMENT
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Redirection with `exec 9>&2'
+ is not portable to various Korn shells, and to (at least) HP-UX 11
+ /bin/sh. Use a more portable idiom.
+ See <http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/22488> for
+ lots of discussion.
+
+2011-10-15 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ tests: TEST_ENVIRONMENT simplified and made more robust
+ The test scripts in tests/ are shell scripts, so the current
+ definition of TESTS_ENVIRONMENT, which adaptively run tests using
+ either perl or the shell depending on their kind, is overkill.
+
+ Moreover, this change is required in order for the testsuite to
+ continue to work with the new testsuite harness that is planned
+ to be introduced in Automake 1.12 (which, as of the writing date,
+ is still under development and in late alpha state).
+
+ See also related discussion on bug-coreutils:
+ <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8887>
+
+ * tests/help-version: Moved ...
+ * tests/help-version.sh: ... to this.
+ * tests/Makefile.am (TESTS): Update.
+ (TESTS_ENVIRONMENT): Remove definition of the `shell_or_perl_' shell
+ function, which is not required anymore.
+ (SH_LOG_COMPILER): New, define to `$(SHELL)'.
+
+2011-10-14 Richard W.M. Jones <rjones@redhat.com>
+
+ tests: fix the tests for the case where stdout/stderr is different
+ tests/t0000-basic.sh:
+ - More than one bogus ^M[[:space:]]*^M had to be removed, hence
+ use s,,,g sed expression.
+
+ tests/t0203-gpt-tiny-device-abort.sh:
+ - Test was not expecting any output to stderr. No longer true.
+
+ tests/t1100-busy-label.sh:
+ - Another case of s,,,g as above.
+
+ tests/t7000-scripting.sh:
+ - Only testing output to stdout. Fold stdout & stderr together
+ and test both.
+ - Another case of s,,,g as above.
+
+ Some root tests still fail even with these fixes. The failures appear
+ to be unrelated to these changes.
+
+2011-10-14 Richard W.M. Jones <rjones@redhat.com>
+
+ parted: write a few errors and warnings to stderr instead of stdout
+
+ parted: strlist print functions can now send output to any FILE *
+ This changes the two strlist print functions so that instead of just
+ sending output to stdout, they can send it to any FILE *. Now the
+ caller can send errors to stderr instead of stdout.
+
+2011-10-12 Petr Uzel <petr.uzel@suse.cz>
+
+ parted: make a warning message more informative
+ The following parted message is not very useful:
+
+ Error: You requested a partition from 2.00MiB to 3.00MiB.
+ The closest location we can manage is 2.00MiB to 3.00MiB.
+
+ Improve the message by including exact geometry (in sectors):
+
+ ...requested a partition from 2.00MiB to 3.00MiB (sectors 2048..3072).
+ ... location we can manage is 2.00MiB to 3.00MiB (sectors 2049..3072).
+
+ * parted/parted.c (do_mkpart): Include exact partition geometry in
+ the warning message.
+ * tests/t-lib-helpers.sh (normalize_part_diag_): Adapt to
+ handle the new form of the diagnostic.
+ * tests/t7000-scripting.sh: Adapt and change the name
+ of a temporary file.
+
+2011-10-03 Petr Uzel <petr.uzel@suse.cz>
+
+ doc: update manpage
+ Remove documentation for removed commands, adjust general description to
+ match parted's capabilities, add documentation for 'toggle' and
+ 'align-check' commands. Remove 'KNOWN ISSUES' section since it no longer
+ applies.
+
+ tests: verify that 'udevadm settle' is available
+ * tests/init.cfg (require_udevadm_settle_): New function.
+ * tests/t8001-loop-blkpg.sh: Call it.
+
+2011-10-01 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: do not omit last sector when creating full-dev geometry
+ Note that ped_constraint_solve_max() is currently not used anywhere.
+
+ * libparted/cs/constraint.c (ped_constraint_solve_max): full_dev now
+ really represents whole device.
+
+2011-10-01 Petr Uzel <petr.uzel@suse.cz>
+
+ maint: unmark PedDeviceType as deprecated
+ PedDeviceType was marked as deprecated before parted started using
+ git. Since it proved to be useful to differentiate between different
+ device types, and nobody seems interested in removing it from the API,
+ let's clear the deprecated flag.
+
+2011-10-01 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: do not call _device_get_partition_range() twice
+ PED_MIN can evaluate its arguments twice.
+
+ * libparted/arch/linux.c (_disk_sync_part_table): Call
+ _device_get_partition_range() outside PED_MIN.
+
+2011-10-01 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: optimize _disk_sync_part_table
+ In _disk_sync_part_table, if the largest partition number (lpn) is 0,
+ it does not make sense to go through the loops below. Return
+ immediately instead.
+ * libparted/arch/linux.c (_disk_sync_part_table): Return immediately
+ if lpn == 0.
+
+ build: ignore more generated files
+
+ parted: remove obsolete comments
+ is_start_exact and is_end_exact were removed from the source.
+ * parted/parted.c (constraint_from_start_end): Remove obsolete
+ documentation of the function.
+
+ libparted: check return value from ped_geometry_init
+ If ped_geometry_init() failed in ped_disk_set_partition_geom(),
+ then new_geom remains uninitialized, but still later used, which
+ leads to unexpected results.
+ * libparted/disk.c (ped_disk_set_partition_geom): Check return
+ value from ped_geometry_init().
+
+2011-09-30 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: add test for partitionable loop devices
+ * tests/t8001-loop-blkpg.sh: New file.
+ * tests/Makefile.am: Add test.
+
+2011-09-29 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: improve support for partitions on loopback devices
+ Since linux-2.6.26, the kernel allows partitions on loopback devices.
+ Implement support for this feature in parted.
+ * libparted/arch/linux.c (_sysfs_int_entry_from_dev): New function.
+ (_loop_get_partition_range): New function.
+ (_device_get_partition_range): Add special handling for loop devices.
+ * NEWS: Mention this change.
+
+ libparted: differentiate between plain files and loop devices
+ Stop using PED_DEVICE_FILE for loopback devices;
+ loopback are significantly different from plain files.
+ * include/parted/device.h (PedDeviceType): Add PED_DEVICE_LOOP.
+ * libparted/arch/linux.c (_device_probe_type): Detect loopback device.
+ * parted/parted.c (do_print): Add "loopback" to list of transports.
+
+ dvh: factor out read_sector and use ptt_read_sector
+ * libparted/labels/dvh.c (read_sector): Factor out this function.
+ (dvh_probe): Use ptt_read_sector instead of read_sector.
+ (dvh_read): Likewise.
+
+2011-09-28 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib to latest; adapt use of _GL_ATTRIBUTE_FORMAT
+ * libparted/arch/linux.c (_GL_ATTRIBUTE_FORMAT): Define here,
+ now that it's no longer defined by gnulib.
+
+ build: avoid new syntax-check failure
+ * cfg.mk: Exempt libparted/arch/beos.c from the PATH_MAX check.
+ I suspect that this is ok, because parted compiles only on systems
+ that define PATH_MAX to something reasonable.
+
+ doc: mention the origin of the other two bugs
+ * NEWS: Mention that the other two bugs were introduced long ago.
+
+ tests: test for the nilfs2 bug
+ * tests/t4300-nilfs2-tiny.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+
+ libparted: fix a bug in the nilfs2 probe function
+ * libparted/fs/nilfs2/nilfs2.c (nilfs2_probe): Reject this partition
+ if we get a negative sb2 offset. Passing a negative offset to
+ ped_geometry_read_alloc would evoke a failed assertion.
+ Bug introduced by 2010-07-09 commit d463e7de.
+ * NEWS: (Bug fixes): Mention it.
+ Reported by Daniel Fandrich in
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10466/focus=10472
+
+2011-06-24 Jim Meyering <meyering@redhat.com>
+
+ gpt: don't abort for a truncated GPT-formatted device
+ This fixes the problem two ways. The first fix (via gpt_alloc)
+ rejects any device that is too small, but it is insufficient.
+ Choose a slightly larger truncated device with an otherwise intact
+ primary GPT header and you can still trigger the failed assertion.
+ To fix it in general, we make _header_is_valid detect the problem.
+ * libparted/labels/gpt.c (gpt_alloc): Reject a device that is so
+ small that there is no room for a single partition.
+ (_header_is_valid): Validate LastUsableLBA here, as well, so that
+ we now reject as invalid any GPT header that specifies a
+ LastUsableLBA larger than the device size.
+ Leave the assertion in _parse_header.
+ * tests/t0203-gpt-tiny-device-abort.sh: Test for this.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS: (Bug fixes): Mention it.
+ Reported by Daniel Fandrich in
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10466
+
+ libparted: avoid invalid diagnostic in interactive mode
+ * libparted/arch/linux.c (linux_read): In interactive mode,
+ a truncated device with a preexisting GPT could evoke this:
+ Error: end of file while reading Success
+ it should have been like this:
+ Error: end of file while reading /full/name/of/device
+ Use %0.0s to discard the strerror argument.
+
+2011-06-22 Brian C. Lane <bcl@redhat.com>
+
+ tests: add test for value less than 1
+ * tests/t9023-value-lt-one.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ tests: add test for radius divide by 2 fix
+ * tests/t9022-one-unit-snap.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2011-06-22 Brian C. Lane <bcl@redhat.com>
+
+ libparted: don't allow values less than 1 (#665496)
+ When a value < 1 is used there is the possibility that the range can
+ overlap sector 0. The user should use smaller units instead. 0 is a
+ special case and is still allowed.
+
+ * libparted/unit.c (ped_unit_parse_custom): Throw error if a value
+ between 0 and 1 is used.
+
+2011-06-22 Brian C. Lane <bcl@redhat.com>
+
+ libparted: fix snap radius so that it is using half (#665496)
+ The snap radius didn't match the documentation, it has been using +/-
+ unit size instead +/- 0.5 * unit (eg. 500KB for a MB unit). This caused
+ problems when specifying 1MB, 1GB, etc. as a partition start or end
+ resulting in partitions being created that were nowhere near the
+ specified size.
+
+ * libparted/unit.c (ped_unit_parse_custom): divide radius by 2
+ This addresses http://bugzilla.redhat.com/665496
+
+2011-06-10 Jim Meyering <meyering@redhat.com>
+
+ maint: prefer AC_PROG_LIBTOOL over slightly deprecated AM_PROG_LIBTOOL
+ * configure.ac: Use AC_PROG_LIBTOOL rather than slightly deprecated
+ AM_PROG_LIBTOOL.
+
+2011-06-07 H. Peter Anvin <hpa@zytor.com>
+
+ libparted: simplify kernel version-parsing logic
+ * libparted/arch/linux.c: (_get_linux_version): Simplify and add
+ an assertion.
+
+2011-06-06 Jim Meyering <meyering@redhat.com>
+
+ libparted: accommodate two-component linux version number like 3.0
+ * libparted/arch/linux.c (_get_linux_version): Also accept 2-component
+ version numbers.
+ * NEWS: (Bug fixes): Mention it.
+ Reported by Richard W.M. Jones.
+
+2011-05-30 Jim Meyering <meyering@redhat.com>
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 3.0
+ * NEWS: Record release date.
+
+ maint: placate coverity: don't ignore some return values
+ * libparted/cs/constraint.c: Include <assert.h>.
+ (ped_constraint_exact): Don't ignore ped_alignment_init's return
+ value or that from ped_geometry_init.
+
+ loop: avoid NULL dereference upon failure
+ * libparted/labels/loop.c (loop_partition_duplicate): Don't dereference
+ NULL upon failure.
+
+ shared library version: increment major: 1.0.0
+ * libparted/Makefile.am (CURRENT, REVISION): Update from 0.2.0 to 1.0.0,
+ due to removed interfaces.
+
+ build: update gnulib submodule to latest
+
+2011-05-27 Jim Meyering <meyering@redhat.com>
+
+ doc: update NEWS
+ * NEWS (Changes in behavior): Describe the change.
+ (Bug fixes): Mention the leak fixes.
+
+ doc: reflect removal of FS-related commands
+ * README (WARNING): Say that all FS-manipulation code is now gone.
+ * doc/parted.texi (Command explanations): Remove descriptions of and
+ any examples or references to the following commands: check, cp,
+ mkfs, mkpartfs, move, resize.
+
+ build: remove configure-time options: --disable-fs, --enable-Werror
+ * configure.ac: Remove support for --enable-fs and --disable-fs.
+ Remove support for --enable-Werror and --disable-Werror.
+ * README: Remove paragraph about --disable-fs and
+ --enable-discovery-only.
+ * libparted/libparted.c: Now that --disable-fs is gone (i.e.,
+ ENABLE_FS would be always 1), remove its #ifdefs.
+
+ tests: make t0220 more useful when it fails
+
+ maint: update po/POTFILES.in
+ * po/POTFILES.in: Remove file names, to reflect file deletions.
+
+ doc: remove FS-related documentation and other stale bits
+ * doc/parted.texi: Remove FS-related documentation and other
+ stale bits.
+
+ linux_swap: remove all-but-probe FS-related code
+
+ xfs: remove all-but-probe FS-related code
+
+ jfs: remove all-but-probe FS-related code
+
+ ufs: remove all-but-probe FS-related code
+
+ reiserfs: remove all-but-probe FS-related code
+
+ hfs: remove all-but-probe FS-related code
+
+ ntfs: remove all-but-probe FS-related code
+
+ amiga: build with warning and error options
+ * libparted/fs/amiga/Makefile.am (AM_CFLAGS): Add $(WARN_CFLAGS)
+ and $(WERROR_CFLAGS).
+
+ ext2: remove all-but-probe FS-related code
+
+ fat: remove all-but-probe FS-related code
+
+ remove all top-level FS-op code and the clearfat program
+
+ UI: remove all file-system-aware sub-commands
+ Note that we are removing the resize command, even though parted
+ appears to be the only free tool that provides the ability to
+ resize FAT16 and FAT32 file systems.
+ * parted/parted.c (do_mkfs, do_cp, do_mkpartfs): Remove functions.
+ (do_move, do_check, do_resize): Likewise.
+ (_init_commands): Remove each command-definition clause.
+ * parted/parted.c (_partition_warn_loss): Remove now-unused function.
+ * include/parted/filesys.h: Remove declarations of now-removed
+ FS-munging functions
+
+ tests: t1100: show that adding a partition on a busy device succeeds
+ * tests/t1100-busy-label.sh: Demonstrate that adding a partition
+ succeeds, even when another on the same device is mounted (active).
+
+ amiga: avoid NULL-deref-on-OOM and an error-path leak
+ * libparted/labels/rdb.c (amiga_read): Don't dereference NULL on OOM.
+ Don't leak a constraint when failing to add a partition.
+
+ mac: avoid NULL-deref-on-OOM and an error-path leak
+ * libparted/labels/mac.c (mac_read): Don't dereference NULL on OOM.
+ Don't leak a constraint when failing to add a partition.
+
+ sun: avoid NULL-deref-on-OOM and an error-path leak
+ * libparted/labels/sun.c (sun_read): Don't dereference NULL on OOM.
+ Don't leak a constraint when failing to add a partition.
+
+ UI: avoid leak when interactive sector selection matches default
+ * parted/ui.c (command_line_get_fs_type): Don't leak an input "word".
+
+ UI: plug a leak
+ * parted/ui.c (command_line_get_fs_type): Don't leak an FS type name
+ string.
+
+ bsd: avoid NULL-deref-on-OOM and an error-path leak
+ * libparted/labels/bsd.c (bsd_read): Don't dereference NULL on OOM.
+ Don't leak a constraint when failing to add a partition.
+
+ linux: don't leak a FILE* upon /proc read failure
+ * libparted/arch/linux.c (_probe_proc_partitions): Call fclose
+ upon failure.
+
+ linux: plug a file descriptor leak
+ * libparted/arch/linux.c (read_device_sysfs_file): Don't leak a
+ file descriptor.
+
+ tests: t1100-busy-label: don't use mkpartfs; rework to use scsi_debug
+ * tests/t1100-busy-label.sh: Remove one last use of mkpartfs.
+ Use scsi_debug rather than requiring an explicitly-provided device.
+
+2011-05-26 Jim Meyering <meyering@redhat.com>
+
+ maint: correct coverity-reported "suspicious sizeof"
+ * parted/table.c (table_add_row): Use sizeof(*VAR), rather than
+ erroneous sizeof(explicit_type) that just happened to be ok.
+
+ maint: remove unreachable code
+ * libparted/labels/sun.c (sun_partition_new): Remove unreachable stmt.
+ * libparted/labels/pc98.c (pc98_partition_new): Likewise.
+
+ build: update gnulib submodule to latest
+
+2011-05-18 Jim Meyering <meyering@redhat.com>
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 2.4
+ * NEWS: Record release date.
+
+ shared library version: increment REVISION
+ * libparted/Makefile.am (REVISION): Increment, since there have
+ been changes to the library, but no interface addition or removal.
+ * README-release: Mention the shared-library version update procedure.
+
+ build: update gnulib submodule to latest
+
+ tests: avoid nasty FP-causing race condition
+ * tests/t9040-many-partitions.sh: Remove all partitions before
+ exiting -- otherwise, the rmmod-prompted removal of those many
+ partitions would continue long after rmmod completion and the
+ release of the scsi_debug lock, and thus partition-device removals
+ provoked by this test would cause failure in the subsequent test,
+ e.g., when the devices for partitions 14,15,16 have just been
+ successfully created (verified that they exist), yet the next
+ step -- to create a file system on one of them -- fails or is
+ erroneously skipped because the device has been removed asynchronously.
+
+ tests: add double quotes around another use of $VERBOSE
+ * tests/t-local.sh (scsi_debug_setup_): Quote another $VERBOSE.
+
+ build: list bc as a build-requirement
+ * bootstrap.conf (buildreq): Also require "bc", since it's used
+ in some of 'make check's tests.
+
+2011-05-17 Jim Meyering <meyering@redhat.com>
+
+ tests: remove tests that are too FS-centric
+ * tests/t2100-mkswap.sh: Likewise.
+ * tests/t3000-resize-fs.sh: Remove file, now that all FS-ops are gone.
+ * tests/Makefile.am (TESTS): Remove them here, too.
+
+ linux: fix diagnostic about operating on very small file or device
+ * libparted/arch/linux.c (init_file): Correct diagnostic.
+ Parted would claim that a small-but-non-empty file has zero length.
+
+ bfs: remove unused files
+
+ tests: add double quotes around a use of $VERBOSE
+ * tests/t-local.sh (scsi_debug_cleanup_): Add missing double quotes.
+
+2011-05-12 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid new, spurious test failure
+ * tests/t9050-partition-table-types.sh: Use a "device size"
+ that is large enough to accommodate 1KiB and 4KiB sectors.
+ The original size, 3MiB was too small for a dvh partition
+ with PARTED_SECTOR_SIZE=1024. Increase it to 30MiB.
+
+ tests: adapt t1101-busy-partition not to use mkpartfs
+ * tests/t1101-busy-partition.sh: Use mkfs.vfat instead.
+
+2011-05-10 Jim Meyering <meyering@redhat.com>
+
+ tests: write all pairs of partition table types
+ * tests/t9050-partition-table-types.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ tests: add a NEWS entry and a test to exercise today's bug fix
+ * tests/t9041-undetected-in-use-16th-partition: New file.
+ * tests/Makefile.am (TESTS): Add it.
+ * NEWS (Bug fixes): Describe it.
+
+2011-05-10 Phillip Susi <psusi@cfl.rr.com>
+
+ linux: also detect "in-use" dmraid and scsi-Nth (N>=16) partitions
+ Prior to this change, Parted would fail to detect any in-use
+ partition on a dmraid disk, as well as any in-use partition
+ numbered 16 or greater on a regular scsi disk.
+ This was because assumptions were being made about the device node
+ major/minor numbers and how they relate to the partition number.
+ These assumptions are invalid for dmraid devices, and for normal
+ disks with >= 16 partitions.
+ * libparted/arch/linux.c (_partition_get_part_dev): Remove function.
+ (_partition_is_mounted): Rewrite to use _partition_is_mounted_by_path
+ instead of _by_dev.
+
+2011-05-10 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ tests: avoid subtle shell semantics bug
+ This bug was causing some root-only tests to be mistakenly skipped.
+ This bash command will always exit successfully,
+ i.e., the "return 1" will never happen:
+ bash -c 'f(){ local f=$(false)||return 1; return 0; }; f'
+ That's because the assignment always succeeds, and that success
+ is what determines the return value, not the $(...) command.
+ This is very counter-intuitive, sigh.
+ The work-around is to separate the declaration and assignment, as in
+ local f; f=$(...) || ...
+ * tests/t-local.sh (new_sdX_): Do that.
+ (gpt_corrupt_primary_table_): Likewise.
+
+ tests: minor fix; add/adjust comments
+ * tests/t1101-busy-partition.sh: Don't ignore failed comparison.
+ Add a comment.
+
+2011-04-21 Brian C. Lane <bcl@redhat.com>
+
+ s390/dasd: avoid buffer overrun upon API mismatch diagnostic
+ * libparted/labels/fdasd.c (fdasd_check_api_version): The static
+ buffer for the error string was too small. Double its length.
+ This resolves http://bugzilla.redhat.com/693852
+
+2011-04-20 Brian C. Lane <bcl@redhat.com>
+
+ linux: fix typo in comment: /path%d => /part%d
+ * libparted/arch/linux.c (_device_get_part_path): Fix typo in comment.
+
+2011-04-18 Jim Meyering <meyering@redhat.com>
+
+ linux: don't free invalid pointer upon asprintf failure
+ * libparted/arch/linux.c (_device_get_part_path): When asprintf
+ fails, it leaves its first argument in an undefined state, and
+ hence that pointer must not be freed. However, here, in two
+ places we could potentially free an invalid pointer. Use
+ zasprintf; then the pointer is either NULL or allocated,
+ and hence always freeable.
+
+ linux: clean up device naming code (no semantic change)
+ * libparted/arch/linux.c (zasprintf): New function.
+ (_device_get_part_path): Clean up:
+ Use size_t, not "int" for strlen-returned value.
+ Combine mostly duplicate snprintf uses.
+ Use zasprintf instead of malloc+snprintf.
+
+ don't reference before start of buffer for short device name
+ * libparted/arch/linux.c (_device_get_part_path): Avoid invalid
+ reference to memory before dev->path when its length is 4 or less.
+
+2011-04-14 Jim Meyering <meyering@redhat.com>
+
+ maint: s/can not/cannot/ in a comment and documentation
+ Without this, a new "make syntax-check" rule would fail.
+ * libparted/filesys.c: s/can not/cannot/
+ * doc/parted-pt_BR.texi (BIOSes and Firmware): Likewise.
+
+ tests: remove now-unused Makefile rule
+ * libparted/tests/Makefile.am (old-init.sh): Remove obsolete rule.
+
+ tests: improve t1101-busy-partition.sh
+ * tests/t1101-busy-partition.sh: Fail hard upon timeout while
+ waiting for device to appear.
+
+ tests: make the tests in libparted/tests work properly once again
+ Since switching to init.sh, the root-only tests did not clean up.
+ * libparted/tests/Makefile.am (prereq): Always create a symlink
+ to tests/init.sh.
+ * tests/init.cfg: Source $abs_top_srcdir/tests-relative names,
+ not $srcdir-relative names. This way, it works also when run
+ from libparted/tests/.
+ * tests/t-local.sh: Likewise.
+
+ tests: avoid a race condition in the scsi_debug-using tests
+ * tests/t-local.sh (new_sdX_): New function.
+ (scsi_debug_setup_): Use new_sdX_ to find the just-created device name,
+ rather relying on the list of file names in /sys/block/sd* changing.
+ Sometimes the list would not change, which would lead to tests failing
+ with I/O errors when run in parallel. Thanks to Brian Lane for the
+ tip that /sys/block/sd*/device/model contains "scsi_debug" if there
+ is a device created by our "modprobe scsi_debug" command.
+
+2011-03-24 Jim Meyering <meyering@redhat.com>
+
+ make parted "do what I say" with IEC start and end values like 5GiB
+ In a command like this,
+ parted -s -- $dev mklabel gpt mkpart P-NAME 4MB -34s
+ parted interprets the "4MB" as merely a suggestion for the starting
+ sector number. It uses half of the MB-units value as a "radius"
+ about the sector containing byte 4,000,000, and it may choose some
+ other more appropriate sector, based on partition table or alignment
+ constraints within the range 3,500,000B..4,500,000B.
+ Before, parted handled IEC units, i.e., KiB, MiB, GiB, etc.,
+ with identically "helpful" sloppiness, of course honoring the
+ power-of-two semantics.
+ Now, however if you use IEC units, i.e., KiB, MiB, GiB, etc.,
+ the "radius" is taken to be zero, so parted uses precisely
+ whatever multiple of a power of two you've specified.
+ Hence, adjusting the example above to use MiB, rather than "MB",
+ parted -s -- $dev mklabel gpt mkpart P-NAME 4MiB -34s
+ With this change, that is equivalent to the following:
+ parted -s -- $dev mklabel gpt mkpart P-NAME 4194304B -34s
+ I.e., it uses the sector containing precisely that byte, and
+ does not perform any "extra" adjustment.
+ * libparted/unit.c (is_power_of_2): New function.
+ (ped_unit_parse_custom): Use it to avoid interpreting a large
+ input string as "sloppy" (i.e. large radius) when it uses IEC
+ binary notation like 34KiB, 3GiB and 65TiB.
+ * tests/t0207-IEC-binary-notation.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ * doc/parted.texi (unit): Describe the new behavior.
+ * NEWS (Changes in behavior): Mention it here, too.
+
+2011-03-20 Jim Meyering <meyering@redhat.com>
+
+ maint: stop using .x-sc_* files to list syntax-check exemptions
+ Instead, use the new mechanism with which you merely use a
+ variable (derived from the rule name) defined in cfg.mk to an ERE
+ matching the exempted file names.
+ * gnulib: Update to latest, to get maint.mk that implements this.
+ * .x-sc_GPL_version: Remove file.
+ * .x-sc_prohibit_always-defined_macros: Likewise.
+ * Makefile.am (EXTRA_DIST): Remove them from here, too.
+ * cfg.mk: Define variables to exempt the same files.
+
+2011-03-16 Jim Meyering <meyering@redhat.com>
+
+ maint: rename a variable
+ * libparted/labels/gpt.c (_header_is_valid): Rename a variable,
+ and switch to more readable range-checking logic.
+
+ gpt: avoid division by zero
+ * libparted/labels/gpt.c (_header_is_valid): Reject as invalid if
+ FirstUsableLBA < 3.
+ (gpt_get_max_supported_partition_count): Ensure that we don't divide
+ by zero: verify that the GPT header is valid before dividing by its
+ "size of partition entry". Under normal circumstances, the on-disk
+ PE size field is reasonable because we have just written it. However,
+ there are two ways it can end up zero: we lose the race when some other
+ process pokes a 4-byte 0 into just the right location between when
+ we write it and when we re-read the value we're about to divide by.
+ Then there's the case that I encountered: using an old USB (8MB) key,
+ mklabel gpt failed due to division by zero. The device reported no
+ failure when writing the initial header, yet when reading back that
+ very same sector (also successful), parted got all 0 bytes.
+ * NEWS (Bug fixes): Mention it.
+
+ build: enable compilation warnings also for new nilfs2 subdir
+ * libparted/fs/nilfs2/Makefile.am (AM_CFLAGS): Define.
+
+ nilfs2: remove unused nilfs2_clobber function
+ * libparted/fs/nilfs2/nilfs2.c (nilfs2_clobber): Remove unused
+ function.
+ (nilfs2_ops) [clobber]: Always set to NULL.
+
+ maint: avoid shadowing warning
+ * parted/parted.c (do_mkpart): Rename inner added_ok to add_ok.
+
+ build: don't let parted_CFLAGS override our AM_CFLAGS setting
+ * parted/Makefile.am (parted_CFLAGS): Remove unused (and interfering)
+ definition.
+
+ maint: avoid new compiler warnings
+ * parted/parted.c (do_print): Remove now-unused "error" label.
+ (_print_disk_info): Use one more "const" attribute, to avoid
+ compiler warnings.
+
+2011-03-16 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: do not fail if some utilities are missing
+ * tests/t1700-probe-fs.sh: Skip the test if mkfs.ext3 or tune2fs
+ is missing or is not in $PATH.
+
+ tests: test 'parted print' with empty disk
+ * tests/t0101-print-empty.sh: New test.
+ * tests/Makefile.am: Add it.
+
+2011-03-16 Petr Uzel <petr.uzel@suse.cz>
+
+ parted: rework 'parted print' so that it works with empty disk
+ 'parted $dev print' on a device without a partition table used to fail
+ with an 'unrecognised disk label' error, without printing the following:
+ disk model, transport, size, sector size, BIOS geometry
+ all of which are available, and do not dependent on the partition table.
+
+ With this patch, parted prints all of this information (BIOS geometry
+ only if 'unit cyl' is specified) and reports success even if the disk
+ does not have a valid partition table.
+
+ As a side efect, 'parted $dev print devices/all/list' now prints
+ information about all the devices, even if $dev does not have a
+ partition table.
+
+ * parted/parted.c (_print_disk_info): New function.
+ (do_print): Do not immediately fail if the partition table is not
+ recognized, but print disk information and report success instead.
+ * NEWS (Changes in behavior): Mention it.
+
+2011-03-16 Petr Uzel <petr.uzel@suse.cz>
+
+ parted: factor out disk geometry printing into separate function
+ * parted/parted.c (_print_disk_geometry): New function.
+ (do_print): Use _print_disk_geometry.
+
+2011-03-05 Brian C. Lane <bcl@redhat.com>
+
+ Remove PED_ASSERT action argument
+ The action argument was a leftover from when the PED_ASSERT macro was
+ last changed. This removes that argument from the macro and from all
+ occurrences of it.
+
+2011-03-05 Brian C. Lane <bcl@redhat.com>
+
+ Remove PED_ASSERT from dos geometry checking
+ The CHS geometry values are calculated based on the existing partition
+ information. The values can't always be calculated, and the partition
+ may be corrupt so instead of throwing an assertion just return 0 and
+ carry on.
+
+ I left the logic for the PED_ASSERT checks the same so that it is clear
+ that the logic has not changed, it just returns 0 now.
+
+ * libparted/labels/dos.c (probe_partition_for_geom): remove PED_ASSERT
+
+2011-03-05 Jim Meyering <meyering@redhat.com>
+
+ tests: add a minimal nilfs2 test
+ * tests/t1700-probe-fs.sh: Adapt to also test nilfs2.
+
+2011-03-03 Jim Meyering <meyering@redhat.com>
+
+ tests: rename a test script, before extending it to handle nilfs
+ * tests/t1700-probe-fs.sh: Rename from ...
+ * tests/t1700-ext-probe.sh: ...this.
+ * tests/Makefile.am (TESTS): Rename it here, too.
+
+2011-02-26 Jiro SEKIBA <jir@unicus.jp>
+
+ libparted: add nilfs2 module
+ * libparted/fs/nilfs2/Makefile.am: New file.
+ * libparted/fs/nilfs2/nilfs2.c: New file.
+ (is_valid_nilfs_sb, nilfs2_probe, nilfs2_clobber): New functions.
+ (ped_file_system_nilfs2_init, ped_file_system_nilfs2_done): Likewise.
+ (nilfs2_ops, nilfs2_type): Define.
+ * libparted/fs/Makefile.am (SUBDIRS): Add nilfs2.
+ * configure.ac (AC_OUTPUT): Add the new Makefile.
+ * libparted/libparted.c: Declare and use the _init and _done functions.
+
+ Add a new fs module to provide following:
+ - probe nilfs2 filesystem partition
+ - clobber nilfs2 filesystem partition
+
+ The is_valid_nilfs_sb function came from the grub nilfs2 module,
+ which is written by me and assigned to FSF.
+
+2011-02-25 Jim Meyering <meyering@redhat.com>
+
+ maint: two files lacked a newline at EOF: add one to each
+ * include/Makefile.am: Add newline at end of file.
+ * libparted/fs/jfs/Makefile.am: Likewise.
+
+ tests: t3310-flags: check all gpt boolean flags, too
+ * tests/t3310-flags.sh: Check gpt as well as msdos flags.
+ Parametrize mkpart usage.
+ Accommodate gpt-induced difference in parted's print output
+ GPT partitions have a name, while msdos ones do not.
+ This also fixes the "on_and_off" perl flag extraction regexp,
+ which before was using $1 with no corresponding () group.
+
+ tests: prepare t3310-flags to check gpt boolean flags, too
+ * tests/t3310-flags.sh: Put a loop around the body of the test,
+ and factor out the partition table name.
+
+ tests: remove useless commands
+ * tests/t3310-flags.sh: Remove useless exp-manipulating commands.
+
+2011-02-25 Brian C. Lane <bcl@redhat.com>
+
+ gpt: add legacy_boot partition flag
+ Add support for the Legacy BIOS Bootable flag in the GPT
+ Attribute field. This is used by software like syslinux to
+ determine which partition to boot when in BIOS mode.
+
+ See Page 105, Table 19 Bit 2 of the UEFI Spec 2.3 book.
+
+ * doc/C/parted.8: Document legacy_boot.
+ * doc/parted.texi: Document legacy_boot.
+ * include/parted/disk.h: Add PED_PARTITION_LEGACY_BOOT flag.
+ * libparted/disk.c (ped_partition_flag_get_name): Add legacy_boot flag.
+ * libparted/labels/gpt.c (_parse_part_entry):
+ (_partition_generate_part_entry, gpt_partition_new):
+ (gpt_partition_set_flag, gpt_partition_get_flag):
+ (gpt_partition_is_flag_available): Add legacy_boot flag support.
+
+2011-02-25 Brian C. Lane <bcl@redhat.com>
+
+ gpt: add partition attribute bits: NoBlockIOProtocol, LegacyBIOSBootable
+ Add NoBlockIOProtocol and LegacyBIOSBootable flags to the GPT partition
+ Attributes entry.
+
+2011-02-25 Jim Meyering <meyering@redhat.com>
+
+ doc: regenerate partprobe .pot and .po files
+ * doc/C/po/partprobe.8.pot: Slight syntax update induced by newer tool.
+ * doc/pt_BR/partprobe.8.pt_BR.po: Likewise.
+
+ tests: move test_description= variable to a comment
+ test-lib.sh-based tests required a test_description= definition.
+ When testing switched to init.sh, which by convention uses a brief
+ comment on line 2 instead, some instances were not converted.
+ * libparted/tests/t1000-label.sh: Put test description on line 2.
+ Remove now-unused test_description= definition.
+ * libparted/tests/t2000-disk.sh: Likewise.
+ * tests/t0220-gpt-msftres.sh: Likewise.
+
+2011-02-23 Jim Meyering <meyering@redhat.com>
+
+ s390: avoid warnings
+ * libparted/labels/vtoc.c (vtoc_read_volume_label): Remove decl
+ of unused var.
+ * libparted/labels/fdasd.c (fdasd_valid_vtoc_pointer): Return
+ a value also when successful.
+ * libparted/labels/dasd.c (dasd_alloc_metadata): Initialize "part"
+ to NULL solely to avoid a spurious used-uninitialized warning.
+
+2011-02-23 Stephen Powell <zlinuxman@wowway.com>
+
+ doc: add NEWS entries for s390 fix and improvements
+
+2011-02-23 Stephen Powell <zlinuxman@wowway.com>
+
+ s390: make DIAG driver work for FBA DASD with block size > 512
+ In order to make the DIAG driver work for FBA DASD with a block
+ size greater than 512, I had to make a rather awkward patch to
+ C function vtoc_read_volume_label in libparted/labels/vtoc.c.
+ The "right" logic would be "If this is an FBA DASD device
+ using the DIAG driver, and the effective block size used by the
+ DIAG driver is greater than 512, then do it this way. Else,
+ do it the normal way." (Note that when using the FBA driver,
+ the effective block size is always 512, regardless of the CMS
+ logical block size stored in the volume label. The DIAG driver,
+ on the other hand, honors the CMS logical block size.)
+
+ The problem is that the information needed to make that decision
+ has not been provided to the routine (via the parameter list).
+ So what I ended up doing is assuming the normal way, then if
+ I don't find a recognized volume label header (VOL1, LNX1,
+ or CMS1, in EBCDIC), then I assumed that it must be the special
+ case. So in the special case I end up doing an unnecessary
+ read. It's a kludge, but it works.
+
+2011-02-23 Jim Meyering <meyering@redhat.com>
+
+ tests: new script to generate 9-pte-GPT-tables
+
+ cleanup: use verify, not PED_ASSERT to check struct sizes
+ * libparted/labels/gpt.c: Use compile-time "verify" rather than
+ run-time PED_ASSERT to ensure struct sizes are as expected.
+
+2011-02-23 Stephen Powell <zlinuxman@wowway.com>
+
+ s390: improve/correct DASD support
+ The long title would be "corrections to partition size and location
+ calculations for type 1 partitions for s390 dasd".
+
+ This could be treated as two separate fixes, one to make corrections
+ for LDL formatted disks and one to add support for CMS formatted
+ disks. I see CMS formatted disks as a variant of LDL formatted
+ disks, with the additional twist that CMS formatted disks can
+ be reserved or recomped, which LDL formatted disks cannot be.
+ This affects the size and location of the partition.
+
+ With these patches, parted matches the behavior of the Linux kernel
+ in recognizing partitions on CMS- and LDL-formatted disks, as documented
+ in the Linux kernel source code in routine fs/partitions/ibm.c.
+ Calculation of the metadata has also been changed so that parted will
+ show no free space on such a disk. In some cases there are now two
+ non-contiguous metadata extents: one at the beginning of the disk and
+ one at the end.
+
+ As before, parted only supports CKD DASD using the ECKD driver.
+ FBA DASD and CKD DASD using the DIAG driver are still not supported.
+
+ In my regression testing I have discovered some problems in the area
+ of recognizing file system options. However, since I can duplicate
+ these errors on a version of parted which does not contain my changes,
+ I have concluded that my changes did not cause this and therefore
+ this is an unrelated bug.
+
+2011-02-22 Jim Meyering <meyering@redhat.com>
+
+ maint: update from gnulib
+ * bootstrap: Update from gnulib.
+ * tests/init.sh: Likewise.
+ * gnulib: Update submodule to latest.
+
+ maint: update copyright year ranges to include 2011
+ Run "make update-copyright".
+
+ maint: update copyright date in parted.texi
+ * doc/parted.texi: Update copyright date.
+
+2010-12-30 Jim Meyering <meyering@redhat.com>
+
+ maint: don't hard-code bug-reporting address
+ * libparted/exception.c (default_handler): Use PACKAGE_BUGREPORT
+ rather than hard-coding bug-parted@...
+ * libparted/labels/gpt.c (_parse_header) [DISCOVER_ONLY]: Don't
+ mention the bug-reporting address explicitly, since ped_exception_throw
+ is about to do just that.
+
+2010-12-16 Jim Meyering <meyering@redhat.com>
+
+ maint: correct typos in HACKING
+ * HACKING: Don't reference grep everywhere. I copied grep's
+ HACKING and forgot to s/grep/parted/ (slightly different for
+ the repository, since it's at git.debian.org, not Savannah).
+ 2010-11-25 Jim Meyering <meyering@redhat.com>
+
+2010-12-15 Brian C. Lane <bcl@redhat.com>
+
+ default to 1MiB alignment when possible
+ Change the linux_get_optimum_alignment() function to prefer
+ aligning partitions to PED_DEFAULT_ALIGNMENT (1MiB), if possible.
+ This helps tools like anaconda better support 4k sector drives.
+
+ * include/parted/parted.h (PED_DEFAULT_ALIGNMENT): Define.
+ * libparted/arch/linux.c (linux_get_optimum_alignment): Adjust.
+ See comments for details.
+ * libparted/device.c (ped_device_get_optimum_alignment): Use
+ PED_DEFAULT_ALIGNMENT rather than hard-coded 1048576.
+ * tests/t9020-alignment.sh: Adjust expectations to match new behavior.
+ See http://bugzilla.redhat.com/618255 for details.
+
+2010-11-22 Jim Meyering <meyering@redhat.com>
+
+ tests: don't rely on "lockfile" program
+ * tests/t-local.sh (scsi_debug_acquire_lock_): Use mkdir, rather
+ that lockfile. The latter is not always available.
+ (scsi_debug_lock_dir_): Rename, now that it's a dir.
+ (scsi_debug_cleanup_): Remove it with rm -rf.
+ Fix typo in diag: s/rrmod/rmmod/
+
+ tests: remove vestiges of test-lib.sh
+ * tests/t-lib-helpers.sh (require_mdadm_): Remove vestiges of
+ test-lib.sh (aka uses of the "say" and "test_done" functions).
+ (require_xfs_): Likewise.
+
+ tests: avoid spurious failure
+ * tests/t6000-dm.sh: Sanitize directory name, to avoid spurious
+ failure due to e.g., mount-related differences.
+
+2010-11-22 Brian C. Lane <bcl@redhat.com>
+
+ linux: remove DASD restriction on _disk_sync_part_table
+ * libparted/arch/linux.c: Include <assert.h>.
+ (linux_disk_commit): Assert that _have_blkpg returns true
+ and don't skip _disk_sync_part_table for DASD devices.
+ Otherwise, when creating a partition on a DASD device,
+ new /dev/*[12...] device files would not be created.
+ Also, remove obsolete comment about DevFS.
+ For details, see http://bugzilla.redhat.com/651478
+ and http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10191
+
+2010-11-21 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+ avoid new syntax-check failures
+ * .x-sc_cross_check_PATH_usage_in_tests: New file.
+ * .x-sc_bindtextdomain: New file.
+
+2010-11-20 Jim Meyering <meyering@redhat.com>
+
+ tests: adjust cleanup_ handler to work with init.sh
+ * tests/init.cfg (cleanup_, cleanup_fn_, cleanup_final_): Define.
+ * tests/t-local.sh (cleanup_final_): Use this to ensure that we
+ always release the lock and run rmmod. Overriding the trap did not
+ do the job.
+ * libparted/tests/t2100-zerolen.sh: Use cleanup_fn_, not cleanup_.
+ * tests/t1100-busy-label.sh: Likewise.
+ * tests/t1101-busy-partition.sh: Likewise.
+ * tests/t4100-dvh-partition-limits.sh: Likewise.
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+ * tests/t6000-dm.sh: Likewise.
+ * tests/t8000-loop.sh: Likewise.
+
+ tests: t3000-resize-fs.sh: don't expect fs-op warning
+ * tests/t3000-resize-fs.sh: Don't expect fs-op warning.
+ The testing framework now suppresses it.
+
+ tests: t-lvm.sh (lvm_init_root_dir_): Fix it to use $test_dir_
+
+ tests: remove t-lib.sh
+ * tests/t-lib.sh: Remove file. No longer used.
+ * tests/Makefile.am (EXTRA_DIST): Remove t-lib.sh.
+ * tests/t-lib-helpers.sh: Don't mention this file name.
+ * tests/t-local.sh: Likewise.
+
+2010-11-20 Jim Meyering <meyering@redhat.com>
+
+ tests: switch from t-lib.sh to init.sh
+ * tests/init.cfg: Source t-local.sh.
+ * tests/t-local.sh: Replace trap so that we always run
+ scsi_debug_cleanup_, regardless of the cleanup_ function.
+ Replace each snippet like this:
+ -if test "$VERBOSE" = yes; then
+ - set -x
+ - parted --version
+ -fi
+ -
+ -: ${srcdir=.}
+ -. $srcdir/t-lib.sh
+ +. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ Use this command (LHS elided, because it was too long):
+ git grep -l 'srcdir/t-lib.sh'|xargs perl -p0i -e \
+ 's!...!. "\${srcdir=.}/init.sh"; path_prepend_ ../parted\n!'
+
+ * tests/t3310-flags.sh: Adjust manually, since the snippet
+ didn't quite match.
+
+2010-11-20 Jim Meyering <meyering@redhat.com>
+
+ tests: remove test-lib.sh
+ * tests/test-lib.sh: Remove file. No longer used.
+ * tests/Makefile.am (EXTRA_DIST): Remove test-lib.sh.
+ (old-init.sh): Remove rule and associated uses.
+ * tests/lvm-utils.sh (init_root_dir_): Switch to test_dir_,
+ since that is now the only variable that remains.
+
+ tests: remove fail=0 initializations
+ Now, this is done in init.sh.
+
+ tests: libparted/tests: use init.sh, not test-lib.sh
+
+ tests: make lvm-utils.sh usable also from init.sh-using tests
+ * tests/lvm-utils.sh: Use fail_, not error for diagnostics.
+ The former also works in init.sh-using scripts.
+ (init_root_dir_): Use test_dir_ if $test_dir_rand_ is not set.
+
+ tests: new function required for t2100-zerolen.sh
+ * tests/t-lib-helpers.sh (device_mapper_required_): New function.
+
+ tests: convert t5000-tags.sh
+
+ tests: t-lib-helpers.sh: don't discard require_dvhtool_ stderr/stdout
+
+ tests: dvhtool: use skip_, not skip
+
+ tests: t4200-partprobe.sh: convert
+
+ tests: t-lib-helpers.sh (require_dvhtool_): New function.
+
+ tests: convert t4000-sun-raid-type.sh
+
+ tests: move more functions to t-lib-helpers.sh
+
+ tests: convert t7000 to init.sh
+
+ tests: t-lib-helpers: copy emit_superuser_warning from test-lib.sh
+
+ tests: t0000: convert to use init.sh
+
+ tests: convert t1101-busy-partition.sh
+ * tests/t1101-busy-partition.sh: Convert from t-lib.sh to init.sh.
+
+ tests: convert t4100-msdos-partition-limits.sh
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+
+ tests: convert t4100-dvh-partition-limits.sh to use init.sh
+ * tests/t4100-dvh-partition-limits.sh: Convert.
+
+ tests: convert t4100-msdos-starting-sector.sh
+ * tests/t4100-msdos-starting-sector.sh: Use init.sh.
+
+ tests: convert t0220 to use init.sh
+ * tests/t0220-gpt-msftres.sh: Convert to use init.sh.
+
+ tests: extract t-lib.sh functions for use via init.sh
+ Currently there are three test frameworks in use:
+ - test-lib.sh: old, don't use this framework any more;
+ I found it too hard to use and debug.
+ - t-lib.sh: newer, I had converted most tests to use this
+ - init.sh: newest: successor of t-lib.sh, the master copy
+ of which now resides in gnulib. All new tests should use
+ this framework.
+ * tests/t-lib-helpers.sh: New file, extracted from t-lib.sh,
+ so that init.cfg can source these functions, too.
+ * tests/t-lib.sh: Source it.
+ * tests/init.cfg: Source it from here, too.
+ * tests/Makefile.am (EXTRA_DIST): Add t-lib-helpers.sh.
+
+ tests: remove unused function: skip_if_
+
+ tests: global subst: s/skip_test_/skip_/
+ git grep -l skip_test_|xargs perl -pi -e 's/skip_test_/skip_/'
+
+ maint: remove unused test function
+ * tests/t-lib.sh (require_built_): Remove unused function.
+ It also happened to use skip_, which we're about to make a function.
+
+ tests: avoid race condition in t3000-resize
+ Without the 1-second sleep, this root-only test would
+ fail about 50% of the time for me.
+ * tests/t3000-resize-fs.sh (device_sectors_required): Sleep
+ one more second after ${dev}1 appears, so that subsequent
+ commands are more predictable.
+ Split a long line.
+
+ tests: t2100-mkswap.sh: convert to init.sh
+ * tests/t2100-mkswap: Likewise.
+
+ tests: convert t1100 to use init.sh
+ * tests/t1100-busy-label.sh: Convert to use init.sh
+ * tests/init.cfg (require_erasable_): New function, mostly
+ copied from test-lib.sh.
+
+ tests: init.cfg: copy envvar setings from testlib.sh:
+ Unset TERM and CDPATH; sanitize LC_ALL, TZ, LANG, and set
+ PARTED_SUPPRESS_FILE_SYSTEM_MANIPULATION_WARNING=1.
+ * tests/t1101-busy-partition.sh: Expect no output, now that we set
+ PARTED_SUPPRESS_FILE_SYSTEM_MANIPULATION_WARNING=1.
+
+ maint: update init.sh and bootstrap from gnulib
+ * tests/init.sh: Update from gnulib.
+ * bootstrap: Likewise.
+
+ doc: also mention KiB, MiB, GiB and TiB suffixes
+ * doc/parted.texi (unit): Also mention KiB, MiB, GiB and TiB.
+
+2010-11-17 Colin Watson <cjwatson@ubuntu.com>
+
+ libparted: ignore zero-length devices
+ * bootstrap.conf (gnulib_modules): Add xstrtoll.
+ * configure.ac: Create DYNAMIC_LOADING output variable.
+ * libparted/arch/linux.c (_device_get_length): Return the value of
+ PARTED_TEST_DEVICE_LENGTH if set in the environment, strictly for use by
+ the test suite.
+ (init_generic): If geometry probing fails because the device was
+ zero-length, return quietly rather than throwing an exception. This has
+ been observed in the wild with cciss devices, and it's difficult for
+ partitioners to tell the difference between that and more serious
+ errors.
+ * libparted/tests/Makefile.am (TESTS): Add t2100-zerolen.sh.
+ (check_PROGRAMS): Add zerolen.
+ (zerolen_SOURCES): Add.
+ (TESTS_ENVIRONMENT): Add DYNAMIC_LOADING and ENABLE_DEVICE_MAPPER.
+ * libparted/tests/t2100-zerolen.sh: New file.
+ * libparted/tests/zerolen.c: New file.
+ * tests/test-lib.sh (wait_for_dev_to_appear_): New function, copied from
+ tests/t-local.sh.
+ * NEWS (Bug fixes): Mention it.
+
+2010-11-09 Jim Meyering <meyering@redhat.com>
+
+ dos: fix a bug affecting very small devices (smaller than 1 cylinder)
+ This bug was introduced in commit c79d91ec, "dos: accommodate very
+ small devices (useful for testing)".
+ * libparted/labels/dos.c (_primary_constraint): The bug was to
+ skip setting start_geom for small devices. That led to a used-
+ uninitialized bug in the subsequent ped_constraint_new call.
+ The fix is to relax the constraint to use a starting sector of "1",
+ if necessary. Report and diagnosis by Jean-Christian de Rivaz in
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10178
+ * NEWS (Bug fixes): Mention it.
+
+2010-10-10 Jim Meyering <meyering@redhat.com>
+
+ maint: don't use obsolete gnulib modules
+ * bootstrap.conf (gnulib_modules): Use calloc-gnu, malloc-gnu
+ and realloc-gnu modules, rather than calloc, malloc and realloc.
+ The shorter-named modules are now deprecated.
+
+ maint: describe policy on copyright year number ranges
+ * README: Mention coreutils' long-standing policy on use of M-N
+ ranges in copyright year lists. Requested by Richard Stallman.
+
+ build: update gnulib submodule to latest, and update bootstrap
+ * bootstrap: update from gnulib
+
+2010-08-23 Petr Uzel <petr.uzel@suse.cz>
+
+ build: suggest libuuid from util-linux-ng package
+ * configure.ac: libuuid was moved from e2fsprogs to
+ util-linux-ng-2.16. Because distributions now often
+ build e2fsprogs without libuuid support, suggest installing
+ libuuid from util-linux-ng if it is missing, not from e2fsprogs.
+
+2010-08-20 Colin Watson <cjwatson@ubuntu.com>
+
+ libparted: remove limits on loop labels
+ There's no reason to impose any particular limit on loop labels, since
+ they just represent a single large partition. Sector counts over 2^32
+ are needed for large RAID arrays. Change the limit to 2^64 since that's
+ the upper limit imposed by libparted and it saves us implementing the
+ limit functions separately. This bug appears to have been introduced
+ by commit 2dbc645c.
+
+ * libparted/labels/pt-limit.gperf: Change limits on "loop" to 2^64.
+ * tests/t9021-maxima.sh: Update for the new loop limit.
+ * NEWS (Bug fixes): Mention it.
+
+2010-08-18 Jim Meyering <meyering@redhat.com>
+
+ avoid non-srcdir "make check" failure
+ * tests/Makefile.am (EXTRA_DIST): Add init.cfg.
+ The failure was introduced by commit 6f7c0f12.
+
+ build and tests: update bootstrap and init.sh from gnulib
+ * tests/init.sh: Update from gnulib.
+ * bootstrap: Likewise.
+
+ build: update gnulib submodule to latest
+
+2010-07-20 Hans de Goede <hdegoede@redhat.com>
+
+ linux: recognize scsi disks with a high major number (128-135)
+ * libparted/arch/linux.c (SCSI_BLK_MAJOR): Recognize high major number.
+
+2010-07-17 Jim Meyering <meyering@redhat.com>
+
+ libparted: avoid regression when processing a whole-disk FAT partition
+ Without this change, we would improperly classify a whole-disk partition
+ containing a FAT file system as a DOS partition table with no partitions.
+ Introduced by commit d732a2b7 on 2008-05-28.
+ * libparted/labels/dos.c (maybe_FAT): New function.
+ (msdos_probe): Use it.
+ Reported by ChenMin in
+ http://thread.gmane.org/gmane.comp.gnu.parted.bugs/10115
+ * NEWS (Bug fixes): Mention it.
+ * tests/t3400-whole-disk-FAT-partition.sh: New file. Test for the bug.
+ * tests/Makefile.am (TESTS): Add it.
+
+2010-07-17 Jim Meyering <meyering@redhat.com>
+
+ tests: use init.cfg; required for init.sh-using tests
+ * tests/init.cfg: New file.
+ (require_512_byte_sector_size_): Slightly different function
+ than the one in test-lib.sh.
+
+ * tests/init.cfg: New file.
+
+2010-07-17 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ maint: remove trailing blank
+ * tests/t1101-busy-partition.sh: Remove trailing blank.
+
+2010-06-30 Otavio Salvador <otavio@ossystems.com.br>
+
+ tests: update resize-fs to use wait_for_dev_to_appear_
+ * t3000-resize-fs.sh: rely on wait_for_dev_to_appear_ to wait for the
+ device to be crated.
+
+ tests: rely on require_scsi_debug_module_ to modprobe scsi_debug module
+ * t2310-dos-extended-2-sector-min-offset.sh: remove explicit modprobe
+ since it is done by require_scsi_debug_module_.
+ * t3200-type-change.sh: likewise.
+ * t9020-alignment.sh: likewise.
+ * t9030-align-check.sh: likewise.
+ * t9040-many-partitions.sh: likewise.
+
+2010-06-30 Otavio Salvador <otavio@ossystems.com.br>
+
+ tests: add one: try to remove a busy partition
+ This test tries to reproduce the issue reported in Debian bug #582818[1].
+
+ 1. http://bugs.debian.org/582818
+
+ Basically it does:
+
+ * create two primary partitions
+ * mount the second one
+ * remove the first (must work)
+ * try to remove the second (must fail)
+
+ * tests/t1101-busy-partition.sh: new file.
+ * tests/Makefile.am (TESTS): add the new test in check target.
+
+2010-06-26 Otavio Salvador <otavio@ossystems.com.br>
+
+ tests: skip loop-clobber-infloop if mkswap cannot be found
+ * tests/t0400-loop-clobber-infloop.sh: Skip the test is case of mkswap
+ cannot be found.
+
+2010-06-26 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+ * bootstrap: Update from gnulib.
+ * tests/init.sh: Likewise.
+
+2010-06-26 Colin Watson <cjwatson@ubuntu.com>
+
+ sun: revert "implement disk flag operations"
+ This reverts the libparted/labels/sun.c part of
+ 723ea23c5df68cbe67d1f518ef484f4c77f516fa. Sun disk labels do
+ not appear to be able to handle non-cylinder alignment
+ (http://bugs.debian.org/579948).
+ * libparted/labels/sun.c: Revert.
+
+2010-06-26 Jim Meyering <meyering@redhat.com>
+
+ tests: adjust sun-partition-creating test to conform
+ * tests/t4000-sun-raid-type.sh: Adjust partition size so the
+ end falls on a cylinder boundary.
+
+2010-05-28 Jim Meyering <meyering@redhat.com>
+
+ maint: update README-release
+ * README-release: Update to match the template used for diffutils,
+ coreutils, etc.
+
+ maint: add gettext to list of bootstrapped-with tools in announcement
+ * cfg.mk (bootstrap-tools): Add gettext to the list.
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 2.3
+ * NEWS: Record release date.
+
+ doc: regenerate two files using gettext-0.18
+ * doc/pt_BR/partprobe.8.pt_BR.po: Regenerate with gettext-0.18.
+ * doc/C/po/partprobe.8.pot: Likewise.
+
+ build: require gettext-0.18 after all, because
+ since gnulib is pulling in m4/gettext.m4 from 0.18, and there's
+ a cross-check between that file and po/Makefile.in.in, it's easiest
+ simply to require 0.18 of those who run build tools. Otherwise,
+ requiring 0.17, build-from-git would fail due to the mismatch:
+ 0.17 in Makefile.in.in and 0.18 in m4/gettext.m4.
+ * configure.ac (AM_GNU_GETTEXT_VERSION): Require gettext 0.18.
+
+ build: update gnulib submodule to latest
+
+ maint: use the do-release-commit-and-tag module from gnulib
+ * bootstrap.conf (gnulib_modules): Add do-release-commit-and-tag.
+
+2010-05-28 Petr Uzel <petr.uzel@suse.cz>
+
+ doc: fix a typo
+ * doc/parted.texi: s/onstraints/constraints/
+
+ parted: do_align_check returns always 1 in interactive mode
+ * parted/parted.c (do_align_check): Always return 1 in interactive mode.
+
+2010-05-28 Jim Meyering <meyering@redhat.com>
+
+ build: really use gettext-0.17
+ * configure.ac: Correct previous change to use 0.17, not 0.18,
+ since gettext-0.18 is new enough that it makes building from git
+ a little too inconvenient. Spotted by Petr Uzel.
+
+2010-05-26 Petr Uzel <petr.uzel@suse.cz>
+
+ parted: make align-check work in interactive mode
+ * parted/parted.c (do_align_check): rework the function so that
+ it reports partition alignment in interactive mode as described in
+ documentation.
+
+ parted: initialize align_type to default value
+ * parted/parted.c (do_align_check): Initialize align_type to
+ default alignment; this prevents reading of uninitialized memory
+ later in command_line_get_align_type()
+
+ parted: plug memory leak
+ * parted/parted.c (_done_messages): Free unit_msg.
+
+2010-05-26 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid spurious failure of the root-only many-partitions test
+ * tests/t9040-many-partitions.sh: When creating a scsi_debug
+ device, honor the block size suggested by the PARTED_SECTOR_SIZE
+ environment variable, and thus required in expected output.
+
+ build: update gnulib submodule to latest
+
+ maint: remove useless definitions
+ * libparted/fs/xfs/platform_defs.h [__sparc__] (O_DIRECT):
+ Remove now-unneeded definition.
+ * parted/table.c (wchar_t): Remove definition.
+ * parted/strlist.c (wchar_t): Likewise.
+ * .x-sc_prohibit_always-defined_macros: New file.
+ Exempt two files from this syntax-check rule.
+ * Makefile.am (EXTRA_DIST): Add it here.
+
+ maint: update helper scripts
+ * tests/help-version: Update from coreutils.
+ * bootstrap: Update from gnulib.
+ * tests/init.sh: Likewise.
+
+ build: use gettext-0.17
+ * configure.ac: Use gettext-0.17.
+ * bootstrap.conf (gnulib_modules): Use gettext-h, not gettext.
+ since the latter drags in a depedency on gettext 0.18.
+
+2010-05-25 Jim Meyering <meyering@redhat.com>
+
+ fix typo in comment
+
+2010-05-10 Jim Meyering <meyering@redhat.com>
+
+ libparted: fail (don't just warn) upon failure to inform kernel of...
+ partition change(s).
+ * libparted/arch/linux.c (_disk_sync_part_table): Throw an error, not
+ merely a warning. When this fails, it indicates that the kernel has
+ not been informed, and that must translate to an error, since doing
+ otherwise would violate the contract of ped_disk_commit_to_os.
+ Suggested by Hans De Goede.
+
+2010-05-06 Jim Meyering <meyering@redhat.com>
+
+ tests: make the new many-partitions test fail if it takes "too long"
+ * tests/t9040-many-partitions.sh: Fail if creating 60 partitions
+ takes more than a minute.
+
+ maint: use latest bootstrap script from gnulib
+ * bootstrap: Sync from gnulib.
+
+2010-05-06 Hans de Goede <hdegoede@redhat.com>
+
+ gpt: recognize microsoft recovery GUID
+ Microsoft advices creating recovery partitions with a GUID of
+ de94bba4-06d1-4d40-a16a-bfd50179d6ac, see:
+ http://technet.microsoft.com/en-us/library/dd744301%28WS.10%29.aspx
+
+ This patch makes parted recognize this guid (using the DIAG flag).
+ * libparted/labels/gpt.c (PARTITION_MSFT_RECOVERY, GPTPartitionData,
+ _parse_part_entry, gpt_partition_new, gpt_partition_set_system,
+ gpt_partition_set_flag, gpt_partition_get_flag,
+ gpt_partition_is_flag_available): Support microsoft recovery GUID.
+ * NEWS (New features): Add it.
+
+2010-05-06 Hans de Goede <hdegoede@redhat.com>
+
+ msdos: recognize id 27 as a diagnostics (recovery) partition type
+ msdos partitiontable partition id 27 is recommended by microsoft for
+ use as id for recovery partitions, see:
+ http://technet.microsoft.com/en-us/library/dd744364%28WS.10%29.aspx
+ http://bugzilla.redhat.com/show_bug.cgi?id=534066
+
+ * libparted/labels/dos.c (PARTITION_MSFT_RECOVERY): Define.
+ (raw_part_parse): Recognize id 27
+ (msdos_partition_set_system): Recognize id 27
+
+2010-05-06 Jim Meyering <meyering@redhat.com>
+
+ tests: add one: create 60 partitions on a scsi device
+ * tests/t9040-many-partitions.sh: New test.
+ * tests/Makefile.am (TESTS): Add it.
+ (TESTS_ENVIRONMENT): Export AWK to test scripts.
+ Inspired by the report of a many-partition test
+ taking far longer on RHEL5 than on RHEL4 in
+ http://bugzilla.redhat.com/589117
+
+2010-05-05 Jim Meyering <meyering@redhat.com>
+
+ doc: update NEWS
+ * NEWS (Bug fixes): Mention the ext2 2TiB FS-creation bug.
+
+ build: update gnulib submodule to latest
+
+2010-05-05 Martin Poole <mpoole@redhat.com>
+
+ ext2: don't overflow when creating a partition of size 2TiB or larger
+ Without this patch, mkpartfs would succeed in creating an ext2
+ partition, but the resulting partition would fail a mkfs.ext2 -f check.
+ * libparted/fs/ext2/parted_io.c (do_read): Avoid overflow 32-bit
+ sector count overflow for a partition of size 2TiB or larger.
+ (do_write): Likewise.
+ See http://bugzilla.redhat.com/584057#c16 a reproducer.
+
+2010-04-30 Hans de Goede <hdegoede@redhat.com>
+
+ _device_unregister: check for unregistering the same device twice
+ _device_unregister() can get called 2 times for the same device if
+ a libparted user explictly removes the device from the cache using
+ ped_device_cache_remove(), it gets called and it then becomes the
+ user's responsibility to free the PedDevice by calling
+ ped_device_destroy(). ped_device_destroy() will then call
+ _device_unregister() a second time with the same device, so if the
+ device is not found in the list, do nothing.
+
+ * libparted/device.c(_device_unregister): Check for unregistering
+ the same device twice.
+ Reported by Jan Stodola in <http://bugzilla.redhat.com/568346>.
+
+2010-04-30 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid root-only/XFS limit test failure on 32-bit system
+ * tests/t4100-msdos-partition-limits.sh: Due to an inherent XFS
+ limitation on 32-bit systems, this test would fail a set-up
+ file creation step for simulated sector sizes of 4K and up.
+ Skip this test in those cases.
+ Upon dd failure, propagate its diagnostic to output, to make this
+ sort of problem easier to diagnose.
+ * tests/t4100-dvh-partition-limits.sh: Likewise.
+
+2010-04-30 Jim Meyering <meyering@redhat.com>
+
+ libparted: avoid race in informing the kernel of partition table changes
+ When sync'ing a partition table change using the latest
+ code, sometimes we'd get an unwarranted failure like this:
+
+ Warning: Partition(s) 1 on /dev/sdd have been written, but we
+ have been unable to inform the kernel of the change, probably because
+ it/they are in use. As a result, the old partition(s) will remain in
+ use. You should reboot now before making further changes.
+
+ To be precise, when running the partition-resizing root-only test
+ in a loop:
+
+ for i in $(seq 240); do make -C tests check VERBOSE=yes \
+ TESTS=t3000-resize-fs.sh >& log.$i && printf . || echo $i $?; done
+
+ I would typically see about 50% of them fail on a Fedora 13 system.
+ It was obvious that this was due to a race condition when I found that
+ modifying that tests' parted...resize invocation to go via strace changed
+ the timing enough to make the test pass every time.
+
+ The fix is to retry the partition-removal step upon any EBUSY failure,
+ currently for up to 1 second (retrying up to 100 times, sleeping 10ms
+ after each failure).
+
+ * libparted/arch/linux.c (_disk_sync_part_table): Allocate "ok" using
+ calloc, now that its initial values matter.
+ Retry each removal upon EBUSY-failure.
+ * bootstrap.conf (gnulib_modules): Use gnulib's usleep module.
+
+2010-04-30 Jim Meyering <meyering@redhat.com>
+
+ libparted: variable renaming, minor "goto" reorg
+ * libparted/arch/linux.c (_disk_sync_part_table): Rename local array:
+ s/rets/ok/, for readability.
+ Use only a single label, "cleanup:", rather than two: free_rets
+ and free_errnums.
+
+ libparted: remove now-worse-than-useless _kernel_reread_part_table
+ Now that we're using BLKPG properly, there's no point in using the
+ less-functional BLKRRPART ioctl to make the kernel reread the partition
+ table.
+ More importantly, this function would fail when any partition is in
+ use, in spite of our having carefully vetted them via BLKPG ioctls.
+ * libparted/arch/linux.c (_kernel_reread_part_table): Remove function.
+ (linux_disk_commit): Don't call it.
+
+2010-04-29 Jim Meyering <meyering@redhat.com>
+
+ tests: correct a root-only test
+ * tests/t2310-dos-extended-2-sector-min-offset.sh: Don't hard-code
+ "/dev/sdd5" in expected output.
+
+ maint: avoid code duplication
+ * libparted/labels/dos.c (clear_flags): New function.
+ Factored (5 times) out of ...
+ (msdos_partition_set_flag): ...here. Use the new function.
+
+2010-04-29 Hans de Goede <hdegoede@redhat.com>
+
+ dos: add a partition flag for diagnostics / recovery partitions
+ msdos partition tables can contain diagnostics partitions (often used
+ nowadays as system recovery partitions). For some users of libparted
+ (i.e., anaconda) it is useful to know if a dos partition is a regular
+ partition or a diagnostic partition. For example, see
+ <http://bugzilla.redhat.com/534066>.
+
+ * include/parted/disk.h(_PedPartitionFlag): Add PED_PARTITION_DIAG
+ * libparted/disk.c(ped_partition_flag_get_name): Add PED_PARTITION_DIAG
+ * libparted/labels/dos.c: Add support for PED_PARTITION_DIAG flag
+ * doc/parted.texi (set): Document it.
+
+2010-04-28 Jim Meyering <meyering@redhat.com>
+
+ tests: distribute new file, init.sh
+ * tests/Makefile.am (EXTRA_DIST): Add init.sh.
+
+ tests: add help-version test (from coreutils)
+ * tests/help-version: New file
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Pass built_programs and VERSION
+ to test scripts -- both are required by help-version.
+ (TESTS): Add help-version.
+
+ ui: make --help tell where to report bugs
+ * parted/ui.c (help_msg): Tell where to report bugs.
+
+ tests: use gnulib's init.sh
+ * tests/init.sh: New file, from gnulib.
+
+ tests: rename generated init.sh to old-init.sh
+ * tests/Makefile.am (old-init.sh): Rename from init.sh.
+ * libparted/tests/Makefile.am: Likewise.
+ * tests/test-lib.sh: Rename sole use.
+ * .gitignore: Rename here, too.
+
+ build: update gnulib submodule to latest
+
+ tests: improved portability
+ * tests/test-lib.sh: Don't use test's -a option.
+
+ maint: remove empty lines at end of file
+ This lets one more "syntax-check" test pass.
+ Run this command:
+ git ls-files|grep -v gnulib|xargs perl -pi -0777 -e 's/\n\n+$/\n/'
+
+ maint: pass newer "make syntax-check" tests from gnulib
+ * cfg.mk (local-checks-to-skip): Add these, to pass "make syntax-check"
+ sc_error_message_uppercase, sc_error_message_period.
+ * libparted/fs/ext2/ext2.h: Remove "#if HAVE_INTTYPES_H" guard.
+
+ tests: test all boolean flags
+ * tests/t3310-flags.sh: New test, suggested by Hans De Goede.
+ * tests/Makefile.am (TESTS): Add it.
+
+2010-04-27 Jim Meyering <meyering@redhat.com>
+
+ doc: use a valid http:.../AUTHORS URL
+ * debug/clearfat/clearfat.c (AUTHORS): Point to the git repo.
+ * parted/parted.c (AUTHORS): Likewise.
+ * partprobe/partprobe.c (AUTHORS): Likewise.
+
+ * parted/parted.c: Include "version.h".
+ (_version): Use Version, not VERSION.
+
+2010-04-27 Jim Meyering <meyering@redhat.com>
+
+ ui: get version number from a separately-compiled file
+ * parted/Makefile.am (version.c, version.h): Generate.
+ (parted_LDADD): Add libver.a.
+ (noinst_LIBRARIES, nodist_libver_a_SOURCES): Define.
+ (BUILT_SOURCES): Initialize and append.
+ (MAINTAINERCLEANFILES): Update.
+ * parted/parted.c: Include "version.h".
+ (_version): Use the new global variable, Version, not VERSION.
+
+2010-04-23 Jim Meyering <meyering@redhat.com>
+
+ libparted: _disk_sync_part_table: allow interactive ignore
+ * libparted/arch/linux.c (_disk_sync_part_table): Change diagnostic
+ so that it makes it clear what failed. Let an interactive "ignore"
+ cause the function to succeed.
+
+ tests: remove partition explicitly before mklabel, to avoid new failure
+ * tests/t3000-resize-fs.sh: Before, mklabel was sufficient to clear
+ the partition table in preparation for the next iteration in this test.
+ However, with recent BLKRRPART/BLKPG changes that "mklabel" would evoke
+ a warning. Remove the sole partition to avoid that.
+
+ libparted: linux_disk_commit: don't ignore _disk_sync_part_table failure
+ * libparted/arch/linux.c (linux_disk_commit):
+ When calling _disk_sync_part_table, always return its result.
+
+ libparted: _disk_sync_part_table: always return 0 upon failure
+ * libparted/arch/linux.c (_disk_sync_part_table):
+ Return 0 (not 1) upon failure.
+
+2010-04-23 Colin Watson <cjwatson@ubuntu.com>
+
+ dos: always allow at least two sectors for extended boot record
+ Unless specifically told otherwise, the Linux kernel considers extended
+ boot records to be two sectors long, in order to "leave room for LILO".
+ When using anything other than cylinder alignment, libparted was only
+ allowing one sector in the minimum extended partition geometry, which in
+ some situations (e.g. following Phillip Susi's patch to reintroduce
+ BLKPG) could confuse the kernel into thinking that the EBR and the first
+ logical partition overlapped.
+
+ * libparted/labels/dos.c (_get_min_extended_part_geom): Allow at least
+ two sectors for the extended boot record.
+
+2010-04-23 Jim Meyering <meyering@redhat.com>
+
+ tests: test for new 2-sector minimum ext-logical-separation
+ * tests/t2310-dos-extended-2-sector-min-offset.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ dos: accommodate very small devices (useful for testing)
+ * libparted/labels/dos.c (_primary_constraint): Don't pass a negative
+ "device_length" to ped_geometry_init when the underlying device
+ has fewer sectors than a "cylinder".
+
+ libparted: allocate storage for diagnostic only when needed
+ * libparted/arch/linux.c (_disk_sync_part_table): Rename local:
+ s/parts/bad_part_list/
+ Allocate space for it only if needed.
+ Use malloc rather than ped_malloc.
+ Move decl of FD down to first use.
+
+ libparted: adjust code formatting
+
+ libparted: reword a diagnostic
+
+2010-04-23 Phillip Susi <psusi@cfl.rr.com>
+
+ libparted: improve BLKPG error checking
+ This patch cleans up the BLKPG code that the previous patch put back
+ to perform proper error checking and in the event that some partitions
+ are in use, they can not be modified in the running kernel using BLKPG.
+ Warn the user that this is the case and advise them to reboot, just like
+ we do when BLKRRPART fails for the same reason, unless the partition in
+ question is unchanged.
+
+ libparted: reenable use of BLKPG ioctls
+ This patch effectively reverses commit 1d8f9bec which removed the code
+ using the new BLKPG ioctls instead of the old BLKRRPART ioctl to update
+ the in-kernel partition table. The reason for this is because BLKRRPART
+ fails if any partition on the disk is in use, but the BLKPG ioctls allow
+ you to manipulate the other partitions on the disk without requiring a
+ reboot. Also BLKRRPART requires that the kernel understand the
+ partition table on the disk, which may not always be the case.
+
+2010-04-23 Hans de Goede <hdegoede@redhat.com>
+
+ linux: detect dm_task_run failure
+ We were checking for a return value of < 0 for dm_task_run errors, but
+ dm_task_run returns 0 on error (and 1 on success). Thanks to Joe Jin
+ for spotting this, see Red Hat bug 582907.
+
+ * libparted/arch/linux.c(_dm_remove_map_name, _dm_is_part,
+ _dm_remove_parts, _dm_add_partition): dm_task_run returns 0 on error.
+
+2010-04-21 Jim Meyering <meyering@redhat.com>
+
+ tests: test for palo and prep interaction
+ * tests/t3300-palo-prep.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2010-04-21 Hans de Goede <hdegoede@redhat.com>
+
+ dos: fix prep / palo flag handling
+ Setting the prep flag was not clearing the palo flag and vice versa
+ * libparted/labels/dos.c (msdos_partition_set_flag): Fix prep / palo
+ flag handling.
+
+2010-04-21 Jim Meyering <meyering@redhat.com>
+
+ tests: remove unnecessary (duplicate) local var assignment
+ * tests/t9021-maxima.sh: Remove duplicate ss=$sector_size_.
+
+2010-04-21 Colin Watson <cjwatson@ubuntu.com>
+
+ maint: make PED_ASSERT and PED_DEBUG if-safe
+ Constructions such as:
+
+ if (foo)
+ PED_DEBUG (0, "foo");
+ else
+ PED_DEBUG (0, "not foo");
+
+ did not compile reliably, depending on the configuration. Make this
+ work.
+
+ * include/parted/debug.h [DEBUG && __GNUC__ && !__JSFTRACE__]
+ (PED_DEBUG): Remove trailing semicolon.
+ [!DEBUG] (PED_ASSERT): Use do-while rather than while.
+ [!DEBUG] (PED_DEBUG): Likewise.
+
+2010-04-17 Jim Meyering <meyering@redhat.com>
+
+ doc: add HACKING
+ * HACKING: New file. Copied from coreutils, with s/coreutils/parted/
+ and a few minor edits.
+
+2010-04-16 Petr Uzel <petr.uzel@suse.cz>
+
+ .gitignore: ignore index files generated by ctags and cscope
+
+2010-04-16 Petr Uzel <petr.uzel@suse.cz>
+
+ libparted: add support for Linux software RAID arrays (mdraid)
+ Recognize MD devices, so "parted -s /dev/md0 print" now prints
+ "Model: Linux Software RAID Array (md)" instead of
+ "Model: Unknown (unknown)".
+
+ * include/parted/device.h (PedDeviceType): Add PED_DEVICE_MD.
+ * libparted/arch/linux.c (MD_MAJOR): New define.
+ * libparted/arch/linux.c (_device_probe_type): Recognize MD array.
+ * libparted/arch/linux.c (linux_new): Handle MD array.
+ * parted/parted.c(do_print): Add "md" to the list of available
+ transports.
+ * NEWS (New features): Mention it.
+
+2010-04-13 Jim Meyering <meyering@redhat.com>
+
+ tests: propagate recent improvements to copied-from code
+ * tests/t1700-ext-probe.sh: Fix typo s/2>1/2>&1/ and use
+ a tighter regexp also in the preceding loop.
+ Noted by Colin Watson.
+
+2010-04-13 Colin Watson <cjwatson@ubuntu.com>
+
+ maint: constify ped_device_get_constraint interface
+ * include/parted/device.h (ped_device_get_constraint): Constify "dev"
+ parameter.
+ * libparted/device.c (ped_device_get_constraint): Likewise.
+
+2010-04-13 Colin Watson <cjwatson@ubuntu.com>
+
+ libparted: uninit_bg and flex_bg features should indicate ext4
+ According to tune2fs(8), the uninit_bg and flex_bg features are only
+ supported by ext4, so libparted should treat their presence as
+ indicating ext4. Reported by C de-Avillez in
+ https://bugs.launchpad.net/ubuntu/+source/parted/+bug/561599.
+
+ * libparted/fs/ext2/ext2_fs.h: Define EXT4_FEATURE_RO_COMPAT_GDT_CSUM
+ and EXT4_FEATURE_INCOMPAT_FLEX_BG.
+ * libparted/fs/ext2/interface.c (_ext2_generic_probe): Test for
+ EXT4_FEATURE_RO_COMPAT_GDT_CSUM and EXT4_FEATURE_INCOMPAT_FLEX_BG when
+ probing for ext4.
+ * tests/t1700-ext-probe.sh: Test for this.
+ * NEWS (Bug fixes): Mention this.
+
+2010-04-09 Colin Watson <cjwatson@ubuntu.com>
+
+ libparted: fix diagnostics about exceeding partition limits
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len): Use the
+ correct value in the diagnostics that print the upper bound on
+ partition size and largest starting sector number. Before, each
+ would use UINT32_MAX. Now each prints the partition-table-specific
+ limit.
+
+2010-04-06 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: add test for /dev/mapper symlink issue
+ Sometimes, libparted operates on device mapper files with a path of
+ /dev/mapper/foo. With newer lvm versions /dev/mapper/foo is a symlink
+ to /dev/dm-#. However some storage administration programs (anaconda,
+ for example) may do the following:
+ 1) Create a ped_device for /dev/mapper/foo
+ 2) ped_get_device resolves the symlink to /dev/dm-#, and the path
+ in the PedDevice struct points to /dev/dm-#
+ 3) The program does some things to lvm, causing the symlink to
+ point to a different /dev/dm-# node
+ 4) The program does something with the PedDevice, which results
+ in an operation on the wrong device
+
+ Newer libparted versions do not suffer from this problem, as they
+ do not canonicalize device names under /dev/mapper. This test checks
+ for this bug.
+
+ * libparted/tests/symlink.c: New test which tests for this issue.
+ * libparted/tests/t3000-symlink.sh: New file.
+ * libparted/tests/Makefile.am: Include the new files. Run the new test.
+
+2010-04-06 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: don't canonicalize /dev/mapper paths
+ Besides fixing the issue displayed by libparted/tests/symlink.c,
+ this has the added advantage that the output of parted p on one of these
+ devices now says:
+ "Disk /dev/mapper/BigVol2-lv_iscsi_disk2: 34.4GB"
+
+ Which is a lot more user friendly then the output before this patch:
+ "Disk /dev/dm-6: 34.4GB"
+
+ * libparted/device.c (ped_device_get): Don't canonicalize names
+ that start with "/dev/mapper/".
+ * NEWS (Bug fixes): Mention it.
+ Thanks to Ales Kozumplik for the analysis.
+ Details in <http://bugzilla.redhat.com/577824>.
+
+2010-03-30 Colin Watson <cjwatson@ubuntu.com>
+
+ doc: add @dircategory to Info documentation
+ The Texinfo documentation says that Info files should use @dircategory,
+ and suggests consulting the Free Software Directory to select a category
+ name. The directory places Parted under "System administration".
+
+ * doc/parted.texi: Add `@dircategory System administration'.
+
+2010-03-30 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ tests: disable new texinfo-acronym syntax-check from gnulib
+ * cfg.mk (local-checks-to-skip): Add new sc_texinfo_acronym, to skip it.
+
+ maint: avoid using test's -o and -a operators: they are not portable
+ * tests/lvm-utils.sh: Don't use test ... -o.
+ * configure.ac: Don't use test ... -a.
+
+ maint: remove unneeded #include
+ * libparted/disk.c: Don't include "intprops.h". It was unused.
+
+ build: prepare for gnulib's updated lib-ignore
+ * parted/Makefile.am (parted_LDFLAGS): Now that we're using
+ gnulib's newer lib-ignore, add $(IGNORE_UNUSED_LIBRARIES_CFLAGS).
+
+2010-03-30 Colin Watson <cjwatson@ubuntu.com>
+
+ tests: distribute a few more tests and documentation files
+ * debug/test/Makefile.am (noinst_SCRIPTS): Add test_fs_hfs and
+ test_fs_hfsplus.
+ * libparted/fs/hfs/Makefile.am (EXTRA_DIST): Add DOC and HISTORY.
+ * tests/Makefile.am (TESTS): Add t3200-type-change.sh.
+
+2010-03-16 Jim Meyering <meyering@redhat.com>
+
+ build: avoid warning from bootstrap about obsolete strdup module
+ * bootstrap.conf (gnulib_modules): Use the strdup-posix module,
+ rather than the "strdup" one.
+
+2010-03-11 Jim Meyering <meyering@redhat.com>
+
+ tests: reenable a "bsd" partition table test
+ * libparted/tests/common.c (_implemented_disk_label): Remove "bsd" from
+ the list of not-implemented-yet partition table types, since it appears
+ to pass the tests.
+
+ libparted: remove "HIGHLY EXPERIMENTAL" warning for >512B-sector devices
+ * libparted/arch/linux.c (_device_set_sector_size): Remove the
+ "HIGHLY EXPERIMENTAL" warning, now that support for >512-byte sectors
+ seems to be usable. Suggested by Colin Watson.
+ * NEWS (Changes in behavior): Note this
+
+2010-03-02 David Cantrell <dcantrell@redhat.com>
+
+ libparted: msdos_partition_is_flag_available: fix hidden on extended
+ Since the hidden flag cannot be set on extended partitions,
+ msdos_partition_is_flag_available() should return 0 for hidden on
+ extended partitions. Also change msdos_partition_get_flag()
+ to always return 0 for hidden on extended partitions.
+ * libparted/labels/dos.c (msdos_partition_is_flag_available):
+ Return 0 for hidden on extended partitions.
+ * libparted/labels/dos.c (msdos_partition_get_flag):
+ Always return 0 for hidden on extended partitions.
+ * NEWS (Bug fixes): Mention it.
+ Reported by Flóki Pálsson in http://bugzilla.redhat.com/567118
+ Patch forwarded by Hans De Goede.
+
+2010-03-02 Petr Uzel <petr.uzel@suse.cz>
+
+ tests: skip tests that require mkfs.hfs, when it is unavailable
+ t3000-resize-fs.sh would fails if mkfs.hfs is not installed.
+ * tests/t-lib.sh (require_hfs_): New function.
+ * tests/t3000-resize-fs.sh: Use require_hfs_.
+
+2010-02-28 Jim Meyering <meyering@redhat.com>
+
+ tests: convert more tests to the newer infrastructure
+ * tests/t1700-ext-probe.sh: Convert from test-lib.sh to t-lib.sh.
+ * tests/t2200-dos-label-recog.sh: Likewise.
+ * tests/t2300-dos-label-extended-bootcode.sh: Likewise.
+
+2010-02-26 Colin Watson <cjwatson@ubuntu.com>
+
+ libparted: don't export linux_get_*_alignment functions
+ These functions are only used in libparted/arch/linux.c or via
+ linux_dev_ops, so do not export them.
+
+ * libparted/arch/linux.c (linux_get_minimum_alignment): Declare static.
+ (linux_get_optimum_alignment): Likewise.
+
+2010-02-26 Petr Uzel <petr.uzel@suse.cz>
+
+ Add support for ATA over Ethernet (AoE) devices
+ Recognize AoE Devices, so "parted -s /dev/etherd/eX.Y" now
+ prints "Model: ATA over Ethernet Device (aoe)" instead of
+ "Model: Unknown (unknown)".
+
+ * include/parted/device.h(PedDeviceType): Add PED_DEVICE_AOE.
+ * libparted/arch/linux.c(AOE_MAJOR): New define.
+ * libparted/arch/linux.c(_device_probe_type): Recognize AoE devices.
+ * libparted/arch/linux.c(linux_new): Handle AoE devices.
+ * parted/parted.c(do_print): Add "aoe" to the list of available
+ transports.
+ * NEWS (New features): Mention it.
+
+2010-02-26 Jim Meyering <meyering@redhat.com>
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 2.2
+ * NEWS: Record release date.
+
+2010-02-26 Curtis Gedak <gedakc@gmail.com>
+
+ dos: set HFS/HFS+ partition identifier to proper value
+ The correct value for an "hfs" partition identifier is 0xAF.
+ Previously the partition identifier was incorrectly set to 0x83.
+ * libparted/labels/dos.c (PARTITION_HFS): Define.
+ (msdos_partition_set_system): Use it.
+
+2010-02-26 Jim Meyering <meyering@redhat.com>
+
+ tests: exercise today's HFS partition type fix
+ * tests/t2400-dos-hfs-partition-type.sh: New script.
+ * tests/Makefile.am: Add it.
+ * NEWS (Bug fixes): Mention it.
+
+ tests: gpt-pmbr: don't ignore stdout comparison result
+ * tests/t0202-gpt-pmbr.sh: Fail if we get unexpected output.
+
+2010-02-25 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+ * bootstrap: Copy from gnulib.
+
+ tests: convert t4001 to use the new framework
+ * tests/t4001-sun-vtoc.sh: Convert.
+ * tests/Makefile.am (TESTS): Add it to the list.
+
+2010-02-25 Karel Zak <kzak@redhat.com>
+
+ sun: initialize basic partition table fields
+ libparted completely ignores basic fields (version, nparts and sanity)
+ in the sun VTOC, then for example fdisk prints warnings for such
+ partition table:
+
+ # fdisk -lu /dev/sdb
+ Detected sun disklabel with wrong version [0x00000000].
+ Detected sun disklabel with wrong sanity [0x00000000].
+ Detected sun disklabel with wrong num_partitions [0].
+
+ It seems that the current libparted sun support follows old Linux
+ kernel code, but the code was changed 3 years ago (see kernel commit
+ 3961bae0ac030a70ae2e0578270203889021f1a1).
+
+ Note that the number of partitions (nparts) is optional for Linux
+ kernel, but fdisk(8) strictly requires SUN_DISK_MAXPARTITIONS (=8)
+ there. This patch sets nparts to SUN_DISK_MAXPARTITIONS rather then
+ use a real number of partitions.
+
+ * NEWS (Bug fixes): Mention it.
+ * libparted/labels/sun.c: Update from kernel.
+ * tests/t4001-sun-vtoc.sh: New file. Test for this.
+
+2010-02-25 Jim Meyering <meyering@redhat.com>
+
+ tests: wrap the dup-clobber test in a script, ...
+ so that its artifacts are created in the usual temporary subdir
+ * tests/Makefile.am (TESTS): Remove dup-clobber, and instead...
+ Add t0500-dup-clobber.sh.
+ * tests/t0500-dup-clobber.sh: New script.
+
+2010-02-23 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ tests: test for the ped_disk_duplicate needs_clobber fix
+ * tests/dup-clobber.c: New file.
+ Exercise the fix in commit jabb411b, "libparted: copy the
+ needs_clobber value in ped_disk_duplicate()".
+ * tests/Makefile.am (TESTS, check_PROGRAMS): Add dup-clobber.
+
+2010-02-22 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: copy the needs_clobber value in ped_disk_duplicate()
+ Most duplicate disk_ops use ped_disk_new_fresh, which sets needs_clobber
+ to 1. This would lead to clobbering the disk when committing a duplicate
+ disk even when the original disk was not made with ped_disk_new_fresh.
+ * libparted/disk.c (ped_disk_duplicate): Copy the needs_clobber member.
+ * NEWS (Bug fixes): Describe it.
+
+2010-02-22 Curtis Gedak <gedakc@gmail.com>
+
+ linux: add wait time and retries to kernel partition reread
+ Occasionally when using parted with newer GNU/Linux kernels (2.6.31)
+ and udev (145), the kernel would fail to reread the partition table.
+ This could lead to problems with subsequent actions such as formatting
+ the partition.
+
+ Basically this patch increases the retry_count, and adds one sleep(1)
+ function call prior to the the last few ioctl() calls.
+
+ This patch might not be a perfect solution to this problem of "failure
+ to inform kernel of partition changes", but it does significantly
+ reduce the likelihood of encountering the problem.
+
+ Details on the testing results and procedures used can be found at
+ the following link:
+ https://bugzilla.gnome.org/show_bug.cgi?id=604298#c9
+
+ * libparted/arch/linux.c (_kernel_reread_part_table): Sleep for a
+ full second if retry_count makes it down to "3". Start it at 9
+ rather than at 5.
+ * NEWS (Bug fixes):
+
+2010-02-20 Jim Meyering <meyering@redhat.com>
+
+ maint: remove now-unused <partition_table_type>_clobber functions
+ All of these functions were rendered unused by commit 376b143045,
+ "ped_disk_clobber: change semantics" on 2009-11-13.
+ Also, Update each <...>_disk_ops "clobber:" member to be NULL.
+ * libparted/labels/aix.c (aix_clobber): Remove function.
+ * libparted/labels/bsd.c (bsd_clobber): Likewise.
+ * libparted/labels/dasd.c (dasd_clobber): Likewise.
+ * libparted/labels/dos.c (msdos_clobber): Likewise.
+ * libparted/labels/dvh.c (dvh_clobber): Likewise.
+ * libparted/labels/gpt.c (gpt_clobber): Likewise.
+ * libparted/labels/loop.c (loop_clobber): Likewise.
+ * libparted/labels/mac.c (_clobber_part_map, mac_clobber): Likewise.
+ * libparted/labels/pc98.c (pc98_clobber): Likewise.
+ * libparted/labels/rdb.c (amiga_clobber): Likewise.
+ * libparted/labels/sun.c (sun_clobber): Likewise.
+ Suggested by Hans De Goede.
+
+2010-02-13 Jim Meyering <meyering@redhat.com>
+
+ doc: update release procedure to account for soname version number
+ * README-release: Add a step "0", and update step 3 to match reality.
+
+ libparted: set the shared library version number manually
+ * libparted/Makefile.am (CURRENT, REVISION, AGE): Define here.
+ (libparted_la_LDFLAGS): Use them, rather than using the
+ automatically-defined LT_-prefixed variables.
+ Stop using the "-release" option.
+ Hans De Goede pointed out that the build process was automatically
+ changing the shared library name.
+
+2010-02-12 Jim Meyering <meyering@redhat.com>
+
+ gpt: clean-up wrt write_back (no semantic change)
+ * libparted/labels/gpt.c (gpt_read): Initialize write_back to 0
+ once again, and set it to 1 on the sole path that requires that.
+
+2010-02-10 Jim Meyering <meyering@redhat.com>
+
+ gpt: "read-only" operation could clobber the pMBR in another way
+ A read-only operation like "parted $dev print" would overwrite $dev's
+ pMBR when exactly one of the primary and backup tables was corrupt.
+ * libparted/labels/gpt.c (gpt_read): Clear "write_back" in those
+ two cases. Hans De Goede spotted this bug by inspection.
+ * NEWS (Bug fixes): Mention it.
+ * tests/t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh: New test.
+ * tests/Makefile.am (TESTS): Add
+ t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh.
+
+ tests: factor utility functions into "library"
+ ...since we're about to use them from a second test.
+ * tests/t-local.sh (peek_, poke_, gpt1_pte_name_offset_): New functions.
+ (gpt_corrupt_primary_table_, gpt_restore_primary_table_): New functions.
+ * tests/t0280-gpt-corrupt.sh: Remove local copies of those functions.
+ Use the new ones.
+
+2010-02-10 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: don't dereference a NULL pointer in dasd_read
+ * libparted/labels/dasd.c (dasd_read): Avoid NULL pointer dereference.
+
+ parted: change default alignment to "optimal"
+ * NEWS (Changes in behavior): Mention it.
+ * parted/parted.c: Change --align default value to optimal.
+ * tests/t2100-mkswap.sh: Adjust for alignment changes where necessary.
+ * tests/t0220-gpt-msftres.sh: Likewise.
+ * tests/t0280-gpt-corrupt.sh: Likewise.
+ * tests/t2200-dos-label-recog.sh: Likewise.
+ * tests/t2300-dos-label-extended-bootcode.sh: Likewise.
+ * tests/t3000-resize-fs.sh: Likewise.
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+ * tests/t4100-msdos-starting-sector.sh: Likewise.
+ * tests/t5000-tags.sh: Likewise.
+ * tests/t8000-loop.sh: Likewise.
+ * tests/t9021-maxima.sh: Likewise.
+
+2010-02-10 Hans de Goede <hdegoede@redhat.com>
+
+ parted: change warnings when initial constrained mkpart fails
+ In do_mkpart we first try to create a partition using a constraint
+ derived from the user input intersected with the devices alignment
+ needs. And if that fails we try again without any constraint.
+
+ However the warning given when this happens only takes into account
+ the user not getting what he asked for, while the alignment might be
+ a problem too (or even the only problem). So this patch adds a check
+ to see if the user really did not get what he asked before giving that
+ warning, and adds a new check + warning to see if the created partition
+ is properly aligned.
+ *parted/parted.c (do_mkpart,do_mkpartfs): change warnings when initial
+ constrained mkpart fails.
+
+2010-02-10 Hans de Goede <hdegoede@redhat.com>
+
+ parted: honor --align option also in mkpartfs, resize and print cmds
+ * parted/parted.c (do_mkpartfs,do_print,do_resize): Honor --align.
+
+ linux: handle incomplete topology information
+ The topology information returned by libblkid is not always complete
+ (as the kernel does not always have complete information).
+ This patch makes the linux_get_*_alignment() alignment functions handle
+ this. The algorithm used for linux_get_optimum_alignment is:
+ 1) Always use the reported aligment offset as offset
+ 2a)If optimal io size is present in the topology info use that as grain
+ 2b)If optimal io size is not present in topology info and aligment
+ offset is 0 and minimum io size is a power of 2, use the device.c
+ default optimal alignment (grain 1MiB).
+ 2c) If neither 2a and 2b, use the minimum io size, or if that is not
+ defined, use the physical sector size as grain (iow the minimum
+ alignment).
+ The algorithm used for linux_get_minimum_alignment is:
+ 1) Always use the reported aligment offset as offset
+ 2) Use the minimum io size, or if that is not defined the physical
+ sector size as grain.
+ * libparted/arch/linux.c (linux_get_*_alignment): Handle incomplete
+ topology information.
+
+ libparted: Give device_get_*_alignment sane defaults
+ When the topology info is incomplete or non existent, return something
+ more sensible than NULL (which ends up being interpreted as
+ PedAlignmentAny in most cases). The default minimum alignment aligns to
+ physical sector size, the default optimal alignment is 1 MiB, which is
+ what vista and windows 7 do.
+ * libparted/device.c (device_get_*_alignment): Add default aligments.
+ * NEWS (New features): Mention it.
+
+ linux: correct phys_sector_size setting
+ 1) Use the logical sector size as physical sector size instead of 512
+ when not compiled with libblkid support, this fixes problems
+ with logical sector size > physical sector size.
+ 2) blkid_topology_get_physical_sector_size() returns 0 when it fails
+ to determine the physical sector size, handle this.
+ * libparted/arch/linux.c (_device_set_sector_size): Correct
+ phys_sector_size setting.
+ * NEWS (Bug fixes): Mention it.
+
+2010-02-09 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ doc: NEWS: mention the install-related bug fix
+ * NEWS (Bug fixes): Mention the fix.
+
+ gpt: read-only operation could clobber MBR part of hybrid GPT+MBR table
+ * libparted/labels/gpt.c (gpt_read): Fix a bug introduced by me in
+ commit 7f753b1b, "gpt: rewrite GPT header-reading code".
+ Set write_back=0 in one more code path.
+ * tests/Makefile.am (TESTS): Add t0205-gpt-list-clobbers-pmbr.sh.
+ * tests/t0205-gpt-list-clobbers-pmbr.sh: New test.
+ * NEWS (Bug fixes): Mention this.
+ Reported by aix27249 in
+ http://parted.alioth.debian.org/cgi-bin/trac.cgi/ticket/250
+
+2010-02-08 Peter Breitenlohner <peb@mppmu.mpg.de>
+
+ do not install the test programs disk and label
+
+2010-02-04 Otavio Salvador <otavio@ossystems.com.br>
+
+ Fix minor spelling errors
+ This fixes minor spelling errors in the source code. Basically:
+
+ s/informations/information/g
+ s/prefered/preferred/g
+
+2010-02-04 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid another spurious test failure with newer xfsprogs
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+
+ tests: avoid spurious test failure with newer xfsprogs
+ * tests/t4100-dvh-partition-limits.sh: Use mkfs.xfs' -f (force)
+ option. It is required at least for xfsprogs-3.1.0.
+
+2010-01-31 Hans de Goede <hdegoede@redhat.com>
+
+ build: fix check-other-sector_sizes
+ "make check-other-sector_sizes" was running tests of 512-byte sectors
+ four times, rather than simulating larger sector-sizes for the latter
+ three iterations.
+ * Makefile.am (ss-1024 ss-2048 ss-4096): Fix the typo (missing "subst").
+
+2010-01-31 Jim Meyering <meyering@redhat.com>
+
+ tests: adjust t9021-maxima not to fail with 2048-byte sectors
+ * tests/t9021-maxima.sh: At 10,000*512 bytes, the backing file
+ was too small to support a test simulating a sector size of 2048 bytes.
+ Use 10,000*$sector_size bytes instead.
+
+ build: avoid -Wshadow warnings
+ * parted/parted.c (do_print): Avoid two shadowing warnings.
+
+2010-01-29 Hans de Goede <hdegoede@redhat.com>
+
+ linux: remove PED_DEVICE_FILE check from _device_set_sector_size
+ _device_set_sector_size is never called for devices with a type of
+ PED_DEVICE_FILE.
+ * libparted/arch/linux.c (_device_set_sector_size): Remove
+ PED_DEVICE_FILE check.
+
+ linux: remove unused blkpg.h header file
+ * libparted/arch/linux.c: Don't include blkpg.h.
+ * libparted/arch/blkpg.h: Deleted.
+ * libparted/Makefile.am (libparted_la_SOURCES): Remove arch/blkpg.h.
+
+ linux: use blkid_topology_get_physical_sector_size
+ The official 2.17 release of util-linux-ng, has added a function to
+ get the physical sector size. Use that instead of getting the
+ minimum io size.
+ * libparted/arch/linux.c (_device_set_sector_size): Use
+ blkid_topology_get_physical_sector_size.
+
+2010-01-18 Jim Meyering <meyering@redhat.com>
+
+ maint: remove unreachable code
+ * parted/parted.c (do_print): Remove unreachable ped_disk_destroy call.
+
+2010-01-15 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ dos: don't leak a constraint upon partition-add failure
+ * libparted/labels/dos.c (read_table): Free constraint upon failure.
+
+ gpt: don't leak a constraint upon partition-add failure
+ * libparted/labels/gpt.c (gpt_read): Free constraint upon failure.
+
+ gpt: do not leak a GPT header on an error path
+ * libparted/labels/gpt.c (gpt_write): Avoid a leak by freeing the
+ header buffer after pth_get_raw call where it's used, but before
+ checking whether that pth_get_raw call succeeded.
+ Avoid another leak in identical just 10 lines down.
+ Add "FIXME: caution..." comments to warn about the duplication.
+
+ libparted: remove unreachable code
+ * libparted/labels/gpt.c (gpt_write): Remove dead code.
+ * libparted/labels/bsd.c (bsd_partition_new): Likewise.
+ * libparted/disk.c (_ped_disk_alloc): Likewise.
+
+ libparted: avoid double-free on an OOM failure path
+ * libparted/disk.c (ped_disk_check): Don't double-free "fs_size".
+
+2010-01-08 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ maint: update old_NEWS_hash
+ * cfg.mk (old_NEWS_hash): Update for GFDL license update.
+
+ maint: update all GFDL licenses to version 1.3
+ * NEWS: Use 1.3, not 1.2.
+ * doc/API: Use 1.3, not 1.1.
+ * doc/FAT: Likewise.
+ * doc/USER.jp: Likewise.
+ * doc/fdl.texi: Likewise.
+ * doc/parted-pt_BR.texi: Likewise.
+ * doc/parted.texi: Likewise.
+
+ maint: update all FSF copyright year lists to include 2010
+ Run this command: make update-copyright
+
+ maint: record update-copyright options for this package
+ * cfg.mk: Next time, just run "make update-copyright".
+
+2009-12-31 Jim Meyering <meyering@redhat.com>
+
+ maint: newer gnulib; don't hard-code my GPG key ID
+ * cfg.mk (gpg_key_ID): Remove definition, now that maint.mk automates it.
+ * gnulib: Update to latest.
+
+2009-12-20 Jim Meyering <meyering@redhat.com>
+
+ maint: make build-aux/gnu-web-doc-update work
+ * cfg.mk (manual_title): Define.
+ * doc/parted.texi (Concept index): Rename from "Index".
+ Remove @ifnotplaintext..@end around its menu entry.
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 2.1
+ * NEWS: Record release date.
+
+ doc: NEWS: mention the flag-truncation fix
+ * NEWS (Bug fixes): Mention it.
+
+2009-12-19 Hans de Goede <hdegoede@redhat.com>
+
+ dos: honor cylinder alignment disk flag when allocating metadata
+ * libparted/labels/dos.c (add_startend_metadata): Honor cylinder
+ alignment flag.
+
+2009-12-18 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: push/pop update mode around ped_disk_set_flag
+ Disk flags can change how the metadata gets allocated, so push/pop
+ update mode around ops->disk_set_flag, so that the metadata gets
+ re-allocated.
+ * libparted/disk.c (ped_disk_set_flag): push/pop update mode.
+
+ linux: fix use-after-free in devicemapper code
+ * libparted/arch/linux.c (_dm_add_partition): Fix use of dm_task
+ information after freeing it.
+
+2009-12-18 Hans de Goede <hdegoede@redhat.com>
+
+ ui: Do not truncate flag names when printing
+ The partition_print_flags() function was truncating the flag names,
+ but these are translated strings, and thus can contain multibyte
+ characters. Truncating multibyte chars in a non multibyte aware way
+ is not good and was causing issues when printing tables in Russian:
+ http://bugzilla.redhat.com/show_bug.cgi?id=543029
+
+ Since the truncating does not seem to make sense at all this patch
+ simply removes it (it was likely an attempt to stay within 80 chars
+ when printing, but as one partition can have multiple flags set this
+ won't work)
+
+ * parted/parted.c (partition_print_flags): Don't truncate flag names.
+
+2009-12-16 Jim Meyering <meyering@redhat.com>
+
+ libparted: plug a leak in mac_write
+ * libparted/labels/mac.c (mac_write): Free mac_driverdata.
+
+ maint: use "int", not "bool" for value returned by ped_device_write
+ * libparted/labels/gpt.c (gpt_write): Correct type of local.
+ * libparted/labels/mac.c (mac_clobber): Likewise.
+ * libparted/labels/sun.c (sun_write): Likewise.
+
+ libparted: plug a leak in mac's write_block_zero
+ * libparted/labels/mac.c (write_block_zero): Don't leak a
+ 1-sector-sized buffer.
+
+ dos: remove unreachable code
+ * libparted/labels/dos.c (msdos_partition_new): Remove dead code.
+
+ libparted: plug a leak in gpt_probe
+ * libparted/labels/gpt.c (gpt_probe): Avoid a leak when dev->length
+ is one sector or smaller.
+
+2009-12-14 Jim Meyering <meyering@redhat.com>
+
+ maint: improve dist-check.mk rules
+ * dist-check.mk (null_AM_MAKEFLAGS): Remove LIBTOOL. Adding it was
+ erroneous, since it is required when building from a distribution
+ tarball of a libtool-using project. Reported by Ralf Wildenhues.
+ (my-distcheck): Reorganize to use a subshell and set -e, so that
+ failures propagate "out". Without this change, setting LIBTOOL=false
+ would cause a failure that would then be ignored, probably due to a
+ problem in $(install-transform-check).
+
+ maint: dist-check.mk adapt to parted-specific details
+ * dist-check.mk (built_programs): Use parted/, not src/.
+ (install-transform-check): Search sbin/, not /bin.
+ Expect man pages to be in man8/*.8.
+
+2009-12-13 Jim Meyering <meyering@redhat.com>
+
+ maint: sync dist-check.mk from coreutils
+ * dist-check.mk: Sync from coreutils.
+ * gnulib: Update to latest.
+
+ maint: sync dist-check.mk from coreutils
+ * dist-check.mk: Sync from coreutils.
+ * gnulib: Update to latest.
+
+2009-12-12 Jim Meyering <meyering@redhat.com>
+
+ build: distribute gperf-generated file, pt-limit.c
+ * libparted/labels/Makefile.am (EXTRA_DIST): Distribute the
+ gperf-generated file, pt-limit.c, so that people don't need to
+ run gperf at build-from-tarball time.
+
+ ui: mkpart: avoid double free
+ * parted/parted.c (do_mkpart): This function frees "part_name"
+ immediately after the final use, but also upon e.g., ped_disk_commit
+ failure. Set part_name to NULL after the first free, to make
+ the second a no-op after the first.
+
+2009-12-11 Jim Meyering <meyering@redhat.com>
+
+ build: update spec: gperf is a new build-requirement
+ * parted.spec.in (BuildRequires): Add gperf.
+ Reported by Jeff Darcy.
+
+ build: update gnulib submodule to latest
+
+ tests: ensure that parted can partition a loop device
+ * tests/t8000-loop.sh: Reverse sense of tests, now that
+ partitioning a loop device succeeds again.
+ * NEWS (Bug fixes): Mention it.
+
+2009-12-11 Hans de Goede <hdegoede@redhat.com>
+
+ linux: treat loopback devices as files
+ We cannot do partition related ioctl's on loopback devices,
+ so treat them as files.
+ * libparted/arch/linux.c (LOOP_MAJOR): Define.
+ * libparted/arch/linux.c (_device_probe_type): Treat loopback
+ devices as files.
+ Reported by Josef Bacik in http://bugzilla.redhat.com/546622
+
+2009-12-10 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: missing pop update mode in ped_disk_delete_all error path
+ * libparted/disk.c(ped_disk_delete_all): Add missing update mode pop
+ call in error path.
+
+ libparted: make pop/push update mode propagate sanity check errors
+ Sanity check errors indicate something is really really wrong, still
+ sometimes they happen, when they happen it helps a lot in debugging
+ them when the libparted caller immediately errors out at the first
+ moment, rather then slugging along until things crash somewere.
+ * libparted/disk.c(_disk_push_update_mode,_disk_pop_update_mode):
+ Change return value from void to int, and return 0 when the sanity
+ check calls fail.
+ * libparted/disk.c(*): Update all _disk_push_update_mode /
+ _disk_pop_update_mode callers to propagate the return value.
+
+2009-12-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ libparted: add missing update mode pop in duplicate error path
+ * libparted/disk.c(ped_disk_duplicate): Add missing update mode
+ pop call in error path.
+
+ gpt: Add support for appletv partitions
+ * include/parted/disk.h(PedPartitionFlag): Add
+ PED_PARTITION_APPLE_TV_RECOVERY.
+ * libparted/disk.c(ped_partition_flag_get_name): Handle
+ PED_PARTITION_APPLE_TV_RECOVERY.
+ * libparted/labels/gpt.c(PARTITION_APPLE_TV_RECOVERY_GUID):
+ New define.
+ * libparted/labels/gpt.c(GPTPartitionData): Add atvrecv member.
+ * libparted/labels/gpt.c(_parse_part_entry, gpt_partition_new,
+ gpt_partition_set_system, gpt_partition_set_flag,
+ gpt_partition_get_flag, gpt_partition_is_flag_available):
+ Handle atvrecv / PARTITION_APPLE_TV_RECOVERY_GUID.
+
+ build: don't install s390 dasd internal headers into /usr/include
+ * include/parted/Makefile.am (partedinclude_HEADERS):
+ Remove $(S390_HDRS).
+ (noinst_HEADERS): Put them here instead.
+
+2009-12-10 Hans de Goede <hdegoede@redhat.com>
+
+ ui: add --align command-line option to specify mkpart alignment
+ The new --align command-line option can have the following values:
+ none: Use the minimum alignment allowed by the disk type
+ cylinder: Align partitions to cylinders (the default)
+ minimal: Use minimum alignment as given by the disk topology information
+ optimal: Use optimum alignment as given by the disk topology information
+
+ Note the "minimal" and "optimal" values will use layout information
+ provided by the disk to align the logical partition table addresses
+ to actual physical blocks on the disks. The "minimal" value is the
+ minimum aligment needed to align the partition properly to physical
+ blocks, which avoids performance degradation. Whereas the "optimum"
+ alignment align's to a multiple of the physical block size in a way
+ that guarantees optimal performance.
+
+ The "minimal" and "optimal" values are useful only when parted is
+ compiled with libblkid >= 2.17 and running on a kernel >= 2.6.31,
+ otherwise they are equivalent to --align=none.
+
+ * parted/parted.c (ALIGNMENT_ enum values): New enum.
+ (options, options_help): Add --align option.
+ (align_args, align_types, alignment): New global variables.
+ (do_mkpart): Honor aligment variable.
+ (_parse_options): handle --align option.
+ * bootstrap.conf (gnulib_modules): Add argmatch.
+ * NEWS: Mention the new --align option.
+ * doc/parted.texi: Document --align option.
+ * doc/C/parted.8: Likewise.
+
+2009-12-10 Hans de Goede <hdegoede@redhat.com>
+
+ NEWS: update with libblkid and kernel requirements for alignment funcs
+ * NEWS: Change the note for the align-check command to also reference
+ libblkid, add a note to the libparted alignment functions NEWS entry
+ about libblkid and kernel requirements.
+
+ NEWS: Add new disk flag functions to NEWS
+ * NEWS: Add new disk flag functions.
+
+ msdos, sun: implement disk flag operations
+ * libparted/labels/dos.c (DosDiskData): New struct.
+ * libparted/labels/dos.c (msdos_alloc, msdos_duplicate, msdos_free):
+ Handle per disk DosDiskData.
+ * libparted/labels/dos.c (msdos_disk_set_flag, msdos_disk_get_flag,
+ msdos_disk_is_flag_available): New functions.
+ * libparted/labels/sun.c (sun_disk_set_flag, sun_disk_get_flag,
+ sun_disk_is_flag_available): New functions.
+
+2009-12-10 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: add disk flag functions and PED_DISK_CYLINDER_ALIGNMENT flag
+ Sometimes we want to be able to set flags at the disk level rather then
+ at the parition level, to influence how new partitions will be created
+ for example. This patch adds functions to do this (modelled after the
+ partition flag functions), and adds a PED_DISK_CYLINDER_ALIGNMENT flag.
+
+ This flag (which defaults to true) controls if disk types for which
+ cylinder alignment is optional do cylinder alignment when a new
+ partition gets added. This flag is available for msdos and sun
+ disklabels (for sun labels it only controls the aligning of the end of
+ the partition).
+ * include/parted/disk.h (PedDiskFlag): New type
+ * include/parted/disk.h (ped_disk_set_flag, ped_disk_get_flag,
+ ped_disk_is_flag_available): new functions and PedDiskOps members
+ * include/parted/disk.h (ped_disk_flag_get_name,
+ ped_disk_flag_get_by_name, ped_disk_flag_next): new functions
+ * libparted/disk.c (ped_disk_set_flag, ped_disk_get_flag,
+ ped_disk_is_flag_available, ped_disk_flag_get_name,
+ ped_disk_flag_get_by_name, ped_disk_flag_next): new functions
+
+2009-12-10 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: fix leak in dasd_free
+ * libparted/labels/dasd.c (dasd_free): Free disk_specific data.
+
+2009-12-09 Jim Meyering <meyering@redhat.com>
+
+ build: update gnulib submodule to latest
+
+ build: make it clear which sector size is in use upon test failure
+ * Makefile.am (ss-1024 ss-2048 ss-4096): New targets.
+ Before this, top-level "make check" would lead to four separate
+ runs through all the regression tests, one for each of the following
+ simulated sector sizes: 1024 2048 4096, and one more for the native
+ (usually 512), and it was not easy to tell which sector size was
+ in use for a failing test. Now, we still perform exactly the same
+ tests, but the sector size is now part of each target name.
+
+2009-12-08 Jim Meyering <meyering@redhat.com>
+
+ tests: exercise the new interfaces
+ * tests/print-max.c: New file.
+ * tests/t9021-maxima.sh: New file.
+ * tests/Makefile.am (TESTS): Add t9021-maxima.sh.
+ (check_PROGRAMS): Add print-max.
+
+ libparted: new interfaces: max start sector, max partition length
+ * libparted/disk.c (ped_disk_max_partition_start_sector): New function.
+ (ped_disk_max_partition_length): New function.
+ * include/parted/disk.h: Declare them.
+ * NEWS (New features): Mention them.
+
+ libparted: factor out duplication, hook up new APIs
+ * include/parted/disk.h [struct _PedDiskOps]:
+ (max_length, max_start_sector): New members.
+ * libparted/labels/pt-common.h: New file.
+ * libparted/labels/Makefile.am (liblabels_la_SOURCES): Add it.
+ * libparted/labels/dos.c: Include "pt-common.h".
+ (msdos_partition_check): Remove function.
+ (msdos_disk_ops): Remove factored out initializers.
+ * libparted/labels/gpt.c: Likewise.
+ * libparted/labels/dvh.c: Likewise.
+ * libparted/labels/aix.c:
+ (aix_disk_ops, aix_partition_check): Likewise.
+ * libparted/labels/bsd.c:
+ (bsd_disk_ops, bsd_partition_check): Likewise.
+ * libparted/labels/dasd.c:
+ (dasd_disk_ops, dasd_partition_check): Likewise.
+ * libparted/labels/loop.c:
+ (loop_disk_ops, loop_partition_check): Likewise.
+ * libparted/labels/mac.c:
+ (mac_disk_ops, mac_partition_check): Likewise.
+ * libparted/labels/pc98.c:
+ (pc98_disk_ops, pc98_partition_check): Likewise.
+ * libparted/labels/rdb.c:
+ (amiga_disk_ops, amiga_partition_check): Likewise.
+ * libparted/labels/sun.c:
+ (sun_disk_ops, sun_partition_check): Likewise.
+ * libparted/labels/gpt.c (NULL_IF_DISCOVER_ONLY): Remove definition,
+ now that it's in pt-common.h.
+
+ libparted: use gperf-generated lookup function
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len):
+ Rewrite to use the gperf-generated look-up function.
+ (ptt_partition_max_start_sector): New function.
+ (ptt_partition_max_length): New function.
+ * libparted/labels/pt-tools.h: Declare them.
+ * libparted/labels/Makefile.am (GPERF, GPERF_OPTIONS): Define.
+ (BUILT_SOURCES): Define.
+ (liblabels_la_SOURCES): Append pt-limit.gperf.
+ (pt-limit.c): New rule.
+ (MAINTAINERCLEANFILES): Remove useless definition.
+ (DISTCLEANFILES): Set to $(BUILT_SOURCES).
+ * libparted/labels/pt-limit.gperf: New file.
+ * cfg.mk (bootstrap-tools): Mention gperf.
+ * bootstrap.conf (buildreq): Require gperf-3.0.3.
+
+ pc98: avoid segfault with simulated large sectors
+ The pc98 partition table is by no means ready for >512-byte sectors,
+ but at least it now gets past mklabel. E.g., this usage no longer
+ provokes double-free and read-uninitialized errors:
+ dd if=/dev/zero of=F bs=512 count=1 seek=10000
+ PARTED_SECTOR_SIZE=4096 valgrind ../parted/parted -s F mklabel pc98
+ * libparted/labels/pc98.c (pc98_write): Rewrite to avoid
+ invalid access with >512-byte sectors.
+
+ libparted: ptt_read_sectors: new function
+ * libparted/labels/pt-tools.c (ptt_read_sectors): New function.
+ (ptt_read_sector): Rewrite to use it.
+ * libparted/labels/pt-tools.h: Declare it.
+
+2009-12-03 Jim Meyering <meyering@redhat.com>
+
+ mac: hook up the partition_check function for this partition table type
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len): Define
+ for MAC partition tables. They too have 32-bit-limited partition
+ starting sector number and partition length (in sectors).
+ * libparted/labels/mac.c (mac_partition_check): Use
+ ptt_partition_max_start_len.
+
+2009-11-30 Jim Meyering <meyering@redhat.com>
+
+ tests: exercise new align-check command
+ * tests/t9030-align-check.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2009-11-30 Jim Meyering <meyering@redhat.com>
+
+ ui: new command: align-check TYPE N
+ e.g.,
+ parted -s /dev/sda align-check min 1 && echo partition 1 is min-aligned
+ parted -s /dev/sda align-check opt 2 && echo partition 2 is opt-aligned
+
+ * parted/parted.c:
+ * parted/ui.c:
+ * parted/ui.h:
+ * NEWS (New features): Mention it.
+ * doc/parted.texi (align-check): Describe it.
+
+2009-11-30 Jim Meyering <meyering@redhat.com>
+
+ tests: correct a comment
+ * tests/t9020-alignment.sh: Correct a comment.
+
+2009-11-27 Jim Meyering <meyering@redhat.com>
+
+ libparted: ped_disk_clobber_exclude: remove now-unused function
+ I see no utility in ped_disk_clobber_exclude (just a thin wrapper
+ around ped_disk_clobber), so am removing the interface.
+ * include/parted/disk.h (ped_disk_clobber_exclude): Remove prototype.
+ * libparted/disk.c (ped_disk_clobber_exclude): Remove function.
+ Now that all callers use NULL as 2nd argument, replace each call
+ with one to ped_disk_clobber.
+ * scripts/data/abi/baseline_symbols.txt: Remove it.
+
+ Reviewed-by: Karel Zak <kzak@redhat.com>
+
+2009-11-27 Jim Meyering <meyering@redhat.com>
+
+ ped_disk_clobber: change semantics
+ Why? Because if we're going to clobber a partition table,
+ it is wasteful and error prone to try to interpret as a partition
+ table whatever existing data there may be. It may be corrupt, or
+ a mix of two or more types. It is far cleaner just to zero out
+ the key sectors.
+
+ The previous mechanism was like this:
+ for each partition table type, T,
+ # See if the device has a partition of type T.
+ # If so, run the partition-table-specific code to clear it.
+ if t->ops->probe (dev)
+ t->ops->clobber (dev)
+ Instead, simply zero out the first few and last few sectors.
+ Except for GPT, for which we exempt the first sector (the pMBR).
+ In order to zero out even the bits DASD uses for its identifying
+ strings, we have to clobber at least the 8.5KiB at the beginning
+ of the disk, so round up to 9KiB.
+ * libparted/disk.c: Include "labels/pt-tools.h".
+ (find_disk_type): New helper function.
+ (ped_disk_clobber_exclude):
+
+ Reviewed-by: Karel Zak <kzak@redhat.com>
+
+2009-11-27 Jim Meyering <meyering@redhat.com>
+
+ dasd: allow the use of a *regular* backing file
+ Before this change, dasd partition tables had to be associated with
+ very specialized block devices available only on IBM s390 systems.
+ This made testing especially hard. Not only did you need access
+ to one of those relatively uncommon systems, but you also needed
+ access to a spare block device. In addition, many of Parted's
+ tests may be run as a non-privileged user, using regular files,
+ and those tests would fail when run on an s390.
+
+ This change makes it so you may now write a DASD partition table
+ to a regular backing file, just as you may with any other supported
+ partition table type. However, note that even now, DASD support
+ is conditionally compiled and hence enabled only when compiling
+ for an s390 target.
+
+ * libparted/arch/linux.c (_device_set_sector_size) [__s390__]:
+ Allow operation on a device of type PED_DEVICE_FILE, as well as
+ those of type PED_DEVICE_DASD.
+ * libparted/labels/fdasd.c: Include <parted/device.h>.
+ (fdasd_get_geometry): Add a new "dev" parameter, required for
+ dev-phys-sector_size, which is needed in order to initialize
+ the "anc" structure without using the device-specific ioctls.
+ When file descriptor "f" refers to a regular file, initialize
+ "anc", "dasd_info", etc. from other sources (fstat and dev->).
+ Update all callers to reflect added parameter.
+ (fdasd_check_api_version): Skip ioctl-calling tests when "f" is
+ a regular file.
+ * include/parted/fdasd.h: Update fdasd_get_geometry prototype.
+ * libparted/labels/dasd.c (dasd_probe): Also allow PED_DEVICE_FILE.
+ (dasd_alloc_metadata): Initialize arch_specific->real_sector_size,
+ which is used in calculating vtoc_end.
+
+ Reviewed-by: Karel Zak <kzak@redhat.com>
+
+2009-11-27 Jim Meyering <meyering@redhat.com>
+
+ loop: simplify/correct loop_clobber
+ Before, it would clear a sector only if it recognized its own
+ signature. In addition, it would continue clearing subsequent
+ sectors as long as loop_probe succeeded. Now we simply clear
+ the first sector.
+ * libparted/labels/loop.c (loop_clobber): Simplify.
+
+ Reviewed-by: Karel Zak <kzak@redhat.com>
+
+2009-11-26 Jim Meyering <meyering@redhat.com>
+
+ tests: indicate that we expect t3200-type-change to fail, for now
+ * tests/Makefile.am (TESTS): Move t3200-type-change.sh to ...
+ (XFAIL_TESTS): ...here.
+
+2009-11-24 Jim Meyering <meyering@redhat.com>
+
+ tests: correct t3200-type-change.sh
+ * tests/t3200-type-change.sh: The initial version was incomplete.
+
+ tests: provide a new function: fail_
+ * tests/t-lib.sh (fail_): New function.
+
+ tests: t0001-tiny.sh: avoid spurious failure when run as root.
+ * tests/t0001-tiny.sh: Control characters were getting in the way.
+ Filter them out.
+
+2009-11-23 Jim Meyering <meyering@redhat.com>
+
+ dasd: avoid NULL-dereference via disk->type->ops->partition_check
+ Commit f387fee8 added the new ops->partition_check() function,
+ and a <type>_partition_check function for each partition table
+ format _except_ dasd. This change adds one for dasd, too.
+ * libparted/labels/dasd.c: Include "pt-tools.h".
+ (dasd_partition_check): New function.
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len): Add "dasd"
+ to the list of partition table type names for which the 32-bit
+ limits on starting sector and partition length apply.
+ Correct a comment.
+ Considering the 32-bit fields in "struct fdasd_hd_geometry",
+ it is safe to assume that larger offset or size is not possible.
+
+2009-11-18 Jim Meyering <meyering@redhat.com>
+
+ build: "make stable" emitted an invalid gnupload command
+ * cfg.mk (gnu_ftp_host-stable): Rename from gnu_ftp_host-major.
+
+2009-11-17 Jim Meyering <meyering@redhat.com>
+
+ test for partition-type-changing bug
+ * tests/t3200-type-change.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2009-11-13 Jim Meyering <meyering@redhat.com>
+
+ gpt: greatly simply gpt_clobber; minor semantic change, too
+ * libparted/labels/gpt.c (gpt_clobber): Don't bother to read and
+ parse existing headers. Instead, simply clear three sectors:
+ the pMBR, the primary header (LBA1), and the last sector.
+ There is no point in clearing what the primary header says is the
+ AlternateLBA, since once the primary header and the last sector
+ are cleared, there is no risk of any tool using it by mistake.
+
+ tests: t0000-basic.sh: minor correction
+ * tests/t0000-basic.sh: When zeroing out the first sector,
+ use dd's conv=notrunc. Otherwise, we'd also truncate the
+ backing file size to 4KiB.
+
+ linux_read: give a proper diagnostic for an "end of file" error
+ Before today's gpt_probe bug fix, its test case would provoke
+ an invalid diagnostic. This makes the diagnostic useful.
+ * libparted/arch/linux.c (linux_read): When hitting EOF while reading,
+ diagnose it properly, rather than via strerror(0) (i.e., "Success").
+
+ gpt_probe: don't attempt to read beyond end of a very small disk
+ * libparted/labels/gpt.c (gpt_probe): Don't try to read the
+ 2nd sector if that's beyond the end of the disk.
+ * tests/t0001-tiny.sh: New test, to expose the above boundary-case bug.
+ Part of the msdos-partition-creation process involves probing for
+ other types of partition tables. Probing for gpt would evoke a
+ nonsensical diagnostic.
+ * tests/Makefile.am (TESTS): Add t0001-tiny.sh.
+
+ dvh: replace open-coded dvh_clobber with equivalent, shorter code
+ * libparted/labels/dvh.c (dvh_clobber): Simply use ptt_clear_sectors.
+
+ tests: weaken t0202-gpt-pmbr to assume a preexisting GPT table
+ * tests/t0202-gpt-pmbr.sh: Lay down an initial GPT table before
+ writing to the MBR, so this test passes with the new semantics.
+
+ tests: rewrite t0202 to use new framework
+ * tests/t0202-gpt-pmbr.sh: Rewrite.
+
+ ped_disk_type_get_next: fix a const-correctness bug
+ * libparted/disk.c (ped_disk_type_get_next): Make param const.
+ * include/parted/disk.h (ped_disk_type_get_next): Update prototype.
+
+2009-11-12 Hans de Goede <hdegoede@redhat.com>
+
+ NEWS: mention recent changes
+
+2009-11-12 Jim Meyering <meyering@redhat.com>
+
+ maint: more const-correctness fixes
+
+2009-11-12 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: fix ped_disk_new_fresh to not read old data from disk
+ dasd_write(), was reading the volume label from the disk (trough
+ fdasd_check_volume()) and later writing it back again, this is fine for
+ existing dasd labels, but when creating a fresh label, this would
+ also cause the old volume label to be re-used, and if the old label
+ was corrupt, it would cause fdasd_check_volume() and thus dasd_write()
+ to fail. Reported here: http://bugzilla.redhat.com/533808
+
+ * libparted/arch/linux.c: include fdasd.h.
+ (init_dasd): Do BIODASDINFO ioctl, and store the dasd devno in
+ arch_specific.
+ (init_dasd): Remove dead (never reached) code.
+ * libparted/arch/linux.h (struct _LinuxSpecific): Add devno member.
+ * libparted/labels/dasd.c (DasdDiskSpecific): add vlabel member.
+ (dasd_alloc): Init DasdDiskSpecific.vlabel for fresh disks
+ (dasd_read): Store read vlabel in DasdDiskSpecific.vlabel.
+ (dasd_write): Write DasdDiskSpecific.vlabel instead of on disk vlabel.
+
+2009-11-10 Jim Meyering <meyering@redhat.com>
+
+ build: avoid s390-specific compilation failiure
+ * libparted/labels/vtoc.c (vtoc_volume_label_init): Don't use
+ strncpy to copy 84 bytes into a 4-byte field. Instead, use
+ memcpy to copy "sizeof *vlabel" bytes into the "vlabel".
+
+ maint: fix s390-specific const correctness problems
+ * libparted/labels/vtoc.c (vtoc_error, vtoc_ebcdic_enc):
+ (vtoc_ebcdic_dec): Declare parameters to be const, as required.
+ * libparted/labels/fdasd.c (fdasd_error): Likewise.
+ * include/parted/vtoc.h (vtoc_ebcdic_enc, vtoc_ebcdic_enc): Update
+ prototypes.
+
+ gpt: fix a bug in the new PE-array CRC checks on big-endian systems
+ * libparted/labels/gpt.c (check_PE_array_CRC, gpt_read): Always
+ convert the PartitionEntryArrayCRC32 to CPU endianness before
+ comparing with a just-computed CRC.
+
+2009-11-08 Jim Meyering <meyering@redhat.com>
+
+ build: use gnulib's canonicalize-lgpl module
+ Replace Parted's private version of canonicalize_file_name.
+ * libparted/device.c: Include <stdlib.h>.
+ (canonicalize_file_name) [!HAVE_CANONICALIZE_FILE_NAME]:
+ Remove definition.
+ * bootstrap.conf (gnulib_modules): Add canonicalize-lgpl.
+
+2009-11-07 Jim Meyering <meyering@redhat.com>
+
+ libparted: linux: don't deref NULL upon failed malloc or realloc
+ * libparted/arch/linux.c (_read_fd): Handle allocation failure.
+
+ build: update gnulib submodule to latest
+
+ maint: use EXIT_SUCCESS and EXIT_FAILURE, not 0 and 1 to exit
+ Convert all uses automatically, via these two commands:
+ git grep -l '\<exit *(1)'|xargs --no-run-if-empty \
+ perl -pi -e 's/\b(exit ?)\(1\)/$1(EXIT_FAILURE)/'
+ git grep -l '\<exit *(0)'|xargs --no-run-if-empty \
+ perl -pi -e 's/\b(exit ?)\(0\)/$1(EXIT_SUCCESS)/'
+ * libparted/fs/fat/table.c (fat_table_get): Use symbolic exit codes.
+ * libparted/labels/vtoc.c (vtoc_update_format5_label_add): Likewise.
+ (vtoc_update_format5_label_del): Likewise.
+ (vtoc_update_format7_label_add): Likewise.
+ (vtoc_update_format7_label_del): Likewise.
+ * m4/parted.m4 (PARTED_CHECK_LIBPARTED): Likewise.
+ * parted/parted.c (do_quit): Likewise.
+ * parted/strlist.c (gettext_to_wchar, wchar_to_str): Likewise.
+ * parted/ui.c (reset_env, help_msg, non_interactive_mode): Likewise.
+
+2009-11-06 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: fix unused variable warning
+ * libparted/labels/dasd.c (dasd_get_partition_alignment): Fix unused
+ variable warning.
+
+ linux: use cached major minor instead of statting the device again
+ * libparted/arch/linux.c (_dm_remove_parts): Use cached major/minor
+ numbers.
+
+2009-11-06 Hans de Goede <hdegoede@redhat.com>
+
+ linux: use devicemapper task name instead of device node name
+ Use devicemapper task name instead of device node name as basename for
+ devicemapper disk partitions.
+
+ This is needed for upcoming lvm changes where the /dev/mapper/foobar
+ files are becoming symlinks, so we will end up opening /dev/dm-#,
+ and naming our partitions dm-#p1, dm-#p2, instead of foobarp1,
+ foobarp2, etc.
+
+2009-11-06 Hans de Goede <hdegoede@redhat.com>
+
+ linux: use major / minor to specify device mapper device in dm_task
+ Use major / minor to specify device mapper device instead of
+ dm_task_set_name. This is needed for upcoming lvm changes where the
+ /dev/mapper/foobar files are becoming symlinks, so we will end up
+ opening /dev/dm-#, and dm-# is not a valid dm_task name.
+
+ This is only needed in this one place, as in the other places where we
+ use dm_task_set_name, the name we use was returned by libdevicemapper
+ itself in an earlier function call.
+
+2009-11-06 Jim Meyering <meyering@redhat.com>
+
+ tests: enable the FS-resizing (tests only HFS and FAT)
+ * tests/Makefile.am (TESTS): Add t3000-resize-fs.sh.
+
+ maint: remove stray "types and" in the big FS-op warning
+ * parted/parted.c (issue_fs_op_warning): Correct grammar in diagnostic.
+
+ tests: convert more tests to new framework
+ * tests/t0400-loop-clobber-infloop.sh: Convert.
+ * tests/t0010-script-no-ctrl-chars.sh: Likewise.
+ * tests/t3000-resize-fs.sh: Likewise, and convert it to use scsi_debug.
+ * tests/t-local.sh (require_512_byte_sector_size_): Copy this
+ function from test-lib.sh.
+
+2009-11-04 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: fix disk duplication
+ Fix dasd_duplicate and add a dasd_partition_duplicate function.
+ * libparted/labels/dasd.c(dasd_partition_duplicate): New function.
+ (dasd_duplicate): Don't set the disk_specific pointer to NULL!
+ (dasd_duplicate): Copy DasdDiskSpecific from old disk to new disk.
+
+ dasd: set disk_specific->format_type in dasd_alloc
+ Set disk_specific->format_type in dasd_alloc, so that the disk
+ returned by ped_disk_new_fresh is a valid dasd disk.
+ * libparted/labels/dasd.c (dasd_alloc): Set disk_specific->format_type.
+
+2009-11-04 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: cache real_sector_size in linux_probe
+ dasd_alloc was doing an ioctl to get the real sector size for the dasd
+ device (we are faking 512 bytes sectors), but when called directly
+ from ped_disk_new_fresh(), the device is not open causing this to fail.
+
+ This patch fixes things by caching the real_sector_size in the linux
+ arch_specific data and making the dasd label handling use this.
+ libparted/arch/linux.c(_device_set_sector_size): Cache real sector size.
+ (_device_set_sector_size, init_dasd, linux_new): Only compile dasd code
+ on s390 and s390x.
+
+2009-11-04 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: remove bogus part_info pointer from DasdPartitionData
+ The part_info pointer in DasdPartitionData was only used to
+ pass fdasd partition_info_t pointers from dasd_write to
+ the dasd_write dasd_update_type utility function. Since these
+ pointers are not valid outside the lifetime of dasd_write, they
+ should not be stored in the longer lived DasdPartitionData.
+
+ * libparted/labels/dasd.c(DasdPartitionData): Remove part_info member.
+ (dasd_read): Stop setting DasdPartitionData part_info.
+ (dasd_update_type): Add part_info argument to pass fdasd
+ partition_info_t pointers from dasd_write.
+ (dasd_write): Stop setting DasdPartitionData part_info, pass
+ partition_info_t pointers to dasd_update_type as a separate argument.
+
+2009-11-04 Hans de Goede <hdegoede@redhat.com>
+
+ dasd: clean up anchor handling
+ The current dasd label code keeps an fdasd anchor struct in the
+ DasdDiskSpecific struct, and fills this during dasd_read. However this
+ anchor does not get updated with any future mods, until dasd_write,
+ at which points it gets completely re-initialized.
+
+ Since the contents of the anchor saved during read does not get used
+ anywhere else, this patch switches to using local anchor structs in
+ dasd_read and dasd_write. This will also allow writing a significantly
+ simpler duplicate implementation, then the one which is currently
+ added to the Fedora package with a patch from Joel Granados (The
+ current master dasd_duplicate implementation is not functional).
+
+ This patch also fixes several missing calls to fdasd_cleanup() fixing
+ several memory leaks.
+
+ * libparted/arch/linux.h (struct _LinuxSpecific): Drop anchor member.
+ * libparted/labels/dasd.c (DasdDiskSpecific): Drop anchor member.
+ (dasd_clobber): Add missing fdasd_cleanup().
+ (dasd_read, dasd_write): Use local anchor struct instead of a
+ dynamically allocated one in DasdDiskSpecific.
+ (dasd_read): Don't leak a PedConstraint in 2 error paths.
+ (dasd_update_type): Pass in the used anchor as argument.
+
+2009-11-03 Jim Meyering <meyering@redhat.com>
+
+ tests: distribute new files, t-local.sh and t-lvm.sh
+ * tests/Makefile.am (EXTRA_DIST): Add t-local.sh and t-lvm.sh.
+
+ tests: appease "make syntax-check"
+ * tests/print-align.c: Include "progname.h". Call set_program_name.
+
+ tests: t6000-dm.sh: update and adapt to changed LVM2
+ * tests/t6000-dm.sh: Rewrite to use new test framework and
+ to disable multipath testing, since LVM2 has changed in such
+ a way that it no longer works with loop devices.
+
+ tests: do not invoke scsi_debug_setup_ in a subshell
+ * tests/t9010-big-sector.sh: Do not invoke scsi_debug_setup_ in
+ a subshell, since it sets a variable that cleanup machinery expects
+ to see.
+ * tests/t9020-alignment.sh: Likewise.
+
+ tests: tweak temporary dirname prefix
+ * tests/t-lib.sh (t_): Use "pe-" as prefix, not "gz-".
+
+ tests: update lvm-utils.sh from lvm2
+ * tests/lvm-utils.sh: Merge in changes from lvm2.
+
+ tests: adapt/update lvm-related infrasture, too
+ * tests/t-local.sh: Source t-lvm.sh.
+ * tests/t-lvm.sh: Clone and update of lvm-utils.sh,
+ for when we retire that file in favor of this one.
+
+ tests: adapt t8000-loop.sh
+ * tests/t8000-loop.sh: Rewrite in new style, and adjust to
+ expect new diagnostic.
+
+ tests: print and check partition alignment info, too
+ * tests/print-align.c: Print partition alignment info, too
+ * tests/t9020-alignment.sh: Check partition alignment too.
+
+ tests: serialize tests that use the scsi_debug module
+ * tests/t-local.sh (scsi_debug_lock_file_): New global.
+ (scsi_debug_acquire_lock_): New function.
+ (scsi_debug_setup_): Call it, to acquire the lock.
+ (scsi_debug_cleanup_): Release the lock.
+
+ tests: test the new alignment functions
+ * tests/t9020-alignment.sh: New test.
+ * tests/Makefile.am (TESTS): Add it to the list.
+
+ tests: factor out some more
+ * tests/t-local.sh (require_scsi_debug_module_): New function.
+ * tests/t9010-big-sector.sh: Use it.
+
+ tests: perform scsi_debug cleanup automatically...
+ ...rather than requiring each test to do it.
+ * tests/t-lib.sh ($cleanup_eval): New variable. Initialize.
+ (remove_tmp_): Use it.
+ * tests/t-local.sh: Record whether modprobe succeeded.
+ (cleanup_eval_): Append an invocation of scsi_debug_cleanup_
+ so that it is always run.
+ (scsi_debug_cleanup_): Run rmmod only if the modprobe succeeded.
+ * tests/t9010-big-sector.sh (cleanup_): Remove.
+
+2009-11-02 Jim Meyering <meyering@redhat.com>
+
+ tests: move scsi_debug framework into shared script
+ * tests/t-local.sh (-scsi_debug_cleanup_, wait_for_dev_to_appear_):
+ (print_sd_names_, scsi_debug_setup_): New functions, factored out of ...
+ * tests/t9010-big-sector.sh: ...this file.
+
+ tests: document and begin to factor out scsi_debug framework
+ * tests/t9010-big-sector.sh: Add comments, fix a bug in
+ "comm" usage, prepare to factor out scsi_debug framework.
+
+ tests: add a helper program to print alignment info for a device
+ * tests/print-align.c: New file.
+ * tests/Makefile.am (check_PROGRAMS): Define.
+ (AM_CPPFLAGS, LDADD): Define.
+ (AM_CFLAGS): Enable warnings here, too, by adding
+ $(WARN_CFLAGS) and $(WERROR_CFLAGS).
+
+2009-11-01 Hans de Goede <hdegoede@redhat.com>
+
+ Implement get_partition_alignment DiskOp for all labels which need it
+ Implement get_partition_alignment DiskOp for all labels which require
+ an alignment with a grain_size != 1.
+
+ libparted: add ped_disk_get_partition_alignment() function
+ This functions get the alignment needed for partition boundaries on this disk.
+ The returned alignment describes the alignment for the start sector of the
+ partition, for all disklabel types which require alignment, except Sun
+ disklabels, the end sector must be aligned too. To get the end sector
+ alignment decrease the PedAlignment offset by 1.
+
+2009-11-01 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: add ped_device_get_xxx_aligned_constraint() functions
+ Add ped_device_get_minimal_aligned_constraint() and
+ ped_device_get_optimal_aligned_constraint() functions to libparted.
+
+ These functions can be used to get a device constraint taking alignment into
+ account.
+
+2009-11-01 Hans de Goede <hdegoede@redhat.com>
+
+ ped_device_get_constraint: return constraint without alignment
+ In libparted-1.9 ped_device_get_constraint() would always return a constraint
+ without any start / end aligning (grain_size == 1). Now that we are starting to
+ support disks with a physical sector size other then 512, the old
+ ped_device_get_constraint() code may actually start returning constrains
+ with alignment info with a grain_size != 1.
+
+ Since this is a behavior change and since the old code does not take a possible
+ alignment info into account, this patch removes the aligning code from
+ ped_device_get_constraint(), so that its behavior is unchanged.
+
+ This patch also updates the functions doxygen documentation to reflect what
+ it has actually done all these years.
+
+2009-11-01 Hans de Goede <hdegoede@redhat.com>
+
+ linux: add get_xxx_alignment() functions
+ * libparted/arch/linux.c (get_minimum_alignment): New function.
+ (get_optimum_alignment): New function.
+
+ linux: save blkid topology in arch_specific data for later use
+ This is a preparation patch for adding get_minimum_alignment
+ and get_optimum_alignment functions to linux's _PedDeviceArchOps.
+ * libparted/arch/linux.h (struct_LinuxSpecific) [probe, topology]:
+ Add members.
+ * libparted/arch/linux.c (linux_new): initialize
+ arch_specific->probe and arch_specific->topology to NULL,
+ (linux_destroy): Free arch_specific->probe.
+ (get_minimum_io_size): Remove function.
+ (get_blkid_topology): New function.
+ (_device_set_sector_size): Call get_blkid_topology() instead of
+ get_minimum_io_size() and retrieve minimum io size from the cached
+ topology.
+
+2009-11-01 Hans de Goede <hdegoede@redhat.com>
+
+ libparted: add ped_device_get_xxx_alignment() functions
+ Add ped_device_get_minimum_alignment() and ped_device_get_optimum_alignment()
+ functions to libparted.
+
+ Note this is a resent of my previous patchset with a number of typos corrected:
+ aligment -> alignment
+ minimal_alignment -> minimum_aligment
+ optimal_alignment -> optimum_aligment
+
+ Sorry for the noise.
+
+2009-10-29 Jim Meyering <meyering@redhat.com>
+
+ tests: protect t7000 from the environment
+ * tests/t7000-scripting.sh: Initialize fail=0, so that an
+ environment setting cannot perturb the test.
+
+ tests: convert to new testing framework
+ * tests/t0200-gpt.sh: Convert to new testing framework.
+ * tests/t0201-gpt.sh: Likewise.
+ * tests/t0300-dos-on-gpt.sh: Likewise.
+ * tests/t0100-print.sh: Likewise.
+ * tests/t0250-gpt.sh: Likewise.
+
+ dvh: document an as-yet-unplugged (but not serious) leak
+ * libparted/disk.c (ped_disk_add_partition): List some of the
+ things I've tried to plug a leak exposed by a root-only test
+ on dvh's partition-creation error path. This leak is enough
+ of a corner case that I may even leave it for now, and add a
+ suppression for it, so that we're not distracted by it.
+
+2009-10-28 Jim Meyering <meyering@redhat.com>
+
+ dvh: plug three constraint-sized leaks
+ * libparted/labels/dvh.c (dvh_read, dvh_alloc_metadata):
+ Free constraint upon failure, too.
+
+ ui: plug multiple command_line_get_word leaks
+ * parted/parted.c (do_mkpart, do_print):
+
+ check: plug an even smaller (formatted "unit") leak
+ * libparted/disk.c (ped_disk_check): Free fs_size also upon success.
+
+ check: plug a geometry-sized leak
+ * libparted/disk.c (ped_disk_check): Destroy "geom", when done with it.
+
+ loop: don't leak a sector in loop_clobber
+ * libparted/labels/loop.c (loop_clobber): Replace leaky open-coded
+ version with a use of Use ptt_clear_sectors.
+
+ tests: t7000: remove mkpartfs tests
+ This test tested both mkpart and mkpartfs.
+ * tests/t7000-scripting.sh: Remove the mkpartfs tests.
+
+ tests: remove tests that are too FS-centric
+ * tests/t1000-mkpartfs.sh: Remove file.
+ * tests/t1500-small-ext2.sh: Likewise.
+ * tests/t2000-mkfs.sh: Likewise.
+ * tests/t3100-resize-ext2-partion.sh: Likewise.
+ * tests/t3000-constraints.sh: Likewise.
+ * tests/Makefile.am (TESTS): Remove them here, too.
+
+2009-10-27 Jim Meyering <meyering@redhat.com>
+
+ ui: plug a constraint leak in do_mkpart
+ * parted/parted.c (do_mkpart): Free constraint after using it to
+ add partition.
+
+ gpt: plug two gpt-header leaks in gpt_read_headers
+ * libparted/labels/gpt.c (gpt_read_headers): Free locals pri and/or
+ bak if they are not valid.
+
+ gpt: plug a 1-sector leak in gpt_read_headers
+ * libparted/labels/gpt.c (gpt_read_headers): Free a sector.
+
+ ui: plug a leak (partition_print_flags)
+ * parted/parted.c (do_print): Free flags, after printing.
+
+ libparted: plug an FS-alias-related leak
+ * libparted/filesys.c (ped_file_system_alias_unregister):
+ Free the alias we've just unregistered.
+
+2009-10-26 Jim Meyering <meyering@redhat.com>
+
+ doc: update NEWS
+ * NEWS (Bug fixes): Describe two.
+
+2009-10-23 Jim Meyering <meyering@redhat.com>
+
+ gpt: header validity: also consider whether a PE array crc matches
+ * libparted/labels/gpt.c (check_PE_array_CRC): New function.
+ (_header_is_valid): Use it to verify that partition entry array
+ checksums match, too.
+ Karel Zak noticed that this check was not being performed.
+ * tests/t0280-gpt-corrupt.sh: Adapt to changed diagnostic.
+
+ gpt: tweak interfaces to pass disk, not disk->dev
+ * libparted/labels/gpt.c: required for upcoming CRC-checking function.
+
+ gpt: don't ignore an improbable (1-in-2^32) failure
+ pth_crc32 mapped failure to a crc32 value of 0. If that happened
+ to match the stored value, there would be no indication that there
+ had been a malloc failure.
+ * libparted/labels/gpt.c (pth_crc32): Change interface so we can
+ distinguish failure from a CRC value of 0.
+ Update all callers.
+ (_generate_header): Now that we recognize pth_crc32 can fail,
+ we must admit that its void-returning caller _generate_header
+ may fail, too. Return "int" and adjust *its* callers.
+
+ gpt: factor out code that is about to be reused
+ * libparted/labels/gpt.c: Include <errno.h>.
+ (gpt_read_PE_array): New function, ...
+ (gpt_read): ...factored out of this one. Use it.
+
+ gpt: don't dereference NULL upon OOM (pth_get_raw callers)
+ Handle each case in which pth_get_raw may return NULL.
+ * libparted/labels/gpt.c (pth_get_raw): Upon OOM error, return 0
+ rather than dereferencing NULL.
+ (gpt_write): Don't dereference NULL upon OOM error.
+ (gpt_read): Yet another.
+
+ gpt: don't dereference NULL upon OOM (in pth_get_raw)
+ * libparted/labels/gpt.c (pth_get_raw): Don't dereference NULL
+ on out of memory error.
+
+ gpt: remove dead store
+ * libparted/labels/gpt.c (pth_crc32): Remove useless initialization.
+
+ gpt: make an internal function "const"-correct
+ * libparted/labels/gpt.c (_parse_header): Make "gpt" const.
+
+ tests: convert t0280 to new test style.
+ * tests/t0280-gpt-corrupt.sh: Convert to new test style.
+ * tests/t-lib.sh: Source t-local.sh.
+ * tests/t-local.sh: New file.
+
+ gpt: clean up
+ * libparted/labels/gpt.c (gpt_probe): Remove now-useless test before
+ pth_free.
+ (gpt_read): Use ptt_clear_sectors in place of open-coded equivalent.
+ * cfg.mk (useless_free_options): Add --name=pth_free.
+
+2009-10-23 Jim Meyering <meyering@redhat.com>
+
+ gpt: make its header check a tiny bit more strict
+ * libparted/labels/gpt.c (_header_is_valid): Declare a header
+ to be invalid if its AlternateLBA is the same as MyLBA.
+
+ 2009-10-21 Jim Meyering <meyering@redhat.com>
+
+ complete most of gpt-CRC-related rewrite
+ * libparted/labels/gpt.c (_read_header): Remove now-unused function.
+
+2009-10-23 Jim Meyering <meyering@redhat.com>
+
+ t0280-gpt-corrupt.sh: adapt for new output, improve test
+
+ gpt: rewrite GPT header-reading code
+ * libparted/labels/gpt.c (read_header): Remove now-unused function.
+ (gpt_read_headers): New function.
+ (gpt_read): Rewrite to use gpt_read_headers.
+
+ gpt: require that the backup table's AlternateLBA is 1
+ * libparted/labels/gpt.c (_header_is_valid): When checking
+ the backup header, ensure that its AlternateLBA is 1.
+
+ tests: gpt: test for detection of corrupt backup partition header
+ * tests/t0280-gpt-corrupt.sh: Corrupt the backup partition header's
+ MyLBA, and require that an attempt to print the table fails.
+
+ tests: hook up new GPT-crc-corrupting script
+ * tests/Makefile.am (TESTS): Add t0280-gpt-corrupt.sh.
+ * libparted/labels/gpt.c (gpt_read): Change diagnostic to say that
+ the PTE CRC mismatch is in the primary table.
+ * tests/t0280-gpt-corrupt.sh: Tweak diagnostic to match
+ what the code now prints.
+
+ gpt: also verify MyLBA when checking table validity
+ * libparted/labels/gpt.c (_header_is_valid): Add parameter, my_lba.
+ (_read_header): Update caller.
+ (_parse_header): Comment out this use of _header_is_valid
+ in an assertion.
+
+ gpt: clean up formatting of static initializers
+ * libparted/labels/gpt.c (NULL_IF_DISCOVER_ONLY): Define.
+ (gpt_disk_ops): Use it to avoid in-decl #if directives.
+
+2009-10-20 Jim Meyering <meyering@redhat.com>
+
+ gpt.c: filter through indent --no-tabs...
+ and manual fix-up to shorten long lines.
+ Also, manually format the static initializers in e.g., gpt_disk_ops,
+ since GNU indent botches that.
+
+2009-10-19 Jim Meyering <meyering@redhat.com>
+
+ gpt: add a comment
+ * libparted/labels/gpt.c (_header_is_valid): Add a comment to explain
+ the new partition entry size limitation of UINT32_MAX/16.
+
+ build: update gnulib submodule to latest
+
+ tests: use scsi_debug to test-for 4k-sector-specific bug
+ * tests/t9010-big-sector.sh: New root-only test.
+ Requires 2.6.31, and the scsi_debug module, /sys/block/... support
+ and an upcoming version of libblkid.
+ * tests/Makefile.am (TESTS): Add t9010-big-sector.sh.
+ Thanks to Mike Snitzer for advice and for pointing me to similar
+ code he wrote to test LVM.
+
+ tests: begin the transition to coreutils' testing framework
+ The existing testing framework makes it hard to diagnose test failures,
+ so I'm switching to one that works better for me, from coreutils.
+ * tests/t-lib.sh: New file. Mostly from coreutils/tests/test-lib.sh.
+ * tests/Makefile.am (TMPDIR): Update to pass more info to test scripts.
+ (EXTRA_DIST): Add t-lib.sh.
+
+ linux: use libblkid to determine ->phys_sector_size
+ Before this change, creating a memory-mapped disk on a fedora-based
+ system running 2.6.31.1-56.fc12.x86_64 using this command:
+ modprobe scsi_debug dev_size_mb=1025 sector_size=4096
+ and then running "parted -s /dev/sdd mklabel gpt print"
+ would mistakenly print "Sector size (logical/physical): 4096B/512B"
+ The "512B" is what's wrong. It should be "4096B".
+ * configure.ac: Test for a new-enough blkid library.
+ * libparted/Makefile.am (libparted_la_LIBADD): Add $(LIB_BLKID).
+ * libparted/arch/linux.c (get_minimum_io_size): New function.
+ (_device_set_sector_size): Use it.
+
+ libparted: weaken a diagnostic
+ * libparted/arch/linux.c (_kernel_reread_part_table): Give a more
+ accurate diagnostic. Reported by Curtis Gedak.
+
+ gpt: verify CRC32 of partition table entry array, too
+ The partition table entry array's CRC was not being verified at all.
+ This adds an interim check. The full-blown change required to make
+ this implementation conform to the EFI spec will be more invasive.
+ * libparted/labels/gpt.c (gpt_read): Check CRC of PTE array, too.
+ * tests/t0280-gpt-corrupt.sh: New test for this.
+ Reported by Karel Zak.
+
+ doc: mention the "bios_grub" flag
+ I don't like the idea of documenting this "flag setting" option,
+ but it's been in the code for long enough now, and in actual use,
+ that I feel obliged. In the longer term, we'll probably deprecate
+ it and instead add an interface to set a partition's type independent
+ of mkpart's "type" argument.
+ * doc/parted.texi (set): Mention bios_grub.
+
+ tests: gpt: do not munge GPT data manually
+ Otherwise, an upcoming change would cause this test to fail.
+ * tests/t5000-tags.sh: Do not munge GPT data manually, since that
+ does not update embedded CRCs, and thus renders it invalid.
+ Set the attribute via "set 1 bios_grub on" instead.
+ Also, use "name1" as the partition name, rather than the
+ misleading "primary".
+ Adjust diagnostics: the changes we make are no longer "manual."
+
+2009-10-08 Jim Meyering <meyering@redhat.com>
+
+ libparted: fix big-endian bug in gpt_get_max_supported_partition_count
+ * libparted/labels/gpt.c (gpt_get_max_supported_partition_count):
+ Convert ->SizeOfPartitionEntry from little-endian to CPU endianness
+ here, too. This is along the same lines as commit d6e9b3bb, but
+ with the difference that this code is not reachable via the
+ command-line interface.
+
+2009-10-06 Jim Meyering <meyering@redhat.com>
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 2.0
+ * NEWS: Record release date.
+
+ gpt: don't malfunction on big-endian systems
+ Numerous GPT tests would fail when run on e.g., big-endian PPC.
+ * libparted/labels/gpt.c (gpt_read): Now that we use the
+ SizeOfPartitionEntry member, be sure to convert from GPT's
+ little-endian on-disk format to to CPU endianness.
+ This bug was introduced via commit 14cce9b2, 2009-06-10, "gpt:
+ fix gpt_read to read all of the partition entries correctly".
+ * libparted/labels/gpt.c (_header_is_valid): Also convert it here.
+ Add a test to ensure that the partition entry size is no larger
+ than the slightly arbitrary UINT32_MAX/16.
+ * NEWS (Bug fixes): Mention it.
+
+ build: update gnulib submodule to latest
+
+ maint: add gnulib's gnu-web-doc-update module
+ * bootstrap.conf (gnulib_modules): Add gnu-web-doc-update
+
+ doc: add pointer to NEWS in README
+ * README: Mention NEWS.
+
+ doc: update README
+ * README (WARNING): Mention upcoming removal of FS-manipulation
+ capabilities and that we'll retain FAT/HFS resize capabilities.
+ Remove an obsolete URL. Do not encourage email to individuals.
+ Update info-viewing instructions, provide the on-line doc URL.
+
+2009-10-06 Jim Meyering <meyering@redhat.com>
+
+ tests: resize FAT and HFS file systems
+ Since it looks like we're stuck with keeping at least FAT and HFS
+ file-system resizing support in libparted, we have an obligation to
+ exercise at least some of that functionality. For now, I've limited
+ this test to shrinking well-aligned partitions by a well-behaved
+ amount. Curtis Gedak helped come up with a usable test.
+
+ * tests/t3000-resize-fs.sh: New file.
+ Use starting partition offset that is on a cylinder boundary,
+ and increase the partition size to be larger than 256 MiB.
+ When resizing, choose the new size to be exactly one cylinder
+ (8MiB) smaller than the original.
+
+2009-10-06 Hans de Goede <hdegoede@redhat.com>
+
+ ped_partition_busy: do not call the libparted exception handler
+ Modify libparted/arch/linux.c _partition_get_part_dev() to not call
+ _device_stat() but instead use stat directly, as _device_stat() calls
+ the libparted exception handler, and we don't want this here, the only
+ caller of _partition_get_part_dev() is _partition_is_mounted(), which
+ in turn only gets called by linux_partition_is_busy(), and we don't
+ want to "throw" exceptions from ped_partition_busy().
+
+ This issue was noticed in combination with pyparted as used by
+ anaconda, see: http://bugzilla.redhat.com/527035#c10
+
+2009-10-01 Jim Meyering <meyering@redhat.com>
+
+ doc: mention the GPT/msftres bug fix
+ * NEWS (Bug fixes): Mention it.
+
+ parted: issue a warning upon any use of a file-system op
+ * parted/parted.c (issue_fs_op_warning): New function.
+ (do_cp, do_mkfs, do_mkpartfs, do_move, do_resize, do_check): Call it.
+ * tests/test-lib.sh: Export the envvar setting,
+ PARTED_SUPPRESS_FILE_SYSTEM_MANIPULATION_WARNING=1 to suppress
+ those warnings while running the few remaining FS-related tests.
+
+ maint: avoid false-positive NULL-deref warning from clang
+ * parted/ui.c: Include <assert.h>.
+ (command_line_get_disk): Add an assertion that command_line_get_device
+ currently guarantees will always be true. This placates clang regarding
+ its sole NULL-deref warning.
+ (command_line_get_device): Move declarations "down" to first use.
+
+ build: use more gnulib modules for better POSIX compliance
+ * bootstrap.conf (gnulib_modules): Add modules exposed via
+ make CFLAGS=-DGNULIB_POSIXCHECK 2>&1 \
+ |perl -lne '/.* use gnulib module (\S+).*/ and print $1' \
+ |sort |uniq -c|sort -nr
+ Add these: close fsync lseek mkstemp strdup unlink
+
+ maint: function returning "int", did not return a value.
+ * parted/ui.c (init_readline): Return a value (always 0 for now).
+ * parted/parted.c (_init): Handle init_readline's return value.
+
+ maint: remove more dead stores and fix a bug in do_mkpartfs
+ * libparted/fs/ext2/ext2_mkfs.c (ext2_mkfs_create_lost_and_found_inode):
+ Punt: suppress clang's (aka scan-build's) warning.
+ * parted/parted.c (snap_to_boundaries): Remove a dead store.
+ (do_mkpartfs): The apparent dead store to part_name exposed a real bug.
+ In fact, it highlighted that while do_mkpart uses its "part_name"
+ variable (and calls ped_partition_set_name), do_mkpartfs did not.
+ (snap_to_boundaries): Remove dead store.
+ * libparted/unit.c (parse_chs): Likewise, and a leak.
+ * libparted/fs/hfs/reloc_plus.c (hfsplus_cache_from_catalog): Likewise.
+ (hfsplus_cache_from_extent): Remove a dead store.
+ (hfsplus_cache_from_attributes): Likewise.
+ * libparted/fs/hfs/advfs_plus.c (hfsplus_btree_search): Likewise.
+ * libparted/fs/ext2/ext2_block_relocator.c (ext2_block_relocate_shrink):
+ Remove dead store and corresponding decl.
+ * parted/ui.h: Mark 2nd parameter as non-null.
+
+ maint: remove dead store code and declarations
+ * libparted/labels/bsd.c (bsd_partition_set_flag): Remove dead store
+ and corresponding decl.
+ * libparted/arch/linux.c (init_ide): Likewise.
+ (_dm_maptype): Likewise.
+ (_mount_table_search): Likewise.
+ * libparted/fs/amiga/asfs.c (_asfs_probe): Likewise.
+ * libparted/labels/mac.c (mac_alloc_metadata): Likewise.
+ * libparted/labels/rdb.c (amiga_write): Likewise.
+ (amiga_write): Again.
+ * libparted/fs/amiga/apfs.c (_generic_apfs_probe): Likewise.
+ * libparted/fs/hfs/reloc_plus.c (hfsplus_effect_move_extent): Likewise.
+ * libparted/fs/hfs/reloc.c (hfs_effect_move_extent): Likewise.
+ * libparted/labels/dos.c (probe_partition_for_geom): Remove dead
+ store in "can't happen" case.
+
+ make PED_ASSERT handling sane: abort on false condition
+ Upon a failed PED_ASSERT, Do not ask the interactive user if they want
+ to continue. This change will affect any code that expects to be able
+ to continue after a failed PED_ASSERT condition. However, such code is
+ so fundamentally broken that this change is required. If you require
+ to be able to continue after a false condition, then the code must
+ not use a macro named like PED_ASSERT. This change was motivated by
+ my desire to use the clang static analysis tool. Without this change,
+ there were over 300 mostly-false-positive reports. With it, just 31,
+ almost all legitimate.
+ * libparted/debug.c (ped_assert): Remove first parameter.
+ It is now tested via the macro.
+ Now, this function always aborts, which helps clang understand.
+ Do not ask the interactive user if s/he wants to continue.
+ * include/parted/debug.h (PED_ASSERT): Test condition here,
+ not in ped_assert.
+ * libparted/disk.c (ped_disk_remove_partition): Remove the label
+ that was used only upon failing PED_ASSERT. Now that PED_ASSERT
+ always aborts for a false condition, that would have been dead code.
+ (ped_disk_new_fresh): Likewise.
+
+ build: avoid a shadowing warning
+ * libparted/fs/hfs/advfs_plus.c (hfsplus_get_empty_end): Rename local,
+ "link" to avoid shadowing the syscall.
+ * libparted/fs/hfs/advfs.c (hfs_get_empty_end): Likewise.
+
+2009-09-29 Jim Meyering <meyering@redhat.com>
+
+ fat-FS: do not modify fat file system support
+ Revert "Add fat support for sector_size > 512."
+ This reverts commit 14395c356664a3b88f3929a6a3ad69bca374f70d.
+
+ Revert "Fix compile failures."
+ This reverts commit 7603e404ee60f2f892be380a23c390f4638f451f.
+
+ doc: update NEWS
+ * NEWS: Mention >512-byte sector support.
+
+ build: use newer bootstrap script
+ * bootstrap: Update from coreutils.
+
+ build: update gnulib submodule to latest
+
+ maint: update most copyright year lists to include 2009
+ I used this command:
+ make update-copyright \
+ UPDATE_COPYRIGHT_FORCE=1 UPDATE_COPYRIGHT_USE_INTERVALS=1
+
+ tests: enable more syntax-checks
+ * cfg.mk: Enable a few more tests.
+ * include/parted/debug.h: Remove useless parens to avoid
+ triggering failure of the sc_useless_cpp_parens syntax-check.
+ * libparted/arch/linux.h: Likewise.
+ * libparted/libparted.c: Likewise.
+
+ tests: enable a few syntax-checks
+ * cfg.mk (local-checks-to-skip): Remove a few useless exclusions
+ and enable a few syntax checks.
+ * libparted/arch/linux.c (linux_destroy): Avoid triggering the
+ sc_cast_of_argument_to_free check.
+ * parted/strlist.c (str_list_destroy_node): Likewise.
+
+2009-09-24 Jim Meyering <meyering@redhat.com>
+
+ tests: gpt: exercise creating all partition types; check for msftres bug
+ Ensure that a newly-created partition in a GPT partition table has no
+ 'flag' set, by default. This test also exercises setting the "name"
+ on a partition and creates one partition of each supported type.
+ * tests/t0220-gpt-msftres.sh: New file.
+ * tests/Makefile.am (TESTS): Add that new file.
+
+2009-09-24 Keshav P R <skodabenz@rocketmail.com>
+
+ gpt: don't use msftres flag for FAT/NTFS partitions
+ This patch corrects the bug in parted due to which any FAT(12,16,32)
+ or NTFS partition(s) is, by default, incorrectly set as "Microsoft
+ Reserved Partition" type in GPT disks. With this change, parted
+ defaults to setting the FAT/NTFS Partitions partition type to
+ Linux/Windows Basic Data Partition which will make them accessible
+ in Mac OS X and Windows.
+
+ Reported by hramrach@centrum.cz in <http://bugs.debian.org/441033>,
+ with suggested change by Osamu Aoki <osamu@debian.org>.
+ Keshav P R <skodabenz@rocketmail.com> wrote the above and prepared
+ this patch.
+
+2009-09-24 Jim Meyering <meyering@redhat.com>
+
+ ui: do not initialize readline (which would output!) in --script mode
+ Running parted with its --script (-s) option would, surprisingly,
+ print a few control characters if TERM were set appropriately,
+ and if readline and curses support were compiled in.
+ This fixes it not to do that.
+ * parted/parted.c (_init): Initialize readline support only after
+ parsing command line options, so we can skip it in --script mode.
+ * parted/ui.c (init_readline): New function.
+ Body extracted from ...
+ (init_ui): ...here.
+ * parted/ui.h (init_readline): Declare.
+ * tests/t0010-script-no-ctrl-chars.sh: New file. Test for the above.
+ * tests/Makefile.am (TESTS): Add that new file.
+
+2009-09-18 Jim Meyering <meyering@redhat.com>
+
+ loop: don't infloop
+ Correct a bug introduced in commit 52815877, 2007-06-15,
+ "Make loop_probe and loop_clobber work with sector_size > 512, too."
+ * libparted/labels/loop.c (loop_clobber): Initialize "i" before
+ the loop, not inside it.
+ * tests/t0400-loop-clobber-infloop.sh: Test for this.
+ * tests/Makefile.am (TESTS): Add it.
+
+2009-09-17 Jim Meyering <meyering@redhat.com>
+
+ tests: correct t1100-busy-label
+ This test had two problems: FS-manipulation (creates a FAT fs) even
+ for non-512-byte sectors, and it had a now-unexpected line in the
+ expected output of its final command.
+ * tests/t1100-busy-label.sh: Use require_512_byte_sector_size_,
+ so that we skip this test when in non-512-sector size mode.
+ Remove the now-bogus line.
+ Note: this test is not normally run.
+ In order to run it, you have to run as root and set two envvars, e.g.,
+ sudo make check DEVICE_TO_ERASE=/dev/sde DEVICE_TO_ERASE_SIZE=16.4MB
+
+ build: update gnulib submodule to latest
+
+ build: sync bootstrap from coreutils
+ * bootstrap: Update from coreutils.
+
+2009-08-28 Hans de Goede <hdegoede@redhat.com>
+
+ linux-commit: do not unnecessarily open partition device nodes
+ After patching parted with my do-not-use-BLKPG patch, I started
+ to get EBUSY errors on commit_to_os. Note this is not caused
+ by the do-not-use-BLKPG patch, this was already happening, but
+ parted was silently ignoring the errors (and the kernel was
+ not notified of the changes, which is bad). The error now
+ actually gets reported.
+
+ The problem turns out to be in libparted/arch/linux.c's
+ _flush_cache function, which walks all the partitions of the
+ disk and does BLKFLSBUF calls on them. This causes the following:
+
+ commit_to_os -> device_open -> fd = open /dev/sda ->
+ _flush_cache -> for each /dev/sda# open, ioctl, close
+ -> ioctl(fd, BLKRRPART) -> EBUSY
+
+ What is happening here is that the:
+ for each /dev/sda# open, ioctl, close
+
+ Is causing udev change events for all the /dev/sda#
+ nodes, which causes udev to call blkid on all these nodes
+ (on systems which use DeviceKit), so blkid has /dev/sda# nodes
+ open while BLKRRPART gets called on /dev/sda -> EBUSY.
+
+ I've checked with two independend storage subsystem kernel
+ developers, and /dev/sda and /dev/sda#, guarantee cache coherency
+ now-a-days. So there is no need to do this for 2.6, which also
+ eliminates the need to call _flush_cache() on device open at all.
+
+ * libparted/arch/linux.c (_have_kern26): New function.
+ (_flush_cache): For linux kernels 2.6 and newer, don't flush
+ partition devices.
+ (linux_open): Skip _flush_cache on newer kernels here, too.
+
+2009-08-28 Hans de Goede <hdegoede@redhat.com>
+
+ linux-commit: remove the use of the BLKPG ioctl
+ While testing partitionable mdraid I noticed that the kernels
+ view of the partition table never changes even though I was successfully
+ making commit_to_os() calls.
+
+ This has let to me diving into libparted's commit_to_os() code for Linux
+ and there are multiple issues hiding in there:
+
+ 1) Parted reads /sys/block/foo/range to determine how many partitions
+ the device type supports and then makes BLKPG ioctl's to update the
+ kernels view of the partition table for partitions which fall into
+ this range. However for example /sys/block/sda/range contains 16,
+ there are 2 issue with libparted using this number:
+ 1) scsi major's only support 15 partitions, 1 of the range of 16
+ is reserved for the whole device, yet libparted will try
+ to notify the kernel about 16 partitions if present
+ 2) If the major's partition minor's run out, the kernel will switch
+ to the mdp major for the other partitions, iow range no longer
+ limits the number of partitions.
+
+ 2) libparted assumes the user knows what he is doing, and will ignore
+ -ebusy errors for partitions, assuming that the user is smart enough
+ to only change unused partitions. Parted does this without checking
+ if the partitions which return ebusy actually are unchanged causing
+ REAL errors to get unreported (BAD, really really BAD)
+
+ 3) because of 1) libparted will only sync 1 partition on /dev/md#
+ devices (would be 0 if not for the of by 1 bug as all md#p#
+ partitions use the mdp major), and it fails to even do that without
+ reporting an error.
+
+ ###
+
+ 1) we can fix by simply not checking /sys/block/foo/range, but instead
+ just syncing max partitions.
+
+ 2) is more troublesome, we could just make -EBUSY n error,
+ but that may annoy / bug some users. OTOH in certain cases libparted
+ already falls back to BLKRRPART which will return EBUSY so users
+ should already be prepared to handle EBUSY
+
+ 3) Could be fixed by making libparted recognize mdraid as a device type
+ and except mdraid from using BLKPG, like it already is doing with
+ DASD, but it might be better to just get rid of using BLKPG all
+ together. See below.
+
+ An even bigger problem IMHO is the use of the BLKPG ioctl instead of
+ BLKRRPART at all. What this does is tell the kernel parted's view
+ of the partition table and make it use that, instead of telling
+ the kernel to reread the partition table. According to the parted
+ sources this is done for the case where the kernel does not know
+ the disklabel type. However as soon as the system is rebooted, the
+ system will be using the kernel's view. So IMHO it would be much
+ better to always use the kernels view and just always call BLKRRPART
+ in commit_to_os(), this would solve all of the above issues, *and*
+ make the way the system views the partition table consistent between
+ just after running parted and after a reboot.
+
+ I've attached a patch which removes the use of the BLKPG ioctl, notice
+ that this also removes a lot of special case code and workarounds,
+ which existence to me clearly indicates that using the BLKPG ioctl is
+ a bad idea.
+
+ * libparted/arch/linux.c (linux_disk_commit): Remove the use of the
+ BLKPG ioctl.
+ (_blkpg_add_partition, _blkpg_part_command, _blkpg_remove_partition):
+ (_device_get_partition_range, _disk_sync_part_table, _have_blkpg):
+ (_have_devfs): Remove functions thus rendered unused.
+
+2009-08-28 Jim Meyering <meyering@redhat.com>
+
+ tests: make two partition-related tests work for other sector sizes
+ These two root-only tests would fail with the PARTED_SECTOR_SIZE envvar
+ set to anything other than 512. Now they also work for multiples.
+ * tests/t4100-dvh-partition-limits.sh: Make sector-size agnostic.
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+
+ tests: make it easier to diagnose loop_setup_ failure
+ * tests/lvm-utils.sh: Don't redirect stderr to /dev/null.
+
+ tests: avoid spurious failure due to extra space in diagnostic
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len):
+ Remove stray space in diagnostic that was causing the root-only
+ regression test, t4100-dvh-partition-limits.sh, to fail.
+
+ tests: avoid spurious failure on "nodev" mounted partition
+ * tests/t8000-loop.sh: Skip this test if loop_setup_ fails.
+ * tests/t6000-dm.sh: Likewise.
+
+2009-08-28 Hans de Goede <hdegoede@redhat.com>
+
+ parted: avoid unnecessary open/close on commit, and thus udev activity
+ * libparted/disk.c (ped_disk_commit): Open/close the underlying file
+ descriptor in this function, so that callees, ped_disk_commit_to_dev
+ and ped_disk_commit_to_os do not each perform open/close syscalls.
+ This saves an open/close pair, and thus avoids unneeded udev
+ activity on Linux.
+
+ Before this change, when calling commit() on a ped_disk, the
+ following would happen:
+
+ open /dev/sda
+ write partition table
+ close /dev/sda
+ open /dev/sda
+ ioctl (BLKRRPART)
+ close /dev/sda
+
+ This is rather inefficient, and causes 2 udev change events to be fired
+ for /dev/sda (+ the change events from the BLKRRPART), causing all kind
+ of scanning (blkid & friends) twice.
+
+ This patch fixes things to only open the device once.
+
+2009-08-26 Petr Uzel <petr.uzel@suse.cz>
+
+ dos: adjust variable declarations
+ * libparted/labels/dos.c (write_ext_table): Move declaration of S down
+ to just before its first use.
+ Fix alignment of lba_offset declaration.
+
+ dos: factor out and define DOS_N_PRI_PARTITIONS
+ * dos.c (DOS_N_PRI_PARTITIONS): Define.
+
+ dos: use sizeof(variable) instead of sizeof(type)
+ * libparted/labels/dos.c (write_ext_table): Use sizeof(variable)
+ instead of sizeof(type)
+ (write_empty_table, msdos_write): Likewise.
+
+ tests: t0202-gpt-pmbr.sh: various fixes
+ * tests/t0202-gpt-pmbr.sh: use $bootcode_size variable instead
+ of plain 446. Do not use /dev/urandom since it might not exist.
+
+ tests: t2300-dos-label-extended-bootcode.sh: various fixes
+ * tests/t2300-dos-label-extended-bootcode.sh:
+ - fix typo where only first 400B of fake bootcode was installed
+ - use bootcode_size variable and increase its value from 440 to 446
+ - do not use /dev/urandom since it might not exist
+
+2009-08-22 Jim Meyering <meyering@redhat.com>
+
+ build: ignore more generated files
+ * .gitignore: Ignore a few more build artifacts.
+
+ tests: don't use "echo -n"
+ * tests/t7000-scripting.sh: Use printf, not "echo -n", for portability.
+
+2009-08-21 Petr Uzel <petr.uzel@suse.cz>
+
+ test for the bootcode-in-extended-partition fix
+ * tests/t2300-dos-label-extended-bootcode.sh: New file.
+ * tests/Makefile.am (TESTS): Add t2300-dos-label-extended-bootcode.sh.
+
+ do not discard bootcode from extended partition
+ * libparted/labels/dos.c (write_ext_table): Do not discard
+ bootcode from extended partition on msdos label when some of
+ the logical partitions are changed
+
+2009-08-21 Joel Granados Moreno <jgranado@redhat.com>
+
+ Remove unneeded test.
+ This test made sure that "md" was ignored when doing partition specific
+ actions. We have added code that allows this scan once more, therefore
+ the test is no longer needed.
+
+ * tests/t6001-dm-ignoremd.sh: Remove file.
+ * tests/Makefile.am: Remove the test file from the list of tests.
+
+2009-08-21 Joel Granados Moreno <jgranado@redhat.com>
+
+ Compensate for different behavior in t7000 test.
+ When the t7000 test was first engineered the "n" did not appear in the
+ output when testing mkpart & mkpartfs. ATM, for an unknown reason,
+ the "n" is being echoed in the resulting string causing test failure
+ when compared with the errI string. This patch attempts to make both
+ behaviors (with and without the echoed "n") pass the test.
+
+ * tests/t7000-scripting.sh: Make sure we don't have an " n" at the end
+ of the output string.
+
+2009-08-21 Gilles Espinasse <g.esp@free.fr>
+
+ Fix 2 typos.
+ * libparted/labels/fdasd.c (fdasd_enqueue_new_partition): Fix typo in
+ comment.
+ * parted/parted.c (_init_commands): Fix typo in message.
+
+2009-08-18 Jim Meyering <meyering@redhat.com>
+
+ build: update dist-check rules
+ * dist-check.mk: Merge from coreutils.
+
+ build: ignore new -Wjump-misses-init warnings
+ * configure.ac: Ignore warnings from gcc's new -Wjump-misses-init.
+
+ build: update from gnulib
+ * gnulib: Update submodule to latest.
+ * bootstrap.conf (gnulib_modules): Add update-copyright
+ * cfg.mk (update-copyright-env): Define.
+
+2009-08-12 Otavio Salvador <otavio@ossystems.com.br>
+
+ label/dasd: add missing prototype for dasd_get_max_supported_partition_count
+
+2009-08-06 Colin Watson <cjwatson@ubuntu.com>
+
+ Use fsync rather than O_DIRECT
+ O_DIRECT doesn't work on all filesystems (e.g. tmpfs), and fsync does
+ just as good a job to ensure that buffers are flushed.
+
+ Based on
+ http://lists.alioth.debian.org/pipermail/parted-devel/2008-August/002392.html
+ by Olaf Hering, but with added fsync/close error checking.
+
+2009-07-31 Joel Granados Moreno <jgranado@redhat.com>
+
+ Update the NEWS has.
+ * cfg.mk (old_NEWS_hash): Update the NEWS hash.
+
+2009-07-30 Joel Granados Moreno <jgranado@redhat.com>
+
+ Rescue the news file from the stable-1.8.x branch
+ * NEWS: Add all the contents from the NEWS file from the stable-1.8.x
+ branch. Did some indentation and addeded some "**" where needed.
+
+2009-07-27 Joel Granados Moreno <jgranado@redhat.com>
+
+ Explicitly handle the signing key.
+ If we are sure that we have the key, we are able to use it in any
+ subroutine (like make major).
+
+ * build-aux/parted-release (_find_signingkey): New function.
+ (_do_release): Use the key_id to sign the tag and to execute `make
+ major`.
+
+2009-07-27 Joel Granados Moreno <jgranado@redhat.com>
+
+ Minor corrections to the release README.
+ * README-release: Change "$v" to "$VERSION", its more explicit. Include
+ a reminder to add the definition of parted to the release mail.
+
+2009-07-24 Colin Watson <cjwatson@ubuntu.com>
+
+ linux: recognize md devices again, but know they can't be partitioned
+ * libparted/arch/linux.c (_skip_entry): Don't skip "md" devices.
+ (_has_partitions): New function; "loop" labels can't be partitioned.
+ (_blkpg_add_partition, _blkpg_remove_partition, _dm_add_partition,
+ _have_blkpg): Don't attempt to apply partition table changes to
+ unpartitionable devices.
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ dos: plug just-introduced leaks on error path
+ * libparted/labels/dos.c (write_ext_table): Also free new buffer
+ on error paths.
+
+ dos: don't write sector-size (>512) bytes from a 512-byte buffer
+ * libparted/labels/dos.c (write_ext_table): Fix this error reported
+ by valgrind, by allocating/using a sector-sized buffer, rather than
+ using a 512-byte buffer on the stack.
+ Syscall param write(buf) points to uninitialised byte(s)
+ at 0x33E12D13A0: __write_nocancel (in /lib64/libc-2.10.1.so)
+ by 0x432B48: linux_write (linux.c:1782)
+ by 0x42648C: write_ext_table (dos.c:1063)
+ by 0x426471: write_ext_table (dos.c:1059)
+ by 0x4268C5: msdos_write (dos.c:1094)
+ by 0x40E9C4: ped_disk_commit_to_dev (disk.c:479)
+ by 0x40EA08: ped_disk_commit (disk.c:502)
+ by 0x408AE0: test_duplicate (disk.c:79)
+ by 0x4C249ED: srunner_run_all (in /usr/lib64/libcheck.so.0.0.0)
+ by 0x4089AD: main (disk.c:121)
+ Address 0x4e48e00 is 512 bytes inside a block of size 1,024 alloc'd
+ at 0x4A05260: memalign (vg_replace_malloc.c:460)
+ by 0x4A05317: posix_memalign (vg_replace_malloc.c:569)
+ by 0x432B06: linux_write (linux.c:1777)
+ by 0x42648C: write_ext_table (dos.c:1063)
+ by 0x426471: write_ext_table (dos.c:1059)
+ by 0x4268C5: msdos_write (dos.c:1094)
+ by 0x40E9C4: ped_disk_commit_to_dev (disk.c:479)
+ by 0x40EA08: ped_disk_commit (disk.c:502)
+ by 0x408AE0: test_duplicate (disk.c:79)
+ by 0x4C249ED: srunner_run_all (in /usr/lib64/libcheck.so.0.0.0)
+ by 0x4089AD: main (disk.c:121)
+
+ sun: don't read freed memory
+ * libparted/labels/sun.c (_use_old_info): Rename from
+ _probe_and_use_old_info. Don't read sector 0 here.
+ (sun_write): Read it here instead.
+ Write not a constant-sized 512-byte buffer, but the sector-sized
+ buffer just read above.
+
+ gpt: adjust _write_pmbr[*] to work with >512-byte sectors
+ * libparted/labels/gpt.c (_write_pmbr): Adjust, to work with
+ larger-than 512-byte sectors.
+ [*] commit 14a15891 "gpt: preserve first 446 bytes of the PMBR"
+
+ tests: skip t2100-mkswap.sh for >512-byte SS, now that it fails
+ * tests/t2100-mkswap.sh: Use require_512_byte_sector_size_
+
+ build: arrange for "make check" to run the tests four times,
+ each using a different simulated partition size. First with an
+ explicit size of 1024, then 2048, then 4096, and finally with
+ the default of 512.
+ * Makefile.am (check-other-sector_sizes): New rule.
+ (check): Depend on it.
+ * README-big-sector: Update accordingly.
+ Suggestion from Otavio Salvador.
+
+ build: enable many warnings
+ * configure.ac: New configure-time option: --enable-gcc-warnings.
+ * bootstrap.conf: Use gnulib modules: warnings manywarnings.
+ * debug/Makefile.am: Define AM_CFLAGS.
+ * libparted/Makefile.am: Likewise.
+ * libparted/tests/Makefile.am: Likewise.
+ * parted/Makefile.am: Likewise.
+ * partprobe/Makefile.am: Likewise.
+ * debug/clearfat/Makefile.am: Likewise.
+ * libparted/labels/Makefile.am: Likewise.
+
+ build: avoid new warnings
+ * debug/clearfat/clearfat.c (usage): Declare static.
+ * partprobe/partprobe.c (usage): Likewise.
+ * libparted/cs/natmath.c (abs_mod, extended_euclid): Declare static.
+ * libparted/timer.c (PED_TIMER_START_DELAY): Remove unused definition.
+ * libparted/unit.c (ped_unit_format_custom_byte): Remove an unnecessary
+ cast-to-double.
+
+ sun: remove obsolete FIXME comments
+ * libparted/labels/sun.c:
+
+ ui: avoid infloop in testing
+ These commands would provoke an infinite loop:
+ ss=4096 N=100; dd if=/dev/zero of=testfile bs=${ss}c count=$N
+ ./parted ---pretend-input-tty testfile -- mklabel gpt mkpart \
+ primary ext3 1s -1s < /dev/null
+ * parted/ui.c (command_line_prompt_words): Treat EOF like ^C.
+
+ tests: skip FS-related part when sector size is larger than 512
+ * tests/t7000-scripting.sh: Adapt to work with large sector sizes.
+
+ tests: handle SS>512, clean up, add consistency check
+ * tests/t5000-tags.sh: Don't fail for sector size of 4096 and greater.
+
+ tests: t4000-sun-raid-type: accommodate arbitrary sector sizes
+ * tests/t4000-sun-raid-type.sh: Make the expected output depend
+ on the sector size.
+
+ tests: reenable sun label tests
+ * libparted/tests/common.c (_implemented_disk_label): Remove "sun".
+
+ disk.c: add assertions
+
+ sun: don't segfault for sector sizes larger than 512
+ * libparted/labels/sun.c Include "pt-tools.h" and "verify.h".
+ (sun_verify_checksum): Make parameter "const".
+ (sun_probe): Don't always return 0, now that this code works.
+ (sun_probe): Rewrite to work with sector sizes larger than 512.
+ (_probe_and_use_old_info): Likewise.
+ (sun_clobber): Likewise.
+ (sun_read): Likewise.
+ (_check_geometry_sanity) Don't accept all-zeros c,h,s.
+ Add assertions and uses of verify.
+ (sun_alloc): Remove bogus cast.
+ Don't modify through const pointer.
+
+ msdos: clean-up (no semantic change)
+ * libparted/labels/dos.c (msdos_write): Remove useless initialization.
+ (msdos_clobber): Remove unnecessary cast.
+
+ msdos: do not scale counts by sector_size/512
+ * libparted/labels/dos.c (chs_to_sector, linear_start):
+ (linear_end, fill_raw_part, fill_ext_raw_part_geom):
+ (sector_to_chs): Scaling (e.g., a starting sector number) by
+ sector_size/512 loses information when sector_size > 512. Don't do it.
+
+ parted-ui: when failing, include more information in an unusual case
+ * libparted/cs/geom.c (ped_geometry_set): Include starting sector
+ number and length in diagnostic. To trigger this, run the following:
+ dev=f; rm -f $dev; dd if=/dev/null of=$dev bs=1 seek=100k
+ PARTED_SECTOR_SIZE=2048 ./parted -s $dev mklabel msdos
+ PARTED_SECTOR_SIZE=2048 ./parted -s $dev mkpart primary 1s 40s
+ PARTED_SECTOR_SIZE=2048 ./parted -s $dev p
+ Error: Can't have the end before the start! (start sector=128 \
+ length=-78)
+
+ tests: t2200-dos-label-recog.sh: adapt to work with larger sector size
+ Using a 100K image is inadequate for larger sector sizes, since it
+ triggers a bug whereby the device length (in sectors) smaller than
+ the cylinder_size: from dos.c:
+ if (!ped_geometry_init (&start_geom, dev, cylinder_size,
+ dev->length - cylinder_size))
+ That would pass a negative value for the 3rd argument.
+ * tests/t2200-dos-label-recog.sh: Use an image of size 10MB, not 100K.
+
+ tests: add infrastructure: when skipping a test, say why
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Arrange for the first line
+ of 'skip_test_'s argument to be printed on stderr.
+ * tests/test-lib.sh (skip_test_): New function.
+
+ tests: skip FS-related tests when sector size != 512
+ * tests/test-lib.sh (require_512_byte_sector_size_): New function.
+ * tests/t1000-mkpartfs.sh: Skip when sector size != 512.
+ * tests/t3100-resize-ext2-partion.sh: Likewise.
+ * tests/t3000-constraints.sh: Likewise.
+ * tests/t2000-mkfs.sh: Likewise.
+ * tests/t1700-ext-probe.sh: Likewise.
+ * tests/t1500-small-ext2.sh: Likewise.
+
+ tests: t0100-print.sh: adjust to work with arbitrary sector size
+ * tests/t0100-print.sh: Parameterize on $sector_size_.
+ Remove sed xform that hard-coded for 2048.
+
+ tests: revamp t4100-starting-sector.sh to work with other sector sizes
+ * tests/t4100-msdos-starting-sector.sh: Adjust to work with arbitrary
+ PARTED_SECTOR_SIZE.
+
+ tests: correct t2200-dos-label-recog.sh
+ * tests/t2200-dos-label-recog.sh: Concatenate output from successive
+ partition-creation commands, rather than letting output from the
+ second one clobber that of the first.
+
+2009-07-24 Joel Granados Moreno <jgranado@redhat.com>
+
+ put the maximum sector checks in pt-tools.c
+ * libparted/labels/dos.c (msdos_partition_check): Use new
+ ptt_partition_max_start_len function to test for len and start maxs.
+ * libparted/labels/dvh.c (msdos_partition_check): Likewise.
+ * libparted/labels/pt-tools.c (ptt_partition_max_start_len):
+ New function.
+ * libparted/labels/pt-tools.h: Likewise.
+ * po/POTFILES.in: Add pt-tools.c to the translation list.
+
+2009-07-24 Joel Granados Moreno <jgranado@redhat.com>
+
+ put partition-table-specific logic in the corresponding files
+ * include/parted/disk.h (struct _PedDiskOps) [partition_check]:
+ New member function.
+ * libparted/disk.c (_check_partition): Replace open-coded tests with
+ use of the new ->partition_check().
+ (_partition_max_start, _partition_max_len): Remove functions.
+
+ * libparted/labels/dvh.c (dvh_partition_check): New function.
+ * libparted/labels/dos.c (dos_partition_check): Likewise.
+ * libparted/labels/aix.c (aix_partition_check): New stub.
+ * libparted/labels/bsd.c (bsd_partition_check): Likewise.
+ * libparted/labels/gpt.c (gpt_partition_check): Likewise.
+ * libparted/labels/loop.c (loop_partition_check): Likewise.
+ * libparted/labels/mac.c (mac_partition_check): Likewise.
+ * libparted/labels/pc98.c (pc98_partition_check): Likewise.
+ * libparted/labels/rdb.c (rdb_partition_check): Likewise.
+ * libparted/labels/sun.c (sun_partition_check): Likewise.
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ * .gitignore: Ignore more.
+
+ tests: clean up partition-table-testing code
+ * libparted/tests/common.c (_implemented_disk_label): Record here
+ that sun and pc98 are not yet implemented...
+ * libparted/tests/label.c: ...rather than in 4 places in this file.
+
+ tests: improve coverage in label tests
+ * libparted/tests/label.c (create_disk): Increase image size from
+ 20MB to 80MB, so that tests with PARTED_SECTOR_SIZE=8192 don't
+ fail right away.
+ (START_TEST): Don't skip the "loop" type. It works now.
+
+ tests: make t8000-loop.sh stop immediately upon failiure
+ * tests/t8000-loop.sh (immediate): ... to avoid cascading.
+
+ tests: fix the final test failure on RHEL 5.3
+ * tests/t1700-ext-probe.sh (dev): Use mkfs.$type, not mkfs -t $type.
+ The latter doesn't work on RHEL5: a file system created with
+ "mkfs -F -t ext3" appears to be created as ext2.
+
+ tests: skip xfs-requiring tests when mkfs.xfs is not installed
+ * tests/test-lib.sh (require_xfs_): New function.
+ * tests/t4100-dvh-partition-limits.sh: Use it.
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+
+ tests: skip t7000-scripting.sh if configure without readline
+ Otherwise, that test would fail due to slight differences in output.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Define CONFIG_HEADER.
+ * tests/t7000-scripting.sh: Skip if configured without readline.
+
+ tests: don't infloop for manual test invocation with unrecognized option
+ * tests/test-lib.sh: Diagnose an invalid option.
+
+ tests: add one to exercise the dos/gpt seg-faulting bug
+ * tests/t0300-dos-on-gpt.sh: Test for this bug.
+ * tests/Makefile.am (TESTS): Add it to the list.
+
+ gpt_clobber: avoid segfault when 512 < sector_size
+ * libparted/labels/gpt.c (gpt_clobber): Rewrite not to use a
+ fixed-size buffer assuming a 512-byte sector.
+ Eliminate entirely a buffer that is allocated (not long enough)
+ and zeroed-out solely so to help zero out a few sectors.
+ Instead, use the new ptt_clear_sectors function.
+
+ ptt_clear_sectors: new function
+ * libparted/labels/pt-tools.c (ptt_clear_sectors): New function.
+ * libparted/labels/pt-tools.h: Declare.
+
+ linux_write: use sector_size, not hard-coded 512
+ * libparted/arch/linux.c (linux_write): Use sector_size,
+ not a hard-coded 512, to find start of last sector.
+
+ parted/ui.c: Include <config.h> before everything else
+
+ * README-big-sector: New file.
+
+ reenabling probe-related code exposed problems with amiga and bsd
+ * libparted/tests/common.c (_implemented_disk_label): Pretend they're
+ not implemented, so we skip them, temporarily.
+
+ tests: re-enable "mac" tests
+ * libparted/tests/label.c: Remove "mac" exclusion.
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ mac clone: avoid failed assertion for sector size > 512
+ * libparted/labels/mac.c (mac_duplicate): Do not assume that
+ the first sector of the partition-map partition is "1".
+
+ Running this: cd libparted/tests &&
+ PARTED_SECTOR_SIZE=1024 CK_FORK=no valgrind ./label
+ would result in a failed assertion:
+
+ ped_disk_remove_partition (...) at disk.c:1897
+ 1897 PED_ASSERT (part->part_list == NULL, goto error);
+
+ At first glance, it looked like the free(part) in
+ mac_partition_destroy was the culprit. And removing that free
+ does indeed avoid the failed assertion. However, not only does
+ the name "mac_partition_destroy" imply/require the "free", but
+ all other *_partition_destroy functions free their PART parameter,
+ so removing this free statement cannot be the solution.
+
+ Another possibility is that mac_duplicate's use of
+ ped_disk_remove_partition is in error. Removing it appears
+ to solve the problem, but I don't know why that code is removing
+ the partition-map partition manually, so can't safely remove
+ such a thing.
+
+ The real problem is that with >512-byte sectors, the "1" in this
+ code from mac_duplicate is wrong:
+
+ partition_map = ped_disk_get_partition_by_sector (new_disk, 1);
+ PED_ASSERT (partition_map != NULL, return 0);
+ ped_disk_remove_partition (new_disk, partition_map);
+
+ E.g., with 1024-byte sectors, the desired partition-map
+ partition starts at sector 2, so the above gets the tiny
+ metadata partition in the gap. Calling ped_disk_remove_partition
+ to remove a metadata partition provokes some nasty corruption.
+ The desired first-sector number is old_mac_data->ghost_size, not "1".
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ * libparted/labels/mac.c (mac_duplicate): Remove dead code.
+
+ mac partitions pass all label+disk tests @1024 & @2048 sector size
+ * libparted/labels/mac.c (mac_read): Allow for variable sector size.
+ (_pad_raw_part): Likewise.
+ (get_pme): New convenience function, adapted to work for
+ variable sector size and factored out of 4 functions:
+ (_generate_raw_part): ...here,
+ (_generate_raw_freespace_part): ...here,
+ (_generate_empty_part): ...here,
+ (_get_first_empty_part_entry): ...and here.
+
+ mac.c (_disk_analyse_ghost_size): allow >512-byte sector size
+ * libparted/labels/mac.c (_disk_analyse_ghost_size):
+
+ mac.c: remove dead code
+ * libparted/labels/mac.c (mac_partition_new): Remove dead code.
+ Return "NULL", not "0".
+
+ make "mac" partition table support pass the 512-byte ./label tests
+ * libparted/labels/mac.c (mac_probe, mac_clobber): FIX!
+
+ factor out the read_sector function
+ * libparted/labels/pt-tools.c (ptt_read_sector): New function.
+ Factored out of...
+ * libparted/labels/aix.c (aix_probe, aix_clobber, read_sector):
+ * libparted/labels/bsd.c (bsd_probe, bsd_clobber, bsd_read)
+ (_probe_and_add_boot_code, read_sector):
+ * libparted/labels/dos.c (_, msdos_probe, msdos_clobber)
+ (read_table, msdos_write, msdos_disk_type, read_sector):
+ * libparted/labels/gpt.c (gpt_probe, gpt_disk_type, read_sector):
+ * libparted/labels/loop.c (loop_probe, loop_read, loop_disk_type)
+ (read_sector):
+ * libparted/labels/mac.c (_, mac_probe, mac_read)
+ (write_block_zero, mac_disk_type, read_sector):
+ * libparted/labels/pt-tools.h: Declare.
+
+ fix >512-byte sector label/disk-test failure
+ * libparted/tests/disk.c: Include xstrtol.h.
+ (get_sector_size): New function: get sector size from the environment.
+ (create_disk): Use the new function to calculate a usable size,
+ rather than hard-coding the 512-byte-sector-specific size of 20MB.
+ * libparted/tests/common.c (_create_disk): Change meaning (and name)
+ of parameter to be size in bytes, not MiB.
+ Adjust callers.
+ * po/POTFILES.in: Add lib/xstrtol-error.c.
+
+ linux.c: also set phys_sector_size. Must be the same.
+
+ tests: Phew! finally make t5000-tags.sh work with >512-byte sectors
+ * tests/t5000-tags.sh: Many adjustments, along lines of t0200-gpt.
+ Also, be explicit: bios_boot_magic goes in 2nd *sector*.
+
+ Don't hard-code 512 for sector-size.
+ We'd get the wrong value for dev->length.
+ * libparted/arch/linux.c (init_file): In computing dev->length,
+ divide by dev->sector_size (not 512) to compute number of sectors.
+ Define dev->sector_size earlier.
+
+ test basic GPT functionality earlier
+ * tests/t0250-gpt.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ tests: avoid test output mismatch for >512-byte sectors
+ * tests/test-lib.sh (normalize_part_diag_): New function.
+ (sector_size_): New variable.
+ * tests/t7000-scripting.sh: Use them.
+
+ tests: make t5000-tags.sh less sensitive to >512-byte sector size
+ * tests/t5000-tags.sh: Use -m option and "unit s".
+ FIXME: But still fails when invoked via
+ PARTED_SECTOR_SIZE=2048 ./t5000-tags.sh --verbose --debug
+
+ t7000-scripting.sh: adapt to work with >512-byte sectors
+
+ label.c tests: don't skip dvh, now that it works; clean up
+
+ dvh: probe, read, clobber, write: adapt for >512-byte sectors
+
+ bsd.c: use pt-tools
+ * libparted/labels/bsd.c: Include pt-tools.h.
+ (bsd_write): Use ptt_write_sector.
+
+ the beginnings of library partition-table tools
+ * libparted/labels/pt-tools.h: New file.
+ * libparted/labels/pt-tools.c: New file.
+ * libparted/labels/Makefile.am (liblabels_la_SOURCES): Add them.
+
+ avoid dvh label-clone test failure
+ * libparted/labels/dvh.c (dvh_duplicate): Initialize with
+ ped_disk_new_fresh, not with _ped_disk_alloc. The former
+ sets disk->update_mode = 1, as required (and enforced via an
+ assertion in ped_disk_destroy).
+
+ * libparted/labels/gpt.c (gpt_clobber): Plug a leak.
+
+ amiga: Avoid writing uninitialized 1.5KB after initial 512B.
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ disable some file-system-related probe tests for sector size > 512
+ These changes keep us from recognizing most file systems
+ when the sector size is larger than 512. However, for now (while
+ concentrating on getting partition table support right) that's not
+ a problem. Besides, the code we're avoiding would inevitably make
+ parted smash its stack.
+
+ * libparted/fs/linux_swap/linux_swap.c (_generic_swap_probe): Fail
+ the swap-file-system-recognizing test when sector size is not 512.
+ * libparted/filesys.c (ped_file_system_probe_specific): Fail all
+ fs-specific probe-related tests when sector size is not 512.
+ * libparted/fs/jfs/jfs.c (jfs_probe): For now, don't even try to
+ deal with larger sector size.
+ * libparted/label.c: Skip tests of problematic file system types.
+ * tests/t0100-print.sh: Print with units of sectors, and adjust
+ expected output accordingly.
+ * tests/t1000-mkpartfs.sh: Use a smaller test file.
+
+2009-07-24 Jim Meyering <jim@meyering.net>
+
+ Fix compile failures.
+
+ Add fat support for sector_size > 512.
+
+ avoid compiler warnings
+ * libparted/fs/ext2/interface.c (_ext2_generic_probe): Likewise.
+ (_ext2_clobber): Likewise.
+
+ Make loop_probe and loop_clobber work with sector_size > 512, too.
+
+ Still working on making label support work.
+ * libparted/fs/ext2/interface.c (_ext2_generic_probe): The call to
+ ped_geometry_read_alloc would clobber the stack after SB whenever
+ block_size > 512. Instead, use new function, ped_geometry_read_alloc,
+ and adjust all uses of SB.
+ (_ext2_clobber): Likewise.
+ * libparted/cs/geom.c (ped_geometry_read_alloc): New function.
+ * include/parted/geom.h: Declare it.
+
+ (msdos_clobber): Plug the leak I just introduced.
+
+ Make "mklabel loop" work with >512 sector_size, even when...
+ there is an existing "msdos" label.
+ (msdos_clobber): Make it work with >512 sector_size.
+
+ Make "mklabel loop" work with >512 sector_size.
+
+ Make "mklabel msdos" work with >512 sector_size.
+
+ Make "mklabel bsd" work with >512 sector_size.
+
+ Make "mklabel mac" work with >512-byte sector_size.
+
+ Add a FIXME comment.
+
+ start to make things work with 2048-byte sector size.
+ Done so far: amiga, bsd, loop, gpt.
+ Fix leaks along the way.
+ remove unused label
+ Add a cast to avoid a warning.
+
+2009-07-24 Jim Meyering <meyering@redhat.com>
+
+ allow to simulate linux-file sector size via PARTED_SECTOR_SIZE envvar
+
+2009-07-23 Joel Granados Moreno <jgranado@redhat.com>
+
+ post-release administrivia
+ * NEWS: Add header line for next release.
+ * .prev-version: Record previous version.
+ * cfg.mk (old_NEWS_hash): Auto-update.
+
+ version 1.9.0
+ * NEWS: Record release date.
+
+2009-07-23 Jim Meyering <meyering@redhat.com>
+
+ Revert "Point gnulib submodule to an existing object ref."
+ This reverts commit 95486a979a8862df9f6f2129c2d9f35221340583.
+ The reverted change mistakenly backdated gnulib to July 14.
+
+2009-07-23 Joel Granados Moreno <jgranado@redhat.com>
+
+ Little fixes before the release.
+ * README-release: Correct an error in step 5. In step 6 we mean
+ $VERSION.
+ * build-aux/parted-release (_do_release): Use '-F -' to make the NEWS
+ commit.
+
+ Point gnulib submodule to an existing object ref.
+ * gnulib: Update submodule to latest.
+
+ Automate the release process.
+ * build-aux/parted-release: New file. Automates the part of the release
+ process that takes place in the local repository.
+
+ Document our release proceedure.
+ * README-release: New file.
+
+ Update the NEWS file for the next release.
+ * NEWS : Describe some of the latest bugfixes and behavioral changes.
+
+2009-07-23 Jim Meyering <meyering@redhat.com>
+
+ build: update from gnulib, for fixed maint.mk
+ * gnulib: Update submodule to latest.
+
+2009-07-22 Jim Meyering <meyering@redhat.com>
+
+ build: avoid "make dist-hook" failure
+ * Makefile.am (dist-hook): Remove coreutils-specific rm-substitution.
+
+ build: avoid automake warning
+ * libparted/Makefile.am (SUBDIRS_CHECK): Do not redefine.
+ Instead, append to existing value.
+
+2009-07-19 Jim Meyering <meyering@redhat.com>
+
+ build: adjust Makefiles
+ * libparted/Makefile.am (ARCH_SOURCE): Factor out duplication.
+ * libparted/labels/Makefile.am (partedincludedir): Split long line.
+
+2009-07-19 Otavio Salvador <otavio@ossystems.com.br>
+
+ Avoid compilation failure on s390
+ To export LinuxSpecific stuff for labels, in this case fdasd, we now
+ provide arch/linux.h. This aids in avoiding code duplication.
+
+ * configure.ac: add BUILD_LINUX conditional.
+ * libparted/Makefile.am: conditionally use linux.h.
+ * libparted/arch/linux.c: move LinuxSpecific stuff to linux.h.
+ * libparted/arch/linux.h: New file.
+ * libparted/labels/Makefile.am: include from libparted as well.
+ * libparted/labels/dasd.c: use arch/linux.h and use dev->path for
+ error message.
+ * libparted/labels/fdasd.c: include linux.h and drop an unused
+ variable.
+
+2009-07-16 Jim Meyering <meyering@redhat.com>
+
+ build: avoid configure-time syntax error
+ Running ./configure on a system without devmapper devel libraries
+ would provoke this:
+ ./configure: line 264: return: but: numeric argument required
+ ./configure: line 24783: --enable-device-mapper: command not found
+ * configure.ac: Add quotes to most AC_MSG_ERROR uses, both around
+ the argument, and (when needed) around the macro use itself.
+
+2009-07-11 Jim Meyering <meyering@redhat.com>
+
+ ui: avoid NULL dereference on realloc failure
+ * parted/strlist.c (gettext_to_wchar) [ENABLE_NLS]: Use xrealloc,
+ so we never return NULL, which could then be dereferenced.
+
+2009-07-10 Colin Watson <cjwatson@ubuntu.com>
+
+ Rationalise linux-swap fs names, and add a "linux-swap" alias
+ * libparted/filesys.c (ped_file_system_alias_register,
+ ped_file_system_alias_unregister, ped_file_system_alias_get_next): New
+ functions.
+ (ped_file_system_type_get): Walk aliases as well.
+ * include/parted/filesys.h (struct _PedFileSystemAlias): New structure.
+ (ped_file_system_alias_register, ped_file_system_alias_unregister,
+ ped_file_system_alias_get_next): Add prototypes.
+ * parted/parted.c (_init_messages): Walk file system aliases as well as
+ types.
+ * parted/ui.c (init_fs_type_str): Likewise.
+ * libparted/fs/linux_swap/linux_swap.c (_swap_v1_type, _swap_v1_open,
+ _swap_v1_probe, _swap_v1_clobber, _swap_v1_ops): Rename to _swap_v0_type
+ etc. to match version number used in mkswap. Update all users.
+ (_swap_v2_type, _swap_v2_open, _swap_v2_probe, _swap_v2_clobber,
+ _swap_v2_ops): Rename to _swap_v1_type etc. to match version number used
+ in mkswap. Update all users.
+ (_swap_v0_type): Rename type from "linux-swap(old)" to "linux-swap(v0)".
+ (_swap_v1_type): Rename type from "linux-swap(new)" to "linux-swap(v1)".
+ (ped_file_system_linux_swap_init, ped_file_system_linux_swap_done):
+ Register/unregister a "linux-swap" alias for "linux-swap(v1)", and
+ deprecated aliases "linux-swap(old)" and "linux-swap(new)".
+ * libparted/labels/misc.h (is_linux_swap): Update comment.
+ * tests/t2100-mkswap.sh: Refer to "linux-swap(v1)" rather than
+ "linux-swap(new)". Test creation via the new alias.
+
+2009-07-09 Jim Meyering <meyering@redhat.com>
+
+ tests: disable the taint-distcheck rule
+ * dist-check.mk (taint-distcheck): Disable rule, since it
+ would trigger a bug in libtool-generated scripts.
+
+ tests: better quoting to avoid failure with poorly-named src directory
+ * libparted/tests/Makefile.am (init.sh): Quote, in case
+ $(abs_top_srcdir) contains e.g., spaces.
+ * tests/Makefile.am (init.sh): Likewise.
+ * libparted/tests/t2000-disk.sh: Better quoting here, too.
+ * libparted/tests/t1000-label.sh: Likewise.
+ Reported by Joel Granados
+
+ build: update from gnulib
+ * gnulib: Update submodule to latest.
+ * cfg.mk (local-checks-to-skip): Add sc_require_test_exit_idiom.
+ This skips a new-from-gnulib test that doesn't apply here.
+
+2009-06-17 Joel Granados Moreno <jgranado@redhat.com>
+
+ tests: ensure that we preserve the first 446 byts of a GPT pmbr
+ * tests/t0202-gpt-pmbr.sh: Ensure that the first 446 bytes are
+ unchanged after creating a GPT partition.
+
+ gpt: preserve first 446 bytes of the PMBR (protective MBR)
+ * libparted/label/gpt.c (_write_pmbr): Make sure we read and preserve
+ the first 446 bytes of the device when we are creating the PMBR.
+
+2009-06-17 Jim Meyering <meyering@redhat.com>
+
+ build: update from gnulib
+ * gnulib: Update submodule to latest.
+
+ build: require autoconf-2.63 and automake-1.11
+ * configure.ac (AC_PREREQ): Require 2.63, not 2.61.
+ (AM_INIT_AUTOMAKE): Require 1.11, not 1.10c.
+
+2009-06-16 Colin Watson <cjwatson@ubuntu.com>
+
+ linux-swap: generate UUIDs for fresh swap spaces
+ * libparted/fs/linux_swap/linux_swap.c: Generate a UUID when creating a
+ fresh swap space.
+ * tests/t2100-mkswap.sh: Test that two fresh swap spaces get different
+ UUIDs, and that 'check' preserves the swap UUID.
+
+2009-06-11 Joel Granados Moreno <jgranado@redhat.com>
+
+ tests: simplify t6001-dm-ignoremd.sh
+ * tests/t6001-dm-ignoremd.sh (md_dev_create_): Use functions in
+ test-util.sh for mdadm commands. Move mddev_ to the top of the
+ file. Remove unneeded comment.
+
+ tests: add mdadm specific functions
+ * tests/test-lib.sh (require_mdadm_): New function.
+ (mdadm_create_linear_device_): New function.
+
+2009-06-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ doc: improve mkpart description
+ * doc/parted.texi: Make sure that part-type is portrayed as an
+ optional argument. Mention the "special behavior" that mkpart has
+ with specific disk label types.
+
+2009-06-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ parted-ui: ensure cmd-line buffer is empty before ped_exception_throw
+ When ped_exception_throw requires input from the user and there are
+ leftover strings in the command line, there is an "invalid token" error
+ from parted. This happens because the ped_exception expects some input
+ that is, most likely, different from the leftover string(s). To address
+ this, one must make sure that all the argument strings are parsed before
+ invoking any exception that requires input.
+
+ * parted/parted.c (do_mklabel): Call command_line_get_disk_type call
+ before the disk checks (_disk_warn_loss will call ped_exception_throw).
+ * tests/t0000-basic.sh: Adjust, now that the output need not include
+ the error message.
+
+2009-06-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ tests: verify that "md" devices are not listed
+ * tests/t6001-dm-ignored.sh: New test file.
+ * tests/Makefile.am (TESTS): Add it.
+
+ linux: skip "md" devices when probing
+ * libparted/arch/linux.c (_skip_entry) : Add "md" to the entries
+ array so all devices of type "/dev/md#" get ignored.
+
+2009-06-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ fat: support 64KB clusters for FAT16
+ * libparted/fs/fat/calc.c (fat_max_cluster_size): A 64KB cluster
+ size (128 sectors) for FAT16 is not common but is possible. Allow
+ the use of 128-sector clusters instead of outputting an error.
+
+ Fixes this:
+ http://parted.alioth.debian.org/cgi-bin/trac.cgi/ticket/207
+ Additional info here:
+ http://lists.alioth.debian.org/\
+ pipermail/parted-devel/2009-June/002882.html
+
+2009-06-10 Matthew S. Harris <mharris312@gmail.com>
+
+ gpt: fix gpt_read to read all of the partition entries correctly
+ * libparted/labels/gpt.c (gpt_read): Use the SizeOfPartitionEntry
+ field value when reading the partition entries rather than assuming
+ that the entries are the same size as our struct.
+ (gpt_read): When reading the partition
+ entries, round up, not down, the number of sectors to read.
+ (_header_is_valid): Check that the SizeOfPartitionEntry is sane.
+ With minor adjustments by Joel Granados Moreno.
+
+2009-06-10 Joel Granados Moreno <jgranado@redhat.com>
+
+ Tweak distcheck.
+ * dist-check.mk (install-transform-check): The binaries will be located
+ in /sbin instead of /bin.
+
+2009-06-03 Jim Meyering <meyering@redhat.com>
+
+ build: require automake-1.11 via bootstrap.conf, too
+ * bootstrap.conf (buildreq): s/1.10c/1.11/
+
+ doc: sync README-hacking from coreutils
+ * README-hacking: update
+
+ build: rename internal library: lib/libparted -> lib/libgnulib
+ * bootstrap.conf (gnulib_name): Define gnulib_name=libgnulib.
+ * libparted/Makefile.am (libparted_la_LIBADD): Update sole use.
+
+ libparted: link with gnulib
+ * libparted/Makefile.am (libparted_la_LIBADD): Add
+ $(top_builddir)/lib/libparted.la to the list.
+ * partprobe/Makefile.am (partprobe_LDADD): Remove now-unneeded
+ $(top_builddir)/lib/libparted.la.
+ * libparted/tests/Makefile.am (LDADD): Remove now-unneeded
+ $(top_builddir)/lib/libparted.la.
+ * debug/clearfat/Makefile.am (clearfat_LDADD): Likewise.
+ * parted/Makefile.am (parted_LDADD): Likewise.
+ Otavio Salvador reported that linking with the resulting shared
+ library produced an unresolved reference to last_component.
+
+2009-05-26 Jim Meyering <meyering@redhat.com>
+
+ tests: adjust t4100-msdos-starting-sector.sh
+ * tests/t4100-msdos-starting-sector.sh: Use parted's -m option
+ when printing, and adjust expected output to match.
+ Filter out "Disk...:" part to avoid false-positive failures due
+ to mount-point- related differences.
+
+2009-05-26 Joel Granados Moreno <jgranado@redhat.com>
+
+ Add test for msdos starting sector.
+ * tests/t4100-msdos-starting-sector.sh : Make sure we are consistent
+ when displaying starting sector for msdos lables.
+
+2009-05-26 Joel Andres Granados <jgranado@redhat.com>
+
+ Make sure we always create msdos metadata parts.
+ Given a disk with no partition, parted did not create metadata
+ partitions for an msdos label. This led to inconsistencies when
+ reporting free space partition ranges. This patch addresses this issue.
+
+ * libparted/labels/dos.c (get_last_part): Remove function.
+ * libparted/labels/dos.c (get_start_first_nonfree_part): New function.
+ * libparted/labels/dos.c (get_end_last_nonfree_part): New function.
+ * libparted/lables/dos.c (add_startend_metadata): Add code that
+ handles disks no partitions. Add check that prevents the metadata
+ partitions from being greater than the device length. Add check
+ that prevents metadata partitions from overlapping in small devs.
+
+2009-05-26 Joel Granados Moreno <jgranado@redhat.com>
+
+ Improve readability in linux.c
+ * libparted/arch/linux.c : Gather all the _is_major functions together.
+ change the name of readFD to _read_fd since its not used anywhere
+ else. Also rename the "_is_major_type" function to
+ "_major_type_in_device" as it better expresses what we do in said
+ function.
+
+ Correctly name virtio devices.
+ * include/parted/device.h (PedDeviceType): Add a new PED_DEVICE_VIRTBLK
+ type to the list.
+ * libparted/arch/linux.c (_is_dm_major): Modify this function so it
+ calls the new _is_major_type function with type "device-mapper".
+ * libparted/arch/linux.c (_is_major_type): Searches a major number
+ inside /proc/devices based on a "type" string.
+ * libparted/arch/linux.c (_is_virtblk_major): New function. Calls
+ _is_major_type with type "virtblk".
+ * libparted/arch/linux.c (_device_probe_type): Add a new
+ PED_DEVICE_VIRTBLK case to the probe possibilities.
+ * libparted/arch/linux.c (linux_new): Add a new PED_DEVICE_VIRTBLK case
+ to the possible device types.
+ * parted/parted.c (do_print): add the "virtblk" string to the transport
+ array.
+
+2009-05-23 Otavio Salvador <otavio@ossystems.com.br>
+
+ Makefile.am: fail if ABI has changed
+
+ configure.ac: fix PED_MINOR_VERSION sed expression
+
+ add build-aux to .gitignore
+
+2009-05-15 Joel Granados Moreno <jgranado@redhat.com>
+
+ build: enable device mapper support by default
+ * configure.ac: Device mapper is ubiquitous enough: enable by default.
+ Adjust --help and diagnostics to reflect the new default.
+
+2009-05-15 Jim Meyering <meyering@redhat.com>
+
+ portability: don't perform pointer arithmetic on a "void *" pointer
+ * libparted/arch/linux.c (_dm_remove_parts) [ENABLE_DEVICE_MAPPER]:
+ Don't perform pointer arithmetic on a "void *" pointer.
+ Interpose a (char *) cast.
+
+ maint: cfg.mk: remove now-unnecessary gnulib_dir definition
+ * cfg.mk (gnulib_dir): Remove definition, now that gnulib's
+ maint.mk provides the default we want.
+
+ build: require 1.10c (get it by building from automake.git)
+ * bootstrap.conf (buildreq): Require 1.10c (1.11 is coming soon)
+ for our use of AM_SILENT_RULES.
+ * configure.ac (AM_INIT_AUTOMAKE): Require 1.10c, for our use of
+ AM_SILENT_RULES. Reported by Joel Granados.
+
+ build: update from gnulib, for newer maint.mk and more
+ * gnulib: Update submodule to latest.
+
+ build: use gnulib's vc-list-files module
+ * bootstrap.conf (gnulib_modules): Add vc-list-files, so we pull
+ this file from gnulib.
+ * build-aux/vc-list-files: Remove now-outdated file.
+
+2009-04-26 Jim Meyering <meyering@redhat.com>
+
+ build: accommodate maint.mk, now that it's pulled from gnulib
+ * dist-check.mk: New file, from coreutils. Was part of maint.mk.
+ * cfg.mk (old_NEWS_hash): Include $(srcdir)/dist-check.mk.
+ Remove trailing " -", to align with new check in maint.mk.
+ * Makefile.am (EXTRA_DIST): Add dist-check.mk.
+
+ build: use gnulib's dirname module
+ * bootstrap.conf (gnulib_modules): Add dirname.
+
+ build: make automake's silent-rules option the default
+ * configure.ac (AM_INIT_AUTOMAKE): Remove silent-rules. Instead,...
+ (AM_SILENT_RULES): Use this, with it's undocumented [yes] argument.
+ Those who want verbose build output may configure with
+ --disable-silent-rules or use "make V=1".
+
+ build: stop using obsolete gnulib modules
+ * bootstrap.conf (obsolete_gnulib_modules): Remove.
+ (gnulib_modules): Remove use.
+
+ build: use maint.mk from gnulib
+ * maint.mk: Remove file. Now it's generated.
+ * .gitignore: Ignore it.
+ * bootstrap.conf (gnulib_modules): Add maintainer-makefile.
+ * gnulib: Update submodule to latest.
+
+2009-04-11 Jim Meyering <meyering@redhat.com>
+
+ maint: use a git submodule for gnulib
+ * .gitmodules: New file, to track gnulib.
+ * gnulib: New file, created by running this:
+ git submodule add git://git.sv.gnu.org/gnulib.git gnulib
+
+2009-04-10 Jim Meyering <meyering@redhat.com>
+
+ maint: sync from coreutils
+ * maint.mk: Sync from coreutils.
+ * bootstrap: Likewise.
+
+2009-04-08 Jim Meyering <meyering@redhat.com>
+
+ build-from-git: depend on automake-1.10b
+ * bootstrap.conf (buildreq): Note the automake-1.10b requirement.
+ * configure.ac (AM_INIT_AUTOMAKE): Enable new automake options:
+ dist-xz, color-tests, parallel-tests, silent-rules.
+
+2009-04-08 Otavio Salvador <otavio@ossystems.com.br>
+
+ bootstrap.conf: require automake 1.10 since 1.10a is an alpha version
+
+2009-03-21 Jim Meyering <meyering@redhat.com>
+
+ * maint.mk: merge with latest from coreutils
+
+ maint: indent consistently
+ * doc/po4a.mk (updatepo): Replace TAB+8-spaces with two TABs.
+
+2009-03-05 Jim Meyering <meyering@redhat.com>
+
+ * bootstrap: sync from coreutils
+
+ build: enable "make syntax-check" rule to prohibit trailing spaces
+ * cfg.mk (local-checks-to-skip): Remove sc_trailing_blank.
+
+ remove all trailing blanks
+ ...by running these commands:
+ t=$'\t'
+ git grep -l "[ $t]\$"|xargs perl -pi -e 's/[ \t]+$//'
+
+ portability: use last_component, not basename
+ * libparted/arch/linux.c (read_device_sysfs_file): Use last_component
+ from gnulib's basename module, not the less-portable "basename" function.
+ (_device_get_partition_range): Likewise.
+ Reported by Karel Zak.
+ * debug/clearfat/Makefile.am (clearfat_LDADD): Link gnulib *after*
+ libparted, not before.
+ * partprobe/Makefile.am (partprobe_LDADD): Likewise.
+ * parted/Makefile.am (parted_LDADD): Likewise.
+
+2009-03-05 Karel Zak <kzak@redhat.com>
+
+ test correctly for snprintf failure
+ * libparted/arch/linux.c (_device_get_partition_range): Correct
+ test for failed snprintf.
+
+2009-03-05 Petr Uzel <petr.uzel@suse.cz>
+
+ gpt: plug a memory leak in gpt_read()
+ * libparted/labels/gpt.c (gpt_read): Free local variable, "zeros".
+
+2009-03-05 Jim Meyering <meyering@redhat.com>
+
+ update some release-related administrivia
+ * .prev-version: Record that the previous release was 1.8.8.1.
+ * NEWS: Fill in the date for the previous release.
+ * cfg.mk (old_NEWS_hash): Update
+
+ * maint.mk: Sync from coreutils.
+
+ adjust "parted -s dev print" not to emit trailing spaces
+ * parted/table.c (table_render_row): Don't append trailing spaces
+ or delimiter after final field, and trim any other trailing spaces.
+ * tests/t5000-tags.sh: Remove trailing spaces from expected output.
+
+ reword a comment; more formatting changes.
+ * libparted/arch/linux.c (_disk_sync_part_table): Reword comment
+ to use the "active" voice, not "we ...".
+ Adjust formatting in new/moved code.
+
+2009-03-05 Jim Meyering <meyering@redhat.com>
+
+ rename all "support" parameters; avoid new compiler warnings
+ Change each occurrence like this (which evokes a warning from gcc):
+ - return *supported = MAX_TOTAL_PART;
+ to this:
+ + *max_n = MAX_TOTAL_PART;
+ + return true;
+
+ I did it mostly mechanically:
+
+ cd libparted/labels &&
+ grep -l 'return .supported = ' *.c|xargs perl -ni \
+ -e '$m=/^\treturn \*supported( = .*;)/;' \
+ -e 'print $m ? "\t*max_n$1\n\treturn true;\n" : $_'
+ git grep -l 'int\* supported'|xargs perl -pi -e 's/int\* supported/int *max_n/'
+
+ That got all but aix.c, which used different spacing: "int *supported",
+ which I changed manually. Then I updated all copyright dates.
+
+2009-03-05 Jim Meyering <meyering@redhat.com>
+
+ gpt: adjust formatting and rename a parameter: s/supported/max_n/.
+ * libparted/labels/gpt.c (gpt_get_max_supported_partition_count): Rename
+ parameter: s/supported/max_n/. The latter sounds more like a number,
+ while "supported" sounds boolean at first.
+
+2009-03-05 Joel Granados Moreno <jgranado@redhat.com>
+
+ Properly sync partitions with operating system
+ * include/parted/disk.h: Add prototypes for new function.
+ * libparted/disk.c (ped_disk_get_max_supported_partition_count): New
+ function that calls the partition-table-specific function.
+ * libparted/arch/linux.c (_disk_sync_part_table): To sync the table in
+ disk with the kernel, we remove all partitions from the kernel table
+ and then add the ones that are in disk. For this to happen we need to
+ calculate the partition-table-type-specific maximum number of
+ supported partitions.
+ * libparted/labels/gpt.c (gpt_get_max_supported_partition_count):
+ Read the gpt header from disk and calculate the maximum number of
+ partitions it can accommodate.
+ * libparted/labels/aix.c (get_max_supported_partition_count):
+ New function.
+ * libparted/labels/bsd.c: Likewise.
+ * libparted/labels/dasd.c: Likewise.
+ * libparted/labels/dos.c: Likewise.
+ * libparted/labels/dvh.c: Likewise.
+ * libparted/labels/gpt.c: Likewise.
+ * libparted/labels/loop.c: Likewise.
+ * libparted/labels/mac.c: Likewise.
+ * libparted/labels/pc98.c: Likewise.
+ * libparted/labels/rdb.c: Likewise.
+ * libparted/labels/sun.c: Likewise.
+
+2009-02-20 Joel Granados Moreno <jgranado@redhat.com>
+
+ dasd: emit a diagnostic upon probe failure
+ * libparted/labels/dasd.c (dasd_probe): Inform the user when no dasd
+ volumes are present in a device.
+
+2009-02-20 Petr Uzel <petr.uzel@suse.cz>
+
+ gpt: avoid failed assertion on big-endian systems
+ * libparted/labels/gpt.c (_parse_header): Compute last_usable_if_grown
+ not as an LE64 value but as a CPU-format one, since we're about to
+ compare it to another.
+
+2009-02-18 Petr Uzel <petr.uzel@suse.cz>
+
+ test for the gpt_read failed-assertion fix
+ * tests/t0201-gpt.sh: New file.
+ * tests/Makefile.am (TESTS): Add it.
+
+2009-02-18 Jim Meyering <meyering@redhat.com>
+
+ avoid failed assertion when creating a GPT partition table...
+ on top of an old one for a larger device
+
+ * libparted/labels/gpt.c (gpt_read): Don't assert that the location
+ of the alternate LBA is within the current device. It will be
+ beyond its end when the device it was created for was larger.
+ Instead, just return, treating this like any other non-match.
+
+ Here's the reproducer:
+
+ dev=file
+ dd of=$dev if=/dev/null seek=4001
+ parted -s $dev mklabel gpt
+ dd of=$dev if=/dev/null seek=4000
+ parted -s $dev mklabel gpt
+
+2009-02-17 Jim Meyering <meyering@redhat.com>
+
+ gpt: add a test: printing a partition table must not modify it
+ * tests/t0200-gpt.sh: New file.
+ * tests/Makefile.am (TESTS): Add the new test.
+
+2009-02-17 Petr Uzel <petr.uzel@suse.cz>
+
+ gpt: do not automatically "correct" a suspicious GPT partition table
+ Previously, when parted was invoked on a disk with a GPT partition table
+ and the backup GPT was not in the last sector of the disk, and even if
+ the requested operation was just to print the partition table, parted
+ would "repair" this automatically. This behavior is undesirable in the
+ following situation:
+
+ dm-raid on top of block device. The dm-raid is partitioned with GPT. If
+ the dm-raid starts on the first block of underlying device (AFAIK this is
+ the case with FastTrack controllers) and the user runs parted on the
+ dm-raid, it will identify the physical device as being partitioned with
+ GPT and see the backup GPT table not to be in the last sector of the
+ physical device and thus move it to this location (which may lead to
+ destruction of dm-raid metadata in case they are located at the end of
+ physical device).
+
+ This patch modifies parted's behavior to ignore fixing of backup GPT
+ position by default.
+
+2009-02-16 Jim Meyering <meyering@redhat.com>
+
+ tests: use "compare", not "$compare"
+ * test-lib.sh (compare): Define "compare" as a function, not a variable.
+ * tests/t*.sh: use "compare", not "$compare"
+
+2009-02-13 Jim Meyering <meyering@redhat.com>
+
+ don't segfault on a device-mapper device with no target
+ * libparted/arch/linux.c (_dm_maptype): Don't dereference NULL
+ for a device-mapper device with no target. Use the string
+ "NO-TARGET" instead. Reported by Mike Hwang in
+ http://thread.gmane.org/gmane.comp.gnu.parted.devel/2432
+
+2009-02-08 Jim Meyering <meyering@redhat.com>
+
+ compile warning-free also with upcoming gcc-4.4
+ * libparted/fs/fat/fat.c (_gen_new_serial_number): Use a union
+ rather than a warning-provoking cast. Avoids this gcc warning:
+ "dereferencing type-punned pointer will break strict-aliasing rules"
+
+2009-02-07 Jim Meyering <meyering@redhat.com>
+
+ clearfat: diagnose an invalid device number
+ * debug/clearfat/clearfat.c: Include <limits.h> and "xstrtol.h".
+ (main): Diagnose an invalid minor device number argument.
+ * bootstrap.conf (gnulib_modules): Add xstrtol.
+
+ maint.mk: sync from coreutils
+
+ Revert "don't try to translate 'lib/xstrtol-error.c'"
+ This reverts commit 39adc77de255b7df33e1efb93853c7ccfd4c45f5.
+ Otherwise, "make syntax-check" fails the sc_po_check test.
+
+2009-02-06 Otavio Salvador <otavio@ossystems.com.br>
+
+ don't try to translate 'lib/xstrtol-error.c'
+
+ remove ped_(register|unregister)_disk_type since they were deprecated
+ ped_(register|unregister)_disk_type were remove since they are
+ deprecated since 1.8 releases. The functions
+ ped_disk_type_(register|unregister) are the ones to be used.
+
+ move architecture specific code since they're used in a single place
+ All architecture headers (linux.h, gnu.h and beos.h) are now
+ removed. The required code has beem moved to the C file that required
+ it.
+
+2009-01-27 Jim Meyering <meyering@redhat.com>
+
+ avoid bootstrap failure
+ * bootstrap.conf: Ensure the gnulib-tests/ exists.
+ Reported by Matt Domsch.
+
+2009-01-26 Jim Meyering <meyering@redhat.com>
+
+ better m4 quoting
+
+ * parted/ui.c: Include <config.h> before any other file.
+
+ maint.mk: sync from coreutils
+
+ * po/POTFILES.in: Add lib/xstrtol-error.c.
+
+ _disk_sync_part_table: revise yet again
+ This fixes a bug whereby parted could leave the kernel with an
+ erroneous view of a partition table.
+ * libparted/arch/linux.c (_disk_sync_part_table): Per analysis in
+ http://thread.gmane.org/gmane.comp.gnu.parted.devel/2297/focus=2307.
+ Patch suggested by Petr Uzel.
+
+ * bootstrap.conf: sync from coreutils
+
+2009-01-08 Debarshi Ray <rishi@gnu.org>
+
+ Differentiate between Ext4 and Ext3 file systems.
+ Fixes http://parted.alioth.debian.org/cgi-bin/trac.cgi/ticket/188
+
+ * libparted/fs/ext2/ext2_fs.h (EXT4_FEATURE_RO_COMPAT_HUGE_FILE,
+ EXT4_FEATURE_RO_COMPAT_DIR_NLINK, EXT4_FEATURE_INCOMPAT_EXTENTS,
+ EXT4_FEATURE_INCOMPAT_64BIT): New constants.
+ * libparted/fs/ext2/interface.c (_ext2_generic_probe): Ext4 file systems
+ will have EXT4_FEATURE_* bits set, while Ext3 will not.
+ (_ext2_probe, _ext3_probe): Pass 2 and 3 respectively, instead of 0 and 1,
+ to _ext2_generic_probe.
+ (_ext4_probe): New function.
+ (_ext4_ops, _ext4_type): New structures.
+ (ped_file_system_ext2_init): Register Ext4 file system type.
+ (ped_file_system_ext2_done): Likewise.
+ * tests/Makefile.am (TESTS): Add t1700-ext-probe.sh.
+ * tests/t1700-ext-probe.sh: New file.
+
+2009-01-08 Jim Meyering <meyering@redhat.com>
+
+ fix a "make syntax-check" failure (update copyright date)
+ * doc/parted.texi: Update copyright dates for 2009.
+
+2008-12-23 Jim Meyering <meyering@redhat.com>
+
+ avoid "make install" failure with latest GNU make
+ * doc/C/Makefile.am (dist_man8_MANS): Use per-section variable
+ names, as recommended by automake.
+ (man_MANS): Remove redundant definition.
+
+2008-12-23 Tom "spot" Callaway <tcallawa@redhat.com>
+
+ sun partition tables: add support for RAID partition types
+ This patch enables RAID as a supported partition type on Sun disk
+ layouts, commonly found/used on SPARC hardware. It has been tested
+ on Aurora SPARC Linux (and Fedora SPARC). I have no idea if Solaris
+ supports Software RAID or not...
+
+ Along with the code change, I wrote a test case that checks if the
+ RAID partition type is supported on sun disk labels.
+
+ * libparted/labels/sun.c [_SunPartitionData] (is_raid): New member.
+ (sun_read): Initialize the ->is_raid member.
+ (sun_partition_new): Clear is_raid, like all the other members.
+ (sun_partition_duplicate): Propagate the is_raid member.
+ (sun_partition_set_system): Make sun_data->type reflect is_raid.
+ (sun_partition_set_flag): Also initialize ->is_raid.
+ (sun_partition_get_flag): Handle PED_PARTITION_RAID.
+ (sun_partition_is_flag_available): Likewise.
+ * tests/t4000-sun-raid-type.sh: New file.
+ * tests/Makefile.am (TESTS): Add t4000-sun-raid-type.sh.
+
+2008-10-10 Harald Welte <laforge@gnumonks.org>
+
+ Add support for SD/MMC storage cards on Linux
+ This patch adds a new SDMMC device type to represent SD/MMC
+ cards. There is nothing special about handling those devices,
+ they are just standard block devices with different names.
+
+ They use device major ID 179 and are usually called
+ /dev/mmcblkN (where N is the card number) and the individual partitions
+ /dev/mmcblkNpM (where M is the partition number).
+
+ This patch was developed as part of an effort to make debian-installer
+ support installation of Debian GNU/Linux on SD/MMC cards, as boot-from-SD
+ is becoming a feature seen in mobile x86 devices.
+
+2008-08-20 Petr Uzel <puzel@foxbat.suse.cz>
+
+ Remove obsolete 'i' from parted optstring (--interactive/-i option is not supported anymore)
+
+2008-08-19 Petr Uzel <petr.uzel@suse.cz>
+
+ doc: remove obsolete --interactive (-i) option descriptions
+
+2008-08-07 Jim Meyering <meyering@redhat.com>
+
+ update build/test infrastructure from coreutils
+ * bootstrap: Update from coreutils.
+ * maint.mk: Likewise.
+
+2008-08-07 Soren Hansen <soren@canonical.com>
+
+ add a test for recently introduced loop-dev-based bug
+ This also checks for the current behavior when trying to partition
+ a device that may not be partitioned, like loop devices.
+ * tests/Makefile.am (TESTS): Add tests/t8000-loop.sh.
+ * tests/t8000-loop.sh: New file. Test for the above fix.
+
+2008-08-07 Jim Meyering <meyering@redhat.com>
+
+ don't exhaust virtual memory for mklabel on a loopback device
+ Report and analysis by Soren Hansen <soren@canonical.com>:
+ """When ped_disk_get_last_partition_num(disk) fails (which it does if
+ disk is a loopback device), it returns -1. This in turn would cause
+ _disk_sync_part_table and _dm_reread_part_table to attempt to malloc
+ a sizeof(int)*-1, which instantly causes a 'Fatal: Out of memory'."""
+ * libparted/arch/linux.c (_disk_sync_part_table): Handle the case in
+ which ped_disk_get_last_partition_num(disk) fails.
+ (_dm_reread_part_table): Likewise.
+ This bug was introduced by f6bd20573e3ecfb63f62d88c52a0870fb8851b59.
+
+2008-07-30 Jim Meyering <meyering@redhat.com>
+
+ linux.c: plug a leak
+ * libparted/arch/linux.c (_disk_sync_part_table): Free local, "rets".
+ Reported by Mike Hwang <Mike.Hwang@iqstor.com.cn>.
+
+2008-07-27 Jim Meyering <meyering@redhat.com>
+
+ don't call ped_partition_new with "0" as 2nd arg
+ Instead, use an explicit and equivalent PED_PARTITION_NORMAL.
+ * libparted/labels/bsd.c (bsd_read):
+ * libparted/labels/dasd.c (dasd_read):
+ * libparted/labels/gpt.c (_parse_part_entry):
+ * libparted/labels/loop.c (loop_read):
+ * libparted/labels/mac.c (_disk_add_part_map_entry)
+ (_rawpart_analyse):
+ * libparted/labels/pc98.c (read_table):
+ * libparted/labels/rdb.c (amiga_read):
+ * libparted/labels/sun.c (sun_read):
+
+2008-07-18 Joel Andres Granados <jgranado@redhat.com>
+
+ Document the lack of support for ext3 filesystems.
+ - doc/C/parted.8: Add a message in the KNOWN ISSUES section that
+ describes the lack of support for ext3. Take out some references
+ that were contained in the man page.
+ - doc/parted.texi: Do the same as above to the info page.
+
+2008-07-08 Jim Meyering <meyering@redhat.com>
+
+ test for the s/PED_MAX/PED_MIN/ partition-number fix
+ * tests/t4200-partprobe.sh: New file. Test for today's fix.
+ * tests/Makefile.am (TESTS): Add t4200-partprobe.sh.
+ (init.sh): Now that we test partprobe,
+ add $(abs_top_builddir)/partprobe to PATH.
+ * tests/test-lib.sh: Honor new dvhtool_required_ variable.
+ Based on a reproducer from Petr Uzel.
+
+ fix computation of largest partition number
+ * libparted/arch/linux.c (_disk_sync_part_table): s/PED_MAX/PED_MIN/
+ (_dm_reread_part_table): Likewise.
+ Patch by Petr Uzel (tiny change).
+ Details in http://thread.gmane.org/gmane.comp.gnu.parted.devel/2213
+
+2008-07-07 Jim Meyering <meyering@redhat.com>
+
+ fix to allow compilation with gcc's -fno-common option
+ * libparted/fs/fat/count.h (fat16): Remove bogus (unused)
+ globally-scoped variable declaration.
+
+ * maint.mk: update from coreutils
+
+ * parted/parted.c (options): Remove redundant "const" in declaration.
+
+2008-06-26 Jim Meyering <meyering@redhat.com>
+
+ * libparted/fs/fat/table.c: Remove a few trailing blanks.
+
+ avoid a warning from gcc -Wshadow
+ * libparted/fs/fat/table.c (fat_table_duplicate): Rename local
+ s/dup/dup_ft/ to avoid shadowing the function.
+
+2008-06-24 Jim Meyering <meyering@redhat.com>
+
+ adjust for const-correctness
+ * libparted/arch/linux.c (_blkpg_add_partition): Make the "part"
+ parameter "const".
+ (_disk_sync_part_table): Make local "part" const.
+
+ * libparted/arch/linux.c (_disk_sync_part_table): Plug an obvious leak.
+
+ * configure.ac: Remove useless 'exit's after AC_MSG_ERROR.
+
+2008-06-20 Jim Meyering <meyering@redhat.com>
+
+ tests: avoid test failure due to added newline in diagnostic
+ * tests/t3000-constraints.sh: Adapt to changed output syntax.
+
+ tests: factor out duplication
+ * tests/t7000-scripting.sh: Use a loop rather than
+ two copies of each of 7 tests.
+
+ tests: use consistent output normalization code
+ * tests/t7000-scripting.sh: same as in e.g., t3000-constraints.sh.
+ Use the same name for all output files, "out", not "out1".
+
+ tests: avoid failure when run as non-root
+ * tests/t7000-scripting.sh: and avoid some duplication
+
+2008-06-20 Joel Andres Granados <jgranado@redhat.com>
+
+ Fix the script mode for mkpart and mkpartfs.
+ To: parted-devel@lists.alioth.debian.org
+ Date: Fri, 20 Jun 2008 11:37:41 +0200
+ X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on rho.meyering.net
+ X-Spam-Level:
+ X-Spam-Status: No, score=-13.8 required=3.2 tests=AWL,BAYES_00,
+ RCVD_IN_DNSWL_LOW autolearn=ham version=3.2.5
+
+ In scripting mode, parted used to ask the user for confirmation
+ when the values to be used where not the ones specified by the user.
+ * parted/parted.c (do_mkpart, do_mkpartfs): if opt_script_mode is.
+ set fail, if it's not, warn and ask for intervention.
+ * tests/Makefile.am : include the new test in the TEST list.
+ * tests/t7000-scripting.sh : Distribute new test case.
+
+2008-06-10 Guido Guenther <agx@sigxcpu.org>
+
+ move new dmtype member from PedDevice to LinuxSpecific,
+ since this is a Linux-only feature.
+ * include/parted/device.h (struct _PedDevice) [dmtype]: Remove member.
+ * include/parted/linux.h (struct _LinuxSpecific) [dmtype]: Add member.
+ * libparted/arch/linux.c (_dm_maptype, linux_new, linux_destroy): Update uses.
+
+2008-06-08 Jim Meyering <meyering@redhat.com>
+
+ adjust tests here (libparted/tests/), as done for tests/
+ * libparted/tests/Makefile.am (init.sh): Don't emit code to
+ source test-lib.sh.
+ * libparted/tests/t1000-label.sh: Source test-lib.sh, not init.sh.
+ * libparted/tests/t2000-disk.sh: Likewise.
+
+ fix compile/link problems in libparted/tests
+ Since I didn't have check-devel installed where I'd been testing,
+ nothing was built in libparted/tests/.
+ * libparted/tests/label.c (main): Add argc and argv declarations.
+ * libparted/tests/disk.c (main): Likewise.
+ Reported by Frodo Baggins <frodo.drogo@gmail.com>.
+ * libparted/tests/Makefile.am (LDADD, AM_CPPFLAGS): Define, to compile
+ and link against gnulib-provided functions.
+ (label_CFLAGS, label_LDADD, disk_LDADD, etc.): Adjust.
+ (TESTS_ENVIRONMENT): Define, to propagate top_srcdir to test scripts.
+
+2008-06-06 Jim Meyering <meyering@redhat.com>
+
+ skip device-mapper test if support is not enabled
+ * configure.ac: Revamp test; also set ENABLE_DEVICE_MAPPER shell var.
+ * tests/Makefile.am (ENABLE_DEVICE_MAPPER): Propagate to tests.
+ * tests/t6000-dm.sh: Skip all tests w/o device-mapper support.
+
+ device mapper clean-up: remove #ifdefs, plug a leak
+ * libparted/arch/linux.c: Remove some #ifdef ENABLE_DEVICE_MAPPER
+ directives.
+ * include/parted/device.h (struct _PedDevice) [dmtype]: Likewise.
+ * libparted/arch/linux.c (linux_new): Plug a leak.
+
+ * tests/Makefile.am (EXTRA_DIST): Add lvm-utils.sh.
+
+ reflect renaming: dm-utils.sh -> lvm-utils.sh
+ * tests/test-lib.sh: s/dm-utils.sh/lvm-utils.sh/
+ * tests/dm-utils.sh: Rename this...
+ * tests/lvm-utils.sh: ...to this.
+
+ protect against bogus absolute srcdir name
+ * test-lib.sh: add quotes to protect against $abs_top_srcdir containing
+ shell meta-characters
+
+ * test-lib.sh: Guard against bogus $device_mapper_required value in env.
+
+ sync from lvm-utils.sh
+
+ source test-lib.sh (not init.sh) from each test
+ * tests/test-lib.sh: Source init.sh early.
+ Use $test_dir_rand_, as done in LVM test framework.
+ Source lvm-utils.sh _after_ defining test_dir_rand_.
+ * tests/Makefile.am (init.sh): Don't emit code to source test-lib.sh,
+ since each test now sources that file directly.
+ * tests/t0000-basic.sh: Source test-lib.sh, not init.sh.
+ Default srcdir=. in each test, so it may be run independently of "make".
+ * tests/t0100-print.sh: Likewise.
+ * tests/t1000-mkpartfs.sh: Likewise.
+ * tests/t1100-busy-label.sh: Likewise.
+ * tests/t1500-small-ext2.sh: Likewise.
+ * tests/t2000-mkfs.sh: Likewise.
+ * tests/t2100-mkswap.sh: Likewise.
+ * tests/t2200-dos-label-recog.sh: Likewise.
+ * tests/t3000-constraints.sh: Likewise.
+ * tests/t3100-resize-ext2-partion.sh: Likewise.
+ * tests/t4100-dvh-partition-limits.sh: Likewise.
+ * tests/t4100-msdos-partition-limits.sh: Likewise.
+ * tests/t5000-tags.sh: Likewise.
+ * tests/t6000-dm.sh: Likewise.
+ * tests/Makefile.am (TESTS_ENVIRONMENT): Pass srcdir to tests.
+
+ * dm-utils: Restore uses of $test_dir_rand_.
+
+ * libparted/arch/linux.c (linux_new): Initialize new member.
+
+ * libparted/arch/linux.c (_dm_maptype): Add space after "if".
+
+2008-06-06 Guido Günther <agx@sigxcpu.org>
+
+ honor DM_DEV_DIR envvar
+ * libparted/arch/linux.c (_dm_maptype): Make libparted handle $DM_DEV_DIR
+ the same way dmsetup does.
+
+ add basic device mapper tests
+ * tests/dm-utils.sh: New file. Copied from lvm's tests/lvm-utils.sh.
+ * tests/t6000-dm.sh: New file.
+ * tests/test-lib.sh: FIXME
+ * tests/Makefile.am: FIXME
+
+2008-06-06 Jim Meyering <meyering@redhat.com>
+
+ avoid useless initialization
+
+2008-06-05 Guido Guenther <agx@sigxcpu.org>
+
+ linux device-mapper map type detection
+ detect the type of the device map and add it to the displayed type
+ information
+
+2008-06-05 Jim Meyering <meyering@redhat.com>
+
+ use gnulib's mktempd module/script
+ * bootstrap.conf (gnulib_modules): Add mktempd.
+ * tests/test-lib.sh: Use build-aux/mktempd, not mkdtemp.
+ * tests/mkdtemp: Remove file.
+ * tests/Makefile.am (EXTRA_DIST): Remove mkdtemp.
+
+ use gnulib's progname module
+ * bootstrap.conf (gnulib_modules): Add progname.
+ * debug/clearfat/clearfat.c: Include "progname.h".
+ (main): Call set_program_name rather than setting program_name.
+ * parted/parted.c: Likewise.
+ * partprobe/partprobe.c: Likewise.
+ * libparted/tests/disk.c: Include "progname.h" and call
+ set_program_name even though program_name isn't used, yet.
+ * libparted/tests/label.c: Likewise.
+
+ * maint.mk: Merge from coreutils.
+
+2008-05-31 Jim Meyering <meyering@redhat.com>
+
+ gpt_write: fix a write-uninitialized error
+ * libparted/labels/gpt.c (gpt_partition_new):
+ ==32570== Syscall param write(buf) points to uninitialised byte(s)
+ ==32570== at 0x36CF8D6540: __write_nocancel (in /lib64/libc-2.8.so)
+ ==32570== by 0x443D29: linux_write (linux.c:1642)
+ ==32570== by 0x414E4E: ped_device_write (device.c:370)
+ ==32570== by 0x4404CE: gpt_write (gpt.c:1091)
+ ==32570== by 0x418F16: ped_disk_commit_to_dev (disk.c:486)
+ ==32570== by 0x418F5C: ped_disk_commit (disk.c:509)
+ ==32570== by 0x40BAD6: do_mkpartfs (parted.c:981)
+ ==32570== by 0x40A035: command_run (command.c:139)
+ ==32570== by 0x412150: non_interactive_mode (ui.c:1540)
+ ==32570== by 0x40EE83: main (parted.c:2487)
+ ==32570== Address 0x501b63a is 58 bytes inside a block of size 16,384 alloc'd
+ ==32570== at 0x4A04FC0: memalign (vg_replace_malloc.c:460)
+ ==32570== by 0x4A0507A: posix_memalign (vg_replace_malloc.c:569)
+ ==32570== by 0x443CED: linux_write (linux.c:1637)
+ ==32570== by 0x414E4E: ped_device_write (device.c:370)
+ ==32570== by 0x4404CE: gpt_write (gpt.c:1091)
+ ==32570== by 0x418F16: ped_disk_commit_to_dev (disk.c:486)
+ ==32570== by 0x418F5C: ped_disk_commit (disk.c:509)
+ ==32570== by 0x40BAD6: do_mkpartfs (parted.c:981)
+ ==32570== by 0x40A035: command_run (command.c:139)
+ ==32570== by 0x412150: non_interactive_mode (ui.c:1540)
+ ==32570== by 0x40EE83: main (parted.c:2487)
+
+ reproduce with this:
+ dev=f
+ dd if=/dev/null of=$dev bs=1 seek=30M 2>/dev/null
+ ./parted -s $dev mklabel gpt
+ valgrind ./parted -s $dev mkpartfs primary ext2 0 16795000B
+
+2008-05-31 Jim Meyering <meyering@redhat.com>
+
+ plug leaks in do_print
+ * parted/parted.c (do_print):
+ 25 bytes in 8 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416E67: ped_malloc (libparted.c:234)
+ by 0x41751F: ped_strdup (unit.c:179)
+ by 0x417778: ped_unit_format_custom_byte (unit.c:220)
+ by 0x417A90: ped_unit_format (unit.c:297)
+ by 0x40CD85: do_print (parted.c:1517)
+ by 0x40A035: command_run (command.c:139)
+ by 0x41210C: non_interactive_mode (ui.c:1540)
+ by 0x40EE41: main (parted.c:2482)
+
+ 10 bytes in 4 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416E9B: ped_malloc (libparted.c:234)
+ by 0x417553: ped_strdup (unit.c:179)
+ by 0x4177AC: ped_unit_format_custom_byte (unit.c:220)
+ by 0x417AC4: ped_unit_format (unit.c:297)
+ by 0x40CE34: do_print (parted.c:1527)
+ by 0x40A035: command_run (command.c:139)
+ by 0x412140: non_interactive_mode (ui.c:1540)
+ by 0x40EE75: main (parted.c:2485)
+
+2008-05-31 Jim Meyering <meyering@redhat.com>
+
+ plug two more leaks in gpt_write
+ * libparted/labels/gpt.c (gpt_write):
+ 1,024 bytes in 2 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416F1B: ped_malloc (libparted.c:270)
+ by 0x43E967: pth_get_raw (gpt.c:334)
+ by 0x44039D: gpt_write (gpt.c:1067)
+ by 0x418F9A: ped_disk_commit_to_dev (disk.c:486)
+ by 0x418FE0: ped_disk_commit (disk.c:509)
+ by 0x40AF7A: do_mklabel (parted.c:622)
+ by 0x40A055: command_run (command.c:139)
+ by 0x4121A4: non_interactive_mode (ui.c:1540)
+
+ plug a blatant leak in gpt_write
+ * libparted/labels/gpt.c (gpt_write):
+ 1,536 bytes in 3 blocks are definitely lost in loss record 9 of 11
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416F1B: ped_malloc (libparted.c:270)
+ by 0x44021F: gpt_write (gpt.c:1036)
+ by 0x418F9A: ped_disk_commit_to_dev (disk.c:486)
+ by 0x418FE0: ped_disk_commit (disk.c:509)
+ by 0x40AF7A: do_mklabel (parted.c:622)
+ by 0x40A055: command_run (command.c:139)
+ by 0x4121A4: non_interactive_mode (ui.c:1540)
+ by 0x40EED8: main (parted.c:2499)
+
+ plug leaks in gpt_write
+ * libparted/labels/gpt.c (gpt_write):
+ 6,674 bytes in 11 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416F1B: ped_malloc (libparted.c:270)
+ by 0x43E76D: pth_new (gpt.c:289)
+ by 0x43E7E2: pth_new_zeroed (gpt.c:298)
+ by 0x43FF61: _generate_header (gpt.c:970)
+ by 0x440434: gpt_write (gpt.c:1074)
+ by 0x418F9A: ped_disk_commit_to_dev (disk.c:486)
+ by 0x418FE0: ped_disk_commit (disk.c:509)
+ by 0x40BB35: do_mkpartfs (parted.c:990)
+
+ plug a leak in gpt_read
+ * libparted/labels/gpt.c (gpt_read):
+ 7,195 bytes in 13 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416F1B: ped_malloc (libparted.c:270)
+ by 0x43E759: pth_new (gpt.c:287)
+ by 0x43E83C: pth_new_from_raw (gpt.c:310)
+ by 0x43F329: _read_header (gpt.c:627)
+ by 0x43FB31: gpt_read (gpt.c:826)
+ by 0x41882B: ped_disk_new (disk.c:210)
+ by 0x40B773: do_mkpartfs (parted.c:884)
+ by 0x40A055: command_run (command.c:139)
+
+2008-05-30 Jim Meyering <meyering@redhat.com>
+
+ plug leak in ped_device_get_constraint
+ 496 (208 direct, 288 indirect) bytes in 5 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416EDF: ped_malloc (libparted.c:270)
+ by 0x41CB40: ped_geometry_new (geom.c:79)
+ by 0x415167: ped_device_get_constraint (device.c:438)
+ by 0x40B928: do_mkpartfs (parted.c:927)
+ by 0x40A055: command_run (command.c:139)
+ by 0x41217C: non_interactive_mode (ui.c:1540)
+ by 0x40EEB1: main (parted.c:2497)
+
+2008-05-30 Jim Meyering <meyering@redhat.com>
+
+ plug leaks in parted.c
+ 432 (144 direct, 288 indirect) bytes in 3 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416EF3: ped_malloc (libparted.c:270)
+ by 0x41D9D2: ped_constraint_new (constraint.c:100)
+ by 0x4151A4: ped_device_get_constraint (device.c:439)
+ by 0x40B928: do_mkpartfs (parted.c:927)
+ by 0x40A055: command_run (command.c:139)
+ by 0x41217C: non_interactive_mode (ui.c:1540)
+ by 0x40EEB1: main (parted.c:2497)
+
+ And another:
+
+ * parted/parted.c (do_mkpartfs): Here's one of the signatures:
+ 288 (96 direct, 192 indirect) bytes in 2 blocks are definitely lost...
+ at 0x4A0739E: malloc (vg_replace_malloc.c:207)
+ by 0x416EF3: ped_malloc (libparted.c:270)
+ by 0x41D9D2: ped_constraint_new (constraint.c:100)
+ by 0x41DE2C: ped_constraint_intersect (constraint.c:232)
+ by 0x40B971: do_mkpartfs (parted.c:930)
+ by 0x40A055: command_run (command.c:139)
+ by 0x41217C: non_interactive_mode (ui.c:1540)
+ by 0x40EEB1: main (parted.c:2497)
+
+ * parted/parted.c (do_mkpart): Likewise for this function,
+ since do_mkpart is nearly identical to do_mkpartfs.
+
+2008-05-29 Jim Meyering <meyering@redhat.com>
+
+ plug a leak in ped_device_get_constraint
+ * libparted/device.c (ped_device_get_constraint):
+ 512 (224 direct, 288 indirect) bytes in 6 blocks are definitely lost...
+ malloc (vg_replace_malloc.c:207)
+ ped_malloc (libparted.c:270)
+ ped_alignment_new (natmath.c:153)
+ ped_device_get_constraint (device.c:432)
+ do_mkpartfs (parted.c:927)
+ command_run (command.c:139)
+ non_interactive_mode (ui.c:1540)
+ main (parted.c:2497)
+
+2008-05-29 Colin Watson <cjwatson@ubuntu.com>
+
+ Avoid "comparison between signed and unsigned" warning from gcc.
+ * libparted/fs/fat/traverse.c (fat_dir_entry_get_name): Change
+ type of index from int to size_t.
+
+2008-05-29 Jim Meyering <meyering@redhat.com>
+
+ remove more useless "if" tests before free
+ * libparted/arch/gnu.c (gnu_sync):
+ * libparted/cs/natmath.c (ped_alignment_destroy):
+ * libparted/exception.c (ped_exception_catch):
+ * libparted/labels/dos.c (msdos_partition_destroy):
+ * parted/parted.c (do_mkpart, do_mkpartfs):
+
+ Use free, not ped_free.
+ * libparted/libparted.c (ped_free): Remove function.
+ [DEBUG] (_check_dodgy_pointer): Remove function.
+ Global substitution:
+ perl -pi -e 's/\bped_free\b/free/g' $(lid -knone ped_free)
+
+ * maint.mk: Update from coreutils.
+
+ test for improved DOS-partition-table recognition
+ * tests/t2200-dos-label-recog.sh: New file.
+ * tests/Makefile.am (TESTS): Add t2200-dos-label-recog.sh.
+
+2008-05-29 Colin Watson <cjwatson@ubuntu.com>
+
+ bug fix: improve DOS partition table recognition
+ * libparted/labels/dos.c (msdos_probe): Make Parted's partition-table
+ recognition code use the same technique that is used by the Linux
+ kernel and by util-linux's fdisk. I.e., accept it whenever all four
+ boot indicators are 0 or 0x80, rather than using the FAT file system-
+ recognizing heuristic.
+ More analysis here:
+ http://thread.gmane.org/gmane.comp.gnu.parted.devel/2142/focus=2154
+ Reported by David Balažic here:
+ https://bugs.launchpad.net/ubuntu/+source/parted/+bug/232175
+ http://thread.gmane.org/gmane.comp.gnu.parted.devel/2142
+
+2008-05-29 Jim Meyering <meyering@redhat.com>
+
+ avoid const-related compiler warnings
+ * libparted/arch/linux.c (init_dasd, init_generic): Likewise.
+ * libparted/exception.c (type_strings, option_strings): Likewise.
+ (ped_exception_get_type_string, ped_exception_get_option_string):
+ * libparted/fs/ext2/ext2_block_relocator.c (ext2_block_relocator_flush):
+ * libparted/fs/ext2/ext2_mkfs.c (_set_dirent): Likewise.
+ * libparted/fs/fat/resize.c (ask_type): Likewise.
+ * libparted/fs/fat/traverse.c (fat_traverse_begin): Likewise.
+ * libparted/fs/fat/traverse.h (buffer_size): Likewise.
+ * libparted/labels/mac.c (_rawpart_cmp_type, _rawpart_cmp_name):
+ (_rawpart_is_partition_map, _rawpart_is_boot, _rawpart_is_driver):
+ (_rawpart_has_driver): Likewise.
+ * parted/parted.c (options, options_help, number_msg): Likewise.
+ (label_type_msg_start, flag_msg_start, unit_msg_start): Likewise.
+ (part_type_msg, fs_type_msg_start, start_end_msg, state_msg): Likewise.
+ (device_msg, name_msg, resize_msg_start, copyright_msg, do_print):
+ * parted/ui.c (prog_name, banner_msg, usage_msg, bug_msg): Likewise.
+ (screen_width): Likewise.
+ * parted/ui.h (prog_name): Likewise.
+
+2008-05-06 Otavio Salvador <otavio@ossystems.com.br>
+
+ properly test for __s390__ and __s390x__ macros to disable O_DIRECT on that
+
+2008-04-30 Jim Meyering <meyering@redhat.com>
+
+ Remove useless "if" tests before free.
+ * libparted/arch/linux.c (_dm_add_partition): Remove useless test.
+ * libparted/labels/fdasd.c (fdasd_cleanup): Likewise.
+ * m4/o-direct.m4 (parted_FIND_USABLE_TEST_DIR): Likewise.
+ * parted/table.c (table_destroy): Likewise.
+
+ Pass NEWS-checking part of "make syntax-check".
+ * NEWS: Tweak format so it passes.
+ * cfg.mk (old_NEWS_hash): Update MD5 checksum.
+
+ Exempt a build-related script from the copyright check.
+ * .x-sc_GPL_version: New file.
+ * Makefile.am (EXTRA_DIST): Add .x-sc_GPL_version.
+
+ Turn off strcmp/STREQ check.
+ * cfg.mk (local-checks-to-skip): Add sc_prohibit_strcmp.
+
+ * bootstrap.conf (gnulib_modules): Add useless-if-before-free.
+
+ * doc/parted.texi: Update copyright dates.
+
+ more updates from gnulib and coreutils
+ * bootstrap.conf (gnulib_modules): Add gitlog-to-changelog.
+ * .gitignore: Add .tarball-version
+ * Makefile.am (EXTRA_DIST): Add .version and .prev-version.
+ (dist-hook): Update rule.
+ (gen-ChangeLog): New rule.
+ * maint.mk: Rename from Makefile.maint and update from coreutils.
+ * cfg.mk: Rename from Makefile.cfg and update from coreutils.
+
+ use gnulib's gnumakefile module
+ * GNUmakefile: Remove from version control.
+ * bootstrap.conf (gnulib_modules): Add gnumakefile.
+ * .gitignore: Add GNUmakefile
+
+2008-04-29 Matt Davis <mattdavis9@gmail.com>
+
+ Corrected a few memory leaks from unallocated ped_unit_format calls.
+ Deallocated memory in do_print() allocated by ped_unit_format calls.
+
+ Corrected memory leak when displaying partition flags.
+ Deallocated memory allocated by partition_print_flags()
+
+2008-04-26 Matt Davis <mattdavis9@gmail.com>
+
+ Corrected a small memory leak when displaying partition information
+ Deallocated a very small memory allocation that occurs in a for loop.
+ This occurred during output of partition numbers.
+
+2008-04-26 Otavio Salvador <otavio@ossystems.com.br>
+
+ do not loop in case message exception has no message
+ The exception handler was looping when the exception had no message.
+
+2008-04-24 Otavio Salvador <otavio@ossystems.com.br>
+
+ fix memory leak in exception handler
+ The exception handler wasn't freeing the memory when the allocated
+ space wasn't enough to store the error message thus leaving unmanaged
+ memory around.
+
+2008-04-12 Robert Millan <rmh@aybabtu.com>
+
+ Add support for GRUB / BIOS partition in GPT.
+
+2008-04-07 Bastian Blank <waldi@waldi.track.rz.uni-augsburg.de>
+
+ Fix syntax error.
+
+ Use host_cpu for s390 check.
+
+2008-03-30 Jim Meyering <meyering@redhat.com>
+
+ Fix a typo: s/to defragmenting/to defragment/, Remove trailing blanks.
+
+2008-02-03 Jim Meyering <meyering@redhat.com>
+
+ Don't write into line[-1] when line starts with a NUL byte.
+ * parted/ui.c (_readline): Check strlen first.
+
+ dvh.c (dvh_partition_set_name): Include partition name in diagnostic.
+
+ Enforce inherent limitations of dos and dvh partition table formats.
+ * libparted/disk.c (_check_partition): Enforce the 32-bit limitation
+ on a partition's starting sector number and length (in sectors).
+ With the usual 512-byte sector size, this limits the maximum
+ partition size to just under 2TB.
+ (_partition_max_start, _partition_max_len): New functions.
+ (_check_partition): Use them.
+ * tests/t4100-msdos-partition-limits.sh: New file. Test vs. msdos.
+ * tests/t4100-dvh-partition-limits.sh: New file. Test vs. dvh.
+ * tests/Makefile.am (TESTS): Add t4100-msdos-partition-limits.sh
+ and t4100-dvh-partition-limits.sh.
+
+2008-02-02 Jim Meyering <meyering@redhat.com>
+
+ mkpart: Don't require a DVH partition name if it's guaranteed to fail.
+ The mkpart command has an undocumented feature whereby it prompts for
+ (interactive) or requires (-s) a partition name, *regardless* of whether
+ it already knows the partition type (any thing but 'logical') is
+ incompatible with a name.
+
+ At first I was pissed and simply #if-0'd the offending code.
+ But in case someone is actually relying on it, I've relented, and
+ merely remove the prompt/requirement when the partition table type
+ is "dvh" and the type of the partition in question is not "logical".
+
+ * parted/parted.c (do_mkpart):
+
+2008-01-14 Jim Meyering <meyering@redhat.com>
+
+ Avoid new error detected by very latest gcc.
+ * libparted/fs/fat/traverse.c (fat_dir_entry_get_name): Don't reference
+ ->extension[3] via a pointer into the prior ->name[8] struct member.
+ gcc detected the reference beyond end of name[8].
+ Declare first parameter to be "const".
+ * libparted/fs/fat/traverse.c: Update prototype.
+
+ #ifdef function definitions to match uses, to avoid compiler warnings.
+ * parted/ui.c (mask_signal, s_sigint_handler, s_sigsegv_handler)
+ (s_sigfpe_handler):
+
+ Change two "extern inline" functions to "static inline".
+ * include/parted/natmath.h (ped_div_round_up): This makes
+ it compilable with bleeding-edge gcc.
+ (ped_div_round_to_nearest): Likewise.
+ * libparted/cs/natmath.c (ped_div_round_up, ped_div_round_to_nearest):
+ Remove definitions.
+
+2007-12-18 Jim Meyering <meyering@redhat.com>
+
+ Make inter-release --version output more useful.
+ Now, each unofficial build has a version "number" like 1.8.8.1.19-58dd,
+ which indicates that it is built using the 19th change set
+ (in _some_ repository) following the "v1.8.8.1" tag, and that 58dd
+ is a prefix of the commit SHA1.
+ * configure.ac: Run it to set the version.
+ (PED_MAJOR_VERSION): Derive from $PACKAGE_VERSION.
+ (PED_MINOR_VERSION): Likewise.
+ (PED_MICRO_VERSION): Likewise.
+ Remove the test that would ensure $PACKAGE_VERSION != $PED_VERSION,
+ now that the latter is derived from the former.
+ * Makefile.am (dist-hook): Arrange so that .version appears only
+ in distribution tarballs, never in a checked-out repository.
+ * .gitignore: Add .version here, too. Just in case.
+ * lib/.gitignore: Remove now-generated (by bootstrap) file.
+ * build-aux/.gitignore: Likewise.
+
+ Ensure that $(VERSION) is up to date for dist-related targets.
+ * GNUmakefile: Arrange to rerun autoconf, if the version reported by
+ git-version-gen doesn't match $(VERSION), but only for dist targets.
+
+2007-12-18 Jim Meyering <meyering@redhat.com>
+
+ doc/pt_BR/partprobe.8.pt_BR.po: Remove trailing space in generated file.
+
+ Distribute new file: architecture.h.
+ libparted/Makefile.am (libparted_la_SOURCES): Add architecture.h.
+
+ libparted/architecture.c: Include <config.h>.
+
+2007-12-17 David Cantrell <dcantrell@redhat.com>
+
+ Fix up the ChangeLog generation a bit.
+ We can just take the output of git-log.
+
+2007-12-17 Jim Meyering <meyering@redhat.com>
+
+ Perform ChangeLog-creation here, rather than in bootstrap,
+ so that the next merge will be less likely to clobber this parted-specific bit.
+
+ Mention that we should be able to build with -fno-common.
+
+ * bootstrap: Update from Coreutils, adapting to changes in gnulib.
+ Among them: now gnulib uses git for version control.
+
+ * libparted/tests/disk.c (START_TEST): Remove decl of unused local.
+
+2007-11-07 David Cantrell <dcantrell@redhat.com>
+
+ Add flags for BSD disklabels (needed for Linux on Alpha)
+ Patch from Sergey Tikhonov from the AlphaCore project.
+
+2007-11-06 David Cantrell <dcantrell@redhat.com>
+
+ Add KNOWN ISSUES section
+ Add a KNOWN ISSUES section explaining that ext3 resizing does not work
+ and that you should use resize2fs.
+
+ Always define PED_DEVICE_DM
+ Regardless of compile time options, always define PED_DEVICE_DM.
+
+ Add 'xvd' to the transports array in do_print
+ For the parted print command, add 'xvd' to the transports array so there is
+ a matching string to display when we print a line for Xen virtual block
+ device.
+
+2007-11-03 Otavio Salvador <otavio@ossystems.com.br>
+
+ Move PedArchitecture and ped_set_architecture to private
+ Code that works with libparted isn't suppose to need to change the
+ architecture where it's running and then doesn't make sense to export
+ it.
+
+ Two new files has been create (libparted/architecture.[hc]) that has
+ the PedArchitecture structure and the ped_set_architecture
+ implementation. All changes that were need to get it suported on all
+ currently available architectures has been done too.
+
+2007-11-02 Otavio Salvador <otavio@ossystems.com.br>
+
+ parted/geom.h: move includes to after type definition to avoids dependency
+
+ parted/device.h: move includes to after type definition to avoids dependency
+
+ parted/filesys.h doesn't use stdio.h, parted/disk.h and parted/exception.h
+
+ parted/constraint.h needs parted/geom.h since it uses PedGeometry
+
+ parted/natmath.h needs parted/device.h since it uses PedSector
+
+ libparted/cs/natmath.c: remove inline since it's not supported by GNU99 standard
+
+ parted/device.h needs to include parted/constraint.h since it uses PedConstraint
+
+2007-11-02 Debarshi Ray <rishi@gnu.org>
+
+ Removing unnecessary type-casts and eerie comments.
+
+2007-10-29 Mark Neyhart <mark_n@lfd008.localdomain>
+
+ Added information to message about ext2 incompatible features.
+ Modifed the message about incompatible ext2 features installed to include a
+ list of compatible features and to recommend the usage of tune2fs or
+ debugfs to remove features which are not compatible.
+
+2007-08-31 Otavio Salvador <otavio@ossystems.com.br>
+
+ Really duplicate the disk instead of readd every partition
+ To avoid possible differences between the original disk layout and the
+ duplicated one, a raw copy is done. Has been identified a case[1]
+ where extended partitions had their positions changed due this.
+
+ 1. http://bugs.debian.org/294520
+
+ The recipe[2] to reproduce the problem, on the provided URI, has been
+ used to produced a test and hence be sure it's not forgotten anymore.
+
+ 2. http://bugs.debian.org/294520#34
+
+ The fix has been produced by Samuel Thibault <samuel.thibault@ens-lyon.org>
+
+2007-08-16 Benno Schulenberg <bensberg@justemail.net>
+
+ Set partprobe's text domain.
+ * partprobe/partprobe.c (main): Set textdomain.
+
+2007-08-14 Jim Meyering <jim@meyering.net>
+
+ Fix mkpart linux-swap bug: would use 0x83 rather than 0x82
+ * libparted/labels/bsd.c (bsd_partition_set_system): Include "misc.h".
+ Use is_linux_swap to test whether the type string matches.
+ * libparted/labels/dasd.c (dasd_read, dasd_partition_set_system): Likewise.
+ * libparted/labels/dos.c (msdos_partition_set_system): Likewise.
+ * libparted/labels/mac.c (mac_partition_set_system): Likewise.
+ * libparted/labels/rdb.c (amiga_partition_set_system): Likewise.
+ * libparted/labels/sun.c (sun_partition_set_system): Likewise.
+ Based on a patch by Kenneth MacDonald, from
+ <http://lists.gnu.org/archive/html/bug-parted/2007-07/msg00012.html>.
+ * libparted/labels/misc.h (is_linux_swap): New function/file.
+ * libparted/labels/Makefile.am (liblabels_la_SOURCES): Add misc.h.
+ * tests/t2100-mkswap.sh: New file, test for the above fix.
+ * tests/Makefile.am (TESTS): Add t2100-mkswap.sh.
+
+2007-08-14 Jim Meyering <jim@meyering.net>
+
+ Don't try to avoid "free (x)" when x is NULL.
+ * libparted/arch/linux.c (linux_read):
+ Part of http://git.debian.org/?p=parted/parted.git;a=commitdiff;h=080d3e7078
+ changed this:
+
+ free(diobuf);
+
+ to this:
+
+ if (diobuf)
+ free(diobuf);
+
+ Yet, free doesn't have any problem with NULL.
+ Some very old (non-POSIX) implementations did (like SunOS4),
+ but even for them, gnulib's lib/free.c protects us.
+
+2007-08-14 Jim Meyering <jim@meyering.net>
+
+ Avoid test failure with dash's builtin printf. * tests/t0100-print.sh (msdos_magic): Use more-portable octal escapes, not hexadecimal ones.
+
+2007-08-09 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Sanity check for dev, safety checks on diobuf.
+ Make sure diobuf is NULL before we begin and make sure it isn't NULL when
+ we try to free it. Throw an exception if dev is NULL and we enter this
+ function.
+ (cherry picked from commit be2ace6e8d381fb836647234ac65d34a4a547e31)
+
+ Revert "History with undo and redo capabilities."
+ This reverts commit 3bb8494e1ed5af0a48ad0211c3219e653167854f.
+
+2007-08-08 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ History with undo and redo capabilities.
+ Author: Matt Davis <mattdavis@gmail.com>
+
+ Here is a working version of the history with undo/redo capabilities. The
+ idea here was based on a talk with Otavio Salvador who mentioned the concepts
+ from Vanni Brutto. The idea being to capture all changes and only apply them
+ all at once. This protects the user from performing an unwanted change. What
+ I did was capture all disk modifications that are committed to disk, and put
+ them in a list. The history manager allows the list to be traversed linearly,
+ so that a change can be undone, viewed in parted (print command), or reapplied
+ again. Nothing actually happens to the physical disk until the 'save' command
+ is issued.
+
+ Jim Meyering suggested that the functionality might be useful to libparted
+ thus most of the functionality has been moved there. The stdout displays
+ (printf) are placed in parted.c as the library should not do any output
+ printing on its own.
+
+ Three commands were added:
+ 1) Undo : Undoes a disk modification
+ 2) Redo : Redoes the most recent 'undone' modification
+ 3) Save : Actually commits the list of non-undone modifications to disk
+
+ I feel a bit more testing needs to be done, but I am happy with the results
+ right now.
+
+2007-08-01 Jim Meyering <jim@meyering.net>
+
+ Revert "If we cannot create a new PedDisk for the device we're looking at, return NULL rather than the device path." The reverted change causes almost all tests to fail.
+ This reverts commit a6f86144c0b5fd07c462e256bc7b54095c7b8e7a.
+
+ Revert "Removed unused label (compiler warning)." The label *is* used.
+ This reverts commit f4bc90ac22de605ad927d2d85ba468a16bf55ae7.
+
+2007-07-31 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Probe for all device-mapper devices.
+ Add _dm_probe_all() from Debian and patch linux_probe_all() to probe for
+ device-mapper devices after probing for standard devices.
+ (cherry picked from commit 609b7ae6d274e479027bb46c4bd10227cd921803)
+
+ Add the PED_DEVICE_XVD device type for Xen virtual block devices. (cherry picked from commit af4bea2ac854343609f3e6688bedd727ddf76ae6)
+
+ Detect Xen virtual block devices and identify them as such. (cherry picked from commit 64861efcaae95f605614d5e4c6d9c35c5d5712d7)
+
+ If we cannot create a new PedDisk for the device we're looking at, return NULL rather than the device path. (cherry picked from commit 865ea3d3f2eb7918b64a00825dfa44e05651e2ad)
+
+ When reading the DASD disk label, look at the partition flags as well as what is on the actual partition using ped_file_system_probe(). This avoids flags being set for partitions when they shouldn't be. (cherry picked from commit dfafc45a3775cc92d3cd89c9b35926cab23db512)
+
+ Removed unused label (compiler warning). (cherry picked from commit b43bda3134059cdacb13e1a4d0a0bee8a543cfb0)
+
+2007-07-26 Otavio Salvador <otavio@ossystems.com.br>
+
+ Fix bootstrap script to support the new translationproject html files
+
+2007-07-23 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Updated GPL license boilerplate.
+
+ Updated COPYING file to the GNU General Public License version 3. Updated boilerplate GPL text to reference version 3 of the license.
+
+2007-07-10 Jim Meyering <jim@meyering.net>
+
+ Flip the switch (expected-failure -> expected-success) in tests/t3100- resize-ext2-partion.sh, now that this bug is fixed.
+
+2007-07-10 Flavio Leitner <flavio.leitner@gmail.com>
+
+ Fix block state checking for realocated blocks
+ A busy block should be realocated and it's correct in
+ ext2_block_relocator_mark(), but not in ext2_metadata_push().
+
+2007-07-10 Flavio Leitner <flavio.leitner@gmail.com>
+
+ Fix block number used when checking for state
+ Hi there,
+
+ The ext2_bread() returns a descriptor containing a
+ pointer ->data representing the contents of 1 block.
+
+ In ext2_block_relocate_grow(), it reads the block bitmap from
+ a group descriptor representing a range of blocks:
+ bh = ext2_bread(fs, EXT2_GROUP_BLOCK_BITMAP(fs->gd[i]));
+
+ Then it does:
+ k = EXT2_GROUP_INODE_TABLE(fs->gd[i]) + fs->inodeblocks + j;
+ k is the absolute block number and then checks the state doing:
+ if (bh->data[k>>3] & _bitmap[k&7])
+
+ The k should be the offset inside of group descriptor and not
+ the absolute block number. Example:
+ . Block bitmap represents 512 blocks
+ . Block absolute number is 1023.
+
+ GrpDesc = Block absolute number / block bitmap size = 1
+ bh = ext2_bread(fs, EXT2_GROUP_BLOCK_BITMAP(fs->gd[GrpDesc]))
+ bh->data[] contains a bitmap of 512 blocks from 512-1024
+ relative = absolute block number % block bitmap size
+ relative = 1023/512 = 511
+
+ The block state is in bitmap bh->data[relative>>3] & ...
+
+2007-07-10 Michael Brennan <brennan.brisad@gmail.com>
+
+ Fix syntax error and LIBS problem in configure.ac
+ Make sure LIBS doesn't contain libraries that will prevent
+ successful compilations after libreadline has been tested.
+ A trailing comma generated a syntax error in the configure script.
+
+2007-07-10 Matthew S. Harris <mharris312@gmail.com>
+
+ More correct handling of the HeaderSize field in GPT labels
+ - Use the HeaderSize field value when determining how many bytes to
+ compute the CRC over.
+
+ - Don't abort if the HeaderSize field value is bigger than our struct,
+ since more fields may be defined in the future.
+
+2007-07-06 Jim Meyering <jim@meyering.net>
+
+ Don't let the automatically-generated ChangeLog cause "make dist" failure. * Makefile.cfg (local-checks-to-skip): Add sc_changelog.
+
+ Let "make distcheck" pass once again. * parted/strlist.c (str_list_alloc): Remove unnecessary cast of xmalloc return value.
+
+2007-07-06 Michael Brennan <brennan.brisad@gmail.com>
+
+ Fix a problem where a partial read would not be handled correctly; also change the status variable to ssize_t.
+
+2007-07-03 Jim Meyering <jim@meyering.net>
+
+ Don't include config.h from internal headers. This avoids redefinition errors (on the new symbol, __STDC_LIMIT_MACROS_TRIGGER) when config.h is included twice.
+ Bob Proulx reported the buildbot failures: http://buildbot.proulx.com:9001/
+
+2007-06-22 Jim Meyering <jim@meyering.net>
+
+ Avoid test failure on Linux-2.6.8 due to too small underlying file. Overwrite the label creating a 4KB file; 1KB was too small and would trigger the failure. Reported by Bob Proulx.
+
+ Work around test failures caused by inadequate libreadline.
+ * configure.ac: Reject an inadequate libreadline5.0.
+ * parted/ui.c (_readline) [!HAVE_LIBREADLINE]: Echo each
+ just-read line, to be consistent with libreadline5.2.
+
+ Avoid mklabel test failure with very small file on Linux-2.6.8.
+
+2007-06-18 Jim Meyering <jim@meyering.net>
+
+ README-hacking: Don't mention Gzip 1.2.4, now that 1.3.12 is out. Mention uuid-devel and pkg-config, too.
+
+2007-06-12 David Vazquez <xeos@gmail.com>
+
+ Replace some malloc and strdup by xmalloc and xstrdup respectively
+ I replace some malloc and strdup by xmalloc and xstrdup respectively.
+
+2007-06-12 Jim Meyering <jim@meyering.net>
+
+ Fix the mkfs final-block-group-too-short bug.
+ mkfs would fail for certain sizes resulting in a final block-group
+ that was too small to accommodate the minimum number of admin blocks.
+ There was already work-around code for when a decremented "numgroups"
+ was 1. This change applies that work-around code for larger values of
+ numgroups, too. Also, there was an off-by-one error in the guard test
+ that would allow a few too-small partition sizes to slip through and
+ provoke the error (see tests/t2000-mkfs.sh for two examples).
+ This change fixes that, too.
+
+ Fix two "make check"-as-root failures. t1100-busy-label.sh: Remove extra copy of "o2" temporary file name. test-lib.sh (emit_superuser_warning): Exit successfully when run as root, too.
+
+2007-06-11 Jim Meyering <jim@meyering.net>
+
+ Fix inconsistent prompt for file system type.
+ * parted/parted.c (do_mkfs): Use a consistent prompt when asking
+ for a file system type.
+
+2007-06-11 Jim Meyering <jim@meyering.net>
+
+ Add a test to record the current EXT2 mkpartfs failure for some sizes.
+ Run this:
+
+ dev=F
+ dd if=/dev/null of=$dev bs=1 seek=20M
+ ./parted -s $dev mklabel gpt
+ ./parted -s $dev mkpartfs primary ext2 0 16796160B
+
+ It fails with this diagnostic:
+
+ Error: Attempt to write sectors 32772-32773 outside of partition on /t/F.
+
+ But if you choose a size that's one byte smaller, it works:
+
+ ./parted -s $dev mkpartfs primary ext2 0 16796159B
+
+ The difference is in how ext2_mkfs_write_meta computes
+ the number of block groups. In the former case, it computes
+ numgroups = 3. In the latter, numgroups = 2.
+ The trouble with the first case is that there isn't enough
+ space for 3 full block groups in a file system of that size.
+ Hence the eventual attempt to write beyond the initially-
+ established end-of-file-system mark.
+
+2007-06-11 Jim Meyering <jim@meyering.net>
+
+ Avoid unnecessary writes in test scripts.
+ This changes the tests to create sparse files for some test inputs
+ rather than zero-filled non-sparse ones. Doing this cuts more than 50% off
+ the run time of "make check" in the tests/ directory.
+
+2007-06-11 Matt Davis <mattdavis9@gmail.com>
+
+ Add a test for an ext2-resize failure.
+ This patch is based on the change from Matt Davis:
+
+ http://thread.gmane.org/gmane.comp.gnu.parted.devel/1695/focus=1704
+
+ Demonstrate an ext2-resize failure in parted-1.8.7, based on the report in
+ http://parted.alioth.debian.org/cgi-bin/trac.cgi/ticket/22
+
+2007-06-05 Jim Meyering <jim@meyering.net>
+
+ Turn off "DEBUG" in libparted/libparted.c, ... thus making it so that ped_malloc no longer initializes all just-allocated memory to all '1' bits. Given the two bugs I've just fixed, this change is long overdue.
+
+2007-06-05 Jim Meyering <jim@meyering.net>
+
+ Make "mklabel amiga" work also when DEBUG is not enabled.
+ I turned off DEBUG and discovered test failures that its
+ bogus always-initialize-malloc'd-memory policy had been hiding:
+
+ (amiga_write): Initialize all of "->disk_specific" buffer.
+ Avoid buffer overrun when initializing "TABLE".
+
+2007-06-05 Jim Meyering <jim@meyering.net>
+
+ "mklabel bsd": don't read/write initialized memory, with DEBUG turned off I spent the first part of yesterday debugging the ext2-resize failure. As part of that, I turned off DEBUG and was surprised to see new failures in the label checks. At least for label types "amiga" and "bsd", the implementation required that freshly-allocated memory be filled with all "1" bits, as was guaranteed by the default setting of
+ #define DEBUG 1
+
+ When I turned that off, bsd.c would read/write uninitialized memory, and
+ rdb.c(amiga) would do more of the same and produce partition tables that
+ it would then fail to recognize.
+
+ Here's the fix for the bsd problems.
+ I'll send the rdb/amiga ones separately, and once all tests pass
+ without malloc-initialization-to-all-1's, I'll remove that, too.
+
+ The bsd read-uninit bug was at bsd.c:341 (bsd_write), with this test:
+
+ if (!bsd_specific->boot_code [0])
+ _probe_and_add_boot_code (disk);
+
+ that first byte was never initialized.
+ So, I figured, that'll be easy. Just initialize it.
+ Wrong. That wasn't enough, since then a part of that same 512-byte
+ buffer (starting at offset 340) would be used uninitialized by
+ a write syscall.
+
+ FYI, the first failure was demonstrated like this:
+
+ dev=f
+ N=1M
+ dd if=/dev/zero of=$dev bs=$N count=1 && valgrind ./parted -s $dev mklabel bsd
+
+ Here's the first one:
+
+ ==20087== Conditional jump or move depends on uninitialised value(s)
+ ==20087== at 0x4429EE: bsd_write (bsd.c:341)
+ ==20087== by 0x411AD3: ped_disk_commit_to_dev (disk.c:485)
+ ==20087== by 0x411B19: ped_disk_commit (disk.c:508)
+ ==20087== by 0x403A12: do_mklabel (parted.c:622)
+ ==20087== by 0x402AF7: command_run (command.c:139)
+ ==20087== by 0x40B00A: non_interactive_mode (ui.c:1530)
+ ==20087== by 0x407A8B: main (parted.c:2479)
+
+ and even after initializing only that first byte, here's what I got:
+
+ ==25692== Syscall param write(buf) points to uninitialised byte(s)
+ ==25692== at 0x54874D0: __write_nocancel (in /usr/lib/debug/libc-2.5.so)
+ ==25692== by 0x41A15C: linux_write (linux.c:1599)
+ ==25692== by 0x40D9CA: ped_device_write (device.c:369)
+ ==25692== by 0x442B1E: bsd_write (bsd.c:368)
+ ==25692== by 0x411AD3: ped_disk_commit_to_dev (disk.c:485)
+ ==25692== by 0x411B19: ped_disk_commit (disk.c:508)
+ ==25692== by 0x403A12: do_mklabel (parted.c:622)
+ ==25692== by 0x402AF7: command_run (command.c:139)
+ ==25692== by 0x40B00A: non_interactive_mode (ui.c:1530)
+ ==25692== by 0x407A8B: main (parted.c:2479)
+ ==25692== Address 0x59E9C01 is 340 bytes inside a block of size 512 alloc'd
+ ==25692== at 0x4A1EC7C: memalign (vg_replace_malloc.c:332)
+ ==25692== by 0x4A1ECD5: posix_memalign (vg_replace_malloc.c:425)
+ ==25692== by 0x41A11A: linux_write (linux.c:1594)
+ ==25692== by 0x40D9CA: ped_device_write (device.c:369)
+ ==25692== by 0x442B1E: bsd_write (bsd.c:368)
+ ==25692== by 0x411AD3: ped_disk_commit_to_dev (disk.c:485)
+ ==25692== by 0x411B19: ped_disk_commit (disk.c:508)
+ ==25692== by 0x403A12: do_mklabel (parted.c:622)
+ ==25692== by 0x402AF7: command_run (command.c:139)
+ ==25692== by 0x40B00A: non_interactive_mode (ui.c:1530)
+ ==25692== by 0x407A8B: main (parted.c:2479)
+
+2007-05-31 Jim Meyering <jim@meyering.net>
+
+ Don't leak a partition table buffer. * libparted/labels/rdb.c (amiga_read): Free the buffer upon success as well as on failure.
+
+ Correct a misleading diagnostic.
+ * libparted/disk.c (ped_disk_new): Remove always-false "Unable to open"
+ part of diagnostic. Leave the "unrecognized disk label" part.
+
+ Fix build failure (conflicting decl of strnlen) and clean up
+ * parted/strlist.h: Include <config.h> first.
+ [!ENABLE_NLS]: Define wchar_t to char here, too, since we no
+ longer include "strlist.h" after the definition in table.c.
+ * parted/table.c: Include <wchar.h> and <string.h> unconditionally,
+ and before wchar_t redefinition.
+ Hoist inclusions of xalloc.h and strlist.h, too.
+ Remove wcwidth and strnlen declarations, since they're guaranteed
+ to be in the gnulib-supplied-if-needed headers.
+
+ Read an msdos partition table from a device with 2K sectors.
+ * libparted/labels/dos.c: Include <stdbool.h>.
+ (msdos_probe): Don't hard-code 512.
+ Use read_sector, not ped_device_read.
+ Adapt to changed type of "part_table".
+ Now that "label" is malloc'd, be sure to free it before returning.
+ (read_table): Likewise.
+
+2007-05-30 Jim Meyering <jim@meyering.net>
+
+ Fix "make distcheck" failure due to not finding usable partition * m4/o-direct.m4: Require that read as well as write succeed. Require that both work with blocks of size 512 as well as 4096. Reiserfs3 doesn't support 512-byte reads. Allow the user running the test to specify the first directory to test via the PARTED_TMPDIR envvar, in case none of the dirs checked by default is usable.
+
+ Fix configure-with-nls vs. wchar.h/wcsdup problem differently. * parted/table.c: Include <config.h> *before* all other #include directives. Remove explicit declaration of wcsdup. Now, we'll get the one from <wchar.h>.
+
+2007-05-29 Otavio Salvador <otavio@ossystems.com.br>
+
+ parted/table.c: Fix a warning when compiling with translation support
+ ,----[ Output when compiling with translation support ]
+ |...
+ | table.c: In function 'table_add_row_from_strlist':
+ | table.c:168: warning: implicit declaration of function 'wcsdup'
+ | table.c:168: warning: assignment makes pointer from integer without a cast
+ `----
+
+2007-05-29 Benno Schulenberg <bensberg@justemail.net>
+
+ fdasd label: Move formatting out of translatable strings.
+ Also gettextize several missed messages, and simplify some of them.
+
+ vtoc label: Move formatting out of translatable strings.
+ Also gettextize a few missed messages, and remove some whitespace.
+
+2007-05-29 Jim Meyering <jim@meyering.net>
+
+ Avoid a leak.
+ * parted/parted.c (do_print): Use separate variables for the header
+ and for individual rows. Free each when done.
+ * parted/table.c (table_add_row_from_strlist): Insert a newly
+ allocated copy of each string, so that the caller can free
+ the argument corresponding to the "list" parameter.
+ * tests/t0100-print.sh: New test for this.
+ * tests/Makefile.am (TESTS): Add t0100-print.sh.
+
+ Move a test/utility function into test-lib.sh.
+ * tests/t3000-constraints.sh (emit_superuser_warning): Move this
+ function to...
+ * tests/test-lib.sh (emit_superuser_warning): ...here.
+ * tests/t0000-basic.sh: Use the function instead of open-coding it.
+
+2007-05-29 Jim Meyering <jim@meyering.net>
+
+ On IRC, xeos reported test failures in t0000 and t2000 with diffs like this:
+ -/home/xeos/projects/parted/parted/.libs/lt-parted: invalid token: msdos
+ +parted: invalid token: msdos
+
+ Here's the patch I expect to apply.
+ It also removes an inter-part dependency by moving the creation
+ of the "o2" temporary file into the test where it's used.
+
+ Some of this duplication should be factored out, eventually...
+
+2007-05-25 Jim Meyering <jim@meyering.net>
+
+ Diagnose invalid command arguments.
+ This started because I objected to parted failing with no diagnostic
+ when given an invalid file system type:
+
+ $ /sbin/parted -s $dev mklabel loop mkpartfs hfsplus 0 1.4
+ WARNING: You are not superuser. Watch out for permissions.
+ [Exit 1]
+
+ With the changes below, it does this:
+
+ $ ./parted -s $dev mklabel loop mkpartfs hfsplus 0 1.4
+ ./parted: invalid token: hfsplus
+ [Exit 1]
+
+ The following may look like a simple change, but looks are deceptive...
+ For example, if you try to diagnose via ped_exception_throw instead
+ of "error", you'll find that the mere fact of diagnosing the problem
+ introduces new ones because of how the exception handler manipulates the
+ global command line buffer containing the token we're complaining about.
+
+ But this isn't library code, so using error() is fine.
+
+ Diagnose invalid command arguments.
+ When a command argument doesn't match the expected candidate values,
+ parted would silently exit (in script mode) or simply act as if that
+ value and any following ones had not been specified (in interactive
+ mode). With this change, it complains about the "invalid token",
+ and in script mode (where there hasn't been a prompt to give context)
+ sometimes tells what type of token it was expecting.
+ * parted/ui.c: Include "error.h".
+ (command_line_get_word): If the user's "token" wasn't a good enough
+ match, give a diagnostic. In script mode, return NULL so that the
+ callers can give additional information.
+ * tests/t2000-mkfs.sh: New test for the above.
+ * tests/t0000-basic.sh: Expect the new diagnostic when "msdos" is
+ treated as an unrecognized first token after "mklabel". This happens
+ when trying to label a disk that already has a label.
+ * tests/t1100-busy-label.sh: Likewise.
+
+2007-05-25 Jim Meyering <jim@meyering.net>
+
+ Use xmalloc and xrealloc, rather than unchecked malloc and realloc. * parted/table.c: Use gnulib's xmalloc and realloc. Remove anachronistic casts of malloc/realloc return value. Change "sizeof(type)" to safer "sizeof(*var)" (one of the former was wrong, but in a harmless way).
+
+ Fix off-by-one error in previous change. * parted/strlist.c (str_list_print_wrap): Don't output a space unconditionally.
+
+2007-05-25 Jim Meyering <jim@meyering.net>
+
+ Remove a silly (and dangerous) function.
+ This change has no effect, except in a low-memory condition,
+ where the old code would dereference NULL, the new code no
+ longer performs that malloc.
+
+ * parted/strlist.c (get_spaces): Remove this function.
+ Not only is it useless, but it also has an unchecked malloc.
+ (str_list_print_wrap): Don't allocate and initialize a string
+ just to print a sequence of N spaces.
+
+2007-05-25 Jim Meyering <jim@meyering.net>
+
+ doc/parted.texi (Static binaries): Correct an invalid example. One cannot specify "primary" for a partition on a loop device.
+
+2007-05-24 Jim Meyering <jim@meyering.net>
+
+ Diagnose "ext2 FS too small" rather than triggering an assertion. * libparted/fs/ext2/ext2_mkfs.c (ext2_mkfs): An overlapping ext2 partition request could still lead to a bug: constraint-resolution code would produce a single-sector candidate "range", and that would cause the ext2 fs-creation code to misbehave. Now, it properly detects and reports the FS as being too small. * tests/t3000-constraints.sh: New test for the above. * tests/Makefile.am (TESTS): Add t3000-constraints.sh.
+
+ Fix typo in privs-required test setup. * tests/test-lib.sh: Fix typo: s/\$parted/$parted_/.
+
+2007-05-23 Jim Meyering <jim@meyering.net>
+
+ Don't fail all tests when "." lacks O_DIRECT support.
+ I often build tools on a tmpfs file system (it's faster), and
+ found that parted tests always failed there. That's because it tries
+ to open the "device" (a file) with O_DIRECT, and at least the linux tmpfs
+ driver always fails with EINVAL in that case.
+
+ So here's a patch that makes it work.
+ Since the test may require writing in a directory like /tmp,
+ to which others typically have write access, it is particularly
+ careful about security (see the mkdtemp script below), in case
+ "make check" is run by e.g., root.
+
+ Don't fail all tests when "." lacks O_DIRECT support.
+ Before, running "make check" on a file system that doesn't support
+ O_DIRECT (e.g. tmpfs), would always fail. Now, it works, as long as
+ the test machinery can find a writable directory in which open with
+ O_DIRECT *does* work.
+ * m4/o-direct.m4: New file. Find a directory/FS with O_DIRECT support.
+ * configure.ac: Use the new macro.
+ * libparted/tests/t1000-label.sh: New file. Wrap the binary, so
+ it can take advantage of the code that finds O_DIRECT supporting FS.
+ * tests/mkdtemp: New file. Required, since when running tests as
+ root, we may have to create a temporary directory in a directory
+ like /tmp that's writable by others.
+ * tests/Makefile.am (EXTRA_DIST): Add mkdtemp.
+ * tests/test-lib.sh: When creating test subdir, and setting up "trap",
+ use the directory specified in $PARTED_USABLE_TEST_DIR.
+ Don't set PATH here. Now, that's done via the generated, and always-
+ sourced, init.sh. As a result, invoke parted via its full file name.
+
+2007-05-19 Jim Meyering <jim@meyering.net>
+
+ Make all tests get their initialization from the same place. * tests/t2000-mkfs.sh: Get initialization via ". ./init.sh", not via ". ./test-lib.sh". * Makefile.maint (sc_test_init): New test, to ensure we stay consistent.
+
+2007-05-18 Jim Meyering <jim@meyering.net>
+
+ * tests/Makefile.am (init.sh): Make this generated file read-only.
+
+ mkpartfs ext2 2 10 would erroneously report "file system too small" for some small (single-group) partitions. It would also fail to report "file system too small" in some cases, and instead continue on to into inode-allocation code where it'd report "File system full!" * libparted/fs/ext2/ext2_mkfs.c (compute_block_counts): New function, factored out of... (ext2_mkfs): ...here. Call compute_block_counts rather than open-coded it. When decrementing numblocks, call compute_block_counts again, to recompute all of the derived values. Require at least 14 free blocks in a 16-inode-per-group partition. * tests/t1500-small-ext2.sh: New file. Test for the above. * tests/Makefile.am (TESTS): Add t1500-small-ext2.sh.
+
+2007-05-17 Jim Meyering <jim@meyering.net>
+
+ Avoid spurious test failures due to buggy ncurses-5.6. * tests/test-lib.sh: Also unset TERM.
+
+2007-05-16 Benno Schulenberg <bensberg@justemail.net>
+
+ partprobe: new option: --dry-run, synonym for now-deprecated --no-update; improve its description
+
+2007-05-15 Anant Narayanan <anant@theghost.local>
+
+ Test commit
+
+2007-05-14 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Removed clean.sh script. Using git now, we don't need it anymore (git clean -d -x).
+
+ Use gnulib xmalloc() and xrealloc().
+
+2007-05-14 Flavio Leitner <flavio.leitner@gmail.com>
+
+ Fix exception handling in mkpart and mkpartfs
+ Parted mkpart and mkpartfs commands does:
+ ...
+ ped_exception_fetch_all();
+ if (!ped_disk_add_partition (disk, part, final_constraint)) {
+ ped_exception_leave_all();
+ ...
+ }
+ ...
+ In mkpart if the ped_disk_add_partition() returns true it skips
+ ped_exception_leave_all() leaving ex_fetch_count = 1.
+
+ In mkpartfs if the ped_disk_add_partition() returns false it will
+ call ped_exception_leave_all() leaving ex_fetch_count negative.
+
+ The wrong count in ex_fetch_count will prevent next commands to
+ correctly handle exceptions, failing to prompt users for example.
+
+ Note: test script t2000-mkfs.sh improved to verify against this issue.
+
+2007-05-11 Jim Meyering <jim@meyering.net>
+
+ * tests/t1100-busy-label.sh: Quote uses of $dev, in case the user's device name contains a shell meta-character.
+ SCALAR(0x7f6040)
+
+ When labeling a disk in --script mode, fail if it is in use. * parted/parted.c (_disk_warn_busy): In script mode, throw a "PED_EXCEPTION_ERROR", not a warning. (do_mklabel): Guard only the _disk_warn_loss call with "if (!opt_script_mode...", not the _disk_warn_loss call. * tests/t1100-busy-label.sh: New file. Test the above, in interactive mode as well as in script mode. Requires root privilege (to mount a fs), and an actual block device. * tests/Makefile.am (TESTS): Add t1100-busy-label.sh. * tests/test-lib.sh: Add infrastructure to support new privileges_required_=1 and erasable_device_required_=1 settings used by t1100.
+
+ No longer require "srcdir=." when running a test manually. * tests/Makefile.am (init.sh): New rule, so one doesn't have to set "srcdir=." when running a test manually. * .gitignore: Ignore new generated file: tests/init.sh. * tests/t0000-basic.sh: Source new init.sh, rather than test-lib.sh. * tests/t1000-mkpartfs.sh: Likewise. * tests/t2000-mkfs.sh: Likewise. * tests/test-lib.sh: Remove useless srcdir-setting code.
+
+2007-05-09 Otavio Salvador <otavio@ossystems.com.br>
+
+ [parted] Fix script mode support on mkfs commandline command
+ Parted was lacking support to script mode on do_mkfs method hence
+ always failing.
+
+ Note: tests/t2000-mkfs.sh was created to avoid it to happen again
+
+2007-05-08 Debarshi Ray <rishi@gnu.org>
+
+ Preventing compilation of DASD code on GNU Hurd systems through the use of AC_COMPILE_IFELSE and AM_CONDITIONAL, instead of #ifdef.
+
+2007-05-07 Jim Meyering <jim@meyering.net>
+
+ Rewrite integration tests to use a new framework (git's). * tests/t1000-mkpartfs.sh: New file. * tests/t0000-basic.sh: New file. * tests/test-lib.sh: New file. Derived from git's t/test-lib.sh. * tests/lang-default, tests/priv-check: Remove files. * tests/Makefile.am (EXTRA_DIST): Add test-lib.sh. Remove lang-default and priv-check; no longer used. * tests/part-01, tests/label-01: Remove files. * tests/part-02, tests/label-02: Likewise.
+
+ Merge branch 'inhibit-word-wrap'
+
+ Merge branch 'include-limits-h-for-CHAR_MAX'
+
+ Make ---pretend-input-tty inhibit output word-wrap. * parted/ui.c (screen_width): Use effectively-unlimited screen width with ---pretend-input-tty, just as for '--script' mode.
+
+ Suppress "you are not superuser..." warning in script mode. * parted/parted.c (_init): Do not emit this warning in script mode: "You are not superuser. Watch out for permissions."
+
+ Avoid "make distcheck" failure, with newer system headers. * parted/parted.c: Include <limits.h>, for use of CHAR_MAX.
+
+2007-05-03 Anant Narayanan <anant@kix.in>
+
+ Updated Doxyfile
+
+2007-05-02 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ On the edge branch, labeled the version as 1.9.0 so we can mark it more correctly as the development tree.
+
+ Whitespace cleanups.
+
+ Whitespace cleanups.
+
+ Whitespace cleanups.
+
+ Whitespace cleanups.
+
+ Revert "Remove unused label."
+ This reverts commit bfd9a6d8b6322d870650b0e92bd936035ab28e76.
+
+ Patch from Jim Meyering <jim@meyering.net> to linux_write() to support logical
+ sector sizes other than 512 (PED_SECTOR_SIZE_DEFAULT).
+
+ Fix primary partition cylinder alignment error for DOS disk labels.
+
+ Fix off-by-one bug in parted when displaying information about the disk label (the disk size, specifically).
+
+ Do not translate partition names in 'parted print' command. This causes problems for non-Latin-based character sets. Also, we don't want to translate the partition name here as we are just showing what is in the disklabel, translating it distorts what the value is.
+ Also added some malloc checks in table.c.
+
+ Remove unused label.
+
+2007-05-02 David Cantrell <dcantrell@redhat.com>
+
+ Reverted my patch to configure.ac to remove -Wl,--as-needed from LDFLAGS when checking for libreadline.
+
+2007-05-02 David Cantrell <dcantrell@redhat.com>
+
+ libreadline is a problematic library. Autoconf adds a block to the generated configure script that checks to see if we should be passing the --as-needed flag to ld(1). There are portability reasons this code exists (best I can figure), but it presents a problem when we scan for libreadline.
+ libreadline specifically has unresolved symbols on at least Fedora and RHEL. Why? Well, the developer can choose to provide libtermcap, libncurses, or libncursesw (wide-char support) at compile time which all satisfy the curses API dependency that libreadline has. When the parted configure script runs, it fails on readline because the --as-needed flag causes the linker to not include libncurses even though we already have that on the link line.
+
+ My solution is to remove the --as-needed flag when we scan for libreadline and then later check for rl_completion_matches() in libreadline.
+
+2007-05-02 David Cantrell <dcantrell@redhat.com>
+
+ More changes to set the version number to 1.8.3.
+
+ Set version to 1.8.3 for upcoming release.
+
+2007-04-30 Debarshi Ray <rishi@gnu.org>
+
+ [tests] Separate and improved test for reading of disk labels.
+
+2007-04-30 Matthew Harris <mharris@coruscant.(none)>
+
+ Fix endianness bugs
+
+2007-04-26 Jim Meyering <jim@meyering.net>
+
+ Add integration tests, then adjust code so that they pass. These changes affect how --script (-s) works, and when diagnostics are displayed. * Makefile.am (SUBDIRS): Add tests. * configure.ac (AC_OUTPUT): Add tests/Makefile. * tests/Makefile.am: New file. * tests/part-01, tests/label-01: New files. * tests/part-02, tests/label-02: New files. * parted/parted.c (enum) [PRETEND_INPUT_TTY]: Define. Support a new, undocumented option: ---pretend-input-tty. It is intended solely for testing. The leading '---' ensures that it will never conflict with a "regular" long option. (do_mkpartfs): Prompt only when not in script mode. Call ped_exception_leave_all() to decrement global counter. Without this, the use of parted in tests/part-01 would still fail, but would not issue the diagnostic explaining why. * parted/ui.h (pretend_input_tty): Declare new global. * parted/ui.c (exception_handler): Let the new "pretend_input_tty" option override "!isatty (0)". (init_ui): Don't set opt_script_mode. * tests/lang-default, tests/priv-check: New files.
+
+ Temporarily disable the clone-dvh-label test. * libparted/tests/label.c (test_clone_label):
+
+2007-04-21 Jim Meyering <jim@meyering.net>
+
+ [PATCH] Avoid warning from -Wformat-security; tweak error diagnostic.
+ * parted/parted.c (_parse_options): Upon failure, output diagnostic
+ to stderr, not stdout. Use "program_name" value, not literal "parted".
+
+2007-04-20 Debarshi Ray <rishi@gnu.org>
+
+ [tests] New test for probing of disk labels.
+
+2007-04-20 Otavio Salvador <otavio@ossystems.com.br>
+
+ Revert "[libparted] dvh label fixes"
+ This reverts commit dcf8e966abf997b9df69b1664c470ed2aa5c166b.
+
+ [libparted] dvh label fixes
+
+2007-04-19 Otavio Salvador <otavio@ossystems.com.br>
+
+ [tests] Simplify test_clone_label removing the label reading test
+ Since the test_create_label already tests the label reading we
+ shouldn't redo it. It's always better to have simple tests so is much
+ easier to find the bugs.
+
+ [tests] Trivial coding style fixes around the tests code
+
+2007-04-19 Otavio Salvador <otavio@ossystems.com.br>
+
+ [tests] Add _test_exception_handler to fail every time an exception is raised
+ Sometimes parts of code raises exceptions and this shouldn't happen on
+ tests. To ensure we catch them a specific exception handler has been
+ implemented.
+
+ The handler usage is very easy. You just need to put the following
+ code at testsuite main method:
+
+ ...
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+ ...
+
+2007-04-19 Debarshi Ray <rishi@gnu.org>
+
+ [tests] New test for cloning of disk labels.
+
+ [tests] Fix spacing around brackets and asterisks.
+
+2007-04-18 Benno Schulenberg <bensberg@justemail.net>
+
+ Handle options independent of their order.
+ Abort on any invalid option, and handle -v and -h first.
+
+2007-04-18 Otavio Salvador <otavio@ossystems.com.br>
+
+ [tests] Small refactoring on test_create_label
+ - Destroy the temporary device once the test has been finished,
+ - Use the _implemented_disk_label and _create_disk_label methods
+ to avoid code duplication.
+
+2007-04-18 Otavio Salvador <otavio@ossystems.com.br>
+
+ [tests] Implements _implemented_disk_label and _create_disk_label on common.[hc]
+ - _implemented_disk_label: returns 0 when we haven't yet implemented
+ this specific label and 1 otherwise;
+
+ - _create_disk_label: creates a disk label of a specific type on a
+ specific device;
+
+2007-04-18 Otavio Salvador <otavio@ossystems.com.br>
+
+ [tests] Ensure that we're able to read the just created disk label
+ To ensure we're able to read the just created disk label we introduced a call
+ ped_disk_new using the same loopback. This could detect bad label creating or
+ probing detectiong mistakes.
+
+2007-04-17 Debarshi Ray <rishi@gnu.org>
+
+ Indentation fixes in libparted/tests/.
+
+2007-04-16 Debarshi Ray <rishi@gnu.org>
+
+ Show the update /etc/fstab message only when there has been a change to the disk. The message is now shorter and more direct.
+
+2007-04-06 solsTiCe d'Hiver <solsticed.hiver@laposte.net>
+
+ change the variable named start to offset to be consistent with the doc
+
+2007-04-05 solsTiCe d'Hiver <solstice.dhiver@laposte.net>
+
+ remove any trace of PED_PARTITION_PRIMARY which was deprecated a long time ago to use PED_PARTITION_NORMAL
+
+2007-04-05 Benno Schulenberg <bensberg@justemail.net>
+
+ Added 'rescue', 'unit', and 'version' to the man page, plus some small edits.
+
+2007-04-04 Otavio Salvador <otavio@ossystems.com.br>
+
+ Avoid segfault due a double free on reiserfs support (patch sent by Jakub Bogusz <qboosh@pld-linux.org>)
+
+2007-04-04 Benno Schulenberg <bensberg@justemail.net>
+
+ Make the wording of warning somewhat clearer.
+
+2007-03-27 Benno Schulenberg <bensberg@justemail.net>
+
+ Tweak some help messages: change third person to imperative for consistency, add single quotes and remove letters for clarity
+
+2007-03-19 David Cantrell <dcantrell@redhat.com>
+
+ Conditionalize the System Z stuff correctly. We get headers installed on non-System Z platforms, but the code only compiles on that platform.
+
+ Remove the COMPILE_FOR_S390 flag-setting stuff. It wasn't correct anyway. Take a kernel-style approach and check uname -m to see if we are on s390. If so, we build for zSeries. Otherwise we do not.
+
+ Sleep for one second after uploading a file to ftp-upload.gnu.org. Seems transactions need to be spaced out a bit otherwise the server will reject files.
+
+ Fix for compile problems with gcc-4.1.2 as indicated here: http://lists.gnu.org/archive/html/bug-parted/2007-03/msg00008.html
+
+ Check for tgetent() in libtinfo as well as ncurses, curses, termcap, and termlib.
+
+ Remove some unused variables, check the return values from fgets() and asprintf(), and remove the unused _dm_remove_map() function.
+
+ Include vtoc.h for the format1_label_t typedef.
+
+ Remove GNU make-specific things from po4a.mk.
+
+2007-03-16 David Cantrell <dcantrell@redhat.com>
+
+ Install the libparted.pc file, not the libparted.pc.in file.
+
+ More spec file template cleanups.
+
+ Updated the release script to work with the new source layout.
+
+2007-03-16 Debarshi Ray <rishi@gnu.org>
+
+ Fixed faulty information in README-hacking (Bison is not a maintainer tool for Parted), and Makefile.maint (every project has certain variations of it).
+
+2007-03-16 Jim Meyering <jim@meyering.net>
+
+ po/POTFILES.in: Add lib/getopt.c
+
+2007-03-15 Debarshi Ray <rishi@gnu.org>
+
+ Prevented DASD specific headers and sources from being compiled/installed on non-s390 systems; and conditionally included fdasd.h in linux.h for s390 systems.
+
+2007-03-15 David Cantrell <dcantrell@redhat.com>
+
+ Move static variable flagging little endian or not to journal.c. We don't want static variables in general, but if they must exist, put them in a C file, not a header.
+ Parameterize the little_endian flag for the macros in journal.h.
+
+2007-03-13 David Cantrell <dcantrell@redhat.com>
+
+ Modernize the spec file template.
+
+ Ignore more files.
+
+ Patch from Matthew Garrett <mjg59@srcf.ucam.org> to add HFS+ resize support.
+
+2007-03-12 Jim Meyering <jim@meyering.net>
+
+ hfs.c: Detect write failure. * libparted/fs/hfs/hfs.c (hfs_extract_file, hfs_extract_bitmap): (hfs_extract_mdb, hfsplus_extract_file, hfsplus_extract_vh): Fail when fclose fails for a written-to file handle.
+
+2007-03-08 Jim Meyering <jim@meyering.net>
+
+ aix.c: Avoid memory overrun. Don't assume logical sector size <= 512B * libparted/labels/aix.c (struct AixLabel): Remove definition. (aix_label_magic_get, aix_label_magic_set): New functions. (read_sector): New function. (aix_probe): Rewrite not to use the above, and not a static buffer. (aix_clobber): Likewise. Also, rather than PED_ASSERT'ing that aix_probe returns 1, simply return 0 if aix_probe returns fails. (ped_disk_aix_init): Remove assertion, now that AixLabel is gone.
+
+ Use PED_SECTOR_SIZE_DEFAULT not 512 * libparted/arch/beos.c (beos_read, beos_write): * libparted/arch/linux.c (_device_get_length, _device_seek) (linux_read, linux_write, _blkpg_add_partition): * libparted/fs/fat/bootsector.c (fat_boot_sector_read): * libparted/labels/bsd.c (bsd_alloc): * libparted/labels/dos.c (probe_filesystem_for_geom): * libparted/labels/rdb.c (amiga_read):
+
+ * parted/ui.c (non_interactive_mode): Plug a tiny leak. Exercise by running the following with a CD-ROM in the drive: valgrind --leak-check=full parted/parted /dev/cdrom print Before, we'd leak the 6-byte command: "print\0".
+
+ linux.c: Avoid memory overrun. Handle 2048-byte logical sectors. * libparted/arch/linux.c (linux_read): Allocate the right amount of space for the (potentially 2048-byte-long) sectors we're about to read.
+
+2007-03-07 Jim Meyering <jim@meyering.net>
+
+ Don't use deprecated mktemp, to avoid linker warning * libparted/tests/common.c (_create_disk): Rewrite to use mkstemp instead.
+
+ * libparted/tests/label.c: Plug a trivial leak.
+
+2007-03-07 Debarshi Ray <rishi@sunflower.(none)>
+
+ Merge branch 'master' of git+ssh://rishi-guest@git.debian.org/git/parted/parted
+
+2007-03-07 Debarshi Ray <rishi@gnu.org>
+
+ Replaced [f]printf with fput[c|s] globally.
+
+2007-03-07 Jim Meyering <jim@meyering.net>
+
+ libparted/unit.c: constify interfaces * include/parted/unit.h (PED_UNIT_LAST): * libparted/unit.c (ped_unit_get_size): (ped_unit_format_custom_byte, ped_unit_format_byte): (ped_unit_format_custom, ped_unit_format, ped_unit_parse): (find_suffix, parse_chs, clip, geometry_from_centre_radius): (ped_unit_parse_custom):
+
+ Declare some static arrays to be "const". * libparted/labels/dos.c (MBR_BOOT_CODE): * libparted/labels/efi_crc32.c (crc32_tab): * libparted/labels/pc98.c (MBR_BOOT_CODE): * libparted/labels/vtoc.c (EBCtoASC, ASCtoEBC):
+
+ * configure.ac: Fix a typo: s/have_scintilla/have_check/
+
+ tests/label: Don't dereference NULL if open fails. * libparted/tests/label.c (START_TEST): Return right away if ped_device_get returns NULL.
+
+ Add "const" to parameters in these public interfaces. * libparted/disk.c (ped_disk_check): (ped_disk_get_primary_partition_count): (ped_disk_get_last_partition_num, ped_partition_print): (ped_disk_print): (ped_partition_print): Also declare to be "static". This is ok, since the function is referenced only from this file. * include/parted/disk.h: Update their prototypes.
+
+ Use <config.h> consistently, not "config.h". * Makefile.cfg (local-checks-to-skip): Remove sc_require_config_h, to enable the "make distcheck" test for this.
+
+2007-03-06 David Cantrell <dcantrell@redhat.com>
+
+ start_pos is a PedSector, not a PedGeometry.
+
+2007-03-06 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Preserve starting sector for primary NTFS 3.1 partitions (Windows Vista) when modifying the DOS disk label. NTFS 3.1 partitions do not start on the 2nd head of the 1st cylinder at the beginning of the drive.
+
+ Patched parted.8 man page to show partition names apply to GPT disk labels
+ as well as Mac and PC98 disk labels.
+
+2007-03-06 Debarshi Ray <rishi@gnu.org>
+
+ Replaced [f]printf with fput[c|s] in libparted/fs/ext2/ext2_block_relocator.c.
+
+ Re-arranging .gitignore in alphabetical order.
+
+ Defined a dummy '_dump_history' function in parted/ui.c when Readline is absent. Thanks to Jim Meyering for the suggestion.
+
+ Added libparted/tests/label to .gitignore.
+
+ Fixed parted/ui.c to incorporate signal handlers for systems lacking 'sigaction', 'SA_SIGINFO', and other constants in signal.h.
+
+2007-03-05 Jim Meyering <jim@meyering.net>
+
+ Undo part of the dos.c constification. * libparted/disk.c: The sole parameter of ped_disk_type_register and ped_disk_type_unregister must *not* be const. * libparted/labels/dos.c (msdos_disk_type): Likewise for the corresponding static struct in dos.c, since those functions modify the struct. This didn't show up at compile time due to casts. * include/parted/disk.h: Update prototypes, too.
+
+ Hide two unnecessarily-"extern" functions. * libparted/labels/mac.c (mac_alloc): Declare static. * libparted/labels/dos.c (raw_part_parse): Declare static.
+
+ * libparted/labels/dos.c: Complete constification of this file. * libparted/disk.c (ped_disk_type_register): Make the sole parameter "const", so that caller's argument may be "const". (ped_disk_type_unregister): Likewise.
+
+ * po/POTFILES.in: Add partprobe/partprobe.c, now that it contains translatable strings.
+
+ Make partprobe accept --help and --version options. Add long options: --no-update (same as existing -d), and --summary (same as existing -s). * partprobe/partprobe.c Include configmake.h, getopt.h, and NLS-related things. (main): Rewrite option handling. Along the way, fix a bug whereby "partprobe DEV1 DEV2 ... DEVN" would exit successfully whenever process_dev (DEVN) returns nonzero, even when that function fails for each of the preceding devices.
+
+ Make clearfat accept --help and --version options. * debug/clearfat/clearfat.c (AUTHORS, PROGRAM_NAME): Define. Include gettext-related things. Include closeout.h. (usage): New function. (main): Set up for translations, use close_stdout. * bootstrap.conf: Add long-options, for clearfat. * debug/clearfat/Makefile.am: Use gnulib.
+
+ * include/parted/disk.h (struct _PedDiskOps) [write]: Change parameter type to be "const".
+
+ Begin making libparted/labels/*.c const-correct. For an introduction, see http://mail-archive.com/parted-devel@lists.alioth.debian.org/msg00930.html In particular, I've used a const-adding case in mac.c to work around the current, inconsistent semantics of mac_write.
+
+ Avoid a libtool warning: libtool: link: warning: `-release' is ignored for convenience libraries * libparted/labels/Makefile.am (liblabels_la_LDFLAGS): Don't define.
+
+ Make "make distcheck" work better. * Makefile.cfg (local-checks-to-skip): Skip sc_system_h_headers, too. * Makefile.maint (my-distcheck): Don't depend on $(release_archive_dir).
+
+2007-03-02 Jim Meyering <jim@meyering.net>
+
+ Avoid recursive "LIBS = ... $(LIBS)" assignments. * libparted/labels/Makefile.am (liblabels_la_LIBADD): Add $(INTLLIBS) here rather than via a recursive LIBS = ... $(LIBS) assignment. * libparted/fs/Makefile.am (libfs_la_LIBADD): Likewise.
+
+2007-03-02 Jim Meyering <jim@meyering.net>
+
+ Use $(VAR), rather than obsolescent @VAR@ automake notation.
+ Enable the makefile-check rule.
+ * Makefile.cfg: Remove makefile-check from the list of rules to skip.
+ * Makefile.am: change e.g., @VERSION@ to $(VERSION).
+ * debug/clearfat/Makefile.am: Likewise.
+ * libparted/Makefile.am: Likewise.
+ * libparted/fs/Makefile.am: Likewise.
+ * libparted/fs/amiga/Makefile.am: Likewise.
+ * libparted/fs/bfs/Makefile.am: Likewise.
+ * libparted/fs/ext2/Makefile.am: Likewise.
+ * libparted/fs/fat/Makefile.am: Likewise.
+ * libparted/fs/hfs/Makefile.am: Likewise.
+ * libparted/fs/jfs/Makefile.am: Likewise.
+ * libparted/fs/linux_swap/Makefile.am: Likewise.
+ * libparted/fs/ntfs/Makefile.am: Likewise.
+ * libparted/fs/reiserfs/Makefile.am: Likewise.
+ * libparted/fs/ufs/Makefile.am: Likewise.
+ * libparted/fs/xfs/Makefile.am: Likewise.
+ * libparted/labels/Makefile.am: Likewise.
+ * libparted/tests/Makefile.am: Likewise.
+ * parted/Makefile.am: Likewise.
+ * partprobe/Makefile.am: Likewise.
+
+ The above conversion caused a problem:
+ * libparted/Makefile.am: Remove this recursive definition:
+ LIBS = @INTLLIBS@ @LIBS@. Once converted to LIBS = ...$(LIBS),
+ GNU make would (rightly) fail, objecting to the recursive definition.
+ (libparted_la_LIBADD): Instead, add $(INTLLIBS) here.
+
+2007-03-02 Jim Meyering <jim@meyering.net>
+
+ Enable the po-check rule.
+ * Makefile.cfg (local-checks-to-skip): Remove po-check.
+ * po/POTFILES.in: Add a bunch of names of files that contain
+ translatable strings. Remove some which contain none.
+
+ Add infrastructure for more rigorous "make distcheck" rules.
+ * GNUmakefile: New file.
+ * .prev-version: New file.
+ * Makefile.am (MAINTAINERCLEANFILES): Remove names of files now in build-aux/.
+ (distcheck-hook): New rule, to run the checks in Makefile.maint.
+ (EXTRA_DIST): Add .prev-version.
+ * Makefile.maint: New file. Improved "make distcheck" rules.
+ * Makefile.cfg: Select which Makefile.maint checks to run.
+ (local-checks-to-skip): List all currently-failing and irrelevant
+ tests here.
+ * build-aux/vc-list-files: New file. List version-controlled files.
+ * .gitignore: Remove build-aux, since now it contains a
+ version-controlled file.
+
+2007-03-01 Debarshi Ray <rishi@gnu.org>
+
+ Fixing indentation in parted/ui.c. Replaced TABs with spaces to ensure uniformity in all editors.
+
+2007-02-28 Debarshi Ray <rishi@gnu.org>
+
+ Fixing indentation in parted/ui.c.
+
+2007-02-27 Jim Meyering <jim@meyering.net>
+
+ Normalize the way we handle a generated-and-distributed file, parted.spec. * Makefile.am (EXTRA_DIST): Add parted.spec. (parted.spec): New rule. (MAINTAINERCLEANFILES): Add parted.spec. * configure.ac (AC_OUTPUT): Remove parted.spec from the list.
+
+ Add -I$(top_srcdir)/lib, required for new use of close_stdout. * partprobe/Makefile.am (partedincludedir):
+
+ Arrange for "make distcheck" to be stricter.
+
+2007-02-26 Jim Meyering <jim@meyering.net>
+
+ * bootstrap: new file.
+
+2007-02-26 Debarshi Ray <rishi@gnu.org>
+
+ Fixing libparted/arch/gnu.c to remove build-time errors.
+
+2007-02-25 Jim Meyering <jim@meyering.net>
+
+ partprobe: Detect/report any error when writing to stdout. * partprobe/Makefile.am (partprobe_LDADD): Add lib/libparted.la. * partprobe/partprobe.c: Include "closeout.h" for close_stdout. Include "version-etc.h" for version_etc prototype. Declare global, program_name. (PROGRAM_NAME, AUTHORS): Define. (help): Use PROGRAM_NAME, rather than hard-coding it. (version): Use gnulib's version_etc. (main): Set program_name. Use atexit to close stdout carefully upon exit.
+
+ Add a bunch of .gitignore files.
+
+ Avoid a gcc format warning: * debug/clearfat/clearfat.c (_do_help): Use fputs, not printf.
+
+ Remove now-generated files. * po/ca.po, po/cs.po, po/da.po, po/de.po, po/es.po, po/fr.po: * po/gl.po, po/id.po, po/it.po, po/ja.po, po/nl.po, po/nn.po: * po/pl.po, po/pt.po, po/pt_BR.po, po/ru.po: * po/sv.po, po/tr.po, po/uk.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: * po/Makevars: Remove now-generated file. * po/parted.pot: Remove -generated file.
+
+ mv parted.m4 into new dir, m4/
+ * Makefile.am (EXTRA_DIST): Remove parted.m4.
+ Now that it's in m4, it's included automatically.
+ (aclocal_DATA): Remove unnecessary definition.
+
+ * libparted/tests/label.c: Fail if _create_disk returns NULL. Make global and functions static. * libparted/tests/common.c (_create_disk): Handle fopen failure. Handle fclose failure.
+
+ Include <config.h> from every .c file: * libparted/unit.c, libparted/timer.c: * libparted/cs/natmath.c, libparted/cs/constraint.c: * libparted/tests/label.c, libparted/tests/common.c: * libparted/fs/fat/count.c, libparted/fs/fat/bootsector.c: * libparted/fs/fat/context.c, libparted/fs/fat/fatio.c: * libparted/fs/fat/fat.c, libparted/fs/fat/clstdup.c: * libparted/fs/fat/resize.c, libparted/fs/fat/traverse.c: * libparted/fs/fat/table.c, libparted/fs/fat/calc.c: * libparted/fs/amiga/amiga.c, libparted/labels/fdasd.c: * libparted/labels/dvh.c, libparted/labels/efi_crc32.c: * libparted/labels/vtoc.c, parted/command.c: * libparted/tests/label.c, libparted/tests/common.c:
+
+ * libparted/libparted.c: Include "configmake.h" for LOCALEDIR defn.
+
+ parted: Detect/report stdout write errors. * parted/parted.c: Include "closeout.h" for close_stdout. Include "configmake.h" for LOCALEDIR definition. Include "version-etc.h" for version_etc prototype. Declare global, program_name. (PROGRAM_NAME, AUTHORS): Define. (_version): Use gnulib's version_etc. (main): Set program_name. Use atexit to close stdout carefully upon exit.
+
+ Include <config.h>, not "../config.h".
+
+ Begin adjusting Makefile.am files to use gnulib. * libparted/Makefile.am (partedincludedir): Add -I$(top_srcdir)/lib. * parted/Makefile.am (parted_LDADD): Add lib/libparted.la. (partedincludedir): Add -I$(top_srcdir)/lib.
+
+2007-02-25 Jim Meyering <jim@meyering.net>
+
+ Update to use gnulib, and newer autoconf, automake conventions.
+ Add build-from-checkout instructions.
+ * README-hacking: New file. Mostly copied from coreutils'
+ README-cvs.
+ * bootstrap: Generate ChangeLog here, if needed/possible,
+ before invoking tools that require its presence.
+ * autogen.sh: Remove this file. It's superseded by bootstrap.
+
+ Use gnulib, modernize some uses of autoconf, automake, etc.
+ * bootstrap, bootstrap.conf: New files.
+
+ * configure.ac: Modernize.
+ Require the latest stable releases: autoconf-2.61, automake-1.10.
+ Require gettext-0.15.
+ Use more modern form of AC_INIT, etc.
+ Now that the version string must be hard-coded in the AC_INIT line,
+ add code to ensure it agrees with the PED_* and LT_* variables.
+ Use AM_CPPFLAGS, not CFLAGS
+ Remove obsolete setting of ALL_LINGUAS.
+ Don't set CFLAGS=-D_GNU_SOURCE=1 explicitly , since that's already
+ done via AC_GNU_SOURCE, which gnulib pulls in by default,
+ through gl_EARLY.
+ Use gl_INIT and gl_EARLY.
+
+ * Makefile.am (SUBDIRS): Add lib.
+ (EXTRA_DIST): Remove names that are automatically included.
+ * lib/Makefile.am: New file.
+
+2007-02-23 Anant Narayanan <anant@theghost.local>
+
+ Fix memleaks. Patch thanks to Mike Hommey
+
+2007-02-18 Debarshi Ray <rishi@gnu.org>
+
+ Introduced MAINTAINERCLEANFILES in Makefile.am for carrying out 'make maintainer-clean'.
+
+ Cleaning up nested structs & unions.
+
+2007-02-16 Jim Meyering <jim@meyering.net>
+
+ Avoid compiler warnings with gcc -Wall -Wshadow.
+ * libparted/arch/linux.c (init_ide): Add missing "break" at end of
+ final case: stmt.
+ Add "default:" in the same switch to avoid a compiler warning.
+ * libparted/fs/fat/bootsector.c (fat_boot_sector_analyse): Likewise.
+ * libparted/fs/fat/resize.c (ask_type): Likewise.
+ * libparted/fs/fat/traverse.c (fat_dir_entry_set_first_cluster):
+ Likewise.
+ * debug/clearfat/clearfat.c (_calc_fat_entry_offset): Likewise.
+
+ * parted/parted.c (_timer_handler): Cast time_t values to "int"
+ to agree with %d printf format.
+ (g_timer): Rename file-scoped global from shadowed "timer".
+ Update all uses of the global.
+ (version_msg): Remove decl of unused global.
+
+ * parted/ui.c (current_exception_opt): Remove decl of unused global.
+
+ * libparted/filesys.c (ped_file_system_close): Remove unused label.
+ * libparted/unit.c (parse_chs): Likewise.
+
+ * libparted/debug.c (ped_assert): Use "int" as type of backtrace
+ return value, not size_t.
+
+ * libparted/fs/reiserfs/reiserfs.c (reiserfs_check):
+ Guard declaration of local with #ifdef HAVE_REISERFS_FS_CHECK,
+ since it's used only in a similarly-guarded block.
+ (reiserfs_fs_check): Likewise for this file-scoped global.
+
+ Avoid warnings about unused file-scoped global variables.
+ * libparted/fs/hfs/hfs.h (hfs_type, hfsplus_type): Remove these
+ declarations of file-scoped static variables.
+ * libparted/fs/hfs/hfs.c: Put them here, instead.
+
+ * libparted/fs/fat/table.c (_test_code_active): Remove unused function.
+
+ * libparted/arch/linux.c: Add casts to avoid performing
+ pointer arithmetic on "void *" pointers.
+
+ * libparted/fs/hfs/file_plus.c (hfsplus_file_read):
+ Don't do pointer arithmetic on a "void *" pointer.
+ (hfsplus_file_write): Likewise.
+
+ * libparted/fs/fat/count.c (flag_traverse_dir): Move decl of
+ unused local into #if-0'd block where it is referenced.
+ (print_chain): Guard definition with #ifdef PED_VERBOSE,
+ since the sole use of this function is guarded the same way.
+
+ * libparted/fs/amiga/amiga.c: (_amiga_valid_block_id):
+ Remove unused function.
+ (_amiga_get_bstr): Likewise.
+ (_amiga_set_bstr): Likewise.
+
+ Remove unused labels and/or declarations of unused variables.
+ * parted/ui.c (_readline): Likewise.
+ * libparted/cs/constraint.c (_constraint_get_canonical_start_range):
+ Likewise.
+ * libparted/cs/geom.c (ped_geometry_read): Likewise.
+ * libparted/fs/amiga/apfs.c (_generic_apfs_probe): Likewise.
+ * libparted/fs/ext2/ext2_mkfs.c (ext2_mkfs_write_meta): Likewise.
+ * libparted/disk.c: Likewise.
+ * libparted/fs/hfs/hfs.c: Likewise.
+ * libparted/fs/fat/fat.c: Likewise.
+ * libparted/fs/fat/clstdup.c: Likewise.
+ * libparted/fs/fat/calc.c: Likewise.
+ * libparted/fs/ext2/ext2.c: Likewise.
+ * libparted/fs/amiga/affs.c: Likewise.
+ * libparted/fs/amiga/asfs.c: Likewise.
+ * libparted/labels/aix.c: Likewise.
+ * libparted/labels/sun.c: Likewise.
+ * libparted/labels/pc98.c: Likewise.
+ * libparted/labels/mac.c: Likewise.
+ * libparted/labels/dos.c: Likewise.
+ * libparted/labels/loop.c (loop_alloc): Likewise.
+ * libparted/labels/gpt.c: Likewise.
+ * libparted/labels/dvh.c (dvh_alloc): Likewise.
+ (dvh_read) [!DISCOVER_ONLY]: Add "default:" in a switch.
+
+ * libparted/labels/fdasd.c (fdasd_reread_partition_table):
+ Remove decl of unused local(s).
+ (fdasd_get_partition_data): Likewise.
+ (fdasd_partition_type): Remove unused function.
+ (fdasd_write_vtoc_labels): Likewise.
+ (fdasd_change_volser): Likewise.
+ (fdasd_check_volser): Likewise.
+ (fdasd_reread_partition_table): Likewise.
+
+2007-02-16 Jim Meyering <jim@meyering.net>
+
+ * libparted/labels/rdb.c (amiga_read): Remove decl of unused local(s).
+
+ * libparted/labels/bsd.c (bsd_partition_new): Remove unused label.
+
+ * libparted/labels/dasd.c: Remove unused labels and declarations
+ of unused variables.
+
+2007-02-15 Debarshi Ray <rishi@gnu.org>
+
+ Fix the style of typedef, enum, struct and __attribute__ ((packed)).
+
+2007-02-14 Debarshi Ray <rishi@gnu.org>
+
+ Deprecating ped_[register|unregister]_disk_type in favour of ped_disk_type_[register|unregister].
+
+2007-02-14 Jim Meyering <jim@meyering.net>
+
+ Use lighter-weight fputs and putchar in place of printf, when possible.
+ * parted/ui.c (wipe_line, _dump_history, reset_env):
+ (sigsegv_handler, sigfpe_handler, sigill_handler, _readline):
+ (help_msg, interactive_mode, non_interactive_mode): Use puts,
+ fputs, and putchar in place of printf, when possible.
+ (reset_env): Correct misleading indentation.
+ (wipe_line): Split a long string.
+
+ Make it so "make distcheck" passes.
+ * doc/po4a.mk (updatepo): Don't choke when *.$(lang).po matches no file.
+ * doc/C/Makefile.am (updatepo): Don't do anything when $(srcdir) is not writable.
+
+2007-02-14 Debarshi Ray <rishi@gnu.org>
+
+ Fixed the copyright notices.
+
+ Cleaned up the formatting of AUTHORS.
+
+ Tidying up the formatting and comments in linux_swap.c.
+
+2007-02-13 Jim Meyering <jim@meyering.net>
+
+ Don't define _GNU_SOURCE manually.
+ It's better not to define _GNU_SOURCE manually.
+ By using AC_GNU_SOURCE, you get the definition in exactly one place:
+ in config.h. I verified that each affected file also includes config.h.
+
+ Don't define _GNU_SOURCE manually.
+ * configure.ac: Use AC_GNU_SOURCE instead.
+ * libparted/arch/gnu.c: Remove definition of _GNU_SOURCE.
+ * libparted/arch/linux.c: Likewise.
+ * libparted/device.c: Likewise.
+ * parted/table.c: Likewise.
+ * parted/table.h: Likewise.
+
+2007-02-13 Jim Meyering <jim@meyering.net>
+
+ Remove some #ifdefs
+ Remove some #ifdefs.
+ * parted/table.c (L_): define.
+ Remove in-function #ifdefs; use L_(str) instead.
+
+ * libparted/labels/fdasd.c (GETARG): Remove unused definition.
+ A tiny change...
+
+2007-02-13 Otavio Salvador <otavio@ossystems.com.br>
+
+ Create 'm4' directory when generating the building system
+
+2007-02-13 Jim Meyering <jim@meyering.net>
+
+ Work with automake-1.10.
+ I've just tried building parted from scratch (running ./autogen.sh
+ after git-clone) and hit a couple of snags:
+
+ Without aclocal's -I m4, ./autogen.sh produced this:
+
+ configure.ac:192: warning: macro `AM_GNU_GETTEXT_VERSION' not found in library
+ configure.ac:193: warning: macro `AM_GNU_GETTEXT' not found in library
+ configure.ac:192: error: possibly undefined macro: AM_GNU_GETTEXT_VERSION
+ If this token and others are legitimate, please use m4_pattern_allow.
+ See the Autoconf documentation.
+
+ With automake-1.10, I got this:
+
+ parted/Makefile.am:5: compiling `command.c' with per-target flags requires `AM_PROG_CC_C_O' in `configure.ac'
+
+ Here's a patch that fixes those and also removes some trailing blanks.
+
+2007-02-13 Jim Meyering <jim@meyering.net>
+
+ Compile warning-free with "gcc -Wall -Wshadow".
+ Hello,
+
+ I find that keeping code warning-free (wrt gcc -Wall -Wshadow)
+ makes it easier to avoid certain classes of bugs.
+
+ Compiling with gcc -Wall -Wshadow evoked a few warnings
+ on a Debian/unstable system. Here are patches to fix those:
+
+ * libparted/exception.c (default_handler): Rename parameter "ex"
+ to "e", to avoid shadowing file-scoped global.
+ * libparted/fs/linux_swap/linux_swap.c (_generic_swap_probe): Add a
+ "can't happen" (with current callers) "default: goto error" clause
+ in a switch to avoid a may-be-used-uninitialized warning.
+ (_generic_swap_clobber): Likewise.
+ * libparted/fs/hfs/reloc_plus.c (hfsplus_pack_free_space_from_block):
+ Rename local variable "div" to "divisor", to avoid shadowing
+ the function in <stdlib.h>.
+ * libparted/fs/hfs/reloc.c (hfs_pack_free_space_from_block): Likewise.
+ * libparted/fs/hfs/cache.c (hfsc_cache_add_extent): Rename parameter
+ "index" to "ref_index" to avoid shadowing the <string.h> function.
+ * libparted/labels/sun.c (sun_partition_enumerate): Rename local
+ variable "i" to "j", to avoid shadowing another local.
+
+2007-02-13 Jim Meyering <jim@meyering.net>
+
+ configure.ac: Add LOCALEDIR definition to CFLAGS only once.
+ I noticed that there were two identical lines in configure.ac,
+ adding the same LOCALEDIR definition to CFLAGS.
+ This change removes the latter.
+
+ * configure.ac: Add LOCALEDIR definition to CFLAGS only once.
+
+2007-02-12 Riccardo Setti <giskard@piton.asimov.bot>
+
+ Added a pkgconfig file for libparted, adjusted Makefile.am and configure.ac for reflect the canges
+ modified: Makefile.am
+ modified: configure.ac
+ new file: libparted.pc.in
+
+2007-01-30 Debarshi Ray <rishi@gnu.org>
+
+ Renaming PARTITION_EXT to PARTITION_DOS_EXT in MSDOS disk-label code, to maintain similarity with Linux v2.6.18.2
+
+2007-01-17 Debarshi Ray <rishi@gnu.org>
+
+ Enable support for swsusp partitions, and the ability to differentiate between old and new versions of linux-swap partitions. Changed the swap_init signature and removed extra ped_geometry_read from _swap*_open.
+
+2007-01-16 Debarshi Ray <rishi@gnu.org>
+
+ Synchronize the linux-swap (new version) header according to the Linux kernel sources.
+
+ cb6ca73be06f360308e6a2fccb7142ed8175af29 continued.
+
+2007-01-15 Debarshi Ray <rishi@gnu.org>
+
+ Add stdint.h stdlib.h & string.h to include/parted/parted.h and remove them from other files.
+
+2007-01-14 Debarshi Ray <rishi@gnu.org>
+
+ Synchronise manual page and --help documentation.
+
+2007-01-12 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Updated i18n information.
+
+ Add ped_device_cache_remove() prototype. (cherry picked from commit cb53b87ab2f779633f152f478c7f8c99c2fd1817)
+
+ Only call _disk_warn_loss(disk) in do_mklabel() if disk is not NULL. Fixes a segfault when initializing new volumes. (cherry picked from commit 70e3bf5e7818df49a11e203ac8519e037818d592)
+
+ Fix a segfault in ped_assert() where the wrong pointer is freed in the backtrace. (cherry picked from commit 63f7b33b352d0d699efeb1095340ed6139c49e3b)
+
+ Add the ped_device_cache_remove() function to remove a device from the cache. (cherry picked from commit 5fb6658d124050a9dc27a87f2e1c3ffd3d1ad7c0)
+
+ Updated the AUTHORS file. (cherry picked from commit 7ab32d423cc43a5e9372a7dc000feb183db9a89a)
+
+2007-01-11 Debarshi Ray <rishi@gnu.org>
+
+ Rectify segmentation fault caused by 9e05418de3477666b0709f5d1996149febd33100
+
+ Update doc/C/parted.8 to document --list.
+
+2007-01-06 Otavio Salvador <otavio@debian.org>
+
+ parted/parted.c: Destroy all objects before return when called with --list or --all option.
+
+2007-01-05 Anant Narayanan <anant@kix.in>
+
+ Dump readline history on crash
+
+2006-12-14 Anant Narayanan <anant@kix.in>
+
+ Loosen requirement for the 'check' library.
+
+2006-12-14 Debarshi Ray <rishi@gnu.org>
+
+ Update AUTHORS.
+
+2006-12-13 Leslie P. Polzer <polzer@gnu.org>
+
+ added scripts/update-po
+
+2006-12-12 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Merge branches 'master' and 'master' of git+ssh://dcantrell-guest@git.debian.org/git/parted/parted
+
+2006-12-11 Leslie P. Polzer <polzer@gnu.org>
+
+ Updated translations.
+
+2006-12-11 Debarshi Ray <rishi@gnu.org>
+
+ Alias 'print list' with 'print all'.
+
+2006-12-11 Otavio Salvador <otavio@ossystems.com.br>
+
+ Include a disk probing test
+
+ If CHECK is installed on configure time, build our unittest framework
+
+ Add CHECK unittext library detection to Autoconf script
+
+2006-12-09 Leslie P. Polzer <polzer@gnu.org>
+
+ Release script: cannot call "return" from top level; replaced with "exit".
+
+2006-12-08 Debarshi Ray <rishi@gnu.org>
+
+ Zero sized device is shown as 0.00B and not -0.00kB.
+
+2006-12-06 Otavio Salvador <otavio@debian.org>
+
+ libparted/exception.c: Dynamically allow space of exception message.
+
+ Output a backtrace when catching SEGV_MAPERR or a general SIGSEGV signals.
+
+2006-12-06 Debarshi Ray <rishi@gnu.org>
+
+ Implement 'print devices'.
+
+2006-12-05 Benno Schulenberg <bensberg@justemail.net>
+
+ Translate the copyright message, and hard wrap it
+
+2006-12-05 Otavio Salvador <otavio@debian.org>
+
+ libparted/disk.c: Standarize the way we walk throught the disk types overall the code
+
+2006-12-05 Otavio Salvador <otavio@debian.org>
+
+ Revert "Add check unittest support and a initial test for a resizing bug."
+ This code wasn't ready for commit yet.
+
+ This reverts commit ba43cb6ff7bb1d945062e25b94efecb1b84c0c33.
+
+2006-12-05 Otavio Salvador <otavio@debian.org>
+
+ parted/parted.c: Remove useless line break
+
+2006-12-04 Otavio Salvador <otavio@ossystems.com.br>
+
+ Add check unittest support and a initial test for a resizing bug.
+
+2006-12-03 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Fix the upload script to correctly reference the sig files.
+
+ Remove ChangeLog, doc/mdate-sh, and doc/texinfo.tex since they are unmanaged files and get generated automatically at release time.
+
+ Generate ChangeLog before running the autogen tools because we need a file called 'ChangeLog' to exist when running those tools.
+
+ Pass git changelog through 'fold -s' to wrap long lines.
+
+ Added the --enable-selinux switch to the configure script. If set, it adds -lselinux and -lsepol to the list of libraries to link libparted with. Bumped the version number to 1.9.9 since this is the edge branch.
+
+ Rename all old ChangeLog files to ChangeLog.0. Added code to the tarball_upload.sh script to generate a toplevel ChangeLog from the git changelog.
+
+2006-12-02 Leslie P. Polzer <polzer@gnu.org>
+
+ Updated URL of static parted in docs.
+
+2006-12-02 Anant Narayanan <anant@kix.in>
+
+ Make parted ignore '-i' option instead of failing
+
+ Support machine parseable output.
+
+2006-11-30 Debarshi Ray <rishi@gnu.org>
+
+ Cleanup _partition_warn_busy, _disk_warn_busy, _partition_warn_loss and _disk_warn_loss.
+
+2006-11-28 Otavio Salvador <otavio@debian.org>
+
+ Proper print when there're no extended partitions, but partition names (patch from Sven Luther)
+
+ libparted/arch/linux.c: initialize task point to please GCC
+
+ Don't enforce libselinux and libsepol linking when using device-mapper support
+
+2006-11-28 Debarshi Ray <rishi@gnu.org>
+
+ Warn before mklabel and mkfs.
+
+ Make mktable aliased to mklabel.
+
+2006-11-27 Otavio Salvador <otavio@debian.org>
+
+ Fix 'print' command help
+ 'print' command help was missing a new line at end and then breaking
+ the help printing.
+
+2006-11-27 Leslie P. Polzer <polzer@gnu.org>
+
+ Updated translations.
+
+2006-11-26 Otavio Salvador <otavio@debian.org>
+
+ Remove doc/mdate-sh and doc/texinfo.tex since they are included when we run autogen.sh
+
+2006-11-23 Anant Narayanan <anant@kix.in>
+
+ Introduce the -list command-line switch, patch by Debarshi Ray
+
+2006-11-22 Otavio Salvador <otavio@debian.org>
+
+ Avoid warning about user permissions when using --version
+
+ parted/parted.c: Remove redeclaration of current_dev fixing a compilation error
+
+ Readd the 'return 0;' to please GCC
+ The commit d000de8f062ce070d5310f164ebf4f5ed26fcad0 included a
+ compilation warning that makes sense when Parted is built without
+ debugging. To solve the warning and ensure that when running without
+ debugging we return a sinsible value I've reverted
+ d000de8f062ce070d5310f164ebf4f5ed26fcad0 change and added a nice
+ comment to avoid misunderstandings again.
+
+2006-11-22 Anant <anant@theghost.(none)>
+
+ Fix loop in print_all, thanks to Debarshi Ray for the patch.
+
+2006-11-20 Otavio Salvador <otavio@debian.org>
+
+ Remove useless 'return 0;' call
+ Since PED_ASSERT will always be run, the return 0 is useless, hence
+ removed.
+
+ Remove useless semicolon from PED_ASSERT calls
+
+2006-11-20 David Cantrell <dcantrel@mortise.boston.redhat.com>
+
+ Generate SHA-1 digests of the archive files and upload those along with the actual archive files.
+
+2006-11-20 Otavio Salvador <otavio@debian.org>
+
+ Rework backtrace support
+ While doing a deeply check about the backtrace support I found that
+ -rdynamic is useless on CFLAGS and my previous change was wrong since
+ it wasn't avoiding -rdynamic on LFLAGS if the running system missed
+ the execinfo.h support. That would probably cause a build error on
+ some systems.
+
+2006-11-17 David Cantrell <dcantrell@redhat.com>
+
+ Final changes for parted-1.8.0
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@896 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-11 Otavio Salvador <otavio@debian.org>
+
+ Apply changes done on Darcs and suitable for release on 1.8 final:
+ Sat Nov 11 18:09:17 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Enable backtrace just if it's has support on libc.
+
+ Sat Nov 11 17:41:12 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Add -rdynamic to LDFLAGS.
+
+ Sat Nov 11 17:40:19 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Add -rdynamic to CFLAGS
+
+ Sat Nov 11 17:38:11 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Print backtrace stack when throwing an exception
+
+
+
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@895 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-11 Otavio Salvador <otavio@debian.org>
+
+ Remove files that can be generated.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@894 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-11 Otavio Salvador <otavio@debian.org>
+
+ Changes done on darcs repository suitable for 1.8 release:
+ Sat Nov 11 10:41:54 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Break lines bigger then 80 columns.
+
+ Sat Nov 11 02:02:26 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Fix autogen.sh script to call autopoint with -f
+
+
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@892 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-10 Otavio Salvador <otavio@debian.org>
+
+ Changes done on darcs repository suitable for 1.8 release:
+ Fri Nov 10 23:19:15 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Code clean-up on registering and unregistering of disks
+
+ * libparted/disk.c (ped_register_disk_type, ped_unregister_disk_type):
+ Clean-up. Patch sent by Debarshi 'Rishi' Ray <debarshi.ray@gmail.com>.
+
+ Fri Nov 10 23:14:58 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Fix filesystem unregistering
+
+ * libparted/filesys.c (ped_file_system_type_unregister): Handle
+ instances where fs_types == NULL and the given fs_type is not in
+ the list of registered file-system types. Some code clean-up.
+ Patch sent by Debarshi 'Rishi' Ray <debarshi.ray@gmail.com>.
+
+
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@891 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-10 Otavio Salvador <otavio@debian.org>
+
+ Changes done on darcs repository suitable for 1.8 release:
+ Wed Nov 8 20:40:43 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * Merge libparted/ChangeLog conflict caused by Subversion syncing
+
+ Wed Nov 8 21:15:58 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * doc/C/parted.8: small documentation simplification
+
+ Wed Nov 8 20:09:03 BRST 2006 Otavio Salvador <otavio@debian.org>
+ * libparted/fs/hfs/probe.c: Fix a segmentation fault when running without debug
+
+
+
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@890 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-05 David Cantrell <dcantrell@redhat.com>
+
+ Updates for parted-1.8.0rc3
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@882 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * arch/linux.c: Define PROC_DEVICES_BUFSIZ for reading /proc/devices, set to 16384.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@881 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-11-02 David Cantrell <dcantrell@redhat.com>
+
+ * labels/mac.c (_rawpart_is_boot): Check for Apple_Boot type. * labels/mac.c (_rawpart_analyse): Don't check the data_region_length against the part->geom.length for boot partitions.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@880 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-10-31 David Cantrell <dcantrell@redhat.com>
+
+ 2048 -> 1024
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@871 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * device.c (canonicalize_file_name): calloc should use sizeof(char) instead of 1 (from Debarshi Ray). * arch/linux.c (readFD): Use a 1KB buffer to read /proc/devices rather than a 16KB buffer. Init filesize to zero at declaration. Combine error and EOF check for read() loop. Memory cleanups at function exit. Use malloc() instead of calloc() (from Debarshi Ray). * arch/linux.c (_is_dm_major): Test expression and loop cleanups (from Debarshi Ray).
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@870 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * parted.c (do_print): Add device-mapper type to the transport type list (from Debarshi Ray).
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@869 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-10-26 David Cantrell <dcantrell@redhat.com>
+
+ * arch/linux.c: Go to error_free_arch_specific rather than error_free_dev for init_generic() failure on PED_DEVICE_UBD.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@866 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Line length fixes.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@865 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-10-11 David Cantrell <dcantrell@redhat.com>
+
+ Need the filename: directive as well.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@858 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Set directive file version to 1.1.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@855 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Conditionalize the device-mapper stuff.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@852 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ i18n updates.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@850 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Bump version.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@849 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Updates for 1.8.0rc2 release.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@848 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Added /dev/mapper device support (patch from Peter Jones).
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@847 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-10-09 David Cantrell <dcantrell@redhat.com>
+
+ * cs/geom.c (ped_geometry_read): Do not throw PED_EXCEPTION_ERROR here if accessing sectors outside of partition boundary. Returning false causes ped_geometry_check() to shift correctly anyway. This occurs on current Mac disklabels, among other systems.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@845 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * disk.c (ped_unregister_disk_type): Handle instances where disk_types == NULL and the given type is not in the list of registered disk types (from Debarshi Ray).
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@844 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * parted.c (do_print): Define transport type list and display disk model type and transport type (from Debarshi Ray).
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@843 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Forgot changelog notice.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@842 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Updated i18n files.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@841 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-10-06 David Cantrell <dcantrell@redhat.com>
+
+ * arch/linux.c: Change __GNU_SOURCE define to _GNU_SOURCE (only one underscore at the beginning). Fixes problem with certain systems not getting posix_memalign() defined during compilation.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@840 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * scripts/release/tarball_upload.sh: Since v1.0 directive files will no longer be supported by ftp-upload.gnu.org after 2006, modified the upload script to use the v1.1 format.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@839 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * scripts/release/tarball_upload.sh: Support the -a (or --alpha) switch on the tarball upload script. This switch will upload the release to alpha.gnu.org rather than ftp.gnu.org.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@838 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-09-15 David Cantrell <dcantrell@redhat.com>
+
+ Fix execution of autogen.sh and configure.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@836 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ These (upx and statifier) are not called from anywhere.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@835 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Updated for parted-1.8.0rc1.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@834 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ * doc/po4a.mk: Removed fake* stuff. Fixed all-local target so you don't end up in an infinite make loop trying to make '*'. Fixed the remove target as well.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@833 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Tabs for the updatepo target.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@832 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Add vtoc.h and fdasd.h to the list.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@831 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Removed the extra double quote at the end of line 6 in partprobe.8.pt_BR.po. Other updates for i18n.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@830 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Added a script to clean the tree after running 'make distclean'. Gets it back to the checked-out state from svn.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@829 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ i18n updates for parted-1.8.0.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@828 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Removed *.h files from the Makefile.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@827 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ i18n updates for parted-1.8.0.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@826 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Removed from version control.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@825 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ i18n updates for parted-1.8.0.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@824 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Removed from version control.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@823 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+ Updated for version 1.8.0rc1.
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@822 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-09-14 David Cantrell <dcantrell@redhat.com>
+
+ * labels/mac.c (mac_partition_new): memset() inits everything to zero, no need to do it manually.
+ * labels/mac.c (mac_partition_set_flag): Prevent LVM and RAID partition
+ types from corrupting the partition table.
+
+ * arch/linux.c (_blkpg_add_partition): Set linux_part.length based on
+ whether or not this partition is PED_PARTITION_EXTENDED or not.
+
+ * arch/linux.c (_disk_sync_part_table): Remove the check and continue
+ for PED_PARTITION_EXTENDED types.
+
+
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@821 2d424fd7-7fe2-0310-af74-8bc65edeb173
+
+2006-09-14 Anant Narayanan <anant@kix.in>
+
+ Fix ChangeLog
+ git-svn-id: svn://svn.debian.org/svn/parted/upstream/trunk@820 2d424fd7-7fe2-0310-af74-8bc65edeb173
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..07b331f
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,127 @@
+# Having a separate GNUmakefile lets me 'include' the dynamically
+# generated rules created via cfg.mk (package-local configuration)
+# as well as maint.mk (generic maintainer rules).
+# This makefile is used only if you run GNU Make.
+# It is necessary if you want to build targets usually of interest
+# only to the maintainer.
+
+# Copyright (C) 2001, 2003, 2006-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# If the user runs GNU make but has not yet run ./configure,
+# give them a diagnostic.
+_gl-Makefile := $(wildcard [M]akefile)
+ifneq ($(_gl-Makefile),)
+
+# Make tar archive easier to reproduce.
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --sort=name
+
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
+include Makefile
+
+# Some projects override e.g., _autoreconf here.
+-include $(srcdir)/cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include $(srcdir)/maint.mk
+
+# Ensure that $(VERSION) is up to date for dist-related targets, but not
+# for others: rerunning autoreconf and recompiling everything isn't cheap.
+_have-git-version-gen := \
+ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
+ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
+ _is-dist-target ?= $(filter-out %clean, \
+ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS)))
+ _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
+ ifneq (,$(_is-dist-target)$(_is-install-target))
+ _curr-ver := $(shell cd $(srcdir) \
+ && $(_build-aux)/git-version-gen \
+ .tarball-version \
+ $(git-version-gen-tag-sed-script))
+ ifneq ($(_curr-ver),$(VERSION))
+ ifeq ($(_curr-ver),UNKNOWN)
+ $(info WARNING: unable to verify if $(VERSION) is the correct version)
+ else
+ ifneq (,$(_is-install-target))
+ # GNU Coding Standards state that 'make install' should not cause
+ # recompilation after 'make all'. But as long as changing the version
+ # string alters config.h, the cost of having 'make all' always have an
+ # up-to-date version is prohibitive. So, as a compromise, we merely
+ # warn when installing a version string that is out of date; the user
+ # should run 'autoreconf' (or something like 'make distcheck') to
+ # fix the version, 'make all' to propagate it, then 'make install'.
+ $(info WARNING: version string $(VERSION) is out of date;)
+ $(info run '$(MAKE) _version' to fix it)
+ else
+ $(info INFO: running autoreconf for new version string: $(_curr-ver))
+GNUmakefile: _version
+ touch GNUmakefile
+ endif
+ endif
+ endif
+ endif
+endif
+
+.PHONY: _version
+_version:
+ cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
+ $(MAKE) $(AM_MAKEFLAGS) Makefile
+
+else
+
+.DEFAULT_GOAL := abort-due-to-no-makefile
+srcdir = .
+
+# The package can override .DEFAULT_GOAL to run actions like autoreconf.
+-include ./cfg.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+include ./maint.mk
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+$(MAKECMDGOALS): abort-due-to-no-makefile
+endif
+
+abort-due-to-no-makefile:
+ @echo There seems to be no Makefile in this directory. 1>&2
+ @echo "You must run ./configure before running '$(MAKE)'." 1>&2
+ @exit 1
+
+endif
+
+# Tell version 3.79 and up of GNU make to not build goals in this
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+ dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
+.NOTPARALLEL:
+endif
+endif
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..6e3904a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,368 @@
+Installation Instructions
+*************************
+
+ Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2023 Free Software
+Foundation, Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell command ‘./configure && make && make install’
+should configure, build, and install this package. The following
+more-detailed instructions are generic; see the ‘README’ file for
+instructions specific to this package. Some packages provide this
+‘INSTALL’ file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The ‘configure’ shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a ‘Makefile’ in each directory of the package.
+It may also create one or more ‘.h’ files containing system-dependent
+definitions. Finally, it creates a shell script ‘config.status’ that
+you can run in the future to recreate the current configuration, and a
+file ‘config.log’ containing compiler output (useful mainly for
+debugging ‘configure’).
+
+ It can also use an optional file (typically called ‘config.cache’ and
+enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves the
+results of its tests to speed up reconfiguring. Caching is disabled by
+default to prevent problems with accidental use of stale cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how ‘configure’ could check whether to do them, and mail
+diffs or instructions to the address given in the ‘README’ so they can
+be considered for the next release. If you are using the cache, and at
+some point ‘config.cache’ contains results you don’t want to keep, you
+may remove or edit it.
+
+ The file ‘configure.ac’ (or ‘configure.in’) is used to create
+‘configure’ by a program called ‘autoconf’. You need ‘configure.ac’ if
+you want to change it or regenerate ‘configure’ using a newer version of
+‘autoconf’.
+
+ The simplest way to compile this package is:
+
+ 1. ‘cd’ to the directory containing the package’s source code and type
+ ‘./configure’ to configure the package for your system.
+
+ Running ‘configure’ might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type ‘make’ to compile the package.
+
+ 3. Optionally, type ‘make check’ to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type ‘make install’ to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the ‘make install’ phase executed with root
+ privileges.
+
+ 5. Optionally, type ‘make installcheck’ to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior ‘make install’ required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing ‘make clean’. To also remove the
+ files that ‘configure’ created (so you can compile the package for
+ a different kind of computer), type ‘make distclean’. There is
+ also a ‘make maintainer-clean’ target, but that is intended mainly
+ for the package’s developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type ‘make uninstall’ to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide ‘make
+ distcheck’, which can by used by developers to test that all other
+ targets like ‘make install’ and ‘make uninstall’ work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the ‘configure’ script does not know about. Run ‘./configure --help’
+for details on some of the pertinent environment variables.
+
+ You can give ‘configure’ initial values for configuration parameters
+by setting variables in the command line or in the environment. Here is
+an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU ‘make’. ‘cd’ to the
+directory where you want the object files and executables to go and run
+the ‘configure’ script. ‘configure’ automatically checks for the source
+code in the directory that ‘configure’ is in and in ‘..’. This is known
+as a “VPATH†build.
+
+ With a non-GNU ‘make’, it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use ‘make distclean’ before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types—known as “fat†or
+“universal†binaries—by specifying multiple ‘-arch’ options to the
+compiler but only a single ‘-arch’ option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the ‘lipo’ tool if you have problems.
+
+Installation Names
+==================
+
+ By default, ‘make install’ installs the package’s commands under
+‘/usr/local/bin’, include files under ‘/usr/local/include’, etc. You
+can specify an installation prefix other than ‘/usr/local’ by giving
+‘configure’ the option ‘--prefix=PREFIX’, where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option ‘--exec-prefix=PREFIX’ to ‘configure’, the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like ‘--bindir=DIR’ to specify different values for particular
+kinds of files. Run ‘configure --help’ for a list of the directories
+you can set and what kinds of files go in them. In general, the default
+for these options is expressed in terms of ‘${prefix}’, so that
+specifying just ‘--prefix’ will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to ‘configure’; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+‘make install’ command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, ‘make install
+prefix=/alternate/directory’ will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+‘${prefix}’. Any directories that were specified during ‘configure’,
+but not in terms of ‘${prefix}’, must each be overridden at install time
+for the entire installation to be relocated. The approach of makefile
+variable overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation. However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the ‘DESTDIR’ variable. For
+example, ‘make install DESTDIR=/alternate/directory’ will prepend
+‘/alternate/directory’ before all installation names. The approach of
+‘DESTDIR’ overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of ‘${prefix}’
+at ‘configure’ time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving ‘configure’ the
+option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’.
+
+ Some packages pay attention to ‘--enable-FEATURE’ options to
+‘configure’, where FEATURE indicates an optional part of the package.
+They may also pay attention to ‘--with-PACKAGE’ options, where PACKAGE
+is something like ‘gnu-as’ or ‘x’ (for the X Window System). The
+‘README’ should mention any ‘--enable-’ and ‘--with-’ options that the
+package recognizes.
+
+ For packages that use the X Window System, ‘configure’ can usually
+find the X include and library files automatically, but if it doesn’t,
+you can use the ‘configure’ options ‘--x-includes=DIR’ and
+‘--x-libraries=DIR’ to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of ‘make’ will be. For these packages, running ‘./configure
+--enable-silent-rules’ sets the default to minimal output, which can be
+overridden with ‘make V=1’; while running ‘./configure
+--disable-silent-rules’ sets the default to verbose, which can be
+overridden with ‘make V=0’.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
+is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn’t work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX ‘make’ updates targets which have the same timestamps as their
+prerequisites, which makes it generally unusable when shipped generated
+files such as ‘configure’ are involved. Use GNU ‘make’ instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its ‘<wchar.h>’ header file. The option ‘-nodtk’ can be used as a
+workaround. If GNU CC is not installed, it is therefore recommended to
+try
+
+ ./configure CC="cc"
+
+and if that doesn’t work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don’t put ‘/usr/ucb’ early in your ‘PATH’. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in ‘/usr/bin’. So, if you need ‘/usr/ucb’
+in your ‘PATH’, put it _after_ ‘/usr/bin’.
+
+ On Haiku, software installed for all users goes in ‘/boot/common’,
+not ‘/usr/local’. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features ‘configure’ cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, ‘configure’ can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+‘--build=TYPE’ option. TYPE can either be a short name for the system
+type, such as ‘sun4’, or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file ‘config.sub’ for the possible values of each field. If
+‘config.sub’ isn’t included in this package, then this package doesn’t
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option ‘--target=TYPE’ to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+“host†platform (i.e., that on which the generated programs will
+eventually be run) with ‘--host=TYPE’.
+
+Sharing Defaults
+================
+
+ If you want to set default values for ‘configure’ scripts to share,
+you can create a site shell script called ‘config.site’ that gives
+default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’.
+‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then
+‘PREFIX/etc/config.site’ if it exists. Or, you can set the
+‘CONFIG_SITE’ environment variable to the location of the site script.
+A warning: not all ‘configure’ scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to ‘configure’. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the ‘configure’ command line, using ‘VAR=value’. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified ‘gcc’ to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for ‘CONFIG_SHELL’ due to an
+Autoconf limitation. Until the limitation is lifted, you can use this
+workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+‘configure’ Invocation
+======================
+
+ ‘configure’ recognizes the following options to control how it
+operates.
+
+‘--help’
+‘-h’
+ Print a summary of all of the options to ‘configure’, and exit.
+
+‘--help=short’
+‘--help=recursive’
+ Print a summary of the options unique to this package’s
+ ‘configure’, and exit. The ‘short’ variant lists options used only
+ in the top level, while the ‘recursive’ variant lists options also
+ present in any nested packages.
+
+‘--version’
+‘-V’
+ Print the version of Autoconf used to generate the ‘configure’
+ script, and exit.
+
+‘--cache-file=FILE’
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally ‘config.cache’. FILE defaults to ‘/dev/null’ to
+ disable caching.
+
+‘--config-cache’
+‘-C’
+ Alias for ‘--cache-file=config.cache’.
+
+‘--quiet’
+‘--silent’
+‘-q’
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to ‘/dev/null’ (any error
+ messages will still be shown).
+
+‘--srcdir=DIR’
+ Look for the package’s source code in directory DIR. Usually
+ ‘configure’ can determine that directory automatically.
+
+‘--prefix=DIR’
+ Use DIR as the installation prefix. *note Installation Names:: for
+ more details, including other options available for fine-tuning the
+ installation locations.
+
+‘--no-create’
+‘-n’
+ Run the configure checks, but stop before creating any output
+ files.
+
+‘configure’ also accepts some other, not widely useful, options. Run
+‘configure --help’ for more details.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..c426b8c
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,119 @@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = po lib include libparted parted partprobe doc debug tests
+
+EXTRA_DIST = \
+ .version \
+ .prev-version \
+ BUGS \
+ libparted.pc.in \
+ libparted-fs-resize.pc.in \
+ parted.spec.in \
+ parted.spec \
+ scripts/data/abi/baseline_symbols.txt \
+ scripts/extract_symvers \
+ cfg.mk \
+ dist-check.mk \
+ maint.mk \
+ GNUmakefile
+
+aclocaldir=$(datadir)/aclocal
+
+pcdir = $(libdir)/pkgconfig
+pc_DATA = libparted.pc libparted-fs-resize.pc
+
+# This is best not done via configure.ac, because automake's
+# make distcheck target does not like auto-generated files
+# being included in the distributed archive.
+parted.spec: parted.spec.in
+ sed 's/@''PACKAGE@/$(PACKAGE)/;s/@''VERSION@/$(VERSION)/' $< > $@-tmp
+ mv $@-tmp $@
+MAINTAINERCLEANFILES = parted.spec
+
+.PHONY: root-check
+root-check:
+ sudo sh -c '$(MAKE) check; t=$$?; chown -R $(USER) .; exit $$t'
+
+# Not everyone who runs "make distcheck" will want to or even
+# be able to run the root tests. If you want to skip them,
+# run make like this: "make distcheck root-check="
+root_check ?= root-check
+distcheck-hook: $(root_check)
+ $(MAKE) my-distcheck
+
+### ABI Checking scripts ###
+
+baseline_file = ${top_srcdir}/scripts/data/abi/baseline_symbols.txt
+extract_symvers = $(top_srcdir)/scripts/extract_symvers
+
+current_symbols.txt: ${extract_symvers}
+ -@(sh ${extract_symvers} libparted/.libs/libparted.so current_symbols.txt)
+
+baseline_symbols:
+ -@(output=${baseline_file}; \
+ if test ! -f $${output}; then \
+ echo "Baseline file doesn't exist."; \
+ echo "Try 'make new-abi-baseline' to create it."; \
+ exit 1; \
+ fi; true)
+
+new-abi-baseline:
+ -@$(mkinstalldirs) ${baseline_dir}
+ -@(output=${baseline_file}; \
+ if test -f $${output}; then \
+ output=$${output}.new; \
+ t=`echo $${output} | sed 's=.*config/abi/=='`; \
+ echo "Baseline file already exists, writing to $${t} instead."; \
+ fi; \
+ sh ${extract_symvers} libparted/.libs/libparted.so $${output})
+
+# Use 'new-abi-baseline' to create an initial symbol file. Then run
+# 'check-abi' to test for changes against that file.
+check-abi: baseline_symbols current_symbols.txt
+ @diff -u ${baseline_file} ./current_symbols.txt 2>&1 \
+ | tee libparted.abi-diff
+ @test `wc -l < libparted.abi-diff` -eq 0 && exit 0 \
+ || echo "ABI has changed. Please, update you ABI package version." \
+ && exit 1
+
+MOSTLYCLEANDIRS = m4
+
+MAINTAINERCLEANFILES += \
+ ABOUT-NLS \
+ ChangeLog \
+ INSTALL \
+ aclocal.m4 \
+ configure
+
+.PHONY: ss-1024 ss-2048 ss-4096
+ss-1024 ss-2048 ss-4096:
+ PARTED_SECTOR_SIZE=$(subst ss-,,$@) $(MAKE) check-recursive
+
+# Run the regression test suite with different settings,
+# to ensure it works with simulated partition sizes > 512.
+.PHONY: check-other-sector_sizes
+check-other-sector_sizes:
+ $(MAKE) ss-1024
+ $(MAKE) ss-2048
+ $(MAKE) ss-4096
+
+check: check-other-sector_sizes
+
+# Arrange so that .tarball-version appears only in the distribution
+# tarball, and never in a checked-out repository.
+dist-hook: gen-ChangeLog
+ echo $(VERSION) > $(distdir)/.tarball-version
+
+gen_start_date = 2000-01-01
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ if test -d .git; then \
+ $(top_srcdir)/build-aux/gitlog-to-changelog \
+ --amend=$(srcdir)/build-aux/git-log-fix \
+ --since=$(gen_start_date) > $(distdir)/cl-t; \
+ rm -f $(distdir)/ChangeLog; \
+ mv $(distdir)/cl-t $(distdir)/ChangeLog; \
+ fi
+
+BUILT_SOURCES = .version
+.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..fc6b600
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,2338 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES = libparted.pc libparted-fs-resize.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(pcdir)"
+DATA = $(pc_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope distdir distdir-am dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(srcdir)/libparted-fs-resize.pc.in $(srcdir)/libparted.pc.in \
+ $(top_srcdir)/build-aux/compile \
+ $(top_srcdir)/build-aux/config.guess \
+ $(top_srcdir)/build-aux/config.rpath \
+ $(top_srcdir)/build-aux/config.sub \
+ $(top_srcdir)/build-aux/install-sh \
+ $(top_srcdir)/build-aux/ltmain.sh \
+ $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \
+ ChangeLog INSTALL NEWS README THANKS TODO build-aux/compile \
+ build-aux/config.guess build-aux/config.rpath \
+ build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+ build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \
+ build-aux/texinfo.tex
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+GZIP_ENV = --best
+DIST_ARCHIVES = $(distdir).tar.xz
+DIST_TARGETS = dist-xz
+# Exists only to be overridden by the user if desired.
+AM_DISTCHECK_DVI_TARGET = dvi
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = po lib include libparted parted partprobe doc debug tests
+EXTRA_DIST = \
+ .version \
+ .prev-version \
+ BUGS \
+ libparted.pc.in \
+ libparted-fs-resize.pc.in \
+ parted.spec.in \
+ parted.spec \
+ scripts/data/abi/baseline_symbols.txt \
+ scripts/extract_symvers \
+ cfg.mk \
+ dist-check.mk \
+ maint.mk \
+ GNUmakefile
+
+aclocaldir = $(datadir)/aclocal
+pcdir = $(libdir)/pkgconfig
+pc_DATA = libparted.pc libparted-fs-resize.pc
+MAINTAINERCLEANFILES = parted.spec ABOUT-NLS ChangeLog INSTALL \
+ aclocal.m4 configure
+
+### ABI Checking scripts ###
+baseline_file = ${top_srcdir}/scripts/data/abi/baseline_symbols.txt
+extract_symvers = $(top_srcdir)/scripts/extract_symvers
+MOSTLYCLEANDIRS = m4
+gen_start_date = 2000-01-01
+BUILT_SOURCES = .version
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+libparted.pc: $(top_builddir)/config.status $(srcdir)/libparted.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+libparted-fs-resize.pc: $(top_builddir)/config.status $(srcdir)/libparted-fs-resize.pc.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool config.lt
+install-pcDATA: $(pc_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(pc_DATA)'; test -n "$(pcdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pcdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pcdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pcdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pcdir)" || exit $$?; \
+ done
+
+uninstall-pcDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pc_DATA)'; test -n "$(pcdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(pcdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+ $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+ $(am__post_remove_distdir)
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-zstd: distdir
+ tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ @echo WARNING: "Support for distribution archives compressed with" \
+ "legacy program 'compress' is deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ @echo WARNING: "Support for shar distribution archives is" \
+ "deprecated." >&2
+ @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+ shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ *.tar.zst*) \
+ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && $(MAKE) $(AM_MAKEFLAGS) distcheck-hook \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build/sub \
+ && ../../configure \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ --srcdir=../.. --prefix="$$dc_install_base" \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(pcdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pcDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pcDATA
+
+.MAKE: $(am__recursive_targets) all check install install-am \
+ install-exec install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-am clean clean-cscope clean-generic \
+ clean-libtool cscope cscopelist-am ctags ctags-am dist \
+ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+ dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
+ distclean-generic distclean-libtool distclean-tags \
+ distcleancheck distdir distuninstallcheck dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pcDATA install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-pcDATA
+
+.PRECIOUS: Makefile
+
+
+# This is best not done via configure.ac, because automake's
+# make distcheck target does not like auto-generated files
+# being included in the distributed archive.
+parted.spec: parted.spec.in
+ sed 's/@''PACKAGE@/$(PACKAGE)/;s/@''VERSION@/$(VERSION)/' $< > $@-tmp
+ mv $@-tmp $@
+
+.PHONY: root-check
+root-check:
+ sudo sh -c '$(MAKE) check; t=$$?; chown -R $(USER) .; exit $$t'
+
+# Not everyone who runs "make distcheck" will want to or even
+# be able to run the root tests. If you want to skip them,
+# run make like this: "make distcheck root-check="
+root_check ?= root-check
+distcheck-hook: $(root_check)
+ $(MAKE) my-distcheck
+
+current_symbols.txt: ${extract_symvers}
+ -@(sh ${extract_symvers} libparted/.libs/libparted.so current_symbols.txt)
+
+baseline_symbols:
+ -@(output=${baseline_file}; \
+ if test ! -f $${output}; then \
+ echo "Baseline file doesn't exist."; \
+ echo "Try 'make new-abi-baseline' to create it."; \
+ exit 1; \
+ fi; true)
+
+new-abi-baseline:
+ -@$(mkinstalldirs) ${baseline_dir}
+ -@(output=${baseline_file}; \
+ if test -f $${output}; then \
+ output=$${output}.new; \
+ t=`echo $${output} | sed 's=.*config/abi/=='`; \
+ echo "Baseline file already exists, writing to $${t} instead."; \
+ fi; \
+ sh ${extract_symvers} libparted/.libs/libparted.so $${output})
+
+# Use 'new-abi-baseline' to create an initial symbol file. Then run
+# 'check-abi' to test for changes against that file.
+check-abi: baseline_symbols current_symbols.txt
+ @diff -u ${baseline_file} ./current_symbols.txt 2>&1 \
+ | tee libparted.abi-diff
+ @test `wc -l < libparted.abi-diff` -eq 0 && exit 0 \
+ || echo "ABI has changed. Please, update you ABI package version." \
+ && exit 1
+
+.PHONY: ss-1024 ss-2048 ss-4096
+ss-1024 ss-2048 ss-4096:
+ PARTED_SECTOR_SIZE=$(subst ss-,,$@) $(MAKE) check-recursive
+
+# Run the regression test suite with different settings,
+# to ensure it works with simulated partition sizes > 512.
+.PHONY: check-other-sector_sizes
+check-other-sector_sizes:
+ $(MAKE) ss-1024
+ $(MAKE) ss-2048
+ $(MAKE) ss-4096
+
+check: check-other-sector_sizes
+
+# Arrange so that .tarball-version appears only in the distribution
+# tarball, and never in a checked-out repository.
+dist-hook: gen-ChangeLog
+ echo $(VERSION) > $(distdir)/.tarball-version
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ if test -d .git; then \
+ $(top_srcdir)/build-aux/gitlog-to-changelog \
+ --amend=$(srcdir)/build-aux/git-log-fix \
+ --since=$(gen_start_date) > $(distdir)/cl-t; \
+ rm -f $(distdir)/ChangeLog; \
+ mv $(distdir)/cl-t $(distdir)/ChangeLog; \
+ fi
+.version:
+ echo $(VERSION) > $@-t && mv $@-t $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..52bb116
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,1011 @@
+GNU parted NEWS -*- outline -*-
+
+* Noteworthy changes in release 3.6 (2023-04-10) [stable]
+
+ Promoting alpha release to stable release 3.6
+
+* Noteworthy changes in release 3.5.28 (2023-03-24) [alpha]
+
+** New Features
+
+ Support GPT partition attribute bit 63 as no_automount flag.
+
+ Add type commands to set type-id on MS-DOS and type-uuid on GPT.
+
+ Add swap flag support to the dasd disklabel
+
+ Add display of GPT disk and partition UUIDs in JSON output
+
+
+** Bug Fixes
+
+ Fix use of enums in flag limits by switching to using #define
+
+ Fix ending sector location when using kibi IEC suffix
+
+* Noteworthy changes in release 3.5 (2022-04-18) [stable]
+
+** New Features
+
+ Update to latest gnulib for 3.5 release
+
+* Noteworthy changes in release 3.4.64.2 (2022-04-05) [alpha]
+
+** Bug Fixes
+
+ usage: remove the mention of "a particular partition"
+
+* Noteworthy changes in release 3.4.64 (2022-03-30) [alpha]
+
+** New Features
+
+ Add --fix to --script mode to automatically fix problems like the backup
+ GPT header not being at the end of a disk.
+
+ Add use of the swap partition flag to msdos disk labeled disks.
+
+ Allow the partition name to be an empty string when set in script mode.
+
+ Add --json command line switch to output the details of the disk as JSON.
+
+ Add support for the Linux home GUID using the linux-home flag.
+
+** Bug Fixes
+
+ Decrease disk sizes used in tests to make it easier to run the test suite
+ on systems with less memory. Largest filesystem is now 267MB (fat32). The
+ rest are only 10MB.
+
+ Add aarch64 and mips64 as valid machines for testing.
+
+ Escape colons and backslashes in the machine output. Device path,
+ model, and partition name could all include these. They are now
+ escaped with a backslash.
+
+ Use libdevmapper's retry remove option when the device is BUSY. This
+ prevents libdevmapper from printing confusin output when trying to
+ remove a busy partition.
+
+ Keep GUID specific attributes when writing the GPT header. Previously
+ they were set to 0.
+
+* Noteworthy changes in release 3.4 (2021-01-27) [stable]
+
+ Include local gnulib change to version-etc.c date.
+ This means including a non-public gnulib commit in this release.
+ cfg.mk: disable submodule checks to work around broken upstream gnulib
+
+* Noteworthy changes in release 3.3.52 (2020-12-14) [alpha]
+
+** New Features
+
+ Add a new partition type flag, chromeos_kernel, for use with ChromeOS
+ machines. This is a GPT-only flag and sets the type GUID to
+ FE3A2A5D-4F32-41A7-B725-ACCC3285A309.
+
+ Add a new partition flag for Linux Boot Loader Specification /boot
+ partitions. The bls_boot flag will set the msdos partition type to 0xea
+ and the GPT partition type GUID to bc13c2ff-59e6-4262-a352-b275fd6f7172.
+
+* Noteworthy changes in release 3.3 (2019-10-10) [stable]
+
+** Bug Fixes
+
+ s390: Re-enabled virtio-attached DASD heuristics by using
+ HDIO_GETGEO when probing device geometry. Fixes a bug with
+ KVM virtio-blk backed by a DASD.
+
+* Noteworthy changes in release 3.2.153 (2019-08-12) [alpha]
+
+ Parted now recognizes NVMe devices, NVDIMM, and RAM drives.
+
+** Bug Fixes
+
+ Fix atari disklabel false positives by probing other labels first.
+
+ Fix resizepart to adjust the end to be -1 sector when using iec
+ power of 2 units so that the next partition can start immediately
+ following the new end, just like mkpart does.
+
+ Fix set and disk_set to not crash when there are no flags to set.
+
+ Fix a udev cookie leak when using resizepart on device-mapper devices.
+
+ Fix a gettext crash/error sometimes when using localized languages.
+
+ Fix fat resize to preverve boot code, and thus not render the
+ filesystem unreconized by Windows.
+
+ Fix rescue command: the rescue command often failed to find
+ filesystems due to leaving on cylinder alignment.
+
+ libparted-fs-resize: Prevent crash resizing FAT file systems with very
+ deep directories with path names over 512 bytes long.
+
+ Use 512b sector size when communicating with device-mapper. Fixes
+ problems with partitions being created too small on dm devices
+ with sector sizes > 5121b
+
+ Don't crash in the disk_set command when a disk label is not found
+
+ libparted-fs-resize: Prevent crash resizing FAT16 file systems.
+
+ libparted-fs-resize: Prevent crash resizing FAT16 file systems.
+
+ If the user specifies start/end of the partition as cylinders
+ and a cylinder has a size which is power of 2, then such address
+ does not trigger exact placement.
+
+ mkpart: Allow negative start value when FS-TYPE is not given
+
+* Noteworthy changes in release 3.2 (2014-07-28) [stable]
+
+** New Features
+
+ Add support for MBR id, GPT GUID and detection of UDF filesystem.
+
+ libparted-fs-resize: Work on non 512 byte sectors.
+
+ Add resizepart command to resize a partition. This works even on
+ mounted partitions.
+
+ Add support for EAV DASD partitions, which are ECKD's with more than
+ 65520 cylinders.
+
+ Add support for implicit FBA DASD partitions with a single immutable
+ partition.
+
+ Added support for recognizing btrfs filesystem. This simply displays
+ btrfs in the 'file system' column of the parted output.
+
+ Added new partition type flag, esp, to set the type to 0xEF on MS-DOS.
+ Also aliased to boot on GPT to set the UEFI ESP GUID.
+
+ Added new partition type flag, irst, for use with Intel Rapid Start
+ Technology. On MS-DOS disk labels it sets the type to 0x84 and on GPT
+ it sets the GUID to D3BFE2DE-3DAF-11DF-BA-40-E3A556D89593.
+
+ You can now choose to ignore errors about partitions that overlap,
+ or are longer than the disk. This allows you to use parted to
+ repair the problem.
+
+ Add support for prep flag to GPT to select PowerPC Reference Platform
+ boot partition type.
+
+** Bug Fixes
+
+ libparted: fix mac partition tables on > 512 byte sector sizes
+
+ libparted: ped_partition_get_path() was returning "/dev/foo1" instead
+ of "/dev/foo" for loop labels.
+
+ partprobe: when called on a disk that has become a loop label,
+ remove any partitions left over from a previous label.
+
+ libparted: The loop label represents an unpartitioned disk, but creates
+ a dummy partition to represent the whole disk. This dummy partition
+ was actually being loaded into the kernel. Don't do that.
+
+ libparted: fix loop labels to not vanish if you don't create
+ a filesystem, and to not return an error syncing when you do.
+
+ libparted: remove all old partitions, even if new label does not allow
+ as many.
+
+ libparted: fat and ntfs boot sectors were misdetected as dos
+ partition tables instead of being treated as a loop label.
+
+ libparted: previously if you chose to ignore the warning about
+ the gpt thinking the disk was smaller than it appears to be on
+ disk, subsequent warnings on other disks would be suppressed.
+ Now parted will warn once per disk.
+
+ Fix filesystem detection on non 512 byte sector sizes
+
+ Fix linux partition sync code to flush partitions > 16
+
+ Do not reject a FAT boot sector as invalid because it has no
+ system ID string.
+
+ libparted: /dev/md/ symlink can change after libparted dereferences it,
+ instead it should just use the symlink as given by the caller in the
+ same way we do with /dev/mapper/.
+
+ libparted: On multipath systems new partitions would sometimes not
+ appear, reporting 'device-mapper: create ioctl failed: Device or
+ resource busy' until the system was rebooted. Added dm_udev_wait
+ calls to synchronize parted with udev.
+
+ Fix help text for disk_{set,toggle} to show *disk* flags instead
+ of partition flags.
+
+ Fix gpt to correctly handle non ASCII charcters in partition names
+
+ If a drive was 100 times an even multiple of two, sizes specified as
+ a percentage would trigger the exact placement rule and refuse to round
+ to the nearest half percent.
+
+ Avoid generating udev add/remove events for all unmodified partitions
+ when writing a new table.
+
+ Fix cache coherency issue by flushing partition block devices.
+ This had been mistakenly disabled in parted 2.0, and resulted
+ in parted sometimes identifying the previous filesystem type
+ after running an mkfs to format a partition to a new type.
+
+ libparted: fix gpt end of disk handling. Previously if the backup
+ copy of the gpt was not at the end of the disk and you chose to
+ ignore this error, parted would move it to the end of the disk
+ anyhow. It will now leave the backup in the same location if
+ you chose to ignore this error.
+
+ libparted: handle logical partitions starting immediately after
+ the EBR. Creating a logical partition one sector after the EBR
+ used to cause parted to complain that it could not inform the
+ kernel of the changes, but after a reboot, everything was fine.
+ Parted will now correctly inform the kernel of the changes, but
+ only set the length of the extended partition to 1 sector instead
+ of two, which would cause it to overlap the logical partition.
+
+ parted: fix EOF and ctrl-c handling. parted used to refuse to exit
+ in response to ctrl-c and would get stuck in an infinite loop
+ prompting for more input when it reached EOF on stdin.
+
+ libparted: Don't fail to manipulate partitions on dmraid disks that
+ have other partitions in use.
+
+ libparted: mac: a MAC partition table could have a block_size larger
+ than the one the kernel told us about. Upon reading that partition
+ table, libparted would ask if it's ok to use the larger block size.
+ If you were to respond in the affirmative, libparted would read the
+ larger number of bytes into a buffer of the shorter length,
+ overrunning it.
+
+ libparted: gpt: fix gpt_get_max_supported_partition_count to work
+ also on little-endian systems.
+
+ libparted: treat a disk with no pMBR as an msdos-labeled disk
+ even when it has valid GPT headers.
+
+ partprobe now tells the kernel to forget about any partitions
+ on a device that has no recognizable partition table.
+
+ dos: the range of random MBR signature values was artificially limited
+ to 0..999999, which mistakenly included 0. Now, we use the full 32-bit
+ range, but exclude 0.
+
+** Changes in behavior
+
+ When attempting to manipulate a mounted partition, parted now issues
+ a warning that you can choose to ignore, instead of an error.
+
+ When creating a loop label, it automatically comes with a partition
+ using the whole disk.
+
+ parted -l no longer lists device-mapper devices other than
+ dmraid whole disks.
+
+ Added new Linux-specific partition GUID type code
+ (0FC63DAF-8483-4772-8E79-3D69D8477DE4) for Linux filesystem data on GPT
+ disks. This type code is now assigned as the default partition type code
+ for new partitions holding Linux filesystems.
+
+ Added new "msftdata" flag to identify partitions holding NTFS or FAT
+ filesystems on GPT disks. This flag corresponds to a GPT type code of
+ EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 ("Microsoft Basic Data"). Since
+ Linux filesystem partitions formerly used this type code, this flag may
+ optionally be set on Linux partitions to make the partition table type
+ codes match former configurations in case the new Linux filesystem type
+ code causes problems with some utility. Note that this flag cannot be
+ removed from NTFS or FAT partitions within parted except by setting a
+ competing flag, such as "boot" (which sets the type code used by EFI
+ System partitions) or "msftres" (which sets the "Microsoft Reserved" type
+ code).
+
+
+* Noteworthy changes in release 3.1 (2012-03-02) [stable]
+
+** New features
+
+ parted now supports up to 64 msdos partitions (was 16). The partition
+ table format imposes no limit (it's simply a linked list), so we may
+ raise it further, if needed.
+
+ parted has improved support for partitionable loopback devices
+
+ parted provides a new library, libparted-fs-resize, for resizing
+ HFS+ and FAT file systems. This is the subset of the FS-manipulation
+ functionality removed in parted-3.0 for which we have found no free
+ alternative. That library provides only these entry points:
+ ped_file_system_close
+ ped_file_system_get_resize_constraint
+ ped_file_system_open
+ ped_file_system_resize
+ so when using it you must also link with libparted.
+
+** Bug fixes
+
+ libparted: avoid an invalid free when creating many partitions in
+ a GPT partition table. [bug introduced in parted-1.9.0]
+
+ The msdos partition table claimed a maximum partition count of 16
+ but would allow you to go beyond that. This resulted in the kernel
+ not being informed of those partitions. Corrected to enforce the
+ limit.
+
+ parted now exits nonzero for certain failures already diagnosed as "Error".
+ For example, before this change, parted would exit successfully in spite
+ of "Error: ...unrecognised disk label" and "Error:... both GPT primary
+ and backup partition tables are corrupted".
+
+ libparted: given a GPT table with a partition table array of length, say 9,
+ (usually, there are at least 128 entries) and when run in interactive mode
+ with the backup header not at the end of the device where it belongs, parted
+ would offer to fix it by moving the backup header to the end. If you
+ accepted, parted could corrupt both headers, truncating their on-disk
+ PTE arrays. Now, parted handles this case.
+
+ libparted: gpt_disk_duplicate now copies the flags over to the new
+ disk object. Previously the flags would be undefined.
+
+ libparted can now read partition tables with a number of partition
+ array entries that is different from the default of 128. Before,
+ it would fail to recognize them and could even read beyond the end
+ of a heap-allocated buffer.
+
+ libparted: no longer aborts (failed assertion) due to a nilfs2_probe bug
+ [bug introduced in parted-2.4 with the addition of nilfs2 support]
+
+ libparted: no longer aborts when reading a truncated GPT-formatted device
+ [bug present at least as far back as RHEL4's parted-1.6.19]
+
+ libparted: works with a two-component linux kernel version number like 3.0
+ [bug present since the beginning]
+
+ libparted: strengthen the pc98 test so that it is much less likely to
+ cause an MSDOS partition table to be mistakenly identified as pc98.
+ [bug present since the beginning]
+
+ libparted no longer gets a failed assertion when probing a partition
+ with an HFS or HFS+ signature, but with invalid ->total_blocks and/or
+ ->block_size values.
+
+ parted now uses ext_range device sysfs attribute to determine maximum number
+ of partitions the device can hold. With this change, parted now correctly
+ informs kernel about new partitions on partitionable MD RAID devices.
+
+ libparted: creating a new partition table on a device with an existing
+ mac partition table could result in a failed assertion.
+
+** Changes in behavior
+
+ Floppy drives are no longer scanned on linux: they cannot be partitioned
+ anyhow, and some users have a misconfigured BIOS that claims to have a
+ floppy when they don't, and scanning gets hung up.
+
+ parted: the mkpart command has changed semantics with regard to specifying
+ the end of the partition. If the end is specified using units of MiB, GiB,
+ etc., parted subtracts one sector from the specified value. With this
+ change, it is now possible to create partitions like 1MiB-2MiB, 2MiB-3MiB
+ and so on.
+
+ Device-mapper devices ( LVM, dmraid ) no longer insert a 'p' between the
+ base device name and the partition number unless the last character of
+ the base device name is a digit. This brings parted into compliance with
+ the partition naming of kpartx and "linux since the dawn of time", but
+ differs from the way that dmraid 1.0.0-rc16-3 operates. A patch to
+ correct dmraid has been submitted to ataraid-list@redhat.com. Without
+ this patch, parted and dmraid will both create duplicate partition devices
+ named /dev/mapper/foo1 and /dev/mapper/foop1.
+
+ Add the ability to set the boot flag on the GPT PMBR. This is needed
+ for some BIOS systems that refuse to boot from GPT unless this is set.
+ disk_set and disk_toggle commands can be used to set the pmbr_boot
+ flag on the disk.
+
+ The flag is also displayed in a new line, 'Disk Flags:' like this:
+
+ Model: (file)
+ Disk /home/bcl/disk.img: 4295MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: gpt
+ Disk Flags: pmbr_boot
+
+ Using -m the flags are added after the model name field:
+
+ /root/disk.img:4295MB:file:512:512:gpt::pmbr_boot;
+
+** Build-related
+
+ "make dist" no longer builds .tar.gz files.
+ xz is portable enough and in wide-enough use that distributing
+ only .tar.xz files is enough.
+
+
+* Noteworthy changes in release 3.0 (2011-05-30) [stable]
+
+** Bug fixes
+
+ Fix numerous small leaks in both the library and the UI.
+
+** Changes in behavior
+
+ Remove all FS-related (file system-related) sub-commands; these commands
+ are no longer recognized because they were all dependent on parted "knowing"
+ too much about file system: mkpartfs, mkfs, cp, move, check, resize.
+ This change removes not just the user interface bits, but also the
+ library functions and nearly all of the underlying FS-munging code.
+ The code embedded in Parted by which it knew about those file systems
+ was so old, unmaintainable and buggy that while seemingly drastic,
+ this change is like removing a gangrenous toe.
+
+ Here is the list of removed functions:
+
+ ped_file_system_clobber
+ ped_file_system_open
+ ped_file_system_create
+ ped_file_system_close
+ ped_file_system_check
+ ped_file_system_copy
+ ped_file_system_resize
+ ped_file_system_get_create_constraint
+ ped_file_system_get_resize_constraint
+ ped_file_system_get_copy_constraint
+
+ This change also removes the corresponding function members
+ from "struct _PedFileSystemOps":
+
+ clobber open create close check copy resize get_create_constraint
+ get_resize_constraint get_copy_constraint
+
+
+* Noteworthy changes in release 2.4 (2011-05-18) [stable]
+
+** Bug fixes
+
+ parted no longer allows the modification of certain in-use partitions.
+ In particular, before this fix, parted would permit removal or modification
+ of any in-use partition on a dmraid and any in-use partition beyond the 15th
+ on a regular scsi disk.
+
+ Improve support of DASD devices on the s390 architecture.
+ Parted now supports all DASD types (CKD and FBA), DASD formats (CDL,
+ LDL, CMS non-reserved, and CMS reserved), and DASD drivers (ECKD, FBA,
+ and DIAG) in all combinations supported by the Linux kernel. As before,
+ only CDL format on CKD DASD using the ECKD driver is supported for
+ read-write operations (create, delete, move, re-size, etc.). However,
+ the implicit partition present on LDL- and CMS-formatted disks is now
+ correctly recognized for read-only operations. In detail:
+
+ - parted now correctly handles LDL-format disks with a block
+ size other than 4096 (bug fix)
+
+ - parted now recognizes the CMS disk format, both reserved
+ and non-reserved (enhancement)
+
+ - parted now supports FBA DASD devices (enhancement)
+
+ - parted now supports the DIAG driver when running in a
+ virtual machine under z/VM (enhancement)
+
+ libparted: raise the limit on the maximum start sector and the
+ maximum number of sectors in a "loop" partition table from 2^32 to 2^64.
+ [bug introduced in parted-2.1]
+
+ libparted once again recognizes a whole-disk FAT partition
+ [bug introduced in parted-1.9.0]
+
+ libparted now recognizes scsi disks with a high major (128-135) as scsi
+ disks
+
+ an msdos partition table on a very small device (smaller than one cylinder)
+ is now recognized. [bug introduced in parted-2.2]
+
+ libparted: zero-length devices (other than files) are ignored rather than
+ throwing an exception.
+
+ libparted: gpt label creation can no longer divide by zero with a
+ defective device or when a concurrent writer modifies the PE-size
+ bytes in the small interval between the write and subsequent read
+ of the primary GPT header.
+
+** Changes in behavior
+
+ "parted $dev print" now prints information about the device (model, size,
+ transport, sector size) even when it fails to recognize the disk label.
+
+ specifying partition start or end values using MiB, GiB, etc. suffixes
+ now makes parted do what I want, i.e., use that precise value, and not
+ some other that is up to 500KiB or 500MiB away from what I specified.
+ Before, to get that behavior, you would have had to use carefully chosen
+ values with units of bytes ("B") or sectors ("s") to obtain the same
+ result, and with sectors, your usage would not be portable between devices
+ with varying sector sizes. This change does not affect how parted handles
+ suffixes like KB, MB, GB, etc.
+
+
+* Noteworthy changes in release 2.3 (2010-05-28) [stable]
+
+** New features
+
+ parted now recognizes ATA over Ethernet (AoE) devices
+
+ parted now recognizes Linux Software RAID Arrays
+
+ libparted has a new partition flag to check for diagnostic (aka recovery
+ or reserved) partitions: PED_PARTITION_DIAG
+
+** Bug fixes
+
+ When libparted deferenced a /dev/mapper/foo symlink, it would keep the
+ resulting /dev/dm-N name and sometimes use it later, even though it
+ had since become stale and invalid. It no longer stores the result
+ of dereferencing a /dev/mapper symlink.
+
+ libparted's msdos_partition_is_flag_available function now always reports
+ that the "hidden" flag is not available for an extended partition.
+ Similarly, msdos_partition_get_flag(p,PED_PARTITION_HIDDEN) always returns 0
+ for an extended partition.
+
+ libparted uses a more accurate heuristic to distinguish between
+ ext4 and ext3 partitions.
+
+ libparted now properly checks the return value of dm_task_run when
+ operating on devicemapper devices.
+
+ allow using ped_device_cache_remove(dev) followed by a (later)
+ ped_device_destroy() without corrupting the device cache.
+
+ when creating an ext2 file system[*], Parted no longer creates an
+ invalid one when its size is 2TiB or larger.
+ [*] Remember, now all FS-creation operations are deprecated in Parted.
+ This is not an indicator that we'll be supporting this code.
+ On the contrary, it is slated to be removed.
+
+** Changes in behavior
+
+ libparted no longer issues an exception/warning about >512-byte
+ sector support being "HIGHLY EXPERIMENTAL". It seems to have matured
+ enough to be usable at least with GPT and MSDOS partition tables.
+
+
+* Noteworthy changes in release 2.2 (2010-02-26) [stable]
+
+** Changes in behavior
+
+ The default alignment (--align option) for newly created partitions has
+ been changed to optimal.
+
+** New features
+
+ The ped_device_get_*_alignment() functions now return a sane default
+ value instead of NULL when the so called topology information is incomplete.
+ The default minimum alignment aligns to physical sector size, the default
+ optimal alignment is 1MiB, which is what vista and windows 7 do.
+
+** Bug fixes
+
+ Parted no longer uses a physical sector size of 0 or of any other
+ value smaller than the logical sector size.
+
+ dos: creating an HFS or HFS+ partition in an msdos partition table
+ used to set the partition type to 0x83. That is wrong. The required
+ number is 0xaf, and that is what is used now.
+
+ gpt: read-only operation could clobber MBR part of hybrid GPT+MBR table
+ [bug introduced in parted-2.1]
+
+ gpt: a read-only operation like "parted $dev print" would overwrite $dev's
+ protective MBR when exactly one of the primary and backup GPT tables was
+ found to be corrupt.
+ [bug introduced prior to parted-1.8.0]
+
+ sun: the version, sanity and nparts VTOC fields were ignored by libparted.
+ Those fields are properly initialized now. The nparts (number of partitions)
+ field is initialized to 8 (max. number of sun partitions) rather that to a
+ real number of partitions. This solution is compatible with Linux kernel
+ and Linux fdisk.
+
+ "make install" no longer installs tests programs named disk and label
+
+ libparted: try harder to inform kernel of partition changes.
+ Previously when editing partitions, occasionally the kernel would
+ fail to be informed of partition changes. When this happened future
+ problems would occur because the kernel had incorrect information.
+ For example, if this problem arose when resizing or creating a
+ new partition, then an incorrect partition size might be displayed
+ or a user might encounter a failure to format or delete a newly
+ created partition, respectively.
+
+ libparted: committing a disk that was returned by ped_disk_duplicate
+ would always result in ped_disk_clobber being called (and thus the first
+ and last 9KiB of the disk being zeroed), even if the duplicated disk,
+ was not returned by ped_disk_fresh().
+
+
+* Noteworthy changes in release 2.1 (2009-12-20) [stable]
+
+** New features
+
+ new --align=<align> commandline option which can have the following values:
+ none: Use the minimum alignment allowed by the disk type
+ cylinder: Align partitions to cylinders (the default)
+ minimal: Use minimum alignment as given by the disk topology information
+ optimal: Use optimum alignment as given by the disk topology information
+ The minimal and optimal values will use layout information provided by the
+ disk to align the logical partition table addresses to actual physical
+ blocks on the disks. The mininal value uses the minimum aligment needed to
+ align the partition properly to physical blocks, which avoids performance
+ degradation. Where as the optimal value uses a multiple of the physical
+ block size in a way that guarantees optimal performance.
+ The min and opt values will only work when compiled with
+ libblkid >= 2.17 and running on a kernel >= 2.6.31, otherwise they will
+ behave as the none --align value.
+
+ libparted: new functions to set per disk (instead of per partition) flags:
+ ped_disk_set_flag()
+ ped_disk_get_flag()
+ ped_disk_is_flag_available()
+ ped_disk_flag_get_name()
+ ped_disk_flag_get_by_name()
+ ped_disk_flag_next()
+
+ libparted: new per disk flag: PED_DISK_CYLINDER_ALIGNMENT. This flag
+ (which defaults to true) controls if disk types for which cylinder alignment
+ is optional do cylinder alignment when a new partition gets added.
+
+ libparted: new functions to return per-partition-table-type limits:
+ - ped_disk_max_partition_start_sector: Return the largest representable
+ start sector number for a given "disk".
+ - ped_disk_max_partition_length: Return the maximum partition length
+ for a given "disk".
+
+ new command "align-check TYPE N" to determine whether the starting sector
+ of partition N is TYPE(minimal|optimal)-aligned for the disk. E.g.,
+ parted -s /dev/sda align-check min 1 && echo partition 1 is min-aligned
+ parted -s /dev/sda align-check opt 2 && echo partition 2 is opt-aligned
+ The same libblkid and kernel version requirements apply as for --align
+
+ Add functions to libparted to get minimal and optimal alignment
+ information from devices:
+ ped_device_get_minimal_aligned_constraint()
+ ped_device_get_optimal_aligned_constraint()
+ ped_device_get_minimum_alignment()
+ ped_device_get_optimum_alignment()
+ The same libblkid and kernel version requirements apply as for --align
+
+ Add ped_disk_get_partition_alignment() function to libparted to get
+ information about alignment enforced by the disk type.
+
+** Bug fixes
+
+ parted can once again create partition tables on loop devices.
+ Before, "parted -s /dev/loop0 mklabel gpt" would fail.
+ [bug introduced in parted-1.9.0]
+
+ improved >512-byte sector support: for example, printing a table on a
+ 4k-sector disk would show "Sector size (logical/physical): 4096B/512B",
+ when the sizes should have been "4096B/4096B".
+
+ gpt tables are more rigorously checked; before, partition entry array CRCs
+ were not checked, and we would mistakenly use the AlternateLBA member of a
+ known-corrupt primary table.
+
+ improved dasd disk support, in previous versions calling
+ ped_disk_new_fresh() or ped_disk_duplicate() on a dasd type PedDisk
+ would fail. This is fixed now.
+
+ handle device nodes created by lvm build with udev synchronisation enabled
+ properly.
+
+ when printing tables, parted no longer truncates flag names
+
+
+* Noteworthy changes in release 2.0 (2009-10-06) [beta]
+
+** Improvements
+
+ Parted now supports disks with sector size larger than 512 bytes.
+ Before this release, Parted could operate only on disks with a sector
+ size of 512 bytes. However, disk manufacturers are already making disks
+ with an exposed hardware sector size of 4096 bytes. Prior versions of
+ Parted cannot even read a partition table on such a device, not to
+ mention create or manipulate existing partition tables.
+ Due to internal design and time constraints, the following
+ less-common partition table types are currently disabled:
+ amiga, bsd, aix, pc98
+ "bsd" and "amiga" are mostly done, but had a few minor problems,
+ so may remain disabled until someone requests that they be revived.
+
+** Bug fixes
+
+ big-endian systems can once again read GPT partition tables
+ [bug introduced in parted-1.9.0]
+
+ ped_partition_is_busy no longer calls libparted's exception handler,
+ since doing so caused trouble with anaconda/pyparted when operating on
+ dmraid devices.
+
+ Partitions in a GPT table are no longer assigned the "microsoft
+ reserved partition" type. Before this change, each partition would
+ be listed with a type of "msftres" by default.
+
+
+* Noteworthy changes in release 1.9.0 (2009-07-23) [stable]
+
+** Bug fixes
+
+ parted now preserves the protective MBR (PMBR) in GPT type labels.
+ http://lists.alioth.debian.org/pipermail/parted-devel/2008-December/\
+ 002473.html
+ http://lists.gnu.org/archive/html/bug-parted/2008-12/msg00015.html
+
+ gpt_read now uses SizeOfPartitionEntry instead of the size of
+ GuidPartitionEntry_t. This ensures that *all* of the partition
+ entries are correctly read.
+ http://lists.alioth.debian.org/pipermail/parted-devel/2008-December/\
+ 002465.html
+ http://lists.alioth.debian.org/pipermail/parted-devel/attachments/\
+ 20081202/b7c0528d/attachment.txt
+
+ mklabel (interactive mode) now correctly asks for confirmation, when
+ replacing an existent label, without outputting an error message.
+ http://lists.alioth.debian.org/pipermail/parted-devel/2009-January/\
+ 002739.html
+
+ resize now handles FAT16 file systems with a 64k cluster. This
+ configuration is not common, but it is possible.
+ http://parted.alioth.debian.org/cgi-bin/trac.cgi/ticket/207
+
+ parted now ignores devices of the type /dev/md* when probing. These
+ types of devices should be handled by the device-mapper capabilities
+ of parted.
+ http://lists.alioth.debian.org/pipermail/parted-devel/2009-April/\
+ 002781.html
+
+ The parted documentation now describes the differences in the options
+ passed to mkpart for the label types.
+ http://lists.alioth.debian.org/pipermail/parted-devel/2009-April/\
+ 002782.html
+
+** Changes in behavior
+
+ include/parted/beos.h, include/parted/gnu.h and include/parted/linux.h
+ have been removed. The symbols contained in these files (GNUSpecific,
+ ped_device_new_from_store, BEOSSpecific, LinuxSpecific, LINUX_SPECIFIC)
+ were moved to the individual files that need them.
+
+ In libparted, the linux-swap "filesystem" types are now called
+ "linux-swap(v0)" and "linux-swap(v1)" rather than "linux-swap(old)"
+ and "linux-swap(new)" as in parted 1.8, or "linux-swap" as in older
+ versions; "old" and "new" generally make poor names, and v1 is the
+ only format supported by current Linux kernels. Aliases for all
+ previous names are available.
+
+* Noteworthy changes in release 1.8.8.1 (2007-12-17) [stable]
+
+** FIXME: fill in details
+
+* Noteworthy changes in release 1.8.8 (2007-08-09) [stable]
+
+** GNU parted is now licensed under the GNU General Public License version 3
+ or higher. See the COPYING file for more details.
+
+** libparted:
+ - Add compute_block_counts() to improve ext2fs support.
+ - Properly detect 'ext2 fs too small' cases.
+ - Move formatting commands out of translatable strings.
+ - Read an msdos partition table from a device with 2K sectors.
+ - Remove always-false "Unable to open" diagnostic in ped_disk_new(),
+ leave the "unrecognized disk label" diagnostic.
+ - Don't leak partition table buffer in amiga_read().
+ - Don't read/write initialized memory with DEBUG turned on off for
+ 'mklabel bsd' and 'mklabel amiga' command calls.
+ - Turn off DEBUG in libparted.c to avoid initializing all allocated
+ memory to '1' bits.
+ - Correct handling of HeaderSize field in GPT labels.
+ - Fix block number used when checking for ext2 fs state.
+ - Add detection support for Xen virtual block devices (/dev/xvd*).
+ - When reading DASD labels, check the filesystem type as well as
+ partition flags to determine what's on the partition.
+ - Add _dm_probe_all() from Debian to probe for all device-mapper
+ devices.
+
+** parted:
+ - Fixed exception handling in mkpart and mkpartfs commands.
+ - Add the --dry-run option to the partprobe command.
+ - Update docs: cannot specify 'primary' for a partition on a loop
+ device.
+ - Remove unused functions (get_spaces).
+ - Fix off-by-one error in str_list_print_wrap().
+ - Use xmalloc() and xrealloc() to check return values.
+ - Fix invalid command line argument handling.
+ - Close memory leaks in parted.c and table.c.
+ - Fix warnings when compiling with translation support enabled.
+ - Use a consistent prompt when asking for a file system type.
+ - Update docs: don't reference old versions of gzip.
+
+** misc:
+ - Improve the testing framework in the tests/ subdirectory. Build out
+ more of the testing scripts so we can start using that to ensure we
+ don't introduce regressions in releases.
+ - Support testing with tmpfs filesystems on Linux.
+ - Work around inadequate libreadline in the configure script.
+ - Don't include config.h from internal headers.
+
+* Noteworthy changes in release 1.8.7 (2007-05-09) [stable]
+
+** libparted:
+ - Prevent compilation of DASD code on GNU Hurd systems.
+ - Integrate new unit testing framework for parted and libparted.
+ - Fix primary partition cylinder alignment error for DOS disk labels.
+ - Use PED_PARTITION_NORMAL in place of PED_PARTITION_PRIMARY.
+ - Avoid segfault due to a double free on reiserfs support.
+
+** parted:
+ - Fix script mode (-s) for mkfs command in parted.
+ - Suppress "you are not superuser..." warning in script mode.
+ - Fix off-by-one bug in parted when displaying information about the
+ disk.
+ - Do not translate partition names in the 'parted print' command.
+ This causes problems for non-Latin-based character sets.
+ - Send errors to stderr rather than stdout.
+ - Handle command line options independent of the order.
+ - Abort on any invalid option and handle -v and -h first.
+ - Only display the update /etc/fstab message when there has been a
+ change to the disk (a shorter and more direct message too).
+
+* Noteworthy changes in release 1.8.6 (2007-03-20) [stable]
+
+** Revert the implementation of the linux-swap(new) and linux-swap(old) types.
+ The type is 'linux-swap' for v1, v2, and s1suspend swap partitions on Linux.
+
+* Noteworthy changes in release 1.8.5 (2007-03-20) [stable]
+
+** Another minor update. Both versions 1.8.3 and 1.8.4 lacked po translation
+ files. These are included with version 1.8.5.
+
+* Noteworthy changes in release 1.8.4 (2007-03-19) [stable]
+
+** Minor bug fix release for 1.8.3 to fix build issues on various
+ platforms:
+ - Use 'uname -m' to determine if we build on System Z or not.
+ - Include <parted/vtoc.h> in <parted/fdasd.h> for format1_label_t
+ definition.
+ - Remove unused variables in libparted/arch/linux.c (-Werror).
+ - Check return values on fgets() and asprint() in libparted/arch/linux.c
+ (-Werror).
+ - Check for tgetent() in libtinfo in the configure script.
+ - Move some macro definitions in <parted/disk.h> to fix a compile
+ problem with gcc-4.1.2 as indicated here:
+ http://lists.gnu.org/archive/html/bug-parted/2007-03/msg00008.html
+
+* Noteworthy changes in release 1.8.3 (2007-03-16) [stable]
+
+** libparted:
+ - Header file clean ups.
+ - Sync the linux-swap header according to the Linux kernel sources.
+ - Enable support for swsusp partitions and the ability to differentiate
+ between old and new versions of linux-swap partitions.
+ - Renaming PARTITION_EXT to PARTITION_DOS_EXT in the DOS disklabel
+ code (consitency with Linux kernel source).
+ - Added libparted.pc pkg-config file.
+ - Remove unused functions, ifdefs, and other code.
+ - Deprecate ped_[register|unregister]_disk_type in favor of
+ ped_disk_type_[register|unregister].
+ - Small test program fixes (in label.c and common.c).
+ - Make functions const-correct.
+ - Handle systems where libreadline is not available.
+ - Preserve starting sector for primary NTFS 3.1 partitions on DOS
+ disklabel.
+ - Handle 2048-byte logical sectors in linux_read().
+ - Use PED_SECTOR_SIZE_DEFAULT macro in place of 512.
+ - Don't assume logical sector size is <= 512B on AIX.
+ - Detect HFS write failure.
+ - Use mkstemp() in place of mktemp().
+ - Added HFS+ resize support.
+ - Don't build DASD support on non-zSeries hardware.
+
+** parted/partprobe:
+ - Use fputs() and putchar() in place for printf(), when possible.
+ - Detect/report stdout write errors.
+ - Accept the --version and --help options.
+ - Fix memory leaks in parted(8).
+
+** general:
+ - Synchronize the manual page and --help documentation.
+ - GNU autoconf and automake updates.
+ - 'gcc -Wall -Wshadow' warning cleanups.
+ - Don't define _GNU_SOURCE manually.
+ - Documentation updates and cleanups (AUTHORS, copyright notices,
+ etc).
+ - Use gnulib (http://www.gnu.org/software/gnulib/).
+
+* Noteworthy changes in release 1.8.2 (2007-01-12) [stable]
+
+** libparted:
+ - Add the ped_device_cache_remove() function to remove a device from
+ the cache. This is necessary for some things that use libparted,
+ including pyparted.
+ - Fix a segfault in ped_assert() where the wrong pointer is freed in
+ the backtrace handler.
+ - Only call _disk_warn_loss(disk) in do_mklabel() if disk is not NULL.
+ Fixes a segfault when initializing new volumes.
+ - Dynamically allocate space for exception messages.
+ - Output a backtrace when catching SEGV_MAPPER or a general SIGSEGV.
+
+** parted:
+ - Destroy all objects before return when called with --list or --all
+ option.
+ - Zero sized device is shown as 0.00B and not -0.00kB.
+ - Implement 'print devices' command.
+ - Alias 'print list' to 'print all'.
+ - Alias 'mktable' to 'mklabel'.
+
+** misc:
+ - Other bug fixes, documentation updates, and translation improvements.
+ - Code and API clean-ups.
+
+* Noteworthy changes in release 1.8.1 (2006-12-04) [stable]
+
+** libparted:
+ - Rework backtrace support.
+ - Code cleanups.
+ - Added --enable-selinux configure option to enable linking libparted with
+ libselinux and libsepol.
+ - Disable ext2fs resize for now, tell user to use resize2fs.
+
+** parted:
+ - Fix loop in print_all().
+ - Introduce the -list command-line switch.
+ - Make mktable aliased to mklabel.
+ - Warn before mklabel and mkfs.
+ - Code cleanups in _partition_warn_busy(), _disk_warn_busy(),
+ _partition_warn_loss(), and _disk_warn_loss().
+ - Avoid warning about user permissions when using --version.
+ - Fix 'print' command help.
+ - Proper print when there are no extended partitions, but partition names.
+
+** misc:
+ - Generate SHA-1 digest of the archive files and upload those along with the
+ actual archive files.
+ - Update translation files.
+ - Remove automatically generated files from version control.
+
+* Noteworthy changes in release 1.8.0 (2006-11-17) [stable]
+
+** libparted:
+ - GPT fixes:
+ - Correctly handle disks with non-512 byte sector sizes
+ - Support LUN resizing (see new space, allow parted to use it)
+ - Prevent overlap of LastUsableLBA and PartitionEntryLBA in backup GPT
+ - Prevent SIGFPE when FAT sector size is 0
+ - Add ped_exception_get_handler()
+ - DASD support for IBM zSeries systems
+ - AIX disk label support
+ - Detect Promise SX8 storage devices
+ - Macintosh (ppc and x86) disk label improvements:
+ - Prevent LVM and RAID partition types from corrupting the table
+ - Fix removal of driver partition
+ - Add support binary units (MiB, KiB, GiB)
+ - In ped_register_disk_type(), handle disk_types==NULL case
+ - In ped_unregister_disk_type(), handle case where type is not registered
+ - Fix geometry read problems on 64-bit Macs (and probably other 64-bit systems)
+ - Add support for /dev/mapper devices via libdevmapper library
+ - Detect Apple_Boot partition types correctly on MacOS X 10.4 systems
+
+** parted:
+ - Various bug fixes, signal handling fixes, and spelling error fixes
+ - UI improvements to display more information about the disk and transport
+ layer
+
+========================================================================
+
+Copyright (C) 2001-2014, 2019-2023 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the ``GNU Free
+Documentation License'' file as part of this distribution.
diff --git a/README b/README
new file mode 100644
index 0000000..de91d4c
--- /dev/null
+++ b/README
@@ -0,0 +1,60 @@
+GNU Parted
+----------
+
+GNU Parted is a program for manipulating partition tables.
+
+WARNING: USING PARTED TO PERFORM FILE SYSTEM OPERATIONS IS NO LONGER SUPPORTED
+------------------------------------------------------------------------------
+
+Parted (post-2.4) no longer has the ability to create and modify file systems.
+Use file-system-specific tools to create and operate on file systems.
+For example, use the e2fsprogs programs to operate on ext2, ext3 and ext4
+file systems. Use programs from the reiserfsprogs package if you want to
+manipulate reiserfs file systems. Although Parted lets you do some of the
+same things, the file-system-related code in parted is not as robust as the
+code in more specialized, FS-specific packages.
+
+Most FS-related functionality was removed after Parted 2.4.
+Thus, the following commands are no longer supported:
+mkpartfs, mkfs, cp, move, check, resize.
+
+
+See the file NEWS for a list of major changes in the current release.
+
+
+ * documentation is in the doc/ directory. The User's documentation is in
+texinfo format, and is built into a format viewable by info/pinfo when
+you run make. To view the distributed texinfo documentation, run this:
+
+ $ info -f parted.info
+
+Or view it on-line at:
+
+ http://www.gnu.org/software/parted/manual/parted.html
+
+ * the GNU Parted home page is http://www.gnu.org/software/parted
+ * the GNU Parted FAQ can be found at
+ http://www.gnu.org/software/parted/faq.html
+ * send bug reports, requests for help, feature requests, comments, etc. to
+ bug-parted@gnu.org.
+
+For any copyright year range specified as YYYY-ZZZZ in this package
+note that the range specifies every single year in that closed interval.
+
+
+NOTE TO DISTRIBUTIONS
+---------------------
+
+(1) When compiling Parted for distribution for general use, we recommend using
+the default configuration:
+
+ CFLAGS=-Os ./configure
+
+This includes --enable-debug (by default), which contains many assertions.
+Obviously, these "waste" space, but in the past, they have caught potentially
+dangerous bugs before they would have done damage, so we think it's worth
+it. Also, it means we get more bug reports ;)
+
+
+(2) When space is important, we suggest --without-readline, --disable-shared,
+and possibly --disable-nls.
diff --git a/THANKS b/THANKS
new file mode 100644
index 0000000..684c8e4
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,27 @@
+In no particular order:
+
+ * Jonathan duSaint <jon@rockgeeks.net> for binary unit support and more.
+ * Kamil Ignacak <acerion@wp.pl> for help with the migration of the API documentation.
+ * Conectiva, www.conectiva.com, for sponsoring Parted's development (in the
+past). Eliphas, beber (aka Pato), baretta, fuganti, claudio, olive (anyone
+else?)
+ * Stefan Kanthak <101.33761@germanynet.de> for lots of info on boot-loaders,
+and some corrections to the documentation
+ * Fabian Emmes <fab@orlen.de> for RPM spec file, help with hidden
+partitions and autoconfusion :-) - and lots of other misc. help.
+ * Falk Hueffner <falk.hueffner@student.uni-tuebingen.de> for bug fixes.
+ * Kevin Lindsay <klindsay@stormix.com> for lots of bug reports, etc.
+ * John Weismiller <john@stormix.com> for lots of bug reports, etc.
+ * Andries Brouwer <Andries.Brouwer@cwi.nl> for advice on BIOS geometry
+ * Simon Kirby <sim@stormix.com> for advice on BIOS geometry
+ * Glenn McGrath <Glenn.McGrath@jcu.edu.au>
+ * Timshel Knoll <timshel@pobox.com> for Debian stuff
+ * Tim Waugh <twaugh@redhat.com> for bug reports and fixes
+ * My friends for helping with testing: Tristan Zwalf, Menaka Lashitha Bandara,
+Thomas Hambleton
+ * Ryan Weaver <ryanw@infohwy.com> for parted.spec.in patches
+ * Benjamin Herrenschmidt <bh40@calva.net> for answering all of our questions
+on Mac's
+ * Ethan Benson <erbenson@alaska.net> for lots of advice / testing on ppc
+ * Charles Stevenson <csteven@terraplex.com> - ppc stuff
+ * heaps of people we left out!
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..de902e1
--- /dev/null
+++ b/TODO
@@ -0,0 +1,120 @@
+
+See http://wiki.debian.org/Parted
+
+=== everything below is old and for reference purposes only ===
+
+* regression tests:
+ - add specific tests for FAT16 -> FAT32, FAT32 -> FAT16, cluster
+resizing 8k -> 4k, etc. Also, compare output, to catch other "unexpected"
+errors (like partitions going missing, <cough> not that that's ever
+happened <cough>)
+
+* ui:
+ - support a cylinder interface for the masochistic.
+ - warn when partition numbers change (?) in UI?
+
+* make *_read() do ped_file_system_probe(), and warn if it isn't sane for
+the partition ID on-disk.
+
+* disk label implementations:
+ - OS/2 DLAT support
+ - read-only flag for Mac partitions, and the macufs partition type
+ - lba flag - default flag?
+ - PC98: relax cylinder boundary restrictions (create conforming
+ partitions, but allow non-conforming partitions ;-)
+
+* docs for RAWRITE, etc.
+
+* write a summary of operation list things, and get discussion going...
+* ped_file_system_is_flag_available()
+* ped_file_system_commit() ? polymorphic operations, with apply() and
+revert() in memory, and commit all fs's and disk's to commit on-disk.
+* ped_operation_queue (ped_operation_new (PED_OP_PARTITION_SET_FLAG, ...)),
+ or ped_partition_set_flag() (with a "transparent" queue?)
+
+* separate domains libparted and parted (for nls)
+* merge with partimage.sourceforge.net
+* merge with gpart
+* "renumber"
+* "reconstruct"
+* "resizepart"
+* make an errata web page
+* bootdisk: try getting readline & nls support in, use a newer version of
+busybox. Also, write some scripts for disk imaging.
+* Rawrite3 IS free, it seems. Find the source (version 1.3 == version 3), and
+stick source+bin up on the ftp site.
+* improve website (check out texinfo. Does it create much autoconfusion?)
+
+* /proc/meminfo, mlock()
+
+* create an FAQ, and stick lots of examples in it.
+
+* ped_file_system_resize_online()
+
+* reiser fs (almost there), ntfs support!
+
+* when Windows doesn't shut down properly, it knows about it. How?
+* FAT boot sector reconstruction, in fat_check() - actually, fat_open(),
+since it won't open properly if it's broken... Tell panov@iacp.vl.ru when
+done. Perhaps connect this to the front-end via a "force MINOR FS-TYPE"
+command, since it's sometimes hard to detect broken file systems.
+
+* FreeBSD support (get a copy - I want to try it anyway!)
+
+* LBA support in boot loader
+
+* OS/2 Boot manager
+
+* documentation of the internal API, tutorial on external API, and perhaps a bit
+on how the resizers, etc. work [MOSTLY DONE]
+
+* logical sectors (?) byte addressing?
+
+* libbootload ?
+ - update LILO/GRUB/Quik
+
+* command-line interface: i18n issues, "Yes, No or Cancel?". This issue is
+hard, for free software in general. We need a community (i.e. mailing list)
+that specializes in this, IMHO.
+
+* ped_geometry_{map|unmap}(), and kill the libparted/fs_ext2 buffer cache
+
+* injecting/ejecting partitions into/out of extended partitions. But to
+keep alignment rules, would have to move the start of the partition. No
+problem for FAT. Absolute pain for ext2.
+
+* ext2 resizer:
+ - add ability to move the start of the file system.
+ - fix "strange layout" problem
+ - add an incompat feature to ext2 that is a special resize-the-start
+journal, and add support in e2fsck / mount / linux (?) for it.
+
+* RAID? LVM? EVMS? grand-unified system TM?
+
+* support finding bad-blocks. Use ped_device_check() in ped_geometry_check()
+
+* generic resizing/converting with the inplace copy via sparse loopback idea
+ from Serguei Tzukanov
+
+* We should be able to compile with -fno-common.
+ However, that leads to this link failure:
+
+ fs/.libs/libfs.a(fat.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(clstdup.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(table.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(resize.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(calc.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(bootsector.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(traverse.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(fatio.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ fs/.libs/libfs.a(context.o):(.bss+0x0): multiple definition of `fat16'
+ fs/.libs/libfs.a(count.o):(.bss+0x0): first defined here
+ collect2: ld returned 1 exit status
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..f493138
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1756 @@
+# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
+[m4_warning([this file was generated for autoconf 2.71.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+ [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes ],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+ [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+ [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+ [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+ AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+ [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+ [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+ [auto],[PKG_CHECK_MODULES([$1],[$2],
+ [m4_n([def_action_if_found]) $3],
+ [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+ [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+ [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
+
+# Copyright (C) 2002-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.16.5], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.5])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_COND_IF -*- Autoconf -*-
+
+# Copyright (C) 2008-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_COND_IF
+# _AM_COND_ELSE
+# _AM_COND_ENDIF
+# --------------
+# These macros are only used for tracing.
+m4_define([_AM_COND_IF])
+m4_define([_AM_COND_ELSE])
+m4_define([_AM_COND_ENDIF])
+
+# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])
+# ---------------------------------------
+# If the shell condition COND is true, execute IF-TRUE, otherwise execute
+# IF-FALSE. Allow automake to learn about conditional instantiating macros
+# (the AC_CONFIG_FOOS).
+AC_DEFUN([AM_COND_IF],
+[m4_ifndef([_AM_COND_VALUE_$1],
+ [m4_fatal([$0: no such condition "$1"])])dnl
+_AM_COND_IF([$1])dnl
+if test -z "$$1_TRUE"; then :
+ m4_n([$2])[]dnl
+m4_ifval([$3],
+[_AM_COND_ELSE([$1])dnl
+else
+ $3
+])dnl
+_AM_COND_ENDIF([$1])dnl
+fi[]dnl
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ AS_CASE([$CONFIG_FILES],
+ [*\'*], [eval set x "$CONFIG_FILES"],
+ [*], [set x $CONFIG_FILES])
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`AS_DIRNAME(["$am_mf"])`
+ am_filepart=`AS_BASENAME(["$am_mf"])`
+ AM_RUN_LOG([cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles]) || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE="gmake" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).])
+ fi
+ AS_UNSET([am_dirpart])
+ AS_UNSET([am_filepart])
+ AS_UNSET([am_mf])
+ AS_UNSET([am_rc])
+ rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+m4_ifdef([_$0_ALREADY_INIT],
+ [m4_fatal([$0 expanded multiple times
+]m4_defn([_$0_ALREADY_INIT]))],
+ [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+AC_SUBST([CTAGS])
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+AC_SUBST([ETAGS])
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+AC_SUBST([CSCOPE])
+
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+ fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+ AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+ ['0:this is the am__doit target'],
+ [AS_CASE([$s],
+ [BSD], [am__include='.include' am__quote='"'],
+ [am__include='include' am__quote=''])])
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for 'mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl FIXME we are no longer going to remove this! adjust warning
+dnl FIXME message accordingly.
+AC_DIAGNOSE([obsolete],
+[$0: this macro is deprecated, and will soon be removed.
+You should use the Autoconf-provided 'AC][_PROG_MKDIR_P' macro instead,
+and use '$(MKDIR_P)' instead of '$(mkdir_p)'in your Makefile.am files.])
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+ [[\\/$]]* | ?:[[\\/]]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+ [whether $CC understands -c and -o together],
+ [am_cv_prog_cc_c_o],
+ [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+ ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2021 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/00gnulib.m4])
+m4_include([m4/__inline.m4])
+m4_include([m4/absolute-header.m4])
+m4_include([m4/alloca.m4])
+m4_include([m4/arpa_inet_h.m4])
+m4_include([m4/assert.m4])
+m4_include([m4/assert_h.m4])
+m4_include([m4/btowc.m4])
+m4_include([m4/build-to-host.m4])
+m4_include([m4/builtin-expect.m4])
+m4_include([m4/c-bool.m4])
+m4_include([m4/calloc.m4])
+m4_include([m4/canonicalize.m4])
+m4_include([m4/clock_time.m4])
+m4_include([m4/close.m4])
+m4_include([m4/codeset.m4])
+m4_include([m4/config-h.m4])
+m4_include([m4/configmake.m4])
+m4_include([m4/ctype_h.m4])
+m4_include([m4/double-slash-root.m4])
+m4_include([m4/dup2.m4])
+m4_include([m4/eealloc.m4])
+m4_include([m4/environ.m4])
+m4_include([m4/errno_h.m4])
+m4_include([m4/error.m4])
+m4_include([m4/error_h.m4])
+m4_include([m4/extensions.m4])
+m4_include([m4/extern-inline.m4])
+m4_include([m4/fcntl-o.m4])
+m4_include([m4/fcntl.m4])
+m4_include([m4/fcntl_h.m4])
+m4_include([m4/fdopen.m4])
+m4_include([m4/flexmember.m4])
+m4_include([m4/fpending.m4])
+m4_include([m4/free.m4])
+m4_include([m4/fstat.m4])
+m4_include([m4/fsync.m4])
+m4_include([m4/ftruncate.m4])
+m4_include([m4/getcwd.m4])
+m4_include([m4/getdtablesize.m4])
+m4_include([m4/getopt.m4])
+m4_include([m4/getpagesize.m4])
+m4_include([m4/getprogname.m4])
+m4_include([m4/getrandom.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/gettimeofday.m4])
+m4_include([m4/gnulib-common.m4])
+m4_include([m4/gnulib-comp.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/include_next.m4])
+m4_include([m4/inet_pton.m4])
+m4_include([m4/intl-thread-locale.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/inttypes.m4])
+m4_include([m4/ioctl.m4])
+m4_include([m4/isblank.m4])
+m4_include([m4/langinfo_h.m4])
+m4_include([m4/largefile.m4])
+m4_include([m4/lcmessage.m4])
+m4_include([m4/lib-ignore.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/limits-h.m4])
+m4_include([m4/localcharset.m4])
+m4_include([m4/locale-fr.m4])
+m4_include([m4/locale-ja.m4])
+m4_include([m4/locale-tr.m4])
+m4_include([m4/locale-zh.m4])
+m4_include([m4/locale_h.m4])
+m4_include([m4/localeconv.m4])
+m4_include([m4/localename.m4])
+m4_include([m4/lock.m4])
+m4_include([m4/lseek.m4])
+m4_include([m4/lstat.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/malloc.m4])
+m4_include([m4/malloca.m4])
+m4_include([m4/manywarnings.m4])
+m4_include([m4/mbrtowc.m4])
+m4_include([m4/mbsinit.m4])
+m4_include([m4/mbstate_t.m4])
+m4_include([m4/mbtowc.m4])
+m4_include([m4/memchr.m4])
+m4_include([m4/mempcpy.m4])
+m4_include([m4/minmax.m4])
+m4_include([m4/mkdir.m4])
+m4_include([m4/mkstemp.m4])
+m4_include([m4/mmap-anon.m4])
+m4_include([m4/mode_t.m4])
+m4_include([m4/msvc-inval.m4])
+m4_include([m4/msvc-nothrow.m4])
+m4_include([m4/multiarch.m4])
+m4_include([m4/musl.m4])
+m4_include([m4/nanosleep.m4])
+m4_include([m4/netinet_in_h.m4])
+m4_include([m4/nl_langinfo.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/nocrash.m4])
+m4_include([m4/o-direct.m4])
+m4_include([m4/off_t.m4])
+m4_include([m4/open-cloexec.m4])
+m4_include([m4/open-slash.m4])
+m4_include([m4/open.m4])
+m4_include([m4/pathmax.m4])
+m4_include([m4/perror.m4])
+m4_include([m4/pipe.m4])
+m4_include([m4/po.m4])
+m4_include([m4/priv-set.m4])
+m4_include([m4/progtest.m4])
+m4_include([m4/pselect.m4])
+m4_include([m4/pthread-thread.m4])
+m4_include([m4/pthread_h.m4])
+m4_include([m4/pthread_rwlock_rdlock.m4])
+m4_include([m4/pthread_sigmask.m4])
+m4_include([m4/putenv.m4])
+m4_include([m4/quote.m4])
+m4_include([m4/quotearg.m4])
+m4_include([m4/raise.m4])
+m4_include([m4/rawmemchr.m4])
+m4_include([m4/read.m4])
+m4_include([m4/readlink.m4])
+m4_include([m4/realloc.m4])
+m4_include([m4/reallocarray.m4])
+m4_include([m4/regex.m4])
+m4_include([m4/rpmatch.m4])
+m4_include([m4/safe-read.m4])
+m4_include([m4/sched_h.m4])
+m4_include([m4/sched_yield.m4])
+m4_include([m4/select.m4])
+m4_include([m4/semaphore.m4])
+m4_include([m4/setenv.m4])
+m4_include([m4/setlocale.m4])
+m4_include([m4/setlocale_null.m4])
+m4_include([m4/signal_h.m4])
+m4_include([m4/signalblocking.m4])
+m4_include([m4/sleep.m4])
+m4_include([m4/socketlib.m4])
+m4_include([m4/sockets.m4])
+m4_include([m4/socklen.m4])
+m4_include([m4/sockpfaf.m4])
+m4_include([m4/ssize_t.m4])
+m4_include([m4/stat-time.m4])
+m4_include([m4/stat.m4])
+m4_include([m4/stdalign.m4])
+m4_include([m4/stdarg.m4])
+m4_include([m4/stddef_h.m4])
+m4_include([m4/stdint.m4])
+m4_include([m4/stdio_h.m4])
+m4_include([m4/stdlib_h.m4])
+m4_include([m4/strdup.m4])
+m4_include([m4/strerror.m4])
+m4_include([m4/strerror_r.m4])
+m4_include([m4/string_h.m4])
+m4_include([m4/strtoll.m4])
+m4_include([m4/strtoull.m4])
+m4_include([m4/symlink.m4])
+m4_include([m4/sys_ioctl_h.m4])
+m4_include([m4/sys_random_h.m4])
+m4_include([m4/sys_select_h.m4])
+m4_include([m4/sys_socket_h.m4])
+m4_include([m4/sys_stat_h.m4])
+m4_include([m4/sys_time_h.m4])
+m4_include([m4/sys_types_h.m4])
+m4_include([m4/sys_uio_h.m4])
+m4_include([m4/tempname.m4])
+m4_include([m4/thread.m4])
+m4_include([m4/threadlib.m4])
+m4_include([m4/time.m4])
+m4_include([m4/time_h.m4])
+m4_include([m4/unistd_h.m4])
+m4_include([m4/unlink.m4])
+m4_include([m4/unlinkdir.m4])
+m4_include([m4/usleep.m4])
+m4_include([m4/version-etc.m4])
+m4_include([m4/visibility.m4])
+m4_include([m4/warn-on-use.m4])
+m4_include([m4/warnings.m4])
+m4_include([m4/wchar_h.m4])
+m4_include([m4/wchar_t.m4])
+m4_include([m4/wcrtomb.m4])
+m4_include([m4/wctob.m4])
+m4_include([m4/wctomb.m4])
+m4_include([m4/wctype_h.m4])
+m4_include([m4/wint_t.m4])
+m4_include([m4/xalloc.m4])
+m4_include([m4/xstrtol.m4])
+m4_include([m4/yield.m4])
+m4_include([m4/zzgnulib.m4])
diff --git a/build-aux/announce-gen b/build-aux/announce-gen
new file mode 100755
index 0000000..850619a
--- /dev/null
+++ b/build-aux/announce-gen
@@ -0,0 +1,704 @@
+#!/bin/sh
+#! -*-perl-*-
+
+# Generate a release announcement message.
+
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line. The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name. The second line is essential for perl and is
+# also useful for editing this file in Emacs. The next two lines below
+# are valid code in both sh and perl. When executed by sh, they re-execute
+# the script through the perl program found in $PATH. The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh. When executed by perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+ if 0;
+
+my $VERSION = '2023-02-26 17:15'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+my $copyright_year = '2022';
+
+use strict;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
+my @archive_suffixes = qw (tar.gz tar.bz2 tar.lz tar.lzma tar.xz);
+my $srcdir = '.';
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ my @types = sort keys %valid_release_types;
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS]
+Generate an announcement message. Run this from builddir.
+
+OPTIONS:
+
+These options must be specified:
+
+ --release-type=TYPE TYPE must be one of @types
+ --package-name=PACKAGE_NAME
+ --previous-version=VER
+ --current-version=VER
+ --gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs
+ --url-directory=URL_DIR
+
+The following are optional:
+
+ --news=NEWS_FILE include the NEWS section about this release
+ from this NEWS_FILE; accumulates.
+ --srcdir=DIR where to find the NEWS_FILEs (default: $srcdir)
+ --bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g.,
+ autoconf,automake,bison,gnulib
+ --gnulib-version=VERSION report VERSION as the gnulib version, where
+ VERSION is the result of running git describe
+ in the gnulib source directory.
+ required if gnulib is in TOOL_LIST.
+ --gpg-key-email=EMAIL The email address of the key used to
+ sign the tarballs
+ --gpg-keyring-url=URL URL pointing to keyring containing the key used
+ to sign the tarballs
+ --no-print-checksums do not emit SHA1 or SHA256 checksums
+ --archive-suffix=SUF add SUF to the list of archive suffixes
+ --mail-headers=HEADERS a space-separated list of mail headers, e.g.,
+ To: x\@example.com Cc: y-announce\@example.com,...
+
+ --help display this help and exit
+ --version output version information and exit
+
+EOF
+ }
+ exit $exit_code;
+}
+
+
+=item C<%size> = C<sizes (@file)>
+
+Compute the sizes of the C<@file> and return them as a hash. Return
+C<undef> if one of the computation failed.
+
+=cut
+
+sub sizes (@)
+{
+ my (@file) = @_;
+
+ my $fail = 0;
+ my %res;
+ foreach my $f (@file)
+ {
+ my $cmd = "du -h $f";
+ my $t = `$cmd`;
+ # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
+ $@
+ and (warn "command failed: '$cmd'\n"), $fail = 1;
+ chomp $t;
+ $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/;
+ $res{$f} = $t;
+ }
+ return $fail ? undef : %res;
+}
+
+=item C<print_locations ($title, \@url, \%size, @file)
+
+Print a section C<$title> dedicated to the list of <@file>, which
+sizes are stored in C<%size>, and which are available from the C<@url>.
+
+=cut
+
+sub print_locations ($\@\%@)
+{
+ my ($title, $url, $size, @file) = @_;
+ print "Here are the $title:\n";
+ foreach my $url (@{$url})
+ {
+ for my $file (@file)
+ {
+ print " $url/$file";
+ print " (", $$size{$file}, ")"
+ if exists $$size{$file};
+ print "\n";
+ }
+ }
+ print "\n";
+}
+
+=item C<print_checksums (@file)
+
+Print the SHA1 and SHA256 signature section for each C<@file>.
+
+=cut
+
+# This digest function omits the "=" padding that is required by cksum,
+# so add the 0..2 bytes of padding required for each of Digest's algorithms.
+sub digest_file_base64_wrap ($$)
+{
+ my ($file, $alg) = @_;
+ my $h = digest_file_base64($file, $alg);
+ $alg =~ tr{-}{}d;
+ my %pad = (MD5 => 2, SHA1 => 1, SHA256 => 1, SHA384 => 0, SHA512 => 2);
+ return $h . '=' x $pad{$alg};
+}
+
+sub print_checksums (@)
+{
+ my (@file) = @_;
+
+ print "Here are the SHA1 and SHA256 checksums:\n";
+ print "\n";
+
+ use Digest::file qw(digest_file_hex digest_file_base64);
+
+ foreach my $f (@file)
+ {
+ print ' ', digest_file_hex ($f, "SHA-1"), " $f\n";
+ print ' ', digest_file_base64_wrap ($f, "SHA-256"), " $f\n";
+ }
+ print "\nVerify the base64 SHA256 checksum with cksum -a sha256 --check\n";
+ print "from coreutils-9.2 or OpenBSD's cksum since 2007.\n\n";
+}
+
+=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
+
+Print the section of the NEWS file C<$news_file> addressing changes
+between versions C<$prev_version> and C<$curr_version>.
+
+=cut
+
+sub print_news_deltas ($$$)
+{
+ my ($news_file, $prev_version, $curr_version) = @_;
+
+ my $news_name = $news_file;
+ $news_name =~ s|^\Q$srcdir\E/||;
+
+ print "\n$news_name\n\n";
+
+ # Print all lines from $news_file, starting with the first one
+ # that mentions $curr_version up to but not including
+ # the first occurrence of $prev_version.
+ my $in_items;
+
+ my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
+
+ my $found_news;
+ open NEWS, '<', $news_file
+ or die "$ME: $news_file: cannot open for reading: $!\n";
+ while (defined (my $line = <NEWS>))
+ {
+ if ( ! $in_items)
+ {
+ # Match lines like these:
+ # * Major changes in release 5.0.1:
+ # * Noteworthy changes in release 6.6 (2006-11-22) [stable]
+ $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
+ or next;
+ $in_items = 1;
+ print $line;
+ }
+ else
+ {
+ # This regexp must not match version numbers in NEWS items.
+ # For example, they might well say "introduced in 4.5.5",
+ # and we don't want that to match.
+ $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
+ and last;
+ print $line;
+ $line =~ /\S/
+ and $found_news = 1;
+ }
+ }
+ close NEWS;
+
+ $in_items
+ or die "$ME: $news_file: no matching lines for '$curr_version'\n";
+ $found_news
+ or die "$ME: $news_file: no news item found for '$curr_version'\n";
+}
+
+sub print_changelog_deltas ($$)
+{
+ my ($package_name, $prev_version) = @_;
+
+ # Print new ChangeLog entries.
+
+ # First find all CVS-controlled ChangeLog files.
+ use File::Find;
+ my @changelog;
+ find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
+ and push @changelog, $File::Find::name}},
+ '.');
+
+ # If there are no ChangeLog files, we're done.
+ @changelog
+ or return;
+ my %changelog = map {$_ => 1} @changelog;
+
+ # Reorder the list of files so that if there are ChangeLog
+ # files in the specified directories, they're listed first,
+ # in this order:
+ my @dir = qw ( . src lib m4 config doc );
+
+ # A typical @changelog array might look like this:
+ # ./ChangeLog
+ # ./po/ChangeLog
+ # ./m4/ChangeLog
+ # ./lib/ChangeLog
+ # ./doc/ChangeLog
+ # ./config/ChangeLog
+ my @reordered;
+ foreach my $d (@dir)
+ {
+ my $dot_slash = $d eq '.' ? $d : "./$d";
+ my $target = "$dot_slash/ChangeLog";
+ delete $changelog{$target}
+ and push @reordered, $target;
+ }
+
+ # Append any remaining ChangeLog files.
+ push @reordered, sort keys %changelog;
+
+ # Remove leading './'.
+ @reordered = map { s!^\./!!; $_ } @reordered;
+
+ print "\nChangeLog entries:\n\n";
+ # print join ("\n", @reordered), "\n";
+
+ $prev_version =~ s/\./_/g;
+ my $prev_cvs_tag = "\U$package_name\E-$prev_version";
+
+ my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
+ open DIFF, '-|', $cmd
+ or die "$ME: cannot run '$cmd': $!\n";
+ # Print two types of lines, making minor changes:
+ # Lines starting with '+++ ', e.g.,
+ # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247
+ # and those starting with '+'.
+ # Don't print the others.
+ my $prev_printed_line_empty = 1;
+ while (defined (my $line = <DIFF>))
+ {
+ if ($line =~ /^\+\+\+ /)
+ {
+ my $separator = "*"x70 ."\n";
+ $line =~ s///;
+ $line =~ s/\s.*//;
+ $prev_printed_line_empty
+ or print "\n";
+ print $separator, $line, $separator;
+ }
+ elsif ($line =~ /^\+/)
+ {
+ $line =~ s///;
+ print $line;
+ $prev_printed_line_empty = ($line =~ /^$/);
+ }
+ }
+ close DIFF;
+
+ # The exit code should be 1.
+ # Allow in case there are no modified ChangeLog entries.
+ $? == 256 || $? == 128
+ or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n";
+}
+
+sub get_tool_versions ($$)
+{
+ my ($tool_list, $gnulib_version) = @_;
+ @$tool_list
+ or return ();
+
+ my $fail;
+ my @tool_version_pair;
+ foreach my $t (@$tool_list)
+ {
+ if ($t eq 'gnulib')
+ {
+ push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
+ next;
+ }
+ # Assume that the last "word" on the first line of
+ # 'tool --version' output is the version string.
+ my ($first_line, undef) = split ("\n", `$t --version`);
+ if ($first_line =~ /.* (\d[\w.-]+)$/)
+ {
+ $t = ucfirst $t;
+ push @tool_version_pair, "$t $1";
+ }
+ else
+ {
+ defined $first_line
+ and $first_line = '';
+ warn "$t: unexpected --version output\n:$first_line";
+ $fail = 1;
+ }
+ }
+
+ $fail
+ and exit 1;
+
+ return @tool_version_pair;
+}
+
+# Print a more human-friendly representation of $SEC seconds.
+sub readable_interval0($)
+{
+ my $sec = shift;
+ $sec < 60 and return "$sec seconds";
+
+ my $min = int($sec / 60); $sec %= 60;
+ 30 < $sec and $min++;
+ $min < 60 and return "$min minutes";
+
+ my $hr = int($min / 60); $min %= 60;
+ 30 < $min and $hr++;
+ $hr < 24 and return "$hr hours";
+
+ my $day = int($hr / 24); $hr %= 24;
+ 12 < $hr and $day++;
+ $day < 50 and return "$day days";
+
+ my $wk = int($day / 7); $day %= 7;
+ 4 < $day and $wk++;
+ return "$wk weeks";
+}
+
+# Convert e.g., "1 weeks", to "1 week".
+sub readable_interval($)
+{
+ my $interval_str = shift;
+ my $i = readable_interval0 $interval_str;
+ $i =~ m{^1 \w+s$} and chop $i;
+ return $i;
+}
+
+{
+ # Use the C locale so that, for instance, "du" does not
+ # print "1,2" instead of "1.2", which would confuse our regexps.
+ $ENV{LC_ALL} = "C";
+
+ my $mail_headers;
+ my $release_type;
+ my $package_name;
+ my $prev_version;
+ my $curr_version;
+ my $gpg_key_id;
+ my @url_dir_list;
+ my @news_file;
+ my $bootstrap_tools;
+ my $gnulib_version;
+ my $print_checksums_p = 1;
+ my $gpg_key_email;
+ my $gpg_keyring_url;
+
+ # Reformat the warnings before displaying them.
+ local $SIG{__WARN__} = sub
+ {
+ my ($msg) = @_;
+ # Warnings from GetOptions.
+ $msg =~ s/Option (\w)/option --$1/;
+ warn "$ME: $msg";
+ };
+
+ GetOptions
+ (
+ 'mail-headers=s' => \$mail_headers,
+ 'release-type=s' => \$release_type,
+ 'package-name=s' => \$package_name,
+ 'previous-version=s' => \$prev_version,
+ 'current-version=s' => \$curr_version,
+ 'gpg-key-id=s' => \$gpg_key_id,
+ 'gpg-key-email=s' => \$gpg_key_email,
+ 'gpg-keyring-url=s' => \$gpg_keyring_url,
+ 'url-directory=s' => \@url_dir_list,
+ 'news=s' => \@news_file,
+ 'srcdir=s' => \$srcdir,
+ 'bootstrap-tools=s' => \$bootstrap_tools,
+ 'gnulib-version=s' => \$gnulib_version,
+ 'print-checksums!' => \$print_checksums_p,
+ 'archive-suffix=s' => \@archive_suffixes,
+
+ help => sub { usage 0 },
+ version =>
+ sub
+ {
+ print "$ME version $VERSION\n";
+ print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
+ print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
+ . "This is free software: you are free to change and redistribute it.\n"
+ . "There is NO WARRANTY, to the extent permitted by law.\n";
+ print "\n";
+ my $author = "Jim Meyering";
+ print "Written by $author.\n";
+ exit
+ },
+ ) or usage 1;
+
+ my $fail = 0;
+ # Ensure that each required option is specified.
+ $release_type
+ or (warn "release type not specified\n"), $fail = 1;
+ $package_name
+ or (warn "package name not specified\n"), $fail = 1;
+ $prev_version
+ or (warn "previous version string not specified\n"), $fail = 1;
+ $curr_version
+ or (warn "current version string not specified\n"), $fail = 1;
+ $gpg_key_id
+ or (warn "GnuPG key ID not specified\n"), $fail = 1;
+ @url_dir_list
+ or (warn "URL directory name(s) not specified\n"), $fail = 1;
+
+ my @tool_list = split ',', $bootstrap_tools
+ if $bootstrap_tools;
+
+ grep (/^gnulib$/, @tool_list) && ! defined $gnulib_version
+ and (warn "when specifying gnulib as a tool, you must also specify\n"
+ . "--gnulib-version=V, where V is the result of running git describe\n"
+ . "in the gnulib source directory.\n"), $fail = 1;
+
+ ! grep (/^gnulib$/, @tool_list) && defined $gnulib_version
+ and (warn "with --gnulib-version=V you must use --bootstrap-tools=...\n"
+ . "including gnulib in that list"), $fail = 1;
+
+ !$release_type || exists $valid_release_types{$release_type}
+ or (warn "'$release_type': invalid release type\n"), $fail = 1;
+
+ @ARGV
+ and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"),
+ $fail = 1;
+ $fail
+ and usage 1;
+
+ my $my_distdir = "$package_name-$curr_version";
+
+ my $xd = "$package_name-$prev_version-$curr_version.xdelta";
+
+ my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
+ my @tarballs = grep {-f $_} @candidates;
+
+ @tarballs
+ or die "$ME: none of " . join(', ', @candidates) . " were found\n";
+ my @sizable = @tarballs;
+ -f $xd
+ and push @sizable, $xd;
+ my %size = sizes (@sizable);
+ %size
+ or exit 1;
+
+ my $headers = '';
+ if (defined $mail_headers)
+ {
+ ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g;
+ $headers .= "\n";
+ }
+
+ # The markup is escaped as <\# so that when this script is sent by
+ # mail (or part of a diff), Gnus is not triggered.
+ print <<EOF;
+
+${headers}Subject: $my_distdir released [$release_type]
+
+<\#secure method=pgpmime mode=sign>
+This is to announce $package_name-$curr_version, a $release_type release.
+
+FIXME: put comments here
+
+EOF
+
+ my $v0 = $prev_version;
+ my $v1 = $curr_version;
+
+ (my $first_name = `git config --global user.name|cut -d' ' -f1`)
+ =~ m{\S} or die "no name? set user.name in ~/.gitconfig\n";
+
+ chomp (my $n_ci = `git rev-list "v$v0..v$v1" | wc -l`);
+ chomp (my $n_p = `git shortlog "v$v0..v$v1" | grep -c '^[^ ]'`);
+
+ my $prev_release_date = `git log --pretty=%ct -1 "v$v0"`;
+ my $this_release_date = `git log --pretty=%ct -1 "v$v1"`;
+ my $n_seconds = $this_release_date - $prev_release_date;
+ my $time_since_prev = readable_interval $n_seconds;
+ my $names = `git shortlog "v$v0..v$v1"|perl -lne '/^(\\w.*):/ and print " ".\$1'`;
+
+ print <<EOF;
+There have been $n_ci commits by $n_p people in the $time_since_prev since $v0.
+
+See the NEWS below for a brief summary.
+
+Thanks to everyone who has contributed!
+The following people contributed changes to this release:
+
+$names
+$first_name [on behalf of the $package_name maintainers]
+==================================================================
+
+Here is the GNU $package_name home page:
+ http://gnu.org/s/$package_name/
+
+For a summary of changes and contributors, see:
+ http://git.sv.gnu.org/gitweb/?p=$package_name.git;a=shortlog;h=v$v1
+or run this command from a git-cloned $package_name directory:
+ git shortlog v$v0..v$v1
+
+EOF
+
+ if (@url_dir_list == 1 && @tarballs == 1)
+ {
+ # When there's only one tarball and one URL, use a more concise form.
+ my $m = "$url_dir_list[0]/$tarballs[0]";
+ print "Here are the compressed sources and a GPG detached signature:\n"
+ . " $m\n"
+ . " $m.sig\n\n";
+ }
+ else
+ {
+ print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
+ -f $xd
+ and print_locations ("xdelta diffs (useful? if so, "
+ . "please tell bug-gnulib\@gnu.org)",
+ @url_dir_list, %size, $xd);
+ my @sig_files = map { "$_.sig" } @tarballs;
+ print_locations ("GPG detached signatures", @url_dir_list, %size,
+ @sig_files);
+ }
+
+ if ($url_dir_list[0] =~ "gnu\.org")
+ {
+ print "Use a mirror for higher download bandwidth:\n";
+ if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!)
+ {
+ (my $m = "$url_dir_list[0]/$tarballs[0]")
+ =~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!;
+ print " $m\n"
+ . " $m.sig\n\n";
+
+ }
+ else
+ {
+ print " https://www.gnu.org/order/ftp.html\n\n";
+ }
+ }
+
+ $print_checksums_p
+ and print_checksums (@sizable);
+
+ print <<EOF;
+Use a .sig file to verify that the corresponding file (without the
+.sig suffix) is intact. First, be sure to download both the .sig file
+and the corresponding tarball. Then, run a command like this:
+
+ gpg --verify $tarballs[0].sig
+
+EOF
+ my $gpg_fingerprint = `LC_ALL=C gpg --fingerprint $gpg_key_id | grep -v ^sub`;
+ if ($gpg_fingerprint =~ /^pub/)
+ {
+ chop $gpg_fingerprint;
+ $gpg_fingerprint =~ s/ \[expires:.*//mg;
+ $gpg_fingerprint =~ s/^uid \[ultimate\]/uid /mg;
+ $gpg_fingerprint =~ s/^/ /mg;
+ print<<EOF
+The signature should match the fingerprint of the following key:
+
+$gpg_fingerprint
+EOF
+ }
+ print <<EOF;
+If that command fails because you don't have the required public key,
+or that public key has expired, try the following commands to retrieve
+or refresh it, and then rerun the 'gpg --verify' command.
+EOF
+ if ($gpg_key_email) {
+ print <<EOF;
+
+ gpg --locate-external-key $gpg_key_email
+EOF
+ }
+ print <<EOF;
+
+ gpg --recv-keys $gpg_key_id
+EOF
+ if ($gpg_keyring_url) {
+ print <<EOF;
+
+ wget -q -O- '$gpg_keyring_url' | gpg --import -
+EOF
+ }
+ print <<EOF;
+
+As a last resort to find the key, you can try the official GNU
+keyring:
+
+ wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
+ gpg --keyring gnu-keyring.gpg --verify $tarballs[0].sig
+EOF
+
+ my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version);
+ @tool_versions
+ and print "\nThis release was bootstrapped with the following tools:",
+ join ('', map {"\n $_"} @tool_versions), "\n";
+
+ print_news_deltas ($_, $prev_version, $curr_version)
+ foreach @news_file;
+
+ $release_type eq 'stable'
+ or print_changelog_deltas ($package_name, $prev_version);
+
+ exit 0;
+}
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## mode: perl
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## perl-extra-newline-before-brace: t
+## perl-merge-trailing-else: nil
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-line-limit: 50
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC0"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755
index 0000000..df363c8
--- /dev/null
+++ b/build-aux/compile
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN* | MSYS*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/* | msys/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755
index 0000000..69188da
--- /dev/null
+++ b/build-aux/config.guess
@@ -0,0 +1,1774 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2023 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-01-01'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2023 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+# Just in case it came from the environment.
+GUESS=
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if test -f /.attbin/uname ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case $UNAME_SYSTEM in
+Linux|GNU|GNU/*)
+ LIBC=unknown
+
+ set_cc_for_build
+ cat <<-EOF > "$dummy.c"
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #elif defined(__GLIBC__)
+ LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
+ #endif
+ EOF
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
+
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
+ fi
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ echo unknown)`
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ earmv*)
+ arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+ endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+ machine=${arch}${endian}-unknown
+ ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently (or will in the future) and ABI.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ os=netbsdelf
+ ;;
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # Determine ABI tags.
+ case $UNAME_MACHINE_ARCH in
+ earm*)
+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+ abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case $UNAME_VERSION in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
+ *:LibertyBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
+ *:MidnightBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
+ *:ekkoBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
+ *:SolidBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
+ macppc:MirBSD:*:*)
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:MirBSD:*:*)
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
+ *:Sortix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
+ *:Redox:*:*)
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
+ mips:OSF1:*.*)
+ GUESS=mips-dec-osf1
+ ;;
+ alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case $ALPHA_CPU_TYPE in
+ "EV4 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE=alpha ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE=alpha ;;
+ "EV5 (21164)")
+ UNAME_MACHINE=alphaev5 ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE=alphaev56 ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE=alphapca56 ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE=alphapca57 ;;
+ "EV6 (21264)")
+ UNAME_MACHINE=alphaev6 ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE=alphaev67 ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE=alphaev68 ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE=alphaev69 ;;
+ "EV7 (21364)")
+ UNAME_MACHINE=alphaev7 ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE=alphaev79 ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ GUESS=m68k-unknown-sysv4
+ ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
+ *:OS/390:*:*)
+ GUESS=i370-ibm-openedition
+ ;;
+ *:z/VM:*:*)
+ GUESS=s390-ibm-zvmoe
+ ;;
+ *:OS400:*:*)
+ GUESS=powerpc-ibm-os400
+ ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ GUESS=arm-unknown-riscos
+ ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
+ NILE*:*:*:dcosx)
+ GUESS=pyramid-pyramid-svr4
+ ;;
+ DRS?6000:unix:4.0:6*)
+ GUESS=sparc-icl-nx6
+ ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
+ s390x:SunOS:*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
+ sun4H:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ set_cc_for_build
+ SUN_ARCH=i386
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH=x86_64
+ fi
+ fi
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
+ sun4*:SunOS:*:*)
+ case `/usr/bin/arch -k` in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
+ sun3*:SunOS:*:*)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+ case `/bin/arch` in
+ sun3)
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
+ sun4)
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
+ ;;
+ esac
+ ;;
+ aushp:SunOS:*:*)
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
+ m68k:machten:*:*)
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
+ powerpc:machten:*:*)
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
+ RISC*:Mach:*:*)
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
+ RISC*:ULTRIX:*:*)
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
+ VAX*:ULTRIX*:*:*)
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+ dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
+ Motorola:PowerMAX_OS:*:*)
+ GUESS=powerpc-motorola-powermax
+ ;;
+ Motorola:*:4.3:PL8-*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ GUESS=powerpc-harris-powermax
+ ;;
+ Night_Hawk:Power_UNIX:*:*)
+ GUESS=powerpc-harris-powerunix
+ ;;
+ m88k:CX/UX:7*:*)
+ GUESS=m88k-harris-cxux7
+ ;;
+ m88k:*:4*:R4*)
+ GUESS=m88k-motorola-sysv4
+ ;;
+ m88k:*:3*:R3*)
+ GUESS=m88k-motorola-sysv3
+ ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
+ then
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
+ then
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
+ else
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
+ fi
+ else
+ GUESS=i586-dg-dgux$UNAME_RELEASE
+ fi
+ ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ GUESS=m88k-dolphin-sysv3
+ ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ GUESS=m88k-motorola-sysv3
+ ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ GUESS=m88k-tektronix-sysv3
+ ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ GUESS=m68k-tektronix-bsd
+ ;;
+ *:IRIX*:*:*)
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ GUESS=i386-ibm-aix
+ ;;
+ ia64:AIX:*:*)
+ if test -x /usr/bin/oslevel ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+ then
+ GUESS=$SYSTEM_NAME
+ else
+ GUESS=rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ GUESS=rs6000-ibm-aix3.2.4
+ else
+ GUESS=rs6000-ibm-aix3.2
+ fi
+ ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+ else
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
+ fi
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
+ *:AIX:*:*)
+ GUESS=rs6000-ibm-aix
+ ;;
+ ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+ GUESS=romp-ibm-bsd4.4
+ ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ GUESS=rs6000-bull-bosx
+ ;;
+ DPX/2?00:B.O.S.:*:*)
+ GUESS=m68k-bull-sysv3
+ ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ GUESS=m68k-hp-bsd
+ ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ GUESS=m68k-hp-bsd4.4
+ ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
+ 9000/31?) HP_ARCH=m68000 ;;
+ 9000/[34]??) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if test -x /usr/bin/getconf; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case $sc_cpu_version in
+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case $sc_kernel_bits in
+ 32) HP_ARCH=hppa2.0n ;;
+ 64) HP_ARCH=hppa2.0w ;;
+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if test "$HP_ARCH" = hppa2.0w
+ then
+ set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH=hppa2.0w
+ else
+ HP_ARCH=hppa64
+ fi
+ fi
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
+ 3050*:HI-UX:*:*)
+ set_cc_for_build
+ sed 's/^ //' << EOF > "$dummy.c"
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+ GUESS=hppa1.1-hp-bsd
+ ;;
+ 9000/8??:4.3bsd:*:*)
+ GUESS=hppa1.0-hp-bsd
+ ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ GUESS=hppa1.0-hp-mpeix
+ ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+ GUESS=hppa1.1-hp-osf
+ ;;
+ hp8??:OSF1:*:*)
+ GUESS=hppa1.0-hp-osf
+ ;;
+ i*86:OSF1:*:*)
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
+ else
+ GUESS=$UNAME_MACHINE-unknown-osf1
+ fi
+ ;;
+ parisc*:Lites*:*:*)
+ GUESS=hppa1.1-hp-lites
+ ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ GUESS=c1-convex-bsd
+ ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ GUESS=c34-convex-bsd
+ ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ GUESS=c38-convex-bsd
+ ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ GUESS=c4-convex-bsd
+ ;;
+ CRAY*Y-MP:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
+ CRAY*T3E:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
+ CRAY*SV1:*:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
+ *:UNICOS/mp:*:*)
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+ FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
+ sparc*:BSD/OS:*:*)
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
+ *:BSD/OS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case $UNAME_PROCESSOR in
+ amd64)
+ UNAME_PROCESSOR=x86_64 ;;
+ i386)
+ UNAME_PROCESSOR=i586 ;;
+ esac
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
+ i*:CYGWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
+ *:MINGW64*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
+ *:MINGW*:*)
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
+ *:MSYS*:*)
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
+ i*:PW*:*)
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
+ *:Interix*:*)
+ case $UNAME_MACHINE in
+ x86)
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
+ authenticamd | genuineintel | EM64T)
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
+ IA64)
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
+ esac ;;
+ i*:UWIN*:*)
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ GUESS=x86_64-pc-cygwin
+ ;;
+ prep*:SunOS:5.*:*)
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
+ *:GNU:*:*)
+ # the GNU system
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-pc-managarm-mlibc"
+ ;;
+ *:[Mm]anagarm:*:*)
+ GUESS="$UNAME_MACHINE-unknown-managarm-mlibc"
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
+ aarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arm*:Linux:*:*)
+ set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
+ else
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ ;;
+ avr32*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ cris:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ crisv32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
+ e2k:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ frv:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ hexagon:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:Linux:*:*)
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
+ ia64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ k1om:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m32r*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ m68*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
+ sed 's/^ //' << EOF > "$dummy.c"
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ MIPS_ENDIAN=el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ MIPS_ENDIAN=
+ #else
+ MIPS_ENDIAN=
+ #endif
+ #endif
+EOF
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
+ ;;
+ mips64el:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ openrisc*:Linux:*:*)
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
+ or32:Linux:*:* | or1k*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ padre:Linux:*:*)
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
+ esac
+ ;;
+ ppc64:Linux:*:*)
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
+ ppc:Linux:*:*)
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
+ ppc64le:Linux:*:*)
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
+ ppcle:Linux:*:*)
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
+ sh64*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sh*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ tile*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ vax:Linux:*:*)
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
+ x86_64:Linux:*:*)
+ set_cc_for_build
+ CPU=$UNAME_MACHINE
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ ABI=64
+ sed 's/^ //' << EOF > "$dummy.c"
+ #ifdef __i386__
+ ABI=x86
+ #else
+ #ifdef __ILP32__
+ ABI=x32
+ #endif
+ #endif
+EOF
+ cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'`
+ eval "$cc_set_abi"
+ case $ABI in
+ x86) CPU=i686 ;;
+ x32) LIBCABI=${LIBC}x32 ;;
+ esac
+ fi
+ GUESS=$CPU-pc-linux-$LIBCABI
+ ;;
+ xtensa*:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ GUESS=i386-sequent-sysv4
+ ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
+ i*86:XTS-300:*:STOP)
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
+ i*86:atheos:*:*)
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
+ i*86:syllable:*:*)
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
+ i*86:*DOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
+ i*86:*:4.*:*)
+ UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
+ fi
+ ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
+ else
+ GUESS=$UNAME_MACHINE-pc-sysv32
+ fi
+ ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configure will decide that
+ # this is a cross-build.
+ GUESS=i586-pc-msdosdjgpp
+ ;;
+ Intel:Mach:3*:*)
+ GUESS=i386-pc-mach3
+ ;;
+ paragon:*:*:*)
+ GUESS=i860-intel-osf1
+ ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
+ fi
+ ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ GUESS=m68010-convergent-sysv
+ ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ GUESS=m68k-convergent-sysv
+ ;;
+ M680?0:D-NIX:5.3:*)
+ GUESS=m68k-diab-dnix
+ ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
+ mc68030:UNIX_System_V:4.*:*)
+ GUESS=m68k-atari-sysv4
+ ;;
+ TSUNAMI:LynxOS:2.*:*)
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ rs6000:LynxOS:2.*:*)
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
+ SM[BE]S:UNIX_SV:*:*)
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
+ RM*:ReliantUNIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ RM*:SINIX-*:*:*)
+ GUESS=mips-sni-sysv4
+ ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ GUESS=$UNAME_MACHINE-sni-sysv4
+ else
+ GUESS=ns32k-sni-sysv
+ fi
+ ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ GUESS=i586-unisys-sysv4
+ ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ GUESS=i860-stratus-sysv4
+ ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ GUESS=hppa1.1-stratus-vos
+ ;;
+ mc68*:A/UX:*:*)
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
+ news*:NEWS-OS:6*:*)
+ GUESS=mips-sony-newsos6
+ ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
+ else
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
+ fi
+ ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ GUESS=powerpc-be-beos
+ ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ GUESS=powerpc-apple-beos
+ ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ GUESS=i586-pc-beos
+ ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ GUESS=i586-pc-haiku
+ ;;
+ ppc:Haiku:*:*) # Haiku running on Apple PowerPC
+ GUESS=powerpc-apple-haiku
+ ;;
+ *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat)
+ GUESS=$UNAME_MACHINE-unknown-haiku
+ ;;
+ SX-4:SUPER-UX:*:*)
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
+ SX-5:SUPER-UX:*:*)
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
+ SX-6:SUPER-UX:*:*)
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
+ SX-7:SUPER-UX:*:*)
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8:SUPER-UX:*:*)
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
+ SX-8R:SUPER-UX:*:*)
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
+ SX-ACE:SUPER-UX:*:*)
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
+ Power*:Rhapsody:*:*)
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
+ *:Rhapsody:*:*)
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
+ fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
+ fi
+ elif test "$UNAME_PROCESSOR" = i386 ; then
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
+ fi
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = x86; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
+ *:QNX:*:4*)
+ GUESS=i386-pc-qnx
+ ;;
+ NEO-*:NONSTOP_KERNEL:*:*)
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSR-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSV-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
+ NSX-*:NONSTOP_KERNEL:*:*)
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
+ *:NonStop-UX:*:*)
+ GUESS=mips-compaq-nonstopux
+ ;;
+ BS2000:POSIX*:*:*)
+ GUESS=bs2000-siemens-sysv
+ ;;
+ DS/*:UNIX_System_V:*:*)
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "${cputype-}" = 386; then
+ UNAME_MACHINE=i386
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
+ fi
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
+ *:TOPS-10:*:*)
+ GUESS=pdp10-unknown-tops10
+ ;;
+ *:TENEX:*:*)
+ GUESS=pdp10-unknown-tenex
+ ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ GUESS=pdp10-dec-tops20
+ ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ GUESS=pdp10-xkl-tops20
+ ;;
+ *:TOPS-20:*:*)
+ GUESS=pdp10-unknown-tops20
+ ;;
+ *:ITS:*:*)
+ GUESS=pdp10-unknown-its
+ ;;
+ SEI:*:*:SEIUX)
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
+ *:DragonFly:*:*)
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ GUESS=i386-pc-xenix
+ ;;
+ i*86:skyos:*:*)
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
+ i*86:rdos:*:*)
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
+ x86_64:VMkernel:*:*)
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
+ amd64:Isilon\ OneFS:*:*)
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
+esac
+
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
+echo "$0: unable to guess system type" >&2
+
+case $UNAME_MACHINE:$UNAME_SYSTEM in
+ mips:Linux | mips64:Linux)
+ # If we got here on MIPS GNU/Linux, output extra information.
+ cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+ ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
+and
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+fi
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.rpath b/build-aux/config.rpath
new file mode 100755
index 0000000..17298f2
--- /dev/null
+++ b/build-aux/config.rpath
@@ -0,0 +1,672 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+# Copyright 1996-2010 Free Software Foundation, Inc.
+# Taken from GNU libtool, 2001
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+# than 256 bytes, otherwise the compiler driver will dump core. The only
+# known workaround is to choose shorter directory names for the build
+# directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+ wl='-Wl,'
+else
+ case "$host_os" in
+ aix*)
+ wl='-Wl,'
+ ;;
+ darwin*)
+ case $cc_basename in
+ xlc*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ wl='-Wl,'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ wl='-Wl,'
+ ;;
+ newsos6)
+ ;;
+ linux* | k*bsd*-gnu)
+ case $cc_basename in
+ ecc*)
+ wl='-Wl,'
+ ;;
+ icc* | ifort*)
+ wl='-Wl,'
+ ;;
+ lf95*)
+ wl='-Wl,'
+ ;;
+ pgcc | pgf77 | pgf90)
+ wl='-Wl,'
+ ;;
+ ccc*)
+ wl='-Wl,'
+ ;;
+ como)
+ wl='-lopt='
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ wl='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ osf3* | osf4* | osf5*)
+ wl='-Wl,'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ wl='-Wl,'
+ ;;
+ sunos4*)
+ wl='-Qoption ld '
+ ;;
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ wl='-Wl,'
+ ;;
+ sysv4*MP*)
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ wl='-Wl,'
+ ;;
+ unicos*)
+ wl='-Wl,'
+ ;;
+ uts4*)
+ ;;
+ esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ # Unlike libtool, we use -rpath here, not --rpath, since the documented
+ # option of GNU ld is called -rpath, not --rpath.
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ case "$host_os" in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ ld_shlibs=no
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we cannot use
+ # them.
+ ld_shlibs=no
+ ;;
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ gnu* | linux* | k*bsd*-gnu)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ netbsd*)
+ ;;
+ solaris*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+ sunos4*)
+ hardcode_direct=yes
+ ;;
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ :
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ if test "$ld_shlibs" = no; then
+ hardcode_libdir_flag_spec=
+ fi
+else
+ case "$host_os" in
+ aix3*)
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+ aix[4-9]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ else
+ aix_use_runtimelinking=no
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+ fi
+ hardcode_direct=yes
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ fi
+ # Begin _LT_AC_SYS_LIBPATH_AIX.
+ echo 'int main () { return 0; }' > conftest.c
+ ${CC} ${LDFLAGS} conftest.c -o conftest
+ aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+ fi
+ if test -z "$aix_libpath"; then
+ aix_libpath="/usr/lib:/lib"
+ fi
+ rm -f conftest.c conftest
+ # End _LT_AC_SYS_LIBPATH_AIX.
+ if test "$aix_use_runtimelinking" = yes; then
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ else
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+ fi
+ fi
+ ;;
+ amigaos*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+ bsdi[45]*)
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ libext=lib
+ ;;
+ darwin* | rhapsody*)
+ hardcode_direct=no
+ if test "$GCC" = yes ; then
+ :
+ else
+ case $cc_basename in
+ xlc*)
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+ fi
+ ;;
+ dgux*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+ freebsd2.2*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ freebsd2*)
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ freebsd* | dragonfly*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ hpux9*)
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ hpux10*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+ hpux11*)
+ if test "$with_gnu_ld" = no; then
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ ;;
+ *)
+ hardcode_direct=yes
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+ irix5* | irix6* | nonstopux*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ netbsd*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ ;;
+ newsos6)
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ osf3*)
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+ osf4* | osf5*)
+ if test "$GCC" = yes; then
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ # Both cc and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+ solaris*)
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ sunos4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ ;;
+ sysv4)
+ case $host_vendor in
+ sni)
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ hardcode_direct=no
+ ;;
+ motorola)
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ ;;
+ sysv4.3*)
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ ld_shlibs=yes
+ fi
+ ;;
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ ;;
+ sysv5* | sco3.2v5* | sco5v6*)
+ hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+ hardcode_libdir_separator=':'
+ ;;
+ uts4*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec= # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+ aix3*)
+ library_names_spec='$libname.a'
+ ;;
+ aix[4-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ amigaos*)
+ library_names_spec='$libname.a'
+ ;;
+ beos*)
+ library_names_spec='$libname$shrext'
+ ;;
+ bsdi[45]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ cygwin* | mingw* | pw32* | cegcc*)
+ shrext=.dll
+ library_names_spec='$libname.dll.a $libname.lib'
+ ;;
+ darwin* | rhapsody*)
+ shrext=.dylib
+ library_names_spec='$libname$shrext'
+ ;;
+ dgux*)
+ library_names_spec='$libname$shrext'
+ ;;
+ freebsd1*)
+ ;;
+ freebsd* | dragonfly*)
+ case "$host_os" in
+ freebsd[123]*)
+ library_names_spec='$libname$shrext$versuffix' ;;
+ *)
+ library_names_spec='$libname$shrext' ;;
+ esac
+ ;;
+ gnu*)
+ library_names_spec='$libname$shrext'
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $host_cpu in
+ ia64*)
+ shrext=.so
+ ;;
+ hppa*64*)
+ shrext=.sl
+ ;;
+ *)
+ shrext=.sl
+ ;;
+ esac
+ library_names_spec='$libname$shrext'
+ ;;
+ interix[3-9]*)
+ library_names_spec='$libname$shrext'
+ ;;
+ irix5* | irix6* | nonstopux*)
+ library_names_spec='$libname$shrext'
+ case "$host_os" in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+ *) libsuff= shlibsuff= ;;
+ esac
+ ;;
+ esac
+ ;;
+ linux*oldld* | linux*aout* | linux*coff*)
+ ;;
+ linux* | k*bsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ knetbsd*-gnu)
+ library_names_spec='$libname$shrext'
+ ;;
+ netbsd*)
+ library_names_spec='$libname$shrext'
+ ;;
+ newsos6)
+ library_names_spec='$libname$shrext'
+ ;;
+ nto-qnx*)
+ library_names_spec='$libname$shrext'
+ ;;
+ openbsd*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ os2*)
+ libname_spec='$name'
+ shrext=.dll
+ library_names_spec='$libname.a'
+ ;;
+ osf3* | osf4* | osf5*)
+ library_names_spec='$libname$shrext'
+ ;;
+ rdos*)
+ ;;
+ solaris*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sunos4*)
+ library_names_spec='$libname$shrext$versuffix'
+ ;;
+ sysv4 | sysv4.3*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv4*MP*)
+ library_names_spec='$libname$shrext'
+ ;;
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ library_names_spec='$libname$shrext'
+ ;;
+ uts4*)
+ library_names_spec='$libname$shrext'
+ ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755
index 0000000..de4259e
--- /dev/null
+++ b/build-aux/config.sub
@@ -0,0 +1,1907 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2023 Free Software Foundation, Inc.
+
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2023-01-21'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2023 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo "$1"
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
+
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
+ ;;
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
+ ;;
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os in
+ nto-qnx* | linux-* | uclinux-uclibc* \
+ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+ | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
+ ;;
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
+ ;;
+esac
+
+# Decode 1-component or ad-hoc basic machines
+case $basic_machine in
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
+ ;;
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
+ ;;
+ ibm*)
+ cpu=i370
+ vendor=ibm
+ ;;
+ orion105)
+ cpu=clipper
+ vendor=highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
+ ;;
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
+ ;;
+
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ cpu=m68000
+ vendor=att
+ ;;
+ 3b*)
+ cpu=we32k
+ vendor=att
+ ;;
+ bluegene*)
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
+ ;;
+ decsystem10* | dec10*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
+ ;;
+ decsystem20* | dec20*)
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ cpu=m68k
+ vendor=motorola
+ ;;
+ dpx2*)
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
+ ;;
+ encore | umax | mmax)
+ cpu=ns32k
+ vendor=encore
+ ;;
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
+ ;;
+ fx2800)
+ cpu=i860
+ vendor=alliant
+ ;;
+ genix)
+ cpu=ns32k
+ vendor=ns
+ ;;
+ h3050r* | hiux*)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ cpu=m68000
+ vendor=hp
+ ;;
+ hp9k3[2-9][0-9])
+ cpu=m68k
+ vendor=hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ cpu=hppa1.1
+ vendor=hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ cpu=hppa1.0
+ vendor=hp
+ ;;
+ i*86v32)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
+ ;;
+ i*86v4*)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
+ ;;
+ i*86v)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
+ ;;
+ i*86sol2)
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
+ ;;
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
+ ;;
+ iris | iris4d)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
+ ;;
+ *)
+ basic_os=irix4
+ ;;
+ esac
+ ;;
+ miniframe)
+ cpu=m68000
+ vendor=convergent
+ ;;
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
+ ;;
+ news-3600 | risc-news)
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
+ ;;
+ next | m*-next)
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
+ ;;
+ ns2*)
+ basic_os=nextstep2
+ ;;
+ *)
+ basic_os=nextstep3
+ ;;
+ esac
+ ;;
+ np1)
+ cpu=np1
+ vendor=gould
+ ;;
+ op50n-* | op60c-*)
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
+ ;;
+ pa-hitachi)
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
+ ;;
+ pbd)
+ cpu=sparc
+ vendor=tti
+ ;;
+ pbb)
+ cpu=m68k
+ vendor=tti
+ ;;
+ pc532)
+ cpu=ns32k
+ vendor=pc532
+ ;;
+ pn)
+ cpu=pn
+ vendor=gould
+ ;;
+ power)
+ cpu=power
+ vendor=ibm
+ ;;
+ ps2)
+ cpu=i386
+ vendor=ibm
+ ;;
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
+ ;;
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
+ ;;
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
+ ;;
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
+ ;;
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
+ ;;
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
+ ;;
+ w65)
+ cpu=w65
+ vendor=wdc
+ ;;
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
+ ;;
+ none)
+ cpu=none
+ vendor=none
+ ;;
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
+ ;;
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
+ ;;
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
+ ;;
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ cpu=$basic_machine
+ vendor=pc
+ ;;
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
+ ;;
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
+ ;;
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
+ ;;
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
+ ;;
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
+ ;;
+ fx80-unknown)
+ vendor=alliant
+ ;;
+ romp-unknown)
+ vendor=ibm
+ ;;
+ mmix-unknown)
+ vendor=knuth
+ ;;
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
+ ;;
+ rs6000-unknown)
+ vendor=ibm
+ ;;
+ vax-unknown)
+ vendor=dec
+ ;;
+ pdp11-unknown)
+ vendor=dec
+ ;;
+ we32k-unknown)
+ vendor=att
+ ;;
+ cydra-unknown)
+ vendor=cydrome
+ ;;
+ i370-ibm*)
+ vendor=ibm
+ ;;
+ orion-unknown)
+ vendor=highlevel
+ ;;
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
+ ;;
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
+ ;;
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
+ ;;
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
+ ;;
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
+ ;;
+ c54x-*)
+ cpu=tic54x
+ ;;
+ c55x-*)
+ cpu=tic55x
+ ;;
+ c6x-*)
+ cpu=tic6x
+ ;;
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
+ ;;
+ mips3*-*)
+ cpu=mips64
+ ;;
+ ms1-*)
+ cpu=mt
+ ;;
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
+ ;;
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
+ ;;
+ openrisc-*)
+ cpu=or32
+ ;;
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athlon_*-*)
+ cpu=i686
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
+ ;;
+ pentium4-*)
+ cpu=i786
+ ;;
+ pc98-*)
+ cpu=i386
+ ;;
+ ppc-* | ppcbe-*)
+ cpu=powerpc
+ ;;
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
+ ;;
+ ppc64-*)
+ cpu=powerpc64
+ ;;
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
+ ;;
+ sb1-*)
+ cpu=mipsisa64sb1
+ ;;
+ sb1el-*)
+ cpu=mipsisa64sb1el
+ ;;
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+ ;;
+ spur-*)
+ cpu=spur
+ ;;
+ strongarm-* | thumb-*)
+ cpu=arm
+ ;;
+ tx39-*)
+ cpu=mipstx39
+ ;;
+ tx39el-*)
+ cpu=mipstx39el
+ ;;
+ x64-*)
+ cpu=x86_64
+ ;;
+ xscale-* | xscalee[bl]-*)
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+ ;;
+ arm64-* | aarch64le-*)
+ cpu=aarch64
+ ;;
+
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
+ ;;
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
+ ;;
+ crx-*)
+ basic_os=${basic_os:-elf}
+ ;;
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
+ ;;
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
+ ;;
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
+ ;;
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
+ ;;
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
+ ;;
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
+ ;;
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
+ ;;
+
+ *)
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
+ | m88110 | m88k | maxq | mb | mcore | mep | metag \
+ | microblaze | microblazeel \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64eb | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa32r3 | mipsisa32r3el \
+ | mipsisa32r5 | mipsisa32r5el \
+ | mipsisa32r6 | mipsisa32r6el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64r3 | mipsisa64r3el \
+ | mipsisa64r5 | mipsisa64r5el \
+ | mipsisa64r6 | mipsisa64r6el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $vendor in
+ digital*)
+ vendor=dec
+ ;;
+ commodore*)
+ vendor=cbm
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if test x$basic_os != x
+then
+
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
+# set os.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ managarm*)
+ kernel=managarm
+ os=`echo "$basic_os" | sed -e 's|managarm|mlibc|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
+case $os in
+ # First match some system type aliases that might get confused
+ # with valid system types.
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
+ ;;
+ bluegene*)
+ os=cnk
+ ;;
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
+ ;;
+ solaris)
+ os=solaris2
+ ;;
+ unixware*)
+ os=sysv4.2uw
+ ;;
+ # es1800 is here to avoid being matched by es* (a different OS)
+ es1800*)
+ os=ose
+ ;;
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
+ ;;
+ isc)
+ os=isc2.2
+ ;;
+ sco6)
+ os=sco5v6
+ ;;
+ sco5)
+ os=sco3.2v5
+ ;;
+ sco4)
+ os=sco3.2v4
+ ;;
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
+ ;;
+ sco*v* | scout)
+ # Don't match below
+ ;;
+ sco*)
+ os=sco3.2v2
+ ;;
+ psos*)
+ os=psos
+ ;;
+ qnx*)
+ os=qnx
+ ;;
+ hiux*)
+ os=hiuxwe2
+ ;;
+ lynx*178)
+ os=lynxos178
+ ;;
+ lynx*5)
+ os=lynxos5
+ ;;
+ lynxos*)
+ # don't get caught up in next wildcard
+ ;;
+ lynx*)
+ os=lynxos
+ ;;
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
+ ;;
+ opened*)
+ os=openedition
+ ;;
+ os400*)
+ os=os400
+ ;;
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ ;;
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ ;;
+ wince*)
+ os=wince
+ ;;
+ utek*)
+ os=bsd
+ ;;
+ dynix*)
+ os=bsd
+ ;;
+ acis*)
+ os=aos
+ ;;
+ atheos*)
+ os=atheos
+ ;;
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
+ ;;
+ sinix*)
+ os=sysv4
+ ;;
+ tpf*)
+ os=tpf
+ ;;
+ triton*)
+ os=sysv3
+ ;;
+ oss*)
+ os=sysv3
+ ;;
+ svr4*)
+ os=sysv4
+ ;;
+ svr3)
+ os=sysv3
+ ;;
+ sysvr4)
+ os=sysv4
+ ;;
+ ose*)
+ os=ose
+ ;;
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
+ ;;
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
+ # Until real need of OS specific support for
+ # particular features comes up, bare metal
+ # configurations are quite functional.
+ case $cpu in
+ arm*)
+ os=eabi
+ ;;
+ *)
+ os=elf
+ ;;
+ esac
+ ;;
+ *)
+ # No normalization, but not necessarily accepted, that comes below.
+ ;;
+esac
+
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+kernel=
+case $cpu-$vendor in
+ score-*)
+ os=elf
+ ;;
+ spu-*)
+ os=elf
+ ;;
+ *-acorn)
+ os=riscix1.2
+ ;;
+ arm*-rebel)
+ kernel=linux
+ os=gnu
+ ;;
+ arm*-semi)
+ os=aout
+ ;;
+ c4x-* | tic4x-*)
+ os=coff
+ ;;
+ c8051-*)
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
+ ;;
+ hexagon-*)
+ os=elf
+ ;;
+ tic54x-*)
+ os=coff
+ ;;
+ tic55x-*)
+ os=coff
+ ;;
+ tic6x-*)
+ os=coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=tops20
+ ;;
+ pdp11-*)
+ os=none
+ ;;
+ *-dec | vax-*)
+ os=ultrix4.2
+ ;;
+ m68*-apollo)
+ os=domain
+ ;;
+ i386-sun)
+ os=sunos4.0.2
+ ;;
+ m68000-sun)
+ os=sunos3
+ ;;
+ m68*-cisco)
+ os=aout
+ ;;
+ mep-*)
+ os=elf
+ ;;
+ mips*-cisco)
+ os=elf
+ ;;
+ mips*-*)
+ os=elf
+ ;;
+ or32-*)
+ os=coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=sysv3
+ ;;
+ sparc-* | *-sun)
+ os=sunos4.1.1
+ ;;
+ pru-*)
+ os=elf
+ ;;
+ *-be)
+ os=beos
+ ;;
+ *-ibm)
+ os=aix
+ ;;
+ *-knuth)
+ os=mmixware
+ ;;
+ *-wec)
+ os=proelf
+ ;;
+ *-winbond)
+ os=proelf
+ ;;
+ *-oki)
+ os=proelf
+ ;;
+ *-hp)
+ os=hpux
+ ;;
+ *-hitachi)
+ os=hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=sysv
+ ;;
+ *-cbm)
+ os=amigaos
+ ;;
+ *-dg)
+ os=dgux
+ ;;
+ *-dolphin)
+ os=sysv3
+ ;;
+ m68k-ccur)
+ os=rtu
+ ;;
+ m88k-omron*)
+ os=luna
+ ;;
+ *-next)
+ os=nextstep
+ ;;
+ *-sequent)
+ os=ptx
+ ;;
+ *-crds)
+ os=unos
+ ;;
+ *-ns)
+ os=genix
+ ;;
+ i370-*)
+ os=mvs
+ ;;
+ *-gould)
+ os=sysv
+ ;;
+ *-highlevel)
+ os=bsd
+ ;;
+ *-encore)
+ os=bsd
+ ;;
+ *-sgi)
+ os=irix
+ ;;
+ *-siemens)
+ os=sysv4
+ ;;
+ *-masscomp)
+ os=rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=uxpv
+ ;;
+ *-rom68k)
+ os=coff
+ ;;
+ *-*bug)
+ os=coff
+ ;;
+ *-apple)
+ os=macos
+ ;;
+ *-atari*)
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
+ ;;
+ *)
+ os=none
+ ;;
+esac
+
+fi
+
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | mirbsd* | netbsd* | dicos* | openedition* | ose* \
+ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
+ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
+ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* | mlibc* )
+ ;;
+ # This one is extra strict with allowed versions
+ sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ ;;
+ none)
+ ;;
+ kernel* )
+ # Restricted further below
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# As a final step for OS-related things, validate the OS-kernel combination
+# (given a valid OS), if there is a kernel.
+case $kernel-$os in
+ linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+ | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ managarm-mlibc* | managarm-kernel* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* )
+ # These are just libc implementations, not actual OSes, and thus
+ # require a kernel.
+ echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ -kernel* )
+ echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2
+ exit 1
+ ;;
+ *-kernel* )
+ echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
+ vendor=acorn
+ ;;
+ *-sunos*)
+ vendor=sun
+ ;;
+ *-cnk* | *-aix*)
+ vendor=ibm
+ ;;
+ *-beos*)
+ vendor=be
+ ;;
+ *-hpux*)
+ vendor=hp
+ ;;
+ *-mpeix*)
+ vendor=hp
+ ;;
+ *-hiux*)
+ vendor=hitachi
+ ;;
+ *-unos*)
+ vendor=crds
+ ;;
+ *-dgux*)
+ vendor=dg
+ ;;
+ *-luna*)
+ vendor=omron
+ ;;
+ *-genix*)
+ vendor=ns
+ ;;
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
+ vendor=ibm
+ ;;
+ s390-* | s390x-*)
+ vendor=ibm
+ ;;
+ *-ptx*)
+ vendor=sequent
+ ;;
+ *-tpf*)
+ vendor=ibm
+ ;;
+ *-vxsim* | *-vxworks* | *-windiss*)
+ vendor=wrs
+ ;;
+ *-aux*)
+ vendor=apple
+ ;;
+ *-hms*)
+ vendor=hitachi
+ ;;
+ *-mpw* | *-macos*)
+ vendor=apple
+ ;;
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
+ vendor=atari
+ ;;
+ *-vos*)
+ vendor=stratus
+ ;;
+ esac
+ ;;
+esac
+
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
new file mode 100755
index 0000000..ce5c2f7
--- /dev/null
+++ b/build-aux/depcomp
@@ -0,0 +1,790 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2022-09-18.14; # UTC
+
+# Copyright (C) 1999-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsolete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/do-release-commit-and-tag b/build-aux/do-release-commit-and-tag
new file mode 100755
index 0000000..3402bae
--- /dev/null
+++ b/build-aux/do-release-commit-and-tag
@@ -0,0 +1,179 @@
+#!/bin/sh
+# In a git/autoconf/automake-enabled project with a NEWS file and a version-
+# controlled .prev-version file, automate the procedure by which we record
+# the date, release-type and version string in the NEWS file. That commit
+# will serve to identify the release, so apply a signed tag to it as well.
+VERSION=2018-03-07.03 # UTC
+
+# Note: this is a bash script (could be zsh or dash)
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help()
+{
+ cat <<EOF
+Usage: $ME [OPTION...] VERSION RELEASE_TYPE
+
+Run this script from top_srcdir to perform the final pre-release NEWS
+update in which the date, release-type and version string are
+recorded. Commit that result with a log entry marking the release,
+and apply a signed tag. Run it from your project's top-level
+directory.
+
+Requirements:
+- you use git for version-control
+- a version-controlled .prev-version file
+- a NEWS file, with line 3 identical to this:
+$noteworthy_stub
+
+Options:
+ --branch=BRANCH set release branch (default: $branch)
+ -C, --builddir=DIR location of (configured) Makefile (default: $builddir)
+ --help print this help, then exit
+ --version print version number, then exit
+
+EXAMPLE:
+To update NEWS and tag the beta 8.1 release of coreutils, I would run this:
+
+ $ME 8.1 beta
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+ exit
+}
+
+version()
+{
+ year=$(echo "$VERSION" | sed 's/[^0-9].*//')
+ cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+ exit
+}
+
+## ------ ##
+## Main. ##
+## ------ ##
+
+# Constants.
+noteworthy='* Noteworthy changes in release'
+noteworthy_stub="$noteworthy ?.? (????-??-??) [?]"
+
+# Variables.
+branch=$(git branch | sed -ne '/^\* /{s///;p;q;}')
+builddir=.
+
+while test $# != 0
+do
+ # Handle --option=value by splitting apart and putting back on argv.
+ case $1 in
+ --*=*)
+ opt=$(echo "$1" | sed -e 's/=.*//')
+ val=$(echo "$1" | sed -e 's/[^=]*=//')
+ shift
+ set dummy "$opt" "$val" "$@"; shift
+ ;;
+ esac
+
+ case $1 in
+ --help|--version) ${1#--};;
+ --branch) shift; branch=$1; shift ;;
+ -C|--builddir) shift; builddir=$1; shift ;;
+ --*) die "unrecognized option: $1";;
+ *) break;;
+ esac
+done
+
+test $# = 2 \
+ || die "Usage: $ME [OPTION...] VERSION TYPE"
+
+ver=$1
+type=$2
+
+
+## ---------------------- ##
+## First, sanity checks. ##
+## ---------------------- ##
+
+# Verify that $ver looks like a version number, and...
+echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \
+ || die "invalid version: $ver"
+prev_ver=$(cat .prev-version) \
+ || die 'failed to determine previous version number from .prev-version'
+
+# Verify that $ver is sensible (> .prev-version).
+case $(printf "%s\n%s\n" "$prev_ver" "$ver"|sort -V -u|tr '\n' ':') in
+ "$prev_ver:$ver:") ;;
+ *) die "invalid version: $ver (<= $prev_ver)";;
+esac
+
+case $type in
+ alpha|beta|stable) ;;
+ *) die "invalid release type: $type";;
+esac
+
+# No local modifications allowed.
+case $(git diff-index --name-only HEAD) in
+ '') ;;
+ *) die 'this tree is dirty; commit your changes first';;
+esac
+
+# Ensure the current branch name is correct:
+curr_br=$(git rev-parse --symbolic-full-name HEAD)
+test "$curr_br" = "refs/heads/$branch" || die not on branch $branch
+
+# Extract package name from Makefile.
+Makefile=$builddir/Makefile
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \
+ || die "failed to determine package name from $Makefile"
+
+# Check that line 3 of NEWS is the stub line about to be replaced.
+test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \
+ || die "line 3 of NEWS must be exactly '$noteworthy_stub'"
+
+## --------------- ##
+## Then, changes. ##
+## --------------- ##
+
+# Update NEWS to have today's date, plus desired version number and $type.
+perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \
+ -e 'my ($type, $ver) = qw('"$type $ver"');' \
+ -e 'my $pfx = "'"$noteworthy"'";' \
+ -e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \
+ NEWS || die 'failed to update NEWS'
+
+printf "version %s\n\n* NEWS: Record release date.\n" "$ver" \
+ | git commit -F - -a || die 'git commit failed'
+git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed'
+
+# Local variables:
+# indent-tabs-mode: nil
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: " # UTC"
+# End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
new file mode 100755
index 0000000..1ad5cf4
--- /dev/null
+++ b/build-aux/gendocs.sh
@@ -0,0 +1,510 @@
+#!/bin/sh -e
+# gendocs.sh -- generate a GNU manual in many formats. This script is
+# mentioned in maintain.texi. See the help message below for usage details.
+
+scriptversion=2023-01-21.00
+
+# Copyright 2003-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-gnulib@gnu.org.
+#
+# The latest version of this script, and the companion template, is
+# available from the Gnulib repository:
+#
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
+# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
+
+# TODO:
+# - image importing was only implemented for HTML generated by
+# makeinfo. But it should be simple enough to adjust.
+# - images are not imported in the source tarball. All the needed
+# formats (PDF, PNG, etc.) should be included.
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
+templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
+
+: "${SETLANG="env LANG= LC_TIME= LC_MESSAGES= LC_ALL= LANGUAGE="}"
+: "${MAKEINFO="makeinfo"}"
+: "${TEXI2DVI="texi2dvi"}"
+: "${DOCBOOK2HTML="docbook2html"}"
+: "${DOCBOOK2PDF="docbook2pdf"}"
+: "${DOCBOOK2TXT="docbook2txt"}"
+: "${GENDOCS_TEMPLATE_DIR="."}"
+: "${PERL="perl"}"
+: "${TEXI2HTML="texi2html"}"
+unset CDPATH
+unset use_texi2html
+
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org # please override with --email
+commonarg= # passed to all makeinfo/texi2html invocations.
+dirargs= # passed to all tools (-I dir).
+dirs= # -I directories.
+htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
+default_htmlarg=true
+infoarg=--no-split
+generate_ascii=true
+generate_html=true
+generate_info=true
+generate_tex=true
+outdir=manual
+source_extra=
+split=node
+srcfile=
+texarg="-t @finalout"
+
+version="gendocs.sh $scriptversion
+
+Copyright 2023 Free Software Foundation, Inc.
+There is NO warranty. You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate output in various formats from PACKAGE.texinfo (or .texi or
+.txi) source. See the GNU Maintainers document for a more extensive
+discussion:
+ https://www.gnu.org/prep/maintain_toc.html
+
+Options:
+ --email ADR use ADR as contact in generated web pages; always give this.
+
+ -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
+ -o OUTDIR write files into OUTDIR, instead of manual/.
+ -I DIR append DIR to the Texinfo search path.
+ --common ARG pass ARG in all invocations.
+ --html ARG pass ARG to makeinfo or texi2html for HTML targets,
+ instead of '$htmlarg'.
+ --info ARG pass ARG to makeinfo for Info, instead of --no-split.
+ --no-ascii skip generating the plain text output.
+ --no-html skip generating the html output.
+ --no-info skip generating the info output.
+ --no-tex skip generating the dvi and pdf output.
+ --source ARG include ARG in tar archive of sources.
+ --split HOW make split HTML by node, section, chapter; default node.
+ --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
+
+ --texi2html use texi2html to make HTML target, with all split versions.
+ --docbook convert through DocBook too (xml, txt, html, pdf).
+
+ --help display this help and exit successfully.
+ --version display version information and exit successfully.
+
+Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+ cd PACKAGESOURCE/doc
+ wget \"$scripturl\"
+ wget \"$templateurl\"
+ $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default;
+use -o OUTDIR to override). Move all the new files into your web CVS
+tree, as explained in the Web Pages node of maintain.texi.
+
+Please use the --email ADDRESS option so your own bug-reporting
+address will be used in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file. It should include the name of the package being
+documented. manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time. Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+As implied above, by default monolithic Info files are generated.
+If you want split Info, or other Info options, use --info to override.
+
+You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
+and PERL to control the programs that get executed, and
+GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
+looked for. With --docbook, the environment variables DOCBOOK2HTML,
+DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
+
+By default, makeinfo and texi2dvi are run in the default (English)
+locale, since that's the language of most Texinfo manuals. If you
+happen to have a non-English manual and non-English web site, see the
+SETLANG setting in the source.
+
+Email bug reports or enhancement requests to bug-gnulib@gnu.org.
+"
+
+while test $# -gt 0; do
+ case $1 in
+ -s) shift; srcfile=$1;;
+ -o) shift; outdir=$1;;
+ -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
+ --common) shift; commonarg=$1;;
+ --docbook) docbook=yes;;
+ --email) shift; EMAIL=$1;;
+ --html) shift; default_htmlarg=false; htmlarg=$1;;
+ --info) shift; infoarg=$1;;
+ --no-ascii) generate_ascii=false;;
+ --no-html) generate_ascii=false;;
+ --no-info) generate_info=false;;
+ --no-tex) generate_tex=false;;
+ --source) shift; source_extra=$1;;
+ --split) shift; split=$1;;
+ --tex) shift; texarg=$1;;
+ --texi2html) use_texi2html=1;;
+
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ -*)
+ echo "$0: Unknown option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *)
+ if test -z "$PACKAGE"; then
+ PACKAGE=$1
+ elif test -z "$MANUAL_TITLE"; then
+ MANUAL_TITLE=$1
+ else
+ echo "$0: extra non-option argument \`$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+# makeinfo uses the dirargs, but texi2dvi doesn't.
+commonarg=" $dirargs $commonarg"
+
+# For most of the following, the base name is just $PACKAGE
+base=$PACKAGE
+
+if $default_htmlarg && test -n "$use_texi2html"; then
+ # The legacy texi2html doesn't support TOP_NODE_UP_URL
+ htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css"
+fi
+
+if test -n "$srcfile"; then
+ # but here, we use the basename of $srcfile
+ base=`basename "$srcfile"`
+ case $base in
+ *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
+ esac
+ PACKAGE=$base
+elif test -s "$srcdir/$PACKAGE.texinfo"; then
+ srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+ srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+ srcfile=$srcdir/$PACKAGE.txi
+else
+ echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+ exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+ echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+ echo "$0: it is available from $templateurl." >&2
+ exit 1
+fi
+
+# Function to return size of $1 in something resembling kilobytes.
+calcsize()
+{
+ size=`ls -ksl $1 | awk '{print $1}'`
+ echo $size
+}
+
+# copy_images OUTDIR HTML-FILE...
+# -------------------------------
+# Copy all the images needed by the HTML-FILEs into OUTDIR.
+# Look for them in . and the -I directories; this is simpler than what
+# makeinfo supports with -I, but hopefully it will suffice.
+copy_images()
+{
+ local odir
+ odir=$1
+ shift
+ $PERL -n -e "
+BEGIN {
+ \$me = '$prog';
+ \$odir = '$odir';
+ @dirs = qw(. $dirs);
+}
+" -e '
+/<img src="(.*?)"/g && ++$need{$1};
+
+END {
+ #print "$me: @{[keys %need]}\n"; # for debugging, show images found.
+ FILE: for my $f (keys %need) {
+ for my $d (@dirs) {
+ if (-f "$d/$f") {
+ use File::Basename;
+ my $dest = dirname ("$odir/$f");
+ #
+ use File::Path;
+ -d $dest || mkpath ($dest)
+ || die "$me: cannot mkdir $dest: $!\n";
+ #
+ use File::Copy;
+ copy ("$d/$f", $dest)
+ || die "$me: cannot copy $d/$f to $dest: $!\n";
+ next FILE;
+ }
+ }
+ die "$me: $ARGV: cannot find image $f\n";
+ }
+}
+' -- "$@" || exit 1
+}
+
+case $outdir in
+ /*) abs_outdir=$outdir;;
+ *) abs_outdir=$srcdir/$outdir;;
+esac
+
+echo "Making output for $srcfile"
+echo " in `pwd`"
+mkdir -p "$outdir/"
+
+#
+if $generate_info; then
+ cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
+ echo "Generating info... ($cmd)"
+ rm -f $PACKAGE.info* # get rid of any strays
+ eval "$cmd"
+ tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
+ ls -l "$outdir/$PACKAGE.info.tar.gz"
+ info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
+ # do not mv the info files, there's no point in having them available
+ # separately on the web.
+fi # end info
+
+#
+if $generate_tex; then
+ cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
+ printf "\nGenerating dvi... (%s)\n" "$cmd"
+ eval "$cmd"
+ # compress/finish dvi:
+ gzip -f -9 $PACKAGE.dvi
+ dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+ mv $PACKAGE.dvi.gz "$outdir/"
+ ls -l "$outdir/$PACKAGE.dvi.gz"
+
+ cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
+ printf "\nGenerating pdf... (%s)\n" "$cmd"
+ eval "$cmd"
+ pdf_size=`calcsize $PACKAGE.pdf`
+ mv $PACKAGE.pdf "$outdir/"
+ ls -l "$outdir/$PACKAGE.pdf"
+fi # end tex (dvi + pdf)
+
+#
+if $generate_ascii; then
+ opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating ascii... (%s)\n" "$cmd"
+ eval "$cmd"
+ ascii_size=`calcsize $PACKAGE.txt`
+ gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
+ ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
+ mv $PACKAGE.txt "$outdir/"
+ ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
+fi
+
+#
+
+if $generate_html; then
+# Split HTML at level $1. Used for texi2html.
+html_split()
+{
+ opt="--split=$1 --node-files $commonarg $htmlarg"
+ cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+ printf "\nGenerating html by %s... (%s)\n" "$1" "$cmd"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ (
+ cd ${split_html_dir} || exit 1
+ ln -sf ${PACKAGE}.html index.html
+ tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
+ )
+ eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
+ rm -f "$outdir"/html_$1/*.html
+ mkdir -p "$outdir/html_$1/"
+ mv ${split_html_dir}/*.html "$outdir/html_$1/"
+ rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+ opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating monolithic html... (%s)\n" "$cmd"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ copy_images "$outdir/" $PACKAGE.html
+ mv $PACKAGE.html "$outdir/"
+ ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
+
+ # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
+ # it just always split by node. So if we're splitting by node anyway,
+ # leave it out.
+ if test "x$split" = xnode; then
+ split_arg=
+ else
+ split_arg=--split=$split
+ fi
+ #
+ opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+ printf "\nGenerating html by %s... (%s)\n" "$split" "$cmd"
+ eval "$cmd"
+ split_html_dir=$PACKAGE.html
+ copy_images $split_html_dir/ $split_html_dir/*.html
+ (
+ cd $split_html_dir || exit 1
+ tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
+ )
+ eval \
+ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
+ rm -rf "$outdir/html_$split/"
+ mv $split_html_dir "$outdir/html_$split/"
+ du -s "$outdir/html_$split/"
+ ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
+
+else # use texi2html:
+ opt="--output $PACKAGE.html $commonarg $htmlarg"
+ cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
+ printf "\nGenerating monolithic html with texi2html... (%s)\n" "$cmd"
+ rm -rf $PACKAGE.html # in case a directory is left over
+ eval "$cmd"
+ html_mono_size=`calcsize $PACKAGE.html`
+ gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
+ html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
+ mv $PACKAGE.html "$outdir/"
+
+ html_split node
+ html_split chapter
+ html_split section
+fi
+fi # end html
+
+#
+printf "\nMaking .tar.gz for sources...\n"
+d=`dirname $srcfile`
+(
+ cd "$d"
+ srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
+ tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
+ ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
+)
+texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
+
+#
+# Do everything again through docbook.
+if test -n "$docbook"; then
+ opt="-o - --docbook $commonarg"
+ cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
+ printf "\nGenerating docbook XML... (%s)\n" "$cmd"
+ eval "$cmd"
+ docbook_xml_size=`calcsize $PACKAGE-db.xml`
+ gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
+ docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
+ mv $PACKAGE-db.xml "$outdir/"
+
+ split_html_db_dir=html_node_db
+ opt="$commonarg -o $split_html_db_dir"
+ cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook HTML... (%s)\n" "$cmd"
+ eval "$cmd"
+ (
+ cd ${split_html_db_dir} || exit 1
+ tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
+ )
+ html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
+ rm -f "$outdir"/html_node_db/*.html
+ mkdir -p "$outdir/html_node_db"
+ mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
+ rmdir ${split_html_db_dir}
+
+ cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook ASCII... (%s)\n" "$cmd"
+ eval "$cmd"
+ docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+ mv $PACKAGE-db.txt "$outdir/"
+
+ cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
+ printf "\nGenerating docbook PDF... (%s)\n" "$cmd"
+ eval "$cmd"
+ docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+ mv $PACKAGE-db.pdf "$outdir/"
+fi
+
+#
+printf "\nMaking index.html for %s...\n" "$PACKAGE"
+if test -z "$use_texi2html"; then
+ CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
+ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
+else
+ # should take account of --split here.
+ CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
+fi
+
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+ -e "s!%%EMAIL%%!$EMAIL!g" \
+ -e "s!%%PACKAGE%%!$PACKAGE!g" \
+ -e "s!%%DATE%%!$curdate!g" \
+ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+ -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+ -e "s,%%SCRIPTURL%%,$scripturl,g" \
+ -e "s!%%SCRIPTNAME%%!$prog!g" \
+ -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
new file mode 100755
index 0000000..a72057b
--- /dev/null
+++ b/build-aux/git-version-gen
@@ -0,0 +1,227 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2022-07-09.08; # UTC
+
+# Copyright (C) 2007-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+# produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+# presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+# a checked-out repository. Created with contents that were learned at
+# the last time autoconf was run, and used by git-version-gen. Must not
+# be present in either $(srcdir) or $(builddir) for git-version-gen to
+# give accurate answers during normal development with a checked out tree,
+# but must be present in a tarball when there is no version control system.
+# Therefore, it cannot be used in any dependencies. GNUmakefile has
+# hooks to force a reconfigure at distribution time to get the value
+# correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+# tarball. Usable in dependencies, particularly for files that don't
+# want to depend on config.h but do want to track version changes.
+# Delete this file prior to any autoconf run where you want to rebuild
+# files to pick up a version string change; and leave it stale to
+# minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+# [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+# echo '$(VERSION)' > $@-t
+# mv $@-t $@
+# dist-hook:
+# echo '$(VERSION)' > $(distdir)/.tarball-version
+
+
+me=$0
+
+year=`expr "$scriptversion" : '\([^-]*\)'`
+version="git-version-gen $scriptversion
+
+Copyright (C) ${year} Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+ --prefix PREFIX prefix of git tags (default 'v')
+ --fallback VERSION
+ fallback version to use if \"git --version\" fails
+
+ --help display this help and exit
+ --version output version information and exit
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+
+prefix=v
+fallback=
+
+while test $# -gt 0; do
+ case $1 in
+ --help) echo "$usage"; exit 0;;
+ --version) echo "$version"; exit 0;;
+ --prefix) shift; prefix=${1?};;
+ --fallback) shift; fallback=${1?};;
+ -*)
+ echo "$0: Unknown option '$1'." >&2
+ echo "$0: Try '--help' for more information." >&2
+ exit 1;;
+ *)
+ if test "x$tarball_version_file" = x; then
+ tarball_version_file="$1"
+ elif test "x$tag_sed_script" = x; then
+ tag_sed_script="$1"
+ else
+ echo "$0: extra non-option argument '$1'." >&2
+ exit 1
+ fi;;
+ esac
+ shift
+done
+
+if test "x$tarball_version_file" = x; then
+ echo "$usage"
+ exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+ v=`cat $tarball_version_file` || v=
+ case $v in
+ *$nl*) v= ;; # reject multi-line output
+ esac
+ test "x$v" = x \
+ && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2
+fi
+
+if test "x$v" != x
+then
+ : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+ || git describe --abbrev=4 HEAD 2>/dev/null` \
+ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+ && case $v in
+ $prefix[0-9]*) ;;
+ *) (exit 1) ;;
+ esac
+then
+ # Is this a new git that lists number of commits since the last
+ # tag or the previous older version that did not?
+ # Newer: v6.10-77-g0f8faeb
+ # Older: v6.10-g0f8faeb
+ vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
+ case $vprefix in
+ *-*) : git describe is probably okay three part flavor ;;
+ *)
+ : git describe is older two part flavor
+ # Recreate the number of commits and rewrite such that the
+ # result is the same as if we were using the newer version
+ # of git describe.
+ vtag=`echo "$v" | sed 's/-.*//'`
+ commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+ || { commit_list=failed;
+ echo "$0: WARNING: git rev-list failed" 1>&2; }
+ numcommits=`echo "$commit_list" | wc -l`
+ v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+ test "$commit_list" = failed && v=UNKNOWN
+ ;;
+ esac
+
+ # Change the penultimate "-" to ".", for version-comparing tools.
+ # Remove the "g" to save a byte.
+ v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
+ v_from_git=1
+elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
+ v=UNKNOWN
+else
+ v=$fallback
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test "x$v_from_git" != x; then
+ # Don't declare a version "dirty" merely because a timestamp has changed.
+ git update-index --refresh > /dev/null 2>&1
+
+ dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+ case "$dirty" in
+ '') ;;
+ *) # Append the suffix only if there isn't one already.
+ case $v in
+ *-dirty) ;;
+ *) v="$v-dirty" ;;
+ esac ;;
+ esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+printf %s "$v"
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
new file mode 100755
index 0000000..4678bad
--- /dev/null
+++ b/build-aux/gitlog-to-changelog
@@ -0,0 +1,516 @@
+#!/bin/sh
+#! -*-perl-*-
+
+# Convert git log output to ChangeLog format.
+
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line. The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name. The second line is essential for perl and is
+# also useful for editing this file in Emacs. The next two lines below
+# are valid code in both sh and perl. When executed by sh, they re-execute
+# the script through the perl program found in $PATH. The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh. When executed by perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+ if 0;
+
+my $VERSION = '2022-01-27 18:49'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # https://meyering.net/code/Coda/
+END {
+ defined fileno STDOUT or return;
+ close STDOUT and return;
+ warn "$ME: failed to close standard output: $!\n";
+ $? ||= 1;
+}
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format. If present, any ARGS
+are passed to "git log". To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+ --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+ makes a change to SHA1's commit log text or metadata.
+ --append-dot append a dot to the first line of each commit message if
+ there is no other punctuation or blank at the end.
+ --no-cluster never cluster commit messages under the same date/author
+ header; the default is to cluster adjacent commit messages
+ if their headers are the same and neither commit message
+ contains multiple paragraphs.
+ --srcdir=DIR the root of the source tree, from which the .git/
+ directory can be derived.
+ --since=DATE convert only the logs since DATE;
+ the default is to convert all log entries.
+ --until=DATE convert only the logs older than DATE.
+ --ignore-matching=PAT ignore commit messages whose first lines match PAT.
+ --ignore-line=PAT ignore lines of commit messages that match PAT.
+ --format=FMT set format string for commit subject and body;
+ see 'man git-log' for the list of format metacharacters;
+ the default is '%s%n%b%n'
+ --strip-tab remove one additional leading TAB from commit message lines.
+ --strip-cherry-pick remove data inserted by "git cherry-pick";
+ this includes the "cherry picked from commit ..." line,
+ and the possible final "Conflicts:" paragraph.
+ --help display this help and exit
+ --version output version information and exit
+
+EXAMPLE:
+
+ $ME --since=2008-01-01 > ChangeLog
+ $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+SPECIAL SYNTAX:
+
+The following types of strings are interpreted specially when they appear
+at the beginning of a log message line. They are not copied to the output.
+
+ Copyright-paperwork-exempt: Yes
+ Append the "(tiny change)" notation to the usual "date name email"
+ ChangeLog header to mark a change that does not require a copyright
+ assignment.
+ Co-authored-by: Joe User <user\@example.com>
+ List the specified name and email address on a second
+ ChangeLog header, denoting a co-author.
+ Signed-off-by: Joe User <user\@example.com>
+ These lines are simply elided.
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code. Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul. Note the escaped "@":
+s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
+
+EOF
+ }
+ exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new string.
+sub shell_quote($)
+{
+ my ($s) = @_;
+ if ($s =~ m![^\w+/.,-]!)
+ {
+ # Convert each single quote to '\''
+ $s =~ s/\'/\'\\\'\'/g;
+ # Then single quote the string.
+ $s = "'$s'";
+ }
+ return $s;
+}
+
+sub quoted_cmd(@)
+{
+ return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+ my ($f) = @_;
+
+ open F, '<', $f
+ or die "$ME: $f: failed to open for reading: $!\n";
+
+ my $fail;
+ my $h = {};
+ my $in_code = 0;
+ my $sha;
+ while (defined (my $line = <F>))
+ {
+ $line =~ /^\#/
+ and next;
+ chomp $line;
+ $line eq ''
+ and $in_code = 0, next;
+
+ if (!$in_code)
+ {
+ $line =~ /^([[:xdigit:]]{40})$/
+ or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+ $fail = 1, next;
+ $sha = lc $1;
+ $in_code = 1;
+ exists $h->{$sha}
+ and (warn "$ME: $f:$.: duplicate SHA1\n"),
+ $fail = 1, next;
+ }
+ else
+ {
+ $h->{$sha} ||= '';
+ $h->{$sha} .= "$line\n";
+ }
+ }
+ close F;
+
+ $fail
+ and exit 1;
+
+ return $h;
+}
+
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef). Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+ my ($srcdir) = @_;
+ my @res = ();
+ if (defined $srcdir)
+ {
+ my $qdir = shell_quote $srcdir;
+ my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+ my $qcmd = shell_quote $cmd;
+ my $git_dir = qx($cmd);
+ defined $git_dir
+ or die "$ME: cannot run $qcmd: $!\n";
+ $? == 0
+ or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
+ chomp $git_dir;
+ push @res, "--git-dir=$git_dir/.git";
+ }
+ @res;
+}
+
+{
+ my $since_date;
+ my $until_date;
+ my $format_string = '%s%n%b%n';
+ my $amend_file;
+ my $append_dot = 0;
+ my $cluster = 1;
+ my $ignore_matching;
+ my $ignore_line;
+ my $strip_tab = 0;
+ my $strip_cherry_pick = 0;
+ my $srcdir;
+ GetOptions
+ (
+ help => sub { usage 0 },
+ version => sub { print "$ME version $VERSION\n"; exit },
+ 'since=s' => \$since_date,
+ 'until=s' => \$until_date,
+ 'format=s' => \$format_string,
+ 'amend=s' => \$amend_file,
+ 'append-dot' => \$append_dot,
+ 'cluster!' => \$cluster,
+ 'ignore-matching=s' => \$ignore_matching,
+ 'ignore-line=s' => \$ignore_line,
+ 'strip-tab' => \$strip_tab,
+ 'strip-cherry-pick' => \$strip_cherry_pick,
+ 'srcdir=s' => \$srcdir,
+ ) or usage 1;
+
+ defined $since_date
+ and unshift @ARGV, "--since=$since_date";
+ defined $until_date
+ and unshift @ARGV, "--until=$until_date";
+
+ # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+ # that makes a correction in the log or attribution of that commit.
+ my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+ my @cmd = ('git',
+ git_dir_option $srcdir,
+ qw(log --log-size),
+ '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
+ open PIPE, '-|', @cmd
+ or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
+ . "(Is your Git too old? Version 1.5.1 or later is required.)\n");
+
+ my $prev_multi_paragraph;
+ my $prev_date_line = '';
+ my @prev_coauthors = ();
+ my @skipshas = ();
+ while (1)
+ {
+ defined (my $in = <PIPE>)
+ or last;
+ $in =~ /^log size (\d+)$/
+ or die "$ME:$.: Invalid line (expected log size):\n$in";
+ my $log_nbytes = $1;
+
+ my $log;
+ my $n_read = read PIPE, $log, $log_nbytes;
+ $n_read == $log_nbytes
+ or die "$ME:$.: unexpected EOF\n";
+
+ # Extract leading hash.
+ my ($sha, $rest) = split ':', $log, 2;
+ defined $sha
+ or die "$ME:$.: malformed log entry\n";
+ $sha =~ /^[[:xdigit:]]{40}$/
+ or die "$ME:$.: invalid SHA1: $sha\n";
+
+ my $skipflag = 0;
+ if (@skipshas)
+ {
+ foreach(@skipshas)
+ {
+ if ($sha =~ /^$_/)
+ {
+ $skipflag = $_;
+ last;
+ }
+ }
+ }
+
+ # If this commit's log requires any transformation, do it now.
+ my $code = $amend_code->{$sha};
+ if (defined $code)
+ {
+ eval 'use Safe';
+ my $s = new Safe;
+ # Put the unpreprocessed entry into "$_".
+ $_ = $rest;
+
+ # Let $code operate on it, safely.
+ my $r = $s->reval("$code")
+ or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
+
+ # Note that we've used this entry.
+ delete $amend_code->{$sha};
+
+ # Update $rest upon success.
+ $rest = $_;
+ }
+
+ # Remove lines inserted by "git cherry-pick".
+ if ($strip_cherry_pick)
+ {
+ $rest =~ s/^\s*Conflicts:\n.*//sm;
+ $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
+ }
+
+ my @line = split /[ \t]*\n/, $rest;
+ my $author_line = shift @line;
+ defined $author_line
+ or die "$ME:$.: unexpected EOF\n";
+ $author_line =~ /^(\d+) (.*>)$/
+ or die "$ME:$.: Invalid line "
+ . "(expected date/author/email):\n$author_line\n";
+
+ # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
+ # `(tiny change)' annotation.
+ my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
+ ? ' (tiny change)' : '');
+
+ my $date_line = sprintf "%s %s$tiny\n",
+ strftime ("%Y-%m-%d", localtime ($1)), $2;
+
+ my @coauthors = grep /^Co-authored-by:.*$/, @line;
+ # Omit meta-data lines we've already interpreted.
+ @line = grep !/^(?:Signed-off-by:[ ].*>$
+ |Co-authored-by:[ ]
+ |Copyright-paperwork-exempt:[ ]
+ |Tiny-change:[ ]
+ )/x, @line;
+
+ # Remove leading and trailing blank lines.
+ if (@line)
+ {
+ while ($line[0] =~ /^\s*$/) { shift @line; }
+ while ($line[$#line] =~ /^\s*$/) { pop @line; }
+ }
+
+ # Handle Emacs gitmerge.el "skipped" commits.
+ # Yes, this should be controlled by an option. So sue me.
+ if ( grep /^(; )?Merge from /, @line )
+ {
+ my $found = 0;
+ foreach (@line)
+ {
+ if (grep /^The following commit.*skipped:$/, $_)
+ {
+ $found = 1;
+ ## Reset at each merge to reduce chance of false matches.
+ @skipshas = ();
+ next;
+ }
+ if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/)
+ {
+ push ( @skipshas, $1 );
+ }
+ }
+ }
+
+ # Ignore commits that match the --ignore-matching pattern, if specified.
+ if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
+ {
+ $skipflag = 1;
+ }
+ elsif ($skipflag)
+ {
+ ## Perhaps only warn if a pattern matches more than once?
+ warn "$ME: warning: skipping $sha due to $skipflag\n";
+ }
+
+ if (! $skipflag)
+ {
+ if (defined $ignore_line && @line)
+ {
+ @line = grep ! /$ignore_line/, @line;
+ while ($line[$#line] =~ /^\s*$/) { pop @line; }
+ }
+
+ # Record whether there are two or more paragraphs.
+ my $multi_paragraph = grep /^\s*$/, @line;
+
+ # Format 'Co-authored-by: A U Thor <email@example.com>' lines in
+ # standard multi-author ChangeLog format.
+ for (@coauthors)
+ {
+ s/^Co-authored-by:\s*/\t /;
+ s/\s*</ </;
+
+ /<.*?@.*\..*>/
+ or warn "$ME: warning: missing email address for "
+ . substr ($_, 5) . "\n";
+ }
+
+ # If clustering of commit messages has been disabled, if this header
+ # would be different from the previous date/name/etc. header,
+ # or if this or the previous entry consists of two or more paragraphs,
+ # then print the header.
+ if ( ! $cluster
+ || $date_line ne $prev_date_line
+ || "@coauthors" ne "@prev_coauthors"
+ || $multi_paragraph
+ || $prev_multi_paragraph)
+ {
+ $prev_date_line eq ''
+ or print "\n";
+ print $date_line;
+ @coauthors
+ and print join ("\n", @coauthors), "\n";
+ }
+ $prev_date_line = $date_line;
+ @prev_coauthors = @coauthors;
+ $prev_multi_paragraph = $multi_paragraph;
+
+ # If there were any lines
+ if (@line == 0)
+ {
+ warn "$ME: warning: empty commit message:\n"
+ . " commit $sha\n $date_line\n";
+ }
+ else
+ {
+ if ($append_dot)
+ {
+ # If the first line of the message has enough room, then
+ if (length $line[0] < 72)
+ {
+ # append a dot if there is no other punctuation or blank
+ # at the end.
+ $line[0] =~ /[[:punct:]\s]$/
+ or $line[0] .= '.';
+ }
+ }
+
+ # Remove one additional leading TAB from each line.
+ $strip_tab
+ and map { s/^\t// } @line;
+
+ # Prefix each non-empty line with a TAB.
+ @line = map { length $_ ? "\t$_" : '' } @line;
+
+ print "\n", join ("\n", @line), "\n";
+ }
+ }
+
+ defined ($in = <PIPE>)
+ or last;
+ $in ne "\n"
+ and die "$ME:$.: unexpected line:\n$in";
+ }
+
+ close PIPE
+ or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+ # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+ # Complain about any unused entry in the --amend=F specified file.
+ my $fail = 0;
+ foreach my $sha (keys %$amend_code)
+ {
+ warn "$ME:$amend_file: unused entry: $sha\n";
+ $fail = 1;
+ }
+
+ exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-line-limit: 50
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/gnu-web-doc-update b/build-aux/gnu-web-doc-update
new file mode 100755
index 0000000..a804031
--- /dev/null
+++ b/build-aux/gnu-web-doc-update
@@ -0,0 +1,216 @@
+#!/bin/sh
+# Run this after each non-alpha release, to update the web documentation at
+# https://www.gnu.org/software/$pkg/manual/
+
+VERSION=2023-03-23.02; # UTC
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+ME=$(basename "$0")
+warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
+die() { warn "$*"; exit 1; }
+
+help()
+{
+ cat <<EOF
+Usage: $ME
+
+Run this script from top_srcdir (no arguments) after each non-alpha
+release, to update the web documentation at
+https://www.gnu.org/software/\$pkg/manual/
+
+This script assumes you're using git for revision control, and
+requires a .prev-version file as well as a Makefile, from which it
+extracts the version number and package name, respectively. Also, it
+assumes all documentation is in the doc/ sub-directory.
+
+Options:
+ -C, --builddir=DIR location of (configured) Makefile (default: .)
+ -n, --dry-run don't actually commit anything
+ -m, --mirror remove out of date files from document server
+ -u, --user the name of the CVS user on Savannah
+ --help print this help, then exit
+ --version print version number, then exit
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+ exit
+}
+
+version()
+{
+ year=$(echo "$VERSION" | sed 's/[^0-9].*//')
+ cat <<EOF
+$ME $VERSION
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+ exit
+}
+
+# find_tool ENVVAR NAMES...
+# -------------------------
+# Search for a required program. Use the value of ENVVAR, if set,
+# otherwise find the first of the NAMES that can be run (i.e.,
+# supports --version). If found, set ENVVAR to the program name,
+# die otherwise.
+#
+# FIXME: code duplication, see also bootstrap.
+find_tool ()
+{
+ find_tool_envvar=$1
+ shift
+ find_tool_names=$@
+ eval "find_tool_res=\$$find_tool_envvar"
+ if test x"$find_tool_res" = x; then
+ for i
+ do
+ if ($i --version </dev/null) >/dev/null 2>&1; then
+ find_tool_res=$i
+ break
+ fi
+ done
+ else
+ find_tool_error_prefix="\$$find_tool_envvar: "
+ fi
+ test x"$find_tool_res" != x \
+ || die "one of these is required: $find_tool_names"
+ ($find_tool_res --version </dev/null) >/dev/null 2>&1 \
+ || die "${find_tool_error_prefix}cannot run $find_tool_res --version"
+ eval "$find_tool_envvar=\$find_tool_res"
+ eval "export $find_tool_envvar"
+}
+
+## ------ ##
+## Main. ##
+## ------ ##
+
+# Requirements: everything required to bootstrap your package, plus
+# these.
+find_tool CVS cvs
+find_tool GIT git
+find_tool RSYNC rsync
+find_tool XARGS gxargs xargs
+
+builddir=.
+dryrun=
+rm_stale='echo'
+cvs_user="$USER"
+while test $# != 0
+do
+ # Handle --option=value by splitting apart and putting back on argv.
+ case $1 in
+ --*=*)
+ opt=$(echo "$1" | sed -e 's/=.*//')
+ val=$(echo "$1" | sed -e 's/[^=]*=//')
+ shift
+ set dummy "$opt" "$val" "$@"; shift
+ ;;
+ esac
+
+ case $1 in
+ --help|--version) ${1#--};;
+ -C|--builddir) shift; builddir=$1; shift ;;
+ -n|--dry-run) dryrun=echo; shift;;
+ -m|--mirror) rm_stale=''; shift;;
+ -u|--user) shift; cvs_user=$1; shift ;;
+ --*) die "unrecognized option: $1";;
+ *) break;;
+ esac
+done
+
+test $# = 0 \
+ || die "too many arguments"
+
+prev=.prev-version
+version=$(cat $prev) || die "no $prev file?"
+pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
+ || die "no Makefile?"
+tmp_branch=web-doc-$version-$$
+current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
+
+cleanup()
+{
+ __st=$?
+ $dryrun rm -rf "$tmp"
+ $GIT checkout "$current_branch"
+ $GIT submodule update --recursive
+ $GIT branch -d $tmp_branch
+ exit $__st
+}
+trap cleanup EXIT
+trap 'exit $?' HUP INT PIPE TERM
+
+# We must build using sources for which --version reports the
+# just-released version number, not some string like 7.6.18-20761.
+# That version string propagates into all documentation.
+set -e
+$GIT checkout -b $tmp_branch v$version
+$GIT submodule update --recursive
+./bootstrap
+srcdir=$(pwd)
+cd "$builddir"
+builddir=$(pwd)
+ ./config.status --recheck
+ ./config.status
+ make
+ make web-manual
+cd "$srcdir"
+set +e
+
+tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
+( cd $tmp \
+ && $CVS -d $cvs_user@cvs.savannah.gnu.org:/webcvs/$pkg co $pkg )
+$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
+
+(
+ cd $tmp/$pkg
+ test -d manual/CVS || $dryrun $CVS add -ko manual
+
+ cd $tmp/$pkg/manual
+
+ # Add all the files. This is simpler than trying to add only the
+ # new ones because of new directories
+ # First add non empty dirs individually
+ find . -name CVS -prune -o -type d \! -empty -print \
+ | $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko
+ # Now add all files
+ find . -name CVS -prune -o -type f -print \
+ | $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
+
+ # Report/Remove stale files
+ # excluding doc server specific files like CVS/* and .symlinks
+ if test -n "$rm_stale"; then
+ echo 'Consider the --mirror option if all of the manual is generated,' >&2
+ echo 'which will run `cvs remove` to remove stale files.' >&2
+ fi
+ { find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print
+ (cd "$builddir"/doc/manual/ && find . -type f -print | sed p)
+ } | sort | uniq -u \
+ | $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f
+
+ $dryrun $CVS ci -m $version
+)
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "VERSION="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gnupload b/build-aux/gnupload
new file mode 100755
index 0000000..3e8f102
--- /dev/null
+++ b/build-aux/gnupload
@@ -0,0 +1,480 @@
+#!/bin/sh
+# Sign files and upload them.
+
+scriptversion=2022-01-27.18; # UTC
+
+# Copyright (C) 2004-2023 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
+# The master copy of this file is maintained in the gnulib Git repository.
+# Please send bug reports and feature requests to bug-gnulib@gnu.org.
+
+set -e
+
+GPG=gpg
+# Choose the proper version of gpg, so as to avoid a
+# "gpg-agent is not available in this session" error
+# when gpg-agent is version 2 but gpg is still version 1.
+# FIXME-2020: remove, once all major distros ship gpg version 2 as /usr/bin/gpg
+gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
+case "$gpg_agent_version" in
+ 2.*)
+ gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
+ case "$gpg_version" in
+ 1.*)
+ if (type gpg2) >/dev/null 2>/dev/null; then
+ # gpg2 is present.
+ GPG=gpg2
+ else
+ # gpg2 is missing. Ubuntu users should install the package 'gnupg2'.
+ echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+GPG="${GPG} --batch --no-tty"
+conffile=.gnuploadrc
+to=
+dry_run=false
+replace=
+symlink_files=
+delete_files=
+delete_symlinks=
+collect_var=
+dbg=
+nl='
+'
+
+usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
+
+Sign all FILES, and process them at the destinations specified with --to.
+If CMD is not given, it defaults to uploading. See examples below.
+
+Commands:
+ --delete delete FILES from destination
+ --symlink create symbolic links
+ --rmsymlink remove symbolic links
+ -- treat the remaining arguments as files to upload
+
+Options:
+ --to DEST specify a destination DEST for FILES
+ (multiple --to options are allowed)
+ --user NAME sign with key NAME
+ --replace allow replacements of existing files
+ --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names
+ -n, --dry-run do nothing, show what would have been done
+ (including the constructed directive file)
+ --version output version information and exit
+ -h, --help print this help text and exit
+
+If --symlink-regex is given without EXPR, then the link target name
+is created by replacing the version information with '-latest', e.g.:
+ foo-1.3.4.tar.gz -> foo-latest.tar.gz
+
+Recognized destinations are:
+ alpha.gnu.org:DIRECTORY
+ savannah.gnu.org:DIRECTORY
+ savannah.nongnu.org:DIRECTORY
+ ftp.gnu.org:DIRECTORY
+ build directive files and upload files by FTP
+ download.gnu.org.ua:{alpha|ftp}/DIRECTORY
+ build directive files and upload files by SFTP
+ [user@]host:DIRECTORY upload files with scp
+
+Options and commands are applied in order. If the file $conffile exists
+in the current working directory, its contents are prepended to the
+actual command line options. Use this to keep your defaults. Comments
+(#) and empty lines in $conffile are allowed.
+
+<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
+gives some further background.
+
+Examples:
+1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
+
+2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
+ gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+3. Same as above, and also create symbolic links to foobar-latest.tar.*:
+ gnupload --to ftp.gnu.org:foobar \\
+ --symlink-regex \\
+ foobar-1.0.tar.gz foobar-1.0.tar.xz
+
+4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz
+ and likewise for the corresponding .sig file:
+ gnupload --to ftp.gnu.org:foobar \\
+ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
+ foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
+ or (equivalent):
+ gnupload --to ftp.gnu.org:foobar \\
+ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
+ --symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
+
+5. Upload foobar-0.9.90.tar.gz to two sites:
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ foobar-0.9.90.tar.gz
+
+6. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
+ (the -- terminates the list of files to delete):
+ gnupload --to alpha.gnu.org:foobar \\
+ --to sources.redhat.com:~ftp/pub/foobar \\
+ --delete oopsbar-0.9.91.tar.gz \\
+ -- foobar-0.9.91.tar.gz
+
+gnupload executes a program ncftpput to do the transfers; if you don't
+happen to have an ncftp package installed, the ncftpput-ftp script in
+the build-aux/ directory of the gnulib package
+(https://savannah.gnu.org/projects/gnulib) may serve as a replacement.
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+
+copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'`
+copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
+License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law."
+
+# Read local configuration file
+if test -r "$conffile"; then
+ echo "$0: Reading configuration file $conffile"
+ conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '`
+ eval set x "$conf \"\$@\""
+ shift
+fi
+
+while test -n "$1"; do
+ case $1 in
+ -*)
+ collect_var=
+ case $1 in
+ -h | --help)
+ echo "$usage"
+ exit $?
+ ;;
+ --to)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --to" 1>&2
+ exit 1
+ elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then
+ echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2
+ echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2
+ echo "$0: is used for direct ftp uploads, not with gnupload)." >&2
+ echo "$0: See --help and its examples if need be." >&2
+ exit 1
+ else
+ to="$to $2"
+ shift
+ fi
+ ;;
+ --user)
+ if test -z "$2"; then
+ echo "$0: Missing argument for --user" 1>&2
+ exit 1
+ else
+ GPG="$GPG --local-user $2"
+ shift
+ fi
+ ;;
+ --delete)
+ collect_var=delete_files
+ ;;
+ --replace)
+ replace="replace: true"
+ ;;
+ --rmsymlink)
+ collect_var=delete_symlinks
+ ;;
+ --symlink-regex=*)
+ symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
+ ;;
+ --symlink-regex)
+ symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
+ ;;
+ --symlink)
+ collect_var=symlink_files
+ ;;
+ -n | --dry-run)
+ dry_run=:
+ ;;
+ --version)
+ echo "gnupload $scriptversion"
+ echo "$copyright"
+ exit 0
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+ *)
+ if test -z "$collect_var"; then
+ break
+ else
+ eval "$collect_var=\"\$$collect_var $1\""
+ fi
+ ;;
+ esac
+ shift
+done
+
+dprint()
+{
+ echo "Running $* ..."
+}
+
+if $dry_run; then
+ dbg=dprint
+fi
+
+if test -z "$to"; then
+ echo "$0: Missing destination sites" >&2
+ exit 1
+fi
+
+if test -n "$symlink_files"; then
+ x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'`
+ if test -n "$x"; then
+ echo "$0: Odd number of symlink arguments" >&2
+ exit 1
+ fi
+fi
+
+if test $# = 0; then
+ if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
+ echo "$0: No file to upload" 1>&2
+ exit 1
+ fi
+else
+ # Make sure all files exist. We don't want to ask
+ # for the passphrase if the script will fail.
+ for file
+ do
+ if test ! -f $file; then
+ echo "$0: Cannot find '$file'" 1>&2
+ exit 1
+ elif test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ if test -z "$linkname"; then
+ echo "$0: symlink expression produces empty results" >&2
+ exit 1
+ elif test "$linkname" = $file; then
+ echo "$0: symlink expression does not alter file name" >&2
+ exit 1
+ fi
+ fi
+ done
+fi
+
+# Make sure passphrase is not exported in the environment.
+unset passphrase
+unset passphrase_fd_0
+GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg}
+
+# Reset PATH to be sure that echo is a built-in. We will later use
+# 'echo $passphrase' to output the passphrase, so it is important that
+# it is a built-in (third-party programs tend to appear in 'ps'
+# listings with their arguments...).
+# Remember this script runs with 'set -e', so if echo is not built-in
+# it will exit now.
+if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else
+ PATH=/empty echo -n "Enter GPG passphrase: "
+ stty -echo
+ read -r passphrase
+ stty echo
+ echo
+ passphrase_fd_0="--passphrase-fd 0"
+fi
+
+if test $# -ne 0; then
+ for file
+ do
+ echo "Signing $file ..."
+ rm -f $file.sig
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file
+ done
+fi
+
+
+# mkdirective DESTDIR BASE FILE STMT
+# Arguments: See upload, below
+mkdirective ()
+{
+ stmt="$4"
+ if test -n "$3"; then
+ stmt="
+filename: $3$stmt"
+ fi
+
+ cat >${2}.directive<<EOF
+version: 1.2
+directory: $1
+comment: gnupload v. $scriptversion$stmt
+EOF
+ if $dry_run; then
+ echo "File ${2}.directive:"
+ cat ${2}.directive
+ echo "File ${2}.directive:" | sed 's/./-/g'
+ fi
+}
+
+mksymlink ()
+{
+ while test $# -ne 0
+ do
+ echo "symlink: $1 $2"
+ shift
+ shift
+ done
+}
+
+# upload DEST DESTDIR BASE FILE STMT FILES
+# Arguments:
+# DEST Destination site;
+# DESTDIR Destination directory;
+# BASE Base name for the directive file;
+# FILE Name of the file to distribute (may be empty);
+# STMT Additional statements for the directive file;
+# FILES List of files to upload.
+upload ()
+{
+ dest=$1
+ destdir=$2
+ base=$3
+ file=$4
+ stmt=$5
+ files=$6
+
+ rm -f $base.directive $base.directive.asc
+ case $dest in
+ alpha.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
+ ;;
+ ftp.gnu.org:*)
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
+ ;;
+ savannah.gnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
+ ;;
+ savannah.nongnu.org:*)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
+ ;;
+ download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
+ destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
+ destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
+ mkdirective "$destdir_p1" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ for f in $files $base.directive.asc
+ do
+ echo put $f
+ done | $dbg sftp -b - download.gnu.org.ua:/incoming/$destdir_topdir
+ ;;
+ /*)
+ dest_host=`echo "$dest" | sed 's,:.*,,'`
+ mkdirective "$destdir" "$base" "$file" "$stmt"
+ echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
+ $dbg cp $files $base.directive.asc $dest_host
+ ;;
+ *)
+ if test -z "$files"; then
+ echo "$0: warning: standalone directives not applicable for $dest" >&2
+ fi
+ $dbg scp $files $dest
+ ;;
+ esac
+ rm -f $base.directive $base.directive.asc
+}
+
+#####
+# Process any standalone directives
+stmt=
+if test -n "$symlink_files"; then
+ stmt="$stmt
+`mksymlink $symlink_files`"
+fi
+
+for file in $delete_files
+do
+ stmt="$stmt
+archive: $file"
+done
+
+for file in $delete_symlinks
+do
+ stmt="$stmt
+rmsymlink: $file"
+done
+
+if test -n "$stmt"; then
+ for dest in $to
+ do
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
+ done
+fi
+
+# Process actual uploads
+for dest in $to
+do
+ for file
+ do
+ echo "Uploading $file to $dest ..."
+ stmt=
+ #
+ # allowing file replacement is all or nothing.
+ if test -n "$replace"; then stmt="$stmt
+$replace"
+ fi
+ #
+ files="$file $file.sig"
+ destdir=`echo $dest | sed 's/[^:]*://'`
+ if test -n "$symlink_expr"; then
+ linkname=`echo $file | sed "$symlink_expr"`
+ stmt="$stmt
+symlink: $file $linkname
+symlink: $file.sig $linkname.sig"
+ fi
+ upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
+ done
+done
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755
index 0000000..ec298b5
--- /dev/null
+++ b/build-aux/install-sh
@@ -0,0 +1,541 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2020-11-14.01; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab=' '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+# Create dirs (including intermediate dirs) using mode 755.
+# This is like GNU 'install' as of coreutils 8.32 (2020).
+mkdir_umask=22
+
+backupsuffix=
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve data modification time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -p pass -p to $cpprog.
+ -s $stripprog installed files.
+ -S SUFFIX attempt to back up existing files, with suffix SUFFIX.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+
+By default, rm is invoked with -f; when overridden with RMPROG,
+it's up to you to specify -f if you want it.
+
+If -S is not specified, no backups are attempted.
+
+Email bug reports to bug-automake@gnu.org.
+Automake home page: https://www.gnu.org/software/automake/
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -p) cpprog="$cpprog -p";;
+
+ -s) stripcmd=$stripprog;;
+
+ -S) backupsuffix="$2"
+ shift;;
+
+ -t)
+ is_target_a_directory=always
+ dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) is_target_a_directory=never;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+ if test -n "$dst_arg"; then
+ echo "$0: target directory not allowed when installing a directory." >&2
+ exit 1
+ fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from $@.
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ if test $# -gt 1 || test "$is_target_a_directory" = always; then
+ if test ! -d "$dst_arg"; then
+ echo "$0: $dst_arg: Is not a directory." >&2
+ exit 1
+ fi
+ fi
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ # Don't chown directories that already exist.
+ if test $dstdir_status = 0; then
+ chowncmd=""
+ fi
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename.
+ if test -d "$dst"; then
+ if test "$is_target_a_directory" = never; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dstbase=`basename "$src"`
+ case $dst in
+ */) dst=$dst$dstbase;;
+ *) dst=$dst/$dstbase;;
+ esac
+ dstdir_status=0
+ else
+ dstdir=`dirname "$dst"`
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ case $dstdir in
+ */) dstdirslash=$dstdir;;
+ *) dstdirslash=$dstdir/;;
+ esac
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ # The $RANDOM variable is not portable (e.g., dash). Use it
+ # here however when possible just to lower collision chance.
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+ trap '
+ ret=$?
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
+ exit $ret
+ ' 0
+
+ # Because "mkdir -p" follows existing symlinks and we likely work
+ # directly in world-writeable /tmp, make sure that the '$tmpdir'
+ # directory is successfully created first before we actually test
+ # 'mkdir -p'.
+ if (umask $mkdir_umask &&
+ $mkdirprog $mkdir_mode "$tmpdir" &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ test_tmpdir="$tmpdir/a"
+ ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+ fi
+ trap '' 0;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ oIFS=$IFS
+ IFS=/
+ set -f
+ set fnord $dstdir
+ shift
+ set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=${dstdirslash}_inst.$$_
+ rmtmp=${dstdirslash}_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask &&
+ { test -z "$stripcmd" || {
+ # Create $dsttmp read-write so that cp doesn't create it read-only,
+ # which would cause strip to fail.
+ if test -z "$doit"; then
+ : >"$dsttmp" # No need to fork-exec 'touch'.
+ else
+ $doit touch "$dsttmp"
+ fi
+ }
+ } &&
+ $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+ set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ set +f &&
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # If $backupsuffix is set, and the file being installed
+ # already exists, attempt a backup. Don't worry if it fails,
+ # e.g., if mv doesn't support -f.
+ if test -n "$backupsuffix" && test -f "$dst"; then
+ $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
+ fi
+
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
new file mode 100644
index 0000000..49fcad1
--- /dev/null
+++ b/build-aux/ltmain.sh
@@ -0,0 +1,11429 @@
+#! /usr/bin/env sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+## by inline-source v2019-02-19.15
+
+# libtool (GNU libtool) 2.4.7
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.7
+package_revision=2.4.7
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2004-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
+
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+ eval "if test set = \"\${$_G_var+set}\"; then
+ save_$_G_var=\$$_G_var
+ $_G_var=C
+ export $_G_var
+ _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+ _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+ fi"
+done
+# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
+# in case the environment reset is needed later and the $save_* variant is not
+# defined (see the code above).
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# func_unset VAR
+# --------------
+# Portably unset VAR.
+# In some shells, an 'unset VAR' statement leaves a non-zero return
+# status if VAR is already unset, which might be problematic if the
+# statement is used at the end of a function (thus poisoning its return
+# value) or when 'set -e' is active (causing even a spurious abort of
+# the script in this case).
+func_unset ()
+{
+ { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
+}
+
+
+# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
+func_unset CDPATH
+
+# Make sure ${,E,F}GREP behave sanely.
+func_unset GREP_OPTIONS
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+ _G_progs_list=$1
+ _G_check_func=$2
+ _G_PATH=${3-"$PATH"}
+
+ _G_path_prog_max=0
+ _G_path_prog_found=false
+ _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+ for _G_dir in $_G_PATH; do
+ IFS=$_G_save_IFS
+ test -z "$_G_dir" && _G_dir=.
+ for _G_prog_name in $_G_progs_list; do
+ for _exeext in '' .EXE; do
+ _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+ func_executable_p "$_G_path_prog" || continue
+ case `"$_G_path_prog" --version 2>&1` in
+ *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+ *) $_G_check_func $_G_path_prog
+ func_path_progs_result=$func_check_prog_result
+ ;;
+ esac
+ $_G_path_prog_found && break 3
+ done
+ done
+ done
+ IFS=$_G_save_IFS
+ test -z "$func_path_progs_result" && {
+ echo "no acceptable sed could be found in \$PATH" >&2
+ exit 1
+ }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+ _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for _G_i in 1 2 3 4 5 6 7; do
+ _G_sed_script=$_G_sed_script$nl$_G_sed_script
+ done
+ echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+ _G_sed_script=
+
+ func_check_prog_sed ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo '' >> conftest.nl
+ "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
+ rm -f conftest.sed
+ SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+ func_check_prog_grep ()
+ {
+ _G_path_prog=$1
+
+ _G_count=0
+ _G_path_prog_max=0
+ printf 0123456789 >conftest.in
+ while :
+ do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo 'GREP' >> conftest.nl
+ "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+ diff conftest.out conftest.nl >/dev/null 2>&1 || break
+ _G_count=`expr $_G_count + 1`
+ if test "$_G_count" -gt "$_G_path_prog_max"; then
+ # Best one so far, save it but keep looking for a better one
+ func_check_prog_result=$_G_path_prog
+ _G_path_prog_max=$_G_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test 10 -lt "$_G_count" && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out
+ }
+
+ func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
+ GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables. These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes. A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same. If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion. Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+ s/$_G_bs4/&\\
+/g
+ s/^$_G_bs2$_G_dollar/$_G_bs&/
+ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+ s/\n//g"
+
+# require_check_ifs_backslash
+# ---------------------------
+# Check if we can use backslash as IFS='\' separator, and set
+# $check_ifs_backshlash_broken to ':' or 'false'.
+require_check_ifs_backslash=func_require_check_ifs_backslash
+func_require_check_ifs_backslash ()
+{
+ _G_save_IFS=$IFS
+ IFS='\'
+ _G_check_ifs_backshlash='a\\b'
+ for _G_i in $_G_check_ifs_backshlash
+ do
+ case $_G_i in
+ a)
+ check_ifs_backshlash_broken=false
+ ;;
+ '')
+ break
+ ;;
+ *)
+ check_ifs_backshlash_broken=:
+ break
+ ;;
+ esac
+ done
+ IFS=$_G_save_IFS
+ require_check_ifs_backslash=:
+}
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+# exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+ [\\/]*|[A-Za-z]:\\*) ;;
+ *[\\/]*)
+ progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+ progdir=`cd "$progdir" && pwd`
+ progpath=$progdir/$progname
+ ;;
+ *)
+ _G_IFS=$IFS
+ IFS=${PATH_SEPARATOR-:}
+ for progdir in $PATH; do
+ IFS=$_G_IFS
+ test -x "$progdir/$progname" && break
+ done
+ IFS=$_G_IFS
+ test -n "$progdir" || progdir=`pwd`
+ progpath=$progdir/$progname
+ ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available. Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'. Set
+# 'warning_func' to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+ $debug_cmd
+
+ test -t 1 && {
+ # COLORTERM and USE_ANSI_COLORS environment variables take
+ # precedence, because most terminfo databases neglect to describe
+ # whether color sequences are supported.
+ test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+ if test 1 = "$USE_ANSI_COLORS"; then
+ # Standard ANSI escape sequences
+ tc_reset=''
+ tc_bold=''; tc_standout=''
+ tc_red=''; tc_green=''
+ tc_blue=''; tc_cyan=''
+ else
+ # Otherwise trust the terminfo database after all.
+ test -n "`tput sgr0 2>/dev/null`" && {
+ tc_reset=`tput sgr0`
+ test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+ tc_standout=$tc_bold
+ test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+ test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+ test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+ test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+ test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+ }
+ fi
+ }
+
+ require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+ # We should try to minimise forks, especially on Windows where they are
+ # unreasonably slow, so skip the feature probes when bash or zsh are
+ # being used:
+ if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+ : ${_G_HAVE_ARITH_OP="yes"}
+ : ${_G_HAVE_XSI_OPS="yes"}
+ # The += operator was introduced in bash 3.1
+ case $BASH_VERSION in
+ [12].* | 3.0 | 3.0*) ;;
+ *)
+ : ${_G_HAVE_PLUSEQ_OP="yes"}
+ ;;
+ esac
+ fi
+
+ # _G_HAVE_PLUSEQ_OP
+ # Can be empty, in which case the shell is probed, "yes" if += is
+ # useable or anything else if it does not work.
+ test -z "$_G_HAVE_PLUSEQ_OP" \
+ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+ && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_append ()
+ {
+ $debug_cmd
+
+ eval "$1+=\$2"
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_append ()
+ {
+ $debug_cmd
+
+ eval "$1=\$$1\$2"
+ }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+ eval 'func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_arg pretty "$2"
+ eval "$1+=\\ \$func_quote_arg_result"
+ }'
+else
+ func_append_quoted ()
+ {
+ $debug_cmd
+
+ func_quote_arg pretty "$2"
+ eval "$1=\$$1\\ \$func_quote_arg_result"
+ }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE. For example:
+#
+# func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+ $debug_cmd
+
+ eval _G_current_value='`$ECHO $'$1'`'
+ _G_delim=`expr "$2" : '\(.\)'`
+
+ case $_G_delim$_G_current_value$_G_delim in
+ *"$2$_G_delim"*) ;;
+ *) func_append "$@" ;;
+ esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+ test -z "$_G_HAVE_ARITH_OP" \
+ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+ && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+ eval 'func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=$(( $* ))
+ }'
+else
+ func_arith ()
+ {
+ $debug_cmd
+
+ func_arith_result=`expr "$@"`
+ }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ # If this shell supports suffix pattern removal, then use it to avoid
+ # forking. Hide the definitions single quotes in case the shell chokes
+ # on unsupported syntax...
+ _b='func_basename_result=${1##*/}'
+ _d='case $1 in
+ */*) func_dirname_result=${1%/*}$2 ;;
+ * ) func_dirname_result=$3 ;;
+ esac'
+
+else
+ # ...otherwise fall back to using sed.
+ _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+ _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
+ if test "X$func_dirname_result" = "X$1"; then
+ func_dirname_result=$3
+ else
+ func_append func_dirname_result "$2"
+ fi'
+fi
+
+eval 'func_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE. If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+ $debug_cmd
+
+ '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+# dirname: Compute the dirname of FILE. If nonempty,
+# add APPEND to the result, otherwise set result
+# to NONDIR_REPLACEMENT.
+# value returned in "$func_dirname_result"
+# basename: Compute filename of FILE.
+# value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+ $debug_cmd
+
+ '"$_b"'
+ '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ _G_infix=$1; shift
+ _G_indent=$_G_infix
+ _G_prefix="$progname: $_G_infix: "
+ _G_message=$*
+
+ # Strip color escape sequences before counting printable length
+ for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+ do
+ test -n "$_G_tc" && {
+ _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+ _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+ }
+ done
+ _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
+
+ func_echo_infix_1_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_infix_1_IFS
+ $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+ _G_prefix=$_G_indent
+ done
+ IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+ $debug_cmd
+
+ func_error "$*"
+ exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+ $debug_cmd
+
+ $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+ test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=${#1}
+ }'
+else
+ func_len ()
+ {
+ $debug_cmd
+
+ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+ }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+ $debug_cmd
+
+ _G_directory_path=$1
+ _G_dir_list=
+
+ if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+ # Protect directory names starting with '-'
+ case $_G_directory_path in
+ -*) _G_directory_path=./$_G_directory_path ;;
+ esac
+
+ # While some portion of DIR does not yet exist...
+ while test ! -d "$_G_directory_path"; do
+ # ...make a list in topmost first order. Use a colon delimited
+ # list incase some portion of path contains whitespace.
+ _G_dir_list=$_G_directory_path:$_G_dir_list
+
+ # If the last portion added has no slash in it, the list is done
+ case $_G_directory_path in */*) ;; *) break ;; esac
+
+ # ...otherwise throw away the child directory and loop
+ _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+ done
+ _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+ func_mkdir_p_IFS=$IFS; IFS=:
+ for _G_dir in $_G_dir_list; do
+ IFS=$func_mkdir_p_IFS
+ # mkdir can fail with a 'File exist' error if two processes
+ # try to create one of the directories concurrently. Don't
+ # stop in that case!
+ $MKDIR "$_G_dir" 2>/dev/null || :
+ done
+ IFS=$func_mkdir_p_IFS
+
+ # Bail out if we (or some other process) failed to create a directory.
+ test -d "$_G_directory_path" || \
+ func_fatal_error "Failed to create '$1'"
+ fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible. If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+ $debug_cmd
+
+ _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+ if test : = "$opt_dry_run"; then
+ # Return a directory name, but don't create it in dry-run mode
+ _G_tmpdir=$_G_template-$$
+ else
+
+ # If mktemp works, use that first and foremost
+ _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+ if test ! -d "$_G_tmpdir"; then
+ # Failing that, at least try and use $RANDOM to avoid a race
+ _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+ func_mktempdir_umask=`umask`
+ umask 0077
+ $MKDIR "$_G_tmpdir"
+ umask $func_mktempdir_umask
+ fi
+
+ # If we're not in dry-run mode, bomb out on failure
+ test -d "$_G_tmpdir" || \
+ func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+ fi
+
+ $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+ $debug_cmd
+
+ # These SED scripts presuppose an absolute path with a trailing slash.
+ _G_pathcar='s|^/\([^/]*\).*$|\1|'
+ _G_pathcdr='s|^/[^/]*||'
+ _G_removedotparts=':dotsl
+ s|/\./|/|g
+ t dotsl
+ s|/\.$|/|'
+ _G_collapseslashes='s|/\{1,\}|/|g'
+ _G_finalslash='s|/*$|/|'
+
+ # Start from root dir and reassemble the path.
+ func_normal_abspath_result=
+ func_normal_abspath_tpath=$1
+ func_normal_abspath_altnamespace=
+ case $func_normal_abspath_tpath in
+ "")
+ # Empty path, that just means $cwd.
+ func_stripname '' '/' "`pwd`"
+ func_normal_abspath_result=$func_stripname_result
+ return
+ ;;
+ # The next three entries are used to spot a run of precisely
+ # two leading slashes without using negated character classes;
+ # we take advantage of case's first-match behaviour.
+ ///*)
+ # Unusual form of absolute path, do nothing.
+ ;;
+ //*)
+ # Not necessarily an ordinary path; POSIX reserves leading '//'
+ # and for example Cygwin uses it to access remote file shares
+ # over CIFS/SMB, so we conserve a leading double slash if found.
+ func_normal_abspath_altnamespace=/
+ ;;
+ /*)
+ # Absolute path, do nothing.
+ ;;
+ *)
+ # Relative path, prepend $cwd.
+ func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+ ;;
+ esac
+
+ # Cancel out all the simple stuff to save iterations. We also want
+ # the path to end with a slash for ease of parsing, so make sure
+ # there is one (and only one) here.
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+ while :; do
+ # Processed it all yet?
+ if test / = "$func_normal_abspath_tpath"; then
+ # If we ascended to the root using ".." the result may be empty now.
+ if test -z "$func_normal_abspath_result"; then
+ func_normal_abspath_result=/
+ fi
+ break
+ fi
+ func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcar"`
+ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+ -e "$_G_pathcdr"`
+ # Figure out what to do with it
+ case $func_normal_abspath_tcomponent in
+ "")
+ # Trailing empty path component, ignore it.
+ ;;
+ ..)
+ # Parent dir; strip last assembled component from result.
+ func_dirname "$func_normal_abspath_result"
+ func_normal_abspath_result=$func_dirname_result
+ ;;
+ *)
+ # Actual path component, append it.
+ func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+ ;;
+ esac
+ done
+ # Restore leading double-slash if one was found on entry.
+ func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+ $debug_cmd
+
+ $opt_quiet || func_echo ${1+"$@"}
+
+ # A bug in bash halts the script if the last line of a function
+ # fails when set -e is in force, so we need another command to
+ # work around that:
+ :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+ $debug_cmd
+
+ func_relative_path_result=
+ func_normal_abspath "$1"
+ func_relative_path_tlibdir=$func_normal_abspath_result
+ func_normal_abspath "$2"
+ func_relative_path_tbindir=$func_normal_abspath_result
+
+ # Ascend the tree starting from libdir
+ while :; do
+ # check if we have found a prefix of bindir
+ case $func_relative_path_tbindir in
+ $func_relative_path_tlibdir)
+ # found an exact match
+ func_relative_path_tcancelled=
+ break
+ ;;
+ $func_relative_path_tlibdir*)
+ # found a matching prefix
+ func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+ func_relative_path_tcancelled=$func_stripname_result
+ if test -z "$func_relative_path_result"; then
+ func_relative_path_result=.
+ fi
+ break
+ ;;
+ *)
+ func_dirname $func_relative_path_tlibdir
+ func_relative_path_tlibdir=$func_dirname_result
+ if test -z "$func_relative_path_tlibdir"; then
+ # Have to descend all the way to the root!
+ func_relative_path_result=../$func_relative_path_result
+ func_relative_path_tcancelled=$func_relative_path_tbindir
+ break
+ fi
+ func_relative_path_result=../$func_relative_path_result
+ ;;
+ esac
+ done
+
+ # Now calculate path; take care to avoid doubling-up slashes.
+ func_stripname '' '/' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ func_stripname '/' '/' "$func_relative_path_tcancelled"
+ if test -n "$func_stripname_result"; then
+ func_append func_relative_path_result "/$func_stripname_result"
+ fi
+
+ # Normalisation. If bindir is libdir, return '.' else relative path.
+ if test -n "$func_relative_path_result"; then
+ func_stripname './' '' "$func_relative_path_result"
+ func_relative_path_result=$func_stripname_result
+ fi
+
+ test -n "$func_relative_path_result" || func_relative_path_result=.
+
+ :
+}
+
+
+# func_quote_portable EVAL ARG
+# ----------------------------
+# Internal function to portably implement func_quote_arg. Note that we still
+# keep attention to performance here so we as much as possible try to avoid
+# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
+func_quote_portable ()
+{
+ $debug_cmd
+
+ $require_check_ifs_backslash
+
+ func_quote_portable_result=$2
+
+ # one-time-loop (easy break)
+ while true
+ do
+ if $1; then
+ func_quote_portable_result=`$ECHO "$2" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
+ break
+ fi
+
+ # Quote for eval.
+ case $func_quote_portable_result in
+ *[\\\`\"\$]*)
+ # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
+ # contains the shell wildcard characters.
+ case $check_ifs_backshlash_broken$func_quote_portable_result in
+ :*|*[\[\*\?]*)
+ func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
+ | $SED "$sed_quote_subst"`
+ break
+ ;;
+ esac
+
+ func_quote_portable_old_IFS=$IFS
+ for _G_char in '\' '`' '"' '$'
+ do
+ # STATE($1) PREV($2) SEPARATOR($3)
+ set start "" ""
+ func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
+ IFS=$_G_char
+ for _G_part in $func_quote_portable_result
+ do
+ case $1 in
+ quote)
+ func_append func_quote_portable_result "$3$2"
+ set quote "$_G_part" "\\$_G_char"
+ ;;
+ start)
+ set first "" ""
+ func_quote_portable_result=
+ ;;
+ first)
+ set quote "$_G_part" ""
+ ;;
+ esac
+ done
+ done
+ IFS=$func_quote_portable_old_IFS
+ ;;
+ *) ;;
+ esac
+ break
+ done
+
+ func_quote_portable_unquoted_result=$func_quote_portable_result
+ case $func_quote_portable_result in
+ # double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # many bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_portable_result=\"$func_quote_portable_result\"
+ ;;
+ esac
+}
+
+
+# func_quotefast_eval ARG
+# -----------------------
+# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
+# but optimized for speed. Result is stored in $func_quotefast_eval.
+if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
+ printf -v _GL_test_printf_tilde %q '~'
+ if test '\~' = "$_GL_test_printf_tilde"; then
+ func_quotefast_eval ()
+ {
+ printf -v func_quotefast_eval_result %q "$1"
+ }
+ else
+ # Broken older Bash implementations. Make those faster too if possible.
+ func_quotefast_eval ()
+ {
+ case $1 in
+ '~'*)
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ ;;
+ *)
+ printf -v func_quotefast_eval_result %q "$1"
+ ;;
+ esac
+ }
+ fi
+else
+ func_quotefast_eval ()
+ {
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ }
+fi
+
+
+# func_quote_arg MODEs ARG
+# ------------------------
+# Quote one ARG to be evaled later. MODEs argument may contain zero or more
+# specifiers listed below separated by ',' character. This function returns two
+# values:
+# i) func_quote_arg_result
+# double-quoted (when needed), suitable for a subsequent eval
+# ii) func_quote_arg_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified. Available only if 'unquoted' is specified.
+#
+# Available modes:
+# ----------------
+# 'eval' (default)
+# - escape shell special characters
+# 'expand'
+# - the same as 'eval'; but do not quote variable references
+# 'pretty'
+# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
+# be used later in func_quote to get output like: 'echo "a b"' instead
+# of 'echo a\ b'. This is slower than default on some shells.
+# 'unquoted'
+# - produce also $func_quote_arg_unquoted_result which does not contain
+# wrapping double-quotes.
+#
+# Examples for 'func_quote_arg pretty,unquoted string':
+#
+# string | *_result | *_unquoted_result
+# ------------+-----------------------+-------------------
+# " | \" | \"
+# a b | "a b" | a b
+# "a b" | "\"a b\"" | \"a b\"
+# * | "*" | *
+# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
+#
+# Examples for 'func_quote_arg pretty,unquoted,expand string':
+#
+# string | *_result | *_unquoted_result
+# --------------+---------------------+--------------------
+# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
+func_quote_arg ()
+{
+ _G_quote_expand=false
+ case ,$1, in
+ *,expand,*)
+ _G_quote_expand=:
+ ;;
+ esac
+
+ case ,$1, in
+ *,pretty,*|*,expand,*|*,unquoted,*)
+ func_quote_portable $_G_quote_expand "$2"
+ func_quote_arg_result=$func_quote_portable_result
+ func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
+ ;;
+ *)
+ # Faster quote-for-eval for some shells.
+ func_quotefast_eval "$2"
+ func_quote_arg_result=$func_quotefast_eval_result
+ ;;
+ esac
+}
+
+
+# func_quote MODEs ARGs...
+# ------------------------
+# Quote all ARGs to be evaled later and join them into single command. See
+# func_quote_arg's description for more info.
+func_quote ()
+{
+ $debug_cmd
+ _G_func_quote_mode=$1 ; shift
+ func_quote_result=
+ while test 0 -lt $#; do
+ func_quote_arg "$_G_func_quote_mode" "$1"
+ if test -n "$func_quote_result"; then
+ func_append func_quote_result " $func_quote_arg_result"
+ else
+ func_append func_quote_result "$func_quote_arg_result"
+ fi
+ shift
+ done
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_stripname ()
+ {
+ $debug_cmd
+
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary variable first.
+ func_stripname_result=$3
+ func_stripname_result=${func_stripname_result#"$1"}
+ func_stripname_result=${func_stripname_result%"$2"}
+ }'
+else
+ func_stripname ()
+ {
+ $debug_cmd
+
+ case $2 in
+ .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+ *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+ esac
+ }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ func_quote_arg pretty,expand "$_G_cmd"
+ eval "func_notquiet $func_quote_arg_result"
+
+ $opt_dry_run || {
+ eval "$_G_cmd"
+ _G_status=$?
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
+# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it. Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+ $debug_cmd
+
+ _G_cmd=$1
+ _G_fail_exp=${2-':'}
+
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$_G_cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+
+ $opt_dry_run || {
+ eval "$_G_user_locale
+ $_G_cmd"
+ _G_status=$?
+ eval "$_G_safe_locale"
+ if test 0 -ne "$_G_status"; then
+ eval "(exit $_G_status); $_G_fail_exp"
+ fi
+ }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result. All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+ $debug_cmd
+
+ case $1 in
+ [0-9]* | *[!a-zA-Z0-9_]*)
+ func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+ ;;
+ * )
+ func_tr_sh_result=$1
+ ;;
+ esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+ $debug_cmd
+
+ $opt_verbose && func_echo "$*"
+
+ :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+ $debug_cmd
+
+ $require_term_colors
+
+ func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+ $debug_cmd
+
+ # CATEGORY must be in the warning_categories list!
+ case " $warning_categories " in
+ *" $1 "*) ;;
+ *) func_internal_error "invalid warning category '$1'" ;;
+ esac
+
+ _G_category=$1
+ shift
+
+ case " $opt_warning_types " in
+ *" $_G_category "*) $warning_func ${1+"$@"} ;;
+ esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+ $debug_cmd
+
+ printf '%s\n%s\n' "$1" "$2" \
+ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false. Use it like this:
+#
+# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+ $debug_cmd
+
+ test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2010-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
+
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
+
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+# #!/bin/sh
+# . relative/path/to/funclib.sh
+# . relative/path/to/options-parser
+# scriptversion=1.0
+# func_options ${1+"$@"}
+# eval set dummy "$func_options_result"; shift
+# ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# Copyright'.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug in processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'. Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+ --debug enable verbose shell tracing
+ -W, --warnings=CATEGORY
+ report the warnings falling in CATEGORY [all]
+ -v, --verbose verbosely report processing
+ --version print version information and exit
+ -h, --help print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+ 'all' show all warnings
+ 'none' turn off all the warnings
+ 'error' warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# in the main code. A hook is just a list of function names that can be
+# run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+ $debug_cmd
+
+ func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not accept hook functions." ;;
+ esac
+
+ eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of hook functions to be called by
+# FUNC_NAME.
+func_remove_hook ()
+{
+ $debug_cmd
+
+ eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_propagate_result FUNC_NAME_A FUNC_NAME_B
+# ---------------------------------------------
+# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
+# *_result variable of FUNC_NAME_B.
+func_propagate_result ()
+{
+ $debug_cmd
+
+ func_propagate_result_result=:
+ if eval "test \"\${${1}_result+set}\" = set"
+ then
+ eval "${2}_result=\$${1}_result"
+ else
+ func_propagate_result_result=false
+ fi
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It's assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+ $debug_cmd
+
+ case " $hookable_fns " in
+ *" $1 "*) ;;
+ *) func_fatal_error "'$1' does not support hook functions." ;;
+ esac
+
+ eval _G_hook_fns=\$$1_hooks; shift
+
+ for _G_hook in $_G_hook_fns; do
+ func_unset "${_G_hook}_result"
+ eval $_G_hook '${1+"$@"}'
+ func_propagate_result $_G_hook func_run_hooks
+ if $func_propagate_result_result; then
+ eval set dummy "$func_run_hooks_result"; shift
+ fi
+ done
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list from your hook function. You may remove
+# or edit any options that you action, and then pass back the remaining
+# unprocessed options in '<hooked_function_name>_result', escaped
+# suitably for 'eval'.
+#
+# The '<hooked_function_name>_result' variable is automatically unset
+# before your hook gets called; for best performance, only set the
+# *_result variable when necessary (i.e. don't call the 'func_quote'
+# function unnecessarily because it can be an expensive operation on some
+# machines).
+#
+# Like this:
+#
+# my_options_prep ()
+# {
+# $debug_cmd
+#
+# # Extend the existing usage message.
+# usage_message=$usage_message'
+# -s, --silent don'\''t print informational messages
+# '
+# # No change in '$@' (ignored completely by this hook). Leave
+# # my_options_prep_result variable intact.
+# }
+# func_add_hook func_options_prep my_options_prep
+#
+#
+# my_silent_option ()
+# {
+# $debug_cmd
+#
+# args_changed=false
+#
+# # Note that, for efficiency, we parse as many options as we can
+# # recognise in a loop before passing the remainder back to the
+# # caller on the first unrecognised argument we encounter.
+# while test $# -gt 0; do
+# opt=$1; shift
+# case $opt in
+# --silent|-s) opt_silent=:
+# args_changed=:
+# ;;
+# # Separate non-argument short options:
+# -s*) func_split_short_opt "$_G_opt"
+# set dummy "$func_split_short_opt_name" \
+# "-$func_split_short_opt_arg" ${1+"$@"}
+# shift
+# args_changed=:
+# ;;
+# *) # Make sure the first unrecognised option "$_G_opt"
+# # is added back to "$@" in case we need it later,
+# # if $args_changed was set to 'true'.
+# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+# esac
+# done
+#
+# # Only call 'func_quote' here if we processed at least one argument.
+# if $args_changed; then
+# func_quote eval ${1+"$@"}
+# my_silent_option_result=$func_quote_result
+# fi
+# }
+# func_add_hook func_parse_options my_silent_option
+#
+#
+# my_option_validation ()
+# {
+# $debug_cmd
+#
+# $opt_silent && $opt_verbose && func_fatal_help "\
+# '--silent' and '--verbose' options are mutually exclusive."
+# }
+# func_add_hook func_validate_options my_option_validation
+#
+# You'll also need to manually amend $usage_message to reflect the extra
+# options you parse. It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options_finish [ARG]...
+# ----------------------------
+# Finishing the option parse loop (call 'func_options' hooks ATM).
+func_options_finish ()
+{
+ $debug_cmd
+
+ func_run_hooks func_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_finish
+}
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+ $debug_cmd
+
+ _G_options_quoted=false
+
+ for my_func in options_prep parse_options validate_options options_finish
+ do
+ func_unset func_${my_func}_result
+ func_unset func_run_hooks_result
+ eval func_$my_func '${1+"$@"}'
+ func_propagate_result func_$my_func func_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_options_result"; shift
+ _G_options_quoted=:
+ fi
+ done
+
+ $_G_options_quoted || {
+ # As we (func_options) are top-level options-parser function and
+ # nobody quoted "$@" for us yet, we need to do it explicitly for
+ # caller.
+ func_quote eval ${1+"$@"}
+ func_options_result=$func_quote_result
+ }
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters. If a hook function modifies that list, and
+# needs to propagate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+ $debug_cmd
+
+ # Option defaults:
+ opt_verbose=false
+ opt_warning_types=
+
+ func_run_hooks func_options_prep ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_prep
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+ $debug_cmd
+
+ _G_parse_options_requote=false
+ # this just eases exit handling
+ while test $# -gt 0; do
+ # Defer to hook functions for initial option parsing, so they
+ # get priority in the event of reusing an option name.
+ func_run_hooks func_parse_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_parse_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_parse_options_result"; shift
+ # Even though we may have changed "$@", we passed the "$@" array
+ # down into the hook and it quoted it for us (because we are in
+ # this if-branch). No need to quote it again.
+ _G_parse_options_requote=false
+ fi
+
+ # Break out of the loop if we already parsed every option.
+ test $# -gt 0 || break
+
+ # We expect that one of the options parsed in this function matches
+ # and thus we remove _G_opt from "$@" and need to re-quote.
+ _G_match_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --debug|-x) debug_cmd='set -x'
+ func_echo "enabling shell trace mode" >&2
+ $debug_cmd
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ set dummy --warnings none ${1+"$@"}
+ shift
+ ;;
+
+ --warnings|--warning|-W)
+ if test $# = 0 && func_missing_arg $_G_opt; then
+ _G_parse_options_requote=:
+ break
+ fi
+ case " $warning_categories $1" in
+ *" $1 "*)
+ # trailing space prevents matching last $1 above
+ func_append_uniq opt_warning_types " $1"
+ ;;
+ *all)
+ opt_warning_types=$warning_categories
+ ;;
+ *none)
+ opt_warning_types=none
+ warning_func=:
+ ;;
+ *error)
+ opt_warning_types=$warning_categories
+ warning_func=func_fatal_error
+ ;;
+ *)
+ func_fatal_error \
+ "unsupported warning category: '$1'"
+ ;;
+ esac
+ shift
+ ;;
+
+ --verbose|-v) opt_verbose=: ;;
+ --version) func_version ;;
+ -\?|-h) func_usage ;;
+ --help) func_help ;;
+
+ # Separate optargs to long options (plugins may need this):
+ --*=*) func_split_equals "$_G_opt"
+ set dummy "$func_split_equals_lhs" \
+ "$func_split_equals_rhs" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate optargs to short options:
+ -W*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ # Separate non-argument short options:
+ -\?*|-h*|-v*|-x*)
+ func_split_short_opt "$_G_opt"
+ set dummy "$func_split_short_opt_name" \
+ "-$func_split_short_opt_arg" ${1+"$@"}
+ shift
+ ;;
+
+ --) _G_parse_options_requote=: ; break ;;
+ -*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
+ *) set dummy "$_G_opt" ${1+"$@"}; shift
+ _G_match_parse_options=false
+ break
+ ;;
+ esac
+
+ if $_G_match_parse_options; then
+ _G_parse_options_requote=:
+ fi
+ done
+
+ if $_G_parse_options_requote; then
+ # save modified positional parameters for caller
+ func_quote eval ${1+"$@"}
+ func_parse_options_result=$func_quote_result
+ fi
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+ $debug_cmd
+
+ # Display all warnings if -W was not given.
+ test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+ func_run_hooks func_validate_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_validate_options
+
+ # Bail if the options were screwed!
+ $exit_cmd $EXIT_FAILURE
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ eval \$ECHO \""$fatal_help"\"
+ func_error ${1+"$@"}
+ exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message"
+ exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+ $debug_cmd
+
+ func_error "Missing argument for '$1'."
+ exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables
+# after splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+ && (eval 'x=a/b/c;
+ test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+ && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=${1%%=*}
+ func_split_equals_rhs=${1#*=}
+ if test "x$func_split_equals_lhs" = "x$1"; then
+ func_split_equals_rhs=
+ fi
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_equals ()
+ {
+ $debug_cmd
+
+ func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+ func_split_equals_rhs=
+ test "x$func_split_equals_lhs=" = "x$1" \
+ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+ }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+ # This is an XSI compatible shell, allowing a faster implementation...
+ eval 'func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+ }'
+else
+ # ...otherwise fall back to using expr, which is often a shell builtin.
+ func_split_short_opt ()
+ {
+ $debug_cmd
+
+ func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
+ func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+ }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+ exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+ $debug_cmd
+
+ eval \$ECHO \""Usage: $usage"\"
+ echo
+ $SED -n 's|^# ||
+ /^Written by/{
+ x;p;x
+ }
+ h
+ /^Written by/q' < "$progpath"
+ echo
+ eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+# The version message is extracted from the calling file's header
+# comments, with leading '# ' stripped:
+# 1. First display the progname and version
+# 2. Followed by the header comment line matching /^# Written by /
+# 3. Then a blank line followed by the first following line matching
+# /^# Copyright /
+# 4. Immediately followed by any lines between the previous matches,
+# except lines preceding the intervening completely blank line.
+# For example, see the header comments of this file.
+func_version ()
+{
+ $debug_cmd
+
+ printf '%s\n' "$progname $scriptversion"
+ $SED -n '
+ /^# Written by /!b
+ s|^# ||; p; n
+
+ :fwd2blnk
+ /./ {
+ n
+ b fwd2blnk
+ }
+ p; n
+
+ :holdwrnt
+ s|^# ||
+ s|^# *$||
+ /^Copyright /!{
+ /./H
+ n
+ b holdwrnt
+ }
+
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ G
+ s|\(\n\)\n*|\1|g
+ p; q' < "$progpath"
+
+ exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.7'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+ $debug_cmd
+
+ _G_message=$*
+
+ func_echo_IFS=$IFS
+ IFS=$nl
+ for _G_line in $_G_message; do
+ IFS=$func_echo_IFS
+ $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+ done
+ IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+ $debug_cmd
+
+ $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+ -n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --mode=MODE use operation mode MODE
+ --no-warnings equivalent to '-Wnone'
+ --preserve-dup-deps don't remove duplicate dependency libraries
+ --quiet, --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ -v, --verbose print more informational messages than default
+ --version print version information
+ -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all]
+ -h, --help, --help-all print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+ $debug_cmd
+
+ func_usage_message
+ $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+ host-triplet: $host
+ shell: $SHELL
+ compiler: $LTCC
+ compiler flags: $LTCFLAGS
+ linker: $LD (gnu? $with_gnu_ld)
+ version: $progname (GNU libtool) 2.4.7
+ automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+ autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+ exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+ eval 'func_lo2o ()
+ {
+ case $1 in
+ *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+ * ) func_lo2o_result=$1 ;;
+ esac
+ }'
+
+ # func_xform LIBOBJ-OR-SOURCE
+ # ---------------------------
+ # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+ # suffix to a '.lo' libtool-object suffix.
+ eval 'func_xform ()
+ {
+ func_xform_result=${1%.*}.lo
+ }'
+else
+ # ...otherwise fall back to using sed.
+ func_lo2o ()
+ {
+ func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+ }
+
+ func_xform ()
+ {
+ func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+ }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+ func_fatal_error ${1+"$@"} \
+ "See the $PACKAGE documentation for more information." \
+ "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+ re_begincf='^# ### BEGIN LIBTOOL'
+ re_endcf='^# ### END LIBTOOL'
+
+ # Default configuration.
+ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+ done
+
+ exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+ echo "host: $host"
+ if test yes = "$build_libtool_libs"; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test yes = "$build_old_libs"; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+
+ exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+ # Global variable:
+ tagname=$1
+
+ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+ sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+ # Validate tagname.
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ func_fatal_error "invalid tag name: $tagname"
+ ;;
+ esac
+
+ # Don't test for the "default" C tag, as we know it's
+ # there but not specially marked.
+ case $tagname in
+ CC) ;;
+ *)
+ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+ taglist="$taglist $tagname"
+
+ # Evaluate the configuration. Be careful to quote the path
+ # and the sed script, to avoid splitting on whitespace, but
+ # also don't use non-portable quotes within backquotes within
+ # quotes we have to do it in 2 steps:
+ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+ eval "$extractedcf"
+ else
+ func_error "ignoring unknown tag $tagname"
+ fi
+ ;;
+ esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+ if test "$package_revision" != "$macro_revision"; then
+ if test "$VERSION" != "$macro_version"; then
+ if test -z "$macro_version"; then
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+ fi
+ else
+ cat >&2 <<_LT_EOF
+$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+ fi
+
+ exit $EXIT_MISMATCH
+ fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+ $debug_mode
+
+ # Option defaults:
+ opt_config=false
+ opt_dlopen=
+ opt_dry_run=false
+ opt_help=false
+ opt_mode=
+ opt_preserve_dup_deps=false
+ opt_quiet=false
+
+ nonopt=
+ preserve_args=
+
+ _G_rc_lt_options_prep=:
+
+ # Shorthand for --mode=foo, only valid as the first argument
+ case $1 in
+ clean|clea|cle|cl)
+ shift; set dummy --mode clean ${1+"$@"}; shift
+ ;;
+ compile|compil|compi|comp|com|co|c)
+ shift; set dummy --mode compile ${1+"$@"}; shift
+ ;;
+ execute|execut|execu|exec|exe|ex|e)
+ shift; set dummy --mode execute ${1+"$@"}; shift
+ ;;
+ finish|finis|fini|fin|fi|f)
+ shift; set dummy --mode finish ${1+"$@"}; shift
+ ;;
+ install|instal|insta|inst|ins|in|i)
+ shift; set dummy --mode install ${1+"$@"}; shift
+ ;;
+ link|lin|li|l)
+ shift; set dummy --mode link ${1+"$@"}; shift
+ ;;
+ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+ shift; set dummy --mode uninstall ${1+"$@"}; shift
+ ;;
+ *)
+ _G_rc_lt_options_prep=false
+ ;;
+ esac
+
+ if $_G_rc_lt_options_prep; then
+ # Pass back the list of options.
+ func_quote eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_result
+ fi
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+ $debug_cmd
+
+ _G_rc_lt_parse_options=false
+
+ # Perform our own loop to consume as many options as possible in
+ # each iteration.
+ while test $# -gt 0; do
+ _G_match_lt_parse_options=:
+ _G_opt=$1
+ shift
+ case $_G_opt in
+ --dry-run|--dryrun|-n)
+ opt_dry_run=:
+ ;;
+
+ --config) func_config ;;
+
+ --dlopen|-dlopen)
+ opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+ shift
+ ;;
+
+ --preserve-dup-deps)
+ opt_preserve_dup_deps=: ;;
+
+ --features) func_features ;;
+
+ --finish) set dummy --mode finish ${1+"$@"}; shift ;;
+
+ --help) opt_help=: ;;
+
+ --help-all) opt_help=': help-all' ;;
+
+ --mode) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_mode=$1
+ case $1 in
+ # Valid mode arguments:
+ clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+ # Catch anything else as an error
+ *) func_error "invalid argument for $_G_opt"
+ exit_cmd=exit
+ break
+ ;;
+ esac
+ shift
+ ;;
+
+ --no-silent|--no-quiet)
+ opt_quiet=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-warnings|--no-warning|--no-warn)
+ opt_warning=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --no-verbose)
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --silent|--quiet)
+ opt_quiet=:
+ opt_verbose=false
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ --tag) test $# = 0 && func_missing_arg $_G_opt && break
+ opt_tag=$1
+ func_append preserve_args " $_G_opt $1"
+ func_enable_tag "$1"
+ shift
+ ;;
+
+ --verbose|-v) opt_quiet=false
+ opt_verbose=:
+ func_append preserve_args " $_G_opt"
+ ;;
+
+ # An option not handled by this hook function:
+ *) set dummy "$_G_opt" ${1+"$@"} ; shift
+ _G_match_lt_parse_options=false
+ break
+ ;;
+ esac
+ $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
+ done
+
+ if $_G_rc_lt_parse_options; then
+ # save modified positional parameters for caller
+ func_quote eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_result
+ fi
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+ # save first non-option argument
+ if test 0 -lt $#; then
+ nonopt=$1
+ shift
+ fi
+
+ # preserve --debug
+ test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+ # Keeping compiler generated duplicates in $postdeps and $predeps is not
+ # harmful, and is necessary in a majority of systems that use it to satisfy
+ # symbol dependencies.
+ opt_duplicate_compiler_generated_deps=:
+
+ $opt_help || {
+ # Sanity checks first:
+ func_check_version_match
+
+ test yes != "$build_libtool_libs" \
+ && test yes != "$build_old_libs" \
+ && func_fatal_configuration "not configured to build any kind of library"
+
+ # Darwin sucks
+ eval std_shrext=\"$shrext_cmds\"
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+ func_error "unrecognized option '-dlopen'"
+ $ECHO "$help" 1>&2
+ exit $EXIT_FAILURE
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help=$help
+ help="Try '$progname --help --mode=$opt_mode' for more information."
+ }
+
+ # Pass back the unparsed argument list
+ func_quote eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+## Main. ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+ $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+ test -f "$1" &&
+ $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs. To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway. Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+ lalib_p=no
+ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+ for lalib_p_l in 1 2 3 4
+ do
+ read lalib_p_line
+ case $lalib_p_line in
+ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+ esac
+ done
+ exec 0<&5 5<&-
+ fi
+ test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+ test -f "$1" &&
+ $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+ func_ltwrapper_exec_suffix=
+ case $1 in
+ *.exe) ;;
+ *) func_ltwrapper_exec_suffix=.exe ;;
+ esac
+ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+ func_dirname_and_basename "$1" "" "."
+ func_stripname '' '.exe' "$func_basename_result"
+ func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+ $debug_cmd
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $1; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ func_show_eval "$cmd" "${2-:}"
+ done
+ IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)! Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+ $debug_cmd
+
+ case $1 in
+ */* | *\\*) . "$1" ;;
+ *) . "./$1" ;;
+ esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot. Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+ func_resolve_sysroot_result=$1
+ case $func_resolve_sysroot_result in
+ =*)
+ func_stripname '=' '' "$func_resolve_sysroot_result"
+ func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+ ;;
+ esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+ case $lt_sysroot:$1 in
+ ?*:"$lt_sysroot"*)
+ func_stripname "$lt_sysroot" '' "$1"
+ func_replace_sysroot_result='='$func_stripname_result
+ ;;
+ *)
+ # Including no sysroot.
+ func_replace_sysroot_result=$1
+ ;;
+ esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+ $debug_cmd
+
+ if test -n "$available_tags" && test -z "$tagname"; then
+ CC_quoted=
+ for arg in $CC; do
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case $@ in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+ CC_quoted=
+ for arg in $CC; do
+ # Double-quote args containing other shell metacharacters.
+ func_append_quoted CC_quoted "$arg"
+ done
+ CC_expanded=`func_echo_all $CC`
+ CC_quoted_expanded=`func_echo_all $CC_quoted`
+ case "$@ " in
+ " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ func_echo "unable to infer tagged configuration"
+ func_fatal_error "specify a tag with '--tag'"
+# else
+# func_verbose "using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+ write_libobj=$1
+ if test yes = "$build_libtool_libs"; then
+ write_lobj=\'$2\'
+ else
+ write_lobj=none
+ fi
+
+ if test yes = "$build_old_libs"; then
+ write_oldobj=\'$3\'
+ else
+ write_oldobj=none
+ fi
+
+ $opt_dry_run || {
+ cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+ $MV "${write_libobj}T" "$write_libobj"
+ }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+ $debug_cmd
+
+ func_convert_core_file_wine_to_w32_result=$1
+ if test -n "$1"; then
+ # Unfortunately, winepath does not exit with a non-zero error code, so we
+ # are forced to check the contents of stdout. On the other hand, if the
+ # command is not found, the shell will set an exit code of 127 and print
+ # *an error message* to stdout. So we must check for both error code of
+ # zero AND non-empty stdout, which explains the odd construction:
+ func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+ if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+ func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+ $SED -e "$sed_naive_backslashify"`
+ else
+ func_convert_core_file_wine_to_w32_result=
+ fi
+ fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+ $debug_cmd
+
+ # unfortunately, winepath doesn't convert paths, only file names
+ func_convert_core_path_wine_to_w32_result=
+ if test -n "$1"; then
+ oldIFS=$IFS
+ IFS=:
+ for func_convert_core_path_wine_to_w32_f in $1; do
+ IFS=$oldIFS
+ func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+ if test -n "$func_convert_core_file_wine_to_w32_result"; then
+ if test -z "$func_convert_core_path_wine_to_w32_result"; then
+ func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+ else
+ func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+ fi
+ fi
+ done
+ IFS=$oldIFS
+ fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+ $debug_cmd
+
+ if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+ func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+ if test "$?" -ne 0; then
+ # on failure, ensure result is empty
+ func_cygpath_result=
+ fi
+ else
+ func_cygpath_result=
+ func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+ fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format. Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+ $debug_cmd
+
+ # awkward: cmd appends spaces to result
+ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+ $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+ $debug_cmd
+
+ if test -z "$2" && test -n "$1"; then
+ func_error "Could not determine host file name corresponding to"
+ func_error " '$1'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback:
+ func_to_host_file_result=$1
+ fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+ $debug_cmd
+
+ if test -z "$4" && test -n "$3"; then
+ func_error "Could not determine the host path corresponding to"
+ func_error " '$3'"
+ func_error "Continuing, but uninstalled executables may not work."
+ # Fallback. This is a deliberately simplistic "conversion" and
+ # should not be "improved". See libtool.info.
+ if test "x$1" != "x$2"; then
+ lt_replace_pathsep_chars="s|$1|$2|g"
+ func_to_host_path_result=`echo "$3" |
+ $SED -e "$lt_replace_pathsep_chars"`
+ else
+ func_to_host_path_result=$3
+ fi
+ fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+ $debug_cmd
+
+ case $4 in
+ $1 ) func_to_host_path_result=$3$func_to_host_path_result
+ ;;
+ esac
+ case $4 in
+ $2 ) func_append func_to_host_path_result "$3"
+ ;;
+ esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+ $debug_cmd
+
+ $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result. If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+ $debug_cmd
+
+ case ,$2, in
+ *,"$to_tool_file_cmd",*)
+ func_to_tool_file_result=$1
+ ;;
+ *)
+ $to_tool_file_cmd "$1"
+ func_to_tool_file_result=$func_to_host_file_result
+ ;;
+ esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+ func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_msys_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+ # LT_CYGPATH in this case.
+ func_to_host_file_result=`cygpath -m "$1"`
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format. Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_file_wine_to_w32 "$1"
+ func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ func_convert_core_msys_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_msys_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set. Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_file_result=$1
+ if test -n "$1"; then
+ # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+ func_convert_core_file_wine_to_w32 "$1"
+ func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+ func_to_host_file_result=$func_cygpath_result
+ fi
+ func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format. If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+# file name conversion function : func_convert_file_X_to_Y ()
+# path conversion function : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same. If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+ $debug_cmd
+
+ if test -z "$to_host_path_cmd"; then
+ func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+ to_host_path_cmd=func_convert_path_$func_stripname_result
+ fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+ $debug_cmd
+
+ func_init_to_host_path_cmd
+ $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+ func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper. Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from ARG. MSYS
+ # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+ # and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_msys_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format. Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format. Requires a wine environment and
+# a working winepath. Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+ func_convert_path_check : ";" \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+ fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # See func_convert_path_msys_to_w32:
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set. Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+ $debug_cmd
+
+ func_to_host_path_result=$1
+ if test -n "$1"; then
+ # Remove leading and trailing path separator characters from
+ # ARG. msys behavior is inconsistent here, cygpath turns them
+ # into '.;' and ';.', and winepath ignores them completely.
+ func_stripname : : "$1"
+ func_to_host_path_tmp1=$func_stripname_result
+ func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+ func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+ func_to_host_path_result=$func_cygpath_result
+ func_convert_path_check : : \
+ "$func_to_host_path_tmp1" "$func_to_host_path_result"
+ func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+ fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+ $debug_cmd
+
+ func_dll_def_p_tmp=`$SED -n \
+ -e 's/^[ ]*//' \
+ -e '/^\(;.*\)*$/d' \
+ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \
+ -e q \
+ "$1"`
+ test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+ $debug_cmd
+
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile=$nonopt # always keep a non-empty value in "srcfile"
+ suppress_opt=yes
+ suppress_output=
+ arg_mode=normal
+ libobj=
+ later=
+ pie_flag=
+
+ for arg
+ do
+ case $arg_mode in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg=$arg
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj=$arg
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ test -n "$libobj" && \
+ func_fatal_error "you cannot specify '-o' more than once"
+ arg_mode=target
+ continue
+ ;;
+
+ -pie | -fpie | -fPIE)
+ func_append pie_flag " $arg"
+ continue
+ ;;
+
+ -shared | -static | -prefer-pic | -prefer-non-pic)
+ func_append later " $arg"
+ continue
+ ;;
+
+ -no-suppress)
+ suppress_opt=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ lastarg=
+ save_ifs=$IFS; IFS=,
+ for arg in $args; do
+ IFS=$save_ifs
+ func_append_quoted lastarg "$arg"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$lastarg"
+ lastarg=$func_stripname_result
+
+ # Add the arguments to base_compile.
+ func_append base_compile " $lastarg"
+ continue
+ ;;
+
+ *)
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg=$srcfile
+ srcfile=$arg
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ func_append_quoted base_compile "$lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ func_fatal_error "you must specify an argument for -Xcompile"
+ ;;
+ target)
+ func_fatal_error "you must specify a target with '-o'"
+ ;;
+ *)
+ # Get the name of the library object.
+ test -z "$libobj" && {
+ func_basename "$srcfile"
+ libobj=$func_basename_result
+ }
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ case $libobj in
+ *.[cCFSifmso] | \
+ *.ada | *.adb | *.ads | *.asm | \
+ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+ func_xform "$libobj"
+ libobj=$func_xform_result
+ ;;
+ esac
+
+ case $libobj in
+ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+ *)
+ func_fatal_error "cannot determine name of library object from '$libobj'"
+ ;;
+ esac
+
+ func_infer_tag $base_compile
+
+ for arg in $later; do
+ case $arg in
+ -shared)
+ test yes = "$build_libtool_libs" \
+ || func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ continue
+ ;;
+
+ -static)
+ build_libtool_libs=no
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+ esac
+ done
+
+ func_quote_arg pretty "$libobj"
+ test "X$libobj" != "X$func_quote_arg_result" \
+ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
+ && func_warning "libobj name '$libobj' may not contain shell special characters."
+ func_dirname_and_basename "$obj" "/" ""
+ objname=$func_basename_result
+ xdir=$func_dirname_result
+ lobj=$xdir$objdir/$objname
+
+ test -z "$base_compile" && \
+ func_fatal_help "you must specify a compilation command"
+
+ # Delete any leftover library objects.
+ if test yes = "$build_old_libs"; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2* | cegcc*)
+ pic_mode=default
+ ;;
+ esac
+ if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test no = "$compiler_c_o"; then
+ output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+ lockfile=$output_obj.lock
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test yes = "$need_locks"; then
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test warn = "$need_locks"; then
+ if test -f "$lockfile"; then
+ $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+ func_append removelist " $output_obj"
+ $ECHO "$srcfile" > "$lockfile"
+ fi
+
+ $opt_dry_run || $RM $removelist
+ func_append removelist " $lockfile"
+ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+ func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+ srcfile=$func_to_tool_file_result
+ func_quote_arg pretty "$srcfile"
+ qsrcfile=$func_quote_arg_result
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test yes = "$build_libtool_libs"; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test no != "$pic_mode"; then
+ command="$base_compile $qsrcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $qsrcfile"
+ fi
+
+ func_mkdir_p "$xdir$objdir"
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ func_append command " -o $lobj"
+ fi
+
+ func_show_eval_locale "$command" \
+ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ func_show_eval '$MV "$output_obj" "$lobj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+
+ # Allow error messages only from the first compilation.
+ if test yes = "$suppress_opt"; then
+ suppress_output=' >/dev/null 2>&1'
+ fi
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test yes = "$build_old_libs"; then
+ if test yes != "$pic_mode"; then
+ # Don't build PIC code
+ command="$base_compile $qsrcfile$pie_flag"
+ else
+ command="$base_compile $qsrcfile $pic_flag"
+ fi
+ if test yes = "$compiler_c_o"; then
+ func_append command " -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ func_append command "$suppress_output"
+ func_show_eval_locale "$command" \
+ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+ if test warn = "$need_locks" &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $opt_dry_run || $RM $removelist
+ exit $EXIT_FAILURE
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ func_show_eval '$MV "$output_obj" "$obj"' \
+ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+ fi
+ fi
+
+ $opt_dry_run || {
+ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+ # Unlock the critical section if it was locked
+ if test no != "$need_locks"; then
+ removelist=$lockfile
+ $RM "$lockfile"
+ fi
+ }
+
+ exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+ test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+ # We need to display help for each of the modes.
+ case $opt_mode in
+ "")
+ # Generic help is extracted from the usage comments
+ # at the start of this file.
+ func_help
+ ;;
+
+ clean)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ compile)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -no-suppress do not suppress compiler output for multiple passes
+ -prefer-pic try to build PIC objects only
+ -prefer-non-pic try to build non-PIC objects only
+ -shared do not build a '.o' file suitable for static linking
+ -static only build a '.o' file suitable for static linking
+ -Wc,FLAG
+ -Xcompiler FLAG pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+ ;;
+
+ execute)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+ finish)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the '--dry-run' option if you just want to see what would be executed."
+ ;;
+
+ install)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+ -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+ link)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -bindir BINDIR specify path to binaries directory (for systems where
+ libraries must be found in the PATH setting at runtime)
+ -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE use a list of object files found in FILE to specify objects
+ -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes)
+ -precious-files-regex REGEX
+ don't remove output files matching REGEX
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -shared only do dynamic linking of libtool libraries
+ -shrext SUFFIX override the standard shared library file extension
+ -static do not do any dynamic linking of uninstalled libtool libraries
+ -static-libtool-libs
+ do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+ -weak LIBNAME declare that the target provides the LIBNAME interface
+ -Wc,FLAG
+ -Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wa,FLAG
+ -Xassembler FLAG pass linker-specific FLAG directly to the assembler
+ -Wl,FLAG
+ -Xlinker FLAG pass linker-specific FLAG directly to the linker
+ -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename. Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+ uninstall)
+ $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+ *)
+ func_fatal_help "invalid operation mode '$opt_mode'"
+ ;;
+ esac
+
+ echo
+ $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+ if test : = "$opt_help"; then
+ func_mode_help
+ else
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ func_mode_help
+ done
+ } | $SED -n '1p; 2,$s/^Usage:/ or: /p'
+ {
+ func_help noexit
+ for opt_mode in compile link execute install finish uninstall clean; do
+ echo
+ func_mode_help
+ done
+ } |
+ $SED '1d
+ /^When reporting/,/^Report/{
+ H
+ d
+ }
+ $x
+ /information about other modes/d
+ /more detailed .*MODE/d
+ s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+ fi
+ exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+ $debug_cmd
+
+ # The first argument is the command name.
+ cmd=$nonopt
+ test -z "$cmd" && \
+ func_fatal_help "you must specify a COMMAND"
+
+ # Handle -dlopen flags immediately.
+ for file in $opt_dlopen; do
+ test -f "$file" \
+ || func_fatal_help "'$file' is not a file"
+
+ dir=
+ case $file in
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$lib' is not a valid libtool archive"
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+ func_source "$file"
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && \
+ func_warning "'$file' was not linked with '-export-dynamic'"
+ continue
+ fi
+
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+
+ if test -f "$dir/$objdir/$dlname"; then
+ func_append dir "/$objdir"
+ else
+ if test ! -f "$dir/$dlname"; then
+ func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ ;;
+
+ *)
+ func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir=$absdir
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic=$magic
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -* | *.la | *.lo ) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if func_ltwrapper_script_p "$file"; then
+ func_source "$file"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ elif func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ func_source "$func_ltwrapper_scriptname_result"
+ # Transform arg to wrapped name.
+ file=$progdir/$program
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ func_append_quoted args "$file"
+ done
+
+ if $opt_dry_run; then
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+ echo "export $shlibpath_var"
+ fi
+ $ECHO "$cmd$args"
+ exit $EXIT_SUCCESS
+ else
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+ do
+ eval "if test \"\${save_$lt_var+set}\" = set; then
+ $lt_var=\$save_$lt_var; export $lt_var
+ else
+ $lt_unset $lt_var
+ fi"
+ done
+
+ # Now prepare to actually exec the command.
+ exec_cmd=\$cmd$args
+ fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+ $debug_cmd
+
+ libs=
+ libdirs=
+ admincmds=
+
+ for opt in "$nonopt" ${1+"$@"}
+ do
+ if test -d "$opt"; then
+ func_append libdirs " $opt"
+
+ elif test -f "$opt"; then
+ if func_lalib_unsafe_p "$opt"; then
+ func_append libs " $opt"
+ else
+ func_warning "'$opt' is not a valid libtool archive"
+ fi
+
+ else
+ func_fatal_error "invalid argument '$opt'"
+ fi
+ done
+
+ if test -n "$libs"; then
+ if test -n "$lt_sysroot"; then
+ sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+ sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+ else
+ sysroot_cmd=
+ fi
+
+ # Remove sysroot references
+ if $opt_dry_run; then
+ for lib in $libs; do
+ echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+ done
+ else
+ tmpdir=`func_mktempdir`
+ for lib in $libs; do
+ $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+ > $tmpdir/tmp-la
+ mv -f $tmpdir/tmp-la $lib
+ done
+ ${RM}r "$tmpdir"
+ fi
+ fi
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $opt_dry_run || eval "$cmds" || func_append admincmds "
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ $opt_quiet && exit $EXIT_SUCCESS
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $ECHO " $libdir"
+ done
+ echo
+ echo "If you ever happen to want to link against installed libraries"
+ echo "in a given directory, LIBDIR, you must either use libtool, and"
+ echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+ echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ echo " - add LIBDIR to the '$shlibpath_var' environment variable"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the '$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $ECHO " - use the '$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $ECHO " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+ fi
+ echo
+
+ echo "See any operating system documentation about shared libraries for"
+ case $host in
+ solaris2.[6789]|solaris2.1[0-9])
+ echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+ echo "pages."
+ ;;
+ *)
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ ;;
+ esac
+ echo "----------------------------------------------------------------------"
+ fi
+ exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+ $debug_cmd
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+ # Allow the use of GNU shtool's install command.
+ case $nonopt in *shtool*) :;; *) false;; esac
+ then
+ # Aesthetically quote it.
+ func_quote_arg pretty "$nonopt"
+ install_prog="$func_quote_arg_result "
+ arg=$1
+ shift
+ else
+ install_prog=
+ arg=$nonopt
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ func_quote_arg pretty "$arg"
+ func_append install_prog "$func_quote_arg_result"
+ install_shared_prog=$install_prog
+ case " $install_prog " in
+ *[\\\ /]cp\ *) install_cp=: ;;
+ *) install_cp=false ;;
+ esac
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=false
+ stripme=
+ no_mode=:
+ for arg
+ do
+ arg2=
+ if test -n "$dest"; then
+ func_append files " $dest"
+ dest=$arg
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=: ;;
+ -f)
+ if $install_cp; then :; else
+ prev=$arg
+ fi
+ ;;
+ -g | -m | -o)
+ prev=$arg
+ ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*)
+ ;;
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ if test X-m = "X$prev" && test -n "$install_override_mode"; then
+ arg2=$install_override_mode
+ no_mode=false
+ fi
+ prev=
+ else
+ dest=$arg
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ func_quote_arg pretty "$arg"
+ func_append install_prog " $func_quote_arg_result"
+ if test -n "$arg2"; then
+ func_quote_arg pretty "$arg2"
+ fi
+ func_append install_shared_prog " $func_quote_arg_result"
+ done
+
+ test -z "$install_prog" && \
+ func_fatal_help "you must specify an install program"
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prev' option requires an argument"
+
+ if test -n "$install_override_mode" && $no_mode; then
+ if $install_cp; then :; else
+ func_quote_arg pretty "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_arg_result"
+ fi
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ func_fatal_help "no file or destination specified"
+ else
+ func_fatal_help "you must specify a destination"
+ fi
+ fi
+
+ # Strip any trailing slash from the destination.
+ func_stripname '' '/' "$dest"
+ dest=$func_stripname_result
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=:
+ if $isdir; then
+ destdir=$dest
+ destname=
+ else
+ func_dirname_and_basename "$dest" "" "."
+ destdir=$func_dirname_result
+ destname=$func_basename_result
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files; shift
+ test "$#" -gt 1 && \
+ func_fatal_help "'$dest' is not a directory"
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ func_fatal_help "'$destdir' must be an absolute directory name"
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ func_append staticlibs " $file"
+ ;;
+
+ *.la)
+ func_resolve_sysroot "$file"
+ file=$func_resolve_sysroot_result
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$file" \
+ || func_fatal_help "'$file' is not a valid libtool archive"
+
+ library_names=
+ old_library=
+ relink_command=
+ func_source "$file"
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append current_libdirs " $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) func_append future_libdirs " $libdir" ;;
+ esac
+ fi
+
+ func_dirname "$file" "/" ""
+ dir=$func_dirname_result
+ func_append dir "$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ test "$inst_prefix_dir" = "$destdir" && \
+ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ func_warning "relinking '$file'"
+ func_show_eval "$relink_command" \
+ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names; shift
+ if test -n "$1"; then
+ realname=$1
+ shift
+
+ srcname=$realname
+ test -n "$relink_command" && srcname=${realname}T
+
+ # Install the shared library and build the symlinks.
+ func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+ 'exit $?'
+ tstripme=$stripme
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $realname in
+ *.dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ os2*)
+ case $realname in
+ *_dll.a)
+ tstripme=
+ ;;
+ esac
+ ;;
+ esac
+ if test -n "$tstripme" && test -n "$striplib"; then
+ func_show_eval "$striplib $destdir/$realname" 'exit $?'
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ # Try 'ln -sf' first, because the 'ln' binary might depend on
+ # the symlink we replace! Solaris /bin/ln does not understand -f,
+ # so we also need to try rm && ln -s.
+ for linkname
+ do
+ test "$linkname" != "$realname" \
+ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib=$destdir/$realname
+ func_execute_cmds "$postinstall_cmds" 'exit $?'
+ fi
+
+ # Install the pseudo-library for information purposes.
+ func_basename "$file"
+ name=$func_basename_result
+ instname=$dir/${name}i
+ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ func_lo2o "$destfile"
+ staticdest=$func_lo2o_result
+ ;;
+ *.$objext)
+ staticdest=$destfile
+ destfile=
+ ;;
+ *)
+ func_fatal_help "cannot copy a libtool object to '$destfile'"
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ test -n "$destfile" && \
+ func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+ # Install the old object if enabled.
+ if test yes = "$build_old_libs"; then
+ # Deduce the name of the old-style object file.
+ func_lo2o "$file"
+ staticobj=$func_lo2o_result
+ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+ fi
+ exit $EXIT_SUCCESS
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile=$destdir/$destname
+ else
+ func_basename "$file"
+ destfile=$func_basename_result
+ destfile=$destdir/$destfile
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ stripped_ext=.exe
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin* | *mingw*)
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ wrapper=$func_ltwrapper_scriptname_result
+ else
+ func_stripname '' '.exe' "$file"
+ wrapper=$func_stripname_result
+ fi
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if func_ltwrapper_script_p "$wrapper"; then
+ notinst_deplibs=
+ relink_command=
+
+ func_source "$wrapper"
+
+ # Check the variables that should have been set.
+ test -z "$generated_by_libtool_version" && \
+ func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+ finalize=:
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ func_source "$lib"
+ fi
+ libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ func_warning "'$lib' has not been installed in '$libdir'"
+ finalize=false
+ fi
+ done
+
+ relink_command=
+ func_source "$wrapper"
+
+ outputname=
+ if test no = "$fast_install" && test -n "$relink_command"; then
+ $opt_dry_run || {
+ if $finalize; then
+ tmpdir=`func_mktempdir`
+ func_basename "$file$stripped_ext"
+ file=$func_basename_result
+ outputname=$tmpdir/$file
+ # Replace the output file specification.
+ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$relink_command"
+ eval "func_echo $func_quote_arg_result"
+ }
+ if eval "$relink_command"; then :
+ else
+ func_error "error: relink '$file' with the above command before installing it"
+ $opt_dry_run || ${RM}r "$tmpdir"
+ continue
+ fi
+ file=$outputname
+ else
+ func_warning "cannot relink '$file'"
+ fi
+ }
+ else
+ # Install the binary that we compiled earlier.
+ file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyway
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ func_stripname '' '.exe' "$destfile"
+ destfile=$func_stripname_result
+ ;;
+ esac
+ ;;
+ esac
+ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+ $opt_dry_run || if test -n "$outputname"; then
+ ${RM}r "$tmpdir"
+ fi
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ func_basename "$file"
+ name=$func_basename_result
+
+ # Set up the ranlib parameters.
+ oldlib=$destdir/$name
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+
+ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+ if test -n "$stripme" && test -n "$old_striplib"; then
+ func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+ fi
+
+ # Do each command in the postinstall commands.
+ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+ done
+
+ test -n "$future_libdirs" && \
+ func_warning "remember to run '$progname --finish$future_libdirs'"
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ $opt_dry_run && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+ else
+ exit $EXIT_SUCCESS
+ fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+ $debug_cmd
+
+ my_outputname=$1
+ my_originator=$2
+ my_pic_p=${3-false}
+ my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+ my_dlsyms=
+
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ my_dlsyms=${my_outputname}S.c
+ else
+ func_error "not configured to extract global symbols from dlpreopened files"
+ fi
+ fi
+
+ if test -n "$my_dlsyms"; then
+ case $my_dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist=$output_objdir/$my_outputname.nm
+
+ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+ # Parse the name list into a source file.
+ func_verbose "creating $output_objdir/$my_dlsyms"
+
+ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test yes = "$dlself"; then
+ func_verbose "generating symbol list for '$output'"
+
+ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ for progfile in $progfiles; do
+ func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+ func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+ $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $opt_dry_run || {
+ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $opt_dry_run || {
+ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ }
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols=$output_objdir/$outputname.exp
+ $opt_dry_run || {
+ $RM $export_symbols
+ eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ else
+ $opt_dry_run || {
+ eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+ eval '$MV "$nlist"T "$nlist"'
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+ ;;
+ esac
+ }
+ fi
+ fi
+
+ for dlprefile in $dlprefiles; do
+ func_verbose "extracting global C symbols from '$dlprefile'"
+ func_basename "$dlprefile"
+ name=$func_basename_result
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ # if an import library, we need to obtain dlname
+ if func_win32_import_lib_p "$dlprefile"; then
+ func_tr_sh "$dlprefile"
+ eval "curr_lafile=\$libfile_$func_tr_sh_result"
+ dlprefile_dlbasename=
+ if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+ # Use subshell, to avoid clobbering current variable values
+ dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+ if test -n "$dlprefile_dlname"; then
+ func_basename "$dlprefile_dlname"
+ dlprefile_dlbasename=$func_basename_result
+ else
+ # no lafile. user explicitly requested -dlpreopen <import library>.
+ $sharedlib_from_linklib_cmd "$dlprefile"
+ dlprefile_dlbasename=$sharedlib_from_linklib_result
+ fi
+ fi
+ $opt_dry_run || {
+ if test -n "$dlprefile_dlbasename"; then
+ eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+ else
+ func_warning "Could not compute DLL name from $name"
+ eval '$ECHO ": $name " >> "$nlist"'
+ fi
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+ $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+ }
+ else # not an import lib
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ fi
+ ;;
+ *)
+ $opt_dry_run || {
+ eval '$ECHO ": $name " >> "$nlist"'
+ func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+ eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+ }
+ ;;
+ esac
+ done
+
+ $opt_dry_run || {
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $MV "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if $GREP -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ $GREP -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+ fi
+
+ func_show_eval '$RM "${nlist}I"'
+ if test -n "$global_symbol_to_import"; then
+ eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+ fi
+
+ echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols. */
+typedef struct {
+ const char *name;
+ void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+ LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+ for (; symbol->name; ++symbol)
+ {"
+ $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+ echo >> "$output_objdir/$my_dlsyms" "\
+ }
+}"
+ fi
+ echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+ if test -s "$nlist"I; then
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {\"@INIT@\", (void *) &lt_syminit},"
+ fi
+
+ case $need_lib_prefix in
+ no)
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ *)
+ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+ ;;
+ esac
+ echo >> "$output_objdir/$my_dlsyms" "\
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ } # !$opt_dry_run
+
+ pic_flag_for_symtable=
+ case "$compile_command " in
+ *" -static "*) ;;
+ *)
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+ *-*-hpux*)
+ pic_flag_for_symtable=" $pic_flag" ;;
+ *)
+ $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+ ;;
+ esac
+ ;;
+ esac
+ symtab_cflags=
+ for arg in $LTCFLAGS; do
+ case $arg in
+ -pie | -fpie | -fPIE) ;;
+ *) func_append symtab_cflags " $arg" ;;
+ esac
+ done
+
+ # Now compile the dynamic symbol file.
+ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+ # Clean up the generated files.
+ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+ # Transform the symbol file into the correct name.
+ symfileobj=$output_objdir/${my_outputname}S.$objext
+ case $host in
+ *cygwin* | *mingw* | *cegcc* )
+ if test -f "$output_objdir/$my_outputname.def"; then
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+ else
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ fi
+ ;;
+ *)
+ compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+ ;;
+ esac
+ ;;
+ *)
+ func_fatal_error "unknown suffix for '$my_dlsyms'"
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+ finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+ fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+ test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+ $debug_cmd
+
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+ test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+ $debug_cmd
+
+ win32_libid_type=unknown
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+ $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+ case $nm_interface in
+ "MS dumpbin")
+ if func_cygming_ms_implib_p "$1" ||
+ func_cygming_gnu_implib_p "$1"
+ then
+ win32_nmres=import
+ else
+ win32_nmres=
+ fi
+ ;;
+ *)
+ func_to_tool_file "$1" func_convert_file_msys_to_w32
+ win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+ $SED -n -e '
+ 1,100{
+ / I /{
+ s|.*|import|
+ p
+ q
+ }
+ }'`
+ ;;
+ esac
+ case $win32_nmres in
+ import*) win32_libid_type="x86 archive import";;
+ *) win32_libid_type="x86 archive static";;
+ esac
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+ $debug_cmd
+
+ sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+ $debug_cmd
+
+ match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+ $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+ $SED '/^Contents of section '"$match_literal"':/{
+ # Place marker at beginning of archive member dllname section
+ s/.*/====MARK====/
+ p
+ d
+ }
+ # These lines can sometimes be longer than 43 characters, but
+ # are always uninteresting
+ /:[ ]*file format pe[i]\{,1\}-/d
+ /^In archive [^:]*:/d
+ # Ensure marker is printed
+ /^====MARK====/p
+ # Remove all lines with less than 43 characters
+ /^.\{43\}/!d
+ # From remaining lines, remove first 43 characters
+ s/^.\{43\}//' |
+ $SED -n '
+ # Join marker and all lines until next marker into a single line
+ /^====MARK====/ b para
+ H
+ $ b para
+ b
+ :para
+ x
+ s/\n//g
+ # Remove the marker
+ s/^====MARK====//
+ # Remove trailing dots and whitespace
+ s/[\. \t]*$//
+ # Print
+ /./p' |
+ # we now have a list, one entry per line, of the stringified
+ # contents of the appropriate section of all members of the
+ # archive that possess that section. Heuristic: eliminate
+ # all those that have a first or second character that is
+ # a '.' (that is, objdump's representation of an unprintable
+ # character.) This should work for all archives with less than
+ # 0x302f exports -- but will fail for DLLs whose name actually
+ # begins with a literal '.' or a single character followed by
+ # a '.'.
+ #
+ # Of those that remain, print the first one.
+ $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+# $sharedlib_from_linklib_cmd
+# Result is available in the variable
+# $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+ $debug_cmd
+
+ if func_cygming_gnu_implib_p "$1"; then
+ # binutils import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+ elif func_cygming_ms_implib_p "$1"; then
+ # ms-generated import library
+ sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+ else
+ # unknown
+ sharedlib_from_linklib_result=
+ fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+ $debug_cmd
+
+ f_ex_an_ar_dir=$1; shift
+ f_ex_an_ar_oldlib=$1
+ if test yes = "$lock_old_archive_extraction"; then
+ lockfile=$f_ex_an_ar_oldlib.lock
+ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+ func_echo "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ fi
+ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+ 'stat=$?; rm -f "$lockfile"; exit $stat'
+ if test yes = "$lock_old_archive_extraction"; then
+ $opt_dry_run || rm -f "$lockfile"
+ fi
+ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+ fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+ $debug_cmd
+
+ my_gentop=$1; shift
+ my_oldlibs=${1+"$@"}
+ my_oldobjs=
+ my_xlib=
+ my_xabs=
+ my_xdir=
+
+ for my_xlib in $my_oldlibs; do
+ # Extract the objects.
+ case $my_xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+ *) my_xabs=`pwd`"/$my_xlib" ;;
+ esac
+ func_basename "$my_xlib"
+ my_xlib=$func_basename_result
+ my_xlib_u=$my_xlib
+ while :; do
+ case " $extracted_archives " in
+ *" $my_xlib_u "*)
+ func_arith $extracted_serial + 1
+ extracted_serial=$func_arith_result
+ my_xlib_u=lt$extracted_serial-$my_xlib ;;
+ *) break ;;
+ esac
+ done
+ extracted_archives="$extracted_archives $my_xlib_u"
+ my_xdir=$my_gentop/$my_xlib_u
+
+ func_mkdir_p "$my_xdir"
+
+ case $host in
+ *-darwin*)
+ func_verbose "Extracting $my_xabs"
+ # Do not bother doing anything if just a dry run
+ $opt_dry_run || {
+ darwin_orig_dir=`pwd`
+ cd $my_xdir || exit $?
+ darwin_archive=$my_xabs
+ darwin_curdir=`pwd`
+ func_basename "$darwin_archive"
+ darwin_base_archive=$func_basename_result
+ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+ if test -n "$darwin_arches"; then
+ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+ darwin_arch=
+ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+ for darwin_arch in $darwin_arches; do
+ func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+ $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+ cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+ func_extract_an_archive "`pwd`" "$darwin_base_archive"
+ cd "$darwin_curdir"
+ $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+ done # $darwin_arches
+ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+ cd "$darwin_orig_dir"
+ else
+ cd $darwin_orig_dir
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ fi # $darwin_arches
+ } # !$opt_dry_run
+ ;;
+ *)
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=${1-no}
+
+ $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='$macro_version'
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$ECHO are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ file=\"\$0\""
+
+ func_quote_arg pretty "$ECHO"
+ qECHO=$func_quote_arg_result
+ $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+ ECHO=$qECHO
+ fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+ lt_script_arg0=\$0
+ shift
+ for lt_opt
+ do
+ case \"\$lt_opt\" in
+ --lt-debug) lt_option_debug=1 ;;
+ --lt-dump-script)
+ lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+ test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+ lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+ cat \"\$lt_dump_D/\$lt_dump_F\"
+ exit 0
+ ;;
+ --lt-*)
+ \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Print the debug banner immediately:
+ if test -n \"\$lt_option_debug\"; then
+ echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+ fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+ lt_dump_args_N=1;
+ for lt_arg
+ do
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+ lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+ done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2* | *-cegcc*)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ $ECHO "\
+ if test -n \"\$lt_option_debug\"; then
+ \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+ func_lt_dump_args \${1+\"\$@\"} 1>&2
+ fi
+ exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $ECHO "\
+ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+ exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+ case \" \$* \" in
+ *\\ --lt-*)
+ for lt_wr_arg
+ do
+ case \$lt_wr_arg in
+ --lt-*) ;;
+ *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+ esac
+ shift
+ done ;;
+ esac
+ func_exec_program_core \${1+\"\$@\"}
+}
+
+ # Parse options
+ func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+ done
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+ # special case for '.'
+ if test \"\$thisdir\" = \".\"; then
+ thisdir=\`pwd\`
+ fi
+ # remove .libs from thisdir
+ case \"\$thisdir\" in
+ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+ $objdir ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test yes = "$fast_install"; then
+ $ECHO "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" ||
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $MKDIR \"\$progdir\"
+ else
+ $RM \"\$progdir/\$file\"
+ fi"
+
+ $ECHO "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ \$ECHO \"\$relink_command_output\" >&2
+ $RM \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $RM \"\$progdir/\$program\";
+ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $RM \"\$progdir/\$file\"
+ fi"
+ else
+ $ECHO "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $ECHO "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # fixup the dll searchpath if we need to.
+ #
+ # Fix the DLL searchpath if we need to. Do this before prepending
+ # to shlibpath, because on Windows, both are PATH and uninstalled
+ # libraries must come first.
+ if test -n "$dllsearchpath"; then
+ $ECHO "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ # Export our shlibpath_var if we have one.
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $ECHO "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ $ECHO "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+ func_exec_program \${1+\"\$@\"}
+ fi
+ else
+ # The program doesn't exist.
+ \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+ \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+ cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+*/
+EOF
+ cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+# include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat _stat
+# define chmod _chmod
+# define getcwd _getcwd
+# define putenv _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+ defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+# define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+# define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+ cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+ if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ func_to_host_path "$temp_rpath"
+ cat <<EOF
+const char * LIB_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * LIB_PATH_VALUE = "";
+EOF
+ fi
+
+ if test -n "$dllsearchpath"; then
+ func_to_host_path "$dllsearchpath:"
+ cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE = "$func_to_host_path_result";
+EOF
+ else
+ cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE = "";
+EOF
+ fi
+
+ if test yes = "$fast_install"; then
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+ else
+ cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+ fi
+
+
+ cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int newargc;
+ char *tmp_pathspec;
+ char *actual_cwrapper_path;
+ char *actual_cwrapper_name;
+ char *target_name;
+ char *lt_argv_zero;
+ int rval = 127;
+
+ int i;
+
+ program_name = (char *) xstrdup (base_name (argv[0]));
+ newargz = XMALLOC (char *, (size_t) argc + 1);
+
+ /* very simple arg parsing; don't want to rely on getopt
+ * also, copy all non cwrapper options to newargz, except
+ * argz[0], which is handled differently
+ */
+ newargc=0;
+ for (i = 1; i < argc; i++)
+ {
+ if (STREQ (argv[i], dumpscript_opt))
+ {
+EOF
+ case $host in
+ *mingw* | *cygwin* )
+ # make stdout use "unix" line endings
+ echo " setmode(1,_O_BINARY);"
+ ;;
+ esac
+
+ cat <<"EOF"
+ lt_dump_script (stdout);
+ return 0;
+ }
+ if (STREQ (argv[i], debug_opt))
+ {
+ lt_debug = 1;
+ continue;
+ }
+ if (STREQ (argv[i], ltwrapper_option_prefix))
+ {
+ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+ namespace, but it is not one of the ones we know about and
+ have already dealt with, above (inluding dump-script), then
+ report an error. Otherwise, targets might begin to believe
+ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+ namespace. The first time any user complains about this, we'll
+ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+ or a configure.ac-settable value.
+ */
+ lt_fatal (__FILE__, __LINE__,
+ "unrecognized %s option: '%s'",
+ ltwrapper_option_prefix, argv[i]);
+ }
+ /* otherwise ... */
+ newargz[++newargc] = xstrdup (argv[i]);
+ }
+ newargz[++newargc] = NULL;
+
+EOF
+ cat <<EOF
+ /* The GNU banner must be the first non-error debug message */
+ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+ cat <<"EOF"
+ lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+ tmp_pathspec = find_executable (argv[0]);
+ if (tmp_pathspec == NULL)
+ lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (before symlink chase) at: %s\n",
+ tmp_pathspec);
+
+ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) found exe (after symlink chase) at: %s\n",
+ actual_cwrapper_path);
+ XFREE (tmp_pathspec);
+
+ actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+ strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+ /* wrapper name transforms */
+ strendzap (actual_cwrapper_name, ".exe");
+ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+ XFREE (actual_cwrapper_name);
+ actual_cwrapper_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ /* target_name transforms -- use actual target program name; might have lt- prefix */
+ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+ strendzap (target_name, ".exe");
+ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+ XFREE (target_name);
+ target_name = tmp_pathspec;
+ tmp_pathspec = 0;
+
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) libtool target name: %s\n",
+ target_name);
+EOF
+
+ cat <<EOF
+ newargz[0] =
+ XMALLOC (char, (strlen (actual_cwrapper_path) +
+ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+ strcpy (newargz[0], actual_cwrapper_path);
+ strcat (newargz[0], "$objdir");
+ strcat (newargz[0], "/");
+EOF
+
+ cat <<"EOF"
+ /* stop here, and copy so we don't have to do this twice */
+ tmp_pathspec = xstrdup (newargz[0]);
+
+ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+ strcat (newargz[0], actual_cwrapper_name);
+
+ /* DO want the lt- prefix here if it exists, so use target_name */
+ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+ XFREE (tmp_pathspec);
+ tmp_pathspec = NULL;
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ {
+ char* p;
+ while ((p = strchr (newargz[0], '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+ {
+ *p = '/';
+ }
+ }
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+ XFREE (target_name);
+ XFREE (actual_cwrapper_path);
+ XFREE (actual_cwrapper_name);
+
+ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
+ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must
+ be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+ because on Windows, both *_VARNAMEs are PATH but uninstalled
+ libraries must come first. */
+ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+ lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+ nonnull (lt_argv_zero));
+ for (i = 0; i < newargc; i++)
+ {
+ lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+ i, nonnull (newargz[i]));
+ }
+
+EOF
+
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+ /* execv doesn't actually work on mingw as expected on unix */
+ newargz = prepare_spawn (newargz);
+ rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+ if (rval == -1)
+ {
+ /* failed to start process */
+ lt_debugprintf (__FILE__, __LINE__,
+ "(main) failed to launch target \"%s\": %s\n",
+ lt_argv_zero, nonnull (strerror (errno)));
+ return 127;
+ }
+ return rval;
+EOF
+ ;;
+ *)
+ cat <<"EOF"
+ execv (lt_argv_zero, newargz);
+ return rval; /* =127, but avoids unused variable warning */
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void *p = (void *) malloc (num);
+ if (!p)
+ lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+ string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+ const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return base;
+}
+
+int
+check_executable (const char *path)
+{
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if ((stat (path, &st) >= 0)
+ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+ return 1;
+ else
+ return 0;
+}
+
+int
+make_executable (const char *path)
+{
+ int rval = 0;
+ struct stat st;
+
+ lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+ nonempty (path));
+ if ((!path) || (!*path))
+ return 0;
+
+ if (stat (path, &st) >= 0)
+ {
+ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+ }
+ return rval;
+}
+
+/* Searches for the full path of the wrapper. Returns
+ newly allocated full path name if found, NULL otherwise
+ Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+ int has_slash = 0;
+ const char *p;
+ const char *p_next;
+ /* static buffer for getcwd */
+ char tmp[LT_PATHMAX + 1];
+ size_t tmp_len;
+ char *concat_name;
+
+ lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+ nonempty (wrapper));
+
+ if ((wrapper == NULL) || (*wrapper == '\0'))
+ return NULL;
+
+ /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ else
+ {
+#endif
+ if (IS_DIR_SEPARATOR (wrapper[0]))
+ {
+ concat_name = xstrdup (wrapper);
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+ }
+#endif
+
+ for (p = wrapper; *p; p++)
+ if (*p == '/')
+ {
+ has_slash = 1;
+ break;
+ }
+ if (!has_slash)
+ {
+ /* no slashes; search PATH */
+ const char *path = getenv ("PATH");
+ if (path != NULL)
+ {
+ for (p = path; *p; p = p_next)
+ {
+ const char *q;
+ size_t p_len;
+ for (q = p; *q; q++)
+ if (IS_PATH_SEPARATOR (*q))
+ break;
+ p_len = (size_t) (q - p);
+ p_next = (*q == '\0' ? q : q + 1);
+ if (p_len == 0)
+ {
+ /* empty path: current directory */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name =
+ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+ }
+ else
+ {
+ concat_name =
+ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, p, p_len);
+ concat_name[p_len] = '/';
+ strcpy (concat_name + p_len + 1, wrapper);
+ }
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ }
+ }
+ /* not found in PATH; assume curdir */
+ }
+ /* Relative path | not found in path: prepend cwd */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+ nonnull (strerror (errno)));
+ tmp_len = strlen (tmp);
+ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+ memcpy (concat_name, tmp, tmp_len);
+ concat_name[tmp_len] = '/';
+ strcpy (concat_name + tmp_len + 1, wrapper);
+
+ if (check_executable (concat_name))
+ return concat_name;
+ XFREE (concat_name);
+ return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+ return xstrdup (pathspec);
+#else
+ char buf[LT_PATHMAX];
+ struct stat s;
+ char *tmp_pathspec = xstrdup (pathspec);
+ char *p;
+ int has_symlinks = 0;
+ while (strlen (tmp_pathspec) && !has_symlinks)
+ {
+ lt_debugprintf (__FILE__, __LINE__,
+ "checking path component for symlinks: %s\n",
+ tmp_pathspec);
+ if (lstat (tmp_pathspec, &s) == 0)
+ {
+ if (S_ISLNK (s.st_mode) != 0)
+ {
+ has_symlinks = 1;
+ break;
+ }
+
+ /* search backwards for last DIR_SEPARATOR */
+ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ p--;
+ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+ {
+ /* no more DIR_SEPARATORS left */
+ break;
+ }
+ *p = '\0';
+ }
+ else
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "error accessing file \"%s\": %s",
+ tmp_pathspec, nonnull (strerror (errno)));
+ }
+ }
+ XFREE (tmp_pathspec);
+
+ if (!has_symlinks)
+ {
+ return xstrdup (pathspec);
+ }
+
+ tmp_pathspec = realpath (pathspec, buf);
+ if (tmp_pathspec == 0)
+ {
+ lt_fatal (__FILE__, __LINE__,
+ "could not follow symlinks for %s", pathspec);
+ }
+ return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert (str != NULL);
+ assert (pat != NULL);
+
+ len = strlen (str);
+ patlen = strlen (pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (STREQ (str, pat))
+ *str = '\0';
+ }
+ return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+ va_list args;
+ if (lt_debug)
+ {
+ (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+ va_start (args, fmt);
+ (void) vfprintf (stderr, fmt, args);
+ va_end (args);
+ }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+ int line, const char *mode,
+ const char *message, va_list ap)
+{
+ fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+ va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+ return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+ return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_setenv) setting '%s' to '%s'\n",
+ nonnull (name), nonnull (value));
+ {
+#ifdef HAVE_SETENV
+ /* always make a copy, for consistency with !HAVE_SETENV */
+ char *str = xstrdup (value);
+ setenv (name, str, 1);
+#else
+ size_t len = strlen (name) + 1 + strlen (value) + 1;
+ char *str = XMALLOC (char, len);
+ sprintf (str, "%s=%s", name, value);
+ if (putenv (str) != EXIT_SUCCESS)
+ {
+ XFREE (str);
+ }
+#endif
+ }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+ char *new_value;
+ if (orig_value && *orig_value)
+ {
+ size_t orig_value_len = strlen (orig_value);
+ size_t add_len = strlen (add);
+ new_value = XMALLOC (char, add_len + orig_value_len + 1);
+ if (to_end)
+ {
+ strcpy (new_value, orig_value);
+ strcpy (new_value + orig_value_len, add);
+ }
+ else
+ {
+ strcpy (new_value, add);
+ strcpy (new_value + add_len, orig_value);
+ }
+ }
+ else
+ {
+ new_value = xstrdup (add);
+ }
+ return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ /* some systems can't cope with a ':'-terminated path #' */
+ size_t len = strlen (new_value);
+ while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+ {
+ new_value[--len] = '\0';
+ }
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+ lt_debugprintf (__FILE__, __LINE__,
+ "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+ nonnull (name), nonnull (value));
+
+ if (name && *name && value && *value)
+ {
+ char *new_value = lt_extend_str (getenv (name), value, 0);
+ lt_setenv (name, new_value);
+ XFREE (new_value);
+ }
+}
+
+EOF
+ case $host_os in
+ mingw*)
+ cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+ Note that spawn() does not by itself call the command interpreter
+ (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+ ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&v);
+ v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+ }) ? "cmd.exe" : "command.com").
+ Instead it simply concatenates the arguments, separated by ' ', and calls
+ CreateProcess(). We must quote the arguments since Win32 CreateProcess()
+ interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+ special way:
+ - Space and tab are interpreted as delimiters. They are not treated as
+ delimiters if they are surrounded by double quotes: "...".
+ - Unescaped double quotes are removed from the input. Their only effect is
+ that within double quotes, space and tab are treated like normal
+ characters.
+ - Backslashes not followed by double quotes are not special.
+ - But 2*n+1 backslashes followed by a double quote become
+ n backslashes followed by a double quote (n >= 0):
+ \" -> "
+ \\\" -> \"
+ \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+ size_t argc;
+ char **new_argv;
+ size_t i;
+
+ /* Count number of arguments. */
+ for (argc = 0; argv[argc] != NULL; argc++)
+ ;
+
+ /* Allocate new argument vector. */
+ new_argv = XMALLOC (char *, argc + 1);
+
+ /* Put quoted arguments into the new argument vector. */
+ for (i = 0; i < argc; i++)
+ {
+ const char *string = argv[i];
+
+ if (string[0] == '\0')
+ new_argv[i] = xstrdup ("\"\"");
+ else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+ {
+ int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+ size_t length;
+ unsigned int backslashes;
+ const char *s;
+ char *quoted_string;
+ char *p;
+
+ length = 0;
+ backslashes = 0;
+ if (quote_around)
+ length++;
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ length += backslashes + 1;
+ length++;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ length += backslashes + 1;
+
+ quoted_string = XMALLOC (char, length + 1);
+
+ p = quoted_string;
+ backslashes = 0;
+ if (quote_around)
+ *p++ = '"';
+ for (s = string; *s != '\0'; s++)
+ {
+ char c = *s;
+ if (c == '"')
+ {
+ unsigned int j;
+ for (j = backslashes + 1; j > 0; j--)
+ *p++ = '\\';
+ }
+ *p++ = c;
+ if (c == '\\')
+ backslashes++;
+ else
+ backslashes = 0;
+ }
+ if (quote_around)
+ {
+ unsigned int j;
+ for (j = backslashes; j > 0; j--)
+ *p++ = '\\';
+ *p++ = '"';
+ }
+ *p = '\0';
+
+ new_argv[i] = quoted_string;
+ }
+ else
+ new_argv[i] = (char *) string;
+ }
+ new_argv[argc] = NULL;
+
+ return new_argv;
+}
+EOF
+ ;;
+ esac
+
+ cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+ func_emit_wrapper yes |
+ $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/ fputs ("\1", f);/p
+g
+D'
+ cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+ $debug_cmd
+
+ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+ *import*) : ;;
+ *) false ;;
+ esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+ $debug_cmd
+
+ case " $compile_command " in
+ *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+ suncc_use_cstd_abi=no
+ ;;
+ *)
+ suncc_use_cstd_abi=yes
+ ;;
+ esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+ $debug_cmd
+
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # what system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll that has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args=$nonopt
+ base_compile="$nonopt $@"
+ compile_command=$nonopt
+ finalize_command=$nonopt
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+ new_inherited_linker_flags=
+
+ avoid_version=no
+ bindir=
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ os2dllname=
+ non_pic_objects=
+ precious_files_regex=
+ prefer_static_libs=no
+ preload=false
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+ weak_libs=
+ single_module=$wl-single_module
+ func_infer_tag $base_compile
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -shared)
+ test yes != "$build_libtool_libs" \
+ && func_fatal_configuration "cannot build a shared library"
+ build_old_libs=no
+ break
+ ;;
+ -all-static | -static | -static-libtool-libs)
+ case $arg in
+ -all-static)
+ if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+ func_warning "complete static linking is impossible in this configuration"
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ -static)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=built
+ ;;
+ -static-libtool-libs)
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ prefer_static_libs=yes
+ ;;
+ esac
+ build_libtool_libs=no
+ build_old_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg=$1
+ shift
+ func_quote_arg pretty,unquoted "$arg"
+ qarg=$func_quote_arg_unquoted_result
+ func_append libtool_args " $func_quote_arg_result"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ func_append compile_command " @OUTPUT@"
+ func_append finalize_command " @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ bindir)
+ bindir=$arg
+ prev=
+ continue
+ ;;
+ dlfiles|dlprefiles)
+ $preload || {
+ # Add the symbol object into the linking commands.
+ func_append compile_command " @SYMFILE@"
+ func_append finalize_command " @SYMFILE@"
+ preload=:
+ }
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test no = "$dlself"; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test dlprefiles = "$prev"; then
+ dlself=yes
+ elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test dlfiles = "$prev"; then
+ func_append dlfiles " $arg"
+ else
+ func_append dlprefiles " $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols=$arg
+ test -f "$arg" \
+ || func_fatal_error "symbol file '$arg' does not exist"
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex=$arg
+ prev=
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) func_append deplibs " $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir=$arg
+ prev=
+ continue
+ ;;
+ mllvm)
+ # Clang does not use LLVM to link, so we can simply discard any
+ # '-mllvm $arg' options when doing the link step.
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat "$save_arg"`
+ do
+# func_append moreargs " $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ if test none != "$pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ fi
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ done
+ else
+ func_fatal_error "link input file '$arg' does not exist"
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ os2dllname)
+ os2dllname=$arg
+ prev=
+ continue
+ ;;
+ precious_regex)
+ precious_files_regex=$arg
+ prev=
+ continue
+ ;;
+ release)
+ release=-$arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ if test rpath = "$prev"; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) func_append rpath " $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) func_append xrpath " $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ shrext)
+ shrext_cmds=$arg
+ prev=
+ continue
+ ;;
+ weak)
+ func_append weak_libs " $arg"
+ prev=
+ continue
+ ;;
+ xassembler)
+ func_append compiler_flags " -Xassembler $qarg"
+ prev=
+ func_append compile_command " -Xassembler $qarg"
+ func_append finalize_command " -Xassembler $qarg"
+ continue
+ ;;
+ xcclinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xcompiler)
+ func_append compiler_flags " $qarg"
+ prev=
+ func_append compile_command " $qarg"
+ func_append finalize_command " $qarg"
+ continue
+ ;;
+ xlinker)
+ func_append linker_flags " $qarg"
+ func_append compiler_flags " $wl$qarg"
+ prev=
+ func_append compile_command " $wl$qarg"
+ func_append finalize_command " $wl$qarg"
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg=$arg
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ # See comment for -static flag below, for more details.
+ func_append compile_command " $link_static_flag"
+ func_append finalize_command " $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ func_fatal_error "'-allow-undefined' must not be used because it is the default"
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -bindir)
+ prev=bindir
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ func_fatal_error "more than one -exported-symbols argument is not allowed"
+ fi
+ if test X-export-symbols = "X$arg"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ func_stripname "-L" '' "$arg"
+ if test -z "$func_stripname_result"; then
+ if test "$#" -gt 0; then
+ func_fatal_error "require no space between '-L' and '$1'"
+ else
+ func_fatal_error "need path for '-L' option"
+ fi
+ fi
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+ func_fatal_error "cannot determine absolute directory name of '$dir'"
+ dir=$absdir
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "* | *" $arg "*)
+ # Will only happen for absolute or sysroot arguments
+ ;;
+ *)
+ # Preserve sysroot, but never include relative directories
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+ *) func_append deplibs " -L$dir" ;;
+ esac
+ func_append lib_search_path " $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ ::) dllsearchpath=$dir;;
+ *) func_append dllsearchpath ":$dir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ func_append deplibs " System.ltframework"
+ continue
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ test X-lc = "X$arg" && continue
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ test X-lc = "X$arg" && continue
+ ;;
+ esac
+ elif test X-lc_r = "X$arg"; then
+ case $host in
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ func_append deplibs " $arg"
+ continue
+ ;;
+
+ -mllvm)
+ prev=mllvm
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # Tru64 UNIX uses -model [arg] to determine the layout of C++
+ # classes, name mangling, and exception handling.
+ # Darwin uses the -arch flag to determine output architecture.
+ -model|-arch|-isysroot|--sysroot)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ prev=xcompiler
+ continue
+ ;;
+ # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
+ -pthread)
+ case $host in
+ *solaris2*) ;;
+ *)
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+ -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ func_append compiler_flags " $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ continue
+ ;;
+
+ -multi_module)
+ single_module=$wl-multi_module
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # and Darwin in order for the loader to find any dlls it needs.
+ func_warning "'-no-install' is ignored for $host"
+ func_warning "assuming '-no-fast-install' instead"
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -os2dllname)
+ prev=os2dllname
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -precious-files-regex)
+ prev=precious_regex
+ continue
+ ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ func_stripname '-R' '' "$arg"
+ dir=$func_stripname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ =*)
+ func_stripname '=' '' "$dir"
+ dir=$lt_sysroot$func_stripname_result
+ ;;
+ *)
+ func_fatal_error "only absolute run-paths are allowed"
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ continue
+ ;;
+
+ -shared)
+ # The effects of -shared are defined in a previous loop.
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -static | -static-libtool-libs)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -weak)
+ prev=weak
+ continue
+ ;;
+
+ -Wc,*)
+ func_stripname '-Wc,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_arg pretty "$flag"
+ func_append arg " $func_quote_arg_result"
+ func_append compiler_flags " $func_quote_arg_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Wl,*)
+ func_stripname '-Wl,' '' "$arg"
+ args=$func_stripname_result
+ arg=
+ save_ifs=$IFS; IFS=,
+ for flag in $args; do
+ IFS=$save_ifs
+ func_quote_arg pretty "$flag"
+ func_append arg " $wl$func_quote_arg_result"
+ func_append compiler_flags " $wl$func_quote_arg_result"
+ func_append linker_flags " $func_quote_arg_result"
+ done
+ IFS=$save_ifs
+ func_stripname ' ' '' "$arg"
+ arg=$func_stripname_result
+ ;;
+
+ -Xassembler)
+ prev=xassembler
+ continue
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ # -msg_* for osf cc
+ -msg_*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+
+ # Flags to be passed through unchanged, with rationale:
+ # -64, -mips[0-9] enable 64-bit mode for the SGI compiler
+ # -r[0-9][0-9]* specify processor for the SGI compiler
+ # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+ # +DA*, +DD* enable 64-bit mode for the HP compiler
+ # -q* compiler args for the IBM compiler
+ # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+ # -F/path path to uninstalled frameworks, gcc on darwin
+ # -p, -pg, --coverage, -fprofile-* profiling flags for GCC
+ # -fstack-protector* stack protector flags for GCC
+ # @file GCC response files
+ # -tp=* Portland pgcc target processor selection
+ # --sysroot=* for sysroot support
+ # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+ # -specs=* GCC specs files
+ # -stdlib=* select c++ std lib with clang
+ # -fsanitize=* Clang/GCC memory and address sanitizer
+ # -fuse-ld=* Linker select flags for GCC
+ # -Wa,* Pass flags directly to the assembler
+ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+ -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ func_append compiler_flags " $arg"
+ continue
+ ;;
+
+ -Z*)
+ if test os2 = "`expr $host : '.*\(os2\)'`"; then
+ # OS/2 uses -Zxxx to specify OS/2-specific options
+ compiler_flags="$compiler_flags $arg"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ case $arg in
+ -Zlinker | -Zstack)
+ prev=xcompiler
+ ;;
+ esac
+ continue
+ else
+ # Otherwise treat like 'Some other compiler flag' below
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ fi
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+
+ *.$objext)
+ # A standard object.
+ func_append objs " $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if func_lalib_unsafe_p "$arg"; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ func_source "$arg"
+
+ if test -z "$pic_object" ||
+ test -z "$non_pic_object" ||
+ test none = "$pic_object" &&
+ test none = "$non_pic_object"; then
+ func_fatal_error "cannot find name of object for '$arg'"
+ fi
+
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ test none = "$pic_object" || {
+ # Prepend the subdirectory the object is found in.
+ pic_object=$xdir$pic_object
+
+ if test dlfiles = "$prev"; then
+ if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+ func_append dlfiles " $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test dlprefiles = "$prev"; then
+ # Preload the old-style object.
+ func_append dlprefiles " $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ func_append libobjs " $pic_object"
+ arg=$pic_object
+ }
+
+ # Non-PIC object.
+ if test none != "$non_pic_object"; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object=$xdir$non_pic_object
+
+ # A standard non-PIC object
+ func_append non_pic_objects " $non_pic_object"
+ if test -z "$pic_object" || test none = "$pic_object"; then
+ arg=$non_pic_object
+ fi
+ else
+ # If the PIC object exists, use it instead.
+ # $xdir was prepended to $pic_object above.
+ non_pic_object=$pic_object
+ func_append non_pic_objects " $non_pic_object"
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if $opt_dry_run; then
+ # Extract subdirectory from the argument.
+ func_dirname "$arg" "/" ""
+ xdir=$func_dirname_result
+
+ func_lo2o "$arg"
+ pic_object=$xdir$objdir/$func_lo2o_result
+ non_pic_object=$xdir$func_lo2o_result
+ func_append libobjs " $pic_object"
+ func_append non_pic_objects " $non_pic_object"
+ else
+ func_fatal_error "'$arg' is not a valid libtool object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ func_append deplibs " $arg"
+ func_append old_deplibs " $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ func_resolve_sysroot "$arg"
+ if test dlfiles = "$prev"; then
+ # This library was specified with -dlopen.
+ func_append dlfiles " $func_resolve_sysroot_result"
+ prev=
+ elif test dlprefiles = "$prev"; then
+ # The library was specified with -dlpreopen.
+ func_append dlprefiles " $func_resolve_sysroot_result"
+ prev=
+ else
+ func_append deplibs " $func_resolve_sysroot_result"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+ done # argument parsing loop
+
+ test -n "$prev" && \
+ func_fatal_help "the '$prevarg' option requires an argument"
+
+ if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ func_append compile_command " $arg"
+ func_append finalize_command " $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ func_basename "$output"
+ outputname=$func_basename_result
+ libobjs_save=$libobjs
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ # Definition is injected by LT_CONFIG during libtool generation.
+ func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+ func_dirname "$output" "/" ""
+ output_objdir=$func_dirname_result$objdir
+ func_to_tool_file "$output_objdir/"
+ tool_output_objdir=$func_to_tool_file_result
+ # Create the object directory.
+ func_mkdir_p "$output_objdir"
+
+ # Determine the type of output
+ case $output in
+ "")
+ func_fatal_help "you must specify an output file"
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if $opt_preserve_dup_deps; then
+ case "$libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append libs " $deplib"
+ done
+
+ if test lib = "$linkmode"; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if $opt_duplicate_compiler_generated_deps; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+ esac
+ func_append pre_post_deps " $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+
+ case $linkmode in
+ lib)
+ passes="conv dlpreopen link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=false
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+
+ for pass in $passes; do
+ # The preopen pass in lib mode reverses $deplibs; put it back here
+ # so that -L comes before libs that need it for instance...
+ if test lib,link = "$linkmode,$pass"; then
+ ## FIXME: Find the place where the list is rebuilt in the wrong
+ ## order, and fix it there properly
+ tmp_deplibs=
+ for deplib in $deplibs; do
+ tmp_deplibs="$deplib $tmp_deplibs"
+ done
+ deplibs=$tmp_deplibs
+ fi
+
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass"; then
+ libs=$deplibs
+ deplibs=
+ fi
+ if test prog = "$linkmode"; then
+ case $pass in
+ dlopen) libs=$dlfiles ;;
+ dlpreopen) libs=$dlprefiles ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test lib,dlpreopen = "$linkmode,$pass"; then
+ # Collect and forward deplibs of preopened libtool libs
+ for lib in $dlprefiles; do
+ # Ignore non-libtool-libs
+ dependency_libs=
+ func_resolve_sysroot "$lib"
+ case $lib in
+ *.la) func_source "$func_resolve_sysroot_result" ;;
+ esac
+
+ # Collect preopened libtool deplibs, except any this library
+ # has declared as weak libs
+ for deplib in $dependency_libs; do
+ func_basename "$deplib"
+ deplib_base=$func_basename_result
+ case " $weak_libs " in
+ *" $deplib_base "*) ;;
+ *) func_append deplibs " $deplib" ;;
+ esac
+ done
+ done
+ libs=$dlprefiles
+ fi
+ if test dlopen = "$pass"; then
+ # Collect dlpreopened libraries
+ save_deplibs=$deplibs
+ deplibs=
+ fi
+
+ for deplib in $libs; do
+ lib=
+ found=false
+ case $deplib in
+ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append compiler_flags " $deplib"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -l*)
+ if test lib != "$linkmode" && test prog != "$linkmode"; then
+ func_warning "'-l' is ignored for archives/objects"
+ continue
+ fi
+ func_stripname '-l' '' "$deplib"
+ name=$func_stripname_result
+ if test lib = "$linkmode"; then
+ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+ else
+ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+ fi
+ for searchdir in $searchdirs; do
+ for search_ext in .la $std_shrext .so .a; do
+ # Search the libtool library
+ lib=$searchdir/lib$name$search_ext
+ if test -f "$lib"; then
+ if test .la = "$search_ext"; then
+ found=:
+ else
+ found=false
+ fi
+ break 2
+ fi
+ done
+ done
+ if $found; then
+ # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if func_lalib_p "$lib"; then
+ library_names=
+ old_library=
+ func_source "$lib"
+ for l in $old_library $library_names; do
+ ll=$l
+ done
+ if test "X$ll" = "X$old_library"; then # only static version available
+ found=false
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+ lib=$ladir/$old_library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ else
+ # deplib doesn't seem to be a libtool library
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ *.ltframework)
+ if test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test lib = "$linkmode"; then
+ case "$new_inherited_linker_flags " in
+ *" $deplib "*) ;;
+ * ) func_append new_inherited_linker_flags " $deplib" ;;
+ esac
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test conv = "$pass" && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ prog)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test scan = "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ *)
+ func_warning "'-L' is ignored for archives/objects"
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test link = "$pass"; then
+ func_stripname '-R' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ dir=$func_resolve_sysroot_result
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) func_append xrpath " $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ lib=$func_resolve_sysroot_result
+ ;;
+ *.$libext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ # Linking convenience modules into shared libraries is allowed,
+ # but linking other static libraries is non-portable.
+ case " $dlpreconveniencelibs " in
+ *" $deplib "*) ;;
+ *)
+ valid_a_lib=false
+ case $deplibs_check_method in
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ valid_a_lib=:
+ fi
+ ;;
+ pass_all)
+ valid_a_lib=:
+ ;;
+ esac
+ if $valid_a_lib; then
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the"
+ $ECHO "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ else
+ echo
+ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because the file extensions .$libext of this argument makes me believe"
+ echo "*** that it is just a static archive that I should not use here."
+ fi
+ ;;
+ esac
+ continue
+ ;;
+ prog)
+ if test link != "$pass"; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test conv = "$pass"; then
+ deplibs="$deplib $deplibs"
+ elif test prog = "$linkmode"; then
+ if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ func_append newdlprefiles " $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ func_append newdlfiles " $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=:
+ continue
+ ;;
+ esac # case $deplib
+
+ $found || test -f "$lib" \
+ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+ # Check to see that this really is a libtool archive.
+ func_lalib_unsafe_p "$lib" \
+ || func_fatal_error "'$lib' is not a valid libtool archive"
+
+ func_dirname "$lib" "" "."
+ ladir=$func_dirname_result
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ inherited_linker_flags=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+ avoidtemprpath=
+
+
+ # Read the .la file
+ func_source "$lib"
+
+ # Convert "-framework foo" to "foo.ltframework"
+ if test -n "$inherited_linker_flags"; then
+ tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+ case " $new_inherited_linker_flags " in
+ *" $tmp_inherited_linker_flag "*) ;;
+ *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+ esac
+ done
+ fi
+ dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ if test lib,link = "$linkmode,$pass" ||
+ test prog,scan = "$linkmode,$pass" ||
+ { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+ test -n "$dlopen" && func_append dlfiles " $dlopen"
+ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+ fi
+
+ if test conv = "$pass"; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ func_append convenience " $ladir/$objdir/$old_library"
+ func_append old_convenience " $ladir/$objdir/$old_library"
+ elif test prog != "$linkmode" && test lib != "$linkmode"; then
+ func_fatal_error "'$lib' is not a convenience library"
+ fi
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ if test -n "$old_library" &&
+ { test yes = "$prefer_static_libs" ||
+ test built,no = "$prefer_static_libs,$installed"; }; then
+ linklib=$old_library
+ else
+ for l in $old_library $library_names; do
+ linklib=$l
+ done
+ fi
+ if test -z "$linklib"; then
+ func_fatal_error "cannot find name of link library for '$lib'"
+ fi
+
+ # This library was specified with -dlopen.
+ if test dlopen = "$pass"; then
+ test -z "$libdir" \
+ && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+ if test -z "$dlname" ||
+ test yes != "$dlopen_support" ||
+ test no = "$build_libtool_libs"
+ then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ func_append dlprefiles " $lib $dependency_libs"
+ else
+ func_append newdlfiles " $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ func_warning "cannot determine absolute directory name of '$ladir'"
+ func_warning "passing it literally to the linker, although it might fail"
+ abs_ladir=$ladir
+ fi
+ ;;
+ esac
+ func_basename "$lib"
+ laname=$func_basename_result
+
+ # Find the relevant object directory and library name.
+ if test yes = "$installed"; then
+ if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ func_warning "library '$lib' was moved."
+ dir=$ladir
+ absdir=$abs_ladir
+ libdir=$abs_ladir
+ else
+ dir=$lt_sysroot$libdir
+ absdir=$lt_sysroot$libdir
+ fi
+ test yes = "$hardcode_automatic" && avoidtemprpath=yes
+ else
+ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ dir=$ladir
+ absdir=$abs_ladir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ else
+ dir=$ladir/$objdir
+ absdir=$abs_ladir/$objdir
+ # Remove this search path later
+ func_append notinst_path " $abs_ladir"
+ fi
+ fi # $installed = yes
+ func_stripname 'lib' '.la' "$laname"
+ name=$func_stripname_result
+
+ # This library was specified with -dlpreopen.
+ if test dlpreopen = "$pass"; then
+ if test -z "$libdir" && test prog = "$linkmode"; then
+ func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+ fi
+ case $host in
+ # special handling for platforms with PE-DLLs.
+ *cygwin* | *mingw* | *cegcc* )
+ # Linker will automatically link against shared library if both
+ # static and shared are present. Therefore, ensure we extract
+ # symbols from the import library if a shared library is present
+ # (otherwise, the dlopen module name will be incorrect). We do
+ # this by putting the import library name into $newdlprefiles.
+ # We recover the dlopen module name by 'saving' the la file
+ # name in a special purpose variable, and (later) extracting the
+ # dlname from the la file.
+ if test -n "$dlname"; then
+ func_tr_sh "$dir/$linklib"
+ eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+ func_append newdlprefiles " $dir/$linklib"
+ else
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ fi
+ ;;
+ * )
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ func_append newdlprefiles " $dir/$old_library"
+ # Keep a list of preopened convenience libraries to check
+ # that they are being used correctly in the link pass.
+ test -z "$libdir" && \
+ func_append dlpreconveniencelibs " $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ func_append newdlprefiles " $dir/$dlname"
+ else
+ func_append newdlprefiles " $dir/$linklib"
+ fi
+ ;;
+ esac
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test lib = "$linkmode"; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test prog,link = "$linkmode,$pass"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test prog = "$linkmode" && test link != "$pass"; then
+ func_append newlib_search_path " $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=false
+ if test no != "$link_all_deplibs" || test -z "$library_names" ||
+ test no = "$build_libtool_libs"; then
+ linkalldeplibs=:
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result"
+ func_append newlib_search_path " $func_resolve_sysroot_result"
+ ;;
+ esac
+ # Need to link against all dependency_libs?
+ if $linkalldeplibs; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+ esac
+ fi
+ func_append tmp_libs " $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test prog,link = "$linkmode,$pass"; then
+ if test -n "$library_names" &&
+ { { test no = "$prefer_static_libs" ||
+ test built,yes = "$prefer_static_libs,$installed"; } ||
+ test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+ # Make sure the rpath contains only unique directories.
+ case $temp_rpath: in
+ *"$absdir:"*) ;;
+ *) func_append temp_rpath "$absdir:" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if $alldeplibs &&
+ { test pass_all = "$deplibs_check_method" ||
+ { test yes = "$build_libtool_libs" &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ use_static_libs=$prefer_static_libs
+ if test built = "$use_static_libs" && test yes = "$installed"; then
+ use_static_libs=no
+ fi
+ if test -n "$library_names" &&
+ { test no = "$use_static_libs" || test -z "$old_library"; }; then
+ case $host in
+ *cygwin* | *mingw* | *cegcc* | *os2*)
+ # No point in relinking DLLs because paths are not encoded
+ func_append notinst_deplibs " $lib"
+ need_relink=no
+ ;;
+ *)
+ if test no = "$installed"; then
+ func_append notinst_deplibs " $lib"
+ need_relink=yes
+ fi
+ ;;
+ esac
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some
+ # systems (darwin). Don't bleat about dlopened modules though!
+ dlopenmodule=
+ for dlpremoduletest in $dlprefiles; do
+ if test "X$dlpremoduletest" = "X$lib"; then
+ dlopenmodule=$dlpremoduletest
+ break
+ fi
+ done
+ if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+ echo
+ if test prog = "$linkmode"; then
+ $ECHO "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+ test yes = "$hardcode_into_libs"; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) func_append compile_rpath " $absdir" ;;
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname=$dlname
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw* | *cegcc* | *os2*)
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot=$soname
+ func_basename "$soroot"
+ soname=$func_basename_result
+ func_stripname 'lib' '.dll' "$soname"
+ newlib=libimp-$func_stripname_result.a
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ func_verbose "extracting exported symbol list from '$soname'"
+ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ func_verbose "generating import library for '$soname'"
+ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test prog = "$linkmode" || test relink != "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test no = "$hardcode_direct"; then
+ add=$dir/$linklib
+ case $host in
+ *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+ *-*-sysv4*uw2*) add_dir=-L$dir ;;
+ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+ *-*-unixware7*) add_dir=-L$dir ;;
+ *-*-darwin* )
+ # if the lib is a (non-dlopened) module then we cannot
+ # link against it, someone is ignoring the earlier warnings
+ if /usr/bin/file -L $add 2> /dev/null |
+ $GREP ": [^:]* bundle" >/dev/null; then
+ if test "X$dlopenmodule" != "X$lib"; then
+ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+ if test -z "$old_library"; then
+ echo
+ echo "*** And there doesn't seem to be a static archive available"
+ echo "*** The link will probably fail, sorry"
+ else
+ add=$dir/$old_library
+ fi
+ elif test -n "$old_library"; then
+ add=$dir/$old_library
+ fi
+ fi
+ esac
+ elif test no = "$hardcode_minus_L"; then
+ case $host in
+ *-*-sunos*) add_shlibpath=$dir ;;
+ esac
+ add_dir=-L$dir
+ add=-l$name
+ elif test no = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$dir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$absdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ add_shlibpath=$dir
+ add=-l$name
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test yes != "$lib_linked"; then
+ func_fatal_configuration "unsupported hardcode properties"
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) func_append compile_shlibpath "$add_shlibpath:" ;;
+ esac
+ fi
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test yes != "$hardcode_direct" &&
+ test yes != "$hardcode_minus_L" &&
+ test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test prog = "$linkmode" || test relink = "$opt_mode"; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test yes = "$hardcode_direct" &&
+ test no = "$hardcode_direct_absolute"; then
+ add=$libdir/$linklib
+ elif test yes = "$hardcode_minus_L"; then
+ add_dir=-L$libdir
+ add=-l$name
+ elif test yes = "$hardcode_shlibpath_var"; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) func_append finalize_shlibpath "$libdir:" ;;
+ esac
+ add=-l$name
+ elif test yes = "$hardcode_automatic"; then
+ if test -n "$inst_prefix_dir" &&
+ test -f "$inst_prefix_dir$libdir/$linklib"; then
+ add=$inst_prefix_dir$libdir/$linklib
+ else
+ add=$libdir/$linklib
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir=-L$libdir
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case $libdir in
+ [\\/]*)
+ func_append add_dir " -L$inst_prefix_dir$libdir"
+ ;;
+ esac
+ fi
+ add=-l$name
+ fi
+
+ if test prog = "$linkmode"; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test prog = "$linkmode"; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test unsupported != "$hardcode_direct"; then
+ test -n "$old_library" && linklib=$old_library
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test yes = "$build_libtool_libs"; then
+ # Not a shared library
+ if test pass_all != "$deplibs_check_method"; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test yes = "$module"; then
+ echo "*** But as you try to build a module library, libtool will still create "
+ echo "*** a static module, that should work as long as the dlopening application"
+ echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+ { test yes != "$hardcode_into_libs" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) func_stripname '-R' '' "$libdir"
+ temp_xrpath=$func_stripname_result
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) func_append xrpath " $temp_xrpath";;
+ esac;;
+ *) func_append temp_deplibs " $libdir";;
+ esac
+ done
+ dependency_libs=$temp_deplibs
+ fi
+
+ func_append newlib_search_path " $absdir"
+ # Link against this library
+ test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case $deplib in
+ -L*) func_stripname '-L' '' "$deplib"
+ func_resolve_sysroot "$func_stripname_result";;
+ *) func_resolve_sysroot "$deplib" ;;
+ esac
+ if $opt_preserve_dup_deps; then
+ case "$tmp_libs " in
+ *" $func_resolve_sysroot_result "*)
+ func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+ esac
+ fi
+ func_append tmp_libs " $func_resolve_sysroot_result"
+ done
+
+ if test no != "$link_all_deplibs"; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ path=
+ case $deplib in
+ -L*) path=$deplib ;;
+ *.la)
+ func_resolve_sysroot "$deplib"
+ deplib=$func_resolve_sysroot_result
+ func_dirname "$deplib" "" "."
+ dir=$func_dirname_result
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ func_warning "cannot determine absolute directory name of '$dir'"
+ absdir=$dir
+ fi
+ ;;
+ esac
+ if $GREP "^installed=no" $deplib > /dev/null; then
+ case $host in
+ *-*-darwin*)
+ depdepl=
+ eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names"; then
+ for tmp in $deplibrary_names; do
+ depdepl=$tmp
+ done
+ if test -f "$absdir/$objdir/$depdepl"; then
+ depdepl=$absdir/$objdir/$depdepl
+ darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ if test -z "$darwin_install_name"; then
+ darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+ fi
+ func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+ func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+ path=
+ fi
+ fi
+ ;;
+ *)
+ path=-L$absdir/$objdir
+ ;;
+ esac
+ else
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ test "$absdir" != "$libdir" && \
+ func_warning "'$deplib' seems to be moved"
+
+ path=-L$absdir
+ fi
+ ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$path $deplibs" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test link = "$pass"; then
+ if test prog = "$linkmode"; then
+ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+ else
+ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ fi
+ fi
+ dependency_libs=$newdependency_libs
+ if test dlpreopen = "$pass"; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test dlopen != "$pass"; then
+ test conv = "$pass" || {
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) func_append lib_search_path " $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ }
+
+ if test prog,link = "$linkmode,$pass"; then
+ vars="compile_deplibs finalize_deplibs"
+ else
+ vars=deplibs
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append tmp_libs " $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+
+ # Add Sun CC postdeps if required:
+ test CXX = "$tagname" && {
+ case $host_os in
+ linux*)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C++ 5.9
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ func_cc_basename "$CC"
+ case $func_cc_basename_result in
+ CC* | sunCC*)
+ func_suncc_cstd_abi
+
+ if test no != "$suncc_use_cstd_abi"; then
+ func_append postdeps ' -library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ }
+
+ # Last step: remove runtime libs from dependency_libs
+ # (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=
+ ;;
+ esac
+ if test -n "$i"; then
+ func_append tmp_libs " $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test prog = "$linkmode"; then
+ dlfiles=$newdlfiles
+ fi
+ if test prog = "$linkmode" || test lib = "$linkmode"; then
+ dlprefiles=$newdlprefiles
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for archives"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for archives" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for archives"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for archives"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for archives"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for archives"
+
+ test -n "$export_symbols$export_symbols_regex" && \
+ func_warning "'-export-symbols' is ignored for archives"
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs=$output
+ func_append objs "$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form 'libNAME.la'.
+ case $outputname in
+ lib*)
+ func_stripname 'lib' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ test no = "$module" \
+ && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+ if test no != "$need_lib_prefix"; then
+ # Add the "lib" prefix for modules if required
+ func_stripname '' '.la' "$outputname"
+ name=$func_stripname_result
+ eval shared_ext=\"$shrext_cmds\"
+ eval libname=\"$libname_spec\"
+ else
+ func_stripname '' '.la' "$outputname"
+ libname=$func_stripname_result
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test pass_all != "$deplibs_check_method"; then
+ func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+ else
+ echo
+ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+ $ECHO "*** objects $objs is not portable!"
+ func_append libobjs " $objs"
+ fi
+ fi
+
+ test no = "$dlself" \
+ || func_warning "'-dlopen self' is ignored for libtool libraries"
+
+ set dummy $rpath
+ shift
+ test 1 -lt "$#" \
+ && func_warning "ignoring multiple '-rpath's for a libtool library"
+
+ install_libdir=$1
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test yes = "$build_libtool_libs"; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a '.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for convenience libraries"
+ else
+
+ # Parse the version information argument.
+ save_ifs=$IFS; IFS=:
+ set dummy $vinfo 0 0 0
+ shift
+ IFS=$save_ifs
+
+ test -n "$7" && \
+ func_fatal_help "too many parameters to '-version-info'"
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major=$1
+ number_minor=$2
+ number_revision=$3
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # that has an extra 1 added just for fun
+ #
+ case $version_type in
+ # correct linux to gnu/linux during the next big refactor
+ darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_revision
+ ;;
+ freebsd-aout|qnx|sunos)
+ current=$number_major
+ revision=$number_minor
+ age=0
+ ;;
+ irix|nonstopux)
+ func_arith $number_major + $number_minor
+ current=$func_arith_result
+ age=$number_minor
+ revision=$number_minor
+ lt_irix_increment=no
+ ;;
+ esac
+ ;;
+ no)
+ current=$1
+ revision=$2
+ age=$3
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "CURRENT '$current' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $revision in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "REVISION '$revision' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ case $age in
+ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+ *)
+ func_error "AGE '$age' must be a nonnegative integer"
+ func_fatal_error "'$vinfo' is not valid version information"
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ func_error "AGE '$age' is greater than the current interface number '$current'"
+ func_fatal_error "'$vinfo' is not valid version information"
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ # Darwin ld doesn't like 0 for these options...
+ func_arith $current + 1
+ minor_current=$func_arith_result
+ xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ # On Darwin other compilers
+ case $CC in
+ nagfor*)
+ verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+ ;;
+ *)
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+ esac
+ ;;
+
+ freebsd-aout)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ freebsd-elf | midnightbsd-elf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ irix | nonstopux)
+ if test no = "$lt_irix_increment"; then
+ func_arith $current - $age
+ else
+ func_arith $current - $age + 1
+ fi
+ major=$func_arith_result
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring=$verstring_prefix$major.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test 0 -ne "$loop"; do
+ func_arith $revision - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring_prefix$major.$iface:$verstring
+ done
+
+ # Before this point, $major must not contain '.'.
+ major=.$major
+ versuffix=$major.$revision
+ ;;
+
+ linux) # correct to gnu/linux during the next big refactor
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=$major.$age.$revision
+ ;;
+
+ osf)
+ func_arith $current - $age
+ major=.$func_arith_result
+ versuffix=.$current.$age.$revision
+ verstring=$current.$age.$revision
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test 0 -ne "$loop"; do
+ func_arith $current - $loop
+ iface=$func_arith_result
+ func_arith $loop - 1
+ loop=$func_arith_result
+ verstring=$verstring:$iface.0
+ done
+
+ # Make executables depend on our current version.
+ func_append verstring ":$current.0"
+ ;;
+
+ qnx)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sco)
+ major=.$current
+ versuffix=.$current
+ ;;
+
+ sunos)
+ major=.$current
+ versuffix=.$current.$revision
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 file systems.
+ func_arith $current - $age
+ major=$func_arith_result
+ versuffix=-$major
+ ;;
+
+ *)
+ func_fatal_configuration "unknown library version type '$version_type'"
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring=0.0
+ ;;
+ esac
+ if test no = "$need_version"; then
+ versuffix=
+ else
+ versuffix=.0.0
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test yes,no = "$avoid_version,$need_version"; then
+ major=
+ versuffix=
+ verstring=
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test yes = "$allow_undefined"; then
+ if test unsupported = "$allow_undefined_flag"; then
+ if test yes = "$build_old_libs"; then
+ func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+ build_libtool_libs=no
+ else
+ func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+ fi
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag=$no_undefined_flag
+ fi
+
+ fi
+
+ func_generate_dlsyms "$libname" "$libname" :
+ func_append libobjs " $symfileobj"
+ test " " = "$libobjs" && libobjs=
+
+ if test relink != "$opt_mode"; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$ECHO "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext | *.gcno)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+ if test -n "$precious_files_regex"; then
+ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+ then
+ continue
+ fi
+ fi
+ func_append removelist " $p"
+ ;;
+ *) ;;
+ esac
+ done
+ test -n "$removelist" && \
+ func_show_eval "${RM}r \$removelist"
+ fi
+
+ # Now set the variables for building old libraries.
+ if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+ func_append oldlibs " $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ #for path in $notinst_path; do
+ # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+ # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+ # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+ #done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ func_replace_sysroot "$libdir"
+ func_append temp_xrpath " -R$func_replace_sysroot_result"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles=$dlfiles
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) func_append dlfiles " $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles=$dlprefiles
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) func_append dlprefiles " $lib" ;;
+ esac
+ done
+
+ if test yes = "$build_libtool_libs"; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ func_append deplibs " System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *-*-sco3.2v5* | *-*-sco5v6*)
+ # Causes problems with __ctype
+ ;;
+ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+ # Compiler inserts libc in the correct place for threads to work
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test yes = "$build_libtool_need_lc"; then
+ func_append deplibs " -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=
+ versuffix=
+ major=
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $opt_dry_run || $RM conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which I believe you do not have"
+ echo "*** because a test_compile did reveal that the linker did not use it for"
+ echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ case $i in
+ -l*)
+ func_stripname -l '' "$i"
+ name=$func_stripname_result
+ $opt_dry_run || $RM conftest
+ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+ ldd_output=`ldd conftest`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ func_append newdeplibs " $i"
+ i=
+ ;;
+ esac
+ fi
+ if test -n "$i"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+ set dummy $deplib_matches; shift
+ deplib_match=$1
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+ func_append newdeplibs " $i"
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because a test_compile did reveal that the linker did not use this one"
+ echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ ;;
+ *)
+ func_append newdeplibs " $i"
+ ;;
+ esac
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method; shift
+ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ if test -n "$file_magic_glob"; then
+ libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+ else
+ libnameglob=$libname
+ fi
+ test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ if test yes = "$want_nocaseglob"; then
+ shopt -s nocaseglob
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ $nocaseglob
+ else
+ potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+ fi
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null |
+ $GREP " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib=$potent_lib
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+ *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+ $SED -e 10q |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method; shift
+ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+ for a_deplib in $deplibs; do
+ case $a_deplib in
+ -l*)
+ func_stripname -l '' "$a_deplib"
+ name=$func_stripname_result
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib"; then
+ libname=`eval "\\$ECHO \"$libname_spec\""`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib=$potent_lib # see symlink-check above in file_magic test
+ if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+ $EGREP "$match_pattern_regex" > /dev/null; then
+ func_append newdeplibs " $a_deplib"
+ a_deplib=
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib"; then
+ droppeddeps=yes
+ echo
+ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have"
+ echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib"; then
+ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $ECHO "*** with $libname and none of the candidates passed a file format test"
+ $ECHO "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ ;;
+ *)
+ # Add a -L argument.
+ func_append newdeplibs " $a_deplib"
+ ;;
+ esac
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=
+ tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+ if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+ for i in $predeps $postdeps; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+ done
+ fi
+ case $tmp_deplibs in
+ *[!\ \ ]*)
+ echo
+ if test none = "$deplibs_check_method"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ ;;
+ esac
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library with the System framework
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test yes = "$droppeddeps"; then
+ if test yes = "$module"; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** 'nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ echo "*** The inter-library dependencies that have been dropped here will be"
+ echo "*** automatically added whenever a program is linked with this library"
+ echo "*** or is declared to -dlopen it."
+
+ if test no = "$allow_undefined"; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test no = "$build_old_libs"; then
+ oldlibs=$output_objdir/$libname.$libext
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ deplibs=$new_libs
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test yes = "$build_libtool_libs"; then
+ # Remove $wl instances when linking with ld.
+ # FIXME: should test the right _cmds variable.
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+ if test yes = "$hardcode_into_libs"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath=$finalize_rpath
+ test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ func_replace_sysroot "$libdir"
+ libdir=$func_replace_sysroot_result
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append dep_rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath=$finalize_shlibpath
+ test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext_cmds\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ shift
+ realname=$1
+ shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname=$realname
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib=$output_objdir/$realname
+ linknames=
+ for link
+ do
+ func_append linknames " $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ test "X$libobjs" = "X " && libobjs=
+
+ delfiles=
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+ export_symbols=$output_objdir/$libname.uexp
+ func_append delfiles " $export_symbols"
+ fi
+
+ orig_export_symbols=
+ case $host_os in
+ cygwin* | mingw* | cegcc*)
+ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+ # exporting using user supplied symfile
+ func_dll_def_p "$export_symbols" || {
+ # and it's NOT already a .def file. Must figure out
+ # which of the given symbols are data symbols and tag
+ # them as such. So, trigger use of export_symbols_cmds.
+ # export_symbols gets reassigned inside the "prepare
+ # the list of exported symbols" if statement, so the
+ # include_expsyms logic still works.
+ orig_export_symbols=$export_symbols
+ export_symbols=
+ always_export_symbols=yes
+ }
+ fi
+ ;;
+ esac
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ cmds=$export_symbols_cmds
+ save_ifs=$IFS; IFS='~'
+ for cmd1 in $cmds; do
+ IFS=$save_ifs
+ # Take the normal branch if the nm_file_list_spec branch
+ # doesn't work or if tool conversion is not needed.
+ case $nm_file_list_spec~$to_tool_file_cmd in
+ *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+ try_normal_branch=yes
+ eval cmd=\"$cmd1\"
+ func_len " $cmd"
+ len=$func_len_result
+ ;;
+ *)
+ try_normal_branch=no
+ ;;
+ esac
+ if test yes = "$try_normal_branch" \
+ && { test "$len" -lt "$max_cmd_len" \
+ || test "$max_cmd_len" -le -1; }
+ then
+ func_show_eval "$cmd" 'exit $?'
+ skipped_export=false
+ elif test -n "$nm_file_list_spec"; then
+ func_basename "$output"
+ output_la=$func_basename_result
+ save_libobjs=$libobjs
+ save_output=$output
+ output=$output_objdir/$output_la.nm
+ func_to_tool_file "$output"
+ libobjs=$nm_file_list_spec$func_to_tool_file_result
+ func_append delfiles " $output"
+ func_verbose "creating $NM input file list: $output"
+ for obj in $save_libobjs; do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > "$output"
+ eval cmd=\"$cmd1\"
+ func_show_eval "$cmd" 'exit $?'
+ output=$save_output
+ libobjs=$save_libobjs
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ func_verbose "using reloadable object file for export list..."
+ skipped_export=:
+ # Break out early, otherwise skipped_export may be
+ # set to false by a later but shorter cmd.
+ break
+ fi
+ done
+ IFS=$save_ifs
+ if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ func_append tmp_deplibs " $test_deplib"
+ ;;
+ esac
+ done
+ deplibs=$tmp_deplibs
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec" &&
+ test yes = "$compiler_needs_object" &&
+ test -z "$libobjs"; then
+ # extract the archives, so we have objects to list.
+ # TODO: could optimize this to just extract one archive.
+ whole_archive_flag_spec=
+ fi
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ else
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ fi
+
+ if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ func_append linker_flags " $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+ fi
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval test_cmds=\"$module_expsym_cmds\"
+ cmds=$module_expsym_cmds
+ else
+ eval test_cmds=\"$module_cmds\"
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval test_cmds=\"$archive_expsym_cmds\"
+ cmds=$archive_expsym_cmds
+ else
+ eval test_cmds=\"$archive_cmds\"
+ cmds=$archive_cmds
+ fi
+ fi
+
+ if test : != "$skipped_export" &&
+ func_len " $test_cmds" &&
+ len=$func_len_result &&
+ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise
+ # or, if using GNU ld and skipped_export is not :, use a linker
+ # script.
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+ func_basename "$output"
+ output_la=$func_basename_result
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ last_robj=
+ k=1
+
+ if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+ output=$output_objdir/$output_la.lnkscript
+ func_verbose "creating GNU ld script: $output"
+ echo 'INPUT (' > $output
+ for obj in $save_libobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ echo ')' >> $output
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$func_to_tool_file_result
+ elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+ output=$output_objdir/$output_la.lnk
+ func_verbose "creating linker input file list: $output"
+ : > $output
+ set x $save_libobjs
+ shift
+ firstobj=
+ if test yes = "$compiler_needs_object"; then
+ firstobj="$1 "
+ shift
+ fi
+ for obj
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result" >> $output
+ done
+ func_append delfiles " $output"
+ func_to_tool_file "$output"
+ output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+ else
+ if test -n "$save_libobjs"; then
+ func_verbose "creating reloadable object files..."
+ output=$output_objdir/$output_la-$k.$objext
+ eval test_cmds=\"$reload_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ if test -z "$objlist" ||
+ test "$len" -lt "$max_cmd_len"; then
+ func_append objlist " $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test 1 -eq "$k"; then
+ # The first file doesn't have a previous command to add.
+ reload_objs=$objlist
+ eval concat_cmds=\"$reload_cmds\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+ fi
+ last_robj=$output_objdir/$output_la-$k.$objext
+ func_arith $k + 1
+ k=$func_arith_result
+ output=$output_objdir/$output_la-$k.$objext
+ objlist=" $obj"
+ func_len " $last_robj"
+ func_arith $len0 + $func_len_result
+ len=$func_arith_result
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ reload_objs="$objlist $last_robj"
+ eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ func_append delfiles " $output"
+
+ else
+ output=
+ fi
+
+ ${skipped_export-false} && {
+ func_verbose "generating symbol list for '$libname.la'"
+ export_symbols=$output_objdir/$libname.exp
+ $opt_dry_run || $RM $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+ if test -n "$last_robj"; then
+ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+ fi
+ }
+
+ test -n "$save_libobjs" &&
+ func_verbose "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs=$IFS; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+
+ ${skipped_export-false} && {
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ tmp_export_symbols=$export_symbols
+ test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+ fi
+
+ if test -n "$orig_export_symbols"; then
+ # The given exports_symbols file has to be filtered, so filter it.
+ func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+ # FIXME: $output_objdir/$libname.filter potentially contains lots of
+ # 's' commands, which not all seds can handle. GNU sed should be fine
+ # though. Also, the filter scales superlinearly with the number of
+ # global variables. join(1) would be nice here, but unfortunately
+ # isn't a blessed tool.
+ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+ func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+ export_symbols=$output_objdir/$libname.def
+ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+ fi
+ }
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test yes = "$module" && test -n "$module_cmds"; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ cmds=$module_expsym_cmds
+ else
+ cmds=$module_cmds
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ cmds=$archive_expsym_cmds
+ else
+ cmds=$archive_cmds
+ fi
+ fi
+ fi
+
+ if test -n "$delfiles"; then
+ # Append the command to remove temporary files to $cmds.
+ eval cmds=\"\$cmds~\$RM $delfiles\"
+ fi
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append libobjs " $func_extract_archives_result"
+ test "X$libobjs" = "X " && libobjs=
+ fi
+
+ save_ifs=$IFS; IFS='~'
+ for cmd in $cmds; do
+ IFS=$sp$nl
+ eval cmd=\"$cmd\"
+ IFS=$save_ifs
+ $opt_quiet || {
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
+ }
+ $opt_dry_run || eval "$cmd" || {
+ lt_exit=$?
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ ( cd "$output_objdir" && \
+ $RM "${realname}T" && \
+ $MV "${realname}U" "$realname" )
+ fi
+
+ exit $lt_exit
+ }
+ done
+ IFS=$save_ifs
+
+ # Restore the uninstalled library and exit
+ if test relink = "$opt_mode"; then
+ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+ if test -n "$convenience"; then
+ if test -z "$whole_archive_flag_spec"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test yes = "$module" || test yes = "$export_dynamic"; then
+ # On all known operating systems, these are identical.
+ dlname=$soname
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+ func_warning "'-dlopen' is ignored for objects"
+ fi
+
+ case " $deplibs" in
+ *\ -l* | *\ -L*)
+ func_warning "'-l' and '-L' are ignored for objects" ;;
+ esac
+
+ test -n "$rpath" && \
+ func_warning "'-rpath' is ignored for objects"
+
+ test -n "$xrpath" && \
+ func_warning "'-R' is ignored for objects"
+
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for objects"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for objects"
+
+ case $output in
+ *.lo)
+ test -n "$objs$old_deplibs" && \
+ func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+ libobj=$output
+ func_lo2o "$libobj"
+ obj=$func_lo2o_result
+ ;;
+ *)
+ libobj=
+ obj=$output
+ ;;
+ esac
+
+ # Delete the old objects.
+ $opt_dry_run || $RM $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # if reload_cmds runs $LD directly, get rid of -Wl from
+ # whole_archive_flag_spec and hope we can get by with turning comma
+ # into space.
+ case $reload_cmds in
+ *\$LD[\ \$]*) wl= ;;
+ esac
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+ test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+ reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+ else
+ gentop=$output_objdir/${obj}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $convenience
+ reload_conv_objs="$reload_objs $func_extract_archives_result"
+ fi
+ fi
+
+ # If we're not building shared, we need to use non_pic_objs
+ test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+ # Create the old-style object.
+ reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+ output=$obj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ test yes = "$build_libtool_libs" || {
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+ exit $EXIT_SUCCESS
+ }
+
+ if test -n "$pic_flag" || test default != "$pic_mode"; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output=$libobj
+ func_execute_cmds "$reload_cmds" 'exit $?'
+ fi
+
+ if test -n "$gentop"; then
+ func_show_eval '${RM}r "$gentop"'
+ fi
+
+ exit $EXIT_SUCCESS
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result.exe;;
+ esac
+ test -n "$vinfo" && \
+ func_warning "'-version-info' is ignored for programs"
+
+ test -n "$release" && \
+ func_warning "'-release' is ignored for programs"
+
+ $preload \
+ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ # But is supposedly fixed on 10.4 or later (yay!).
+ if test CXX = "$tagname"; then
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+ 10.[0123])
+ func_append compile_command " $wl-bind_at_load"
+ func_append finalize_command " $wl-bind_at_load"
+ ;;
+ esac
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+
+ # move library search paths that coincide with paths to not yet
+ # installed libraries to the beginning of the library search list
+ new_libs=
+ for path in $notinst_path; do
+ case " $new_libs " in
+ *" -L$path/$objdir "*) ;;
+ *)
+ case " $compile_deplibs " in
+ *" -L$path/$objdir "*)
+ func_append new_libs " -L$path/$objdir" ;;
+ esac
+ ;;
+ esac
+ done
+ for deplib in $compile_deplibs; do
+ case $deplib in
+ -L*)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ ;;
+ *) func_append new_libs " $deplib" ;;
+ esac
+ done
+ compile_deplibs=$new_libs
+
+
+ func_append compile_command " $compile_deplibs"
+ func_append finalize_command " $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append perm_rpath " $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+ testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ ::) dllsearchpath=$libdir;;
+ *) func_append dllsearchpath ":$libdir";;
+ esac
+ case :$dllsearchpath: in
+ *":$testbindir:"*) ;;
+ ::) dllsearchpath=$testbindir;;
+ *) func_append dllsearchpath ":$testbindir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath=$rpath
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs=$libdir
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ func_append rpath " $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) func_append finalize_perm_rpath " $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir=$hardcode_libdirs
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath=$rpath
+
+ if test -n "$libobjs" && test yes = "$build_old_libs"; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+ fi
+
+ func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+ # template prelinking step
+ if test -n "$prelink_cmds"; then
+ func_execute_cmds "$prelink_cmds" 'exit $?'
+ fi
+
+ wrappers_required=:
+ case $host in
+ *cegcc* | *mingw32ce*)
+ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+ wrappers_required=false
+ ;;
+ *cygwin* | *mingw* )
+ test yes = "$build_libtool_libs" || wrappers_required=false
+ ;;
+ *)
+ if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+ wrappers_required=false
+ fi
+ ;;
+ esac
+ $wrappers_required || {
+ # Replace the output file specification.
+ compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ link_command=$compile_command$compile_rpath
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ exit_status=0
+ func_show_eval "$link_command" 'exit_status=$?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Delete the generated files.
+ if test -f "$output_objdir/${outputname}S.$objext"; then
+ func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+ fi
+
+ exit $exit_status
+ }
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ func_append rpath "$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test yes = "$no_install"; then
+ # We don't need to create a wrapper script.
+ link_command=$compile_var$compile_command$compile_rpath
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $opt_dry_run || $RM $output
+ # Link the executable and exit
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ exit $EXIT_SUCCESS
+ fi
+
+ case $hardcode_action,$fast_install in
+ relink,*)
+ # Fast installation is not supported
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+
+ func_warning "this platform does not like uninstalled shared libraries"
+ func_warning "'$output' will be relinked during installation"
+ ;;
+ *,yes)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+ ;;
+ *,no)
+ link_command=$compile_var$compile_command$compile_rpath
+ relink_command=$finalize_var$finalize_command$finalize_rpath
+ ;;
+ *,needless)
+ link_command=$finalize_var$compile_command$finalize_rpath
+ relink_command=
+ ;;
+ esac
+
+ # Replace the output file specification.
+ link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ func_show_eval "$link_command" 'exit $?'
+
+ if test -n "$postlink_cmds"; then
+ func_to_tool_file "$output_objdir/$outputname"
+ postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+ func_execute_cmds "$postlink_cmds" 'exit $?'
+ fi
+
+ # Now create the wrapper script.
+ func_verbose "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_arg pretty "$var_value"
+ relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
+ fi
+ done
+ func_quote eval cd "`pwd`"
+ func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
+ relink_command=$func_quote_arg_unquoted_result
+ fi
+
+ # Only actually do things if not in dry run mode.
+ $opt_dry_run || {
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) func_stripname '' '.exe' "$output"
+ output=$func_stripname_result ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ func_stripname '' '.exe' "$outputname"
+ outputname=$func_stripname_result ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ func_dirname_and_basename "$output" "" "."
+ output_name=$func_basename_result
+ output_path=$func_dirname_result
+ cwrappersource=$output_path/$objdir/lt-$output_name.c
+ cwrapper=$output_path/$output_name.exe
+ $RM $cwrappersource $cwrapper
+ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_cwrapperexe_src > $cwrappersource
+
+ # The wrapper executable is built using the $host compiler,
+ # because it contains $host paths and files. If cross-
+ # compiling, it, like the target executable, must be
+ # executed on the $host or under an emulation environment.
+ $opt_dry_run || {
+ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+ $STRIP $cwrapper
+ }
+
+ # Now, create the wrapper script for func_source use:
+ func_ltwrapper_scriptname $cwrapper
+ $RM $func_ltwrapper_scriptname_result
+ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+ $opt_dry_run || {
+ # note: this script will not be executed, so do not chmod.
+ if test "x$build" = "x$host"; then
+ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+ else
+ func_emit_wrapper no > $func_ltwrapper_scriptname_result
+ fi
+ }
+ ;;
+ * )
+ $RM $output
+ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+ func_emit_wrapper no > $output
+ chmod +x $output
+ ;;
+ esac
+ }
+ exit $EXIT_SUCCESS
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ case $build_libtool_libs in
+ convenience)
+ oldobjs="$libobjs_save $symfileobj"
+ addlibs=$convenience
+ build_libtool_libs=no
+ ;;
+ module)
+ oldobjs=$libobjs_save
+ addlibs=$old_convenience
+ build_libtool_libs=no
+ ;;
+ *)
+ oldobjs="$old_deplibs $non_pic_objects"
+ $preload && test -f "$symfileobj" \
+ && func_append oldobjs " $symfileobj"
+ addlibs=$old_convenience
+ ;;
+ esac
+
+ if test -n "$addlibs"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $addlibs
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+ cmds=$old_archive_from_new_cmds
+ else
+
+ # Add any objects from preloaded convenience libraries
+ if test -n "$dlprefiles"; then
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+
+ func_extract_archives $gentop $dlprefiles
+ func_append oldobjs " $func_extract_archives_result"
+ fi
+
+ # POSIX demands no paths to be encoded in archives. We have
+ # to avoid creating archives with duplicate basenames if we
+ # might have to extract them afterwards, e.g., when creating a
+ # static archive out of a convenience library, or when linking
+ # the entirety of a libtool archive into another (currently
+ # not supported by libtool).
+ if (for obj in $oldobjs
+ do
+ func_basename "$obj"
+ $ECHO "$func_basename_result"
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ echo "copying selected object files to avoid basename conflicts..."
+ gentop=$output_objdir/${outputname}x
+ func_append generated " $gentop"
+ func_mkdir_p "$gentop"
+ save_oldobjs=$oldobjs
+ oldobjs=
+ counter=1
+ for obj in $save_oldobjs
+ do
+ func_basename "$obj"
+ objbase=$func_basename_result
+ case " $oldobjs " in
+ " ") oldobjs=$obj ;;
+ *[\ /]"$objbase "*)
+ while :; do
+ # Make sure we don't pick an alternate name that also
+ # overlaps.
+ newobj=lt$counter-$objbase
+ func_arith $counter + 1
+ counter=$func_arith_result
+ case " $oldobjs " in
+ *[\ /]"$newobj "*) ;;
+ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+ esac
+ done
+ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+ func_append oldobjs " $gentop/$newobj"
+ ;;
+ *) func_append oldobjs " $obj" ;;
+ esac
+ done
+ fi
+ func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+ tool_oldlib=$func_to_tool_file_result
+ eval cmds=\"$old_archive_cmds\"
+
+ func_len " $cmds"
+ len=$func_len_result
+ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ cmds=$old_archive_cmds
+ elif test -n "$archiver_list_spec"; then
+ func_verbose "using command file archive linking..."
+ for obj in $oldobjs
+ do
+ func_to_tool_file "$obj"
+ $ECHO "$func_to_tool_file_result"
+ done > $output_objdir/$libname.libcmd
+ func_to_tool_file "$output_objdir/$libname.libcmd"
+ oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+ cmds=$old_archive_cmds
+ else
+ # the command line is too long to link in one step, link in parts
+ func_verbose "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ oldobjs=
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ eval test_cmds=\"$old_archive_cmds\"
+ func_len " $test_cmds"
+ len0=$func_len_result
+ len=$len0
+ for obj in $save_oldobjs
+ do
+ func_len " $obj"
+ func_arith $len + $func_len_result
+ len=$func_arith_result
+ func_append objlist " $obj"
+ if test "$len" -lt "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj"; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+ objlist=
+ len=$len0
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test -z "$oldobjs"; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+ fi
+ fi
+ fi
+ func_execute_cmds "$cmds" 'exit $?'
+ done
+
+ test -n "$generated" && \
+ func_show_eval "${RM}r$generated"
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test yes = "$build_old_libs" && old_library=$libname.$libext
+ func_verbose "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ func_quote_arg pretty,unquoted "$var_value"
+ relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ func_quote eval cd "`pwd`"
+ relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ func_quote_arg pretty,unquoted "$relink_command"
+ relink_command=$func_quote_arg_unquoted_result
+ if test yes = "$hardcode_automatic"; then
+ relink_command=
+ fi
+
+ # Only create the output if not a dry run.
+ $opt_dry_run || {
+ for installed in no yes; do
+ if test yes = "$installed"; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output=$output_objdir/${outputname}i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ func_basename "$deplib"
+ name=$func_basename_result
+ func_resolve_sysroot "$deplib"
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+ test -z "$libdir" && \
+ func_fatal_error "'$deplib' is not a valid libtool archive"
+ func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ -L*)
+ func_stripname -L '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -L$func_replace_sysroot_result"
+ ;;
+ -R*)
+ func_stripname -R '' "$deplib"
+ func_replace_sysroot "$func_stripname_result"
+ func_append newdependency_libs " -R$func_replace_sysroot_result"
+ ;;
+ *) func_append newdependency_libs " $deplib" ;;
+ esac
+ done
+ dependency_libs=$newdependency_libs
+ newdlfiles=
+
+ for lib in $dlfiles; do
+ case $lib in
+ *.la)
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ *) func_append newdlfiles " $lib" ;;
+ esac
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ *.la)
+ # Only pass preopened files to the pseudo-archive (for
+ # eventual linking with the app. that links it) if we
+ # didn't already link the preopened objects directly into
+ # the library:
+ func_basename "$lib"
+ name=$func_basename_result
+ eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ test -z "$libdir" && \
+ func_fatal_error "'$lib' is not a valid libtool archive"
+ func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+ ;;
+ esac
+ done
+ dlprefiles=$newdlprefiles
+ else
+ newdlfiles=
+ for lib in $dlfiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlfiles " $abs"
+ done
+ dlfiles=$newdlfiles
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ case $lib in
+ [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+ *) abs=`pwd`"/$lib" ;;
+ esac
+ func_append newdlprefiles " $abs"
+ done
+ dlprefiles=$newdlprefiles
+ fi
+ $RM $output
+ # place dlname in correct position for cygwin
+ # In fact, it would be nice if we could use this code for all target
+ # systems that can't hard-code library paths into their executables
+ # and that have no shared library path variable independent of PATH,
+ # but it turns out we can't easily determine that from inspecting
+ # libtool variables, so we have to hard-code the OSs to which it
+ # applies here; at the moment, that means platforms that use the PE
+ # object format with DLL files. See the long comment at the top of
+ # tests/bindir.at for full details.
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+ # If a -bindir argument was supplied, place the dll there.
+ if test -n "$bindir"; then
+ func_relative_path "$install_libdir" "$bindir"
+ tdlname=$func_relative_path_result/$dlname
+ else
+ # Otherwise fall back on heuristic.
+ tdlname=../bin/$dlname
+ fi
+ ;;
+ esac
+ $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test no,yes = "$installed,$need_relink"; then
+ $ECHO >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ }
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+ ;;
+ esac
+ exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+ func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+ $debug_cmd
+
+ RM=$nonopt
+ files=
+ rmforce=false
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic=$magic
+
+ for arg
+ do
+ case $arg in
+ -f) func_append RM " $arg"; rmforce=: ;;
+ -*) func_append RM " $arg" ;;
+ *) func_append files " $arg" ;;
+ esac
+ done
+
+ test -z "$RM" && \
+ func_fatal_help "you must specify an RM program"
+
+ rmdirs=
+
+ for file in $files; do
+ func_dirname "$file" "" "."
+ dir=$func_dirname_result
+ if test . = "$dir"; then
+ odir=$objdir
+ else
+ odir=$dir/$objdir
+ fi
+ func_basename "$file"
+ name=$func_basename_result
+ test uninstall = "$opt_mode" && odir=$dir
+
+ # Remember odir for removal later, being careful to avoid duplicates
+ if test clean = "$opt_mode"; then
+ case " $rmdirs " in
+ *" $odir "*) ;;
+ *) func_append rmdirs " $odir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if { test -L "$file"; } >/dev/null 2>&1 ||
+ { test -h "$file"; } >/dev/null 2>&1 ||
+ test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif $rmforce; then
+ continue
+ fi
+
+ rmfiles=$file
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if func_lalib_p "$file"; then
+ func_source $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ func_append rmfiles " $odir/$n"
+ done
+ test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+ case $opt_mode in
+ clean)
+ case " $library_names " in
+ *" $dlname "*) ;;
+ *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+ esac
+ test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+ ;;
+ uninstall)
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ ;;
+ esac
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if func_lalib_p "$file"; then
+
+ # Read the .lo file
+ func_source $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" && test none != "$pic_object"; then
+ func_append rmfiles " $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+ func_append rmfiles " $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test clean = "$opt_mode"; then
+ noexename=$name
+ case $file in
+ *.exe)
+ func_stripname '' '.exe' "$file"
+ file=$func_stripname_result
+ func_stripname '' '.exe' "$name"
+ noexename=$func_stripname_result
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ func_append rmfiles " $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if func_ltwrapper_p "$file"; then
+ if func_ltwrapper_executable_p "$file"; then
+ func_ltwrapper_scriptname "$file"
+ relink_command=
+ func_source $func_ltwrapper_scriptname_result
+ func_append rmfiles " $func_ltwrapper_scriptname_result"
+ else
+ relink_command=
+ func_source $dir/$noexename
+ fi
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+ if test yes = "$fast_install" && test -n "$relink_command"; then
+ func_append rmfiles " $odir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name"; then
+ func_append rmfiles " $odir/lt-$noexename.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ func_show_eval "$RM $rmfiles" 'exit_status=1'
+ done
+
+ # Try to remove the $objdir's in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ func_show_eval "rmdir $dir >/dev/null 2>&1"
+ fi
+ done
+
+ exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+ func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+ help=$generic_help
+ func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+ func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+ eval exec "$exec_cmd"
+ exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
new file mode 100755
index 0000000..6947add
--- /dev/null
+++ b/build-aux/mdate-sh
@@ -0,0 +1,228 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1995-2023 Free Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
+case $1 in
+ '')
+ echo "$0: No file. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# Use UTC to get reproducible result.
+TZ=UTC0
+export TZ
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume 'unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+ ls_command="$ls_command -n"
+fi
+
+# A 'ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ test $# -gt 0 || error "failed parsing '$ls_command /' output"
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755
index 0000000..1fe1611
--- /dev/null
+++ b/build-aux/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'autom4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/mktempd b/build-aux/mktempd
new file mode 100755
index 0000000..e18cf76
--- /dev/null
+++ b/build-aux/mktempd
@@ -0,0 +1,135 @@
+#!/bin/sh
+# Create a temporary directory, much like mktemp -d does.
+
+# Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# Written by Jim Meyering.
+
+# Usage: mktempd /tmp phoey.XXXXXXXXXX
+
+# First, try to use the mktemp program.
+# Failing that, we'll roll our own mktemp-like function:
+# - try to get random bytes from /dev/urandom
+# - failing that, generate output from a combination of quickly-varying
+# sources and gzip. Ignore non-varying gzip header, and extract
+# "random" bits from there.
+# - given those bits, map to file-name bytes using tr, and try to create
+# the desired directory.
+# - make only $MAX_TRIES attempts
+
+ME=`basename "$0"`
+die() { echo >&2 "$ME: $@"; exit 1; }
+
+MAX_TRIES=4
+
+rand_bytes()
+{
+ n=$1
+
+ chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
+
+ dev_rand=/dev/urandom
+ if test -r "$dev_rand"; then
+ # Note: 256-length($chars) == 194; 3 copies of $chars is 186 + 8 = 194.
+ dd ibs=$n count=1 if="$dev_rand" 2>/dev/null \
+ | tr -c $chars 01234567$chars$chars$chars
+ return
+ fi
+
+ cmds='date; date +%N; free; who -a; w; ps auxww; ps -ef'
+ data=` (eval "$cmds") 2>&1 | gzip `
+
+ n_plus_50=`expr $n + 50`
+
+ # Ensure that $data has length at least 50+$n
+ while :; do
+ len=`echo "$data"|wc -c`
+ test $n_plus_50 -le $len && break;
+ data=` (echo "$data"; eval "$cmds") 2>&1 | gzip `
+ done
+
+ echo "$data" \
+ | dd bs=1 skip=50 count=$n 2>/dev/null \
+ | tr -c $chars 01234567$chars$chars$chars
+}
+
+mktempd()
+{
+ case $# in
+ 2);;
+ *) die "Usage: $ME DIR TEMPLATE";;
+ esac
+
+ destdir=$1
+ template=$2
+
+ # Disallow any trailing slash on specified destdir:
+ # it would subvert the post-mktemp "case"-based destdir test.
+ case $destdir in
+ /) ;;
+ */) die "invalid destination dir: remove trailing slash(es)";;
+ esac
+
+ case $template in
+ *XXXX) ;;
+ *) die "invalid template: $template (must have a suffix of at least 4 X's)";;
+ esac
+
+ fail=0
+
+ # First, try to use mktemp.
+ d=`env -u TMPDIR mktemp -d -t -p "$destdir" "$template" 2>/dev/null` \
+ || fail=1
+
+ # The resulting name must be in the specified directory.
+ case $d in "$destdir"*);; *) fail=1;; esac
+
+ # It must have created the directory.
+ test -d "$d" || fail=1
+
+ # It must have 0700 permissions. Handle sticky "S" bits.
+ perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1
+ case $perms in drwx------*) ;; *) fail=1;; esac
+
+ test $fail = 0 && {
+ echo "$d"
+ return
+ }
+
+ # If we reach this point, we'll have to create a directory manually.
+
+ # Get a copy of the template without its suffix of X's.
+ base_template=`echo "$template"|sed 's/XX*$//'`
+
+ # Calculate how many X's we've just removed.
+ template_length=`echo "$template" | wc -c`
+ nx=`echo "$base_template" | wc -c`
+ nx=`expr $template_length - $nx`
+
+ err=
+ i=1
+ while :; do
+ X=`rand_bytes $nx`
+ candidate_dir="$destdir/$base_template$X"
+ err=`mkdir -m 0700 "$candidate_dir" 2>&1` \
+ && { echo "$candidate_dir"; return; }
+ test $MAX_TRIES -le $i && break;
+ i=`expr $i + 1`
+ done
+ die "$err"
+}
+
+mktempd "$@"
diff --git a/build-aux/test-driver b/build-aux/test-driver
new file mode 100755
index 0000000..be73b80
--- /dev/null
+++ b/build-aux/test-driver
@@ -0,0 +1,153 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+ echo "$0: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
+END
+}
+
+test_name= # Used for reporting.
+log_file= # Where to save the output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "test-driver $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ *) break;;
+ esac
+ shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+ usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+ usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+ red='' # Red.
+ grn='' # Green.
+ lgn='' # Light green.
+ blu='' # Blue.
+ mgn='' # Magenta.
+ std='' # No color.
+else
+ red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+"$@" >>"$log_file" 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+ tweaked_estatus=1
+else
+ tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
new file mode 100644
index 0000000..204caf7
--- /dev/null
+++ b/build-aux/texinfo.tex
@@ -0,0 +1,11848 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2023-03-21.06}
+%
+% Copyright 1985, 1986, 1988, 1990-2023 Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software: you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <https://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% https://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% LaTeX's \typeout. This ensures that the messages it is used for
+% are identical in format to the corresponding ones from latex/pdflatex.
+\def\typeout{\immediate\write17}%
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexsp=\sp
+\let\ptexstar=\*
+\let\ptexsup=\sup
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Give the space character the catcode for a space.
+\def\spaceisspace{\catcode`\ =10\relax}
+
+% Likewise for ^^M, the end of line character.
+\def\endlineisspace{\catcode13=10\relax}
+
+\chardef\dashChar = `\-
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Output routine
+%
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.
+
+% \domark is called twice inside \chapmacro, to add one
+% mark before the section break, and one after.
+% In the second call \prevchapterdefs is the same as \currentchapterdefs,
+% and \prevsectiondefs is the same as \currentsectiondefs.
+% Then if the page is not broken at the mark, some of the previous
+% section appears on the page, and we can get the name of this section
+% from \firstmark for @everyheadingmarks top.
+% @everyheadingmarks bottom uses \botmark.
+%
+% See page 260 of The TeXbook.
+\def\domark{%
+ \toks0=\expandafter{\currentchapterdefs}%
+ \toks2=\expandafter{\currentsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\currentcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top
+ \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom
+ \noexpand\else \the\toks8 % 2: color marks
+ }%
+}
+
+% \gettopheadingmarks, \getbottomheadingmarks,
+% \getcolormarks - extract needed part of mark.
+%
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\the\savedtopmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\the\savedtopmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\currentchapterdefs{}
+\def\currentsectiondefs{}
+\def\currentsection{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\currentcolordefs{}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\txipagewidth \newdimen\txipageheight
+
+% Main output routine.
+%
+\chardef\PAGE = 255
+\newtoks\defaultoutput
+\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}}
+\output=\expandafter{\the\defaultoutput}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% When outputting the double column layout for indices, an output routine
+% is run several times, hiding the original value of \topmark. Hence, save
+% \topmark at the beginning.
+%
+\newtoks\savedtopmark
+\newif\iftopmarksaved
+\topmarksavedtrue
+\def\savetopmark{%
+ \iftopmarksaved\else
+ \global\savedtopmark=\expandafter{\topmark}%
+ \global\topmarksavedtrue
+ \fi
+}
+
+% \onepageout takes a vbox as an argument.
+% \shipout a vbox for a single page, adding an optional header, footer
+% and footnote. This also causes index entries for this page to be written
+% to the auxiliary files.
+%
+\def\onepageout#1{%
+ \hoffset=\normaloffset
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ \checkchapterpage
+ %
+ % Make the heading and footing. \makeheadline and \makefootline
+ % use the contents of \headline and \footline.
+ \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%
+ %
+ {%
+ % Set context for writing to auxiliary files like index files.
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \atdummies % don't expand commands in the output.
+ \turnoffactive
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ }%
+ }%
+ \global\topmarksavedfalse
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+% Main part of page, including any footnotes
+\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Check if we are on the first page of a chapter. Used for printing headings.
+\newif\ifchapterpage
+\def\checkchapterpage{%
+ % Get the chapter that was current at the end of the last page
+ \ifcase1\the\savedtopmark\fi
+ \let\prevchaptername\thischaptername
+ %
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \let\curchaptername\thischaptername
+ %
+ \ifx\curchaptername\prevchaptername
+ \chapterpagefalse
+ \else
+ \chapterpagetrue
+ \fi
+}
+
+% Argument parsing
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+% For example, \def\foo{\parsearg\fooxxx}.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment. Pass the result on to
+% \argcheckspaces.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+
+% \parseargdef - define a command taking an argument on the line
+%
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\long\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+
+% @end foo calls \checkenv and executes the definition of \Efoo.
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @- allows explicit insertion of hyphenation points
+\def\-{\discretionary{\normaldash}{}{}}%
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ \addgroupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+
+\def\addgroupbox{
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\txipageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+}
+
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ % This is similar to the 'needspace' module in LaTeX.
+ % The first penalty allows a break if the end of the page is
+ % not too far away. Following penalties and skips are discarded.
+ % Otherwise, require at least \dimen0 of vertical space.
+ %
+ % (We used to use a \vtop to reserve space, but this had spacing issues
+ % when followed by a section heading, as it was not a "discardable item".
+ % This also has the benefit of providing glue before the page break if
+ % there isn't enough space.)
+ \vskip0pt plus \dimen0
+ \penalty-100
+ \vskip0pt plus -\dimen0
+ \vskip \dimen0
+ \penalty9999
+ \vskip -\dimen0
+ \penalty0\relax % this hides the above glue from \safewhatsit and \dobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+
+\def\c{\begingroup \catcode`\^^M=\active%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\cxxx}
+{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
+%
+\let\comment\c
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent {\restorefirstparagraphindent \indent}%
+ \gdef\noindent{\restorefirstparagraphindent \noindent}%
+ \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
+}
+%
+\gdef\restorefirstparagraphindent{%
+ \global\let\indent = \ptexindent
+ \global\let\noindent = \ptexnoindent
+ \global\everypar = {}%
+}
+
+% leave vertical mode without cancelling any first paragraph indent
+\gdef\imageindent{%
+ \toks0=\everypar
+ \everypar={}%
+ \ptexnoindent
+ \global\everypar=\toks0
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% @setfilename INFO-FILENAME - ignored
+\let\setfilename=\comment
+
+% @bye.
+\outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newbox\boxB
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+%
+% For LuaTeX
+%
+
+\newif\iftxiuseunicodedestname
+\txiuseunicodedestnamefalse % For pdfTeX etc.
+
+\ifx\luatexversion\thisisundefined
+\else
+ % Use Unicode destination names
+ \txiuseunicodedestnametrue
+ % Escape PDF strings with converting UTF-16 from UTF-8
+ \begingroup
+ \catcode`\%=12
+ \directlua{
+ function UTF16oct(str)
+ tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
+ for c in string.utfvalues(str) do
+ if c < 0x10000 then
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ math.floor(c / 256), math.floor(c % 256)))
+ else
+ c = c - 0x10000
+ local c_hi = c / 1024 + 0xd800
+ local c_lo = c % 1024 + 0xdc00
+ tex.sprint(
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o' ..
+ string.char(0x5c) .. string.char(0x25) .. '03o',
+ math.floor(c_hi / 256), math.floor(c_hi % 256),
+ math.floor(c_lo / 256), math.floor(c_lo % 256)))
+ end
+ end
+ end
+ }
+ \endgroup
+ \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
+ % Escape PDF strings without converting
+ \begingroup
+ \directlua{
+ function PDFescstr(str)
+ for c in string.bytes(str) do
+ if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
+ tex.sprint(-2,
+ string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
+ c))
+ else
+ tex.sprint(-2, string.char(c))
+ end
+ end
+ end
+ }
+ % The -2 in the arguments here gives all the input to TeX catcode 12
+ % (other) or 10 (space), preventing undefined control sequence errors. See
+ % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
+ %
+ \endgroup
+ \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
+ \ifnum\luatexversion>84
+ % For LuaTeX >= 0.85
+ \def\pdfdest{\pdfextension dest}
+ \let\pdfoutput\outputmode
+ \def\pdfliteral{\pdfextension literal}
+ \def\pdfcatalog{\pdfextension catalog}
+ \def\pdftexversion{\numexpr\pdffeedback version\relax}
+ \let\pdfximage\saveimageresource
+ \let\pdfrefximage\useimageresource
+ \let\pdflastximage\lastsavedimageresourceindex
+ \def\pdfendlink{\pdfextension endlink\relax}
+ \def\pdfoutline{\pdfextension outline}
+ \def\pdfstartlink{\pdfextension startlink}
+ \def\pdffontattr{\pdfextension fontattr}
+ \def\pdfobj{\pdfextension obj}
+ \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
+ \let\pdfpagewidth\pagewidth
+ \let\pdfpageheight\pageheight
+ \edef\pdfhorigin{\pdfvariable horigin}
+ \edef\pdfvorigin{\pdfvariable vorigin}
+ \fi
+\fi
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+\newif\ifpdforxetex
+\pdforxetexfalse
+\ifpdf
+ \pdforxetextrue
+\fi
+\ifx\XeTeXrevision\thisisundefined\else
+ \pdforxetextrue
+\fi
+
+
+% Output page labels information.
+% See PDF reference v.1.7 p.594, section 8.3.1.
+\ifpdf
+\def\pagelabels{%
+ \def\title{0 << /P (T-) /S /D >>}%
+ \edef\roman{\the\romancount << /S /r >>}%
+ \edef\arabic{\the\arabiccount << /S /D >>}%
+ %
+ % Page label ranges must be increasing. Remove any duplicates.
+ % (There is a slight chance of this being wrong if e.g. there is
+ % a @contents but no @titlepage, etc.)
+ %
+ \ifnum\romancount=0 \def\roman{}\fi
+ \ifnum\arabiccount=0 \def\title{}%
+ \else
+ \ifnum\romancount=\arabiccount \def\roman{}\fi
+ \fi
+ %
+ \ifnum\romancount<\arabiccount
+ \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax
+ \else
+ \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax
+ \fi
+}
+\else
+ \let\pagelabels\relax
+\fi
+
+\newcount\pagecount \pagecount=0
+\newcount\romancount \romancount=0
+\newcount\arabiccount \arabiccount=0
+\ifpdf
+ \let\ptxadvancepageno\advancepageno
+ \def\advancepageno{%
+ \ptxadvancepageno\global\advance\pagecount by 1
+ }
+\fi
+
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \xdef#1{#1}%
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+\def\txiescapepdfutfsixteen#1{%
+ \ifx\pdfescapestrutfsixteen\thisisundefined
+ % No UTF-16 converting macro available.
+ \txiescapepdf{#1}%
+ \else
+ \xdef#1{\pdfescapestrutfsixteen{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros using ideas from pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black. The dark red here is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing. We use
+ % black by default, though.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % rg sets the color for filling (usual text, etc.);
+ % RG sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\curcolor{0 0 0}%
+ \def\setcolor#1{%
+ \ifx#1\curcolor\else
+ \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ \xdef\curcolor{#1}%
+ \fi
+ }
+ %
+ \let\maincolor\rgbBlack
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\currentcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ \ifx \declaredencoding \latone
+ % Pass through Latin-1 characters.
+ % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
+ \else
+ \ifx \declaredencoding \utfeight
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \fi
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \ifx \declaredencoding \latone
+ % The PDF format can use an extended form of Latin-1 in bookmark
+ % strings. See Appendix D of the PDF Reference, Sixth Edition, for
+ % the "PDFDocEncoding".
+ \passthroughcharstrue
+ % Pass through Latin-1 characters.
+ % LuaTeX: Convert to Unicode
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \def\pdfoutlinetext{#1}%
+ \else
+ \ifx \declaredencoding \utfeight
+ \ifx\luatexversion\thisisundefined
+ % For pdfTeX with UTF-8.
+ % TODO: the PDF format can use UTF-16 in bookmark strings,
+ % but the code for this isn't done yet.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \else
+ % For LuaTeX with UTF-8.
+ % Pass through Unicode characters for title texts.
+ \passthroughcharstrue
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \else
+ % For non-Latin-1 or non-UTF-8 encodings.
+ % Use ASCII approximations.
+ \passthroughcharsfalse
+ \def\pdfoutlinetext{#1}%
+ \fi
+ \fi
+ % LuaTeX: Convert to UTF-16
+ % pdfTeX: Use Latin-1 as PDFDocEncoding
+ \txiescapepdfutfsixteen\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \let\linkcolor\rgbBlack
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ %
+ % Currently we prefix the section name with the section number
+ % for chapter and appendix headings only in order to avoid too much
+ % horizontal space being required in the PDF viewer.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\unnchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may
+ % be a simple number, or a list of numbers in the case of an index
+ % entry.
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{\pdflinkpage{#1}{#1}}%
+ \def\pdflinkpage#1#2{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#2\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+%
+% For XeTeX
+%
+\ifx\XeTeXrevision\thisisundefined
+\else
+ %
+ % XeTeX version check
+ %
+ \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
+ % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
+ % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
+ % For avoiding PDF destination name replacement, we use this special
+ % instead of xdvipdfmx's command line option `-C 0x0010'.
+ \special{dvipdfmx:config C 0x0010}
+ % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
+ % It can handle Unicode destination names for PDF.
+ \txiuseunicodedestnametrue
+ \else
+ % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
+ % `dvipdfmx:config' special.
+ % So for avoiding PDF destination name replacement,
+ % xdvipdfmx's command line option `-C 0x0010' is necessary.
+ %
+ % XeTeX < 0.99995 can not handle Unicode destination names for PDF
+ % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+ \txiuseunicodedestnamefalse
+ \fi
+ %
+ % Color support
+ %
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\currentcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ % PDF outline support
+ %
+ % Emulate pdfTeX primitive
+ \def\pdfdest name#1 xyz{%
+ \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
+ }
+ %
+ \def\setpdfdestname#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ \iftxiuseunicodedestname
+ % Pass through Unicode characters.
+ \else
+ % Use ASCII approximations in destination names.
+ \passthroughcharsfalse
+ \fi
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ }}
+ %
+ \def\setpdfoutlinetext#1{{%
+ \turnoffactive
+ % Always use Unicode characters in title texts.
+ \def\pdfoutlinetext{#1}%
+ % For XeTeX, xdvipdfmx converts to UTF-16.
+ % So we do not convert.
+ \txiescapepdf\pdfoutlinetext
+ }}
+ %
+ \def\pdfmkdest#1{%
+ \setpdfdestname{#1}%
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }
+ %
+ % by default, use black for everything.
+ \def\urlcolor{\rgbBlack}
+ \def\linkcolor{\rgbBlack}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ \setpdfoutlinetext{#1}
+ \setpdfdestname{#3}
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{#4}%
+ \fi
+ %
+ \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
+ << /S /GoTo /D (\pdfdestname) >> >> }%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ %
+ % For XeTeX, counts of subentries are not necessary.
+ % Therefore, we read toc only once.
+ %
+ % We use node names as destinations.
+ %
+ % Currently we prefix the section name with the section number
+ % for chapter and appendix headings only in order to avoid too much
+ % horizontal space being required in the PDF viewer.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##2 ##1}{1}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{2}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{3}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{4}{##3}{##4}}%
+ %
+ \let\appentry\numchapentry%
+ \let\appsecentry\numsecentry%
+ \let\appsubsecentry\numsubsecentry%
+ \let\appsubsubsecentry\numsubsubsecentry%
+ \def\unnchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{1}{##3}{##4}}%
+ \let\unnsecentry\numsecentry%
+ \let\unnsubsecentry\numsubsecentry%
+ \let\unnsubsubsecentry\numsubsubsecentry%
+ %
+ % For XeTeX, xdvipdfmx converts strings to UTF-16.
+ % Therefore, the encoding and the language may not be considered.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+
+ \special{pdf:docview << /PageMode /UseOutlines >> }
+ % ``\special{pdf:tounicode ...}'' is not necessary
+ % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
+ % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
+ % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
+ % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
+%
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ \def\@{@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \special{pdf:bann << /Border [0 0 0]
+ /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
+ \endgroup}
+ \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{\pdflinkpage{#1}{#1}}%
+ \def\pdflinkpage#1#2{%
+ \special{pdf:bann << /Border [0 0 0]
+ /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
+ \setcolor{\linkcolor}#2\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+%
+ %
+ % @image support
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\doxeteximage#1#2#3{%
+ \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\xeteximgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errmessage{Could not find image file #1 for XeTeX}%
+ \else \gdef\xeteximgext{JPG}%
+ \fi
+ \else \gdef\xeteximgext{jpeg}%
+ \fi
+ \else \gdef\xeteximgext{jpg}%
+ \fi
+ \else \gdef\xeteximgext{png}%
+ \fi
+ \else \gdef\xeteximgext{PDF}%
+ \fi
+ \else \gdef\xeteximgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % Putting an \hbox around the image can prevent an over-long line
+ % after the image.
+ \hbox\bgroup
+ \def\xetexpdfext{pdf}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \def\xetexpdfext{PDF}%
+ \ifx\xeteximgext\xetexpdfext
+ \XeTeXpdffile "#1".\xeteximgext ""
+ \else
+ \XeTeXpicfile "#1".\xeteximgext ""
+ \fi
+ \fi
+ \ifdim \wd0 >0pt width \xeteximagewidth \fi
+ \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
+ \egroup
+ }
+\fi
+
+
+%
+\message{fonts,}
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+%
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+ \ifx#2\ttshape\hyphenchar#1=-1 \fi
+ \ifx#2\ttbshape\hyphenchar#1=-1 \fi
+ \ifx#2\ttslshape\hyphenchar#1=-1 \fi
+}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} % where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defsl\slshape{10}{\magstep1}{OT1}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acronym in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defsl\slshape{10}{\magstephalf}{OT1}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\ttfont=\deftt \let\bffont = \defbf
+\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for math mode superscripts (7pt).
+\def\sevennominalsize{7pt}
+\setfont\sevenrm\rmshape{7}{1000}{OT1}
+\setfont\seventt\ttshape{10}{700}{OT1TT}
+\setfont\sevenbf\bfshape{10}{700}{OT1}
+\setfont\sevenit\itshape{7}{1000}{OT1IT}
+\setfont\sevensl\slshape{10}{700}{OT1}
+\setfont\sevensf\sfshape{10}{700}{OT1}
+\setfont\sevensc\scshape{10}{700}{OT1}
+\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
+\font\seveni=cmmi7
+\font\sevensy=cmsy7
+\def\sevenecsize{0700}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acronym in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+%
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname #1font\endcsname % change the current font
+}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.
+% We don't bother to reset \scriptscriptfont; awaiting user need.
+%
+\def\resetmathfonts{%
+ \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
+ \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
+ \textfont\ttfam=\ttfont \textfont\sffam=\sffont
+ %
+ % Fonts for superscript. Note that the 7pt fonts are used regardless
+ % of the current font size.
+ \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy
+ \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl
+ \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt
+ \scriptfont\sffam=\sevensf
+}
+
+
+
+% \defineassignfonts{SIZE} -
+% Define sequence \assignfontsSIZE, which switches between font sizes
+% by redefining the meanings of \STYLEfont. (Just \STYLE additionally sets
+% the current \fam for math mode.)
+%
+\def\defineassignfonts#1{%
+ \expandafter\edef\csname assignfonts#1\endcsname{%
+ \let\noexpand\rmfont\csname #1rm\endcsname
+ \let\noexpand\itfont\csname #1it\endcsname
+ \let\noexpand\slfont\csname #1sl\endcsname
+ \let\noexpand\bffont\csname #1bf\endcsname
+ \let\noexpand\ttfont\csname #1tt\endcsname
+ \let\noexpand\smallcaps\csname #1sc\endcsname
+ \let\noexpand\sffont \csname #1sf\endcsname
+ \let\noexpand\ifont \csname #1i\endcsname
+ \let\noexpand\syfont \csname #1sy\endcsname
+ \let\noexpand\ttslfont\csname #1ttsl\endcsname
+ }
+}
+
+\def\assignfonts#1{%
+ \csname assignfonts#1\endcsname
+}
+
+\newif\ifrmisbold
+
+% Select smaller font size with the current style. Used to change font size
+% in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for
+% normal roman text, also use bold fonts for roman text in the smaller size.
+\def\switchtolllsize{%
+ \expandafter\assignfonts\expandafter{\lllsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+\def\switchtolsize{%
+ \expandafter\assignfonts\expandafter{\lsize}%
+ \ifrmisbold
+ \let\rmfont\bffont
+ \fi
+ \csname\curfontstyle\endcsname
+}%
+
+% Define the font-changing commands (all called \...fonts).
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used
+% in, e.g., the LaTeX logo and acronyms.
+%
+% Note: The fonts used for \ifont are for "math italics" (\itfont is for
+% italics in regular text). \syfont is also used in math mode only.
+%
+\def\definefontsetatsize#1#2#3#4#5{%
+ \defineassignfonts{#1}%
+\expandafter\def\csname #1fonts\endcsname{%
+ \def\curfontsize{#1}%
+ \def\lsize{#2}\def\lllsize{#3}%
+ \csname rmisbold#5\endcsname
+ \csname assignfonts#1\endcsname
+ \resetmathfonts
+ \setleading{#4}%
+}}
+
+\definefontsetatsize{text} {reduced}{smaller}{\textleading}{false}
+\definefontsetatsize{title} {chap} {subsec} {27pt} {true}
+\definefontsetatsize{chap} {sec} {text} {19pt} {true}
+\definefontsetatsize{sec} {subsec} {reduced}{17pt} {true}
+\definefontsetatsize{ssec} {text} {small} {15pt} {true}
+\definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false}
+\definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false}
+\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
+
+\def\titlefont#1{{\titlefonts\rm #1}}
+\let\subsecfonts = \ssecfonts
+\let\subsubsecfonts = \ssecfonts
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter. #1 is what to
+% print if we are indeed using \tt; #2 is what to print otherwise.
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+
+% Check if internal flag is clear, i.e. has not been @set.
+\def\ifflagclear#1#2#3{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ #2\else#3\fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright}
+\gdef\setregularquotes{\let`\lq \let'\rq}
+}
+\setregularquotes
+
+% output for ' in @code
+% in tt font hex 0D (undirected) or 27 (curly right quote)
+%
+\def\codequoteright{%
+ \ifusingtt
+ {\ifflagclear{txicodequoteundirected}%
+ {\ifflagclear{codequoteundirected}%
+ {'}%
+ {\char"0D }}%
+ {\char"0D }}%
+ {'}%
+}
+
+% output for ` in @code
+% in tt font hex 12 (grave accent) or 60 (curly left quote)
+% \relax disables Spanish ligatures ?` and !` of \tt font.
+%
+\def\codequoteleft{%
+ \ifusingtt
+ {\ifflagclear{txicodequotebacktick}%
+ {\ifflagclear{codequotebacktick}%
+ {\relax`}%
+ {\char"12 }}%
+ {\char"12 }}%
+ {\relax`}%
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% Turn them on by default
+\let\SETtxicodequoteundirected = t
+\let\SETtxicodequotebacktick = t
+
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless the following character is such as
+% not to need one.
+\def\smartitaliccorrection{\futurelet\next\smartitaliccorrectionx}
+\def\smartitaliccorrectionx{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ifx\next\.%
+ \else\ifx\next\comma%
+ \else\ptexslash
+ \fi\fi\fi\fi\fi
+ \aftersmartic
+}
+
+% @cite unconditionally uses \sl with \smartitaliccorrection.
+\def\cite#1{{\sl #1}\smartitaliccorrection}
+
+% @var unconditionally uses \sl. This gives consistency for
+% parameter names whether they are in @def, @table @code or a
+% regular paragraph.
+% To get ttsl font for @var when used in code context, @set txicodevaristt.
+% The \null is to reset \spacefactor.
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ %
+ \ifflagclear{txicodevaristt}%
+ {\def\varnext{{{\sl #1}}\smartitaliccorrection}}%
+ {\def\varnext{\smartslanted{#1}}}%
+ \varnext
+}
+
+% To be removed after next release
+\def\SETtxicodevaristt{}% @set txicodevaristt
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% @r for roman font, used for code comment
+\def\r#1{{%
+ \usenormaldash % get --, --- ligatures even if in @code
+ \defcharsdefault % in case on def line
+ \rm #1}}
+{\catcode`-=\active \gdef\usenormaldash{\let-\normaldash}}
+
+% @sc, undocumented @ii.
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+\newif\iffrenchspacing
+\frenchspacingfalse
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\plainfrenchspacing{%
+ \iffrenchspacing\else
+ \frenchspacingtrue
+ \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
+ \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ \fi
+ }
+ \def\plainnonfrenchspacing{%
+ \iffrenchspacing
+ \frenchspacingfalse
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ \fi
+ }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\let\frenchspacingsetting\plainnonfrenchspacing % used in output routine
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \let\frenchspacingsetting\plainfrenchspacing
+ \else\ifx\temp\offword \let\frenchspacingsetting\plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+ \frenchspacingsetting
+}
+
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \defcharsdefault \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}}
+
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% This is for LuaTeX: It is not sufficient to disable hyphenation at
+% explicit dashes by setting `\hyphenchar` to -1.
+\def\dashnobreak{%
+ \normaldash
+ \penalty 10000 }
+
+% We must turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+% We explicitly allow hyphenation at these characters
+% using \discretionary.
+%
+% Hyphenation at - and hyphenation within words was turned off
+% by default for the tt fonts using the \hyphenchar parameter of TeX.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setcodequotes
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\dashnobreak
+ \let_\realunder
+ \fi
+ \codex
+ }
+ %
+ \gdef\codedash{\futurelet\next\codedashfinish}
+ \gdef\codedashfinish{%
+ \normaldash % always output the dash character itself.
+ %
+ % Now, output a discretionary to allow a line break, unless
+ % (a) the next character is a -, or
+ % (b) the preceding character is a -, or
+ % (c) we are at the start of the string.
+ % In both cases (b) and (c), \codedashnobreak should be set to \codedash.
+ %
+ % E.g., given --posix, we do not want to allow a break after either -.
+ % Given --foo-bar, we do want to allow a break between the - and the b.
+ \ifx\next\codedash \else
+ \ifx\codedashnobreak\codedash
+ \else \discretionary{}{}{}\fi
+ \fi
+ % we need the space after the = for the case when \next itself is a
+ % space token; it would get swallowed otherwise. As in @code{- a}.
+ \global\let\codedashnobreak= \next
+ }
+}
+\def\normaldash{-}
+%
+\def\codex #1{\tclose{%
+ % Given -foo (with a single dash), we do not want to allow a break
+ % after the -. \codedashnobreak is set to the first character in
+ % @code.
+ \futurelet\codedashnobreak\relax
+ #1%
+}\endgroup}
+
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
+\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
+
+% @uref (abbreviation for `urlref') aka @url takes an optional
+% (comma-separated) second argument specifying the text to display and
+% an optional third arg as text to display instead of (rather than in
+% addition to) the url itself. First (mandatory) arg is the url.
+
+% TeX-only option to allow changing PDF output to show only the second
+% arg (if given), and not the url (which is then just the link target).
+\newif\ifurefurlonlylink
+
+% The default \pretolerance setting stops the penalty inserted in
+% \urefallowbreak being a discouragement to line breaking. Set it to
+% a negative value for this paragraph only. Hopefully this does not
+% conflict with redefinitions of \par done elsewhere.
+\def\nopretolerance{%
+\pretolerance=-1
+\def\par{\endgraf\pretolerance=100 \let\par\endgraf}%
+}
+
+% The main macro is \urefbreak, which allows breaking at expected
+% places within the url.
+\def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+%
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}% look for second arg
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+ \else
+ % For XeTeX
+ \ifurefurlonlylink
+ % PDF plus option to not display url, show just arg
+ \unhbox0
+ \else
+ % PDF, normally display both arg and url for consistency,
+ % visibility, if the pdf is eventually used to print, etc.
+ \unhbox0\ (\urefcode{#1})%
+ \fi
+ \fi
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode`\&=\active \catcode`\.=\active
+ \catcode`\#=\active \catcode`\?=\active
+ \catcode`\/=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setcodequotes
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+\def\urefcodeamp{\urefprebreak \&\urefpostbreak}
+\def\urefcodedot{\urefprebreak .\urefpostbreak}
+\def\urefcodehash{\urefprebreak \#\urefpostbreak}
+\def\urefcodequest{\urefprebreak ?\urefpostbreak}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprebreak \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpostbreak \fi
+ }
+}
+
+% By default we'll break after the special characters, but some people like to
+% break before the special chars, so allow that. Also allow no breaking at
+% all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+% Allow a ragged right output to aid breaking long URL's. There can
+% be a break at the \allowbreak with no extra glue (if the existing stretch in
+% the line is sufficient), a break at the \penalty with extra glue added
+% at the end of the line, or no break at all here.
+% Changing the value of the penalty and/or the amount of stretch affects how
+% preferable one choice is over the other.
+\def\urefallowbreak{%
+ \penalty0\relax
+ \hskip 0pt plus 2 em\relax
+ \penalty1000\relax
+ \hskip 0pt plus -2 em\relax
+}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdforxetex
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+\def\kbd#1{%
+ \tclose{\kbdfont\setcodequotes#1}%
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge.
+%
+\def\key#1{{\setregularquotes \tt #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\switchtolsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \ifmmode\else % only go into math if not in math mode already
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ % have to provide another name for sup operator
+ \let\mathopsup=\sup
+ $\expandafter\finishmath\fi
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% for @sub and @sup, if in math mode, just do a normal sub/superscript.
+% If in text, use math to place as sub/superscript, but switch
+% into text mode, with smaller fonts. This is a different font than the
+% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
+% fix it (significant additions to font machinery) until someone notices.
+%
+\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
+\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
+%
+\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
+\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
+
+% provide this command from LaTeX as it is very common
+\def\frac#1#2{{{#1}\over{#2}}}
+
+% @displaymath.
+% \globaldefs is needed to recognize the end lines in \tex and
+% \end tex. Set \thisenv as @end displaymath is seen before @end tex.
+{\obeylines
+\globaldefs=1
+\envdef\displaymath{%
+\tex%
+\def\thisenv{\displaymath}%
+\begingroup\let\end\displaymathend%
+$$%
+}
+
+\def\displaymathend{$$\endgroup\end}%
+
+\def\Edisplaymath{%
+\def\thisenv{\tex}%
+\end tex
+}}
+
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+%
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
+% FMTNAME is tex, else ELSE-TEXT.
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
+}
+%
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
+%
+\long\def\inlineifset#1{\doinlineifset #1,\finish}
+\long\def\doinlineifset#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
+ \else\ignorespaces#2\fi
+}
+
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
+%
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
+\long\def\doinlineifclear#1,#2,\finish{%
+ \def\inlinevarname{#1}%
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
+\def\@{\char64 }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+\def\lbracechar{{\ifusingtt{\char123}{\ensuremath\lbrace}}}
+\def\rbracechar{{\ifusingtt{\char125}{\ensuremath\rbrace}}}
+\let\{=\lbracechar
+\let\}=\rbracechar
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ \ifx\curfontsize\smallword
+ % For footnotes and indices
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \switchtolllsize A%
+ \fi
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+\def\smallword{small}
+
+% Some math mode symbols. Define \ensuremath to switch into math mode
+% unless we are already there. Expansion tricks may not be needed here,
+% but safer, and can't hurt.
+\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
+\def\ensuredmath#1{$\relax#1$}
+%
+\def\bullet{\ensuremath\ptexbullet}
+\def\geq{\ensuremath\ge}
+\def\leq{\ensuremath\le}
+\def\minus{\ensuremath-}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\ttfont \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\ifusingtt{\ecfont\char"BF}{\it\$}}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+\def\L{{\ecfont \char"8A}} % L with stroke
+\def\l{{\ecfont \char"AA}} % l with stroke
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the European Computer Modern fonts (cm-super in outline format)
+% for non-CM glyphs. That is ec* for regular text and tc* for the text
+% companion symbols (LaTeX TS1 encoding). Both are part of the ec
+% package and follow the same conventions.
+%
+\def\ecfont{\etcfont{e}}
+\def\tcfont{\etcfont{t}}
+%
+\def\etcfont#1{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifusingtt
+ % typewriter:
+ {\font\thisecfont = #1ctt\ecsize \space at \nominalsize}%
+ % else
+ {\ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi}%
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{%
+ \ifmmode ^\circ
+ \else {\tcfont \char 176}%
+ \fi}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+% only change font for tt for correct kerning and to avoid using
+% \ecfont unless necessary.
+\def\quotedblleft{%
+ \ifusingtt{{\ecfont\char"10}}{{\char"5C}}%
+}
+
+\def\quotedblright{%
+ \ifusingtt{{\ecfont\char"11}}{{\char`\"}}%
+}
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% @setcontentsaftertitlepage used to do an implicit @contents or
+% @shortcontents after @end titlepage, but it is now obsolete.
+\def\setcontentsaftertitlepage{%
+ \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @contents command if you want the contents
+ after the title page.}}%
+\def\setshortcontentsaftertitlepage{%
+ \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
+ command; move your @shortcontents and @contents commands if you
+ want the contents after the title page.}}%
+
+\parseargdef\shorttitlepage{%
+ {\headingsoff \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}\pageone}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ \headingsoff
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \pageone
+ \endgroup
+ %
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. \par should
+% be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rm
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\rmfont
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rm \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenchapheadline% headline on even pages with a new chapter
+\newtoks\oddchapheadline % headline on odd pages with a new chapter
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make \makeheadline and \makefootline in Plain TeX use those variables
+\headline={{\textfonts\rm\frenchspacingsetting
+ \ifchapterpage
+ \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi
+ \else
+ \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi
+ \fi}}
+
+\footline={{\textfonts\rm\frenchspacingsetting
+ \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}%
+ \HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}
+ \global\evenchapheadline=\evenheadline}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ \global\oddchapheadline=\oddheadline}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\txipageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+% These define \getoddheadingmarks, \getevenheadingmarks,
+% \getoddfootingmarks, and \getevenfootingmarks, each to one of
+% \gettopheadingmarks, \getbottomheadingmarks.
+%
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\parseargdef\headings{\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+
+% Set the page number to 1.
+\def\pageone{
+ \global\pageno=1
+ \global\arabiccount = \pagecount
+}
+
+\let\contentsalignmacro = \chappager
+
+% \def\HEADINGSon{\HEADINGSdouble} % defined by \CHAPPAGon
+
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdouble}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdouble{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline={\line{\folio\hfil\thistitle}}
+\global\oddchapheadline={\line{\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsingle}
+\def\HEADINGSsingle{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline={\line{\hfil\folio}}
+\global\oddchapheadline={\line{\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% for @setchapternewpage off
+\def\HEADINGSsinglechapoff{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\evenchapheadline=\evenheadline
+\global\oddchapheadline=\oddheadline
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark so that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \ifinner\else
+ \vadjust{\penalty 1200}% not good to break after first line of item.
+ \fi
+ % We can be in inner vertical mode in a footnote, although an
+ % @itemize looks awful there.
+ }%
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+
+% @multitable macros
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% @headitem starts a heading row, which we typeset in bold. Assignments
+% have to be global since we are inside the implicit group of an
+% alignment entry. \everycr below resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \crcr % must appear first
+ \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% default for tables with no headings.
+\let\headitemcrhook=\relax
+%
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \parskip=0pt
+ \parindent=6pt
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}% Reset from possible headitem.
+ \global\colcount=0 % Reset the column counter.
+ %
+ % Check for saved footnotes, etc.:
+ \checkinserts
+ %
+ % Perhaps a \nobreak, then reset:
+ \headitemcrhook
+ \global\let\headitemcrhook=\relax
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \strut
+ \vtop{%
+ \advance\hsize by -1\leftskip
+ % Find the correct column width
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ \advance\rightskip by -1\rightskip % Zero leaving only any stretch
+ \ifnum\colcount=1
+ \advance\hsize by\leftskip % Add indent of surrounding text
+ \else
+ % In order to keep entries from bumping into each other.
+ \leftskip=12pt
+ \ifsetpercent \else
+ % If a template has been used
+ \advance\hsize by \leftskip
+ \fi
+ \fi
+ \noindent\ignorespaces##\unskip\strut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotlatex, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotlatex}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\iflatex{\doignore{iflatex}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\latex{\doignore{latex}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1'.
+ \long\def\doignoretext##1^^M@end #1{%
+ \doignoretextyyy##1^^M@#1\_STOP_}%
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last `@end #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\-=\active \catcode`\_=\active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
+}
+
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Like \expandablevalue, but completely expandable (the \message in the
+% definition above operates at the execution level of TeX). Used when
+% writing to auxiliary files, due to the expansion that \write does.
+% If flag is undefined, pass through an unexpanded @value command: maybe it
+% will be set by the time it is read back in.
+%
+% NB flag names containing - or _ may not work here.
+\def\dummyvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ \string\value{#1}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% Used for @value's in index entries to form the sort key: expand the @value
+% if possible, otherwise sort late.
+\def\indexnofontsvalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ ZZZZZZZ%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get the special treatment we need for `@end ifset,' we call
+% \makecond and then redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {IX} defines an index named IX.
+% It automatically defines \IXindex such that
+% \IXindex ...rest of line... puts an entry in the index IX.
+% It also defines \IXindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is IX.
+%
+\def\newindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \expandafter\chardef\csname#1indfile\endcsname=0
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+% The default indices:
+\newindex{cp}% concepts,
+\newcodeindex{fn}% functions,
+\newcodeindex{vr}% variables,
+\newcodeindex{tp}% types,
+\newcodeindex{ky}% keys
+\newcodeindex{pg}% and programs.
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ \requireopenindexfile{#3}%
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all index macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is the two-letter name of the index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
+\def\doindexxxx #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
+\def\docodeindexxxx #1{\docind{\indexname}{#1}}
+
+
+% \definedummyword defines \#1 as \string\#1\space, thus effectively
+% preventing its expansion. This is used only for control words,
+% not control letters, because the \space would be incorrect for
+% control characters, but is needed to separate the control word
+% from whatever follows.
+%
+% These can be used both for control words that take an argument and
+% those that do not. If it is followed by {arg} in the input, then
+% that will dutifully get written to the index (or wherever).
+%
+% For control letters, we have \definedummyletter, which omits the
+% space.
+%
+\def\definedummyword #1{\def#1{\string#1\space}}%
+\def\definedummyletter#1{\def#1{\string#1}}%
+
+% Used for the aux, toc and index files to prevent expansion of Texinfo
+% commands. Most of the commands are controlled through the
+% \ifdummies conditional.
+%
+\def\atdummies{%
+ \dummiestrue
+ %
+ \definedummyletter\@%
+ \definedummyletter\ %
+ \definedummyletter\{%
+ \definedummyletter\}%
+ \definedummyletter\&%
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ \definedummyword\subentry
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \let\commondummyword\definedummyword
+ \macrolist
+ \let\value\dummyvalue
+ %
+ \turnoffactive
+}
+
+\newif\ifdummies
+\newif\ifindexnofonts
+
+\def\commondummyletter#1{%
+ \expandafter\let\csname\string#1:impl\endcsname#1%
+ \edef#1{%
+ \noexpand\ifindexnofonts
+ % empty expansion
+ \noexpand\else
+ \noexpand\ifdummies\string#1%
+ \noexpand\else
+ \noexpand\jumptwofi % dispose of the \fi
+ \expandafter\noexpand\csname\string#1:impl\endcsname
+ \noexpand\fi
+ \noexpand\fi}%
+}
+
+\def\commondummyaccent#1{%
+ \expandafter\let\csname\string#1:impl\endcsname#1%
+ \edef#1{%
+ \noexpand\ifindexnofonts
+ \noexpand\expandafter % dispose of \else ... \fi
+ \noexpand\asis
+ \noexpand\else
+ \noexpand\ifdummies\string#1%
+ \noexpand\else
+ \noexpand\jumptwofi % dispose of the \fi
+ \expandafter\noexpand\csname\string#1:impl\endcsname
+ \noexpand\fi
+ \noexpand\fi}%
+}
+
+% Like \commondummyaccent but add a \space at the end of the dummy expansion
+% #2 is the expansion used for \indexnofonts. #2 is always followed by
+% \asis to remove a pair of following braces.
+\def\commondummyword#1#2{%
+ \expandafter\let\csname\string#1:impl\endcsname#1%
+ \expandafter\def\csname\string#1:ixnf\endcsname{#2\asis}%
+ \edef#1{%
+ \noexpand\ifindexnofonts
+ \noexpand\expandafter % dispose of \else ... \fi
+ \expandafter\noexpand\csname\string#1:ixnf\endcsname
+ \noexpand\else
+ \noexpand\ifdummies\string#1\space
+ \noexpand\else
+ \noexpand\jumptwofi % dispose of the \fi \fi
+ \expandafter\noexpand\csname\string#1:impl\endcsname
+ \noexpand\fi
+ \noexpand\fi}%
+}
+\def\jumptwofi#1\fi\fi{\fi\fi#1}
+
+% For \atdummies and \indexnofonts. \atdummies sets
+% \dummiestrue and \indexnofonts sets \indexnofontstrue.
+\def\definedummies{
+ % @-sign is always an escape character when reading auxiliary files
+ \escapechar = `\@
+ %
+ \commondummyletter\!%
+ \commondummyaccent\"%
+ \commondummyaccent\'%
+ \commondummyletter\*%
+ \commondummyaccent\,%
+ \commondummyletter\.%
+ \commondummyletter\/%
+ \commondummyletter\:%
+ \commondummyaccent\=%
+ \commondummyletter\?%
+ \commondummyaccent\^%
+ \commondummyaccent\`%
+ \commondummyaccent\~%
+ %
+ % Control letters and accents.
+ \commondummyword\u {}%
+ \commondummyword\v {}%
+ \commondummyword\H {}%
+ \commondummyword\dotaccent {}%
+ \commondummyword\ogonek {}%
+ \commondummyword\ringaccent {}%
+ \commondummyword\tieaccent {}%
+ \commondummyword\ubaraccent {}%
+ \commondummyword\udotaccent {}%
+ \commondummyword\dotless {}%
+ %
+ % Texinfo font commands.
+ \commondummyword\b {}%
+ \commondummyword\i {}%
+ \commondummyword\r {}%
+ \commondummyword\sansserif {}%
+ \commondummyword\sc {}%
+ \commondummyword\slanted {}%
+ \commondummyword\t {}%
+ %
+ % Commands that take arguments.
+ \commondummyword\abbr {}%
+ \commondummyword\acronym {}%
+ \commondummyword\anchor {}%
+ \commondummyword\cite {}%
+ \commondummyword\code {}%
+ \commondummyword\command {}%
+ \commondummyword\dfn {}%
+ \commondummyword\dmn {}%
+ \commondummyword\email {}%
+ \commondummyword\emph {}%
+ \commondummyword\env {}%
+ \commondummyword\file {}%
+ \commondummyword\image {}%
+ \commondummyword\indicateurl{}%
+ \commondummyword\inforef {}%
+ \commondummyword\kbd {}%
+ \commondummyword\key {}%
+ \commondummyword\math {}%
+ \commondummyword\option {}%
+ \commondummyword\pxref {}%
+ \commondummyword\ref {}%
+ \commondummyword\samp {}%
+ \commondummyword\strong {}%
+ \commondummyword\tie {}%
+ \commondummyword\U {}%
+ \commondummyword\uref {}%
+ \commondummyword\url {}%
+ \commondummyword\var {}%
+ \commondummyword\verb {}%
+ \commondummyword\w {}%
+ \commondummyword\xref {}%
+ %
+ \commondummyword\AA {AA}%
+ \commondummyword\AE {AE}%
+ \commondummyword\DH {DZZ}%
+ \commondummyword\L {L}%
+ \commondummyword\O {O}%
+ \commondummyword\OE {OE}%
+ \commondummyword\TH {TH}%
+ \commondummyword\aa {aa}%
+ \commondummyword\ae {ae}%
+ \commondummyword\dh {dzz}%
+ \commondummyword\exclamdown {!}%
+ \commondummyword\l {l}%
+ \commondummyword\o {o}%
+ \commondummyword\oe {oe}%
+ \commondummyword\ordf {a}%
+ \commondummyword\ordm {o}%
+ \commondummyword\questiondown {?}%
+ \commondummyword\ss {ss}%
+ \commondummyword\th {th}%
+ %
+ \commondummyword\LaTeX {LaTeX}%
+ \commondummyword\TeX {TeX}%
+ %
+ % Assorted special characters.
+ \commondummyword\ampchar {\normalamp}%
+ \commondummyword\atchar {\@}%
+ \commondummyword\arrow {->}%
+ \commondummyword\backslashchar {\realbackslash}%
+ \commondummyword\bullet {bullet}%
+ \commondummyword\comma {,}%
+ \commondummyword\copyright {copyright}%
+ \commondummyword\dots {...}%
+ \commondummyword\enddots {...}%
+ \commondummyword\entrybreak {}%
+ \commondummyword\equiv {===}%
+ \commondummyword\error {error}%
+ \commondummyword\euro {euro}%
+ \commondummyword\expansion {==>}%
+ \commondummyword\geq {>=}%
+ \commondummyword\guillemetleft {<<}%
+ \commondummyword\guillemetright {>>}%
+ \commondummyword\guilsinglleft {<}%
+ \commondummyword\guilsinglright {>}%
+ \commondummyword\lbracechar {\{}%
+ \commondummyword\leq {<=}%
+ \commondummyword\mathopsup {sup}%
+ \commondummyword\minus {-}%
+ \commondummyword\pounds {pounds}%
+ \commondummyword\point {.}%
+ \commondummyword\print {-|}%
+ \commondummyword\quotedblbase {"}%
+ \commondummyword\quotedblleft {"}%
+ \commondummyword\quotedblright {"}%
+ \commondummyword\quoteleft {`}%
+ \commondummyword\quoteright {'}%
+ \commondummyword\quotesinglbase {,}%
+ \commondummyword\rbracechar {\}}%
+ \commondummyword\registeredsymbol {R}%
+ \commondummyword\result {=>}%
+ \commondummyword\sub {}%
+ \commondummyword\sup {}%
+ \commondummyword\textdegree {o}%
+}
+
+\let\indexlbrace\relax
+\let\indexrbrace\relax
+\let\indexatchar\relax
+\let\indexbackslash\relax
+
+{\catcode`\@=0
+\catcode`\\=13
+ @gdef@backslashdisappear{@def\{}}
+}
+
+{
+\catcode`\<=13
+\catcode`\-=13
+\catcode`\`=13
+ \gdef\indexnonalnumdisappear{%
+ \ifflagclear{txiindexlquoteignore}{}{%
+ % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
+ % (Introduced for FSFS 2nd ed.)
+ \let`=\empty
+ }%
+ %
+ \ifflagclear{txiindexbackslashignore}{}{%
+ \backslashdisappear
+ }%
+ \ifflagclear{txiindexhyphenignore}{}{%
+ \def-{}%
+ }%
+ \ifflagclear{txiindexlessthanignore}{}{%
+ \def<{}%
+ }%
+ \ifflagclear{txiindexatsignignore}{}{%
+ \def\@{}%
+ }%
+ }
+
+ \gdef\indexnonalnumreappear{%
+ \let-\normaldash
+ \let<\normalless
+ }
+}
+
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ \indexnofontstrue
+ %
+ \def\ { }%
+ \def\@{@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ \uccode`\1=`\{ \uppercase{\def\{{1}}%
+ \uccode`\1=`\} \uppercase{\def\}{1}}%
+ \let\lbracechar\{%
+ \let\rbracechar\}%
+ %
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \def\commondummyword##1{\let##1\asis}%
+ \macrolist
+ \let\value\indexnofontsvalue
+}
+
+
+
+
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{%
+ \iflinks
+ {%
+ %
+ \requireopenindexfile{#1}%
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \def\indextext{#2}%
+ \safewhatsit\doindwrite
+ }%
+ \fi
+}
+
+% Same as \doind, but for code indices
+\def\docind#1#2{%
+ \iflinks
+ {%
+ %
+ \requireopenindexfile{#1}%
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \def\indextext{#2}%
+ \safewhatsit\docindwrite
+ }%
+ \fi
+}
+
+% Check if an index file has been opened, and if not, open it.
+\def\requireopenindexfile#1{%
+\ifnum\csname #1indfile\endcsname=0
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \edef\suffix{#1}%
+ % A .fls suffix would conflict with the file extension for the output
+ % of -recorder, so use .f1s instead.
+ \ifx\suffix\indexisfl\def\suffix{f1}\fi
+ % Open the file
+ \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
+ % Using \immediate above here prevents an object entering into the current
+ % box, which could confound checks such as those in \safewhatsit for
+ % preceding skips.
+ \typeout{Writing index file \jobname.\suffix}%
+\fi}
+\def\indexisfl{fl}
+
+% Definition for writing index entry sort key.
+{
+\catcode`\-=13
+\gdef\indexwritesortas{%
+ \begingroup
+ \indexnonalnumreappear
+ \indexwritesortasxxx}
+\gdef\indexwritesortasxxx#1{%
+ \xdef\indexsortkey{#1}\endgroup}
+}
+
+\def\indexwriteseealso#1{
+ \gdef\pagenumbertext{\string\seealso{#1}}%
+}
+\def\indexwriteseeentry#1{
+ \gdef\pagenumbertext{\string\seeentry{#1}}%
+}
+
+% The default definitions
+\def\sortas#1{}%
+\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
+\def\putwordSeeAlso{See also}
+\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
+
+
+% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
+% * Set \bracedtext to "{aaa}{bbb}"
+% * Set \fullindexsortkey to "aaa @subentry ZZZ"
+% * If @seealso occurs, set \pagenumbertext
+%
+\def\splitindexentry#1{%
+ \gdef\fullindexsortkey{}%
+ \xdef\bracedtext{}%
+ \def\sep{}%
+ \def\seealso##1{}%
+ \def\seeentry##1{}%
+ \expandafter\doindexsegment#1\subentry\finish\subentry
+}
+
+% append the results from the next segment
+\def\doindexsegment#1\subentry{%
+ \def\segment{#1}%
+ \ifx\segment\isfinish
+ \else
+ %
+ % Fully expand the segment, throwing away any @sortas directives, and
+ % trim spaces.
+ \edef\trimmed{\segment}%
+ \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+ \ifincodeindex
+ \edef\trimmed{\noexpand\code{\trimmed}}%
+ \fi
+ %
+ \xdef\bracedtext{\bracedtext{\trimmed}}%
+ %
+ % Get the string to sort by. Process the segment with all
+ % font commands turned off.
+ \bgroup
+ \let\sortas\indexwritesortas
+ \let\seealso\indexwriteseealso
+ \let\seeentry\indexwriteseeentry
+ \indexnofonts
+ % The braces around the commands are recognized by texindex.
+ \def\lbracechar{{\string\indexlbrace}}%
+ \def\rbracechar{{\string\indexrbrace}}%
+ \let\{=\lbracechar
+ \let\}=\rbracechar
+ \def\@{{\string\indexatchar}}%
+ \def\atchar##1{\@}%
+ \def\backslashchar{{\string\indexbackslash}}%
+ \uccode`\~=`\\ \uppercase{\let~\backslashchar}%
+ %
+ \let\indexsortkey\empty
+ \global\let\pagenumbertext\empty
+ % Execute the segment and throw away the typeset output. This executes
+ % any @sortas or @seealso commands in this segment.
+ \setbox\dummybox = \hbox{\segment}%
+ \ifx\indexsortkey\empty{%
+ \indexnonalnumdisappear
+ \xdef\trimmed{\segment}%
+ \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
+ \xdef\indexsortkey{\trimmed}%
+ \ifx\indexsortkey\empty
+ \message{Empty index sort key near line \the\inputlineno}%
+ \xdef\indexsortkey{ }%
+ \fi
+ }\fi
+ %
+ % Append to \fullindexsortkey.
+ \edef\tmp{\gdef\noexpand\fullindexsortkey{%
+ \fullindexsortkey\sep\indexsortkey}}%
+ \tmp
+ \egroup
+ \def\sep{\subentry}%
+ %
+ \expandafter\doindexsegment
+ \fi
+}
+\def\isfinish{\finish}%
+\newbox\dummybox % used above
+
+\let\subentry\relax
+
+% Use \ instead of @ in index files. To support old texi2dvi and texindex.
+% This works without changing the escape character used in the toc or aux
+% files because the index entries are fully expanded here, and \string uses
+% the current value of \escapechar.
+\def\escapeisbackslash{\escapechar=`\\}
+
+% Use \ in index files by default. texi2dvi didn't support @ as the escape
+% character (as it checked for "\entry" in the files, and not "@entry"). When
+% the new version of texi2dvi has had a chance to become more prevalent, then
+% the escape character can change back to @ again. This should be an easy
+% change to make now because both @ and \ are only used as escape characters in
+% index files, never standing for themselves.
+%
+\set txiindexescapeisbackslash
+
+% Write the entry in \indextext to the index file.
+%
+
+\newif\ifincodeindex
+\def\doindwrite{\incodeindexfalse\doindwritex}
+\def\docindwrite{\incodeindextrue\doindwritex}
+
+\def\doindwritex{%
+ \maybemarginindex
+ %
+ \atdummies
+ %
+ \ifflagclear{txiindexescapeisbackslash}{}{\escapeisbackslash}%
+ %
+ % For texindex which always views { and } as separators.
+ \def\{{\lbracechar{}}%
+ \def\}{\rbracechar{}}%
+ \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
+ %
+ % Split the entry into primary entry and any subentries, and get the index
+ % sort key.
+ \splitindexentry\indextext
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ %
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\fullindexsortkey}%
+ {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
+ \bracedtext}%
+ }%
+ \temp
+}
+
+% Put the index entry in the margin if desired (undocumented).
+\def\maybemarginindex{%
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
+ \fi
+}
+\let\SETmarginindex=\relax
+
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% \entry {topic}{}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+% \secondary {subtopic}{}
+% for a subtopic with sub-subtopics
+% \tertiary {subtopic}{subsubtopic}{pagelist}
+% for each sub-subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See comment in \requireopenindexfile.
+ \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
+ %
+ % See if the index file exists and is nonempty.
+ \openin 1 \jobname.\indexname s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \typeout{No file \jobname.\indexname s.}%
+ \else
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \thisline
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ \expandafter\printindexzz\thisline\relax\relax\finish%
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% If the index file starts with a backslash, forgo reading the index
+% file altogether. If somebody upgrades texinfo.tex they may still have
+% old index files using \ as the escape character. Reading this would
+% at best lead to typesetting garbage, at worst a TeX syntax error.
+\def\printindexzz#1#2\finish{%
+ \ifflagclear{txiindexescapeisbackslash}{%
+ \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
+ \ifflagclear{txiskipindexfileswithbackslash}{%
+\errmessage{%
+ERROR: A sorted index file in an obsolete format was skipped.
+To fix this problem, please upgrade your version of 'texi2dvi'
+or 'texi2pdf' to that at <https://ftp.gnu.org/gnu/texinfo>.
+If you are using an old version of 'texindex' (part of the Texinfo
+distribution), you may also need to upgrade to a newer version (at least 6.0).
+You may be able to typeset the index if you run
+'texindex \jobname.\indexname' yourself.
+You could also try setting the 'txiindexescapeisbackslash' flag by
+running a command like
+'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do
+this, Texinfo will try to use index files in the old format.
+If you continue to have problems, deleting the index files and starting again
+might help (with 'rm \jobname.?? \jobname.??s')%
+}%
+ }{%
+ (Skipped sorted index file in obsolete format)
+ }%
+ \else
+ \begindoublecolumns
+ \input \jobname.\indexname s
+ \enddoublecolumns
+ \fi
+ }{%
+ \begindoublecolumns
+ \catcode`\\=0\relax
+ %
+ % Make @ an escape character to give macros a chance to work. This
+ % should work because we (hopefully) don't otherwise use @ in index files.
+ %\catcode`\@=12\relax
+ \catcode`\@=0\relax
+ \input \jobname.\indexname s
+ \enddoublecolumns
+ }%
+}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
+\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
+\catcode`\$=3
+\gdef\initialglyphs{%
+ % special control sequences used in the index sort key
+ \let\indexlbrace\{%
+ \let\indexrbrace\}%
+ \let\indexatchar\@%
+ \def\indexbackslash{\math{\backslash}}%
+ %
+ % Some changes for non-alphabetic characters. Using the glyphs from the
+ % math fonts looks more consistent than the typewriter font used elsewhere
+ % for these characters.
+ \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
+ %
+ % In case @\ is used for backslash
+ \uppercase{\let\\=~}
+ % Can't get bold backslash so don't use bold forward slash
+ \catcode`\/=13
+ \def/{{\secrmnotbold \normalslash}}%
+ \def-{{\normaldash\normaldash}}% en dash `--'
+ \def^{{\chapbf \normalcaret}}%
+ \def~{{\chapbf \normaltilde}}%
+ \def\_{%
+ \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
+ \def|{$\vert$}%
+ \def<{$\less$}%
+ \def>{$\gtr$}%
+ \def+{$\normalplus$}%
+}}
+
+\def\initial{%
+ \bgroup
+ \initialglyphs
+ \initialx
+}
+
+\def\initialx#1{%
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ % The glue before the bonus allows a little bit of space at the
+ % bottom of a column to reduce an increase in inter-line spacing.
+ \nobreak
+ \vskip 0pt plus 5\baselineskip
+ \penalty -300
+ \vskip 0pt plus -5\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus 1\baselineskip
+ \leftline{\secfonts \kern-0.05em \secbf #1}%
+ % \secfonts is inside the argument of \leftline so that the change of
+ % \baselineskip will not affect any glue inserted before the vbox that
+ % \leftline creates.
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+ \egroup % \initialglyphs
+}
+
+\newdimen\entryrightmargin
+\entryrightmargin=0pt
+
+% for PDF output, whether to make the text of the entry a link to the page
+% number. set for @contents and @shortcontents where there is only one
+% page number.
+\newif\iflinkentrytext
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}% An undocumented command
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ % Save the text of the entry in \boxA
+ \global\setbox\boxA=\hbox\bgroup
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+ % Not absorbing as a macro argument reduces the chance of problems
+ % with catcodes occurring.
+}
+{\catcode`\@=11
+% #1 is the page number
+\gdef\finishentry#1{%
+ \egroup % end \boxA
+ \dimen@ = \wd\boxA % Length of text of entry
+ % add any leaders and page number to \boxA.
+ \global\setbox\boxA=\hbox\bgroup
+ \ifpdforxetex
+ \iflinkentrytext
+ \pdflinkpage{#1}{\unhbox\boxA}%
+ \else
+ \unhbox\boxA
+ \fi
+ \else
+ \unhbox\boxA
+ \fi
+ %
+ % Get the width of the page numbers, and only use
+ % leaders if they are present.
+ \global\setbox\boxB = \hbox{#1}%
+ \ifdim\wd\boxB = 0pt
+ \null\nobreak\hfill\ %
+ \else
+ %
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ \ifpdforxetex
+ \pdfgettoks#1.%
+ \hskip\skip\thinshrinkable\the\toksA
+ \else
+ \hskip\skip\thinshrinkable #1%
+ \fi
+ \fi
+ \egroup % end \boxA
+ %
+ % now output
+ \ifdim\wd\boxB = 0pt
+ \noindent\unhbox\boxA\par
+ \nobreak
+ \else\bgroup
+ % We want the text of the entries to be aligned to the left, and the
+ % page numbers to be aligned to the right.
+ %
+ \parindent = 0pt
+ \advance\leftskip by 0pt plus 1fil
+ \advance\leftskip by 0pt plus -1fill
+ \rightskip = 0pt plus -1fil
+ \advance\rightskip by 0pt plus 1fill
+ % Cause last line, which could consist of page numbers on their own
+ % if the list of page numbers is long, to be aligned to the right.
+ \parfillskip=0pt plus -1fill
+ %
+ \advance\rightskip by \entryrightmargin
+ % Determine how far we can stretch into the margin.
+ % This allows, e.g., "Appendix H GNU Free Documentation License" to
+ % fit on one line in @letterpaper format.
+ \ifdim\entryrightmargin>2.1em
+ \dimen@i=2.1em
+ \else
+ \dimen@i=0em
+ \fi
+ \advance \parfillskip by 0pt minus 1\dimen@i
+ %
+ \dimen@ii = \hsize
+ \advance\dimen@ii by -1\leftskip
+ \advance\dimen@ii by -1\entryrightmargin
+ \advance\dimen@ii by 1\dimen@i
+ \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
+ \ifdim\dimen@ > 0.8\dimen@ii % due to long index text
+ % Try to split the text roughly evenly. \dimen@ will be the length of
+ % the first line.
+ \dimen@ = 0.7\dimen@
+ \dimen@ii = \hsize
+ \ifnum\dimen@>\dimen@ii
+ % If the entry is too long (for example, if it needs more than
+ % two lines), use all the space in the first line.
+ \dimen@ = \dimen@ii
+ \fi
+ \advance\leftskip by 0pt plus 1fill % ragged right
+ \advance \dimen@ by 1\rightskip
+ \parshape = 2 0pt \dimen@ 0em \dimen@ii
+ % Ideally we'd add a finite glue at the end of the first line only,
+ % instead of using \parshape with explicit line lengths, but TeX
+ % doesn't seem to provide a way to do such a thing.
+ %
+ % Indent all lines but the first one.
+ \advance\leftskip by 1em
+ \advance\parindent by -1em
+ \fi\fi
+ \indent % start paragraph
+ \unhbox\boxA
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % Word spacing - no stretch
+ \spaceskip=\fontdimen2\font minus \fontdimen4\font
+ %
+ \linepenalty=1000 % Discourage line breaks.
+ \hyphenpenalty=5000 % Discourage hyphenation.
+ %
+ \par % format the paragraph
+ \egroup % The \vbox
+ \fi
+ \endgroup
+}}
+
+\newskip\thinshrinkable
+\skip\thinshrinkable=.15em minus .15em
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+% The filll stretch here overpowers both the fil and fill stretch to push
+% the page number to the right.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
+
+
+\def\primary #1{\line{#1\hfil}}
+
+\def\secondary{\indententry{0.5cm}}
+\def\tertiary{\indententry{1cm}}
+
+\def\indententry#1#2#3{%
+ \bgroup
+ \leftskip=#1
+ \entry{#2}{#3}%
+ \egroup
+}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11 % private names
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % If not much space left on page, start a new page.
+ \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
+ %
+ % Grab any single-column material above us.
+ \output = {%
+ \savetopmark
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \advance\vsize by -\ht\partialpage
+ \vsize = 2\vsize
+ %
+ % For the benefit of balancing columns
+ \advance\baselineskip by 0pt plus 0.5pt
+}
+
+% The double-column output routine for all double-column pages except
+% the last, which is done by \balancecolumns.
+%
+\def\doublecolumnout{%
+ %
+ \savetopmark
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
+ \global\advance\vsize by 2\ht\partialpage
+ \onepageout\pagesofar % empty except for the first time we are called
+ \unvbox\PAGE
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\txipagewidth{\box0\hfil\box2}%
+}
+
+
+% Finished with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \txipageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material.
+ \savetopmark
+ \balancecolumns
+ }%
+ \eject % call the \output just set
+ \ifdim\pagetotal=0pt
+ % Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away.
+ \global\output=\expandafter{\the\defaultoutput}
+ %
+ \endgroup % started in \begindoublecolumns
+ % Leave the double-column material on the current page, no automatic
+ % page break.
+ \box\balancedcolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize.
+ \global\vsize = \txipageheight %
+ \pagegoal = \txipageheight %
+ \else
+ % We had some left-over material. This might happen when \doublecolumnout
+ % is called in \balancecolumns. Try again.
+ \expandafter\enddoublecolumns
+ \fi
+}
+\newbox\balancedcolumns
+\setbox\balancedcolumns=\vbox{shouldnt see this}%
+%
+% Only called for the last of the double column material. \doublecolumnout
+% does the others.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \ifdim\dimen@<7\baselineskip
+ % Don't split a short final column in two.
+ \setbox2=\vbox{}%
+ \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+ \else
+ % double the leading vertical space
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ \dimen@ii = \dimen@
+ \splittopskip = \topskip
+ % Loop until left column is at least as high as the right column.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht1<\ht3
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ % Now the left column is in box 1, and the right column in box 3.
+ %
+ % Check whether the left column has come out higher than the page itself.
+ % (Note that we have doubled \vsize for the double columns, so
+ % the actual height of the page is 0.5\vsize).
+ \ifdim2\ht1>\vsize
+ % It appears that we have been called upon to balance too much material.
+ % Output some of it with \doublecolumnout, leaving the rest on the page.
+ \setbox\PAGE=\box0
+ \doublecolumnout
+ \else
+ % Compare the heights of the two columns.
+ \ifdim4\ht1>5\ht3
+ % Column heights are too different, so don't make their bottoms
+ % flush with each other.
+ \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
+ \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
+ \else
+ % Make column bottoms flush with each other.
+ \setbox2=\vbox to\ht1{\unvbox3\unskip}%
+ \setbox0=\vbox to\ht1{\unvbox1\unskip}%
+ \fi
+ \global\setbox\balancedcolumns=\vbox{\pagesofar}%
+ \fi
+ \fi
+ %
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rm #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ % This outputs a mark at the end of the page that clears \thischapter
+ % and \thissection, as is done in \startcontents.
+ \let\pchapsepmacro\relax
+ \chapmacro{}{Yomitfromtoc}{}%
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+
+% Start a new page
+\def\chappager{\par\vfill\supereject}
+
+% \chapoddpage - start on an odd page for a new chapter
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname\HEADINGSon}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\def\HEADINGSon{\HEADINGSsinglechapoff}}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\setchapternewpage on
+
+% \chapmacro - Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+% Not used for @heading series.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yappendixkeyword{Yappendix}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+%
+%
+% Definitions for @thischapter. These can be overridden in translation
+% files.
+\def\thischapterAppendix{%
+ \putwordAppendix{} \thischapternum: \thischaptername}
+
+\def\thischapterChapter{%
+ \putwordChapter{} \thischapternum: \thischaptername}
+%
+%
+\def\chapmacro#1#2#3{%
+ \expandafter\ifx\thisenv\titlepage\else
+ \checkenv{}% chapters, etc., should not start inside an environment.
+ \fi
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\currentchapterdefs
+ \let\prevsectiondefs=\currentsectiondefs
+ \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\currentchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ \let\noexpand\thischapter\noexpand\thischapterAppendix
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\currentchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ \let\noexpand\thischapter\noexpand\thischapterChapter
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\currentchapterdefs
+ \let\prevsectiondefs=\currentsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rm
+ \let\footnote=\errfootnoteheading % give better error message
+ %
+ % Have to define \currentsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\currentsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+% Definition for @thissection. This can be overridden in translation
+% files.
+\def\thissectionDef{%
+ \putwordSection{} \thissectionnum: \thissectionname}
+%
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text of the title,
+% #2 is the section level (sec/subsec/subsubsec),
+% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
+% #4 is the section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % It is ok for the @heading series commands to appear inside an
+ % environment (it's been historically allowed, though the logic is
+ % dubious), but not the others.
+ \ifx\temptype\Yomitfromtockeyword\else
+ \checkenv{}% non-@*heading should not be in an environment.
+ \fi
+ \let\footnote=\errfootnoteheading
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\currentsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\currentsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ \let\noexpand\thissection\noexpand\thissectionDef
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\currentsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ \let\noexpand\thissection\noexpand\thissectionDef
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \global\let\prevsectiondefs=\currentsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\currentsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \currentsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\currentsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\currentsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdforxetex
+ \global\pdfmakepagedesttrue
+ \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters.
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \entryrightmargin=\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+ \def\thistitle{}% no title in double-sided headings
+ % Record where the Roman numerals started.
+ \ifnum\romancount=0 \global\romancount=\pagecount \fi
+ \linkentrytexttrue
+}
+
+% \raggedbottom in plain.tex hardcodes \topskip so override it
+\catcode`\@=11
+\def\raggedbottom{\advance\topskip by 0pt plus60pt \r@ggedbottomtrue}
+\catcode`\@=\other
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \contentsendroman
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \contentsendroman
+}
+\let\shortcontents = \summarycontents
+
+% Get ready to use Arabic numerals again
+\def\contentsendroman{%
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+ %
+ % If \romancount > \arabiccount, the contents are at the end of the
+ % document. Otherwise, advance where the Arabic numerals start for
+ % the page numbers.
+ \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi
+}
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{%
+ % Add stretch and a bonus for breaking the page before the part heading.
+ % This reduces the chance of the page being broken immediately after the
+ % part heading, before a following chapter heading.
+ \vskip 0pt plus 5\baselineskip
+ \penalty-300
+ \vskip 0pt plus -5\baselineskip
+ \dochapentry{\numeralbox\labelspace#1}{}%
+}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{#4}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{#4}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ % Move the page numbers slightly to the right
+ \advance\entryrightmargin by -0.05em
+ \chapentryfonts
+ \tocentry{#1}{#2}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{#2}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{#2}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{#2}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setregularquotes
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode `\`=\other
+ \catcode `\'=\other
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ % Inverse of the list at the beginning of the file.
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\sp=\ptexsp
+ \let\*=\ptexstar
+ %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % we've made it outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ \ifnum\lastpenalty<10000
+ % Penalize breaking before the environment, because preceding text
+ % often leads into it.
+ \penalty100
+ \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\def\afterenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+% only require the font if @cartouche is actually used
+\def\cartouchefontdefs{%
+ \font\circle=lcircle10\relax
+ \circthick=\fontdimen8\circle
+}
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+
+\envparseargdef\cartouche{%
+ \cartouchefontdefs
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ %
+ % Set paragraph width for text inside cartouche. There are
+ % left and right margins of 3pt each plus two vrules 0.4pt each.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \advance\cartinner by -6.8pt
+ %
+ % For drawing top and bottom of cartouche. Each corner char
+ % adds 6pt and we take off the width of a rule to line up with the
+ % right boundary perfectly.
+ \cartouter=\hsize
+ \advance\cartouter by 11.6pt
+ %
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \setbox\groupbox=\vtop\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \def\arg{#1}%
+ \ifx\arg\empty\else
+ \centerV{\hfil \bf #1 \hfil}%
+ \fi
+ \kern3pt
+ \vskip -\parskip
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \addgroupbox
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp, @verbatim
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setcodequotes
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \parsearg\gobble
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex.
+\envdef\raggedright{%
+ \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt
+ \def\par{\leavevmode\endgraf}%
+ \parindent = 0pt
+ \setcodequotes
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs.
+\newbox\verbbox
+\def\starttabbox{\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox
+ \leavevmode\box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}%
+ \tabexpand
+ \setcodequotes
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{%
+ \starttabbox#2\egroup\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+ % The \egroup ends the \verbbox started at the end of the last line in
+ % the block.
+\endgroup
+%
+\envdef\verbatim{%
+ \setnormaldispenv\setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ {%
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \edef\tmp{\noexpand\input #1 }
+ \expandafter
+ }\expandafter\starttabbox\tmp\egroup
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is desirable.
+%
+\def\copying{\checkenv{}\begingroup\macrobodyctxt\docopying}
+{\catcode`\ =\other
+\gdef\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+}
+
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+% Called as \printdefunline \deffooheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ \plainfrenchspacing
+ % call \deffooheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \deffoox
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% @defblock, @defline do not automatically create index entries
+\envdef\defblock{%
+ \startdefun
+}
+\let\Edefblock\Edefun
+
+\def\defline{%
+ \doingtypefnfalse
+ \parseargusing\activeparens{\printdefunline\deflineheader}%
+}
+\def\deflineheader#1 #2 #3\endheader{%
+ \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}%
+}
+\def\deftypeline{%
+ \doingtypefntrue
+ \parseargusing\activeparens{\printdefunline\deflineheader}%
+}
+
+% \makedefun{deffoo} (\deffooheader parameters) { (\deffooheader expansion) }
+%
+% Define \deffoo, \deffoox \Edeffoo and \deffooheader.
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As in \startdefun, allow line break if we have multiple x headers
+ % in a row. It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#3% definition of \deffooheader follows
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}#1 #2 #3\endheader{%
+ \doind{fn}{\code{#2}}%
+ \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}%
+}
+
+% @defop category class name args
+\makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}}
+\def\defopheaderx#1#2 #3 #4\endheader{%
+ \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}%
+ \printdefname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}#1 #2 #3 #4\endheader{%
+ \doind{fn}{\code{#3}}%
+ \doingtypefntrue
+ \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}%
+}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}}
+\def\deftypeopheaderx#1#2 #3 #4 #5\endheader{%
+ \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}%
+ \doingtypefntrue
+ \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}#1 #2 #3 #4\endheader{%
+ \doind{vr}{\code{#3}}%
+ \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}%
+}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}}
+\def\deftypecvheaderx#1#2 #3 #4 #5\endheader{%
+ \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}%
+ \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvheaderx{#1\ \putwordof}}
+\def\defcvheaderx#1#2 {\deftypecvheaderx{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \printdefname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopheaderx\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopheaderx\putwordMethodon}
+\makedefun{defivar}{\defcvheaderx\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvheaderx\putwordInstanceVariableof}
+
+% \printdefname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\printdefname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \ifflagclear{txideftypefnnl}{}{\rettypeownlinetrue}%
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ \ifflagclear{txidefnamenospace}{%
+ {\rm\enskip}% hskip 0.5 em of \rmfont
+ }{}%
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments. Use slanted for @def*, typewriter for @deftype*.
+\def\defunargs#1{%
+ \bgroup
+ \df \ifdoingtypefn \tt \else \sl \fi
+ \ifflagclear{txicodevaristt}{}%
+ {\def\var##1{{\setregularquotes \ttsl ##1}}}%
+ #1%
+ \egroup
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \gdef\defcharsdefault{%
+ \let(=\lparen \let)=\rparen
+ \let[=\lbrack \let]=\rbrack
+ \let& = \&%
+ }
+ \globaldefs=1 \defcharsdefault
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+\let\ampchar\&
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\rm\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\let\E=\expandafter
+
+% Used at the time of macro expansion.
+% Argument is macro body with arguments substituted
+\def\scanmacro#1{%
+ \newlinechar`\^^M
+ % expand the expansion of \eatleadingcr twice to maybe remove a leading
+ % newline (and \else and \fi tokens), then call \eatspaces on the result.
+ \def\xeatspaces##1{%
+ \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1%
+ }}%
+ \def\xempty##1{}%
+ %
+ % Process the macro body under the current catcode regime.
+ \scantokens{#1@comment}%
+ %
+ % The \comment is to remove the \newlinechar added by \scantokens, and
+ % can be noticed by \parsearg. Note \c isn't used because this means cedilla
+ % in math mode.
+}
+
+% Used for copying and captions
+\def\scanexp#1{%
+ \expandafter\scanmacro\expandafter{#1}%
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \commondummyword\macro1\commondummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\commondummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+{\catcode`\^^M=\other%
+\gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}%
+% Warning: this won't work for a delimited argument
+% or for an empty argument
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \catcode`\@=\other
+ \catcode`\^^M=\other
+ \catcode`\\=\active
+ \passthroughcharstrue
+}
+
+\def\macrobodyctxt{% used for @macro definitions and @copying
+ \scanctxt
+ \catcode`\ =\other
+ \catcode`\{=\other
+ \catcode`\}=\other
+}
+
+% Used when scanning braced macro arguments. Note, however, that catcode
+% changes here are ineffectual if the macro invocation was nested inside
+% an argument to another Texinfo command.
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\ =\active
+}
+
+\def\macrolineargctxt{% used for whole-line arguments without braces
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt \usembodybackslash
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\commondummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\commondummyword \noexpand#1%
+ \fi
+}
+
+% \getargs -- Parse the arguments to a @macro line. Set \macname to
+% the name of the macro, and \argl to the braced argument list.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+% This made use of the feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+
+% Parse the optional {params} list to @macro or @rmacro.
+% Set \paramno to the number of arguments,
+% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
+% three-param macro.) Define \macarg.BLAH for each BLAH in the params
+% list to some hook where the argument is to be expanded. If there are
+% less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% If there are 10 or more arguments, a different technique is used: see
+% \parsemmanyargdef.
+%
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ % \hash is redefined to `#' later to get it into definitions
+ \let\xeatspaces\relax
+ \let\xempty\relax
+ \parsemargdefxxx#1,;,%
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+% the \xempty{} is to give \eatleadingcr an argument in the case of an
+% empty macro argument.
+
+% \parsemacbody, \parsermacbody
+%
+% Read recursive and nonrecursive macro bodies. (They're different since
+% rec and nonrec macros end differently.)
+%
+% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
+% body to be transformed.
+% Set \macrobody to the body of the macro, and call \macrodef.
+%
+{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}%
+{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
+\xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}%
+
+% Make @ a letter, so that we can make private-to-Texinfo macro names.
+\edef\texiatcatcode{\the\catcode`\@}
+\catcode `@=11\relax
+
+%%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%%
+
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because of
+% the catcode regime under which the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, no macro can have more than 256 arguments (else error).
+%
+% In case that there are 10 or more arguments we parse again the arguments
+% list to set new definitions for the \macarg.BLAH macros corresponding to
+% each BLAH argument. It was anyhow needed to parse already once this list
+% in order to count the arguments, and as macros with at most 9 arguments
+% are by far more frequent than macro with 10 or more arguments, defining
+% twice the \macarg.BLAH macros does not cost too much processing power.
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+
+\let\endargs@\relax
+\let\nil@\relax
+\def\nilm@{\nil@}%
+\long\def\nillm@{\nil@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments' values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
+\def\getargvals@#1#2#3{%
+ \def\macargdeflist@{}%
+ \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,\nil@}%
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,\nil@}%
+ \def\@tempa{#3}%
+ \ifx\@tempa\empty
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into \@tempb
+ \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\paramlist}%
+ % pop current argument value into \@tempc
+ \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
+ \expandafter\@tempa\expandafter{\argvaluelist}%
+ % Here \@tempb is the current arg name and \@tempc is the current arg value.
+ % First place the new argument macro definition into \@tempd
+ \expandafter\macname\expandafter{\@tempc}%
+ \expandafter\let\csname macarg.\@tempb\endcsname\relax
+ \expandafter\def\expandafter\@tempe\expandafter{%
+ \csname macarg.\@tempb\endcsname}%
+ \edef\@tempd{\long\def\@tempe{\the\macname}}%
+ \push@\@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
+\def\push@#1#2{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro \@tempa.
+%
+\def\macvalstoargs@{%
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ \expandafter\putargsintokens@\saveparamlist@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ \edef\@tempc{\csname mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
+ }
+
+% Define the named-macro outside of this group and then close this group.
+%
+\def\macargexpandinbody@{%
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in \@tempa .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with \@tempb .
+ \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ \ifx\@tempb\gobble
+ \let\@tempc\relax
+ \else
+ \let\@tempc\egroup
+ \fi
+ % And now we do the real job:
+ \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
+ \@tempd
+}
+
+\def\putargsintokens@#1,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias \@tempb .
+ \toksdef\@tempb\the\paramno
+ % Then we place the argument value into that token list register.
+ \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Trailing missing arguments are set to empty.
+%
+\def\setemptyargvalues@{%
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ \expandafter\setemptyargvaluesparser@\paramlist\endargs@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
+\def\setemptyargvaluesparser@#1,#2\endargs@{%
+ \expandafter\def\expandafter\@tempa\expandafter{%
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ \push@\@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
+\def\pop@#1#2#3,#4\endargs@{%
+ \def#1{#3}%
+ \def#2{#4}%
+}
+\long\def\longpop@#1#2#3,#4\endargs@{%
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+
+%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
+
+
+% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
+% \macrobody has the body of the macro in it, with placeholders for
+% its parameters, looking like "\xeatspaces{\hash 1}".
+% \paramno is the number of parameters
+% \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
+% There are four cases: macros of zero, one, up to nine, and many arguments.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in: @include reads the file inside a group.
+%
+\def\macrodef{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifnum\paramno=1
+ \long\def\xeatspaces##1{##1}%
+ % We don't use \xeatspaces for single-argument macros, because we
+ % want to keep ends of lines. This definition removes \xeatspaces
+ % when \macrobody is expanded below.
+ \else
+ \def\xeatspaces{\string\xeatspaces}%
+ % This expands \xeatspaces as a sequence of character tokens, which
+ % stops \scantokens inserting an extra space after the control sequence.
+ \fi
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \begingroup
+ \noexpand\spaceisspace
+ \noexpand\endlineisspace
+ \noexpand\expandafter % skip any whitespace after the macro name.
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname{%
+ \endgroup
+ \noexpand\scanmacro{\macrobody}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \begingroup
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname @@@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \endgroup
+ \noexpand\scanmacro{\macrobody}%
+ }%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ % @MACNAME sets the context for reading the macro argument
+ % @MACNAME@@ gets the argument, processes backslashes and appends a
+ % comma.
+ % @MACNAME@@@ removes braces surrounding the argument list.
+ % @MACNAME@@@@ scans the macro body with arguments substituted.
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \begingroup
+ \noexpand\expandafter % This \expandafter skip any spaces after the
+ \noexpand\macroargctxt % macro before we change the catcode of space.
+ \noexpand\expandafter
+ \expandafter\noexpand\csname\the\macname @@\endcsname}%
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \noexpand\passargtomacro
+ \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
+ \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname @@@@\endcsname\paramlist{%
+ \endgroup\noexpand\scanmacro{\macrobody}}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\getargvals@{\the\macname}{\argl}%
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
+ \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
+ \fi
+ \fi}
+
+\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+{\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape
+@catcode`@_=11 % private names
+@catcode`@!=11 % used as argument separator
+
+% \passargtomacro#1#2 -
+% Call #1 with a list of tokens #2, with any doubled backslashes in #2
+% compressed to one.
+%
+% This implementation works by expansion, and not execution (so we cannot use
+% \def or similar). This reduces the risk of this failing in contexts where
+% complete expansion is done with no execution (for example, in writing out to
+% an auxiliary file for an index entry).
+%
+% State is kept in the input stream: the argument passed to
+% @look_ahead, @gobble_and_check_finish and @add_segment is
+%
+% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input)
+%
+% where:
+% THE_MACRO - name of the macro we want to call
+% ARG_RESULT - argument list we build to pass to that macro
+% PENDING_BS - either a backslash or nothing
+% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
+
+@gdef@passargtomacro#1#2{%
+ @add_segment #1!{}@relax#2\@_finish\%
+}
+@gdef@_finish{@_finishx} @global@let@_finishx@relax
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 used to look ahead
+%
+% If the next token is not a backslash, process the rest of the argument;
+% otherwise, remove the next token.
+@gdef@look_ahead#1!#2#3#4{%
+ @ifx#4\%
+ @expandafter@gobble_and_check_finish
+ @else
+ @expandafter@add_segment
+ @fi#1!{#2}#4#4%
+}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 should be a backslash, which is gobbled.
+% #5 looks ahead
+%
+% Double backslash found. Add a single backslash, and look ahead.
+@gdef@gobble_and_check_finish#1!#2#3#4#5{%
+ @add_segment#1\!{}#5#5%
+}
+
+@gdef@is_fi{@fi}
+
+% #1 - THE_MACRO ARG_RESULT
+% #2 - PENDING_BS
+% #3 - NEXT_TOKEN
+% #4 is input stream until next backslash
+%
+% Input stream is either at the start of the argument, or just after a
+% backslash sequence, either a lone backslash, or a doubled backslash.
+% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
+% finish; otherwise, append to ARG_RESULT the segment of the argument up until
+% the next backslash. PENDING_BACKSLASH contains a backslash to represent
+% a backslash just before the start of the input stream that has not been
+% added to ARG_RESULT.
+@gdef@add_segment#1!#2#3#4\{%
+@ifx#3@_finish
+ @call_the_macro#1!%
+@else
+ % append the pending backslash to the result, followed by the next segment
+ @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
+ % this @fi is discarded by @look_ahead.
+ % we can't get rid of it with \expandafter because we don't know how
+ % long #4 is.
+}
+
+% #1 - THE_MACRO
+% #2 - ARG_RESULT
+% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
+% conditional.
+@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
+
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \braceorline MAC is used for a one-argument macro MAC. It checks
+% whether the next non-whitespace character is a {. It sets the context
+% for reading the argument (slightly different in the two cases). Then,
+% to read the argument, in the whole-line case, it then calls the regular
+% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup
+ \macroargctxt
+ \expandafter\passargtomacro
+ \else
+ \macrolineargctxt\expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @linemacro
+
+\parseargdef\linemacro{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty
+ \paramno=0
+ \let\hash\relax
+ \def\paramlist{\hash 1\endlinemacro}%
+ \else
+ \expandafter\linegetparamlist\argl;%
+ \fi
+ \begingroup \macrobodyctxt \usembodybackslash
+ \parselinemacrobody
+}
+
+% Build up \paramlist which will be used as the parameter text for the macro.
+% At the end it will be like "#1 #2 #3\endlinemacro".
+\def\linegetparamlist#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ \linegetparamlistxxx#1,;,%
+}
+\def\linegetparamlistxxx#1,{%
+ \if#1;\let\next=\linegetparamlistxxxx
+ \else \let\next=\linegetparamlistxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\hash\the\paramno}%
+ \edef\paramlist{\paramlist\hash\the\paramno\space}%
+ \fi\next}
+\def\linegetparamlistxxxx{%
+ \expandafter\fixparamlist\paramlist\fixparamlist
+}
+% Replace final space token
+\def\fixparamlist#1 \fixparamlist{%
+ \def\paramlist{#1\endlinemacro}%
+}
+
+% Read the body of the macro, replacing backslash-surrounded variables
+%
+{\catcode`\ =\other\long\gdef\parselinemacrobody#1@end linemacro{%
+\xdef\macrobody{#1}%
+\endgroup
+\linemacrodef
+}}
+
+% Make the definition
+\def\linemacrodef{%
+ \let\hash=##%
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup
+ \noexpand\parsearg
+ \expandafter\noexpand\csname\the\macname @@\endcsname
+ }
+ \expandafter\xdef\csname\the\macname @@\endcsname##1{%
+ \egroup
+ \expandafter\noexpand
+ \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro
+ }
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{%
+ \newlinechar=13 % split \macrobody into lines
+ \noexpand\scantokens{\macrobody}%
+ }
+}
+
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
+
+% Used so that the @top node doesn't have to be wrapped in an @ifnottex
+% conditional.
+% \doignore goes to more effort to skip nested conditionals but we don't need
+% that here.
+\def\omittopnode{%
+ \ifx\lastnode\wordTop
+ \expandafter\ignorenode\fi
+}
+\def\wordTop{Top}
+
+% Until the next @node, @part or @bye command, divert output to a box that
+% is not output.
+\def\ignorenode{\setbox\dummybox\vbox\bgroup
+\def\part{\egroup\part}%
+\def\node{\egroup\node}%
+\ignorenodebye
+}
+
+{\let\bye\relax
+\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
+\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
+% The redefinition of \bye here is because it is declared \outer
+
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \currentsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \requireauxfile
+ \atdummies % preserve commands, but don't expand them
+ % match definition in \xrdef, \refx, \xrefX.
+ \def\value##1{##1}%
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\currentsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref{\putwordsee{} \xrefXX}
+\def\xref{\putwordSee{} \xrefXX}
+\def\ref{\xrefXX}
+
+\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
+\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ % For pdfTeX and LuaTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfdestname}%
+ \else
+ goto name{\pdfmkpgn{\pdfdestname}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ % For XeTeX
+ {\indexnofonts
+ \makevalueexpandable
+ \turnoffactive
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \setpdfdestname{#1}%
+ %
+ \ifx\pdfdestname\empty
+ \def\pdfdestname{Top}% no empty targets
+ \fi
+ %
+ \leavevmode
+ \ifnum\filenamelength>0
+ % With default settings,
+ % XeTeX (xdvipdfmx) replaces link destination names with integers.
+ % In this case, the replaced destination names of
+ % remote PDFs are no longer known. In order to avoid a replacement,
+ % you can use xdvipdfmx's command line option `-C 0x0010'.
+ % If you use XeTeX 0.99996+ (TeX Live 2016+),
+ % this command line option is no longer necessary
+ % because we can use the `dvipdfmx:config' special.
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
+ \else
+ \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
+ << /S /GoTo /D (\pdfdestname) >> >>}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ \fi
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". \iffloat distinguishes them by
+ % \Xthisreftitle being set to a magic string.
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % Only output a following space if the -snt ref is nonempty, as the ref
+ % will be empty for @unnumbered and @anchor.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ %
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ \ifflagclear{txiomitxrefpg}{%
+ % We always want a comma
+ ,%
+ % output the `page 3'.
+ \turnoffactive \putpageref{#1}%
+ % Add a , if xref followed by a space
+ \if\space\noexpand\tokenafterxref ,%
+ \else\ifx\ \tokenafterxref ,% @TAB
+ \else\ifx\*\tokenafterxref ,% @*
+ \else\ifx\ \tokenafterxref ,% @SPACE
+ \else\ifx\
+ \tokenafterxref ,% @NL
+ \else\ifx\tie\tokenafterxref ,% @tie
+ \fi\fi\fi\fi\fi\fi
+ }{}%
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% can be overridden in translation files
+\def\putpageref#1{%
+ \space\putwordpage\tie\refx{#1-pg}}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% \refx{NAME} - reference a cross-reference string named NAME.
+\def\refx#1{%
+ \requireauxfile
+ {%
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+}
+
+% This is the macro invoked by entries in the aux file. Define a control
+% sequence for a cross-reference target (we prepend XR to the control sequence
+% name to avoid collisions). The value is the page number. If this is a float
+% type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% Expand the node or anchor name to remove control sequences.
+ % \turnoffactive stops 8-bit characters being changed to commands
+ % like @'e. \refx does the same to retrieve the value in the definition.
+ \indexnofonts
+ \turnoffactive
+ \def\value##1{##1}%
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \bgroup
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
+ \egroup
+ % We put the \gdef inside a group to avoid the definitions building up on
+ % TeX's save stack, which can cause it to run out of space for aux files with
+ % thousands of lines. \gdef doesn't use the save stack, but \csname does
+ % when it defines an unknown control sequence as \relax.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate at the beginning of the file.
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% Used when writing to the aux file, or when using data from it.
+\def\requireauxfile{%
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi
+ \global\let\requireauxfile=\relax % Only do this once.
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ \catcode`\\=\active
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ %
+ % Nested footnotes are not supported in TeX, that would take a lot
+ % more work. (\startsavinginserts does not suffice.)
+ \let\footnote=\errfootnotenest
+ %
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\txipagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+\def\errfootnotenest{%
+ \errhelp=\EMsimple
+ \errmessage{Nested footnotes not supported in texinfo.tex,
+ even though they work in makeinfo; sorry}
+}
+
+\def\errfootnoteheading{%
+ \errhelp=\EMsimple
+ \errmessage{Footnotes in chapters, sections, etc., are not supported}
+}
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+%
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+
+% Approximate height of a line in the standard text font.
+\newdimen\capheight
+\setbox0=\vbox{\tenrm H}
+\capheight=\ht0
+
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ \makevalueexpandable
+ \ifvmode
+ \imagevmodetrue
+ \medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \vskip\parskip
+ %
+ % Place image in a \vtop for a top page margin that is (close to) correct,
+ % as \topskip glue is relative to the first baseline.
+ \vtop\bgroup \kern -\capheight \vskip-\parskip
+ \fi
+ %
+ \ifx\centersub\centerV
+ % For @center @image, enter vertical mode and add vertical space
+ % Enter an extra \parskip because @center doesn't add space itself.
+ \vbox\bgroup\vskip\parskip\medskip\vskip\parskip
+ \else
+ % Enter horizontal mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ \imageindent
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ % For pdfTeX and LuaTeX <= 0.80
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ % For epsf.tex
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \else
+ % For XeTeX
+ \doxeteximage{#1}{#2}{#3}%
+ \fi
+ \fi
+ %
+ \ifimagevmode
+ \egroup
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV % @center @image
+ \medskip
+ \egroup % close \vbox
+ \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \currentsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\currentsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \requireauxfile
+ \atdummies
+ %
+ \ifx\thisshortcaption\empty
+ \def\gtemp{\thiscaption}%
+ \else
+ \def\gtemp{\thisshortcaption}%
+ \fi
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanctxt\docaptionz}
+\def\docaptionz#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \currentsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \let_ = \normalunderscore % normal _ character for filename test
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore #1_\finish
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname lang@#1\endcsname \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname lang@#1\endcsname
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% XeTeX and LuaTeX can handle Unicode natively.
+% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
+% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
+%
+\newif\iftxinativeunicodecapable
+\newif\iftxiusebytewiseio
+
+\ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \txinativeunicodecapablefalse
+ \txiusebytewiseiotrue
+ \else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+ \fi
+\else
+ \txinativeunicodecapabletrue
+ \txiusebytewiseiofalse
+\fi
+
+% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
+% for non-UTF-8 (byte-wise) encodings.
+%
+\def\setbytewiseio{%
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \XeTeXdefaultencoding "bytes" % For subsequent files to be read
+ \XeTeXinputencoding "bytes" % For document root file
+ % Unfortunately, there seems to be no corresponding XeTeX command for
+ % output encoding. This is a problem for auxiliary index and TOC files.
+ % The only solution would be perhaps to write out @U{...} sequences in
+ % place of non-ASCII characters.
+ \fi
+
+ \ifx\luatexversion\thisisundefined
+ \else
+ \directlua{
+ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
+ local function convert_char (char)
+ return utf8_char(byte(char))
+ end
+
+ local function convert_line (line)
+ return gsub(line, ".", convert_char)
+ end
+
+ callback.register("process_input_buffer", convert_line)
+
+ local function convert_line_out (line)
+ local line_out = ""
+ for c in string.utfvalues(line) do
+ line_out = line_out .. string.char(c)
+ end
+ return line_out
+ end
+
+ callback.register("process_output_buffer", convert_line_out)
+ }
+ \fi
+
+ \txiusebytewiseiotrue
+}
+
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
+\def\documentencodingzzz#1{%
+ %
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \iftxinativeunicodecapable
+ \setbytewiseio
+ \fi
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \iftxinativeunicodecapable
+ % For native Unicode handling (XeTeX and LuaTeX)
+ \nativeunicodechardefs
+ \else
+ % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX).
+ % Since we already invoke \utfeightchardefs at the top level,
+ % making non-ascii chars active is sufficient.
+ \setnonasciicharscatcode\active
+ \fi
+ %
+ \else
+ \message{Ignoring unknown document encoding: #1.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+ %
+ \ifx\XeTeXrevision\thisisundefined
+ \else
+ \ifx \declaredencoding \utfeight
+ \else
+ \ifx \declaredencoding \ascii
+ \else
+ \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
+ non-ASCII characters in auxiliary files.}%
+ \fi
+ \fi
+ \fi
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+\def\gdefchar#1#2{%
+\gdef#1{%
+ \ifpassthroughchars
+ \string#1%
+ \else
+ #2%
+ \fi
+}}
+
+\begingroup
+
+% Make non-ASCII characters active for defining the character definition
+% macros.
+\setnonasciicharscatcode\active
+
+% Latin1 (ISO-8859-1) character definitions.
+\gdef\latonechardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\exclamdown}
+ \gdefchar^^a2{{\tcfont \char162}} % cent
+ \gdefchar^^a3{\pounds{}}
+ \gdefchar^^a4{{\tcfont \char164}} % currency
+ \gdefchar^^a5{{\tcfont \char165}} % yen
+ \gdefchar^^a6{{\tcfont \char166}} % broken bar
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\copyright{}}
+ \gdefchar^^aa{\ordf}
+ \gdefchar^^ab{\guillemetleft{}}
+ \gdefchar^^ac{\ensuremath\lnot}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\registeredsymbol{}}
+ \gdefchar^^af{\={}}
+ %
+ \gdefchar^^b0{\textdegree}
+ \gdefchar^^b1{$\pm$}
+ \gdefchar^^b2{$^2$}
+ \gdefchar^^b3{$^3$}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{$\mu$}
+ \gdefchar^^b6{\P}
+ \gdefchar^^b7{\ensuremath\cdot}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{$^1$}
+ \gdefchar^^ba{\ordm}
+ \gdefchar^^bb{\guillemetright{}}
+ \gdefchar^^bc{$1\over4$}
+ \gdefchar^^bd{$1\over2$}
+ \gdefchar^^be{$3\over4$}
+ \gdefchar^^bf{\questiondown}
+ %
+ \gdefchar^^c0{\`A}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\~A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\ringaccent A}
+ \gdefchar^^c6{\AE}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\`E}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\^E}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\`I}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\"I}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\~N}
+ \gdefchar^^d2{\`O}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\~O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\O}
+ \gdefchar^^d9{\`U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\^U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\TH}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\`a}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\~a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\ringaccent a}
+ \gdefchar^^e6{\ae}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\`e}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\^e}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\`{\dotless i}}
+ \gdefchar^^ed{\'{\dotless i}}
+ \gdefchar^^ee{\^{\dotless i}}
+ \gdefchar^^ef{\"{\dotless i}}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\~n}
+ \gdefchar^^f2{\`o}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\~o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\o}
+ \gdefchar^^f9{\`u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\^u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\th}
+ \gdefchar^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\gdef\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdefchar^^a4{\euro{}}
+ \gdefchar^^a6{\v S}
+ \gdefchar^^a8{\v s}
+ \gdefchar^^b4{\v Z}
+ \gdefchar^^b8{\v z}
+ \gdefchar^^bc{\OE}
+ \gdefchar^^bd{\oe}
+ \gdefchar^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\gdef\lattwochardefs{%
+ \gdefchar^^a0{\tie}
+ \gdefchar^^a1{\ogonek{A}}
+ \gdefchar^^a2{\u{}}
+ \gdefchar^^a3{\L}
+ \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdefchar^^a5{\v L}
+ \gdefchar^^a6{\'S}
+ \gdefchar^^a7{\S}
+ \gdefchar^^a8{\"{}}
+ \gdefchar^^a9{\v S}
+ \gdefchar^^aa{\cedilla S}
+ \gdefchar^^ab{\v T}
+ \gdefchar^^ac{\'Z}
+ \gdefchar^^ad{\-}
+ \gdefchar^^ae{\v Z}
+ \gdefchar^^af{\dotaccent Z}
+ %
+ \gdefchar^^b0{\textdegree}
+ \gdefchar^^b1{\ogonek{a}}
+ \gdefchar^^b2{\ogonek{ }}
+ \gdefchar^^b3{\l}
+ \gdefchar^^b4{\'{}}
+ \gdefchar^^b5{\v l}
+ \gdefchar^^b6{\'s}
+ \gdefchar^^b7{\v{}}
+ \gdefchar^^b8{\cedilla\ }
+ \gdefchar^^b9{\v s}
+ \gdefchar^^ba{\cedilla s}
+ \gdefchar^^bb{\v t}
+ \gdefchar^^bc{\'z}
+ \gdefchar^^bd{\H{}}
+ \gdefchar^^be{\v z}
+ \gdefchar^^bf{\dotaccent z}
+ %
+ \gdefchar^^c0{\'R}
+ \gdefchar^^c1{\'A}
+ \gdefchar^^c2{\^A}
+ \gdefchar^^c3{\u A}
+ \gdefchar^^c4{\"A}
+ \gdefchar^^c5{\'L}
+ \gdefchar^^c6{\'C}
+ \gdefchar^^c7{\cedilla C}
+ \gdefchar^^c8{\v C}
+ \gdefchar^^c9{\'E}
+ \gdefchar^^ca{\ogonek{E}}
+ \gdefchar^^cb{\"E}
+ \gdefchar^^cc{\v E}
+ \gdefchar^^cd{\'I}
+ \gdefchar^^ce{\^I}
+ \gdefchar^^cf{\v D}
+ %
+ \gdefchar^^d0{\DH}
+ \gdefchar^^d1{\'N}
+ \gdefchar^^d2{\v N}
+ \gdefchar^^d3{\'O}
+ \gdefchar^^d4{\^O}
+ \gdefchar^^d5{\H O}
+ \gdefchar^^d6{\"O}
+ \gdefchar^^d7{$\times$}
+ \gdefchar^^d8{\v R}
+ \gdefchar^^d9{\ringaccent U}
+ \gdefchar^^da{\'U}
+ \gdefchar^^db{\H U}
+ \gdefchar^^dc{\"U}
+ \gdefchar^^dd{\'Y}
+ \gdefchar^^de{\cedilla T}
+ \gdefchar^^df{\ss}
+ %
+ \gdefchar^^e0{\'r}
+ \gdefchar^^e1{\'a}
+ \gdefchar^^e2{\^a}
+ \gdefchar^^e3{\u a}
+ \gdefchar^^e4{\"a}
+ \gdefchar^^e5{\'l}
+ \gdefchar^^e6{\'c}
+ \gdefchar^^e7{\cedilla c}
+ \gdefchar^^e8{\v c}
+ \gdefchar^^e9{\'e}
+ \gdefchar^^ea{\ogonek{e}}
+ \gdefchar^^eb{\"e}
+ \gdefchar^^ec{\v e}
+ \gdefchar^^ed{\'{\dotless{i}}}
+ \gdefchar^^ee{\^{\dotless{i}}}
+ \gdefchar^^ef{\v d}
+ %
+ \gdefchar^^f0{\dh}
+ \gdefchar^^f1{\'n}
+ \gdefchar^^f2{\v n}
+ \gdefchar^^f3{\'o}
+ \gdefchar^^f4{\^o}
+ \gdefchar^^f5{\H o}
+ \gdefchar^^f6{\"o}
+ \gdefchar^^f7{$\div$}
+ \gdefchar^^f8{\v r}
+ \gdefchar^^f9{\ringaccent u}
+ \gdefchar^^fa{\'u}
+ \gdefchar^^fb{\H u}
+ \gdefchar^^fc{\"u}
+ \gdefchar^^fd{\'y}
+ \gdefchar^^fe{\cedilla t}
+ \gdefchar^^ff{\dotaccent{}}
+}
+
+\endgroup % active chars
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
+\begingroup
+ \catcode`\~13
+ \catcode`\$12
+ \catcode`\"12
+
+ % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
+ % substituting ~ and $ with a character token of that value.
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uccode`\$\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ % For bytes other than the first in a UTF-8 sequence. Not expected to
+ % be expanded except when writing to auxiliary files.
+ \countUTFx = "80
+ \countUTFy = "C2
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \gdef~{%
+ \ifpassthroughchars $%
+ \else\expandafter\UTFviiiFourOctets\expandafter$\fi
+ }}%
+ \UTFviiiLoop
+\endgroup
+
+\def\globallet{\global\let} % save some \expandafter's below
+
+% @U{xxxx} to produce U+xxxx, if we support it.
+\def\U#1{%
+ \expandafter\ifx\csname uni:#1\endcsname \relax
+ \iftxinativeunicodecapable
+ % All Unicode characters can be used if native Unicode handling is
+ % active. However, if the font does not have the glyph,
+ % letters are missing.
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{.}
+ \endgroup
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unicode character U+#1 not supported, sorry}%
+ \fi
+ \else
+ \csname uni:#1\endcsname
+ \fi
+}
+
+% These macros are used here to construct the name of a control
+% sequence to be defined.
+\def\UTFviiiTwoOctetsName#1#2{%
+ \csname u8:#1\string #2\endcsname}%
+\def\UTFviiiThreeOctetsName#1#2#3{%
+ \csname u8:#1\string #2\string #3\endcsname}%
+\def\UTFviiiFourOctetsName#1#2#3#4{%
+ \csname u8:#1\string #2\string #3\string #4\endcsname}%
+
+% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
+% provide a definition macro to replace a Unicode character;
+% this gets used by the @U command
+%
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+ \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
+ \countUTFz = "#1\relax
+ \begingroup
+ \parseXMLCharref
+
+ % Give \u8:... its definition. The sequence of seven \expandafter's
+ % expands after the \gdef three times, e.g.
+ %
+ % 1. \UTFviiTwoOctetsName B1 B2
+ % 2. \csname u8:B1 \string B2 \endcsname
+ % 3. \u8: B1 B2 (a single control sequence token)
+ %
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\expandafter
+ \expandafter\gdef \UTFviiiTmp{#2}%
+ %
+ \expandafter\ifx\csname uni:#1\endcsname \relax \else
+ \message{Internal error, already defined: #1}%
+ \fi
+ %
+ % define an additional control sequence for this code point.
+ \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
+ \endgroup}
+ %
+ % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
+ % to the corresponding UTF-8 sequence.
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "20\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 0020}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
+ \fi\fi\fi
+ }
+
+ % Extract a byte from the end of the UTF-8 representation of \countUTFx.
+ % It must be a non-initial byte in the sequence.
+ % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
+ % of the bytes.
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz % Save to be the future value of \countUTFz.
+ \multiply\countUTFz by 64
+
+ % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract
+ % in order to get the last five bits.
+ \advance\countUTFx by -\countUTFz
+
+ % Convert this to the byte in the UTF-8 sequence.
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ % Used to put a UTF-8 byte sequence into \UTFviiiTmp
+ % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
+ % sequence.
+ % #2 is one of the \UTFviii*OctetsName macros.
+ % #3 is always a full stop (.)
+ % #4 is a template for the other bytes in the sequence. The values for these
+ % bytes is substituted in here with \uppercase using the \uccode's.
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro that sets a catcode to `other' non-globally
+%
+\def\DeclareUnicodeCharacterNativeOther#1#2{%
+ \catcode"#1=\other
+}
+
+% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
+% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
+% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
+% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
+% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
+%
+% Many of our renditions are less than wonderful, and all the missing
+% characters are available somewhere. Loading the necessary fonts
+% awaits user request. We can't truly support Unicode without
+% reimplementing everything that's been done in LaTeX for many years,
+% plus probably using luatex or xetex, and who knows what else.
+% We won't be doing that here in this simple file. But we can try to at
+% least make most of the characters not bomb out.
+%
+\def\unicodechardefs{%
+ \DeclareUnicodeCharacter{0020}{ } % space
+ \DeclareUnicodeCharacter{0021}{\char"21 }% % space to terminate number
+ \DeclareUnicodeCharacter{0022}{\char"22 }%
+ \DeclareUnicodeCharacter{0023}{\char"23 }%
+ \DeclareUnicodeCharacter{0024}{\char"24 }%
+ \DeclareUnicodeCharacter{0025}{\char"25 }%
+ \DeclareUnicodeCharacter{0026}{\char"26 }%
+ \DeclareUnicodeCharacter{0027}{\char"27 }%
+ \DeclareUnicodeCharacter{0028}{\char"28 }%
+ \DeclareUnicodeCharacter{0029}{\char"29 }%
+ \DeclareUnicodeCharacter{002A}{\char"2A }%
+ \DeclareUnicodeCharacter{002B}{\char"2B }%
+ \DeclareUnicodeCharacter{002C}{\char"2C }%
+ \DeclareUnicodeCharacter{002D}{\char"2D }%
+ \DeclareUnicodeCharacter{002E}{\char"2E }%
+ \DeclareUnicodeCharacter{002F}{\char"2F }%
+ \DeclareUnicodeCharacter{0030}{0}%
+ \DeclareUnicodeCharacter{0031}{1}%
+ \DeclareUnicodeCharacter{0032}{2}%
+ \DeclareUnicodeCharacter{0033}{3}%
+ \DeclareUnicodeCharacter{0034}{4}%
+ \DeclareUnicodeCharacter{0035}{5}%
+ \DeclareUnicodeCharacter{0036}{6}%
+ \DeclareUnicodeCharacter{0037}{7}%
+ \DeclareUnicodeCharacter{0038}{8}%
+ \DeclareUnicodeCharacter{0039}{9}%
+ \DeclareUnicodeCharacter{003A}{\char"3A }%
+ \DeclareUnicodeCharacter{003B}{\char"3B }%
+ \DeclareUnicodeCharacter{003C}{\char"3C }%
+ \DeclareUnicodeCharacter{003D}{\char"3D }%
+ \DeclareUnicodeCharacter{003E}{\char"3E }%
+ \DeclareUnicodeCharacter{003F}{\char"3F }%
+ \DeclareUnicodeCharacter{0040}{\char"40 }%
+ \DeclareUnicodeCharacter{0041}{A}%
+ \DeclareUnicodeCharacter{0042}{B}%
+ \DeclareUnicodeCharacter{0043}{C}%
+ \DeclareUnicodeCharacter{0044}{D}%
+ \DeclareUnicodeCharacter{0045}{E}%
+ \DeclareUnicodeCharacter{0046}{F}%
+ \DeclareUnicodeCharacter{0047}{G}%
+ \DeclareUnicodeCharacter{0048}{H}%
+ \DeclareUnicodeCharacter{0049}{I}%
+ \DeclareUnicodeCharacter{004A}{J}%
+ \DeclareUnicodeCharacter{004B}{K}%
+ \DeclareUnicodeCharacter{004C}{L}%
+ \DeclareUnicodeCharacter{004D}{M}%
+ \DeclareUnicodeCharacter{004E}{N}%
+ \DeclareUnicodeCharacter{004F}{O}%
+ \DeclareUnicodeCharacter{0050}{P}%
+ \DeclareUnicodeCharacter{0051}{Q}%
+ \DeclareUnicodeCharacter{0052}{R}%
+ \DeclareUnicodeCharacter{0053}{S}%
+ \DeclareUnicodeCharacter{0054}{T}%
+ \DeclareUnicodeCharacter{0055}{U}%
+ \DeclareUnicodeCharacter{0056}{V}%
+ \DeclareUnicodeCharacter{0057}{W}%
+ \DeclareUnicodeCharacter{0058}{X}%
+ \DeclareUnicodeCharacter{0059}{Y}%
+ \DeclareUnicodeCharacter{005A}{Z}%
+ \DeclareUnicodeCharacter{005B}{\char"5B }%
+ \DeclareUnicodeCharacter{005C}{\char"5C }%
+ \DeclareUnicodeCharacter{005D}{\char"5D }%
+ \DeclareUnicodeCharacter{005E}{\char"5E }%
+ \DeclareUnicodeCharacter{005F}{\char"5F }%
+ \DeclareUnicodeCharacter{0060}{\char"60 }%
+ \DeclareUnicodeCharacter{0061}{a}%
+ \DeclareUnicodeCharacter{0062}{b}%
+ \DeclareUnicodeCharacter{0063}{c}%
+ \DeclareUnicodeCharacter{0064}{d}%
+ \DeclareUnicodeCharacter{0065}{e}%
+ \DeclareUnicodeCharacter{0066}{f}%
+ \DeclareUnicodeCharacter{0067}{g}%
+ \DeclareUnicodeCharacter{0068}{h}%
+ \DeclareUnicodeCharacter{0069}{i}%
+ \DeclareUnicodeCharacter{006A}{j}%
+ \DeclareUnicodeCharacter{006B}{k}%
+ \DeclareUnicodeCharacter{006C}{l}%
+ \DeclareUnicodeCharacter{006D}{m}%
+ \DeclareUnicodeCharacter{006E}{n}%
+ \DeclareUnicodeCharacter{006F}{o}%
+ \DeclareUnicodeCharacter{0070}{p}%
+ \DeclareUnicodeCharacter{0071}{q}%
+ \DeclareUnicodeCharacter{0072}{r}%
+ \DeclareUnicodeCharacter{0073}{s}%
+ \DeclareUnicodeCharacter{0074}{t}%
+ \DeclareUnicodeCharacter{0075}{u}%
+ \DeclareUnicodeCharacter{0076}{v}%
+ \DeclareUnicodeCharacter{0077}{w}%
+ \DeclareUnicodeCharacter{0078}{x}%
+ \DeclareUnicodeCharacter{0079}{y}%
+ \DeclareUnicodeCharacter{007A}{z}%
+ \DeclareUnicodeCharacter{007B}{\char"7B }%
+ \DeclareUnicodeCharacter{007C}{\char"7C }%
+ \DeclareUnicodeCharacter{007D}{\char"7D }%
+ \DeclareUnicodeCharacter{007E}{\char"7E }%
+ % \DeclareUnicodeCharacter{007F}{} % DEL
+ %
+ \DeclareUnicodeCharacter{00A0}{\tie}%
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}%
+ \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
+ \DeclareUnicodeCharacter{00A3}{\pounds{}}%
+ \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
+ \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
+ \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
+ \DeclareUnicodeCharacter{00A7}{\S}%
+ \DeclareUnicodeCharacter{00A8}{\"{ }}%
+ \DeclareUnicodeCharacter{00A9}{\copyright{}}%
+ \DeclareUnicodeCharacter{00AA}{\ordf}%
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
+ \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
+ \DeclareUnicodeCharacter{00AD}{\-}%
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
+ \DeclareUnicodeCharacter{00AF}{\={ }}%
+ %
+ \DeclareUnicodeCharacter{00B0}{\textdegree}%
+ \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
+ \DeclareUnicodeCharacter{00B2}{$^2$}%
+ \DeclareUnicodeCharacter{00B3}{$^3$}%
+ \DeclareUnicodeCharacter{00B4}{\'{ }}%
+ \DeclareUnicodeCharacter{00B5}{$\mu$}%
+ \DeclareUnicodeCharacter{00B6}{\P}%
+ \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
+ \DeclareUnicodeCharacter{00B9}{$^1$}%
+ \DeclareUnicodeCharacter{00BA}{\ordm}%
+ \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
+ \DeclareUnicodeCharacter{00BC}{$1\over4$}%
+ \DeclareUnicodeCharacter{00BD}{$1\over2$}%
+ \DeclareUnicodeCharacter{00BE}{$3\over4$}%
+ \DeclareUnicodeCharacter{00BF}{\questiondown}%
+ %
+ \DeclareUnicodeCharacter{00C0}{\`A}%
+ \DeclareUnicodeCharacter{00C1}{\'A}%
+ \DeclareUnicodeCharacter{00C2}{\^A}%
+ \DeclareUnicodeCharacter{00C3}{\~A}%
+ \DeclareUnicodeCharacter{00C4}{\"A}%
+ \DeclareUnicodeCharacter{00C5}{\AA}%
+ \DeclareUnicodeCharacter{00C6}{\AE}%
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
+ \DeclareUnicodeCharacter{00C8}{\`E}%
+ \DeclareUnicodeCharacter{00C9}{\'E}%
+ \DeclareUnicodeCharacter{00CA}{\^E}%
+ \DeclareUnicodeCharacter{00CB}{\"E}%
+ \DeclareUnicodeCharacter{00CC}{\`I}%
+ \DeclareUnicodeCharacter{00CD}{\'I}%
+ \DeclareUnicodeCharacter{00CE}{\^I}%
+ \DeclareUnicodeCharacter{00CF}{\"I}%
+ %
+ \DeclareUnicodeCharacter{00D0}{\DH}%
+ \DeclareUnicodeCharacter{00D1}{\~N}%
+ \DeclareUnicodeCharacter{00D2}{\`O}%
+ \DeclareUnicodeCharacter{00D3}{\'O}%
+ \DeclareUnicodeCharacter{00D4}{\^O}%
+ \DeclareUnicodeCharacter{00D5}{\~O}%
+ \DeclareUnicodeCharacter{00D6}{\"O}%
+ \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
+ \DeclareUnicodeCharacter{00D8}{\O}%
+ \DeclareUnicodeCharacter{00D9}{\`U}%
+ \DeclareUnicodeCharacter{00DA}{\'U}%
+ \DeclareUnicodeCharacter{00DB}{\^U}%
+ \DeclareUnicodeCharacter{00DC}{\"U}%
+ \DeclareUnicodeCharacter{00DD}{\'Y}%
+ \DeclareUnicodeCharacter{00DE}{\TH}%
+ \DeclareUnicodeCharacter{00DF}{\ss}%
+ %
+ \DeclareUnicodeCharacter{00E0}{\`a}%
+ \DeclareUnicodeCharacter{00E1}{\'a}%
+ \DeclareUnicodeCharacter{00E2}{\^a}%
+ \DeclareUnicodeCharacter{00E3}{\~a}%
+ \DeclareUnicodeCharacter{00E4}{\"a}%
+ \DeclareUnicodeCharacter{00E5}{\aa}%
+ \DeclareUnicodeCharacter{00E6}{\ae}%
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
+ \DeclareUnicodeCharacter{00E8}{\`e}%
+ \DeclareUnicodeCharacter{00E9}{\'e}%
+ \DeclareUnicodeCharacter{00EA}{\^e}%
+ \DeclareUnicodeCharacter{00EB}{\"e}%
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
+ %
+ \DeclareUnicodeCharacter{00F0}{\dh}%
+ \DeclareUnicodeCharacter{00F1}{\~n}%
+ \DeclareUnicodeCharacter{00F2}{\`o}%
+ \DeclareUnicodeCharacter{00F3}{\'o}%
+ \DeclareUnicodeCharacter{00F4}{\^o}%
+ \DeclareUnicodeCharacter{00F5}{\~o}%
+ \DeclareUnicodeCharacter{00F6}{\"o}%
+ \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
+ \DeclareUnicodeCharacter{00F8}{\o}%
+ \DeclareUnicodeCharacter{00F9}{\`u}%
+ \DeclareUnicodeCharacter{00FA}{\'u}%
+ \DeclareUnicodeCharacter{00FB}{\^u}%
+ \DeclareUnicodeCharacter{00FC}{\"u}%
+ \DeclareUnicodeCharacter{00FD}{\'y}%
+ \DeclareUnicodeCharacter{00FE}{\th}%
+ \DeclareUnicodeCharacter{00FF}{\"y}%
+ %
+ \DeclareUnicodeCharacter{0100}{\=A}%
+ \DeclareUnicodeCharacter{0101}{\=a}%
+ \DeclareUnicodeCharacter{0102}{\u{A}}%
+ \DeclareUnicodeCharacter{0103}{\u{a}}%
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
+ \DeclareUnicodeCharacter{0106}{\'C}%
+ \DeclareUnicodeCharacter{0107}{\'c}%
+ \DeclareUnicodeCharacter{0108}{\^C}%
+ \DeclareUnicodeCharacter{0109}{\^c}%
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
+ \DeclareUnicodeCharacter{010C}{\v{C}}%
+ \DeclareUnicodeCharacter{010D}{\v{c}}%
+ \DeclareUnicodeCharacter{010E}{\v{D}}%
+ \DeclareUnicodeCharacter{010F}{d'}%
+ %
+ \DeclareUnicodeCharacter{0110}{\DH}%
+ \DeclareUnicodeCharacter{0111}{\dh}%
+ \DeclareUnicodeCharacter{0112}{\=E}%
+ \DeclareUnicodeCharacter{0113}{\=e}%
+ \DeclareUnicodeCharacter{0114}{\u{E}}%
+ \DeclareUnicodeCharacter{0115}{\u{e}}%
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
+ \DeclareUnicodeCharacter{011A}{\v{E}}%
+ \DeclareUnicodeCharacter{011B}{\v{e}}%
+ \DeclareUnicodeCharacter{011C}{\^G}%
+ \DeclareUnicodeCharacter{011D}{\^g}%
+ \DeclareUnicodeCharacter{011E}{\u{G}}%
+ \DeclareUnicodeCharacter{011F}{\u{g}}%
+ %
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
+ \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
+ \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
+ \DeclareUnicodeCharacter{0124}{\^H}%
+ \DeclareUnicodeCharacter{0125}{\^h}%
+ \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0128}{\~I}%
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012A}{\=I}%
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
+ \DeclareUnicodeCharacter{012C}{\u{I}}%
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
+ \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
+ \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
+ %
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}%
+ \DeclareUnicodeCharacter{0132}{IJ}%
+ \DeclareUnicodeCharacter{0133}{ij}%
+ \DeclareUnicodeCharacter{0134}{\^J}%
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
+ \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
+ \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
+ \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{0139}{\'L}%
+ \DeclareUnicodeCharacter{013A}{\'l}%
+ \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
+ \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
+ \DeclareUnicodeCharacter{013D}{L'}% should kern
+ \DeclareUnicodeCharacter{013E}{l'}% should kern
+ \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
+ %
+ \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
+ \DeclareUnicodeCharacter{0141}{\L}%
+ \DeclareUnicodeCharacter{0142}{\l}%
+ \DeclareUnicodeCharacter{0143}{\'N}%
+ \DeclareUnicodeCharacter{0144}{\'n}%
+ \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
+ \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
+ \DeclareUnicodeCharacter{0147}{\v{N}}%
+ \DeclareUnicodeCharacter{0148}{\v{n}}%
+ \DeclareUnicodeCharacter{0149}{'n}%
+ \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
+ \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
+ \DeclareUnicodeCharacter{014C}{\=O}%
+ \DeclareUnicodeCharacter{014D}{\=o}%
+ \DeclareUnicodeCharacter{014E}{\u{O}}%
+ \DeclareUnicodeCharacter{014F}{\u{o}}%
+ %
+ \DeclareUnicodeCharacter{0150}{\H{O}}%
+ \DeclareUnicodeCharacter{0151}{\H{o}}%
+ \DeclareUnicodeCharacter{0152}{\OE}%
+ \DeclareUnicodeCharacter{0153}{\oe}%
+ \DeclareUnicodeCharacter{0154}{\'R}%
+ \DeclareUnicodeCharacter{0155}{\'r}%
+ \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
+ \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
+ \DeclareUnicodeCharacter{0158}{\v{R}}%
+ \DeclareUnicodeCharacter{0159}{\v{r}}%
+ \DeclareUnicodeCharacter{015A}{\'S}%
+ \DeclareUnicodeCharacter{015B}{\'s}%
+ \DeclareUnicodeCharacter{015C}{\^S}%
+ \DeclareUnicodeCharacter{015D}{\^s}%
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
+ %
+ \DeclareUnicodeCharacter{0160}{\v{S}}%
+ \DeclareUnicodeCharacter{0161}{\v{s}}%
+ \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
+ \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
+ \DeclareUnicodeCharacter{0164}{\v{T}}%
+ \DeclareUnicodeCharacter{0165}{\v{t}}%
+ \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
+ \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
+ \DeclareUnicodeCharacter{0168}{\~U}%
+ \DeclareUnicodeCharacter{0169}{\~u}%
+ \DeclareUnicodeCharacter{016A}{\=U}%
+ \DeclareUnicodeCharacter{016B}{\=u}%
+ \DeclareUnicodeCharacter{016C}{\u{U}}%
+ \DeclareUnicodeCharacter{016D}{\u{u}}%
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{0170}{\H{U}}%
+ \DeclareUnicodeCharacter{0171}{\H{u}}%
+ \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
+ \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
+ \DeclareUnicodeCharacter{0174}{\^W}%
+ \DeclareUnicodeCharacter{0175}{\^w}%
+ \DeclareUnicodeCharacter{0176}{\^Y}%
+ \DeclareUnicodeCharacter{0177}{\^y}%
+ \DeclareUnicodeCharacter{0178}{\"Y}%
+ \DeclareUnicodeCharacter{0179}{\'Z}%
+ \DeclareUnicodeCharacter{017A}{\'z}%
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
+ \DeclareUnicodeCharacter{017D}{\v{Z}}%
+ \DeclareUnicodeCharacter{017E}{\v{z}}%
+ \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
+ %
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}%
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}%
+ \DeclareUnicodeCharacter{01C7}{LJ}%
+ \DeclareUnicodeCharacter{01C8}{Lj}%
+ \DeclareUnicodeCharacter{01C9}{lj}%
+ \DeclareUnicodeCharacter{01CA}{NJ}%
+ \DeclareUnicodeCharacter{01CB}{Nj}%
+ \DeclareUnicodeCharacter{01CC}{nj}%
+ \DeclareUnicodeCharacter{01CD}{\v{A}}%
+ \DeclareUnicodeCharacter{01CE}{\v{a}}%
+ \DeclareUnicodeCharacter{01CF}{\v{I}}%
+ %
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
+ \DeclareUnicodeCharacter{01D1}{\v{O}}%
+ \DeclareUnicodeCharacter{01D2}{\v{o}}%
+ \DeclareUnicodeCharacter{01D3}{\v{U}}%
+ \DeclareUnicodeCharacter{01D4}{\v{u}}%
+ %
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}%
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}%
+ \DeclareUnicodeCharacter{01E6}{\v{G}}%
+ \DeclareUnicodeCharacter{01E7}{\v{g}}%
+ \DeclareUnicodeCharacter{01E8}{\v{K}}%
+ \DeclareUnicodeCharacter{01E9}{\v{k}}%
+ %
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
+ \DeclareUnicodeCharacter{01F1}{DZ}%
+ \DeclareUnicodeCharacter{01F2}{Dz}%
+ \DeclareUnicodeCharacter{01F3}{dz}%
+ \DeclareUnicodeCharacter{01F4}{\'G}%
+ \DeclareUnicodeCharacter{01F5}{\'g}%
+ \DeclareUnicodeCharacter{01F8}{\`N}%
+ \DeclareUnicodeCharacter{01F9}{\`n}%
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}%
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}%
+ %
+ \DeclareUnicodeCharacter{021E}{\v{H}}%
+ \DeclareUnicodeCharacter{021F}{\v{h}}%
+ %
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{0232}{\=Y}%
+ \DeclareUnicodeCharacter{0233}{\=y}%
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}%
+ %
+ \DeclareUnicodeCharacter{02BC}{'}%
+ %
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
+ %
+ % Greek letters upper case
+ \DeclareUnicodeCharacter{0391}{{\it A}}%
+ \DeclareUnicodeCharacter{0392}{{\it B}}%
+ \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
+ \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
+ \DeclareUnicodeCharacter{0395}{{\it E}}%
+ \DeclareUnicodeCharacter{0396}{{\it Z}}%
+ \DeclareUnicodeCharacter{0397}{{\it H}}%
+ \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
+ \DeclareUnicodeCharacter{0399}{{\it I}}%
+ \DeclareUnicodeCharacter{039A}{{\it K}}%
+ \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
+ \DeclareUnicodeCharacter{039C}{{\it M}}%
+ \DeclareUnicodeCharacter{039D}{{\it N}}%
+ \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
+ \DeclareUnicodeCharacter{039F}{{\it O}}%
+ \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
+ \DeclareUnicodeCharacter{03A1}{{\it P}}%
+ %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
+ \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
+ \DeclareUnicodeCharacter{03A4}{{\it T}}%
+ \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
+ \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
+ \DeclareUnicodeCharacter{03A7}{{\it X}}%
+ \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
+ \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
+ %
+ % Vowels with accents
+ \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
+ \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
+ \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
+ \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
+ \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
+ \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
+ %
+ % Standalone accent
+ \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
+ %
+ % Greek letters lower case
+ \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
+ \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
+ \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
+ \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
+ \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
+ \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
+ \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
+ \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
+ \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
+ \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
+ \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
+ \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
+ \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
+ \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
+ \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
+ \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
+ \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
+ \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
+ \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
+ \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
+ \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
+ \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
+ \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
+ \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
+ \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
+ %
+ % More Greek vowels with accents
+ \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
+ \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
+ \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
+ \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
+ \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
+ %
+ % Variant Greek letters
+ \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
+ \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
+ \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
+ %
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
+ %
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
+ %
+ \DeclareUnicodeCharacter{1E20}{\=G}%
+ \DeclareUnicodeCharacter{1E21}{\=g}%
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
+ \DeclareUnicodeCharacter{1E26}{\"H}%
+ \DeclareUnicodeCharacter{1E27}{\"h}%
+ %
+ \DeclareUnicodeCharacter{1E30}{\'K}%
+ \DeclareUnicodeCharacter{1E31}{\'k}%
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
+ \DeclareUnicodeCharacter{1E3E}{\'M}%
+ \DeclareUnicodeCharacter{1E3F}{\'m}%
+ %
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
+ %
+ \DeclareUnicodeCharacter{1E54}{\'P}%
+ \DeclareUnicodeCharacter{1E55}{\'p}%
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
+ %
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
+ %
+ \DeclareUnicodeCharacter{1E7C}{\~V}%
+ \DeclareUnicodeCharacter{1E7D}{\~v}%
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
+ %
+ \DeclareUnicodeCharacter{1E80}{\`W}%
+ \DeclareUnicodeCharacter{1E81}{\`w}%
+ \DeclareUnicodeCharacter{1E82}{\'W}%
+ \DeclareUnicodeCharacter{1E83}{\'w}%
+ \DeclareUnicodeCharacter{1E84}{\"W}%
+ \DeclareUnicodeCharacter{1E85}{\"w}%
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
+ \DeclareUnicodeCharacter{1E8C}{\"X}%
+ \DeclareUnicodeCharacter{1E8D}{\"x}%
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1E90}{\^Z}%
+ \DeclareUnicodeCharacter{1E91}{\^z}%
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
+ \DeclareUnicodeCharacter{1E97}{\"t}%
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
+ %
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
+ %
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
+ \DeclareUnicodeCharacter{1EBC}{\~E}%
+ \DeclareUnicodeCharacter{1EBD}{\~e}%
+ %
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
+ %
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
+ %
+ \DeclareUnicodeCharacter{1EF2}{\`Y}%
+ \DeclareUnicodeCharacter{1EF3}{\`y}%
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
+ %
+ \DeclareUnicodeCharacter{1EF8}{\~Y}%
+ \DeclareUnicodeCharacter{1EF9}{\~y}%
+ %
+ % Exotic spaces
+ \DeclareUnicodeCharacter{2007}{\hphantom{0}}%
+ %
+ % Punctuation
+ \DeclareUnicodeCharacter{2013}{--}%
+ \DeclareUnicodeCharacter{2014}{---}%
+ \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
+ \DeclareUnicodeCharacter{2019}{\quoteright{}}%
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
+ \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
+ \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
+ \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
+ \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
+ \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
+ \DeclareUnicodeCharacter{2022}{\bullet{}}%
+ \DeclareUnicodeCharacter{202F}{\thinspace}%
+ \DeclareUnicodeCharacter{2026}{\dots{}}%
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
+ \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
+ %
+ \DeclareUnicodeCharacter{20AC}{\euro{}}%
+ %
+ \DeclareUnicodeCharacter{2192}{\arrow}%
+ \DeclareUnicodeCharacter{21D2}{\result{}}%
+ %
+ % Mathematical symbols
+ \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
+ \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
+ \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
+ \DeclareUnicodeCharacter{2212}{\minus{}}%
+ \DeclareUnicodeCharacter{2217}{\ast}%
+ \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
+ \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
+ \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
+ \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
+ \DeclareUnicodeCharacter{2261}{\equiv{}}%
+ \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
+ \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
+ \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
+ \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
+ %
+ \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
+ \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
+ \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
+ \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
+ \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
+ \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
+ \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
+ \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
+ \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
+ \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
+ \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
+ \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
+ \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
+ \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
+ \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
+ \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
+ \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
+ \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
+ \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
+ \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
+ \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
+ \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
+ \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
+ \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
+ \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
+ \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
+ \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
+ \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
+ \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
+ \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
+ \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
+ \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
+ \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
+ \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
+ \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
+ \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
+ \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
+ \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
+ \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
+ \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
+ \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
+ \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
+ \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
+ \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
+ \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
+ \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
+ \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
+ \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
+ \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
+ \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
+ \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
+ \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
+ \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
+ \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
+ \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
+ \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
+ \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
+ \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
+ \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
+ \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
+ \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
+ \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
+ \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
+ \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
+ \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
+ \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
+ \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
+ \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
+ \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
+ \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
+ \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
+ \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
+ \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
+ \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
+ \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
+ \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
+ \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
+ \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
+ \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
+ \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
+ \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
+ \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
+ \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
+ \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
+ \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
+ \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
+ \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
+ \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
+ \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
+ \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
+ %
+ \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
+ \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
+ \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
+ \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
+ \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
+ \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
+ \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
+ \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
+ \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
+ \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
+ \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
+ \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
+ \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
+ \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
+ \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
+ \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
+ \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
+ \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
+ \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
+ \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
+ \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
+ \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
+ \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
+ \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
+ \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
+ \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
+ \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
+ \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
+ \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
+ %
+ \global\mathchardef\checkmark="1370% actually the square root sign
+ \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
+}% end of \unicodechardefs
+
+% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
+% It makes the setting that replace UTF-8 byte sequence.
+\def\utfeightchardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
+ \unicodechardefs
+}
+
+% Whether the active definitions of non-ASCII characters expand to
+% non-active tokens with the same character code. This is used to
+% write characters literally, instead of using active definitions for
+% printing the correct glyphs.
+\newif\ifpassthroughchars
+\passthroughcharsfalse
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% provide a definition macro to replace/pass-through a Unicode character
+%
+\def\DeclareUnicodeCharacterNative#1#2{%
+ \ifnum"#1>"7F % only make non-ASCII chars active
+ \catcode"#1=\active
+ \def\dodeclareunicodecharacternative##1##2##3{%
+ \begingroup
+ \uccode`\~="##2\relax
+ \uppercase{\gdef~}{%
+ \ifpassthroughchars
+ ##1%
+ \else
+ ##3%
+ \fi
+ }
+ \endgroup
+ }
+ \begingroup
+ \uccode`\.="#1\relax
+ \uppercase{\def\UTFNativeTmp{.}}%
+ \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
+ \endgroup
+ \fi
+}
+
+% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
+% It activates the setting that replaces Unicode characters.
+\def\nativeunicodechardefs{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
+ \unicodechardefs
+}
+
+% For native Unicode handling (XeTeX and LuaTeX),
+% make the character token expand
+% to the sequences given in \unicodechardefs for printing.
+\def\DeclareUnicodeCharacterNativeAtU#1#2{%
+ \def\UTFAtUTmp{#2}
+ \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
+}
+
+% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
+\def\nativeunicodechardefsatu{%
+ \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
+ \unicodechardefs
+}
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Define all Unicode characters we know about
+\iftxinativeunicodecapable
+ \nativeunicodechardefsatu
+\else
+ \utfeightchardefs
+\fi
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \txipageheight = \vsize
+ %
+ \hsize = #2\relax
+ \txipagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \else
+ \ifx\XeTeXrevision\thisisundefined
+ \special{papersize=#8,#7}%
+ \else
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % XeTeX does not have \pdfhorigin and \pdfvorigin.
+ \fi
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{-11.4mm}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+\def\bsixpaper{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{140mm}{100mm}%
+ {-6.35mm}{-12.7mm}%
+ {\bindingoffset}{14pt}%
+ {176mm}{125mm}%
+ \let\SETdispenvsize=\smallword
+ \lispnarrowing = 0.2in
+ \globaldefs = 0
+}}
+
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by 2.5in % default 1in margin above heading line
+ % and 1.5in to include heading, footing and
+ % bottom margin
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by 2in % default to 1 inch margin on each side
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
+\hfuzz = 1pt
+
+
+\message{microtype,}
+
+% protrusion, from Thanh's protcode.tex.
+\def\mtsetprotcode#1{%
+ \rpcode#1`\!=200 \rpcode#1`\,=700 \rpcode#1`\-=700 \rpcode#1`\.=700
+ \rpcode#1`\;=500 \rpcode#1`\:=500 \rpcode#1`\?=200
+ \rpcode#1`\'=700
+ \rpcode#1 34=500 % ''
+ \rpcode#1 123=300 % --
+ \rpcode#1 124=200 % ---
+ \rpcode#1`\)=50 \rpcode#1`\A=50 \rpcode#1`\F=50 \rpcode#1`\K=50
+ \rpcode#1`\L=50 \rpcode#1`\T=50 \rpcode#1`\V=50 \rpcode#1`\W=50
+ \rpcode#1`\X=50 \rpcode#1`\Y=50 \rpcode#1`\k=50 \rpcode#1`\r=50
+ \rpcode#1`\t=50 \rpcode#1`\v=50 \rpcode#1`\w=50 \rpcode#1`\x=50
+ \rpcode#1`\y=50
+ %
+ \lpcode#1`\`=700
+ \lpcode#1 92=500 % ``
+ \lpcode#1`\(=50 \lpcode#1`\A=50 \lpcode#1`\J=50 \lpcode#1`\T=50
+ \lpcode#1`\V=50 \lpcode#1`\W=50 \lpcode#1`\X=50 \lpcode#1`\Y=50
+ \lpcode#1`\v=50 \lpcode#1`\w=50 \lpcode#1`\x=50 \lpcode#1`\y=0
+ %
+ \mtadjustprotcode#1\relax
+}
+
+\newcount\countC
+\def\mtadjustprotcode#1{%
+ \countC=0
+ \loop
+ \ifcase\lpcode#1\countC\else
+ \mtadjustcp\lpcode#1\countC
+ \fi
+ \ifcase\rpcode#1\countC\else
+ \mtadjustcp\rpcode#1\countC
+ \fi
+ \advance\countC 1
+ \ifnum\countC < 256 \repeat
+}
+
+\newcount\countB
+\def\mtadjustcp#1#2#3{%
+ \setbox\boxA=\hbox{%
+ \ifx#2\font\else#2\fi
+ \char#3}%
+ \countB=\wd\boxA
+ \multiply\countB #1#2#3\relax
+ \divide\countB \fontdimen6 #2\relax
+ #1#2#3=\countB\relax
+}
+
+\ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \ifpdf % pdfTeX
+ \mtsetprotcode\textrm
+ \def\mtfontexpand#1{\pdffontexpand#1 20 20 1 autoexpand\relax}
+ \else % TeX
+ \def\mtfontexpand#1{}
+ \fi
+ \else % LuaTeX
+ \mtsetprotcode\textrm
+ \def\mtfontexpand#1{\expandglyphsinfont#1 20 20 1\relax}
+ \fi
+\else % XeTeX
+ \mtsetprotcode\textrm
+ \def\mtfontexpand#1{}
+\fi
+
+
+\newif\ifmicrotype
+
+\def\microtypeON{%
+ \microtypetrue
+ %
+ \ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \ifpdf % pdfTeX
+ \pdfadjustspacing=2
+ \pdfprotrudechars=2
+ \fi
+ \else % LuaTeX
+ \adjustspacing=2
+ \protrudechars=2
+ \fi
+ \else % XeTeX
+ \XeTeXprotrudechars=2
+ \fi
+ %
+ \mtfontexpand\textrm
+ \mtfontexpand\textsl
+ \mtfontexpand\textbf
+}
+
+\def\microtypeOFF{%
+ \microtypefalse
+ %
+ \ifx\XeTeXrevision\thisisundefined
+ \ifx\luatexversion\thisisundefined
+ \ifpdf % pdfTeX
+ \pdfadjustspacing=0
+ \pdfprotrudechars=0
+ \fi
+ \else % LuaTeX
+ \adjustspacing=0
+ \protrudechars=0
+ \fi
+ \else % XeTeX
+ \XeTeXprotrudechars=0
+ \fi
+}
+
+\microtypeOFF
+
+\parseargdef\microtype{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\onword
+ \microtypeON
+ \else\ifx\txiarg\offword
+ \microtypeOFF
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @microtype option `\txiarg', must be on|off}%
+ \fi\fi
+}
+
+
+\message{and turning on texinfo input format.}
+
+% Make UTF-8 the default encoding.
+\documentencodingzzz{UTF-8}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+\catcode`\^^K = 10 % treat vertical tab as whitespace
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% Set catcodes for Texinfo file
+
+% Active characters for printing the wanted glyph.
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+%
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+\chardef\hatchar=`\^
+\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+\let\realunder=_
+
+\catcode`\|=\active \def|{{\tt\char124}}
+
+\chardef \less=`\<
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
+\chardef \gtr=`\>
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
+\catcode`\+=\active \def+{{\tt \char 43}}
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+\catcode`\-=\active \let-=\normaldash
+
+
+% used for headline/footline in the output routine, in case the page
+% breaks in the middle of an @tex block.
+\def\texinfochars{%
+ \let< = \activeless
+ \let> = \activegtr
+ \let~ = \activetilde
+ \let^ = \activehat
+ \setregularquotes
+ \let\b = \strong
+ \let\i = \smartitalic
+ % in principle, all other definitions in \tex have to be undone too.
+}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \passthroughcharstrue
+ \let-=\normaldash
+ \let"=\normaldoublequote
+ \let$=\normaldollar %$ font-lock fix
+ \let+=\normalplus
+ \let<=\normalless
+ \let>=\normalgreater
+ \let^=\normalcaret
+ \let_=\normalunderscore
+ \let|=\normalverticalbar
+ \let~=\normaltilde
+ \otherbackslash
+ \setregularquotes
+ \unsepspaces
+}
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \loadconf turn them back on.
+\catcode`+=\other \catcode`\_=\other
+
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+
+% Print a typewriter backslash. For math mode, we can't simply use
+% \backslashcurfont: the story here is that in math mode, the \char
+% of \backslashcurfont ends up printing the roman \ from the math symbol
+% font (because \char in math mode uses the \mathcode, and plain.tex
+% sets \mathcode`\\="026E). Hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
+
+\def\ttbackslash{{\tt \ifmmode \mathchar29020 \else \backslashcurfont \fi}}
+\let\backslashchar = \ttbackslash % \backslashchar{} is for user documents.
+
+% These are made active for url-breaking, so need
+% active definitions as the normal characters.
+\def\normaldot{.}
+\def\normalquest{?}
+\def\normalslash{/}
+
+% \newlinesloadsconf - call \loadconf as soon as possible in the
+% file, e.g. at the first newline.
+%
+{\catcode`\^=7
+\catcode`\^^M=13
+\gdef\newlineloadsconf{%
+ \catcode`\^^M=13 %
+ \newlineloadsconfzz%
+}
+\gdef\newlineloadsconfzz#1^^M{%
+ \def\c{\loadconf\c}%
+ % Definition for the first newline read in the file
+ \def ^^M{\loadconf}%
+ % In case the first line has a whole-line command on it
+ \let\originalparsearg\parsearg%
+ \def\parsearg{\loadconf\originalparsearg}%
+}}
+
+
+% Emergency active definition of newline, in case an active newline token
+% appears by mistake.
+{\catcode`\^=7 \catcode13=13%
+\gdef\enableemergencynewline{%
+ \gdef^^M{%
+ \par%
+ %<warning: active newline>\par%
+}}}
+
+
+% \loadconf gets called at the beginning of every Texinfo file.
+% If texinfo.cnf is present on the system, read it. Useful for site-wide
+% @afourpaper, etc. Not opening texinfo.cnf directly in texinfo.tex
+% makes it possible to make a format file for Texinfo.
+%
+\gdef\loadconf{%
+ \relax % Terminate the filename if running as "tex '&texinfo' FILE.texi".
+ %
+ % Turn off the definitions that trigger \loadconf
+ \everyjobreset
+ \catcode13=5 % regular end of line
+ \enableemergencynewline
+ \let\c=\comment
+ \let\parsearg\originalparsearg
+ %
+ % Also turn back on active characters that might appear in the input
+ % file name, in case not using a pre-dumped format.
+ \catcode`+=\active
+ \catcode`\_=\active
+ %
+ \openin 1 texinfo.cnf
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
+}
+
+% Redefine some control sequences to be controlled by the \ifdummies
+% and \ifindexnofonts switches. Do this at the end so that the control
+% sequences are all defined.
+\definedummies
+
+
+
+
+\catcode`\@=0
+
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
+
+% In Texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+@let\ = @ttbackslash
+
+% If in a .fmt file, print the version number.
+% \eatinput stops the `\input texinfo' from showing up.
+% After that, `\' should revert to printing a backslash.
+% Turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+%
+@everyjob{@message{[Texinfo version @texinfoversion]}%
+ @global@let\ = @eatinput
+ @catcode`+=@active @catcode`@_=@active}
+
+{@catcode`@^=7 @catcode`@^^M=13%
+@gdef@eatinput input texinfo#1^^M{@loadconf}}
+
+@def@everyjobreset{@ifx\@eatinput @let\ = @ttbackslash @fi}
+
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+{@catcode`- = @active
+ @gdef@normalturnoffactive{%
+ @turnoffactive
+ @let\=@ttbackslash
+ }
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
+@catcode`@& = @other @def@normalamp{&}
+@catcode`@# = @other @def@normalhash{#}
+@catcode`@% = @other @def@normalpercent{%}
+
+@let @hashchar = @normalhash
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+
+@c Local variables:
+@c eval: (add-hook 'before-save-hook 'time-stamp nil t)
+@c time-stamp-pattern: "texinfoversion{%Y-%02m-%02d.%02H}"
+@c page-delimiter: "^\\\\message"
+@c End:
+
+@newlineloadsconf
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
new file mode 100755
index 0000000..99196fc
--- /dev/null
+++ b/build-aux/update-copyright
@@ -0,0 +1,302 @@
+#!/bin/sh
+#! -*-perl-*-
+
+# Update an FSF copyright year list to include the current year.
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering and Joel E. Denny
+
+# This script updates an FSF copyright year list to include the current year.
+# Usage: update-copyright [FILE...]
+#
+# The arguments to this script should be names of files that contain
+# copyright statements to be updated. The copyright holder's name
+# defaults to "Free Software Foundation, Inc." but may be changed to
+# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
+# variable.
+#
+# For example, you might wish to use the update-copyright target rule
+# in maint.mk from gnulib's maintainer-makefile module.
+#
+# Iff a copyright statement is recognized in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year and it is reformatted to:
+#
+# 1. Fit within 72 columns.
+# 2. Convert 2-digit years to 4-digit years by prepending "19".
+# 3. Expand copyright year intervals. (See "Environment variables"
+# below.)
+#
+# A warning is printed for every file for which no copyright
+# statement is recognized.
+#
+# Each file's copyright statement must be formatted correctly in
+# order to be recognized. For example, each of these is fine:
+#
+# Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+# Foundation, Inc.
+#
+# # Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# /*
+# * Copyright &copy; 90,2005,2007-2009
+# * Free Software Foundation, Inc.
+# */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+# ## Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# However, any correctly formatted copyright statement following
+# a non-matching copyright statements would be recognized.
+#
+# The exact conditions that a file's copyright statement must meet
+# to be recognized are:
+#
+# 1. It is the first copyright statement that meets all of the
+# following conditions. Subsequent copyright statements are
+# ignored.
+# 2. Its format is "Copyright (C)", then a list of copyright years,
+# and then the name of the copyright holder.
+# 3. The "(C)" takes one of the following forms or is omitted
+# entirely:
+#
+# A. (C)
+# B. (c)
+# C. @copyright{}
+# D. &copy;
+# E. ©
+#
+# 4. The "Copyright" appears at the beginning of a line, except that it
+# may be prefixed by any sequence (e.g., a comment) of no more than
+# 5 characters -- including white space.
+# 5. Iff such a prefix is present, the same prefix appears at the
+# beginning of each remaining line within the FSF copyright
+# statement. There is one exception in order to support C-style
+# comments: if the first line's prefix contains nothing but
+# whitespace surrounding a "/*", then the prefix for all subsequent
+# lines is the same as the first line's prefix except with each of
+# "/" and possibly "*" replaced by a " ". The replacement of "*"
+# by " " is consistent throughout all subsequent lines.
+# 6. Blank lines, even if preceded by the prefix, do not appear
+# within the FSF copyright statement.
+# 7. Each copyright year is 2 or 4 digits, and years are separated by
+# commas, "-", or "--". Whitespace may appear after commas.
+#
+# Environment variables:
+#
+# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
+# is reformatted even if it does not need updating for the new
+# year. If unset or set to 0, only updated FSF copyright
+# statements are reformatted.
+# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+# copyright years (such as 90, 1991, 1992-2007, 2008) in a
+# reformatted FSF copyright statement is collapsed to a single
+# interval (such as 1990-2008). If unset or set to 0, all existing
+# copyright year intervals in a reformatted FSF copyright statement
+# are expanded instead.
+# If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
+# to the minimal containing range. For example, convert
+# 2000, 2004-2007, 2009 to 2000-2009.
+# 3. For testing purposes, you can set the assumed current year in
+# UPDATE_COPYRIGHT_YEAR.
+# 4. The default maximum line length for a copyright line is 72.
+# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
+# 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
+# than "Free Software Foundation, Inc.".
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line. The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name. The second line is essential for perl and is
+# also useful for editing this file in Emacs. The next two lines below
+# are valid code in both sh and perl. When executed by sh, they re-execute
+# the script through the perl program found in $PATH. The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh. When executed by perl, the next two lines are a no-op.
+eval 'exec perl -wSx -0777 -pi "$0" "$@"'
+ if 0;
+
+my $VERSION = '2023-01-11.04:24'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|&copy;|©)';
+my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
+$holder ||= 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
+!$margin || $margin !~ m/^\d+$/
+ and $margin = 72;
+
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+ {
+ my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+ $this_year = $year + 1900;
+ }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+ {
+ $leading = "$1$2";
+ $prefix = $2;
+ if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+ {
+ $prefix =~ s,/, ,;
+ my $prefix_ws = $prefix;
+ $prefix_ws =~ s/\*/ /; # Only whitespace.
+ if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+ {
+ $prefix = $prefix_ws;
+ }
+ }
+ $ws_re = '[ \t\r\f]'; # \s without \n
+ $ws_re =
+ "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+ my $holder_re = $holder;
+ $holder_re =~ s/\s/$ws_re/g;
+ my $stmt_remainder_re =
+ "(?:$ws_re$circle_c_re)?"
+ . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*"
+ . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+ if (/\G$stmt_remainder_re/)
+ {
+ $stmt_re =
+ quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+ last;
+ }
+ }
+if (defined $stmt_re)
+ {
+ /$stmt_re/ or die; # Should never die.
+ my $stmt = $1;
+ my $final_year_orig = $2;
+
+ # Handle two-digit year numbers like "98" and "99".
+ my $final_year = $final_year_orig;
+ $final_year <= 99
+ and $final_year += 1900;
+
+ if ($final_year != $this_year)
+ {
+ # Update the year.
+ $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/;
+ }
+ if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
+ {
+ # Normalize all whitespace including newline-prefix sequences.
+ $stmt =~ s/$ws_re/ /g;
+
+ # Put spaces after commas.
+ $stmt =~ s/, ?/, /g;
+
+ # Convert 2-digit to 4-digit years.
+ $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+ # Make the use of intervals consistent.
+ if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+ {
+ $stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg;
+ }
+ else
+ {
+ my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-";
+
+ $stmt =~
+ s/
+ (\d{4})
+ (?:
+ (,\ |--?)
+ ((??{
+ if ($2 ne ', ') { '\d{4}'; }
+ elsif (!$3) { $1 + 1; }
+ else { $3 + 1; }
+ }))
+ )+
+ /$1$ndash$3/gx;
+
+ # When it's 2, emit a single range encompassing all year numbers.
+ $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
+ and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/;
+ }
+
+ # Format within margin.
+ my $stmt_wrapped;
+ my $text_margin = $margin - length($prefix);
+ if ($prefix =~ /^(\t+)/)
+ {
+ $text_margin -= length($1) * ($tab_width - 1);
+ }
+ while (length $stmt)
+ {
+ if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+ || ($stmt =~ s/^([\S]+)(?: |$)//))
+ {
+ my $line = $1;
+ $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+ $stmt_wrapped .= $line;
+ }
+ else
+ {
+ # Should be unreachable, but we don't want an infinite
+ # loop if it can be reached.
+ die;
+ }
+ }
+
+ # Replace the old copyright statement.
+ s/$stmt_re/$stmt_wrapped/g;
+ }
+ }
+else
+ {
+ print STDERR "$ARGV: warning: copyright statement not found\n";
+ }
+
+# Hey Emacs!
+# Local variables:
+# coding: utf-8
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-line-limit: 200
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
new file mode 100755
index 0000000..f4908ba
--- /dev/null
+++ b/build-aux/useless-if-before-free
@@ -0,0 +1,240 @@
+#!/bin/sh
+#! -*-perl-*-
+
+# Detect instances of "if (p) free (p);".
+# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces.
+
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# Written by Jim Meyering
+
+# This is a prologue that allows to run a perl script as an executable
+# on systems that are compliant to a POSIX version before POSIX:2017.
+# On such systems, the usual invocation of an executable through execlp()
+# or execvp() fails with ENOEXEC if it is a script that does not start
+# with a #! line. The script interpreter mentioned in the #! line has
+# to be /bin/sh, because on GuixSD systems that is the only program that
+# has a fixed file name. The second line is essential for perl and is
+# also useful for editing this file in Emacs. The next two lines below
+# are valid code in both sh and perl. When executed by sh, they re-execute
+# the script through the perl program found in $PATH. The '-x' option
+# is essential as well; without it, perl would re-execute the script
+# through /bin/sh. When executed by perl, the next two lines are a no-op.
+eval 'exec perl -wSx "$0" "$@"'
+ if 0;
+
+my $VERSION = '2022-01-27 18:51'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job. Otherwise, update this string manually.
+
+my $copyright_year = '2022';
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # https://meyering.net/code/Coda/
+END {
+ defined fileno STDOUT or return;
+ close STDOUT and return;
+ warn "$ME: failed to close standard output: $!\n";
+ $? ||= 1;
+}
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try '$ME --help' for more information.\n";
+ }
+ else
+ {
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS] FILE...
+
+Detect any instance in FILE of a useless "if" test before a free call, e.g.,
+"if (p) free (p);". Any such test may be safely removed without affecting
+the semantics of the C code in FILE. Use --name=FOO --name=BAR to also
+detect free-like functions named FOO and BAR.
+
+OPTIONS:
+
+ --list print only the name of each matching FILE (\\0-terminated)
+ --name=N add name N to the list of \'free\'-like functions to detect;
+ may be repeated
+
+ --help display this help and exit
+ --version output version information and exit
+
+Exit status:
+
+ 0 one or more matches
+ 1 no match
+ 2 an error
+
+EXAMPLE:
+
+For example, this command prints all removable "if" tests before "free"
+and "kfree" calls in the linux kernel sources:
+
+ git ls-files -z |xargs -0 $ME --name=kfree
+
+EOF
+ }
+ exit $exit_code;
+}
+
+sub is_NULL ($)
+{
+ my ($expr) = @_;
+ return ($expr eq 'NULL' || $expr eq '0');
+}
+
+{
+ sub EXIT_MATCH {0}
+ sub EXIT_NO_MATCH {1}
+ sub EXIT_ERROR {2}
+ my $err = EXIT_NO_MATCH;
+
+ my $list;
+ my @name = qw(free);
+ GetOptions
+ (
+ help => sub { usage 0 },
+ version =>
+ sub
+ {
+ print "$ME version $VERSION\n";
+ print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
+ print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
+ . "This is free software: you are free to change and redistribute it.\n"
+ . "There is NO WARRANTY, to the extent permitted by law.\n";
+ print "\n";
+ my $author = "Jim Meyering";
+ print "Written by $author.\n";
+ exit
+ },
+ list => \$list,
+ 'name=s@' => \@name,
+ ) or usage 1;
+
+ # Make sure we have the right number of non-option arguments.
+ # Always tell the user why we fail.
+ @ARGV < 1
+ and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
+
+ my $or = join '|', @name;
+ my $regexp = qr/(?:$or)/;
+
+ # Set the input record separator.
+ # Note: this makes it impractical to print line numbers.
+ $/ = '"';
+
+ my $found_match = 0;
+ FILE:
+ foreach my $file (@ARGV)
+ {
+ open FH, '<', $file
+ or (warn "$ME: can't open '$file' for reading: $!\n"),
+ $err = EXIT_ERROR, next;
+ while (defined (my $line = <FH>))
+ {
+ # Skip non-matching lines early to save time
+ $line =~ /\bif\b/
+ or next;
+ while ($line =~
+ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
+ # 1 2 3
+ (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;|
+ \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
+ {
+ my $all = $1;
+ my ($lhs, $rhs) = ($2, $3);
+ my ($free_opnd, $braced_free_opnd) = ($4, $5);
+ my $non_NULL;
+ if (!defined $rhs) { $non_NULL = $lhs }
+ elsif (is_NULL $rhs) { $non_NULL = $lhs }
+ elsif (is_NULL $lhs) { $non_NULL = $rhs }
+ else { next }
+
+ # Compare the non-NULL part of the "if" expression and the
+ # free'd expression, without regard to white space.
+ $non_NULL =~ tr/ \t//d;
+ my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
+ $e2 =~ tr/ \t//d;
+ if ($non_NULL eq $e2)
+ {
+ $found_match = 1;
+ $list
+ and (print "$file\0"), next FILE;
+ print "$file: $all\n";
+ }
+ }
+ }
+ }
+ continue
+ {
+ close FH;
+ }
+
+ $found_match && $err == EXIT_NO_MATCH
+ and $err = EXIT_MATCH;
+
+ exit $err;
+}
+
+my $foo = <<'EOF';
+# The above is to *find* them.
+# This adjusts them, removing the unnecessary "if (p)" part.
+
+# FIXME: do something like this as an option (doesn't do braces):
+free=xfree
+git grep -l -z "$free *(" \
+ | xargs -0 useless-if-before-free -l --name="$free" \
+ | xargs -0 perl -0x3b -pi -e \
+ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s'
+
+# Use the following to remove redundant uses of kfree inside braces.
+# Note that -0777 puts perl in slurp-whole-file mode;
+# but we have plenty of memory, these days...
+free=kfree
+git grep -l -z "$free *(" \
+ | xargs -0 useless-if-before-free -l --name="$free" \
+ | xargs -0 perl -0777 -pi -e \
+ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
+
+Be careful that the result of the above transformation is valid.
+If the matched string is followed by "else", then obviously, it won't be.
+
+When modifying files, refuse to process anything other than a regular file.
+EOF
+
+## Local Variables:
+## mode: perl
+## indent-tabs-mode: nil
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-line-limit: 50
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC0"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files
new file mode 100755
index 0000000..5ed2b14
--- /dev/null
+++ b/build-aux/vc-list-files
@@ -0,0 +1,113 @@
+#!/bin/sh
+# List version-controlled file names.
+
+# Print a version string.
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2006-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+
+# List the specified version-controlled files.
+# With no argument, list them all. With a single DIRECTORY argument,
+# list the version-controlled files in that directory.
+
+# If there's an argument, it must be a single, "."-relative directory name.
+# cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/
+
+postprocess=
+case $1 in
+ --help) cat <<EOF
+Usage: $0 [-C SRCDIR] [DIR...]
+
+Output a list of version-controlled files in DIR (default .), relative to
+SRCDIR (default .). SRCDIR must be the top directory of a checkout.
+
+Options:
+ --help print this help, then exit
+ --version print version number, then exit
+ -C SRCDIR change directory to SRCDIR before generating list
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+ exit ;;
+
+ --version)
+ year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
+ cat <<EOF
+vc-list-files $scriptversion
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+ exit ;;
+
+ -C)
+ test "$2" = . || postprocess="| sed 's|^|$2/|'"
+ cd "$2" || exit 1
+ shift; shift ;;
+esac
+
+test $# = 0 && set .
+
+for dir
+do
+ if test -d .git || test -f .git; then
+ test "x$dir" = x. \
+ && dir= sed_esc= \
+ || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
+ # Ignore git symlinks - either they point into the tree, in which case
+ # we don't need to visit the target twice, or they point somewhere
+ # else (often into a submodule), in which case the content does not
+ # belong to this package.
+ eval exec git ls-tree -r 'HEAD:"$dir"' \
+ \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess
+ elif test -d .hg; then
+ eval exec hg locate '"$dir/*"' $postprocess
+ elif test -d .bzr; then
+ test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+ eval exec bzr ls -R --versioned '"$dir"' $postprocess
+ elif test -d CVS; then
+ test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+ if test -x build-aux/cvsu; then
+ eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
+ elif (cvsu --help) >/dev/null 2>&1; then
+ eval cvsu --find --types=AFGM '"$dir"' $postprocess
+ else
+ eval awk -F/ \''{ \
+ if (!$1 && $3 !~ /^-/) { \
+ f=FILENAME; \
+ if (f ~ /CVS\/Entries$/) \
+ f = substr(f, 1, length(f)-11); \
+ print f $2; \
+ }}'\'' \
+ `find "$dir" -name Entries -print` /dev/null' $postprocess
+ fi
+ elif test -d .svn; then
+ eval exec svn list -R '"$dir"' $postprocess
+ else
+ echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
+ exit 1
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/cfg.mk b/cfg.mk
new file mode 100644
index 0000000..f76cc6f
--- /dev/null
+++ b/cfg.mk
@@ -0,0 +1,80 @@
+# Customize maint.mk -*- makefile -*-
+# Copyright (C) 2003-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Use the direct link. This is guaranteed to work immediately, while
+# it can take a while for the faster mirror links to become usable.
+url_dir_list = http://ftp.gnu.org/gnu/$(PACKAGE)
+
+# Used in maint.mk's web-manual rule
+manual_title = Parted User's Manual
+
+# Use the direct link. This is guaranteed to work immediately, while
+# it can take a while for the faster mirror links to become usable.
+url_dir_list = http://ftp.gnu.org/gnu/$(PACKAGE)
+
+# Tests not to run as part of "make distcheck".
+# Exclude changelog-check here so that there's less churn in ChangeLog
+# files -- otherwise, you'd need to have the upcoming version number
+# at the top of the file for each `make distcheck' run.
+local-checks-to-skip = \
+ sc_error_message_uppercase \
+ sc_error_message_period \
+ sc_file_system \
+ sc_prohibit_strcmp \
+ sc_prohibit_strncpy \
+ sc_prohibit_atoi_atof \
+ sc_require_test_exit_idiom \
+ sc_space_tab \
+ sc_texinfo_acronym \
+ sc_prohibit_gnu_make_extensions
+
+# Now that we have better (check.mk) tests, make this the default.
+export VERBOSE = yes
+
+# Hash of lines 42-208 for release 3.2
+old_NEWS_hash = 1d4e1fd474f9d7f11fb5b218d15da7d3
+
+include $(srcdir)/dist-check.mk
+
+useless_free_options = \
+ --name=pth_free
+
+# Tools used to bootstrap this package, used for "announcement".
+bootstrap-tools = autoconf,automake,gettext,gnulib,gperf
+
+update-copyright-env = \
+ UPDATE_COPYRIGHT_USE_INTERVALS=1 \
+ UPDATE_COPYRIGHT_MAX_LINE_LENGTH=79
+
+# Override submodule check to allow workaround for broken gnulib upstream
+submodule-checks = no-submodule-changes
+gl_public_submodule_commit=
+
+#==> .j/.x-sc_GPL_version <==
+#build-aux/vc-list-files
+
+exclude_file_name_regexp--sc_bindtextdomain = ^(libparted/)?tests/.*\.c$$
+
+exclude_file_name_regexp--sc_cross_check_PATH_usage_in_tests = \
+ ^libparted/tests/t.*\.sh$$
+
+exclude_file_name_regexp--sc_prohibit_always-defined_macros = \
+ ^parted/(strlist|table)\.h$$
+
+exclude_file_name_regexp--sc_prohibit_path_max_allocation = \
+ ^libparted/arch/beos\.c$$
+
+exclude_file_name_regexp--sc_unmarked_diagnostics = ^tests/print-max\.c$$
diff --git a/configure b/configure
new file mode 100755
index 0000000..7b7b1fd
--- /dev/null
+++ b/configure
@@ -0,0 +1,58273 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.71 for GNU parted 3.6.
+#
+# Report bugs to <bug-parted@gnu.org>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else \$as_nop
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
+
+else \$as_nop
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
+test -x / || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1
+
+ test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
+ if (eval "$as_required") 2>/dev/null
+then :
+ as_have_required=yes
+else $as_nop
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
+
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
+
+
+ if test "x$CONFIG_SHELL" != x
+then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno
+then :
+ printf "%s\n" "$0: This script requires a shell more modern than all"
+ printf "%s\n" "$0: the shells that I found on your system."
+ if test ${ZSH_VERSION+y} ; then
+ printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and bug-parted@gnu.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+ return $?
+}
+as_nop=as_fn_nop
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GNU parted'
+PACKAGE_TARNAME='parted'
+PACKAGE_VERSION='3.6'
+PACKAGE_STRING='GNU parted 3.6'
+PACKAGE_BUGREPORT='bug-parted@gnu.org'
+PACKAGE_URL='https://www.gnu.org/software/parted/'
+
+ac_unique_file="include/parted/parted.in.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
+#endif
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_header_c_list=
+gl_use_threads_default=
+gl_use_winpthreads_default=
+ac_config_libobj_dir=lib
+ac_func_c_list=
+gl_getopt_required=POSIX
+gt_needs=
+enable_year2038=no
+enable_largefile=yes
+ac_subst_vars='gltests_LIBOBJDEPS
+gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LIBOBJDEPS
+gl_LTLIBOBJS
+gl_LIBOBJS
+CONFIG_INCLUDE
+am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+LIB_BLKID
+BUILDINFO
+HAVE_CHECK_FALSE
+HAVE_CHECK_TRUE
+CHECK_LIBS
+CHECK_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+COMPILE_FOR_S390_FALSE
+COMPILE_FOR_S390_TRUE
+INTLINCS
+OS_LIBS
+PARTED_LIBS
+DM_LIBS
+UUID_LIBS
+POSUB
+INTLLIBS
+XGETTEXT_EXTRA_OPTIONS
+MSGMERGE
+XGETTEXT_015
+XGETTEXT
+GMSGFMT_015
+MSGFMT_015
+GMSGFMT
+MSGFMT
+GETTEXT_MACRO_VERSION
+USE_NLS
+LTLIBICONV
+LIBICONV
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+ac_ct_AR
+DLLTOOL
+OBJDUMP
+FILECMD
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+LIBTOOL
+WARN_CFLAGS
+LIBTESTS_LIBDEPS
+GL_CFLAG_GNULIB_WARNINGS
+YIELD_LIB
+GL_COND_OBJ_WINDOWS_TLS_FALSE
+GL_COND_OBJ_WINDOWS_TLS_TRUE
+GL_COND_OBJ_WINDOWS_THREAD_FALSE
+GL_COND_OBJ_WINDOWS_THREAD_TRUE
+GL_COND_OBJ_WCTOMB_FALSE
+GL_COND_OBJ_WCTOMB_TRUE
+GL_COND_OBJ_WCTOB_FALSE
+GL_COND_OBJ_WCTOB_TRUE
+abs_aux_dir
+GL_COND_OBJ_UNSETENV_FALSE
+GL_COND_OBJ_UNSETENV_TRUE
+GL_COND_OBJ_TIME_FALSE
+GL_COND_OBJ_TIME_TRUE
+HAVE_SYS_UIO_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H
+NEXT_SYS_UIO_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H
+NEXT_SYS_IOCTL_H
+HAVE_SYS_IOCTL_H
+GL_COND_OBJ_SYMLINK_FALSE
+GL_COND_OBJ_SYMLINK_TRUE
+GL_COND_OBJ_SOCKET_FALSE
+GL_COND_OBJ_SOCKET_TRUE
+GL_COND_OBJ_SIGPROCMASK_FALSE
+GL_COND_OBJ_SIGPROCMASK_TRUE
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H
+NEXT_SIGNAL_H
+GL_COND_OBJ_SETSOCKOPT_FALSE
+GL_COND_OBJ_SETSOCKOPT_TRUE
+GL_COND_OBJ_SETLOCALE_FALSE
+GL_COND_OBJ_SETLOCALE_TRUE
+LIB_SETLOCALE
+SETLOCALE_LIB
+GL_COND_OBJ_SETENV_FALSE
+GL_COND_OBJ_SETENV_TRUE
+GL_COND_OBJ_SELECT_FALSE
+GL_COND_OBJ_SELECT_TRUE
+LIB_SELECT
+SELECT_LIB
+LIBSOCKET
+GL_COND_OBJ_SCHED_YIELD_FALSE
+GL_COND_OBJ_SCHED_YIELD_TRUE
+GL_GNULIB_SCHED_YIELD
+HAVE_STRUCT_SCHED_PARAM
+HAVE_SCHED_H
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H
+NEXT_SCHED_H
+REPLACE_SCHED_YIELD
+HAVE_SCHED_YIELD
+GL_COND_OBJ_RAISE_FALSE
+GL_COND_OBJ_RAISE_TRUE
+GL_COND_OBJ_PUTENV_FALSE
+GL_COND_OBJ_PUTENV_TRUE
+GL_GNULIB_SIGACTION
+GL_GNULIB_SIGPROCMASK
+GL_GNULIB_SIGNAL_H_SIGPIPE
+GL_GNULIB_RAISE
+GL_GNULIB_PTHREAD_SIGMASK
+GL_COND_OBJ_PTHREAD_SIGMASK_FALSE
+GL_COND_OBJ_PTHREAD_SIGMASK_TRUE
+LIB_PTHREAD_SIGMASK
+PTHREAD_SIGMASK_LIB
+REPLACE_RAISE
+REPLACE_PTHREAD_SIGMASK
+HAVE_SIGHANDLER_T
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T
+HAVE_STRUCT_SIGACTION_SA_SIGACTION
+HAVE_SIGACTION
+HAVE_SIGINFO_T
+HAVE_SIGSET_T
+HAVE_RAISE
+HAVE_PTHREAD_SIGMASK
+HAVE_POSIX_SIGNALBLOCKING
+GL_COND_OBJ_PTHREAD_THREAD_FALSE
+GL_COND_OBJ_PTHREAD_THREAD_TRUE
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK
+GL_GNULIB_PTHREAD_SPIN
+GL_GNULIB_PTHREAD_TSS
+GL_GNULIB_PTHREAD_COND
+GL_GNULIB_PTHREAD_RWLOCK
+GL_GNULIB_PTHREAD_MUTEX
+GL_GNULIB_PTHREAD_ONCE
+GL_GNULIB_PTHREAD_THREAD
+LIB_PTHREAD
+HAVE_PTHREAD_H
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H
+NEXT_PTHREAD_H
+REPLACE_PTHREAD_SPIN_DESTROY
+REPLACE_PTHREAD_SPIN_UNLOCK
+REPLACE_PTHREAD_SPIN_TRYLOCK
+REPLACE_PTHREAD_SPIN_LOCK
+REPLACE_PTHREAD_SPIN_INIT
+REPLACE_PTHREAD_KEY_DELETE
+REPLACE_PTHREAD_GETSPECIFIC
+REPLACE_PTHREAD_SETSPECIFIC
+REPLACE_PTHREAD_KEY_CREATE
+REPLACE_PTHREAD_COND_DESTROY
+REPLACE_PTHREAD_COND_BROADCAST
+REPLACE_PTHREAD_COND_SIGNAL
+REPLACE_PTHREAD_COND_TIMEDWAIT
+REPLACE_PTHREAD_COND_WAIT
+REPLACE_PTHREAD_CONDATTR_DESTROY
+REPLACE_PTHREAD_CONDATTR_INIT
+REPLACE_PTHREAD_COND_INIT
+REPLACE_PTHREAD_RWLOCK_DESTROY
+REPLACE_PTHREAD_RWLOCK_UNLOCK
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK
+REPLACE_PTHREAD_RWLOCK_WRLOCK
+REPLACE_PTHREAD_RWLOCK_RDLOCK
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY
+REPLACE_PTHREAD_RWLOCKATTR_INIT
+REPLACE_PTHREAD_RWLOCK_INIT
+REPLACE_PTHREAD_MUTEX_DESTROY
+REPLACE_PTHREAD_MUTEX_UNLOCK
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK
+REPLACE_PTHREAD_MUTEX_TRYLOCK
+REPLACE_PTHREAD_MUTEX_LOCK
+REPLACE_PTHREAD_MUTEXATTR_DESTROY
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE
+REPLACE_PTHREAD_MUTEXATTR_INIT
+REPLACE_PTHREAD_MUTEX_INIT
+REPLACE_PTHREAD_ONCE
+REPLACE_PTHREAD_EXIT
+REPLACE_PTHREAD_JOIN
+REPLACE_PTHREAD_DETACH
+REPLACE_PTHREAD_EQUAL
+REPLACE_PTHREAD_SELF
+REPLACE_PTHREAD_ATTR_DESTROY
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE
+REPLACE_PTHREAD_ATTR_INIT
+REPLACE_PTHREAD_CREATE
+HAVE_PTHREAD_SPIN_DESTROY
+HAVE_PTHREAD_SPIN_UNLOCK
+HAVE_PTHREAD_SPIN_TRYLOCK
+HAVE_PTHREAD_SPIN_LOCK
+HAVE_PTHREAD_SPIN_INIT
+HAVE_PTHREAD_KEY_DELETE
+HAVE_PTHREAD_GETSPECIFIC
+HAVE_PTHREAD_SETSPECIFIC
+HAVE_PTHREAD_KEY_CREATE
+HAVE_PTHREAD_COND_DESTROY
+HAVE_PTHREAD_COND_BROADCAST
+HAVE_PTHREAD_COND_SIGNAL
+HAVE_PTHREAD_COND_TIMEDWAIT
+HAVE_PTHREAD_COND_WAIT
+HAVE_PTHREAD_CONDATTR_DESTROY
+HAVE_PTHREAD_CONDATTR_INIT
+HAVE_PTHREAD_COND_INIT
+HAVE_PTHREAD_RWLOCK_DESTROY
+HAVE_PTHREAD_RWLOCK_UNLOCK
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK
+HAVE_PTHREAD_RWLOCK_WRLOCK
+HAVE_PTHREAD_RWLOCK_RDLOCK
+HAVE_PTHREAD_RWLOCKATTR_DESTROY
+HAVE_PTHREAD_RWLOCKATTR_INIT
+HAVE_PTHREAD_RWLOCK_INIT
+HAVE_PTHREAD_MUTEX_DESTROY
+HAVE_PTHREAD_MUTEX_UNLOCK
+HAVE_PTHREAD_MUTEX_TIMEDLOCK
+HAVE_PTHREAD_MUTEX_TRYLOCK
+HAVE_PTHREAD_MUTEX_LOCK
+HAVE_PTHREAD_MUTEXATTR_DESTROY
+HAVE_PTHREAD_MUTEXATTR_SETROBUST
+HAVE_PTHREAD_MUTEXATTR_GETROBUST
+HAVE_PTHREAD_MUTEXATTR_SETTYPE
+HAVE_PTHREAD_MUTEXATTR_GETTYPE
+HAVE_PTHREAD_MUTEXATTR_INIT
+HAVE_PTHREAD_MUTEX_INIT
+HAVE_PTHREAD_ONCE
+HAVE_PTHREAD_EXIT
+HAVE_PTHREAD_JOIN
+HAVE_PTHREAD_DETACH
+HAVE_PTHREAD_EQUAL
+HAVE_PTHREAD_SELF
+HAVE_PTHREAD_ATTR_DESTROY
+HAVE_PTHREAD_ATTR_SETDETACHSTATE
+HAVE_PTHREAD_ATTR_GETDETACHSTATE
+HAVE_PTHREAD_ATTR_INIT
+HAVE_PTHREAD_CREATE
+HAVE_PTHREAD_PROCESS_SHARED
+HAVE_PTHREAD_MUTEX_ROBUST
+HAVE_PTHREAD_MUTEX_RECURSIVE
+HAVE_PTHREAD_CREATE_DETACHED
+HAVE_PTHREAD_SPINLOCK_T
+HAVE_PTHREAD_T
+GL_GNULIB_SELECT
+GL_GNULIB_PSELECT
+GL_COND_OBJ_PSELECT_FALSE
+GL_COND_OBJ_PSELECT_TRUE
+HAVE_SYS_SELECT_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H
+NEXT_SYS_SELECT_H
+REPLACE_SELECT
+REPLACE_PSELECT
+HAVE_PSELECT
+GL_COND_OBJ_PIPE_FALSE
+GL_COND_OBJ_PIPE_TRUE
+GL_COND_OBJ_PERROR_FALSE
+GL_COND_OBJ_PERROR_TRUE
+GL_GENERATE_NETINET_IN_H_FALSE
+GL_GENERATE_NETINET_IN_H_TRUE
+NETINET_IN_H
+HAVE_NETINET_IN_H
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H
+NEXT_NETINET_IN_H
+GL_COND_OBJ_NANOSLEEP_FALSE
+GL_COND_OBJ_NANOSLEEP_TRUE
+LIB_NANOSLEEP
+NANOSLEEP_LIB
+GL_COND_OBJ_MEMCHR_FALSE
+GL_COND_OBJ_MEMCHR_TRUE
+LIB_SEMAPHORE
+INTL_MACOSX_LIBS
+GL_COND_OBJ_LISTEN_FALSE
+GL_COND_OBJ_LISTEN_TRUE
+GL_COND_OBJ_ISBLANK_FALSE
+GL_COND_OBJ_ISBLANK_TRUE
+GL_GNULIB_IOCTL
+GL_COND_OBJ_IOCTL_FALSE
+GL_COND_OBJ_IOCTL_TRUE
+GL_COND_OBJ_INET_PTON_FALSE
+GL_COND_OBJ_INET_PTON_TRUE
+INET_PTON_LIB
+GL_GNULIB_GETTIMEOFDAY
+GL_COND_OBJ_GETTIMEOFDAY_FALSE
+GL_COND_OBJ_GETTIMEOFDAY_TRUE
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H
+NEXT_SYS_TIME_H
+REPLACE_STRUCT_TIMEVAL
+REPLACE_GETTIMEOFDAY
+HAVE_SYS_TIME_H
+HAVE_STRUCT_TIMEVAL
+HAVE_GETTIMEOFDAY
+GL_COND_OBJ_GETPAGESIZE_FALSE
+GL_COND_OBJ_GETPAGESIZE_TRUE
+GL_COND_OBJ_GETCWD_LGPL_FALSE
+GL_COND_OBJ_GETCWD_LGPL_TRUE
+GL_COND_OBJ_FTRUNCATE_FALSE
+GL_COND_OBJ_FTRUNCATE_TRUE
+GL_COND_OBJ_FDOPEN_FALSE
+GL_COND_OBJ_FDOPEN_TRUE
+GL_GNULIB_ISBLANK
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H
+NEXT_CTYPE_H
+HAVE_ISBLANK
+GL_COND_OBJ_CONNECT_FALSE
+GL_COND_OBJ_CONNECT_TRUE
+LOCALE_TR_UTF8
+GL_COND_OBJ_BIND_FALSE
+GL_COND_OBJ_BIND_TRUE
+GL_GNULIB_INET_PTON
+GL_GNULIB_INET_NTOP
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H
+NEXT_ARPA_INET_H
+HAVE_ARPA_INET_H
+REPLACE_INET_PTON
+REPLACE_INET_NTOP
+HAVE_DECL_INET_PTON
+HAVE_DECL_INET_NTOP
+GL_GNULIB_ACCEPT4
+GL_GNULIB_SHUTDOWN
+GL_GNULIB_SETSOCKOPT
+GL_GNULIB_SENDTO
+GL_GNULIB_RECVFROM
+GL_GNULIB_SEND
+GL_GNULIB_RECV
+GL_GNULIB_LISTEN
+GL_GNULIB_GETSOCKOPT
+GL_GNULIB_GETSOCKNAME
+GL_GNULIB_GETPEERNAME
+GL_GNULIB_BIND
+GL_GNULIB_ACCEPT
+GL_GNULIB_CONNECT
+GL_GNULIB_SOCKET
+GL_COND_OBJ_ACCEPT_FALSE
+GL_COND_OBJ_ACCEPT_TRUE
+HAVE_WS2TCPIP_H
+HAVE_SYS_SOCKET_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H
+NEXT_SYS_SOCKET_H
+HAVE_ACCEPT4
+HAVE_SA_FAMILY_T
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
+HAVE_STRUCT_SOCKADDR_STORAGE
+gltests_WITNESS
+GL_CXXFLAG_ALLOW_WARNINGS
+GL_CFLAG_ALLOW_WARNINGS
+GL_COND_OBJ_WINDOWS_RWLOCK_FALSE
+GL_COND_OBJ_WINDOWS_RWLOCK_TRUE
+GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE
+GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE
+GL_COND_OBJ_WINDOWS_ONCE_FALSE
+GL_COND_OBJ_WINDOWS_ONCE_TRUE
+GL_COND_OBJ_WINDOWS_MUTEX_FALSE
+GL_COND_OBJ_WINDOWS_MUTEX_TRUE
+GL_GNULIB_TOWCTRANS
+GL_GNULIB_WCTRANS
+GL_GNULIB_ISWCTYPE
+GL_GNULIB_WCTYPE
+GL_GNULIB_ISWXDIGIT
+GL_GNULIB_ISWDIGIT
+GL_GNULIB_ISWBLANK
+REPLACE_TOWLOWER
+REPLACE_ISWCNTRL
+HAVE_WCTYPE_H
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_ISWCNTRL
+REPLACE_ISWXDIGIT
+REPLACE_ISWDIGIT
+REPLACE_ISWBLANK
+HAVE_WCTRANS_T
+HAVE_WCTYPE_T
+HAVE_ISWBLANK
+GL_COND_OBJ_WCRTOMB_FALSE
+GL_COND_OBJ_WCRTOMB_TRUE
+HAVE_CRTDEFS_H
+HAVE_WINT_T
+HAVE_FEATURES_H
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+GL_COND_OBJ_USLEEP_FALSE
+GL_COND_OBJ_USLEEP_TRUE
+GL_COND_OBJ_UNLINK_FALSE
+GL_COND_OBJ_UNLINK_TRUE
+HAVE_UNISTD_H
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
+NEXT_UNISTD_H
+GL_GNULIB_MDA_TZSET
+GL_GNULIB_TZSET
+GL_GNULIB_TIME_RZ
+GL_GNULIB_TIME_R
+GL_GNULIB_TIMESPEC_GETRES
+GL_GNULIB_TIMESPEC_GET
+GL_GNULIB_TIMEGM
+GL_GNULIB_TIME
+GL_GNULIB_STRPTIME
+GL_GNULIB_STRFTIME
+GL_GNULIB_NANOSLEEP
+GL_GNULIB_LOCALTIME
+GL_GNULIB_MKTIME
+GL_GNULIB_CTIME
+TIME_H_DEFINES_TIME_UTC
+UNISTD_H_DEFINES_STRUCT_TIMESPEC
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC
+TIME_H_DEFINES_STRUCT_TIMESPEC
+NEXT_AS_FIRST_DIRECTIVE_TIME_H
+NEXT_TIME_H
+REPLACE_LOCALTIME
+REPLACE_GMTIME
+GNULIB_GETTIMEOFDAY
+REPLACE_TZSET
+REPLACE_TIMESPEC_GET
+REPLACE_TIMEGM
+REPLACE_TIME
+REPLACE_STRFTIME
+REPLACE_NANOSLEEP
+REPLACE_MKTIME
+REPLACE_LOCALTIME_R
+REPLACE_CTIME
+HAVE_TIMEZONE_T
+HAVE_TIMESPEC_GETRES
+HAVE_TIMESPEC_GET
+HAVE_TIMEGM
+HAVE_STRPTIME
+HAVE_NANOSLEEP
+HAVE_DECL_LOCALTIME_R
+HAVE_SYS_RANDOM_H
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H
+NEXT_SYS_RANDOM_H
+GL_COND_OBJ_STRTOULL_FALSE
+GL_COND_OBJ_STRTOULL_TRUE
+GL_COND_OBJ_STRTOLL_FALSE
+GL_COND_OBJ_STRTOLL_TRUE
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+GL_COND_OBJ_STRERROR_OVERRIDE_FALSE
+GL_COND_OBJ_STRERROR_OVERRIDE_TRUE
+GL_COND_OBJ_STRERROR_FALSE
+GL_COND_OBJ_STRERROR_TRUE
+GL_COND_OBJ_STRDUP_FALSE
+GL_COND_OBJ_STRDUP_TRUE
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
+NEXT_STDLIB_H
+GL_COND_OBJ_STDIO_WRITE_FALSE
+GL_COND_OBJ_STDIO_WRITE_TRUE
+GL_COND_OBJ_STDIO_READ_FALSE
+GL_COND_OBJ_STDIO_READ_TRUE
+GL_GNULIB_MDA_TEMPNAM
+GL_GNULIB_MDA_PUTW
+GL_GNULIB_MDA_GETW
+GL_GNULIB_MDA_FILENO
+GL_GNULIB_MDA_FDOPEN
+GL_GNULIB_MDA_FCLOSEALL
+GL_GNULIB_VSPRINTF_POSIX
+GL_GNULIB_VSNPRINTF
+GL_GNULIB_VPRINTF_POSIX
+GL_GNULIB_VPRINTF
+GL_GNULIB_VFPRINTF_POSIX
+GL_GNULIB_VFPRINTF
+GL_GNULIB_VDPRINTF
+GL_GNULIB_VSCANF
+GL_GNULIB_VFSCANF
+GL_GNULIB_VASPRINTF
+GL_GNULIB_TMPFILE
+GL_GNULIB_STDIO_H_SIGPIPE
+GL_GNULIB_STDIO_H_NONBLOCKING
+GL_GNULIB_SPRINTF_POSIX
+GL_GNULIB_SNPRINTF
+GL_GNULIB_SCANF
+GL_GNULIB_RENAMEAT
+GL_GNULIB_RENAME
+GL_GNULIB_REMOVE
+GL_GNULIB_PUTS
+GL_GNULIB_PUTCHAR
+GL_GNULIB_PUTC
+GL_GNULIB_PRINTF_POSIX
+GL_GNULIB_PRINTF
+GL_GNULIB_POPEN
+GL_GNULIB_PERROR
+GL_GNULIB_PCLOSE
+GL_GNULIB_OBSTACK_PRINTF_POSIX
+GL_GNULIB_OBSTACK_PRINTF
+GL_GNULIB_GETLINE
+GL_GNULIB_GETDELIM
+GL_GNULIB_GETCHAR
+GL_GNULIB_GETC
+GL_GNULIB_FWRITE
+GL_GNULIB_FTELLO
+GL_GNULIB_FTELL
+GL_GNULIB_FSEEKO
+GL_GNULIB_FSEEK
+GL_GNULIB_FSCANF
+GL_GNULIB_FREOPEN
+GL_GNULIB_FREAD
+GL_GNULIB_FPUTS
+GL_GNULIB_FPUTC
+GL_GNULIB_FPURGE
+GL_GNULIB_FPRINTF_POSIX
+GL_GNULIB_FPRINTF
+GL_GNULIB_FOPEN_GNU
+GL_GNULIB_FOPEN
+GL_GNULIB_FGETS
+GL_GNULIB_FGETC
+GL_GNULIB_FFLUSH
+GL_GNULIB_FDOPEN
+GL_GNULIB_FCLOSE
+GL_GNULIB_DPRINTF
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H
+NEXT_STDIO_H
+REPLACE_VSPRINTF
+REPLACE_VSNPRINTF
+REPLACE_VPRINTF
+REPLACE_VFPRINTF
+REPLACE_VDPRINTF
+REPLACE_VASPRINTF
+REPLACE_TMPFILE
+REPLACE_STDIO_WRITE_FUNCS
+REPLACE_STDIO_READ_FUNCS
+REPLACE_SPRINTF
+REPLACE_SNPRINTF
+REPLACE_RENAMEAT
+REPLACE_RENAME
+REPLACE_REMOVE
+REPLACE_PRINTF
+REPLACE_POPEN
+REPLACE_PERROR
+REPLACE_OBSTACK_PRINTF
+REPLACE_GETLINE
+REPLACE_GETDELIM
+REPLACE_FTELLO
+REPLACE_FTELL
+REPLACE_FSEEKO
+REPLACE_FSEEK
+REPLACE_FREOPEN
+REPLACE_FPURGE
+REPLACE_FPRINTF
+REPLACE_FOPEN_FOR_FOPEN_GNU
+REPLACE_FOPEN
+REPLACE_FFLUSH
+REPLACE_FDOPEN
+REPLACE_FCLOSE
+REPLACE_DPRINTF
+HAVE_VDPRINTF
+HAVE_VASPRINTF
+HAVE_RENAMEAT
+HAVE_POPEN
+HAVE_PCLOSE
+HAVE_FTELLO
+HAVE_FSEEKO
+HAVE_DPRINTF
+HAVE_DECL_VSNPRINTF
+HAVE_DECL_SNPRINTF
+HAVE_DECL_PUTW
+HAVE_DECL_OBSTACK_PRINTF
+HAVE_DECL_GETW
+HAVE_DECL_GETLINE
+HAVE_DECL_GETDELIM
+HAVE_DECL_FTELLO
+HAVE_DECL_FSEEKO
+HAVE_DECL_FPURGE
+HAVE_DECL_FCLOSEALL
+GL_GENERATE_STDINT_H_FALSE
+GL_GENERATE_STDINT_H_TRUE
+STDINT_H
+GL_GENERATE_STDDEF_H_FALSE
+GL_GENERATE_STDDEF_H_TRUE
+STDDEF_H
+GL_GENERATE_STDCKDINT_H_FALSE
+GL_GENERATE_STDCKDINT_H_TRUE
+STDCKDINT_H
+GL_GENERATE_STDARG_H_FALSE
+GL_GENERATE_STDARG_H_TRUE
+STDARG_H
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H
+NEXT_STDARG_H
+GL_COND_OBJ_STAT_FALSE
+GL_COND_OBJ_STAT_TRUE
+GL_COND_OBJ_SLEEP_FALSE
+GL_COND_OBJ_SLEEP_TRUE
+GL_COND_OBJ_SETLOCALE_LOCK_FALSE
+GL_COND_OBJ_SETLOCALE_LOCK_TRUE
+GL_COND_OBJ_RPMATCH_FALSE
+GL_COND_OBJ_RPMATCH_TRUE
+GL_COND_OBJ_REGEX_FALSE
+GL_COND_OBJ_REGEX_TRUE
+GL_COND_OBJ_REALLOCARRAY_FALSE
+GL_COND_OBJ_REALLOCARRAY_TRUE
+GL_COND_OBJ_READLINK_FALSE
+GL_COND_OBJ_READLINK_TRUE
+GL_COND_OBJ_READ_FALSE
+GL_COND_OBJ_READ_TRUE
+GL_COND_OBJ_RAWMEMCHR_FALSE
+GL_COND_OBJ_RAWMEMCHR_TRUE
+GL_COND_OBJ_OPEN_FALSE
+GL_COND_OBJ_OPEN_TRUE
+GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE
+GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE
+GL_COND_OBJ_NL_LANGINFO_FALSE
+GL_COND_OBJ_NL_LANGINFO_TRUE
+LIB_NL_LANGINFO
+GL_COND_OBJ_MSVC_NOTHROW_FALSE
+GL_COND_OBJ_MSVC_NOTHROW_TRUE
+GL_COND_OBJ_MSVC_INVAL_FALSE
+GL_COND_OBJ_MSVC_INVAL_TRUE
+GL_COND_OBJ_MKSTEMP_FALSE
+GL_COND_OBJ_MKSTEMP_TRUE
+GL_COND_OBJ_MKDIR_FALSE
+GL_COND_OBJ_MKDIR_TRUE
+GL_GNULIB_MDA_STRDUP
+GL_GNULIB_MDA_MEMCCPY
+GL_GNULIB_STRVERSCMP
+GL_GNULIB_STRSIGNAL
+GL_GNULIB_SIGDESCR_NP
+GL_GNULIB_SIGABBREV_NP
+GL_GNULIB_STRERRORNAME_NP
+GL_GNULIB_STRERROR_R
+GL_GNULIB_STRERROR
+GL_GNULIB_MBSTOK_R
+GL_GNULIB_MBSSEP
+GL_GNULIB_MBSSPN
+GL_GNULIB_MBSPBRK
+GL_GNULIB_MBSCSPN
+GL_GNULIB_MBSCASESTR
+GL_GNULIB_MBSPCASECMP
+GL_GNULIB_MBSNCASECMP
+GL_GNULIB_MBSCASECMP
+GL_GNULIB_MBSSTR
+GL_GNULIB_MBSRCHR
+GL_GNULIB_MBSCHR
+GL_GNULIB_MBSNLEN
+GL_GNULIB_MBSLEN
+GL_GNULIB_STRTOK_R
+GL_GNULIB_STRCASESTR
+GL_GNULIB_STRSTR
+GL_GNULIB_STRSEP
+GL_GNULIB_STRPBRK
+GL_GNULIB_STRNLEN
+GL_GNULIB_STRNDUP
+GL_GNULIB_STRNCAT
+GL_GNULIB_STRDUP
+GL_GNULIB_STRCHRNUL
+GL_GNULIB_STPNCPY
+GL_GNULIB_STPCPY
+GL_GNULIB_RAWMEMCHR
+GL_GNULIB_MEMSET_EXPLICIT
+GL_GNULIB_MEMRCHR
+GL_GNULIB_MEMPCPY
+GL_GNULIB_MEMMEM
+GL_GNULIB_MEMCHR
+GL_GNULIB_FFSLL
+GL_GNULIB_FFSL
+GL_GNULIB_EXPLICIT_BZERO
+GL_COND_OBJ_MEMPCPY_FALSE
+GL_COND_OBJ_MEMPCPY_TRUE
+UNDEFINE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRERRORNAME_NP
+REPLACE_STRERROR_R
+REPLACE_STRERROR
+REPLACE_STRTOK_R
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRNLEN
+REPLACE_STRNDUP
+REPLACE_STRNCAT
+REPLACE_STRDUP
+REPLACE_STRCHRNUL
+REPLACE_STPNCPY
+REPLACE_STPCPY
+REPLACE_MEMPCPY
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+REPLACE_FFSLL
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_SIGDESCR_NP
+HAVE_SIGABBREV_NP
+HAVE_STRERRORNAME_NP
+HAVE_DECL_STRERROR_R
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMSET_EXPLICIT
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_FFSLL
+HAVE_FFSL
+HAVE_EXPLICIT_BZERO
+HAVE_MBSLEN
+GL_COND_OBJ_MBTOWC_FALSE
+GL_COND_OBJ_MBTOWC_TRUE
+GL_COND_OBJ_MBSINIT_FALSE
+GL_COND_OBJ_MBSINIT_TRUE
+HAVE_VISIBILITY
+CFLAG_VISIBILITY
+GL_COND_OBJ_MBRTOWC_FALSE
+GL_COND_OBJ_MBRTOWC_TRUE
+LIB_MBRTOWC
+MBRTOWC_LIB
+LOCALE_ZH_CN
+LOCALE_FR_UTF8
+LOCALE_JA
+SED
+GL_COND_OBJ_LSTAT_FALSE
+GL_COND_OBJ_LSTAT_TRUE
+GL_COND_OBJ_LSEEK_FALSE
+GL_COND_OBJ_LSEEK_TRUE
+WINDOWS_STAT_INODES
+WINDOWS_64_BIT_OFF_T
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H
+NEXT_SYS_TYPES_H
+LTLIBMULTITHREAD
+LIBMULTITHREAD
+LTLIBTHREAD
+LIBTHREAD
+LIBSTDTHREAD
+GL_COND_OBJ_LOCALECONV_FALSE
+GL_COND_OBJ_LOCALECONV_TRUE
+GL_GNULIB_LOCALENAME
+GL_GNULIB_DUPLOCALE
+GL_GNULIB_SETLOCALE_NULL
+GL_GNULIB_SETLOCALE
+GL_GNULIB_LOCALECONV
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H
+NEXT_LOCALE_H
+HAVE_XLOCALE_H
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+HAVE_WCHAR_T
+HAVE_MAX_ALIGN_T
+REPLACE_NULL
+LOCALENAME_ENHANCE_LOCALE_FUNCS
+REPLACE_STRUCT_LCONV
+REPLACE_FREELOCALE
+REPLACE_DUPLOCALE
+REPLACE_NEWLOCALE
+REPLACE_SETLOCALE
+REPLACE_LOCALECONV
+HAVE_FREELOCALE
+HAVE_DUPLOCALE
+HAVE_NEWLOCALE
+LOCALCHARSET_TESTS_ENVIRONMENT
+GL_GENERATE_LIMITS_H_FALSE
+GL_GENERATE_LIMITS_H_TRUE
+LIMITS_H
+IGNORE_UNUSED_LIBRARIES_CFLAGS
+GL_GNULIB_NL_LANGINFO
+HAVE_LANGINFO_YESEXPR
+HAVE_LANGINFO_ERA
+HAVE_LANGINFO_ALTMON
+HAVE_LANGINFO_T_FMT_AMPM
+HAVE_LANGINFO_CODESET
+HAVE_LANGINFO_H
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H
+NEXT_LANGINFO_H
+REPLACE_NL_LANGINFO
+HAVE_NL_LANGINFO
+GL_GNULIB_STRTOUMAX
+GL_GNULIB_STRTOIMAX
+GL_GNULIB_IMAXDIV
+GL_GNULIB_IMAXABS
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
+NEXT_INTTYPES_H
+UINT64_MAX_EQ_ULONG_MAX
+UINT32_MAX_LT_UINTMAX_MAX
+PRIPTR_PREFIX
+INT64_MAX_EQ_LONG_MAX
+INT32_MAX_LT_INTMAX_MAX
+REPLACE_STRTOUMAX
+REPLACE_STRTOIMAX
+REPLACE_IMAXDIV
+REPLACE_IMAXABS
+HAVE_IMAXDIV
+HAVE_IMAXABS
+HAVE_IMAXDIV_T
+HAVE_DECL_STRTOUMAX
+HAVE_DECL_STRTOIMAX
+HAVE_DECL_IMAXDIV
+HAVE_DECL_IMAXABS
+HAVE_SYS_INTTYPES_H
+HAVE_SYS_BITYPES_H
+HAVE_C99_STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+APPLE_UNIVERSAL_BUILD
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_WCHAR_H
+GNULIBHEADERS_OVERRIDE_WINT_T
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H
+NEXT_LIMITS_H
+LIB_HARD_LOCALE
+HARD_LOCALE_LIB
+LIB_SETLOCALE_NULL
+SETLOCALE_NULL_LIB
+LIB_SCHED_YIELD
+SCHED_YIELD_LIB
+LIBPMULTITHREAD
+LIBPTHREAD
+LTLIBINTL
+LIBINTL
+GL_GNULIB_GETRANDOM
+GL_COND_OBJ_GETRANDOM_FALSE
+GL_COND_OBJ_GETRANDOM_TRUE
+LIB_GETRANDOM
+GETRANDOM_LIB
+REPLACE_GETRANDOM
+HAVE_GETRANDOM
+GL_COND_OBJ_GETPROGNAME_FALSE
+GL_COND_OBJ_GETPROGNAME_TRUE
+GL_COND_OBJ_GETOPT_FALSE
+GL_COND_OBJ_GETOPT_TRUE
+GL_GENERATE_GETOPT_CDEFS_H_FALSE
+GL_GENERATE_GETOPT_CDEFS_H_TRUE
+GETOPT_CDEFS_H
+GL_GENERATE_GETOPT_H_FALSE
+GL_GENERATE_GETOPT_H_TRUE
+GETOPT_H
+HAVE_SYS_CDEFS_H
+HAVE_GETOPT_H
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H
+NEXT_GETOPT_H
+GL_COND_OBJ_GETDTABLESIZE_FALSE
+GL_COND_OBJ_GETDTABLESIZE_TRUE
+GL_COND_OBJ_FSYNC_FALSE
+GL_COND_OBJ_FSYNC_TRUE
+GL_GNULIB_MDA_UMASK
+GL_GNULIB_MDA_MKDIR
+GL_GNULIB_MDA_CHMOD
+GL_GNULIB_OVERRIDES_STRUCT_STAT
+GL_GNULIB_UTIMENSAT
+GL_GNULIB_STAT
+GL_GNULIB_MKNODAT
+GL_GNULIB_MKNOD
+GL_GNULIB_MKFIFOAT
+GL_GNULIB_MKFIFO
+GL_GNULIB_MKDIRAT
+GL_GNULIB_MKDIR
+GL_GNULIB_LSTAT
+GL_GNULIB_LCHMOD
+GL_GNULIB_GETUMASK
+GL_GNULIB_FUTIMENS
+GL_GNULIB_FSTATAT
+GL_GNULIB_FSTAT
+GL_GNULIB_FCHMODAT
+GL_GNULIB_CHMOD
+WINDOWS_64_BIT_ST_SIZE
+WINDOWS_STAT_TIMESPEC
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H
+NEXT_SYS_STAT_H
+GL_COND_OBJ_FSTAT_FALSE
+GL_COND_OBJ_FSTAT_TRUE
+REPLACE_UTIMENSAT
+REPLACE_STAT
+REPLACE_MKNODAT
+REPLACE_MKNOD
+REPLACE_MKFIFOAT
+REPLACE_MKFIFO
+REPLACE_MKDIR
+REPLACE_LSTAT
+REPLACE_FUTIMENS
+REPLACE_FSTATAT
+REPLACE_FSTAT
+REPLACE_FCHMODAT
+REPLACE_CHMOD
+HAVE_UTIMENSAT
+HAVE_MKNODAT
+HAVE_MKNOD
+HAVE_MKFIFOAT
+HAVE_MKFIFO
+HAVE_MKDIRAT
+HAVE_LSTAT
+HAVE_LCHMOD
+HAVE_GETUMASK
+HAVE_FUTIMENS
+HAVE_FSTATAT
+HAVE_FCHMODAT
+GL_COND_OBJ_FREE_FALSE
+GL_COND_OBJ_FREE_TRUE
+GL_COND_OBJ_FPENDING_FALSE
+GL_COND_OBJ_FPENDING_TRUE
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H
+NEXT_FCNTL_H
+GL_GNULIB_MDA_OPEN
+GL_GNULIB_MDA_CREAT
+GL_GNULIB_OPENAT
+GL_GNULIB_OPEN
+GL_GNULIB_NONBLOCKING
+GL_GNULIB_FCNTL
+GL_GNULIB_CREAT
+GL_COND_OBJ_FCNTL_FALSE
+GL_COND_OBJ_FCNTL_TRUE
+REPLACE_OPENAT
+REPLACE_OPEN
+REPLACE_FCNTL
+REPLACE_CREAT
+HAVE_OPENAT
+HAVE_FCNTL
+GL_GENERATE_ERROR_H_FALSE
+GL_GENERATE_ERROR_H_TRUE
+ERROR_H
+GL_COND_OBJ_ERROR_FALSE
+GL_COND_OBJ_ERROR_TRUE
+REPLACE_ERROR_AT_LINE
+REPLACE_ERROR
+HAVE_ERROR_AT_LINE
+HAVE_ERROR
+HAVE_ERROR_H
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H
+NEXT_ERROR_H
+GL_GENERATE_ERRNO_H_FALSE
+GL_GENERATE_ERRNO_H_TRUE
+ERRNO_H
+EOVERFLOW_VALUE
+EOVERFLOW_HIDDEN
+ENOLINK_VALUE
+ENOLINK_HIDDEN
+EMULTIHOP_VALUE
+EMULTIHOP_HIDDEN
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H
+NEXT_ERRNO_H
+GL_COND_OBJ_DUP2_FALSE
+GL_COND_OBJ_DUP2_TRUE
+pkglibexecdir_c_make
+pkglibexecdir_c
+pkglibdir_c_make
+pkglibdir_c
+pkgincludedir_c_make
+pkgincludedir_c
+pkgdatadir_c_make
+pkgdatadir_c
+mandir_c_make
+mandir_c
+localedir_c_make
+localedir_c
+lispdir_c_make
+lispdir_c
+libdir_c_make
+libdir_c
+psdir_c_make
+psdir_c
+pdfdir_c_make
+pdfdir_c
+dvidir_c_make
+dvidir_c
+htmldir_c_make
+htmldir_c
+infodir_c_make
+infodir_c
+docdir_c_make
+docdir_c
+oldincludedir_c_make
+oldincludedir_c
+includedir_c_make
+includedir_c
+runstatedir_c_make
+runstatedir_c
+localstatedir_c_make
+localstatedir_c
+sharedstatedir_c_make
+sharedstatedir_c
+sysconfdir_c_make
+sysconfdir_c
+datadir_c_make
+datadir_c
+datarootdir_c_make
+datarootdir_c
+libexecdir_c_make
+libexecdir_c
+sbindir_c_make
+sbindir_c
+bindir_c_make
+bindir_c
+exec_prefix_c_make
+exec_prefix_c
+prefix_c_make
+prefix_c
+pkglibexecdir
+pkglibdir
+pkgincludedir
+pkgdatadir
+lispdir
+GL_GNULIB_MDA_WRITE
+GL_GNULIB_MDA_UNLINK
+GL_GNULIB_MDA_SWAB
+GL_GNULIB_MDA_RMDIR
+GL_GNULIB_MDA_READ
+GL_GNULIB_MDA_LSEEK
+GL_GNULIB_MDA_ISATTY
+GL_GNULIB_MDA_GETPID
+GL_GNULIB_MDA_GETCWD
+GL_GNULIB_MDA_EXECVPE
+GL_GNULIB_MDA_EXECVP
+GL_GNULIB_MDA_EXECVE
+GL_GNULIB_MDA_EXECV
+GL_GNULIB_MDA_EXECLP
+GL_GNULIB_MDA_EXECLE
+GL_GNULIB_MDA_EXECL
+GL_GNULIB_MDA_DUP2
+GL_GNULIB_MDA_DUP
+GL_GNULIB_MDA_CLOSE
+GL_GNULIB_MDA_CHDIR
+GL_GNULIB_MDA_ACCESS
+GL_GNULIB_WRITE
+GL_GNULIB_USLEEP
+GL_GNULIB_UNLINKAT
+GL_GNULIB_UNLINK
+GL_GNULIB_UNISTD_H_SIGPIPE
+GL_GNULIB_UNISTD_H_NONBLOCKING
+GL_GNULIB_UNISTD_H_GETOPT
+GL_GNULIB_TTYNAME_R
+GL_GNULIB_TRUNCATE
+GL_GNULIB_SYMLINKAT
+GL_GNULIB_SYMLINK
+GL_GNULIB_SLEEP
+GL_GNULIB_SETHOSTNAME
+GL_GNULIB_RMDIR
+GL_GNULIB_READLINKAT
+GL_GNULIB_READLINK
+GL_GNULIB_READ
+GL_GNULIB_PWRITE
+GL_GNULIB_PREAD
+GL_GNULIB_PIPE2
+GL_GNULIB_PIPE
+GL_GNULIB_LSEEK
+GL_GNULIB_LINKAT
+GL_GNULIB_LINK
+GL_GNULIB_LCHOWN
+GL_GNULIB_ISATTY
+GL_GNULIB_GROUP_MEMBER
+GL_GNULIB_GETUSERSHELL
+GL_GNULIB_GETPASS_GNU
+GL_GNULIB_GETPASS
+GL_GNULIB_GETPAGESIZE
+GL_GNULIB_GETOPT_POSIX
+GL_GNULIB_GETLOGIN_R
+GL_GNULIB_GETLOGIN
+GL_GNULIB_GETHOSTNAME
+GL_GNULIB_GETGROUPS
+GL_GNULIB_GETENTROPY
+GL_GNULIB_GETDTABLESIZE
+GL_GNULIB_GETDOMAINNAME
+GL_GNULIB_GETCWD
+GL_GNULIB_FTRUNCATE
+GL_GNULIB_FSYNC
+GL_GNULIB_FDATASYNC
+GL_GNULIB_FCHOWNAT
+GL_GNULIB_FCHDIR
+GL_GNULIB_FACCESSAT
+GL_GNULIB_EXECVPE
+GL_GNULIB_EXECVP
+GL_GNULIB_EXECVE
+GL_GNULIB_EXECV
+GL_GNULIB_EXECLP
+GL_GNULIB_EXECLE
+GL_GNULIB_EXECL
+GL_GNULIB_EUIDACCESS
+GL_GNULIB_ENVIRON
+GL_GNULIB_DUP3
+GL_GNULIB_DUP2
+GL_GNULIB_DUP
+GL_GNULIB_COPY_FILE_RANGE
+GL_GNULIB_CLOSE
+GL_GNULIB_CHOWN
+GL_GNULIB_CHDIR
+GL_GNULIB_ACCESS
+GL_COND_OBJ_CLOSE_FALSE
+GL_COND_OBJ_CLOSE_TRUE
+HAVE_WINSOCK2_H
+REPLACE_IOCTL
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
+SYS_IOCTL_H_HAVE_WINSOCK2_H
+HAVE_MSVC_INVALID_PARAMETER_HANDLER
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
+UNISTD_H_HAVE_WINSOCK2_H
+UNISTD_H_HAVE_SYS_RANDOM_H
+REPLACE_WRITE
+REPLACE_USLEEP
+REPLACE_UNLINKAT
+REPLACE_UNLINK
+REPLACE_TTYNAME_R
+REPLACE_TRUNCATE
+REPLACE_SYMLINKAT
+REPLACE_SYMLINK
+REPLACE_SLEEP
+REPLACE_SETHOSTNAME
+REPLACE_RMDIR
+REPLACE_READLINKAT
+REPLACE_READLINK
+REPLACE_READ
+REPLACE_PWRITE
+REPLACE_PREAD
+REPLACE_PIPE2
+REPLACE_LSEEK
+REPLACE_LINKAT
+REPLACE_LINK
+REPLACE_LCHOWN
+REPLACE_ISATTY
+REPLACE_GETPASS_FOR_GETPASS_GNU
+REPLACE_GETPASS
+REPLACE_GETPAGESIZE
+REPLACE_GETGROUPS
+REPLACE_GETLOGIN_R
+REPLACE_GETENTROPY
+REPLACE_GETDTABLESIZE
+REPLACE_GETDOMAINNAME
+REPLACE_GETCWD
+REPLACE_FTRUNCATE
+REPLACE_FDATASYNC
+REPLACE_FCHOWNAT
+REPLACE_FACCESSAT
+REPLACE_EXECVPE
+REPLACE_EXECVP
+REPLACE_EXECVE
+REPLACE_EXECV
+REPLACE_EXECLP
+REPLACE_EXECLE
+REPLACE_EXECL
+REPLACE_DUP3
+REPLACE_DUP2
+REPLACE_DUP
+REPLACE_COPY_FILE_RANGE
+REPLACE_CLOSE
+REPLACE_CHOWN
+REPLACE_ACCESS
+HAVE_SYS_PARAM_H
+HAVE_OS_H
+HAVE_DECL_TTYNAME_R
+HAVE_DECL_TRUNCATE
+HAVE_DECL_SETHOSTNAME
+HAVE_DECL_GETUSERSHELL
+HAVE_DECL_GETPAGESIZE
+HAVE_DECL_GETLOGIN_R
+HAVE_DECL_GETLOGIN
+HAVE_DECL_GETDOMAINNAME
+HAVE_DECL_FDATASYNC
+HAVE_DECL_FCHDIR
+HAVE_DECL_EXECVPE
+HAVE_DECL_ENVIRON
+HAVE_USLEEP
+HAVE_UNLINKAT
+HAVE_SYMLINKAT
+HAVE_SYMLINK
+HAVE_SLEEP
+HAVE_SETHOSTNAME
+HAVE_READLINKAT
+HAVE_READLINK
+HAVE_PWRITE
+HAVE_PREAD
+HAVE_PIPE2
+HAVE_PIPE
+HAVE_LINKAT
+HAVE_LINK
+HAVE_LCHOWN
+HAVE_GROUP_MEMBER
+HAVE_GETPASS
+HAVE_GETPAGESIZE
+HAVE_GETLOGIN
+HAVE_GETHOSTNAME
+HAVE_GETGROUPS
+HAVE_GETENTROPY
+HAVE_GETDTABLESIZE
+HAVE_FTRUNCATE
+HAVE_FSYNC
+HAVE_FDATASYNC
+HAVE_FCHOWNAT
+HAVE_FCHDIR
+HAVE_FACCESSAT
+HAVE_EXECVPE
+HAVE_EUIDACCESS
+HAVE_DUP3
+HAVE_COPY_FILE_RANGE
+HAVE_CHOWN
+LIB_CLOCK_GETTIME
+CLOCK_TIME_LIB
+GL_COND_OBJ_CANONICALIZE_LGPL_FALSE
+GL_COND_OBJ_CANONICALIZE_LGPL_TRUE
+REPLACE_WCTOMB
+REPLACE_UNSETENV
+REPLACE_STRTOULL
+REPLACE_STRTOUL
+REPLACE_STRTOLL
+REPLACE_STRTOLD
+REPLACE_STRTOL
+REPLACE_STRTOD
+REPLACE_SETSTATE
+REPLACE_SETENV
+REPLACE_REALPATH
+REPLACE_REALLOCARRAY
+REPLACE_REALLOC_FOR_REALLOC_POSIX
+REPLACE_REALLOC_FOR_REALLOC_GNU
+REPLACE_RANDOM_R
+REPLACE_RANDOM
+REPLACE_QSORT_R
+REPLACE_PUTENV
+REPLACE_PTSNAME_R
+REPLACE_PTSNAME
+REPLACE_POSIX_OPENPT
+REPLACE_POSIX_MEMALIGN
+REPLACE_MKSTEMP
+REPLACE_MKOSTEMPS
+REPLACE_MKOSTEMP
+REPLACE_MBTOWC
+REPLACE_MALLOC_FOR_MALLOC_POSIX
+REPLACE_MALLOC_FOR_MALLOC_GNU
+REPLACE_INITSTATE
+REPLACE_GETSUBOPT
+REPLACE_GETPROGNAME
+REPLACE_GETLOADAVG
+REPLACE_FREE
+REPLACE_CANONICALIZE_FILE_NAME
+REPLACE_CALLOC_FOR_CALLOC_POSIX
+REPLACE_CALLOC_FOR_CALLOC_GNU
+REPLACE_ALIGNED_ALLOC
+REPLACE__EXIT
+HAVE_DECL_UNSETENV
+HAVE_UNLOCKPT
+HAVE_SYS_LOADAVG_H
+HAVE_STRUCT_RANDOM_DATA
+HAVE_STRTOULL
+HAVE_STRTOUL
+HAVE_STRTOLL
+HAVE_STRTOLD
+HAVE_STRTOL
+HAVE_STRTOD
+HAVE_DECL_SETSTATE
+HAVE_SETSTATE
+HAVE_DECL_SETENV
+HAVE_SETENV
+HAVE_SECURE_GETENV
+HAVE_RPMATCH
+HAVE_REALPATH
+HAVE_REALLOCARRAY
+HAVE_RANDOM_R
+HAVE_RANDOM_H
+HAVE_RANDOM
+HAVE_QSORT_R
+HAVE_PTSNAME_R
+HAVE_PTSNAME
+HAVE_POSIX_OPENPT
+HAVE_POSIX_MEMALIGN
+HAVE_MKSTEMPS
+HAVE_MKSTEMP
+HAVE_MKOSTEMPS
+HAVE_MKOSTEMP
+HAVE_MKDTEMP
+HAVE_MBTOWC
+HAVE_DECL_INITSTATE
+HAVE_INITSTATE
+HAVE_GRANTPT
+HAVE_GETSUBOPT
+HAVE_GETPROGNAME
+HAVE_DECL_GETLOADAVG
+HAVE_DECL_GCVT
+HAVE_DECL_FCVT
+HAVE_DECL_ECVT
+HAVE_CANONICALIZE_FILE_NAME
+HAVE_ATOLL
+HAVE_ALIGNED_ALLOC
+HAVE__EXIT
+GL_GNULIB_MDA_PUTENV
+GL_GNULIB_MDA_MKTEMP
+GL_GNULIB_MDA_GCVT
+GL_GNULIB_MDA_FCVT
+GL_GNULIB_MDA_ECVT
+GL_GNULIB_WCTOMB
+GL_GNULIB_UNSETENV
+GL_GNULIB_UNLOCKPT
+GL_GNULIB_SYSTEM_POSIX
+GL_GNULIB_STRTOULL
+GL_GNULIB_STRTOUL
+GL_GNULIB_STRTOLL
+GL_GNULIB_STRTOLD
+GL_GNULIB_STRTOL
+GL_GNULIB_STRTOD
+GL_GNULIB_SETENV
+GL_GNULIB_SECURE_GETENV
+GL_GNULIB_RPMATCH
+GL_GNULIB_REALPATH
+GL_GNULIB_REALLOC_POSIX
+GL_GNULIB_REALLOC_GNU
+GL_GNULIB_REALLOCARRAY
+GL_GNULIB_RANDOM_R
+GL_GNULIB_RANDOM
+GL_GNULIB_QSORT_R
+GL_GNULIB_PUTENV
+GL_GNULIB_PTSNAME_R
+GL_GNULIB_PTSNAME
+GL_GNULIB_POSIX_OPENPT
+GL_GNULIB_POSIX_MEMALIGN
+GL_GNULIB_MKSTEMPS
+GL_GNULIB_MKSTEMP
+GL_GNULIB_MKOSTEMPS
+GL_GNULIB_MKOSTEMP
+GL_GNULIB_MKDTEMP
+GL_GNULIB_MBTOWC
+GL_GNULIB_MALLOC_POSIX
+GL_GNULIB_MALLOC_GNU
+GL_GNULIB_GRANTPT
+GL_GNULIB_GETSUBOPT
+GL_GNULIB_GETPROGNAME
+GL_GNULIB_GETLOADAVG
+GL_GNULIB_FREE_POSIX
+GL_GNULIB_CANONICALIZE_FILE_NAME
+GL_GNULIB_CALLOC_POSIX
+GL_GNULIB_CALLOC_GNU
+GL_GNULIB_ATOLL
+GL_GNULIB_ALIGNED_ALLOC
+GL_GNULIB__EXIT
+GL_GNULIB_MDA_WCSDUP
+GL_GNULIB_WCSFTIME
+GL_GNULIB_WCSWIDTH
+GL_GNULIB_WCSTOK
+GL_GNULIB_WCSSTR
+GL_GNULIB_WCSPBRK
+GL_GNULIB_WCSSPN
+GL_GNULIB_WCSCSPN
+GL_GNULIB_WCSRCHR
+GL_GNULIB_WCSCHR
+GL_GNULIB_WCSDUP
+GL_GNULIB_WCSXFRM
+GL_GNULIB_WCSCOLL
+GL_GNULIB_WCSNCASECMP
+GL_GNULIB_WCSCASECMP
+GL_GNULIB_WCSNCMP
+GL_GNULIB_WCSCMP
+GL_GNULIB_WCSNCAT
+GL_GNULIB_WCSCAT
+GL_GNULIB_WCPNCPY
+GL_GNULIB_WCSNCPY
+GL_GNULIB_WCPCPY
+GL_GNULIB_WCSCPY
+GL_GNULIB_WCSNLEN
+GL_GNULIB_WCSLEN
+GL_GNULIB_WMEMSET
+GL_GNULIB_WMEMPCPY
+GL_GNULIB_WMEMMOVE
+GL_GNULIB_WMEMCPY
+GL_GNULIB_WMEMCMP
+GL_GNULIB_WMEMCHR
+GL_GNULIB_WCWIDTH
+GL_GNULIB_WCSNRTOMBS
+GL_GNULIB_WCSRTOMBS
+GL_GNULIB_WCRTOMB
+GL_GNULIB_MBSNRTOWCS
+GL_GNULIB_MBSRTOWCS
+GL_GNULIB_MBRLEN
+GL_GNULIB_MBRTOWC
+GL_GNULIB_MBSINIT
+GL_GNULIB_WCTOB
+GL_GNULIB_BTOWC
+GL_COND_OBJ_BTOWC_FALSE
+GL_COND_OBJ_BTOWC_TRUE
+LOCALE_FR
+REPLACE_WMEMPCPY
+REPLACE_WCSTOK
+REPLACE_WCSFTIME
+REPLACE_WCSWIDTH
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCSDUP
+HAVE_DECL_WCTOB
+HAVE_WCSFTIME
+HAVE_WCSWIDTH
+HAVE_WCSTOK
+HAVE_WCSSTR
+HAVE_WCSPBRK
+HAVE_WCSSPN
+HAVE_WCSCSPN
+HAVE_WCSRCHR
+HAVE_WCSCHR
+HAVE_WCSDUP
+HAVE_WCSXFRM
+HAVE_WCSCOLL
+HAVE_WCSNCASECMP
+HAVE_WCSCASECMP
+HAVE_WCSNCMP
+HAVE_WCSCMP
+HAVE_WCSNCAT
+HAVE_WCSCAT
+HAVE_WCPNCPY
+HAVE_WCSNCPY
+HAVE_WCPCPY
+HAVE_WCSCPY
+HAVE_WCSNLEN
+HAVE_WCSLEN
+HAVE_WMEMSET
+HAVE_WMEMPCPY
+HAVE_WMEMMOVE
+HAVE_WMEMCPY
+HAVE_WMEMCMP
+HAVE_WMEMCHR
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GL_GENERATE_ASSERT_H_FALSE
+GL_GENERATE_ASSERT_H_TRUE
+ASSERT_H
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H
+NEXT_ASSERT_H
+PRAGMA_COLUMNS
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+GL_GENERATE_ALLOCA_H_FALSE
+GL_GENERATE_ALLOCA_H_TRUE
+ALLOCA_H
+HAVE_ALLOCA_H
+ALLOCA
+LTALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+PARTED_USABLE_TEST_DIR
+RANLIB
+ARFLAGS
+AR
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+PARTEDLDFLAGS
+ENABLE_DEVICE_MAPPER
+OS
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+CSCOPE
+ETAGS
+CTAGS
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+LT_AGE
+LT_REVISION
+LT_CURRENT
+LT_RELEASE
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+runstatedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL
+am__quote'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+with_readline
+enable_mtrace
+enable_device_mapper
+enable_discover_only
+enable_debug
+enable_read_only
+enable_pc98
+enable_hfs_extract_fs
+enable_dependency_tracking
+enable_threads
+enable_cross_guesses
+enable_assert
+with_included_regex
+with_packager
+with_packager_version
+with_packager_bug_reports
+enable_gcc_warnings
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
+enable_rpath
+with_libiconv_prefix
+enable_nls
+with_libintl_prefix
+enable_year2038
+enable_largefile
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+LT_SYS_LIBRARY_PATH
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+CHECK_CFLAGS
+CHECK_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -runstatedir | --runstatedir | --runstatedi | --runstated \
+ | --runstate | --runstat | --runsta | --runst | --runs \
+ | --run | --ru | --r)
+ ac_prev=runstatedir ;;
+ -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+ | --run=* | --ru=* | --r=*)
+ runstatedir=$ac_optarg ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: \`$ac_useropt'"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir runstatedir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures GNU parted 3.6 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/parted]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of GNU parted 3.6:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-mtrace enable malloc() debugging
+ --enable-device-mapper enable device mapper support default=yes
+ --enable-discover-only support only reading/probing default=no
+ --enable-debug compile in assertions default=yes
+ --enable-read-only disable writing (for debugging) default=no
+
+ --enable-pc98 build with pc98 support default=yes
+ --enable-hfs-extract-fs Extract special HFS files for debugging default=no
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-threads={isoc|posix|isoc+posix|windows}
+ specify multithreading API
+ --disable-threads build without multithread safety
+ --enable-cross-guesses={conservative|risky}
+ specify policy for cross-compilation guesses
+ --disable-assert turn off assertions
+ --enable-gcc-warnings turn on lots of GCC warnings (for developers)
+ --enable-shared[=PKGS] build shared libraries [default=yes]
+ --enable-static[=PKGS] build static libraries [default=yes]
+ --enable-fast-install[=PKGS]
+ optimize for fast installation [default=yes]
+ --disable-libtool-lock avoid locking (might break parallel builds)
+ --disable-rpath do not hardcode runtime library paths
+ --disable-nls do not use Native Language Support
+ --enable-year2038 support timestamps after 2038
+ --disable-largefile omit support for large files
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-readline support fancy command line editing
+ --without-included-regex
+ don't compile regex; this is the default on systems
+ with recent-enough versions of the GNU C Library
+ (use with caution on other systems).
+ --with-packager String identifying the packager of this software
+ --with-packager-version Packager-specific version information
+ --with-packager-bug-reports
+ Packager info for bug reports (URL/e-mail/...)
+ --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
+ both]
+ --with-aix-soname=aix|svr4|both
+ shared library versioning (aka "SONAME") variant to
+ provide on AIX, [default=aix].
+ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
+ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the
+ compiler's sysroot if not specified).
+ --with-gnu-ld assume the C compiler uses GNU ld default=no
+ --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib
+ --without-libiconv-prefix don't search for libiconv in includedir and libdir
+ --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
+ --without-libintl-prefix don't search for libintl in includedir and libdir
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+ LT_SYS_LIBRARY_PATH
+ User-defined run-time library search path.
+ PKG_CONFIG path to pkg-config utility
+ PKG_CONFIG_PATH
+ directories to add to pkg-config's search path
+ PKG_CONFIG_LIBDIR
+ path overriding pkg-config's built-in search path
+ CHECK_CFLAGS
+ C compiler flags for CHECK, overriding pkg-config
+ CHECK_LIBS linker flags for CHECK, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-parted@gnu.org>.
+GNU parted home page: <https://www.gnu.org/software/parted/>.
+General help using GNU software: <https://www.gnu.org/gethelp/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for configure.gnu first; this name is used for a wrapper for
+ # Metaconfig's "Configure" on case-insensitive file systems.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+GNU parted configure 3.6
+generated by GNU Autoconf 2.71
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ test -x conftest$ac_exeext
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }
+then :
+ ac_retval=0
+else $as_nop
+ printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval "$3=no"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof ($2))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+if (sizeof (($2)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below. */
+
+#include <limits.h>
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main (void)
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
+{
+ ac_save_ac_compile="$ac_compile"
+ if test -n "$ac_compile_for_check_decl"; then
+ ac_compile="$ac_compile_for_check_decl"
+ fi
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ as_decl_name=`echo $2|sed 's/ *(.*//'`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+ eval ac_save_FLAGS=\$$6
+ as_fn_append $6 " $5"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+ (void) $as_decl_use;
+#else
+ (void) $as_decl_name;
+#endif
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$3=yes"
+else $as_nop
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval $6=\$ac_save_FLAGS
+
+fi
+eval ac_res=\$$3
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ ac_compile="$ac_save_ac_compile"
+
+} # ac_fn_check_decl
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid; break
+else $as_nop
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_lo=$ac_mid; break
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+else $as_nop
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main (void)
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_hi=$ac_mid
+else $as_nop
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main (void)
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else $as_nop
+ ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+ fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$5
+int
+main (void)
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$4=yes"
+else $as_nop
+ eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$4
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
+ac_configure_args_raw=
+for ac_arg
+do
+ case $ac_arg in
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+ *$as_nl*)
+ ac_safe_unquote= ;;
+ *)
+ ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
+ ac_unsafe_a="$ac_unsafe_z#~"
+ ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+ ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU parted $as_me 3.6, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ $ $0$ac_configure_args_raw
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ printf "%s\n" "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Sanitize IFS.
+ IFS=" "" $as_nl"
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ printf "%s\n" "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ printf "%s\n" "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ printf "%s\n" "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ printf "%s\n" "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ printf "%s\n" "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ printf "%s\n" "$as_me: caught signal $ac_signal"
+ printf "%s\n" "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+printf "%s\n" "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
+
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+ ac_site_files="$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+ ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
+else
+ ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+fi
+
+for ac_site_file in $ac_site_files
+do
+ case $ac_site_file in #(
+ */*) :
+ ;; #(
+ *) :
+ ac_site_file=./$ac_site_file ;;
+esac
+ if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+ Do not test the value of __STDC__, because some compilers set it to 0
+ while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not \xHH hex character constants.
+ These do not provoke an error unfortunately, instead are silently treated
+ as an "x". The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously \x00 != x always comes out true, for an
+ array size at least. It is necessary to write \x00 == 0 to get something
+ that is true only with -std. */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+ int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros. These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+ int x = 1234;
+ int y = 5678;
+ debug ("Flag");
+ debug ("X = %d\n", x);
+ showlist (The first, second, and third items.);
+ report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+ #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+ #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+ int datasize;
+ double data[];
+};
+
+struct named_init {
+ int number;
+ const wchar_t *name;
+ double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+ // See if C++-style comments work.
+ // Iterate through items via the restricted pointer.
+ // Also check for declarations in for loops.
+ for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+ continue;
+ return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+ va_list args;
+ va_start (args, format);
+ va_list args_copy;
+ va_copy (args_copy, args);
+
+ const char *str = "";
+ int number = 0;
+ float fnumber = 0;
+
+ while (*format)
+ {
+ switch (*format++)
+ {
+ case '\''s'\'': // string
+ str = va_arg (args_copy, const char *);
+ break;
+ case '\''d'\'': // int
+ number = va_arg (args_copy, int);
+ break;
+ case '\''f'\'': // float
+ fnumber = va_arg (args_copy, double);
+ break;
+ default:
+ break;
+ }
+ }
+ va_end (args_copy);
+ va_end (args);
+
+ return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+ // Check bool.
+ _Bool success = false;
+ success |= (argc != 0);
+
+ // Check restrict.
+ if (test_restrict ("String literal") == 0)
+ success = true;
+ char *restrict newvar = "Another string";
+
+ // Check varargs.
+ success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+ test_varargs_macros ();
+
+ // Check flexible array members.
+ struct incomplete_array *ia =
+ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+ ia->datasize = 10;
+ for (int i = 0; i < ia->datasize; ++i)
+ ia->data[i] = i * 1.234;
+
+ // Check named initializers.
+ struct named_init ni = {
+ .number = 34,
+ .name = L"Test wide string",
+ .average = 543.34343,
+ };
+
+ ni.number = 58;
+
+ int dynamic_array[ni.number];
+ dynamic_array[0] = argv[0][0];
+ dynamic_array[ni.number - 1] = 543;
+
+ // work around unused variable warnings
+ ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+ || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+ int_alignment = _Alignof (int),
+ int_array_alignment = _Alignof (int[100]),
+ char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+ int x;
+ _Static_assert (sizeof (int) <= sizeof (long int),
+ "_Static_assert does not work in struct");
+ long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+ union {
+ struct { int i; int j; };
+ struct { int k; long int l; } w;
+ };
+ int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+ _Static_assert ((offsetof (struct anonymous, i)
+ == offsetof (struct anonymous, w.k)),
+ "Anonymous union alignment botch");
+ v1.i = 2;
+ v1.w.k = 5;
+ ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ ${ac_c_conftest_c11_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ ${ac_c_conftest_c99_main}
+ return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+ int ok = 0;
+ ${ac_c_conftest_c89_main}
+ return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
+as_fn_append ac_func_c_list " btowc HAVE_BTOWC"
+as_fn_append ac_func_c_list " canonicalize_file_name HAVE_CANONICALIZE_FILE_NAME"
+as_fn_append ac_func_c_list " realpath HAVE_REALPATH"
+as_fn_append ac_func_c_list " lstat HAVE_LSTAT"
+as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H"
+as_fn_append ac_func_c_list " _set_invalid_parameter_handler HAVE__SET_INVALID_PARAMETER_HANDLER"
+as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H"
+as_fn_append ac_header_c_list " error.h error_h HAVE_ERROR_H"
+as_fn_append ac_func_c_list " fcntl HAVE_FCNTL"
+as_fn_append ac_func_c_list " symlink HAVE_SYMLINK"
+as_fn_append ac_header_c_list " stdio_ext.h stdio_ext_h HAVE_STDIO_EXT_H"
+as_fn_append ac_func_c_list " fsync HAVE_FSYNC"
+as_fn_append ac_func_c_list " getdtablesize HAVE_GETDTABLESIZE"
+gl_getopt_required=GNU
+as_fn_append ac_header_c_list " getopt.h getopt_h HAVE_GETOPT_H"
+as_fn_append ac_header_c_list " sys/cdefs.h sys_cdefs_h HAVE_SYS_CDEFS_H"
+as_fn_append ac_func_c_list " getexecname HAVE_GETEXECNAME"
+as_fn_append ac_header_c_list " threads.h threads_h HAVE_THREADS_H"
+as_fn_append ac_header_c_list " limits.h limits_h HAVE_LIMITS_H"
+as_fn_append ac_header_c_list " langinfo.h langinfo_h HAVE_LANGINFO_H"
+as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H"
+as_fn_append ac_func_c_list " mbsinit HAVE_MBSINIT"
+as_fn_append ac_func_c_list " mbrtowc HAVE_MBRTOWC"
+as_fn_append ac_func_c_list " mkstemp HAVE_MKSTEMP"
+as_fn_append ac_func_c_list " readlink HAVE_READLINK"
+as_fn_append ac_header_c_list " malloc.h malloc_h HAVE_MALLOC_H"
+as_fn_append ac_func_c_list " isblank HAVE_ISBLANK"
+as_fn_append ac_func_c_list " iswctype HAVE_ISWCTYPE"
+as_fn_append ac_func_c_list " sleep HAVE_SLEEP"
+as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H"
+as_fn_append ac_header_c_list " stdbool.h stdbool_h HAVE_STDBOOL_H"
+as_fn_append ac_header_c_list " stdckdint.h stdckdint_h HAVE_STDCKDINT_H"
+as_fn_append ac_func_c_list " __xpg_strerror_r HAVE___XPG_STRERROR_R"
+as_fn_append ac_header_c_list " sys/random.h sys_random_h HAVE_SYS_RANDOM_H"
+as_fn_append ac_func_c_list " usleep HAVE_USLEEP"
+as_fn_append ac_header_c_list " features.h features_h HAVE_FEATURES_H"
+as_fn_append ac_header_c_list " crtdefs.h crtdefs_h HAVE_CRTDEFS_H"
+as_fn_append ac_func_c_list " wcrtomb HAVE_WCRTOMB"
+as_fn_append ac_func_c_list " iswcntrl HAVE_ISWCNTRL"
+as_fn_append ac_header_c_list " wctype.h wctype_h HAVE_WCTYPE_H"
+as_fn_append ac_header_c_list " arpa/inet.h arpa_inet_h HAVE_ARPA_INET_H"
+as_fn_append ac_func_c_list " gettimeofday HAVE_GETTIMEOFDAY"
+as_fn_append ac_header_c_list " netdb.h netdb_h HAVE_NETDB_H"
+as_fn_append ac_header_c_list " netinet/in.h netinet_in_h HAVE_NETINET_IN_H"
+as_fn_append ac_header_c_list " semaphore.h semaphore_h HAVE_SEMAPHORE_H"
+as_fn_append ac_header_c_list " sys/mman.h sys_mman_h HAVE_SYS_MMAN_H"
+as_fn_append ac_func_c_list " mprotect HAVE_MPROTECT"
+as_fn_append ac_func_c_list " pipe HAVE_PIPE"
+as_fn_append ac_header_c_list " priv.h priv_h HAVE_PRIV_H"
+as_fn_append ac_header_c_list " sys/select.h sys_select_h HAVE_SYS_SELECT_H"
+as_fn_append ac_func_c_list " pselect HAVE_PSELECT"
+as_fn_append ac_header_c_list " sys/wait.h sys_wait_h HAVE_SYS_WAIT_H"
+as_fn_append ac_header_c_list " pthread.h pthread_h HAVE_PTHREAD_H"
+as_fn_append ac_func_c_list " pthread_sigmask HAVE_PTHREAD_SIGMASK"
+as_fn_append ac_func_c_list " setenv HAVE_SETENV"
+as_fn_append ac_func_c_list " snprintf HAVE_SNPRINTF"
+as_fn_append ac_header_c_list " sys/ioctl.h sys_ioctl_h HAVE_SYS_IOCTL_H"
+as_fn_append ac_func_c_list " shutdown HAVE_SHUTDOWN"
+as_fn_append ac_header_c_list " sys/uio.h sys_uio_h HAVE_SYS_UIO_H"
+as_fn_append ac_func_c_list " wctob HAVE_WCTOB"
+gt_needs="$gt_needs "
+as_fn_append ac_header_c_list " blkid/blkid.h blkid_blkid_h HAVE_BLKID_BLKID_H"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.rpath ltmain.sh compile config.guess config.sub missing install-sh"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}/build-aux"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ as_found=:
+
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
+ ac_aux_dir_found=yes
+ ac_install_sh=
+ for ac_aux in $ac_aux_files
+ do
+ # As a special case, if "install-sh" is required, that requirement
+ # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+ # and $ac_install_sh is set appropriately for whichever one is found.
+ if test x"$ac_aux" = x"install-sh"
+ then
+ if test -f "${as_dir}install-sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
+ ac_install_sh="${as_dir}install-sh -c"
+ elif test -f "${as_dir}install.sh"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
+ ac_install_sh="${as_dir}install.sh -c"
+ elif test -f "${as_dir}shtool"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
+ ac_install_sh="${as_dir}shtool install -c"
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+ else
+ break
+ fi
+ fi
+ else
+ if test -f "${as_dir}${ac_aux}"; then
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
+ else
+ ac_aux_dir_found=no
+ if $ac_first_candidate; then
+ ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+ else
+ break
+ fi
+ fi
+ fi
+ done
+ if test "$ac_aux_dir_found" = yes; then
+ ac_aux_dir="$as_dir"
+ break
+ fi
+ ac_first_candidate=false
+
+ as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+ as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+ ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+ ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+ ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+ and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# When the most recent signed tag is v1.8.8.1,
+# the above might set e.g., PACKAGE_VERSION='1.8.8.1.1-0bfc'
+
+
+
+ac_config_headers="$ac_config_headers lib/config.h:lib/config.h.in"
+
+
+
+
+
+# Derive these numbers from $PACKAGE_VERSION, which is set
+# when autoconf creates configure (see AC_INIT, above).
+PED_MAJOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/\..*//'`
+PED_MINOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/^[0-9][0-9]*\.//;s/\..*//'`
+case $PACKAGE_VERSION in
+ *.*.*.*.*)
+ PED_MICRO_VERSION=`echo "$PACKAGE_VERSION" \
+ | sed 's/^^.*\.^.*\.//;s/\..*//'`
+ ;;
+ *) PED_MICRO_VERSION=0;;
+esac
+
+PED_INTERFACE_AGE=0
+PED_BINARY_AGE=0
+PED_VERSION_SUFFIX=
+PED_VERSION=$PED_MAJOR_VERSION.$PED_MINOR_VERSION.$PED_MICRO_VERSION$PED_VERSION_SUFFIX
+
+LT_RELEASE=$PED_MAJOR_VERSION.$PED_MINOR_VERSION
+LT_CURRENT=`expr $PED_MICRO_VERSION - $PED_INTERFACE_AGE`
+LT_REVISION=$PED_INTERFACE_AGE
+LT_AGE=`expr $PED_BINARY_AGE - $PED_INTERFACE_AGE`
+
+
+
+
+
+am__api_version='1.16'
+
+
+
+ # Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test ${ac_cv_path_install+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+ ./ | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test ${ac_cv_path_install+y}; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+printf %s "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
+
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+
+ if test x"${MISSING+set}" != xset; then
+ MISSING="\${SHELL} '$am_aux_dir/missing'"
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if test ${ac_cv_path_mkdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir ('*'coreutils) '* | \
+ 'BusyBox '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test ${ac_cv_path_mkdir+y}; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AWK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+printf "%s\n" "$AWK" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ SET_MAKE=
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='parted'
+ VERSION='3.6'
+
+
+printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
+
+
+printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver). The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+# Variables for tags utilities; see am/tags.am
+if test -z "$CTAGS"; then
+ CTAGS=ctags
+fi
+
+if test -z "$ETAGS"; then
+ ETAGS=etags
+fi
+
+if test -z "$CSCOPE"; then
+ CSCOPE=cscope
+fi
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes. So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+ cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present. This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message. This
+can help us improve future automake versions.
+
+END
+ if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+ echo 'Configuration will proceed anyway, since you have set the' >&2
+ echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+ echo >&2
+ else
+ cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+ as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+ fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test ${enable_silent_rules+y}
+then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+printf %s "checking whether $am_make supports nested variables... " >&6; }
+if test ${am_cv_make_support_nested_variables+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if printf "%s\n" 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+ # make --enable-silent-rules the default.
+
+
+
+ # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+case "$host_os" in
+ linux*|uclinux*) OS=linux ;;
+ gnu*) OS=gnu ;;
+ beos*) OS=beos ;;
+ *) as_fn_error $? "Unknown or unsupported OS \"$host_os\". Only \"linux\", \"uclinux\", \"gnu\" and \"beos\" are supported in this version of GNU Parted." "$LINENO" 5 ;;
+esac
+
+
+
+# Check whether --with-readline was given.
+if test ${with_readline+y}
+then :
+ withval=$with_readline;
+else $as_nop
+ with_readline=yes
+
+fi
+
+
+# Check whether --enable-mtrace was given.
+if test ${enable_mtrace+y}
+then :
+ enableval=$enable_mtrace;
+else $as_nop
+ enable_mtrace=no
+
+fi
+
+if test "$enable_mtrace" = yes; then
+
+printf "%s\n" "#define ENABLE_MTRACE 1" >>confdefs.h
+
+fi
+
+
+ENABLE_DEVICE_MAPPER=yes
+# Check whether --enable-device-mapper was given.
+if test ${enable_device_mapper+y}
+then :
+ enableval=$enable_device_mapper; ENABLE_DEVICE_MAPPER=$enable_device_mapper
+fi
+
+if test $ENABLE_DEVICE_MAPPER = yes; then
+
+printf "%s\n" "#define ENABLE_DEVICE_MAPPER 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-discover-only was given.
+if test ${enable_discover_only+y}
+then :
+ enableval=$enable_discover_only;
+else $as_nop
+ enable_discover_only=no
+
+fi
+
+if test "$enable_discover_only" = yes; then
+
+printf "%s\n" "#define DISCOVER_ONLY 1" >>confdefs.h
+
+fi
+
+PARTED_LIBS=""
+
+# Check whether --enable-debug was given.
+if test ${enable_debug+y}
+then :
+ enableval=$enable_debug;
+else $as_nop
+ enable_debug=yes
+
+fi
+
+
+if test "$enable_debug" = yes; then
+
+printf "%s\n" "#define DEBUG 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-read-only was given.
+if test ${enable_read_only+y}
+then :
+ enableval=$enable_read_only;
+else $as_nop
+ enable_read_only=no
+
+fi
+
+if test "$enable_read_only" = yes; then
+
+printf "%s\n" "#define READ_ONLY 1" >>confdefs.h
+
+fi
+
+PARTEDLDFLAGS=
+
+
+# Check whether --enable-pc98 was given.
+if test ${enable_pc98+y}
+then :
+ enableval=$enable_pc98;
+else $as_nop
+ enable_pc98=yes
+
+fi
+
+if test "$enable_pc98" = yes; then
+
+printf "%s\n" "#define ENABLE_PC98 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-hfs-extract-fs was given.
+if test ${enable_hfs_extract_fs+y}
+then :
+ enableval=$enable_hfs_extract_fs;
+else $as_nop
+ enable_hfs_extract_fs=no
+
+fi
+
+if test "$enable_hfs_extract_fs" = yes; then
+
+printf "%s\n" "#define HFS_EXTRACT_FS 1" >>confdefs.h
+
+fi
+
+AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
+
+
+
+
+
+
+
+
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+ @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+ { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+ (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+ case $?:`cat confinc.out 2>/dev/null` in #(
+ '0:this is the am__doit target') :
+ case $s in #(
+ BSD) :
+ am__include='.include' am__quote='"' ;; #(
+ *) :
+ am__include='include' am__quote='' ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ if test "$am__include" != "#"; then
+ _am_result="yes ($s style)"
+ break
+ fi
+done
+rm -f confinc.* confmf.*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+printf "%s\n" "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test ${enable_dependency_tracking+y}
+then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else $as_nop
+ ac_file=''
+fi
+if test -z "$ac_file"
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main (void)
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else $as_nop
+ printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5
+printf %s "checking whether the compiler is clang... " >&6; }
+if test ${gl_cv_compiler_clang+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #ifdef __clang__
+ barfbarf
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_compiler_clang=no
+else $as_nop
+ gl_cv_compiler_clang=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_clang" >&5
+printf "%s\n" "$gl_cv_compiler_clang" >&6; }
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5
+printf %s "checking for compiler option needed when checking for declarations... " >&6; }
+if test ${gl_cv_compiler_check_decl_option+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $gl_cv_compiler_clang = yes; then
+ save_ac_compile="$ac_compile"
+ ac_compile="$ac_compile -Werror=implicit-function-declaration"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'
+else $as_nop
+ gl_cv_compiler_check_decl_option=none
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_compile="$save_ac_compile"
+ else
+ gl_cv_compiler_check_decl_option=none
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5
+printf "%s\n" "$gl_cv_compiler_check_decl_option" >&6; }
+ if test "x$gl_cv_compiler_check_decl_option" != xnone; then
+ ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option"
+ else
+ ac_compile_for_check_decl="$ac_compile"
+ fi
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
+printf %s "checking for library containing strerror... " >&6; }
+if test ${ac_cv_search_strerror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char strerror ();
+int
+main (void)
+{
+return strerror ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' cposix
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_strerror=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_strerror+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_strerror+y}
+then :
+
+else $as_nop
+ ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
+printf "%s\n" "$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="clang"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+
+
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion -version; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_compiler_gnu=yes
+else $as_nop
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+y}
+ac_save_CFLAGS=$CFLAGS
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+else $as_nop
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c11=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c11" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+ CC="$CC $ac_cv_prog_cc_c11"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+ ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c99" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+ CC="$CC $ac_cv_prog_cc_c99"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+ ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_c_conftest_c89_program
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
+
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+ if test "x$ac_cv_prog_cc_c89" = x
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+ CC="$CC $ac_cv_prog_cc_c89"
+fi
+ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+ ac_prog_cc_stdc=c89
+fi
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+printf %s "checking whether $CC understands -c and -o together... " >&6; }
+if test ${am_cv_prog_cc_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ # Make sure it works both with $CC and with simple cc.
+ # Following AC_PROG_CC_C_O, we do the test twice because some
+ # compilers refuse to overwrite an existing .o file with -o,
+ # though they will create one.
+ am_cv_prog_cc_c_o=yes
+ for am_i in 1 2; do
+ if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+ ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } \
+ && test -f conftest2.$ac_objext; then
+ : OK
+ else
+ am_cv_prog_cc_c_o=no
+ break
+ fi
+ done
+ rm -f core conftest*
+ unset am_i
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5
+printf %s "checking whether the compiler is clang... " >&6; }
+if test ${gl_cv_compiler_clang+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #ifdef __clang__
+ barfbarf
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_compiler_clang=no
+else $as_nop
+ gl_cv_compiler_clang=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_clang" >&5
+printf "%s\n" "$gl_cv_compiler_clang" >&6; }
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5
+printf %s "checking for compiler option needed when checking for declarations... " >&6; }
+if test ${gl_cv_compiler_check_decl_option+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $gl_cv_compiler_clang = yes; then
+ save_ac_compile="$ac_compile"
+ ac_compile="$ac_compile -Werror=implicit-function-declaration"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'
+else $as_nop
+ gl_cv_compiler_check_decl_option=none
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ac_compile="$save_ac_compile"
+ else
+ gl_cv_compiler_check_decl_option=none
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5
+printf "%s\n" "$gl_cv_compiler_check_decl_option" >&6; }
+ if test "x$gl_cv_compiler_check_decl_option" != xnone; then
+ ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option"
+ else
+ ac_compile_for_check_decl="$ac_compile"
+ fi
+
+
+depcc="$CC" am_compiler_list=
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+printf %s "checking dependency style of $depcc... " >&6; }
+if test ${am_cv_CC_dependencies_compiler_type+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test ${ac_cv_prog_CPP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Double quotes because $CC needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ # Broken: success on invalid input.
+continue
+else $as_nop
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in grep ggrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in egrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+if test $ac_cv_c_compiler_gnu = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_pattern="Autoconf.*'x'"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
+ ac_cv_prog_gcc_traditional=yes
+else $as_nop
+ ac_cv_prog_gcc_traditional=no
+fi
+rm -rf conftest*
+
+
+ if test $ac_cv_prog_gcc_traditional = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
+ ac_cv_prog_gcc_traditional=yes
+fi
+rm -rf conftest*
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
+ if test $ac_cv_prog_gcc_traditional = yes; then
+ CC="$CC -traditional"
+ fi
+fi
+
+
+
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+ if test $ac_cache; then
+ ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+ if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+ printf "%s\n" "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_header= ac_cache=
+ elif test $ac_header; then
+ ac_cache=$ac_item
+ else
+ ac_header=$ac_item
+ fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# define __EXTENSIONS__ 1
+ $ac_includes_default
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+ ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_should_define__xopen_source=no
+ if test $ac_cv_header_wchar_h = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define _XOPEN_SOURCE 500
+ #include <wchar.h>
+ mbstate_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_should_define__xopen_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
+
+ printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
+
+ printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+ printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
+ printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+ if test $ac_cv_header_minix_config_h = yes
+then :
+ MINIX=yes
+ printf "%s\n" "#define _MINIX 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
+
+ printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+else $as_nop
+ MINIX=
+fi
+ if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+ printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
+
+fi
+ if test $ac_cv_should_define__xopen_source = yes
+then :
+ printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+fi
+
+
+
+
+
+ case "$host_os" in
+ openbsd*)
+
+printf "%s\n" "#define _ISOC11_SOURCE 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
+printf %s "checking for Minix Amsterdam compiler... " >&6; }
+if test ${gl_cv_c_amsterdam_compiler+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef __ACK__
+Amsterdam
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Amsterdam" >/dev/null 2>&1
+then :
+ gl_cv_c_amsterdam_compiler=yes
+else $as_nop
+ gl_cv_c_amsterdam_compiler=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
+printf "%s\n" "$gl_cv_c_amsterdam_compiler" >&6; }
+
+ if test $gl_cv_c_amsterdam_compiler = yes; then
+ if test -z "$AR"; then
+ AR='cc -c.a'
+ fi
+ if test -z "$ARFLAGS"; then
+ ARFLAGS='-o'
+ fi
+ else
+ :
+ fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR="ar"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+ if test -z "$ARFLAGS"; then
+ ARFLAGS='cr'
+ fi
+
+
+
+ if test -z "$RANLIB"; then
+ if test $gl_cv_c_amsterdam_compiler = yes; then
+ RANLIB=':'
+ else
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+ fi
+ fi
+
+
+ if test "$enable_largefile" != no
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5
+printf %s "checking for $CC option to enable large file support... " >&6; }
+if test ${ac_cv_sys_largefile_opts+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CC="$CC"
+ ac_opt_found=no
+ for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do
+ if test x"$ac_opt" != x"none needed"
+then :
+ CC="$ac_save_CC $ac_opt"
+fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_largefile_opts="$ac_opt"
+ ac_opt_found=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test $ac_opt_found = no || break
+ done
+ CC="$ac_save_CC"
+ test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5
+printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; }
+
+ac_have_largefile=yes
+case $ac_cv_sys_largefile_opts in #(
+ "none needed") :
+ ;; #(
+ "support not detected") :
+ ac_have_largefile=no ;; #(
+ "-D_FILE_OFFSET_BITS=64") :
+
+printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h
+ ;; #(
+ "-D_LARGE_FILES=1") :
+
+printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h
+ ;; #(
+ "-n32") :
+ CC="$CC -n32" ;; #(
+ *) :
+ as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;;
+esac
+
+ if test "$enable_year2038" != no
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable timestamps after Jan 2038" >&5
+printf %s "checking for $CC option to enable timestamps after Jan 2038... " >&6; }
+if test ${ac_cv_sys_year2038_opts+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_opt_found=no
+ for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do
+ if test x"$ac_opt" != x"none needed"
+then :
+ CPPFLAGS="$ac_save_CPPFLAGS $ac_opt"
+fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_sys_year2038_opts="$ac_opt"
+ ac_opt_found=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test $ac_opt_found = no || break
+ done
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5
+printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; }
+
+ac_have_year2038=yes
+case $ac_cv_sys_year2038_opts in #(
+ "none needed") :
+ ;; #(
+ "support not detected") :
+ ac_have_year2038=no
+ case $enable_year2038 in #(
+ yes) :
+ # If we're not cross compiling and 'touch' works with a large
+ # timestamp, then we can presume the system supports wider time_t
+ # *somehow* and we just weren't able to detect it. One common
+ # case that we deliberately *don't* probe for is a system that
+ # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers
+ # wide time_t. (It would be inappropriate for us to override an
+ # intentional use of -m32.) Error out, demanding use of
+ # --disable-year2038 if this is intentional.
+ if test $cross_compiling = no
+then :
+ if TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null
+then :
+ case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in #(
+ *'Feb 7 2106'* | *'Feb 7 17:10'*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "this system appears to support timestamps after
+January 2038, but no mechanism for enabling wide
+'time_t' was detected. Did you mean to build a 64-bit
+binary? (e.g. 'CC=\"${CC} -m64\"'.) To proceed with
+32-bit time_t, configure with '--disable-year2038'.
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ *) :
+ ;;
+esac
+fi
+fi ;; #(
+ *) :
+ ;;
+esac ;; #(
+ "-D_TIME_BITS=64") :
+
+printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h
+ ;; #(
+ "-D__MINGW_USE_VC2005_COMPAT=1") :
+
+printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h
+ ;; #(
+ "-U_USE_32_BIT_TIME_T"*) :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It
+will stop working after January 2038. Remove
+_USE_32BIT_TIME_T from the compiler flags.
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ *) :
+ as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;;
+esac
+
+fi
+
+
+
+fi
+
+
+
+
+
+
+
+
+ # Check whether --enable-threads was given.
+if test ${enable_threads+y}
+then :
+ enableval=$enable_threads; gl_use_threads=$enableval
+else $as_nop
+ if test -n "$gl_use_threads_default"; then
+ gl_use_threads="$gl_use_threads_default"
+ else
+ case "$host_os" in
+ osf*) gl_use_threads=no ;;
+ cygwin*)
+ case `uname -r` in
+ 1.[0-5].*) gl_use_threads=no ;;
+ *) gl_use_threads=yes ;;
+ esac
+ ;;
+ mingw*)
+ case "$gl_use_winpthreads_default" in
+ yes) gl_use_threads=posix ;;
+ no) gl_use_threads=windows ;;
+ *) gl_use_threads=yes ;;
+ esac
+ ;;
+ *) gl_use_threads=yes ;;
+ esac
+ fi
+
+fi
+
+ if test "$gl_use_threads" = yes \
+ || test "$gl_use_threads" = isoc \
+ || test "$gl_use_threads" = posix \
+ || test "$gl_use_threads" = isoc+posix; then
+ # For using <threads.h> or <pthread.h>:
+
+
+ if test -z "$gl_anythreadlib_early_done"; then
+ case "$host_os" in
+ osf*)
+ # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+ # groks <pthread.h>. cc also understands the flag -pthread, but
+ # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+ # 2. putting a flag into CPPFLAGS that has an effect on the linker
+ # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+ # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ ;;
+ esac
+ # Some systems optimize for single-threaded programs by default, and
+ # need special flags to disable these optimizations. For example, the
+ # definition of 'errno' in <errno.h>.
+ case "$host_os" in
+ aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+ solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+ esac
+ gl_anythreadlib_early_done=done
+ fi
+
+ fi
+
+
+
+ # Pre-early section.
+
+
+
+ # Code from module absolute-header:
+ # Code from module accept:
+ # Code from module accept-tests:
+ # Code from module alignasof:
+ # Code from module alignasof-tests:
+ # Code from module alloca:
+ # Code from module alloca-opt:
+ # Code from module alloca-opt-tests:
+ # Code from module announce-gen:
+ # Code from module argmatch:
+ # Code from module argmatch-tests:
+ # Code from module arpa_inet:
+ # Code from module arpa_inet-tests:
+ # Code from module assert:
+ # Code from module assert-h:
+ # Code from module assert-h-tests:
+ # Code from module assure:
+ # Code from module attribute:
+ # Code from module basename-lgpl:
+ # Code from module binary-io:
+ # Code from module binary-io-tests:
+ # Code from module bind:
+ # Code from module bind-tests:
+ # Code from module btowc:
+ # Code from module btowc-tests:
+ # Code from module builtin-expect:
+ # Code from module c-ctype:
+ # Code from module c-ctype-tests:
+ # Code from module c-strcase:
+ # Code from module c-strcase-tests:
+ # Code from module c-strcaseeq:
+ # Code from module c-strcasestr:
+ # Code from module c-strcasestr-tests:
+ # Code from module c99:
+ # Code from module calloc-gnu:
+ # Code from module calloc-gnu-tests:
+ # Code from module calloc-posix:
+ # Code from module canonicalize-lgpl:
+ # Code from module canonicalize-lgpl-tests:
+ # Code from module clock-time:
+ # Code from module cloexec:
+ # Code from module cloexec-tests:
+ # Code from module close:
+ # Code from module close-stream:
+ # Code from module close-tests:
+ # Code from module closeout:
+ # Code from module config-h:
+ # Code from module configmake:
+ # Code from module connect:
+ # Code from module connect-tests:
+ # Code from module ctype:
+ # Code from module ctype-tests:
+ # Code from module dirname:
+ # Code from module dirname-lgpl:
+ # Code from module dirname-tests:
+ # Code from module do-release-commit-and-tag:
+ # Code from module double-slash-root:
+ # Code from module dup2:
+ # Code from module dup2-tests:
+ # Code from module eloop-threshold:
+ # Code from module environ:
+ # Code from module environ-tests:
+ # Code from module errno:
+ # Code from module errno-tests:
+ # Code from module error:
+ # Code from module error-h:
+ # Code from module error-tests:
+ # Code from module exitfail:
+ # Code from module extensions:
+ # Code from module extern-inline:
+ # Code from module fcntl:
+ # Code from module fcntl-h:
+ # Code from module fcntl-h-tests:
+ # Code from module fcntl-tests:
+ # Code from module fd-hook:
+ # Code from module fdl:
+ # Code from module fdopen:
+ # Code from module fdopen-tests:
+ # Code from module fgetc-tests:
+ # Code from module filename:
+ # Code from module flexmember:
+ # Code from module fpending:
+ # Code from module fpending-tests:
+ # Code from module fputc-tests:
+ # Code from module fread-tests:
+ # Code from module free-posix:
+ # Code from module free-posix-tests:
+ # Code from module fstat:
+ # Code from module fstat-tests:
+ # Code from module fsync:
+ # Code from module fsync-tests:
+ # Code from module ftruncate:
+ # Code from module ftruncate-tests:
+ # Code from module fwrite-tests:
+ # Code from module gen-header:
+ # Code from module gendocs:
+ # Code from module getcwd-lgpl:
+ # Code from module getcwd-lgpl-tests:
+ # Code from module getdtablesize:
+ # Code from module getdtablesize-tests:
+ # Code from module getopt-gnu:
+ # Code from module getopt-gnu-tests:
+ # Code from module getopt-posix:
+ # Code from module getopt-posix-tests:
+ # Code from module getpagesize:
+ # Code from module getprogname:
+ # Code from module getprogname-tests:
+ # Code from module getrandom:
+ # Code from module getrandom-tests:
+ # Code from module gettext-h:
+ # Code from module gettimeofday:
+ # Code from module gettimeofday-tests:
+ # Code from module git-version-gen:
+ # Code from module gitlog-to-changelog:
+ # Code from module glibc-internal/dynarray:
+ # Code from module glibc-internal/dynarray-tests:
+ # Code from module glibc-internal/scratch_buffer:
+ # Code from module glibc-internal/scratch_buffer-tests:
+ # Code from module gnu-web-doc-update:
+ # Code from module gnumakefile:
+ # Code from module gnupload:
+ # Code from module hard-locale:
+ # Code from module hard-locale-tests:
+ # Code from module ialloc:
+ # Code from module idx:
+ # Code from module ignore-value:
+ # Code from module ignore-value-tests:
+ # Code from module include_next:
+ # Code from module inet_pton:
+ # Code from module inet_pton-tests:
+ # Code from module intprops:
+ # Code from module intprops-tests:
+ # Code from module inttypes:
+ # Code from module inttypes-incomplete:
+ # Code from module inttypes-tests:
+ # Code from module ioctl:
+ # Code from module ioctl-tests:
+ # Code from module isblank:
+ # Code from module isblank-tests:
+ # Code from module langinfo:
+ # Code from module langinfo-tests:
+ # Code from module largefile:
+
+ # Code from module lib-ignore:
+ # Code from module libc-config:
+ # Code from module limits-h:
+ # Code from module limits-h-tests:
+ # Code from module listen:
+ # Code from module listen-tests:
+ # Code from module localcharset:
+ # Code from module localcharset-tests:
+ # Code from module locale:
+ # Code from module locale-tests:
+ # Code from module localeconv:
+ # Code from module localeconv-tests:
+ # Code from module localename:
+ # Code from module localename-tests:
+ # Code from module lock:
+ # Code from module lock-tests:
+ # Code from module long-options:
+ # Code from module lseek:
+ # Code from module lseek-tests:
+ # Code from module lstat:
+ # Code from module lstat-tests:
+ # Code from module maintainer-makefile:
+ # Code from module malloc-gnu:
+ # Code from module malloc-gnu-tests:
+ # Code from module malloc-posix:
+ # Code from module malloca:
+ # Code from module malloca-tests:
+ # Code from module manywarnings:
+ # Code from module mbrtowc:
+ # Code from module mbrtowc-tests:
+ # Code from module mbsinit:
+ # Code from module mbsinit-tests:
+ # Code from module mbtowc:
+ # Code from module memchr:
+ # Code from module memchr-tests:
+ # Code from module mempcpy:
+ # Code from module minmax:
+ # Code from module mkdir:
+ # Code from module mkdir-tests:
+ # Code from module mkstemp:
+ # Code from module mktempd:
+ # Code from module msvc-inval:
+ # Code from module msvc-nothrow:
+ # Code from module multiarch:
+ # Code from module nanosleep:
+ # Code from module nanosleep-tests:
+ # Code from module netinet_in:
+ # Code from module netinet_in-tests:
+ # Code from module nl_langinfo:
+ # Code from module nl_langinfo-tests:
+ # Code from module nocrash:
+ # Code from module open:
+ # Code from module open-tests:
+ # Code from module pathmax:
+ # Code from module pathmax-tests:
+ # Code from module perror:
+ # Code from module perror-tests:
+ # Code from module pipe-posix:
+ # Code from module pipe-posix-tests:
+ # Code from module priv-set:
+ # Code from module priv-set-tests:
+ # Code from module progname:
+ # Code from module pselect:
+ # Code from module pselect-tests:
+ # Code from module pthread-h:
+
+
+ if test -z "$gl_anythreadlib_early_done"; then
+ case "$host_os" in
+ osf*)
+ # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+ # groks <pthread.h>. cc also understands the flag -pthread, but
+ # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+ # 2. putting a flag into CPPFLAGS that has an effect on the linker
+ # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+ # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ ;;
+ esac
+ # Some systems optimize for single-threaded programs by default, and
+ # need special flags to disable these optimizations. For example, the
+ # definition of 'errno' in <errno.h>.
+ case "$host_os" in
+ aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+ solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+ esac
+ gl_anythreadlib_early_done=done
+ fi
+
+ # Code from module pthread-h-tests:
+ # Code from module pthread-thread:
+ # Code from module pthread-thread-tests:
+ # Code from module pthread_sigmask:
+ # Code from module pthread_sigmask-tests:
+ # Code from module putenv:
+ # Code from module quote:
+ # Code from module quotearg:
+ # Code from module quotearg-simple:
+ # Code from module quotearg-simple-tests:
+ # Code from module raise:
+ # Code from module raise-tests:
+ # Code from module rawmemchr:
+ # Code from module rawmemchr-tests:
+ # Code from module read:
+ # Code from module read-tests:
+ # Code from module readlink:
+ # Code from module readlink-tests:
+ # Code from module realloc-gnu:
+ # Code from module realloc-gnu-tests:
+ # Code from module realloc-posix:
+ # Code from module reallocarray:
+ # Code from module reallocarray-tests:
+ # Code from module regex:
+ # Code from module regex-tests:
+ # Code from module root-uid:
+ # Code from module rpmatch:
+ # Code from module safe-read:
+ # Code from module same-inode:
+ # Code from module sched:
+ # Code from module sched-tests:
+ # Code from module sched_yield:
+ # Code from module select:
+ # Code from module select-tests:
+ # Code from module setenv:
+ # Code from module setenv-tests:
+ # Code from module setlocale:
+ # Code from module setlocale-null:
+ # Code from module setlocale-null-tests:
+ # Code from module setlocale-tests:
+ # Code from module setsockopt:
+ # Code from module setsockopt-tests:
+ # Code from module signal-h:
+ # Code from module signal-h-tests:
+ # Code from module sigprocmask:
+ # Code from module sigprocmask-tests:
+ # Code from module sleep:
+ # Code from module sleep-tests:
+ # Code from module snippet/_Noreturn:
+ # Code from module snippet/arg-nonnull:
+ # Code from module snippet/c++defs:
+ # Code from module snippet/warn-on-use:
+ # Code from module socket:
+ # Code from module socketlib:
+ # Code from module sockets:
+ # Code from module sockets-tests:
+ # Code from module socklen:
+ # Code from module ssize_t:
+ # Code from module stat:
+ # Code from module stat-tests:
+ # Code from module stat-time:
+ # Code from module stat-time-tests:
+ # Code from module std-gnu11:
+ # Code from module stdarg:
+
+
+
+ # Code from module stdarg-tests:
+ # Code from module stdbool:
+ # Code from module stdbool-tests:
+ # Code from module stdckdint:
+ # Code from module stdckdint-tests:
+ # Code from module stddef:
+ # Code from module stddef-tests:
+ # Code from module stdint:
+ # Code from module stdint-tests:
+ # Code from module stdio:
+ # Code from module stdio-tests:
+ # Code from module stdlib:
+ # Code from module stdlib-tests:
+ # Code from module strdup-posix:
+ # Code from module streq:
+ # Code from module strerror:
+ # Code from module strerror-override:
+ # Code from module strerror-tests:
+ # Code from module strerror_r-posix:
+ # Code from module strerror_r-posix-tests:
+ # Code from module string:
+ # Code from module string-tests:
+ # Code from module strtoll:
+ # Code from module strtoll-tests:
+ # Code from module strtoull:
+ # Code from module strtoull-tests:
+ # Code from module symlink:
+ # Code from module symlink-tests:
+ # Code from module sys_ioctl:
+ # Code from module sys_ioctl-tests:
+ # Code from module sys_random:
+ # Code from module sys_random-tests:
+ # Code from module sys_select:
+ # Code from module sys_select-tests:
+ # Code from module sys_socket:
+ # Code from module sys_socket-tests:
+ # Code from module sys_stat:
+ # Code from module sys_stat-tests:
+ # Code from module sys_time:
+ # Code from module sys_time-tests:
+ # Code from module sys_types:
+ # Code from module sys_types-tests:
+ # Code from module sys_uio:
+ # Code from module sys_uio-tests:
+ # Code from module tempname:
+ # Code from module test-framework-sh:
+ # Code from module test-framework-sh-tests:
+ # Code from module thread:
+ # Code from module thread-optim:
+ # Code from module thread-tests:
+ # Code from module threadlib:
+
+
+
+ # Code from module time:
+ # Code from module time-h:
+ # Code from module time-h-tests:
+ # Code from module time-tests:
+ # Code from module unistd:
+ # Code from module unistd-tests:
+ # Code from module unlink:
+ # Code from module unlink-tests:
+ # Code from module unlinkdir:
+ # Code from module unsetenv:
+ # Code from module unsetenv-tests:
+ # Code from module update-copyright:
+ # Code from module update-copyright-tests:
+ # Code from module useless-if-before-free:
+ # Code from module usleep:
+ # Code from module usleep-tests:
+ # Code from module vararrays:
+ # Code from module vc-list-files:
+ # Code from module vc-list-files-tests:
+ # Code from module verify:
+ # Code from module verify-tests:
+ # Code from module version-etc:
+ # Code from module version-etc-fsf:
+ # Code from module version-etc-tests:
+ # Code from module warnings:
+ # Code from module wchar:
+ # Code from module wchar-tests:
+ # Code from module wcrtomb:
+ # Code from module wcrtomb-tests:
+ # Code from module wctob:
+ # Code from module wctomb:
+ # Code from module wctype-h:
+ # Code from module wctype-h-tests:
+ # Code from module windows-mutex:
+ # Code from module windows-once:
+ # Code from module windows-recmutex:
+ # Code from module windows-rwlock:
+ # Code from module windows-thread:
+ # Code from module windows-tls:
+ # Code from module xalloc:
+ # Code from module xalloc-die:
+ # Code from module xalloc-die-tests:
+ # Code from module xalloc-oversized:
+ # Code from module xstrtol:
+ # Code from module xstrtol-error:
+ # Code from module xstrtol-tests:
+ # Code from module xstrtoll:
+ # Code from module xstrtoll-tests:
+ # Code from module yield:
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a usable (O_DIRECT-supporting) temporary dir" >&5
+printf %s "checking for a usable (O_DIRECT-supporting) temporary dir... " >&6; }
+if test ${parted_cv_func_open_O_DIRECT_temp_dir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ # First of all, if there is no O_DIRECT definition, use ".",
+ # and skip the run-test.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <fcntl.h>
+#ifdef O_DIRECT
+frobnozzle
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "frobnozzle" >/dev/null 2>&1
+then :
+ pe_have_O_DIRECT=yes
+else $as_nop
+ pe_have_O_DIRECT=no
+fi
+rm -rf conftest*
+
+ if test $pe_have_O_DIRECT = no; then
+ # With no O_DIRECT definition, "." is fine.
+ pe_cand_dirs=.
+ else
+ pe_cand_dirs=.
+ for pe_dir in "$HOME" "$TMPDIR"; do
+ case $pe_dir in
+ /tmp) ;;
+ /var/tmp) ;;
+ /dev/shm) ;;
+ /*) case $pe_dir in
+ # Accept $HOME or $TMP only if the value is nice and boring.
+ *^/a-zA-Z0-9_.-*) ;;
+ *) pe_cand_dirs="$pe_cand_dirs $pe_dir";;
+ esac
+ esac
+ done
+
+ case $PARTED_TMPDIR in
+ *^/a-zA-Z0-9_.-*) ;;
+ *) pe_cand_dirs="$PARTED_TMPDIR $pe_cand_dirs";;
+ esac
+
+ # This is the list of candidate directories.
+ pe_cand_dirs="$pe_cand_dirs /tmp /var/tmp /dev/shm"
+
+ PARTED_CANDIDATE_DIRS=$pe_cand_dirs
+ export PARTED_CANDIDATE_DIRS
+
+ if test "$cross_compiling" = yes
+then :
+ # When cross-compiling, use ".".
+ parted_cv_func_open_O_DIRECT_temp_dir=.
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_LOGICAL_BLOCK_SIZE 4096
+static char g_buf[2 * MAX_LOGICAL_BLOCK_SIZE];
+
+static inline void *
+ptr_align (void const *ptr, size_t alignment)
+{
+ char const *p0 = ptr;
+ char const *p1 = p0 + alignment - 1;
+ return (void *) (p1 - (size_t) p1 % alignment);
+}
+
+static int
+create_input_file (char const *file, char const *buf, size_t n_bytes)
+{
+ int fd = open (file, O_CREAT | O_WRONLY, 0600);
+ if (fd < 0)
+ return 1;
+ if (write (fd, buf, n_bytes) != n_bytes)
+ {
+ close (fd);
+ return 1;
+ }
+ return !! close (fd);
+}
+
+static int
+try_o_direct (char const *file, size_t block_size)
+{
+ char *p = ptr_align (g_buf, MAX_LOGICAL_BLOCK_SIZE);
+ int fd;
+
+ if (!(p + block_size < g_buf + sizeof g_buf))
+ return 4;
+
+ fd = open (file, O_RDWR | O_DIRECT);
+ if (fd < 0)
+ return 1;
+
+ if (write (fd, p, block_size) != block_size)
+ return 1;
+
+ if (lseek (fd, 0, SEEK_SET) != 0)
+ return 1;
+
+ if (read (fd, p, block_size) != block_size)
+ return 1;
+
+ return !! close (fd);
+}
+
+#undef stpcpy
+#define stpcpy(a, b) my_stpcpy (a, b)
+static char *
+my_stpcpy (char *dest, const char *src)
+{
+ char *d = dest;
+ const char *s = src;
+ do *d++ = *s; while (*s++ != '\0');
+ return d - 1;
+}
+
+/* The base name of the file we'll create in the mkdtemp-returned
+ temporary directory. */
+#define BASENAME "x"
+
+/* Return 0 upon failure, else the 1-based index of the first
+ useful directory name from PARTED_CANDIDATE_DIRS. */
+int
+main ()
+{
+ char const *env_dirs;
+ char *dirs;
+ char *dir;
+ unsigned int n;
+ int found = 0;
+ size_t dirs_len;
+
+ if ((env_dirs = getenv ("PARTED_CANDIDATE_DIRS")) == NULL)
+ return 0;
+
+ dirs_len = strlen (env_dirs);
+ if ((dirs = strndup (env_dirs, dirs_len)) == NULL)
+ return 0;
+ dir = dirs;
+
+ for (n = 1; ; n++)
+ {
+ size_t dirname_len;
+ char *space;
+
+ /* Skip any leading spaces. */
+ while (*dir == ' ')
+ ++dir;
+
+ space = strchr (dir, ' ');
+ if (space)
+ {
+ *space = '\0';
+ dirname_len = space - dir;
+ }
+ else
+ {
+ dirname_len = strlen (dir);
+ }
+
+ if (dirname_len != 0)
+ {
+ /* Create an mkdtemp template starting with dir. */
+ char *tmp;
+ char *endp;
+ char const *base = "partedOD.XXXXXX";
+ /* Allocate enough space not just for the dir name, but
+ also for the name of the file to create within it. */
+ char *template = malloc (dirname_len + 1 + strlen (base)
+ + 1 + strlen (BASENAME) + 1);
+ if (template != NULL
+ && (endp = stpcpy (stpcpy (stpcpy (template, dir), "/"), base))
+ && (tmp = mkdtemp (template)) != NULL)
+ {
+ /* Append "/BASENAME" to create the file name. */
+ stpcpy (stpcpy (endp, "/"), BASENAME);
+
+ if (create_input_file (tmp, g_buf, sizeof g_buf) == 0
+ && try_o_direct (tmp, 512) == 0
+ && try_o_direct (tmp, MAX_LOGICAL_BLOCK_SIZE) == 0)
+ found = 1;
+
+ unlink (tmp); /* ignore failure */
+ *endp = '\0';
+ rmdir (tmp); /* ignore failure */
+ }
+ free (template);
+ }
+
+ if (found)
+ break;
+
+ dir += dirname_len + 1;
+ if (dirs + dirs_len < dir)
+ {
+ n = 0;
+ break;
+ }
+ }
+ free (dirs);
+
+ return n;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ # If the above program exits with status 0, then
+ # there it found no useful directory. Use ".".
+ parted_cv_func_open_O_DIRECT_temp_dir=.
+else $as_nop
+ # It found one. The exit status is an index into the list.
+ # We also run this code when the program fails to compile or
+ # to link, as will happen on systems without a mkdtemp function.
+ pe_err=$?; set _ $pe_cand_dirs; shift
+ eval parted_cv_func_open_O_DIRECT_temp_dir='$'$pe_err
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $parted_cv_func_open_O_DIRECT_temp_dir" >&5
+printf "%s\n" "$parted_cv_func_open_O_DIRECT_temp_dir" >&6; }
+ PARTED_USABLE_TEST_DIR=$parted_cv_func_open_O_DIRECT_temp_dir
+
+
+ # If the result is ".", don't cache it. The next user of
+ # the cache may well be running from a different file system.
+ if test "$parted_cv_func_open_O_DIRECT_temp_dir" = .; then
+ $as_unset parted_cv_func_open_O_DIRECT_temp_dir
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ # Check whether --enable-cross-guesses was given.
+if test ${enable_cross_guesses+y}
+then :
+ enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5
+printf "%s\n" "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;}
+ enableval=conservative
+ fi
+ gl_cross_guesses="$enableval"
+else $as_nop
+ gl_cross_guesses=conservative
+fi
+
+ if test $gl_cross_guesses = risky; then
+ gl_cross_guess_normal="guessing yes"
+ gl_cross_guess_inverted="guessing no"
+ else
+ gl_cross_guess_normal="guessing no"
+ gl_cross_guess_inverted="guessing yes"
+ fi
+ LIBC_FATAL_STDERR_=1
+ export LIBC_FATAL_STDERR_
+
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments. Useless!
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+printf %s "checking for working alloca.h... " >&6; }
+if test ${ac_cv_working_alloca_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <alloca.h>
+int
+main (void)
+{
+char *p = (char *) alloca (2 * sizeof (int));
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_working_alloca_h=yes
+else $as_nop
+ ac_cv_working_alloca_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+printf "%s\n" "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+printf %s "checking for alloca... " >&6; }
+if test ${ac_cv_func_alloca_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $ac_cv_working_alloca_h = yes; then
+ ac_cv_func_alloca_works=yes
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stddef.h>
+#ifndef alloca
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# elif defined _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# else
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+# endif
+#endif
+
+int
+main (void)
+{
+char *p = (char *) alloca (1);
+ if (p) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_func_alloca_works=yes
+else $as_nop
+ ac_cv_func_alloca_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+printf "%s\n" "$ac_cv_func_alloca_works" >&6; }
+fi
+
+if test $ac_cv_func_alloca_works = yes; then
+
+printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h
+
+else
+ # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+
+
+
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+printf %s "checking stack direction for C alloca... " >&6; }
+if test ${ac_cv_c_stack_direction+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ ac_cv_c_stack_direction=0
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+ return find_stack_direction (0, argc + !argv + 20) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_c_stack_direction=1
+else $as_nop
+ ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+printf "%s\n" "$ac_cv_c_stack_direction" >&6; }
+printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h
+
+
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
+printf %s "checking whether the preprocessor supports include_next... " >&6; }
+if test ${gl_cv_have_include_next+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -rf conftestd1a conftestd1b conftestd2
+ mkdir conftestd1a conftestd1b conftestd2
+ cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+ cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+ cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+ gl_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_have_include_next=yes
+else $as_nop
+ CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_have_include_next=buggy
+else $as_nop
+ gl_cv_have_include_next=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CPPFLAGS="$gl_save_CPPFLAGS"
+ rm -rf conftestd1a conftestd1b conftestd2
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
+printf "%s\n" "$gl_cv_have_include_next" >&6; }
+ PRAGMA_SYSTEM_HEADER=
+ if test $gl_cv_have_include_next = yes; then
+ INCLUDE_NEXT=include_next
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+ if test -n "$GCC"; then
+ PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+ fi
+ else
+ if test $gl_cv_have_include_next = buggy; then
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+ else
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+ fi
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether source code line length is unlimited" >&5
+printf %s "checking whether source code line length is unlimited... " >&6; }
+if test ${gl_cv_source_line_length_unlimited+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef __TANDEM
+choke me
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "choke me" >/dev/null 2>&1
+then :
+ gl_cv_source_line_length_unlimited=no
+else $as_nop
+ gl_cv_source_line_length_unlimited=yes
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_source_line_length_unlimited" >&5
+printf "%s\n" "$gl_cv_source_line_length_unlimited" >&6; }
+ if test $gl_cv_source_line_length_unlimited = no; then
+ PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+ else
+ PRAGMA_COLUMNS=
+ fi
+
+
+
+ HAVE_BTOWC=1;
+ HAVE_MBSINIT=1;
+ HAVE_MBRTOWC=1;
+ HAVE_MBRLEN=1;
+ HAVE_MBSRTOWCS=1;
+ HAVE_MBSNRTOWCS=1;
+ HAVE_WCRTOMB=1;
+ HAVE_WCSRTOMBS=1;
+ HAVE_WCSNRTOMBS=1;
+ HAVE_WMEMCHR=1;
+ HAVE_WMEMCMP=1;
+ HAVE_WMEMCPY=1;
+ HAVE_WMEMMOVE=1;
+ HAVE_WMEMPCPY=1;
+ HAVE_WMEMSET=1;
+ HAVE_WCSLEN=1;
+ HAVE_WCSNLEN=1;
+ HAVE_WCSCPY=1;
+ HAVE_WCPCPY=1;
+ HAVE_WCSNCPY=1;
+ HAVE_WCPNCPY=1;
+ HAVE_WCSCAT=1;
+ HAVE_WCSNCAT=1;
+ HAVE_WCSCMP=1;
+ HAVE_WCSNCMP=1;
+ HAVE_WCSCASECMP=1;
+ HAVE_WCSNCASECMP=1;
+ HAVE_WCSCOLL=1;
+ HAVE_WCSXFRM=1;
+ HAVE_WCSDUP=1;
+ HAVE_WCSCHR=1;
+ HAVE_WCSRCHR=1;
+ HAVE_WCSCSPN=1;
+ HAVE_WCSSPN=1;
+ HAVE_WCSPBRK=1;
+ HAVE_WCSSTR=1;
+ HAVE_WCSTOK=1;
+ HAVE_WCSWIDTH=1;
+ HAVE_WCSFTIME=1;
+ HAVE_DECL_WCTOB=1;
+ HAVE_DECL_WCSDUP=1;
+ HAVE_DECL_WCWIDTH=1;
+ REPLACE_MBSTATE_T=0;
+ REPLACE_BTOWC=0;
+ REPLACE_WCTOB=0;
+ REPLACE_MBSINIT=0;
+ REPLACE_MBRTOWC=0;
+ REPLACE_MBRLEN=0;
+ REPLACE_MBSRTOWCS=0;
+ REPLACE_MBSNRTOWCS=0;
+ REPLACE_WCRTOMB=0;
+ REPLACE_WCSRTOMBS=0;
+ REPLACE_WCSNRTOMBS=0;
+ REPLACE_WCWIDTH=0;
+ REPLACE_WCSWIDTH=0;
+ REPLACE_WCSFTIME=0;
+ REPLACE_WCSTOK=0;
+ REPLACE_WMEMPCPY=0;
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
+printf %s "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if test ${gl_cv_header_wchar_h_correct_inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_header_wchar_h_correct_inline=yes
+ case "$host_os" in
+ *-gnu* | gnu*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ #define wcstod renamed_wcstod
+ #include <wchar.h>
+ extern int zero (void);
+ int main () { return zero(); }
+
+_ACEOF
+ save_ac_compile="$ac_compile"
+ ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+ if echo '#include "conftest.c"' >conftest1.c \
+ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ #define wcstod renamed_wcstod
+ #include <wchar.h>
+ int zero (void) { return 0; }
+
+_ACEOF
+ ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+ if echo '#include "conftest.c"' >conftest2.c \
+ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+ :
+ else
+ gl_cv_header_wchar_h_correct_inline=no
+ fi
+ fi
+ fi
+ ac_compile="$save_ac_compile"
+ rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
+printf "%s\n" "$gl_cv_header_wchar_h_correct_inline" >&6; }
+ if test $gl_cv_header_wchar_h_correct_inline = no; then
+ as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+ - Add the flag -fgnu89-inline to CC and reconfigure, or
+ - Fix your include files, using parts of
+ <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+ - Use a gcc version older than 4.3, or
+ - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." "$LINENO" 5
+ fi
+
+ac_func=
+for ac_item in $ac_func_c_list
+do
+ if test $ac_func; then
+ ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+ if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+ echo "#define $ac_item 1" >> confdefs.h
+ fi
+ ac_func=
+ else
+ ac_func=$ac_item
+ fi
+done
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+printf %s "checking for nl_langinfo and CODESET... " >&6; }
+if test ${am_cv_langinfo_codeset+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int
+main (void)
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_langinfo_codeset=yes
+else $as_nop
+ am_cv_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+printf "%s\n" "$am_cv_langinfo_codeset" >&6; }
+ if test $am_cv_langinfo_codeset = yes; then
+
+printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ GL_GNULIB_BTOWC=0
+
+
+
+ GL_GNULIB_WCTOB=0
+
+
+
+ GL_GNULIB_MBSINIT=0
+
+
+
+ GL_GNULIB_MBRTOWC=0
+
+
+
+ GL_GNULIB_MBRLEN=0
+
+
+
+ GL_GNULIB_MBSRTOWCS=0
+
+
+
+ GL_GNULIB_MBSNRTOWCS=0
+
+
+
+ GL_GNULIB_WCRTOMB=0
+
+
+
+ GL_GNULIB_WCSRTOMBS=0
+
+
+
+ GL_GNULIB_WCSNRTOMBS=0
+
+
+
+ GL_GNULIB_WCWIDTH=0
+
+
+
+ GL_GNULIB_WMEMCHR=0
+
+
+
+ GL_GNULIB_WMEMCMP=0
+
+
+
+ GL_GNULIB_WMEMCPY=0
+
+
+
+ GL_GNULIB_WMEMMOVE=0
+
+
+
+ GL_GNULIB_WMEMPCPY=0
+
+
+
+ GL_GNULIB_WMEMSET=0
+
+
+
+ GL_GNULIB_WCSLEN=0
+
+
+
+ GL_GNULIB_WCSNLEN=0
+
+
+
+ GL_GNULIB_WCSCPY=0
+
+
+
+ GL_GNULIB_WCPCPY=0
+
+
+
+ GL_GNULIB_WCSNCPY=0
+
+
+
+ GL_GNULIB_WCPNCPY=0
+
+
+
+ GL_GNULIB_WCSCAT=0
+
+
+
+ GL_GNULIB_WCSNCAT=0
+
+
+
+ GL_GNULIB_WCSCMP=0
+
+
+
+ GL_GNULIB_WCSNCMP=0
+
+
+
+ GL_GNULIB_WCSCASECMP=0
+
+
+
+ GL_GNULIB_WCSNCASECMP=0
+
+
+
+ GL_GNULIB_WCSCOLL=0
+
+
+
+ GL_GNULIB_WCSXFRM=0
+
+
+
+ GL_GNULIB_WCSDUP=0
+
+
+
+ GL_GNULIB_WCSCHR=0
+
+
+
+ GL_GNULIB_WCSRCHR=0
+
+
+
+ GL_GNULIB_WCSCSPN=0
+
+
+
+ GL_GNULIB_WCSSPN=0
+
+
+
+ GL_GNULIB_WCSPBRK=0
+
+
+
+ GL_GNULIB_WCSSTR=0
+
+
+
+ GL_GNULIB_WCSTOK=0
+
+
+
+ GL_GNULIB_WCSWIDTH=0
+
+
+
+ GL_GNULIB_WCSFTIME=0
+
+
+
+ GL_GNULIB_MDA_WCSDUP=1
+
+
+
+
+
+ GL_GNULIB__EXIT=0
+
+
+
+ GL_GNULIB_ALIGNED_ALLOC=0
+
+
+
+ GL_GNULIB_ATOLL=0
+
+
+
+ GL_GNULIB_CALLOC_GNU=0
+
+
+
+ GL_GNULIB_CALLOC_POSIX=0
+
+
+
+ GL_GNULIB_CANONICALIZE_FILE_NAME=0
+
+
+
+ GL_GNULIB_FREE_POSIX=0
+
+
+
+ GL_GNULIB_GETLOADAVG=0
+
+
+
+ GL_GNULIB_GETPROGNAME=0
+
+
+
+ GL_GNULIB_GETSUBOPT=0
+
+
+
+ GL_GNULIB_GRANTPT=0
+
+
+
+ GL_GNULIB_MALLOC_GNU=0
+
+
+
+ GL_GNULIB_MALLOC_POSIX=0
+
+
+
+ GL_GNULIB_MBTOWC=0
+
+
+
+ GL_GNULIB_MKDTEMP=0
+
+
+
+ GL_GNULIB_MKOSTEMP=0
+
+
+
+ GL_GNULIB_MKOSTEMPS=0
+
+
+
+ GL_GNULIB_MKSTEMP=0
+
+
+
+ GL_GNULIB_MKSTEMPS=0
+
+
+
+ GL_GNULIB_POSIX_MEMALIGN=0
+
+
+
+ GL_GNULIB_POSIX_OPENPT=0
+
+
+
+ GL_GNULIB_PTSNAME=0
+
+
+
+ GL_GNULIB_PTSNAME_R=0
+
+
+
+ GL_GNULIB_PUTENV=0
+
+
+
+ GL_GNULIB_QSORT_R=0
+
+
+
+ GL_GNULIB_RANDOM=0
+
+
+
+ GL_GNULIB_RANDOM_R=0
+
+
+
+ GL_GNULIB_REALLOCARRAY=0
+
+
+
+ GL_GNULIB_REALLOC_GNU=0
+
+
+
+ GL_GNULIB_REALLOC_POSIX=0
+
+
+
+ GL_GNULIB_REALPATH=0
+
+
+
+ GL_GNULIB_RPMATCH=0
+
+
+
+ GL_GNULIB_SECURE_GETENV=0
+
+
+
+ GL_GNULIB_SETENV=0
+
+
+
+ GL_GNULIB_STRTOD=0
+
+
+
+ GL_GNULIB_STRTOL=0
+
+
+
+ GL_GNULIB_STRTOLD=0
+
+
+
+ GL_GNULIB_STRTOLL=0
+
+
+
+ GL_GNULIB_STRTOUL=0
+
+
+
+ GL_GNULIB_STRTOULL=0
+
+
+
+ GL_GNULIB_SYSTEM_POSIX=0
+
+
+
+ GL_GNULIB_UNLOCKPT=0
+
+
+
+ GL_GNULIB_UNSETENV=0
+
+
+
+ GL_GNULIB_WCTOMB=0
+
+
+
+ GL_GNULIB_MDA_ECVT=1
+
+
+
+ GL_GNULIB_MDA_FCVT=1
+
+
+
+ GL_GNULIB_MDA_GCVT=1
+
+
+
+ GL_GNULIB_MDA_MKTEMP=1
+
+
+
+ GL_GNULIB_MDA_PUTENV=1
+
+
+
+
+ HAVE__EXIT=1;
+ HAVE_ALIGNED_ALLOC=1;
+ HAVE_ATOLL=1;
+ HAVE_CANONICALIZE_FILE_NAME=1;
+ HAVE_DECL_ECVT=1;
+ HAVE_DECL_FCVT=1;
+ HAVE_DECL_GCVT=1;
+ HAVE_DECL_GETLOADAVG=1;
+ HAVE_GETPROGNAME=1;
+ HAVE_GETSUBOPT=1;
+ HAVE_GRANTPT=1;
+ HAVE_INITSTATE=1;
+ HAVE_DECL_INITSTATE=1;
+ HAVE_MBTOWC=1;
+ HAVE_MKDTEMP=1;
+ HAVE_MKOSTEMP=1;
+ HAVE_MKOSTEMPS=1;
+ HAVE_MKSTEMP=1;
+ HAVE_MKSTEMPS=1;
+ HAVE_POSIX_MEMALIGN=1;
+ HAVE_POSIX_OPENPT=1;
+ HAVE_PTSNAME=1;
+ HAVE_PTSNAME_R=1;
+ HAVE_QSORT_R=1;
+ HAVE_RANDOM=1;
+ HAVE_RANDOM_H=1;
+ HAVE_RANDOM_R=1;
+ HAVE_REALLOCARRAY=1;
+ HAVE_REALPATH=1;
+ HAVE_RPMATCH=1;
+ HAVE_SECURE_GETENV=1;
+ HAVE_SETENV=1;
+ HAVE_DECL_SETENV=1;
+ HAVE_SETSTATE=1;
+ HAVE_DECL_SETSTATE=1;
+ HAVE_STRTOD=1;
+ HAVE_STRTOL=1;
+ HAVE_STRTOLD=1;
+ HAVE_STRTOLL=1;
+ HAVE_STRTOUL=1;
+ HAVE_STRTOULL=1;
+ HAVE_STRUCT_RANDOM_DATA=1;
+ HAVE_SYS_LOADAVG_H=0;
+ HAVE_UNLOCKPT=1;
+ HAVE_DECL_UNSETENV=1;
+ REPLACE__EXIT=0;
+ REPLACE_ALIGNED_ALLOC=0;
+ REPLACE_CALLOC_FOR_CALLOC_GNU=0;
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=0;
+ REPLACE_CANONICALIZE_FILE_NAME=0;
+ REPLACE_FREE=0;
+ REPLACE_GETLOADAVG=0;
+ REPLACE_GETPROGNAME=0;
+ REPLACE_GETSUBOPT=0;
+ REPLACE_INITSTATE=0;
+ REPLACE_MALLOC_FOR_MALLOC_GNU=0;
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=0;
+ REPLACE_MBTOWC=0;
+ REPLACE_MKOSTEMP=0;
+ REPLACE_MKOSTEMPS=0;
+ REPLACE_MKSTEMP=0;
+ REPLACE_POSIX_MEMALIGN=0;
+ REPLACE_POSIX_OPENPT=0;
+ REPLACE_PTSNAME=0;
+ REPLACE_PTSNAME_R=0;
+ REPLACE_PUTENV=0;
+ REPLACE_QSORT_R=0;
+ REPLACE_RANDOM=0;
+ REPLACE_RANDOM_R=0;
+ REPLACE_REALLOC_FOR_REALLOC_GNU=0;
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=0;
+ REPLACE_REALLOCARRAY=0;
+ REPLACE_REALPATH=0;
+ REPLACE_SETENV=0;
+ REPLACE_SETSTATE=0;
+ REPLACE_STRTOD=0;
+ REPLACE_STRTOL=0;
+ REPLACE_STRTOLD=0;
+ REPLACE_STRTOLL=0;
+ REPLACE_STRTOUL=0;
+ REPLACE_STRTOULL=0;
+ REPLACE_UNSETENV=0;
+ REPLACE_WCTOMB=0;
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc is ptrdiff_t safe" >&5
+printf %s "checking whether malloc is ptrdiff_t safe... " >&6; }
+if test ${gl_cv_malloc_ptrdiff+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdint.h>
+
+int
+main (void)
+{
+/* 64-bit ptrdiff_t is so wide that no practical platform
+ can exceed it. */
+ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0)
+
+ /* On rare machines where size_t fits in ptrdiff_t there
+ is no problem. */
+ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
+
+ /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t
+ bounds even on 32-bit platforms. We don't know which
+ non-glibc systems are safe. */
+ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__))
+
+ #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
+ return 0;
+ #else
+ #error "malloc might not be ptrdiff_t safe"
+ syntax error
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_malloc_ptrdiff=yes
+else $as_nop
+ gl_cv_malloc_ptrdiff=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_malloc_ptrdiff" >&5
+printf "%s\n" "$gl_cv_malloc_ptrdiff" >&6; }
+
+
+
+
+ test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc set errno on failure" >&5
+printf %s "checking whether malloc, realloc, calloc set errno on failure... " >&6; }
+if test ${gl_cv_func_malloc_posix+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_malloc_posix=no ;;
+ irix* | solaris*)
+
+ gl_cv_func_malloc_posix=no ;;
+ *)
+ gl_cv_func_malloc_posix=yes ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5
+printf "%s\n" "$gl_cv_func_malloc_posix" >&6; }
+
+
+
+
+
+ if test "$gl_cv_func_malloc_posix" = yes; then
+
+printf "%s\n" "#define HAVE_MALLOC_POSIX 1" >>confdefs.h
+
+ else
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+ fi
+
+
+
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=1
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
+printf %s "checking whether lstat correctly handles trailing slash... " >&6; }
+if test ${gl_cv_func_lstat_dereferences_slashed_symlink+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest.sym conftest.file
+ echo >conftest.file
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ linux-* | linux)
+ # Guess yes on Linux systems.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ midipix*)
+ # Guess yes on systems that emulate the Linux system calls.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ *-gnu* | gnu*)
+ # Guess yes on glibc systems.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ mingw*)
+ # Guess no on native Windows.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
+ *)
+ # If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+struct stat sbuf;
+ if (symlink ("conftest.file", "conftest.sym") != 0)
+ return 1;
+ /* Linux will dereference the symlink and fail, as required by
+ POSIX. That is better in the sense that it means we will not
+ have to compile and use the lstat wrapper. */
+ return lstat ("conftest.sym/", &sbuf) == 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_lstat_dereferences_slashed_symlink=yes
+else $as_nop
+ gl_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.sym conftest.file
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5
+printf "%s\n" "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+ case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
+ *yes)
+
+printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_save_CFLAGS=$CFLAGS
+ ac_cv_c_undeclared_builtin_options='cannot detect'
+ for ac_arg in '' -fno-builtin; do
+ CFLAGS="$ac_save_CFLAGS $ac_arg"
+ # This test program should *not* compile successfully.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+(void) strchr;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+ # This test program should compile successfully.
+ # No library function is consistently available on
+ # freestanding implementations, so test against a dummy
+ # declaration. Include always-available headers on the
+ # off chance that they somehow elicit warnings.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+ (void) ac_decl;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if test x"$ac_arg" = x
+then :
+ ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+ ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ done
+ CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+ case $ac_cv_c_undeclared_builtin_options in #(
+ 'cannot detect') :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+ 'none needed') :
+ ac_c_undeclared_builtin_options='' ;; #(
+ *) :
+ ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5
+printf %s "checking whether // is distinct from /... " >&6; }
+if test ${gl_cv_double_slash_root+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test x"$cross_compiling" = xyes ; then
+ # When cross-compiling, there is no way to tell whether // is special
+ # short of a list of hosts. However, the only known hosts to date
+ # that have a distinct // are Apollo DomainOS (too old to port to),
+ # Cygwin, and z/OS. If anyone knows of another system for which // has
+ # special semantics and is distinct from /, please report it to
+ # <bug-gnulib@gnu.org>.
+ case $host in
+ *-cygwin | i370-ibm-openedition)
+ gl_cv_double_slash_root=yes ;;
+ *)
+ # Be optimistic and assume that / and // are the same when we
+ # don't know.
+ gl_cv_double_slash_root='unknown, assuming no' ;;
+ esac
+ else
+ set x `ls -di / // 2>/dev/null`
+ if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+ gl_cv_double_slash_root=no
+ else
+ gl_cv_double_slash_root=yes
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5
+printf "%s\n" "$gl_cv_double_slash_root" >&6; }
+ if test "$gl_cv_double_slash_root" = yes; then
+
+printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5
+printf %s "checking whether realpath works... " >&6; }
+if test ${gl_cv_func_realpath_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ rm -rf conftest.a conftest.d
+ touch conftest.a
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.a conftest.l
+ fi
+ mkdir conftest.d
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
+ # Guess 'nearly' on musl systems.
+ *-musl*) gl_cv_func_realpath_works="guessing nearly" ;;
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_realpath_works="guessing no" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_realpath_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X. */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens. */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+ EXC_BAD_ACCESS. */
+static void *
+mach_exception_thread (void *arg)
+{
+ /* Buffer for a message to be received. */
+ struct {
+ mach_msg_header_t head;
+ mach_msg_body_t msgh_body;
+ char data[1024];
+ } msg;
+ mach_msg_return_t retval;
+ /* Wait for a message on the exception port. */
+ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+ our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+ if (retval != MACH_MSG_SUCCESS)
+ abort ();
+ exit (1);
+}
+static void
+nocrash_init (void)
+{
+ mach_port_t self = mach_task_self ();
+ /* Allocate a port on which the thread shall listen for exceptions. */
+ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+ == KERN_SUCCESS) {
+ /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */
+ if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+ MACH_MSG_TYPE_MAKE_SEND)
+ == KERN_SUCCESS) {
+ /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting
+ for us. */
+ exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+ /* Create the thread listening on the exception port. */
+ pthread_attr_t attr;
+ pthread_t thread;
+ if (pthread_attr_init (&attr) == 0
+ && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+ && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+ pthread_attr_destroy (&attr);
+ /* Replace the exception port info for these exceptions with our own.
+ Note that we replace the exception port for the entire task, not only
+ for a particular thread. This has the effect that when our exception
+ port gets the message, the thread specific exception port has already
+ been asked, and we don't need to bother about it.
+ See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */
+ task_set_exception_ports (self, mask, our_exception_port,
+ EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+ }
+ }
+ }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows. */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+ switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+ case EXCEPTION_IN_PAGE_ERROR:
+ case EXCEPTION_STACK_OVERFLOW:
+ case EXCEPTION_GUARD_PAGE:
+ case EXCEPTION_PRIV_INSTRUCTION:
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ case EXCEPTION_DATATYPE_MISALIGNMENT:
+ case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+ case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+ exit (1);
+ }
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+ SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems. */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler. */
+static void
+exception_handler (int sig)
+{
+ _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+ signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+ signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+int
+main (void)
+{
+
+ int result = 0;
+ /* This test fails on Solaris 10. */
+ {
+ char *name = realpath ("conftest.a", NULL);
+ if (!(name && *name == '/'))
+ result |= 1;
+ free (name);
+ }
+ /* This test fails on older versions of Cygwin. */
+ {
+ char *name = realpath ("conftest.b/../conftest.a", NULL);
+ if (name != NULL)
+ result |= 2;
+ free (name);
+ }
+ /* This test fails on Cygwin 2.9. */
+ #if HAVE_LSTAT
+ {
+ char *name = realpath ("conftest.l/../conftest.a", NULL);
+ if (name != NULL || errno != ENOTDIR)
+ result |= 4;
+ free (name);
+ }
+ #endif
+ /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */
+ {
+ char *name = realpath ("conftest.a/", NULL);
+ if (name != NULL)
+ result |= 8;
+ free (name);
+ }
+ /* This test fails on AIX 7, Solaris 10. */
+ {
+ char *name1 = realpath (".", NULL);
+ char *name2 = realpath ("conftest.d//./..", NULL);
+ if (! name1 || ! name2 || strcmp (name1, name2))
+ result |= 16;
+ free (name1);
+ free (name2);
+ }
+ #ifdef __linux__
+ /* On Linux, // is the same as /. See also double-slash-root.m4.
+ realpath() should respect this.
+ This test fails on musl libc 1.2.2. */
+ {
+ char *name = realpath ("//", NULL);
+ if (! name || strcmp (name, "/"))
+ result |= 32;
+ free (name);
+ }
+ #endif
+ return result;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_realpath_works=yes
+else $as_nop
+ case $? in
+ 32) gl_cv_func_realpath_works=nearly ;;
+ *) gl_cv_func_realpath_works=no ;;
+ esac
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -rf conftest.a conftest.l conftest.d
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5
+printf "%s\n" "$gl_cv_func_realpath_works" >&6; }
+ case "$gl_cv_func_realpath_works" in
+ *yes)
+
+printf "%s\n" "#define FUNC_REALPATH_WORKS 1" >>confdefs.h
+
+ ;;
+ *nearly)
+
+printf "%s\n" "#define FUNC_REALPATH_NEARLY_WORKS 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for faccessat" >&5
+printf %s "checking for faccessat... " >&6; }
+if test ${gl_cv_onwards_func_faccessat+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "faccessat" "ac_cv_have_decl_faccessat" "#include <unistd.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_faccessat" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_faccessat = yes; then
+ ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat"
+if test "x$ac_cv_func_faccessat" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_faccessat = yes; then
+ gl_cv_onwards_func_faccessat=yes
+ else
+ gl_cv_onwards_func_faccessat='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_faccessat='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat"
+if test "x$ac_cv_func_faccessat" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_faccessat=$ac_cv_func_faccessat
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_faccessat" >&5
+printf "%s\n" "$gl_cv_onwards_func_faccessat" >&6; }
+
+ case "$gl_cv_onwards_func_faccessat" in
+ future*) ac_cv_func_faccessat=no ;;
+ *) ac_cv_func_faccessat=$gl_cv_onwards_func_faccessat ;;
+ esac
+ if test $ac_cv_func_faccessat = yes; then
+
+printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h
+
+ fi
+
+
+
+
+ case "$host_os" in
+ mingw*) ;;
+ *) ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
+if test "x$ac_cv_func_getcwd" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h
+
+fi
+ ;;
+ esac
+
+
+
+
+
+
+ HAVE_CHOWN=1;
+ HAVE_COPY_FILE_RANGE=1;
+ HAVE_DUP3=1;
+ HAVE_EUIDACCESS=1;
+ HAVE_EXECVPE=1;
+ HAVE_FACCESSAT=1;
+ HAVE_FCHDIR=1;
+ HAVE_FCHOWNAT=1;
+ HAVE_FDATASYNC=1;
+ HAVE_FSYNC=1;
+ HAVE_FTRUNCATE=1;
+ HAVE_GETDTABLESIZE=1;
+ HAVE_GETENTROPY=1;
+ HAVE_GETGROUPS=1;
+ HAVE_GETHOSTNAME=1;
+ HAVE_GETLOGIN=1;
+ HAVE_GETPAGESIZE=1;
+ HAVE_GETPASS=1;
+ HAVE_GROUP_MEMBER=1;
+ HAVE_LCHOWN=1;
+ HAVE_LINK=1;
+ HAVE_LINKAT=1;
+ HAVE_PIPE=1;
+ HAVE_PIPE2=1;
+ HAVE_PREAD=1;
+ HAVE_PWRITE=1;
+ HAVE_READLINK=1;
+ HAVE_READLINKAT=1;
+ HAVE_SETHOSTNAME=1;
+ HAVE_SLEEP=1;
+ HAVE_SYMLINK=1;
+ HAVE_SYMLINKAT=1;
+ HAVE_UNLINKAT=1;
+ HAVE_USLEEP=1;
+ HAVE_DECL_ENVIRON=1;
+ HAVE_DECL_EXECVPE=1;
+ HAVE_DECL_FCHDIR=1;
+ HAVE_DECL_FDATASYNC=1;
+ HAVE_DECL_GETDOMAINNAME=1;
+ HAVE_DECL_GETLOGIN=1;
+ HAVE_DECL_GETLOGIN_R=1;
+ HAVE_DECL_GETPAGESIZE=1;
+ HAVE_DECL_GETUSERSHELL=1;
+ HAVE_DECL_SETHOSTNAME=1;
+ HAVE_DECL_TRUNCATE=1;
+ HAVE_DECL_TTYNAME_R=1;
+ HAVE_OS_H=0;
+ HAVE_SYS_PARAM_H=0;
+ REPLACE_ACCESS=0;
+ REPLACE_CHOWN=0;
+ REPLACE_CLOSE=0;
+ REPLACE_COPY_FILE_RANGE=0;
+ REPLACE_DUP=0;
+ REPLACE_DUP2=0;
+ REPLACE_DUP3=0;
+ REPLACE_EXECL=0;
+ REPLACE_EXECLE=0;
+ REPLACE_EXECLP=0;
+ REPLACE_EXECV=0;
+ REPLACE_EXECVE=0;
+ REPLACE_EXECVP=0;
+ REPLACE_EXECVPE=0;
+ REPLACE_FACCESSAT=0;
+ REPLACE_FCHOWNAT=0;
+ REPLACE_FDATASYNC=0;
+ REPLACE_FTRUNCATE=0;
+ REPLACE_GETCWD=0;
+ REPLACE_GETDOMAINNAME=0;
+ REPLACE_GETDTABLESIZE=0;
+ REPLACE_GETENTROPY=0;
+ REPLACE_GETLOGIN_R=0;
+ REPLACE_GETGROUPS=0;
+ REPLACE_GETPAGESIZE=0;
+ REPLACE_GETPASS=0;
+ REPLACE_GETPASS_FOR_GETPASS_GNU=0;
+ REPLACE_ISATTY=0;
+ REPLACE_LCHOWN=0;
+ REPLACE_LINK=0;
+ REPLACE_LINKAT=0;
+ REPLACE_LSEEK=0;
+ REPLACE_PIPE2=0;
+ REPLACE_PREAD=0;
+ REPLACE_PWRITE=0;
+ REPLACE_READ=0;
+ REPLACE_READLINK=0;
+ REPLACE_READLINKAT=0;
+ REPLACE_RMDIR=0;
+ REPLACE_SETHOSTNAME=0;
+ REPLACE_SLEEP=0;
+ REPLACE_SYMLINK=0;
+ REPLACE_SYMLINKAT=0;
+ REPLACE_TRUNCATE=0;
+ REPLACE_TTYNAME_R=0;
+ REPLACE_UNLINK=0;
+ REPLACE_UNLINKAT=0;
+ REPLACE_USLEEP=0;
+ REPLACE_WRITE=0;
+ UNISTD_H_HAVE_SYS_RANDOM_H=0;
+ UNISTD_H_HAVE_WINSOCK2_H=0;
+ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+
+
+
+
+
+ if test $ac_cv_func__set_invalid_parameter_handler = yes; then
+ HAVE_MSVC_INVALID_PARAMETER_HANDLER=1
+
+printf "%s\n" "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h
+
+ else
+ HAVE_MSVC_INVALID_PARAMETER_HANDLER=0
+ fi
+
+
+
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=0;
+ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+
+ REPLACE_IOCTL=0;
+
+
+
+
+ GL_GNULIB_ACCESS=0
+
+
+
+ GL_GNULIB_CHDIR=0
+
+
+
+ GL_GNULIB_CHOWN=0
+
+
+
+ GL_GNULIB_CLOSE=0
+
+
+
+ GL_GNULIB_COPY_FILE_RANGE=0
+
+
+
+ GL_GNULIB_DUP=0
+
+
+
+ GL_GNULIB_DUP2=0
+
+
+
+ GL_GNULIB_DUP3=0
+
+
+
+ GL_GNULIB_ENVIRON=0
+
+
+
+ GL_GNULIB_EUIDACCESS=0
+
+
+
+ GL_GNULIB_EXECL=0
+
+
+
+ GL_GNULIB_EXECLE=0
+
+
+
+ GL_GNULIB_EXECLP=0
+
+
+
+ GL_GNULIB_EXECV=0
+
+
+
+ GL_GNULIB_EXECVE=0
+
+
+
+ GL_GNULIB_EXECVP=0
+
+
+
+ GL_GNULIB_EXECVPE=0
+
+
+
+ GL_GNULIB_FACCESSAT=0
+
+
+
+ GL_GNULIB_FCHDIR=0
+
+
+
+ GL_GNULIB_FCHOWNAT=0
+
+
+
+ GL_GNULIB_FDATASYNC=0
+
+
+
+ GL_GNULIB_FSYNC=0
+
+
+
+ GL_GNULIB_FTRUNCATE=0
+
+
+
+ GL_GNULIB_GETCWD=0
+
+
+
+ GL_GNULIB_GETDOMAINNAME=0
+
+
+
+ GL_GNULIB_GETDTABLESIZE=0
+
+
+
+ GL_GNULIB_GETENTROPY=0
+
+
+
+ GL_GNULIB_GETGROUPS=0
+
+
+
+ GL_GNULIB_GETHOSTNAME=0
+
+
+
+ GL_GNULIB_GETLOGIN=0
+
+
+
+ GL_GNULIB_GETLOGIN_R=0
+
+
+
+ GL_GNULIB_GETOPT_POSIX=0
+
+
+
+ GL_GNULIB_GETPAGESIZE=0
+
+
+
+ GL_GNULIB_GETPASS=0
+
+
+
+ GL_GNULIB_GETPASS_GNU=0
+
+
+
+ GL_GNULIB_GETUSERSHELL=0
+
+
+
+ GL_GNULIB_GROUP_MEMBER=0
+
+
+
+ GL_GNULIB_ISATTY=0
+
+
+
+ GL_GNULIB_LCHOWN=0
+
+
+
+ GL_GNULIB_LINK=0
+
+
+
+ GL_GNULIB_LINKAT=0
+
+
+
+ GL_GNULIB_LSEEK=0
+
+
+
+ GL_GNULIB_PIPE=0
+
+
+
+ GL_GNULIB_PIPE2=0
+
+
+
+ GL_GNULIB_PREAD=0
+
+
+
+ GL_GNULIB_PWRITE=0
+
+
+
+ GL_GNULIB_READ=0
+
+
+
+ GL_GNULIB_READLINK=0
+
+
+
+ GL_GNULIB_READLINKAT=0
+
+
+
+ GL_GNULIB_RMDIR=0
+
+
+
+ GL_GNULIB_SETHOSTNAME=0
+
+
+
+ GL_GNULIB_SLEEP=0
+
+
+
+ GL_GNULIB_SYMLINK=0
+
+
+
+ GL_GNULIB_SYMLINKAT=0
+
+
+
+ GL_GNULIB_TRUNCATE=0
+
+
+
+ GL_GNULIB_TTYNAME_R=0
+
+
+
+ GL_GNULIB_UNISTD_H_GETOPT=0
+
+
+
+ GL_GNULIB_UNISTD_H_NONBLOCKING=0
+
+
+
+ GL_GNULIB_UNISTD_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_UNLINK=0
+
+
+
+ GL_GNULIB_UNLINKAT=0
+
+
+
+ GL_GNULIB_USLEEP=0
+
+
+
+ GL_GNULIB_WRITE=0
+
+
+
+ GL_GNULIB_MDA_ACCESS=1
+
+
+
+ GL_GNULIB_MDA_CHDIR=1
+
+
+
+ GL_GNULIB_MDA_CLOSE=1
+
+
+
+ GL_GNULIB_MDA_DUP=1
+
+
+
+ GL_GNULIB_MDA_DUP2=1
+
+
+
+ GL_GNULIB_MDA_EXECL=1
+
+
+
+ GL_GNULIB_MDA_EXECLE=1
+
+
+
+ GL_GNULIB_MDA_EXECLP=1
+
+
+
+ GL_GNULIB_MDA_EXECV=1
+
+
+
+ GL_GNULIB_MDA_EXECVE=1
+
+
+
+ GL_GNULIB_MDA_EXECVP=1
+
+
+
+ GL_GNULIB_MDA_EXECVPE=1
+
+
+
+ GL_GNULIB_MDA_GETCWD=1
+
+
+
+ GL_GNULIB_MDA_GETPID=1
+
+
+
+ GL_GNULIB_MDA_ISATTY=1
+
+
+
+ GL_GNULIB_MDA_LSEEK=1
+
+
+
+ GL_GNULIB_MDA_READ=1
+
+
+
+ GL_GNULIB_MDA_RMDIR=1
+
+
+
+ GL_GNULIB_MDA_SWAB=1
+
+
+
+ GL_GNULIB_MDA_UNLINK=1
+
+
+
+ GL_GNULIB_MDA_WRITE=1
+
+
+
+
+ if test "x$lispdir" = x; then
+ lispdir='${datarootdir}/emacs/site-lisp'
+
+ fi
+ if test "x$runstatedir" = x; then
+ runstatedir='${localstatedir}/run'
+
+ fi
+
+ pkgdatadir='${datadir}/${PACKAGE}'
+
+ pkgincludedir='${includedir}/${PACKAGE}'
+
+ pkglibdir='${libdir}/${PACKAGE}'
+
+ pkglibexecdir='${libexecdir}/${PACKAGE}'
+
+
+
+ gl_sed_double_backslashes='s/\\/\\\\/g'
+ gl_sed_escape_doublequotes='s/"/\\"/g'
+ gl_sed_escape_for_make_1="s,\\([ \"&'();<>\\\\\`|]\\),\\\\\\1,g"
+ gl_sed_escape_for_make_2='s,\$,\\$$,g'
+
+gl_mda_defines='
+#if defined _WIN32 && !defined __CYGWIN__
+#define access _access
+#define chdir _chdir
+#define chmod _chmod
+#define close _close
+#define creat _creat
+#define dup _dup
+#define dup2 _dup2
+#define ecvt _ecvt
+#define execl _execl
+#define execle _execle
+#define execlp _execlp
+#define execv _execv
+#define execve _execve
+#define execvp _execvp
+#define execvpe _execvpe
+#define fcloseall _fcloseall
+#define fcvt _fcvt
+#define fdopen _fdopen
+#define fileno _fileno
+#define gcvt _gcvt
+#define getcwd _getcwd
+#define getpid _getpid
+#define getw _getw
+#define isatty _isatty
+#define j0 _j0
+#define j1 _j1
+#define jn _jn
+#define lfind _lfind
+#define lsearch _lsearch
+#define lseek _lseek
+#define memccpy _memccpy
+#define mkdir _mkdir
+#define mktemp _mktemp
+#define open _open
+#define putenv _putenv
+#define putw _putw
+#define read _read
+#define rmdir _rmdir
+#define strdup _strdup
+#define swab _swab
+#define tempnam _tempnam
+#define tzset _tzset
+#define umask _umask
+#define unlink _unlink
+#define utime _utime
+#define wcsdup _wcsdup
+#define write _write
+#define y0 _y0
+#define y1 _y1
+#define yn _yn
+#endif
+'
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5
+printf %s "checking for complete errno.h... " >&6; }
+if test ${gl_cv_header_errno_h_complete+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
+#endif
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "booboo" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_complete=no
+else $as_nop
+ gl_cv_header_errno_h_complete=yes
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5
+printf "%s\n" "$gl_cv_header_errno_h_complete" >&6; }
+ if test $gl_cv_header_errno_h_complete = yes; then
+ GL_GENERATE_ERRNO_H=false
+ else
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_errno_h='<'errno.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5
+printf %s "checking absolute name of <errno.h>... " >&6; }
+if test ${gl_cv_next_errno_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'errno.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_errno_h
+ gl_cv_next_errno_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5
+printf "%s\n" "$gl_cv_next_errno_h" >&6; }
+ fi
+ NEXT_ERRNO_H=$gl_cv_next_errno_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'errno.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_errno_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive
+
+
+
+
+ GL_GENERATE_ERRNO_H=true
+ fi
+
+ if $GL_GENERATE_ERRNO_H; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5
+printf %s "checking for EMULTIHOP value... " >&6; }
+if test ${gl_cv_header_errno_h_EMULTIHOP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_EMULTIHOP=yes
+else $as_nop
+ gl_cv_header_errno_h_EMULTIHOP=no
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_EMULTIHOP = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_EMULTIHOP=hidden
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then
+ if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug. */
+#include <stdio.h>
+#include <stdlib.h>
+"
+then :
+
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5
+printf "%s\n" "$gl_cv_header_errno_h_EMULTIHOP" >&6; }
+ case $gl_cv_header_errno_h_EMULTIHOP in
+ yes | no)
+ EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE=
+ ;;
+ *)
+ EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP"
+ ;;
+ esac
+
+
+ fi
+
+
+ if $GL_GENERATE_ERRNO_H; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5
+printf %s "checking for ENOLINK value... " >&6; }
+if test ${gl_cv_header_errno_h_ENOLINK+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#ifdef ENOLINK
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_ENOLINK=yes
+else $as_nop
+ gl_cv_header_errno_h_ENOLINK=no
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_ENOLINK = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ENOLINK
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_ENOLINK=hidden
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_ENOLINK = hidden; then
+ if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug. */
+#include <stdio.h>
+#include <stdlib.h>
+"
+then :
+
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5
+printf "%s\n" "$gl_cv_header_errno_h_ENOLINK" >&6; }
+ case $gl_cv_header_errno_h_ENOLINK in
+ yes | no)
+ ENOLINK_HIDDEN=0; ENOLINK_VALUE=
+ ;;
+ *)
+ ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK"
+ ;;
+ esac
+
+
+ fi
+
+
+ if $GL_GENERATE_ERRNO_H; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5
+printf %s "checking for EOVERFLOW value... " >&6; }
+if test ${gl_cv_header_errno_h_EOVERFLOW+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_EOVERFLOW=yes
+else $as_nop
+ gl_cv_header_errno_h_EOVERFLOW=no
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_EOVERFLOW = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "yes" >/dev/null 2>&1
+then :
+ gl_cv_header_errno_h_EOVERFLOW=hidden
+fi
+rm -rf conftest*
+
+ if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then
+ if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug. */
+#include <stdio.h>
+#include <stdlib.h>
+"
+then :
+
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5
+printf "%s\n" "$gl_cv_header_errno_h_EOVERFLOW" >&6; }
+ case $gl_cv_header_errno_h_EOVERFLOW in
+ yes | no)
+ EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE=
+ ;;
+ *)
+ EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW"
+ ;;
+ esac
+
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_error_h='<'error.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <error.h>" >&5
+printf %s "checking absolute name of <error.h>... " >&6; }
+if test ${gl_cv_next_error_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_error_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <error.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'error.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_error_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_error_h
+ gl_cv_next_error_h='"'$gl_header'"'
+ else
+ gl_cv_next_error_h='<'error.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_error_h" >&5
+printf "%s\n" "$gl_cv_next_error_h" >&6; }
+ fi
+ NEXT_ERROR_H=$gl_cv_next_error_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'error.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_error_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_ERROR_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_error_h = yes; then
+ HAVE_ERROR_H=1
+ else
+ HAVE_ERROR_H=0
+ fi
+
+
+ REPLACE_ERROR=0
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error" >&5
+printf %s "checking for error... " >&6; }
+if test ${gl_cv_onwards_func_error+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "error" "ac_cv_have_decl_error" "#include <error.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_error" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_error = yes; then
+ ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error"
+if test "x$ac_cv_func_error" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_error = yes; then
+ gl_cv_onwards_func_error=yes
+ else
+ gl_cv_onwards_func_error='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_error='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error"
+if test "x$ac_cv_func_error" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_error=$ac_cv_func_error
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_error" >&5
+printf "%s\n" "$gl_cv_onwards_func_error" >&6; }
+
+ case "$gl_cv_onwards_func_error" in
+ future*) ac_cv_func_error=no ;;
+ *) ac_cv_func_error=$gl_cv_onwards_func_error ;;
+ esac
+ if test $ac_cv_func_error = yes; then
+
+printf "%s\n" "#define HAVE_ERROR 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_error = yes; then
+ HAVE_ERROR=1
+ else
+ HAVE_ERROR=0
+ case "$gl_cv_onwards_func_error" in
+ future*) REPLACE_ERROR=1 ;;
+ esac
+ fi
+
+ ac_fn_check_decl "$LINENO" "error_at_line" "ac_cv_have_decl_error_at_line" "#include <error.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_error_at_line" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_error_at_line = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
+printf %s "checking for error_at_line... " >&6; }
+if test ${ac_cv_lib_error_at_line+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <error.h>
+int
+main (void)
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_error_at_line=yes
+else $as_nop
+ ac_cv_lib_error_at_line=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
+printf "%s\n" "$ac_cv_lib_error_at_line" >&6; }
+ else
+ ac_cv_lib_error_at_line=no
+ fi
+ if test $ac_cv_lib_error_at_line = yes; then
+ HAVE_ERROR_AT_LINE=1
+ else
+ HAVE_ERROR_AT_LINE=0
+ fi
+ REPLACE_ERROR_AT_LINE=0
+
+ if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working error function" >&5
+printf %s "checking for working error function... " >&6; }
+if test ${gl_cv_func_working_error+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $cross_compiling != yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <error.h>
+ static void print_no_progname (void) {}
+
+int
+main (void)
+{
+
+ error_print_progname = print_no_progname;
+ error (0, 0, "foo");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ rm -f conftest.out
+ if test -s conftest$ac_exeext \
+ && ./conftest$ac_exeext 2> conftest.out; then
+ if grep ' ' conftest.out >/dev/null; then
+ gl_cv_func_working_error=no
+ else
+ gl_cv_func_working_error=yes
+ fi
+ else
+ gl_cv_func_working_error=no
+ fi
+ rm -f conftest.out
+
+else $as_nop
+ gl_cv_func_working_error=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <error.h>
+
+int
+main (void)
+{
+
+ error (0, 0, "foo");
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_working_error="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_error="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ gl_cv_func_working_error=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_error" >&5
+printf "%s\n" "$gl_cv_func_working_error" >&6; }
+ case "$gl_cv_func_working_error" in
+ *no)
+ REPLACE_ERROR=1
+ REPLACE_ERROR_AT_LINE=1
+ ;;
+ esac
+ fi
+
+ if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \
+ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then
+ GL_GENERATE_ERROR_H=true
+ else
+ GL_GENERATE_ERROR_H=false
+ fi
+
+
+
+
+
+
+ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strerror_r" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h
+
+
+if test $ac_cv_have_decl_strerror_r = yes; then
+ # For backward compatibility's sake, define HAVE_STRERROR_R.
+ # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well
+ # as AC_CHECK_DECLS_ONCE.)
+
+printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+printf %s "checking whether strerror_r returns char *... " >&6; }
+if test ${ac_cv_func_strerror_r_char_p+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ac_cv_func_strerror_r_char_p=no
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+int
+main (void)
+{
+
+ char buf[100];
+ char x = *strerror_r (0, buf, sizeof buf);
+ char *p = strerror_r (0, buf, sizeof buf);
+ return !p || x;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_func_strerror_r_char_p=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h
+
+fi
+
+
+ XGETTEXT_EXTRA_OPTIONS=
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctype.h defines __header_inline" >&5
+printf %s "checking whether ctype.h defines __header_inline... " >&6; }
+if test ${gl_cv_have___header_inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+ #ifndef __header_inline
+ #error "<ctype.h> does not define __header_inline"
+ #endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ gl_cv_have___header_inline=yes
+else $as_nop
+ gl_cv_have___header_inline=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have___header_inline" >&5
+printf "%s\n" "$gl_cv_have___header_inline" >&6; }
+ if test "$gl_cv_have___header_inline" = yes; then
+
+printf "%s\n" "#define HAVE___HEADER_INLINE 1" >>confdefs.h
+
+ fi
+
+
+
+
+ HAVE_FCNTL=1;
+ HAVE_OPENAT=1;
+ REPLACE_CREAT=0;
+ REPLACE_FCNTL=0;
+ REPLACE_OPEN=0;
+ REPLACE_OPENAT=0;
+
+
+
+
+ GL_GNULIB_CREAT=0
+
+
+
+ GL_GNULIB_FCNTL=0
+
+
+
+ GL_GNULIB_NONBLOCKING=0
+
+
+
+ GL_GNULIB_OPEN=0
+
+
+
+ GL_GNULIB_OPENAT=0
+
+
+
+ GL_GNULIB_MDA_CREAT=1
+
+
+
+ GL_GNULIB_MDA_OPEN=1
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
+printf %s "checking for working fcntl.h... " >&6; }
+if test ${gl_cv_header_working_fcntl_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess 'no' on native Windows.
+ mingw*) gl_cv_header_working_fcntl_h='no' ;;
+ *) gl_cv_header_working_fcntl_h=cross-compiling ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/stat.h>
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <io.h>
+ # include <stdlib.h>
+ # defined sleep(n) _sleep ((n) * 1000)
+ #endif
+ #include <fcntl.h>
+
+
+$gl_mda_defines
+
+ #ifndef O_NOATIME
+ #define O_NOATIME 0
+ #endif
+ #ifndef O_NOFOLLOW
+ #define O_NOFOLLOW 0
+ #endif
+ static int const constants[] =
+ {
+ O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+ O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+ };
+
+int
+main (void)
+{
+
+ int result = !constants;
+ #if HAVE_SYMLINK
+ {
+ static char const sym[] = "conftest.sym";
+ if (symlink ("/dev/null", sym) != 0)
+ result |= 2;
+ else
+ {
+ int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+ if (fd >= 0)
+ {
+ close (fd);
+ result |= 4;
+ }
+ }
+ if (unlink (sym) != 0 || symlink (".", sym) != 0)
+ result |= 2;
+ else
+ {
+ int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+ if (fd >= 0)
+ {
+ close (fd);
+ result |= 4;
+ }
+ }
+ unlink (sym);
+ }
+ #endif
+ {
+ static char const file[] = "confdefs.h";
+ int fd = open (file, O_RDONLY | O_NOATIME);
+ if (fd < 0)
+ result |= 8;
+ else
+ {
+ struct stat st0;
+ if (fstat (fd, &st0) != 0)
+ result |= 16;
+ else
+ {
+ char c;
+ sleep (1);
+ if (read (fd, &c, 1) != 1)
+ result |= 24;
+ else
+ {
+ if (close (fd) != 0)
+ result |= 32;
+ else
+ {
+ struct stat st1;
+ if (stat (file, &st1) != 0)
+ result |= 40;
+ else
+ if (st0.st_atime != st1.st_atime)
+ result |= 64;
+ }
+ }
+ }
+ }
+ }
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_header_working_fcntl_h=yes
+else $as_nop
+ case $? in #(
+ 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+ 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+ 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+ *) gl_cv_header_working_fcntl_h='no';;
+ esac
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
+printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; }
+
+ case $gl_cv_header_working_fcntl_h in #(
+ *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+ *) ac_val=1;;
+ esac
+
+printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h
+
+
+ case $gl_cv_header_working_fcntl_h in #(
+ *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+ *) ac_val=1;;
+ esac
+
+printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h
+
+
+
+ ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if defined _WIN64 && !defined __CYGWIN__
+ LLP64
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_pid_type='int'
+else $as_nop
+ ac_pid_type='__int64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define mode_t int" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_fcntl_h='<'fcntl.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5
+printf %s "checking absolute name of <fcntl.h>... " >&6; }
+if test ${gl_cv_next_fcntl_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'fcntl.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_fcntl_h
+ gl_cv_next_fcntl_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5
+printf "%s\n" "$gl_cv_next_fcntl_h" >&6; }
+ fi
+ NEXT_FCNTL_H=$gl_cv_next_fcntl_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'fcntl.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_fcntl_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HAVE_FCHMODAT=1;
+ HAVE_FSTATAT=1;
+ HAVE_FUTIMENS=1;
+ HAVE_GETUMASK=1;
+ HAVE_LCHMOD=1;
+ HAVE_LSTAT=1;
+ HAVE_MKDIRAT=1;
+ HAVE_MKFIFO=1;
+ HAVE_MKFIFOAT=1;
+ HAVE_MKNOD=1;
+ HAVE_MKNODAT=1;
+ HAVE_UTIMENSAT=1;
+ REPLACE_CHMOD=0;
+ REPLACE_FCHMODAT=0;
+ REPLACE_FSTAT=0;
+ REPLACE_FSTATAT=0;
+ REPLACE_FUTIMENS=0;
+ REPLACE_LSTAT=0;
+ REPLACE_MKDIR=0;
+ REPLACE_MKFIFO=0;
+ REPLACE_MKFIFOAT=0;
+ REPLACE_MKNOD=0;
+ REPLACE_MKNODAT=0;
+ REPLACE_STAT=0;
+ REPLACE_UTIMENSAT=0;
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
+printf %s "checking whether stat file-mode macros are broken... " >&6; }
+if test ${ac_cv_header_stat_broken+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined S_ISBLK && defined S_IFDIR
+extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
+#endif
+
+#if defined S_ISBLK && defined S_IFCHR
+extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
+#endif
+
+#if defined S_ISLNK && defined S_IFREG
+extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
+#endif
+
+#if defined S_ISSOCK && defined S_IFREG
+extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_header_stat_broken=no
+else $as_nop
+ ac_cv_header_stat_broken=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5
+printf "%s\n" "$ac_cv_header_stat_broken" >&6; }
+if test $ac_cv_header_stat_broken = yes; then
+
+printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h
+
+fi
+
+
+
+ case "$host_os" in
+ mingw*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5
+printf %s "checking for 64-bit off_t... " >&6; }
+if test ${gl_cv_type_off_t_64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_type_off_t_64=yes
+else $as_nop
+ gl_cv_type_off_t_64=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5
+printf "%s\n" "$gl_cv_type_off_t_64" >&6; }
+ if test $gl_cv_type_off_t_64 = no; then
+ WINDOWS_64_BIT_OFF_T=1
+ else
+ WINDOWS_64_BIT_OFF_T=0
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5
+printf %s "checking for 64-bit st_size... " >&6; }
+if test ${gl_cv_member_st_size_64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ struct stat buf;
+ int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_member_st_size_64=yes
+else $as_nop
+ gl_cv_member_st_size_64=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5
+printf "%s\n" "$gl_cv_member_st_size_64" >&6; }
+ if test $gl_cv_member_st_size_64 = no; then
+ WINDOWS_64_BIT_ST_SIZE=1
+ else
+ WINDOWS_64_BIT_ST_SIZE=0
+ fi
+ ;;
+ *)
+ WINDOWS_64_BIT_OFF_T=0
+ WINDOWS_64_BIT_ST_SIZE=0
+ ;;
+ esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+printf %s "checking for C/C++ restrict keyword... " >&6; }
+if test ${ac_cv_c_restrict+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_restrict=no
+ # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see:
+ # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html
+ # Put 'restrict' last, because C++ lacks it.
+ for ac_kw in __restrict__ __restrict _Restrict restrict; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int *int_ptr;
+ int foo (int_ptr $ac_kw ip) { return ip[0]; }
+ int bar (int [$ac_kw]); /* Catch GCC bug 14050. */
+ int bar (int ip[$ac_kw]) { return ip[0]; }
+
+int
+main (void)
+{
+int s[1];
+ int *$ac_kw t = s;
+ t[0] = 0;
+ return foo (t) + bar (t);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$ac_cv_c_restrict" != no && break
+ done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+printf "%s\n" "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) printf "%s\n" "#define restrict /**/" >>confdefs.h
+ ;;
+ *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5
+printf %s "checking absolute name of <sys/stat.h>... " >&6; }
+if test ${gl_cv_next_sys_stat_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_stat_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/stat.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/stat.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_stat_h
+ gl_cv_next_sys_stat_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_stat_h='<'sys/stat.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5
+printf "%s\n" "$gl_cv_next_sys_stat_h" >&6; }
+ fi
+ NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/stat.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_stat_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+ WINDOWS_STAT_TIMESPEC=0
+
+
+
+
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_type_nlink_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define nlink_t int" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+ case "$host_os" in
+ mingw*)
+ ac_fn_c_check_header_compile "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default"
+if test "x$ac_cv_header_sdkddkver_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SDKDDKVER_H 1" >>confdefs.h
+
+fi
+
+ ;;
+ esac
+
+
+
+
+
+
+
+ GL_GNULIB_CHMOD=0
+
+
+
+ GL_GNULIB_FCHMODAT=0
+
+
+
+ GL_GNULIB_FSTAT=0
+
+
+
+ GL_GNULIB_FSTATAT=0
+
+
+
+ GL_GNULIB_FUTIMENS=0
+
+
+
+ GL_GNULIB_GETUMASK=0
+
+
+
+ GL_GNULIB_LCHMOD=0
+
+
+
+ GL_GNULIB_LSTAT=0
+
+
+
+ GL_GNULIB_MKDIR=0
+
+
+
+ GL_GNULIB_MKDIRAT=0
+
+
+
+ GL_GNULIB_MKFIFO=0
+
+
+
+ GL_GNULIB_MKFIFOAT=0
+
+
+
+ GL_GNULIB_MKNOD=0
+
+
+
+ GL_GNULIB_MKNODAT=0
+
+
+
+ GL_GNULIB_STAT=0
+
+
+
+ GL_GNULIB_UTIMENSAT=0
+
+
+
+ GL_GNULIB_OVERRIDES_STRUCT_STAT=0
+
+
+
+ GL_GNULIB_MDA_CHMOD=1
+
+
+
+ GL_GNULIB_MDA_MKDIR=1
+
+
+
+ GL_GNULIB_MDA_UMASK=1
+
+
+
+
+
+ac_fn_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getdtablesize" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_GETDTABLESIZE $ac_have_decl" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_getopt_h='<'getopt.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5
+printf %s "checking absolute name of <getopt.h>... " >&6; }
+if test ${gl_cv_next_getopt_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_getopt_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <getopt.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'getopt.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_getopt_h
+ gl_cv_next_getopt_h='"'$gl_header'"'
+ else
+ gl_cv_next_getopt_h='<'getopt.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5
+printf "%s\n" "$gl_cv_next_getopt_h" >&6; }
+ fi
+ NEXT_GETOPT_H=$gl_cv_next_getopt_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'getopt.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_getopt_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_getopt_h = yes; then
+ HAVE_GETOPT_H=1
+ else
+ HAVE_GETOPT_H=0
+ fi
+
+
+ gl_replace_getopt=
+
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+ for ac_header in getopt.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default"
+if test "x$ac_cv_header_getopt_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h
+
+else $as_nop
+ gl_replace_getopt=yes
+fi
+
+done
+ fi
+
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+
+ for ac_func in getopt_long_only
+do :
+ ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only"
+if test "x$ac_cv_func_getopt_long_only" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETOPT_LONG_ONLY 1" >>confdefs.h
+
+else $as_nop
+ gl_replace_getopt=yes
+fi
+
+done
+ fi
+
+ if test -z "$gl_replace_getopt"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5
+printf %s "checking whether getopt is POSIX compatible... " >&6; }
+if test ${gl_cv_func_getopt_posix+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $cross_compiling = no; then
+ if test "$cross_compiling" = yes
+then :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char a[] = "-a";
+ static char foo[] = "foo";
+ static char bar[] = "bar";
+ char *argv[] = { program, a, foo, bar, NULL };
+ int c;
+
+ c = getopt (4, argv, "ab");
+ if (!(c == 'a'))
+ return 1;
+ c = getopt (4, argv, "ab");
+ if (!(c == -1))
+ return 2;
+ if (!(optind == 2))
+ return 3;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getopt_posix=maybe
+else $as_nop
+ gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ if test $gl_cv_func_getopt_posix = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char donald[] = "donald";
+ static char p[] = "-p";
+ static char billy[] = "billy";
+ static char duck[] = "duck";
+ static char a[] = "-a";
+ static char bar[] = "bar";
+ char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
+ int c;
+
+ c = getopt (7, argv, "+abp:q:");
+ if (!(c == -1))
+ return 4;
+ if (!(strcmp (argv[0], "program") == 0))
+ return 5;
+ if (!(strcmp (argv[1], "donald") == 0))
+ return 6;
+ if (!(strcmp (argv[2], "-p") == 0))
+ return 7;
+ if (!(strcmp (argv[3], "billy") == 0))
+ return 8;
+ if (!(strcmp (argv[4], "duck") == 0))
+ return 9;
+ if (!(strcmp (argv[5], "-a") == 0))
+ return 10;
+ if (!(strcmp (argv[6], "bar") == 0))
+ return 11;
+ if (!(optind == 1))
+ return 12;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getopt_posix=maybe
+else $as_nop
+ gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ if test $gl_cv_func_getopt_posix = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char ab[] = "-ab";
+ char *argv[3] = { program, ab, NULL };
+ if (getopt (2, argv, "ab:") != 'a')
+ return 13;
+ if (getopt (2, argv, "ab:") != '?')
+ return 14;
+ if (optopt != 'b')
+ return 15;
+ if (optind != 2)
+ return 16;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getopt_posix=yes
+else $as_nop
+ gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ else
+ case "$host_os" in
+ darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
+ *) gl_cv_func_getopt_posix="guessing yes";;
+ esac
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5
+printf "%s\n" "$gl_cv_func_getopt_posix" >&6; }
+ case "$gl_cv_func_getopt_posix" in
+ *no) gl_replace_getopt=yes ;;
+ esac
+ fi
+
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5
+printf %s "checking for working GNU getopt function... " >&6; }
+if test ${gl_cv_func_getopt_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+ # optstring is necessary for programs like m4 that have POSIX-mandated
+ # semantics for supporting options interspersed with files.
+ # Also, since getopt_long is a GNU extension, we require optind=0.
+ # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT;
+ # so take care to revert to the correct (non-)export state.
+ gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+ case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+ xx) gl_had_POSIXLY_CORRECT=exported ;;
+ x) gl_had_POSIXLY_CORRECT=yes ;;
+ *) gl_had_POSIXLY_CORRECT= ;;
+ esac
+ POSIXLY_CORRECT=1
+ export POSIXLY_CORRECT
+ if test "$cross_compiling" = yes
+then :
+ gl_cv_func_getopt_gnu="$gl_cross_guess_normal"
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <getopt.h>
+ #include <stddef.h>
+ #include <string.h>
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X. */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens. */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+ EXC_BAD_ACCESS. */
+static void *
+mach_exception_thread (void *arg)
+{
+ /* Buffer for a message to be received. */
+ struct {
+ mach_msg_header_t head;
+ mach_msg_body_t msgh_body;
+ char data[1024];
+ } msg;
+ mach_msg_return_t retval;
+ /* Wait for a message on the exception port. */
+ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+ our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+ if (retval != MACH_MSG_SUCCESS)
+ abort ();
+ exit (1);
+}
+static void
+nocrash_init (void)
+{
+ mach_port_t self = mach_task_self ();
+ /* Allocate a port on which the thread shall listen for exceptions. */
+ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+ == KERN_SUCCESS) {
+ /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */
+ if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+ MACH_MSG_TYPE_MAKE_SEND)
+ == KERN_SUCCESS) {
+ /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting
+ for us. */
+ exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+ /* Create the thread listening on the exception port. */
+ pthread_attr_t attr;
+ pthread_t thread;
+ if (pthread_attr_init (&attr) == 0
+ && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+ && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+ pthread_attr_destroy (&attr);
+ /* Replace the exception port info for these exceptions with our own.
+ Note that we replace the exception port for the entire task, not only
+ for a particular thread. This has the effect that when our exception
+ port gets the message, the thread specific exception port has already
+ been asked, and we don't need to bother about it.
+ See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */
+ task_set_exception_ports (self, mask, our_exception_port,
+ EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+ }
+ }
+ }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows. */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+ switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+ case EXCEPTION_IN_PAGE_ERROR:
+ case EXCEPTION_STACK_OVERFLOW:
+ case EXCEPTION_GUARD_PAGE:
+ case EXCEPTION_PRIV_INSTRUCTION:
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ case EXCEPTION_DATATYPE_MISALIGNMENT:
+ case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+ case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+ exit (1);
+ }
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+ SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems. */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler. */
+static void
+exception_handler (int sig)
+{
+ _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+ signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+ signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+
+int
+main (void)
+{
+
+ int result = 0;
+
+ nocrash_init();
+
+ /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+ and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+ OSF/1 5.1, Solaris 10. */
+ {
+ static char conftest[] = "conftest";
+ static char plus[] = "-+";
+ char *argv[3] = { conftest, plus, NULL };
+ opterr = 0;
+ if (getopt (2, argv, "+a") != '?')
+ result |= 1;
+ }
+ /* This code succeeds on glibc 2.8, mingw,
+ and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+ IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
+ {
+ static char program[] = "program";
+ static char p[] = "-p";
+ static char foo[] = "foo";
+ static char bar[] = "bar";
+ char *argv[] = { program, p, foo, bar, NULL };
+
+ optind = 1;
+ if (getopt (4, argv, "p::") != 'p')
+ result |= 2;
+ else if (optarg != NULL)
+ result |= 4;
+ else if (getopt (4, argv, "p::") != -1)
+ result |= 6;
+ else if (optind != 2)
+ result |= 8;
+ }
+ /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
+ {
+ static char program[] = "program";
+ static char foo[] = "foo";
+ static char p[] = "-p";
+ char *argv[] = { program, foo, p, NULL };
+ optind = 0;
+ if (getopt (3, argv, "-p") != 1)
+ result |= 16;
+ else if (getopt (3, argv, "-p") != 'p')
+ result |= 16;
+ }
+ /* This code fails on glibc 2.11. */
+ {
+ static char program[] = "program";
+ static char b[] = "-b";
+ static char a[] = "-a";
+ char *argv[] = { program, b, a, NULL };
+ optind = opterr = 0;
+ if (getopt (3, argv, "+:a:b") != 'b')
+ result |= 32;
+ else if (getopt (3, argv, "+:a:b") != ':')
+ result |= 32;
+ }
+ /* This code dumps core on glibc 2.14. */
+ {
+ static char program[] = "program";
+ static char w[] = "-W";
+ static char dummy[] = "dummy";
+ char *argv[] = { program, w, dummy, NULL };
+ optind = opterr = 1;
+ if (getopt (3, argv, "W;") != 'W')
+ result |= 64;
+ }
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getopt_gnu=yes
+else $as_nop
+ gl_cv_func_getopt_gnu=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ case $gl_had_POSIXLY_CORRECT in
+ exported) ;;
+ yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;;
+ *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5
+printf "%s\n" "$gl_cv_func_getopt_gnu" >&6; }
+ if test "$gl_cv_func_getopt_gnu" != yes; then
+ gl_replace_getopt=yes
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5
+printf %s "checking for working GNU getopt_long function... " >&6; }
+if test ${gl_cv_func_getopt_long_gnu+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ openbsd*) gl_cv_func_getopt_long_gnu="guessing no";;
+ *) gl_cv_func_getopt_long_gnu="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <getopt.h>
+ #include <stddef.h>
+ #include <string.h>
+
+int
+main (void)
+{
+static const struct option long_options[] =
+ {
+ { "xtremely-",no_argument, NULL, 1003 },
+ { "xtra", no_argument, NULL, 1001 },
+ { "xtreme", no_argument, NULL, 1002 },
+ { "xtremely", no_argument, NULL, 1003 },
+ { NULL, 0, NULL, 0 }
+ };
+ /* This code fails on OpenBSD 5.0. */
+ {
+ static char program[] = "program";
+ static char xtremel[] = "--xtremel";
+ char *argv[] = { program, xtremel, NULL };
+ int option_index;
+ optind = 1; opterr = 0;
+ if (getopt_long (2, argv, "", long_options, &option_index) != 1003)
+ return 1;
+ }
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getopt_long_gnu=yes
+else $as_nop
+ gl_cv_func_getopt_long_gnu=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5
+printf "%s\n" "$gl_cv_func_getopt_long_gnu" >&6; }
+ case "$gl_cv_func_getopt_long_gnu" in
+ *yes) ;;
+ *) gl_replace_getopt=yes ;;
+ esac
+ fi
+ fi
+
+
+
+
+ HAVE_GETRANDOM=1;
+ REPLACE_GETRANDOM=0;
+
+
+
+ GL_GNULIB_GETRANDOM=0
+
+
+
+
+
+
+
+ if test -z "$gl_pthreadlib_body_done"; then
+ gl_pthread_api=no
+ LIBPTHREAD=
+ LIBPMULTITHREAD=
+ # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+ # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
+ gl_have_pthread_h=yes
+else $as_nop
+ gl_have_pthread_h=no
+fi
+
+ if test "$gl_have_pthread_h" = yes; then
+ # Other possible tests:
+ # -lpthreads (FSU threads, PCthreads)
+ # -lgthreads
+ # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+ # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+ # the second one only in libpthread, and lock.c needs it.
+ #
+ # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+ # needs -pthread for some reason. See:
+ # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+ save_LIBS=$LIBS
+ for gl_pthread in '' '-pthread'; do
+ LIBS="$LIBS $gl_pthread"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ pthread_mutex_t m;
+ pthread_mutexattr_t ma;
+
+int
+main (void)
+{
+pthread_mutex_lock (&m);
+ pthread_mutexattr_init (&ma);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=$gl_pthread
+ LIBPMULTITHREAD=$gl_pthread
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$save_LIBS
+ test $gl_pthread_api = yes && break
+ done
+ echo "$as_me:14017: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:14018: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1
+then :
+ gl_pthread_in_glibc=yes
+fi
+rm -rf conftest*
+
+ ;;
+ esac
+ echo "$as_me:14044: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
+
+ # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+ # since it is defined as a macro on OSF/1.)
+ if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then
+ # The program links fine without libpthread. But it may actually
+ # need to link with libpthread in order to create multiple threads.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+
+printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+
+ esac
+ fi
+
+fi
+
+ elif test $gl_pthread_api != yes; then
+ # Some library is needed. Try libpthread and libc_r.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lpthread
+ LIBPMULTITHREAD=-lpthread
+fi
+
+ if test $gl_pthread_api != yes; then
+ # For FreeBSD 4.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
+printf %s "checking for pthread_kill in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc_r $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_c_r_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_c_r_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lc_r
+ LIBPMULTITHREAD=-lc_r
+fi
+
+ fi
+ fi
+ echo "$as_me:14198: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
+printf %s "checking whether POSIX threads API is available... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5
+printf "%s\n" "$gl_pthread_api" >&6; }
+
+
+ if test $gl_pthread_api = yes; then
+
+printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h
+
+ fi
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sched.h>
+int
+main (void)
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ SCHED_YIELD_LIB=
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
+printf %s "checking for sched_yield in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_rt_sched_yield=yes
+else $as_nop
+ ac_cv_lib_rt_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; }
+if test "x$ac_cv_lib_rt_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lrt
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5
+printf %s "checking for sched_yield in -lposix4... " >&6; }
+if test ${ac_cv_lib_posix4_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix4 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_posix4_sched_yield=yes
+else $as_nop
+ ac_cv_lib_posix4_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; }
+if test "x$ac_cv_lib_posix4_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lposix4
+fi
+
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+ LIB_SCHED_YIELD="$SCHED_YIELD_LIB"
+
+
+ gl_pthreadlib_body_done=done
+ fi
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5
+printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; }
+if test ${gl_cv_func_setlocale_null_all_mtsafe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku.
+ *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*)
+ gl_cv_func_setlocale_null_all_mtsafe=no ;;
+ # Guess no on Cygwin < 3.4.6.
+ cygwin*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6)
+ Lucky user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1
+then :
+ gl_cv_func_setlocale_null_all_mtsafe=yes
+else $as_nop
+ gl_cv_func_setlocale_null_all_mtsafe=no
+fi
+rm -rf conftest*
+
+ ;;
+ # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
+ *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
+ gl_cv_func_setlocale_null_all_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5
+printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; }
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_all_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_all_mtsafe" in
+ *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ALL_MTSAFE=0 ;;
+ esac
+
+printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5
+printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; }
+if test ${gl_cv_func_setlocale_null_one_mtsafe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ # Guess no on OpenBSD, AIX.
+ openbsd* | aix*)
+ gl_cv_func_setlocale_null_one_mtsafe=no ;;
+ # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
+ *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ gl_cv_func_setlocale_null_one_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5
+printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; }
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_one_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_one_mtsafe" in
+ *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ONE_MTSAFE=0 ;;
+ esac
+
+printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h
+
+
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ case "$host_os" in
+ mingw*) SETLOCALE_NULL_LIB= ;;
+ *)
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+printf %s "checking whether imported symbols can be declared weak... " >&6; }
+if test ${gl_cv_have_weak+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main (void)
+{
+xyzzy();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_have_weak=maybe
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
+ gl_cv_have_weak="guessing yes"
+else $as_nop
+ gl_cv_have_weak="guessing no"
+fi
+rm -rf conftest*
+
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+ return (fputs == NULL);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_have_weak=yes
+else $as_nop
+ gl_cv_have_weak=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ ;;
+ esac
+ case " $LDFLAGS " in
+ *" -static "*) gl_cv_have_weak=no ;;
+ esac
+ case "$gl_cv_have_weak" in
+ *yes)
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ : > conftest1.c
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
+ cat <<EOF > conftest2.c
+#include <pthread.h>
+#pragma weak pthread_mutexattr_gettype
+int main ()
+{
+ return (pthread_mutexattr_gettype != NULL);
+}
+EOF
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \
+ || gl_cv_have_weak=no
+ rm -f conftest1.c libempty.so conftest2.c conftest
+ ;;
+ esac
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+printf "%s\n" "$gl_cv_have_weak" >&6; }
+ case "$gl_cv_have_weak" in
+ *yes)
+
+printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
+
+ ;;
+ esac
+
+ case "$gl_cv_have_weak" in
+ *yes) SETLOCALE_NULL_LIB= ;;
+ *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;;
+ esac
+ ;;
+ esac
+ else
+ SETLOCALE_NULL_LIB=
+ fi
+
+ LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB"
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_limits_h='<'limits.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5
+printf %s "checking absolute name of <limits.h>... " >&6; }
+if test ${gl_cv_next_limits_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_limits_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'limits.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_limits_h
+ gl_cv_next_limits_h='"'$gl_header'"'
+ else
+ gl_cv_next_limits_h='<'limits.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5
+printf "%s\n" "$gl_cv_next_limits_h" >&6; }
+ fi
+ NEXT_LIMITS_H=$gl_cv_next_limits_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'limits.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_limits_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has WORD_BIT, BOOL_WIDTH etc." >&5
+printf %s "checking whether limits.h has WORD_BIT, BOOL_WIDTH etc.... " >&6; }
+if test ${gl_cv_header_limits_width+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+ #endif
+ #include <limits.h>
+ long long llm = LLONG_MAX;
+ int wb = WORD_BIT;
+ int ullw = ULLONG_WIDTH;
+ int bw = BOOL_WIDTH;
+ int bm = BOOL_MAX;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_limits_width=yes
+else $as_nop
+ gl_cv_header_limits_width=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5
+printf "%s\n" "$gl_cv_header_limits_width" >&6; }
+ if test "$gl_cv_header_limits_width" = yes; then
+ GL_GENERATE_LIMITS_H=false
+ else
+ GL_GENERATE_LIMITS_H=true
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+printf %s "checking for wint_t... " >&6; }
+if test ${gt_cv_c_wint_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ wint_t foo = (wchar_t)'\0';
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_c_wint_t=yes
+else $as_nop
+ gt_cv_c_wint_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+printf "%s\n" "$gt_cv_c_wint_t" >&6; }
+ if test $gt_cv_c_wint_t = yes; then
+
+printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is large enough" >&5
+printf %s "checking whether wint_t is large enough... " >&6; }
+if test ${gl_cv_type_wint_t_large_enough+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_type_wint_t_large_enough=yes
+else $as_nop
+ gl_cv_type_wint_t_large_enough=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_large_enough" >&5
+printf "%s\n" "$gl_cv_type_wint_t_large_enough" >&6; }
+ if test $gl_cv_type_wint_t_large_enough = no; then
+ GNULIBHEADERS_OVERRIDE_WINT_T=1
+ else
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
+ fi
+ else
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
+ fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler produces multi-arch binaries" >&5
+printf %s "checking whether the compiler produces multi-arch binaries... " >&6; }
+if test ${gl_cv_c_multiarch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_c_multiarch=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ arch=
+ prev=
+ for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+ if test -n "$prev"; then
+ case $word in
+ i?86 | x86_64 | ppc | ppc64 | arm | arm64)
+ if test -z "$arch" || test "$arch" = "$word"; then
+ arch="$word"
+ else
+ gl_cv_c_multiarch=yes
+ fi
+ ;;
+ esac
+ prev=
+ else
+ if test "x$word" = "x-arch"; then
+ prev=arch
+ fi
+ fi
+ done
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_multiarch" >&5
+printf "%s\n" "$gl_cv_c_multiarch" >&6; }
+ if test $gl_cv_c_multiarch = yes; then
+ APPLE_UNIVERSAL_BUILD=1
+ else
+ APPLE_UNIVERSAL_BUILD=0
+ fi
+
+
+
+
+
+
+
+
+printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+
+
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
+
+
+
+ if test $ac_cv_header_inttypes_h = yes; then
+ HAVE_INTTYPES_H=1
+ else
+ HAVE_INTTYPES_H=0
+ fi
+
+
+
+ if test $ac_cv_header_sys_types_h = yes; then
+ HAVE_SYS_TYPES_H=1
+ else
+ HAVE_SYS_TYPES_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdint_h='<'stdint.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+printf %s "checking absolute name of <stdint.h>... " >&6; }
+if test ${gl_cv_next_stdint_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_stdint_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdint.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdint.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdint_h
+ gl_cv_next_stdint_h='"'$gl_header'"'
+ else
+ gl_cv_next_stdint_h='<'stdint.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+printf "%s\n" "$gl_cv_next_stdint_h" >&6; }
+ fi
+ NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdint.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdint_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_stdint_h = yes; then
+ HAVE_STDINT_H=1
+ else
+ HAVE_STDINT_H=0
+ fi
+
+
+ if test $ac_cv_header_stdint_h = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+printf %s "checking whether stdint.h conforms to C99... " >&6; }
+if test ${gl_cv_header_working_stdint_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_header_working_stdint_h=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+/* Check that SIZE_MAX has the correct type, if possible. */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \
+ || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+ ((t) ((t) 0 < (t) -1 \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+ int check_PTRDIFF:
+ PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+ && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+ ? 1 : -1;
+ /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */
+ int check_SIG_ATOMIC:
+ SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+ && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+ ? 1 : -1;
+ int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+ int check_WCHAR:
+ WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+ && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+ ? 1 : -1;
+ /* Detect bug in mingw. */
+ int check_WINT:
+ WINT_MIN == TYPE_MINIMUM (wint_t)
+ && WINT_MAX == TYPE_MAXIMUM (wint_t)
+ ? 1 : -1;
+
+ /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
+ int check_UINT8_C:
+ (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+ int check_UINT16_C:
+ (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+ /* Detect bugs in OpenBSD 3.9 stdint.h. */
+#ifdef UINT8_MAX
+ int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+ int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+ int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+ int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+ int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+ int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+ int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+ int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+ int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+ int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+ int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+ int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+ int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+ int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+ int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+ # In general, assume it works.
+ *) gl_cv_header_working_stdint_h="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+ {
+#ifdef INT8_MAX
+ MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+ MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+ MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+ MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+ MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+ MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+ MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+ MVAL (UINT64_MAX),
+#endif
+ NULL
+ };
+
+int
+main (void)
+{
+
+ const char **mv;
+ for (mv = macro_values; *mv != NULL; mv++)
+ {
+ const char *value = *mv;
+ /* Test whether it looks like a cast expression. */
+ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+ || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+ || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+ || strncmp (value, "((int)"/*)*/, 6) == 0
+ || strncmp (value, "((signed short)"/*)*/, 15) == 0
+ || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+ return mv - macro_values + 1;
+ }
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+printf "%s\n" "$gl_cv_header_working_stdint_h" >&6; }
+ fi
+
+ HAVE_C99_STDINT_H=0
+ HAVE_SYS_BITYPES_H=0
+ HAVE_SYS_INTTYPES_H=0
+ GL_GENERATE_STDINT_H=true
+ case "$gl_cv_header_working_stdint_h" in
+ *yes)
+ HAVE_C99_STDINT_H=1
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h works without ISO C predefines" >&5
+printf %s "checking whether stdint.h works without ISO C predefines... " >&6; }
+if test ${gl_cv_header_stdint_without_STDC_macros+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_header_stdint_without_STDC_macros=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_stdint_without_STDC_macros=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_without_STDC_macros" >&5
+printf "%s\n" "$gl_cv_header_stdint_without_STDC_macros" >&6; }
+
+ if test $gl_cv_header_stdint_without_STDC_macros = no; then
+
+printf "%s\n" "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h
+
+
+printf "%s\n" "#define __STDC_LIMIT_MACROS 1" >>confdefs.h
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5
+printf %s "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; }
+if test ${gl_cv_header_stdint_width+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_header_stdint_width=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+ #endif
+ #include <stdint.h>
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+ int iw = UINTMAX_WIDTH;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_stdint_width=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5
+printf "%s\n" "$gl_cv_header_stdint_width" >&6; }
+ if test "$gl_cv_header_stdint_width" = yes; then
+ GL_GENERATE_STDINT_H=false
+ fi
+ ;;
+ *)
+ ac_fn_c_check_header_compile "$LINENO" "sys/inttypes.h" "ac_cv_header_sys_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_inttypes_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_INTTYPES_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_bitypes_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_header_sys_inttypes_h = yes; then
+ HAVE_SYS_INTTYPES_H=1
+ fi
+ if test $ac_cv_header_sys_bitypes_h = yes; then
+ HAVE_SYS_BITYPES_H=1
+ fi
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+ for gltype in ptrdiff_t size_t ; do
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+printf %s "checking for bit size of $gltype... " >&6; }
+if eval test \${gl_cv_bitsizeof_${gltype}+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" "
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+#include <limits.h>"
+then :
+
+else $as_nop
+ result=unknown
+fi
+
+ eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval result=\$gl_cv_bitsizeof_${gltype}
+ if test $result = unknown; then
+ result=0
+ fi
+ GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h
+
+ eval BITSIZEOF_${GLTYPE}=\$result
+ done
+
+
+ fi
+
+
+ for gltype in sig_atomic_t wchar_t wint_t ; do
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+printf %s "checking for bit size of $gltype... " >&6; }
+if eval test \${gl_cv_bitsizeof_${gltype}+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" "
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+#include <limits.h>"
+then :
+
+else $as_nop
+ result=unknown
+fi
+
+ eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval result=\$gl_cv_bitsizeof_${gltype}
+ if test $result = unknown; then
+ result=0
+ fi
+ GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h
+
+ eval BITSIZEOF_${GLTYPE}=\$result
+ done
+
+
+
+
+ for gltype in sig_atomic_t wchar_t wint_t ; do
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+printf %s "checking whether $gltype is signed... " >&6; }
+if eval test \${gl_cv_type_${gltype}_signed+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ result=yes
+else $as_nop
+ result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ eval result=\$gl_cv_type_${gltype}_signed
+ GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ if test "$result" = yes; then
+ printf "%s\n" "#define HAVE_SIGNED_${GLTYPE} 1" >>confdefs.h
+
+ eval HAVE_SIGNED_${GLTYPE}=1
+ else
+ eval HAVE_SIGNED_${GLTYPE}=0
+ fi
+ done
+
+
+ gl_cv_type_ptrdiff_t_signed=yes
+ gl_cv_type_size_t_signed=no
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+ for gltype in ptrdiff_t size_t ; do
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+printf %s "checking for $gltype integer literal suffix... " >&6; }
+if eval test \${gl_cv_type_${gltype}_suffix+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval gl_cv_type_${gltype}_suffix=no
+ eval result=\$gl_cv_type_${gltype}_signed
+ if test "$result" = yes; then
+ glsufu=
+ else
+ glsufu=u
+ fi
+ for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+ case $glsuf in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ i64) gltype1='__int64';;
+ u) gltype1='unsigned int';;
+ ul) gltype1='unsigned long int';;
+ ull) gltype1='unsigned long long int';;
+ ui64)gltype1='unsigned __int64';;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+ extern $gltype foo;
+ extern $gltype1 foo;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" != no && break
+ done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" = no && result=
+ eval ${GLTYPE}_SUFFIX=\$result
+ printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h
+
+ done
+
+
+ fi
+
+
+ for gltype in sig_atomic_t wchar_t wint_t ; do
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+printf %s "checking for $gltype integer literal suffix... " >&6; }
+if eval test \${gl_cv_type_${gltype}_suffix+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ eval gl_cv_type_${gltype}_suffix=no
+ eval result=\$gl_cv_type_${gltype}_signed
+ if test "$result" = yes; then
+ glsufu=
+ else
+ glsufu=u
+ fi
+ for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+ case $glsuf in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ i64) gltype1='__int64';;
+ u) gltype1='unsigned int';;
+ ul) gltype1='unsigned long int';;
+ ull) gltype1='unsigned long long int';;
+ ui64)gltype1='unsigned __int64';;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+
+ extern $gltype foo;
+ extern $gltype1 foo;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" != no && break
+ done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" = no && result=
+ eval ${GLTYPE}_SUFFIX=\$result
+ printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h
+
+ done
+
+
+
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
+ BITSIZEOF_WINT_T=32
+ fi
+
+ ;;
+ esac
+
+
+
+ GL_GENERATE_LIMITS_H=true
+
+
+
+
+
+
+
+ HAVE_DECL_IMAXABS=1;
+ HAVE_DECL_IMAXDIV=1;
+ HAVE_DECL_STRTOIMAX=1;
+ HAVE_DECL_STRTOUMAX=1;
+ HAVE_IMAXDIV_T=1;
+ HAVE_IMAXABS=1;
+ HAVE_IMAXDIV=1;
+ REPLACE_IMAXABS=0;
+ REPLACE_IMAXDIV=0;
+ REPLACE_STRTOIMAX=0;
+ REPLACE_STRTOUMAX=0;
+ INT32_MAX_LT_INTMAX_MAX=1;
+ INT64_MAX_EQ_LONG_MAX='defined _LP64';
+ PRIPTR_PREFIX=__PRIPTR_PREFIX;
+ UINT32_MAX_LT_UINTMAX_MAX=1;
+ UINT64_MAX_EQ_ULONG_MAX='defined _LP64';
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_inttypes_h='<'inttypes.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5
+printf %s "checking absolute name of <inttypes.h>... " >&6; }
+if test ${gl_cv_next_inttypes_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_inttypes_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <inttypes.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'inttypes.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_inttypes_h
+ gl_cv_next_inttypes_h='"'$gl_header'"'
+ else
+ gl_cv_next_inttypes_h='<'inttypes.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5
+printf "%s\n" "$gl_cv_next_inttypes_h" >&6; }
+ fi
+ NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'inttypes.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_inttypes_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PRIPTR_PREFIX=
+ if $GL_GENERATE_STDINT_H; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #ifdef _WIN64
+ LLP64
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ PRIPTR_PREFIX='"l"'
+else $as_nop
+ PRIPTR_PREFIX='"ll"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ else
+ for glpfx in '' l ll I64; do
+ case $glpfx in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ I64) gltype1='__int64';;
+ esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdint.h>
+ extern intptr_t foo;
+ extern $gltype1 foo;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ PRIPTR_PREFIX='"'$glpfx'"'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test -n "$PRIPTR_PREFIX" && break
+ done
+ fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
+printf %s "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
+if test ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined INT32_MAX && defined INTMAX_MAX
+ #define CONDITION (INT32_MAX < INTMAX_MAX)
+ #else
+ #define CONDITION (sizeof (int) < sizeof (long long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
+else $as_nop
+ gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
+printf "%s\n" "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
+ if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
+ INT32_MAX_LT_INTMAX_MAX=1;
+ else
+ INT32_MAX_LT_INTMAX_MAX=0;
+ fi
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
+printf %s "checking whether INT64_MAX == LONG_MAX... " >&6; }
+if test ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined INT64_MAX
+ #define CONDITION (INT64_MAX == LONG_MAX)
+ #else
+ #define CONDITION (sizeof (long long int) == sizeof (long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
+else $as_nop
+ gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
+printf "%s\n" "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
+ if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
+ INT64_MAX_EQ_LONG_MAX=1;
+ else
+ INT64_MAX_EQ_LONG_MAX=0;
+ fi
+
+
+ else
+ INT64_MAX_EQ_LONG_MAX=-1
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
+printf %s "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
+if test ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined UINT32_MAX && defined UINTMAX_MAX
+ #define CONDITION (UINT32_MAX < UINTMAX_MAX)
+ #else
+ #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
+else $as_nop
+ gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
+printf "%s\n" "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
+ if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
+ UINT32_MAX_LT_UINTMAX_MAX=1;
+ else
+ UINT32_MAX_LT_UINTMAX_MAX=0;
+ fi
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
+printf %s "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
+if test ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if defined UINT64_MAX
+ #define CONDITION (UINT64_MAX == ULONG_MAX)
+ #else
+ #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
+ #endif
+ int test[CONDITION ? 1 : -1];
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
+else $as_nop
+ gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
+printf "%s\n" "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
+ if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
+ UINT64_MAX_EQ_ULONG_MAX=1;
+ else
+ UINT64_MAX_EQ_ULONG_MAX=0;
+ fi
+
+
+ else
+ UINT64_MAX_EQ_ULONG_MAX=-1
+ fi
+
+
+
+
+ GL_GNULIB_IMAXABS=0
+
+
+
+ GL_GNULIB_IMAXDIV=0
+
+
+
+ GL_GNULIB_STRTOIMAX=0
+
+
+
+ GL_GNULIB_STRTOUMAX=0
+
+
+
+
+ HAVE_NL_LANGINFO=1;
+ REPLACE_NL_LANGINFO=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_langinfo_h='<'langinfo.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <langinfo.h>" >&5
+printf %s "checking absolute name of <langinfo.h>... " >&6; }
+if test ${gl_cv_next_langinfo_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_langinfo_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'langinfo.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_langinfo_h
+ gl_cv_next_langinfo_h='"'$gl_header'"'
+ else
+ gl_cv_next_langinfo_h='<'langinfo.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5
+printf "%s\n" "$gl_cv_next_langinfo_h" >&6; }
+ fi
+ NEXT_LANGINFO_H=$gl_cv_next_langinfo_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'langinfo.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_langinfo_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive
+
+
+
+
+
+ HAVE_LANGINFO_CODESET=0
+ HAVE_LANGINFO_T_FMT_AMPM=0
+ HAVE_LANGINFO_ALTMON=0
+ HAVE_LANGINFO_ERA=0
+ HAVE_LANGINFO_YESEXPR=0
+
+ if test $ac_cv_header_langinfo_h = yes; then
+ HAVE_LANGINFO_H=1
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5
+printf %s "checking whether langinfo.h defines CODESET... " >&6; }
+if test ${gl_cv_header_langinfo_codeset+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int a = CODESET;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_langinfo_codeset=yes
+else $as_nop
+ gl_cv_header_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5
+printf "%s\n" "$gl_cv_header_langinfo_codeset" >&6; }
+ if test $gl_cv_header_langinfo_codeset = yes; then
+ HAVE_LANGINFO_CODESET=1
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5
+printf %s "checking whether langinfo.h defines T_FMT_AMPM... " >&6; }
+if test ${gl_cv_header_langinfo_t_fmt_ampm+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int a = T_FMT_AMPM;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_langinfo_t_fmt_ampm=yes
+else $as_nop
+ gl_cv_header_langinfo_t_fmt_ampm=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5
+printf "%s\n" "$gl_cv_header_langinfo_t_fmt_ampm" >&6; }
+ if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then
+ HAVE_LANGINFO_T_FMT_AMPM=1
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ALTMON_1" >&5
+printf %s "checking whether langinfo.h defines ALTMON_1... " >&6; }
+if test ${gl_cv_header_langinfo_altmon+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int a = ALTMON_1;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_langinfo_altmon=yes
+else $as_nop
+ gl_cv_header_langinfo_altmon=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_altmon" >&5
+printf "%s\n" "$gl_cv_header_langinfo_altmon" >&6; }
+ if test $gl_cv_header_langinfo_altmon = yes; then
+ HAVE_LANGINFO_ALTMON=1
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5
+printf %s "checking whether langinfo.h defines ERA... " >&6; }
+if test ${gl_cv_header_langinfo_era+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int a = ERA;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_langinfo_era=yes
+else $as_nop
+ gl_cv_header_langinfo_era=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5
+printf "%s\n" "$gl_cv_header_langinfo_era" >&6; }
+ if test $gl_cv_header_langinfo_era = yes; then
+ HAVE_LANGINFO_ERA=1
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5
+printf %s "checking whether langinfo.h defines YESEXPR... " >&6; }
+if test ${gl_cv_header_langinfo_yesexpr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int a = YESEXPR;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_langinfo_yesexpr=yes
+else $as_nop
+ gl_cv_header_langinfo_yesexpr=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5
+printf "%s\n" "$gl_cv_header_langinfo_yesexpr" >&6; }
+ if test $gl_cv_header_langinfo_yesexpr = yes; then
+ HAVE_LANGINFO_YESEXPR=1
+ fi
+ else
+ HAVE_LANGINFO_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_NL_LANGINFO=0
+
+
+
+
+ HAVE_NEWLOCALE=1;
+ HAVE_DUPLOCALE=1;
+ HAVE_FREELOCALE=1;
+ REPLACE_LOCALECONV=0;
+ REPLACE_SETLOCALE=0;
+ REPLACE_NEWLOCALE=0;
+ REPLACE_DUPLOCALE=0;
+ REPLACE_FREELOCALE=0;
+ REPLACE_STRUCT_LCONV=0;
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=0;
+
+
+ REPLACE_NULL=0;
+ HAVE_MAX_ALIGN_T=1;
+ HAVE_WCHAR_T=1;
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+printf %s "checking for wchar_t... " >&6; }
+if test ${gt_cv_c_wchar_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_c_wchar_t=yes
+else $as_nop
+ gt_cv_c_wchar_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+printf "%s\n" "$gt_cv_c_wchar_t" >&6; }
+ if test $gt_cv_c_wchar_t = yes; then
+
+printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+ GL_GENERATE_STDDEF_H=false
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5
+printf %s "checking for good max_align_t... " >&6; }
+if test ${gl_cv_type_max_align_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has
+ the correct alignment with the default (wrong) definition of
+ _Alignof, but a wrong alignment as soon as we activate an
+ ISO C compliant _Alignof definition. */
+ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus
+ #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b)
+ #endif
+ #include <stddef.h>
+ unsigned int s = sizeof (max_align_t);
+ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__
+ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+ int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+ #endif
+ typedef struct { char a; max_align_t b; } max_helper;
+ typedef struct { char a; long b; } long_helper;
+ typedef struct { char a; double b; } double_helper;
+ typedef struct { char a; long double b; } long_double_helper;
+ int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1];
+ int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1];
+ int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_type_max_align_t=yes
+else $as_nop
+ gl_cv_type_max_align_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5
+printf "%s\n" "$gl_cv_type_max_align_t" >&6; }
+ if test $gl_cv_type_max_align_t = no; then
+ HAVE_MAX_ALIGN_T=0
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ if test $gt_cv_c_wchar_t = no; then
+ HAVE_WCHAR_T=0
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+printf %s "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if test ${gl_cv_decl_null_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stddef.h>
+ int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_decl_null_works=yes
+else $as_nop
+ gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+printf "%s\n" "$gl_cv_decl_null_works" >&6; }
+ if test $gl_cv_decl_null_works = no; then
+ REPLACE_NULL=1
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unreachable" >&5
+printf %s "checking for unreachable... " >&6; }
+if test ${gl_cv_func_unreachable+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stddef.h>
+
+int
+main (void)
+{
+unreachable ();
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func_unreachable=yes
+else $as_nop
+ gl_cv_func_unreachable=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unreachable" >&5
+printf "%s\n" "$gl_cv_func_unreachable" >&6; }
+ if test $gl_cv_func_unreachable = no; then
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ if $GL_GENERATE_STDDEF_H; then
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stddef_h='<'stddef.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+printf %s "checking absolute name of <stddef.h>... " >&6; }
+if test ${gl_cv_next_stddef_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stddef.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stddef.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stddef_h
+ gl_cv_next_stddef_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+printf "%s\n" "$gl_cv_next_stddef_h" >&6; }
+ fi
+ NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stddef.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stddef_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+
+ fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5
+printf %s "checking whether locale.h defines locale_t... " >&6; }
+if test ${gl_cv_header_locale_has_locale_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+ locale_t x;
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_locale_has_locale_t=yes
+else $as_nop
+ gl_cv_header_locale_has_locale_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5
+printf "%s\n" "$gl_cv_header_locale_has_locale_t" >&6; }
+
+
+ if test $ac_cv_header_xlocale_h = yes; then
+ HAVE_XLOCALE_H=1
+ if test $gl_cv_header_locale_has_locale_t = yes; then
+ gl_cv_header_locale_h_needs_xlocale_h=no
+ else
+ gl_cv_header_locale_h_needs_xlocale_h=yes
+ fi
+ HAVE_LOCALE_T=1
+ else
+ HAVE_XLOCALE_H=0
+ gl_cv_header_locale_h_needs_xlocale_h=no
+ if test $gl_cv_header_locale_has_locale_t = yes; then
+ HAVE_LOCALE_T=1
+ else
+ HAVE_LOCALE_T=0
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ case "$host_os" in
+ solaris*)
+
+printf "%s\n" "#define _LCONV_C99 1" >>confdefs.h
+
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5
+printf %s "checking whether locale.h conforms to POSIX:2001... " >&6; }
+if test ${gl_cv_header_locale_h_posix2001+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+ int x = LC_MESSAGES;
+ int y = sizeof (((struct lconv *) 0)->decimal_point);
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_locale_h_posix2001=yes
+else $as_nop
+ gl_cv_header_locale_h_posix2001=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5
+printf "%s\n" "$gl_cv_header_locale_h_posix2001" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5
+printf %s "checking whether struct lconv is properly defined... " >&6; }
+if test ${gl_cv_sys_struct_lconv_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+ struct lconv l;
+ int x = sizeof (l.decimal_point);
+ int y = sizeof (l.int_p_cs_precedes);
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_lconv_ok=yes
+else $as_nop
+ gl_cv_sys_struct_lconv_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5
+printf "%s\n" "$gl_cv_sys_struct_lconv_ok" >&6; }
+ if test $gl_cv_sys_struct_lconv_ok = no; then
+ case "$host_os" in
+ mingw*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _MSC_VER
+ Special
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Special" >/dev/null 2>&1
+then :
+
+else $as_nop
+ REPLACE_STRUCT_LCONV=1
+fi
+rm -rf conftest*
+
+ ;;
+ *) REPLACE_STRUCT_LCONV=1 ;;
+ esac
+ fi
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_locale_h='<'locale.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5
+printf %s "checking absolute name of <locale.h>... " >&6; }
+if test ${gl_cv_next_locale_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'locale.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_locale_h
+ gl_cv_next_locale_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5
+printf "%s\n" "$gl_cv_next_locale_h" >&6; }
+ fi
+ NEXT_LOCALE_H=$gl_cv_next_locale_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'locale.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_locale_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_LOCALECONV=0
+
+
+
+ GL_GNULIB_SETLOCALE=0
+
+
+
+ GL_GNULIB_SETLOCALE_NULL=0
+
+
+
+ GL_GNULIB_DUPLOCALE=0
+
+
+
+ GL_GNULIB_LOCALENAME=0
+
+
+
+
+
+ gl_threads_api=none
+ LIBTHREAD=
+ LTLIBTHREAD=
+ LIBMULTITHREAD=
+ LTLIBMULTITHREAD=
+ if test "$gl_use_threads" != no; then
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+printf %s "checking whether imported symbols can be declared weak... " >&6; }
+if test ${gl_cv_have_weak+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main (void)
+{
+xyzzy();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_have_weak=maybe
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
+ gl_cv_have_weak="guessing yes"
+else $as_nop
+ gl_cv_have_weak="guessing no"
+fi
+rm -rf conftest*
+
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+ return (fputs == NULL);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_have_weak=yes
+else $as_nop
+ gl_cv_have_weak=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ ;;
+ esac
+ case " $LDFLAGS " in
+ *" -static "*) gl_cv_have_weak=no ;;
+ esac
+ case "$gl_cv_have_weak" in
+ *yes)
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ : > conftest1.c
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
+ cat <<EOF > conftest2.c
+#include <pthread.h>
+#pragma weak pthread_mutexattr_gettype
+int main ()
+{
+ return (pthread_mutexattr_gettype != NULL);
+}
+EOF
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \
+ || gl_cv_have_weak=no
+ rm -f conftest1.c libempty.so conftest2.c conftest
+ ;;
+ esac
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+printf "%s\n" "$gl_cv_have_weak" >&6; }
+ case "$gl_cv_have_weak" in
+ *yes)
+
+printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
+
+ ;;
+ esac
+
+ if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+ :
+ fi
+ if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then
+
+ gl_have_isoc_threads="$ac_cv_header_threads_h"
+ fi
+ if test "$gl_use_threads" = yes \
+ || test "$gl_use_threads" = posix \
+ || test "$gl_use_threads" = isoc+posix; then
+
+
+ if test -z "$gl_pthreadlib_body_done"; then
+ gl_pthread_api=no
+ LIBPTHREAD=
+ LIBPMULTITHREAD=
+ # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+ # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
+ gl_have_pthread_h=yes
+else $as_nop
+ gl_have_pthread_h=no
+fi
+
+ if test "$gl_have_pthread_h" = yes; then
+ # Other possible tests:
+ # -lpthreads (FSU threads, PCthreads)
+ # -lgthreads
+ # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+ # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+ # the second one only in libpthread, and lock.c needs it.
+ #
+ # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+ # needs -pthread for some reason. See:
+ # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+ save_LIBS=$LIBS
+ for gl_pthread in '' '-pthread'; do
+ LIBS="$LIBS $gl_pthread"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ pthread_mutex_t m;
+ pthread_mutexattr_t ma;
+
+int
+main (void)
+{
+pthread_mutex_lock (&m);
+ pthread_mutexattr_init (&ma);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=$gl_pthread
+ LIBPMULTITHREAD=$gl_pthread
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$save_LIBS
+ test $gl_pthread_api = yes && break
+ done
+ echo "$as_me:17010: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:17011: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1
+then :
+ gl_pthread_in_glibc=yes
+fi
+rm -rf conftest*
+
+ ;;
+ esac
+ echo "$as_me:17037: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
+
+ # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+ # since it is defined as a macro on OSF/1.)
+ if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then
+ # The program links fine without libpthread. But it may actually
+ # need to link with libpthread in order to create multiple threads.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+
+printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+
+ esac
+ fi
+
+fi
+
+ elif test $gl_pthread_api != yes; then
+ # Some library is needed. Try libpthread and libc_r.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lpthread
+ LIBPMULTITHREAD=-lpthread
+fi
+
+ if test $gl_pthread_api != yes; then
+ # For FreeBSD 4.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
+printf %s "checking for pthread_kill in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc_r $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_c_r_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_c_r_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lc_r
+ LIBPMULTITHREAD=-lc_r
+fi
+
+ fi
+ fi
+ echo "$as_me:17191: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
+printf %s "checking whether POSIX threads API is available... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5
+printf "%s\n" "$gl_pthread_api" >&6; }
+
+
+ if test $gl_pthread_api = yes; then
+
+printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h
+
+ fi
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sched.h>
+int
+main (void)
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ SCHED_YIELD_LIB=
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
+printf %s "checking for sched_yield in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_rt_sched_yield=yes
+else $as_nop
+ ac_cv_lib_rt_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; }
+if test "x$ac_cv_lib_rt_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lrt
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5
+printf %s "checking for sched_yield in -lposix4... " >&6; }
+if test ${ac_cv_lib_posix4_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix4 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_posix4_sched_yield=yes
+else $as_nop
+ ac_cv_lib_posix4_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; }
+if test "x$ac_cv_lib_posix4_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lposix4
+fi
+
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+ LIB_SCHED_YIELD="$SCHED_YIELD_LIB"
+
+
+ gl_pthreadlib_body_done=done
+ fi
+
+ LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD
+ LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD
+ if test $gl_pthread_api = yes; then
+ if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then
+ gl_threads_api='isoc+posix'
+
+printf "%s\n" "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h
+
+ LIBTHREAD= LTLIBTHREAD=
+ else
+ gl_threads_api=posix
+
+printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h
+
+ if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then
+
+printf "%s\n" "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h
+
+ else
+ if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+
+printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
+
+ LIBTHREAD= LTLIBTHREAD=
+ else
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then
+
+printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+
+ fi
+ ;;
+ esac
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test $gl_threads_api = none; then
+ if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then
+
+
+
+ if test -z "$gl_stdthreadlib_body_done"; then
+
+
+ case "$host_os" in
+ mingw*)
+ LIBSTDTHREAD=
+ ;;
+ *)
+
+
+ if test -z "$gl_pthreadlib_body_done"; then
+ gl_pthread_api=no
+ LIBPTHREAD=
+ LIBPMULTITHREAD=
+ # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+ # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+ ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
+ gl_have_pthread_h=yes
+else $as_nop
+ gl_have_pthread_h=no
+fi
+
+ if test "$gl_have_pthread_h" = yes; then
+ # Other possible tests:
+ # -lpthreads (FSU threads, PCthreads)
+ # -lgthreads
+ # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+ # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+ # the second one only in libpthread, and lock.c needs it.
+ #
+ # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+ # needs -pthread for some reason. See:
+ # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+ save_LIBS=$LIBS
+ for gl_pthread in '' '-pthread'; do
+ LIBS="$LIBS $gl_pthread"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ pthread_mutex_t m;
+ pthread_mutexattr_t ma;
+
+int
+main (void)
+{
+pthread_mutex_lock (&m);
+ pthread_mutexattr_init (&ma);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=$gl_pthread
+ LIBPMULTITHREAD=$gl_pthread
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS=$save_LIBS
+ test $gl_pthread_api = yes && break
+ done
+ echo "$as_me:17421: gl_pthread_api=$gl_pthread_api" >&5
+ echo "$as_me:17422: LIBPTHREAD=$LIBPTHREAD" >&5
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1
+then :
+ gl_pthread_in_glibc=yes
+fi
+rm -rf conftest*
+
+ ;;
+ esac
+ echo "$as_me:17448: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5
+
+ # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+ # since it is defined as a macro on OSF/1.)
+ if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then
+ # The program links fine without libpthread. But it may actually
+ # need to link with libpthread in order to create multiple threads.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+ solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+
+printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+
+ esac
+ fi
+
+fi
+
+ elif test $gl_pthread_api != yes; then
+ # Some library is needed. Try libpthread and libc_r.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_pthread_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_pthread_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lpthread
+ LIBPMULTITHREAD=-lpthread
+fi
+
+ if test $gl_pthread_api != yes; then
+ # For FreeBSD 4.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
+printf %s "checking for pthread_kill in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_kill+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc_r $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char pthread_kill ();
+int
+main (void)
+{
+return pthread_kill ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_c_r_pthread_kill=yes
+else $as_nop
+ ac_cv_lib_c_r_pthread_kill=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_kill" = xyes
+then :
+ gl_pthread_api=yes
+ LIBPTHREAD=-lc_r
+ LIBPMULTITHREAD=-lc_r
+fi
+
+ fi
+ fi
+ echo "$as_me:17602: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5
+printf %s "checking whether POSIX threads API is available... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5
+printf "%s\n" "$gl_pthread_api" >&6; }
+
+
+ if test $gl_pthread_api = yes; then
+
+printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h
+
+ fi
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sched.h>
+int
+main (void)
+{
+sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ SCHED_YIELD_LIB=
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5
+printf %s "checking for sched_yield in -lrt... " >&6; }
+if test ${ac_cv_lib_rt_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lrt $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_rt_sched_yield=yes
+else $as_nop
+ ac_cv_lib_rt_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; }
+if test "x$ac_cv_lib_rt_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lrt
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5
+printf %s "checking for sched_yield in -lposix4... " >&6; }
+if test ${ac_cv_lib_posix4_sched_yield+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix4 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char sched_yield ();
+int
+main (void)
+{
+return sched_yield ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_posix4_sched_yield=yes
+else $as_nop
+ ac_cv_lib_posix4_sched_yield=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5
+printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; }
+if test "x$ac_cv_lib_posix4_sched_yield" = xyes
+then :
+ SCHED_YIELD_LIB=-lposix4
+fi
+
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+ LIB_SCHED_YIELD="$SCHED_YIELD_LIB"
+
+
+ gl_pthreadlib_body_done=done
+ fi
+
+ if test $ac_cv_header_threads_h = yes; then
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create" >&5
+printf %s "checking for thrd_create... " >&6; }
+if test ${gl_cv_onwards_func_thrd_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "thrd_create" "ac_cv_have_decl_thrd_create" "#include <threads.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_thrd_create" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_thrd_create = yes; then
+ ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create"
+if test "x$ac_cv_func_thrd_create" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_thrd_create = yes; then
+ gl_cv_onwards_func_thrd_create=yes
+ else
+ gl_cv_onwards_func_thrd_create='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_thrd_create='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create"
+if test "x$ac_cv_func_thrd_create" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_thrd_create=$ac_cv_func_thrd_create
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_thrd_create" >&5
+printf "%s\n" "$gl_cv_onwards_func_thrd_create" >&6; }
+
+ case "$gl_cv_onwards_func_thrd_create" in
+ future*) ac_cv_func_thrd_create=no ;;
+ *) ac_cv_func_thrd_create=$gl_cv_onwards_func_thrd_create ;;
+ esac
+ if test $ac_cv_func_thrd_create = yes; then
+
+printf "%s\n" "#define HAVE_THRD_CREATE 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_thrd_create = yes; then
+ LIBSTDTHREAD=
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5
+printf %s "checking for thrd_create in -lstdthreads... " >&6; }
+if test ${ac_cv_lib_stdthreads_thrd_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lstdthreads $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char thrd_create ();
+int
+main (void)
+{
+return thrd_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_stdthreads_thrd_create=yes
+else $as_nop
+ ac_cv_lib_stdthreads_thrd_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdthreads_thrd_create" >&5
+printf "%s\n" "$ac_cv_lib_stdthreads_thrd_create" >&6; }
+if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes
+then :
+
+ LIBSTDTHREAD='-lstdthreads -lpthread'
+
+else $as_nop
+
+ LIBSTDTHREAD="$LIBPMULTITHREAD"
+
+fi
+
+ fi
+ else
+ LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB"
+ fi
+ ;;
+ esac
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5
+printf %s "checking whether ISO C threads API is available... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5
+printf "%s\n" "$ac_cv_header_threads_h" >&6; }
+ gl_stdthreadlib_body_done=done
+ fi
+
+ LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD
+ LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD
+ gl_threads_api=isoc
+
+printf "%s\n" "#define USE_ISOC_THREADS 1" >>confdefs.h
+
+ fi
+ fi
+ if test $gl_threads_api = none; then
+ case "$gl_use_threads" in
+ yes | windows | win32) # The 'win32' is for backward compatibility.
+ if { case "$host_os" in
+ mingw*) true;;
+ *) false;;
+ esac
+ }; then
+ gl_threads_api=windows
+
+printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h
+
+ fi
+ ;;
+ esac
+ fi
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5
+printf %s "checking for multithread API to use... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5
+printf "%s\n" "$gl_threads_api" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+printf "%s\n" "#define _USE_STD_STAT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_types_h='<'sys/types.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5
+printf %s "checking absolute name of <sys/types.h>... " >&6; }
+if test ${gl_cv_next_sys_types_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/types.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_types_h
+ gl_cv_next_sys_types_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5
+printf "%s\n" "$gl_cv_next_sys_types_h" >&6; }
+ fi
+ NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/types.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_types_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+ WINDOWS_STAT_INODES=0
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5
+printf %s "checking whether malloc (0) returns nonnull... " >&6; }
+if test ${ac_cv_func_malloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midipix* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+void *p = malloc (0);
+ int result = !p;
+ free (p);
+ return result;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_malloc_0_nonnull=yes
+else $as_nop
+ ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; }
+ case $ac_cv_func_malloc_0_nonnull in #(
+ *yes) :
+ gl_cv_func_malloc_0_nonnull=1 ;; #(
+ *) :
+ gl_cv_func_malloc_0_nonnull=0 ;;
+esac
+
+
+printf "%s\n" "#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5
+printf %s "checking for mbstate_t... " >&6; }
+if test ${ac_cv_type_mbstate_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+ #include <wchar.h>
+int
+main (void)
+{
+mbstate_t x; return sizeof x;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_type_mbstate_t=yes
+else $as_nop
+ ac_cv_type_mbstate_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5
+printf "%s\n" "$ac_cv_type_mbstate_t" >&6; }
+ if test $ac_cv_type_mbstate_t = yes; then
+
+printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h
+
+ else
+
+printf "%s\n" "#define mbstate_t int" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+printf %s "checking for a traditional japanese locale... " >&6; }
+if test ${gt_cv_locale_ja+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales
+ on Cygwin 1.5.x. */
+ if (MB_CUR_MAX == 1)
+ return 1;
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Note that on native Windows, the Japanese locale is
+ # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+ # cannot use it here.
+ gt_cv_locale_ja=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the AIX locale name.
+ if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC-JP
+ else
+ # Test for the HP-UX, OSF/1, NetBSD locale name.
+ if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # Test for the IRIX, FreeBSD locale name.
+ if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja
+ else
+ # Special test for NetBSD 1.6.
+ if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # None found.
+ gt_cv_locale_ja=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+printf "%s\n" "$gt_cv_locale_ja" >&6; }
+ LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+printf %s "checking for a transitional chinese locale... " >&6; }
+if test ${gt_cv_locale_zh_CN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ /* Check whether a typical GB18030 multibyte sequence is recognized as a
+ single wide character. This excludes the GB2312 and GBK encodings. */
+ if (mblen ("\203\062\332\066", 5) != 4)
+ return 1;
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=Chinese_China.54936
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ ;;
+ solaris2.8)
+ # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+ # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+ # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+ gt_cv_locale_zh_CN=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the locale name without encoding suffix.
+ if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN.GB18030
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ fi
+ ;;
+ esac
+ else
+ # If there was a link error, due to mblen(), the system is so old that
+ # it certainly doesn't have a chinese locale.
+ gt_cv_locale_zh_CN=none
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+printf "%s\n" "$gt_cv_locale_zh_CN" >&6; }
+ LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+printf %s "checking for inline... " >&6; }
+if test ${ac_cv_c_inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo (void) {return 0; }
+$ac_kw foo_t foo (void) {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+printf "%s\n" "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+
+ HAVE_MBSLEN=0;
+ HAVE_EXPLICIT_BZERO=1;
+ HAVE_FFSL=1;
+ HAVE_FFSLL=1;
+ HAVE_DECL_MEMMEM=1;
+ HAVE_MEMPCPY=1;
+ HAVE_MEMSET_EXPLICIT=1;
+ HAVE_DECL_MEMRCHR=1;
+ HAVE_RAWMEMCHR=1;
+ HAVE_STPCPY=1;
+ HAVE_STPNCPY=1;
+ HAVE_STRCHRNUL=1;
+ HAVE_DECL_STRDUP=1;
+ HAVE_DECL_STRNDUP=1;
+ HAVE_DECL_STRNLEN=1;
+ HAVE_STRPBRK=1;
+ HAVE_STRSEP=1;
+ HAVE_STRCASESTR=1;
+ HAVE_DECL_STRTOK_R=1;
+ HAVE_DECL_STRERROR_R=1;
+ HAVE_STRERRORNAME_NP=1;
+ HAVE_SIGABBREV_NP=1;
+ HAVE_SIGDESCR_NP=1;
+ HAVE_DECL_STRSIGNAL=1;
+ HAVE_STRVERSCMP=1;
+ REPLACE_FFSLL=0;
+ REPLACE_MEMCHR=0;
+ REPLACE_MEMMEM=0;
+ REPLACE_MEMPCPY=0;
+ REPLACE_STPCPY=0;
+ REPLACE_STPNCPY=0;
+ REPLACE_STRCHRNUL=0;
+ REPLACE_STRDUP=0;
+ REPLACE_STRNCAT=0;
+ REPLACE_STRNDUP=0;
+ REPLACE_STRNLEN=0;
+ REPLACE_STRSTR=0;
+ REPLACE_STRCASESTR=0;
+ REPLACE_STRTOK_R=0;
+ REPLACE_STRERROR=0;
+ REPLACE_STRERROR_R=0;
+ REPLACE_STRERRORNAME_NP=0;
+ REPLACE_STRSIGNAL=0;
+ UNDEFINE_STRTOK_R=0;
+
+
+
+ GL_GNULIB_EXPLICIT_BZERO=0
+
+
+
+ GL_GNULIB_FFSL=0
+
+
+
+ GL_GNULIB_FFSLL=0
+
+
+
+ GL_GNULIB_MEMCHR=0
+
+
+
+ GL_GNULIB_MEMMEM=0
+
+
+
+ GL_GNULIB_MEMPCPY=0
+
+
+
+ GL_GNULIB_MEMRCHR=0
+
+
+
+ GL_GNULIB_MEMSET_EXPLICIT=0
+
+
+
+ GL_GNULIB_RAWMEMCHR=0
+
+
+
+ GL_GNULIB_STPCPY=0
+
+
+
+ GL_GNULIB_STPNCPY=0
+
+
+
+ GL_GNULIB_STRCHRNUL=0
+
+
+
+ GL_GNULIB_STRDUP=0
+
+
+
+ GL_GNULIB_STRNCAT=0
+
+
+
+ GL_GNULIB_STRNDUP=0
+
+
+
+ GL_GNULIB_STRNLEN=0
+
+
+
+ GL_GNULIB_STRPBRK=0
+
+
+
+ GL_GNULIB_STRSEP=0
+
+
+
+ GL_GNULIB_STRSTR=0
+
+
+
+ GL_GNULIB_STRCASESTR=0
+
+
+
+ GL_GNULIB_STRTOK_R=0
+
+
+
+ GL_GNULIB_MBSLEN=0
+
+
+
+ GL_GNULIB_MBSNLEN=0
+
+
+
+ GL_GNULIB_MBSCHR=0
+
+
+
+ GL_GNULIB_MBSRCHR=0
+
+
+
+ GL_GNULIB_MBSSTR=0
+
+
+
+ GL_GNULIB_MBSCASECMP=0
+
+
+
+ GL_GNULIB_MBSNCASECMP=0
+
+
+
+ GL_GNULIB_MBSPCASECMP=0
+
+
+
+ GL_GNULIB_MBSCASESTR=0
+
+
+
+ GL_GNULIB_MBSCSPN=0
+
+
+
+ GL_GNULIB_MBSPBRK=0
+
+
+
+ GL_GNULIB_MBSSPN=0
+
+
+
+ GL_GNULIB_MBSSEP=0
+
+
+
+ GL_GNULIB_MBSTOK_R=0
+
+
+
+ GL_GNULIB_STRERROR=0
+
+
+
+ GL_GNULIB_STRERROR_R=0
+
+
+
+ GL_GNULIB_STRERRORNAME_NP=0
+
+
+
+ GL_GNULIB_SIGABBREV_NP=0
+
+
+
+ GL_GNULIB_SIGDESCR_NP=0
+
+
+
+ GL_GNULIB_STRSIGNAL=0
+
+
+
+ GL_GNULIB_STRVERSCMP=0
+
+
+
+ GL_GNULIB_MDA_MEMCCPY=1
+
+
+
+ GL_GNULIB_MDA_STRDUP=1
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5
+printf %s "checking whether <limits.h> defines MIN and MAX... " >&6; }
+if test ${gl_cv_minmax_in_limits_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ int x = MIN (42, 17);
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_minmax_in_limits_h=yes
+else $as_nop
+ gl_cv_minmax_in_limits_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5
+printf "%s\n" "$gl_cv_minmax_in_limits_h" >&6; }
+ if test $gl_cv_minmax_in_limits_h = yes; then
+
+printf "%s\n" "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5
+printf %s "checking whether <sys/param.h> defines MIN and MAX... " >&6; }
+if test ${gl_cv_minmax_in_sys_param_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/param.h>
+ int x = MIN (42, 17);
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_minmax_in_sys_param_h=yes
+else $as_nop
+ gl_cv_minmax_in_sys_param_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5
+printf "%s\n" "$gl_cv_minmax_in_sys_param_h" >&6; }
+ if test $gl_cv_minmax_in_sys_param_h = yes; then
+
+printf "%s\n" "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5
+printf %s "checking for O_CLOEXEC... " >&6; }
+if test ${gl_cv_macro_O_CLOEXEC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+ #ifndef O_CLOEXEC
+ choke me;
+ #endif
+
+int
+main (void)
+{
+return O_CLOEXEC;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_macro_O_CLOEXEC=yes
+else $as_nop
+ gl_cv_macro_O_CLOEXEC=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5
+printf "%s\n" "$gl_cv_macro_O_CLOEXEC" >&6; }
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5
+printf %s "checking for promoted mode_t type... " >&6; }
+if test ${gl_cv_promoted_mode_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+int
+main (void)
+{
+typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_promoted_mode_t='int'
+else $as_nop
+ gl_cv_promoted_mode_t='mode_t'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5
+printf "%s\n" "$gl_cv_promoted_mode_t" >&6; }
+
+printf "%s\n" "#define PROMOTED_MODE_T $gl_cv_promoted_mode_t" >>confdefs.h
+
+
+
+
+
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=1
+ fi
+
+ac_fn_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_alarm" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_ALARM $ac_have_decl" >>confdefs.h
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5
+printf %s "checking for ssize_t... " >&6; }
+if test ${gt_cv_ssize_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+int
+main (void)
+{
+int x = sizeof (ssize_t *) + sizeof (ssize_t);
+ return !x;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_ssize_t=yes
+else $as_nop
+ gt_cv_ssize_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5
+printf "%s\n" "$gt_cv_ssize_t" >&6; }
+ if test $gt_cv_ssize_t = no; then
+
+printf "%s\n" "#define ssize_t int" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+ HAVE_DECL_FCLOSEALL=1;
+ HAVE_DECL_FPURGE=1;
+ HAVE_DECL_FSEEKO=1;
+ HAVE_DECL_FTELLO=1;
+ HAVE_DECL_GETDELIM=1;
+ HAVE_DECL_GETLINE=1;
+ HAVE_DECL_GETW=1;
+ HAVE_DECL_OBSTACK_PRINTF=1;
+ HAVE_DECL_PUTW=1;
+ HAVE_DECL_SNPRINTF=1;
+ HAVE_DECL_VSNPRINTF=1;
+ HAVE_DPRINTF=1;
+ HAVE_FSEEKO=1;
+ HAVE_FTELLO=1;
+ HAVE_PCLOSE=1;
+ HAVE_POPEN=1;
+ HAVE_RENAMEAT=1;
+ HAVE_VASPRINTF=1;
+ HAVE_VDPRINTF=1;
+ REPLACE_DPRINTF=0;
+ REPLACE_FCLOSE=0;
+ REPLACE_FDOPEN=0;
+ REPLACE_FFLUSH=0;
+ REPLACE_FOPEN=0;
+ REPLACE_FOPEN_FOR_FOPEN_GNU=0;
+ REPLACE_FPRINTF=0;
+ REPLACE_FPURGE=0;
+ REPLACE_FREOPEN=0;
+ REPLACE_FSEEK=0;
+ REPLACE_FSEEKO=0;
+ REPLACE_FTELL=0;
+ REPLACE_FTELLO=0;
+ REPLACE_GETDELIM=0;
+ REPLACE_GETLINE=0;
+ REPLACE_OBSTACK_PRINTF=0;
+ REPLACE_PERROR=0;
+ REPLACE_POPEN=0;
+ REPLACE_PRINTF=0;
+ REPLACE_REMOVE=0;
+ REPLACE_RENAME=0;
+ REPLACE_RENAMEAT=0;
+ REPLACE_SNPRINTF=0;
+ REPLACE_SPRINTF=0;
+ REPLACE_STDIO_READ_FUNCS=0;
+ REPLACE_STDIO_WRITE_FUNCS=0;
+ REPLACE_TMPFILE=0;
+ REPLACE_VASPRINTF=0;
+ REPLACE_VDPRINTF=0;
+ REPLACE_VFPRINTF=0;
+ REPLACE_VPRINTF=0;
+ REPLACE_VSNPRINTF=0;
+ REPLACE_VSPRINTF=0;
+
+ac_fn_check_decl "$LINENO" "fcloseall" "ac_cv_have_decl_fcloseall" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_fcloseall" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_FCLOSEALL $ac_have_decl" >>confdefs.h
+
+ac_fn_check_decl "$LINENO" "getw" "ac_cv_have_decl_getw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getw" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_GETW $ac_have_decl" >>confdefs.h
+
+ac_fn_check_decl "$LINENO" "putw" "ac_cv_have_decl_putw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_putw" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_PUTW $ac_have_decl" >>confdefs.h
+
+
+
+
+ printf "%s\n" "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdio_h='<'stdio.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5
+printf %s "checking absolute name of <stdio.h>... " >&6; }
+if test ${gl_cv_next_stdio_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdio.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdio_h
+ gl_cv_next_stdio_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5
+printf "%s\n" "$gl_cv_next_stdio_h" >&6; }
+ fi
+ NEXT_STDIO_H=$gl_cv_next_stdio_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdio.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdio_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5
+printf %s "checking which flavor of printf attribute matches inttypes macros... " >&6; }
+if test ${gl_cv_func_printf_attribute_flavor+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #define __STDC_FORMAT_MACROS 1
+ #include <stdio.h>
+ #include <inttypes.h>
+ /* For non-mingw systems, compilation will trivially succeed.
+ For mingw, compilation will succeed for older mingw (system
+ printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+ #if (defined _WIN32 && ! defined __CYGWIN__) && \
+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+ extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_printf_attribute_flavor=system
+else $as_nop
+ gl_cv_func_printf_attribute_flavor=gnu
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5
+printf "%s\n" "$gl_cv_func_printf_attribute_flavor" >&6; }
+ if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+
+printf "%s\n" "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_fcloseall = no; then
+ HAVE_DECL_FCLOSEALL=0
+ fi
+
+
+ if test $ac_cv_have_decl_getw = no; then
+ HAVE_DECL_GETW=0
+ fi
+
+
+ if test $ac_cv_have_decl_putw = no; then
+ HAVE_DECL_PUTW=0
+ fi
+
+
+
+ GL_GNULIB_DPRINTF=0
+
+
+
+ GL_GNULIB_FCLOSE=0
+
+
+
+ GL_GNULIB_FDOPEN=0
+
+
+
+ GL_GNULIB_FFLUSH=0
+
+
+
+ GL_GNULIB_FGETC=0
+
+
+
+ GL_GNULIB_FGETS=0
+
+
+
+ GL_GNULIB_FOPEN=0
+
+
+
+ GL_GNULIB_FOPEN_GNU=0
+
+
+
+ GL_GNULIB_FPRINTF=0
+
+
+
+ GL_GNULIB_FPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_FPURGE=0
+
+
+
+ GL_GNULIB_FPUTC=0
+
+
+
+ GL_GNULIB_FPUTS=0
+
+
+
+ GL_GNULIB_FREAD=0
+
+
+
+ GL_GNULIB_FREOPEN=0
+
+
+
+ GL_GNULIB_FSCANF=0
+
+
+
+ GL_GNULIB_FSEEK=0
+
+
+
+ GL_GNULIB_FSEEKO=0
+
+
+
+ GL_GNULIB_FTELL=0
+
+
+
+ GL_GNULIB_FTELLO=0
+
+
+
+ GL_GNULIB_FWRITE=0
+
+
+
+ GL_GNULIB_GETC=0
+
+
+
+ GL_GNULIB_GETCHAR=0
+
+
+
+ GL_GNULIB_GETDELIM=0
+
+
+
+ GL_GNULIB_GETLINE=0
+
+
+
+ GL_GNULIB_OBSTACK_PRINTF=0
+
+
+
+ GL_GNULIB_OBSTACK_PRINTF_POSIX=0
+
+
+
+ GL_GNULIB_PCLOSE=0
+
+
+
+ GL_GNULIB_PERROR=0
+
+
+
+ GL_GNULIB_POPEN=0
+
+
+
+ GL_GNULIB_PRINTF=0
+
+
+
+ GL_GNULIB_PRINTF_POSIX=0
+
+
+
+ GL_GNULIB_PUTC=0
+
+
+
+ GL_GNULIB_PUTCHAR=0
+
+
+
+ GL_GNULIB_PUTS=0
+
+
+
+ GL_GNULIB_REMOVE=0
+
+
+
+ GL_GNULIB_RENAME=0
+
+
+
+ GL_GNULIB_RENAMEAT=0
+
+
+
+ GL_GNULIB_SCANF=0
+
+
+
+ GL_GNULIB_SNPRINTF=0
+
+
+
+ GL_GNULIB_SPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_STDIO_H_NONBLOCKING=0
+
+
+
+ GL_GNULIB_STDIO_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_TMPFILE=0
+
+
+
+ GL_GNULIB_VASPRINTF=0
+
+
+
+ GL_GNULIB_VFSCANF=0
+
+
+
+ GL_GNULIB_VSCANF=0
+
+
+
+ GL_GNULIB_VDPRINTF=0
+
+
+
+ GL_GNULIB_VFPRINTF=0
+
+
+
+ GL_GNULIB_VFPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_VPRINTF=0
+
+
+
+ GL_GNULIB_VPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_VSNPRINTF=0
+
+
+
+ GL_GNULIB_VSPRINTF_POSIX=0
+
+
+
+ GL_GNULIB_MDA_FCLOSEALL=1
+
+
+
+ GL_GNULIB_MDA_FDOPEN=1
+
+
+
+ GL_GNULIB_MDA_FILENO=1
+
+
+
+ GL_GNULIB_MDA_GETW=1
+
+
+
+ GL_GNULIB_MDA_PUTW=1
+
+
+
+ GL_GNULIB_MDA_TEMPNAM=1
+
+
+
+ac_fn_check_decl "$LINENO" "ecvt" "ac_cv_have_decl_ecvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ecvt" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_ECVT $ac_have_decl" >>confdefs.h
+
+ac_fn_check_decl "$LINENO" "fcvt" "ac_cv_have_decl_fcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_fcvt" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_FCVT $ac_have_decl" >>confdefs.h
+
+ac_fn_check_decl "$LINENO" "gcvt" "ac_cv_have_decl_gcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_gcvt" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_GCVT $ac_have_decl" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdlib_h='<'stdlib.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5
+printf %s "checking absolute name of <stdlib.h>... " >&6; }
+if test ${gl_cv_next_stdlib_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdlib.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdlib_h
+ gl_cv_next_stdlib_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5
+printf "%s\n" "$gl_cv_next_stdlib_h" >&6; }
+ fi
+ NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdlib.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdlib_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_ecvt = no; then
+ HAVE_DECL_ECVT=0
+ fi
+
+ if test $ac_cv_have_decl_fcvt = no; then
+ HAVE_DECL_FCVT=0
+ fi
+
+ if test $ac_cv_have_decl_gcvt = no; then
+ HAVE_DECL_GCVT=0
+ fi
+
+ac_fn_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strdup" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRDUP $ac_have_decl" >>confdefs.h
+
+
+ REPLACE_STRERROR_0=0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5
+printf %s "checking whether strerror(0) succeeds... " >&6; }
+if test ${gl_cv_func_strerror_0_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+ #include <errno.h>
+
+int
+main (void)
+{
+int result = 0;
+ char *str;
+ errno = 0;
+ str = strerror (0);
+ if (!*str) result |= 1;
+ if (errno) result |= 2;
+ if (strstr (str, "nknown") || strstr (str, "ndefined"))
+ result |= 4;
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_strerror_0_works=yes
+else $as_nop
+ gl_cv_func_strerror_0_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5
+printf "%s\n" "$gl_cv_func_strerror_0_works" >&6; }
+ case "$gl_cv_func_strerror_0_works" in
+ *yes) ;;
+ *)
+ REPLACE_STRERROR_0=1
+
+printf "%s\n" "#define REPLACE_STRERROR_0 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strerror_r" >&5
+printf %s "checking for strerror_r... " >&6; }
+if test ${gl_cv_onwards_func_strerror_r+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "#include <string.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strerror_r" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_strerror_r = yes; then
+ ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
+if test "x$ac_cv_func_strerror_r" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_strerror_r = yes; then
+ gl_cv_onwards_func_strerror_r=yes
+ else
+ gl_cv_onwards_func_strerror_r='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_strerror_r='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r"
+if test "x$ac_cv_func_strerror_r" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_strerror_r=$ac_cv_func_strerror_r
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_strerror_r" >&5
+printf "%s\n" "$gl_cv_onwards_func_strerror_r" >&6; }
+
+ case "$gl_cv_onwards_func_strerror_r" in
+ future*) ac_cv_func_strerror_r=no ;;
+ *) ac_cv_func_strerror_r=$gl_cv_onwards_func_strerror_r ;;
+ esac
+ if test $ac_cv_func_strerror_r = yes; then
+
+printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_strerror_r = yes; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5
+printf %s "checking for strerror_r with POSIX signature... " >&6; }
+if test ${gl_cv_func_strerror_r_posix_signature+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+ int strerror_r (int, char *, size_t);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_strerror_r_posix_signature=yes
+else $as_nop
+ gl_cv_func_strerror_r_posix_signature=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5
+printf "%s\n" "$gl_cv_func_strerror_r_posix_signature" >&6; }
+ if test $gl_cv_func_strerror_r_posix_signature = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5
+printf %s "checking whether strerror_r works... " >&6; }
+if test ${gl_cv_func_strerror_r_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess no on AIX.
+ aix*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess no on HP-UX.
+ hpux*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess no on BSD variants.
+ *bsd*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_strerror_r_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+ #include <string.h>
+
+int
+main (void)
+{
+int result = 0;
+ char buf[79];
+ if (strerror_r (EACCES, buf, 0) < 0)
+ result |= 1;
+ errno = 0;
+ if (strerror_r (EACCES, buf, sizeof buf) != 0)
+ result |= 2;
+ strcpy (buf, "Unknown");
+ if (strerror_r (0, buf, sizeof buf) != 0)
+ result |= 4;
+ if (errno)
+ result |= 8;
+ if (strstr (buf, "nknown") || strstr (buf, "ndefined"))
+ result |= 0x10;
+ errno = 0;
+ *buf = 0;
+ if (strerror_r (-3, buf, sizeof buf) < 0)
+ result |= 0x20;
+ if (errno)
+ result |= 0x40;
+ if (!*buf)
+ result |= 0x80;
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_strerror_r_works=yes
+else $as_nop
+ gl_cv_func_strerror_r_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5
+printf "%s\n" "$gl_cv_func_strerror_r_works" >&6; }
+ else
+
+ if test $ac_cv_func___xpg_strerror_r = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5
+printf %s "checking whether __xpg_strerror_r works... " >&6; }
+if test ${gl_cv_func_strerror_r_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ gl_cv_func_strerror_r_works="$gl_cross_guess_normal"
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+ #include <string.h>
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int __xpg_strerror_r(int, char *, size_t);
+
+int
+main (void)
+{
+int result = 0;
+ char buf[256] = "^";
+ char copy[256];
+ char *str = strerror (-1);
+ strcpy (copy, str);
+ if (__xpg_strerror_r (-2, buf, 1) == 0)
+ result |= 1;
+ if (*buf)
+ result |= 2;
+ __xpg_strerror_r (-2, buf, 256);
+ if (strcmp (str, copy))
+ result |= 4;
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_strerror_r_works=yes
+else $as_nop
+ gl_cv_func_strerror_r_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5
+printf "%s\n" "$gl_cv_func_strerror_r_works" >&6; }
+ fi
+ fi
+ fi
+ else
+ case "$gl_cv_onwards_func_strerror_r" in
+ future*) REPLACE_STRERROR_R=1 ;;
+ esac
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_string_h='<'string.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
+printf %s "checking absolute name of <string.h>... " >&6; }
+if test ${gl_cv_next_string_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'string.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_string_h
+ gl_cv_next_string_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
+printf "%s\n" "$gl_cv_next_string_h" >&6; }
+ fi
+ NEXT_STRING_H=$gl_cv_next_string_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'string.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_string_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_random_h='<'sys/random.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/random.h>" >&5
+printf %s "checking absolute name of <sys/random.h>... " >&6; }
+if test ${gl_cv_next_sys_random_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_random_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/random.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/random.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_random_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_random_h
+ gl_cv_next_sys_random_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_random_h='<'sys/random.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_random_h" >&5
+printf "%s\n" "$gl_cv_next_sys_random_h" >&6; }
+ fi
+ NEXT_SYS_RANDOM_H=$gl_cv_next_sys_random_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/random.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_random_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_random_h = yes; then
+ HAVE_SYS_RANDOM_H=1
+ else
+ HAVE_SYS_RANDOM_H=0
+ fi
+
+
+
+ if test $ac_cv_header_sys_random_h = yes; then
+ UNISTD_H_HAVE_SYS_RANDOM_H=1
+ fi
+
+
+
+
+
+
+
+
+ HAVE_DECL_LOCALTIME_R=1;
+ HAVE_NANOSLEEP=1;
+ HAVE_STRPTIME=1;
+ HAVE_TIMEGM=1;
+ HAVE_TIMESPEC_GET=1;
+ HAVE_TIMESPEC_GETRES=1;
+ HAVE_TIMEZONE_T=0;
+ REPLACE_CTIME=GNULIB_PORTCHECK;
+ REPLACE_LOCALTIME_R=GNULIB_PORTCHECK;
+ REPLACE_MKTIME=GNULIB_PORTCHECK;
+ REPLACE_NANOSLEEP=GNULIB_PORTCHECK;
+ REPLACE_STRFTIME=GNULIB_PORTCHECK;
+ REPLACE_TIME=0;
+ REPLACE_TIMEGM=GNULIB_PORTCHECK;
+ REPLACE_TIMESPEC_GET=GNULIB_PORTCHECK;
+ REPLACE_TZSET=GNULIB_PORTCHECK;
+
+ : ${GNULIB_GETTIMEOFDAY=0};
+ REPLACE_GMTIME=0;
+ REPLACE_LOCALTIME=0;
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5
+printf %s "checking for struct timespec in <time.h>... " >&6; }
+if test ${gl_cv_sys_struct_timespec_in_time_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <time.h>
+
+int
+main (void)
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timespec_in_time_h=yes
+else $as_nop
+ gl_cv_sys_struct_timespec_in_time_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5
+printf "%s\n" "$gl_cv_sys_struct_timespec_in_time_h" >&6; }
+
+ TIME_H_DEFINES_STRUCT_TIMESPEC=0
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+ UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
+ if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
+ TIME_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5
+printf %s "checking for struct timespec in <sys/time.h>... " >&6; }
+if test ${gl_cv_sys_struct_timespec_in_sys_time_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/time.h>
+
+int
+main (void)
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timespec_in_sys_time_h=yes
+else $as_nop
+ gl_cv_sys_struct_timespec_in_sys_time_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5
+printf "%s\n" "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; }
+ if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5
+printf %s "checking for struct timespec in <pthread.h>... " >&6; }
+if test ${gl_cv_sys_struct_timespec_in_pthread_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+
+int
+main (void)
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timespec_in_pthread_h=yes
+else $as_nop
+ gl_cv_sys_struct_timespec_in_pthread_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5
+printf "%s\n" "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; }
+ if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5
+printf %s "checking for struct timespec in <unistd.h>... " >&6; }
+if test ${gl_cv_sys_struct_timespec_in_unistd_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+int
+main (void)
+{
+static struct timespec x; x.tv_sec = x.tv_nsec;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timespec_in_unistd_h=yes
+else $as_nop
+ gl_cv_sys_struct_timespec_in_unistd_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5
+printf "%s\n" "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; }
+ if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
+ UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
+ fi
+ fi
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_time_h='<'time.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5
+printf %s "checking absolute name of <time.h>... " >&6; }
+if test ${gl_cv_next_time_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <time.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'time.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_time_h
+ gl_cv_next_time_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5
+printf "%s\n" "$gl_cv_next_time_h" >&6; }
+ fi
+ NEXT_TIME_H=$gl_cv_next_time_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'time.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_time_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIME_UTC in <time.h>" >&5
+printf %s "checking for TIME_UTC in <time.h>... " >&6; }
+if test ${gl_cv_time_h_has_TIME_UTC+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <time.h>
+
+int
+main (void)
+{
+static int x = TIME_UTC; x++;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_time_h_has_TIME_UTC=yes
+else $as_nop
+ gl_cv_time_h_has_TIME_UTC=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_h_has_TIME_UTC" >&5
+printf "%s\n" "$gl_cv_time_h_has_TIME_UTC" >&6; }
+ if test $gl_cv_time_h_has_TIME_UTC = yes; then
+ TIME_H_DEFINES_TIME_UTC=1
+ else
+ TIME_H_DEFINES_TIME_UTC=0
+ fi
+
+
+
+
+ GL_GNULIB_CTIME=0
+
+
+
+ GL_GNULIB_MKTIME=0
+
+
+
+ GL_GNULIB_LOCALTIME=0
+
+
+
+ GL_GNULIB_NANOSLEEP=0
+
+
+
+ GL_GNULIB_STRFTIME=0
+
+
+
+ GL_GNULIB_STRPTIME=0
+
+
+
+ GL_GNULIB_TIME=0
+
+
+
+ GL_GNULIB_TIMEGM=0
+
+
+
+ GL_GNULIB_TIMESPEC_GET=0
+
+
+
+ GL_GNULIB_TIMESPEC_GETRES=0
+
+
+
+ GL_GNULIB_TIME_R=0
+
+
+
+ GL_GNULIB_TIME_RZ=0
+
+
+
+ GL_GNULIB_TZSET=0
+
+
+
+ GL_GNULIB_MDA_TZSET=1
+
+
+
+ac_fn_check_decl "$LINENO" "execvpe" "ac_cv_have_decl_execvpe" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_execvpe" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_EXECVPE $ac_have_decl" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5
+printf %s "checking absolute name of <unistd.h>... " >&6; }
+if test ${gl_cv_next_unistd_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_unistd_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'unistd.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_unistd_h
+ gl_cv_next_unistd_h='"'$gl_header'"'
+ else
+ gl_cv_next_unistd_h='<'unistd.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5
+printf "%s\n" "$gl_cv_next_unistd_h" >&6; }
+ fi
+ NEXT_UNISTD_H=$gl_cv_next_unistd_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'unistd.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_unistd_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_unistd_h = yes; then
+ HAVE_UNISTD_H=1
+ else
+ HAVE_UNISTD_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_execvpe = no; then
+ HAVE_DECL_EXECVPE=0
+ fi
+
+
+
+
+
+ if test $ac_cv_header_features_h = yes; then
+ HAVE_FEATURES_H=1
+ else
+ HAVE_FEATURES_H=0
+ fi
+
+
+
+
+
+ if test $ac_cv_header_crtdefs_h = yes; then
+ HAVE_CRTDEFS_H=1
+ else
+ HAVE_CRTDEFS_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+printf %s "checking absolute name of <wchar.h>... " >&6; }
+if test ${gl_cv_next_wchar_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_wchar_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'wchar.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_wchar_h
+ gl_cv_next_wchar_h='"'$gl_header'"'
+ else
+ gl_cv_next_wchar_h='<'wchar.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+printf "%s\n" "$gl_cv_next_wchar_h" >&6; }
+ fi
+ NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'wchar.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_wchar_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
+
+
+
+
+
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ ac_fn_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" "
+ #include <wchar.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_wcsdup" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_WCSDUP $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_wcsdup = no; then
+ HAVE_DECL_WCSDUP=0
+ fi
+
+
+
+ HAVE_ISWBLANK=1;
+ HAVE_WCTYPE_T=1;
+ HAVE_WCTRANS_T=1;
+ REPLACE_ISWBLANK=0;
+ REPLACE_ISWDIGIT=0;
+ REPLACE_ISWXDIGIT=0;
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_iswcntrl = yes; then
+ HAVE_ISWCNTRL=1
+ else
+ HAVE_ISWCNTRL=0
+ fi
+
+
+
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_wctype_h='<'wctype.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+printf %s "checking absolute name of <wctype.h>... " >&6; }
+if test ${gl_cv_next_wctype_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_wctype_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wctype.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'wctype.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_wctype_h
+ gl_cv_next_wctype_h='"'$gl_header'"'
+ else
+ gl_cv_next_wctype_h='<'wctype.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+printf "%s\n" "$gl_cv_next_wctype_h" >&6; }
+ fi
+ NEXT_WCTYPE_H=$gl_cv_next_wctype_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'wctype.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_wctype_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_wctype_h = yes; then
+ if test $ac_cv_func_iswcntrl = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+printf %s "checking whether iswcntrl works... " >&6; }
+if test ${gl_cv_func_iswcntrl_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+ #if __GNU_LIBRARY__ == 1
+ Linux libc5 i18n is broken.
+ #endif
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_iswcntrl_works="guessing yes"
+else $as_nop
+ gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ #include <wctype.h>
+ int main () { return iswprint ('x') == 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_iswcntrl_works=yes
+else $as_nop
+ gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+printf "%s\n" "$gl_cv_func_iswcntrl_works" >&6; }
+ fi
+ HAVE_WCTYPE_H=1
+ else
+ HAVE_WCTYPE_H=0
+ fi
+
+
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
+ REPLACE_ISWCNTRL=1
+ else
+ case "$gl_cv_func_iswcntrl_works" in
+ *yes) REPLACE_ISWCNTRL=0 ;;
+ *) REPLACE_ISWCNTRL=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+ :
+ fi
+
+ if test $REPLACE_ISWCNTRL = 1; then
+ REPLACE_TOWLOWER=1
+ else
+ ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes
+then :
+ printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_towlower = yes; then
+ REPLACE_TOWLOWER=0
+ else
+ ac_fn_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_towlower" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_TOWLOWER $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_towlower = yes; then
+ REPLACE_TOWLOWER=1
+ else
+ REPLACE_TOWLOWER=0
+ fi
+ fi
+ fi
+
+
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+ :
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+printf %s "checking for wctype_t... " >&6; }
+if test ${gl_cv_type_wctype_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+ wctype_t a;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_type_wctype_t=yes
+else $as_nop
+ gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+printf "%s\n" "$gl_cv_type_wctype_t" >&6; }
+ if test $gl_cv_type_wctype_t = no; then
+ HAVE_WCTYPE_T=0
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+printf %s "checking for wctrans_t... " >&6; }
+if test ${gl_cv_type_wctrans_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <wchar.h>
+ #include <wctype.h>
+ wctrans_t a;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_type_wctrans_t=yes
+else $as_nop
+ gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+printf "%s\n" "$gl_cv_type_wctrans_t" >&6; }
+ if test $gl_cv_type_wctrans_t = no; then
+ HAVE_WCTRANS_T=0
+ fi
+
+
+
+
+
+
+
+ GL_GNULIB_ISWBLANK=0
+
+
+
+ GL_GNULIB_ISWDIGIT=0
+
+
+
+ GL_GNULIB_ISWXDIGIT=0
+
+
+
+ GL_GNULIB_WCTYPE=0
+
+
+
+ GL_GNULIB_ISWCTYPE=0
+
+
+
+ GL_GNULIB_WCTRANS=0
+
+
+
+ GL_GNULIB_TOWCTRANS=0
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler option to allow warnings" >&5
+printf %s "checking for C compiler option to allow warnings... " >&6; }
+if test ${gl_cv_cc_wallow+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest*
+ echo 'int dummy;' > conftest.c
+ { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cc_wallow='-Wno-error'
+ else
+ gl_cv_cc_wallow=none
+ fi
+ rm -f conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_wallow" >&5
+printf "%s\n" "$gl_cv_cc_wallow" >&6; }
+ case "$gl_cv_cc_wallow" in
+ none) GL_CFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;;
+ esac
+
+
+
+ if test -n "$CXX" && test "$CXX" != no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler option to allow warnings" >&5
+printf %s "checking for C++ compiler option to allow warnings... " >&6; }
+if test ${gl_cv_cxx_wallow+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f conftest*
+ echo 'int dummy;' > conftest.cc
+ { ac_try='${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ { ac_try='${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; } >/dev/null
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cxx_wallow='-Wno-error'
+ else
+ gl_cv_cxx_wallow=none
+ fi
+ rm -f conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cxx_wallow" >&5
+printf "%s\n" "$gl_cv_cxx_wallow" >&6; }
+ case "$gl_cv_cxx_wallow" in
+ none) GL_CXXFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;;
+ esac
+ else
+ GL_CXXFLAG_ALLOW_WARNINGS=''
+ fi
+
+
+
+ HAVE_STRUCT_SOCKADDR_STORAGE=1;
+ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
+
+ HAVE_SA_FAMILY_T=1;
+ HAVE_ACCEPT4=1;
+
+
+ if test $ac_cv_header_sys_socket_h = no; then
+ ac_fn_c_check_header_compile "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default"
+if test "x$ac_cv_header_ws2tcpip_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h
+
+fi
+
+ fi
+
+
+
+
+
+ case "$host_os" in
+ osf*)
+
+printf "%s\n" "#define _POSIX_PII_SOCKET 1" >>confdefs.h
+
+ ;;
+ esac
+
+ GL_GENERATE_SYS_SOCKET_H=false
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> is self-contained" >&5
+printf %s "checking whether <sys/socket.h> is self-contained... " >&6; }
+if test ${gl_cv_header_sys_socket_h_selfcontained+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/socket.h>
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_sys_socket_h_selfcontained=yes
+else $as_nop
+ gl_cv_header_sys_socket_h_selfcontained=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_selfcontained" >&5
+printf "%s\n" "$gl_cv_header_sys_socket_h_selfcontained" >&6; }
+ if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
+ ac_fn_c_check_func "$LINENO" "shutdown" "ac_cv_func_shutdown"
+if test "x$ac_cv_func_shutdown" = xyes
+then :
+ printf "%s\n" "#define HAVE_SHUTDOWN 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_shutdown = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> defines the SHUT_* macros" >&5
+printf %s "checking whether <sys/socket.h> defines the SHUT_* macros... " >&6; }
+if test ${gl_cv_header_sys_socket_h_shut+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/socket.h>
+int
+main (void)
+{
+int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_sys_socket_h_shut=yes
+else $as_nop
+ gl_cv_header_sys_socket_h_shut=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5
+printf "%s\n" "$gl_cv_header_sys_socket_h_shut" >&6; }
+ if test $gl_cv_header_sys_socket_h_shut = no; then
+ GL_GENERATE_SYS_SOCKET_H=true
+ fi
+ fi
+ fi
+ # We need to check for ws2tcpip.h now.
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_socket_h='<'sys/socket.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/socket.h>" >&5
+printf %s "checking absolute name of <sys/socket.h>... " >&6; }
+if test ${gl_cv_next_sys_socket_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_socket_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/socket.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/socket.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_socket_h
+ gl_cv_next_sys_socket_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_socket_h='<'sys/socket.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_socket_h" >&5
+printf "%s\n" "$gl_cv_next_sys_socket_h" >&6; }
+ fi
+ NEXT_SYS_SOCKET_H=$gl_cv_next_sys_socket_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/socket.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_socket_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_SYS_SOCKET_H=1
+ else
+ HAVE_SYS_SOCKET_H=0
+ fi
+
+
+
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_WS2TCPIP_H=0
+ else
+ if test $ac_cv_header_ws2tcpip_h = yes; then
+ HAVE_WS2TCPIP_H=1
+ else
+ HAVE_WS2TCPIP_H=0
+ fi
+ fi
+
+
+
+ ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" "
+ /* sys/types.h is not needed according to POSIX, but the
+ sys/socket.h in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_type_struct_sockaddr_storage" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" "
+ /* sys/types.h is not needed according to POSIX, but the
+ sys/socket.h in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_type_sa_family_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_SA_FAMILY_T 1" >>confdefs.h
+
+
+fi
+
+ if test $ac_cv_type_struct_sockaddr_storage = no; then
+ HAVE_STRUCT_SOCKADDR_STORAGE=0
+ fi
+ if test $ac_cv_type_sa_family_t = no; then
+ HAVE_SA_FAMILY_T=0
+ fi
+ if test $ac_cv_type_struct_sockaddr_storage != no; then
+ ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include <sys/types.h>
+ #ifdef HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #ifdef HAVE_WS2TCPIP_H
+ #include <ws2tcpip.h>
+ #endif
+
+"
+if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1" >>confdefs.h
+
+
+else $as_nop
+ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0
+fi
+
+ fi
+ if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
+ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
+ GL_GENERATE_SYS_SOCKET_H=true
+ fi
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SOCKET=0
+
+
+
+ GL_GNULIB_CONNECT=0
+
+
+
+ GL_GNULIB_ACCEPT=0
+
+
+
+ GL_GNULIB_BIND=0
+
+
+
+ GL_GNULIB_GETPEERNAME=0
+
+
+
+ GL_GNULIB_GETSOCKNAME=0
+
+
+
+ GL_GNULIB_GETSOCKOPT=0
+
+
+
+ GL_GNULIB_LISTEN=0
+
+
+
+ GL_GNULIB_RECV=0
+
+
+
+ GL_GNULIB_SEND=0
+
+
+
+ GL_GNULIB_RECVFROM=0
+
+
+
+ GL_GNULIB_SENDTO=0
+
+
+
+ GL_GNULIB_SETSOCKOPT=0
+
+
+
+ GL_GNULIB_SHUTDOWN=0
+
+
+
+ GL_GNULIB_ACCEPT4=0
+
+
+
+
+ HAVE_DECL_INET_NTOP=1;
+ HAVE_DECL_INET_PTON=1;
+ REPLACE_INET_NTOP=0;
+ REPLACE_INET_PTON=0;
+
+
+
+
+
+
+ if test $ac_cv_header_arpa_inet_h = yes; then
+ HAVE_ARPA_INET_H=1
+ else
+ HAVE_ARPA_INET_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5
+printf %s "checking absolute name of <arpa/inet.h>... " >&6; }
+if test ${gl_cv_next_arpa_inet_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_arpa_inet_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <arpa/inet.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'arpa/inet.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_arpa_inet_h
+ gl_cv_next_arpa_inet_h='"'$gl_header'"'
+ else
+ gl_cv_next_arpa_inet_h='<'arpa/inet.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5
+printf "%s\n" "$gl_cv_next_arpa_inet_h" >&6; }
+ fi
+ NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'arpa/inet.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_arpa_inet_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_WS2TCPIP_H=0
+ else
+ if test $ac_cv_header_ws2tcpip_h = yes; then
+ HAVE_WS2TCPIP_H=1
+ else
+ HAVE_WS2TCPIP_H=0
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_INET_NTOP=0
+
+
+
+ GL_GNULIB_INET_PTON=0
+
+
+
+
+ HAVE_ISBLANK=1;
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_ctype_h='<'ctype.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <ctype.h>" >&5
+printf %s "checking absolute name of <ctype.h>... " >&6; }
+if test ${gl_cv_next_ctype_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ctype.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'ctype.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_ctype_h
+ gl_cv_next_ctype_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5
+printf "%s\n" "$gl_cv_next_ctype_h" >&6; }
+ fi
+ NEXT_CTYPE_H=$gl_cv_next_ctype_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'ctype.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_ctype_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_ISBLANK=0
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5
+printf %s "checking if environ is properly declared... " >&6; }
+if test ${gt_cv_var_environ_declaration+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+ /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */
+ #include <stdlib.h>
+
+ typedef struct { int foo; } foo_t;
+ extern foo_t environ;
+int
+main (void)
+{
+environ.foo = 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_var_environ_declaration=no
+else $as_nop
+ gt_cv_var_environ_declaration=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5
+printf "%s\n" "$gt_cv_var_environ_declaration" >&6; }
+ if test $gt_cv_var_environ_declaration = yes; then
+
+printf "%s\n" "#define HAVE_ENVIRON_DECL 1" >>confdefs.h
+
+ fi
+
+
+ if test $gt_cv_var_environ_declaration != yes; then
+ HAVE_DECL_ENVIRON=0
+ fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5
+printf %s "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; }
+if test ${gl_cv_func_getcwd_null+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on Cygwin.
+ cygwin*) gl_cv_func_getcwd_null="guessing yes";;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# include <stdlib.h>
+# if HAVE_UNISTD_H
+# include <unistd.h>
+# else /* on Windows with MSVC */
+# include <direct.h>
+# endif
+
+
+$gl_mda_defines
+
+# ifndef getcwd
+ char *getcwd ();
+# endif
+
+int
+main (void)
+{
+
+#if defined _WIN32 && ! defined __CYGWIN__
+/* mingw cwd does not start with '/', but _getcwd does allocate.
+ However, mingw fails to honor non-zero size. */
+#else
+ if (chdir ("/") != 0)
+ return 1;
+ else
+ {
+ char *f = getcwd (NULL, 0);
+ if (! f)
+ return 2;
+ if (f[0] != '/')
+ { free (f); return 3; }
+ if (f[1] != '\0')
+ { free (f); return 4; }
+ free (f);
+ return 0;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getcwd_null=yes
+else $as_nop
+ gl_cv_func_getcwd_null=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_null" >&5
+printf "%s\n" "$gl_cv_func_getcwd_null" >&6; }
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5
+printf %s "checking for getcwd with POSIX signature... " >&6; }
+if test ${gl_cv_func_getcwd_posix_signature+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ char *getcwd (char *, size_t);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_getcwd_posix_signature=yes
+else $as_nop
+ gl_cv_func_getcwd_posix_signature=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_posix_signature" >&5
+printf "%s\n" "$gl_cv_func_getcwd_posix_signature" >&6; }
+
+
+ HAVE_GETTIMEOFDAY=1;
+ HAVE_STRUCT_TIMEVAL=1;
+ HAVE_SYS_TIME_H=1;
+ REPLACE_GETTIMEOFDAY=0;
+ REPLACE_STRUCT_TIMEVAL=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_time_h='<'sys/time.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5
+printf %s "checking absolute name of <sys/time.h>... " >&6; }
+if test ${gl_cv_next_sys_time_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_time_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/time.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/time.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_time_h
+ gl_cv_next_sys_time_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_time_h='<'sys/time.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5
+printf "%s\n" "$gl_cv_next_sys_time_h" >&6; }
+ fi
+ NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/time.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_time_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive
+
+
+
+
+
+ if test $ac_cv_header_sys_time_h != yes; then
+ HAVE_SYS_TIME_H=0
+ fi
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5
+printf %s "checking for struct timeval... " >&6; }
+if test ${gl_cv_sys_struct_timeval+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+ #if HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ #endif
+
+int
+main (void)
+{
+static struct timeval x; x.tv_sec = x.tv_usec;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timeval=yes
+else $as_nop
+ gl_cv_sys_struct_timeval=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5
+printf "%s\n" "$gl_cv_sys_struct_timeval" >&6; }
+ if test $gl_cv_sys_struct_timeval != yes; then
+ HAVE_STRUCT_TIMEVAL=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5
+printf %s "checking for wide-enough struct timeval.tv_sec member... " >&6; }
+if test ${gl_cv_sys_struct_timeval_tv_sec+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+ #if HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ #endif
+
+int
+main (void)
+{
+static struct timeval x;
+ typedef int verify_tv_sec_type[
+ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1
+ ];
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_sys_struct_timeval_tv_sec=yes
+else $as_nop
+ gl_cv_sys_struct_timeval_tv_sec=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5
+printf "%s\n" "$gl_cv_sys_struct_timeval_tv_sec" >&6; }
+ if test $gl_cv_sys_struct_timeval_tv_sec != yes; then
+ REPLACE_STRUCT_TIMEVAL=1
+ fi
+ fi
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETTIMEOFDAY=0
+
+
+
+
+
+ case "$host_os" in
+ *-musl* | midipix*)
+
+printf "%s\n" "#define MUSL_LIBC 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IPv4 sockets" >&5
+printf %s "checking for IPv4 sockets... " >&6; }
+if test ${gl_cv_socket_ipv4+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+int
+main (void)
+{
+int x = AF_INET; struct in_addr y; struct sockaddr_in z;
+ if (&x && &y && &z) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_socket_ipv4=yes
+else $as_nop
+ gl_cv_socket_ipv4=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv4" >&5
+printf "%s\n" "$gl_cv_socket_ipv4" >&6; }
+ if test $gl_cv_socket_ipv4 = yes; then
+
+printf "%s\n" "#define HAVE_IPV4 1" >>confdefs.h
+
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IPv6 sockets" >&5
+printf %s "checking for IPv6 sockets... " >&6; }
+if test ${gl_cv_socket_ipv6+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+int
+main (void)
+{
+int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z;
+ if (&x && &y && &z) return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_socket_ipv6=yes
+else $as_nop
+ gl_cv_socket_ipv6=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv6" >&5
+printf "%s\n" "$gl_cv_socket_ipv6" >&6; }
+ if test $gl_cv_socket_ipv6 = yes; then
+
+printf "%s\n" "#define HAVE_IPV6 1" >>confdefs.h
+
+ fi
+
+
+
+ GL_GNULIB_IOCTL=0
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
+printf %s "checking for LC_MESSAGES... " >&6; }
+if test ${gt_cv_val_LC_MESSAGES+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <locale.h>
+int
+main (void)
+{
+return LC_MESSAGES
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_val_LC_MESSAGES=yes
+else $as_nop
+ gt_cv_val_LC_MESSAGES=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5
+printf "%s\n" "$gt_cv_val_LC_MESSAGES" >&6; }
+ if test $gt_cv_val_LC_MESSAGES = yes; then
+
+printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uselocale" >&5
+printf %s "checking for uselocale... " >&6; }
+if test ${gl_cv_onwards_func_uselocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "uselocale" "ac_cv_have_decl_uselocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_uselocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_uselocale = yes; then
+ ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
+if test "x$ac_cv_func_uselocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_uselocale = yes; then
+ gl_cv_onwards_func_uselocale=yes
+ else
+ gl_cv_onwards_func_uselocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_uselocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
+if test "x$ac_cv_func_uselocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_uselocale=$ac_cv_func_uselocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_uselocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_uselocale" >&6; }
+
+ case "$gl_cv_onwards_func_uselocale" in
+ future*) ac_cv_func_uselocale=no ;;
+ *) ac_cv_func_uselocale=$gl_cv_onwards_func_uselocale ;;
+ esac
+ if test $ac_cv_func_uselocale = yes; then
+
+printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+ if test $ac_cv_func_uselocale = yes; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5
+printf %s "checking whether uselocale works... " >&6; }
+if test ${gt_cv_func_uselocale_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ # Guess no on AIX and z/OS, yes otherwise.
+ case "$host_os" in
+ aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;;
+ *) gt_cv_func_uselocale_works="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+locale_t loc1;
+int main ()
+{
+ uselocale (NULL);
+ setlocale (LC_ALL, "en_US.UTF-8");
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gt_cv_func_uselocale_works=yes
+else $as_nop
+ gt_cv_func_uselocale_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5
+printf "%s\n" "$gt_cv_func_uselocale_works" >&6; }
+ else
+ gt_cv_func_uselocale_works=no
+ fi
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ gt_working_uselocale=yes
+
+printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h
+
+ ;;
+ *)
+ gt_working_uselocale=no
+ ;;
+ esac
+
+
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5
+printf %s "checking for fake locale system (OpenBSD)... " >&6; }
+if test ${gt_cv_locale_fake+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ openbsd*) gt_cv_locale_fake="guessing yes" ;;
+ *) gt_cv_locale_fake="guessing no" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+int main ()
+{
+ locale_t loc1, loc2;
+ if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) return 1;
+ if (setlocale (LC_ALL, "fr_FR.UTF-8") == NULL) return 1;
+ loc1 = newlocale (LC_ALL_MASK, "de_DE.UTF-8", (locale_t)0);
+ loc2 = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", (locale_t)0);
+ return !(loc1 == loc2);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gt_cv_locale_fake=yes
+else $as_nop
+ gt_cv_locale_fake=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5
+printf "%s\n" "$gt_cv_locale_fake" >&6; }
+ ;;
+ *) gt_cv_locale_fake=no ;;
+ esac
+ case "$gt_cv_locale_fake" in
+ *yes)
+ gt_fake_locales=yes
+
+printf "%s\n" "#define HAVE_FAKE_LOCALES 1" >>confdefs.h
+
+ ;;
+ *)
+ gt_fake_locales=no
+ ;;
+ esac
+
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5
+printf %s "checking for Solaris 11.4 locale system... " >&6; }
+if test ${gt_cv_locale_solaris114+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ solaris*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <locale.h>
+ struct _LC_locale_t *x;
+ locale_t y;
+
+int
+main (void)
+{
+*y = x;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_locale_solaris114=yes
+else $as_nop
+ gt_cv_locale_solaris114=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ ;;
+ *) gt_cv_locale_solaris114=no ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5
+printf "%s\n" "$gt_cv_locale_solaris114" >&6; }
+ ;;
+ *) gt_cv_locale_solaris114=no ;;
+ esac
+ if test $gt_cv_locale_solaris114 = yes; then
+
+printf "%s\n" "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h
+
+ fi
+
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l"
+if test "x$ac_cv_func_getlocalename_l" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETLOCALENAME_L 1" >>confdefs.h
+
+fi
+
+ ;;
+ esac
+
+ gt_nameless_locales=no
+ case "$host_os" in
+ aix*)
+ gt_nameless_locales=yes
+
+printf "%s\n" "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h
+
+ ;;
+ esac
+
+ if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then
+ gt_good_uselocale=yes
+
+printf "%s\n" "#define HAVE_GOOD_USELOCALE 1" >>confdefs.h
+
+ else
+ gt_good_uselocale=no
+ fi
+
+ if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then
+ gt_localename_enhances_locale_funcs=yes
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=1
+
+printf "%s\n" "#define LOCALENAME_ENHANCE_LOCALE_FUNCS 1" >>confdefs.h
+
+ else
+ gt_localename_enhances_locale_funcs=no
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main (void)
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else $as_nop
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main (void)
+{
+CFLocaleCopyPreferredLanguages();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFLocaleCopyPreferredLanguages=yes
+else $as_nop
+ gt_cv_func_CFLocaleCopyPreferredLanguages=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+ if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+
+printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library needed for semaphore functions" >&5
+printf %s "checking for library needed for semaphore functions... " >&6; }
+if test ${gl_cv_semaphore_lib+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <semaphore.h>
+int
+main (void)
+{
+sem_post ((sem_t *)0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_semaphore_lib=none
+else $as_nop
+ LIBS="$LIBS -lrt"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <semaphore.h>
+int
+main (void)
+{
+sem_post ((sem_t *)0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_semaphore_lib='-lrt'
+else $as_nop
+ gl_cv_semaphore_lib=none
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_semaphore_lib" >&5
+printf "%s\n" "$gl_cv_semaphore_lib" >&6; }
+ if test "x$gl_cv_semaphore_lib" = xnone; then
+ LIB_SEMAPHORE=
+ else
+ LIB_SEMAPHORE="$gl_cv_semaphore_lib"
+ fi
+
+
+
+
+
+ # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+ # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+ # irrelevant for anonymous mappings.
+ ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes
+then :
+ gl_have_mmap=yes
+else $as_nop
+ gl_have_mmap=no
+fi
+
+
+ # Try to allow MAP_ANONYMOUS.
+ gl_have_mmap_anonymous=no
+ if test $gl_have_mmap = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5
+printf %s "checking for MAP_ANONYMOUS... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+ I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "I cannot identify this map" >/dev/null 2>&1
+then :
+ gl_have_mmap_anonymous=yes
+fi
+rm -rf conftest*
+
+ if test $gl_have_mmap_anonymous != yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/mman.h>
+#ifdef MAP_ANON
+ I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "I cannot identify this map" >/dev/null 2>&1
+then :
+
+printf "%s\n" "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h
+
+ gl_have_mmap_anonymous=yes
+fi
+rm -rf conftest*
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5
+printf "%s\n" "$gl_have_mmap_anonymous" >&6; }
+ if test $gl_have_mmap_anonymous = yes; then
+
+printf "%s\n" "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
+
+ fi
+ fi
+
+
+
+
+
+
+
+
+
+
+ # Detect platform-specific bugs in some versions of glibc:
+ # memchr should not dereference anything with length 0
+ # https://bugzilla.redhat.com/show_bug.cgi?id=499689
+ # memchr should not dereference overestimated length after a match
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+ # memchr should cast the second argument to 'unsigned char'.
+ # This bug exists in Android 4.3.
+ # Assume that memchr works on platforms that lack mprotect.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5
+printf %s "checking whether memchr works... " >&6; }
+if test ${gl_cv_func_memchr_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_memchr_works="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_memchr_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+# define MAP_FILE 0
+# endif
+#endif
+
+int
+main (void)
+{
+
+ int result = 0;
+ char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+ const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+ const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+ const int flags = MAP_FILE | MAP_PRIVATE;
+ int fd = open ("/dev/zero", O_RDONLY, 0666);
+ if (fd >= 0)
+# endif
+ {
+ int pagesize = getpagesize ();
+ char *two_pages =
+ (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+ flags, fd, 0);
+ if (two_pages != (char *)(-1)
+ && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+ fence = two_pages + pagesize;
+ }
+#endif
+ if (fence)
+ {
+ /* Test against bugs on glibc systems. */
+ if (memchr (fence, 0, 0))
+ result |= 1;
+ strcpy (fence - 9, "12345678");
+ if (memchr (fence - 9, 0, 79) != fence - 1)
+ result |= 2;
+ if (memchr (fence - 1, 0, 3) != fence - 1)
+ result |= 4;
+ /* Test against bug on AIX 7.2. */
+ if (memchr (fence - 4, '6', 16) != fence - 4)
+ result |= 8;
+ }
+ /* Test against bug on Android 4.3. */
+ {
+ char input[3];
+ input[0] = 'a';
+ input[1] = 'b';
+ input[2] = 'c';
+ if (memchr (input, 0x789abc00 | 'b', 3) != input + 1)
+ result |= 16;
+ }
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_memchr_works=yes
+else $as_nop
+ gl_cv_func_memchr_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5
+printf "%s\n" "$gl_cv_func_memchr_works" >&6; }
+ case "$gl_cv_func_memchr_works" in
+ *yes) ;;
+ *) REPLACE_MEMCHR=1 ;;
+ esac
+
+
+
+
+
+
+ if test $ac_cv_have_decl_strerror_r = no; then
+ HAVE_DECL_STRERROR_R=0
+ fi
+
+ if test $ac_cv_func_strerror_r = yes; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ if test $gl_cv_func_strerror_r_posix_signature = yes; then
+ case "$gl_cv_func_strerror_r_works" in
+ *no) REPLACE_STRERROR_R=1 ;;
+ esac
+ else
+ REPLACE_STRERROR_R=1
+ fi
+ else
+ REPLACE_STRERROR_R=1
+ fi
+ fi
+
+
+
+
+ HAVE_PSELECT=1;
+ REPLACE_PSELECT=0;
+ REPLACE_SELECT=0;
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/select.h> is self-contained" >&5
+printf %s "checking whether <sys/select.h> is self-contained... " >&6; }
+if test ${gl_cv_header_sys_select_h_selfcontained+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+int
+main (void)
+{
+struct timeval b;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_sys_select_h_selfcontained=yes
+else $as_nop
+ gl_cv_header_sys_select_h_selfcontained=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test $gl_cv_header_sys_select_h_selfcontained = yes; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+int
+main (void)
+{
+int memset; int bzero;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+int
+main (void)
+{
+
+ #undef memset
+ #define memset nonexistent_memset
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ void *memset (void *, int, unsigned long);
+ #undef bzero
+ #define bzero nonexistent_bzero
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ void bzero (void *, unsigned long);
+ fd_set fds;
+ FD_ZERO (&fds);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+ gl_cv_header_sys_select_h_selfcontained=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_select_h_selfcontained" >&5
+printf "%s\n" "$gl_cv_header_sys_select_h_selfcontained" >&6; }
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_select_h='<'sys/select.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/select.h>" >&5
+printf %s "checking absolute name of <sys/select.h>... " >&6; }
+if test ${gl_cv_next_sys_select_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_select_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/select.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_select_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_select_h
+ gl_cv_next_sys_select_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_select_h='<'sys/select.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_select_h" >&5
+printf "%s\n" "$gl_cv_next_sys_select_h" >&6; }
+ fi
+ NEXT_SYS_SELECT_H=$gl_cv_next_sys_select_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/select.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_select_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_select_h = yes; then
+ HAVE_SYS_SELECT_H=1
+ else
+ HAVE_SYS_SELECT_H=0
+ fi
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PSELECT=0
+
+
+
+ GL_GNULIB_SELECT=0
+
+
+
+
+
+ HAVE_PTHREAD_T=1;
+ HAVE_PTHREAD_SPINLOCK_T=1;
+ HAVE_PTHREAD_CREATE_DETACHED=1;
+ HAVE_PTHREAD_MUTEX_RECURSIVE=1;
+ HAVE_PTHREAD_MUTEX_ROBUST=1;
+ HAVE_PTHREAD_PROCESS_SHARED=1;
+ HAVE_PTHREAD_CREATE=1;
+ HAVE_PTHREAD_ATTR_INIT=1;
+ HAVE_PTHREAD_ATTR_GETDETACHSTATE=1;
+ HAVE_PTHREAD_ATTR_SETDETACHSTATE=1;
+ HAVE_PTHREAD_ATTR_DESTROY=1;
+ HAVE_PTHREAD_SELF=1;
+ HAVE_PTHREAD_EQUAL=1;
+ HAVE_PTHREAD_DETACH=1;
+ HAVE_PTHREAD_JOIN=1;
+ HAVE_PTHREAD_EXIT=1;
+ HAVE_PTHREAD_ONCE=1;
+ HAVE_PTHREAD_MUTEX_INIT=1;
+ HAVE_PTHREAD_MUTEXATTR_INIT=1;
+ HAVE_PTHREAD_MUTEXATTR_GETTYPE=1;
+ HAVE_PTHREAD_MUTEXATTR_SETTYPE=1;
+ HAVE_PTHREAD_MUTEXATTR_GETROBUST=1;
+ HAVE_PTHREAD_MUTEXATTR_SETROBUST=1;
+ HAVE_PTHREAD_MUTEXATTR_DESTROY=1;
+ HAVE_PTHREAD_MUTEX_LOCK=1;
+ HAVE_PTHREAD_MUTEX_TRYLOCK=1;
+ HAVE_PTHREAD_MUTEX_TIMEDLOCK=1;
+ HAVE_PTHREAD_MUTEX_UNLOCK=1;
+ HAVE_PTHREAD_MUTEX_DESTROY=1;
+ HAVE_PTHREAD_RWLOCK_INIT=1;
+ HAVE_PTHREAD_RWLOCKATTR_INIT=1;
+ HAVE_PTHREAD_RWLOCKATTR_DESTROY=1;
+ HAVE_PTHREAD_RWLOCK_RDLOCK=1;
+ HAVE_PTHREAD_RWLOCK_WRLOCK=1;
+ HAVE_PTHREAD_RWLOCK_TRYRDLOCK=1;
+ HAVE_PTHREAD_RWLOCK_TRYWRLOCK=1;
+ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=1;
+ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=1;
+ HAVE_PTHREAD_RWLOCK_UNLOCK=1;
+ HAVE_PTHREAD_RWLOCK_DESTROY=1;
+ HAVE_PTHREAD_COND_INIT=1;
+ HAVE_PTHREAD_CONDATTR_INIT=1;
+ HAVE_PTHREAD_CONDATTR_DESTROY=1;
+ HAVE_PTHREAD_COND_WAIT=1;
+ HAVE_PTHREAD_COND_TIMEDWAIT=1;
+ HAVE_PTHREAD_COND_SIGNAL=1;
+ HAVE_PTHREAD_COND_BROADCAST=1;
+ HAVE_PTHREAD_COND_DESTROY=1;
+ HAVE_PTHREAD_KEY_CREATE=1;
+ HAVE_PTHREAD_SETSPECIFIC=1;
+ HAVE_PTHREAD_GETSPECIFIC=1;
+ HAVE_PTHREAD_KEY_DELETE=1;
+ HAVE_PTHREAD_SPIN_INIT=1;
+ HAVE_PTHREAD_SPIN_LOCK=1;
+ HAVE_PTHREAD_SPIN_TRYLOCK=1;
+ HAVE_PTHREAD_SPIN_UNLOCK=1;
+ HAVE_PTHREAD_SPIN_DESTROY=1;
+ REPLACE_PTHREAD_CREATE=0;
+ REPLACE_PTHREAD_ATTR_INIT=0;
+ REPLACE_PTHREAD_ATTR_GETDETACHSTATE=0;
+ REPLACE_PTHREAD_ATTR_SETDETACHSTATE=0;
+ REPLACE_PTHREAD_ATTR_DESTROY=0;
+ REPLACE_PTHREAD_SELF=0;
+ REPLACE_PTHREAD_EQUAL=0;
+ REPLACE_PTHREAD_DETACH=0;
+ REPLACE_PTHREAD_JOIN=0;
+ REPLACE_PTHREAD_EXIT=0;
+ REPLACE_PTHREAD_ONCE=0;
+ REPLACE_PTHREAD_MUTEX_INIT=0;
+ REPLACE_PTHREAD_MUTEXATTR_INIT=0;
+ REPLACE_PTHREAD_MUTEXATTR_GETTYPE=0;
+ REPLACE_PTHREAD_MUTEXATTR_SETTYPE=0;
+ REPLACE_PTHREAD_MUTEXATTR_GETROBUST=0;
+ REPLACE_PTHREAD_MUTEXATTR_SETROBUST=0;
+ REPLACE_PTHREAD_MUTEXATTR_DESTROY=0;
+ REPLACE_PTHREAD_MUTEX_LOCK=0;
+ REPLACE_PTHREAD_MUTEX_TRYLOCK=0;
+ REPLACE_PTHREAD_MUTEX_TIMEDLOCK=0;
+ REPLACE_PTHREAD_MUTEX_UNLOCK=0;
+ REPLACE_PTHREAD_MUTEX_DESTROY=0;
+ REPLACE_PTHREAD_RWLOCK_INIT=0;
+ REPLACE_PTHREAD_RWLOCKATTR_INIT=0;
+ REPLACE_PTHREAD_RWLOCKATTR_DESTROY=0;
+ REPLACE_PTHREAD_RWLOCK_RDLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_WRLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_UNLOCK=0;
+ REPLACE_PTHREAD_RWLOCK_DESTROY=0;
+ REPLACE_PTHREAD_COND_INIT=0;
+ REPLACE_PTHREAD_CONDATTR_INIT=0;
+ REPLACE_PTHREAD_CONDATTR_DESTROY=0;
+ REPLACE_PTHREAD_COND_WAIT=0;
+ REPLACE_PTHREAD_COND_TIMEDWAIT=0;
+ REPLACE_PTHREAD_COND_SIGNAL=0;
+ REPLACE_PTHREAD_COND_BROADCAST=0;
+ REPLACE_PTHREAD_COND_DESTROY=0;
+ REPLACE_PTHREAD_KEY_CREATE=0;
+ REPLACE_PTHREAD_SETSPECIFIC=0;
+ REPLACE_PTHREAD_GETSPECIFIC=0;
+ REPLACE_PTHREAD_KEY_DELETE=0;
+ REPLACE_PTHREAD_SPIN_INIT=0;
+ REPLACE_PTHREAD_SPIN_LOCK=0;
+ REPLACE_PTHREAD_SPIN_TRYLOCK=0;
+ REPLACE_PTHREAD_SPIN_UNLOCK=0;
+ REPLACE_PTHREAD_SPIN_DESTROY=0;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_pthread_h='<'pthread.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <pthread.h>" >&5
+printf %s "checking absolute name of <pthread.h>... " >&6; }
+if test ${gl_cv_next_pthread_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_pthread_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'pthread.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_pthread_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_pthread_h
+ gl_cv_next_pthread_h='"'$gl_header'"'
+ else
+ gl_cv_next_pthread_h='<'pthread.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_pthread_h" >&5
+printf "%s\n" "$gl_cv_next_pthread_h" >&6; }
+ fi
+ NEXT_PTHREAD_H=$gl_cv_next_pthread_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'pthread.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_pthread_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_pthread_h = yes; then
+ HAVE_PTHREAD_H=1
+
+
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ HAVE_PTHREAD_H=0
+ fi
+
+ else
+ HAVE_PTHREAD_H=0
+ fi
+
+
+ ac_fn_c_check_type "$LINENO" "pthread_t" "ac_cv_type_pthread_t" "$ac_includes_default
+ #if HAVE_PTHREAD_H
+ #include <pthread.h>
+ #endif
+"
+if test "x$ac_cv_type_pthread_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_PTHREAD_T 1" >>confdefs.h
+
+
+fi
+ac_fn_c_check_type "$LINENO" "pthread_spinlock_t" "ac_cv_type_pthread_spinlock_t" "$ac_includes_default
+ #if HAVE_PTHREAD_H
+ #include <pthread.h>
+ #endif
+"
+if test "x$ac_cv_type_pthread_spinlock_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_PTHREAD_SPINLOCK_T 1" >>confdefs.h
+
+
+fi
+
+ if test $ac_cv_type_pthread_t != yes; then
+ HAVE_PTHREAD_T=0
+ fi
+ if test $ac_cv_type_pthread_spinlock_t != yes; then
+ HAVE_PTHREAD_SPINLOCK_T=0
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_CREATE_DETACHED" >&5
+printf %s "checking for PTHREAD_CREATE_DETACHED... " >&6; }
+if test ${gl_cv_const_PTHREAD_CREATE_DETACHED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ int x = PTHREAD_CREATE_DETACHED;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_const_PTHREAD_CREATE_DETACHED=yes
+else $as_nop
+ gl_cv_const_PTHREAD_CREATE_DETACHED=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_CREATE_DETACHED" >&5
+printf "%s\n" "$gl_cv_const_PTHREAD_CREATE_DETACHED" >&6; }
+ if test $gl_cv_const_PTHREAD_CREATE_DETACHED != yes; then
+ HAVE_PTHREAD_CREATE_DETACHED=0
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_MUTEX_RECURSIVE" >&5
+printf %s "checking for PTHREAD_MUTEX_RECURSIVE... " >&6; }
+if test ${gl_cv_const_PTHREAD_MUTEX_RECURSIVE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ int x = PTHREAD_MUTEX_RECURSIVE;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_const_PTHREAD_MUTEX_RECURSIVE=yes
+else $as_nop
+ gl_cv_const_PTHREAD_MUTEX_RECURSIVE=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_MUTEX_RECURSIVE" >&5
+printf "%s\n" "$gl_cv_const_PTHREAD_MUTEX_RECURSIVE" >&6; }
+ if test $gl_cv_const_PTHREAD_MUTEX_RECURSIVE != yes; then
+ HAVE_PTHREAD_MUTEX_RECURSIVE=0
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_MUTEX_ROBUST" >&5
+printf %s "checking for PTHREAD_MUTEX_ROBUST... " >&6; }
+if test ${gl_cv_const_PTHREAD_MUTEX_ROBUST+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ int x = PTHREAD_MUTEX_ROBUST;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_const_PTHREAD_MUTEX_ROBUST=yes
+else $as_nop
+ gl_cv_const_PTHREAD_MUTEX_ROBUST=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_MUTEX_ROBUST" >&5
+printf "%s\n" "$gl_cv_const_PTHREAD_MUTEX_ROBUST" >&6; }
+ if test $gl_cv_const_PTHREAD_MUTEX_ROBUST != yes; then
+ HAVE_PTHREAD_MUTEX_ROBUST=0
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PROCESS_SHARED" >&5
+printf %s "checking for PTHREAD_PROCESS_SHARED... " >&6; }
+if test ${gl_cv_const_PTHREAD_PROCESS_SHARED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ int x = PTHREAD_PROCESS_SHARED;
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_const_PTHREAD_PROCESS_SHARED=yes
+else $as_nop
+ gl_cv_const_PTHREAD_PROCESS_SHARED=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_PROCESS_SHARED" >&5
+printf "%s\n" "$gl_cv_const_PTHREAD_PROCESS_SHARED" >&6; }
+ if test $gl_cv_const_PTHREAD_PROCESS_SHARED != yes; then
+ HAVE_PTHREAD_PROCESS_SHARED=0
+ fi
+
+
+
+
+
+
+
+ LIB_PTHREAD="$LIBPMULTITHREAD"
+
+
+
+
+ GL_GNULIB_PTHREAD_THREAD=0
+
+
+
+ GL_GNULIB_PTHREAD_ONCE=0
+
+
+
+ GL_GNULIB_PTHREAD_MUTEX=0
+
+
+
+ GL_GNULIB_PTHREAD_RWLOCK=0
+
+
+
+ GL_GNULIB_PTHREAD_COND=0
+
+
+
+ GL_GNULIB_PTHREAD_TSS=0
+
+
+
+ GL_GNULIB_PTHREAD_SPIN=0
+
+
+
+ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK=0
+
+
+
+
+ HAVE_POSIX_SIGNALBLOCKING=1;
+ HAVE_PTHREAD_SIGMASK=1;
+ HAVE_RAISE=1;
+ HAVE_SIGSET_T=1;
+ HAVE_SIGINFO_T=1;
+ HAVE_SIGACTION=1;
+ HAVE_STRUCT_SIGACTION_SA_SIGACTION=1;
+
+ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1;
+
+ HAVE_SIGHANDLER_T=1;
+ REPLACE_PTHREAD_SIGMASK=0;
+ REPLACE_RAISE=0;
+
+
+
+
+ GL_GNULIB_PTHREAD_SIGMASK=0
+
+
+
+ GL_GNULIB_RAISE=0
+
+
+
+ GL_GNULIB_SIGNAL_H_SIGPIPE=0
+
+
+
+ GL_GNULIB_SIGPROCMASK=0
+
+
+
+ GL_GNULIB_SIGACTION=0
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" "
+ #include <signal.h>
+ /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */
+ #include <sys/types.h>
+
+"
+if test "x$ac_cv_type_sigset_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_SIGSET_T 1" >>confdefs.h
+
+gl_cv_type_sigset_t=yes
+else $as_nop
+ gl_cv_type_sigset_t=no
+fi
+
+ if test $gl_cv_type_sigset_t != yes; then
+ HAVE_SIGSET_T=0
+ fi
+
+
+ HAVE_SCHED_YIELD=1;
+ REPLACE_SCHED_YIELD=0;
+
+
+
+
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "#if HAVE_SYS_CDEFS_H
+ #include <sys/cdefs.h>
+ #endif
+
+"
+if test "x$ac_cv_header_sched_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sched_h='<'sched.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5
+printf %s "checking absolute name of <sched.h>... " >&6; }
+if test ${gl_cv_next_sched_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sched.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sched.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sched_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sched_h
+ gl_cv_next_sched_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5
+printf "%s\n" "$gl_cv_next_sched_h" >&6; }
+ fi
+ NEXT_SCHED_H=$gl_cv_next_sched_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sched.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sched_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SCHED_H=$gl_next_as_first_directive
+
+
+
+
+
+ if test "$ac_cv_header_sched_h" = yes; then
+ HAVE_SCHED_H=1
+ else
+ HAVE_SCHED_H=0
+ fi
+
+
+ if test "$HAVE_SCHED_H" = 1; then
+ ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#if HAVE_SYS_CDEFS_H
+ #include <sys/cdefs.h>
+ #endif
+ #include <sched.h>
+
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes
+then :
+ HAVE_STRUCT_SCHED_PARAM=1
+else $as_nop
+ HAVE_STRUCT_SCHED_PARAM=0
+fi
+
+ else
+ HAVE_STRUCT_SCHED_PARAM=0
+ case "$host_os" in
+ os2*)
+ ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <spawn.h>
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes
+then :
+ HAVE_STRUCT_SCHED_PARAM=1
+fi
+
+ ;;
+ vms)
+ ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <pthread.h>
+"
+if test "x$ac_cv_type_struct_sched_param" = xyes
+then :
+ HAVE_STRUCT_SCHED_PARAM=1
+fi
+
+ ;;
+ esac
+ fi
+
+
+ if test "$ac_cv_header_sys_cdefs_h" = yes; then
+ HAVE_SYS_CDEFS_H=1
+ else
+ HAVE_SYS_CDEFS_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SCHED_YIELD=0
+
+
+
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+ LIBSOCKET=
+ if test $HAVE_WINSOCK2_H = 1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for WSAStartup" >&5
+printf %s "checking for WSAStartup... " >&6; }
+if test ${gl_cv_func_wsastartup+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS -lws2_32"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+#endif
+int
+main (void)
+{
+
+ WORD wVersionRequested = MAKEWORD(1, 1);
+ WSADATA wsaData;
+ int err = WSAStartup(wVersionRequested, &wsaData);
+ WSACleanup ();
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func_wsastartup=yes
+else $as_nop
+ gl_cv_func_wsastartup=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gl_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wsastartup" >&5
+printf "%s\n" "$gl_cv_func_wsastartup" >&6; }
+ if test "$gl_cv_func_wsastartup" = "yes"; then
+
+printf "%s\n" "#define WINDOWS_SOCKETS 1" >>confdefs.h
+
+ LIBSOCKET='-lws2_32'
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5
+printf %s "checking for library containing setsockopt... " >&6; }
+if test ${gl_cv_lib_socket+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_cv_lib_socket=
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();
+int
+main (void)
+{
+setsockopt();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+ gl_save_LIBS="$LIBS"
+ LIBS="$gl_save_LIBS -lsocket"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();
+int
+main (void)
+{
+setsockopt();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_lib_socket="-lsocket"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$gl_cv_lib_socket"; then
+ LIBS="$gl_save_LIBS -lnetwork"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();
+int
+main (void)
+{
+setsockopt();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_lib_socket="-lnetwork"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$gl_cv_lib_socket"; then
+ LIBS="$gl_save_LIBS -lnet"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();
+int
+main (void)
+{
+setsockopt();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_lib_socket="-lnet"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ fi
+ LIBS="$gl_save_LIBS"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$gl_cv_lib_socket"; then
+ gl_cv_lib_socket="none needed"
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_socket" >&5
+printf "%s\n" "$gl_cv_lib_socket" >&6; }
+ if test "$gl_cv_lib_socket" != "none needed"; then
+ LIBSOCKET="$gl_cv_lib_socket"
+ fi
+ fi
+
+
+
+
+
+
+ :
+
+
+ac_fn_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_setenv" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_SETENV $ac_have_decl" >>confdefs.h
+
+
+
+
+
+ if test $ac_cv_have_decl_setenv = no; then
+ HAVE_DECL_SETENV=0
+ fi
+
+
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default"
+if test "x$ac_cv_header_search_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SEARCH_H 1" >>confdefs.h
+
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tsearch" >&5
+printf %s "checking for tsearch... " >&6; }
+if test ${gl_cv_onwards_func_tsearch+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "tsearch" "ac_cv_have_decl_tsearch" "#include <search.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_tsearch" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_tsearch = yes; then
+ ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch"
+if test "x$ac_cv_func_tsearch" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_tsearch = yes; then
+ gl_cv_onwards_func_tsearch=yes
+ else
+ gl_cv_onwards_func_tsearch='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_tsearch='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch"
+if test "x$ac_cv_func_tsearch" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_tsearch=$ac_cv_func_tsearch
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_tsearch" >&5
+printf "%s\n" "$gl_cv_onwards_func_tsearch" >&6; }
+
+ case "$gl_cv_onwards_func_tsearch" in
+ future*) ac_cv_func_tsearch=no ;;
+ *) ac_cv_func_tsearch=$gl_cv_onwards_func_tsearch ;;
+ esac
+ if test $ac_cv_func_tsearch = yes; then
+
+printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h
+
+ fi
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "uid_t" >/dev/null 2>&1
+then :
+ ac_cv_type_uid_t=yes
+else $as_nop
+ ac_cv_type_uid_t=no
+fi
+rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
+if test $ac_cv_type_uid_t = no; then
+
+printf "%s\n" "#define uid_t int" >>confdefs.h
+
+
+printf "%s\n" "#define gid_t int" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_signal_h='<'signal.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5
+printf %s "checking absolute name of <signal.h>... " >&6; }
+if test ${gl_cv_next_signal_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <signal.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'signal.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_signal_h
+ gl_cv_next_signal_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5
+printf "%s\n" "$gl_cv_next_signal_h" >&6; }
+ fi
+ NEXT_SIGNAL_H=$gl_cv_next_signal_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'signal.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_signal_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive
+
+
+
+
+
+# AIX declares sig_atomic_t to already include volatile, and C89 compilers
+# then choke on 'volatile sig_atomic_t'. C99 requires that it compile.
+ ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes
+then :
+
+else $as_nop
+ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0
+fi
+
+
+
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" "
+#include <signal.h>
+
+"
+if test "x$ac_cv_type_sighandler_t" = xyes
+then :
+
+else $as_nop
+ HAVE_SIGHANDLER_T=0
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_header_sys_ioctl_h = yes; then
+ HAVE_SYS_IOCTL_H=1
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/ioctl.h> declares ioctl" >&5
+printf %s "checking whether <sys/ioctl.h> declares ioctl... " >&6; }
+if test ${gl_cv_decl_ioctl_in_sys_ioctl_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/ioctl.h>
+int
+main (void)
+{
+(void) ioctl;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_decl_ioctl_in_sys_ioctl_h=yes
+else $as_nop
+ gl_cv_decl_ioctl_in_sys_ioctl_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_ioctl_in_sys_ioctl_h" >&5
+printf "%s\n" "$gl_cv_decl_ioctl_in_sys_ioctl_h" >&6; }
+ else
+ HAVE_SYS_IOCTL_H=0
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/ioctl.h>" >&5
+printf %s "checking absolute name of <sys/ioctl.h>... " >&6; }
+if test ${gl_cv_next_sys_ioctl_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_ioctl_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/ioctl.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/ioctl.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_ioctl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_ioctl_h
+ gl_cv_next_sys_ioctl_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_ioctl_h" >&5
+printf "%s\n" "$gl_cv_next_sys_ioctl_h" >&6; }
+ fi
+ NEXT_SYS_IOCTL_H=$gl_cv_next_sys_ioctl_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/ioctl.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_ioctl_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_sys_uio_h='<'sys/uio.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/uio.h>" >&5
+printf %s "checking absolute name of <sys/uio.h>... " >&6; }
+if test ${gl_cv_next_sys_uio_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_sys_uio_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/uio.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'sys/uio.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_sys_uio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_sys_uio_h
+ gl_cv_next_sys_uio_h='"'$gl_header'"'
+ else
+ gl_cv_next_sys_uio_h='<'sys/uio.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_uio_h" >&5
+printf "%s\n" "$gl_cv_next_sys_uio_h" >&6; }
+ fi
+ NEXT_SYS_UIO_H=$gl_cv_next_sys_uio_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'sys/uio.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_sys_uio_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_sys_uio_h = yes; then
+ HAVE_SYS_UIO_H=1
+ else
+ HAVE_SYS_UIO_H=0
+ fi
+
+
+
+
+ac_fn_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_unsetenv" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_UNSETENV $ac_have_decl" >>confdefs.h
+
+
+
+
+
+
+ if test $gl_threads_api = posix; then
+ YIELD_LIB="$SCHED_YIELD_LIB"
+ else
+ YIELD_LIB=
+ fi
+
+
+
+
+ GL_CFLAG_GNULIB_WARNINGS=''
+ if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then
+ cat > conftest.c <<\EOF
+ #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-cast-qual
+ -Wno-conversion
+ -Wno-float-equal
+ -Wno-sign-compare
+ -Wno-undef
+ -Wno-unused-function
+ -Wno-unused-parameter
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-float-conversion
+ #endif
+ #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wimplicit-fallthrough
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-pedantic
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-sign-conversion
+ -Wno-type-limits
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4
+ -Wno-unsuffixed-float-constants
+ #endif
+EOF
+ gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5
+ (eval $gl_command) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ gl_options=`grep -v '#' conftest.out`
+ for word in $gl_options; do
+ GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word"
+ done
+ fi
+ rm -f conftest.c conftest.out
+ fi
+
+
+
+
+ if true; then
+ GL_COND_LIBTOOL_TRUE=
+ GL_COND_LIBTOOL_FALSE='#'
+else
+ GL_COND_LIBTOOL_TRUE='#'
+ GL_COND_LIBTOOL_FALSE=
+fi
+
+ gl_cond_libtool=true
+ gl_m4_base='m4'
+
+
+
+
+
+
+
+
+
+
+
+
+ gl_source_base='lib'
+ gl_source_base_prefix=
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alignas and alignof" >&5
+printf %s "checking for alignas and alignof... " >&6; }
+if test ${gl_cv_header_working_stdalign_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS=$CFLAGS
+ for gl_working in "yes, keywords" "yes, <stdalign.h> macros"; do
+ case $gl_working in #(
+ *stdalign.h*) :
+ CFLAGS="$gl_save_CFLAGS -DINCLUDE_STDALIGN_H" ;; #(
+ *) :
+ ;;
+esac
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdint.h>
+ #ifdef INCLUDE_STDALIGN_H
+ #include <stdalign.h>
+ #endif
+ #include <stddef.h>
+
+ /* Test that alignof yields a result consistent with offsetof.
+ This catches GCC bug 52023
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */
+ #ifdef __cplusplus
+ template <class t> struct alignof_helper { char a; t b; };
+ # define ao(type) offsetof (alignof_helper<type>, b)
+ #else
+ # define ao(type) offsetof (struct { char a; type b; }, b)
+ #endif
+ char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1];
+ char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1];
+ char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1];
+
+ /* Test alignas only on platforms where gnulib can help. */
+ #if \
+ ((defined __cplusplus && 201103 <= __cplusplus) \
+ || (__TINYC__ && defined __attribute__) \
+ || (defined __APPLE__ && defined __MACH__ \
+ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ : __GNUC__) \
+ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \
+ || 1300 <= _MSC_VER)
+ struct alignas_test { char c; char alignas (8) alignas_8; };
+ char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
+ ? 1 : -1];
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_working_stdalign_h=$gl_working
+else $as_nop
+ gl_cv_header_working_stdalign_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+ CFLAGS=$gl_save_CFLAGS
+ test "$gl_cv_header_working_stdalign_h" != no && break
+ done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdalign_h" >&5
+printf "%s\n" "$gl_cv_header_working_stdalign_h" >&6; }
+
+ case $gl_cv_header_working_stdalign_h in #(
+ yes*keyword*) :
+
+printf "%s\n" "#define HAVE_C_ALIGNASOF 1" >>confdefs.h
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+
+LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'`
+
+
+
+ if test $ac_cv_func_alloca_works = no; then
+ :
+ fi
+
+ # Define an additional variable used in the Makefile substitution.
+ if test $ac_cv_working_alloca_h = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
+printf %s "checking for alloca as a compiler built-in... " >&6; }
+if test ${gl_cv_rpl_alloca+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+ Need own alloca
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Need own alloca" >/dev/null 2>&1
+then :
+ gl_cv_rpl_alloca=yes
+else $as_nop
+ gl_cv_rpl_alloca=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
+printf "%s\n" "$gl_cv_rpl_alloca" >&6; }
+ if test $gl_cv_rpl_alloca = yes; then
+
+printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h
+
+ GL_GENERATE_ALLOCA_H=true
+ else
+ GL_GENERATE_ALLOCA_H=false
+ fi
+ else
+ GL_GENERATE_ALLOCA_H=true
+ fi
+
+ if test $ac_cv_working_alloca_h = yes; then
+ HAVE_ALLOCA_H=1
+ else
+ HAVE_ALLOCA_H=0
+ fi
+
+
+
+
+
+
+ case "$GL_GENERATE_ALLOCA_H" in
+ false) ALLOCA_H='' ;;
+ true)
+ if test -z "$ALLOCA_H"; then
+ ALLOCA_H="${gl_source_base_prefix}alloca.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ALLOCA_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ALLOCA_H; then
+ GL_GENERATE_ALLOCA_H_TRUE=
+ GL_GENERATE_ALLOCA_H_FALSE='#'
+else
+ GL_GENERATE_ALLOCA_H_TRUE='#'
+ GL_GENERATE_ALLOCA_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
+ GL_GENERATE_ALLOCA_H_TRUE='#'
+ GL_GENERATE_ALLOCA_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5
+printf %s "checking whether to enable assertions... " >&6; }
+ # Check whether --enable-assert was given.
+if test ${enable_assert+y}
+then :
+ enableval=$enable_assert; if test "x$enableval" = xno
+then :
+
+printf "%s\n" "#define NDEBUG 1" >>confdefs.h
+
+elif test "x$enableval" != xyes
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5
+printf "%s\n" "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;}
+ enable_assert=yes
+fi
+else $as_nop
+ enable_assert=yes
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_assert" >&5
+printf "%s\n" "$enable_assert" >&6; }
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static_assert" >&5
+printf %s "checking for static_assert... " >&6; }
+if test ${gl_cv_static_assert+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS=$CFLAGS
+ for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do
+ case $gl_working in #(
+ *assert.h*) :
+ CFLAGS="$gl_save_CFLAGS -DINCLUDE_ASSERT_H" ;; #(
+ *) :
+ ;;
+esac
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined __clang__ && __STDC_VERSION__ < 202311
+ #pragma clang diagnostic error "-Wc2x-extensions"
+ #pragma clang diagnostic error "-Wc++1z-extensions"
+ #endif
+ #ifdef INCLUDE_ASSERT_H
+ #include <assert.h>
+ #endif
+ static_assert (2 + 2 == 4, "arithmetic does not work");
+ static_assert (2 + 2 == 4);
+
+int
+main (void)
+{
+
+ static_assert (sizeof (char) == 1, "sizeof does not work");
+ static_assert (sizeof (char) == 1);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_static_assert=$gl_working
+else $as_nop
+ gl_cv_static_assert=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$gl_save_CFLAGS
+ test "$gl_cv_static_assert" != no && break
+ done
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_static_assert" >&5
+printf "%s\n" "$gl_cv_static_assert" >&6; }
+
+ GL_GENERATE_ASSERT_H=false
+ case $gl_cv_static_assert in #(
+ yes*keyword*) :
+
+printf "%s\n" "#define HAVE_C_STATIC_ASSERT 1" >>confdefs.h
+ ;; #(
+ no) :
+ GL_GENERATE_ASSERT_H=true
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_assert_h='<'assert.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <assert.h>" >&5
+printf %s "checking absolute name of <assert.h>... " >&6; }
+if test ${gl_cv_next_assert_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <assert.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'assert.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_assert_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_assert_h
+ gl_cv_next_assert_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_assert_h" >&5
+printf "%s\n" "$gl_cv_next_assert_h" >&6; }
+ fi
+ NEXT_ASSERT_H=$gl_cv_next_assert_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'assert.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_assert_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H=$gl_next_as_first_directive
+
+
+
+ ;; #(
+ *) :
+ ;;
+esac
+
+
+
+
+
+
+
+ case "$GL_GENERATE_ASSERT_H" in
+ false) ASSERT_H='' ;;
+ true)
+ if test -z "$ASSERT_H"; then
+ ASSERT_H="${gl_source_base_prefix}assert.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ASSERT_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ASSERT_H; then
+ GL_GENERATE_ASSERT_H_TRUE=
+ GL_GENERATE_ASSERT_H_FALSE='#'
+else
+ GL_GENERATE_ASSERT_H_TRUE='#'
+ GL_GENERATE_ASSERT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ASSERT_H_TRUE}" && test -z "${GL_GENERATE_ASSERT_H_FALSE}"; then
+ GL_GENERATE_ASSERT_H_TRUE='#'
+ GL_GENERATE_ASSERT_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_btowc = no; then
+ HAVE_BTOWC=0
+ else
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5
+printf %s "checking whether btowc(0) is correct... " >&6; }
+if test ${gl_cv_func_btowc_nul+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_btowc_nul="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_btowc_nul="guessing yes" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_btowc_nul="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <wchar.h>
+int main ()
+{
+ if (btowc ('\0') != 0)
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_btowc_nul=yes
+else $as_nop
+ gl_cv_func_btowc_nul=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5
+printf "%s\n" "$gl_cv_func_btowc_nul" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5
+printf %s "checking whether btowc(EOF) is correct... " >&6; }
+if test ${gl_cv_func_btowc_eof+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on IRIX.
+ irix*) gl_cv_func_btowc_eof="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_btowc_eof="guessing yes" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_btowc_eof="guessing yes" ;;
+ esac
+ if test $LOCALE_FR != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ if (btowc (EOF) != WEOF)
+ return 1;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_btowc_eof=yes
+else $as_nop
+ gl_cv_func_btowc_eof=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5
+printf "%s\n" "$gl_cv_func_btowc_eof" >&6; }
+
+ case "$gl_cv_func_btowc_nul" in
+ *yes) ;;
+ *) REPLACE_BTOWC=1 ;;
+ esac
+ case "$gl_cv_func_btowc_eof" in
+ *yes) ;;
+ *) REPLACE_BTOWC=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then
+ GL_COND_OBJ_BTOWC_TRUE=
+ GL_COND_OBJ_BTOWC_FALSE='#'
+else
+ GL_COND_OBJ_BTOWC_TRUE='#'
+ GL_COND_OBJ_BTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_BTOWC_TRUE}" && test -z "${GL_COND_OBJ_BTOWC_FALSE}"; then
+ GL_COND_OBJ_BTOWC_TRUE='#'
+ GL_COND_OBJ_BTOWC_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_BTOWC_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_BTOWC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_BTOWC 1" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5
+printf %s "checking for __builtin_expect... " >&6; }
+if test ${gl_cv___builtin_expect+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ int
+ main (int argc, char **argv)
+ {
+ argc = __builtin_expect (argc, 100);
+ return argv[argc != 100][0];
+ }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv___builtin_expect=yes
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <builtins.h>
+ int
+ main (int argc, char **argv)
+ {
+ argc = __builtin_expect (argc, 100);
+ return argv[argc != 100][0];
+ }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv___builtin_expect="in <builtins.h>"
+else $as_nop
+ gl_cv___builtin_expect=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5
+printf "%s\n" "$gl_cv___builtin_expect" >&6; }
+ if test "$gl_cv___builtin_expect" = yes; then
+ printf "%s\n" "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h
+
+ elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then
+ printf "%s\n" "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h
+
+ fi
+
+
+
+
+
+ REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX"
+ if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether calloc (0, n) and calloc (n, 0) return nonnull" >&5
+printf %s "checking whether calloc (0, n) and calloc (n, 0) return nonnull... " >&6; }
+if test ${ac_cv_func_calloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test $cross_compiling != yes; then
+ ac_cv_func_calloc_0_nonnull=yes
+ if test "$cross_compiling" = yes
+then :
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+int result = 0;
+ char * volatile p = calloc (0, 0);
+ if (!p)
+ result |= 1;
+ free (p);
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+
+else $as_nop
+ ac_cv_func_calloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ else
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_calloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_calloc_0_nonnull" >&6; }
+ case $ac_cv_func_calloc_0_nonnull in #(
+ *yes) :
+ ;; #(
+ *) :
+ REPLACE_CALLOC_FOR_CALLOC_GNU=1 ;;
+esac
+
+ fi
+
+ if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_CALLOC_GNU=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CALLOC_GNU 1" >>confdefs.h
+
+
+
+
+
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=1
+ fi
+
+ if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_CALLOC_POSIX=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+ if test $ac_cv_func_canonicalize_file_name = no; then
+ HAVE_CANONICALIZE_FILE_NAME=0
+ if test $ac_cv_func_realpath = no; then
+ HAVE_REALPATH=0
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes) ;;
+ *) REPLACE_REALPATH=1 ;;
+ esac
+ fi
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes)
+ ;;
+ *)
+ REPLACE_CANONICALIZE_FILE_NAME=1
+ REPLACE_REALPATH=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE=
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#'
+else
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#'
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_TRUE}" && test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_FALSE}"; then
+ GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#'
+ GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#'
+ fi
+
+
+
+printf "%s\n" "#define GNULIB_CANONICALIZE_LGPL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_CANONICALIZE_FILE_NAME=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_REALPATH=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_REALPATH 1" >>confdefs.h
+
+
+
+
+
+
+ # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+ # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+
+ # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all*
+ # programs in the package would end up linked with that potentially-shared
+ # library, inducing unnecessary run-time overhead.
+ CLOCK_TIME_LIB=
+
+ gl_saved_libs=$LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+printf %s "checking for library containing clock_gettime... " >&6; }
+if test ${ac_cv_search_clock_gettime+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char clock_gettime ();
+int
+main (void)
+{
+return clock_gettime ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt posix4
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_clock_gettime+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_clock_gettime+y}
+then :
+
+else $as_nop
+ ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+printf "%s\n" "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ test "$ac_cv_search_clock_gettime" = "none required" ||
+ CLOCK_TIME_LIB=$ac_cv_search_clock_gettime
+fi
+
+ ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres"
+if test "x$ac_cv_func_clock_getres" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "clock_settime" "ac_cv_func_clock_settime"
+if test "x$ac_cv_func_clock_settime" = xyes
+then :
+ printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h
+
+fi
+
+ LIBS=$gl_saved_libs
+ # For backward compatibility.
+ LIB_CLOCK_GETTIME="$CLOCK_TIME_LIB"
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h
+
+
+
+
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_CLOSE=1
+ fi
+
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+ if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
+ REPLACE_CLOSE=1
+ fi
+
+
+
+
+ if test $REPLACE_CLOSE = 1; then
+ GL_COND_OBJ_CLOSE_TRUE=
+ GL_COND_OBJ_CLOSE_FALSE='#'
+else
+ GL_COND_OBJ_CLOSE_TRUE='#'
+ GL_COND_OBJ_CLOSE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CLOSE_TRUE}" && test -z "${GL_COND_OBJ_CLOSE_FALSE}"; then
+ GL_COND_OBJ_CLOSE_TRUE='#'
+ GL_COND_OBJ_CLOSE_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_CLOSE=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CLOSE 1" >>confdefs.h
+
+
+
+
+
+printf "%s\n" "#define GNULIB_CLOSE_STREAM 1" >>confdefs.h
+
+
+
+
+
+
+ gl_save_prefix="${prefix}"
+ gl_save_exec_prefix="${exec_prefix}"
+ gl_save_bindir="${bindir}"
+ gl_save_sbindir="${sbindir}"
+ gl_save_libexecdir="${libexecdir}"
+ gl_save_datarootdir="${datarootdir}"
+ gl_save_datadir="${datadir}"
+ gl_save_sysconfdir="${sysconfdir}"
+ gl_save_sharedstatedir="${sharedstatedir}"
+ gl_save_localstatedir="${localstatedir}"
+ gl_save_runstatedir="${runstatedir}"
+ gl_save_includedir="${includedir}"
+ gl_save_oldincludedir="${oldincludedir}"
+ gl_save_docdir="${docdir}"
+ gl_save_infodir="${infodir}"
+ gl_save_htmldir="${htmldir}"
+ gl_save_dvidir="${dvidir}"
+ gl_save_pdfdir="${pdfdir}"
+ gl_save_psdir="${psdir}"
+ gl_save_libdir="${libdir}"
+ gl_save_lispdir="${lispdir}"
+ gl_save_localedir="${localedir}"
+ gl_save_mandir="${mandir}"
+ gl_save_pkgdatadir="${pkgdatadir}"
+ gl_save_pkgincludedir="${pkgincludedir}"
+ gl_save_pkglibdir="${pkglibdir}"
+ gl_save_pkglibexecdir="${pkglibexecdir}"
+
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval bindir="$bindir"
+ eval sbindir="$sbindir"
+ eval libexecdir="$libexecdir"
+ eval datarootdir="$datarootdir"
+ eval datadir="$datadir"
+ eval sysconfdir="$sysconfdir"
+ eval sharedstatedir="$sharedstatedir"
+ eval localstatedir="$localstatedir"
+ eval runstatedir="$runstatedir"
+ eval includedir="$includedir"
+ eval oldincludedir="$oldincludedir"
+ eval docdir="$docdir"
+ eval infodir="$infodir"
+ eval htmldir="$htmldir"
+ eval dvidir="$dvidir"
+ eval pdfdir="$pdfdir"
+ eval psdir="$psdir"
+ eval libdir="$libdir"
+ eval lispdir="$lispdir"
+ eval localedir="$localedir"
+ eval mandir="$mandir"
+ eval pkgdatadir="$pkgdatadir"
+ eval pkgincludedir="$pkgincludedir"
+ eval pkglibdir="$pkglibdir"
+ eval pkglibexecdir="$pkglibexecdir"
+
+
+
+
+
+
+ gl_final_prefix="$prefix"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_prefix=`cygpath -w "$gl_final_prefix"` ;;
+ esac
+ ;;
+ esac
+ prefix_c=`echo "$gl_final_prefix" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ prefix_c='"'"$prefix_c"'"'
+
+
+ prefix_c_make=`echo "$prefix_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$prefix_c_make" = '\"'"${gl_final_prefix}"'\"'; then
+ prefix_c_make='\"$(prefix)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_exec_prefix="$exec_prefix"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_exec_prefix=`cygpath -w "$gl_final_exec_prefix"` ;;
+ esac
+ ;;
+ esac
+ exec_prefix_c=`echo "$gl_final_exec_prefix" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ exec_prefix_c='"'"$exec_prefix_c"'"'
+
+
+ exec_prefix_c_make=`echo "$exec_prefix_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$exec_prefix_c_make" = '\"'"${gl_final_exec_prefix}"'\"'; then
+ exec_prefix_c_make='\"$(exec_prefix)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_bindir="$bindir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_bindir=`cygpath -w "$gl_final_bindir"` ;;
+ esac
+ ;;
+ esac
+ bindir_c=`echo "$gl_final_bindir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ bindir_c='"'"$bindir_c"'"'
+
+
+ bindir_c_make=`echo "$bindir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$bindir_c_make" = '\"'"${gl_final_bindir}"'\"'; then
+ bindir_c_make='\"$(bindir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_sbindir="$sbindir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_sbindir=`cygpath -w "$gl_final_sbindir"` ;;
+ esac
+ ;;
+ esac
+ sbindir_c=`echo "$gl_final_sbindir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ sbindir_c='"'"$sbindir_c"'"'
+
+
+ sbindir_c_make=`echo "$sbindir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$sbindir_c_make" = '\"'"${gl_final_sbindir}"'\"'; then
+ sbindir_c_make='\"$(sbindir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_libexecdir="$libexecdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_libexecdir=`cygpath -w "$gl_final_libexecdir"` ;;
+ esac
+ ;;
+ esac
+ libexecdir_c=`echo "$gl_final_libexecdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ libexecdir_c='"'"$libexecdir_c"'"'
+
+
+ libexecdir_c_make=`echo "$libexecdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$libexecdir_c_make" = '\"'"${gl_final_libexecdir}"'\"'; then
+ libexecdir_c_make='\"$(libexecdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_datarootdir="$datarootdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_datarootdir=`cygpath -w "$gl_final_datarootdir"` ;;
+ esac
+ ;;
+ esac
+ datarootdir_c=`echo "$gl_final_datarootdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ datarootdir_c='"'"$datarootdir_c"'"'
+
+
+ datarootdir_c_make=`echo "$datarootdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$datarootdir_c_make" = '\"'"${gl_final_datarootdir}"'\"'; then
+ datarootdir_c_make='\"$(datarootdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_datadir="$datadir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_datadir=`cygpath -w "$gl_final_datadir"` ;;
+ esac
+ ;;
+ esac
+ datadir_c=`echo "$gl_final_datadir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ datadir_c='"'"$datadir_c"'"'
+
+
+ datadir_c_make=`echo "$datadir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$datadir_c_make" = '\"'"${gl_final_datadir}"'\"'; then
+ datadir_c_make='\"$(datadir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_sysconfdir="$sysconfdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_sysconfdir=`cygpath -w "$gl_final_sysconfdir"` ;;
+ esac
+ ;;
+ esac
+ sysconfdir_c=`echo "$gl_final_sysconfdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ sysconfdir_c='"'"$sysconfdir_c"'"'
+
+
+ sysconfdir_c_make=`echo "$sysconfdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$sysconfdir_c_make" = '\"'"${gl_final_sysconfdir}"'\"'; then
+ sysconfdir_c_make='\"$(sysconfdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_sharedstatedir="$sharedstatedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_sharedstatedir=`cygpath -w "$gl_final_sharedstatedir"` ;;
+ esac
+ ;;
+ esac
+ sharedstatedir_c=`echo "$gl_final_sharedstatedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ sharedstatedir_c='"'"$sharedstatedir_c"'"'
+
+
+ sharedstatedir_c_make=`echo "$sharedstatedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$sharedstatedir_c_make" = '\"'"${gl_final_sharedstatedir}"'\"'; then
+ sharedstatedir_c_make='\"$(sharedstatedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_localstatedir="$localstatedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_localstatedir=`cygpath -w "$gl_final_localstatedir"` ;;
+ esac
+ ;;
+ esac
+ localstatedir_c=`echo "$gl_final_localstatedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ localstatedir_c='"'"$localstatedir_c"'"'
+
+
+ localstatedir_c_make=`echo "$localstatedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$localstatedir_c_make" = '\"'"${gl_final_localstatedir}"'\"'; then
+ localstatedir_c_make='\"$(localstatedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_runstatedir="$runstatedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_runstatedir=`cygpath -w "$gl_final_runstatedir"` ;;
+ esac
+ ;;
+ esac
+ runstatedir_c=`echo "$gl_final_runstatedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ runstatedir_c='"'"$runstatedir_c"'"'
+
+
+ runstatedir_c_make=`echo "$runstatedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$runstatedir_c_make" = '\"'"${gl_final_runstatedir}"'\"'; then
+ runstatedir_c_make='\"$(runstatedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_includedir="$includedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_includedir=`cygpath -w "$gl_final_includedir"` ;;
+ esac
+ ;;
+ esac
+ includedir_c=`echo "$gl_final_includedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ includedir_c='"'"$includedir_c"'"'
+
+
+ includedir_c_make=`echo "$includedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$includedir_c_make" = '\"'"${gl_final_includedir}"'\"'; then
+ includedir_c_make='\"$(includedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_oldincludedir="$oldincludedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_oldincludedir=`cygpath -w "$gl_final_oldincludedir"` ;;
+ esac
+ ;;
+ esac
+ oldincludedir_c=`echo "$gl_final_oldincludedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ oldincludedir_c='"'"$oldincludedir_c"'"'
+
+
+ oldincludedir_c_make=`echo "$oldincludedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$oldincludedir_c_make" = '\"'"${gl_final_oldincludedir}"'\"'; then
+ oldincludedir_c_make='\"$(oldincludedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_docdir="$docdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_docdir=`cygpath -w "$gl_final_docdir"` ;;
+ esac
+ ;;
+ esac
+ docdir_c=`echo "$gl_final_docdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ docdir_c='"'"$docdir_c"'"'
+
+
+ docdir_c_make=`echo "$docdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$docdir_c_make" = '\"'"${gl_final_docdir}"'\"'; then
+ docdir_c_make='\"$(docdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_infodir="$infodir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_infodir=`cygpath -w "$gl_final_infodir"` ;;
+ esac
+ ;;
+ esac
+ infodir_c=`echo "$gl_final_infodir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ infodir_c='"'"$infodir_c"'"'
+
+
+ infodir_c_make=`echo "$infodir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$infodir_c_make" = '\"'"${gl_final_infodir}"'\"'; then
+ infodir_c_make='\"$(infodir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_htmldir="$htmldir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_htmldir=`cygpath -w "$gl_final_htmldir"` ;;
+ esac
+ ;;
+ esac
+ htmldir_c=`echo "$gl_final_htmldir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ htmldir_c='"'"$htmldir_c"'"'
+
+
+ htmldir_c_make=`echo "$htmldir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$htmldir_c_make" = '\"'"${gl_final_htmldir}"'\"'; then
+ htmldir_c_make='\"$(htmldir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_dvidir="$dvidir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_dvidir=`cygpath -w "$gl_final_dvidir"` ;;
+ esac
+ ;;
+ esac
+ dvidir_c=`echo "$gl_final_dvidir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ dvidir_c='"'"$dvidir_c"'"'
+
+
+ dvidir_c_make=`echo "$dvidir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$dvidir_c_make" = '\"'"${gl_final_dvidir}"'\"'; then
+ dvidir_c_make='\"$(dvidir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_pdfdir="$pdfdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_pdfdir=`cygpath -w "$gl_final_pdfdir"` ;;
+ esac
+ ;;
+ esac
+ pdfdir_c=`echo "$gl_final_pdfdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ pdfdir_c='"'"$pdfdir_c"'"'
+
+
+ pdfdir_c_make=`echo "$pdfdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$pdfdir_c_make" = '\"'"${gl_final_pdfdir}"'\"'; then
+ pdfdir_c_make='\"$(pdfdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_psdir="$psdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_psdir=`cygpath -w "$gl_final_psdir"` ;;
+ esac
+ ;;
+ esac
+ psdir_c=`echo "$gl_final_psdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ psdir_c='"'"$psdir_c"'"'
+
+
+ psdir_c_make=`echo "$psdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$psdir_c_make" = '\"'"${gl_final_psdir}"'\"'; then
+ psdir_c_make='\"$(psdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_libdir="$libdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_libdir=`cygpath -w "$gl_final_libdir"` ;;
+ esac
+ ;;
+ esac
+ libdir_c=`echo "$gl_final_libdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ libdir_c='"'"$libdir_c"'"'
+
+
+ libdir_c_make=`echo "$libdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$libdir_c_make" = '\"'"${gl_final_libdir}"'\"'; then
+ libdir_c_make='\"$(libdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_lispdir="$lispdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_lispdir=`cygpath -w "$gl_final_lispdir"` ;;
+ esac
+ ;;
+ esac
+ lispdir_c=`echo "$gl_final_lispdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ lispdir_c='"'"$lispdir_c"'"'
+
+
+ lispdir_c_make=`echo "$lispdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$lispdir_c_make" = '\"'"${gl_final_lispdir}"'\"'; then
+ lispdir_c_make='\"$(lispdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_localedir="$localedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_localedir=`cygpath -w "$gl_final_localedir"` ;;
+ esac
+ ;;
+ esac
+ localedir_c=`echo "$gl_final_localedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ localedir_c='"'"$localedir_c"'"'
+
+
+ localedir_c_make=`echo "$localedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$localedir_c_make" = '\"'"${gl_final_localedir}"'\"'; then
+ localedir_c_make='\"$(localedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_mandir="$mandir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_mandir=`cygpath -w "$gl_final_mandir"` ;;
+ esac
+ ;;
+ esac
+ mandir_c=`echo "$gl_final_mandir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ mandir_c='"'"$mandir_c"'"'
+
+
+ mandir_c_make=`echo "$mandir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$mandir_c_make" = '\"'"${gl_final_mandir}"'\"'; then
+ mandir_c_make='\"$(mandir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_pkgdatadir="$pkgdatadir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_pkgdatadir=`cygpath -w "$gl_final_pkgdatadir"` ;;
+ esac
+ ;;
+ esac
+ pkgdatadir_c=`echo "$gl_final_pkgdatadir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ pkgdatadir_c='"'"$pkgdatadir_c"'"'
+
+
+ pkgdatadir_c_make=`echo "$pkgdatadir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$pkgdatadir_c_make" = '\"'"${gl_final_pkgdatadir}"'\"'; then
+ pkgdatadir_c_make='\"$(pkgdatadir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_pkgincludedir="$pkgincludedir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_pkgincludedir=`cygpath -w "$gl_final_pkgincludedir"` ;;
+ esac
+ ;;
+ esac
+ pkgincludedir_c=`echo "$gl_final_pkgincludedir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ pkgincludedir_c='"'"$pkgincludedir_c"'"'
+
+
+ pkgincludedir_c_make=`echo "$pkgincludedir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$pkgincludedir_c_make" = '\"'"${gl_final_pkgincludedir}"'\"'; then
+ pkgincludedir_c_make='\"$(pkgincludedir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_pkglibdir="$pkglibdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_pkglibdir=`cygpath -w "$gl_final_pkglibdir"` ;;
+ esac
+ ;;
+ esac
+ pkglibdir_c=`echo "$gl_final_pkglibdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ pkglibdir_c='"'"$pkglibdir_c"'"'
+
+
+ pkglibdir_c_make=`echo "$pkglibdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$pkglibdir_c_make" = '\"'"${gl_final_pkglibdir}"'\"'; then
+ pkglibdir_c_make='\"$(pkglibdir)\"'
+ fi
+
+
+
+
+
+
+
+ gl_final_pkglibexecdir="$pkglibexecdir"
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_pkglibexecdir=`cygpath -w "$gl_final_pkglibexecdir"` ;;
+ esac
+ ;;
+ esac
+ pkglibexecdir_c=`echo "$gl_final_pkglibexecdir" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ pkglibexecdir_c='"'"$pkglibexecdir_c"'"'
+
+
+ pkglibexecdir_c_make=`echo "$pkglibexecdir_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ if test "$pkglibexecdir_c_make" = '\"'"${gl_final_pkglibexecdir}"'\"'; then
+ pkglibexecdir_c_make='\"$(pkglibexecdir)\"'
+ fi
+
+
+
+ pkglibexecdir="${gl_save_pkglibexecdir}"
+ pkglibdir="${gl_save_pkglibdir}"
+ pkgincludedir="${gl_save_pkgincludedir}"
+ pkgdatadir="${gl_save_pkgdatadir}"
+ mandir="${gl_save_mandir}"
+ localedir="${gl_save_localedir}"
+ lispdir="${gl_save_lispdir}"
+ libdir="${gl_save_libdir}"
+ psdir="${gl_save_psdir}"
+ pdfdir="${gl_save_pdfdir}"
+ dvidir="${gl_save_dvidir}"
+ htmldir="${gl_save_htmldir}"
+ infodir="${gl_save_infodir}"
+ docdir="${gl_save_docdir}"
+ oldincludedir="${gl_save_oldincludedir}"
+ includedir="${gl_save_includedir}"
+ runstatedir="${gl_save_runstatedir}"
+ localstatedir="${gl_save_localstatedir}"
+ sharedstatedir="${gl_save_sharedstatedir}"
+ sysconfdir="${gl_save_sysconfdir}"
+ datadir="${gl_save_datadir}"
+ datarootdir="${gl_save_datarootdir}"
+ libexecdir="${gl_save_libexecdir}"
+ sbindir="${gl_save_sbindir}"
+ bindir="${gl_save_bindir}"
+ exec_prefix="${gl_save_exec_prefix}"
+ prefix="${gl_save_prefix}"
+
+
+
+
+printf "%s\n" "#define GNULIB_DIRNAME 1" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5
+printf %s "checking whether // is distinct from /... " >&6; }
+if test ${gl_cv_double_slash_root+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test x"$cross_compiling" = xyes ; then
+ # When cross-compiling, there is no way to tell whether // is special
+ # short of a list of hosts. However, the only known hosts to date
+ # that have a distinct // are Apollo DomainOS (too old to port to),
+ # Cygwin, and z/OS. If anyone knows of another system for which // has
+ # special semantics and is distinct from /, please report it to
+ # <bug-gnulib@gnu.org>.
+ case $host in
+ *-cygwin | i370-ibm-openedition)
+ gl_cv_double_slash_root=yes ;;
+ *)
+ # Be optimistic and assume that / and // are the same when we
+ # don't know.
+ gl_cv_double_slash_root='unknown, assuming no' ;;
+ esac
+ else
+ set x `ls -di / // 2>/dev/null`
+ if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then
+ gl_cv_double_slash_root=no
+ else
+ gl_cv_double_slash_root=yes
+ fi
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5
+printf "%s\n" "$gl_cv_double_slash_root" >&6; }
+ if test "$gl_cv_double_slash_root" = yes; then
+
+printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h
+
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5
+printf %s "checking whether dup2 works... " >&6; }
+if test ${gl_cv_func_dup2_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ mingw*) # on this platform, dup2 always returns 0 for success
+ gl_cv_func_dup2_works="guessing no" ;;
+ cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+ gl_cv_func_dup2_works="guessing no" ;;
+ aix* | freebsd*)
+ # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE,
+ # not EBADF.
+ gl_cv_func_dup2_works="guessing no" ;;
+ haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC.
+ gl_cv_func_dup2_works="guessing no" ;;
+ *-android*) # implemented using dup3(), which fails if oldfd == newfd
+ gl_cv_func_dup2_works="guessing no" ;;
+ os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd.
+ gl_cv_func_dup2_works="guessing no" ;;
+ *) gl_cv_func_dup2_works="guessing yes" ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <limits.h>
+ #include <sys/resource.h>
+ #include <unistd.h>
+
+
+$gl_mda_defines
+
+ #ifndef RLIM_SAVED_CUR
+ # define RLIM_SAVED_CUR RLIM_INFINITY
+ #endif
+ #ifndef RLIM_SAVED_MAX
+ # define RLIM_SAVED_MAX RLIM_INFINITY
+ #endif
+
+int
+main (void)
+{
+int result = 0;
+ int bad_fd = INT_MAX;
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+ && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+ && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != RLIM_SAVED_MAX
+ && rlim.rlim_cur != RLIM_SAVED_CUR)
+ bad_fd = rlim.rlim_cur;
+ #ifdef FD_CLOEXEC
+ if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+ result |= 1;
+ #endif
+ if (dup2 (1, 1) != 1)
+ result |= 2;
+ #ifdef FD_CLOEXEC
+ if (fcntl (1, F_GETFD) != FD_CLOEXEC)
+ result |= 4;
+ #endif
+ close (0);
+ if (dup2 (0, 0) != -1)
+ result |= 8;
+ /* Many gnulib modules require POSIX conformance of EBADF. */
+ if (dup2 (2, bad_fd) == -1 && errno != EBADF)
+ result |= 16;
+ /* Flush out some cygwin core dumps. */
+ if (dup2 (2, -1) != -1 || errno != EBADF)
+ result |= 32;
+ dup2 (2, 255);
+ dup2 (2, 256);
+ /* On OS/2 kLIBC, dup2() does not work on a directory fd. */
+ {
+ int fd = open (".", O_RDONLY);
+ if (fd == -1)
+ result |= 64;
+ else if (dup2 (fd, fd + 1) == -1)
+ result |= 128;
+ close (fd);
+ }
+ return result;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_dup2_works=yes
+else $as_nop
+ gl_cv_func_dup2_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5
+printf "%s\n" "$gl_cv_func_dup2_works" >&6; }
+ case "$gl_cv_func_dup2_works" in
+ *yes) ;;
+ *)
+ REPLACE_DUP2=1
+ ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize"
+if test "x$ac_cv_func_setdtablesize" = xyes
+then :
+ printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h
+
+fi
+
+ ;;
+ esac
+
+
+
+ if test $REPLACE_DUP2 = 1; then
+ GL_COND_OBJ_DUP2_TRUE=
+ GL_COND_OBJ_DUP2_FALSE='#'
+else
+ GL_COND_OBJ_DUP2_TRUE='#'
+ GL_COND_OBJ_DUP2_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_DUP2_TRUE}" && test -z "${GL_COND_OBJ_DUP2_FALSE}"; then
+ GL_COND_OBJ_DUP2_TRUE='#'
+ GL_COND_OBJ_DUP2_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_DUP2_TRUE"; then :
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_DUP2=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_DUP2 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ case "$GL_GENERATE_ERRNO_H" in
+ false) ERRNO_H='' ;;
+ true)
+ if test -z "$ERRNO_H"; then
+ ERRNO_H="${gl_source_base_prefix}errno.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ERRNO_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ERRNO_H; then
+ GL_GENERATE_ERRNO_H_TRUE=
+ GL_GENERATE_ERRNO_H_FALSE='#'
+else
+ GL_GENERATE_ERRNO_H_TRUE='#'
+ GL_GENERATE_ERRNO_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then
+ GL_GENERATE_ERRNO_H_TRUE='#'
+ GL_GENERATE_ERRNO_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test $GL_GENERATE_ERROR_H = true; then
+ GL_COND_OBJ_ERROR_TRUE=
+ GL_COND_OBJ_ERROR_FALSE='#'
+else
+ GL_COND_OBJ_ERROR_TRUE='#'
+ GL_COND_OBJ_ERROR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ERROR_TRUE}" && test -z "${GL_COND_OBJ_ERROR_FALSE}"; then
+ GL_COND_OBJ_ERROR_TRUE='#'
+ GL_COND_OBJ_ERROR_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_ERROR_TRUE"; then :
+
+
+
+
+
+ :
+
+
+fi
+
+
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format"
+
+
+
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format"
+
+
+
+
+
+
+ case "$GL_GENERATE_ERROR_H" in
+ false) ERROR_H='' ;;
+ true)
+ if test -z "$ERROR_H"; then
+ ERROR_H="${gl_source_base_prefix}error.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_ERROR_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_ERROR_H; then
+ GL_GENERATE_ERROR_H_TRUE=
+ GL_GENERATE_ERROR_H_FALSE='#'
+else
+ GL_GENERATE_ERROR_H_TRUE='#'
+ GL_GENERATE_ERROR_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_ERROR_H_TRUE}" && test -z "${GL_GENERATE_ERROR_H_FALSE}"; then
+ GL_GENERATE_ERROR_H_TRUE='#'
+ GL_GENERATE_ERROR_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_fcntl = no; then
+
+
+
+ if test $ac_cv_func_fcntl = no; then
+ HAVE_FCNTL=0
+ else
+ REPLACE_FCNTL=1
+ fi
+
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5
+printf %s "checking whether fcntl handles F_DUPFD correctly... " >&6; }
+if test ${gl_cv_func_fcntl_f_dupfd_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case $host_os in
+ aix* | cygwin* | haiku*)
+ gl_cv_func_fcntl_f_dupfd_works="guessing no" ;;
+ *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+ #include <fcntl.h>
+ #include <limits.h>
+ #include <sys/resource.h>
+ #include <unistd.h>
+
+
+$gl_mda_defines
+
+ #ifndef RLIM_SAVED_CUR
+ # define RLIM_SAVED_CUR RLIM_INFINITY
+ #endif
+ #ifndef RLIM_SAVED_MAX
+ # define RLIM_SAVED_MAX RLIM_INFINITY
+ #endif
+
+int
+main (void)
+{
+int result = 0;
+ int bad_fd = INT_MAX;
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+ && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+ && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != RLIM_SAVED_MAX
+ && rlim.rlim_cur != RLIM_SAVED_CUR)
+ bad_fd = rlim.rlim_cur;
+ if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+ if (errno != EINVAL) result |= 2;
+ if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
+ if (errno != EINVAL) result |= 8;
+ /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */
+ {
+ int fd;
+ fd = open (".", O_RDONLY);
+ if (fd == -1)
+ result |= 16;
+ else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1)
+ result |= 32;
+
+ close (fd);
+ }
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_fcntl_f_dupfd_works=yes
+else $as_nop
+ gl_cv_func_fcntl_f_dupfd_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5
+printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_works" >&6; }
+ case $gl_cv_func_fcntl_f_dupfd_works in
+ *yes) ;;
+ *)
+
+
+ if test $ac_cv_func_fcntl = no; then
+ HAVE_FCNTL=0
+ else
+ REPLACE_FCNTL=1
+ fi
+
+
+printf "%s\n" "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5
+printf %s "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; }
+if test ${gl_cv_func_fcntl_f_dupfd_cloexec+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on NetBSD.
+ netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;;
+ *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <fcntl.h>
+ #include <unistd.h>
+ int main (int argc, char *argv[])
+ {
+ if (argc == 1)
+ /* parent process */
+ {
+ if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0)
+ return 1;
+ return execl ("./conftest", "./conftest", "child", NULL);
+ }
+ else
+ /* child process */
+ return (fcntl (10, F_GETFL) < 0 ? 0 : 42);
+ }
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+ it to support the semantics on older kernels that failed with EINVAL. */
+choke me
+#endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_fcntl_f_dupfd_cloexec=yes
+else $as_nop
+ gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+else $as_nop
+ gl_cv_func_fcntl_f_dupfd_cloexec=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5
+printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; }
+ case "$gl_cv_func_fcntl_f_dupfd_cloexec" in
+ *yes) ;;
+ *)
+
+
+ if test $ac_cv_func_fcntl = no; then
+ HAVE_FCNTL=0
+ else
+ REPLACE_FCNTL=1
+ fi
+
+ ;;
+ esac
+ fi
+
+
+
+ if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then
+ GL_COND_OBJ_FCNTL_TRUE=
+ GL_COND_OBJ_FCNTL_FALSE='#'
+else
+ GL_COND_OBJ_FCNTL_TRUE='#'
+ GL_COND_OBJ_FCNTL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FCNTL_TRUE}" && test -z "${GL_COND_OBJ_FCNTL_FALSE}"; then
+ GL_COND_OBJ_FCNTL_TRUE='#'
+ GL_COND_OBJ_FCNTL_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FCNTL=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FCNTL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ fp_headers='
+ #include <stdio.h>
+ #if HAVE_STDIO_EXT_H
+ # include <stdio_ext.h>
+ #endif
+ '
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5
+printf %s "checking for __fpending... " >&6; }
+if test ${gl_cv_func___fpending+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$fp_headers
+int
+main (void)
+{
+return ! __fpending (stdin);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func___fpending=yes
+else $as_nop
+ gl_cv_func___fpending=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func___fpending" >&5
+printf "%s\n" "$gl_cv_func___fpending" >&6; }
+ if test $gl_cv_func___fpending = yes; then
+ ac_fn_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl___fpending" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL___FPENDING $ac_have_decl" >>confdefs.h
+
+ fi
+
+
+ if test $gl_cv_func___fpending = no; then
+ GL_COND_OBJ_FPENDING_TRUE=
+ GL_COND_OBJ_FPENDING_FALSE='#'
+else
+ GL_COND_OBJ_FPENDING_TRUE='#'
+ GL_COND_OBJ_FPENDING_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FPENDING_TRUE}" && test -z "${GL_COND_OBJ_FPENDING_FALSE}"; then
+ GL_COND_OBJ_FPENDING_TRUE='#'
+ GL_COND_OBJ_FPENDING_FALSE='#'
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether free is known to preserve errno" >&5
+printf %s "checking whether free is known to preserve errno... " >&6; }
+if test ${gl_cv_func_free_preserves_errno+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__)
+ #elif defined __OpenBSD__
+ #elif defined __sun
+ #else
+ #error "'free' is not known to preserve errno"
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_free_preserves_errno=yes
+else $as_nop
+ gl_cv_func_free_preserves_errno=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_free_preserves_errno" >&5
+printf "%s\n" "$gl_cv_func_free_preserves_errno" >&6; }
+
+ case $gl_cv_func_free_preserves_errno in
+ *yes)
+
+printf "%s\n" "#define HAVE_FREE_POSIX 1" >>confdefs.h
+
+ ;;
+ *) REPLACE_FREE=1 ;;
+ esac
+
+
+ if test $REPLACE_FREE = 1; then
+ GL_COND_OBJ_FREE_TRUE=
+ GL_COND_OBJ_FREE_FALSE='#'
+else
+ GL_COND_OBJ_FREE_TRUE='#'
+ GL_COND_OBJ_FREE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FREE_TRUE}" && test -z "${GL_COND_OBJ_FREE_FALSE}"; then
+ GL_COND_OBJ_FREE_TRUE='#'
+ GL_COND_OBJ_FREE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FREE_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FREE_POSIX=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FREE_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+
+ case "$host_os" in
+ mingw* | solaris*)
+ REPLACE_FSTAT=1
+ ;;
+ esac
+
+
+
+
+ if test $REPLACE_FSTAT = 1; then
+ GL_COND_OBJ_FSTAT_TRUE=
+ GL_COND_OBJ_FSTAT_FALSE='#'
+else
+ GL_COND_OBJ_FSTAT_TRUE='#'
+ GL_COND_OBJ_FSTAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FSTAT_TRUE}" && test -z "${GL_COND_OBJ_FSTAT_FALSE}"; then
+ GL_COND_OBJ_FSTAT_TRUE='#'
+ GL_COND_OBJ_FSTAT_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FSTAT_TRUE"; then :
+
+ case "$host_os" in
+ mingw*)
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext"
+
+ ;;
+ esac
+
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FSTAT=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FSTAT 1" >>confdefs.h
+
+
+
+
+
+
+ if test $ac_cv_func_fsync = no; then
+ HAVE_FSYNC=0
+ fi
+
+
+ if test $HAVE_FSYNC = 0; then
+ GL_COND_OBJ_FSYNC_TRUE=
+ GL_COND_OBJ_FSYNC_FALSE='#'
+else
+ GL_COND_OBJ_FSYNC_TRUE='#'
+ GL_COND_OBJ_FSYNC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FSYNC_TRUE}" && test -z "${GL_COND_OBJ_FSYNC_FALSE}"; then
+ GL_COND_OBJ_FSYNC_TRUE='#'
+ GL_COND_OBJ_FSYNC_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FSYNC_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FSYNC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FSYNC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_getdtablesize = yes &&
+ test $ac_cv_have_decl_getdtablesize = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5
+printf %s "checking whether getdtablesize works... " >&6; }
+if test ${gl_cv_func_getdtablesize_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;;
+ *)
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows
+ gl_cv_func_getdtablesize_works="guessing no" ;;
+ *) gl_cv_func_getdtablesize_works="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <unistd.h>
+
+
+$gl_mda_defines
+
+
+int
+main (void)
+{
+int size = getdtablesize();
+ if (dup2 (0, getdtablesize()) != -1)
+ return 1;
+ if (size != getdtablesize())
+ return 2;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_getdtablesize_works=yes
+else $as_nop
+ gl_cv_func_getdtablesize_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5
+printf "%s\n" "$gl_cv_func_getdtablesize_works" >&6; }
+ case "$gl_cv_func_getdtablesize_works" in
+ *yes | "no (limitation)") ;;
+ *) REPLACE_GETDTABLESIZE=1 ;;
+ esac
+ else
+ HAVE_GETDTABLESIZE=0
+ fi
+
+
+ if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then
+ GL_COND_OBJ_GETDTABLESIZE_TRUE=
+ GL_COND_OBJ_GETDTABLESIZE_FALSE='#'
+else
+ GL_COND_OBJ_GETDTABLESIZE_TRUE='#'
+ GL_COND_OBJ_GETDTABLESIZE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETDTABLESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETDTABLESIZE_FALSE}"; then
+ GL_COND_OBJ_GETDTABLESIZE_TRUE='#'
+ GL_COND_OBJ_GETDTABLESIZE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_GETDTABLESIZE_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETDTABLESIZE=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ REPLACE_GETOPT=0
+ if test -n "$gl_replace_getopt"; then
+ REPLACE_GETOPT=1
+ fi
+
+ GL_GENERATE_GETOPT_H=false
+ GL_GENERATE_GETOPT_CDEFS_H=false
+ if test $REPLACE_GETOPT = 1; then
+
+
+ if test $ac_cv_header_sys_cdefs_h = yes; then
+ HAVE_SYS_CDEFS_H=1
+ else
+ HAVE_SYS_CDEFS_H=0
+ fi
+
+
+
+printf "%s\n" "#define __GETOPT_PREFIX rpl_" >>confdefs.h
+
+ GL_GENERATE_GETOPT_H=true
+ GL_GENERATE_GETOPT_CDEFS_H=true
+
+ fi
+
+
+
+
+
+ case "$GL_GENERATE_GETOPT_H" in
+ false) GETOPT_H='' ;;
+ true)
+ if test -z "$GETOPT_H"; then
+ GETOPT_H="${gl_source_base_prefix}getopt.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_GETOPT_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_GETOPT_H; then
+ GL_GENERATE_GETOPT_H_TRUE=
+ GL_GENERATE_GETOPT_H_FALSE='#'
+else
+ GL_GENERATE_GETOPT_H_TRUE='#'
+ GL_GENERATE_GETOPT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_GETOPT_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_H_FALSE}"; then
+ GL_GENERATE_GETOPT_H_TRUE='#'
+ GL_GENERATE_GETOPT_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+ case "$GL_GENERATE_GETOPT_CDEFS_H" in
+ false) GETOPT_CDEFS_H='' ;;
+ true)
+ if test -z "$GETOPT_CDEFS_H"; then
+ GETOPT_CDEFS_H="${gl_source_base_prefix}getopt-cdefs.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_GETOPT_CDEFS_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_GETOPT_CDEFS_H; then
+ GL_GENERATE_GETOPT_CDEFS_H_TRUE=
+ GL_GENERATE_GETOPT_CDEFS_H_FALSE='#'
+else
+ GL_GENERATE_GETOPT_CDEFS_H_TRUE='#'
+ GL_GENERATE_GETOPT_CDEFS_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_GETOPT_CDEFS_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_CDEFS_H_FALSE}"; then
+ GL_GENERATE_GETOPT_CDEFS_H_TRUE='#'
+ GL_GENERATE_GETOPT_CDEFS_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+ if test $REPLACE_GETOPT = 1; then
+ GL_COND_OBJ_GETOPT_TRUE=
+ GL_COND_OBJ_GETOPT_FALSE='#'
+else
+ GL_COND_OBJ_GETOPT_TRUE='#'
+ GL_COND_OBJ_GETOPT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETOPT_TRUE}" && test -z "${GL_COND_OBJ_GETOPT_FALSE}"; then
+ GL_COND_OBJ_GETOPT_TRUE='#'
+ GL_COND_OBJ_GETOPT_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_GETOPT_TRUE"; then :
+
+
+
+
+
+
+
+ GL_GNULIB_UNISTD_H_GETOPT=1
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETOPT_POSIX=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETOPT_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getprogname" >&5
+printf %s "checking for getprogname... " >&6; }
+if test ${gl_cv_onwards_func_getprogname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "getprogname" "ac_cv_have_decl_getprogname" "#include <stdlib.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getprogname" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_getprogname = yes; then
+ ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname"
+if test "x$ac_cv_func_getprogname" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_getprogname = yes; then
+ gl_cv_onwards_func_getprogname=yes
+ else
+ gl_cv_onwards_func_getprogname='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_getprogname='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname"
+if test "x$ac_cv_func_getprogname" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_getprogname=$ac_cv_func_getprogname
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getprogname" >&5
+printf "%s\n" "$gl_cv_onwards_func_getprogname" >&6; }
+
+ case "$gl_cv_onwards_func_getprogname" in
+ future*) ac_cv_func_getprogname=no ;;
+ *) ac_cv_func_getprogname=$gl_cv_onwards_func_getprogname ;;
+ esac
+ if test $ac_cv_func_getprogname = yes; then
+
+printf "%s\n" "#define HAVE_GETPROGNAME 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_getprogname = no; then
+ HAVE_GETPROGNAME=0
+ case "$gl_cv_onwards_func_getprogname" in
+ future*) REPLACE_GETPROGNAME=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1; then
+ GL_COND_OBJ_GETPROGNAME_TRUE=
+ GL_COND_OBJ_GETPROGNAME_FALSE='#'
+else
+ GL_COND_OBJ_GETPROGNAME_TRUE='#'
+ GL_COND_OBJ_GETPROGNAME_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETPROGNAME_TRUE}" && test -z "${GL_COND_OBJ_GETPROGNAME_FALSE}"; then
+ GL_COND_OBJ_GETPROGNAME_TRUE='#'
+ GL_COND_OBJ_GETPROGNAME_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_GETPROGNAME_TRUE"; then :
+
+
+
+
+ ac_found=0
+ ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_program_invocation_name" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
+ ac_found=1
+fi
+
+ ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
+ ac_found=1
+fi
+
+ ac_fn_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl___argv" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL___ARGV $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
+ ac_found=1
+fi
+
+
+ # Incur the cost of this test only if none of the above worked.
+ if test $ac_found = 0; then
+ # On OpenBSD 5.1, using the global __progname variable appears to be
+ # the only way to implement getprogname.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5
+printf %s "checking whether __progname is defined in default libraries... " >&6; }
+if test ${gl_cv_var___progname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_cv_var___progname=
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern char *__progname;
+int
+main (void)
+{
+return *__progname;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_var___progname=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5
+printf "%s\n" "$gl_cv_var___progname" >&6; }
+ if test "$gl_cv_var___progname" = yes; then
+
+printf "%s\n" "#define HAVE_VAR___PROGNAME 1" >>confdefs.h
+
+ fi
+ fi
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETPROGNAME=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETPROGNAME 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getrandom" >&5
+printf %s "checking for getrandom... " >&6; }
+if test ${gl_cv_onwards_func_getrandom+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "getrandom" "ac_cv_have_decl_getrandom" "/* Additional includes are needed before <sys/random.h> on uClibc
+ and Mac OS X. */
+ #include <sys/types.h>
+ #include <stdlib.h>
+ #include <sys/random.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getrandom" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_getrandom = yes; then
+ ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom"
+if test "x$ac_cv_func_getrandom" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_getrandom = yes; then
+ gl_cv_onwards_func_getrandom=yes
+ else
+ gl_cv_onwards_func_getrandom='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_getrandom='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom"
+if test "x$ac_cv_func_getrandom" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_getrandom=$ac_cv_func_getrandom
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getrandom" >&5
+printf "%s\n" "$gl_cv_onwards_func_getrandom" >&6; }
+
+ case "$gl_cv_onwards_func_getrandom" in
+ future*) ac_cv_func_getrandom=no ;;
+ *) ac_cv_func_getrandom=$gl_cv_onwards_func_getrandom ;;
+ esac
+ if test $ac_cv_func_getrandom = yes; then
+
+printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h
+
+ fi
+
+
+ if test "$ac_cv_func_getrandom" != yes; then
+ HAVE_GETRANDOM=0
+ case "$gl_cv_onwards_func_getrandom" in
+ future*) REPLACE_GETRANDOM=1 ;;
+ esac
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getrandom is compatible with its GNU+BSD signature" >&5
+printf %s "checking whether getrandom is compatible with its GNU+BSD signature... " >&6; }
+if test ${gl_cv_func_getrandom_ok+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Additional includes are needed before <sys/random.h> on uClibc
+ and Mac OS X. */
+ #include <sys/types.h>
+ #include <stdlib.h>
+ #include <sys/random.h>
+ ssize_t getrandom (void *, size_t, unsigned int);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_getrandom_ok=yes
+else $as_nop
+ gl_cv_func_getrandom_ok=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getrandom_ok" >&5
+printf "%s\n" "$gl_cv_func_getrandom_ok" >&6; }
+ if test $gl_cv_func_getrandom_ok = no; then
+ REPLACE_GETRANDOM=1
+ fi
+ fi
+
+ case "$host_os" in
+ mingw*)
+ ac_fn_c_check_header_compile "$LINENO" "bcrypt.h" "ac_cv_header_bcrypt_h" "#include <windows.h>
+
+"
+if test "x$ac_cv_header_bcrypt_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_BCRYPT_H 1" >>confdefs.h
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the bcrypt library is guaranteed to be present" >&5
+printf %s "checking whether the bcrypt library is guaranteed to be present... " >&6; }
+if test ${gl_cv_lib_assume_bcrypt+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <windows.h>
+int
+main (void)
+{
+#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7)
+ cannot assume it
+ #endif
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_lib_assume_bcrypt=yes
+else $as_nop
+ gl_cv_lib_assume_bcrypt=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_assume_bcrypt" >&5
+printf "%s\n" "$gl_cv_lib_assume_bcrypt" >&6; }
+ if test $gl_cv_lib_assume_bcrypt = yes; then
+
+printf "%s\n" "#define HAVE_LIB_BCRYPT 1" >>confdefs.h
+
+ GETRANDOM_LIB='-lbcrypt'
+ else
+ GETRANDOM_LIB='-ladvapi32'
+ fi
+ ;;
+ *)
+ GETRANDOM_LIB= ;;
+ esac
+
+ LIB_GETRANDOM="$GETRANDOM_LIB"
+
+
+
+ if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then
+ GL_COND_OBJ_GETRANDOM_TRUE=
+ GL_COND_OBJ_GETRANDOM_FALSE='#'
+else
+ GL_COND_OBJ_GETRANDOM_TRUE='#'
+ GL_COND_OBJ_GETRANDOM_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETRANDOM_TRUE}" && test -z "${GL_COND_OBJ_GETRANDOM_FALSE}"; then
+ GL_COND_OBJ_GETRANDOM_TRUE='#'
+ GL_COND_OBJ_GETRANDOM_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETRANDOM=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETRANDOM 1" >>confdefs.h
+
+
+
+
+
+
+
+ # Autoconf 2.61a.99 and earlier don't support linking a file only
+ # in VPATH builds. But since GNUmakefile is for maintainer use
+ # only, it does not matter if we skip the link with older autoconf.
+ # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+ # builds, so use a shell variable to bypass this.
+ GNUmakefile=GNUmakefile
+ ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
+
+
+ HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB"
+
+ LIB_HARD_LOCALE="$HARD_LOCALE_LIB"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler flag to ignore unused libraries" >&5
+printf %s "checking for C compiler flag to ignore unused libraries... " >&6; }
+if test ${gl_cv_prog_c_ignore_unused_libraries+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_cv_prog_c_ignore_unused_libraries=none
+ gl_saved_ldflags=$LDFLAGS
+ gl_saved_libs=$LIBS
+ # Link with -lm to detect binutils 2.16 bug with --as-needed; see
+ # <https://lists.gnu.org/r/bug-gnulib/2006-06/msg00131.html>.
+ LIBS="$LIBS -lm"
+ # Use long option sequences like '-z ignore' to test for the feature,
+ # to forestall problems with linkers that have -z, -i, -g, -n, etc. flags.
+ # GCC + binutils likes '-Wl,--as-needed'.
+ # GCC + Solaris ld likes '-Wl,-z,ignore'.
+ # Sun C likes '-Wl,-z,ignore'. '-z ignore' is accepted but has no effect.
+ # Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11
+ # native cc issues annoying warnings and then ignores it,
+ # which would cause us to incorrectly conclude that it worked.
+ for gl_flags in '-Wl,--as-needed' \
+ '-Wl,-z,ignore' \
+ '-z ignore'
+
+ do
+ LDFLAGS="$gl_flags $LDFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_prog_c_ignore_unused_libraries=$gl_flags
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$gl_saved_ldflags
+ test "$gl_cv_prog_c_ignore_unused_libraries" != none &&
+ break
+ done
+ LIBS=$gl_saved_libs
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_prog_c_ignore_unused_libraries" >&5
+printf "%s\n" "$gl_cv_prog_c_ignore_unused_libraries" >&6; }
+ IGNORE_UNUSED_LIBRARIES_CFLAGS=
+ if test "$gl_cv_prog_c_ignore_unused_libraries" != none; then
+ IGNORE_UNUSED_LIBRARIES_CFLAGS="$gl_cv_prog_c_ignore_unused_libraries"
+ fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5
+printf %s "checking whether the compiler supports the __inline keyword... " >&6; }
+if test ${gl_cv_c___inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int foo_t;
+ static __inline foo_t foo (void) { return 0; }
+int
+main (void)
+{
+return foo ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_c___inline=yes
+else $as_nop
+ gl_cv_c___inline=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5
+printf "%s\n" "$gl_cv_c___inline" >&6; }
+ if test $gl_cv_c___inline = yes; then
+
+printf "%s\n" "#define HAVE___INLINE 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+ case "$GL_GENERATE_LIMITS_H" in
+ false) LIMITS_H='' ;;
+ true)
+ if test -z "$LIMITS_H"; then
+ LIMITS_H="${gl_source_base_prefix}limits.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_LIMITS_H; then
+ GL_GENERATE_LIMITS_H_TRUE=
+ GL_GENERATE_LIMITS_H_FALSE='#'
+else
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+ LOCALCHARSET_TESTS_ENVIRONMENT=
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $REPLACE_STRUCT_LCONV = 1; then
+ REPLACE_LOCALECONV=1
+ fi
+
+
+ if test $REPLACE_LOCALECONV = 1; then
+ GL_COND_OBJ_LOCALECONV_TRUE=
+ GL_COND_OBJ_LOCALECONV_FALSE='#'
+else
+ GL_COND_OBJ_LOCALECONV_TRUE='#'
+ GL_COND_OBJ_LOCALECONV_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_LOCALECONV_TRUE}" && test -z "${GL_COND_OBJ_LOCALECONV_FALSE}"; then
+ GL_COND_OBJ_LOCALECONV_TRUE='#'
+ GL_COND_OBJ_LOCALECONV_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_LOCALECONV_TRUE"; then :
+
+
+ ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h>
+"
+if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1" >>confdefs.h
+
+
+fi
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_LOCALECONV=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h
+
+
+
+
+
+ if test "$gl_threads_api" = posix; then
+ # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
+ # pthread_rwlock_* functions.
+ has_rwlock=false
+ ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h>
+"
+if test "x$ac_cv_type_pthread_rwlock_t" = xyes
+then :
+ has_rwlock=true
+
+printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
+
+fi
+
+ if $has_rwlock; then
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5
+printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; }
+if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess no on bionic systems.
+ *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess yes on native Windows with the mingw-w64 winpthreads library.
+ # Guess no on native Windows with the gnulib windows-rwlock module.
+ mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+ gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
+ else
+ gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no"
+ fi
+ ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define SUCCEED() exit (0)
+#define FAILURE() exit (1)
+#define UNEXPECTED(n) (exit (10 + (n)))
+
+/* The main thread creates the waiting writer and the requesting reader threads
+ in the default way; this guarantees that they have the same priority.
+ We can reuse the main thread as first reader thread. */
+
+static pthread_rwlock_t lock;
+static pthread_t reader1;
+static pthread_t writer;
+static pthread_t reader2;
+static pthread_t timer;
+/* Used to pass control from writer to reader2 and from reader2 to timer,
+ as in a relay race.
+ Passing control from one running thread to another running thread
+ is most likely faster than to create the second thread. */
+static pthread_mutex_t baton;
+
+static void *
+timer_func (void *ignored)
+{
+ /* Step 13 (can be before or after step 12):
+ The timer thread takes the baton, then waits a moment to make sure
+ it can tell whether the second reader thread is blocked at step 12. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (13);
+ usleep (100000);
+ /* By the time we get here, it's clear that the second reader thread is
+ blocked at step 12. This is the desired behaviour. */
+ SUCCEED ();
+}
+
+static void *
+reader2_func (void *ignored)
+{
+ int err;
+
+ /* Step 8 (can be before or after step 7):
+ The second reader thread takes the baton, then waits a moment to make sure
+ the writer thread has reached step 7. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (8);
+ usleep (100000);
+ /* Step 9: The second reader thread requests the lock. */
+ err = pthread_rwlock_tryrdlock (&lock);
+ if (err == 0)
+ FAILURE ();
+ else if (err != EBUSY)
+ UNEXPECTED (9);
+ /* Step 10: Launch a timer, to test whether the next call blocks. */
+ if (pthread_create (&timer, NULL, timer_func, NULL))
+ UNEXPECTED (10);
+ /* Step 11: Release the baton. */
+ if (pthread_mutex_unlock (&baton))
+ UNEXPECTED (11);
+ /* Step 12: The second reader thread requests the lock. */
+ err = pthread_rwlock_rdlock (&lock);
+ if (err == 0)
+ FAILURE ();
+ else
+ UNEXPECTED (12);
+}
+
+static void *
+writer_func (void *ignored)
+{
+ /* Step 4: Take the baton, so that the second reader thread does not go ahead
+ too early. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (4);
+ /* Step 5: Create the second reader thread. */
+ if (pthread_create (&reader2, NULL, reader2_func, NULL))
+ UNEXPECTED (5);
+ /* Step 6: Release the baton. */
+ if (pthread_mutex_unlock (&baton))
+ UNEXPECTED (6);
+ /* Step 7: The writer thread requests the lock. */
+ if (pthread_rwlock_wrlock (&lock))
+ UNEXPECTED (7);
+ return NULL;
+}
+
+int
+main ()
+{
+ reader1 = pthread_self ();
+
+ /* Step 1: The main thread initializes the lock and the baton. */
+ if (pthread_rwlock_init (&lock, NULL))
+ UNEXPECTED (1);
+ if (pthread_mutex_init (&baton, NULL))
+ UNEXPECTED (1);
+ /* Step 2: The main thread acquires the lock as a reader. */
+ if (pthread_rwlock_rdlock (&lock))
+ UNEXPECTED (2);
+ /* Step 3: Create the writer thread. */
+ if (pthread_create (&writer, NULL, writer_func, NULL))
+ UNEXPECTED (3);
+ /* Job done. Go to sleep. */
+ for (;;)
+ {
+ sleep (1);
+ }
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_pthread_rwlock_rdlock_prefer_writer=yes
+else $as_nop
+ gl_cv_pthread_rwlock_rdlock_prefer_writer=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5
+printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; }
+ case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in
+ *yes)
+
+printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h
+
+ ;;
+ esac
+
+ fi
+ # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <pthread.h>
+int
+main (void)
+{
+
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
+ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ :
+
+
+
+printf "%s\n" "#define GNULIB_LOCK 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lseek detects pipes" >&5
+printf %s "checking whether lseek detects pipes... " >&6; }
+if test ${gl_cv_func_lseek_pipe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_lseek_pipe=no
+ ;;
+ *)
+ if test $cross_compiling = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h> /* for off_t */
+#include <stdio.h> /* for SEEK_CUR */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else /* on Windows with MSVC */
+# include <io.h>
+#endif
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+
+ /* Exit with success only if stdin is seekable. */
+ return lseek (0, (off_t)0, SEEK_CUR) < 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ if test -s conftest$ac_exeext \
+ && ./conftest$ac_exeext < conftest.$ac_ext \
+ && test 1 = "`echo hi \
+ | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then
+ gl_cv_func_lseek_pipe=yes
+ else
+ gl_cv_func_lseek_pipe=no
+ fi
+
+else $as_nop
+ gl_cv_func_lseek_pipe=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined __BEOS__
+/* BeOS mistakenly return 0 when trying to seek on pipes. */
+ Choke me.
+#endif
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_lseek_pipe=yes
+else $as_nop
+ gl_cv_func_lseek_pipe=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lseek_pipe" >&5
+printf "%s\n" "$gl_cv_func_lseek_pipe" >&6; }
+ if test "$gl_cv_func_lseek_pipe" = no; then
+ REPLACE_LSEEK=1
+
+printf "%s\n" "#define LSEEK_PIPE_BROKEN 1" >>confdefs.h
+
+ fi
+
+
+ if test $WINDOWS_64_BIT_OFF_T = 1; then
+ REPLACE_LSEEK=1
+ fi
+
+ if test $REPLACE_LSEEK = 0
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether SEEK_DATA works but is incompatible with GNU" >&5
+printf %s "checking whether SEEK_DATA works but is incompatible with GNU... " >&6; }
+if test ${gl_cv_func_lseek_works_but_incompatible+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+ #include <unistd.h>
+ #if defined __APPLE__ && defined __MACH__ && defined SEEK_DATA
+ # ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+ # include <AvailabilityMacros.h>
+ # endif
+ # if 99990000 <= MAC_OS_X_VERSION_MIN_REQUIRED
+ # define LSEEK_WORKS_BUT_IS_INCOMPATIBLE_WITH_GNU
+ # endif
+ #endif
+ #ifndef LSEEK_WORKS_BUT_IS_INCOMPATIBLE_WITH_GNU
+ #error "No need to work around the bug"
+ #endif
+
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+ gl_cv_func_lseek_works_but_incompatible=yes
+else $as_nop
+ gl_cv_func_lseek_works_but_incompatible=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lseek_works_but_incompatible" >&5
+printf "%s\n" "$gl_cv_func_lseek_works_but_incompatible" >&6; }
+ if test "$gl_cv_func_lseek_works_but_incompatible" = yes; then
+ REPLACE_LSEEK=1
+ fi
+fi
+
+
+ if test $REPLACE_LSEEK = 1; then
+ GL_COND_OBJ_LSEEK_TRUE=
+ GL_COND_OBJ_LSEEK_FALSE='#'
+else
+ GL_COND_OBJ_LSEEK_TRUE='#'
+ GL_COND_OBJ_LSEEK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_LSEEK_TRUE}" && test -z "${GL_COND_OBJ_LSEEK_FALSE}"; then
+ GL_COND_OBJ_LSEEK_TRUE='#'
+ GL_COND_OBJ_LSEEK_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_LSEEK=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_LSEEK 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test $ac_cv_func_lstat = yes; then
+
+ case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in
+ solaris* | *no)
+ REPLACE_LSTAT=1
+ ;;
+ esac
+ else
+ HAVE_LSTAT=0
+ fi
+
+
+ if test $REPLACE_LSTAT = 1; then
+ GL_COND_OBJ_LSTAT_TRUE=
+ GL_COND_OBJ_LSTAT_FALSE='#'
+else
+ GL_COND_OBJ_LSTAT_TRUE='#'
+ GL_COND_OBJ_LSTAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_LSTAT_TRUE}" && test -z "${GL_COND_OBJ_LSTAT_FALSE}"; then
+ GL_COND_OBJ_LSTAT_TRUE='#'
+ GL_COND_OBJ_LSTAT_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_LSTAT_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_LSTAT=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_LSTAT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+ REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX"
+ if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5
+printf %s "checking whether malloc (0) returns nonnull... " >&6; }
+if test ${ac_cv_func_malloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midipix* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+void *p = malloc (0);
+ int result = !p;
+ free (p);
+ return result;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_malloc_0_nonnull=yes
+else $as_nop
+ ac_cv_func_malloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; }
+ case $ac_cv_func_malloc_0_nonnull in #(
+ *yes) :
+ ;; #(
+ *) :
+ REPLACE_MALLOC_FOR_MALLOC_GNU=1 ;;
+esac
+
+ fi
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MALLOC_GNU=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MALLOC_GNU 1" >>confdefs.h
+
+
+
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MALLOC_POSIX=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if case "$host_os" in
+ mingw*) true ;;
+ *) test $ac_cv_func_mbsinit = yes ;;
+ esac \
+ && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+printf %s "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test ${gl_cv_func_mbrtowc_incomplete_state+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on AIX and OSF/1.
+ aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+ esac
+ if test $LOCALE_JA != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ else
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ const char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test ${gl_cv_func_mbrtowc_sanitycheck+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris 8.
+ solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+ esac
+ if test $LOCALE_ZH_CN != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8:
+ mbrtowc returns 2, and sets wc to 0x00F0.
+ mbtowc returns 4 (correct) and sets wc to 0x5EDC. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 6, &state) != 4
+ && mbtowc (&wc, input + 3, 6) == 4)
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_sanitycheck=yes
+else $as_nop
+ gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+ REPLACE_MBSTATE_T=0
+ case "$gl_cv_func_mbrtowc_incomplete_state" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ case "$gl_cv_func_mbrtowc_sanitycheck" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ else
+ REPLACE_MBSTATE_T=1
+ fi
+
+
+
+ if test $ac_cv_func_mbrtowc = no; then
+ HAVE_MBRTOWC=0
+ ac_fn_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" "
+ #include <wchar.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_mbrtowc" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_MBRTOWC $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_mbrtowc = yes; then
+ REPLACE_MBRTOWC=1
+ fi
+ else
+ if test $REPLACE_MBSTATE_T = 1; then
+ REPLACE_MBRTOWC=1
+ else
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5
+printf %s "checking whether mbrtowc handles a NULL pwc argument... " >&6; }
+if test ${gl_cv_func_mbrtowc_null_arg1+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris.
+ solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+ esac
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ char input[] = "\303\237er";
+ mbstate_t state;
+ wchar_t wc;
+ size_t ret;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ wc = (wchar_t) 0xBADFACE;
+ ret = mbrtowc (&wc, input, 5, &state);
+ if (ret != 2)
+ result |= 1;
+ if (!mbsinit (&state))
+ result |= 2;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ ret = mbrtowc (NULL, input, 5, &state);
+ if (ret != 2) /* Solaris 7 fails here: ret is -1. */
+ result |= 4;
+ if (!mbsinit (&state))
+ result |= 8;
+ }
+ return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_null_arg1=yes
+else $as_nop
+ gl_cv_func_mbrtowc_null_arg1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_null_arg1" >&6; }
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5
+printf %s "checking whether mbrtowc handles a NULL string argument... " >&6; }
+if test ${gl_cv_func_mbrtowc_null_arg2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on OSF/1.
+ osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+ esac
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ mbstate_t state;
+ wchar_t wc;
+ int ret;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ wc = (wchar_t) 0xBADFACE;
+ mbrtowc (&wc, NULL, 5, &state);
+ /* Check that wc was not modified. */
+ if (wc != (wchar_t) 0xBADFACE)
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_null_arg2=yes
+else $as_nop
+ gl_cv_func_mbrtowc_null_arg2=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_null_arg2" >&6; }
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5
+printf %s "checking whether mbrtowc has a correct return value... " >&6; }
+if test ${gl_cv_func_mbrtowc_retval+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on HP-UX, Solaris, native Windows.
+ hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_retval="guessing yes" ;;
+ esac
+ if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+ int found_some_locale = 0;
+ /* This fails on Solaris. */
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ {
+ input[1] = '\0';
+ if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+ result |= 1;
+ }
+ found_some_locale = 1;
+ }
+ /* This fails on HP-UX 11.11. */
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ {
+ input[1] = '\0';
+ if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+ result |= 2;
+ }
+ found_some_locale = 1;
+ }
+ /* This fails on native Windows. */
+ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+ {
+ char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 4;
+ }
+ found_some_locale = 1;
+ }
+ if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+ {
+ char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 8;
+ }
+ found_some_locale = 1;
+ }
+ if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+ {
+ char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 16;
+ }
+ found_some_locale = 1;
+ }
+ return (found_some_locale ? result : 77);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_retval=yes
+else $as_nop
+ if test $? != 77; then
+ gl_cv_func_mbrtowc_retval=no
+ fi
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_retval" >&6; }
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5
+printf %s "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; }
+if test ${gl_cv_func_mbrtowc_nul_retval+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris 8 and 9.
+ solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+ esac
+ if test $LOCALE_ZH_CN != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8 and 9. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "", 1, &state) != 0)
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_nul_retval=yes
+else $as_nop
+ gl_cv_func_mbrtowc_nul_retval=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_nul_retval" >&6; }
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5
+printf %s "checking whether mbrtowc stores incomplete characters... " >&6; }
+if test ${gl_cv_func_mbrtowc_stores_incomplete+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;;
+ *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;;
+ esac
+ case "$host_os" in
+ mingw*)
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+ if (setlocale (LC_ALL, "French_France.65001") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 1;
+ }
+ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 2;
+ }
+ if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 4;
+ }
+ if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 8;
+ }
+ return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_stores_incomplete=no
+else $as_nop
+ gl_cv_func_mbrtowc_stores_incomplete=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ ;;
+ *)
+
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ return 1;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_stores_incomplete=no
+else $as_nop
+ gl_cv_func_mbrtowc_stores_incomplete=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_stores_incomplete" >&6; }
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5
+printf %s "checking whether mbrtowc works on empty input... " >&6; }
+if test ${gl_cv_func_mbrtowc_empty_input+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on AIX and glibc systems.
+ aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+ *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+ esac
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <wchar.h>
+ static wchar_t wc;
+ static mbstate_t mbs;
+ int
+ main (void)
+ {
+ return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_empty_input=yes
+else $as_nop
+ gl_cv_func_mbrtowc_empty_input=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_empty_input" >&6; }
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5
+printf %s "checking whether the C locale is free of encoding errors... " >&6; }
+if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal"
+
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+ #include <locale.h>
+ #include <wchar.h>
+
+int
+main (void)
+{
+
+ int i;
+ char *locale = setlocale (LC_ALL, "C");
+ if (! locale)
+ return 2;
+ for (i = CHAR_MIN; i <= CHAR_MAX; i++)
+ {
+ char c = i;
+ wchar_t wc;
+ mbstate_t mbs = { 0, };
+ size_t ss = mbrtowc (&wc, &c, 1, &mbs);
+ if (1 < ss)
+ return 3;
+ }
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes
+else $as_nop
+ gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; }
+
+ case "$gl_cv_func_mbrtowc_null_arg1" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_null_arg2" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_retval" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_nul_retval" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_stores_incomplete" in
+ *no) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_empty_input" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h
+
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ fi
+ fi
+ if test $REPLACE_MBSTATE_T = 1; then
+ case "$host_os" in
+ mingw*) MBRTOWC_LIB= ;;
+ *)
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+printf %s "checking whether imported symbols can be declared weak... " >&6; }
+if test ${gl_cv_have_weak+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main (void)
+{
+xyzzy();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_have_weak=maybe
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
+ gl_cv_have_weak="guessing yes"
+else $as_nop
+ gl_cv_have_weak="guessing no"
+fi
+rm -rf conftest*
+
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+ return (fputs == NULL);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_have_weak=yes
+else $as_nop
+ gl_cv_have_weak=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ ;;
+ esac
+ case " $LDFLAGS " in
+ *" -static "*) gl_cv_have_weak=no ;;
+ esac
+ case "$gl_cv_have_weak" in
+ *yes)
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ : > conftest1.c
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
+ cat <<EOF > conftest2.c
+#include <pthread.h>
+#pragma weak pthread_mutexattr_gettype
+int main ()
+{
+ return (pthread_mutexattr_gettype != NULL);
+}
+EOF
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \
+ || gl_cv_have_weak=no
+ rm -f conftest1.c libempty.so conftest2.c conftest
+ ;;
+ esac
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+printf "%s\n" "$gl_cv_have_weak" >&6; }
+ case "$gl_cv_have_weak" in
+ *yes)
+
+printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
+
+ ;;
+ esac
+
+ case "$gl_cv_have_weak" in
+ *yes) MBRTOWC_LIB= ;;
+ *) MBRTOWC_LIB="$LIBPTHREAD" ;;
+ esac
+ ;;
+ esac
+ else
+ MBRTOWC_LIB=
+ fi
+
+ LIB_MBRTOWC="$MBRTOWC_LIB"
+
+
+
+ if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then
+ GL_COND_OBJ_MBRTOWC_TRUE=
+ GL_COND_OBJ_MBRTOWC_FALSE='#'
+else
+ GL_COND_OBJ_MBRTOWC_TRUE='#'
+ GL_COND_OBJ_MBRTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBRTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBRTOWC_FALSE}"; then
+ GL_COND_OBJ_MBRTOWC_TRUE='#'
+ GL_COND_OBJ_MBRTOWC_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MBRTOWC_TRUE"; then :
+
+ if test $REPLACE_MBSTATE_T = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext"
+
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext"
+
+
+
+
+ CFLAG_VISIBILITY=
+ HAVE_VISIBILITY=0
+ if test -n "$GCC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+printf %s "checking whether the -Werror option is usable... " >&6; }
+if test ${gl_cv_cc_vis_werror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_vis_werror=yes
+else $as_nop
+ gl_cv_cc_vis_werror=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+printf "%s\n" "$gl_cv_cc_vis_werror" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+printf %s "checking for simple visibility declarations... " >&6; }
+if test ${gl_cv_cc_visibility+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ if test $gl_cv_cc_vis_werror = yes; then
+ CFLAGS="$CFLAGS -Werror"
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+ extern __attribute__((__visibility__("default"))) int exportedvar;
+ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+ extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
+ void dummyfunc (void) {}
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_visibility=yes
+else $as_nop
+ gl_cv_cc_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+printf "%s\n" "$gl_cv_cc_visibility" >&6; }
+ if test $gl_cv_cc_visibility = yes; then
+ CFLAG_VISIBILITY="-fvisibility=hidden"
+ HAVE_VISIBILITY=1
+ fi
+ fi
+
+
+
+printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h
+
+
+
+ fi
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MBRTOWC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if case "$host_os" in
+ mingw*) true ;;
+ *) test $ac_cv_func_mbsinit = yes ;;
+ esac \
+ && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+printf %s "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test ${gl_cv_func_mbrtowc_incomplete_state+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on AIX and OSF/1.
+ aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+ esac
+ if test $LOCALE_JA != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ else
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ const char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test ${gl_cv_func_mbrtowc_sanitycheck+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris 8.
+ solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+ esac
+ if test $LOCALE_ZH_CN != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8:
+ mbrtowc returns 2, and sets wc to 0x00F0.
+ mbtowc returns 4 (correct) and sets wc to 0x5EDC. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 6, &state) != 4
+ && mbtowc (&wc, input + 3, 6) == 4)
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_sanitycheck=yes
+else $as_nop
+ gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+ REPLACE_MBSTATE_T=0
+ case "$gl_cv_func_mbrtowc_incomplete_state" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ case "$gl_cv_func_mbrtowc_sanitycheck" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ else
+ REPLACE_MBSTATE_T=1
+ fi
+
+
+
+ if test $ac_cv_func_mbsinit = no; then
+ HAVE_MBSINIT=0
+ ac_fn_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" "
+ #include <wchar.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_mbsinit" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_MBSINIT $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_mbsinit = yes; then
+ REPLACE_MBSINIT=1
+ fi
+ else
+ if test $REPLACE_MBSTATE_T = 1; then
+ REPLACE_MBSINIT=1
+ else
+ case "$host_os" in
+ mingw*) REPLACE_MBSINIT=1 ;;
+ esac
+ fi
+ fi
+
+
+ if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then
+ GL_COND_OBJ_MBSINIT_TRUE=
+ GL_COND_OBJ_MBSINIT_FALSE='#'
+else
+ GL_COND_OBJ_MBSINIT_TRUE='#'
+ GL_COND_OBJ_MBSINIT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBSINIT_TRUE}" && test -z "${GL_COND_OBJ_MBSINIT_FALSE}"; then
+ GL_COND_OBJ_MBSINIT_TRUE='#'
+ GL_COND_OBJ_MBSINIT_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MBSINIT_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MBSINIT=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbtowc" >&5
+printf %s "checking for mbtowc... " >&6; }
+if test ${gl_cv_onwards_func_mbtowc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "mbtowc" "ac_cv_have_decl_mbtowc" "#include <stdlib.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_mbtowc" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_mbtowc = yes; then
+ ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc"
+if test "x$ac_cv_func_mbtowc" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_mbtowc = yes; then
+ gl_cv_onwards_func_mbtowc=yes
+ else
+ gl_cv_onwards_func_mbtowc='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_mbtowc='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc"
+if test "x$ac_cv_func_mbtowc" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_mbtowc=$ac_cv_func_mbtowc
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mbtowc" >&5
+printf "%s\n" "$gl_cv_onwards_func_mbtowc" >&6; }
+
+ case "$gl_cv_onwards_func_mbtowc" in
+ future*) ac_cv_func_mbtowc=no ;;
+ *) ac_cv_func_mbtowc=$gl_cv_onwards_func_mbtowc ;;
+ esac
+ if test $ac_cv_func_mbtowc = yes; then
+
+printf "%s\n" "#define HAVE_MBTOWC 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_mbtowc = no; then
+ HAVE_MBTOWC=0
+ case "$gl_cv_onwards_func_mbtowc" in
+ future*) REPLACE_MBTOWC=1 ;;
+ esac
+ else
+ if false; then
+ REPLACE_MBTOWC=1
+ fi
+ fi
+
+
+ if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then
+ GL_COND_OBJ_MBTOWC_TRUE=
+ GL_COND_OBJ_MBTOWC_FALSE='#'
+else
+ GL_COND_OBJ_MBTOWC_TRUE='#'
+ GL_COND_OBJ_MBTOWC_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MBTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBTOWC_FALSE}"; then
+ GL_COND_OBJ_MBTOWC_TRUE='#'
+ GL_COND_OBJ_MBTOWC_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MBTOWC_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MBTOWC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mempcpy" >&5
+printf %s "checking for mempcpy... " >&6; }
+if test ${gl_cv_onwards_func_mempcpy+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "mempcpy" "ac_cv_have_decl_mempcpy" "#include <string.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_mempcpy" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_mempcpy = yes; then
+ ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy"
+if test "x$ac_cv_func_mempcpy" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_mempcpy = yes; then
+ gl_cv_onwards_func_mempcpy=yes
+ else
+ gl_cv_onwards_func_mempcpy='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_mempcpy='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy"
+if test "x$ac_cv_func_mempcpy" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_mempcpy=$ac_cv_func_mempcpy
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mempcpy" >&5
+printf "%s\n" "$gl_cv_onwards_func_mempcpy" >&6; }
+
+ case "$gl_cv_onwards_func_mempcpy" in
+ future*) ac_cv_func_mempcpy=no ;;
+ *) ac_cv_func_mempcpy=$gl_cv_onwards_func_mempcpy ;;
+ esac
+ if test $ac_cv_func_mempcpy = yes; then
+
+printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_mempcpy = no; then
+ HAVE_MEMPCPY=0
+ case "$gl_cv_onwards_func_mempcpy" in
+ future*) REPLACE_MEMPCPY=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_MEMPCPY = 0 || test $REPLACE_MEMPCPY = 1; then
+ GL_COND_OBJ_MEMPCPY_TRUE=
+ GL_COND_OBJ_MEMPCPY_FALSE='#'
+else
+ GL_COND_OBJ_MEMPCPY_TRUE='#'
+ GL_COND_OBJ_MEMPCPY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MEMPCPY_TRUE}" && test -z "${GL_COND_OBJ_MEMPCPY_FALSE}"; then
+ GL_COND_OBJ_MEMPCPY_TRUE='#'
+ GL_COND_OBJ_MEMPCPY_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MEMPCPY_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MEMPCPY=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MEMPCPY 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing slash" >&5
+printf %s "checking whether mkdir handles trailing slash... " >&6; }
+if test ${gl_cv_func_mkdir_trailing_slash_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -rf conftest.dir
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on MSVC, no on mingw.
+ mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Known" >/dev/null 2>&1
+then :
+ gl_cv_func_mkdir_trailing_slash_works="guessing yes"
+else $as_nop
+ gl_cv_func_mkdir_trailing_slash_works="guessing no"
+fi
+rm -rf conftest*
+
+ ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+return mkdir ("conftest.dir/", 0700);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mkdir_trailing_slash_works=yes
+else $as_nop
+ gl_cv_func_mkdir_trailing_slash_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -rf conftest.dir
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_slash_works" >&5
+printf "%s\n" "$gl_cv_func_mkdir_trailing_slash_works" >&6; }
+ case "$gl_cv_func_mkdir_trailing_slash_works" in
+ *yes) ;;
+ *)
+ REPLACE_MKDIR=1
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing dot" >&5
+printf %s "checking whether mkdir handles trailing dot... " >&6; }
+if test ${gl_cv_func_mkdir_trailing_dot_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -rf conftest.dir
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+return !mkdir ("conftest.dir/./", 0700);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mkdir_trailing_dot_works=yes
+else $as_nop
+ gl_cv_func_mkdir_trailing_dot_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -rf conftest.dir
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_dot_works" >&5
+printf "%s\n" "$gl_cv_func_mkdir_trailing_dot_works" >&6; }
+ case "$gl_cv_func_mkdir_trailing_dot_works" in
+ *yes) ;;
+ *)
+ REPLACE_MKDIR=1
+
+printf "%s\n" "#define FUNC_MKDIR_DOT_BUG 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+ if test $REPLACE_MKDIR = 1; then
+ GL_COND_OBJ_MKDIR_TRUE=
+ GL_COND_OBJ_MKDIR_FALSE='#'
+else
+ GL_COND_OBJ_MKDIR_TRUE='#'
+ GL_COND_OBJ_MKDIR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MKDIR_TRUE}" && test -z "${GL_COND_OBJ_MKDIR_FALSE}"; then
+ GL_COND_OBJ_MKDIR_TRUE='#'
+ GL_COND_OBJ_MKDIR_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MKDIR=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MKDIR 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test $ac_cv_func_mkstemp = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mkstemp" >&5
+printf %s "checking for working mkstemp... " >&6; }
+if test ${gl_cv_func_working_mkstemp+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ mkdir conftest.mkstemp
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_working_mkstemp="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_working_mkstemp="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+int result = 0;
+ int i;
+ off_t large = (off_t) 4294967295u;
+ if (large < 0)
+ large = 2147483647;
+ umask (0);
+ for (i = 0; i < 70; i++)
+ {
+ char templ[] = "conftest.mkstemp/coXXXXXX";
+ int (*mkstemp_function) (char *) = mkstemp;
+ int fd = mkstemp_function (templ);
+ if (fd < 0)
+ result |= 1;
+ else
+ {
+ struct stat st;
+ if (lseek (fd, large, SEEK_SET) != large)
+ result |= 2;
+ if (fstat (fd, &st) < 0)
+ result |= 4;
+ else if (st.st_mode & 0077)
+ result |= 8;
+ if (close (fd))
+ result |= 16;
+ }
+ }
+ return result;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_working_mkstemp=yes
+else $as_nop
+ gl_cv_func_working_mkstemp=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -rf conftest.mkstemp
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mkstemp" >&5
+printf "%s\n" "$gl_cv_func_working_mkstemp" >&6; }
+ case "$gl_cv_func_working_mkstemp" in
+ *yes) ;;
+ *)
+ REPLACE_MKSTEMP=1
+ ;;
+ esac
+ else
+ HAVE_MKSTEMP=0
+ fi
+
+
+ if test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1; then
+ GL_COND_OBJ_MKSTEMP_TRUE=
+ GL_COND_OBJ_MKSTEMP_FALSE='#'
+else
+ GL_COND_OBJ_MKSTEMP_TRUE='#'
+ GL_COND_OBJ_MKSTEMP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MKSTEMP_TRUE}" && test -z "${GL_COND_OBJ_MKSTEMP_FALSE}"; then
+ GL_COND_OBJ_MKSTEMP_TRUE='#'
+ GL_COND_OBJ_MKSTEMP_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MKSTEMP_TRUE"; then :
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_MKSTEMP=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MKSTEMP 1" >>confdefs.h
+
+
+
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ GL_COND_OBJ_MSVC_INVAL_TRUE=
+ GL_COND_OBJ_MSVC_INVAL_FALSE='#'
+else
+ GL_COND_OBJ_MSVC_INVAL_TRUE='#'
+ GL_COND_OBJ_MSVC_INVAL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MSVC_INVAL_TRUE}" && test -z "${GL_COND_OBJ_MSVC_INVAL_FALSE}"; then
+ GL_COND_OBJ_MSVC_INVAL_TRUE='#'
+ GL_COND_OBJ_MSVC_INVAL_FALSE='#'
+ fi
+
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE=
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE='#'
+else
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE='#'
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MSVC_NOTHROW_TRUE}" && test -z "${GL_COND_OBJ_MSVC_NOTHROW_FALSE}"; then
+ GL_COND_OBJ_MSVC_NOTHROW_TRUE='#'
+ GL_COND_OBJ_MSVC_NOTHROW_FALSE='#'
+ fi
+
+
+
+printf "%s\n" "#define GNULIB_MSVC_NOTHROW 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo" >&5
+printf %s "checking for nl_langinfo... " >&6; }
+if test ${gl_cv_onwards_func_nl_langinfo+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "nl_langinfo" "ac_cv_have_decl_nl_langinfo" "#include <langinfo.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_nl_langinfo" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_nl_langinfo = yes; then
+ ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_nl_langinfo = yes; then
+ gl_cv_onwards_func_nl_langinfo=yes
+ else
+ gl_cv_onwards_func_nl_langinfo='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_nl_langinfo='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_nl_langinfo=$ac_cv_func_nl_langinfo
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_nl_langinfo" >&5
+printf "%s\n" "$gl_cv_onwards_func_nl_langinfo" >&6; }
+
+ case "$gl_cv_onwards_func_nl_langinfo" in
+ future*) ac_cv_func_nl_langinfo=no ;;
+ *) ac_cv_func_nl_langinfo=$gl_cv_onwards_func_nl_langinfo ;;
+ esac
+ if test $ac_cv_func_nl_langinfo = yes; then
+
+printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+ if test $ac_cv_func_nl_langinfo = yes; then
+ # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5
+printf %s "checking whether YESEXPR works... " >&6; }
+if test ${gl_cv_func_nl_langinfo_yesexpr_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess no on irix systems.
+ irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";;
+ # Guess yes elsewhere.
+ *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+
+int
+main (void)
+{
+return !*nl_langinfo(YESEXPR);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_nl_langinfo_yesexpr_works=yes
+else $as_nop
+ gl_cv_func_nl_langinfo_yesexpr_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5
+printf "%s\n" "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; }
+ case $gl_cv_func_nl_langinfo_yesexpr_works in
+ *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;;
+ *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;;
+ esac
+
+printf "%s\n" "#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS" >>confdefs.h
+
+ # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe.
+ case "$host_os" in
+ solaris*) NL_LANGINFO_MTSAFE=0 ;;
+ *) NL_LANGINFO_MTSAFE=1 ;;
+ esac
+
+printf "%s\n" "#define NL_LANGINFO_MTSAFE $NL_LANGINFO_MTSAFE" >>confdefs.h
+
+ if test $HAVE_LANGINFO_CODESET = 1 \
+ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \
+ && test $HAVE_LANGINFO_ALTMON = 1 \
+ && test $HAVE_LANGINFO_ERA = 1 \
+ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \
+ && test $NL_LANGINFO_MTSAFE = 1; then
+ :
+ else
+ REPLACE_NL_LANGINFO=1
+
+printf "%s\n" "#define REPLACE_NL_LANGINFO 1" >>confdefs.h
+
+ fi
+ else
+ HAVE_NL_LANGINFO=0
+ case "$gl_cv_onwards_func_nl_langinfo" in
+ future*) REPLACE_NL_LANGINFO=1 ;;
+ esac
+ fi
+ if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then
+ LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB"
+ else
+ LIB_NL_LANGINFO=
+ fi
+
+
+
+ if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then
+ GL_COND_OBJ_NL_LANGINFO_TRUE=
+ GL_COND_OBJ_NL_LANGINFO_FALSE='#'
+else
+ GL_COND_OBJ_NL_LANGINFO_TRUE='#'
+ GL_COND_OBJ_NL_LANGINFO_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_NL_LANGINFO_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_FALSE}"; then
+ GL_COND_OBJ_NL_LANGINFO_TRUE='#'
+ GL_COND_OBJ_NL_LANGINFO_FALSE='#'
+ fi
+
+
+ if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then
+ GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE=
+ GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#'
+else
+ GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#'
+ GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE}"; then
+ GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#'
+ GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#'
+ fi
+
+ if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then
+
+
+
+ CFLAG_VISIBILITY=
+ HAVE_VISIBILITY=0
+ if test -n "$GCC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+printf %s "checking whether the -Werror option is usable... " >&6; }
+if test ${gl_cv_cc_vis_werror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_vis_werror=yes
+else $as_nop
+ gl_cv_cc_vis_werror=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+printf "%s\n" "$gl_cv_cc_vis_werror" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+printf %s "checking for simple visibility declarations... " >&6; }
+if test ${gl_cv_cc_visibility+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ if test $gl_cv_cc_vis_werror = yes; then
+ CFLAGS="$CFLAGS -Werror"
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+ extern __attribute__((__visibility__("default"))) int exportedvar;
+ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+ extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
+ void dummyfunc (void) {}
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_visibility=yes
+else $as_nop
+ gl_cv_cc_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+printf "%s\n" "$gl_cv_cc_visibility" >&6; }
+ if test $gl_cv_cc_visibility = yes; then
+ CFLAG_VISIBILITY="-fvisibility=hidden"
+ HAVE_VISIBILITY=1
+ fi
+ fi
+
+
+
+printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h
+
+
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_NL_LANGINFO=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h
+
+
+
+
+
+
+ case "$host_os" in
+ mingw* | pw*)
+ REPLACE_OPEN=1
+ ;;
+ *)
+
+ if test "$gl_cv_macro_O_CLOEXEC" != yes; then
+ REPLACE_OPEN=1
+ fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5
+printf %s "checking whether open recognizes a trailing slash... " >&6; }
+if test ${gl_cv_func_open_slash+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ touch conftest.tmp
+ ln -s conftest.tmp conftest.lnk
+ fi
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+ gl_cv_func_open_slash="guessing no" ;;
+ *)
+ gl_cv_func_open_slash="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <fcntl.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+
+$gl_mda_defines
+
+int main ()
+{
+ int result = 0;
+#if HAVE_LSTAT
+ if (open ("conftest.lnk/", O_RDONLY) != -1)
+ result |= 1;
+#endif
+ if (open ("conftest.sl/", O_CREAT, 0600) >= 0)
+ result |= 2;
+ return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_open_slash=yes
+else $as_nop
+ gl_cv_func_open_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.sl conftest.tmp conftest.lnk
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5
+printf "%s\n" "$gl_cv_func_open_slash" >&6; }
+ case "$gl_cv_func_open_slash" in
+ *no)
+
+printf "%s\n" "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h
+
+ ;;
+ esac
+
+ case "$gl_cv_func_open_slash" in
+ *no)
+ REPLACE_OPEN=1
+ ;;
+ esac
+ ;;
+ esac
+
+
+
+
+ if test $REPLACE_OPEN = 1; then
+ GL_COND_OBJ_OPEN_TRUE=
+ GL_COND_OBJ_OPEN_FALSE='#'
+else
+ GL_COND_OBJ_OPEN_TRUE='#'
+ GL_COND_OBJ_OPEN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_OPEN_TRUE}" && test -z "${GL_COND_OBJ_OPEN_FALSE}"; then
+ GL_COND_OBJ_OPEN_TRUE='#'
+ GL_COND_OBJ_OPEN_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_OPEN_TRUE"; then :
+
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_OPEN=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_OPEN 1" >>confdefs.h
+
+
+
+
+
+
+ ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_program_invocation_name" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h
+
+ ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h
+
+
+ :
+
+
+
+ :
+
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr"
+if test "x$ac_cv_func_rawmemchr" = xyes
+then :
+ printf "%s\n" "#define HAVE_RAWMEMCHR 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_rawmemchr = no; then
+ HAVE_RAWMEMCHR=0
+ fi
+
+
+ if test $HAVE_RAWMEMCHR = 0; then
+ GL_COND_OBJ_RAWMEMCHR_TRUE=
+ GL_COND_OBJ_RAWMEMCHR_FALSE='#'
+else
+ GL_COND_OBJ_RAWMEMCHR_TRUE='#'
+ GL_COND_OBJ_RAWMEMCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RAWMEMCHR_TRUE}" && test -z "${GL_COND_OBJ_RAWMEMCHR_FALSE}"; then
+ GL_COND_OBJ_RAWMEMCHR_TRUE='#'
+ GL_COND_OBJ_RAWMEMCHR_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_RAWMEMCHR_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_RAWMEMCHR=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_READ=1
+ fi
+
+
+
+
+ if test $REPLACE_READ = 1; then
+ GL_COND_OBJ_READ_TRUE=
+ GL_COND_OBJ_READ_FALSE='#'
+else
+ GL_COND_OBJ_READ_TRUE='#'
+ GL_COND_OBJ_READ_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_READ_TRUE}" && test -z "${GL_COND_OBJ_READ_FALSE}"; then
+ GL_COND_OBJ_READ_TRUE='#'
+ GL_COND_OBJ_READ_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_READ_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_READ=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_READ 1" >>confdefs.h
+
+
+
+
+
+
+ if test $ac_cv_func_readlink = no; then
+ HAVE_READLINK=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink signature is correct" >&5
+printf %s "checking whether readlink signature is correct... " >&6; }
+if test ${gl_cv_decl_readlink_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+ /* Cause compilation failure if original declaration has wrong type. */
+ ssize_t readlink (const char *, char *, size_t);
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_decl_readlink_works=yes
+else $as_nop
+ gl_cv_decl_readlink_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_readlink_works" >&5
+printf "%s\n" "$gl_cv_decl_readlink_works" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink handles trailing slash correctly" >&5
+printf %s "checking whether readlink handles trailing slash correctly... " >&6; }
+if test ${gl_cv_func_readlink_trailing_slash+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # We have readlink, so assume ln -s works.
+ ln -s conftest.no-such conftest.link
+ ln -s conftest.link conftest.lnk2
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux or glibc systems.
+ linux-* | linux | *-gnu* | gnu*)
+ gl_cv_func_readlink_trailing_slash="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*)
+ gl_cv_func_readlink_trailing_slash="guessing yes" ;;
+ # Guess no on AIX or HP-UX.
+ aix* | hpux*)
+ gl_cv_func_readlink_trailing_slash="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+int
+main (void)
+{
+char buf[20];
+ return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_readlink_trailing_slash=yes
+else $as_nop
+ gl_cv_func_readlink_trailing_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.link conftest.lnk2
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_trailing_slash" >&5
+printf "%s\n" "$gl_cv_func_readlink_trailing_slash" >&6; }
+ case "$gl_cv_func_readlink_trailing_slash" in
+ *yes)
+ if test "$gl_cv_decl_readlink_works" != yes; then
+ REPLACE_READLINK=1
+ fi
+ ;;
+ *)
+
+printf "%s\n" "#define READLINK_TRAILING_SLASH_BUG 1" >>confdefs.h
+
+ REPLACE_READLINK=1
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink truncates results correctly" >&5
+printf %s "checking whether readlink truncates results correctly... " >&6; }
+if test ${gl_cv_func_readlink_truncate+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # We have readlink, so assume ln -s works.
+ ln -s ab conftest.link
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux or glibc systems.
+ linux-* | linux | *-gnu* | gnu*)
+ gl_cv_func_readlink_truncate="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*)
+ gl_cv_func_readlink_truncate="guessing yes" ;;
+ # Guess no on AIX or HP-UX.
+ aix* | hpux*)
+ gl_cv_func_readlink_truncate="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+int
+main (void)
+{
+char c;
+ return readlink ("conftest.link", &c, 1) != 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_readlink_truncate=yes
+else $as_nop
+ gl_cv_func_readlink_truncate=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.link conftest.lnk2
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_truncate" >&5
+printf "%s\n" "$gl_cv_func_readlink_truncate" >&6; }
+ case $gl_cv_func_readlink_truncate in
+ *yes)
+ if test "$gl_cv_decl_readlink_works" != yes; then
+ REPLACE_READLINK=1
+ fi
+ ;;
+ *)
+
+printf "%s\n" "#define READLINK_TRUNCATE_BUG 1" >>confdefs.h
+
+ REPLACE_READLINK=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then
+ GL_COND_OBJ_READLINK_TRUE=
+ GL_COND_OBJ_READLINK_FALSE='#'
+else
+ GL_COND_OBJ_READLINK_TRUE='#'
+ GL_COND_OBJ_READLINK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_READLINK_TRUE}" && test -z "${GL_COND_OBJ_READLINK_FALSE}"; then
+ GL_COND_OBJ_READLINK_TRUE='#'
+ GL_COND_OBJ_READLINK_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_READLINK_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_READLINK=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_READLINK 1" >>confdefs.h
+
+
+
+
+
+
+ if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realloc (0, 0) returns nonnull" >&5
+printf %s "checking whether realloc (0, 0) returns nonnull... " >&6; }
+if test ${ac_cv_func_realloc_0_nonnull+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midipix* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_realloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+
+int
+main (void)
+{
+void *p = realloc (0, 0);
+ int result = !p;
+ free (p);
+ return result;
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_func_realloc_0_nonnull=yes
+else $as_nop
+ ac_cv_func_realloc_0_nonnull=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
+printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; }
+ case $ac_cv_func_realloc_0_nonnull in #(
+ *yes) :
+ ;; #(
+ *) :
+ REPLACE_REALLOC_FOR_REALLOC_GNU=1 ;;
+esac
+
+ fi
+
+ if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_REALLOC_GNU=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_REALLOC_GNU 1" >>confdefs.h
+
+
+
+
+
+
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=1
+ fi
+
+ if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext"
+
+ fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_REALLOC_POSIX=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for reallocarray" >&5
+printf %s "checking for reallocarray... " >&6; }
+if test ${gl_cv_onwards_func_reallocarray+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "#include <stdlib.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_reallocarray" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_reallocarray = yes; then
+ ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray"
+if test "x$ac_cv_func_reallocarray" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_reallocarray = yes; then
+ gl_cv_onwards_func_reallocarray=yes
+ else
+ gl_cv_onwards_func_reallocarray='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_reallocarray='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray"
+if test "x$ac_cv_func_reallocarray" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_reallocarray=$ac_cv_func_reallocarray
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_reallocarray" >&5
+printf "%s\n" "$gl_cv_onwards_func_reallocarray" >&6; }
+
+ case "$gl_cv_onwards_func_reallocarray" in
+ future*) ac_cv_func_reallocarray=no ;;
+ *) ac_cv_func_reallocarray=$gl_cv_onwards_func_reallocarray ;;
+ esac
+ if test $ac_cv_func_reallocarray = yes; then
+
+printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h
+
+ fi
+
+
+ if test "$ac_cv_func_reallocarray" = no; then
+ HAVE_REALLOCARRAY=0
+ case "$gl_cv_onwards_func_reallocarray" in
+ future*) REPLACE_REALLOCARRAY=1 ;;
+ esac
+ elif test "$gl_cv_malloc_ptrdiff" = no; then
+ REPLACE_REALLOCARRAY=1
+ fi
+
+
+ if test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1; then
+ GL_COND_OBJ_REALLOCARRAY_TRUE=
+ GL_COND_OBJ_REALLOCARRAY_FALSE='#'
+else
+ GL_COND_OBJ_REALLOCARRAY_TRUE='#'
+ GL_COND_OBJ_REALLOCARRAY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_REALLOCARRAY_TRUE}" && test -z "${GL_COND_OBJ_REALLOCARRAY_FALSE}"; then
+ GL_COND_OBJ_REALLOCARRAY_TRUE='#'
+ GL_COND_OBJ_REALLOCARRAY_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_REALLOCARRAY_TRUE"; then :
+
+ :
+
+fi
+
+
+printf "%s\n" "#define GNULIB_REALLOCARRAY 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_REALLOCARRAY=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_REALLOCARRAY 1" >>confdefs.h
+
+
+
+
+
+# Check whether --with-included-regex was given.
+if test ${with_included_regex+y}
+then :
+ withval=$with_included_regex;
+fi
+
+
+ case $with_included_regex in #(
+ yes|no) ac_use_included_regex=$with_included_regex
+ ;;
+ '')
+ # If the system regex support is good enough that it passes the
+ # following run test, then default to *not* using the included regex.c.
+ # If cross compiling, assume the test would fail and use the included
+ # regex.c.
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5
+printf %s "checking for working re_compile_pattern... " >&6; }
+if test ${gl_cv_func_re_compile_pattern_working+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;;
+ # Otherwise obey --enable-cross-guesses.
+ *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <regex.h>
+
+ #include <locale.h>
+ #include <limits.h>
+ #include <string.h>
+
+ #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
+ # include <signal.h>
+ # include <unistd.h>
+ #endif
+
+ #if HAVE_MALLOC_H
+ # include <malloc.h>
+ #endif
+
+ #ifdef M_CHECK_ACTION
+ /* Exit with distinguishable exit code. */
+ static void sigabrt_no_core (int sig) { raise (SIGTERM); }
+ #endif
+
+int
+main (void)
+{
+int result = 0;
+ static struct re_pattern_buffer regex;
+ unsigned char folded_chars[UCHAR_MAX + 1];
+ int i;
+ const char *s;
+ struct re_registers regs;
+
+ /* Some builds of glibc go into an infinite loop on this
+ test. Use alarm to force death, and mallopt to avoid
+ malloc recursion in diagnosing the corrupted heap. */
+#if HAVE_DECL_ALARM
+ signal (SIGALRM, SIG_DFL);
+ alarm (2);
+#endif
+#ifdef M_CHECK_ACTION
+ signal (SIGABRT, sigabrt_no_core);
+ mallopt (M_CHECK_ACTION, 2);
+#endif
+
+ if (setlocale (LC_ALL, "en_US.UTF-8"))
+ {
+ {
+ /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
+ This test needs valgrind to catch the bug on Debian
+ GNU/Linux 3.1 x86, but it might catch the bug better
+ on other platforms and it shouldn't hurt to try the
+ test here. */
+ static char const pat[] = "insert into";
+ static char const data[] =
+ "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
+ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
+ | RE_ICASE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+ if (s)
+ result |= 1;
+ else
+ {
+ if (re_search (&regex, data, sizeof data - 1,
+ 0, sizeof data - 1, &regs)
+ != -1)
+ result |= 1;
+ regfree (&regex);
+ }
+ }
+
+ {
+ /* This test is from glibc bug 15078.
+ The test case is from Andreas Schwab in
+ <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>.
+ */
+ static char const pat[] = "[^x]x";
+ static char const data[] =
+ /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */
+ "\xe1\x80\x80"
+ "\xe1\x80\xbb"
+ "\xe1\x80\xbd"
+ "\xe1\x80\x94"
+ "\xe1\x80\xba"
+ "\xe1\x80\xaf"
+ "\xe1\x80\x95"
+ "\xe1\x80\xba"
+ "x";
+ re_set_syntax (0);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+ if (s)
+ result |= 1;
+ else
+ {
+ i = re_search (&regex, data, sizeof data - 1,
+ 0, sizeof data - 1, 0);
+ if (i != 0 && i != 21)
+ result |= 1;
+ regfree (&regex);
+ }
+ }
+
+ if (! setlocale (LC_ALL, "C"))
+ return 1;
+ }
+
+ /* This test is from glibc bug 3957, reported by Andrew Mackey. */
+ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("a[^x]b", 6, &regex);
+ if (s)
+ result |= 2;
+ else
+ {
+ /* This should fail, but succeeds for glibc-2.5. */
+ if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
+ result |= 2;
+ regfree (&regex);
+ }
+
+ /* This regular expression is from Spencer ere test number 75
+ in grep-2.3. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+ memset (&regex, 0, sizeof regex);
+ for (i = 0; i <= UCHAR_MAX; i++)
+ folded_chars[i] = i;
+ regex.translate = folded_chars;
+ s = re_compile_pattern ("a[[:]:]]b\n", 11, &regex);
+ /* This should fail with _Invalid character class name_ error. */
+ if (!s)
+ {
+ result |= 4;
+ regfree (&regex);
+ }
+
+ /* Ensure that [b-a] is diagnosed as invalid, when
+ using RE_NO_EMPTY_RANGES. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("a[b-a]", 6, &regex);
+ if (s == 0)
+ {
+ result |= 8;
+ regfree (&regex);
+ }
+
+ /* This should succeed, but does not for glibc-2.1.3. */
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("{1", 2, &regex);
+ if (s)
+ result |= 8;
+ else
+ regfree (&regex);
+
+ /* The following example is derived from a problem report
+ against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("[an\371]*n", 7, &regex);
+ if (s)
+ result |= 8;
+ else
+ {
+ /* This should match, but does not for glibc-2.2.1. */
+ if (re_match (&regex, "an", 2, 0, &regs) != 2)
+ result |= 8;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("x", 1, &regex);
+ if (s)
+ result |= 8;
+ else
+ {
+ /* glibc-2.2.93 does not work with a negative RANGE argument. */
+ if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
+ result |= 8;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ /* The version of regex.c in older versions of gnulib
+ ignored RE_ICASE. Detect that problem too. */
+ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("x", 1, &regex);
+ if (s)
+ result |= 16;
+ else
+ {
+ if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
+ result |= 16;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ /* Catch a bug reported by Vin Shelton in
+ https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html
+ */
+ re_set_syntax (RE_SYNTAX_POSIX_BASIC
+ & ~RE_CONTEXT_INVALID_DUP
+ & ~RE_NO_EMPTY_RANGES);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, &regex);
+ if (s)
+ result |= 32;
+ else
+ regfree (&regex);
+
+ /* REG_STARTEND was added to glibc on 2004-01-15.
+ Reject older versions. */
+ if (! REG_STARTEND)
+ result |= 64;
+
+ /* Matching with the compiled form of this regexp would provoke
+ an assertion failure prior to glibc-2.28:
+ regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed
+ With glibc-2.28, compilation fails and reports the invalid
+ back reference. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("0|()0|\\\\1|0", 10, &regex);
+ if (!s)
+ {
+ memset (&regs, 0, sizeof regs);
+ i = re_search (&regex, "x", 1, 0, 1, &regs);
+ if (i != -1)
+ result |= 64;
+ if (0 <= i)
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+ else
+ {
+ if (strcmp (s, "Invalid back reference"))
+ result |= 64;
+ }
+
+ /* glibc bug 11053. */
+ re_set_syntax (RE_SYNTAX_POSIX_BASIC);
+ memset (&regex, 0, sizeof regex);
+ static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1";
+ s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, &regex);
+ if (s)
+ result |= 64;
+ else
+ {
+ memset (&regs, 0, sizeof regs);
+ static char const data[] = "a";
+ int datalen = sizeof data - 1;
+ i = re_search (&regex, data, datalen, 0, datalen, &regs);
+ if (i != 0)
+ result |= 64;
+ else if (regs.num_regs < 2)
+ result |= 64;
+ else if (! (regs.start[0] == 0 && regs.end[0] == 1))
+ result |= 64;
+ else if (! (regs.start[1] == 0 && regs.end[1] == 0))
+ result |= 64;
+ regfree (&regex);
+ free (regs.start);
+ free (regs.end);
+ }
+
+#if 0
+ /* It would be nice to reject hosts whose regoff_t values are too
+ narrow (including glibc on hosts with 64-bit ptrdiff_t and
+ 32-bit int), but we should wait until glibc implements this
+ feature. Otherwise, support for equivalence classes and
+ multibyte collation symbols would always be broken except
+ when compiling --without-included-regex. */
+ if (sizeof (regoff_t) < sizeof (ptrdiff_t)
+ || sizeof (regoff_t) < sizeof (ssize_t))
+ result |= 64;
+#endif
+
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_re_compile_pattern_working=yes
+else $as_nop
+ gl_cv_func_re_compile_pattern_working=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5
+printf "%s\n" "$gl_cv_func_re_compile_pattern_working" >&6; }
+ case "$gl_cv_func_re_compile_pattern_working" in #(
+ *yes) ac_use_included_regex=no;; #(
+ *no) ac_use_included_regex=yes;;
+ esac
+ ;;
+ *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5
+ ;;
+ esac
+
+ if test $ac_use_included_regex = yes; then
+
+printf "%s\n" "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h
+
+
+printf "%s\n" "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h
+
+
+printf "%s\n" "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h
+
+
+printf "%s\n" "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h
+
+
+printf "%s\n" "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h
+
+
+printf "%s\n" "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h
+
+
+printf "%s\n" "#define re_search rpl_re_search" >>confdefs.h
+
+
+printf "%s\n" "#define re_search_2 rpl_re_search_2" >>confdefs.h
+
+
+printf "%s\n" "#define re_match rpl_re_match" >>confdefs.h
+
+
+printf "%s\n" "#define re_match_2 rpl_re_match_2" >>confdefs.h
+
+
+printf "%s\n" "#define re_set_registers rpl_re_set_registers" >>confdefs.h
+
+
+printf "%s\n" "#define re_comp rpl_re_comp" >>confdefs.h
+
+
+printf "%s\n" "#define re_exec rpl_re_exec" >>confdefs.h
+
+
+printf "%s\n" "#define regcomp rpl_regcomp" >>confdefs.h
+
+
+printf "%s\n" "#define regexec rpl_regexec" >>confdefs.h
+
+
+printf "%s\n" "#define regerror rpl_regerror" >>confdefs.h
+
+
+printf "%s\n" "#define regfree rpl_regfree" >>confdefs.h
+
+ fi
+
+
+ if test $ac_use_included_regex = yes; then
+ GL_COND_OBJ_REGEX_TRUE=
+ GL_COND_OBJ_REGEX_FALSE='#'
+else
+ GL_COND_OBJ_REGEX_TRUE='#'
+ GL_COND_OBJ_REGEX_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_REGEX_TRUE}" && test -z "${GL_COND_OBJ_REGEX_FALSE}"; then
+ GL_COND_OBJ_REGEX_TRUE='#'
+ GL_COND_OBJ_REGEX_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_REGEX_TRUE"; then :
+
+
+
+
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default"
+if test "x$ac_cv_header_libintl_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h
+
+fi
+
+
+ ac_fn_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_isblank" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_ISBLANK $ac_have_decl" >>confdefs.h
+
+
+
+fi
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "rpmatch" "ac_cv_func_rpmatch"
+if test "x$ac_cv_func_rpmatch" = xyes
+then :
+ printf "%s\n" "#define HAVE_RPMATCH 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_rpmatch = no; then
+ HAVE_RPMATCH=0
+ fi
+
+
+ if test $HAVE_RPMATCH = 0; then
+ GL_COND_OBJ_RPMATCH_TRUE=
+ GL_COND_OBJ_RPMATCH_FALSE='#'
+else
+ GL_COND_OBJ_RPMATCH_TRUE='#'
+ GL_COND_OBJ_RPMATCH_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RPMATCH_TRUE}" && test -z "${GL_COND_OBJ_RPMATCH_FALSE}"; then
+ GL_COND_OBJ_RPMATCH_TRUE='#'
+ GL_COND_OBJ_RPMATCH_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_RPMATCH_TRUE"; then :
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and YESEXPR" >&5
+printf %s "checking for nl_langinfo and YESEXPR... " >&6; }
+if test ${gl_cv_langinfo_yesexpr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <langinfo.h>
+int
+main (void)
+{
+char* cs = nl_langinfo(YESEXPR); return !cs;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_langinfo_yesexpr=yes
+else $as_nop
+ gl_cv_langinfo_yesexpr=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_langinfo_yesexpr" >&5
+printf "%s\n" "$gl_cv_langinfo_yesexpr" >&6; }
+ if test $gl_cv_langinfo_yesexpr = yes; then
+
+printf "%s\n" "#define HAVE_LANGINFO_YESEXPR 1" >>confdefs.h
+
+ fi
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_RPMATCH=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_RPMATCH 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5
+printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; }
+if test ${gl_cv_func_setlocale_null_all_mtsafe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku.
+ *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*)
+ gl_cv_func_setlocale_null_all_mtsafe=no ;;
+ # Guess no on Cygwin < 3.4.6.
+ cygwin*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#if defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6)
+ Lucky user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Lucky user" >/dev/null 2>&1
+then :
+ gl_cv_func_setlocale_null_all_mtsafe=yes
+else $as_nop
+ gl_cv_func_setlocale_null_all_mtsafe=no
+fi
+rm -rf conftest*
+
+ ;;
+ # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
+ *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
+ gl_cv_func_setlocale_null_all_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5
+printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; }
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_all_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_all_mtsafe" in
+ *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ALL_MTSAFE=0 ;;
+ esac
+
+printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5
+printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; }
+if test ${gl_cv_func_setlocale_null_one_mtsafe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ # Guess no on OpenBSD, AIX.
+ openbsd* | aix*)
+ gl_cv_func_setlocale_null_one_mtsafe=no ;;
+ # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
+ *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ gl_cv_func_setlocale_null_one_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5
+printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; }
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_one_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_one_mtsafe" in
+ *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ONE_MTSAFE=0 ;;
+ esac
+
+printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h
+
+
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ case "$host_os" in
+ mingw*) SETLOCALE_NULL_LIB= ;;
+ *)
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+printf %s "checking whether imported symbols can be declared weak... " >&6; }
+if test ${gl_cv_have_weak+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ cygwin*)
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main (void)
+{
+xyzzy();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_have_weak=maybe
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test $gl_cv_have_weak = maybe; then
+ if test "$cross_compiling" = yes
+then :
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
+ gl_cv_have_weak="guessing yes"
+else $as_nop
+ gl_cv_have_weak="guessing no"
+fi
+rm -rf conftest*
+
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+ return (fputs == NULL);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_have_weak=yes
+else $as_nop
+ gl_cv_have_weak=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ ;;
+ esac
+ case " $LDFLAGS " in
+ *" -static "*) gl_cv_have_weak=no ;;
+ esac
+ case "$gl_cv_have_weak" in
+ *yes)
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ : > conftest1.c
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1
+ cat <<EOF > conftest2.c
+#include <pthread.h>
+#pragma weak pthread_mutexattr_gettype
+int main ()
+{
+ return (pthread_mutexattr_gettype != NULL);
+}
+EOF
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \
+ || gl_cv_have_weak=no
+ rm -f conftest1.c libempty.so conftest2.c conftest
+ ;;
+ esac
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+printf "%s\n" "$gl_cv_have_weak" >&6; }
+ case "$gl_cv_have_weak" in
+ *yes)
+
+printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h
+
+ ;;
+ esac
+
+ case "$gl_cv_have_weak" in
+ *yes) SETLOCALE_NULL_LIB= ;;
+ *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;;
+ esac
+ ;;
+ esac
+ else
+ SETLOCALE_NULL_LIB=
+ fi
+
+ LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB"
+
+
+
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE=
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#'
+else
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETLOCALE_LOCK_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_LOCK_FALSE}"; then
+ GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_SETLOCALE_LOCK_TRUE"; then :
+
+
+
+
+ CFLAG_VISIBILITY=
+ HAVE_VISIBILITY=0
+ if test -n "$GCC"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+printf %s "checking whether the -Werror option is usable... " >&6; }
+if test ${gl_cv_cc_vis_werror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_vis_werror=yes
+else $as_nop
+ gl_cv_cc_vis_werror=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+printf "%s\n" "$gl_cv_cc_vis_werror" >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+printf %s "checking for simple visibility declarations... " >&6; }
+if test ${gl_cv_cc_visibility+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ if test $gl_cv_cc_vis_werror = yes; then
+ CFLAGS="$CFLAGS -Werror"
+ fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+ extern __attribute__((__visibility__("default"))) int exportedvar;
+ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+ extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
+ void dummyfunc (void) {}
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_visibility=yes
+else $as_nop
+ gl_cv_cc_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+printf "%s\n" "$gl_cv_cc_visibility" >&6; }
+ if test $gl_cv_cc_visibility = yes; then
+ CFLAG_VISIBILITY="-fvisibility=hidden"
+ HAVE_VISIBILITY=1
+ fi
+ fi
+
+
+
+printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SETLOCALE_NULL=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h
+
+
+
+
+
+ ac_fn_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_sleep" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_SLEEP $ac_have_decl" >>confdefs.h
+
+
+ if test $ac_cv_have_decl_sleep != yes; then
+ HAVE_SLEEP=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sleep" >&5
+printf %s "checking for working sleep... " >&6; }
+if test ${gl_cv_func_sleep_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_sleep_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <errno.h>
+#include <unistd.h>
+#include <signal.h>
+static void
+handle_alarm (int sig)
+{
+ if (sig != SIGALRM)
+ _exit (2);
+}
+
+int
+main (void)
+{
+
+ /* Failure to compile this test due to missing alarm is okay,
+ since all such platforms (mingw) also lack sleep. */
+ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */
+ unsigned int remaining;
+ signal (SIGALRM, handle_alarm);
+ alarm (1);
+ remaining = sleep (pentecost);
+ if (remaining > pentecost)
+ return 3;
+ if (remaining <= pentecost - 10)
+ return 4;
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_sleep_works=yes
+else $as_nop
+ gl_cv_func_sleep_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sleep_works" >&5
+printf "%s\n" "$gl_cv_func_sleep_works" >&6; }
+ case "$gl_cv_func_sleep_works" in
+ *yes) ;;
+ *)
+ REPLACE_SLEEP=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then
+ GL_COND_OBJ_SLEEP_TRUE=
+ GL_COND_OBJ_SLEEP_FALSE='#'
+else
+ GL_COND_OBJ_SLEEP_TRUE='#'
+ GL_COND_OBJ_SLEEP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SLEEP_TRUE}" && test -z "${GL_COND_OBJ_SLEEP_FALSE}"; then
+ GL_COND_OBJ_SLEEP_TRUE='#'
+ GL_COND_OBJ_SLEEP_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SLEEP=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SLEEP 1" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5
+printf %s "checking for ssize_t... " >&6; }
+if test ${gt_cv_ssize_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+int
+main (void)
+{
+int x = sizeof (ssize_t *) + sizeof (ssize_t);
+ return !x;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_ssize_t=yes
+else $as_nop
+ gt_cv_ssize_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5
+printf "%s\n" "$gt_cv_ssize_t" >&6; }
+ if test $gt_cv_ssize_t = no; then
+
+printf "%s\n" "#define ssize_t int" >>confdefs.h
+
+ fi
+
+
+
+
+
+ case "$host_os" in
+ mingw*)
+ REPLACE_STAT=1
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5
+printf %s "checking whether stat handles trailing slashes on files... " >&6; }
+if test ${gl_cv_func_stat_file_slash+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ touch conftest.tmp
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.tmp conftest.lnk
+ fi
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/stat.h>
+
+int
+main (void)
+{
+int result = 0;
+ struct stat st;
+ if (!stat ("conftest.tmp/", &st))
+ result |= 1;
+#if HAVE_LSTAT
+ if (!stat ("conftest.lnk/", &st))
+ result |= 2;
+#endif
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_stat_file_slash=yes
+else $as_nop
+ gl_cv_func_stat_file_slash=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.tmp conftest.lnk
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5
+printf "%s\n" "$gl_cv_func_stat_file_slash" >&6; }
+ case $gl_cv_func_stat_file_slash in
+ *no)
+ REPLACE_STAT=1
+
+printf "%s\n" "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h
+;;
+ esac
+ case $host_os in
+ solaris*)
+ REPLACE_FSTAT=1 ;;
+ esac
+ ;;
+ esac
+
+
+ if test $REPLACE_STAT = 1; then
+ GL_COND_OBJ_STAT_TRUE=
+ GL_COND_OBJ_STAT_FALSE='#'
+else
+ GL_COND_OBJ_STAT_TRUE='#'
+ GL_COND_OBJ_STAT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STAT_TRUE}" && test -z "${GL_COND_OBJ_STAT_FALSE}"; then
+ GL_COND_OBJ_STAT_TRUE='#'
+ GL_COND_OBJ_STAT_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STAT_TRUE"; then :
+
+ case "$host_os" in
+ mingw*)
+
+
+
+
+
+
+
+
+ gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext"
+
+ ;;
+ esac
+
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STAT=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STAT 1" >>confdefs.h
+
+
+
+
+
+
+
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5
+printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; }
+if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #if HAVE_SYS_TIME_H
+ # include <sys/time.h>
+ #endif
+ #include <time.h>
+ struct timespec ts;
+ struct stat st;
+
+int
+main (void)
+{
+
+ st.st_atim = ts;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes
+else $as_nop
+ ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
+printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
+ if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
+
+printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h
+
+ fi
+else $as_nop
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h
+
+
+else $as_nop
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h
+
+
+else $as_nop
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h
+
+
+fi
+
+fi
+
+fi
+
+fi
+
+
+
+
+
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1" >>confdefs.h
+
+
+else $as_nop
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1" >>confdefs.h
+
+
+else $as_nop
+ ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h>
+ #include <sys/stat.h>
+"
+if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes
+then :
+
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1" >>confdefs.h
+
+
+fi
+
+fi
+
+fi
+
+
+
+ GL_GENERATE_STDARG_H=false
+ NEXT_STDARG_H='<stdarg.h>'
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
+printf %s "checking for va_copy... " >&6; }
+if test ${gl_cv_func_va_copy+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+int
+main (void)
+{
+
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_va_copy=yes
+else $as_nop
+ gl_cv_func_va_copy=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5
+printf "%s\n" "$gl_cv_func_va_copy" >&6; }
+ if test $gl_cv_func_va_copy = no; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if defined _AIX && !defined __GNUC__
+ AIX vaccine
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "vaccine" >/dev/null 2>&1
+then :
+ gl_aixcc=yes
+else $as_nop
+ gl_aixcc=no
+fi
+rm -rf conftest*
+
+ if test $gl_aixcc = yes; then
+ GL_GENERATE_STDARG_H=true
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_stdarg_h='<'stdarg.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdarg.h>" >&5
+printf %s "checking absolute name of <stdarg.h>... " >&6; }
+if test ${gl_cv_next_stdarg_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'stdarg.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_stdarg_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_stdarg_h
+ gl_cv_next_stdarg_h='"'$gl_header'"'
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5
+printf "%s\n" "$gl_cv_next_stdarg_h" >&6; }
+ fi
+ NEXT_STDARG_H=$gl_cv_next_stdarg_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'stdarg.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_stdarg_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive
+
+
+
+
+ if test "$gl_cv_next_stdarg_h" = '""'; then
+ gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+ NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+ fi
+ else
+
+
+ exec 9>&6 6>/dev/null
+
+ if test ${gl_cv_func___va_copy+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+int
+main (void)
+{
+
+#ifndef __va_copy
+error, bail out
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func___va_copy=yes
+else $as_nop
+ gl_cv_func___va_copy=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+ exec 6>&9 9>&-
+
+
+ if test $gl_cv_func___va_copy = yes; then
+
+printf "%s\n" "#define va_copy __va_copy" >>confdefs.h
+
+ else
+
+
+printf "%s\n" "#define va_copy gl_va_copy" >>confdefs.h
+
+ fi
+ fi
+ fi
+
+
+
+
+
+
+ case "$GL_GENERATE_STDARG_H" in
+ false) STDARG_H='' ;;
+ true)
+ if test -z "$STDARG_H"; then
+ STDARG_H="${gl_source_base_prefix}stdarg.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDARG_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDARG_H; then
+ GL_GENERATE_STDARG_H_TRUE=
+ GL_GENERATE_STDARG_H_FALSE='#'
+else
+ GL_GENERATE_STDARG_H_TRUE='#'
+ GL_GENERATE_STDARG_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then
+ GL_GENERATE_STDARG_H_TRUE='#'
+ GL_GENERATE_STDARG_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bool, true, false" >&5
+printf %s "checking for bool, true, false... " >&6; }
+if test ${gl_cv_c_bool+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #if true == false
+ #error "true == false"
+ #endif
+ extern bool b;
+ bool b = true == false;
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_c_bool=yes
+else $as_nop
+ gl_cv_c_bool=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_bool" >&5
+printf "%s\n" "$gl_cv_c_bool" >&6; }
+ if test "$gl_cv_c_bool" = yes; then
+
+printf "%s\n" "#define HAVE_C_BOOL 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+ if test $ac_cv_header_stdckdint_h = yes; then
+ GL_GENERATE_STDCKDINT_H=false
+ else
+ GL_GENERATE_STDCKDINT_H=true
+ fi
+
+
+
+
+ case "$GL_GENERATE_STDCKDINT_H" in
+ false) STDCKDINT_H='' ;;
+ true)
+ if test -z "$STDCKDINT_H"; then
+ STDCKDINT_H="${gl_source_base_prefix}stdckdint.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDCKDINT_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDCKDINT_H; then
+ GL_GENERATE_STDCKDINT_H_TRUE=
+ GL_GENERATE_STDCKDINT_H_FALSE='#'
+else
+ GL_GENERATE_STDCKDINT_H_TRUE='#'
+ GL_GENERATE_STDCKDINT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_STDCKDINT_H_TRUE}" && test -z "${GL_GENERATE_STDCKDINT_H_FALSE}"; then
+ GL_GENERATE_STDCKDINT_H_TRUE='#'
+ GL_GENERATE_STDCKDINT_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ case "$GL_GENERATE_STDDEF_H" in
+ false) STDDEF_H='' ;;
+ true)
+ if test -z "$STDDEF_H"; then
+ STDDEF_H="${gl_source_base_prefix}stddef.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDDEF_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDDEF_H; then
+ GL_GENERATE_STDDEF_H_TRUE=
+ GL_GENERATE_STDDEF_H_FALSE='#'
+else
+ GL_GENERATE_STDDEF_H_TRUE='#'
+ GL_GENERATE_STDDEF_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
+ GL_GENERATE_STDDEF_H_TRUE='#'
+ GL_GENERATE_STDDEF_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ case "$GL_GENERATE_STDINT_H" in
+ false) STDINT_H='' ;;
+ true)
+ if test -z "$STDINT_H"; then
+ STDINT_H="${gl_source_base_prefix}stdint.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_STDINT_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_STDINT_H; then
+ GL_GENERATE_STDINT_H_TRUE=
+ GL_GENERATE_STDINT_H_FALSE='#'
+else
+ GL_GENERATE_STDINT_H_TRUE='#'
+ GL_GENERATE_STDINT_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
+ GL_GENERATE_STDINT_H_TRUE='#'
+ GL_GENERATE_STDINT_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+ case "$GL_GENERATE_LIMITS_H" in
+ false) LIMITS_H='' ;;
+ true)
+ if test -z "$LIMITS_H"; then
+ LIMITS_H="${gl_source_base_prefix}limits.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_LIMITS_H; then
+ GL_GENERATE_LIMITS_H_TRUE=
+ GL_GENERATE_LIMITS_H_FALSE='#'
+else
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+ GL_GENERATE_LIMITS_H_TRUE='#'
+ GL_GENERATE_LIMITS_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $REPLACE_STDIO_READ_FUNCS = 1; then
+ GL_COND_OBJ_STDIO_READ_TRUE=
+ GL_COND_OBJ_STDIO_READ_FALSE='#'
+else
+ GL_COND_OBJ_STDIO_READ_TRUE='#'
+ GL_COND_OBJ_STDIO_READ_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STDIO_READ_TRUE}" && test -z "${GL_COND_OBJ_STDIO_READ_FALSE}"; then
+ GL_COND_OBJ_STDIO_READ_TRUE='#'
+ GL_COND_OBJ_STDIO_READ_FALSE='#'
+ fi
+
+
+ if test $REPLACE_STDIO_WRITE_FUNCS = 1; then
+ GL_COND_OBJ_STDIO_WRITE_TRUE=
+ GL_COND_OBJ_STDIO_WRITE_FALSE='#'
+else
+ GL_COND_OBJ_STDIO_WRITE_TRUE='#'
+ GL_COND_OBJ_STDIO_WRITE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STDIO_WRITE_TRUE}" && test -z "${GL_COND_OBJ_STDIO_WRITE_FALSE}"; then
+ GL_COND_OBJ_STDIO_WRITE_TRUE='#'
+ GL_COND_OBJ_STDIO_WRITE_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FSCANF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FSCANF 1" >>confdefs.h
+
+
+
+
+
+printf "%s\n" "#define GNULIB_FSCANF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_SCANF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SCANF 1" >>confdefs.h
+
+
+
+
+
+printf "%s\n" "#define GNULIB_SCANF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FGETC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FGETC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_GETCHAR=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETCHAR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FGETS=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FGETS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FREAD=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FREAD 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPRINTF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PRINTF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_VFPRINTF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_VFPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_VPRINTF=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_VPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPUTC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FPUTC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTC=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PUTC 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTCHAR=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PUTCHAR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FPUTS=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FPUTS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_PUTS=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PUTS 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_FWRITE=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FWRITE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_func_malloc_posix != yes; then
+ REPLACE_STRDUP=1
+ fi
+
+ if test $ac_cv_have_decl_strdup = no; then
+ HAVE_DECL_STRDUP=0
+ fi
+
+
+ if test $REPLACE_STRDUP = 1; then
+ GL_COND_OBJ_STRDUP_TRUE=
+ GL_COND_OBJ_STRDUP_FALSE='#'
+else
+ GL_COND_OBJ_STRDUP_TRUE='#'
+ GL_COND_OBJ_STRDUP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRDUP_TRUE}" && test -z "${GL_COND_OBJ_STRDUP_FALSE}"; then
+ GL_COND_OBJ_STRDUP_TRUE='#'
+ GL_COND_OBJ_STRDUP_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRDUP_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STRDUP=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STRDUP 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5
+printf %s "checking for working strerror function... " >&6; }
+if test ${gl_cv_func_working_strerror+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <string.h>
+
+int
+main (void)
+{
+if (!*strerror (-2)) return 1;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_working_strerror=yes
+else $as_nop
+ gl_cv_func_working_strerror=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5
+printf "%s\n" "$gl_cv_func_working_strerror" >&6; }
+ case "$gl_cv_func_working_strerror" in
+ *yes) ;;
+ *)
+ REPLACE_STRERROR=1
+ ;;
+ esac
+
+ case "$gl_cv_func_strerror_r_works" in
+ *no) REPLACE_STRERROR=1 ;;
+ esac
+
+ else
+ REPLACE_STRERROR=1
+ fi
+
+
+ if test $REPLACE_STRERROR = 1; then
+ GL_COND_OBJ_STRERROR_TRUE=
+ GL_COND_OBJ_STRERROR_FALSE='#'
+else
+ GL_COND_OBJ_STRERROR_TRUE='#'
+ GL_COND_OBJ_STRERROR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRERROR_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_FALSE}"; then
+ GL_COND_OBJ_STRERROR_TRUE='#'
+ GL_COND_OBJ_STRERROR_FALSE='#'
+ fi
+
+
+
+printf "%s\n" "#define GNULIB_STRERROR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STRERROR=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STRERROR 1" >>confdefs.h
+
+
+
+
+
+
+ if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE=
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#'
+else
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#'
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_FALSE}"; then
+ GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#'
+ GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRERROR_OVERRIDE_TRUE"; then :
+
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll"
+if test "x$ac_cv_func_strtoll" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRTOLL 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_strtoll = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strtoll works" >&5
+printf %s "checking whether strtoll works... " >&6; }
+if test ${gl_cv_func_strtoll_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_strtoll_works="guessing no" ;;
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strtoll_works="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_func_strtoll_works="guessing no" ;;
+ *) gl_cv_func_strtoll_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+int
+main (void)
+{
+int result = 0;
+ char *term;
+ /* This test fails on Minix and native Windows. */
+ {
+ const char input[] = "0x";
+ (void) strtoll (input, &term, 16);
+ if (term != input + 1)
+ result |= 1;
+ }
+ /* This test fails on pre-C23 platforms. */
+ {
+ const char input[] = "0b1";
+ (void) strtoll (input, &term, 2);
+ if (term != input + 3)
+ result |= 2;
+ }
+ return result;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_strtoll_works=yes
+else $as_nop
+ gl_cv_func_strtoll_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtoll_works" >&5
+printf "%s\n" "$gl_cv_func_strtoll_works" >&6; }
+ case "$gl_cv_func_strtoll_works" in
+ *yes) ;;
+ *) REPLACE_STRTOLL=1 ;;
+ esac
+ else
+ HAVE_STRTOLL=0
+ fi
+
+
+ if test $HAVE_STRTOLL = 0 || test $REPLACE_STRTOLL = 1; then
+ GL_COND_OBJ_STRTOLL_TRUE=
+ GL_COND_OBJ_STRTOLL_FALSE='#'
+else
+ GL_COND_OBJ_STRTOLL_TRUE='#'
+ GL_COND_OBJ_STRTOLL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRTOLL_TRUE}" && test -z "${GL_COND_OBJ_STRTOLL_FALSE}"; then
+ GL_COND_OBJ_STRTOLL_TRUE='#'
+ GL_COND_OBJ_STRTOLL_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRTOLL_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STRTOLL=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STRTOLL 1" >>confdefs.h
+
+
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull"
+if test "x$ac_cv_func_strtoull" = xyes
+then :
+ printf "%s\n" "#define HAVE_STRTOULL 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_strtoull = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strtoull works" >&5
+printf %s "checking whether strtoull works... " >&6; }
+if test ${gl_cv_func_strtoull_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_strtoull_works="guessing no" ;;
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strtoull_works="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_func_strtoull_works="guessing no" ;;
+ *) gl_cv_func_strtoull_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+int
+main (void)
+{
+int result = 0;
+ char *term;
+ /* This test fails on Minix and native Windows. */
+ {
+ const char input[] = "0x";
+ (void) strtoull (input, &term, 16);
+ if (term != input + 1)
+ result |= 1;
+ }
+ /* This test fails on pre-C23 platforms. */
+ {
+ const char input[] = "0b1";
+ (void) strtoull (input, &term, 2);
+ if (term != input + 3)
+ result |= 2;
+ }
+ return result;
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_strtoull_works=yes
+else $as_nop
+ gl_cv_func_strtoull_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtoull_works" >&5
+printf "%s\n" "$gl_cv_func_strtoull_works" >&6; }
+ case "$gl_cv_func_strtoull_works" in
+ *yes) ;;
+ *) REPLACE_STRTOULL=1 ;;
+ esac
+ else
+ HAVE_STRTOULL=0
+ fi
+
+
+ if test $HAVE_STRTOULL = 0 || test $REPLACE_STRTOULL = 1; then
+ GL_COND_OBJ_STRTOULL_TRUE=
+ GL_COND_OBJ_STRTOULL_FALSE='#'
+else
+ GL_COND_OBJ_STRTOULL_TRUE='#'
+ GL_COND_OBJ_STRTOULL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_STRTOULL_TRUE}" && test -z "${GL_COND_OBJ_STRTOULL_FALSE}"; then
+ GL_COND_OBJ_STRTOULL_TRUE='#'
+ GL_COND_OBJ_STRTOULL_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_STRTOULL_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_STRTOULL=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STRTOULL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+printf "%s\n" "#define GNULIB_TEMPNAME 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink honors trailing slashes" >&5
+printf %s "checking whether unlink honors trailing slashes... " >&6; }
+if test ${gl_cv_func_unlink_honors_slashes+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ touch conftest.file
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.file conftest.lnk
+ fi
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <io.h>
+ #endif
+ #include <errno.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+int result = 0;
+ if (!unlink ("conftest.file/"))
+ result |= 1;
+ else if (errno != ENOTDIR)
+ result |= 2;
+#if HAVE_LSTAT
+ if (!unlink ("conftest.lnk/"))
+ result |= 4;
+ else if (errno != ENOTDIR)
+ result |= 8;
+#endif
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_unlink_honors_slashes=yes
+else $as_nop
+ gl_cv_func_unlink_honors_slashes=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.file conftest.lnk
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_honors_slashes" >&5
+printf "%s\n" "$gl_cv_func_unlink_honors_slashes" >&6; }
+ case "$gl_cv_func_unlink_honors_slashes" in
+ *no)
+ REPLACE_UNLINK=1
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink of a parent directory fails as it should" >&5
+printf %s "checking whether unlink of a parent directory fails as it should... " >&6; }
+if test ${gl_cv_func_unlink_parent_fails+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ darwin*)
+ if {
+ # Use the mktemp program if available. If not available, hide the error
+ # message.
+ tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+ } ||
+ {
+ # Use a simple mkdir command. It is guaranteed to fail if the directory
+ # already exists. $RANDOM is bash specific and expands to empty in shells
+ # other than bash, ksh and zsh. Its use does not increase security;
+ # rather, it minimizes the probability of failure in a very cluttered /tmp
+ # directory.
+ tmp=/tmp/gt$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+ }; then
+ mkdir "$tmp/subdir"
+ GL_SUBDIR_FOR_UNLINK="$tmp/subdir"
+ export GL_SUBDIR_FOR_UNLINK
+ if test "$cross_compiling" = yes
+then :
+ # If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal"
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdlib.h>
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <direct.h>
+ # include <io.h>
+ #endif
+
+
+$gl_mda_defines
+
+ int main ()
+ {
+ int result = 0;
+ if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0)
+ result |= 1;
+ else if (unlink ("..") == 0)
+ result |= 2;
+ return result;
+ }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_unlink_parent_fails=yes
+else $as_nop
+ gl_cv_func_unlink_parent_fails=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ unset GL_SUBDIR_FOR_UNLINK
+ rm -rf "$tmp"
+ else
+ gl_cv_func_unlink_parent_fails="guessing no"
+ fi
+ ;;
+ *)
+ gl_cv_func_unlink_parent_fails="guessing yes"
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_parent_fails" >&5
+printf "%s\n" "$gl_cv_func_unlink_parent_fails" >&6; }
+ case "$gl_cv_func_unlink_parent_fails" in
+ *no)
+ REPLACE_UNLINK=1
+
+printf "%s\n" "#define UNLINK_PARENT_BUG 1" >>confdefs.h
+
+ ;;
+ esac
+
+
+ if test $REPLACE_UNLINK = 1; then
+ GL_COND_OBJ_UNLINK_TRUE=
+ GL_COND_OBJ_UNLINK_FALSE='#'
+else
+ GL_COND_OBJ_UNLINK_TRUE='#'
+ GL_COND_OBJ_UNLINK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_UNLINK_TRUE}" && test -z "${GL_COND_OBJ_UNLINK_FALSE}"; then
+ GL_COND_OBJ_UNLINK_TRUE='#'
+ GL_COND_OBJ_UNLINK_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_UNLINK=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_UNLINK 1" >>confdefs.h
+
+
+
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default"
+if test "x$ac_cv_type_useconds_t" = xyes
+then :
+
+else $as_nop
+
+printf "%s\n" "#define useconds_t unsigned int" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_usleep = no; then
+ HAVE_USLEEP=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5
+printf %s "checking whether usleep allows large arguments... " >&6; }
+if test ${gl_cv_func_usleep_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_usleep_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_usleep_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <unistd.h>
+
+int
+main (void)
+{
+return !!usleep (1000000);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_usleep_works=yes
+else $as_nop
+ gl_cv_func_usleep_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_usleep_works" >&5
+printf "%s\n" "$gl_cv_func_usleep_works" >&6; }
+ case "$gl_cv_func_usleep_works" in
+ *yes) ;;
+ *)
+ REPLACE_USLEEP=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then
+ GL_COND_OBJ_USLEEP_TRUE=
+ GL_COND_OBJ_USLEEP_FALSE='#'
+else
+ GL_COND_OBJ_USLEEP_TRUE='#'
+ GL_COND_OBJ_USLEEP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_USLEEP_TRUE}" && test -z "${GL_COND_OBJ_USLEEP_FALSE}"; then
+ GL_COND_OBJ_USLEEP_TRUE='#'
+ GL_COND_OBJ_USLEEP_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_USLEEP=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_USLEEP 1" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5
+printf %s "checking for variable-length arrays... " >&6; }
+if test ${ac_cv_c_vararrays+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC_NO_VLA__
+ defined
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "defined" >/dev/null 2>&1
+then :
+ ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Test for VLA support. This test is partly inspired
+ from examples in the C standard. Use at least two VLA
+ functions to detect the GCC 3.4.3 bug described in:
+ https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html
+ */
+ #ifdef __STDC_NO_VLA__
+ syntax error;
+ #else
+ extern int n;
+ int B[100];
+ int fvla (int m, int C[m][m]);
+
+ int
+ simple (int count, int all[static count])
+ {
+ return all[count - 1];
+ }
+
+ int
+ fvla (int m, int C[m][m])
+ {
+ typedef int VLA[m][m];
+ VLA x;
+ int D[m];
+ static int (*q)[m] = &B;
+ int (*s)[n] = q;
+ return C && &x[0][0] == &D[0] && &D[0] == s[0];
+ }
+ #endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_vararrays=yes
+else $as_nop
+ ac_cv_c_vararrays=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -rf conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_vararrays" >&5
+printf "%s\n" "$ac_cv_c_vararrays" >&6; }
+ if test "$ac_cv_c_vararrays" = yes; then
+
+printf "%s\n" "#define HAVE_C_VARARRAYS 1" >>confdefs.h
+
+ elif test "$ac_cv_c_vararrays" = no; then
+
+printf "%s\n" "#define __STDC_NO_VLA__ 1" >>confdefs.h
+
+ fi
+
+
+# Check whether --with-packager was given.
+if test ${with_packager+y}
+then :
+ withval=$with_packager; case $withval in
+ yes|no) ;;
+ *)
+printf "%s\n" "#define PACKAGE_PACKAGER \"$withval\"" >>confdefs.h
+ ;;
+ esac
+
+fi
+
+
+
+# Check whether --with-packager-version was given.
+if test ${with_packager_version+y}
+then :
+ withval=$with_packager_version; case $withval in
+ yes|no) ;;
+ *)
+printf "%s\n" "#define PACKAGE_PACKAGER_VERSION \"$withval\"" >>confdefs.h
+ ;;
+ esac
+
+fi
+
+
+
+# Check whether --with-packager-bug-reports was given.
+if test ${with_packager_bug_reports+y}
+then :
+ withval=$with_packager_bug_reports; case $withval in
+ yes|no) ;;
+ *)
+printf "%s\n" "#define PACKAGE_PACKAGER_BUG_REPORTS \"$withval\"" >>confdefs.h
+ ;;
+ esac
+
+fi
+
+
+ if test "X$with_packager" = "X" && \
+ test "X$with_packager_version$with_packager_bug_reports" != "X"
+ then
+ as_fn_error $? "The --with-packager-{bug-reports,version} options require --with-packager" "$LINENO" 5
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if case "$host_os" in
+ mingw*) true ;;
+ *) test $ac_cv_func_mbsinit = yes ;;
+ esac \
+ && test $ac_cv_func_mbrtowc = yes; then
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5
+printf %s "checking whether mbrtowc handles incomplete characters... " >&6; }
+if test ${gl_cv_func_mbrtowc_incomplete_state+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on AIX and OSF/1.
+ aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+ esac
+ if test $LOCALE_JA != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ else
+ if test $LOCALE_FR_UTF8 != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ const char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_incomplete_state=yes
+else $as_nop
+ gl_cv_func_mbrtowc_incomplete_state=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; }
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5
+printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; }
+if test ${gl_cv_func_mbrtowc_sanitycheck+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris 8.
+ solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+ esac
+ if test $LOCALE_ZH_CN != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8:
+ mbrtowc returns 2, and sets wc to 0x00F0.
+ mbtowc returns 4 (correct) and sets wc to 0x5EDC. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 6, &state) != 4
+ && mbtowc (&wc, input + 3, 6) == 4)
+ return 2;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_mbrtowc_sanitycheck=yes
+else $as_nop
+ gl_cv_func_mbrtowc_sanitycheck=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5
+printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; }
+
+ REPLACE_MBSTATE_T=0
+ case "$gl_cv_func_mbrtowc_incomplete_state" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ case "$gl_cv_func_mbrtowc_sanitycheck" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ else
+ REPLACE_MBSTATE_T=1
+ fi
+
+
+
+ if test $ac_cv_func_wcrtomb = no; then
+ HAVE_WCRTOMB=0
+ ac_fn_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" "
+ #include <wchar.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_wcrtomb" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_WCRTOMB $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_wcrtomb = yes; then
+ REPLACE_WCRTOMB=1
+ fi
+ else
+ if test $REPLACE_WCRTOMB = 0; then
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb works in the C locale" >&5
+printf %s "checking whether wcrtomb works in the C locale... " >&6; }
+if test ${gl_cv_func_wcrtomb_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_wcrtomb_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_wcrtomb_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <string.h>
+#include <stdlib.h>
+#include <wchar.h>
+int main ()
+{
+ mbstate_t state;
+ char out[64];
+ int count;
+ memset (&state, 0, sizeof (state));
+ out[0] = 'x';
+ count = wcrtomb (out, L'a', &state);
+ return !(count == 1 && out[0] == 'a');
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_wcrtomb_works=yes
+else $as_nop
+ gl_cv_func_wcrtomb_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_works" >&5
+printf "%s\n" "$gl_cv_func_wcrtomb_works" >&6; }
+ case "$gl_cv_func_wcrtomb_works" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define WCRTOMB_C_LOCALE_BUG 1" >>confdefs.h
+
+ REPLACE_WCRTOMB=1 ;;
+ esac
+ fi
+ if test $REPLACE_WCRTOMB = 0; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5
+printf %s "checking whether wcrtomb return value is correct... " >&6; }
+if test ${gl_cv_func_wcrtomb_retval+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on AIX 4, OSF/1, Solaris, native Windows.
+ aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_wcrtomb_retval="guessing yes" ;;
+ esac
+ if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+#include <stdlib.h>
+int main ()
+{
+ int result = 0;
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 1;
+ }
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 2;
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ if (mbtowc (&wc, "\303\274", 2) == 2)
+ if (wcrtomb (NULL, wc, NULL) != 1)
+ result |= 2;
+ }
+ }
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 4;
+ }
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 8;
+ }
+ return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_wcrtomb_retval=yes
+else $as_nop
+ gl_cv_func_wcrtomb_retval=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5
+printf "%s\n" "$gl_cv_func_wcrtomb_retval" >&6; }
+ case "$gl_cv_func_wcrtomb_retval" in
+ *yes) ;;
+ *)
+printf "%s\n" "#define WCRTOMB_RETVAL_BUG 1" >>confdefs.h
+
+ REPLACE_WCRTOMB=1 ;;
+ esac
+ fi
+ fi
+
+
+ if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then
+ GL_COND_OBJ_WCRTOMB_TRUE=
+ GL_COND_OBJ_WCRTOMB_FALSE='#'
+else
+ GL_COND_OBJ_WCRTOMB_TRUE='#'
+ GL_COND_OBJ_WCRTOMB_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WCRTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCRTOMB_FALSE}"; then
+ GL_COND_OBJ_WCRTOMB_TRUE='#'
+ GL_COND_OBJ_WCRTOMB_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_WCRTOMB_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GL_GNULIB_WCRTOMB=1
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE=
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_MUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_MUTEX_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#'
+ fi
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE=
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE='#'
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_ONCE_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_ONCE_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_ONCE_TRUE='#'
+ GL_COND_OBJ_WINDOWS_ONCE_FALSE='#'
+ fi
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE=
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#'
+ fi
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE=
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#'
+ GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#'
+ fi
+
+ :
+
+
+printf "%s\n" "#define GNULIB_XALLOC 1" >>confdefs.h
+
+
+
+
+printf "%s\n" "#define GNULIB_XALLOC_DIE 1" >>confdefs.h
+
+
+
+ :
+
+ # End of code from modules
+
+
+
+
+
+
+
+
+
+
+
+ gltests_libdeps=
+ gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ gl_source_base='gnulib-tests'
+ gl_source_base_prefix=
+ gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+ gl_module_indicator_condition=$gltests_WITNESS
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_ACCEPT_TRUE=
+ GL_COND_OBJ_ACCEPT_FALSE='#'
+else
+ GL_COND_OBJ_ACCEPT_TRUE='#'
+ GL_COND_OBJ_ACCEPT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ACCEPT_TRUE}" && test -z "${GL_COND_OBJ_ACCEPT_FALSE}"; then
+ GL_COND_OBJ_ACCEPT_TRUE='#'
+ GL_COND_OBJ_ACCEPT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_ACCEPT" != 1; then
+ if test "$GL_GNULIB_ACCEPT" = 0; then
+ GL_GNULIB_ACCEPT=$gl_module_indicator_condition
+ else
+ GL_GNULIB_ACCEPT="($GL_GNULIB_ACCEPT || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_ACCEPT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_BIND_TRUE=
+ GL_COND_OBJ_BIND_FALSE='#'
+else
+ GL_COND_OBJ_BIND_TRUE='#'
+ GL_COND_OBJ_BIND_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_BIND_TRUE}" && test -z "${GL_COND_OBJ_BIND_FALSE}"; then
+ GL_COND_OBJ_BIND_TRUE='#'
+ GL_COND_OBJ_BIND_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_BIND" != 1; then
+ if test "$GL_GNULIB_BIND" = 0; then
+ GL_GNULIB_BIND=$gl_module_indicator_condition
+ else
+ GL_GNULIB_BIND="($GL_GNULIB_BIND || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_BIND 1" >>confdefs.h
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a turkish Unicode locale" >&5
+printf %s "checking for a turkish Unicode locale... " >&6; }
+if test ${gt_cv_locale_tr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include <wctype.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. But BeOS does not
+ implement the Turkish upper-/lowercase mappings. Therefore, let this
+ program return 1 on BeOS. */
+ /* Check whether the given locale name is recognized by the system. */
+#if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+#else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+#if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+#endif
+#ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+ /* Check whether in the abbreviation of the eighth month, the second
+ character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f)
+ return 1;
+ /* Check whether the upper-/lowercase mappings are as expected for
+ Turkish. */
+ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i'
+ || towupper(0x0131) != 'I' || towlower ('I') != 0x0131)
+ return 1;
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=Turkish_Turkey.65001
+ else
+ # None found.
+ gt_cv_locale_tr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr_TR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr_TR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_tr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ else
+ gt_cv_locale_tr_utf8=none
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_tr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_tr_utf8" >&6; }
+ LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_CONNECT_TRUE=
+ GL_COND_OBJ_CONNECT_FALSE='#'
+else
+ GL_COND_OBJ_CONNECT_TRUE='#'
+ GL_COND_OBJ_CONNECT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_CONNECT_TRUE}" && test -z "${GL_COND_OBJ_CONNECT_FALSE}"; then
+ GL_COND_OBJ_CONNECT_TRUE='#'
+ GL_COND_OBJ_CONNECT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_CONNECT" != 1; then
+ if test "$GL_GNULIB_CONNECT" = 0; then
+ GL_GNULIB_CONNECT=$gl_module_indicator_condition
+ else
+ GL_GNULIB_CONNECT="($GL_GNULIB_CONNECT || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_CONNECT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_ENVIRON" != 1; then
+ if test "$GL_GNULIB_ENVIRON" = 0; then
+ GL_GNULIB_ENVIRON=$gl_module_indicator_condition
+ else
+ GL_GNULIB_ENVIRON="($GL_GNULIB_ENVIRON || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_FDOPEN=1
+ fi
+
+ if test $REPLACE_FDOPEN = 0; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fdopen sets errno" >&5
+printf %s "checking whether fdopen sets errno... " >&6; }
+if test ${gl_cv_func_fdopen_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ mingw*) gl_cv_func_fdopen_works="guessing no" ;;
+ *) gl_cv_func_fdopen_works="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <errno.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+ FILE *fp;
+ errno = 0;
+ fp = fdopen (-1, "r");
+ if (fp == NULL && errno == 0)
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_fdopen_works=yes
+else $as_nop
+ gl_cv_func_fdopen_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fdopen_works" >&5
+printf "%s\n" "$gl_cv_func_fdopen_works" >&6; }
+ case "$gl_cv_func_fdopen_works" in
+ *no) REPLACE_FDOPEN=1 ;;
+ esac
+ fi
+
+
+ if test $REPLACE_FDOPEN = 1; then
+ GL_COND_OBJ_FDOPEN_TRUE=
+ GL_COND_OBJ_FDOPEN_FALSE='#'
+else
+ GL_COND_OBJ_FDOPEN_TRUE='#'
+ GL_COND_OBJ_FDOPEN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FDOPEN_TRUE}" && test -z "${GL_COND_OBJ_FDOPEN_FALSE}"; then
+ GL_COND_OBJ_FDOPEN_TRUE='#'
+ GL_COND_OBJ_FDOPEN_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FDOPEN_TRUE"; then :
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_FDOPEN" != 1; then
+ if test "$GL_GNULIB_FDOPEN" = 0; then
+ GL_GNULIB_FDOPEN=$gl_module_indicator_condition
+ else
+ GL_GNULIB_FDOPEN="($GL_GNULIB_FDOPEN || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FDOPEN 1" >>confdefs.h
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5
+printf %s "checking for flexible array member... " >&6; }
+if test ${ac_cv_c_flexmember+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+ #include <stdio.h>
+ #include <stddef.h>
+ struct m { struct m *next, **list; char name[]; };
+ struct s { struct s *p; struct m *m; int n; double d[]; };
+int
+main (void)
+{
+int m = getchar ();
+ size_t nbytes = offsetof (struct s, d) + m * sizeof (double);
+ nbytes += sizeof (struct s) - 1;
+ nbytes -= nbytes % sizeof (struct s);
+ struct s *p = malloc (nbytes);
+ p->p = p;
+ p->m = NULL;
+ p->d[0] = 0.0;
+ return p->d != (double *) NULL;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_flexmember=yes
+else $as_nop
+ ac_cv_c_flexmember=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5
+printf "%s\n" "$ac_cv_c_flexmember" >&6; }
+ if test $ac_cv_c_flexmember = yes; then
+
+printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h
+
+ else
+ printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ftruncate" >&5
+printf %s "checking for ftruncate... " >&6; }
+if test ${gl_cv_onwards_func_ftruncate+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "ftruncate" "ac_cv_have_decl_ftruncate" "#include <unistd.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_ftruncate" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_ftruncate = yes; then
+ ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate"
+if test "x$ac_cv_func_ftruncate" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_ftruncate = yes; then
+ gl_cv_onwards_func_ftruncate=yes
+ else
+ gl_cv_onwards_func_ftruncate='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_ftruncate='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate"
+if test "x$ac_cv_func_ftruncate" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_ftruncate=$ac_cv_func_ftruncate
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_ftruncate" >&5
+printf "%s\n" "$gl_cv_onwards_func_ftruncate" >&6; }
+
+ case "$gl_cv_onwards_func_ftruncate" in
+ future*) ac_cv_func_ftruncate=no ;;
+ *) ac_cv_func_ftruncate=$gl_cv_onwards_func_ftruncate ;;
+ esac
+ if test $ac_cv_func_ftruncate = yes; then
+
+printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h
+
+ fi
+
+
+ if test $ac_cv_func_ftruncate = yes; then
+
+
+ case "$host_os" in
+ mingw*)
+ REPLACE_FTRUNCATE=1
+ ;;
+ esac
+
+ else
+ HAVE_FTRUNCATE=0
+ case "$gl_cv_onwards_func_ftruncate" in
+ future*) REPLACE_FTRUNCATE=1 ;;
+ esac
+ fi
+
+
+ if test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1; then
+ GL_COND_OBJ_FTRUNCATE_TRUE=
+ GL_COND_OBJ_FTRUNCATE_FALSE='#'
+else
+ GL_COND_OBJ_FTRUNCATE_TRUE='#'
+ GL_COND_OBJ_FTRUNCATE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_FTRUNCATE_TRUE}" && test -z "${GL_COND_OBJ_FTRUNCATE_FALSE}"; then
+ GL_COND_OBJ_FTRUNCATE_TRUE='#'
+ GL_COND_OBJ_FTRUNCATE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_FTRUNCATE_TRUE"; then :
+
+
+ ac_fn_c_check_func "$LINENO" "_chsize" "ac_cv_func__chsize"
+if test "x$ac_cv_func__chsize" = xyes
+then :
+ printf "%s\n" "#define HAVE__CHSIZE 1" >>confdefs.h
+
+fi
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_FTRUNCATE" != 1; then
+ if test "$GL_GNULIB_FTRUNCATE" = 0; then
+ GL_GNULIB_FTRUNCATE=$gl_module_indicator_condition
+ else
+ GL_GNULIB_FTRUNCATE="($GL_GNULIB_FTRUNCATE || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_FTRUNCATE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in
+ *yes,yes) ;;
+ *)
+ REPLACE_GETCWD=1
+ ;;
+ esac
+
+
+ if test $REPLACE_GETCWD = 1; then
+ GL_COND_OBJ_GETCWD_LGPL_TRUE=
+ GL_COND_OBJ_GETCWD_LGPL_FALSE='#'
+else
+ GL_COND_OBJ_GETCWD_LGPL_TRUE='#'
+ GL_COND_OBJ_GETCWD_LGPL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETCWD_LGPL_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_LGPL_FALSE}"; then
+ GL_COND_OBJ_GETCWD_LGPL_TRUE='#'
+ GL_COND_OBJ_GETCWD_LGPL_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_GETCWD" != 1; then
+ if test "$GL_GNULIB_GETCWD" = 0; then
+ GL_GNULIB_GETCWD=$gl_module_indicator_condition
+ else
+ GL_GNULIB_GETCWD="($GL_GNULIB_GETCWD || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETCWD 1" >>confdefs.h
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5
+printf %s "checking for getpagesize... " >&6; }
+if test ${gl_cv_func_getpagesize+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+int
+main (void)
+{
+return getpagesize();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func_getpagesize=yes
+else $as_nop
+ gl_cv_func_getpagesize=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getpagesize" >&5
+printf "%s\n" "$gl_cv_func_getpagesize" >&6; }
+
+ if test $gl_cv_func_getpagesize = no; then
+ HAVE_GETPAGESIZE=0
+ ac_fn_c_check_header_compile "$LINENO" "OS.h" "ac_cv_header_OS_h" "$ac_includes_default"
+if test "x$ac_cv_header_OS_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_OS_H 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_header_OS_h = yes; then
+ HAVE_OS_H=1
+ fi
+ ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_header_sys_param_h = yes; then
+ HAVE_SYS_PARAM_H=1
+ fi
+ fi
+ case "$host_os" in
+ mingw*)
+ REPLACE_GETPAGESIZE=1
+ ;;
+ esac
+ ac_fn_check_decl "$LINENO" "getpagesize" "ac_cv_have_decl_getpagesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getpagesize" = xyes
+then :
+
+else $as_nop
+ HAVE_DECL_GETPAGESIZE=0
+fi
+
+
+ if test $REPLACE_GETPAGESIZE = 1; then
+ GL_COND_OBJ_GETPAGESIZE_TRUE=
+ GL_COND_OBJ_GETPAGESIZE_FALSE='#'
+else
+ GL_COND_OBJ_GETPAGESIZE_TRUE='#'
+ GL_COND_OBJ_GETPAGESIZE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETPAGESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETPAGESIZE_FALSE}"; then
+ GL_COND_OBJ_GETPAGESIZE_TRUE='#'
+ GL_COND_OBJ_GETPAGESIZE_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_GETPAGESIZE" != 1; then
+ if test "$GL_GNULIB_GETPAGESIZE" = 0; then
+ GL_GNULIB_GETPAGESIZE=$gl_module_indicator_condition
+ else
+ GL_GNULIB_GETPAGESIZE="($GL_GNULIB_GETPAGESIZE || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETPAGESIZE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+ gl_gettimeofday_timezone=void
+ if test $ac_cv_func_gettimeofday != yes; then
+ HAVE_GETTIMEOFDAY=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5
+printf %s "checking for gettimeofday with POSIX signature... " >&6; }
+if test ${gl_cv_func_gettimeofday_posix_signature+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/time.h>
+ struct timeval c;
+ int gettimeofday (struct timeval *restrict, void *restrict);
+
+int
+main (void)
+{
+/* glibc uses struct timezone * rather than the POSIX void *
+ if _GNU_SOURCE is defined. However, since the only portable
+ use of gettimeofday uses NULL as the second parameter, and
+ since the glibc definition is actually more typesafe, it is
+ not worth wrapping this to get a compliant signature. */
+ int (*f) (struct timeval *restrict, void *restrict)
+ = gettimeofday;
+ int x = f (&c, 0);
+ return !(x | c.tv_sec | c.tv_usec);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_gettimeofday_posix_signature=yes
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_gettimeofday_posix_signature=almost
+else $as_nop
+ gl_cv_func_gettimeofday_posix_signature=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5
+printf "%s\n" "$gl_cv_func_gettimeofday_posix_signature" >&6; }
+ if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+ gl_gettimeofday_timezone='struct timezone'
+ elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+ REPLACE_GETTIMEOFDAY=1
+ fi
+ if test $REPLACE_STRUCT_TIMEVAL = 1; then
+ REPLACE_GETTIMEOFDAY=1
+ fi
+ case "$host_os" in
+ mingw*) REPLACE_GETTIMEOFDAY=1 ;;
+ esac
+ fi
+
+printf "%s\n" "#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone" >>confdefs.h
+
+
+
+ if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE=
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE='#'
+else
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE='#'
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_GETTIMEOFDAY_TRUE}" && test -z "${GL_COND_OBJ_GETTIMEOFDAY_FALSE}"; then
+ GL_COND_OBJ_GETTIMEOFDAY_TRUE='#'
+ GL_COND_OBJ_GETTIMEOFDAY_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_GETTIMEOFDAY_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_GETTIMEOFDAY" != 1; then
+ if test "$GL_GNULIB_GETTIMEOFDAY" = 0; then
+ GL_GNULIB_GETTIMEOFDAY=$gl_module_indicator_condition
+ else
+ GL_GNULIB_GETTIMEOFDAY="($GL_GNULIB_GETTIMEOFDAY || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for duplocale" >&5
+printf %s "checking for duplocale... " >&6; }
+if test ${gl_cv_onwards_func_duplocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "duplocale" "ac_cv_have_decl_duplocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_duplocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_duplocale = yes; then
+ ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale"
+if test "x$ac_cv_func_duplocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_duplocale = yes; then
+ gl_cv_onwards_func_duplocale=yes
+ else
+ gl_cv_onwards_func_duplocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_duplocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale"
+if test "x$ac_cv_func_duplocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_duplocale=$ac_cv_func_duplocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_duplocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_duplocale" >&6; }
+
+ case "$gl_cv_onwards_func_duplocale" in
+ future*) ac_cv_func_duplocale=no ;;
+ *) ac_cv_func_duplocale=$gl_cv_onwards_func_duplocale ;;
+ esac
+ if test $ac_cv_func_duplocale = yes; then
+
+printf "%s\n" "#define HAVE_DUPLOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+ HAVE_INET_PTON=1
+ INET_PTON_LIB=
+
+
+
+
+ if test $ac_cv_header_sys_socket_h != yes; then
+ ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
+if test "x$ac_cv_header_winsock2_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h
+
+fi
+
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+
+
+ if test $HAVE_WINSOCK2_H = 1; then
+ REPLACE_INET_PTON=1
+ ac_fn_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include <ws2tcpip.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_inet_pton" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_inet_pton = yes; then
+ INET_PTON_LIB="-lws2_32"
+ else
+ HAVE_DECL_INET_PTON=0
+ fi
+ else
+ gl_save_LIBS=$LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing inet_pton" >&5
+printf %s "checking for library containing inet_pton... " >&6; }
+if test ${ac_cv_search_inet_pton+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char inet_pton ();
+int
+main (void)
+{
+return inet_pton ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' nsl resolv network
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_inet_pton=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_inet_pton+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_inet_pton+y}
+then :
+
+else $as_nop
+ ac_cv_search_inet_pton=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5
+printf "%s\n" "$ac_cv_search_inet_pton" >&6; }
+ac_res=$ac_cv_search_inet_pton
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else $as_nop
+ ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton"
+if test "x$ac_cv_func_inet_pton" = xyes
+then :
+ printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_inet_pton = no; then
+ HAVE_INET_PTON=0
+ fi
+
+fi
+
+ LIBS=$gl_save_LIBS
+
+ if test "$ac_cv_search_inet_pton" != "no" \
+ && test "$ac_cv_search_inet_pton" != "none required"; then
+ INET_PTON_LIB="$ac_cv_search_inet_pton"
+ fi
+
+
+ ac_fn_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include <arpa/inet.h>
+ #if HAVE_NETDB_H
+ # include <netdb.h>
+ #endif
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_inet_pton" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_inet_pton = no; then
+ HAVE_DECL_INET_PTON=0
+ fi
+ fi
+
+
+
+ if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1; then
+ GL_COND_OBJ_INET_PTON_TRUE=
+ GL_COND_OBJ_INET_PTON_FALSE='#'
+else
+ GL_COND_OBJ_INET_PTON_TRUE='#'
+ GL_COND_OBJ_INET_PTON_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_INET_PTON_TRUE}" && test -z "${GL_COND_OBJ_INET_PTON_FALSE}"; then
+ GL_COND_OBJ_INET_PTON_TRUE='#'
+ GL_COND_OBJ_INET_PTON_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_INET_PTON_TRUE"; then :
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_INET_PTON" != 1; then
+ if test "$GL_GNULIB_INET_PTON" = 0; then
+ GL_GNULIB_INET_PTON=$gl_module_indicator_condition
+ else
+ GL_GNULIB_INET_PTON="($GL_GNULIB_INET_PTON || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes
+then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+unsigned short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ unsigned short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ unsigned short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ unsigned short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+
+int
+main (void)
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_c_bigendian=no
+else $as_nop
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+ no)
+ ;; #(
+ universal)
+
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+ ;; #(
+ *)
+ as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+
+
+
+ HAVE_IOCTL=1
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_IOCTL=0
+ else
+ ac_fn_c_check_func "$LINENO" "ioctl" "ac_cv_func_ioctl"
+if test "x$ac_cv_func_ioctl" = xyes
+then :
+ printf "%s\n" "#define HAVE_IOCTL 1" >>confdefs.h
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ioctl with POSIX signature" >&5
+printf %s "checking for ioctl with POSIX signature... " >&6; }
+if test ${gl_cv_func_ioctl_posix_signature+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/ioctl.h>
+ /* On some platforms, ioctl() is declared in <unistd.h>. */
+ #include <unistd.h>
+
+int
+main (void)
+{
+extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int ioctl (int, int, ...);
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_func_ioctl_posix_signature=yes
+else $as_nop
+ gl_cv_func_ioctl_posix_signature=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ioctl_posix_signature" >&5
+printf "%s\n" "$gl_cv_func_ioctl_posix_signature" >&6; }
+ if test $gl_cv_func_ioctl_posix_signature != yes; then
+ REPLACE_IOCTL=1
+ fi
+ fi
+
+
+ if test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1; then
+ GL_COND_OBJ_IOCTL_TRUE=
+ GL_COND_OBJ_IOCTL_FALSE='#'
+else
+ GL_COND_OBJ_IOCTL_TRUE='#'
+ GL_COND_OBJ_IOCTL_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_IOCTL_TRUE}" && test -z "${GL_COND_OBJ_IOCTL_FALSE}"; then
+ GL_COND_OBJ_IOCTL_TRUE='#'
+ GL_COND_OBJ_IOCTL_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_IOCTL" != 1; then
+ if test "$GL_GNULIB_IOCTL" = 0; then
+ GL_GNULIB_IOCTL=$gl_module_indicator_condition
+ else
+ GL_GNULIB_IOCTL="($GL_GNULIB_IOCTL || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_IOCTL 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_isblank = no; then
+ HAVE_ISBLANK=0
+ fi
+
+
+ if test $HAVE_ISBLANK = 0; then
+ GL_COND_OBJ_ISBLANK_TRUE=
+ GL_COND_OBJ_ISBLANK_FALSE='#'
+else
+ GL_COND_OBJ_ISBLANK_TRUE='#'
+ GL_COND_OBJ_ISBLANK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_ISBLANK_TRUE}" && test -z "${GL_COND_OBJ_ISBLANK_FALSE}"; then
+ GL_COND_OBJ_ISBLANK_TRUE='#'
+ GL_COND_OBJ_ISBLANK_FALSE='#'
+ fi
+
+
+
+printf "%s\n" "#define GNULIB_ISBLANK $gl_module_indicator_condition" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_ISBLANK" != 1; then
+ if test "$GL_GNULIB_ISBLANK" = 0; then
+ GL_GNULIB_ISBLANK=$gl_module_indicator_condition
+ else
+ GL_GNULIB_ISBLANK="($GL_GNULIB_ISBLANK || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_LISTEN_TRUE=
+ GL_COND_OBJ_LISTEN_FALSE='#'
+else
+ GL_COND_OBJ_LISTEN_TRUE='#'
+ GL_COND_OBJ_LISTEN_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_LISTEN_TRUE}" && test -z "${GL_COND_OBJ_LISTEN_FALSE}"; then
+ GL_COND_OBJ_LISTEN_TRUE='#'
+ GL_COND_OBJ_LISTEN_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_LISTEN" != 1; then
+ if test "$GL_GNULIB_LISTEN" = 0; then
+ GL_GNULIB_LISTEN=$gl_module_indicator_condition
+ else
+ GL_GNULIB_LISTEN="($GL_GNULIB_LISTEN || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_LISTEN 1" >>confdefs.h
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5
+printf %s "checking for newlocale... " >&6; }
+if test ${gl_cv_onwards_func_newlocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_newlocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_newlocale = yes; then
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_newlocale = yes; then
+ gl_cv_onwards_func_newlocale=yes
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; }
+
+ case "$gl_cv_onwards_func_newlocale" in
+ future*) ac_cv_func_newlocale=no ;;
+ *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;;
+ esac
+ if test $ac_cv_func_newlocale = yes; then
+
+printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+
+ if test $HAVE_LOCALE_T = 1; then
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5
+printf %s "checking for newlocale... " >&6; }
+if test ${gl_cv_onwards_func_newlocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_newlocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_newlocale = yes; then
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_newlocale = yes; then
+ gl_cv_onwards_func_newlocale=yes
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; }
+
+ case "$gl_cv_onwards_func_newlocale" in
+ future*) ac_cv_func_newlocale=no ;;
+ *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;;
+ esac
+ if test $ac_cv_func_newlocale = yes; then
+
+printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for duplocale" >&5
+printf %s "checking for duplocale... " >&6; }
+if test ${gl_cv_onwards_func_duplocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "duplocale" "ac_cv_have_decl_duplocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_duplocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_duplocale = yes; then
+ ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale"
+if test "x$ac_cv_func_duplocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_duplocale = yes; then
+ gl_cv_onwards_func_duplocale=yes
+ else
+ gl_cv_onwards_func_duplocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_duplocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale"
+if test "x$ac_cv_func_duplocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_duplocale=$ac_cv_func_duplocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_duplocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_duplocale" >&6; }
+
+ case "$gl_cv_onwards_func_duplocale" in
+ future*) ac_cv_func_duplocale=no ;;
+ *) ac_cv_func_duplocale=$gl_cv_onwards_func_duplocale ;;
+ esac
+ if test $ac_cv_func_duplocale = yes; then
+
+printf "%s\n" "#define HAVE_DUPLOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for freelocale" >&5
+printf %s "checking for freelocale... " >&6; }
+if test ${gl_cv_onwards_func_freelocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "freelocale" "ac_cv_have_decl_freelocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_freelocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_freelocale = yes; then
+ ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale"
+if test "x$ac_cv_func_freelocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_freelocale = yes; then
+ gl_cv_onwards_func_freelocale=yes
+ else
+ gl_cv_onwards_func_freelocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_freelocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale"
+if test "x$ac_cv_func_freelocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_freelocale=$ac_cv_func_freelocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_freelocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_freelocale" >&6; }
+
+ case "$gl_cv_onwards_func_freelocale" in
+ future*) ac_cv_func_freelocale=no ;;
+ *) ac_cv_func_freelocale=$gl_cv_onwards_func_freelocale ;;
+ esac
+ if test $ac_cv_func_freelocale = yes; then
+
+printf "%s\n" "#define HAVE_FREELOCALE 1" >>confdefs.h
+
+ fi
+
+
+ gl_func_newlocale="$ac_cv_func_newlocale"
+ gl_func_duplocale="$ac_cv_func_duplocale"
+ gl_func_freelocale="$ac_cv_func_freelocale"
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ gl_cv_onwards_func_duplocale='future OS version'
+ gl_cv_onwards_func_freelocale='future OS version'
+ gl_func_newlocale=no
+ gl_func_duplocale=no
+ gl_func_freelocale=no
+ fi
+ if test $gl_func_newlocale != yes; then
+ HAVE_NEWLOCALE=0
+ case "$gl_cv_onwards_func_newlocale" in
+ future*) REPLACE_NEWLOCALE=1 ;;
+ esac
+ fi
+ if test $gl_func_duplocale != yes; then
+ HAVE_DUPLOCALE=0
+ case "$gl_cv_onwards_func_duplocale" in
+ future*) REPLACE_DUPLOCALE=1 ;;
+ esac
+ fi
+ if test $gl_func_freelocale != yes; then
+ HAVE_FREELOCALE=0
+ case "$gl_cv_onwards_func_freelocale" in
+ future*) REPLACE_FREELOCALE=1 ;;
+ esac
+ fi
+ if test $gt_localename_enhances_locale_funcs = yes; then
+ REPLACE_NEWLOCALE=1
+ REPLACE_DUPLOCALE=1
+ REPLACE_FREELOCALE=1
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_LOCALENAME" != 1; then
+ if test "$GL_GNULIB_LOCALENAME" = 0; then
+ GL_GNULIB_LOCALENAME=$gl_module_indicator_condition
+ else
+ GL_GNULIB_LOCALENAME="($GL_GNULIB_LOCALENAME || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_LOCALENAME 1" >>confdefs.h
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5
+printf %s "checking for newlocale... " >&6; }
+if test ${gl_cv_onwards_func_newlocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_newlocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_newlocale = yes; then
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_newlocale = yes; then
+ gl_cv_onwards_func_newlocale=yes
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_newlocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; }
+
+ case "$gl_cv_onwards_func_newlocale" in
+ future*) ac_cv_func_newlocale=no ;;
+ *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;;
+ esac
+ if test $ac_cv_func_newlocale = yes; then
+
+printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+printf %s "checking for a traditional japanese locale... " >&6; }
+if test ${gt_cv_locale_ja+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales
+ on Cygwin 1.5.x. */
+ if (MB_CUR_MAX == 1)
+ return 1;
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Note that on native Windows, the Japanese locale is
+ # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+ # cannot use it here.
+ gt_cv_locale_ja=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the AIX locale name.
+ if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC-JP
+ else
+ # Test for the HP-UX, OSF/1, NetBSD locale name.
+ if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # Test for the IRIX, FreeBSD locale name.
+ if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja
+ else
+ # Special test for NetBSD 1.6.
+ if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # None found.
+ gt_cv_locale_ja=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+printf "%s\n" "$gt_cv_locale_ja" >&6; }
+ LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+printf %s "checking for a transitional chinese locale... " >&6; }
+if test ${gt_cv_locale_zh_CN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ /* Check whether a typical GB18030 multibyte sequence is recognized as a
+ single wide character. This excludes the GB2312 and GBK encodings. */
+ if (mblen ("\203\062\332\066", 5) != 4)
+ return 1;
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=Chinese_China.54936
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ ;;
+ solaris2.8)
+ # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+ # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+ # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+ gt_cv_locale_zh_CN=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the locale name without encoding suffix.
+ if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN.GB18030
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ fi
+ ;;
+ esac
+ else
+ # If there was a link error, due to mblen(), the system is so old that
+ # it certainly doesn't have a chinese locale.
+ gt_cv_locale_zh_CN=none
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+printf "%s\n" "$gt_cv_locale_zh_CN" >&6; }
+ LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+ if test $REPLACE_MEMCHR = 1; then
+ GL_COND_OBJ_MEMCHR_TRUE=
+ GL_COND_OBJ_MEMCHR_FALSE='#'
+else
+ GL_COND_OBJ_MEMCHR_TRUE='#'
+ GL_COND_OBJ_MEMCHR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_MEMCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMCHR_FALSE}"; then
+ GL_COND_OBJ_MEMCHR_TRUE='#'
+ GL_COND_OBJ_MEMCHR_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_MEMCHR_TRUE"; then :
+
+
+ ac_fn_c_check_header_compile "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default"
+if test "x$ac_cv_header_bp_sym_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_BP_SYM_H 1" >>confdefs.h
+
+fi
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_MEMCHR" != 1; then
+ if test "$GL_GNULIB_MEMCHR" = 0; then
+ GL_GNULIB_MEMCHR=$gl_module_indicator_condition
+ else
+ GL_GNULIB_MEMCHR="($GL_GNULIB_MEMCHR || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+ nanosleep_save_libs=$LIBS
+
+ # Solaris 2.5.1 needs -lposix4 to get the nanosleep function.
+ # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+ NANOSLEEP_LIB=
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing nanosleep" >&5
+printf %s "checking for library containing nanosleep... " >&6; }
+if test ${ac_cv_search_nanosleep+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char nanosleep ();
+int
+main (void)
+{
+return nanosleep ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' rt posix4
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_nanosleep=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_nanosleep+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_nanosleep+y}
+then :
+
+else $as_nop
+ ac_cv_search_nanosleep=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_nanosleep" >&5
+printf "%s\n" "$ac_cv_search_nanosleep" >&6; }
+ac_res=$ac_cv_search_nanosleep
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ test "$ac_cv_search_nanosleep" = "none required" ||
+ NANOSLEEP_LIB=$ac_cv_search_nanosleep
+fi
+
+ if test "x$ac_cv_search_nanosleep" != xno; then
+
+
+ if test $APPLE_UNIVERSAL_BUILD = 1; then
+ # A universal build on Apple Mac OS X platforms.
+ # The test result would be 'no (mishandles large arguments)' in 64-bit
+ # mode but 'yes' in 32-bit mode. But we need a configuration result that
+ # is valid in both modes.
+ gl_cv_func_nanosleep='no (mishandles large arguments)'
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working nanosleep" >&5
+printf %s "checking for working nanosleep... " >&6; }
+if test ${gl_cv_func_nanosleep+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ linux*) # Guess it halfway works when the kernel is Linux.
+ gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;;
+ mingw*) # Guess no on native Windows.
+ gl_cv_func_nanosleep='guessing no' ;;
+ *) # If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_nanosleep="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <errno.h>
+ #include <limits.h>
+ #include <signal.h>
+ #include <time.h>
+ #include <unistd.h>
+ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+ #define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+
+ #if HAVE_DECL_ALARM
+ static void
+ check_for_SIGALRM (int sig)
+ {
+ if (sig != SIGALRM)
+ _exit (1);
+ }
+ #endif
+
+ int
+ main ()
+ {
+ static struct timespec ts_sleep;
+ static struct timespec ts_remaining;
+ /* Test for major problems first. */
+ if (! nanosleep)
+ return 2;
+ ts_sleep.tv_sec = 0;
+ ts_sleep.tv_nsec = 1;
+ #if HAVE_DECL_ALARM
+ {
+ static struct sigaction act;
+ act.sa_handler = check_for_SIGALRM;
+ sigemptyset (&act.sa_mask);
+ sigaction (SIGALRM, &act, NULL);
+ alarm (1);
+ if (nanosleep (&ts_sleep, NULL) != 0)
+ return 3;
+ /* Test for a minor problem: the handling of large arguments. */
+ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
+ ts_sleep.tv_nsec = 999999999;
+ alarm (1);
+ if (nanosleep (&ts_sleep, &ts_remaining) != -1)
+ return 4;
+ if (errno != EINTR)
+ return 5;
+ if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10)
+ return 6;
+ }
+ #else /* A simpler test for native Windows. */
+ if (nanosleep (&ts_sleep, &ts_remaining) < 0)
+ return 3;
+ /* Test for 32-bit mingw bug: negative nanosecond values do not
+ cause failure. */
+ ts_sleep.tv_sec = 1;
+ ts_sleep.tv_nsec = -1;
+ if (nanosleep (&ts_sleep, &ts_remaining) != -1)
+ return 7;
+ #endif
+ return 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_nanosleep=yes
+else $as_nop
+ case $? in
+ 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)' ;;
+ 7) gl_cv_func_nanosleep='no (mishandles negative tv_nsec)' ;;
+ *) gl_cv_func_nanosleep=no ;;
+ esac
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nanosleep" >&5
+printf "%s\n" "$gl_cv_func_nanosleep" >&6; }
+ case "$gl_cv_func_nanosleep" in
+ *yes)
+ REPLACE_NANOSLEEP=0
+ ;;
+ *)
+ REPLACE_NANOSLEEP=1
+ case "$gl_cv_func_nanosleep" in
+ *"mishandles large arguments"*)
+
+printf "%s\n" "#define HAVE_BUG_BIG_NANOSLEEP 1" >>confdefs.h
+
+ ;;
+ esac
+ ;;
+ esac
+ else
+ HAVE_NANOSLEEP=0
+ fi
+ LIBS=$nanosleep_save_libs
+
+ # For backward compatibility.
+ LIB_NANOSLEEP="$NANOSLEEP_LIB"
+
+
+
+ if test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1; then
+ GL_COND_OBJ_NANOSLEEP_TRUE=
+ GL_COND_OBJ_NANOSLEEP_FALSE='#'
+else
+ GL_COND_OBJ_NANOSLEEP_TRUE='#'
+ GL_COND_OBJ_NANOSLEEP_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_NANOSLEEP_TRUE}" && test -z "${GL_COND_OBJ_NANOSLEEP_FALSE}"; then
+ GL_COND_OBJ_NANOSLEEP_TRUE='#'
+ GL_COND_OBJ_NANOSLEEP_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_NANOSLEEP" != 1; then
+ if test "$GL_GNULIB_NANOSLEEP" = 0; then
+ GL_GNULIB_NANOSLEEP=$gl_module_indicator_condition
+ else
+ GL_GNULIB_NANOSLEEP="($GL_GNULIB_NANOSLEEP || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_NANOSLEEP 1" >>confdefs.h
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <netinet/in.h> is self-contained" >&5
+printf %s "checking whether <netinet/in.h> is self-contained... " >&6; }
+if test ${gl_cv_header_netinet_in_h_selfcontained+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netinet/in.h>
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_header_netinet_in_h_selfcontained=yes
+else $as_nop
+ gl_cv_header_netinet_in_h_selfcontained=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_netinet_in_h_selfcontained" >&5
+printf "%s\n" "$gl_cv_header_netinet_in_h_selfcontained" >&6; }
+ if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
+ GL_GENERATE_NETINET_IN_H=false
+ else
+ GL_GENERATE_NETINET_IN_H=true
+ ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+
+
+ if test $gl_cv_have_include_next = yes; then
+ gl_cv_next_netinet_in_h='<'netinet/in.h'>'
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <netinet/in.h>" >&5
+printf %s "checking absolute name of <netinet/in.h>... " >&6; }
+if test ${gl_cv_next_netinet_in_h+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test $ac_cv_header_netinet_in_h = yes; then
+
+
+
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <netinet/in.h>
+_ACEOF
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+
+ case "$host_os" in
+ mingw*)
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo 'netinet/in.h' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+
+ gl_cv_absolute_netinet_in_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+ sed -n "$gl_absolute_header_sed"`
+
+ gl_header=$gl_cv_absolute_netinet_in_h
+ gl_cv_next_netinet_in_h='"'$gl_header'"'
+ else
+ gl_cv_next_netinet_in_h='<'netinet/in.h'>'
+ fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_netinet_in_h" >&5
+printf "%s\n" "$gl_cv_next_netinet_in_h" >&6; }
+ fi
+ NEXT_NETINET_IN_H=$gl_cv_next_netinet_in_h
+
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'netinet/in.h'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=$gl_cv_next_netinet_in_h
+ fi
+ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H=$gl_next_as_first_directive
+
+
+
+
+ if test $ac_cv_header_netinet_in_h = yes; then
+ HAVE_NETINET_IN_H=1
+ else
+ HAVE_NETINET_IN_H=0
+ fi
+
+ fi
+
+
+
+
+
+ case "$GL_GENERATE_NETINET_IN_H" in
+ false) NETINET_IN_H='' ;;
+ true)
+ if test -z "$NETINET_IN_H"; then
+ NETINET_IN_H="${gl_source_base_prefix}netinet/in.h"
+ fi
+ ;;
+ *) echo "*** GL_GENERATE_NETINET_IN_H is not set correctly" 1>&2; exit 1 ;;
+ esac
+
+
+ if $GL_GENERATE_NETINET_IN_H; then
+ GL_GENERATE_NETINET_IN_H_TRUE=
+ GL_GENERATE_NETINET_IN_H_FALSE='#'
+else
+ GL_GENERATE_NETINET_IN_H_TRUE='#'
+ GL_GENERATE_NETINET_IN_H_FALSE=
+fi
+:
+ if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then
+ GL_GENERATE_NETINET_IN_H_TRUE='#'
+ GL_GENERATE_NETINET_IN_H_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uselocale" >&5
+printf %s "checking for uselocale... " >&6; }
+if test ${gl_cv_onwards_func_uselocale+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "uselocale" "ac_cv_have_decl_uselocale" "#include <locale.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_uselocale" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_uselocale = yes; then
+ ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
+if test "x$ac_cv_func_uselocale" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_uselocale = yes; then
+ gl_cv_onwards_func_uselocale=yes
+ else
+ gl_cv_onwards_func_uselocale='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_uselocale='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
+if test "x$ac_cv_func_uselocale" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_uselocale=$ac_cv_func_uselocale
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_uselocale" >&5
+printf "%s\n" "$gl_cv_onwards_func_uselocale" >&6; }
+
+ case "$gl_cv_onwards_func_uselocale" in
+ future*) ac_cv_func_uselocale=no ;;
+ *) ac_cv_func_uselocale=$gl_cv_onwards_func_uselocale ;;
+ esac
+ if test $ac_cv_func_uselocale = yes; then
+
+printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h
+
+ fi
+
+
+
+ if test $ac_cv_func_uselocale = yes; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5
+printf %s "checking whether uselocale works... " >&6; }
+if test ${gt_cv_func_uselocale_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ # Guess no on AIX and z/OS, yes otherwise.
+ case "$host_os" in
+ aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;;
+ *) gt_cv_func_uselocale_works="guessing yes" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+locale_t loc1;
+int main ()
+{
+ uselocale (NULL);
+ setlocale (LC_ALL, "en_US.UTF-8");
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gt_cv_func_uselocale_works=yes
+else $as_nop
+ gt_cv_func_uselocale_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5
+printf "%s\n" "$gt_cv_func_uselocale_works" >&6; }
+ else
+ gt_cv_func_uselocale_works=no
+ fi
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ gt_working_uselocale=yes
+
+printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h
+
+ ;;
+ *)
+ gt_working_uselocale=no
+ ;;
+ esac
+
+
+
+
+
+
+
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" != false:0; then
+ REPLACE_PERROR=1
+ fi
+ case ${gl_cv_func_strerror_r_works-unset} in
+ unset|*yes)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether perror matches strerror" >&5
+printf %s "checking whether perror matches strerror... " >&6; }
+if test ${gl_cv_func_perror_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_perror_works="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_perror_works="guessing yes" ;;
+ # Otherwise obey --enable-cross-guesses.
+ *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+
+int
+main (void)
+{
+char *str = strerror (-1);
+ if (!getenv("CONFTEST_OUTPUT")) return 0;
+ if (!str) str = "";
+ puts (str);
+ errno = -1;
+ perror ("");
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \
+ && cmp conftest.txt1 conftest.txt2 >/dev/null; then
+ gl_cv_func_perror_works=yes
+ else
+ gl_cv_func_perror_works=no
+ fi
+ rm -rf conftest.txt1 conftest.txt2
+else $as_nop
+ gl_cv_func_perror_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_perror_works" >&5
+printf "%s\n" "$gl_cv_func_perror_works" >&6; }
+ case "$gl_cv_func_perror_works" in
+ *yes) ;;
+ *) REPLACE_PERROR=1 ;;
+ esac
+ ;;
+ *)
+ REPLACE_PERROR=1
+ ;;
+ esac
+ case "$host_os" in
+ # Yes on Android 11.
+ linux*-android*) REPLACE_PERROR=1 ;;
+ esac
+
+
+ if test $REPLACE_PERROR = 1; then
+ GL_COND_OBJ_PERROR_TRUE=
+ GL_COND_OBJ_PERROR_FALSE='#'
+else
+ GL_COND_OBJ_PERROR_TRUE='#'
+ GL_COND_OBJ_PERROR_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PERROR_TRUE}" && test -z "${GL_COND_OBJ_PERROR_FALSE}"; then
+ GL_COND_OBJ_PERROR_TRUE='#'
+ GL_COND_OBJ_PERROR_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PERROR" != 1; then
+ if test "$GL_GNULIB_PERROR" = 0; then
+ GL_GNULIB_PERROR=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PERROR="($GL_GNULIB_PERROR || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PERROR 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test $ac_cv_func_pipe != yes; then
+ HAVE_PIPE=0
+ fi
+
+
+ if test $HAVE_PIPE = 0; then
+ GL_COND_OBJ_PIPE_TRUE=
+ GL_COND_OBJ_PIPE_FALSE='#'
+else
+ GL_COND_OBJ_PIPE_TRUE='#'
+ GL_COND_OBJ_PIPE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PIPE_TRUE}" && test -z "${GL_COND_OBJ_PIPE_FALSE}"; then
+ GL_COND_OBJ_PIPE_TRUE='#'
+ GL_COND_OBJ_PIPE_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PIPE" != 1; then
+ if test "$GL_GNULIB_PIPE" = 0; then
+ GL_GNULIB_PIPE=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PIPE="($GL_GNULIB_PIPE || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PIPE 1" >>confdefs.h
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "getppriv" "ac_cv_func_getppriv"
+if test "x$ac_cv_func_getppriv" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETPPRIV 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+ if test $ac_cv_func_pselect = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether signature of pselect conforms to POSIX" >&5
+printf %s "checking whether signature of pselect conforms to POSIX... " >&6; }
+if test ${gl_cv_sig_pselect+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/select.h>
+
+int
+main (void)
+{
+int (*p) (int, fd_set *, fd_set *, fd_set *restrict,
+ struct timespec const *restrict,
+ sigset_t const *restrict) = pselect;
+ return !p;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_sig_pselect=yes
+else $as_nop
+ gl_cv_sig_pselect=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sig_pselect" >&5
+printf "%s\n" "$gl_cv_sig_pselect" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pselect detects invalid fds" >&5
+printf %s "checking whether pselect detects invalid fds... " >&6; }
+if test ${gl_cv_func_pselect_detects_ebadf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_pselect_detects_ebadf="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#include <unistd.h>
+#include <errno.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+
+ fd_set set;
+ dup2(0, 16);
+ FD_ZERO(&set);
+ FD_SET(16, &set);
+ close(16);
+ struct timespec timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = 5000;
+ return pselect (17, &set, NULL, NULL, &timeout, NULL) != -1 || errno != EBADF;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_pselect_detects_ebadf=yes
+else $as_nop
+ gl_cv_func_pselect_detects_ebadf=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pselect_detects_ebadf" >&5
+printf "%s\n" "$gl_cv_func_pselect_detects_ebadf" >&6; }
+ case $gl_cv_func_pselect_detects_ebadf in
+ *yes) ;;
+ *) REPLACE_PSELECT=1 ;;
+ esac
+ fi
+
+ if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then
+ REPLACE_PSELECT=1
+ fi
+
+
+ if test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1; then
+ GL_COND_OBJ_PSELECT_TRUE=
+ GL_COND_OBJ_PSELECT_FALSE='#'
+else
+ GL_COND_OBJ_PSELECT_TRUE='#'
+ GL_COND_OBJ_PSELECT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PSELECT_TRUE}" && test -z "${GL_COND_OBJ_PSELECT_FALSE}"; then
+ GL_COND_OBJ_PSELECT_TRUE='#'
+ GL_COND_OBJ_PSELECT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PSELECT" != 1; then
+ if test "$GL_GNULIB_PSELECT" = 0; then
+ GL_GNULIB_PSELECT=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PSELECT="($GL_GNULIB_PSELECT || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PSELECT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ REPLACE_PTHREAD_CREATE=1
+ REPLACE_PTHREAD_ATTR_INIT=1
+ REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1
+ REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1
+ REPLACE_PTHREAD_ATTR_DESTROY=1
+ REPLACE_PTHREAD_SELF=1
+ REPLACE_PTHREAD_EQUAL=1
+ REPLACE_PTHREAD_DETACH=1
+ REPLACE_PTHREAD_JOIN=1
+ REPLACE_PTHREAD_EXIT=1
+ else
+ if test $HAVE_PTHREAD_H = 0; then
+ HAVE_PTHREAD_CREATE=0
+ HAVE_PTHREAD_ATTR_INIT=0
+ HAVE_PTHREAD_ATTR_GETDETACHSTATE=0
+ HAVE_PTHREAD_ATTR_SETDETACHSTATE=0
+ HAVE_PTHREAD_ATTR_DESTROY=0
+ HAVE_PTHREAD_SELF=0
+ HAVE_PTHREAD_EQUAL=0
+ HAVE_PTHREAD_DETACH=0
+ HAVE_PTHREAD_JOIN=0
+ HAVE_PTHREAD_EXIT=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_create exists as a global function" >&5
+printf %s "checking whether pthread_create exists as a global function... " >&6; }
+if test ${gl_cv_func_pthread_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ saved_LIBS="$LIBS"
+ LIBS="$LIBS $LIBPMULTITHREAD"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int pthread_create (void);
+ int main ()
+ {
+ return pthread_create ();
+ }
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func_pthread_create=yes
+else $as_nop
+ gl_cv_func_pthread_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$saved_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_create" >&5
+printf "%s\n" "$gl_cv_func_pthread_create" >&6; }
+ if test $gl_cv_func_pthread_create = no; then
+ REPLACE_PTHREAD_CREATE=1
+ REPLACE_PTHREAD_ATTR_INIT=1
+
+printf "%s\n" "#define PTHREAD_CREATE_IS_INLINE 1" >>confdefs.h
+
+ fi
+ fi
+ fi
+
+
+ if test $HAVE_PTHREAD_CREATE = 0 || test $REPLACE_PTHREAD_CREATE = 1; then
+ GL_COND_OBJ_PTHREAD_THREAD_TRUE=
+ GL_COND_OBJ_PTHREAD_THREAD_FALSE='#'
+else
+ GL_COND_OBJ_PTHREAD_THREAD_TRUE='#'
+ GL_COND_OBJ_PTHREAD_THREAD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PTHREAD_THREAD_TRUE}" && test -z "${GL_COND_OBJ_PTHREAD_THREAD_FALSE}"; then
+ GL_COND_OBJ_PTHREAD_THREAD_TRUE='#'
+ GL_COND_OBJ_PTHREAD_THREAD_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PTHREAD_THREAD" != 1; then
+ if test "$GL_GNULIB_PTHREAD_THREAD" = 0; then
+ GL_GNULIB_PTHREAD_THREAD=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PTHREAD_THREAD="($GL_GNULIB_PTHREAD_THREAD || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PTHREAD_THREAD 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask is a macro" >&5
+printf %s "checking whether pthread_sigmask is a macro... " >&6; }
+if test ${gl_cv_func_pthread_sigmask_macro+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <pthread.h>
+#include <signal.h>
+#ifdef pthread_sigmask
+ headers_define_pthread_sigmask
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "headers_define_pthread_sigmask" >/dev/null 2>&1
+then :
+ gl_cv_func_pthread_sigmask_macro=yes
+else $as_nop
+ gl_cv_func_pthread_sigmask_macro=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_macro" >&5
+printf "%s\n" "$gl_cv_func_pthread_sigmask_macro" >&6; }
+
+ PTHREAD_SIGMASK_LIB=
+
+ if test $gl_cv_func_pthread_sigmask_macro = yes; then
+ HAVE_PTHREAD_SIGMASK=0
+ REPLACE_PTHREAD_SIGMASK=1
+ else
+
+
+
+ if test "$gl_threads_api" = posix; then
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ :
+ else
+ if test -n "$LIBMULTITHREAD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_sigmask in $LIBMULTITHREAD" >&5
+printf %s "checking for pthread_sigmask in $LIBMULTITHREAD... " >&6; }
+if test ${gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+ #include <signal.h>
+
+int
+main (void)
+{
+return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes
+else $as_nop
+ gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gl_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&5
+printf "%s\n" "$gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&6; }
+ if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+ PTHREAD_SIGMASK_LIB="$LIBMULTITHREAD"
+ else
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ else
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
+ else
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ REPLACE_PTHREAD_SIGMASK=1
+ else
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
+
+ fi
+
+
+ LIB_PTHREAD_SIGMASK="$PTHREAD_SIGMASK_LIB"
+
+
+ if test $HAVE_PTHREAD_SIGMASK = 1; then
+
+
+ if test -z "$PTHREAD_SIGMASK_LIB"; then
+ case " $LIBS " in
+ *' -pthread '*) ;;
+ *' -lpthread '*) ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask works without -lpthread" >&5
+printf %s "checking whether pthread_sigmask works without -lpthread... " >&6; }
+if test ${gl_cv_func_pthread_sigmask_in_libc_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ freebsd* | midnightbsd* | hpux* | solaris | solaris2.[2-9]*)
+ gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <pthread.h>
+ #include <signal.h>
+ #include <stddef.h>
+ int main ()
+ {
+ sigset_t set;
+ sigemptyset (&set);
+ return pthread_sigmask (1729, &set, NULL) != 0;
+ }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_pthread_sigmask_in_libc_works=no
+else $as_nop
+ gl_cv_func_pthread_sigmask_in_libc_works=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_libc_works" >&5
+printf "%s\n" "$gl_cv_func_pthread_sigmask_in_libc_works" >&6; }
+ case "$gl_cv_func_pthread_sigmask_in_libc_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+
+printf "%s\n" "#define PTHREAD_SIGMASK_INEFFECTIVE 1" >>confdefs.h
+
+ ;;
+ esac;;
+ esac
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask returns error numbers" >&5
+printf %s "checking whether pthread_sigmask returns error numbers... " >&6; }
+if test ${gl_cv_func_pthread_sigmask_return_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $PTHREAD_SIGMASK_LIB"
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ cygwin*)
+ gl_cv_func_pthread_sigmask_return_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_return_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <pthread.h>
+#include <signal.h>
+#include <stddef.h>
+int main ()
+{
+ sigset_t set;
+ sigemptyset (&set);
+ if (pthread_sigmask (1729, &set, NULL) == -1)
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_pthread_sigmask_return_works=yes
+else $as_nop
+ gl_cv_func_pthread_sigmask_return_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$gl_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_return_works" >&5
+printf "%s\n" "$gl_cv_func_pthread_sigmask_return_works" >&6; }
+ case "$gl_cv_func_pthread_sigmask_return_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+
+printf "%s\n" "#define PTHREAD_SIGMASK_FAILS_WITH_ERRNO 1" >>confdefs.h
+
+ ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask unblocks signals correctly" >&5
+printf %s "checking whether pthread_sigmask unblocks signals correctly... " >&6; }
+if test ${gl_cv_func_pthread_sigmask_unblock_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ irix*)
+ gl_cv_func_pthread_sigmask_unblock_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_unblock_works="guessing yes";;
+ esac
+ gl_save_LIBS=$LIBS
+ LIBS="$LIBS $LIBMULTITHREAD"
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <limits.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+
+$gl_mda_defines
+
+static volatile int sigint_occurred;
+static void
+sigint_handler (int sig)
+{
+ sigint_occurred++;
+}
+int main ()
+{
+ sigset_t set;
+ pid_t pid = getpid ();
+ char command[80];
+ if (LONG_MAX < pid)
+ return 6;
+ signal (SIGINT, sigint_handler);
+ sigemptyset (&set);
+ sigaddset (&set, SIGINT);
+ if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0))
+ return 1;
+ sprintf (command, "sh -c 'sleep 1; kill -INT %ld' &", (long) pid);
+ if (!(system (command) == 0))
+ return 2;
+ sleep (2);
+ if (!(sigint_occurred == 0))
+ return 3;
+ if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0))
+ return 4;
+ if (!(sigint_occurred == 1)) /* This fails on IRIX. */
+ return 5;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ :
+else $as_nop
+ gl_cv_func_pthread_sigmask_unblock_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS=$gl_save_LIBS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_unblock_works" >&5
+printf "%s\n" "$gl_cv_func_pthread_sigmask_unblock_works" >&6; }
+ case "$gl_cv_func_pthread_sigmask_unblock_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+
+printf "%s\n" "#define PTHREAD_SIGMASK_UNBLOCK_BUG 1" >>confdefs.h
+
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then
+ GL_COND_OBJ_PTHREAD_SIGMASK_TRUE=
+ GL_COND_OBJ_PTHREAD_SIGMASK_FALSE='#'
+else
+ GL_COND_OBJ_PTHREAD_SIGMASK_TRUE='#'
+ GL_COND_OBJ_PTHREAD_SIGMASK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PTHREAD_SIGMASK_TRUE}" && test -z "${GL_COND_OBJ_PTHREAD_SIGMASK_FALSE}"; then
+ GL_COND_OBJ_PTHREAD_SIGMASK_TRUE='#'
+ GL_COND_OBJ_PTHREAD_SIGMASK_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_PTHREAD_SIGMASK_TRUE"; then :
+
+
+ if test $HAVE_PTHREAD_SIGMASK = 1; then
+
+printf "%s\n" "#define HAVE_PTHREAD_SIGMASK 1" >>confdefs.h
+
+ fi
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PTHREAD_SIGMASK" != 1; then
+ if test "$GL_GNULIB_PTHREAD_SIGMASK" = 0; then
+ GL_GNULIB_PTHREAD_SIGMASK=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PTHREAD_SIGMASK="($GL_GNULIB_PTHREAD_SIGMASK || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PTHREAD_SIGMASK 1" >>confdefs.h
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv compatible with GNU and SVID" >&5
+printf %s "checking for putenv compatible with GNU and SVID... " >&6; }
+if test ${gl_cv_func_svid_putenv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_svid_putenv="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_svid_putenv="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_svid_putenv="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+
+ /* Put it in env. */
+ if (putenv ("CONFTEST_putenv=val"))
+ return 1;
+
+ /* Try to remove it. */
+ if (putenv ("CONFTEST_putenv"))
+ return 2;
+
+ /* Make sure it was deleted. */
+ if (getenv ("CONFTEST_putenv") != 0)
+ return 3;
+
+ return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_svid_putenv=yes
+else $as_nop
+ gl_cv_func_svid_putenv=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_svid_putenv" >&5
+printf "%s\n" "$gl_cv_func_svid_putenv" >&6; }
+ case "$gl_cv_func_svid_putenv" in
+ *yes) ;;
+ *)
+ REPLACE_PUTENV=1
+ ;;
+ esac
+
+
+ if test $REPLACE_PUTENV = 1; then
+ GL_COND_OBJ_PUTENV_TRUE=
+ GL_COND_OBJ_PUTENV_FALSE='#'
+else
+ GL_COND_OBJ_PUTENV_TRUE='#'
+ GL_COND_OBJ_PUTENV_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_PUTENV_TRUE}" && test -z "${GL_COND_OBJ_PUTENV_FALSE}"; then
+ GL_COND_OBJ_PUTENV_TRUE='#'
+ GL_COND_OBJ_PUTENV_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_PUTENV_TRUE"; then :
+
+
+ ac_fn_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl__putenv" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL__PUTENV $ac_have_decl" >>confdefs.h
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_PUTENV" != 1; then
+ if test "$GL_GNULIB_PUTENV" = 0; then
+ GL_GNULIB_PUTENV=$gl_module_indicator_condition
+ else
+ GL_GNULIB_PUTENV="($GL_GNULIB_PUTENV || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_PUTENV 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+ ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise"
+if test "x$ac_cv_func_raise" = xyes
+then :
+ printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_raise = no; then
+ HAVE_RAISE=0
+ else
+
+
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_RAISE=1
+ fi
+
+
+
+
+
+ HAVE_POSIX_SIGNALBLOCKING=0
+ if test "$gl_cv_type_sigset_t" = yes; then
+ ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask"
+if test "x$ac_cv_func_sigprocmask" = xyes
+then :
+ HAVE_POSIX_SIGNALBLOCKING=1
+fi
+
+ fi
+
+ if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+ :
+ fi
+
+ fi
+
+
+ if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then
+ GL_COND_OBJ_RAISE_TRUE=
+ GL_COND_OBJ_RAISE_FALSE='#'
+else
+ GL_COND_OBJ_RAISE_TRUE='#'
+ GL_COND_OBJ_RAISE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_RAISE_TRUE}" && test -z "${GL_COND_OBJ_RAISE_FALSE}"; then
+ GL_COND_OBJ_RAISE_TRUE='#'
+ GL_COND_OBJ_RAISE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_RAISE_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_RAISE" != 1; then
+ if test "$GL_GNULIB_RAISE" = 0; then
+ GL_GNULIB_RAISE=$gl_module_indicator_condition
+ else
+ GL_GNULIB_RAISE="($GL_GNULIB_RAISE || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_RAISE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ REPLACE_SCHED_YIELD=1
+ else
+ ac_fn_check_decl "$LINENO" "sched_yield" "ac_cv_have_decl_sched_yield" "#include <sched.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_sched_yield" = xyes
+then :
+
+else $as_nop
+ HAVE_SCHED_YIELD=0
+fi
+ fi
+
+
+ if test $HAVE_SCHED_YIELD = 0 || test $REPLACE_SCHED_YIELD = 1; then
+ GL_COND_OBJ_SCHED_YIELD_TRUE=
+ GL_COND_OBJ_SCHED_YIELD_FALSE='#'
+else
+ GL_COND_OBJ_SCHED_YIELD_TRUE='#'
+ GL_COND_OBJ_SCHED_YIELD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SCHED_YIELD_TRUE}" && test -z "${GL_COND_OBJ_SCHED_YIELD_FALSE}"; then
+ GL_COND_OBJ_SCHED_YIELD_TRUE='#'
+ GL_COND_OBJ_SCHED_YIELD_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SCHED_YIELD" != 1; then
+ if test "$GL_GNULIB_SCHED_YIELD" = 0; then
+ GL_GNULIB_SCHED_YIELD=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SCHED_YIELD="($GL_GNULIB_SCHED_YIELD || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SCHED_YIELD 1" >>confdefs.h
+
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ REPLACE_SELECT=1
+ else
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether select supports a 0 argument" >&5
+printf %s "checking whether select supports a 0 argument... " >&6; }
+if test ${gl_cv_func_select_supports0+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess no on Interix.
+ interix*) gl_cv_func_select_supports0="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_select_supports0="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+int main ()
+{
+ struct timeval timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 5;
+ return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_select_supports0=yes
+else $as_nop
+ gl_cv_func_select_supports0=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_supports0" >&5
+printf "%s\n" "$gl_cv_func_select_supports0" >&6; }
+ case "$gl_cv_func_select_supports0" in
+ *yes) ;;
+ *) REPLACE_SELECT=1 ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether select detects invalid fds" >&5
+printf %s "checking whether select detects invalid fds... " >&6; }
+if test ${gl_cv_func_select_detects_ebadf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ if test "$cross_compiling" = yes
+then :
+
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#include <unistd.h>
+#include <errno.h>
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+
+ fd_set set;
+ dup2(0, 16);
+ FD_ZERO(&set);
+ FD_SET(16, &set);
+ close(16);
+ struct timeval timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 5;
+ return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_select_detects_ebadf=yes
+else $as_nop
+ gl_cv_func_select_detects_ebadf=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_detects_ebadf" >&5
+printf "%s\n" "$gl_cv_func_select_detects_ebadf" >&6; }
+ case $gl_cv_func_select_detects_ebadf in
+ *yes) ;;
+ *) REPLACE_SELECT=1 ;;
+ esac
+ fi
+
+ SELECT_LIB="$LIBSOCKET"
+ if test $REPLACE_SELECT = 1; then
+ case "$host_os" in
+ mingw*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+int
+main ()
+{
+ MsgWaitForMultipleObjects (0, NULL, 0, 0, 0);
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+ SELECT_LIB="$SELECT_LIB -luser32"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ ;;
+ esac
+ fi
+
+ LIB_SELECT="$LIB_SELECT"
+
+
+
+ if test $REPLACE_SELECT = 1; then
+ GL_COND_OBJ_SELECT_TRUE=
+ GL_COND_OBJ_SELECT_FALSE='#'
+else
+ GL_COND_OBJ_SELECT_TRUE='#'
+ GL_COND_OBJ_SELECT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SELECT_TRUE}" && test -z "${GL_COND_OBJ_SELECT_FALSE}"; then
+ GL_COND_OBJ_SELECT_TRUE='#'
+ GL_COND_OBJ_SELECT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SELECT" != 1; then
+ if test "$GL_GNULIB_SELECT" = 0; then
+ GL_GNULIB_SELECT=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SELECT="($GL_GNULIB_SELECT || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SELECT 1" >>confdefs.h
+
+
+
+
+
+
+ if test $ac_cv_func_setenv = no; then
+ HAVE_SETENV=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5
+printf %s "checking whether setenv validates arguments... " >&6; }
+if test ${gl_cv_func_setenv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <string.h>
+
+int
+main (void)
+{
+
+ int result = 0;
+ {
+ if (setenv ("", "", 0) != -1)
+ result |= 1;
+ else if (errno != EINVAL)
+ result |= 2;
+ }
+ {
+ if (setenv ("a", "=", 1) != 0)
+ result |= 4;
+ else if (strcmp (getenv ("a"), "=") != 0)
+ result |= 8;
+ }
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_setenv_works=yes
+else $as_nop
+ gl_cv_func_setenv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setenv_works" >&5
+printf "%s\n" "$gl_cv_func_setenv_works" >&6; }
+ case "$gl_cv_func_setenv_works" in
+ *yes) ;;
+ *)
+ REPLACE_SETENV=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then
+ GL_COND_OBJ_SETENV_TRUE=
+ GL_COND_OBJ_SETENV_FALSE='#'
+else
+ GL_COND_OBJ_SETENV_TRUE='#'
+ GL_COND_OBJ_SETENV_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETENV_TRUE}" && test -z "${GL_COND_OBJ_SETENV_FALSE}"; then
+ GL_COND_OBJ_SETENV_TRUE='#'
+ GL_COND_OBJ_SETENV_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SETENV" != 1; then
+ if test "$GL_GNULIB_SETENV" = 0; then
+ GL_GNULIB_SETENV=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SETENV="($GL_GNULIB_SETENV || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SETENV 1" >>confdefs.h
+
+
+
+
+
+
+
+
+ NEED_SETLOCALE_IMPROVED=0
+ case "$host_os" in
+ mingw*) NEED_SETLOCALE_IMPROVED=1 ;;
+ cygwin*)
+ case `uname -r` in
+ 1.5.*) NEED_SETLOCALE_IMPROVED=1 ;;
+ esac
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale supports the C locale" >&5
+printf %s "checking whether setlocale supports the C locale... " >&6; }
+if test ${gl_cv_func_setlocale_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_setlocale_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_setlocale_works="guessing yes";;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+int main ()
+{
+ return setlocale (LC_ALL, "C") == NULL;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_setlocale_works=yes
+else $as_nop
+ gl_cv_func_setlocale_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_works" >&5
+printf "%s\n" "$gl_cv_func_setlocale_works" >&6; }
+ case "$gl_cv_func_setlocale_works" in
+ *yes) ;;
+ *) NEED_SETLOCALE_IMPROVED=1 ;;
+ esac
+ ;;
+ esac
+
+printf "%s\n" "#define NEED_SETLOCALE_IMPROVED $NEED_SETLOCALE_IMPROVED" >>confdefs.h
+
+
+ NEED_SETLOCALE_MTSAFE=0
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ NEED_SETLOCALE_MTSAFE=1
+ fi
+
+printf "%s\n" "#define NEED_SETLOCALE_MTSAFE $NEED_SETLOCALE_MTSAFE" >>confdefs.h
+
+
+ if test $NEED_SETLOCALE_IMPROVED = 1 || test $NEED_SETLOCALE_MTSAFE = 1; then
+ REPLACE_SETLOCALE=1
+ fi
+
+ if test $NEED_SETLOCALE_MTSAFE = 1; then
+ SETLOCALE_LIB="$SETLOCALE_NULL_LIB"
+ else
+ SETLOCALE_LIB=
+ fi
+
+ LIB_SETLOCALE="$SETLOCALE_LIB"
+
+
+
+ if test $REPLACE_SETLOCALE = 1; then
+ GL_COND_OBJ_SETLOCALE_TRUE=
+ GL_COND_OBJ_SETLOCALE_FALSE='#'
+else
+ GL_COND_OBJ_SETLOCALE_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETLOCALE_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_FALSE}"; then
+ GL_COND_OBJ_SETLOCALE_TRUE='#'
+ GL_COND_OBJ_SETLOCALE_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_SETLOCALE_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SETLOCALE" != 1; then
+ if test "$GL_GNULIB_SETLOCALE" = 0; then
+ GL_GNULIB_SETLOCALE=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SETLOCALE="($GL_GNULIB_SETLOCALE || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SETLOCALE 1" >>confdefs.h
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+printf %s "checking for a traditional japanese locale... " >&6; }
+if test ${gt_cv_locale_ja+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales
+ on Cygwin 1.5.x. */
+ if (MB_CUR_MAX == 1)
+ return 1;
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Note that on native Windows, the Japanese locale is
+ # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+ # cannot use it here.
+ gt_cv_locale_ja=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the AIX locale name.
+ if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC-JP
+ else
+ # Test for the HP-UX, OSF/1, NetBSD locale name.
+ if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # Test for the IRIX, FreeBSD locale name.
+ if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja
+ else
+ # Special test for NetBSD 1.6.
+ if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # None found.
+ gt_cv_locale_ja=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+printf "%s\n" "$gt_cv_locale_ja" >&6; }
+ LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+printf %s "checking for a transitional chinese locale... " >&6; }
+if test ${gt_cv_locale_zh_CN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ /* Check whether a typical GB18030 multibyte sequence is recognized as a
+ single wide character. This excludes the GB2312 and GBK encodings. */
+ if (mblen ("\203\062\332\066", 5) != 4)
+ return 1;
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=Chinese_China.54936
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ ;;
+ solaris2.8)
+ # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+ # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+ # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+ gt_cv_locale_zh_CN=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the locale name without encoding suffix.
+ if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN.GB18030
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ fi
+ ;;
+ esac
+ else
+ # If there was a link error, due to mblen(), the system is so old that
+ # it certainly doesn't have a chinese locale.
+ gt_cv_locale_zh_CN=none
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+printf "%s\n" "$gt_cv_locale_zh_CN" >&6; }
+ LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_SETSOCKOPT_TRUE=
+ GL_COND_OBJ_SETSOCKOPT_FALSE='#'
+else
+ GL_COND_OBJ_SETSOCKOPT_TRUE='#'
+ GL_COND_OBJ_SETSOCKOPT_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SETSOCKOPT_TRUE}" && test -z "${GL_COND_OBJ_SETSOCKOPT_FALSE}"; then
+ GL_COND_OBJ_SETSOCKOPT_TRUE='#'
+ GL_COND_OBJ_SETSOCKOPT_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SETSOCKOPT" != 1; then
+ if test "$GL_GNULIB_SETSOCKOPT" = 0; then
+ GL_GNULIB_SETSOCKOPT=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SETSOCKOPT="($GL_GNULIB_SETSOCKOPT || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SETSOCKOPT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HAVE_POSIX_SIGNALBLOCKING=0
+ if test "$gl_cv_type_sigset_t" = yes; then
+ ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask"
+if test "x$ac_cv_func_sigprocmask" = xyes
+then :
+ HAVE_POSIX_SIGNALBLOCKING=1
+fi
+
+ fi
+
+
+ if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+ GL_COND_OBJ_SIGPROCMASK_TRUE=
+ GL_COND_OBJ_SIGPROCMASK_FALSE='#'
+else
+ GL_COND_OBJ_SIGPROCMASK_TRUE='#'
+ GL_COND_OBJ_SIGPROCMASK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SIGPROCMASK_TRUE}" && test -z "${GL_COND_OBJ_SIGPROCMASK_FALSE}"; then
+ GL_COND_OBJ_SIGPROCMASK_TRUE='#'
+ GL_COND_OBJ_SIGPROCMASK_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_SIGPROCMASK_TRUE"; then :
+
+ :
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SIGPROCMASK" != 1; then
+ if test "$GL_GNULIB_SIGPROCMASK" = 0; then
+ GL_GNULIB_SIGPROCMASK=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SIGPROCMASK="($GL_GNULIB_SIGPROCMASK || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ GL_COND_OBJ_SOCKET_TRUE=
+ GL_COND_OBJ_SOCKET_FALSE='#'
+else
+ GL_COND_OBJ_SOCKET_TRUE='#'
+ GL_COND_OBJ_SOCKET_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SOCKET_TRUE}" && test -z "${GL_COND_OBJ_SOCKET_FALSE}"; then
+ GL_COND_OBJ_SOCKET_TRUE='#'
+ GL_COND_OBJ_SOCKET_FALSE='#'
+ fi
+
+ # When this module is used, sockets may actually occur as file descriptors,
+ # hence it is worth warning if the modules 'close' and 'ioctl' are not used.
+
+
+
+
+
+
+
+
+
+
+
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
+ fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SOCKET" != 1; then
+ if test "$GL_GNULIB_SOCKET" = 0; then
+ GL_GNULIB_SOCKET=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SOCKET="($GL_GNULIB_SOCKET || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SOCKET 1" >>confdefs.h
+
+
+
+
+
+ ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "
+/* <sys/types.h> is not needed according to POSIX, but the
+ <sys/socket.h> in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#elif HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
+
+"
+if test "x$ac_cv_type_socklen_t" = xyes
+then :
+
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5
+printf %s "checking for socklen_t equivalent... " >&6; }
+if test ${gl_cv_socklen_t_equiv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # Systems have either "struct sockaddr *" or
+ # "void *" as the second argument to getpeername
+ gl_cv_socklen_t_equiv=
+ for arg2 in "struct sockaddr" void; do
+ for t in int size_t "unsigned int" "long int" "unsigned long int"; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/socket.h>
+
+ int getpeername (int, $arg2 *, $t *);
+int
+main (void)
+{
+$t len;
+ getpeername (0, 0, &len);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_socklen_t_equiv="$t"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ if test "$gl_cv_socklen_t_equiv" = ""; then
+ as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5
+printf "%s\n" "$gl_cv_socklen_t_equiv" >&6; }
+
+printf "%s\n" "#define socklen_t $gl_cv_socklen_t_equiv" >>confdefs.h
+
+fi
+
+
+
+
+
+
+
+
+ if test $ac_cv_have_decl_strerror_r = no; then
+ HAVE_DECL_STRERROR_R=0
+ fi
+
+ if test $ac_cv_func_strerror_r = yes; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ if test $gl_cv_func_strerror_r_posix_signature = yes; then
+ case "$gl_cv_func_strerror_r_works" in
+ *no) REPLACE_STRERROR_R=1 ;;
+ esac
+ else
+ REPLACE_STRERROR_R=1
+ fi
+ else
+ REPLACE_STRERROR_R=1
+ fi
+ fi
+
+ if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1
+then :
+
+
+
+
+
+
+
+
+
+ gltests_LIBOBJS="$gltests_LIBOBJS strerror_r.$ac_objext"
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for catgets" >&5
+printf %s "checking for catgets... " >&6; }
+if test ${gl_cv_onwards_func_catgets+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "catgets" "ac_cv_have_decl_catgets" "#include <nl_types.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_catgets" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_catgets = yes; then
+ ac_fn_c_check_func "$LINENO" "catgets" "ac_cv_func_catgets"
+if test "x$ac_cv_func_catgets" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_catgets = yes; then
+ gl_cv_onwards_func_catgets=yes
+ else
+ gl_cv_onwards_func_catgets='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_catgets='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "catgets" "ac_cv_func_catgets"
+if test "x$ac_cv_func_catgets" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_catgets=$ac_cv_func_catgets
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_catgets" >&5
+printf "%s\n" "$gl_cv_onwards_func_catgets" >&6; }
+
+ case "$gl_cv_onwards_func_catgets" in
+ future*) ac_cv_func_catgets=no ;;
+ *) ac_cv_func_catgets=$gl_cv_onwards_func_catgets ;;
+ esac
+ if test $ac_cv_func_catgets = yes; then
+
+printf "%s\n" "#define HAVE_CATGETS 1" >>confdefs.h
+
+ fi
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_STRERROR_R" != 1; then
+ if test "$GL_GNULIB_STRERROR_R" = 0; then
+ GL_GNULIB_STRERROR_R=$gl_module_indicator_condition
+ else
+ GL_GNULIB_STRERROR_R="($GL_GNULIB_STRERROR_R || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h
+
+
+
+
+
+printf "%s\n" "#define GNULIB_STRERROR_R_POSIX $gl_module_indicator_condition" >>confdefs.h
+
+
+
+
+
+ if test $ac_cv_func_symlink = no; then
+ HAVE_SYMLINK=0
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether symlink handles trailing slash correctly" >&5
+printf %s "checking whether symlink handles trailing slash correctly... " >&6; }
+if test ${gl_cv_func_symlink_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_symlink_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_symlink_works="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_symlink_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_symlink_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <unistd.h>
+
+int
+main (void)
+{
+int result = 0;
+ if (!symlink ("a", "conftest.link/"))
+ result |= 1;
+ if (symlink ("conftest.f", "conftest.lnk2"))
+ result |= 2;
+ else if (!symlink ("a", "conftest.lnk2/"))
+ result |= 4;
+ return result;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_symlink_works=yes
+else $as_nop
+ gl_cv_func_symlink_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ rm -f conftest.f conftest.link conftest.lnk2
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_symlink_works" >&5
+printf "%s\n" "$gl_cv_func_symlink_works" >&6; }
+ case "$gl_cv_func_symlink_works" in
+ *yes) ;;
+ *)
+ REPLACE_SYMLINK=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then
+ GL_COND_OBJ_SYMLINK_TRUE=
+ GL_COND_OBJ_SYMLINK_FALSE='#'
+else
+ GL_COND_OBJ_SYMLINK_TRUE='#'
+ GL_COND_OBJ_SYMLINK_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_SYMLINK_TRUE}" && test -z "${GL_COND_OBJ_SYMLINK_FALSE}"; then
+ GL_COND_OBJ_SYMLINK_TRUE='#'
+ GL_COND_OBJ_SYMLINK_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_SYMLINK" != 1; then
+ if test "$GL_GNULIB_SYMLINK" = 0; then
+ GL_GNULIB_SYMLINK=$gl_module_indicator_condition
+ else
+ GL_GNULIB_SYMLINK="($GL_GNULIB_SYMLINK || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_SYMLINK 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test $gl_threads_api = posix; then
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_atfork" >&5
+printf %s "checking for pthread_atfork... " >&6; }
+if test ${gl_cv_onwards_func_pthread_atfork+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ exec 9>&6 6>/dev/null
+
+ case "$host_os" in
+
+ linux*-android*)
+ ac_fn_check_decl "$LINENO" "pthread_atfork" "ac_cv_have_decl_pthread_atfork" "#include <pthread.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_pthread_atfork" = xyes
+then :
+
+fi
+ if test $ac_cv_have_decl_pthread_atfork = yes; then
+ ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork"
+if test "x$ac_cv_func_pthread_atfork" = xyes
+then :
+
+fi
+
+ if test $ac_cv_func_pthread_atfork = yes; then
+ gl_cv_onwards_func_pthread_atfork=yes
+ else
+ gl_cv_onwards_func_pthread_atfork='future OS version'
+ fi
+ else
+ gl_cv_onwards_func_pthread_atfork='future OS version'
+ fi
+ ;;
+
+
+ *)
+ ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork"
+if test "x$ac_cv_func_pthread_atfork" = xyes
+then :
+
+fi
+
+ gl_cv_onwards_func_pthread_atfork=$ac_cv_func_pthread_atfork
+ ;;
+
+ esac
+
+ exec 6>&9 9>&-
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_pthread_atfork" >&5
+printf "%s\n" "$gl_cv_onwards_func_pthread_atfork" >&6; }
+
+ case "$gl_cv_onwards_func_pthread_atfork" in
+ future*) ac_cv_func_pthread_atfork=no ;;
+ *) ac_cv_func_pthread_atfork=$gl_cv_onwards_func_pthread_atfork ;;
+ esac
+ if test $ac_cv_func_pthread_atfork = yes; then
+
+printf "%s\n" "#define HAVE_PTHREAD_ATFORK 1" >>confdefs.h
+
+ fi
+
+
+ LIBS="$gl_save_LIBS"
+ fi
+
+ ac_fn_c_check_header_compile "$LINENO" "sys/single_threaded.h" "ac_cv_header_sys_single_threaded_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_single_threaded_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_SINGLE_THREADED_H 1" >>confdefs.h
+
+fi
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether time() works" >&5
+printf %s "checking whether time() works... " >&6; }
+if test ${gl_cv_func_time_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$host_os" in
+ linux*-gnu*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if __GLIBC__ == 2
+ Unlucky GNU user
+ #endif
+ #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "Unlucky" >/dev/null 2>&1
+then :
+ gl_cv_func_time_works="guessing no"
+else $as_nop
+ gl_cv_func_time_works="guessing yes"
+fi
+rm -rf conftest*
+
+ ;;
+ aix*) gl_cv_func_time_works="guessing no";;
+ mingw*) gl_cv_func_time_works="guessing no";;
+ *) gl_cv_func_time_works="guessing yes";;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_time_works" >&5
+printf "%s\n" "$gl_cv_func_time_works" >&6; }
+ case "$gl_cv_func_time_works" in
+ *no) REPLACE_TIME=1 ;;
+ esac
+
+
+ if test $REPLACE_TIME = 1; then
+ GL_COND_OBJ_TIME_TRUE=
+ GL_COND_OBJ_TIME_FALSE='#'
+else
+ GL_COND_OBJ_TIME_TRUE='#'
+ GL_COND_OBJ_TIME_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_TIME_TRUE}" && test -z "${GL_COND_OBJ_TIME_FALSE}"; then
+ GL_COND_OBJ_TIME_TRUE='#'
+ GL_COND_OBJ_TIME_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_TIME_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_TIME" != 1; then
+ if test "$GL_GNULIB_TIME" = 0; then
+ GL_GNULIB_TIME=$gl_module_indicator_condition
+ else
+ GL_GNULIB_TIME="($GL_GNULIB_TIME || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_TIME 1" >>confdefs.h
+
+
+
+
+
+
+
+ # The Hurd, the Linux kernel, the FreeBSD kernel version 2.2 and later,
+ # Cygwin, and mingw never let anyone (even root) unlink directories.
+ # If anyone knows of another system for which unlink can never
+ # remove a directory, please report it to <bug-coreutils@gnu.org>.
+ # Unfortunately this is difficult to test for, since it requires root access
+ # and might create garbage in the file system,
+ # so the code below simply relies on the kernel name and version number.
+ case $host_os in
+ gnu[0-9]* | \
+ linux-* | linux | \
+ freebsd2.2* | freebsd[3-9]* | freebsd[1-9][0-9]* | \
+ cygwin | \
+ mingw*)
+
+printf "%s\n" "#define UNLINK_CANNOT_UNLINK_DIR 1" >>confdefs.h
+;;
+ esac
+
+
+
+
+ if test $ac_cv_have_decl_unsetenv = no; then
+ HAVE_DECL_UNSETENV=0
+ fi
+ ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv"
+if test "x$ac_cv_func_unsetenv" = xyes
+then :
+ printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h
+
+fi
+
+ if test $ac_cv_func_unsetenv = no; then
+ HAVE_UNSETENV=0
+ else
+ HAVE_UNSETENV=1
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5
+printf %s "checking for unsetenv() return type... " >&6; }
+if test ${gt_cv_func_unsetenv_ret+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#undef _BSD
+#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */
+#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int unsetenv (const char *name);
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gt_cv_func_unsetenv_ret='int'
+else $as_nop
+ gt_cv_func_unsetenv_ret='void'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5
+printf "%s\n" "$gt_cv_func_unsetenv_ret" >&6; }
+ if test $gt_cv_func_unsetenv_ret = 'void'; then
+
+printf "%s\n" "#define VOID_UNSETENV 1" >>confdefs.h
+
+ REPLACE_UNSETENV=1
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5
+printf %s "checking whether unsetenv obeys POSIX... " >&6; }
+if test ${gl_cv_func_unsetenv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;;
+ esac
+
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ #include <stdlib.h>
+ #include <errno.h>
+ extern char **environ;
+
+
+$gl_mda_defines
+
+int
+main (void)
+{
+
+ char entry1[] = "a=1";
+ char entry2[] = "b=2";
+ char *env[] = { entry1, entry2, NULL };
+ if (putenv ((char *) "a=1")) return 1;
+ if (putenv (entry2)) return 2;
+ entry2[0] = 'a';
+ unsetenv ("a");
+ if (getenv ("a")) return 3;
+ if (!unsetenv ("") || errno != EINVAL) return 4;
+ entry2[0] = 'b';
+ environ = env;
+ if (!getenv ("a")) return 5;
+ entry2[0] = 'a';
+ unsetenv ("a");
+ if (getenv ("a")) return 6;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_unsetenv_works=yes
+else $as_nop
+ gl_cv_func_unsetenv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5
+printf "%s\n" "$gl_cv_func_unsetenv_works" >&6; }
+ case "$gl_cv_func_unsetenv_works" in
+ *yes) ;;
+ *)
+ REPLACE_UNSETENV=1
+ ;;
+ esac
+ fi
+
+
+ if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then
+ GL_COND_OBJ_UNSETENV_TRUE=
+ GL_COND_OBJ_UNSETENV_FALSE='#'
+else
+ GL_COND_OBJ_UNSETENV_TRUE='#'
+ GL_COND_OBJ_UNSETENV_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_UNSETENV_TRUE}" && test -z "${GL_COND_OBJ_UNSETENV_FALSE}"; then
+ GL_COND_OBJ_UNSETENV_TRUE='#'
+ GL_COND_OBJ_UNSETENV_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_UNSETENV_TRUE"; then :
+
+
+
+
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_UNSETENV" != 1; then
+ if test "$GL_GNULIB_UNSETENV" = 0; then
+ GL_GNULIB_UNSETENV=$gl_module_indicator_condition
+ else
+ GL_GNULIB_UNSETENV="($GL_GNULIB_UNSETENV || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h
+
+
+
+ abs_aux_dir=`cd "$ac_aux_dir"; pwd`
+
+ abs_aux_dir=`cd "$ac_aux_dir"; pwd`
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5
+printf %s "checking for a traditional french locale... " >&6; }
+if test ${gt_cv_locale_fr+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5
+printf "%s\n" "$gt_cv_locale_fr" >&6; }
+ LOCALE_FR=$gt_cv_locale_fr
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5
+printf %s "checking for a french Unicode locale... " >&6; }
+if test ${gt_cv_locale_fr_utf8+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5
+printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; }
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5
+printf %s "checking for a traditional japanese locale... " >&6; }
+if test ${gt_cv_locale_ja+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales
+ on Cygwin 1.5.x. */
+ if (MB_CUR_MAX == 1)
+ return 1;
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Note that on native Windows, the Japanese locale is
+ # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+ # cannot use it here.
+ gt_cv_locale_ja=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the AIX locale name.
+ if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC-JP
+ else
+ # Test for the HP-UX, OSF/1, NetBSD locale name.
+ if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # Test for the IRIX, FreeBSD locale name.
+ if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja
+ else
+ # Special test for NetBSD 1.6.
+ if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # None found.
+ gt_cv_locale_ja=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5
+printf "%s\n" "$gt_cv_locale_ja" >&6; }
+ LOCALE_JA=$gt_cv_locale_ja
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5
+printf %s "checking for a transitional chinese locale... " >&6; }
+if test ${gt_cv_locale_zh_CN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ /* Check whether a typical GB18030 multibyte sequence is recognized as a
+ single wide character. This excludes the GB2312 and GBK encodings. */
+ if (mblen ("\203\062\332\066", 5) != 4)
+ return 1;
+ return 0;
+#endif
+}
+
+_ACEOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=Chinese_China.54936
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ ;;
+ solaris2.8)
+ # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+ # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+ # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+ gt_cv_locale_zh_CN=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the locale name without encoding suffix.
+ if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN.GB18030
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ fi
+ ;;
+ esac
+ else
+ # If there was a link error, due to mblen(), the system is so old that
+ # it certainly doesn't have a chinese locale.
+ gt_cv_locale_zh_CN=none
+ fi
+ rm -fr conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5
+printf "%s\n" "$gt_cv_locale_zh_CN" >&6; }
+ LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+
+
+
+
+
+
+ if test $ac_cv_func_wctob = no; then
+ HAVE_WCTOB=0
+ HAVE_DECL_WCTOB=0
+ else
+ HAVE_WCTOB=1
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5
+printf %s "checking whether wctob works... " >&6; }
+if test ${gl_cv_func_wctob_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ case "$host_os" in
+ # Guess no on Solaris <= 9 and Cygwin.
+ solaris2.[1-9] | solaris2.[1-9].* | cygwin*)
+ gl_cv_func_wctob_works="guessing no" ;;
+ # Guess no on native Windows.
+ mingw*)
+ gl_cv_func_wctob_works="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_wctob_works="guessing yes" ;;
+ esac
+ case "$host_os" in
+ cygwin*)
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <wchar.h>
+
+register long global __asm__ ("%ebx");
+
+int main ()
+{
+ setlocale (LC_ALL, "en_US.UTF-8");
+
+ global = 0x12345678;
+ if (wctob (0x00FC) != -1)
+ return 1;
+ if (global != 0x12345678)
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ :
+else $as_nop
+ gl_cv_func_wctob_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ ;;
+ esac
+ if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then
+ if test "$cross_compiling" = yes
+then :
+ :
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ wchar_t wc;
+
+ if (mbtowc (&wc, "\374", 1) == 1)
+ if (wctob (wc) != (unsigned char) '\374')
+ return 1;
+ }
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ gl_cv_func_wctob_works=yes
+else $as_nop
+ gl_cv_func_wctob_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5
+printf "%s\n" "$gl_cv_func_wctob_works" >&6; }
+ case "$gl_cv_func_wctob_works" in
+ *yes) ;;
+ *) REPLACE_WCTOB=1 ;;
+ esac
+ if test $REPLACE_WCTOB = 0; then
+
+ ac_fn_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" "
+ #include <wchar.h>
+
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_wctob" = xyes
+then :
+ ac_have_decl=1
+else $as_nop
+ ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_WCTOB $ac_have_decl" >>confdefs.h
+
+ if test $ac_cv_have_decl_wctob != yes; then
+ HAVE_DECL_WCTOB=0
+ fi
+ fi
+ fi
+
+
+ if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then
+ GL_COND_OBJ_WCTOB_TRUE=
+ GL_COND_OBJ_WCTOB_FALSE='#'
+else
+ GL_COND_OBJ_WCTOB_TRUE='#'
+ GL_COND_OBJ_WCTOB_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WCTOB_TRUE}" && test -z "${GL_COND_OBJ_WCTOB_FALSE}"; then
+ GL_COND_OBJ_WCTOB_TRUE='#'
+ GL_COND_OBJ_WCTOB_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_WCTOB_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_WCTOB" != 1; then
+ if test "$GL_GNULIB_WCTOB" = 0; then
+ GL_GNULIB_WCTOB=$gl_module_indicator_condition
+ else
+ GL_GNULIB_WCTOB="($GL_GNULIB_WCTOB || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_WCTOB 1" >>confdefs.h
+
+
+
+
+
+
+ if false; then
+ REPLACE_WCTOMB=1
+ fi
+
+
+ if test $REPLACE_WCTOMB = 1; then
+ GL_COND_OBJ_WCTOMB_TRUE=
+ GL_COND_OBJ_WCTOMB_FALSE='#'
+else
+ GL_COND_OBJ_WCTOMB_TRUE='#'
+ GL_COND_OBJ_WCTOMB_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WCTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCTOMB_FALSE}"; then
+ GL_COND_OBJ_WCTOMB_TRUE='#'
+ GL_COND_OBJ_WCTOMB_FALSE='#'
+ fi
+
+ if test -z "$GL_COND_OBJ_WCTOMB_TRUE"; then :
+
+
+ :
+
+
+fi
+
+
+
+
+
+
+
+
+
+ if test "$GL_GNULIB_WCTOMB" != 1; then
+ if test "$GL_GNULIB_WCTOMB" = 0; then
+ GL_GNULIB_WCTOMB=$gl_module_indicator_condition
+ else
+ GL_GNULIB_WCTOMB="($GL_GNULIB_WCTOMB || $gl_module_indicator_condition)"
+ fi
+ fi
+
+
+
+
+
+printf "%s\n" "#define GNULIB_TEST_WCTOMB 1" >>confdefs.h
+
+
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_THREAD_TRUE=
+ GL_COND_OBJ_WINDOWS_THREAD_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_THREAD_TRUE='#'
+ GL_COND_OBJ_WINDOWS_THREAD_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_THREAD_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_THREAD_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_THREAD_TRUE='#'
+ GL_COND_OBJ_WINDOWS_THREAD_FALSE='#'
+ fi
+
+
+
+ if case "$host_os" in mingw*) true;; *) false;; esac; then
+ GL_COND_OBJ_WINDOWS_TLS_TRUE=
+ GL_COND_OBJ_WINDOWS_TLS_FALSE='#'
+else
+ GL_COND_OBJ_WINDOWS_TLS_TRUE='#'
+ GL_COND_OBJ_WINDOWS_TLS_FALSE=
+fi
+:
+ if test -z "${GL_COND_OBJ_WINDOWS_TLS_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_TLS_FALSE}"; then
+ GL_COND_OBJ_WINDOWS_TLS_TRUE='#'
+ GL_COND_OBJ_WINDOWS_TLS_FALSE='#'
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LIBTESTS_LIBDEPS="$gltests_libdeps"
+
+
+
+# Check whether --enable-gcc-warnings was given.
+if test ${enable_gcc_warnings+y}
+then :
+ enableval=$enable_gcc_warnings; case $enableval in
+ yes|no) ;;
+ *) as_fn_error $? "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;;
+ esac
+ gl_gcc_warnings=$enableval
+else $as_nop
+ if test -d "$srcdir"/.git; then
+ gl_gcc_warnings=yes
+ else
+ gl_gcc_warnings=no
+ fi
+
+fi
+
+
+if test "$gl_gcc_warnings" = yes; then
+ nw=
+ # This, $nw, is the list of warnings we disable.
+ nw="$nw -Wdeclaration-after-statement" # too useful to forbid
+ nw="$nw -Waggregate-return" # anachronistic
+ nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h)
+ nw="$nw -Wc++-compat" # We don't care about C++ compilers
+ nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
+ nw="$nw -Wtraditional" # Warns on #elif which we use often
+ nw="$nw -Wcast-qual" # Too many warnings for now
+ nw="$nw -Wconversion" # Too many warnings for now
+ nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
+ nw="$nw -Wsign-conversion" # Too many warnings for now
+ nw="$nw -Wtraditional-conversion" # Too many warnings for now
+ nw="$nw -Wunreachable-code" # Too many warnings for now
+ nw="$nw -Wpadded" # Our structs are not padded
+ nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
+ nw="$nw -Wlogical-op" # any use of fwrite provokes this
+ nw="$nw -Wvla" # warnings in gettext.h
+ nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
+ nw="$nw -Wswitch-enum" # Too many warnings for now
+ nw="$nw -Wswitch-default" # Too many warnings for now
+ # Too many warnings for now
+ nw="$nw -Wattributes"
+ nw="$nw -Wstrict-prototypes"
+ nw="$nw -Wold-style-definition"
+ nw="$nw -Wpacked"
+ nw="$nw -Wmissing-prototypes"
+ nw="$nw -Wmissing-declarations"
+ nw="$nw -Wsuggest-attribute=noreturn"
+ # things I might fix soon:
+ nw="$nw -Wfloat-equal" # sort.c, seq.c
+ nw="$nw -Wmissing-format-attribute" # copy.c
+ nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
+ nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot
+ nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c
+ nw="$nw -Wstack-protector" # libparted/label/gpt.c
+ # ?? -Wstrict-overflow
+ nw="$nw -Wsuggest-attribute=format" # suggests to use gnu_printf for vsnprintf
+
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ if test -n "$GCC"; then
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is supported" >&5
+printf %s "checking whether -Wno-missing-field-initializers is supported... " >&6; }
+if test ${gl_cv_cc_nomfi_supported+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wextra -Werror -Wno-missing-field-initializers"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_nomfi_supported=yes
+else $as_nop
+ gl_cv_cc_nomfi_supported=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_supported" >&5
+printf "%s\n" "$gl_cv_cc_nomfi_supported" >&6; }
+
+ if test "$gl_cv_cc_nomfi_supported" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is needed" >&5
+printf %s "checking whether -Wno-missing-field-initializers is needed... " >&6; }
+if test ${gl_cv_cc_nomfi_needed+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wextra -Werror"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int f (void)
+ {
+ typedef struct { int a; int b; } s_t;
+ s_t s1 = { 0, };
+ return s1.b;
+ }
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_nomfi_needed=no
+else $as_nop
+ gl_cv_cc_nomfi_needed=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_nomfi_needed" >&5
+printf "%s\n" "$gl_cv_cc_nomfi_needed" >&6; }
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -Wuninitialized is supported" >&5
+printf %s "checking whether -Wuninitialized is supported... " >&6; }
+if test ${gl_cv_cc_uninitialized_supported+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wuninitialized"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ gl_cv_cc_uninitialized_supported=yes
+else $as_nop
+ gl_cv_cc_uninitialized_supported=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS="$gl_save_CFLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_uninitialized_supported" >&5
+printf "%s\n" "$gl_cv_cc_uninitialized_supported" >&6; }
+
+ fi
+
+ # List all gcc warning categories.
+ # To compare this list to your installed GCC's, run this Bash command:
+ #
+ # comm -3 \
+ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \
+ # awk '/^[^#]/ {print ws}' ../build-aux/gcc-warning.spec) | sort) \
+ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort)
+
+ ws=
+ for gl_manywarn_item in -fanalyzer -fno-common \
+ -Wall \
+ -Warith-conversion \
+ -Wbad-function-cast \
+ -Wcast-align=strict \
+ -Wdate-time \
+ -Wdisabled-optimization \
+ -Wdouble-promotion \
+ -Wduplicated-branches \
+ -Wduplicated-cond \
+ -Wextra \
+ -Wformat-signedness \
+ -Winit-self \
+ -Winline \
+ -Winvalid-pch \
+ -Wlogical-op \
+ -Wmissing-declarations \
+ -Wmissing-include-dirs \
+ -Wmissing-prototypes \
+ -Wnested-externs \
+ -Wnull-dereference \
+ -Wold-style-definition \
+ -Wopenmp-simd \
+ -Woverlength-strings \
+ -Wpacked \
+ -Wpointer-arith \
+ -Wshadow \
+ -Wstack-protector \
+ -Wstrict-overflow \
+ -Wstrict-prototypes \
+ -Wsuggest-attribute=cold \
+ -Wsuggest-attribute=const \
+ -Wsuggest-attribute=format \
+ -Wsuggest-attribute=malloc \
+ -Wsuggest-attribute=noreturn \
+ -Wsuggest-attribute=pure \
+ -Wsuggest-final-methods \
+ -Wsuggest-final-types \
+ -Wsync-nand \
+ -Wsystem-headers \
+ -Wtrampolines \
+ -Wuninitialized \
+ -Wunknown-pragmas \
+ -Wunsafe-loop-optimizations \
+ -Wunused-macros \
+ -Wvariadic-macros \
+ -Wvector-operation-performance \
+ -Wvla \
+ -Wwrite-strings \
+ \
+ ; do
+ as_fn_append ws " $gl_manywarn_item"
+ done
+
+ # gcc --help=warnings outputs an unusual form for these options; list
+ # them here so that the above 'comm' command doesn't report a false match.
+ as_fn_append ws ' -Warray-bounds=2'
+ as_fn_append ws ' -Wattribute-alias=2'
+ as_fn_append ws ' -Wbidi-chars=any,ucn'
+ as_fn_append ws ' -Wformat-overflow=2'
+ as_fn_append ws ' -Wformat=2'
+ as_fn_append ws ' -Wformat-truncation=2'
+ as_fn_append ws ' -Wimplicit-fallthrough=5'
+ as_fn_append ws ' -Wshift-overflow=2'
+ as_fn_append ws ' -Wuse-after-free=3'
+ as_fn_append ws ' -Wunused-const-variable=2'
+ as_fn_append ws ' -Wvla-larger-than=4031'
+
+ # These are needed for older GCC versions.
+ if test -n "$GCC"; then
+ case `($CC --version) 2>/dev/null` in
+ 'gcc (GCC) '[0-3].* | \
+ 'gcc (GCC) '4.[0-7].*)
+ as_fn_append ws ' -fdiagnostics-show-option'
+ as_fn_append ws ' -funit-at-a-time'
+ ;;
+ esac
+ fi
+
+ # Disable specific options as needed.
+ if test "$gl_cv_cc_nomfi_needed" = yes; then
+ as_fn_append ws ' -Wno-missing-field-initializers'
+ fi
+
+ if test "$gl_cv_cc_uninitialized_supported" = no; then
+ as_fn_append ws ' -Wno-uninitialized'
+ fi
+
+ # This warning have too many false alarms in GCC 11.2.1.
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101713
+ as_fn_append ws ' -Wno-analyzer-malloc-leak'
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ gl_warn_set=
+ set x $ws; shift
+ for gl_warn_item
+ do
+ case " $nw " in
+ *" $gl_warn_item "*)
+ ;;
+ *)
+ as_fn_append gl_warn_set " $gl_warn_item"
+ ;;
+ esac
+ done
+ ws=$gl_warn_set
+
+ for w in $ws; do
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror -Wunknown-warning-option" >&5
+printf %s "checking whether C compiler handles -Werror -Wunknown-warning-option... " >&6; }
+if test ${gl_cv_warn_c__Werror__Wunknown_warning_option+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Werror__Wunknown_warning_option=yes
+else $as_nop
+ gl_cv_warn_c__Werror__Wunknown_warning_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror__Wunknown_warning_option" >&5
+printf "%s\n" "$gl_cv_warn_c__Werror__Wunknown_warning_option" >&6; }
+if test "x$gl_cv_warn_c__Werror__Wunknown_warning_option" = xyes
+then :
+ gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'
+else $as_nop
+ gl_unknown_warnings_are_errors=
+fi
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+as_gl_Warn=`printf "%s\n" "gl_cv_warn_c_$w" | $as_tr_sh`
+gl_positive="$w"
+case $gl_positive in
+ -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $w" >&5
+printf %s "checking whether C compiler handles $w... " >&6; }
+if eval test \${$as_gl_Warn+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$as_gl_Warn=yes"
+else $as_nop
+ eval "$as_gl_Warn=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+eval ac_res=\$$as_gl_Warn
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_gl_Warn"\" = x"yes"
+then :
+ as_fn_append WARN_CFLAGS " $w"
+fi
+
+
+ done
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-missing-field-initializers" >&5
+printf %s "checking whether C compiler handles -Wno-missing-field-initializers... " >&6; }
+if test ${gl_cv_warn_c__Wno_missing_field_initializers+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wmissing-field-initializers"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_missing_field_initializers=yes
+else $as_nop
+ gl_cv_warn_c__Wno_missing_field_initializers=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_missing_field_initializers" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_missing_field_initializers" >&6; }
+if test "x$gl_cv_warn_c__Wno_missing_field_initializers" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-missing-field-initializers"
+fi
+
+ # We need this one
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-sign-compare" >&5
+printf %s "checking whether C compiler handles -Wno-sign-compare... " >&6; }
+if test ${gl_cv_warn_c__Wno_sign_compare+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wsign-compare"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_sign_compare=yes
+else $as_nop
+ gl_cv_warn_c__Wno_sign_compare=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_sign_compare" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_sign_compare" >&6; }
+if test "x$gl_cv_warn_c__Wno_sign_compare" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-sign-compare"
+fi
+
+ # Too many warnings for now
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-pointer-sign" >&5
+printf %s "checking whether C compiler handles -Wno-pointer-sign... " >&6; }
+if test ${gl_cv_warn_c__Wno_pointer_sign+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wpointer-sign"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_pointer_sign=yes
+else $as_nop
+ gl_cv_warn_c__Wno_pointer_sign=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_pointer_sign" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_pointer_sign" >&6; }
+if test "x$gl_cv_warn_c__Wno_pointer_sign" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-pointer-sign"
+fi
+
+ # Too many warnings for now
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-parameter" >&5
+printf %s "checking whether C compiler handles -Wno-unused-parameter... " >&6; }
+if test ${gl_cv_warn_c__Wno_unused_parameter+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-parameter"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_unused_parameter=yes
+else $as_nop
+ gl_cv_warn_c__Wno_unused_parameter=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_parameter" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_unused_parameter" >&6; }
+if test "x$gl_cv_warn_c__Wno_unused_parameter" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-unused-parameter"
+fi
+
+ # Too many warnings for now
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-macros" >&5
+printf %s "checking whether C compiler handles -Wno-unused-macros... " >&6; }
+if test ${gl_cv_warn_c__Wno_unused_macros+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-macros"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_unused_macros=yes
+else $as_nop
+ gl_cv_warn_c__Wno_unused_macros=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_macros" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_unused_macros" >&6; }
+if test "x$gl_cv_warn_c__Wno_unused_macros" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-unused-macros"
+fi
+
+ # Too many warnings for now
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-format-nonliteral" >&5
+printf %s "checking whether C compiler handles -Wno-format-nonliteral... " >&6; }
+if test ${gl_cv_warn_c__Wno_format_nonliteral+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wformat-nonliteral"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_format_nonliteral=yes
+else $as_nop
+ gl_cv_warn_c__Wno_format_nonliteral=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_format_nonliteral" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_format_nonliteral" >&6; }
+if test "x$gl_cv_warn_c__Wno_format_nonliteral" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-format-nonliteral"
+fi
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wabi=2" >&5
+printf %s "checking whether C compiler handles -Wabi=2... " >&6; }
+if test ${gl_cv_warn_c__Wabi_2+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wabi=2"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wabi_2=yes
+else $as_nop
+ gl_cv_warn_c__Wabi_2=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wabi_2" >&5
+printf "%s\n" "$gl_cv_warn_c__Wabi_2" >&6; }
+if test "x$gl_cv_warn_c__Wabi_2" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wabi=2"
+fi
+
+ # Avoid compile failure with GCC8
+
+ # FIXME: investigate these
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-jump-misses-init" >&5
+printf %s "checking whether C compiler handles -Wno-jump-misses-init... " >&6; }
+if test ${gl_cv_warn_c__Wno_jump_misses_init+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wjump-misses-init"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_jump_misses_init=yes
+else $as_nop
+ gl_cv_warn_c__Wno_jump_misses_init=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_jump_misses_init" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_jump_misses_init" >&6; }
+if test "x$gl_cv_warn_c__Wno_jump_misses_init" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-jump-misses-init"
+fi
+
+
+
+ # In spite of excluding -Wlogical-op above, it is enabled, as of
+ # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-logical-op" >&5
+printf %s "checking whether C compiler handles -Wno-logical-op... " >&6; }
+if test ${gl_cv_warn_c__Wno_logical_op+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wlogical-op"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wno_logical_op=yes
+else $as_nop
+ gl_cv_warn_c__Wno_logical_op=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_logical_op" >&5
+printf "%s\n" "$gl_cv_warn_c__Wno_logical_op" >&6; }
+if test "x$gl_cv_warn_c__Wno_logical_op" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wno-logical-op"
+fi
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-show-option" >&5
+printf %s "checking whether C compiler handles -fdiagnostics-show-option... " >&6; }
+if test ${gl_cv_warn_c__fdiagnostics_show_option+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -fdiagnostics-show-option"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__fdiagnostics_show_option=yes
+else $as_nop
+ gl_cv_warn_c__fdiagnostics_show_option=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_show_option" >&5
+printf "%s\n" "$gl_cv_warn_c__fdiagnostics_show_option" >&6; }
+if test "x$gl_cv_warn_c__fdiagnostics_show_option" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -fdiagnostics-show-option"
+fi
+
+
+
+ # Make sure it recognizes /* FALLTHROUGH */ comment
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wimplicit-fallthrough=3" >&5
+printf %s "checking whether C compiler handles -Wimplicit-fallthrough=3... " >&6; }
+if test ${gl_cv_warn_c__Wimplicit_fallthrough_3+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ gl_save_compiler_FLAGS="$CFLAGS"
+ as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wimplicit-fallthrough=3"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gl_cv_warn_c__Wimplicit_fallthrough_3=yes
+else $as_nop
+ gl_cv_warn_c__Wimplicit_fallthrough_3=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ CFLAGS="$gl_save_compiler_FLAGS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wimplicit_fallthrough_3" >&5
+printf "%s\n" "$gl_cv_warn_c__Wimplicit_fallthrough_3" >&6; }
+if test "x$gl_cv_warn_c__Wimplicit_fallthrough_3" = xyes
+then :
+ as_fn_append WARN_CFLAGS " -Wimplicit-fallthrough=3"
+fi
+
+
+
+
+
+
+printf "%s\n" "#define lint 1" >>confdefs.h
+
+
+printf "%s\n" "#define _FORTIFY_SOURCE 2" >>confdefs.h
+
+
+printf "%s\n" "#define GNULIB_PORTCHECK 1" >>confdefs.h
+
+fi
+
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+printf %s "checking size of off_t... " >&6; }
+if test ${ac_cv_sizeof_off_t+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+
+"
+then :
+
+else $as_nop
+ if test "$ac_cv_type_off_t" = yes; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (off_t)
+See \`config.log' for more details" "$LINENO" 5; }
+ else
+ ac_cv_sizeof_off_t=0
+ fi
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+printf "%s\n" "$ac_cv_sizeof_off_t" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_OFF_T $ac_cv_sizeof_off_t" >>confdefs.h
+
+
+
+# Check whether --enable-shared was given.
+if test ${enable_shared+y}
+then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+if test "$OS" = linux && test $ac_cv_sizeof_off_t -lt 8; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: off_t is less than 8 bytes. Using llseek syscall" >&5
+printf "%s\n" "$as_me: WARNING: off_t is less than 8 bytes. Using llseek syscall" >&2;}
+ # Check whether --enable-shared was given.
+if test ${enable_shared+y}
+then :
+ enableval=$enable_shared; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_shared=no
+fi
+
+
+
+
+
+
+fi
+case `pwd` in
+ *\ * | *\ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.4.7'
+macro_revision='2.4.7'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+printf %s "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO ""
+}
+
+case $ECHO in
+ printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+printf "%s\n" "printf" >&6; } ;;
+ print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+printf "%s\n" "print -r" >&6; } ;;
+ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+printf "%s\n" "cat" >&6; } ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in sed gsed
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+printf %s "checking for fgrep... " >&6; }
+if test ${ac_cv_path_FGREP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in fgrep
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ printf %s 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ printf "%s\n" 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+printf "%s\n" "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${lt_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test ${lt_cv_path_NM+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+printf "%s\n" "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in dumpbin "link -dump"
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+printf "%s\n" "$DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$DUMPBIN" && break
+ done
+fi
+if test -z "$DUMPBIN"; then
+ ac_ct_DUMPBIN=$DUMPBIN
+ for ac_prog in dumpbin "link -dump"
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DUMPBIN"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_DUMPBIN" && break
+done
+
+ if test "x$ac_ct_DUMPBIN" = x; then
+ DUMPBIN=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DUMPBIN=$ac_ct_DUMPBIN
+ fi
+fi
+
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+printf %s "checking the name lister ($NM) interface... " >&6; }
+if test ${lt_cv_nm_interface+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&5
+ (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+ cat conftest.out >&5
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+printf "%s\n" "$lt_cv_nm_interface" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+printf %s "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+printf "%s\n" "no, using $LN_S" >&6; }
+fi
+
+# find the maximum length of command line arguments
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+printf %s "checking the maximum length of command line arguments... " >&6; }
+if test ${lt_cv_sys_max_cmd_len+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+
+fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
+printf "%s\n" "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+printf %s "checking how to convert $build file names to $host format... " >&6; }
+if test ${lt_cv_to_host_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+
+fi
+
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+printf %s "checking how to convert $build file names to toolchain format... " >&6; }
+if test ${lt_cv_to_tool_file_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+
+fi
+
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+printf %s "checking for $LD option to reload object files... " >&6; }
+if test ${lt_cv_ld_reload_flag+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_reload_flag='-r'
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
+set dummy ${ac_tool_prefix}file; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$FILECMD"; then
+ ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_FILECMD="${ac_tool_prefix}file"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+FILECMD=$ac_cv_prog_FILECMD
+if test -n "$FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
+printf "%s\n" "$FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_FILECMD"; then
+ ac_ct_FILECMD=$FILECMD
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_FILECMD"; then
+ ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_FILECMD="file"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
+if test -n "$ac_ct_FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
+printf "%s\n" "$ac_ct_FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_FILECMD" = x; then
+ FILECMD=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ FILECMD=$ac_ct_FILECMD
+ fi
+else
+ FILECMD="$ac_cv_prog_FILECMD"
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OBJDUMP"; then
+ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+printf "%s\n" "$OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+ ac_ct_OBJDUMP=$OBJDUMP
+ # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OBJDUMP"; then
+ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OBJDUMP="objdump"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OBJDUMP" = x; then
+ OBJDUMP="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJDUMP=$ac_ct_OBJDUMP
+ fi
+else
+ OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+printf %s "checking how to recognize dependent libraries... " >&6; }
+if test ${lt_cv_deplibs_check_method+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[45]*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='$FILECMD -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=$FILECMD
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[3-9]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DLLTOOL"; then
+ ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+printf "%s\n" "$DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+ ac_ct_DLLTOOL=$DLLTOOL
+ # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DLLTOOL"; then
+ ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DLLTOOL" = x; then
+ DLLTOOL="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DLLTOOL=$ac_ct_DLLTOOL
+ fi
+else
+ DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+printf %s "checking how to associate runtime and link libraries... " >&6; }
+if test ${lt_cv_sharedlib_from_linklib_cmd+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in ar
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$AR" && break
+ done
+fi
+if test -z "$AR"; then
+ ac_ct_AR=$AR
+ for ac_prog in ar
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="$ac_prog"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_AR" && break
+done
+
+ if test "x$ac_ct_AR" = x; then
+ AR="false"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+fi
+
+: ${AR=ar}
+
+
+
+
+
+
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+
+
+
+
+
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+printf %s "checking for archiver @FILE support... " >&6; }
+if test ${lt_cv_ar_at_file+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ar_at_file=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+ (eval $lt_ar_try) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+printf "%s\n" "$lt_cv_ar_at_file" >&6; }
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+printf "%s\n" "$STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_STRIP+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+printf "%s\n" "$ac_ct_STRIP" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+printf %s "checking command to parse $NM output from $compiler object... " >&6; }
+if test ${lt_cv_sys_global_symbol_pipe+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[ABCDEGRST]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+osf*)
+ symcode='[BCDEGQRST]'
+ ;;
+solaris*)
+ symcode='[BDRT]'
+ ;;
+sco3.2v5*)
+ symcode='[DT]'
+ ;;
+sysv4.2uw2*)
+ symcode='[DT]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[ABDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[ABCDGIRSTW]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK '"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx"
+ else
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+printf "%s\n" "failed" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+printf "%s\n" "ok" >&6; }
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+printf %s "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test ${with_sysroot+y}
+then :
+ withval=$with_sysroot;
+else $as_nop
+ with_sysroot=no
+fi
+
+
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+printf "%s\n" "$with_sysroot" >&6; }
+ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+ ;;
+esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+printf "%s\n" "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+printf %s "checking for a working dd... " >&6; }
+if test ${ac_cv_path_lt_DD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+ ac_path_lt_DD_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_prog in dd
+ do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext"
+ as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+ $ac_path_lt_DD_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_lt_DD"; then
+ :
+ fi
+else
+ ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+printf %s "checking how to truncate binary pipes... " >&6; }
+if test ${lt_cv_truncate_bin+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+printf "%s\n" "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+# Check whether --enable-libtool-lock was given.
+if test ${enable_libtool_lock+y}
+then :
+ enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ emul=elf
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `$FILECMD conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+printf %s "checking whether the C compiler needs -belf... " >&6; }
+if test ${lt_cv_cc_needs_belf+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_cc_needs_belf=yes
+else $as_nop
+ lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ case `$FILECMD conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$MANIFEST_TOOL"; then
+ ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+printf "%s\n" "$MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+ ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_MANIFEST_TOOL"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_MANIFEST_TOOL" = x; then
+ MANIFEST_TOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+ fi
+else
+ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
+
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if test ${lt_cv_path_mainfest_tool+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&5
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+
+
+
+
+
+
+ case $host_os in
+ rhapsody* | darwin*)
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$DSYMUTIL"; then
+ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+printf "%s\n" "$DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+ ac_ct_DSYMUTIL=$DSYMUTIL
+ # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_DSYMUTIL"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_DSYMUTIL" = x; then
+ DSYMUTIL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ DSYMUTIL=$ac_ct_DSYMUTIL
+ fi
+else
+ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$NMEDIT"; then
+ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+printf "%s\n" "$NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+ ac_ct_NMEDIT=$NMEDIT
+ # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_NMEDIT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_NMEDIT"; then
+ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NMEDIT="nmedit"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+printf "%s\n" "$ac_ct_NMEDIT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_NMEDIT" = x; then
+ NMEDIT=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NMEDIT=$ac_ct_NMEDIT
+ fi
+else
+ NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$LIPO"; then
+ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+printf "%s\n" "$LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+ ac_ct_LIPO=$LIPO
+ # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_LIPO+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_LIPO"; then
+ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LIPO="lipo"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+printf "%s\n" "$ac_ct_LIPO" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_LIPO" = x; then
+ LIPO=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LIPO=$ac_ct_LIPO
+ fi
+else
+ LIPO="$ac_cv_prog_LIPO"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL"; then
+ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+printf "%s\n" "$OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+ ac_ct_OTOOL=$OTOOL
+ # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL"; then
+ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL="otool"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+printf "%s\n" "$ac_ct_OTOOL" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL" = x; then
+ OTOOL=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL=$ac_ct_OTOOL
+ fi
+else
+ OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$OTOOL64"; then
+ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+printf "%s\n" "$OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+ ac_ct_OTOOL64=$OTOOL64
+ # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_OTOOL64+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_OTOOL64"; then
+ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_OTOOL64="otool64"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+printf "%s\n" "$ac_ct_OTOOL64" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_OTOOL64" = x; then
+ OTOOL64=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OTOOL64=$ac_ct_OTOOL64
+ fi
+else
+ OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+printf %s "checking for -single_module linker flag... " >&6; }
+if test ${lt_cv_apple_cc_single_mod+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&5
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+printf %s "checking for -exported_symbols_list linker flag... " >&6; }
+if test ${lt_cv_ld_exported_symbols_list+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_ld_exported_symbols_list=yes
+else $as_nop
+ lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+printf %s "checking for -force_load linker flag... " >&6; }
+if test ${lt_cv_ld_force_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&5
+ echo "$RANLIB libconftest.a" >&5
+ $RANLIB libconftest.a 2>&5
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&5
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&5
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+printf "%s\n" "$lt_cv_ld_force_load" >&6; }
+ case $host_os in
+ rhapsody* | darwin1.[012])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[012],*|,*powerpc*-darwin[5-8]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
+
+fi
+
+
+
+
+
+# Set options
+
+
+
+ enable_dlopen=no
+
+
+ enable_win32_dll=no
+
+
+
+ # Check whether --enable-static was given.
+if test ${enable_static+y}
+then :
+ enableval=$enable_static; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test ${with_pic+y}
+then :
+ withval=$with_pic; lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ pic_mode=default
+fi
+
+
+
+
+
+
+
+
+ # Check whether --enable-fast-install was given.
+if test ${enable_fast_install+y}
+then :
+ enableval=$enable_fast_install; p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac
+else $as_nop
+ enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+ shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+printf %s "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test ${with_aix_soname+y}
+then :
+ withval=$with_aix_soname; case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname
+else $as_nop
+ if test ${lt_cv_with_aix_soname+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_with_aix_soname=aix
+fi
+
+ with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+printf "%s\n" "$with_aix_soname" >&6; }
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+printf %s "checking for objdir... " >&6; }
+if test ${lt_cv_objdir+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+printf "%s\n" "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
+
+
+
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+printf %s "checking for ${ac_tool_prefix}file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/${ac_tool_prefix}file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+printf %s "checking for file... " >&6; }
+if test ${lt_cv_path_MAGIC_CMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $MAGIC_CMD in
+[\\/*] | ?:[\\/]*)
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/file"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+printf "%s\n" "$MAGIC_CMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+ *)
+ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+ esac
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test ${lt_cv_prog_compiler_rtti_exceptions+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_rtti_exceptions=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_rtti_exceptions=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+ :
+fi
+
+fi
+
+
+
+
+
+
+ lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+
+ if test yes = "$GCC"; then
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_static='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ lt_prog_compiler_static=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[3-9]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ lt_prog_compiler_can_build_shared=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ lt_prog_compiler_pic='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ lt_prog_compiler_wl='-Xlinker '
+ if test -n "$lt_prog_compiler_pic"; then
+ lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ lt_prog_compiler_wl='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ lt_prog_compiler_static='-Bstatic'
+ else
+ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_prog_compiler_pic='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_prog_compiler_pic='-DDLL_EXPORT'
+ case $host_os in
+ os2*)
+ lt_prog_compiler_static='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ lt_prog_compiler_pic='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ lt_prog_compiler_static='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_prog_compiler_wl='-Wl,'
+ # PIC (with -KPIC) is the default.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='--shared'
+ lt_prog_compiler_static='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ lt_prog_compiler_wl='-Wl,-Wl,,'
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ ccc*)
+ lt_prog_compiler_wl='-Wl,'
+ # All Alpha code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-qpic'
+ lt_prog_compiler_static='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ lt_prog_compiler_wl='-Wl,'
+ ;;
+ *Intel*\ [CF]*Compiler*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+ *Portland\ Group*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-fpic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ lt_prog_compiler_pic='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ lt_prog_compiler_wl='-Wl,'
+ # All OSF/1 code is PIC.
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ rdos*)
+ lt_prog_compiler_static='-non_shared'
+ ;;
+
+ solaris*)
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ lt_prog_compiler_wl='-Qoption ld ';;
+ *)
+ lt_prog_compiler_wl='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ lt_prog_compiler_wl='-Qoption ld '
+ lt_prog_compiler_pic='-PIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_prog_compiler_pic='-Kconform_pic'
+ lt_prog_compiler_static='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ unicos*)
+ lt_prog_compiler_wl='-Wl,'
+ lt_prog_compiler_can_build_shared=no
+ ;;
+
+ uts4*)
+ lt_prog_compiler_pic='-pic'
+ lt_prog_compiler_static='-Bstatic'
+ ;;
+
+ *)
+ lt_prog_compiler_can_build_shared=no
+ ;;
+ esac
+ fi
+
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ lt_prog_compiler_pic=
+ ;;
+ *)
+ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+ ;;
+esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+printf %s "checking for $compiler option to produce PIC... " >&6; }
+if test ${lt_cv_prog_compiler_pic+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test ${lt_cv_prog_compiler_pic_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_pic_works=no
+ ac_outfile=conftest.$ac_objext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_pic_works=yes
+ fi
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+ case $lt_prog_compiler_pic in
+ "" | " "*) ;;
+ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+ esac
+else
+ lt_prog_compiler_pic=
+ lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test ${lt_cv_prog_compiler_static_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_static_works=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ else
+ lt_cv_prog_compiler_static_works=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+ :
+else
+ lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test ${lt_cv_prog_compiler_c_o+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler_c_o=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler_c_o=yes
+ fi
+ fi
+ chmod u+w . 2>&5
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+printf %s "checking if we can lock with hard links... " >&6; }
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+printf "%s\n" "$hard_links" >&6; }
+ if test no = "$hard_links"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+ runpath_var=
+ allow_undefined_flag=
+ always_export_symbols=no
+ archive_cmds=
+ archive_expsym_cmds=
+ compiler_needs_object=no
+ enable_shared_with_static_runtimes=no
+ export_dynamic_flag_spec=
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ hardcode_automatic=no
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ hardcode_libdir_flag_spec=
+ hardcode_libdir_separator=
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=unsupported
+ inherit_rpath=no
+ link_all_deplibs=unknown
+ module_cmds=
+ module_expsym_cmds=
+ old_archive_from_new_cmds=
+ old_archive_from_expsyms_cmds=
+ thread_safe_flag_spec=
+ whole_archive_flag_spec=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ include_expsyms=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ ld_shlibs=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+ *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ export_dynamic_flag_spec='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[3-9]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+ # as there is no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ export_dynamic_flag_spec='$wl--export-all-symbols'
+ allow_undefined_flag=unsupported
+ always_export_symbols=no
+ enable_shared_with_static_runtimes=yes
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+ exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ haiku*)
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ link_all_deplibs=yes
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
+ ;;
+
+ interix[3-9]*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ whole_archive_flag_spec=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C 5.9
+ whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ compiler_needs_object=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ export_dynamic_flag_spec='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+ ld_shlibs=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test no = "$ld_shlibs"; then
+ runpath_var=
+ hardcode_libdir_flag_spec=
+ export_dynamic_flag_spec=
+ whole_archive_flag_spec=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ archive_cmds=''
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ file_list_spec='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ hardcode_direct=no
+ hardcode_direct_absolute=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ export_dynamic_flag_spec='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ always_export_symbols=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ if test ${lt_cv_aix_libpath_+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+
+ lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }'
+ lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test -z "$lt_cv_aix_libpath_"; then
+ lt_cv_aix_libpath_=/usr/lib:/lib
+ fi
+
+fi
+
+ aix_libpath=$lt_cv_aix_libpath_
+fi
+
+ hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ no_undefined_flag=' $wl-bernotok'
+ allow_undefined_flag=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ whole_archive_flag_spec='$convenience'
+ fi
+ archive_cmds_need_lc=yes
+ archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ archive_expsym_cmds=''
+ ;;
+ m68k)
+ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[45]*)
+ export_dynamic_flag_spec=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl* | icl*)
+ # Native MSVC or ICC
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ file_list_spec='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+ enable_shared_with_static_runtimes=yes
+ exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ old_postinstall_cmds='chmod 644 $oldlib'
+ postlink_cmds='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC and ICC wrapper
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ enable_shared_with_static_runtimes=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+
+
+ archive_cmds_need_lc=no
+ hardcode_direct=no
+ hardcode_automatic=yes
+ hardcode_shlibpath_var=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+ else
+ whole_archive_flag_spec=''
+ fi
+ link_all_deplibs=yes
+ allow_undefined_flag=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+ else
+ ld_shlibs=no
+ fi
+
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly* | midnightbsd*)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ export_dynamic_flag_spec='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+printf %s "checking if $CC understands -b... " >&6; }
+if test ${lt_cv_prog_compiler__b+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_prog_compiler__b=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -b"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ lt_cv_prog_compiler__b=yes
+ fi
+ else
+ lt_cv_prog_compiler__b=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
+
+if test yes = "$lt_cv_prog_compiler__b"; then
+ archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
+
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+ hardcode_libdir_separator=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ hardcode_direct=no
+ hardcode_shlibpath_var=no
+ ;;
+ *)
+ hardcode_direct=yes
+ hardcode_direct_absolute=yes
+ export_dynamic_flag_spec='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ hardcode_minus_L=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if test ${lt_cv_irix_exported_symbol+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int foo (void) { return 0; }
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ lt_cv_irix_exported_symbol=yes
+else $as_nop
+ lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ else
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ inherit_rpath=yes
+ link_all_deplibs=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ ld_shlibs=yes
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ hardcode_direct_absolute=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ export_dynamic_flag_spec='$wl-E'
+ else
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+ fi
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ shrext_cmds=.dll
+ archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+ archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ archive_cmds_need_lc='no'
+ hardcode_libdir_separator=:
+ ;;
+
+ solaris*)
+ no_undefined_flag=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ reload_cmds='$CC -r -o $output$reload_objs'
+ hardcode_direct=no
+ ;;
+ motorola)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+ no_undefined_flag='$wl-z,text'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ no_undefined_flag='$wl-z,text'
+ allow_undefined_flag='$wl-z,nodefs'
+ archive_cmds_need_lc=no
+ hardcode_shlibpath_var=no
+ hardcode_libdir_flag_spec='$wl-R,$libdir'
+ hardcode_libdir_separator=':'
+ link_all_deplibs=yes
+ export_dynamic_flag_spec='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ export_dynamic_flag_spec='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+printf "%s\n" "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+ # Assume -lc should be added
+ archive_cmds_need_lc=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+printf %s "checking whether -lc should be explicitly linked in... " >&6; }
+if test ${lt_cv_archive_cmds_need_lc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ $RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_prog_compiler_wl
+ pic_flag=$lt_prog_compiler_pic
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
+ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+printf %s "checking dynamic linker characteristics... " >&6; }
+
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[lt_foo]++; }
+ if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[4-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a(lib.so.V)'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[45]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC and ICC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[23].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[3-9]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ hardcode_libdir_flag_spec='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ if test ${lt_cv_shlibpath_overrides_runpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
+then :
+ lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+
+fi
+
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Add ABI-specific directories to the system library path.
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+printf "%s\n" "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+printf %s "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+ test -n "$runpath_var" ||
+ test yes = "$hardcode_automatic"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$hardcode_direct" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+ test no != "$hardcode_minus_L"; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+printf "%s\n" "$hardcode_action" >&6; }
+
+if test relink = "$hardcode_action" ||
+ test yes = "$inherit_rpath"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+
+
+
+
+
+ if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else $as_nop
+
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+
+fi
+
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes
+then :
+ lt_cv_dlopen=shl_load
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+printf %s "checking for shl_load in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_shl_load+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char shl_load ();
+int
+main (void)
+{
+return shl_load ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_shl_load=yes
+else $as_nop
+ ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes
+then :
+ lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else $as_nop
+ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dl_dlopen=yes
+else $as_nop
+ ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+printf %s "checking for dlopen in -lsvld... " >&6; }
+if test ${ac_cv_lib_svld_dlopen+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dlopen ();
+int
+main (void)
+{
+return dlopen ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_svld_dlopen=yes
+else $as_nop
+ ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes
+then :
+ lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else $as_nop
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+printf %s "checking for dld_link in -ldld... " >&6; }
+if test ${ac_cv_lib_dld_dld_link+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dld_link ();
+int
+main (void)
+{
+return dld_link ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_dld_dld_link=yes
+else $as_nop
+ ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes
+then :
+ lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+printf %s "checking whether a program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+printf "%s\n" "$lt_cv_dlopen_self" >&6; }
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
+if test ${lt_cv_dlopen_self_static+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test yes = "$cross_compiling"; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}
+_LT_EOF
+ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&5 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+printf %s "checking whether stripping libraries is possible... " >&6; }
+if test -z "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+else
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ;;
+ esac
+ fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+ # Report what library types will actually be built
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+printf %s "checking if libtool supports shared libraries... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+printf "%s\n" "$can_build_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+printf %s "checking whether to build shared libraries... " >&6; }
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[4-9]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+printf "%s\n" "$enable_shared" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+printf %s "checking whether to build static libraries... " >&6; }
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+printf "%s\n" "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+
+
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5
+printf %s "checking for ld used by GCC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${acl_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ # Check whether --enable-rpath was given.
+if test ${enable_rpath+y}
+then :
+ enableval=$enable_rpath; :
+else $as_nop
+ enable_rpath=yes
+fi
+
+
+
+
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+printf %s "checking for 64-bit host... " >&6; }
+if test ${gl_cv_solaris_64bit+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#ifdef _LP64
+sixtyfour bits
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "sixtyfour bits" >/dev/null 2>&1
+then :
+ gl_cv_solaris_64bit=yes
+else $as_nop
+ gl_cv_solaris_64bit=no
+fi
+rm -rf conftest*
+
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+printf "%s\n" "$gl_cv_solaris_64bit" >&6; }
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test ${with_libiconv_prefix+y}
+then :
+ withval=$with_libiconv_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBICONV=
+ LTLIBICONV=
+ INCICONV=
+ LIBICONV_PREFIX=
+ HAVE_LIBICONV=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='iconv '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'iconv'; then
+ LIBICONV_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBICONV; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ am_cv_func_iconv_works=yes
+else $as_nop
+ am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$am_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+ if test "$am_cv_func_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+printf %s "checking for iconv declaration... " >&6; }
+ if test ${am_cv_proto_iconv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ am_cv_proto_iconv_arg1=""
+else $as_nop
+ am_cv_proto_iconv_arg1="const"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+ am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
+ $am_cv_proto_iconv" >&5
+printf "%s\n" "
+ $am_cv_proto_iconv" >&6; }
+
+printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h
+
+ fi
+
+
+
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+ [\\/$]* | ?:[\\/]*) ;;
+ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+printf %s "checking whether NLS is requested... " >&6; }
+ # Check whether --enable-nls was given.
+if test ${enable_nls+y}
+then :
+ enableval=$enable_nls; USE_NLS=$enableval
+else $as_nop
+ USE_NLS=yes
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+
+
+
+
+ GETTEXT_MACRO_VERSION=0.18
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGFMT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+ ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+printf "%s\n" "$MSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GMSGFMT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $GMSGFMT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+ ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+printf "%s\n" "$GMSGFMT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_XGETTEXT+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$XGETTEXT" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+ ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+ ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+printf "%s\n" "$XGETTEXT" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ rm -f messages.po
+
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGMERGE+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case "$MSGMERGE" in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&5
+ if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+ ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+ test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+ ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+printf "%s\n" "$MSGMERGE" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$localedir" || localedir='${datadir}/locale'
+
+
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+ ac_config_commands="$ac_config_commands po-directories"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFPreferences.h>
+int
+main (void)
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFPreferencesCopyAppValue=yes
+else $as_nop
+ gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <CoreFoundation/CFLocale.h>
+int
+main (void)
+{
+CFLocaleCopyPreferredLanguages();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ gt_cv_func_CFLocaleCopyPreferredLanguages=yes
+else $as_nop
+ gt_cv_func_CFLocaleCopyPreferredLanguages=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$gt_save_LIBS"
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+ if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+
+printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+
+
+
+
+
+
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+printf %s "checking for GNU gettext in libc... " >&6; }
+if eval test \${$gt_func_gnugettext_libc+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main (void)
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libc=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libc=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$gt_func_gnugettext_libc
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+ am_save_CPPFLAGS="$CPPFLAGS"
+
+ for element in $INCICONV; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main (void)
+{
+iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ am_cv_lib_iconv=yes
+ am_cv_func_iconv=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$am_save_LIBS"
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
+ if test "$am_cv_func_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ if test "$cross_compiling" = yes
+then :
+ case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ am_cv_func_iconv_works=yes
+else $as_nop
+ am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ LIBS="$am_save_LIBS"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
+
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
+ else
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+
+
+
+
+
+
+
+
+
+
+
+ use_additional=yes
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test ${with_libintl_prefix+y}
+then :
+ withval=$with_libintl_prefix;
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+
+fi
+
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ LIBINTL_PREFIX=
+ HAVE_LIBINTL=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='intl '
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+ else
+ :
+ fi
+ else
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ if test "$acl_hardcode_direct" = yes; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+ fi
+ fi
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = 'intl'; then
+ LIBINTL_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INCINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test -n "$found_la"; then
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIBINTL; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ else
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ for found_dir in $ltrpathdirs; do
+ LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+ done
+ fi
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+printf %s "checking for GNU gettext in libintl... " >&6; }
+if eval test \${$gt_func_gnugettext_libintl+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main (void)
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ eval "$gt_func_gnugettext_libintl=yes"
+else $as_nop
+ eval "$gt_func_gnugettext_libintl=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main (void)
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"
+fi
+eval ac_res=\$$gt_func_gnugettext_libintl
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+ fi
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h
+
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+printf %s "checking whether to use NLS... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
+ if test "$USE_NLS" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+printf %s "checking where the gettext function comes from... " >&6; }
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+printf "%s\n" "$gt_source" >&6; }
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+printf %s "checking how to link with libintl... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+printf "%s\n" "$LIBINTL" >&6; }
+
+ for element in $INCINTL; do
+ haveit=
+ for x in $CPPFLAGS; do
+
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ eval x=\"$x\"
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+ fi
+ done
+
+ fi
+
+
+printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+ fi
+
+ POSUB=po
+ fi
+
+
+
+ INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+ as_fn_error $? "
+GNU Parted requires gettext to be installed for compilation -
+if native language support is desired. Either disable native language support
+with:
+ $ ./configure --disable-nls
+Or install gettext. GNU gettext is available from
+ http://ftp.gnu.org/gnu/gettext
+" "$LINENO" 5
+fi
+
+UUID_LIBS=""
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5
+printf %s "checking for uuid_generate in -luuid... " >&6; }
+if test ${ac_cv_lib_uuid_uuid_generate+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-luuid $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char uuid_generate ();
+int
+main (void)
+{
+return uuid_generate ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_uuid_uuid_generate=yes
+else $as_nop
+ ac_cv_lib_uuid_uuid_generate=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5
+printf "%s\n" "$ac_cv_lib_uuid_uuid_generate" >&6; }
+if test "x$ac_cv_lib_uuid_uuid_generate" = xyes
+then :
+ UUID_LIBS="-luuid"
+else $as_nop
+ as_fn_error $? "GNU Parted requires libuuid - a part of the util-linux-ng package (but
+usually distributed separately in libuuid-devel, uuid-dev or similar)
+This can probably be found on your distribution's CD or FTP site or at:
+ http://userweb.kernel.org/~kzak/util-linux-ng/
+Note: originally, libuuid was part of the e2fsprogs package. Later, it
+moved to util-linux-ng-2.16, and that package is now the preferred source." "$LINENO" 5
+fi
+
+
+
+DM_LIBS=
+if test $ENABLE_DEVICE_MAPPER = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dm_task_create in -ldevmapper" >&5
+printf %s "checking for dm_task_create in -ldevmapper... " >&6; }
+if test ${ac_cv_lib_devmapper_dm_task_create+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldevmapper $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char dm_task_create ();
+int
+main (void)
+{
+return dm_task_create ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_devmapper_dm_task_create=yes
+else $as_nop
+ ac_cv_lib_devmapper_dm_task_create=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_devmapper_dm_task_create" >&5
+printf "%s\n" "$ac_cv_lib_devmapper_dm_task_create" >&6; }
+if test "x$ac_cv_lib_devmapper_dm_task_create" = xyes
+then :
+ DM_LIBS=-ldevmapper
+else $as_nop
+ as_fn_error $? "libdevmapper could not be found, but is required for the
+--enable-device-mapper option, which is enabled by default. Either disable
+device-mapper support with --disable-device-mapper or download and install
+device-mapper from:
+ http://sources.redhat.com/dm/
+Note: if you are using precompiled packages you will need the development
+package as well (it may be called device-mapper-devel or something similar).
+ " "$LINENO" 5
+
+fi
+
+fi
+
+
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS=""
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
+printf %s "checking for library containing tgetent... " >&6; }
+if test ${ac_cv_search_tgetent+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main (void)
+{
+return tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' tinfo ncurses curses termcap termlib
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_tgetent=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_tgetent+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_tgetent+y}
+then :
+
+else $as_nop
+ ac_cv_search_tgetent=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_tgetent" >&5
+printf "%s\n" "$ac_cv_search_tgetent" >&6; }
+ac_res=$ac_cv_search_tgetent
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ PARTED_LIBS="$PARTED_LIBS $LIBS"
+else $as_nop
+ as_fn_error $? "termcap could not be found which is required for the
+--with-readline option (which is enabled by default). Either disable readline
+support with --without-readline or download and install termcap from:
+ ftp.gnu.org/gnu/termcap
+Note: if you are using precompiled packages you will also need the development
+ package as well (which may be called termcap-devel or something similar).
+Note: (n)curses also seems to work as a substitute for termcap. This was
+ not found either - but you could try installing that as well." "$LINENO" 5
+fi
+
+ LIBS="$OLD_LIBS"
+fi
+
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS="$LIBS $PARTED_LIBS"
+ found_working_libreadline=no
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5
+printf %s "checking for readline in -lreadline... " >&6; }
+if test ${ac_cv_lib_readline_readline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lreadline $PARTED_LIBS
+ $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char readline ();
+int
+main (void)
+{
+return readline ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_readline_readline=yes
+else $as_nop
+ ac_cv_lib_readline_readline=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5
+printf "%s\n" "$ac_cv_lib_readline_readline" >&6; }
+if test "x$ac_cv_lib_readline_readline" = xyes
+then :
+ found_working_libreadline=yes
+else $as_nop
+ as_fn_error $? "GNU Readline could not be found which is required for the
+--with-readline (which is enabled by default). Either disable readline support with
+--without-readline or downloaded and install it from:
+ ftp.gnu.org/gnu/readline
+Note: if you are using precompiled packages you will also need the development
+package as well (which may be called readline-devel or something similar).
+" "$LINENO" 5
+
+fi
+
+ LIBS="$OLD_LIBS $PARTED_LIBS"
+
+ # See if libreadline is too old to be used.
+ # The readline function in Debian's libreadline5 5.0-10 fails to
+ # print to stdout the response (from stdin) to a prompt, when stdout
+ # is redirected, while 5.2-3 works fine. That failure would cause
+ # several of parted's tests to failure.
+ # The purist approach would be to write a run-test, but that's
+ # not friendly to cross-compilers, so here's a compromise:
+ #
+ # See if libreadline defines one of these symbols:
+ # [this is the list of public symbols that are in 5.2, but not 5.0]
+ #
+ # $ diff -u /tmp/readline-5.[02]|grep '+T.[^_]'
+ # +T rl_vi_rubout
+ # +T rl_variable_value
+ # +T rl_reset_screen_size
+ # +T alloc_history_entry
+ # +T copy_history_entry
+ # +T replace_history_data
+ #
+ # If not, then reject this readline lib.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rl_variable_value in -lreadline" >&5
+printf %s "checking for rl_variable_value in -lreadline... " >&6; }
+if test ${ac_cv_lib_readline_rl_variable_value+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lreadline $PARTED_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char rl_variable_value ();
+int
+main (void)
+{
+return rl_variable_value ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_readline_rl_variable_value=yes
+else $as_nop
+ ac_cv_lib_readline_rl_variable_value=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_rl_variable_value" >&5
+printf "%s\n" "$ac_cv_lib_readline_rl_variable_value" >&6; }
+if test "x$ac_cv_lib_readline_rl_variable_value" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBREADLINE 1" >>confdefs.h
+
+ LIBS="-lreadline $LIBS"
+
+else $as_nop
+ as_fn_error $? "Your version of libreadline is too old to be used.
+Consider upgrading to version 5.2 or newer." "$LINENO" 5
+ found_working_libreadline=no
+fi
+
+
+ if test $found_working_libreadline = yes; then
+ PARTED_LIBS="-lreadline $PARTED_LIBS"
+
+printf "%s\n" "#define HAVE_LIBREADLINE 1" >>confdefs.h
+
+ fi
+ LIBS="$OLD_LIBS"
+fi
+
+
+
+
+if test "$OS" = gnu; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for vm_deallocate in -lshouldbeinlibc" >&5
+printf %s "checking for vm_deallocate in -lshouldbeinlibc... " >&6; }
+if test ${ac_cv_lib_shouldbeinlibc_vm_deallocate+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lshouldbeinlibc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char vm_deallocate ();
+int
+main (void)
+{
+return vm_deallocate ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_shouldbeinlibc_vm_deallocate=yes
+else $as_nop
+ ac_cv_lib_shouldbeinlibc_vm_deallocate=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_shouldbeinlibc_vm_deallocate" >&5
+printf "%s\n" "$ac_cv_lib_shouldbeinlibc_vm_deallocate" >&6; }
+if test "x$ac_cv_lib_shouldbeinlibc_vm_deallocate" = xyes
+then :
+ OS_LIBS="$OS_LIBS -lshouldbeinlibc"
+else $as_nop
+ as_fn_error $? "GNU Parted requires libshouldbeinlibc when running on
+GNU/Hurd systems. It is a standard part of a GNU/Hurd system.
+ " "$LINENO" 5
+
+fi
+
+
+ OLD_LIBS="$LIBS"
+ LIBS=
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ped_device_read in -lparted" >&5
+printf %s "checking for ped_device_read in -lparted... " >&6; }
+if test ${ac_cv_lib_parted_ped_device_read+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lparted $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char ped_device_read ();
+int
+main (void)
+{
+return ped_device_read ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_parted_ped_device_read=yes
+else $as_nop
+ ac_cv_lib_parted_ped_device_read=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_parted_ped_device_read" >&5
+printf "%s\n" "$ac_cv_lib_parted_ped_device_read" >&6; }
+if test "x$ac_cv_lib_parted_ped_device_read" = xyes
+then :
+ printf "%s\n" "#define HAVE_LIBPARTED 1" >>confdefs.h
+
+ LIBS="-lparted $LIBS"
+
+fi
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for store_open in -lstore" >&5
+printf %s "checking for store_open in -lstore... " >&6; }
+if test ${ac_cv_lib_store_store_open+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lstore $OS_LIBS $UUID_LIBS $DM_LIBS $LIBS
+ $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char store_open ();
+int
+main (void)
+{
+return store_open ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_store_store_open=yes
+else $as_nop
+ ac_cv_lib_store_store_open=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_store_store_open" >&5
+printf "%s\n" "$ac_cv_lib_store_store_open" >&6; }
+if test "x$ac_cv_lib_store_store_open" = xyes
+then :
+ OS_LIBS="$OS_LIBS -lstore"
+else $as_nop
+ as_fn_error $? "GNU Parted requires libstore when running on GNU/Hurd
+systems. It is a standard part of a GNU/Hurd system.
+ " "$LINENO" 5
+
+fi
+
+ LIBS="$OLD_LIBS"
+fi
+
+
+if test "$OS" = beos; then
+ OS_LIBS="$OS_LIBS -lsocket"
+fi
+
+
+
+
+
+
+ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "$ac_includes_default"
+if test "x$ac_cv_header_uuid_uuid_h" = xyes
+then :
+
+else $as_nop
+ as_fn_error $? "GNU Parted requires libuuid - a part of the e2fsprogs package.
+You seem to have the library installed but not the headers. These are usually
+found in a corresponding development package (usually called e2fsprogs-devel).
+If you can't find one try:
+ http://web.mit.edu/tytso/www/linux/e2fsprogs.html" "$LINENO" 5
+
+fi
+
+
+ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default"
+if test "x$ac_cv_header_getopt_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "linux/ext2_fs.h" "ac_cv_header_linux_ext2_fs_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_ext2_fs_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_LINUX_EXT2_FS_H 1" >>confdefs.h
+
+fi
+
+
+if test "$OS" = linux; then
+ ac_fn_c_check_header_compile "$LINENO" "linux/unistd.h" "ac_cv_header_linux_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_unistd_h" = xyes
+then :
+
+fi
+
+fi
+
+if test "$with_readline" = yes; then
+ for ac_header in readline/readline.h readline/history.h
+do :
+ as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
+ cat >>confdefs.h <<_ACEOF
+#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else $as_nop
+ as_fn_error $? "The headers for GNU Readline could not be found which
+are required for the --with-readline option. You seem to have the GNU readline
+library installed but not the headers. These are usually found in a
+corresponding development package (usually called readline-devel). If you can't
+find one try:
+ ftp.gnu.org/gnu/readline
+Alternatively you can disable readline support with --without-readline" "$LINENO" 5
+
+fi
+
+done
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "termcap.h" "ac_cv_header_termcap_h" "$ac_includes_default"
+if test "x$ac_cv_header_termcap_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_TERMCAP_H 1" >>confdefs.h
+
+fi
+
+
+if test "$USE_NLS" = yes; then
+ for ac_header in wctype.h
+do :
+ ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_wctype_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_WCTYPE_H 1" >>confdefs.h
+
+else $as_nop
+ as_fn_error $? "One or more of the header files that are required for
+native language support (wctype.h) could not be found. Either get a newer
+version of GNU libc and its headers - which can be obtained from:
+ ftp.gnu.org/gnu/glibc
+Or disable native language support with the --disable-nls option" "$LINENO" 5
+
+fi
+
+done
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "execinfo.h" "ac_cv_header_execinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_execinfo_h" = xyes
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for backtrace in -lc" >&5
+printf %s "checking for backtrace in -lc... " >&6; }
+if test ${ac_cv_lib_c_backtrace+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char backtrace ();
+int
+main (void)
+{
+return backtrace ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_c_backtrace=yes
+else $as_nop
+ ac_cv_lib_c_backtrace=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_backtrace" >&5
+printf "%s\n" "$ac_cv_lib_c_backtrace" >&6; }
+if test "x$ac_cv_lib_c_backtrace" = xyes
+then :
+
+
+printf "%s\n" "#define HAVE_BACKTRACE 1" >>confdefs.h
+
+ LDFLAGS="$LDFLAGS -rdynamic"
+
+fi
+
+
+fi
+
+
+ if test "$host_cpu" = s390 || test "$host_cpu" = s390x; then
+ COMPILE_FOR_S390_TRUE=
+ COMPILE_FOR_S390_FALSE='#'
+else
+ COMPILE_FOR_S390_TRUE='#'
+ COMPILE_FOR_S390_FALSE=
+fi
+
+
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_PKG_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+printf "%s\n" "$PKG_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ PKG_CONFIG=""
+ fi
+fi
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5
+printf %s "checking for CHECK... " >&6; }
+
+if test -n "$CHECK_CFLAGS"; then
+ pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "check >= 0.9.3") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CHECK_CFLAGS=`$PKG_CONFIG --cflags "check >= 0.9.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$CHECK_LIBS"; then
+ pkg_cv_CHECK_LIBS="$CHECK_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check >= 0.9.3\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "check >= 0.9.3") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_CHECK_LIBS=`$PKG_CONFIG --libs "check >= 0.9.3" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "check >= 0.9.3" 2>&1`
+ else
+ CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "check >= 0.9.3" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$CHECK_PKG_ERRORS" >&5
+
+ have_check=no
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ have_check=no
+else
+ CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS
+ CHECK_LIBS=$pkg_cv_CHECK_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ have_check=yes
+fi
+if test "$have_check" != "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Unable to locate check version 0.9.3 or higher: not building" >&5
+printf "%s\n" "Unable to locate check version 0.9.3 or higher: not building" >&6; }
+fi
+ if test "$have_check" = yes; then
+ HAVE_CHECK_TRUE=
+ HAVE_CHECK_FALSE='#'
+else
+ HAVE_CHECK_TRUE='#'
+ HAVE_CHECK_FALSE=
+fi
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test ${with_gnu_ld+y}
+then :
+ withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
+else $as_nop
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [\\/]* | ?:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
+fi
+if test ${lt_cv_path_LD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
+
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${lt_cv_prog_gnu_ld+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <sys/types.h>
+ #include <sys/param.h>
+
+int
+main (void)
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <limits.h>
+
+int
+main (void)
+{
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_bigendian=yes
+else $as_nop
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes
+then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+unsigned short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ unsigned short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ unsigned short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ unsigned short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+
+int
+main (void)
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main (void)
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+ ac_cv_c_bigendian=no
+else $as_nop
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+ no)
+ ;; #(
+ universal)
+
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+ ;; #(
+ *)
+ as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+printf %s "checking for inline... " >&6; }
+if test ${ac_cv_c_inline+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo (void) {return 0; }
+$ac_kw foo_t foo (void) {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+printf "%s\n" "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+ inline | yes) ;;
+ *)
+ case $ac_cv_c_inline in
+ no) ac_val=;;
+ *) ac_val=$ac_cv_c_inline;;
+ esac
+ cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+ ;;
+esac
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this sort of thing. */
+ typedef int charset[2];
+ const charset cs = { 0, 0 };
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *pcpcc;
+ char **ppc;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* IBM XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ pcpcc = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++pcpcc;
+ ppc = (char**) pcpcc;
+ pcpcc = (char const *const *) ppc;
+ { /* SCO 3.2v4 cc rejects this sort of thing. */
+ char tx;
+ char *t = &tx;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ if (s) return 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; } bx;
+ struct s *b = &bx; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ if (!foo) return 0;
+ }
+ return !cs[0] && !zero.x;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_const=yes
+else $as_nop
+ ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+printf "%s\n" "#define const /**/" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+printf %s "checking for C/C++ restrict keyword... " >&6; }
+if test ${ac_cv_c_restrict+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_cv_c_restrict=no
+ # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see:
+ # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html
+ # Put 'restrict' last, because C++ lacks it.
+ for ac_kw in __restrict__ __restrict _Restrict restrict; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+typedef int *int_ptr;
+ int foo (int_ptr $ac_kw ip) { return ip[0]; }
+ int bar (int [$ac_kw]); /* Catch GCC bug 14050. */
+ int bar (int ip[$ac_kw]) { return ip[0]; }
+
+int
+main (void)
+{
+int s[1];
+ int *$ac_kw t = s;
+ t[0] = 0;
+ return foo (t) + bar (t);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ test "$ac_cv_c_restrict" != no && break
+ done
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+printf "%s\n" "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) printf "%s\n" "#define restrict /**/" >>confdefs.h
+ ;;
+ *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h
+ ;;
+ esac
+
+
+ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction"
+if test "x$ac_cv_func_sigaction" = xyes
+then :
+ printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "getuid" "ac_cv_func_getuid"
+if test "x$ac_cv_func_getuid" = xyes
+then :
+ printf "%s\n" "#define HAVE_GETUID 1" >>confdefs.h
+
+fi
+
+
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS="$LIBS $PARTED_LIBS -lreadline"
+ ac_fn_c_check_func "$LINENO" "rl_completion_matches" "ac_cv_func_rl_completion_matches"
+if test "x$ac_cv_func_rl_completion_matches" = xyes
+then :
+ printf "%s\n" "#define HAVE_RL_COMPLETION_MATCHES 1" >>confdefs.h
+
+fi
+
+ LIBS="$OLD_LIBS"
+fi
+
+ac_fn_c_check_func "$LINENO" "canonicalize_file_name" "ac_cv_func_canonicalize_file_name"
+if test "x$ac_cv_func_canonicalize_file_name" = xyes
+then :
+ printf "%s\n" "#define HAVE_CANONICALIZE_FILE_NAME 1" >>confdefs.h
+
+fi
+
+
+DATE=$(date '+%d %b %Y %H:%M')
+USER=$(whoami)
+HOST=$(hostname)
+BUILDINFO="$USER@$HOST, $DATE"
+
+
+LIB_BLKID=
+
+pe_saved_libs=$LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing blkid_probe_get_topology" >&5
+printf %s "checking for library containing blkid_probe_get_topology... " >&6; }
+if test ${ac_cv_search_blkid_probe_get_topology+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char blkid_probe_get_topology ();
+int
+main (void)
+{
+return blkid_probe_get_topology ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' blkid
+do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_search_blkid_probe_get_topology=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext
+ if test ${ac_cv_search_blkid_probe_get_topology+y}
+then :
+ break
+fi
+done
+if test ${ac_cv_search_blkid_probe_get_topology+y}
+then :
+
+else $as_nop
+ ac_cv_search_blkid_probe_get_topology=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_blkid_probe_get_topology" >&5
+printf "%s\n" "$ac_cv_search_blkid_probe_get_topology" >&6; }
+ac_res=$ac_cv_search_blkid_probe_get_topology
+if test "$ac_res" != no
+then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ test "$ac_cv_search_blkid_probe_get_topology" = "none required" \
+ || LIB_BLKID=$ac_cv_search_blkid_probe_get_topology
+fi
+
+ ac_fn_c_check_func "$LINENO" "blkid_probe_get_topology" "ac_cv_func_blkid_probe_get_topology"
+if test "x$ac_cv_func_blkid_probe_get_topology" = xyes
+then :
+ use_blkid=1
+else $as_nop
+ use_blkid=0
+fi
+
+LIBS=$pe_saved_libs
+
+printf "%s\n" "#define USE_BLKID $use_blkid" >>confdefs.h
+
+
+
+
+ac_config_files="$ac_config_files Makefile lib/Makefile include/Makefile include/parted/Makefile libparted/Makefile libparted/labels/Makefile libparted/fs/Makefile libparted/tests/Makefile libparted.pc libparted-fs-resize.pc parted/Makefile partprobe/Makefile doc/Makefile doc/C/Makefile doc/pt_BR/Makefile debug/Makefile debug/test/Makefile tests/Makefile po/Makefile.in"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+printf %s "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
+printf "%s\n" "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+# Check whether --enable-year2038 was given.
+if test ${enable_year2038+y}
+then :
+ enableval=$enable_year2038;
+fi
+
+# Check whether --enable-largefile was given.
+if test ${enable_largefile+y}
+then :
+ enableval=$enable_largefile;
+fi
+
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+ as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=
+CONFIG_INCLUDE=lib/config.h
+
+
+ gl_libobjs=
+ gl_ltlibobjs=
+ gl_libobjdeps=
+ if test -n "$gl_LIBOBJS"; then
+ # Remove the extension.
+ sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+ for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+ gl_libobjs="$gl_libobjs $i.$ac_objext"
+ gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo"
+ done
+ fi
+ gl_LIBOBJS=$gl_libobjs
+
+ gl_LTLIBOBJS=$gl_ltlibobjs
+
+ gl_LIBOBJDEPS=$gl_libobjdeps
+
+
+
+
+ gltests_libobjs=
+ gltests_ltlibobjs=
+ gltests_libobjdeps=
+ if test -n "$gltests_LIBOBJS"; then
+ # Remove the extension.
+ sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+ for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+ gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+ gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo"
+ done
+ fi
+ gltests_LIBOBJS=$gltests_libobjs
+
+ gltests_LTLIBOBJS=$gltests_ltlibobjs
+
+ gltests_LIBOBJDEPS=$gltests_libobjdeps
+
+
+if test -z "${COMPILE_FOR_S390_TRUE}" && test -z "${COMPILE_FOR_S390_FALSE}"; then
+ as_fn_error $? "conditional \"COMPILE_FOR_S390\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_CHECK_TRUE}" && test -z "${HAVE_CHECK_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_CHECK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else $as_nop
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
+as_nl='
+'
+export as_nl
+IFS=" "" $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
+
+# The user is always right.
+if ${PATH_SEPARATOR+false} :; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ case $as_dir in #(((
+ '') as_dir=./ ;;
+ */) ;;
+ *) as_dir=$as_dir/ ;;
+ esac
+ test -r "$as_dir$0" && as_myself=$as_dir$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ printf "%s\n" "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else $as_nop
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else $as_nop
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n. New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU parted $as_me 3.6, which was
+generated by GNU Autoconf 2.71. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-parted@gnu.org>.
+GNU parted home page: <https://www.gnu.org/software/parted/>.
+General help using GNU software: <https://www.gnu.org/gethelp/>."
+
+_ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config='$ac_cs_config_escaped'
+ac_cs_version="\\
+GNU parted config.status 3.6
+configured by $0, generated by GNU Autoconf 2.71,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ printf "%s\n" "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ printf "%s\n" "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ printf "%s\n" "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ printf "%s\n" "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+GNUmakefile=$GNUmakefile
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+FILECMD \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[\\\\\\\`\\"\\\$]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'
+
+
+
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h:lib/config.h.in" ;;
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;;
+ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+ "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
+ "include/parted/Makefile") CONFIG_FILES="$CONFIG_FILES include/parted/Makefile" ;;
+ "libparted/Makefile") CONFIG_FILES="$CONFIG_FILES libparted/Makefile" ;;
+ "libparted/labels/Makefile") CONFIG_FILES="$CONFIG_FILES libparted/labels/Makefile" ;;
+ "libparted/fs/Makefile") CONFIG_FILES="$CONFIG_FILES libparted/fs/Makefile" ;;
+ "libparted/tests/Makefile") CONFIG_FILES="$CONFIG_FILES libparted/tests/Makefile" ;;
+ "libparted.pc") CONFIG_FILES="$CONFIG_FILES libparted.pc" ;;
+ "libparted-fs-resize.pc") CONFIG_FILES="$CONFIG_FILES libparted-fs-resize.pc" ;;
+ "parted/Makefile") CONFIG_FILES="$CONFIG_FILES parted/Makefile" ;;
+ "partprobe/Makefile") CONFIG_FILES="$CONFIG_FILES partprobe/Makefile" ;;
+ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "doc/C/Makefile") CONFIG_FILES="$CONFIG_FILES doc/C/Makefile" ;;
+ "doc/pt_BR/Makefile") CONFIG_FILES="$CONFIG_FILES doc/pt_BR/Makefile" ;;
+ "debug/Makefile") CONFIG_FILES="$CONFIG_FILES debug/Makefile" ;;
+ "debug/test/Makefile") CONFIG_FILES="$CONFIG_FILES debug/test/Makefile" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+ "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+ test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+ test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links
+ test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`printf "%s\n" "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ printf "%s\n" "/* $configure_input */" >&1 \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+ :L)
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+printf "%s\n" "$as_me: linking $ac_source to $ac_file" >&6;}
+
+ if test ! -r "$ac_source"; then
+ as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $ac_source in
+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+ fi
+ ;;
+ :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ # TODO: see whether this extra hack can be removed once we start
+ # requiring Autoconf 2.70 or later.
+ case $CONFIG_FILES in #(
+ *\'*) :
+ eval set x "$CONFIG_FILES" ;; #(
+ *) :
+ set x $CONFIG_FILES ;; #(
+ *) :
+ ;;
+esac
+ shift
+ # Used to flag and report bootstrapping failures.
+ am_rc=0
+ for am_mf
+ do
+ # Strip MF so we end up with the name of the file.
+ am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile which includes
+ # dependency-tracking related rules and includes.
+ # Grep'ing the whole file directly is not great: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+ || continue
+ am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$am_mf" : 'X\(//\)[^/]' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X"$am_mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$am_mf" : 'X\(//\)$' \| \
+ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+printf "%s\n" X/"$am_mf" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ { echo "$as_me:$LINENO: cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles" >&5
+ (cd "$am_dirpart" \
+ && sed -e '/# am--include-marker/d' "$am_filepart" \
+ | $MAKE -f - am--depfiles) >&5 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } || am_rc=$?
+ done
+ if test $am_rc -ne 0; then
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+ for automatic dependency tracking. If GNU make was not used, consider
+ re-running the configure script with MAKE=\"gmake\" (or whatever is
+ necessary). You can also try re-running configure with the
+ '--disable-dependency-tracking' option to at least be able to build
+ the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ { am_dirpart=; unset am_dirpart;}
+ { am_filepart=; unset am_filepart;}
+ { am_mf=; unset am_mf;}
+ { am_rc=; unset am_rc;}
+ rm -f conftest-deps.mk
+}
+ ;;
+ "libtool":C)
+
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
+
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
+
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
+
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
+
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
+
+# The archiver.
+AR=$lt_AR
+
+# Flags to create an archive (by configure).
+lt_ar_flags=$lt_ar_flags
+
+# Flags to create an archive.
+AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
+
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
+
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
+
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x$2 in
+ x)
+ ;;
+ *:)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+ ;;
+ x:*)
+ eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+ ;;
+ *)
+ eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+
+
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in $*""; do
+ case $cc_temp in
+ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+
+
+ltmain=$ac_aux_dir/ltmain.sh
+
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ $SED '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+
+ ;;
+ "po-directories":C)
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+echo
+echo Type \'make\' to compile parted.
+
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..cf9fb8a
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,573 @@
+dnl GNU Parted - a library and front end for manipulation hard disk partitions
+dnl Copyright (C) 1998-2002, 2005-2014, 2019-2023 Free Software Foundation,
+dnl Inc.
+dnl
+dnl This file may be modified and/or distributed without restriction.
+
+AC_PREREQ([2.71])
+AC_INIT([GNU parted],[m4_esyscmd(build-aux/git-version-gen .version)],[bug-parted@gnu.org])
+
+# When the most recent signed tag is v1.8.8.1,
+# the above might set e.g., PACKAGE_VERSION='1.8.8.1.1-0bfc'
+
+AC_CONFIG_SRCDIR([include/parted/parted.in.h])
+
+AC_CONFIG_HEADERS([lib/config.h:lib/config.h.in])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl Versioning
+dnl Shamelessly pulled straight from glib's configure.in ...
+dnl Making releases:
+dnl PED_MICRO_VERSION += 1;
+dnl PED_INTERFACE_AGE += 1;
+dnl PED_BINARY_AGE += 1;
+dnl if any functions have been added, set PED_INTERFACE_AGE to 0.
+dnl if backwards compatibility has been broken (eg. functions removed,
+dnl function signatures changed),
+dnl set PED_BINARY_AGE _and_ PED_INTERFACE_AGE to 0.
+
+# Derive these numbers from $PACKAGE_VERSION, which is set
+# when autoconf creates configure (see AC_INIT, above).
+PED_MAJOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/\..*//'`
+PED_MINOR_VERSION=`echo "$PACKAGE_VERSION"|sed 's/^[[0-9]][[0-9]]*\.//;s/\..*//'`
+case $PACKAGE_VERSION in
+ *.*.*.*.*)
+ PED_MICRO_VERSION=`echo "$PACKAGE_VERSION" \
+ | sed 's/^[^.]*\.[^.]*\.//;s/\..*//'`
+ ;;
+ *) PED_MICRO_VERSION=0;;
+esac
+
+PED_INTERFACE_AGE=0
+PED_BINARY_AGE=0
+PED_VERSION_SUFFIX=
+PED_VERSION=$PED_MAJOR_VERSION.$PED_MINOR_VERSION.$PED_MICRO_VERSION$PED_VERSION_SUFFIX
+
+LT_RELEASE=$PED_MAJOR_VERSION.$PED_MINOR_VERSION
+LT_CURRENT=`expr $PED_MICRO_VERSION - $PED_INTERFACE_AGE`
+LT_REVISION=$PED_INTERFACE_AGE
+LT_AGE=`expr $PED_BINARY_AGE - $PED_INTERFACE_AGE`
+AC_SUBST([LT_RELEASE])
+AC_SUBST([LT_CURRENT])
+AC_SUBST([LT_REVISION])
+AC_SUBST([LT_AGE])
+
+AM_INIT_AUTOMAKE([1.11.6 no-dist-gzip dist-xz color-tests parallel-tests
+ subdir-objects -Wno-portability])
+AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
+
+AC_CANONICAL_HOST
+case "$host_os" in
+ linux*|uclinux*) OS=linux ;;
+ gnu*) OS=gnu ;;
+ beos*) OS=beos ;;
+ *) AC_MSG_ERROR([Unknown or unsupported OS "$host_os". Only "linux", "uclinux", "gnu" and "beos" are supported in this version of GNU Parted.]) ;;
+esac
+AC_SUBST([OS])
+
+dnl Command-line options
+AC_ARG_WITH([readline],
+ [ --with-readline support fancy command line editing], ,
+ with_readline=yes
+)
+
+AC_ARG_ENABLE([mtrace],
+ [ --enable-mtrace enable malloc() debugging], ,
+ enable_mtrace=no
+)
+if test "$enable_mtrace" = yes; then
+ AC_DEFINE([ENABLE_MTRACE], [1], [Mtrace malloc() debugging])
+fi
+
+AC_SUBST([ENABLE_DEVICE_MAPPER])
+ENABLE_DEVICE_MAPPER=yes
+AC_ARG_ENABLE([device-mapper],
+ [ --enable-device-mapper enable device mapper support [default=yes]],
+ [ENABLE_DEVICE_MAPPER=$enable_device_mapper])
+if test $ENABLE_DEVICE_MAPPER = yes; then
+ AC_DEFINE([ENABLE_DEVICE_MAPPER],
+ 1, [device mapper (libdevmapper) support])
+fi
+
+AC_ARG_ENABLE([discover-only],
+ [ --enable-discover-only support only reading/probing [default=no]], ,
+ enable_discover_only=no
+)
+if test "$enable_discover_only" = yes; then
+ AC_DEFINE([DISCOVER_ONLY], [1], [Probing functionality only])
+fi
+
+PARTED_LIBS=""
+
+AC_ARG_ENABLE([debug],
+ [ --enable-debug compile in assertions [default=yes]], ,
+ enable_debug=yes
+)
+
+if test "$enable_debug" = yes; then
+ AC_DEFINE([DEBUG], [1], [Enable assertions, etc.])
+fi
+
+AC_ARG_ENABLE([read-only],
+ [ --enable-read-only disable writing (for debugging) [default=no]]
+ , ,
+ enable_read_only=no
+)
+if test "$enable_read_only" = yes; then
+ AC_DEFINE([READ_ONLY], [1], [Disable all writing code])
+fi
+
+PARTEDLDFLAGS=
+AC_SUBST([PARTEDLDFLAGS])
+
+AC_ARG_ENABLE([pc98],
+ [ --enable-pc98 build with pc98 support [default=yes]], ,
+ enable_pc98=yes
+)
+if test "$enable_pc98" = yes; then
+ AC_DEFINE([ENABLE_PC98], [1],
+ [Include PC98 partition tables. (Sometimes excluded to avoid
+ collisions with msdos partition tables])
+fi
+
+AC_ARG_ENABLE([hfs-extract-fs],
+ [ --enable-hfs-extract-fs Extract special HFS files for debugging [default=no]], ,
+ enable_hfs_extract_fs=no
+)
+if test "$enable_hfs_extract_fs" = yes; then
+ AC_DEFINE([HFS_EXTRACT_FS], [1],
+ [Extract low level special HFS(+) files for debugging purposes
+ when using the "check" command (NOT FOR PACKAGING)])
+fi
+
+dnl make libc threadsafe (not required for us, but useful other users of
+dnl libparted)
+AM_CPPFLAGS="$AM_CPPFLAGS -D_REENTRANT"
+
+dnl Check for programs.
+AC_SEARCH_LIBS([strerror],[cposix])
+AC_PROG_CC
+AC_PROG_GCC_TRADITIONAL
+AM_PROG_CC_C_O
+
+gl_EARLY
+parted_FIND_USABLE_TEST_DIR
+
+dnl This test must come as early as possible after the compiler configuration
+dnl tests, because the choice of the file model can (in principle) affect
+dnl whether functions and headers are available, whether they work, etc.
+AC_SYS_LARGEFILE
+
+gl_INIT
+
+AC_ARG_ENABLE([gcc-warnings],
+ [AS_HELP_STRING([--enable-gcc-warnings],
+ [turn on lots of GCC warnings (for developers)])],
+ [case $enableval in
+ yes|no) ;;
+ *) AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
+ esac
+ gl_gcc_warnings=$enableval],
+ [if test -d "$srcdir"/.git; then
+ gl_gcc_warnings=yes
+ else
+ gl_gcc_warnings=no
+ fi]
+)
+
+if test "$gl_gcc_warnings" = yes; then
+ nw=
+ # This, $nw, is the list of warnings we disable.
+ nw="$nw -Wdeclaration-after-statement" # too useful to forbid
+ nw="$nw -Waggregate-return" # anachronistic
+ nw="$nw -Wlong-long" # C90 is anachronistic (lib/gethrxtime.h)
+ nw="$nw -Wc++-compat" # We don't care about C++ compilers
+ nw="$nw -Wundef" # Warns on '#if GNULIB_FOO' etc in gnulib
+ nw="$nw -Wtraditional" # Warns on #elif which we use often
+ nw="$nw -Wcast-qual" # Too many warnings for now
+ nw="$nw -Wconversion" # Too many warnings for now
+ nw="$nw -Wsystem-headers" # Don't let system headers trigger warnings
+ nw="$nw -Wsign-conversion" # Too many warnings for now
+ nw="$nw -Wtraditional-conversion" # Too many warnings for now
+ nw="$nw -Wunreachable-code" # Too many warnings for now
+ nw="$nw -Wpadded" # Our structs are not padded
+ nw="$nw -Wredundant-decls" # openat.h declares e.g., mkdirat
+ nw="$nw -Wlogical-op" # any use of fwrite provokes this
+ nw="$nw -Wvla" # warnings in gettext.h
+ nw="$nw -Wnested-externs" # use of XARGMATCH/verify_function__
+ nw="$nw -Wswitch-enum" # Too many warnings for now
+ nw="$nw -Wswitch-default" # Too many warnings for now
+ # Too many warnings for now
+ nw="$nw -Wattributes"
+ nw="$nw -Wstrict-prototypes"
+ nw="$nw -Wold-style-definition"
+ nw="$nw -Wpacked"
+ nw="$nw -Wmissing-prototypes"
+ nw="$nw -Wmissing-declarations"
+ nw="$nw -Wsuggest-attribute=noreturn"
+ # things I might fix soon:
+ nw="$nw -Wfloat-equal" # sort.c, seq.c
+ nw="$nw -Wmissing-format-attribute" # copy.c
+ nw="$nw -Wunsafe-loop-optimizations" # a few src/*.c
+ nw="$nw -Winline" # system.h's readdir_ignoring_dot_and_dotdot
+ nw="$nw -Wstrict-overflow" # expr.c, pr.c, tr.c, factor.c
+ nw="$nw -Wstack-protector" # libparted/label/gpt.c
+ # ?? -Wstrict-overflow
+ nw="$nw -Wsuggest-attribute=format" # suggests to use gnu_printf for vsnprintf
+
+ gl_MANYWARN_ALL_GCC([ws])
+ gl_MANYWARN_COMPLEMENT([ws], [$ws], [$nw])
+ for w in $ws; do
+ gl_WARN_ADD([$w])
+ done
+ gl_WARN_ADD([-Wno-missing-field-initializers]) # We need this one
+ gl_WARN_ADD([-Wno-sign-compare]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-pointer-sign]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-unused-parameter]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-unused-macros]) # Too many warnings for now
+ gl_WARN_ADD([-Wno-format-nonliteral])
+ gl_WARN_ADD([-Wabi=2]) # Avoid compile failure with GCC8
+
+ # FIXME: investigate these
+ gl_WARN_ADD([-Wno-jump-misses-init])
+
+ # In spite of excluding -Wlogical-op above, it is enabled, as of
+ # gcc 4.5.0 20090517, and it provokes warnings in cat.c, dd.c, truncate.c
+ gl_WARN_ADD([-Wno-logical-op])
+
+ gl_WARN_ADD([-fdiagnostics-show-option])
+
+ # Make sure it recognizes /* FALLTHROUGH */ comment
+ gl_WARN_ADD([-Wimplicit-fallthrough=3])
+
+ AC_SUBST([WARN_CFLAGS])
+
+ AC_DEFINE([lint], [1], [Define to 1 if the compiler is checking for lint.])
+ AC_DEFINE([_FORTIFY_SOURCE], [2],
+ [enable compile-time and run-time bounds-checking, and some warnings])
+ AC_DEFINE([GNULIB_PORTCHECK], [1], [enable some gnulib portability checks])
+fi
+
+
+
+AC_CHECK_SIZEOF([off_t], [64], [
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+])
+
+AC_ENABLE_SHARED([])
+if test "$OS" = linux && test $ac_cv_sizeof_off_t -lt 8; then
+ dnl Need to disable shared libraries, to get llseek() to work. Long
+ dnl story. The short story is: lseek() isn't in glibc, so a syscall
+ dnl must be made. syscalls can't be made from within shared libraries,
+ dnl because of a bug (?) in gcc.
+ AC_MSG_WARN(
+off_t is less than 8 bytes. Using llseek syscall, and disabling shared
+libraries.)
+ AC_DISABLE_SHARED([])
+fi
+LT_INIT
+LT_INIT
+
+AM_ICONV
+
+AM_GNU_GETTEXT_VERSION([0.18])
+AM_GNU_GETTEXT([external])
+if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+ AC_MSG_ERROR([
+GNU Parted requires gettext to be installed for compilation -
+if native language support is desired. Either disable native language support
+with:
+ $ ./configure --disable-nls
+Or install gettext. GNU gettext is available from
+ http://ftp.gnu.org/gnu/gettext
+])
+fi
+
+dnl Check for libuuid
+UUID_LIBS=""
+AC_CHECK_LIB([uuid], [uuid_generate], [UUID_LIBS="-luuid"],
+ [AC_MSG_ERROR(dnl
+[GNU Parted requires libuuid - a part of the util-linux-ng package (but
+usually distributed separately in libuuid-devel, uuid-dev or similar)
+This can probably be found on your distribution's CD or FTP site or at:
+ http://userweb.kernel.org/~kzak/util-linux-ng/
+Note: originally, libuuid was part of the e2fsprogs package. Later, it
+moved to util-linux-ng-2.16, and that package is now the preferred source.])])
+AC_SUBST([UUID_LIBS])
+
+dnl Check for libdevmapper
+DM_LIBS=
+if test $ENABLE_DEVICE_MAPPER = yes; then
+ AC_CHECK_LIB([devmapper], [dm_task_create],
+ [DM_LIBS=-ldevmapper],
+ [AC_MSG_ERROR(dnl
+[libdevmapper could not be found, but is required for the
+--enable-device-mapper option, which is enabled by default. Either disable
+device-mapper support with --disable-device-mapper or download and install
+device-mapper from:
+ http://sources.redhat.com/dm/
+Note: if you are using precompiled packages you will need the development
+package as well (it may be called device-mapper-devel or something similar).]
+ )]
+ )
+fi
+AC_SUBST([DM_LIBS])
+
+dnl Check for termcap
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS=""
+ AC_SEARCH_LIBS([tgetent], [tinfo ncurses curses termcap termlib],
+ [PARTED_LIBS="$PARTED_LIBS $LIBS"],
+ [AC_MSG_ERROR(dnl
+[termcap could not be found which is required for the
+--with-readline option (which is enabled by default). Either disable readline
+support with --without-readline or download and install termcap from:
+ ftp.gnu.org/gnu/termcap
+Note: if you are using precompiled packages you will also need the development
+ package as well (which may be called termcap-devel or something similar).
+Note: (n)curses also seems to work as a substitute for termcap. This was
+ not found either - but you could try installing that as well.])])
+ LIBS="$OLD_LIBS"
+fi
+
+dnl Check for readline
+dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
+dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
+dnl Fedora) is left with
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS="$LIBS $PARTED_LIBS"
+ found_working_libreadline=no
+ AC_CHECK_LIB([readline], [readline],
+ found_working_libreadline=yes,
+ AC_MSG_ERROR(
+[GNU Readline could not be found which is required for the
+--with-readline (which is enabled by default). Either disable readline support with
+--without-readline or downloaded and install it from:
+ ftp.gnu.org/gnu/readline
+Note: if you are using precompiled packages you will also need the development
+package as well (which may be called readline-devel or something similar).
+])
+ ,
+ $PARTED_LIBS
+ )
+ LIBS="$OLD_LIBS $PARTED_LIBS"
+
+ # See if libreadline is too old to be used.
+ # The readline function in Debian's libreadline5 5.0-10 fails to
+ # print to stdout the response (from stdin) to a prompt, when stdout
+ # is redirected, while 5.2-3 works fine. That failure would cause
+ # several of parted's tests to failure.
+ # The purist approach would be to write a run-test, but that's
+ # not friendly to cross-compilers, so here's a compromise:
+ #
+ # See if libreadline defines one of these symbols:
+ # [this is the list of public symbols that are in 5.2, but not 5.0]
+ #
+ # $ diff -u /tmp/readline-5.[02]|grep '+T.[^_]'
+ # +T rl_vi_rubout
+ # +T rl_variable_value
+ # +T rl_reset_screen_size
+ # +T alloc_history_entry
+ # +T copy_history_entry
+ # +T replace_history_data
+ #
+ # If not, then reject this readline lib.
+ AC_CHECK_LIB([readline], [rl_variable_value],
+ ,
+ AC_MSG_ERROR(
+[Your version of libreadline is too old to be used.
+Consider upgrading to version 5.2 or newer.])
+ found_working_libreadline=no,
+ $PARTED_LIBS)
+
+ if test $found_working_libreadline = yes; then
+ PARTED_LIBS="-lreadline $PARTED_LIBS"
+ AC_DEFINE([HAVE_LIBREADLINE], [1], [have readline])
+ fi
+ LIBS="$OLD_LIBS"
+fi
+
+AC_SUBST([PARTED_LIBS])
+
+dnl Check for OS specific libraries
+
+dnl GNU/Hurd:
+if test "$OS" = gnu; then
+dnl libshouldbeinlibc
+ AC_CHECK_LIB([shouldbeinlibc], [vm_deallocate],
+ OS_LIBS="$OS_LIBS -lshouldbeinlibc",
+ AC_MSG_ERROR(
+[GNU Parted requires libshouldbeinlibc when running on
+GNU/Hurd systems. It is a standard part of a GNU/Hurd system.]
+ )
+ )
+
+dnl libstore may depend on libparted being present.
+dnl Aren't circular dependencies wonderful?
+ OLD_LIBS="$LIBS"
+ LIBS=
+
+ AC_CHECK_LIB([parted], [ped_device_read])
+
+dnl libstore
+ AC_CHECK_LIB([store], [store_open],
+ OS_LIBS="$OS_LIBS -lstore",
+ AC_MSG_ERROR(
+[GNU Parted requires libstore when running on GNU/Hurd
+systems. It is a standard part of a GNU/Hurd system.]
+ )
+ ,
+ $OS_LIBS $UUID_LIBS $DM_LIBS $LIBS
+ )
+ LIBS="$OLD_LIBS"
+fi
+
+dnl BeOS/ZETA/Haiku:
+
+if test "$OS" = beos; then
+ dnl Include the socket library, as it is a depedency of libuuid
+ dnl and so also of us (due to socket() call in libuuid)
+ OS_LIBS="$OS_LIBS -lsocket"
+fi
+
+AC_SUBST([OS_LIBS])
+
+dnl One day, gettext might support libtool...
+dnl if test "$USE_INCLUDED_LIBINTL" = "yes"; then
+dnl INTLINCS='-I$(top_srcdir)/intl'
+dnl fi
+AC_SUBST([INTLINCS])
+
+
+dnl Checks for header files.
+AC_CHECK_HEADER([uuid/uuid.h], ,
+ [AC_MSG_ERROR(
+[GNU Parted requires libuuid - a part of the e2fsprogs package.
+You seem to have the library installed but not the headers. These are usually
+found in a corresponding development package (usually called e2fsprogs-devel).
+If you can't find one try:
+ http://web.mit.edu/tytso/www/linux/e2fsprogs.html])]
+)
+
+AC_CHECK_HEADERS([getopt.h])
+AC_CHECK_HEADERS([linux/ext2_fs.h])
+
+dnl required for libparted/llseek.c (TODO: make linux-x86 only)
+if test "$OS" = linux; then
+ AC_CHECK_HEADER([linux/unistd.h])
+fi
+
+if test "$with_readline" = yes; then
+ AC_CHECK_HEADERS([readline/readline.h readline/history.h], ,
+ [AC_MSG_ERROR(
+[The headers for GNU Readline could not be found which
+are required for the --with-readline option. You seem to have the GNU readline
+library installed but not the headers. These are usually found in a
+corresponding development package (usually called readline-devel). If you can't
+find one try:
+ ftp.gnu.org/gnu/readline
+Alternatively you can disable readline support with --without-readline])]
+ )
+fi
+
+AC_CHECK_HEADERS([termcap.h])
+
+if test "$USE_NLS" = yes; then
+ AC_CHECK_HEADERS([wctype.h], ,
+ [AC_MSG_ERROR(
+[One or more of the header files that are required for
+native language support (wctype.h) could not be found. Either get a newer
+version of GNU libc and its headers - which can be obtained from:
+ ftp.gnu.org/gnu/glibc
+Or disable native language support with the --disable-nls option])]
+ )
+fi
+
+AC_CHECK_HEADER([execinfo.h], [
+ AC_CHECK_LIB([c], [backtrace], [
+ AC_DEFINE([HAVE_BACKTRACE], [1], [Has backtrace support])
+ LDFLAGS="$LDFLAGS -rdynamic"
+ ])
+])
+
+AM_CONDITIONAL([COMPILE_FOR_S390], [test "$host_cpu" = s390 || test "$host_cpu" = s390x])
+
+dnl check for "check", unit testing library/header
+PKG_CHECK_MODULES([CHECK], [check >= 0.9.3], have_check=yes, have_check=no)
+if test "$have_check" != "yes"; then
+ AC_MSG_RESULT([Unable to locate check version 0.9.3 or higher: not building])
+fi
+AM_CONDITIONAL([HAVE_CHECK], [test "$have_check" = yes])
+
+dnl Checks for typedefs, structures and compiler characteristics.
+LT_PATH_LD
+
+AC_C_BIGENDIAN
+AC_C_INLINE
+AC_C_CONST
+AC_C_RESTRICT
+
+dnl Checks for library functions.
+AC_CHECK_FUNCS([sigaction])
+AC_CHECK_FUNCS([getuid])
+
+dnl NOTE: We need to remove the gl_cv_ignore_unused_libraries flag if we
+dnl detected one earlier. libreadline on some platforms (e.g., RHEL and
+dnl Fedora) is left with
+if test "$with_readline" = yes; then
+ OLD_LIBS="$LIBS"
+ LIBS="$LIBS $PARTED_LIBS -lreadline"
+ AC_CHECK_FUNCS([rl_completion_matches])
+ LIBS="$OLD_LIBS"
+fi
+
+AC_CHECK_FUNCS([canonicalize_file_name])
+
+DATE=$(date '+%d %b %Y %H:%M')
+USER=$(whoami)
+HOST=$(hostname)
+BUILDINFO="$USER@$HOST, $DATE"
+AC_SUBST([BUILDINFO])
+
+LIB_BLKID=
+AC_SUBST([LIB_BLKID])
+pe_saved_libs=$LIBS
+ AC_SEARCH_LIBS([blkid_probe_get_topology], [blkid],
+ [test "$ac_cv_search_blkid_probe_get_topology" = "none required" \
+ || LIB_BLKID=$ac_cv_search_blkid_probe_get_topology])
+ AC_CHECK_FUNC([blkid_probe_get_topology], [use_blkid=1], [use_blkid=0])
+LIBS=$pe_saved_libs
+AC_DEFINE_UNQUOTED([USE_BLKID], [$use_blkid],
+ [Define if you have sufficient blkid support.])
+AC_CHECK_HEADERS_ONCE([blkid/blkid.h])
+
+AC_CONFIG_FILES([
+Makefile
+lib/Makefile
+include/Makefile
+include/parted/Makefile
+libparted/Makefile
+libparted/labels/Makefile
+libparted/fs/Makefile
+libparted/tests/Makefile
+libparted.pc
+libparted-fs-resize.pc
+parted/Makefile
+partprobe/Makefile
+doc/Makefile
+doc/C/Makefile
+doc/pt_BR/Makefile
+debug/Makefile
+debug/test/Makefile
+tests/Makefile
+po/Makefile.in
+])
+AC_OUTPUT
+
+echo
+echo Type \'make\' to compile parted.
diff --git a/debug/Makefile.am b/debug/Makefile.am
new file mode 100644
index 0000000..bd7dcbf
--- /dev/null
+++ b/debug/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = test
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
diff --git a/debug/Makefile.in b/debug/Makefile.in
new file mode 100644
index 0000000..5031d31
--- /dev/null
+++ b/debug/Makefile.in
@@ -0,0 +1,1970 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = debug
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = test
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debug/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu debug/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/debug/test/HOWTO b/debug/test/HOWTO
new file mode 100644
index 0000000..0c9e346
--- /dev/null
+++ b/debug/test/HOWTO
@@ -0,0 +1,240 @@
+==============================================================================
+ PARTED REGRESSION TEST HOWTO
+==============================================================================
+
+ by Andrew Clausen
+
+ Copyright (C) 2002, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+ This document may be distributed and/or modified
+ without restriction
+
+
+CONTENTS
+--------
+
+1 Introduction
+2 What you need
+3 Setting up testrc
+4 Running the tests
+
+5 How the tests work
+
+
+------------------------------------------------------------------------------
+1 INTRODUCTION
+------------------------------------------------------------------------------
+
+This document describes how to safely configure and run the GNU Parted
+regression tests.
+
+Regression tests are a set of "test cases" (or program inputs, whatever),
+that have a well defined "correct" and "broken". The idea is to run
+regression tests after making changes, to check you didn't break anything.
+They are also useful for testing Parted in a new environment... perhaps
+you're computer has something peculiar that breaks it.
+
+Therefore, it's helpful for you to run Parted regression tests.
+
+
+------------------------------------------------------------------------------
+2 WHAT YOU NEED
+------------------------------------------------------------------------------
+
+You need:
+ * a spare hard drive (for GNU/Linux... haven't tried GNU/Hurd)
+ This is because only gendisk block devices can have partition tables.
+ * msdos partition table support in the kernel (for Linux). (FIXME: can
+ use our shiny new partprobe!)
+ * file system support for ext2 and fat
+ * a reasonably standard GNU system, with diff(1), bash(1), e2fsck(8),
+ dosfsck(8), etc.
+ * parted, compiled in it's source directory. i.e. ./configure && make
+ * a test data source, between 100 and 150 Mb, that contains all
+ lower-case filenames, and no symlinks. It must have a significant
+ (i.e. at least 5%) amount of data in a subdirectory.
+ You can convert filenames to lowercase with:
+
+ cd /data-source
+ echo 'mv $1 $( echo $1 | tr A-Z a-z )' > tolower
+ chmod a+x tolower
+ find | grep [A-Z] | xargs -l1 ./tolower
+ rm tolower
+
+ (Hint: if you don't trust me, stick an "echo" before mv, and
+ it'll print out what it's going to do ;)
+
+
+------------------------------------------------------------------------------
+3 SETTING UP TESTRC
+------------------------------------------------------------------------------
+
+The testrc must be configured for your system. The tests will refuse
+to run if you don't. I'll work from top-to-bottom, describing how
+to fill in each value:
+
+
+3.1 TEST_HOST
+-----------------
+This field must match the output of hostname(1). This is just a safety
+check, so you don't use the wrong testrc file, and destroy the wrong
+data ;)
+
+Example:
+ TEST_HOST=mirkwood
+
+3.2 TEST_PARTED_BASE
+------------------------
+This is the directory where you untarred and compiled parted:
+
+Example:
+ TEST_PARTED_BASE=~clausen/parted-1.4.20
+
+3.3 TEST_PARTED_COMMAND
+---------------------------
+You shouldn't need to change this. It's just where to find parted.
+
+Example:
+ TEST_PARTED_COMMAND=$TEST_PARTED_BASE/parted/parted
+
+3.4 TEST_PARTED_CLEARFAT
+----------------------------
+You shouldn't need to change this. It's just where to find clearfat,
+a special tool to help test Parted's fat code. All it does is zero
+out unused (meta)data. (There were cases in the past where stale
+metadata was making it appear that parted was working, when it wasn't)
+
+Example:
+ TEST_PARTED_CLEARFAT=$TEST_PARTED_BASE/debug/clearfat/clearfat
+
+3.5 TEST_DRIVE
+------------------
+The drive to be completely clobbered! i.e. where testing will occur.
+Needless to say, I hope you don't have anything important there.
+Example:
+
+Example:
+ TEST_DRIVE=/dev/hdc
+
+3.6 TEST_DRIVE
+------------------
+The size of the disk, in megabytes, excluding the fractional part (decimal
+point). You can get this from Parted's print output. (Geometry of
+/dev/hdc is 0.0-*THIS IS IT*).
+
+Example:
+ TEST_DRIVE_SIZE=8063
+
+3.7 TEST_MOUNT_POINT
+------------------------
+A mount point that the tests can use, to mount $TEST_DRIVE. Obviously, you
+need to create it with mkdir(1).
+
+Example:
+ TEST_MOUNT_POINT=/mnt/test
+
+3.8 TEST_DATA
+-----------------
+Where to get test data from. See advice in section 2 for requirements
+on the test data.
+
+Example:
+ TEST_DATA=/var/www
+
+3.9 TEST_DATA_HOLE
+----------------------
+A directory inside $TEST_DATA, that will be deleted to create some
+fragmentation. It should be at least 5% and at most 80% of the
+test data.
+
+Example:
+ TEST_DATA_HOLE=icons
+
+3.10 TEST_FS_USE_DISK_LABEL
+------------------------------
+Which disk label to use for testing file systems. At the moment, only
+msdos is supported/tested, although most should work.
+
+Example:
+ TEST_FS_USE_DISK_LABEL=msdos
+
+3.11 QUIET_KERNEL
+--------------------
+Set to 1 if you want to shut up the kernel's annoying messages
+
+Example:
+ QUIET_KERNEL=1
+
+3.12 VERBOSE_LOGS
+--------------------
+Set to 1 if you want logging of everything, including successful tests.
+
+Example:
+ VERBOSE_LOGS=1
+
+3.13 MALLOC_TRACE
+--------------------
+Uncomment this if you want to do malloc() debugging with mtrace.
+TODO: document this.
+
+
+------------------------------------------------------------------------------
+4 RUNNING THE TESTS
+------------------------------------------------------------------------------
+
+4.1 Starting the tests
+--------------------------
+To run the tests, you must be root. To run all tests, type:
+
+ ./test
+
+To run a subset of tests, you can type part of the file name of
+those tests. For example, to run all partition table tests, type:
+
+ ./test disk
+
+Or the FAT tests:
+
+ ./test fat
+
+4.2 Stopping the tests
+--------------------------
+If you want to interrupt the tests, the easiest way is:
+
+ (1) hit ctrl-z on the controlling virtual console / terminal
+ (2) run "ps", with no arguments
+ (3) run "kill -9 [PID]", where [PID] is the process id of
+ "test"
+
+4.3 Examining the logs
+--------------------------
+In progress logs are written to test_out. After each test completes,
+it's output (from test_out), among other things is appended to test_log
+
+To check if any tests failed, type:
+
+ grep failed test_log > /dev/null && echo FAILED || echo PASSED
+
+If some tests failed, check the logs to see what the problem is. You
+may have set up the regression tests incorrectly.
+
+4.4 Sending bug reports
+---------------------------
+If you think it's a bug (or you're not sure), email us!
+
+ bug-parted@gnu.org
+
+Please attach the test_log. Gzip it first ;)
+
+
+------------------------------------------------------------------------------
+5 HOW THE TESTS WORK
+------------------------------------------------------------------------------
+
+Parted has regression tests for all partition table formats, and for
+the ext2, fat and linuxswap. The partition table tests are mainly
+"Create problem X and test that parted complains about it". It
+doesn't compare output... only if parted reports error, and that it
+doesn't segfault.
+ The file system tests are mainly "do some operation on the
+file system, and check it's still got the same data", via diff(1).
+Also, it runs dosfsck(1) and e2fsck(1).
diff --git a/debug/test/Makefile.am b/debug/test/Makefile.am
new file mode 100644
index 0000000..2c7c5a8
--- /dev/null
+++ b/debug/test/Makefile.am
@@ -0,0 +1,19 @@
+noinst_SCRIPTS = test \
+ test_disk_bsd \
+ test_disk_dos \
+ test_disk_dvh \
+ test_disk_gpt \
+ test_disk_pc98 \
+ test_disk_mac \
+ test_disk_sun \
+ test_fs_ext2 \
+ test_fs_fat \
+ test_fs_hfs \
+ test_fs_hfsplus \
+ test_fs_linux_swap \
+ test_fs_reiserfs \
+ build_leak_list
+
+EXTRA_DIST = HOWTO testrc $(noinst_SCRIPTS)
+
+CLEANFILES = test_log test_out
diff --git a/debug/test/Makefile.in b/debug/test/Makefile.in
new file mode 100644
index 0000000..d47fc98
--- /dev/null
+++ b/debug/test/Makefile.in
@@ -0,0 +1,1811 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = debug/test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SCRIPTS = $(noinst_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_SCRIPTS = test \
+ test_disk_bsd \
+ test_disk_dos \
+ test_disk_dvh \
+ test_disk_gpt \
+ test_disk_pc98 \
+ test_disk_mac \
+ test_disk_sun \
+ test_fs_ext2 \
+ test_fs_fat \
+ test_fs_hfs \
+ test_fs_hfsplus \
+ test_fs_linux_swap \
+ test_fs_reiserfs \
+ build_leak_list
+
+EXTRA_DIST = HOWTO testrc $(noinst_SCRIPTS)
+CLEANFILES = test_log test_out
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debug/test/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu debug/test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/debug/test/build_leak_list b/debug/test/build_leak_list
new file mode 100755
index 0000000..845692d
--- /dev/null
+++ b/debug/test/build_leak_list
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+if test "x$TEST_PARTED_BASE" = "x"; then
+ TEST_PARTED_BASE=~parted/parted-dev
+fi
+
+mtrace $TEST_PARTED_BASE/parted/.libs/parted $MALLOC_TRACE \
+ | grep libparted \
+ | sed 's/ at.*//' \
+ | sed 's/^\(0x[0-9a-f]\+\) \+\(0x[0-9a-f]\+\) */ {\1, \2},/' \
+ | less
diff --git a/debug/test/test b/debug/test/test
new file mode 100755
index 0000000..42ebcb6
--- /dev/null
+++ b/debug/test/test
@@ -0,0 +1,261 @@
+#! /bin/bash
+
+do_help()
+{
+ echo You need to fill out the testrc with your machine\'s details before
+ echo using this script.
+ exit;
+}
+
+do_test()
+{
+ test_prog=$1
+ test_name=`echo -n $test_prog | sed "s/test_//" | sed "s/_/ /" \
+ | tr '[:lower:]' '[:upper:]'`
+
+ echo "-----------------------------------------------------------------"
+ echo "TESTING $test_name..."
+ echo "-----------------------------------------------------------------"
+
+ echo "-----------------------------------------------------------------"\
+ >> test_log
+ echo "TESTING $test_name..." >> test_log
+ echo "-----------------------------------------------------------------"\
+ >> test_log
+
+ if [ -e core* ]; then
+ rm core*
+ fi
+ ./$test_prog
+ if [ -e test_out ]; then
+ echo > test_out
+ fi
+}
+
+do_tests()
+{
+ for walk in $TEST_LIST; do
+ if [ -x $walk ]; then
+ do_test $walk
+ fi
+ done
+}
+
+################################################
+# GLOBAL HELPER FUNCTIONS
+################################################
+
+ped_testing()
+{
+ echo -n "testing $1... "
+ echo -n "testing $1... " >> test_log
+}
+
+ped_testing_expect_fail()
+{
+ echo -n "testing for failure on $1... "
+ echo -n "testing for failure on $1... " >> test_log
+}
+
+ped_test_ok()
+{
+ echo "ok"
+ echo "ok" >> test_log
+
+ if [ "x$VERBOSE_LOGS" = "x1" ]; then
+ cat test_out >> test_log
+ echo >> test_log
+ fi
+
+ export OK_COUNT=$[ $OK_COUNT + 1 ]
+}
+
+ped_test_failed()
+{
+ echo "failed"
+ echo "failed" >> test_log
+
+ cat test_out >> test_log
+ echo >> test_log
+
+ export FAILED_COUNT=$[ $FAILED_COUNT + 1 ]
+
+ if [ -e core ]; then
+ echo core dumped, saving to core-$CORE_COUNTER\
+ >> test_log
+ echo >> test_log
+ mv core core-$CORE_COUNTER
+ export CORE_COUNTER=$[ $CORE_COUNTER + 1 ]
+ fi
+}
+
+check_leaks()
+{
+ if test "x$MALLOC_TRACE" != "x"; then
+ ./build_leak_list > leaks
+ if test -s leaks; then
+ printf \
+'Found memory leaks: (add this list to dodgey_malloc_list in\n'\
+'libparted/libparted.c to debug them)\n' \
+ >> test_out
+ cat leaks >> test_out
+ return 0
+ fi
+ rm leaks
+ fi
+
+ return 1
+}
+
+ped_test_get_val()
+{
+ post_command=$2
+ if test "x$input" = "x"; then
+ input="Cancel"
+ fi
+ if test "x$post_command" = "x"; then
+ post_command="true"
+ fi
+
+ if test -e leaks; then
+ rm leaks
+ fi
+ if test "x$MALLOC_TRACE" != "x"; then
+ if test -e $MALLOC_TRACE; then
+ rm $MALLOC_TRACE
+ fi
+ fi
+
+ if $TEST_PARTED_COMMAND -s $TEST_DRIVE $1 2>&1 > test_out; then
+ if [ -e core ]; then
+ return 0
+ fi
+
+ if check_leaks; then
+ return 0
+ fi
+
+ if ( echo >> test_out ; ( eval $post_command ) 2>&1 >> test_out ); then
+ return 1
+ else
+ return 0
+ fi
+ else
+ return 0
+ fi
+}
+
+ped_test()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$2" "$3"; then
+ ped_test_failed
+ return 1
+ else
+ ped_test_ok
+ return 0
+ fi
+}
+
+ped_test_expect_fail()
+{
+ ped_testing_expect_fail "$1"
+ if ped_test_get_val "$2" "$3"; then
+
+ # we expect a CLEAN fail :-)
+ if [ -e core ]; then
+ ped_test_failed
+ return 1
+ fi
+ if check_leaks; then
+ ped_test_failed
+ return 1
+ fi
+
+ ped_test_ok
+ return 0
+ else
+ ped_test_failed
+ return 1
+ fi
+}
+
+################################################
+# the rest...
+################################################
+
+init_environment()
+{
+ if [ "x$UID" != "x0" ]; then
+ echo Warning: you should probably be running this as root.
+ echo
+ fi
+
+ . testrc
+ `cat testrc | grep "^[^#].*=" | sed "s/=.*//" | sed "s/^/export /" `
+
+ if [ "x$HOSTNAME" != "x$TEST_HOST" ]; then
+ do_help
+ fi
+
+ export OLD_KERNEL_PRINTK=`cat /proc/sys/kernel/printk`
+
+ if [ "x$QUIET_KERNEL" = "x1" ]; then
+ echo 1 1 1 1 > /proc/sys/kernel/printk
+ fi
+
+ renice 20 $$ > /dev/null
+
+ export CORE_COUNTER=1
+ export OK_COUNT=0
+ export FAILED_COUNT=0
+
+ export -f ped_testing
+ export -f ped_testing_expect_fail
+ export -f ped_test_ok
+ export -f ped_test_failed
+ export -f ped_test_get_val
+ export -f ped_test
+ export -f ped_test_expect_fail
+ export -f check_leaks
+}
+
+done_environment()
+{
+ echo $OLD_KERNEL_PRINTK > /proc/sys/kernel/printk
+}
+
+open_log()
+{
+ if [ -e test_log ]; then
+ echo -n > test_log;
+ fi
+}
+
+print_version()
+{
+ echo -n "Testing "
+ $TEST_PARTED_COMMAND --version
+ echo
+
+ echo -n "Testing " >> test_log
+ $TEST_PARTED_COMMAND --version >> test_log
+ echo >> test_log
+}
+
+main()
+{
+ init_environment
+ open_log
+ print_version
+ do_tests
+ done_environment
+}
+
+if [ "x$1" != "x" ]; then
+ export TEST_LIST="test_*$1*"
+else
+ export TEST_LIST="test_*"
+fi
+
+main
diff --git a/debug/test/test_disk_bsd b/debug/test/test_disk_bsd
new file mode 100755
index 0000000..9206fae
--- /dev/null
+++ b/debug/test/test_disk_bsd
@@ -0,0 +1,93 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel bsd"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel bsd mkpart primary ext2 10 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel bsd mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel bsd mkpart primary ext2 10 20 rm 1"
+}
+
+test_too_many_primary()
+{
+ ped_test_expect_fail "too many primary partitions" \
+ "mklabel bsd \
+ mkpart primary ext2 10 20 \
+ mkpart primary ext2 20 30 \
+ mkpart primary ext2 30 40 \
+ mkpart primary ext2 40 50 \
+ mkpart primary ext2 50 60 \
+ mkpart primary ext2 60 70 \
+ mkpart primary ext2 70 80 \
+ mkpart primary ext2 80 90 \
+ mkpart primary ext2 90 100"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of partition overlapping"\
+ "mklabel bsd \
+ mkpart primary ext2 0 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel bsd \
+ rm 1"
+}
+
+test_create_extended()
+{
+ ped_test_expect_fail "creation of extended partition"\
+ "mklabel bsd \
+ mkpart extended 0 100"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel bsd \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel bsd \
+ mkpartfs primary ext2 0 100 \
+ mkpartfs primary ext2 101 200 \
+ move 1 201 301"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_too_many_primary
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_extended
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_disk_dos b/debug/test/test_disk_dos
new file mode 100755
index 0000000..4933ed4
--- /dev/null
+++ b/debug/test/test_disk_dos
@@ -0,0 +1,172 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel msdos"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel msdos mkpart primary ext2 10 20"
+}
+
+test_create_extended_at_start()
+{
+ ped_test "creating an extended partition at the start of the disk"\
+ "mklabel msdos \
+ mkpart extended 0 500"
+}
+
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel msdos mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel msdos mkpart primary ext2 10 20 rm 1"
+}
+
+test_too_many_primary()
+{
+ ped_test_expect_fail "too many primary partitions" \
+ "mklabel msdos \
+ mkpart primary ext2 10 20 \
+ mkpart primary ext2 20 30 \
+ mkpart primary ext2 30 40 \
+ mkpart primary ext2 40 50 \
+ mkpart primary ext2 50 60"
+}
+
+test_logical_without_extended()
+{
+ ped_test_expect_fail "logical partitions without extended partition"\
+ "mklabel msdos \
+ mkpart logical ext2 10 20"
+}
+
+# Parted's constraint solver "corrects" this. Hmmm... is this wise?
+test_logical_outside_extended()
+{
+ ped_test "correction of logical partitions outside extended partition"\
+ "mklabel msdos \
+ mkpart extended 50 100\
+ mkpart logical ext2 90 150"
+}
+
+test_shrink_extended_too_far()
+{
+ ped_test "correction of excessive extended partition shrink"\
+ "mklabel msdos \
+ mkpart extended 50 150\
+ mkpart logical ext2 90 110\
+ resize 1 50 100"
+}
+
+test_shrink_extended()
+{
+ ped_test "extended partition shrink"\
+ "mklabel msdos \
+ mkpart extended 50 150\
+ mkpart logical ext2 90 110\
+ resize 1 80 110"
+}
+
+test_many_logical()
+{
+ ped_test "many logical partitions"\
+ "mklabel msdos \
+ mkpart extended 100 1000 \
+ mkpart logical ext2 100 200 \
+ mkpart logical ext2 200 300 \
+ mkpart logical ext2 300 400 \
+ mkpart logical ext2 400 500 \
+ mkpart logical ext2 500 600 \
+ mkpart logical ext2 600 700 \
+ mkpart logical ext2 700 800"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of primary partition overlapping"\
+ "mklabel msdos \
+ mkpart primary ext2 0 100\
+ mkpart primary ext2 50 150"
+}
+
+test_extended_primary_overlap()
+{
+ ped_test "correction of primary with extended partition overlapping"\
+ "mklabel msdos \
+ mkpart extended 1 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel msdos \
+ rm 1"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel msdos \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move_primary()
+{
+ ped_test "move primary partition"\
+ "mklabel msdos \
+ mkpartfs primary fat16 0 100 \
+ mkpartfs primary fat16 100 200 \
+ move 1 200 300"
+}
+
+test_move_logical()
+{
+ ped_test "move logical partition"\
+ "mklabel msdos \
+ mkpart extended 0 500
+ mkpartfs logical fat16 0 100 \
+ mkpartfs logical fat16 100 200 \
+ move 5 200 300"
+}
+
+test_create_end()
+{
+ ped_test "create partition at end-of-disk"\
+ "mklabel msdos \
+ mkpartfs primary ext2 \
+ $[TEST_DRIVE_SIZE - 10] $[TEST_DRIVE_SIZE]"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_create_extended_at_start
+ test_mkpartfs
+ test_rm
+ test_too_many_primary
+ test_logical_without_extended
+ test_logical_outside_extended
+ test_shrink_extended_too_far
+ test_shrink_extended
+ test_many_logical
+ test_primary_overlap
+ test_extended_primary_overlap
+ test_nonexistent_remove
+ test_create_small
+ test_move_primary
+ test_move_logical
+ test_create_end
+}
+
+main
diff --git a/debug/test/test_disk_dvh b/debug/test/test_disk_dvh
new file mode 100755
index 0000000..9e84aa3
--- /dev/null
+++ b/debug/test/test_disk_dvh
@@ -0,0 +1,93 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel mips"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel mips mkpart primary ext2 11 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel mips mkpartfs primary ext2 11 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel mips mkpart primary ext2 10 20 rm 2"
+}
+
+test_too_many_primary()
+{
+ ped_test_expect_fail "too many primary partitions" \
+ "mklabel mips \
+ mkpart primary ext2 10 20 \
+ mkpart primary ext2 20 30 \
+ mkpart primary ext2 30 40 \
+ mkpart primary ext2 40 50 \
+ mkpart primary ext2 50 60 \
+ mkpart primary ext2 60 70 \
+ mkpart primary ext2 70 80 \
+ mkpart primary ext2 80 90 \
+ mkpart primary ext2 90 100 \
+ mkpart primary ext2 100 110 \
+ mkpart primary ext2 110 120 \
+ mkpart primary ext2 120 130 \
+ mkpart primary ext2 130 140 \
+ mkpart primary ext2 140 150 \
+ mkpart primary ext2 150 160 \
+ mkpart primary ext2 160 170 \
+ mkpart primary ext2 170 180"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of primary partition overlapping"\
+ "mklabel mips \
+ mkpart primary ext2 1 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel mips \
+ rm 2"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel mips \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel mips \
+ mkpartfs primary ext2 1 100 \
+ mkpartfs primary ext2 101 200 \
+ move 2 201 301"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_too_many_primary
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_disk_gpt b/debug/test/test_disk_gpt
new file mode 100755
index 0000000..721891d
--- /dev/null
+++ b/debug/test/test_disk_gpt
@@ -0,0 +1,77 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel gpt"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel gpt mkpart primary ext2 10 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel gpt mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel gpt mkpart primary ext2 10 20 rm 1"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of primary partition overlapping"\
+ "mklabel gpt \
+ mkpart primary ext2 0 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel gpt \
+ rm 1"
+}
+
+test_create_extended()
+{
+ ped_test_expect_fail "creation of extended partition"\
+ "mklabel gpt \
+ mkpart extended 0 100"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel gpt \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel gpt \
+ mkpartfs primary ext2 0 100 \
+ mkpartfs primary ext2 101 200 \
+ move 1 201 301"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_extended
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_disk_mac b/debug/test/test_disk_mac
new file mode 100755
index 0000000..09b1353
--- /dev/null
+++ b/debug/test/test_disk_mac
@@ -0,0 +1,77 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel mac"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel mac mkpart primary ext2 10 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel mac mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel mac mkpart primary ext2 10 20 rm 2"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of primary partition overlapping"\
+ "mklabel mac \
+ mkpart primary ext2 0.01 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel mac \
+ rm 2"
+}
+
+test_create_extended()
+{
+ ped_test_expect_fail "creation of extended partition"\
+ "mklabel mac \
+ mkpart extended 0.01 100"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel mac \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel mac \
+ mkpartfs primary ext2 1 100 \
+ mkpartfs primary ext2 101 200 \
+ move 2 201 301"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_extended
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_disk_pc98 b/debug/test/test_disk_pc98
new file mode 100755
index 0000000..923d8be
--- /dev/null
+++ b/debug/test/test_disk_pc98
@@ -0,0 +1,101 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel pc98"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel pc98 mkpart primary ext2 10 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel pc98 mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel pc98 mkpart primary ext2 10 20 rm 1"
+}
+
+test_too_many_primary()
+{
+ ped_test_expect_fail "too many primary partitions" \
+ "mklabel pc98 \
+ mkpart primary ext2 10 20 \
+ mkpart primary ext2 20 30 \
+ mkpart primary ext2 30 40 \
+ mkpart primary ext2 40 50 \
+ mkpart primary ext2 50 60 \
+ mkpart primary ext2 60 70 \
+ mkpart primary ext2 70 80 \
+ mkpart primary ext2 80 90 \
+ mkpart primary ext2 90 100 \
+ mkpart primary ext2 100 110 \
+ mkpart primary ext2 110 120 \
+ mkpart primary ext2 120 130 \
+ mkpart primary ext2 130 140 \
+ mkpart primary ext2 140 150 \
+ mkpart primary ext2 150 160 \
+ mkpart primary ext2 160 170 \
+ mkpart primary ext2 170 180 "
+}
+
+test_primary_overlap()
+{
+ ped_test "correction of primary partition overlapping"\
+ "mklabel pc98 \
+ mkpart primary ext2 0 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel pc98 \
+ rm 1"
+}
+
+test_create_extended()
+{
+ ped_test_expect_fail "creation of extended partition"\
+ "mklabel pc98 \
+ mkpart extended 0 100"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel pc98 \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel pc98 \
+ mkpartfs primary fat16 0 100 \
+ mkpartfs primary fat16 100 200 \
+ move 1 200 300"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_too_many_primary
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_extended
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_disk_sun b/debug/test/test_disk_sun
new file mode 100755
index 0000000..d65ec10
--- /dev/null
+++ b/debug/test/test_disk_sun
@@ -0,0 +1,93 @@
+#! /bin/bash
+
+test_mklabel()
+{
+ ped_test "mklabel" "mklabel sun"
+}
+
+test_mkpart()
+{
+ ped_test "mkpart" "mklabel sun mkpart primary ext2 10 20"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs" "mklabel sun mkpartfs primary ext2 10 20"
+}
+
+test_rm()
+{
+ ped_test "rm" "mklabel sun mkpart primary ext2 10 20 rm 1"
+}
+
+test_too_many_primary()
+{
+ ped_test_expect_fail "too many primary partitions" \
+ "mklabel sun \
+ mkpart primary ext2 10 20 \
+ mkpart primary ext2 20 30 \
+ mkpart primary ext2 30 40 \
+ mkpart primary ext2 40 50 \
+ mkpart primary ext2 50 60 \
+ mkpart primary ext2 60 70 \
+ mkpart primary ext2 70 80 \
+ mkpart primary ext2 80 90 \
+ mkpart primary ext2 90 100"
+}
+
+test_primary_overlap()
+{
+ ped_test "correction primary partition overlapping"\
+ "mklabel sun \
+ mkpart primary ext2 0 100\
+ mkpart primary ext2 50 150"
+}
+
+test_nonexistent_remove()
+{
+ ped_test_expect_fail "removal of non-existent partition"\
+ "mklabel sun \
+ rm 1"
+}
+
+test_create_extended()
+{
+ ped_test_expect_fail "creation of extended partition"\
+ "mklabel sun \
+ mkpart extended 0 100"
+}
+
+test_create_small()
+{
+ ped_test "create small partition"\
+ "mklabel sun \
+ mkpartfs primary ext2 1 2"
+}
+
+test_move()
+{
+ ped_test "move partition"\
+ "mklabel sun \
+ mkpartfs primary ext2 0 100 \
+ mkpartfs primary ext2 101 200 \
+ move 1 201 301"
+}
+
+main()
+{
+ if ! test_mklabel; then
+ exit 1
+ fi
+
+ test_mkpart
+ test_mkpartfs
+ test_rm
+ test_too_many_primary
+ test_primary_overlap
+ test_nonexistent_remove
+ test_create_extended
+ test_create_small
+ test_move
+}
+
+main
diff --git a/debug/test/test_fs_ext2 b/debug/test/test_fs_ext2
new file mode 100755
index 0000000..f1f2ec0
--- /dev/null
+++ b/debug/test/test_fs_ext2
@@ -0,0 +1,97 @@
+#! /bin/bash
+
+do_diff()
+{
+ mount "${TEST_DRIVE}1" $TEST_MOUNT_POINT -t ext2 > /dev/null
+
+ if diff -rq $1 $2 --exclude lost+found >> test_log; then
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+do_test_diff()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$4" "$5" "$6"; then
+ ped_test_failed
+ return 1
+ fi
+ do_diff "$2" "$3"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs 1 ext2 1 1"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs 1 ext2 1 1\
+ check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+
+ ped_test "mkpartfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary ext2 1 $DEFAULT_END\
+ check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+
+ ped_test "mkfs"\
+ "mkfs 1 ext2\
+ check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+}
+
+prepare_resize_tests()
+{
+ part_num=1
+ part=$TEST_DRIVE$part_num
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+
+ mount $part $TEST_MOUNT_POINT -t ext2 \
+ && cp $TEST_DATA/* $TEST_MOUNT_POINT -r
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+test_resize_move_end_forward()
+{
+ do_test_diff "resize: move end forward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $[ $DEFAULT_END + 5 ] check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+}
+
+test_resize_move_end_forward_big()
+{
+ do_test_diff "resize: move end forward (big)"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $[ $DEFAULT_END + 200 ] check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+}
+
+test_resize_move_end_backward()
+{
+ do_test_diff "resize: move end backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $DEFAULT_END check 1"\
+ "/sbin/e2fsck -n -f ${TEST_DRIVE}1"
+}
+
+main()
+{
+ export DEFAULT_END=200
+
+ if ! test_mkpartfs; then
+ return 1
+ fi
+
+ prepare_resize_tests
+ test_resize_move_end_forward
+ test_resize_move_end_backward
+ test_resize_move_end_forward_big
+ test_resize_move_end_backward
+}
+
+main
diff --git a/debug/test/test_fs_fat b/debug/test/test_fs_fat
new file mode 100755
index 0000000..6eddecb
--- /dev/null
+++ b/debug/test/test_fs_fat
@@ -0,0 +1,180 @@
+#! /bin/bash
+
+do_diff()
+{
+ mount -t vfat ${TEST_DRIVE}1 $TEST_MOUNT_POINT > /dev/null
+
+ if diff -rq $1 $2 >> test_log; then
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+do_test_diff()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$4" "$5" "$6" "$7"; then
+ ped_test_failed
+ return 1
+ fi
+ do_diff "$2" "$3"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs fat16 minimum size"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary fat16 0 1\
+ check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+
+ ped_test "mkpartfs fat32 minimum size"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary fat32 0 1\
+ check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+
+ ped_test "mkpartfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary fat32 1 $DEFAULT_END\
+ check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+
+ ped_test "mkfs"\
+ "mkfs 1 fat32\
+ check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+}
+
+prepare_resize_tests()
+{
+ part_num=1
+ part=$TEST_DRIVE$part_num
+ hole_parent=`echo $TEST_DATA_HOLE | sed -e "s/[-_.a-zA-Z0-9]+\///g"`
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+
+ mount $part $TEST_MOUNT_POINT -t vfat \
+ && cp -r $TEST_DATA/* $TEST_MOUNT_POINT \
+ && cp -r $TEST_DATA $TEST_MOUNT_POINT/tmp_copy \
+ && rm -rf $TEST_MOUNT_POINT/$TEST_DATA_HOLE \
+ && mv $TEST_MOUNT_POINT/tmp_copy/$TEST_DATA_HOLE \
+ $TEST_MOUNT_POINT/$hole_parent \
+ && rm -rf $TEST_MOUNT_POINT/tmp_copy
+ umount $TEST_MOUNT_POINT
+}
+
+clearfat()
+{
+ $TEST_PARTED_CLEARFAT $TEST_DRIVE $1
+}
+
+test_resize_move_start_forward()
+{
+# geometry beforehand: 1 to $DEFAULT_END
+ do_test_diff "resize: move start forward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 5 $DEFAULT_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_resize_move_start_backward()
+{
+# geometry beforehand: 5 to $DEFAULT_END
+ do_test_diff "resize: move start backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $DEFAULT_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_resize_move_end_forward()
+{
+# geometry beforehand: 1 to $DEFAULT_END
+ do_test_diff "resize: move end forward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $[ $DEFAULT_END + 5 ] check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_resize_move_end_backward()
+{
+# geometry beforehand: 1 to $[$DEFAULT_END + 5]
+ do_test_diff "resize: move end backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $DEFAULT_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_convert_fat16_fat32_shrink_cluster()
+{
+# geometry beforehand: 1 to $DEFAULT_END
+ do_test_diff \
+ "resize: convert from FAT16 to FAT32, shrinking the cluster size"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $FAT32_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_convert_fat32_fat16()
+{
+# geometry beforehand: 1 to $FAT16_SMALL_END
+ do_test_diff "resize: convert from FAT32 to FAT16"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $FAT32_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+test_convert_fat16_fat32()
+{
+# geometry beforehand: 1 to $FAT32_END
+ do_test_diff "resize: convert from FAT16 to FAT32"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $FAT16_SMALL_END check 1"\
+ "/sbin/dosfsck ${TEST_DRIVE}1"
+ clearfat 1
+}
+
+#test_convert_fat32_fat16_shrink_cluster()
+#{
+#}
+
+#test_fat16_shrink_cluster()
+#{
+#}
+
+#test_fat32_shrink_cluster()
+#{
+#}
+
+main()
+{
+ export DEFAULT_END=300
+ export FAT32_END=600
+ export FAT16_SMALL_END=200
+
+ if ! test_mkpartfs; then
+ return 1
+ fi
+
+ prepare_resize_tests
+ test_resize_move_start_forward
+ test_resize_move_start_backward
+ test_resize_move_end_forward
+ test_resize_move_end_backward
+
+# prepare_resize_tests
+ test_convert_fat16_fat32_shrink_cluster
+ test_convert_fat32_fat16
+ test_convert_fat16_fat32
+}
+
+main
diff --git a/debug/test/test_fs_hfs b/debug/test/test_fs_hfs
new file mode 100644
index 0000000..cb0d3f1
--- /dev/null
+++ b/debug/test/test_fs_hfs
@@ -0,0 +1,90 @@
+#!/bin/bash
+# fsck_hfs seems to be broken : it doesn't even succeed in scanning a freshly
+# created by newfs_hfs partition.
+
+do_diff()
+{
+ mount "${TEST_DRIVE}1" $TEST_MOUNT_POINT -t $FILE_SYSTEM > /dev/null
+
+ if diff -rq $1 $2 --exclude lost+found >> test_log; then
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+do_test_diff()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$4" "$5" "$6"; then
+ ped_test_failed
+ return 1
+ fi
+ do_diff "$2" "$3"
+}
+
+
+test_newfs_hfs()
+{
+# -h option for newfs_hfs makes it use legacy HFS (not Plus)
+# -dfn for fsck_hfs means Debug, Force, No
+# Debug => print more information
+# Force => force check even if clean bit is set
+# No => don't modify the F.S.
+ ped_test "mkpart && newfs_hfs && fsck_hfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpart primary $FILE_SYSTEM 1 $DEFAULT_END"\
+ "newfs_hfs -h -v \"PED HFS TEST\" ${TEST_DRIVE}1"
+# &&\
+# fsck_hfs -dfn ${TEST_DRIVE}1"
+}
+
+prepare_resize_tests()
+{
+ part_num=1
+ part=$TEST_DRIVE$part_num
+ hole_parent=`echo $TEST_DATA_HOLE | sed -e "s/[-_.a-zA-Z0-9]+\///g"`
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+
+ mount $part $TEST_MOUNT_POINT -t $FILE_SYSTEM \
+ && cp $TEST_DATA/* $TEST_MOUNT_POINT -r \
+ && cp -r $TEST_DATA $TEST_MOUNT_POINT/tmp_copy \
+ && rm -rf $TEST_MOUNT_POINT/$TEST_DATA_HOLE \
+ && mv $TEST_MOUNT_POINT/tmp_copy/$TEST_DATA_HOLE \
+ $TEST_MOUNT_POINT/$hole_parent \
+ && rm -rf $TEST_MOUNT_POINT/tmp_copy
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+test_resize_move_end_backward()
+{
+# -dfn for fsck_hfs means Debug, Force, No
+# Debug => print more information
+# Force => force check even if clean bit is set
+# No => don't modify the F.S.
+ do_test_diff "resize: move end backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $RESIZE_END"\
+ ""
+#fsck_hfs -dfn ${TEST_DRIVE}1 2>&1"
+}
+
+main()
+{
+ export DEFAULT_END=250
+ export RESIZE_END=200
+ export FILE_SYSTEM=hfs
+
+ if ! test_newfs_hfs; then
+ return 1
+ fi
+
+ prepare_resize_tests
+ test_resize_move_end_backward
+}
+
+main
diff --git a/debug/test/test_fs_hfsplus b/debug/test/test_fs_hfsplus
new file mode 100644
index 0000000..39652df
--- /dev/null
+++ b/debug/test/test_fs_hfsplus
@@ -0,0 +1,94 @@
+#!/bin/bash
+# fsck_hfs seems to be broken : it doesn't even succeed in scanning a freshly
+# created by newfs_hfs partition.
+# update : retry with my newfs_hfs that round file system size down to 4 ko
+
+do_diff()
+{
+ mount "${TEST_DRIVE}1" $TEST_MOUNT_POINT -t $FILE_SYSTEM > /dev/null
+
+ if diff -rq $1 $2 --exclude lost+found >> test_log; then
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+do_test_diff()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$4" "$5" "$6"; then
+ ped_test_failed
+ return 1
+ fi
+ do_diff "$2" "$3"
+}
+
+
+test_newfs_hfs()
+{
+# -w option for newfs_hfs adds an HFS wrapper around the HFS+ F.S.
+# update : don't use -w yet because it doesn't works well
+# it seems that the wrapper bad block file is stored differently by
+# newfs_hfs than by mac os X install format program
+# -dfn for fsck_hfs means Debug, Force, No
+# Debug => print more information
+# Force => force check even if clean bit is set
+# No => don't modify the F.S.
+ ped_test "mkpart && newfs_hfs && fsck_hfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpart primary $FILE_SYSTEM 1 $DEFAULT_END"\
+ "newfs_hfs -v \"PED HFS TEST\" ${TEST_DRIVE}1"
+# &&\
+# fsck_hfs -dfn ${TEST_DRIVE}1"
+}
+
+prepare_resize_tests()
+{
+ part_num=1
+ part=$TEST_DRIVE$part_num
+ hole_parent=`echo $TEST_DATA_HOLE | sed -e "s/[-_.a-zA-Z0-9]+\///g"`
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+
+ mount $part $TEST_MOUNT_POINT -t $FILE_SYSTEM \
+ && cp $TEST_DATA/* $TEST_MOUNT_POINT -r \
+ && cp -r $TEST_DATA $TEST_MOUNT_POINT/tmp_copy \
+ && rm -rf $TEST_MOUNT_POINT/$TEST_DATA_HOLE \
+ && mv $TEST_MOUNT_POINT/tmp_copy/$TEST_DATA_HOLE \
+ $TEST_MOUNT_POINT/$hole_parent \
+ && rm -rf $TEST_MOUNT_POINT/tmp_copy
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+test_resize_move_end_backward()
+{
+# -dfn for fsck_hfs means Debug, Force, No
+# Debug => print more information
+# Force => force check even if clean bit is set
+# No => don't modify the F.S.
+ do_test_diff "resize: move end backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $RESIZE_END"\
+ ""
+#fsck_hfs -dfn ${TEST_DRIVE}1 2>&1"
+}
+
+main()
+{
+ export DEFAULT_END=250
+ export RESIZE_END=200
+ export FILE_SYSTEM=hfsplus
+
+ if ! test_newfs_hfs; then
+ return 1
+ fi
+
+ prepare_resize_tests
+ test_resize_move_end_backward
+}
+
+main
diff --git a/debug/test/test_fs_linux_swap b/debug/test/test_fs_linux_swap
new file mode 100755
index 0000000..512dded
--- /dev/null
+++ b/debug/test/test_fs_linux_swap
@@ -0,0 +1,68 @@
+#! /bin/bash
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary linux-swap 1 $DEFAULT_END\
+ check 1"
+
+ ped_test "mkfs"\
+ "mkfs 1 linux-swap\
+ check 1"
+}
+
+do_test_swap()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$2" "$3"; then
+ ped_test_failed
+ return 1
+ fi
+ if /sbin/swapon "${TEST_DRIVE}1"; then
+ /sbin/swapoff "${TEST_DRIVE}1"
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+}
+
+test_resize_move_start_forward()
+{
+ do_test_swap "resize: move start forward"\
+ "resize 1 5 $DEFAULT_END check 1"
+}
+
+test_resize_move_start_backward()
+{
+ do_test_swap "resize: move start backward"\
+ "resize 1 1 $DEFAULT_END check 1"
+}
+
+test_resize_move_end_forward()
+{
+ do_test_swap "resize: move end forward"\
+ "resize 1 1 $[ $DEFAULT_END + 5 ] check 1"
+}
+
+test_resize_move_end_backward()
+{
+ do_test_swap "resize: move end backward"\
+ "resize 1 1 $DEFAULT_END check 1"
+}
+
+main()
+{
+ export DEFAULT_END=200
+
+ if ! test_mkpartfs; then
+ return 1
+ fi
+
+ test_resize_move_start_forward
+ test_resize_move_start_backward
+ test_resize_move_end_forward
+ test_resize_move_end_backward
+}
+
+main
diff --git a/debug/test/test_fs_reiserfs b/debug/test/test_fs_reiserfs
new file mode 100755
index 0000000..7e1ffdf
--- /dev/null
+++ b/debug/test/test_fs_reiserfs
@@ -0,0 +1,97 @@
+#! /bin/bash
+
+do_diff()
+{
+ mount "${TEST_DRIVE}1" $TEST_MOUNT_POINT -t reiserfs > /dev/null
+
+ if diff -rq $1 $2 --exclude lost+found >> test_log; then
+ ped_test_ok
+ else
+ ped_test_failed
+ fi
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+do_test_diff()
+{
+ ped_testing "$1"
+ if ped_test_get_val "$4" "$5" "$6"; then
+ ped_test_failed
+ return 1
+ fi
+ do_diff "$2" "$3"
+}
+
+test_mkpartfs()
+{
+ ped_test "mkpartfs primary reiserfs 1 1"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary reiserfs 1 1\
+ check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+
+ ped_test "mkpartfs"\
+ "mklabel $TEST_FS_USE_DISK_LABEL\
+ mkpartfs primary reiserfs 1 $DEFAULT_END\
+ check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+
+ ped_test "mkfs"\
+ "mkfs 1 reiserfs\
+ check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+}
+
+prepare_resize_tests()
+{
+ part_num=1
+ part=$TEST_DRIVE$part_num
+
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+
+ mount $part $TEST_MOUNT_POINT -t reiserfs \
+ && cp $TEST_DATA/* $TEST_MOUNT_POINT -r
+ umount $TEST_MOUNT_POINT 2>&1 > /dev/null
+}
+
+test_resize_move_end_forward()
+{
+ do_test_diff "resize: move end forward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $[ $DEFAULT_END + 5 ] check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+}
+
+test_resize_move_end_forward_big()
+{
+ do_test_diff "resize: move end forward (big)"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $[ $DEFAULT_END + 200 ] check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+}
+
+test_resize_move_end_backward()
+{
+ do_test_diff "resize: move end backward"\
+ $TEST_DATA $TEST_MOUNT_POINT \
+ "resize 1 1 $DEFAULT_END check 1"\
+ "echo Yes | /sbin/reiserfsck -q ${TEST_DRIVE}1 2>&1"
+}
+
+main()
+{
+ export DEFAULT_END=200
+
+ if ! test_mkpartfs; then
+ return 1
+ fi
+
+ prepare_resize_tests
+ test_resize_move_end_forward
+ test_resize_move_end_backward
+ test_resize_move_end_forward_big
+ test_resize_move_end_backward
+}
+
+main
diff --git a/debug/test/testrc b/debug/test/testrc
new file mode 100644
index 0000000..a2d154f
--- /dev/null
+++ b/debug/test/testrc
@@ -0,0 +1,40 @@
+# fill this in! It'll refuse to run if you don't. I don't want this
+# configuration used to clobber your machine :-)
+TEST_HOST=satisfactory
+
+# Parted distribution base
+# TEST_PARTED_BASE=../..
+TEST_PARTED_BASE=/home/parted/cvs/stable
+
+# where to find GNU parted
+TEST_PARTED_COMMAND=$TEST_PARTED_BASE/parted/parted
+
+# where to find clearfat
+TEST_PARTED_CLEARFAT=$TEST_PARTED_BASE/debug/clearfat/clearfat
+
+# the drive to be completely clobbered!
+TEST_DRIVE=/dev/hdb
+
+# The size of the disk, in megabytes
+TEST_DRIVE_SIZE=19092
+
+# where TEST_DRIVE gets mounted
+TEST_MOUNT_POINT=/mnt/test
+
+# where to get test data from. Clear text is nice - easier to debug.
+TEST_DATA=/usr/src/kernel-source-2.4.20
+
+# data to delete and replace, to "fragment" the drive.
+TEST_DATA_HOLE=include
+
+# which disk label to use for testing file systems
+TEST_FS_USE_DISK_LABEL=msdos
+
+# set to 1 if you want to shut up the kernel's annoying messages
+QUIET_KERNEL=1
+
+# set to 1 if you want logging of everything, including successful tests
+VERBOSE_LOGS=1
+
+# set this if you want to do malloc() debugging with mtrace
+#MALLOC_TRACE=malloc-trace
diff --git a/dist-check.mk b/dist-check.mk
new file mode 100644
index 0000000..70ad2af
--- /dev/null
+++ b/dist-check.mk
@@ -0,0 +1,174 @@
+# Most of this is probably too coreutils-centric to be useful to other packages.
+
+bin=bin-$$$$
+
+write_loser = printf '\#!%s\necho $$0: bad path 1>&2; exit 1\n' '$(SHELL)'
+
+tmpdir = $(abs_top_builddir)/tests/torture
+
+t=$(tmpdir)/$(PACKAGE)/test
+pfx=$(t)/i
+
+built_programs = \
+ $$(echo 'spy:;@echo $$(PROGRAMS)' \
+ | MAKEFLAGS= $(MAKE) -s -C parted -f Makefile -f - spy \
+ | fmt -1 | sed 's,$(EXEEXT)$$,,' | sort -u)
+
+# More than once, tainted build and source directory names would
+# have caused at least one "make check" test to apply "chmod 700"
+# to all directories under $HOME. Make sure it doesn't happen again.
+tp = $(tmpdir)/taint
+t_prefix = $(tp)/a
+t_taint = '$(t_prefix) b'
+fake_home = $(tp)/home
+
+# When extracting from a distribution tarball, extract using the fastest
+# method possible. With dist-xz, that means using the *.xz file.
+ifneq ('', $(filter *.xz, $(DIST_ARCHIVES)))
+ tar_decompress_opt_ = J
+ suffix_ = xz
+else
+ ifneq ('', $(filter *.gz, $(DIST_ARCHIVES)))
+ tar_decompress_opt_ = z
+ suffix_ = gz
+ else
+ tar_decompress_opt_ = j
+ suffix_ = bz2
+ endif
+endif
+amtar_extract_ = $(AMTAR) -$(tar_decompress_opt_)xf
+preferred_tarball_ = $(distdir).tar.$(suffix_)
+
+# Ensure that tests run from tainted build and src dir names work,
+# and don't affect anything in $HOME. Create witness files in $HOME,
+# record their attributes, and build/test. Then ensure that the
+# witnesses were not affected.
+# Skip this test when using libtool, since libtool-generated scripts
+# cannot deal with a space-tainted srcdir.
+ALL_RECURSIVE_TARGETS += taint-distcheck
+taint-distcheck: $(DIST_ARCHIVES)
+ grep '^[ ]*LT_INIT' configure.ac >/dev/null && exit 0
+ test -d $(t_taint) && chmod -R 700 $(t_taint) || :
+ -rm -rf $(t_taint) $(fake_home)
+ mkdir -p $(t_prefix) $(t_taint) $(fake_home)
+ $(amtar_extract_) $(preferred_tarball_) -C $(t_taint)
+ mkfifo $(fake_home)/fifo
+ touch $(fake_home)/f
+ mkdir -p $(fake_home)/d/e
+ ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-before
+ HOME=$(fake_home); export HOME; \
+ cd $(t_taint)/$(distdir) \
+ && ./configure \
+ && $(MAKE) \
+ && $(MAKE) check \
+ && ls -lR $(fake_home) $(t_prefix) > $(tp)/.ls-after \
+ && diff $(tp)/.ls-before $(tp)/.ls-after \
+ && test -d $(t_prefix)
+ rm -rf $(tp)
+
+# Verify that a twisted use of --program-transform-name=PROGRAM works.
+define install-transform-check
+ echo running install-transform-check \
+ && rm -rf $(pfx) \
+ && $(MAKE) program_transform_name='s/.*/zyx/' \
+ prefix=$(pfx) install \
+ && test "$$(echo $(pfx)/sbin/*)" = "$(pfx)/sbin/zyx" \
+ && test "$$(find $(pfx)/share/man -type f|sed 's,.*/,,;s,\..*,,')" = "zyx"
+endef
+
+# Install, then verify that all binaries and man pages are in place.
+# Note that neither the binary, ginstall, nor the [.1 man page is installed.
+define my-instcheck
+ echo running my-instcheck; \
+ $(MAKE) prefix=$(pfx) install \
+ && test ! -f $(pfx)/bin/ginstall \
+ && { fail=0; \
+ for i in $(built_programs); do \
+ test "$$i" = ginstall && i=install; \
+ for j in "$(pfx)/sbin/$$i" \
+ "$(pfx)/share/man/man8/$$i.8"; do \
+ case $$j in *'[.1') continue;; esac; \
+ test -f "$$j" && : \
+ || { echo "$$j not installed"; fail=1; }; \
+ done; \
+ done; \
+ test $$fail = 1 && exit 1 || :; \
+ }
+endef
+
+# The hard-linking for-loop below ensures that there is a bin/ directory
+# full of all of the programs under test (except the ones that are required
+# for basic Makefile rules), all symlinked to the just-built "false" program.
+# This is to ensure that if ever a test neglects to make PATH include
+# the build srcdir, these always-failing programs will run.
+# Otherwise, it is too easy to test the wrong programs.
+# Note that "false" itself is a symlink to true, so it too will malfunction.
+define coreutils-path-check
+ { \
+ echo running coreutils-path-check; \
+ if test -f $(srcdir)/src/true.c; then \
+ fail=1; \
+ mkdir $(bin) \
+ && ($(write_loser)) > $(bin)/loser \
+ && chmod a+x $(bin)/loser \
+ && for i in $(built_programs); do \
+ case $$i in \
+ rm|expr|basename|echo|sort|ls|tr);; \
+ cat|dirname|mv|wc);; \
+ *) ln $(bin)/loser $(bin)/$$i;; \
+ esac; \
+ done \
+ && ln -sf ../src/true $(bin)/false \
+ && PATH=`pwd`/$(bin)$(PATH_SEPARATOR)$$PATH \
+ $(MAKE) -C tests check \
+ && { test -d gnulib-tests \
+ && $(MAKE) -C gnulib-tests check \
+ || :; } \
+ && rm -rf $(bin) \
+ && fail=0; \
+ else \
+ fail=0; \
+ fi; \
+ test $$fail = 1 && exit 1 || :; \
+ }
+endef
+
+# Use this to make sure we don't run these programs when building
+# from a virgin compressed tarball file, below.
+null_AM_MAKEFLAGS ?= \
+ ACLOCAL=false \
+ AUTOCONF=false \
+ AUTOMAKE=false \
+ AUTOHEADER=false \
+ GPERF=false \
+ MAKEINFO=false
+
+ALL_RECURSIVE_TARGETS += my-distcheck
+my-distcheck: $(DIST_ARCHIVES) $(local-check)
+ $(MAKE) syntax-check
+ $(MAKE) check
+ -rm -rf $(t)
+ mkdir -p $(t)
+ $(amtar_extract_) $(preferred_tarball_) -C $(t)
+ (set -e; cd $(t)/$(distdir); \
+ ./configure --quiet --enable-gcc-warnings --disable-nls; \
+ $(MAKE) AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)'; \
+ $(MAKE) dvi; \
+ $(install-transform-check); \
+ $(my-instcheck); \
+ $(coreutils-path-check); \
+ $(MAKE) distclean \
+ )
+ (cd $(t) && mv $(distdir) $(distdir).old \
+ && $(amtar_extract_) - ) < $(preferred_tarball_)
+ # With post-v1.15 automake, "distclean" would fail to remove .deps
+ # directories, leading to a spurious failure of the following recursive diff.
+ # FIXME: remove this, once automake is fixed.
+ find $(t)/$(distdir).old $(t)/$(distdir) -name .deps | xargs -r rmdir
+ diff -ur $(t)/$(distdir).old $(t)/$(distdir)
+ -rm -rf $(t)
+ rmdir $(tmpdir)/$(PACKAGE) $(tmpdir)
+ @echo "========================"; \
+ echo "ready for distribution:"; \
+ for i in $(DIST_ARCHIVES); do echo " $$i"; done; \
+ echo "========================"
diff --git a/doc/API b/doc/API
new file mode 100644
index 0000000..ea83aaf
--- /dev/null
+++ b/doc/API
@@ -0,0 +1,286 @@
+===============================================================================
+ GNU libparted API
+===============================================================================
+
+
+
+
+
+
+
+
+ <<< This file is deprecated and being converted
+ to Doxygen in-line documentation.
+ Until this is finished, both are incomplete
+ but fully document the API together. >>>
+
+
+ ( scroll down to read )
+
+
+
+
+
+ by Andrew Clausen <clausen@gnu.org>,
+ Leslie P. Polzer <polzer@gnu.org>
+
+ Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
+ Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with the no Invariant Sections, with the no Front-Cover Texts, and
+ with no Back-Cover Texts. A copy of the license is included in the
+ file, COPYING.DOC.
+
+
+CONTENTS
+--------
+
+1 Introduction
+2 Initialising libparted
+3 PedDevice
+4 PedDisk, PedDiskType
+5 PedGeometry
+6 PedPartition, PedPartitionType
+7 PedFileSystem, PedFileSystemType
+8 PedConstraint, PedAlignment
+9 PedTimer
+10 PedUnit
+11 Exceptions
+
+-------------------------------------------------------------------------------
+1 INTRODUCTION
+-------------------------------------------------------------------------------
+
+GNU Parted is built on top of libparted, which does all of the real work.
+libparted provides an API capable of manipulating partition tables, and
+the filesystems on them.
+
+The main motivation for separating the back-end into a separate library was
+to encourage different GNU/Linux distributions to encorporate their own
+customized front-end into the install process.
+
+This documents the API -- not the implementation details of libparted.
+Documentation that is not relevant to programs using the API are marked with
+INTERNAL. Apart from this file, a good place to look would be
+parted/parted.c, the front-end's source, and the TUTORIAL file (not finished
+yet!).
+
+This documentation isn't as complete as it should be. Feel free to ask
+questions, either to me personally (clausen@gnu.org), or to the mailing list
+(bug-parted@gnu.org).
+
+1.1 TERMINOLOGY
+-------------------
+Some of the terminology is a bit weird, so you might want to read this.
+
+CONSTRAINT a set of conditions that must be satisfied, for
+ a given GEOMETRY of a PARTITION.
+
+DEVICE a storage device.
+
+DISK a storage device, with a valid partition table.
+
+EXCEPTION an event that needs attention.
+
+EXTENDED PARTITION a PRIMARY PARTITION, that may contain LOGICAL
+ PARTITIONS instead of a file system. There is at most
+ one extended partition.
+
+FILE SYSTEM any data that resides on a partition. For the purposes
+ for GNU Parted, this includes swap devices.
+
+GEOMETRY a description of a continuous region on a disk. eg,
+ partitions have a geometry.
+
+HIDDEN PARTITION a partition that is hidden from MS operating systems.
+ Only FAT partitions may be hidden.
+
+LOGICAL PARTITION like normal partitions, but they lie inside the
+ extended partition.
+
+PARTITION a continuous region on a disk where a file system may
+ reside.
+
+PRIMARY PARTITION a normal, vanilla, partition.
+
+PARTITION TABLE also, DISK LABEL. A description of where the
+ partitions lie, and information about those partitions.
+ For example, what type of file system resides on them.
+ The partition table is usually at the start of the
+ disk.
+
+TIMER a progress meter. It is an entity that keeps track
+ of time, and who to inform when something interesting
+ happens.
+
+1.2 DESIGN
+--------------
+libparted has a fairly object-oriented design. The most important objects are:
+
+PedArchitecture describes support for an "archicture", which is sort
+ of like "operating system", but could also be,
+ for example, another libparted environment, EVMS, etc.
+PedConstraint a constraint on the geometry of a partition
+PedDevice a storage device
+PedDisk a device + partition table
+PedFileSystem a filesystem, associated with a PedGeometry, NOT a
+ PedPartition.
+PedGeometry a continious region on a device
+PedPartition a partition (basically PedGeometry plus some attributes)
+PedTimer a timer keeps track of progress and time
+
+All functions return 0 (or NULL) on failure and non-zero (or non-NULL) on
+success. If a function fails, an exception is thrown. This may be handled by
+either an exception handler, or the calling function (see the section on
+exceptions).
+
+All objects should be considered read-only; they should only be modified by
+calls to libparted's API.
+
+-------------------------------------------------------------------------------
+2 INITIALISING LIBPARTED
+-------------------------------------------------------------------------------
+
+Headers for libparted can be included with:
+
+#include <parted/parted.h>
+
+Parted automatically initialises itself via an __attribute__ ((constructor))
+function.
+
+However, you might want to set the exception handler with
+ped_exception_set_handler(). libparted does come with a default exception
+handler, if you're feeling lazy.
+
+Here's a minimal example:
+
+#include <parted/parted.h>
+
+int
+main()
+{
+ /* automatically initialized */
+ ped_exception_set_handler(exception_handler); /* see section 7 */
+ return 0;
+ /* automatically cleaned up */
+}
+
+-----------------------------------------------------------------------------
+5 PEDGEOMETRY
+-----------------------------------------------------------------------------
+
+5.1 FIELDS
+--------------
+
+5.2 FUNCTIONS
+-----------------
+
+
+-----------------------------------------------------------------------------
+6 PEDPARTITION, PEDPARTITIONTYPE
+-----------------------------------------------------------------------------
+
+interface: <parted/disk.h>
+implementation: libparted/disk.c
+
+A PedPartition represents a partition (surprise!). PedPartitions have weird
+relationships with PedDisks. Hence, many functions for manipulating partitions
+will be called ped_disk_* - so have a look at the PedDisk documentation as well.
+
+Parted creates "imaginary" free space and metadata partitions. You can't
+do any operations on these partitions (like set_geometry, {set,get}_flag, etc.)
+Partitions that are not free space or metadata partitions are said to
+be "active" partitions. You can use ped_partition_is_active() to check.
+
+6.1 FIELDS
+--------------
+
+
+6.2 FUNCTIONS
+-----------------
+
+
+-----------------------------------------------------------------------------
+7 PEDFILESYSTEM, PEDFILESYSTEMTYPE
+-----------------------------------------------------------------------------
+
+
+7.1 FIELDS
+--------------
+
+
+7.2 FUNCTIONS
+-----------------
+
+
+-----------------------------------------------------------------------------
+8 PEDCONSTRAINT, PEDALIGNMENT
+-----------------------------------------------------------------------------
+
+
+"Alignments" are restrictions on the location of a sector in the form of:
+
+ sector = offset + X * grain_size
+
+For example, logical partitions on msdos disk labels usually have a constraint
+with offset = 63 and grain_size = 16065 (Long story!). An important
+(and non-obvious!) property of alignment restrictions is they are closed
+under intersection, i.e. if you take two constraints, like (offset, grain_size)
+= (63, 16065) and (0, 4), then either:
+ * there are no valid solutions
+ * all solutions can be expressed in the form of (offset + X * grain_size)
+In the example, the intersection of the constraint is (16128, 64260).
+
+For more information on the maths, see the source -- there's a large comment
+containing proofs above ped_alignment_intersect() in libparted/natmath.c
+
+The restrictions on the location of the start and end are in the form of
+PedGeometry objects -- continous regions in which the start and end must lie.
+Obviously, these restrictions are also closed under intersection.
+
+The other restriction -- the minimum size -- is also closed under intersection.
+(The intersection of 2 minimum size restrictions is the maximum of the
+2 values)
+
+FIXME: mention ped_alignment_any
+
+8.2 FUNCTIONS
+-----------------
+
+
+
+-----------------------------------------------------------------------------
+9 PEDTIMER
+-----------------------------------------------------------------------------
+
+9.1 FIELDS
+--------------
+
+typedef void PedTimerHandler (PedTimer* timer, void* context);
+
+
+9.2 FUNCTIONS
+-----------------
+
+
+-----------------------------------------------------------------------------
+10 PEDUNIT
+-----------------------------------------------------------------------------
+
+
+10.1 CONSTANTS
+-----------------
+
+10.2 FUNCTIONS
+-----------------
+
+
+-----------------------------------------------------------------------------
+11 EXCEPTIONS
+-----------------------------------------------------------------------------
+
+11.1 FIELDS
+--------------
diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am
new file mode 100644
index 0000000..c5f2a77
--- /dev/null
+++ b/doc/C/Makefile.am
@@ -0,0 +1,28 @@
+## Process this file with automake to produce Makefile.in
+
+dist_man8_MANS = \
+ parted.8 \
+ partprobe.8
+
+.PHONY: updatepo
+# Update the POT in srcdir
+# Make sure the update does not only consist in a new POT-Creation-Date
+# Don't do anything if $(srcdir) is read-only (i.e., for "make distcheck").
+updatepo:
+ cd $(srcdir); \
+ test -w . || exit 0; \
+ test -d po || mkdir po; \
+ for name in $(dist_man8_MANS); do \
+ echo $$name; \
+ test -f po/$$name.pot || touch po/$$name.pot; \
+ cp po/$$name.pot po/$$name.new.pot; \
+ po4a-updatepo -f man -m $$name -p po/$$name.new.pot; \
+ diff -I '^\"POT-Creation-Date: ' po/$$name.pot po/$$name.new.pot 2>&1 > /dev/null; \
+ if [ $$? ]; then \
+ mv po/$$name.new.pot po/$$name.pot; \
+ else \
+ rm -f po/$$name.new.pot; \
+ fi; \
+ done
+
+dist-hook: updatepo
diff --git a/doc/C/Makefile.in b/doc/C/Makefile.in
new file mode 100644
index 0000000..5e88523
--- /dev/null
+++ b/doc/C/Makefile.in
@@ -0,0 +1,1898 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/C
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man8dir = $(mandir)/man8
+am__installdirs = "$(DESTDIR)$(man8dir)"
+NROFF = nroff
+MANS = $(dist_man8_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(dist_man8_MANS) $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_man8_MANS = \
+ parted.8 \
+ partprobe.8
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/C/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/C/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-man8: $(dist_man8_MANS)
+ @$(NORMAL_INSTALL)
+ @list1='$(dist_man8_MANS)'; \
+ list2=''; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list='$(dist_man8_MANS)'; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ cscopelist-am ctags-am dist-hook distclean distclean-generic \
+ distclean-libtool distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man8 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags-am uninstall uninstall-am uninstall-man \
+ uninstall-man8
+
+.PRECIOUS: Makefile
+
+
+.PHONY: updatepo
+# Update the POT in srcdir
+# Make sure the update does not only consist in a new POT-Creation-Date
+# Don't do anything if $(srcdir) is read-only (i.e., for "make distcheck").
+updatepo:
+ cd $(srcdir); \
+ test -w . || exit 0; \
+ test -d po || mkdir po; \
+ for name in $(dist_man8_MANS); do \
+ echo $$name; \
+ test -f po/$$name.pot || touch po/$$name.pot; \
+ cp po/$$name.pot po/$$name.new.pot; \
+ po4a-updatepo -f man -m $$name -p po/$$name.new.pot; \
+ diff -I '^\"POT-Creation-Date: ' po/$$name.pot po/$$name.new.pot 2>&1 > /dev/null; \
+ if [ $$? ]; then \
+ mv po/$$name.new.pot po/$$name.pot; \
+ else \
+ rm -f po/$$name.new.pot; \
+ fi; \
+ done
+
+dist-hook: updatepo
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/C/parted.8 b/doc/C/parted.8
new file mode 100644
index 0000000..3069c33
--- /dev/null
+++ b/doc/C/parted.8
@@ -0,0 +1,166 @@
+.TH PARTED 8 "2021 September 28" parted "GNU Parted Manual"
+.SH NAME
+parted \- a partition manipulation program
+.SH SYNOPSIS
+.B parted
+[options] [device [command [options...]...]]
+.SH DESCRIPTION
+.B parted
+is a program to manipulate disk partitions. It supports multiple partition
+table formats, including MS-DOS and GPT. It is useful for creating space for
+new operating systems, reorganising disk usage, and copying data to new hard
+disks.
+.PP
+This manual page documents \fBparted\fP briefly. Complete documentation is
+distributed with the package in GNU Info format.
+.SH OPTIONS
+.TP
+.B -h, --help
+displays a help message
+.TP
+.B -l, --list
+lists partition layout on all block devices
+.TP
+.B -m, --machine
+displays machine parseable output
+.TP
+.B -j, --json
+displays JSON output
+.TP
+.B -s, --script
+never prompts for user intervention
+.TP
+.B -f, --fix
+automatically answer "fix" to exceptions in script mode
+.TP
+.B -v, --version
+displays the version
+.TP
+.B -a \fIalignment-type\fP, --align \fIalignment-type\fP
+Set alignment for newly created partitions, valid alignment types are:
+.RS
+.IP none
+Use the minimum alignment allowed by the disk type.
+.IP cylinder
+Align partitions to cylinders.
+.IP minimal
+Use minimum alignment as given by the disk topology information. This and
+the opt value will use layout information provided by the disk to align the
+logical partition table addresses to actual physical blocks on the disks.
+The min value is the minimum alignment needed to align the partition properly to
+physical blocks, which avoids performance degradation.
+.IP optimal
+Use optimum alignment as given by the disk topology information. This
+aligns to a multiple of the physical block size in a way that guarantees
+optimal performance.
+.RE
+
+.SH COMMANDS
+.TP
+.B [device]
+The block device to be used. When none is given, \fBparted\fP will use the
+first block device it finds.
+.TP
+.B [command [options]]
+Specifies the command to be executed. If no command is given,
+.BR parted
+will present a command prompt. Possible commands are:
+.RS
+.TP
+.B help \fI[command]\fP
+Print general help, or help on \fIcommand\fP if specified.
+.TP
+.B align-check \fItype\fP \fIpartition\fP
+Check if \fIpartition\fP satisfies the alignment constraint of \fItype\fP.
+\fItype\fP must be "minimal" or "optimal".
+.TP
+.B mklabel \fIlabel-type\fP
+Create a new disklabel (partition table) of \fIlabel-type\fP. \fIlabel-type\fP
+should be one of "aix", "amiga", "bsd", "dvh", "gpt", "loop", "mac", "msdos",
+"pc98", or "sun".
+.TP
+.B mkpart [\fIpart-type\fP \fIname\fP \fIfs-type\fP] \fIstart\fP \fIend\fP
+Create a new partition. \fIpart-type\fP may be specified only with msdos and
+dvh partition tables, it should be one of "primary", "logical", or "extended".
+\fIname\fP is required for GPT partition tables and \fIfs-type\fP is optional.
+\fIfs-type\fP can be one of "btrfs", "ext2", "ext3", "ext4", "fat16", "fat32",
+"hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", "udf", or "xfs".
+.TP
+.B name \fIpartition\fP \fIname\fP
+Set the name of \fIpartition\fP to \fIname\fP. This option works only on Mac,
+PC98, and GPT disklabels. The name can be placed in double quotes, if necessary.
+And depending on the shell may need to also be wrapped in single quotes so that
+the shell doesn't strip off the double quotes.
+.TP
+.B print \fIprint-type\fP
+Display the partition table.
+\fIprint-type\fP is optional, and can be one of devices, free, list, or all.
+.TP
+.B quit
+Exit from \fBparted\fP.
+.TP
+.B rescue \fIstart\fP \fIend\fP
+Rescue a lost partition that was located somewhere between \fIstart\fP and
+\fIend\fP. If a partition is found, \fBparted\fP will ask if you want to
+create an entry for it in the partition table.
+.TP
+.B resizepart \fIpartition\fP \fIend\fP
+Change the \fIend\fP position of \fIpartition\fP. Note that this does not
+modify any filesystem present in the partition.
+.TP
+.B rm \fIpartition\fP
+Delete \fIpartition\fP.
+.TP
+.B select \fIdevice\fP
+Choose \fIdevice\fP as the current device to edit. \fIdevice\fP should usually
+be a Linux hard disk device, but it can be a partition, software raid device,
+or an LVM logical volume if necessary.
+.TP
+.B set \fIpartition\fP \fIflag\fP \fIstate\fP
+Change the state of the \fIflag\fP on \fIpartition\fP to \fIstate\fP.
+Supported flags are: "boot", "root", "swap", "hidden", "raid", "lvm", "lba",
+"legacy_boot", "irst", "msftres", "esp", "chromeos_kernel", "bls_boot", "linux-home",
+"no_automount", "bios_grub", and "palo".
+\fIstate\fP should be either "on" or "off".
+.TP
+.B unit \fIunit\fP
+Set \fIunit\fP as the unit to use when displaying locations and sizes, and for
+interpreting those given by the user when not suffixed with an explicit unit.
+\fIunit\fP can be one of "s" (sectors), "B" (bytes), "kB", "MB", "KiB", "MiB", "GB",
+"GiB", "TB", "TiB", "%" (percentage of device size), "cyl" (cylinders), "chs"
+(cylinders, heads, sectors), or "compact" (megabytes for input, and a
+human-friendly form for output).
+.TP
+.B toggle \fIpartition\fP \fIflag\fP
+Toggle the state of \fIflag\fP on \fIpartition\fP.
+.TP
+.B type \fIpartition\fP \fIid\fP or \fIuuid\fP
+On MS-DOS set the type aka. partition id of \fIpartition\fP to
+\fIid\fP. The \fIid\fP is a value between "0x01" and "0xff". On GPT
+the type-uuid of \fIpartition\fP to \fIuuid\fP.
+.TP
+.B disk_set \fIflag\fP \fIstate\fP
+Change a \fIflag\fP on the disk to \fIstate\fP. A flag can be either "on" or "off".
+Some or all of these flags will be available, depending on what disk label you
+are using. Supported flags are: "pmbr_boot" on GPT to enable the boot flag on the
+GPT's protective MBR partition.
+.TP
+.B disk_toggle \fIflag\fP
+Toggle the state of the disk \fIflag\fP.
+.TP
+.B version
+Display version information and a copyright message.
+.RE
+.SH REPORTING BUGS
+Report bugs to <bug-parted@gnu.org>
+.SH SEE ALSO
+.BR fdisk (8),
+.BR mkfs (8),
+The \fIparted\fP program is fully documented in the
+.BR info(1)
+format
+.IR "GNU partitioning software"
+manual.
+.SH AUTHOR
+This manual page was written by Timshel Knoll <timshel@debian.org>,
+for the Debian GNU/Linux system (but may be used by others).
diff --git a/doc/C/partprobe.8 b/doc/C/partprobe.8
new file mode 100644
index 0000000..48ae5dc
--- /dev/null
+++ b/doc/C/partprobe.8
@@ -0,0 +1,55 @@
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH PARTPROBE 8 "March 18, 2002" parted "GNU Parted Manual"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+partprobe \- inform the OS of partition table changes
+.SH SYNOPSIS
+.B partprobe
+.RI [ -d ]
+.RI [ -s ]
+.RI [ devices... ]
+.SH DESCRIPTION
+This manual page documents briefly the
+.B partprobe
+command.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
+.\" respectively.
+\fBpartprobe\fP is a program that informs the operating system kernel of
+partition table changes.
+.SH OPTIONS
+This program uses short UNIX style options.
+.TP
+.B -d, --dry-run
+Don't update the kernel.
+.TP
+.B -s, --summary
+Show a summary of devices and their partitions.
+.TP
+.B -h, --help
+Show summary of options.
+.TP
+.B -v, --version
+Show version of program.
+.SH REPORTING BUGS
+Report bugs to <bug-parted@gnu.org>
+.SH SEE ALSO
+.BR parted (8).
+.SH AUTHOR
+This manual page was written by Timshel Knoll <timshel@debian.org>,
+for the Debian GNU/Linux system (but may be used by others).
diff --git a/doc/FAT b/doc/FAT
new file mode 100644
index 0000000..9a3a991
--- /dev/null
+++ b/doc/FAT
@@ -0,0 +1,759 @@
+===============================================================================
+ GNU Parted FAT file system documentation
+===============================================================================
+
+ by Andrew Clausen <clausen@gnu.org>
+
+ Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with the no Invariant Sections, with the no Front-Cover Texts, and
+ with no Back-Cover Texts. A copy of the license is included in the
+ file, COPYING.DOC.
+
+
+CONTENTS
+--------
+
+ PART I - THE FAT FILE SYSTEM
+
+1 Introduction
+
+2 Overview
+
+3 The Boot Sector
+3.1 Data Layout
+3.2 Descriptions of Fields
+3.3 Calculating the ignored fields
+3.4 DOS/Windows bootstrap process
+
+4 The Info Sector
+4.1 Data Layout
+4.2 Descriptions of Fields
+
+5 File Allocation Tables
+
+6 Directory tree
+6.1 Directory entries
+
+ PART II - GNU PARTED'S FAT IMPLEMENTATION
+
+7 Resizing "issues"
+
+8 Overview of GNU Parted's Strategy
+
+===============================================================================
+ PART I - THE FAT FILE SYSTEM
+===============================================================================
+
+-------------------------------------------------------------------------------
+1 INTRODUCTION
+-------------------------------------------------------------------------------
+
+This document describes the FAT filesystem, and GNU Parted's support for it.
+
+Unfortunately, there are no particularly good sources of information on the FAT
+filesystem. The information here was deduced from the source code of about 10
+different programs, documentation from about 20 different sources and testing.
+There are many cases where documentation for FAT from various sources
+(including Microsoft) are misleading, or just plain wrong. For us,
+documentation is correct if it matches the behaviour of Microsoft's
+implementation.
+
+
+-------------------------------------------------------------------------------
+2 OVERVIEW
+-------------------------------------------------------------------------------
+
+FAT is a filesystem that is mainly used by Microsoft DOS, Windows 95,
+Windows 98 and Windows 2000. FAT also stands for File Allocation Table - a
+part of the FAT filesystem.
+
+FAT comes in three flavors: FAT12, FAT16 and FAT32.
+FAT12 is used on floppy disks, and REALLY old hard drives <32Mb. FAT16 is
+typically used on small hard drives <500Mb, and is very inefficient for large
+hard drives. FAT32 is used on hard drives >500Mb under Windows 95 OSR2 and
+later and Windows 2000. These three flavors have important differences (not
+JUST an increase in the maximum possible number of clusters). On FAT12 and
+FAT16 cluster size directly relates to the filesystem size: the number of
+clusters is always between 2041 and 4080 resp. 32761 and 65520.
+
+The FAT filesystem has these parts (on disk, in this order):
+ * a bootsector. This contains all of the information about the filesystem
+- whether it's FAT12, FAT16 or FAT32, how big it is, etc.
+
+ * an information sector (FAT32 only). This contains additional information
+that couldn't fit in the boot sector.
+
+ * file allocation tables (FATs). There are usually two identical copies.
+This is used to store the sequence of clusters that make of files. Essentially,
+if you want to know the number of the cluster that comes after cluster X
+in a file, you look up the number for X. If X is a magic number, it means
+it's the end of the file.
+
+ * clusters. The data inside files are stored in clusters. Most directory
+information is stored in clusters (except the root directory in FAT12 and
+FAT16). Clusters may be 1, 2, 4, 8, etc. sectors. Clusters are numbered,
+counting from 2.
+
+ * directory tree. The FAT filesystem has files and directories (no named
+pipes, links, or anything fancy like that), that are stored in clusters. The
+root directory on FAT12 and FAT16 is stored separately. In FAT32, the root
+directory is stored inside a normal cluster, just like everything else.
+
+
+-------------------------------------------------------------------------------
+3 THE BOOT SECTOR
+-------------------------------------------------------------------------------
+
+The boot sector contains all of the information about the filesystem
+- whether it's FAT12, FAT16 or FAT32, how big it is, etc. It also contains
+the boot loader for the operating system, if there is an operating system
+on the file system. It is always the first thing to appear in the filesystem
+- i.e. it's found at sector 0.
+
+A word of warning: while the values inside the boot sector will always be
+consistent with the file system, many of these values are not read by
+Microsoft's implementation - they are calculated independently.
+
+
+3.1 The Data Layout
+-------------------------------------------------------------------------------
+
+Taken from libparted/fs_fat/bootsector.h:
+
+struct __attribute__ ((packed)) _FatBootSector {
+ __u8 boot_jump[3]; /* 00: Boot strap short or near jump */
+ __u8 system_id[8]; /* 03: system name */
+ __u16 sector_size; /* 0b: bytes per logical sector */
+ __u8 cluster_size; /* 0d: sectors/cluster */
+ __u16 reserved; /* 0e: reserved sectors */
+ __u8 fats; /* 10: number of FATs */
+ __u16 dir_entries; /* 11: number of root directory entries */
+ __u16 sectors; /* 13: if 0, sector_count supersedes */
+ __u8 media; /* 15: media code */
+ __u16 fat_length; /* 16: sectors/FAT for FAT12/16 */
+ __u16 secs_track; /* 18: sectors per track */
+ __u16 heads; /* 1a: number of heads */
+ __u32 hidden; /* 1c: hidden sectors (partition start) */
+ __u32 sector_count; /* 20: no. of sectors (if sectors == 0) */
+
+ union __attribute__ ((packed)) {
+ /* FAT16 fields */
+ struct __attribute__ ((packed)) {
+ __u8 drive_num; /* 24: */
+ __u8 empty_1; /* 25: */
+ __u8 ext_signature; /* 26: always 0x29 */
+ __u32 serial_number; /* 27: */
+ __u8 volume_name [11]; /* 2b: */
+ __u8 fat_name [8]; /* 37: */
+ __u8 boot_code[448]; /* 3f: Boot code (or message) */
+ } fat16;
+ /* FAT32 fields */
+ struct __attribute__ ((packed)) {
+ __u32 fat_length; /* 24: size of FAT in sectors */
+ __u16 flags; /* 28: bit8: fat mirroring, low4: active fat */
+ __u16 version; /* 2a: minor * 256 + major */
+ __u32 root_dir_cluster; /* 2c: */
+ __u16 info_sector; /* 30: */
+ __u16 backup_sector; /* 32: */
+ __u8 empty_1 [12]; /* 34: */
+ __u16 drive_num; /* 40: */
+ __u8 ext_signature; /* 42: always 0x29 */
+ __u32 serial_number; /* 43: */
+ __u8 volume_name [11]; /* 47: */
+ __u8 fat_name [8]; /* 52: */
+ __u8 boot_code[420]; /* 5a: Boot code (or message) */
+ } fat32;
+ } u;
+
+ __u16 boot_sign; /* 1fe: always 0xAA55 */
+};
+
+
+3.2 Descriptions of Fields
+-------------------------------------------------------------------------------
+
+3.2.1 Fields common to FAT12, FAT16 and FAT32
+-----------------------------------------------
+ __u8 boot_jump[3]; /* 00: Boot strap short or near jump */
+This contains the Intel x86 instruction to "jump" to further down in the
+boot sector. This is necessary, because on PC systems, the first sector of
+the disk is loaded and executed. On hard disks of PC systems, the first
+sector of the disk is in fact the Master Boot Record - which contains the
+partition table. The master boot record loads the first sector of the boot
+partition, so the end result is the same for floppy's and hard disks.
+
+
+ __u8 system_id[8]; /* 03: system name */
+This contains the name of the program or operatings system that created the
+file system. For FAT32, it seems you must have "MSWIN4.1" here.
+If this is "MSDMF3.2" (afaik only the "MSDMF" is checked") the partition
+can't be written under Windows 9x, Windows NT and Windows 2000. This is
+how Microsoft realizes read-only installation or distribution floppy disks.
+
+
+ __u16 sector_size; /* 0b: bytes per logical sector */
+This is bizarre. Sectors are always 512 bytes. However, a "logical" sector
+is a hack that allows sectors to be bigger (a multiple of 512 bytes). This
+is rarely used, and untested in GNU Parted at the moment. (Side note: is
+it possible to use this to avoid requiring a cluster resize?)
+
+
+ __u8 cluster_size; /* 0d: sectors/cluster */
+THIS IS IGNORED BY MICROSOFT'S IMPLEMENTATION OF FAT12 AND FAT16! (See section
+3.3) This contains the size of all clusters, given in sectors. This value is
+"read-only".
+
+
+ __u16 reserved; /* 0e: reserved sectors */
+The number of sectors before the file allocation tables begin. i.e. The
+number of the first sector of the first file allocation table.
+
+
+ __u8 fats; /* 10: number of FATs */
+The number of file allocation tables (usually 2).
+
+
+ __u16 dir_entries; /* 11: number of root directory entries */
+The size of the root directory (FAT12 and FAT16 only), in "directory entries"
+(32 bytes). The root directory is immediately after the FATs (FAT12 and
+FAT16 only). The first cluster (i.e. cluster number 2) starts immediately
+after the root directory (or after the FATs for FAT32).
+
+
+ __u16 sectors; /* 13: if 0, sector_count supersedes */
+THIS IS IGNORED BY MICROSOFT'S IMPLEMENTATION! The total size of the file
+system. If the file system is bigger than 65536 sectors, this is set to 0,
+and a 32 bit field is used instead. Microsoft's implementation gets this
+values from hardware (for floppy disks), or the partition table (for hard
+disks), rather than reading it off disk.
+
+
+ __u8 media; /* 15: media code */
+For hard disks, this should always be 0xf8.
+
+
+ __u16 fat_length; /* 16: sectors/FAT for FAT12/16 */
+THIS IS IGNORED BY MICROSOFT'S IMPLEMENTATION! (See section 3.3) The size in
+sectors of each file allocation table (FAT12 and FAT16 only). A 32-bit field
+is used for FAT32. This value is "read-only".
+
+
+
+ __u16 secs_track; /* 18: sectors per track */
+ __u16 heads; /* 1a: number of heads */
+These should match the BIOS geometry. The GNU Parted README file explains
+BIOS geometry.
+
+
+ __u32 hidden; /* 1c: hidden sectors (partition start) */
+On a hard disk, this should be the number of sectors from the start of the
+head (in terms of BIOS geometry) to the start of the partition. i.e. the
+S in the CHS partition start.
+
+
+ __u32 sector_count; /* 20: no. of sectors (if sectors == 0) */
+The size of the file system in sectors (if sectors is 0).
+
+
+ __u16 boot_sign; /* 1fe: always 0xAA55 */
+Boot sector signature. Don't use this exclusively to detect FAT file systems!
+It's also the signature for partition table sectors (and it appears in the
+same place too!) Idiots.
+
+3.2.2 Fields in FAT12 and FAT16
+---------------------------------
+
+ __u8 drive_num; /* 24: */
+Always 0x80.
+
+
+ __u8 ext_signature; /* 26: always 0x29 */
+Always 0x29.
+
+
+ __u32 serial_number; /* 27: */
+Serial number: Used to detect media change on floppy disk and removable drives.
+
+
+ __u8 volume_name [11]; /* 2b: */
+The disk label.
+
+
+ __u8 fat_name [8]; /* 37: */
+"FAT12\0\0\0" or "FAT16\0\0\0".
+
+
+3.2.3 Fields in FAT32
+-----------------------
+
+ __u32 fat_length; /* 24: size of FAT in sectors */
+The size in sectors of each file allocation table.
+
+
+ __u16 flags; /* 28: bit8: fat mirroring, low4: active fat */
+No idea what these are.
+
+
+ __u16 version; /* 2a: minor * 256 + major */
+Seems to be 0 (?)
+
+
+ __u32 root_dir_cluster; /* 2c: */
+The number of the first cluster in the root directory.
+
+
+ __u16 info_sector; /* 30: */
+The number of the information sector.
+
+
+ __u16 backup_sector; /* 32: */
+The number of the backup of the boot sector (i.e. this sector).
+
+
+ __u16 drive_num; /* 40: */
+Always 0x80.
+
+
+ __u8 ext_signature; /* 42: always 0x29 */
+Always 0x29.
+
+
+ __u32 serial_number; /* 43: */
+Serial number (for Echelon, or something)
+
+
+ __u8 volume_name [11]; /* 47: */
+The disk label.
+
+
+ __u8 fat_name [8]; /* 52: */
+"FAT32\0\0\0".
+
+
+3.3 Calculating the ignored fields
+-------------------------------------------------------------------------------
+The cluster_size and fat_length fields are ignored by Microsoft's
+implementation of FAT12 and FAT16, but NOT FAT32. That is, they are written out
+correctly, but NOT READ IN. (Note: if FAT32 file system is configured to
+have less than 65520 clusters, then Windows assumes it's FAT16)
+
+Since these values don't usually change unless you resize a filesystem, this
+causes no problems. However, if you want to resize the filesystem, you have to
+calculate these values to what Microsoft calculates them to, from the size of
+the filesystem. It took me 2 months to figure this out (I want to KILL
+somebody...)
+
+Here's the algorithm I came up with that seemed to match all my test data:
+(from libparted/fs_fat/calc.c)
+
+FatCluster
+fat_max_cluster_count (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12: return 0xff0;
+ case FAT_TYPE_FAT16: return 0xfff0;
+ case FAT_TYPE_FAT32: return 0x0ffffff0;
+ }
+ return 0;
+}
+
+FatCluster
+fat_min_cluster_count (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12:
+ case FAT_TYPE_FAT16:
+ return fat_max_cluster_count (fat_type) / 2;
+
+ case FAT_TYPE_FAT32: return 0xfff0;
+ }
+ return 0;
+}
+
+static int
+calc_sizes (PedGeometry* geom, PedSector align, int cluster_size,
+ PedSector root_dir_sectors, FatCluster* out_cluster_count,
+ PedSector* out_fat_size, FatType fat_type)
+{
+ PedSector data_fat_size;
+ PedSector fat_sectors;
+ PedSector cluster_sectors;
+ FatCluster cluster_count;
+ int i;
+
+ data_fat_size = geom->length - fat_min_reserved_sector_count (fat_type)
+ - align;
+ if (fat_type == FAT_TYPE_FAT16)
+ data_fat_size -= root_dir_sectors;
+
+ fat_sectors = 0;
+ for (i = 0; i < 2; i++) {
+ if (fat_type == FAT_TYPE_FAT32)
+ cluster_sectors = data_fat_size - fat_sectors;
+ else
+ cluster_sectors = data_fat_size - 2 * fat_sectors;
+
+ cluster_count = cluster_sectors / (cluster_size / 512);
+ fat_sectors = div_round_up (cluster_count + 2,
+ entries_per_sector (fat_type));
+ }
+
+ cluster_sectors = data_fat_size - 2 * fat_sectors;
+ cluster_count = cluster_sectors / (cluster_size / 512);
+
+ if (cluster_count > fat_max_cluster_count (fat_type)
+ || cluster_count < fat_min_cluster_count (fat_type))
+ return 0;
+
+ *out_cluster_count = cluster_count;
+ *out_fat_size = fat_sectors;
+
+ return 1;
+}
+
+FIXME: this is the "trial and error" algorithm. What happened to my simple,
+test one?
+
+If the implications of the above code aren't that clear, here are some of
+them:
+ * for FAT16, the minimum number of clusters is 32760.
+ * the cluster size is completely determined by the size of the file system,
+for FAT16. That means, if a file system is to be resized, it is quite
+possible that the cluster size must be changed just to be compatible
+with Microsoft's implementation (Linux, for example, doesn't calculate the
+numbers independently, so it would work fine. So always test your code on
+Microsoft as well as Linux)
+
+
+3.4 DOS/Windows bootstrap process
+-------------------------------------------------------------------------------
+All of the information that follows is from me reverse-engineering different
+versions of Microsoft's boot sectors. It's pretty weird code (as you can
+imagine...), so there might be mistakes here.
+ There are many different versions of the boot sector:
+* Windows 98/2000/ME FAT12/FAT16 (supports CHS and LBA)
+* Windows 98/2000/ME FAT32 (supports CHS and LBA)
+
+(1) The MBR, LILO, or whatever loads in the first sector of the FAT
+partition into 0000:7c00, and executes it.
+
+(2) The first sector of the FAT partition (the "boot sector") does:
+ (a) loads the Master Boot Record (sector 0 of the disk) using the
+ BIOS's CHS calls, and finds the boot partition. If the boot partition
+ has the LBA flag marked, it writes 0xe to [bp+2] (0000:7c02). The "read
+ sectors" function in the boot loader checks for 0xe here, and uses LBA if
+ it finds it, and CHS otherwise.
+
+ (b) If it is the FAT32 version of the boot sector, it loads sectors 1
+ through 3 of the partition (it finds this from the "hidden" field in the
+ FAT boot sector, that was loaded by the MBR/LILO) at address 0000:7e00, and
+ continues executing at 0000:8000. Note: the FAT16 version doesn't require
+ any more sectors to be read (they crammed it all in!), and it goes
+ directly to step 3.
+
+(3) The code loads IO.SYS (starting at address 0000:0700), off the same
+partition, and executes it, beginning execution at 0070:0200. (Note:
+According to the x86 real mode segmentation scheme, 0070:0200 refers to the
+same physical memory as 0000:0900)
+
+
+-------------------------------------------------------------------------------
+4 THE INFO SECTOR
+-------------------------------------------------------------------------------
+
+The info sector is used in FAT32 to store additional information about the
+file system.
+
+
+4.1 Data Layout
+-------------------------------------------------------------------------------
+
+struct __attribute__ ((packed)) _FatInfoSector {
+ __u32 signature_1; /* should be 0x41615252 */
+ __u8 unused [480];
+ __u32 signature_2; /* should be 0x61417272 */
+ __u32 free_clusters;
+ __u32 next_cluster; /* most recently allocated cluster */
+ __u8 unused2 [0xe];
+ __u16 signature_3; /* should be 0xaa55 */
+};
+
+
+4.2 Descriptions of Fields
+-------------------------------------------------------------------------------
+
+ __u32 signature_1; /* should be 0x41615252 */
+Always 0x41615252 ("AaRR")
+
+
+ __u32 signature_2; /* should be 0x61417272 */
+Always 0x61417272 ("aArr")
+
+
+ __u32 free_clusters;
+The number of free clusters. This could be calculated by going through the
+FATs, but this is stored on shutdown to speed things up.
+
+
+ __u32 next_cluster; /* most recently allocated cluster */
+This contains the number of the last cluster allocated. This speeds up
+cluster allocation, because free clusters usually come in chunks, so you
+can scan right for free clusters in the FAT.
+
+
+ __u16 signature_3; /* should be 0xaa55 */
+Always 0xaa55.
+
+
+-------------------------------------------------------------------------------
+5 FILE ALLOCATION TABLES
+-------------------------------------------------------------------------------
+
+File allocation table (FAT) is a strange name, come to think of it. Perhaps it
+should be called cluster allocation table, or something (?). Essentially,
+it is used to represent file chains (i.e. linked lists) for files and
+directories. There are usually two FATs (one is a backup, and should be
+identical).
+
+Anyway, a FAT is essentially an array. In FAT12, each entry is 12 bits,
+FAT16 - 16 bits, FAT32 - 32 bits. Hence the names.
+
+The first byte of each FAT must match the "media" field in the boot sector.
+The rest of the first 2 entries are filled with 0xff.
+
+All remaining entries - from 2 onwards - correspond to a cluster. i.e.
+the second entry corresponds to cluster 2. Clusters are numbered from 2 onwards
+(i.e. there is no cluster 1).
+
+The number in each entry gives the number of the cluster that occurs next in
+the file chain (linked list). However, there are a few magic numbers:
+
+ * unused (0). Indicates the cluster is unused.
+ * end of file (0xff0 for FAT12, 0xfff0 for FAT16, 0x0ffffff0 for FAT32).
+Indicates this is the last cluster in the file or directory. Obviouslly for
+FAT32, the number of clusters must be < 0x0ffffff0. So it should be called
+FAT28, perhaps...
+ * bad cluster (0xff7 for FAT12, 0xfff7 for FAT16, 0x0ffffff7 for FAT32).
+Indicates the disk is physically damaged where the cluster is stored.
+
+
+-------------------------------------------------------------------------------
+6 DIRECTORY TREE
+-------------------------------------------------------------------------------
+
+The directory tree is simple: there are files and directories. Files and
+directories are stored in clusters (except the root directory on FAT12 and
+FAT16). Directories are essentially special files that contain directory
+entries.
+
+In FAT12 and FAT16, the root directory is stored immediately after the FATs.
+In FAT32, the first cluster of the root directory is given in the FAT. (To
+get the second cluster - if there is one - you just look up the FAT)
+
+
+6.1 Directory Entries
+------------------------------------------------------------------------------
+Directories are made up of directory entries, each of which represent a file,
+a directory or part of a file name (the VFAT extension - YUCK!!!).
+
+Each directory (except the root directory) contains a '.' (this directory) and
+'..' (parent directory) entry.
+
+6.1.1 Fields
+--------------
+
+From libparted/fs_fat/fat.h:
+
+struct __attribute__ ((packed)) _FatDirEntry {
+ __u8 name[8];
+ __u8 extension[3];
+ __u8 attributes;
+ __u8 is_upper_case_name;
+ __u8 creation_time_low; /* milliseconds */
+ __u16 creation_time_high;
+ __u16 creation_date;
+ __u16 access_date;
+ __u16 first_cluster_high; /* for FAT32 */
+ __u16 time;
+ __u16 date;
+ __u16 first_cluster;
+ __u32 length;
+};
+
+6.1.2 Field Descriptions
+--------------------------
+
+ __u8 name[8];
+The first part of the file name. Eg, for a file called README.TXT, this is
+README. Files with names longer than 8 characters use the VFAT extension (not
+described here). When a file is deleted, the first character is set to 0xe5.
+If the first character is 0x0, then the entire directory entry is unused.
+
+
+ __u8 extension[3];
+The last part of the file name. Eg, for a file called README.TXT, this is TXT.
+This explains all those .HTM files around the place...
+
+
+ __u8 attributes;
+If this is 0x0f, then this directory entry is a VFAT entry, and stores part
+of a file name. Otherwise, it's treated as various bit fields:
+
+ 0x1 read-only
+ 0x2 hidden
+ 0x4 system
+ 0x8 volume label
+ 0x10 directory
+ 0x20 archived
+
+
+ __u8 is_upper_case_name;
+A Microsoft cludge: create a file with 8.3 name BUT containing small letters
+(like ReadMe.Txt) which is treated as an LFN (long file name) and occupies
+three directory entries. Now when you rename this file to all uppercase
+README.TXT,- under Windows NT 4 the then superfluous LFN-VFAT entries are
+removed, resulting in a smaller directory, but under Windows 9x the LFN-VFAT
+entries are just upd- and this flag is set. Executing DEFRAG on such entries
+MIGHT then remove the superfluous LFN-VFAT entries and shrink the directory.
+
+
+ __u8 creation_time_low; /* milliseconds */
+ __u16 creation_time_high;
+ __u16 creation_date;
+Creation time and date. Not used wih MS-DOS <7.0!
+
+
+ __u16 access_date;
+Last access date. Not used wih MS-DOS <7.0!
+
+
+ __u16 first_cluster_high; /* for FAT32 */
+High 32 bits of the first cluster in the file or directory (FAT32 only)
+
+
+ __u16 time;
+ __u16 date;
+?
+
+
+ __u16 first_cluster;
+Low 16 bits of first cluster.
+
+
+ __u32 length;
+Length of file in bytes.
+
+
+
+===============================================================================
+ PART II - GNU PARTED'S FAT IMPLEMENTATION
+===============================================================================
+
+-------------------------------------------------------------------------------
+7 RESIZING "ISSUES"
+-------------------------------------------------------------------------------
+
+To resize a FAT file system, a program must:
+ * copy all used clusters that lie outside of the new partition onto free
+space on that partition. The directory tree and FATs must be updated to
+reflect this.
+ * grow or shrink the file allocation table(s) to the size corresponding
+to the size of the partition.
+ * convert between FAT16 and FAT32 if necessary. This involves:
+ - changing the form of the root directory (FAT16 has it's before the
+ clusters whereas FAT32 stores it in normal clusters).
+ - creating space for the backup boot sector and info sector.
+ - updating the directory tree to use 32 bit first cluster entries.
+ * align the start of the clusters (using the "reserved" field in the
+boot sector), so that the clusters that are common to the old and new
+partition can be preserved.
+ * re-number clusters. e.g. if you chop out some clusters from the beginning
+(i.e. move the start forward), then the first cluster (i.e. number 2) will
+be refer to a different cluster on the disk. The directory tree and FATs must
+be updated to reflect this.
+ * create a new boot sector (and the info sector and backup boot sector for
+FAT32)
+
+
+-------------------------------------------------------------------------------
+8 OVERVIEW OF GNU PARTED'S STRATEGY
+-------------------------------------------------------------------------------
+
+GNU Parted copies all clusters that are not accessible from the new file system
+(either because it lies outside the file system, or file system meta-data must
+reside there instead) to an accessible place.
+
+Since all clusters must be renumbered (in most cases), the entire directory
+tree must be updated. However converting the directory tree from one numbering
+system to another would break the file system if it was interrupted halfway
+through. Instead, GNU Parted duplicates the directory tree (except the root
+directory for FAT16) along with clusters that need to be copied because they
+lie outside the new file system. The directory tree is duplicated at the same
+time as inaccessible clusters are. The relevant function,
+needs_duplicating() in libparted/fs_fat/clstdup.c is:
+
+ static int
+ needs_duplicating (FatOpContext* ctx, FatCluster cluster)
+ {
+ FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs);
+
+ return (fs_info->fat_flag_map [cluster] == FAT_FLAG_FILE
+ && !fat_op_context_map_static_cluster (ctx, cluster))
+ || fs_info->fat_flag_map [cluster]
+ == FAT_FLAG_DIRECTORY;
+ }
+
+
+
+A good overview of this implementation is in the fat_resize() function, in
+libparted/fs_fat/resize.c (slightly edited):
+
+ int
+ fat_resize (PedFileSystem* fs, PedGeometry* geom)
+ {
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatSpecific* new_fs_info;
+ FatOpContext* ctx;
+ PedFileSystem* new_fs;
+
+ ctx = create_resize_context (fs, geom);
+ if (!ctx)
+ return 0;
+ new_fs = ctx->new_fs;
+ new_fs_info = FAT_SPECIFIC (new_fs);
+
+ if (!fat_duplicate_clusters (ctx))
+ return 0;
+ if (fs_info->fat_type == FAT_TYPE_FAT16
+ && new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!alloc_root_dir (ctx))
+ return 0;
+ }
+ if (!fat_construct_new_fat (ctx))
+ return 0;
+ if (!fat_construct_dir_tree (ctx))
+ return 0;
+ if (!fat_table_write_all (new_fs_info->fat, new_fs))
+ return 0;
+
+ if (!fat_boot_sector_generate (&new_fs_info->boot_sector,
+ new_fs))
+ return 0;
+ if (!fat_boot_sector_write (&new_fs_info->boot_sector, new_fs))
+ return 0;
+ if (new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!fat_info_sector_generate (
+ &new_fs_info->info_sector, new_fs))
+ return 0;
+ if (!fat_info_sector_write (&new_fs_info->info_sector,
+ new_fs))
+ return 0;
+ }
+
+ if (!resize_context_assimilate (ctx))
+ return 0;
+
+ return 1;
+ }
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..e773efa
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,17 @@
+# C must be the first sub-directory because it contains the POT files.
+SUBDIRS = C pt_BR
+
+info_TEXINFOS = parted.texi
+MAKEINFO = makeinfo --no-split
+
+EXTRA_DIST = FAT \
+ USER.jp \
+ API \
+ fdl.texi \
+ parted-pt_BR.texi
+
+.PHONY: updatepo
+updatepo:
+ $(AM_V_GEN)list='$(SUBDIRS)'; for dir in $$list; do \
+ $(MAKE) -C "$$dir" updatepo; \
+ done
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..a5b404e
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,2322 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \
+ $(srcdir)/stamp-vti $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+INFO_DEPS = $(srcdir)/parted.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = parted.dvi
+PDFS = parted.pdf
+PSS = parted.ps
+HTMLS = parted.html
+TEXINFOS = parted.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__installdirs = "$(DESTDIR)$(infodir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/mdate-sh \
+ $(top_srcdir)/build-aux/texinfo.tex
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = makeinfo --no-split
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# C must be the first sub-directory because it contains the POT files.
+SUBDIRS = C pt_BR
+info_TEXINFOS = parted.texi
+EXTRA_DIST = FAT \
+ USER.jp \
+ API \
+ fdl.texi \
+ parted-pt_BR.texi
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+.texi.info:
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.pdf:
+ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.html:
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+$(srcdir)/parted.info: parted.texi $(srcdir)/version.texi
+parted.dvi: parted.texi $(srcdir)/version.texi
+parted.pdf: parted.texi $(srcdir)/version.texi
+parted.html: parted.texi $(srcdir)/version.texi
+$(srcdir)/version.texi: $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: parted.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./parted.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/parted.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \
+ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi" && \
+ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \
+ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \
+ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp* $(srcdir)/version.texi.tmp*
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+.dvi.ps:
+ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf parted.t2d parted.t2p
+
+clean-aminfo:
+ -test -z "parted.dvi parted.pdf parted.ps parted.html" \
+ || rm -rf parted.dvi parted.pdf parted.ps parted.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(INFO_DEPS)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(infodir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am: $(DVIS)
+
+html: html-recursive
+
+html-am: $(HTMLS)
+
+info: info-recursive
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-recursive
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-recursive
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-vti
+
+pdf: pdf-recursive
+
+pdf-am: $(PDFS)
+
+ps: ps-recursive
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-aminfo clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am dist-info distclean \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti mostlyclean \
+ mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \
+ mostlyclean-vti pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-dvi-am uninstall-html-am \
+ uninstall-info-am uninstall-pdf-am uninstall-ps-am
+
+.PRECIOUS: Makefile
+
+
+.PHONY: updatepo
+updatepo:
+ $(AM_V_GEN)list='$(SUBDIRS)'; for dir in $$list; do \
+ $(MAKE) -C "$$dir" updatepo; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/USER.jp b/doc/USER.jp
new file mode 100644
index 0000000..35ede18
--- /dev/null
+++ b/doc/USER.jp
@@ -0,0 +1,1786 @@
+==============================================================================
+ GNU Parted ÆüËܸìÈÇ
+==============================================================================
+
+ written by Andrew Clausen <clausen@gnu.org>
+ translated by Yoshinori K. Okuji <okuji@gnu.org>
+
+ Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001 Yoshinori K. Okuji
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with the no Invariant Sections, with the no Front-Cover Texts, and
+ with no Back-Cover Texts. A copy of the license is included in the
+ file, COPYING.DOC.
+
+
+Ìܼ¡
+--------
+
+1 ƳÆþ
+2 Parted ¤Î»ÈÍÑ
+3 BIOS ¤È¥Õ¥¡¡¼¥à¥¦¥§¥¢
+4 ¥Ö¡¼¥È¡¦¥í¡¼¥À
+5 ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à
+6 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à
+7 LVM¡¢¥½¥Õ¥È¥¦¥§¥¢ RAID ¤È ľÀÜŪ¤Ê¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹
+8 ¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¥ó¥°
+9 ¤µ¤é¤Ê¤ë¾ðÊó¤È´ØÏ¢¥½¥Õ¥È¥¦¥§¥¢
+
+
+1 ƳÆþ
+1.1 ɬÍפʥ½¥Õ¥È¥¦¥§¥¢
+1.2 ¥µ¥Ý¡¼¥È¤µ¤ì¤ë¥×¥é¥Ã¥È¥Û¡¼¥à
+1.3 ¥é¥¤¥»¥ó¥¹
+1.4 ¥³¥ó¥Ñ¥¤¥ë
+1.5 GNU Parted ¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯
+
+2 Parted ¤Î»ÈÍÑ
+2.1 Parted ¤Î¼Â¹Ô
+2.2 ¥ª¥×¥·¥ç¥ó
+2.3 ¥³¥Þ¥ó¥É¤Î³µÍ×
+2.4 ¥³¥Þ¥ó¥É¤Î¾ÜºÙ¤Ê²òÀâ
+2.5 ¼ÂÎã
+
+3 BIOS ¤È¥Õ¥¡¡¼¥à¥¦¥§¥¢
+3.1 PC BIOS
+3.2 Macintosh OpenFirmware
+3.3 PC98 BIOS
+
+4 ¥Ö¡¼¥È¡¦¥í¡¼¥À
+4.1 LILO (Linux Loader)
+4.2 GNU GRUB (GRand Unified Bootloader)
+4.3 MS DOS¡¢MS Windows 9x¡¢MS Windows ME
+4.4 MS Windows NT
+4.5 MS Windows 2000
+4.6 Quik
+4.7 Yaboot
+
+5 ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à
+5.1 GNU/Linux ¤È FreeBSD
+5.2 MS Windows ¤È OS/2
+5.3 MacOS
+
+6 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à
+6.1 Ext2
+6.2 FAT16 ¤È FAT32
+6.3 Reiserfs
+
+7 LVM¡¢¥½¥Õ¥È¥¦¥§¥¢ RAID ¤È ľÀÜŪ¤Ê¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹
+7.1 ¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ä LVM ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎºîÀ®
+7.2 ¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ä LVM ÏÀÍý¥Ü¥ê¥å¡¼¥à¾å¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥àÁàºî
+
+8 ¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¥ó¥°
+
+9 ¤µ¤é¤Ê¤ë¾ðÊó¤È´ØÏ¢¥½¥Õ¥È¥¦¥§¥¢
+
+
+------------------------------------------------------------------------------
+1 ƳÆþ
+------------------------------------------------------------------------------
+
+GNU Parted ¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ä¤½¤Î¾å¤ËÃÛ¤«¤ì¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òºîÀ®¤·¤¿¤ê¡¢
+ÇË´þ¤·¤¿¤ê¡¢Â礭¤µ¤òÊѹ¹¤·¤¿¤ê¡¢¸¡ºº¤·¤¿¤ê¡¢Ê£À½¤¹¤ë¤¿¤á¤Î¥×¥í¥°¥é¥à¤Ç¤¹¡£
+
+¿·¤·¤¤¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ÎÎΰè¤òºîÀ®¤·¤¿¤ê¡¢¥Ç¥£¥¹¥¯¤Î»ÈÍÑË¡¤ò
+ºÆÊÔÀ®¤·¤¿¤ê¡¢¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯´Ö¤Ç¥Ç¡¼¥¿¤ò¥³¥Ô¡¼¤·¤¿¤ê¡¢¤¿¤¯¤µ¤ó¤Î
+¥³¥ó¥Ô¥å¡¼¥¿¤Ë·«¤êÊÖ¤·¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿´Ä¶­¤òÊ£À½¤¹¤ë¡Ö¥Ç¥£¥¹¥¯¡¦
+¥¤¥á¡¼¥¸¥ó¥°¡×¤ò¹Ô¤¦¤Î¤Ë¡¢¤³¤ì¤ÏÌò¤ËΩ¤Á¤Þ¤¹¡£
+
+¤³¤Î²òÀâ¤Ç¤Ï¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ä¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë´Ø¤¹¤ëÃ챤ò²¾Äꤷ¤Æ¤¤¤Þ¤¹¡£
+¤â¤·¤³¤ì¤é¤ò¤â¤Ã¤ÈÊÙ¶¯¤·¤¿¤±¤ì¤Ð¡¢Partition mini-HOWTO ¤òÆɤà¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£
+
+¤½¤ì¤Ï¤­¤Ã¤È¤¢¤Ê¤¿¤Î¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¤«¡¢°Ê²¼¤«¤é
+ÍøÍѲÄǽ¤Ç¤¹:
+
+ http://www.linuxdoc.org/HOWTO/mini/Partition/index.html
+
+GNU Parted ¤Ï¥Ç¡¼¥¿¤Î»¼º¤Î²ÄǽÀ­¤òºÇ¾®¸Â¤Ëα¤á¤ë¤è¤¦¤ËÀ߷פµ¤ì¤Þ¤·¤¿¡£
+Î㤨¤Ð¡¢(ÅÅÎÏÉÔ­¤Î¤è¤¦¤Ê) ¾ã³²¤Î´Ö¤Ë¥Ç¡¼¥¿¤Î»¼º¤¬µ¯¤­¤ë¤Î¤òÈò¤±¤ë
+¤è¤¦¤ËÀ߷פµ¤ì¡¢Â¿¤¯¤Î°ÂÁ´¸¡ºº¤ò¹Ô¤¤¤Þ¤¹¡£¤·¤«¤·¡¢Parted ¤Ë¥Ð¥°¤¬¤¢¤ë
+¤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç¡¢½ÅÍפʥե¡¥¤¥ë¤ò¥Ð¥Ã¥¯¥¢¥Ã¥×¤·¤Æ¤ª¤¯¤Ù¤­¤Ç¤¹¡£
+
+GNU Parted ¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤Ï www.gnu.org/software/parted ¤Ç¤¹¡£
+ftp.gnu.org/gnu/parted ¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹¡£
+
+Parted ¤Î¥á¥¤¥ê¥ó¥°¡¦¥ê¥¹¥È¤Ï parted@gnu.org ¤Ç¤¹¡£¹ØÆɤ¹¤ë¤Ë¤Ï¡¢Âê̾¤Ë
+¡Ösubscribe¡×¤È½ñ¤¤¤Æ bug-parted-request@gnu.org ¤Ë¥á¡¼¥ë¤ò½Ð¤·¤Æ¤¯¤À¤µ¤¤¡£
+¹ØÆɤξðÊó¤ä¥¢¡¼¥«¥¤¥Ö¤Ï°Ê²¼¤«¤éÍøÍѲÄǽ¤Ç¤¹:
+
+ http://mail.gnu.org/mailman/listinfo/bug-parted
+
+¥Ð¥°¤ÎÊó¹ð¤ò bug-parted@gnu.org ¤ËÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£¥Ð¥°Êó¹ð¤òÁ÷¤ë¤È¤­¡¢
+GNU Parted ¤Î¥Ð¡¼¥¸¥ç¥ó¤ò´Þ¤á¤Æ¤¯¤À¤µ¤¤¡£¤â¤·¤½¤Î¥Ð¥°¤¬¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦
+¥Æ¡¼¥Ö¥ë¤Ë´Ø·¸¤·¤Æ¤¤¤ë¤Ê¤é¡¢¼¡¤Î¥³¥Þ¥ó¥É¤«¤é¤Î½ÐÎϤòÆþ¤ì¤Æ¤¯¤À¤µ¤¤:
+
+ # fdisk /dev/hda -l
+ # fdisk /dev/hda
+ Command (m for help): p
+ Command (m for help): x
+ Extended command (m for help): p
+
+µ¤³Ú¤Ë¤³¤Î¥ê¥¹¥È¤Ë½õ¤±¤òµá¤á¤Æ¤¯¤À¤µ¤¤ - ¤Þ¤º¤¢¤Ê¤¿¤Î¼ÁÌ䤬¤³¤³¤ÇÅú¤¨¤é¤ì
+¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£¤â¤·²òÀ⤬ʬ¤«¤é¤Ê¤±¤ì¤Ð¡¢¤â¤Ã¤È¾å¼ê¤¯
+ÀâÌÀ¤Ç¤­¤ë¤è¤¦¡¢²æ¡¹¤Ë¶µ¤¨¤Æ¤¯¤À¤µ¤¤¡£°ìÈÌŪ¤Êů³Ø: ¤â¤·¤¢¤Ê¤¿¤¬½õ¤±¤ò
+µá¤á¤ëɬÍפ¬¤¢¤ë¤Ê¤é¡¢¤¢¤Ê¤¿ (¤ä¾¤Î¿Í¡¹) ¤¬½õ¤±¤òµá¤á¤ëɬÍפ¬¤Ê¤¤¤è¤¦¤Ë¡¢
+²¿¤«¤ò½¤Àµ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+
+¤Þ¤¿¡¢²æ¡¹¤Ï¤¢¤Ê¤¿¤Î°Õ¸«¤ò¤È¤Æ¤âʹ¤­¤¿¤¯»×¤Ã¤Æ¤¤¤Þ¤¹ :-)
+
+
+1.1 ɬÍפʥ½¥Õ¥È¥¦¥§¥¢
+------------------------------------------------------------------------------
+ * e2fsprogs ¥Ñ¥Ã¥±¡¼¥¸¤Î°ìÉô¤Ç¤¢¤ë¡¢libuuid¡£¤â¤·¤³¤ì¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤Ê¤é¡¢
+
+ http://web.mit.edu/tytso/www/linux/e2fsprogs.html
+
+ ¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£
+
+¤â¤· Parted¡¢¤½¤·¤Æ e2fsprogs ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤¤¤Ê¤é¡¢e2fsprogs ¤ò "make
+install" ¤È "make install-libs" ¤¹¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+ * GNU Readline (Ǥ°Õ)¡¢
+
+ ftp://ftp.gnu.org/gnu/readline
+
+ ¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£
+
+¤â¤· Parted ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¤¤Æ¡¢readline ¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤Ê¤é¡¢Parted ¤Î
+readline ¥µ¥Ý¡¼¥È¤ò ./configure ¤Ø¤Î --disable-readline ¥ª¥×¥·¥ç¥ó¤Ç̵¸ú
+¤Ë¤Ç¤­¤Þ¤¹¡£
+
+ * ¤â¤·¹ñºÝ²½¥µ¥Ý¡¼¥È¤¬Ë¾¤Þ¤ì¤ë¤Ê¤é¡¢¥³¥ó¥Ñ¥¤¥ëÍÑ¤Ë GNU gettext
+ (¤¢¤ë¤¤¤Ï¡¢¸ß´¹¥½¥Õ¥È¥¦¥§¥¢)¡£
+
+ ftp://ftp.gnu.org/gnu/gettext
+
+
+1.2 ¥µ¥Ý¡¼¥È¤µ¤ì¤ë¥×¥é¥Ã¥È¥Û¡¼¥à
+------------------------------------------------------------------------------
+˾¤à¤é¤¯¤Ï¡¢¤³¤Î°ìÍ÷ɽ¤¬¤º¤Ã¤ÈÁýÂ礹¤ë¤³¤È¤ò¡£¤â¤·¤³¤ì¤é¤Î¥×¥é¥Ã¥È¥Û¡¼¥à
+¤Î°ì¤Ä¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¤Ê¤é (º£¤Î¤È¤³¤í¤Ï Linux!)¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤¬»È¤¨¤Þ¤¹
+(¥»¥¯¥·¥ç¥ó 1.5 ¤ò»²¾È)
+
+ * Linux >= 2.0.x, 2.2.x (Alpha¡¢x86 PC¡¢PC98¡¢Macintosh PowerPC¡¢Sun)
+
+
+Ãí°Õ: GNU libc 2.1 °Ê¾å¤¬É¬ÍפǤ¹¡£¤ª¤½¤é¤¯ --disable-nls ¥ª¥×¥·¥ç¥ó¤ò»ÈÍÑ
+¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤â¤Ã¤È¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤òÍøÍѤǤ­¤Þ¤¹¡£ (Ãð: ¤³¤ÎɬÍ×À­¤ò¤â
+¤Ï¤äÀÚ¤êÍî¤È¤·¤¿¤È»×¤¤¤Þ¤¹¡£ ¤ä¤ë¤Ù¤­¤³¤È: libc 2.0 ¤¬Æ°¤¯¤«³Îǧ¤¹¤ë!)
+
+
+1.3 ¥é¥¤¥»¥ó¥¹
+------------------------------------------------------------------------------
+GNU Parted ¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¢¤ê¡¢GNU General Public License
+¥Ð¡¼¥¸¥ç¥ó2¤¬Å¬ÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï Parted ÇÛÉÛʪ¤È¤È¤â¤Ë¡¢COPYING
+¥Õ¥¡¥¤¥ë¤Ë´Þ¤á¤é¤ì¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£¤â¤·¤Ê¤±¤ì¤Ð¡¢
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+¤Ë¼ê»æ¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£
+
+Ãí¼á: libparted ¤Ï GNU Parted ¤Î°ìÉô¤È¹Í¤¨¤é¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤Ï GNU General
+Public License ¤Ë¤è¤Ã¤ÆÊݸ¤ì¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤Ï GNU Lesser General Public
+License (LGPL) ¤Î²¼¤Ç¤Ï¥ê¥ê¡¼¥¹¤µ¤ì¤Æ¡Ø¤¤¤Þ¤»¤ó¡Ù¡£
+
+
+1.4 ¥³¥ó¥Ñ¥¤¥ë
+------------------------------------------------------------------------------
+GNU Parted ¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤¿¤±¤ì¤Ð¡¢Ä̾盧¤Î¤è¤¦¤Ë¤·¤Æ¹Ô¤ï¤ì¤Þ¤¹:
+
+ $ ./configure
+ $ make
+
+¤·¤«¤·¡¢./configure ¤ËÂФ·¤Æ¿ô¸Ä¤Î¥ª¥×¥·¥ç¥ó¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹:
+
+ --without-readline readline ¤ò»ÈÍѤ·¤Þ¤»¤ó¡£¤³¤ì¤Ï¤¢¤Þ¤ê
+ ¿¤¯¤Î¥é¥¤¥Ö¥é¥ê¤¬ÍøÍѤǤ­¤Ê¤¤¤è¤¦¤Ê¡¢
+ ¶ÛµÞÍѥǥ£¥¹¥¯¤Ê¤É¤òºîÀ®¤¹¤ë¤Î¤ËÊØÍø¤Ç¤¹¡£
+
+ --disable-nls Êì¹ñ¸ì¥µ¥Ý¡¼¥È¤ò¼è¤ê¾Ã¤·¤Þ¤¹¡£¤³¤ì¤Ï
+ glibc ¤Î¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤ä¶ÛµÞÍѥǥ£¥¹¥¯¤Ë
+ Ŭ¤·¤¿¡¢µ¡Ç½¤òºï¸º¤·¤¿glibc ¤È°ì½ï¤Ë»ÈÍÑ
+ ¤¹¤ë¤Î¤ËÊØÍø¤Ç¤¹¡£
+
+ --disable-shared ¶¦Í­¥é¥¤¥Ö¥é¥ê¤ò̵¸ú¤Ë¤·¤Þ¤¹¡£¤³¤ì¤Ï¤â¤·
+ ¡Ö¤³¤ï¤µ¤ì¤¿¥ì¥¸¥¹¥¿ (spilled register)¡×
+ ¤Ë´Ø¤¹¤ë¥³¥ó¥Ñ¥¤¥ë¡¦¥¨¥é¡¼¤ò¼õ¤±¼è¤Ã¤¿¤é¡¢
+ GNU libc ¤Î¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤È°ì½ï¤Ë»È¤¦¤¿¤á
+ ¤ËɬÍפˤʤ뤫¤â¤·¤ì¤Þ¤»¤ó¡£¥Ö¡¼¥È/¶ÛµÞÍÑ
+ ¥Ç¥£¥¹¥¯¤Ë¤âÍ­ÍѤǤ·¤ç¤¦¡£
+
+ --enable-all-static ´°Á´¤ËÀÅŪ¤Ê¥Ð¥¤¥Ê¥ê¤È¤·¤Æ¡¢Parted ¤Î¥Ð¥¤
+ ¥Ê¥ê¤ò¹½ÃÛ¤·¤Þ¤¹¡£¤³¤ì¤Ï¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤Ë
+ ÊØÍø¤Ç¡¢¤È¤¤¤¦¤Î¤â¡¢¤¤¤«¤Ê¤ë¥é¥¤¥Ö¥é¥ê¤â
+ ¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¾å¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ëɬÍפ¬
+ ¤Ê¤¤¤«¤é¤Ç¤¹ (¾¤Î¥×¥í¥°¥é¥à¤¬É¬ÍפȤ¹¤ë¤«
+ ¤â¤·¤ì¤Ê¤¤¤±¤É...)¡£Ãí°Õ: strip(1) ¤âÁö¤é
+ ¤»¤¿¤¤¤Ç¤·¤ç¤¦¡£
+
+
+1.5 GNU Parted ¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯
+------------------------------------------------------------------------------
+GNU/Linux ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤Ê¤¤¥Þ¥·¥ó¤Ç Parted ¤ò¼Â¹Ô¤·¤¿¤¤¡¢¤¢¤ë¤¤¤Ï¡¢
+¥ë¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ä¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤·¤¿¤¤¤Ê¤é¡¢
+¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò»ÈÍѤ¹¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£
+
+¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤Î¥¤¥á¡¼¥¸¤Ï°Ê²¼¤«¤éÆþ¼ê²Äǽ¤Ç¤¹:
+
+ ftp://ftp.gnu.org/gnu/parted/bootdisk/partboot.img
+
+¼ÂºÝ¤Ë¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤òºîÀ®¤¹¤ë¤Ë¤Ï¡¢(GNU/Linux ¤Ç¤Ï) ¤³¤¦ÂǤÁ¹þ¤ó¤Ç
+¤¯¤À¤µ¤¤:
+
+ # dd if=partboot.img of=/dev/fd0 bs=1440k
+
+¤¢¤ë¤¤¤Ï¡¢DOS ¤Ç RAWRITE.EXE ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
+
+ÉÔ±¿¤Ë¤â¡¢¤½¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤Ï¤¢¤Þ¤ê¹­ÈϰϤΥϡ¼¥É¥¦¥§¥¢¤ò¥µ¥Ý¡¼¥È¤·¤Æ
+¤¤¤Þ¤»¤ó¡£¤â¤·¤¢¤Ê¤¿¤Î¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤Ê¤é¡¢¼«Ê¬ÀìÍÑ
+¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤òºî¤ëɬÍפ¬¤¢¤ë¤Ç¤·¤ç¤¦¡£parted ¤Î¥Ð¥¤¥Ê¥ê¤ò parted ¤Î
+¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤«¤é¾¤Î¥Ç¥£¥¹¥¯¤Ø¥³¥Ô¡¼¤¹¤ë (ÊýË¡¤Ï°Ê²¼¤ÇÀâÌÀ) ¤³¤È¤¬¤Ç¤­
+¤Þ¤¹¤·¡¢Â¾¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò»î¤·¤¿¤ê¡¢¼«Ê¬ÀìÍѤΤâ¤Î¤òºî¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£
+¤¢¤Ä¤é¤¨¤Î parted ¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤òºî¤ë¤¿¤á¤Î¥·¥§¥ë¡¦¥¹¥¯¥ê¥×¥È¡¢mkparted
+¤¬ÊØÍø¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤½¤ì¤Ï¤³¤³¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹:
+
+ ftp://ftp.tux.org/pub/people/kent-robotti/mkparted
+
+¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤«¤é¾¤Î¥Ç¥£¥¹¥¯¤Ø parted ¤ò¥³¥Ô¡¼¤¹¤ë¤Ë¤Ï:
+(1) Parted ¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤Çµ¯Æ°¤·¤Þ¤¹¡£
+(2) ¾¤Î (ext2 ¤Î) ¥Õ¥í¥Ã¥Ô¥£¡¦¥Ç¥£¥¹¥¯¤òÁÞÆþ¤·¤Þ¤¹¡£¤â¤·¤½¤ì¤¬¥Õ¥©¡¼¥Þ¥Ã¥È
+¤µ¤ì¤Æ¤¤¤Ê¤¤¤Ê¤é¡¢"parted /dev/fd0 mklabel loop mkfs 1 ext2" ¤Ç
+¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òºîÀ®¤Ç¤­¤Þ¤¹¡£
+(3) ¤½¤Î¥Õ¥í¥Ã¥Ô¥£¡¦¥Ç¥£¥¹¥¯¤ò¥Þ¥¦¥ó¥È¤·¤Þ¤¹¡£
+("mount -t ext2 /dev/fd0 /mnt/floppy")
+(4) /sbin/parted ¤ò¤½¤Î¥Õ¥í¥Ã¥Ô¥£¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£
+("cp /sbin/parted /mnt/floppy")
+(5) /lib/* ¤ò¤½¤Î¥Õ¥í¥Ã¥Ô¥£¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£ ("cp /lib/* /mnt/floppy)
+(6) ¤½¤Î¥Õ¥í¥Ã¥Ô¥£¤ò¥¢¥ó¥Þ¥¦¥ó¥È¤·¤Þ¤¹¡£ ("umount /mnt/floppy")
+(7) ¤¢¤Ê¤¿¤Î¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¤ò¥µ¥Ý¡¼¥È¡Ø¤·¤Æ¤¤¤ë¡Ù¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò¸«ÉÕ¤±
+¤Þ¤¹¡£ (¥Ò¥ó¥È: Â礭¤Ê¥ß¥é¡¼¡¦¥µ¥¤¥È¾å¤Ç¤µ¤Þ¤¶¤Þ¤Ê¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤«¤é
+¶ÛµÞÍѥǥ£¥¹¥¯¤òõ¤·¤Æ¤ß¤è¤¦¤È¤·¤Ê¤µ¤¤)
+(8) ¤¢¤Ê¤¿¤Î¶ÛµÞÍѥǥ£¥¹¥¯¤Çµ¯Æ°¤·¤Þ¤¹¡£ Parted ¤ò¥³¥Ô¡¼¤·¤¿¥Ç¥£¥¹¥¯¤ò
+¥Þ¥¦¥ó¥È¤·¤Þ¤¹¡£
+(9) Parted ¤ò¼Â¹Ô¤·¤Þ¤¹:
+ # cd /mnt/floppy
+ # LD_LIBRARY_PATH=. ./parted
+
+
+------------------------------------------------------------------------------
+2 Parted ¤Î»ÈÍÑ
+------------------------------------------------------------------------------
+¤¢¤¤¤Ë¤¯¡¢¥Ç¥£¥¹¥¯¤Îʬ³ä¤Ï´öʬº®¤ßÆþ¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¹Íθ¤ËÆþ¤ì¤ëɬÍפÎ
+¤¢¤ë¡¢¤¿¤¯¤µ¤ó¤Î°Û¤Ê¤Ã¤¿¥·¥¹¥Æ¥à´Ö¤Ç¤ÎÁê¸ßºîÍѤ¬¤¢¤ë¤«¤é¤Ç¤¹:
+
+ * BIOS ¤ä¥Õ¥¡¡¼¥à¥¦¥§¥¢ - ¥á¥â¥ê¤Î¥Á¥§¥Ã¥¯¤Ê¤É¤ò¹Ô¤¦¡¢¤¢¤Ê¤¿¤Î¥³¥ó¥Ô¥å¡¼¥¿
+Æâ¤Î ROM ¥Á¥Ã¥×¤ËÁȤ߹þ¤Þ¤ì¤¿¥×¥í¥°¥é¥à¡£¤³¤Î¥·¥¹¥Æ¥à¤Î¥×¥í¥°¥é¥à¤ò(ÍưפˤÏ)
+Êѹ¹¤Ç¤­¤Þ¤»¤ó¡£BIOS ¤ä¥Õ¥¡¡¼¥à¥¦¥§¥¢¡¦¥×¥í¥°¥é¥à¤ÎÎã: AmiBIOS¡¢Award¡¢
+Phoenix¡¢OpenFirmware¡£¤³¤ì¤é¤Î¥×¥í¥°¥é¥à¤Î¤¦¤Á¡¢°ì¤Ä¤À¤±¤ò»ý¤Ã¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£
+
+ * ¥Ö¡¼¥È¡¦¥í¡¼¥À - »È¤¤¤¿¤¤¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤òÁªÂò¤¹¤ë¤³¤È¤ò
+²Äǽ¤Ë¤·¡¢¤½¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ò¥í¡¼¥É¤¹¤ë¥×¥í¥°¥é¥à¡£Îã: LILO¡¢
+GRUB¡¢Yaboot¡¢Quik¡£ÆäËÊ£¿ô¤Î¼ïÎà¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ò¥¤¥ó¥¹¥È¡¼¥ë
+¤·¤Æ¤¤¤ë¤Ê¤é¡¢Ê£¿ô¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó
+
+ * Parted ¤òÆ°ºî¤µ¤»¤ë¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à (ÅöºÂ¤Ï¡¢¤³¤ì¤Ï GNU/Linux
+¤Ë°ã¤¤¤¢¤ê¤Þ¤»¤ó)¡¢¤½¤·¤Æ¡¢¤¢¤Ê¤¿¤¬»ÈÍѤ¹¤ë¾¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¡£
+
+ * ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¼ïÎà - ¥Ç¡¼¥¿¤¬¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë³ÊǼ¤µ¤ì¤ë¼êÃÊ¡£
+¤³¤ì¤é¤ÎÎã¤Ï: ext2¡¢fat¡¢hfs¡¢reiserfs¡£¤·¤Ð¤·¤Ð°Û¤Ê¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î
+¼ïÎà¤ò´Þ¤à¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò»ý¤Ã¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£
+
+Parted ¤Ï¾åµ­¤Î¤¿¤¯¤µ¤ó¤ÎÁȤ߹ç¤ï¤»¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê¡¢¾­Íè¤Ï¤â¤Ã¤È¥µ¥Ý¡¼¥È
+¤¹¤ë¤Ç¤·¤ç¤¦¡£¤½¤ì¤æ¤¨¡¢3¾Ï¤¬ BIOS ¤Ë´Ø¤·¤Æ¡¢4¾Ï¤¬¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ë¤Ä¤¤¤Æ¡¢
+5¾Ï¤¬¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Ë¤Ä¤¤¤Æ¡¢¤½¤·¤Æ¡¢6¾Ï¤¬¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ë
+¤Ä¤¤¤Æ½ñ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
+ ¤³¤Î¾Ï¤Ï Parted ¤Î»ÈÍÑË¡¤òµ­½Ò¤·¤Æ¤ª¤ê¡¢¤³¤ì¤Ï¤É¤ó¤Ê¥·¥¹¥Æ¥à¤ò»È¤Ã
+¤Æ¤¤¤ë¤«¤Ë¤«¤«¤ï¤é¤º¡¢ÂçÂÎƱ¤¸¤Ç¤¹¡£¤³¤Î¾Ï¤òÆɤߡ¢¤½¤·¤Æ¡¢3¡¢4¡¢5¤È6¾Ï¡¢
+¤½¤ì¤¾¤ì¤òÆɤà¤Ù¤­¤Ç¤¹¡£¤·¤«¤·¡¢¤¢¤Ê¤¿¤Ë´Ø·¸¤¬¤¢¤ë¥»¥¯¥·¥ç¥ó¤À¤±¤òÆɤàɬÍ×
+¤¬¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢¤â¤·¥Ö¡¼¥È¡¦¥í¡¼¥À¤È¤·¤Æ LILO ¤À¤±¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢
+ƳÆþ¤È¡¢4¾Ï¤Î LILO ¤Ë´Ø¤¹¤ë¥»¥¯¥·¥ç¥ó¤À¤±¤òÆɤàɬÍפ¬¤¢¤ê¤Þ¤¹¡£
+
+
+2.1 Parted ¤Î¼Â¹Ô
+------------------------------------------------------------------------------
+
+Parted ¤ÏÆó¤Ä¤ÎÍͼ°¡¢¥³¥Þ¥ó¥É¡¦¥é¥¤¥ó¤ÈÂÐÏ÷¿¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£Parted ¤Ï¾ï¤Ë
+¤³¤Î¤è¤¦¤Ë³«»Ï¤µ¤ì¤ë¤Ù¤­¤Ç¤¹:
+
+ # parted DEVICE
+
+¤³¤³¤Ç¡¢DEVICE ¤ÏÊÔ½¸¤¹¤ë¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¡¦¥É¥é¥¤¥Ö¤Ç¤¹¡£(¤â¤·¤¢¤Ê¤¿¤¬ÂÕ¤±
+¤Æ¤¤¤ë¤Ê¤é¡¢Parted ¤Ï¤É¤Î¥Ç¥Ð¥¤¥¹¤ò˾¤ó¤Ç¤¤¤ë¤Î¤«¡¢¿ä¬¤·¤è¤¦¤È»î¤ß¤Þ¤¹¡£)
+
+¥³¥Þ¥ó¥É¡¦¥é¥¤¥ó¤Î¥â¡¼¥É¤Ç¤Ï¡¢¤³¤Î¸å¤Ë°ì¤Ä¤«¤½¤ì°Ê¾å¤Î¥³¥Þ¥ó¥É¤ò³¤±¤Þ¤¹¡£
+Îã:
+
+ # parted /dev/sda resize 1 52 104 mkfs 2 fat
+
+(--help ¤Î¤è¤¦¤Ê) ¥ª¥×¥·¥ç¥ó¤Ï¥³¥Þ¥ó¥É¡¦¥é¥¤¥ó¾å¤Ç¤Î¤ß»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
+
+ÂÐÏ÷¿¥â¡¼¥É¤Ç¤Ï¡¢¥³¥Þ¥ó¥É¤Ï°ìÅ٤˰ì¤Ä¤º¤Ä¥×¥í¥ó¥×¥È¤ËÆþÎϤµ¤ì¤Þ¤¹¡£Îã:
+
+ (parted) resize 1 52.0005 104.5
+ (parted) mkfs 2 fat
+
+Û£Ëæ¤Ç¤Ê¤¤¾Êά¤Ïµö¤µ¤ì¤Þ¤¹¡£Î㤨¤Ð¡¢¡Öprint¡×¤ÎÂå¤ï¤ê¤Ë¡Öp¡×¤ò¡¢¡Öresize¡×
+¤ÎÂå¤ï¤ê¤Ë¡Öre¡×¤òÂǤĤ³¤È¤¬¤Ç¤­¤Þ¤¹¡£¥³¥Þ¥ó¥É¤Ï±Ñ¸ì¤Ç¤â¡¢¤¢¤Ê¤¿¤ÎÊì¹ñ¸ì¤Ç¤â
+ÂǤÁ¹þ¤á¤Þ¤¹ (¤â¤·¤¢¤Ê¤¿¤Î¸À¸ì¤¬ËÝÌõ¤µ¤ì¤Æ¤¤¤ë¤Ê¤é)¡£¤³¤Î¤³¤È¤¬Û£Ë椵¤òÀ¸¤ß
+½Ð¤¹¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+
+¤Þ¤¿¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î°ÌÃÖ¤ËÂбþ¤¹¤ë¿ô»ú¤Ë¾®¿ô°Ì¤ò»ØÄê¤Ç¤­¤ë¤³¤È¤ËÃí°Õ¤·¤Æ
+¤¯¤À¤µ¤¤ (¥á¥¬¥Ð¥¤¥Èñ°Ì¤Ç)¡£
+
+
+2.2 ¥ª¥×¥·¥ç¥ó
+------------------------------------------------------------------------------
+-h, --help ¥Ø¥ë¥×¡¦¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹
+-s, --script ·è¤·¤Æ¥æ¡¼¥¶¤Î´³¾Ä¤òÂ¥¤·¤Þ¤»¤ó
+-v, --version ¥Ð¡¼¥¸¥ç¥ó¤òɽ¼¨¤·¤Þ¤¹
+
+
+2.3 ¥³¥Þ¥ó¥É¤Î³µÍ×
+------------------------------------------------------------------------------
+check MINOR ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë´Êñ¤Ê¸¡ºº¤ò¹Ô¤¤¤Þ¤¹
+cp [FROM-DEVICE] FROM-MINOR TO-MINOR ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¾¤Î¥Ñ¡¼¥Æ¥£
+ ¥·¥ç¥ó¤Ë¥³¥Ô¡¼¤·¤Þ¤¹
+help [COMMAND] °ìÈÌŪ¤Ê¥Ø¥ë¥×¤«¡¢COMMAND ¤Ë´Ø¤¹¤ë¥Ø¥ë¥×¤ò
+ ɽ¼¨¤·¤Þ¤¹
+mklabel LABEL-TYPE ¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë(¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦
+ ¥Æ¡¼¥Ö¥ë)¤òºîÀ®¤·¤Þ¤¹
+mkfs MINOR FS-TYPE ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à
+ FS-TYPE ¤òºîÀ®¤·¤Þ¤¹
+mkpart PART-TYPE [FS-TYPE] START END ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹
+mkpartfs PART-TYPE FS-TYPE START END ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤È°ì½ï¤Ë¥Ñ¡¼
+ ¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹
+move MINOR START END ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤ò°ÜÆ°¤·¤Þ¤¹
+name MINOR NAME ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤ò NAME ¤È̾ÉÕ¤±¤Þ¤¹
+print ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤òɽ¼¨¤·¤Þ¤¹
+quit ¥×¥í¥°¥é¥à¤ò½ªÎ»¤·¤Þ¤¹
+resize MINOR START END ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Î
+ Â礭¤µ¤òÊѹ¹¤·¤Þ¤¹
+rm MINOR ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤òºï½ü¤·¤Þ¤¹
+select DEVICE ÊÔ½¸¤¹¤ë¥Ç¥Ð¥¤¥¹¤òÁª¤Ó¤Þ¤¹
+set MINOR FLAG STATE ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Î¥Õ¥é¥°¤òÊѹ¹¤·¤Þ¤¹
+
+FLAG ¤Ï boot¡¢root¡¢swap¡¢hidden¡¢raid¡¢lvm¡¢lba ¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£
+
+FS-TYPE ¤Ï ext2¡¢FAT¡¢hfs¡¢linux-swap¡¢ntfs¡¢reiserfs ¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£
+
+LABEL-TYPE ¤Ï sun¡¢bsd¡¢mac¡¢loop¡¢pc98¡¢msdos¡¢gpt ¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£
+
+MINOR ¤Ï Linux ¤Ë»È¤ï¤ì¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥óÈÖ¹æ¤Ç¤¹¡£
+
+PART-TYPE ¤Ï primary¡¢logical¡¢extended ¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹¡£
+´ðËÜ (primary) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ïɸ½àŪ¤Ê¡¢³ÈÄ¥À­¤Î¤Ê¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ç¤¹¡£
+³ÈÄ¥ (extended) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¤¿¤À¾¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¢Àµ³Î¤Ë¤ÏÏÀÍý
+(logical) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¢¤ò´Þ¤à¤À¤±¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ç¤¹¡£¤µ¤é¤Ë¤è¤êÀµ³Î
+¤Ë¤Ï¡¢³ÈÄ¥¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¥Ç¥£¥¹¥¯¡¦¥É¥é¥¤¥Ö¤Î¤è¤¦¤Ë¹½ÃÛ¤µ¤ì¤Æ¤ª¤ê¡¢
+¡Ö´ðËܡץѡ¼¥Æ¥£¥·¥ç¥ó (ÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¤È¡¢Ç¤°Õ¤Ç¡¢Ê̤ΡֳÈÄ¥¡×
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÊÝ»ý¤·¡¢¤½¤ì¤¬ºÆ¤ÓºÙʬ¤µ¤ì¤Æ ...
+ºÇÂç¤Ç¤â³ÈÄ¥¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï°ì¤Ä¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¯¤Æ¡¢°ì¤Ä¤Î´ðËÜ
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÎΰè¤òÀê¤á¤Þ¤¹¡£¤â¤· msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤ò»È¤Ã¤Æ
+¤¤¤Ê¤¤¤Ê¤é¡¢´ðËܥѡ¼¥Æ¥£¥·¥ç¥ó¤À¤±¤ò»ý¤Ä¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
+
+START ¤È END ¤Ï¥¼¥í¤«¤é»Ï¤Þ¤ë¡¢¥á¥¬¥Ð¥¤¥È¤Çɽ¤µ¤ì¤Þ¤¹¡£¾®¿ô¤ò»È¤Ã¤Æ¤â
+¹½¤¤¤Þ¤»¤ó (Îã: 1258.9)¡£
+
+
+2.4 ¥³¥Þ¥ó¥É¤Î¾ÜºÙ¤Ê²òÀâ
+------------------------------------------------------------------------------
+
+2.4.1 check
+-------------
+ check MINOR ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë´Êñ¤Ê¸¡ºº¤ò¹Ô¤¤¤Þ¤¹
+
+check ¥³¥Þ¥ó¥É¤Ï¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤Ë¥¨¥é¡¼¤¬¤¢¤ë¤«¤É¤¦¤«¤ò¸¡ºº¤·¤Þ¤¹¡£
+
+Îã:
+
+ (parted) check 1
+
+
+2.4.2 cp
+----------
+ cp [FROM-DEVICE] FROM-MINOR TO-MINOR ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¾¤Î
+ ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¥³¥Ô¡¼¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¾¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¥³¥Ô¡¼¤·¡¢¤½¤ÎÌÜŪ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î
+¸µ¡¹¤¢¤Ã¤¿Ãæ¿È¤òºï½ü¤·¤Þ¤¹¡£ºÇ½é¤Î MINOR ÈÖ¹æ¤Ï¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò»Ø¤·¡¢
+ÆóÈÖÌܤÏÌÜŪ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò»Ø¤·¤Þ¤¹¡£
+
+Ǥ°Õ¤Î¥Ñ¥é¥á¡¼¥¿¤È¤·¤Æ¡¢¥Ç¥Ð¥¤¥¹¤òÍ¿¤¨¤ë¤³¤È¤¬¤Ç¤­¡¢¤½¤ì¤ÏÌÜŪ¤Î
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¤É¤Î¥Ç¥Ð¥¤¥¹¾å¤Ë¤¢¤ë¤«¤ò»ØÄꤷ¤Þ¤¹¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à:
+ * ext2 (ÌÜŪ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤è¤ê¤âÂ礭¤¤¤È¤¤¤¦¾ò·ï¤Ç)
+ * FAT
+ * linux-swap (ÌÜŪ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¤ª¤±¤ë mkfs ¤ÈÅù²Á)
+
+Îã:
+
+ (parted) cp /dev/hdb 2 3
+
+ /dev/hdb ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó2 (¤Ä¤Þ¤ê¡¢/dev/hdb2) ¤ò¡¢Parted ¤¬¥í¡¼¥É
+ ¤¹¤ë¤È¤­¤Ë»È¤Ã¤¿¥Ç¥Ð¥¤¥¹¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó3¤Ë¥³¥Ô¡¼¤·¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó3
+ ¤Î°ÊÁ°¤ÎÆâÍƤòÇ˲õ¤·¤Þ¤¹¡£
+
+
+2.4.3 help
+------------
+ help [COMMAND] °ìÈÌŪ¤Ê¥Ø¥ë¥×¤«¡¢COMMAND ¤Ë´Ø¤¹¤ë
+ ¥Ø¥ë¥×¤òɽ¼¨¤·¤Þ¤¹
+
+Îã:
+
+ (parted) help resize
+
+
+2.4.4 mklabel
+---------------
+ mklabel LABEL-TYPE ¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë(¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦
+ ¥Æ¡¼¥Ö¥ë)¤òºîÀ®¤·¤Þ¤¹
+
+¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤ò¡¢¥¿¥¤¥× LABEL-TYPE ¤ÇºîÀ®¤·¤Þ¤¹¡£¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦
+¥é¥Ù¥ë¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò°ì¤Ä¤â»ý¤Á¤Þ¤»¤ó¡£¤³¤Î¥³¥Þ¥ó¥É¤Ï (Ä̾ï¤Ï)¡¢µ»½ÑŪ¤Ë
+¸À¤Ã¤Æ¡¢¥Ç¡¼¥¿¤òÇ˲õ¤·¤Þ¤»¤ó¤¬¡¢´ðËÜŪ¤ËÍøÍÑÉÔǽ¤Ë¤·¤Æ¤·¤Þ¤¤¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+¤ò½¤Éü¤¹¤ë¤Ë¤Ï¡¢gpart (¥»¥¯¥·¥ç¥ó 9 ¤ò»²¾È) ¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤òÍøÍѤ¹¤ëɬÍ×
+¤¬¤¢¤ë¤Ç¤·¤ç¤¦¡£(»ä¤ÎÃΤë¸Â¤ê) gpart ¤Ï msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Ë¤À¤±»È¤¨¤Þ¤¹¡£
+²æ¡¹¤Î¤³¤Îµ¡Ç½¤ò Parted ¤Ë²Ã¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡¢¤¢¤ë¤¤¤Ï¡¢¤¹¤ë¤Ù¤­¤Ç¤·¤ç¤¦¡£
+
+Ãí¼á: ¤ß¤ó¤Ê¡¢¡Ö¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¡×¤Ë°ã¤¦¸ÀÍÕ¤ò»È¤¦¤è¤¦¤Ç¤¹ - °Ê²¼¤ÏÁ´¤ÆƱ¤¸
+¤â¤Î¤Ç¤¹: ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Þ¥Ã¥×¡£¤Þ¤¿¡¢x86 ¥Þ¥·¥ó
+¾å¤Î¥Þ¥¹¥¿¡¼¡¦¥Ö¡¼¥È¡¦¥ì¥³¡¼¥É¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤ÈƱ¤¸¥»¥¯¥¿¤Ë¼ý¤á¤é
+¤ì¤Æ¤¤¤Þ¤¹ (Parted ¤ò»ÈÍѤ¹¤ë¤Î¤Ë¤³¤Î¤³¤È¤òÃΤëɬÍפϤ¢¤ê¤Þ¤»¤ó)¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë:
+ * bsd
+ * loop (ľÀÜŪ¤Ê¥Ç¥£¥¹¥¯¡¦¥¢¥¯¥»¥¹)
+ * gpt
+ * mac
+ * msdos
+ * pc98
+ * sun
+
+Îã:
+
+ (parted) mklabel msdos
+
+
+2.4.5 mkfs
+------------
+ mkfs MINOR FS-TYPE ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Ë¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à
+ FS-TYPE ¤òºîÀ®¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Ë¿·¤·¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òºîÀ®¤·¡¢¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë
+¸ºß¤¹¤ë¥Ç¡¼¥¿¤òÁ´¤ÆÇ˲õ¤·¤Þ¤¹¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à:
+ * ext2
+ * FAT
+ * linux-swap
+
+Îã:
+
+ (parted) mkfs 2 fat
+
+
+2.4.6 mkpart
+--------------
+ mkpart PART-TYPE [FS-TYPE] START END (¿·µ¬¤Î)¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò
+ ºî¤é¤º¤Ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºî
+ À®¤·¤Þ¤¹¡£¥Ç¡¼¥¿¡¦¥Ñ¡¼¥Æ¥£
+ ¥·¥ç¥ó¤Ç¤Ï¡¢FS-TYPE ¤¬É¬Í×
+ ¤È¤µ¤ì¤Þ¤¹
+
+¿·¤·¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òºîÀ®¡Ø¤»¤º¤Ë¡Ù¡¢¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¡£
+¤³¤ì¤Ï¶öÁ³¤Ëºï½ü¤·¤Æ¤·¤Þ¤Ã¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò²óÉü¤¹¤ë¤Î¤ËÌò¤ËΩ¤Á¤Þ¤¹¡£
+
+PART-TYPE ¤Ï¤³¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹: primary (´ðËÜ)¡¢extended (³ÈÄ¥)¡¢
+logical (ÏÀÍý)¡£extended ¤È logical ¤Ï msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤ËÂФ·¤Æ¤Î¤ß
+»ÈÍѤ·¤Þ¤¹¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à:
+ * ext2
+ * FAT
+ * HFS
+ * linux-swap
+ * NTFS
+ * reiserfs
+
+Îã:
+
+ (parted) mkpart logical ext2 0.0 692.1
+
+
+2.4.7 mkpartfs
+----------------
+ mkpartfs PART-TYPE FS-TYPE START END ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤È°ì½ï¤Ë
+ ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹
+
+
+¿·¤·¤¤¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥àÉÕ¤­¤Ç¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¡£ºï½ü¤·¤Æ
+¤·¤Þ¤Ã¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò²óÉü¤µ¤»¤ë¤Î¤Ë¡¢¤³¤Î¥³¥Þ¥ó¥É¤ò»È¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤
+(Âå¤ï¤ê¤Ë mkpart ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤)¡£
+
+PART-TYPE ¤Ï¤³¤Î¤¦¤Á¤Î°ì¤Ä¤Ç¤¹: primary (´ðËÜ)¡¢extended (³ÈÄ¥)¡¢
+logical (ÏÀÍý)¡£extended ¤È logical ¤Ï msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤ËÂФ·¤Æ¤Î¤ß
+»ÈÍѤ·¤Þ¤¹¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à:
+ * ext2
+ * FAT
+ * linux-swap
+
+Îã:
+
+ (parted) mkpartfs logical ext2 440 670
+
+
+2.4.8 move
+------------
+ move MINOR START [END] ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤ò°ÜÆ°¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò°ÜÆ°¤·¤Þ¤¹¡£ Ãí: move ¤Ï·è¤·¤Æ¥Þ¥¤¥Ê¡¼ÈÖ¹æ¤òÊѹ¹¤·¤Þ¤»¤ó¡£
+
+¤â¤· END ¤¬»ØÄꤵ¤ì¤Ê¤±¤ì¤Ð¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤ÏƱ¤¸¤Þ¤Þ¤Ë¤Ê¤ê¤Þ¤¹¡£
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à:
+ * ext2 (ÌÜŪ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤è¤êÂ礭¤¤¤È¤¤¤¦¾ò·ï¤Ç)
+ * FAT
+ * linux-swap
+
+
+2.4.9 name
+------------
+ name MINOR NAME ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤ò NAME ¤È̾ÉÕ¤±
+ ¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë̾Á°¤òÉÕ¤±¤Þ¤¹ (Mac ¤È PC98 ¤À¤±)¡£ ̾Á°¤Ï¥¯¥¦¥©¡¼¥È¤Ç°Ï¤á
+¤Þ¤¹¡£ Îã:
+
+ (parted) name 2 'Secret Documents'
+
+
+2.4.10 print
+-------------
+ print ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤òɽ¼¨¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤òɽ¼¨¤·¤Þ¤¹¡£
+
+Îã:
+
+ (parted) print
+ Disk geometry for /dev/hda: 0.000-2445.679 megabytes
+ Disk label type: msdos
+ Minor Start End Type Filesystem Flags
+ 1 0.031 945.000 primary FAT boot, lba
+ 2 945.000 2358.562 primary ext2
+ 3 2358.562 2445.187 primary linux-swap
+
+
+2.4.11 resize
+--------------
+ resize MINOR START END ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Î¥Õ¥¡¥¤¥ë
+ ¥·¥¹¥Æ¥à¤ÎÂ礭¤µ¤òÊѹ¹¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤·¤Þ¤¹¡£ Ãí: resize ¤Ï·è¤·¤Æ¥Þ¥¤¥Ê¡¼ÈÖ¹æ¤òÊѹ¹
+¤·¤Þ¤»¤ó¡£ºÆ¤Ó¡¢Ãí: ¿·¤·¤¤³ÈÄ¥¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬´°Á´¤ËÁ´¤Æ¤ÎÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+¤ò´Þ¤ó¤Ç¤¤¤ë¸Â¤ê¡¢³ÈÄ¥¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤Ç¤­¤Þ¤¹¡£
+
+Parted ¤Ï¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤¬¡Ö¥Ç¥Õ¥é¥°¡×¤µ¤ì¤Æ¤¤¤ë¤³¤È¤òÍ׵ᤷ¤Ê¤¤¤³¤È¤Ë
+Ãí°Õ¤·¤Æ¤¯¤À¤µ¤¤ (ɬÍפʤ顢Parted ¤Ï°ÂÁ´¤Ë¥Ç¡¼¥¿¤ò°ÜÆ°¤Ç¤­¤Þ¤¹)¡£¥Ç¥Õ¥é¥°
+¤¹¤ë¤Î¤Ï»þ´Ö¤Î̵Â̤Ǥ¹¡£¼ÙË⤷¤Ê¤¤¤Ç!
+
+¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à:
+ * ext2 - À©¸Â: ¿·¤·¤¤ START ¤Ï¸Å¤¤ START ¤ÈƱ¤¸¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó
+ * FAT
+ * linux-swap
+
+Îã:
+
+ (parted) resize 3 200 850
+
+
+2.4.12 rm
+----------
+ rm MINOR ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¤òºï½ü¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò½üµî¤·¤Þ¤¹¡£¤â¤·¶öÁ³¤Ë¤³¤Î¥³¥Þ¥ó¥É¤Ç¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò
+ºï½ü¤·¤Æ¤·¤Þ¤Ã¤¿¤é¡¢¼è¤êÌ᤹¤¿¤á¤Ë mkpart ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤ (mkpartfs ¤Ç¤Ï
+¡Ø¤¢¤ê¤Þ¤»¤ó¡Ù)¡£¤Þ¤¿¡¢Â»½ý¤ò¼õ¤±¤¿¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤ò²óÉü¤µ¤»¤ë¤¿¤á¤Ë¡¢
+gpart ¥×¥í¥°¥é¥à¤ò»È¤¦¤³¤È¤â²Äǽ¤Ç¤¹ (6¾Ï¤ò»²¾È)¡£
+
+msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Î¤¿¤á¤ÎÃí°Õ: ¤â¤·ÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºï½ü¤¹¤ì¤Ð¡¢
+¤è¤êÂ礭¤¤¥Þ¥¤¥Ê¡¼ÈÖ¹æ¤ÎÉÕ¤¤¤¿ÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÏÁ´ÉôÈֹ椬ÉÕ¤±Ä¾¤µ¤ì¤ë
+¤Ç¤·¤ç¤¦¡£Î㤨¤Ð¡¢¤â¤· 6 ¤Î¥Þ¥¤¥Ê¡¼ÈÖ¹æ¤ÎÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºï½ü¤¹¤ì¤Ð¡¢
+Èֹ椬 7¡¢8¡¢9 ¤À¤Ã¤¿ logical ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¤½¤ì¤¾¤ì 6¡¢7¡¢8 ¤Ë¤Ê¤ê¤Þ¤¹¡£
+¤³¤Î¤³¤È¤Î¤¿¤á¤Ë¡¢/etc/fstab ¤ò¹¹¿·¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+Îã:
+
+ (parted) rm 3
+
+
+2.4.13 select
+--------------
+ select DEVICE ÊÔ½¸¤¹¤ë¥Ç¥Ð¥¤¥¹¤òÁªÂò¤·¤Þ¤¹
+
+Parted ¤¬ÊÔ½¸¤¹¤ë¥Ç¥Ð¥¤¥¹¤òÁªÂò¤·¤Þ¤¹¡£¥Ç¥Ð¥¤¥¹¤ÏÄ̾ï Linux ¤Î¥Ï¡¼¥É¡¦¥Ç¥£
+¥¹¥¯¡¦¥Ç¥Ð¥¤¥¹¤«¡¢¤¢¤ë¤¤¤Ï¡¢¤â¤·¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ø¤ÎľÀÜ¥¢¥¯¥»¥¹¤¬Í׵ᤵ
+¤ì¤ë¤Ê¤é¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ä¡¢¥½¥Õ¥È¥¦¥§¥¢ RAID ¥Ç¥Ð¥¤¥¹¡¢LVM ÏÀÍý¥Ü¥ê¥å¡¼¥à
+¤Ç¤·¤ç¤¦¡£
+
+Îã:
+
+ (parted) select /dev/hdb
+
+
+2.4.14 set
+-----------
+ set MINOR FLAG STATE ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó MINOR ¾å¤Î¥Õ¥é¥°¤ò
+ Êѹ¹¤·¤Þ¤¹
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Î¥Õ¥é¥°¤òÊѹ¹¤·¤Þ¤¹¡£¥Õ¥é¥°¤Ï¡Öon¡×¤«¡Öoff¡×¤Î¤É¤Á¤é¤«¤Ç
+¤¹¡£¤³¤ì¤é¤Î¥Õ¥é¥°¤Î°ìÉô¡¢¤¢¤ë¤¤¤Ï¡¢Á´Éô¤¬¡¢¤¢¤Ê¤¿¤¬»È¤Ã¤Æ¤¤¤ë¥Ç¥£¥¹¥¯¡¦¥é
+¥Ù¥ë¤Ë±þ¤¸¤Æ¡¢ÍøÍѤǤ­¤ë¤Ç¤·¤ç¤¦:
+ * boot (Mac¡¢MSDOS¡¢PC98) - ¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤«¤éµ¯Æ°¤·¤¿¤±¤ì¤Ð¡¢Í­¸ú¤Ë
+¤µ¤ì¤ë¤Ù¤­¤Ç¤¹¡£¤½¤Î°ÕÌ£¤Ï¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë´Ö¤Ç¤µ¤Þ¤¶¤Þ¤Ç¤¹¡£MSDOS ¥Ç¥£¥¹¥¯¡¦
+¥é¥Ù¥ë¤Ç¤Ï¡¢¤¿¤À°ì¤Ä¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤À¤±¤¬µ¯Æ°²Äǽ¤Ë¤Ê¤êÆÀ¤Þ¤¹¡£¤â¤·¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤Ë LILO ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¤Ê¤é¡¢¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ïµ¯Æ°²Äǽ¤Ç¤Ê¤±
+¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£PC98 ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Ç¤Ï¡¢Á´¤Æ¤Î ext2 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬µ¯Æ°
+²Äǽ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó (¤³¤ì¤Ï Parted ¤Ë¶¯À©¤µ¤ì¤Þ¤¹)¡£
+ * lba (MSDOS) - MSDOS¡¢MS Windows 9x ¤ä MS Windows ME ¤ò´ðËܤȤ¹¤ë¥ª¥Ú¥ì¡¼
+¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Ë¥ê¥Ë¥¢ (LBA) ¥â¡¼¥É¤ò»È¤¦¤è¤¦¤Ë»Ø¼¨¤¹¤ë¤¿¤á¤Ë¡¢¤³¤Î¥Õ¥é¥°
+¤ÏÍ­¸ú¤Ë¤Ç¤­¤Þ¤¹¡£
+ * root (Mac) - ¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬ Linux ¤Ë¤è¤Ã¤Æ»ÈÍѤµ¤ì¤ë¥ë¡¼¥È¡¦¥Ç¥Ð¥¤
+¥¹¤Ê¤é¡¢¤³¤Î¥Õ¥é¥°¤òÍ­¸ú¤Ë¤¹¤Ù¤­¤Ç¤¹¡£
+ * swap (Mac) - ¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬ Linux ¤Ë¤è¤Ã¤Æ»ÈÍѤµ¤ì¤ë¥¹¥ï¥Ã¥×¡¦¥Ç¥Ð
+¥¤¥¹¤Ê¤é¡¢¤³¤Î¥Õ¥é¥°¤òÍ­¸ú¤Ë¤¹¤Ù¤­¤Ç¤¹¡£
+ * hidden (MSDOS, PC98) - ¥Þ¥¤¥¯¥í¥½¥Õ¥È¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤«¤é
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò±£¤¹¤¿¤á¤Ë¡¢¤³¤Î¥Õ¥é¥°¤òÍ­¸ú¤Ë¤Ç¤­¤Þ¤¹¡£
+ * raid (MSDOS) - Linux ¤Ë¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¥½¥Õ¥È¥¦¥§¥¢ RAID ¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤Ç¤¢¤ë¤³¤È¤ò¶µ¤¨¤ë¤¿¤á¤Ë¡¢¤³¤Î¥Õ¥é¥°¤òÍ­¸ú¤Ç¤­¤Þ¤¹¡£
+ * LVM (MSDOS) - Linux ¤Ë¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬ÊªÍý¥Ü¥ê¥å¡¼¥à¤Ç¤¢¤ë¤³¤È¤ò¶µ¤¨
+¤ë¤¿¤á¤Ë¡¢¤³¤Î¥Õ¥é¥°¤òÍ­¸ú¤Ë¤Ç¤­¤Þ¤¹¡£
+
+print ¥³¥Þ¥ó¥É¤Ï³Æ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ËÂФ·¤ÆÍ­¸ú¤Ë¤µ¤ì¤Æ¤¤¤ë¥Õ¥é¥°Á´¤Æ¤òɽ¼¨¤·
+¤Þ¤¹¡£
+
+Îã:
+
+ (parted) set 1 boot on
+
+
+2.4.15 quit
+------------
+ quit ¥×¥í¥°¥é¥à¤ò½ªÎ»¤·¤Þ¤¹
+
+Parted ¤ò½ªÎ»¤µ¤»¤Þ¤¹¡£Linux ¥«¡¼¥Í¥ë¤¬ Parted ¤¬¥Ç¥£¥¹¥¯¤ËÂФ·¤Æ¹Ô¤Ã¤¿
+Êѹ¹¤òÃΤë¤Î¤Ï¡¢Parted ¤¬½ªÎ»¤·¤¿¸å¤À¤±¤Ç¤¹¡£¤·¤«¤·¤Ê¤¬¤é¡¢¥³¥Þ¥ó¥É¤òÂǤÁ
+¹þ¤ó¤Ç°ú¤­µ¯¤³¤µ¤ì¤ëÊѹ¹¤Ï¡Ø¤ª¤½¤é¤¯¡Ù¡¢¥³¥Þ¥ó¥É¤òÂǤƤФ¹¤°¤µ¤Þ¥Ç¥£¥¹¥¯¤Ë
+È¿±Ç¤µ¤ì¤ë¤Ç¤·¤ç¤¦¡£¤Ç¤â¡¢Linux ¤Î¥­¥ã¥Ã¥·¥å¤ä¥Ç¥£¥¹¥¯¤Î¥Ï¡¼¥É¥¦¥§¥¢¡¦
+¥­¥ã¥Ã¥·¥å¤¬¤³¤ì¤òÃٱ䤵¤»¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+
+
+2.5 ¼ÂÎã
+------------------------------------------------------------------------------
+
+°Ê²¼¤ÎÎã¤Ç¡¢ºÇ¤â¤¢¤ê¤Õ¤ì¤¿¾õ¶·¤òÊñ´Þ¤¹¤ë¤è¤¦¤Ë»î¤ß¤Þ¤¹¡£Îã³°¤Ï¥Ç¥£¥¹¥¯¡¦
+¥¤¥á¡¼¥¸¥ó¥°¤Ç¡¢¤½¤ì¤Ï8¾Ï¤Ç°·¤ï¤ì¤Æ¤¤¤Þ¤¹¡£
+
+2.5.1 Îã 1
+-----------------
+
+¾õ¶·
+
+¤¢¤Ê¤¿¤Î¥Ç¥£¥¹¥¯¤Î³ä¤êÅö¤Æ¤¬¼¡¤Î¤è¤¦¤Ç¤¢¤ë¤È¹Í¤¨¤Æ¤¯¤À¤µ¤¤:
+
+ (parted) print
+ Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+ Disk label type: msdos
+ Minor Start End Type Filesystem Flags
+ 1 0.063 500.000 primary ext2
+ 2 500.000 625.000 primary linux-swap
+
+¤½¤Î¥Ç¥£¥¹¥¯¤ÎºÇ¸å¤Ë (¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 2 ¤Î¸å¤Ë) 375 Mb ¤Î¶õ¤­Îΰ褬¤¢¤ê¤Þ¤¹¡£
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 1 ¤Ï ext2 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ò»ý¤Á¡¢¤½¤ì¤¬¥ë¡¼¥È¡¦¥Ç¥Ð¥¤¥¹¤Ç
+¤¹¡£¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 2 ¤Ï¥¹¥ï¥Ã¥×¡¦¥Ç¥Ð¥¤¥¹¤Ç¤¹¡£
+
+¤½¤Î¥Ç¥£¥¹¥¯¤ÎºÇ¸å¤Î¶õ¤­Îΰè¤ò¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 1 ¾å¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥àÍѤ˻È
+¤¤¤¿¤«¤Ã¤¿¤È¤·¤Þ¤¹¡£
+
+¼ê½ç¤Î¸«ËÜ
+
+(1) °Ê²¼¤ÎÃʳ¬¤Ç¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 1 ¾å¤Î¥ë¡¼¥È¡¦¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤È¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó 2 ¾å¤Î¥¹¥ï¥Ã¥×¡¦¥Ç¥Ð¥¤¥¹¤ÎξÊý¤ò½¤Àµ¤·¤Þ¤¹¡£¤½¤ì¤æ¤¨¡¢¤É¤Á¤é¤Î¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤ò¤â»ÈÍѤ·¤Æ¤¤¤Æ¤Ï¤¤¤±¤Þ¤»¤ó¡£Â¿Ê¬ Parted ¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò
+»ÈÍѤ¹¤ë¤Ù¤­¤Ç¤¹ (¥»¥¯¥·¥ç¥ó 1.5 ¤ò»²¾È)¡£¤½¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤«¤é¡¢Parted
+¤ò¼Â¹Ô¤·¤Þ¤¹:
+
+ # parted /dev/hda
+
+(2) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 2 (¥¹¥ï¥Ã¥×¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¤ò½üµî¤·¤Þ¤¹¡£ÉáÄÌ¡¢¥Ç¡¼¥¿
+¤¬¾è¤Ã¤Æ¤¤¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºï½ü¤·¤¿¤¯¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤·¤«¤·¡¢¡Ö¥¹¥ï¥Ã¥×¡¦
+¥ª¥ó¡× (¥Þ¥¦¥ó¥È) ¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¡¢¥¹¥ï¥Ã¥×¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¥Ç¡¼¥¿¤ò´Þ¤ó
+¤Ç¤¤¤Þ¤»¤ó¤Î¤Ç¡¢¤½¤ì¤ò½üµî¤·¡¢Âå¤ï¤ê¤Î¥¹¥ï¥Ã¥×¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¸å¤Çºî¤ë¤³¤È
+¤¬¤Ç¤­¤Þ¤¹¡£
+
+ (parted) rm 2
+
+(3) ¤½¤Î¥Ç¥£¥¹¥¯¤ÎºÇ¸å¤Ë¿·¤·¤¤¥¹¥ï¥Ã¥×¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹:
+
+ (parted) mkpartfs primary linux-swap 875 999.9
+ (parted) print
+ Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+ Disk label type: msdos
+ Minor Start End Type Filesystem Flags
+ 1 0.063 500.000 primary ext2
+ 2 875.000 1000.000 primary linux-swap
+
+(4) ¶áÀܤ·¤¿¶õ¤­Îΰè¤Ë¸þ¤«¤Ã¤Æ¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 1 ¤òÁýÂ礵¤»¤Þ¤¹:
+
+ (parted) resize 1 0.063 874.9
+
+½ª¤ï¤ê¤Þ¤·¤¿!
+
+ (parted) print
+ Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+ Disk label type: msdos
+ Minor Start End Type Filesystem Flags
+ 1 0.063 874.999 primary ext2
+ 2 875.000 1000.000 primary linux-swap
+
+
+2.5.2 Îã 2
+-----------------
+
+¾õ¶·
+
+¤¢¤Ê¤¿¤Î¥Ç¥£¥¹¥¯¤Î³ä¤ê°¸¤Æ¤¬¤³¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¹Í¤¨¤Æ¤¯¤À¤µ¤¤:
+
+ Disk geometry for /dev/hda: 0-8063.5 megabytes
+ Disk label type: msdos
+ Minor Start End Type Filesystem Flags
+ 1 0.0 23.5 primary ext2 boot
+ 2 23.5 8056.0 extended
+ 5 23.6 3545.6 logical ext2
+ 6 3545.6 7067.7 logical ext2
+ 7 7067.7 7326.5 logical ext2
+ 8 7326.5 7585.4 logical ext2
+ 9 7585.4 7844.2 logical linux-swap
+
+ Filesystem Size Used Avail Use% Mounted on
+ /dev/hda8 251M 31M 207M 13% /
+ /dev/hda1 23M 2.4M 19M 11% /boot
+ /dev/hda5 3.4G 577M 2.7G 18% /usr
+ /dev/hda6 3.4G 289M 2.9G 9% /home
+ /dev/hda7 251M 12M 226M 5% /var
+
+/home (/dev/hda6) ¤ÎÎΰè¤ò»È¤Ã¤Æ¡¢/var ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó (/dev/hda7) ¤ò 1GB ¤Ë
+Áý¤ä¤·¤¿¤«¤Ã¤¿¤È¤·¤Þ¤¹¡£
+
+Parted ¤Ç¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤¹¤ë¤Î¤Ë¡¢resize ¥³¥Þ¥ó¥É¤ò»ÈÍѤ·¤Þ¤¹:
+
+ (parted) resize PARTITION_NUMBER NEW_START NEW_END
+
+NEW_START ¤Ï (¤¢¤¤¤Ë¤¯) ext2 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ç¤Ï°ÊÁ°¤Î³«»ÏÅÀ¤ÈƱ¤¸¤Ç¤Ê¤±¤ì¤Ð
+¤Ê¤ê¤Þ¤»¤ó¡£¤À¤«¤é¡¢¤³¤Î¼ê³¤­¤Ï¤«¤Ê¤êÊ£»¨¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤ì¤Ï²Äǽ¤Ç¤Ï¤¢¤ê¤Þ¤¹
+¤¬ :-)
+
+Ãí: ¤â¤· (FAT ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ç¤Ç¤­¤ë¤è¤¦¤Ë) Parted ¤¬ ext2 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î
+³«»ÏÅÀ¤Î°ÜÆ°¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤¿¤é¤Ê¤é¡¢¤½¤ì¤Ï¼è¤ë¤Ë­¤ê¤Ê¤«¤Ã¤¿¤Ç¤·¤ç¤¦:
+
+ (parted) resize 6 3545.6 6200
+ (parted) resize 7 6200 7326.5
+
+¼ê½ç¤Î¸«ËÜ:
+
+(1) /home ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó (/dev/hda6) ¤ò 500MB ½Ì¤á¤Þ¤¹:
+
+ # parted /dev/hda
+ (parted) resize 6 3545.6 6200
+
+(2) ¤½¤Î¾ì½ê¤Ë¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¡£¤³¤ì¤ÏºÇ½ªÅª¤Ë¤Ï /var ¤Ë
+¤Ê¤ë¤È¤³¤í¤Ç¤¹¡£¤³¤Î¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï 10 ¤ÈÈÖ¹æÉÕ¤±¤µ¤ì¤Þ¤¹¡£
+
+ (parted) mkpartfs logical ext2 6200 7067.7
+
+(3) °ÊÁ°¤Î /var ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó (/dev/hda7) ¤ò¿·¤·¤¤Êý (/dev/hda10) ¤Ø¥³¥Ô¡¼
+¤·¤Þ¤¹¡£
+
+ (parted) cp 7 10
+
+(4) °ÊÁ°¤Î /var ¤òºï½ü¤·¤Þ¤¹¡£
+
+ (parted) rm 7
+
+
+¤³¤Î»þÅÀ¤Ç¡¢Á´¤Æ¤Î 7 °Ê¹ß¤ÎÏÀÍý¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÏÈֹ椬ÊѤï¤Ã¤¿¤È¤³¤í¤Ç¤¹¡£
+¤À¤«¤é¡¢8¡¢9¡¢10 ¤Ï¤½¤ì¤¾¤ì 7¡¢8¡¢9 ¤Ë¤Ê¤ê¤Þ¤¹¡£
+
+¤³¤ÎÈÖ¹æ¤ÎºÆ³ä¤êÅö¤Æ¤Ï¡¢¤³¤Î¥Ç¥£¥¹¥¯¾å¤Î²¿¤é¤«¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¥Þ¥¦¥ó¥È
+¤µ¤ì¤Æ¤¤¤ë´Ö¤Ë¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó (¤³¤ì¤ÏºÆµ¯Æ°¤¹¤ë¤È¤­¤Ëµ¯¤­¤Þ¤¹)¡£¤½¤Î·Ù¹ð
+¥á¥Ã¥»¡¼¥¸¤¬¸ì¤Ã¤Æ¤¤¤ë¤Î¤Ï¤³¤Î¤³¤È¤Ç¤¹¡£¤À¤«¤é¡¢¤â¤·¤³¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¤±
+¼è¤Ã¤¿¤Ê¤é¡¢Parted ¤Ë¤è¤Ã¤Æ±Æ¶Á¤òÍ¿¤¨¤é¤ì¤¿ (Parted ¤Ë¤è¤Ã¤ÆÂ礭¤µ¤¬Êѹ¹
+¤µ¤ì¤¿¤ê¡¢ºîÀ®¤µ¤ì¤¿¤ê¤·¤¿) ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¡¢ºÆµ¯Æ°°ÊÁ°¤Ë¥Þ¥¦¥ó¥È¤·¤è¤¦
+¤È»î¤ß¤Æ¤ÏÀäÂФ¤¤±¤Þ¤»¤ó¡£
+
+(5) (º£¤Ç¤Ï 9 ¤ÈÈÖ¹æÉÕ¤±¤é¤ì¤¿) ¿·¤·¤¤ /var ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤ò¡¢
+°ÊÁ°¤Î /var ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÄɲ乤뤳¤È¤Ç¡¢Êѹ¹¤·¤Þ¤¹:
+ (parted) resize 9 6200 7326.5
+ (parted) quit
+ Warning: The kernel was unable to re-read the partition table on
+ /dev/hda (Device or resource busy). This means Linux knows nothing
+ about any modifications you made. You should reboot your computer
+ before doing anything with /dev/hda.
+
+(6) ¥Ñ¡¼¥Æ¥£¥·¥ç¥óÈֹ椬Êѹ¹¤µ¤ì¤¿¤Î¤Ç¡¢/etc/fstab ¤ò¹¹¿·¤·¤Ê¤±¤ì¤Ð¤Ê¤ê
+¤Þ¤»¤ó¡£¥ë¡¼¥È¡¦¥Ç¥Ð¥¤¥¹¤Ï Parted ¤Ë¤è¤Ã¤Æ±Æ¶Á¤µ¤ì¤Ê¤«¤Ã¤¿¤Î¤Ç¡¢¤³¤ì¤Ï
+ºÆµ¯Æ°¤¹¤ëÁ°¤Ë¹Ô¤¨¤Þ¤¹¡£(¤â¤· Parted ¤ò»È¤Ã¤Æ¥ë¡¼¥È¡¦¥Ç¥Ð¥¤¥¹¤Ë²¿¤«¤ò
+¤·¤¿¤¤¤Î¤Ç¤¢¤ì¤Ð¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹)¡£
+
+¤â¤·º£¤Þ¤Ç¤Î /etc/fstab ¤¬¤³¤ó¤Ê´¶¤¸¤À¤Ã¤¿¤é:
+
+/dev/hda8 / ext2 defaults 1 1
+/dev/hda1 /boot ext2 defaults 1 2
+/dev/hda6 /home ext2 grpquota,usrquota 0 2
+/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0
+/dev/hda5 /usr ext2 defaults 1 2
+/dev/hda7 /var ext2 grpquota,usrquota 0 2
+/dev/fd0 /mnt/floppy auto noauto,owner 0 0
+none /proc proc defaults 0 0
+none /dev/pts devpts gid=5,mode=620 0 0
+/dev/hda9 swap swap defaults 0 0
+
+¿ô¹Ô¤òÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹:
+ * /var ¤Ïº£¤Ç¤Ï /dev/hda9 ¤Ç¤¹ (¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¥³¥Ô¡¼¤·¤¿¤«¤é)
+ * /dev/hda8 (¥ë¡¼¥È¡¦¥Ç¥Ð¥¤¥¹) ¤Ï /dev/hda7 ¤ËÈֹ椬Êѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹
+ * /dev/hda9 (¥¹¥ï¥Ã¥×¡¦¥Ç¥Ð¥¤¥¹) ¤Ï /dev/hda8 ¤ËÈֹ椬Êѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹
+
+¿·¤·¤¤ /etc/fstab ¤Ï¤³¤ó¤Ê´¶¤¸¤Ç¤¹:
+
+/dev/hda7 / ext2 defaults 1 1
+/dev/hda1 /boot ext2 defaults 1 2
+/dev/hda6 /home ext2 grpquota,usrquota 0 2
+/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0
+/dev/hda5 /usr ext2 defaults 1 2
+/dev/hda9 /var ext2 grpquota,usrquota 0 2
+/dev/fd0 /mnt/floppy auto noauto,owner 0 0
+none /proc proc defaults 0 0
+none /dev/pts devpts gid=5,mode=620 0 0
+/dev/hda8 swap swap defaults 0 0
+
+(7) ºÆµ¯Æ°¤·¤Æ¤¯¤À¤µ¤¤¡£¤³¤ì¤Ç¤ª¤·¤Þ¤¤¡ª
+
+[ÌõÃí: ¤·¤«¤·¤³¤ì¤À¤È¡¢¸µ¡¹ /var ¤Î¤¢¤Ã¤¿¤È¤³¤í¤Ï̤»ÈÍѤΤޤ޻Ĥµ¤ì¤Æ¤·¤Þ¤¦
+¤Î¤Ç¡¢¤Á¤ç¤Ã¤È¤â¤Ã¤¿¤¤¤Ê¤¤µ¤¤¬¤¹¤ë... ¤¿¤Ã¤¿¤Î5%¤·¤«»È¤Ã¤Æ¤¤¤Ê¤¤¤ó¤À¤«¤é¡¢
+tar ¤Ç¸Ç¤á¤Æ¡¢/home ¤Ë¤Ç¤âÃÖ¤¤¤È¤¤¤Æ¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºî¤êľ¤·¤Æ¡¢tar
+¤ÇÉü¸µ¤·¤¿Êý¤¬Îɤ¤¤Î¤Ç¤Ï¡©]
+
+
+------------------------------------------------------------------------------
+3 BIOS ¤È¥Õ¥¡¡¼¥à¥¦¥§¥¢
+------------------------------------------------------------------------------
+¡ÖBIOS¡× (´ðËÜÆþ½ÐÎÏ¥·¥¹¥Æ¥à) ¤È¡Ö¥Õ¥¡¡¼¥à¥¦¥§¥¢¡×¤ÏƱ¤¸¤â¤Î¤ò°ÕÌ£¤·¤Þ¤¹¡£
+¤·¤«¤·¡¢PC ¤ä PC98 ¤Ë´ð¤Å¤¯¥³¥ó¥Ô¥å¡¼¥¿¤Ç¤Ï¡¢BIOS ¤È¤¤¤¦¸ÀÍÕ¤ÎÊý¤¬ÉáÄ̤Ǥ¹¡£
+Apple Macintosh ¤ä Sun ¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Ç¤Ï¡¢¡Ö¥Õ¥¡¡¼¥à¥¦¥§¥¢¡×¤È¤¤¤¦¸ÀÍÕ¤ÎÊý
+¤¬ÉáÄ̤Ǥ¹¡£
+ BIOS ¤ä¥Õ¥¡¡¼¥à¥¦¥§¥¢¤Î¥×¥í¥°¥é¥à¤Ï¥³¥ó¥Ô¥å¡¼¥¿ÆâÉô¤Î ROM ¥Á¥Ã¥×¤Ë
+ÁȤ߹þ¤Þ¤ì¤Æ¤ª¤ê¡¢¥á¥â¥ê¤Î¸¡ºº¤Ê¤É¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤Î¥×¥í¥°¥é¥à¤Ï (ÍưפˤÏ)
+Êѹ¹¤Ç¤­¤Þ¤»¤ó¡£º£Æü¤Î BIOS ¤Ï°ìÈÌŪ¤Ë 20 ǯÁ°¤Ë»È¤ï¤ì¤¿ BIOS ¤È¸ß´¹¤Ê¤Î¤Ç¡¢
+¤³¤ì¤é¤Î¥×¥í¥°¥é¥à¤Ï¸Å¤á¤«¤·¤¤À߷פǤ¢¤ë·¹¸þ¤¬¤¢¤ê¤Þ¤¹¡£²¿Ç¯¤Ë¤âÅϤäơ¢
+ȿľ´ÑŪ¤ÊÊýË¡¤Çµ¡Ç½¤¬Äɲ䵤ì¤Æ¤­¤Æ¤ª¤ê¡¢º£Æü¤Ç¤Ï¿¤¯¤Îº®Íð¤ò¤â¤¿¤é¤¹¡¢
+¤¢¤Þ¤ê¤ËÈÑ»¨¤Ê¥·¥¹¥Æ¥à¤ËƳ¤¤¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+3.1 PC BIOS
+------------------------------------------------------------------------------
+¿ô¼ï¤ÎÉáµÚ¤·¤¿ PC BIOS ¤¬¤¢¤ê¤Þ¤¹: AmiBIOS¡¢Award¡¢Phoenix ¤ä¾¤Î¤â¤Î¤Ç¤¹¡£
+¤½¤ì¤é¤ÏÁ´¤Æ»÷¤¿¤è¤¦¤Ê¤ä¤êÊý¤ÇÆ°ºî¤·¤Þ¤¹¡£¤³¤ì¤é¤Î BIOS ¤Ï¤É¤ì¤â¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤òÍý²ò¤·¤¿¤ê¡¢ÃΤäƤ¤¤¿¤ê¤Ï¤·¤Þ¤»¤ó¡£¤½¤ì¤é¤Ï´ÖÀÜŪ¤Ë¥Ñ¡¼
+¥Æ¥£¥·¥ç¥Ë¥ó¥°¤Ë±Æ¶Á¤·¤Þ¤¹¡£
+ ¤¢¤Ê¤¿¤Î¥³¥ó¥Ô¥å¡¼¥¿¤¬µ¯Æ°¤¹¤ë¤È¤­:
+(1) ¤³¤ì¤é¤Î BIOS ¤Ï¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¾å¤Î MBR (¥Þ¥¹¥¿¡¼¡¦¥Ö¡¼¥È¡¦¥ì¥³¡¼¥É)
+¤Ë¼ý¤á¤é¤ì¤¿¡¢¥Ö¡¼¥È¡¦¥í¡¼¥À¡¦¥×¥í¥°¥é¥à¤ÎºÇ½é¤Î¤ï¤º¤«¤ÊÉôʬ¤ò¥í¡¼¥É¤·¤Þ¤¹¡£
+(2) BIOS ¤Ï¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤ÎºÇ½é¤Î¤ï¤º¤«¤ÊÉôʬ¤ò¼Â¹Ô¤·¤Þ¤¹¡£
+(3) ¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¡¦¥×¥í¥°¥é¥à¤Ï¤½¤ì¼«¿È¤Î»Ä¤ê¤ò¥í¡¼¥É¤¹¤ë¤Î¤Ë¡¢BIOS ¤ò
+»ÈÍѤ·¤Þ¤¹¡£
+(4) ¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à (¤¢¤ë¤¤¤Ï¡¢Â¾¤Î¥Ö¡¼¥È¡¦
+¥í¡¼¥À¡¢¤½¤Î¾ì¹ç¤Ï¥¹¥Æ¥Ã¥× 2 ¤ËºÆ¤ÓÌá¤ê¤Þ¤¹) ¤ò¥í¡¼¥É¤¹¤ë¤Î¤Ë¡¢BIOS ¤ò»ÈÍÑ
+¤·¤Þ¤¹¡£
+(5) ¤½¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ÏÄ̾ï¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹¤ò
+¹Ô¤¦¤Î¤Ë¡¢BIOS ¤ò»ÈÍѤ·¤¿¤ê¡¢¤·¤Ê¤«¤Ã¤¿¤ê¤·¤Þ¤¹¡£ (Windows ¤ÏÉáÄ̹Ԥ¤¡¢Linux
+¤ä BSD ¤Ï¤·¤Þ¤»¤ó)
+
+ ¥¹¥Æ¥Ã¥× (3) ¤«¤é (5) ¤Ï¡¢¥Ç¥£¥¹¥¯¤ËÏä·¤«¤±¤ë¤è¤¦¤ËÍ׵᤹¤ë¤Î¤Ë¡¢
+BIOS ¤ÈÄÌ¿®¤¹¤ë¥×¥í¥°¥é¥à¤ò´Þ¤ß¤Þ¤¹¡£BIOS ¤ËÏä·¤«¤±¤ë¤Î¤ËÆó¤Ä¤Î¤ä¤êÊý¤¬
+¤¢¤ê¤Þ¤¹: CHS (¥·¥ê¥ó¥À¡¢¥Ø¥Ã¥É¡¢¤½¤·¤Æ¡¢¥»¥¯¥¿) ¤ò»È¤Ã¤Æ¡¢¤¢¤ë¤¤¤Ï¡¢LBA
+(¥ê¥Ë¥¢¡¦¥Ö¥í¥Ã¥¯¡¦¥¢¥É¥ì¥Ã¥·¥ó¥°) ¤ò»È¤Ã¤Æ¡£¸Å¤á¤Î BIOS ¤Ï CHS ¤À¤±¤ò¥µ
+¥Ý¡¼¥È¤·¤Þ¤¹¡£CHS ¥µ¥Ý¡¼¥È¤Ï¾­Íè¾Ã¤¨µî¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢¿·¤·¤¤ BIOS ¤Ï
+ÉáÄÌ LBA ¤È CHS ¤ÎξÊý¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£ (CHS ¤Ï³µ¤·¤Æ¤ª¤¾¤Þ¤·¤¤°äʪ¤Ç
+¤¢¤ë¤È¹Í¤¨¤é¤ì¤Æ¤¤¤Þ¤¹) (ÌõÃí: ¾Ã¤¨µî¤ë¤³¤È¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¡¢PC ¤¬¤¢¤ë¸Â¤ê)
+ ¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤ë¡¢¥¹¥Æ¥Ã¥× (3) ¤È (4) ¤Ï¾ï¤ËƱ¤¸¥¢¥¯
+¥»¥¹¼êË¡¤ò»È¤¦¤Ç¤·¤ç¤¦ - ¾ï¤Ë LBA ¤«¡¢¾ï¤Ë CHS ¤Ç¡£Windows ¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À
+¤Î¾ì¹ç¡¢¤³¤ì¤Ï Windows ¤Î¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Î LBA ¥Õ¥é¥°¤Ë¤è¤Ã¤Æ·èÄê
+¤µ¤ì¤Þ¤¹¡£(¥Õ¥é¥°¤Ë´Ø¤¹¤ë¾ðÊó¤Ï¡¢2.4.14 ¤ò»²¾È)¡£ Linux ¤Î¾ì¹ç¡¢¤ª¤½¤é¤¯
+LILO ¤« GRUB ¤ò¥Ö¡¼¥È¡¦¥í¡¼¥À¤È¤·¤Æ»ÈÍѤ·¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£ GRUB ¤ÏÍøÍѲÄǽ¤Ê
+¤é¡¢LBA ¤ò»È¤¤¡¢¤µ¤â¤Ê¤±¤ì¤Ð CHS ¤ò»È¤¤¤Þ¤¹¡£ LILO ¤Ï¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤È¤­¡¢
+ÁªÂò¤¹¤ë¤³¤È¤òÍ׵ᤷ¤Þ¤¹ (linear¡¢¤¢¤ë¤¤¤Ï lba32 ¥ª¥×¥·¥ç¥ó¤Ç)¡£
+ ¥¹¥Æ¥Ã¥× (5) - ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤ÆÆþ½ÐÎϤ¬¹Ô¤ï¤ì¤ë -
+Windows ¤À¤±¤¬ BIOS ¤Ë¤è¤Ã¤ÆÆþ½ÐÎϤò¹Ô¤¤¤Þ¤¹¡£ [²æ¡¹¤Ï¤Þ¤À¤½¤ÎÌäÂê¤Ë¤Ä¤¤¤Æ
+½½Ê¬¤Ë¤Ïʬ¤«¤ê¤Þ¤»¤ó¤¬¡¢Windows ¤Ï CHS ¥â¡¼¥É¤Ç¤½¤ì¼«¿È¤ÎÌäÂê¤òÊú¤¨¤Æ¤¤¤ë
+¤è¤¦¤Ë¸«¤¨¤Þ¤¹¡£¿Í¡¹¤Ï Windows ¤¬¤½¤ì¼«¿È¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ê¤É¤òÂÌÌܤË
+¤¹¤ë¾ì¹ç¤Ë¤Ä¤¤¤Æ¶µ¤¨¤Æ¤¯¤ì¤Þ¤·¤¿¡£²æ¡¹¤Ë¤Ï¡¢²¿¤¬µ¯¤­¤Æ¤¤¤ë¤Î¤«¤òÃΤë¤Î¤¬ËÜÅö
+¤Ëº¤Æñ¤Ç¤¹¡£¤Ç¤­¤ë¤³¤È¤Ê¤é¡¢LBA ¤ò»È¤¦¤³¤È¤ò¶¯¤¯´«¤á¤Þ¤¹!]
+ ¤À¤«¤é¡¢»°¤Ä¤Î¾õ¶·¤¬¤¢¤ê¤¨¡¢¤½¤ì¤é¤ÏÁ´¤Æ¤³¤³¤Ç¥«¥Ð¡¼¤µ¤ì¤Æ¤¤¤Þ¤¹:
+(1) CHS ¥â¡¼¥É¤ò»È¤Ã¤Æ¤¤¤Æ¡¢¤¢¤Ê¤¿¤Î BIOS ¤Ï CHS ¥â¡¼¥É¤À¤±¤ò¥µ¥Ý¡¼¥È¤·¤Æ
+¤¤¤Þ¤¹¡£
+(2) CHS ¥â¡¼¥É¤ò»È¤Ã¤Æ¤¤¤Æ¡¢¤¢¤Ê¤¿¤Î BIOS ¤Ï CHS ¤È LBA ¤ÎξÊý¤ò¥µ¥Ý¡¼¥È¤·
+¤Æ¤¤¤Þ¤¹¡£¤À¤«¤é¡¢CHS ¥â¡¼¥É¤«¤é LBA ¥â¡¼¥É¤Ø¡¢²Äǽ¤Ê¸Â¤êÁ᤯¡¢ÊÑ´¹¤·¤¿¤¤
+¤Ç¤¹¡£
+(3) LBA ¥â¡¼¥É¤ò¤¹¤Ç¤Ë»È¤Ã¤Æ¤¤¤Þ¤¹¡£
+
+3.1.1 CHS ¥â¡¼¥É¤Ç¤Î Parted ¤Î»ÈÍÑ
+----------------------------------
+Linux ¤ÏÄ̾ï BIOS ¤Î¥¸¥ª¥á¥È¥ê¤ò¼«Æ°Åª¤Ë¸¡½Ð¤·¤Þ¤¹¡£¤·¤«¤·¡¢¤È¤­¤É¤­´Ö°ã¤¤¤ò
+ÈȤ·¤Þ¤¹¡£¤³¤Î¾ì¹ç¡¢Linux ¤Ø¥Ñ¥é¥á¡¼¥¿¤òÅϤ¹¤³¤È¤Ë¤è¤Ã¤Æ¡¢¼«Ê¬¤Ç¶µ¤¨¤Æ¤¢¤²¤ë
+¤Ù¤­¤Ç¤¹¡£Î㤨¤Ð¡¢Linux ¤¬¥Ï¡¼¥É¡¦¥É¥é¥¤¥Ö /dev/hda ¤Ï¥¸¥ª¥á¥È¥ê 256/64/63
+¤ò»ý¤Ä¤È¹Í¤¨¡¢BIOS ¤ÎÀßÄê¥×¥í¥°¥é¥à¤Ï¤½¤Î¥¸¥ª¥á¥È¥ê¤Ï 512/32/63 ¤À¤È½ñ¤¤¤Æ¤¤
+¤ë¤Ê¤é¡¢¤³¤Î¥Ñ¥é¥á¡¼¥¿¤ò Linux ¤ËÅϤ¹¤ÈÎɤ¤¤Ç¤·¤ç¤¦:
+
+ hda=512,32,63
+
+¥Ñ¥é¥á¡¼¥¿¤Ï¡¢¤É¤ó¤Ê¥Ö¡¼¥È¡¦¥í¡¼¥À¤ò»È¤Ã¤Æ¤¤¤ë¤«¤Ë°Í¤ê¡¢°Û¤Ã¤¿ÊýË¡¤ÇÅϤµ¤ì
+¤Þ¤¹¡£¤ª¤½¤é¤¯ LILO ¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î¾ì¹ç¡¢¼¡¤Î¹Ô¤ò /etc/lilo.conf ¤ËÄɲÃ
+¤·¤Þ¤¹: (¤½¤·¤Æ¡¢¤½¤ÎÊѹ¹¤¬È¿±Ç¤µ¤ì¤ë¤è¤¦¤Ë¡¢/sbin/lilo ¤ò¼Â¹Ô¤·¡¢ºÆµ¯Æ°¤¹¤ë
+ɬÍפ¬¤¢¤ê¤Þ¤¹)
+
+ append="hda=512,32,63"
+
+Parted ¤ÏÉáÄÌ Linux ¤¬´Ö°ã¤Ã¤¿¥¸¥ª¥á¥È¥ê¤ò¸¡½Ð¤·¤¿¤«¤É¤¦¤«¤ò¸¡½Ð¤Ç¤­¤Þ¤¹¡£
+¤·¤«¤·¡¢¥Ç¥£¥¹¥¯¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¤Ê¤¤¤È¡¢¤³¤ì¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤³¤Î¾ì¹ç¡¢¼«Ê¬¤Ç
+¸¡ºº¤¹¤ë¤Ù¤­¤Ç¤¹¡£¤³¤ì¤ò¹Ô¤¦¤Î¤ÏÈó¾ï¤Ë½ÅÍפǤ¹¡£
+ ¤È¤­¤É¤­¡¢Parted ¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¥·¥ê¥ó¥À¶­³¦¤Ë·¤Ã¤Æ¤¤¤Ê¤¤¤Èʸ¶ç
+¤ò¸À¤¦¤Ç¤·¤ç¤¦¡£Parted ¤Ï̵»ë¤¹¤ë¤¿¤á¤Î¥ª¥×¥·¥ç¥ó¤òÄ󶡤¹¤ë¤Ç¤·¤ç¤¦¡£¤â¤·
+̵»ë¤¹¤ë¤Ê¤é¡¢Parted ¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤Ë¤¤¤¯¤Ä¤«¤Î·ÝÅö¤ò¹Ô¤¦¤Ç¤·¤ç¤¦¡£
+Linux ¤Ë¤Ï²¿¤ÎÌäÂê¤â¤Ê¤¤¤Ç¤·¤ç¤¦¡£DOS ¤ä Windows ¤Ï¡¢¤â¤· LBA ¥â¡¼¥É¤ò»È¤Ã¤Æ
+¤¤¤ë¤Ê¤é¡¢ÌäÂê¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤â¤· DOS/Windows ¤¬ CHS ¥â¡¼¥É¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢
+¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ì¤Ð (¥»¥¯¥·¥ç¥ó 4.3 ¤ò»²¾È)¡¢¤É¤ó¤ÊÌäÂê
+¤â²ò·è¤¹¤ë¤Ï¤º¤Ç¤¹ - ¤Ç¤â¡¢LBA ¥â¡¼¥É¤Ø¤ÎÀڤ괹¤¨¤¬Ë¾¤Þ¤·¤¤¤Ç¤¹ (°Ê²¼¤Î¡¢
+3.1.2 ¤ò»²¾È)¡£
+ ¥Ö¡¼¥È²áÄø¤Ë´Ø·¸¤¹¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¡¢¤â¤· CHS ¥â¡¼¥É¤¬»È¤ï¤ì¤Æ¤¤¤ë
+¤Ê¤é¡¢¥·¥ê¥ó¥À 1024 ¤è¤êÁ°¤Ç½ª¤ï¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤¢¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+¤¬¥Ö¡¼¥È²áÄø¤Ë´Ø·¸¤·¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò·èÄꤹ¤ë¤Î¤Ë¡¢¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ë´Ø¤¹¤ë¥»¥¯
+¥·¥ç¥ó¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£Åµ·¿Åª¤ÊÀßÄê¤Ï¡¢¾®¤µ¤Ê Linux ¤Î /boot ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¢
+Windows ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¢¤½¤·¤Æ¡¢Linux ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò»ý¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£
+
+3.1.2 CHS ¤«¤é LBA ¤Ø¤ÎÊÑ´¹
+----------------------------------
+Windows ¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¡¢µÚ¤Ó¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Ë LBA ¥â¡¼¥É¤ò
+»È¤ï¤»¤ë¤Ë¤Ï¡¢Á´¤Æ¤Î FAT ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Î LBA ¥Õ¥é¥°¤òΩ¤Æ¤ë¤À¤±¤Ç¤¹
+(¥»¥¯¥·¥ç¥ó 2.4.14 ¤ò»²¾È)¡£²¿¤âÌäÂê¤Ê¤¤¤Ï¤º¤Ç¤¹¡£¤â¤· Windows ¤òµ¯Æ°¤¹¤ë
+¤Î¤ËÌäÂ꤬¤¢¤ì¤Ð¡¢Windows ¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ
+ľ¤»¤Þ¤¹ (¥»¥¯¥·¥ç¥ó 4.3 ¤ò»²¾È)¡£
+ Linux ¤ÏÆþ½ÐÎÏ¤Ë BIOS ¤ò»È¤¤¤Þ¤»¤ó¡£¤·¤«¤·¡¢¥Ö¡¼¥È¡¦¥í¡¼¥À (LILO ¤ä
+GRUB) ¤Ï¤¹¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤â¤·²Äǽ¤Ê¤é¡¢GRUB ¤Ï¼«Æ°Åª¤Ë LBA ¤ò»È¤¤¤Þ¤¹¡£
+LILO ¤Ï¡Ölinear¡×¤ä¡Ölba32¡×¥ª¥×¥·¥ç¥ó¤òɬÍפȤ·¤Þ¤¹¡£¤À¤«¤é¡¢¤â¤· LILO ¤¬
+/etc/lilo.conf ¤òÊѹ¹¤·¡¢/sbin/lilo ¤ÇºÆ¥¤¥ó¥¹¥È¡¼¥ë (¥»¥¯¥·¥ç¥ó 4.1 ¤ò»²¾È)
+¤·¤¿¸å¤Ç¤âµ¯Æ°¤¹¤ë¤Ê¤é¡¢Á´Éô½ª¤ï¤Ã¤Æ¤Þ¤¹! (¤â¤·ÌäÂ꤬¤¢¤ì¤Ð¡¢¡Ölinear¡×¤ä
+¡Ölba32¡×¤òºï½ü¤·¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤«¤é LILO ¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
+CHS ¤ËÌᤷ¤Æ¤¯¤À¤µ¤¤)
+
+º£¤ä LBA ¤ò»È¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢Æɤ߿ʤó¤Ç¤¯¤À¤µ¤¤...
+
+3.1.3 LBA ¥â¡¼¥É
+----------------
+LBA ¤Ï CHS ¤ÎÌäÂê¤ÎÁ´¤Æ¤ò²ò·è¤·¤Þ¤¹¡£¤·¤«¤·¡¢Linux ¤ä Parted ¤¬ LBA ¤ò»È¤Ã
+¤Æ¤¤¤ë¤³¤È¤ò¸«Ê¬¤±¤ë¡¢¿®Íê¤Ç¤­¤ëÊýË¡¤Ï¤Ê¤¤¤Î¤Ç¡¢Parted ¤Ï·¤Ã¤Æ¤¤¤Ê¤¤¥·¥ê¥ó¥À
+¤ä¡¢Ì·½â¤·¤¿ BIOS ¥¸¥ª¥á¥È¥ê¤Ë¤Ä¤¤¤Æ·Ù¹ð¤òÍ¿¤¨¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤â¤· LBA
+¥â¡¼¥É¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¤³¤ì¤é¤Î¥á¥Ã¥»¡¼¥¸¤Ï̵»ë¤·¤Æ¤«¤Þ¤¤¤Þ¤»¤ó¡£ (Parted
+¤Î¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Ç¤ÏÌäÂ꤬¤¢¤ê¤Þ¤·¤¿¤¬¡¢¤½¤ì¤é¤ÏÁ´¤Æ²ò·èºÑ¤ß¤Ç¤¹)
+
+¤â¤·¥Ç¥£¥¹¥¯¤¬ LBA ¥â¡¼¥É¤Ç¤¢¤ë¤Ê¤é¡¢Parted (¤ä¾¤Î¤Û¤È¤ó¤É¤Î¥×¥í¥°¥é¥à) ¤Ï
+CHS ¥¸¥ª¥á¥È¥ê¤Ï X/255/63 ¤Ç¤¢¤ë¤Èɽ¸½¤¹¤ë¤Ç¤·¤ç¤¦ - CHS ¤«¤é LBA ¤ËÀڤ괹¤¨
+¤¿¤Î¤Ç¤Ê¤±¤ì¤Ð¡£
+
+3.2 Macintosh OpenFirmware
+------------------------------------------------------------------------------
+PowerMac ¤Î OpenFirmware ¤Ë¤ÏÆó¤Ä¤Î¼çÍפʥС¼¥¸¥ç¥ó¤¬¤¢¤ê¤Þ¤¹ - ¡Ö¸Å¤¤À¤³¦¡×
+(old world) ¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤â¤Î¤È¡¢¡Ö¿·¤·¤¤À¤³¦¡× (new world) ¤Î PowerMac ¤Ç
+¤Î¤â¤Î¤Ç¤¹¡£¤½¤ì¤é¤Ë¤Ï½ÅÂç¤Ê°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Î¾Êý¤È¤â¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦
+¥Æ¡¼¥Ö¥ë¤òÍý²ò¤·¤Þ¤¹¡£
+ ξÊý¤È¤â¡¢¥æ¡¼¥¶¤¬¸·Ì©¤Ë°ì¤Ä¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+(¥Ö¡¼¥È¡¦¥í¡¼¥À¤Î¤¢¤ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¤ËÁª¤Ö¤³¤È¤òÍ׵ᤷ¤Þ¤¹¡£¤·¤«¤·¡¢¤³¤ì¤ò
+¹Ô¤¦¤Î¤Ë¡¢¤½¤ì¤é¤Ï°ã¤Ã¤¿»ÅÁȤߤòÍѤ¤¤Þ¤¹¡£
+
+3.2.1 ¸Å¤¤À¤³¦¤Î OpenFirmware
+------------------------------
+µ¯Æ°¤¹¤ë¤è¤¦¤ËÁª¤Ð¤ì¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¡¢Quik ¤Î¤è¤¦¤Ê¡¢¤µ¤Þ¤¶¤Þ¤Ê¥Ö¡¼¥È¡¦
+¥í¡¼¥À¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤Þ¤¹¡£¤À¤«¤é¡¢¤¢¤Ê¤¿¤Ï²¿¤â¤·¤Ê¤¯¤ÆÎɤ¤¤Ï¤º¤Ç¤¹¡£²æ¡¹¤Ï
+¤³¤ì¤ËÂФ¹¤ë¥µ¥Ý¡¼¥È¤ò Parted ¤ËÄɲ乤ë¤Ç¤·¤ç¤¦¡¢¤â¤·Ã¯¤«½½Ê¬¤ËÁû¤¬¤·¤¯¶«¤ó
+¤À¤é...
+
+3.2.2 ¿·¤·¤¤À¤³¦¤Î OpenFirmware
+------------------------------
+¿·¤·¤¤À¤³¦¤Î OpenFirmware ¤Ï¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬ HFS ¤Ç¤¢¤ê¡¢¥Ö¡¼¥È¡¦
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤È¤·¤Æ°õ¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤³¤È¤òɬÍפȤ·¤Þ¤¹¡£¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤È¤·¤Æ°õ¤òÉÕ¤±¤ë¤Î¤Ë¡¢°Û¤Ê¤ë»ÅÁȤߤò»È¤¤¤Þ¤¹¡£¤³¤ì¤Ï Parted ¤Î¡Öboot¡×
+¥Õ¥é¥°¤Ç´ÉÍý¤·¤Þ¤¹¡£Î㤨¤Ð:
+
+ (parted) set 2 boot on
+
+
+3.3 PC98 BIOS
+------------------------------------------------------------------------------
+PC98 BIOS ¤Ï¤¤¤¯¤Ä¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¤Ç¤â¡¢µ¯Æ°²Äǽ¤À¤È°õ¤òÉÕ¤±¤é¤ì¤ë¤è¤¦¤Ë
+¤·¤Æ¤¤¤Þ¤¹¡£Parted ¤Î¡Öboot¡×¥Õ¥é¥°¤Ç¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òµ¯Æ°²Äǽ¤À¤È°õ¤òÉÕ¤±
+¤¿¤ê¡¢³°¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð:
+
+ (parted) set 2 boot off
+
+
+------------------------------------------------------------------------------
+4 ¥Ö¡¼¥È¡¦¥í¡¼¥À
+------------------------------------------------------------------------------
+¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ï¡¢»È¤¤¤¿¤¤¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤òÁª¤ó¤À¤ê¡¢¤½¤Î¥ª¥Ú
+¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ò¥í¡¼¥É¤¹¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¥×¥í¥°¥é¥à¤Ç¤¹¡£Æäˡ¢
+¤â¤·Ê£¿ô¤Î¼ïÎà¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¤Ê¤é¡¢Ê£¿ô
+¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ë¤È¤Ã¤Æ¡¢
+¾¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤ò¥í¡¼¥É¤Ç¤­¤ë¤Î¤ÏÅö¤¿¤êÁ°¤Î¤³¤È¤Ç¤¹¡£
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤¹¤ë¤È¤­¡¢Â¿Î̤Υǡ¼¥¿¤¬°ÜÆ°¤µ¤»¤é¤ì¤Þ¤¹¡£Â¿¤¯¤Î
+¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ï¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òÍý²ò¤·¤Þ¤»¤ó¡£¤½¤ì¤é¤Ïñ¤ËɬÍפȤµ¤ì¤ë
+¥Ö¡¼¥È¡¦¥í¡¼¥À¤Î¾ðÊ󤬥ǥ£¥¹¥¯¾å¤Î¤É¤³¤Ë¤¢¤ë¤«¤òµ­²±¤·¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£¤â¤·
+¤³¤Î¾ðÊó¤¬Æ°¤«¤µ¤ì¤¿¤é¡¢¤½¤ì¤¬¤É¤³¤Ë°ÜÆ°¤µ¤»¤é¤ì¤¿¤«¶µ¤¨¤Æ¤¢¤²¤Ê¤±¤ì¤Ð¤Ê¤ê
+¤Þ¤»¤ó¡£¤³¤ì¤Ï¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¹Ô¤ï¤ì¤Þ¤¹
+(¤Ä¤Þ¤ê¡¢¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤Î¥¤¥ó¥¹¥È¡¼¥é¡¦¥×¥í¥°¥é¥à¤òºÆ¤ÓÁö¤é¤»¤ë¡¢¤½¤ì¤Ï
+Ä̾亮¥§¥ë¤Çñ°ì¤Î¥³¥Þ¥ó¥É¤òȯ¹Ô¤¹¤ë¤³¤È¤òɬÍפȤ·¤Þ¤¹)¡£¤¢¤é¤æ¤ë¥Ö¡¼¥È¡¦
+¥í¡¼¥À¤¬¤³¤Î¤³¤È¤òɬÍפȤ¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£
+
+4.1 LILO (Linux Loader)
+---------------------------
+LILO ¤Ï x86 ÍѤÎͭ̾¤Ê¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ç¤¹¡£LILO ¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤ÏÄ̾ï°Ê²¼¤Ç
+¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹:
+
+ # /sbin/lilo
+
+¤â¤·¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢Âå¤ï¤ê¤Ë¼¡¤ò¹Ô¤¦¤Ù¤­¤Ç¤¹: (¤³¤³¤Ç¡¢
+/dev/hda1 ¤Ï¤¢¤Ê¤¿¤Î¥ë¡¼¥È¡¦¥Ç¥Ð¥¤¥¹¤ÈÃÖ¤­´¹¤¨¤ë¤Ù¤­¤Ç¤¹)
+
+ # mount /dev/hda1 /mnt
+ # chroot /mnt /sbin/lilo
+ # umount /dev/hda1
+
+LILO ¤Î (¤½¤ì¤Û¤É¤Ç¤Ï¤Ê¤¤¤¬) ¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Ï LBA ¥â¡¼¥É¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ
+¤»¤ó (¥»¥¯¥·¥ç¥ó 3.1 ¤ò»²¾È)¡£LBA ¥â¡¼¥É¤Ï /etc/lilo.conf ¤Ç¡¢lba32 ¤ä
+linear ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤ÆÍ­¸ú²½¤µ¤ì¤Þ¤¹ (¤â¤Ã¤È¾ðÊó¤òÆÀ¤ë¤Î¤Ë¡¢LILO ¤Î²òÀâ
+¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤)¡£
+ ¤â¤· LBA ¥â¡¼¥É¤ò»È¤¦¤Ê¤é¡¢¤¢¤Ê¤¿¤Î BIOS ¤¬ LBA ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë
+¸Â¤ê¡¢²¿¤âÌäÂê¤Ê¤¤¤Ï¤º¤Ç¤¹¡£
+ ¤â¤· CHS ¥â¡¼¥É¤ò»È¤¦¤Ê¤é¡¢/boot ¥Ç¥£¥ì¥¯¥È¥ê¤ò»ý¤Ä¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï
+¥·¥ê¥ó¥À 1024 Æâ¤Ë¼ý¤Þ¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤À¤«¤é¡¢¤â¤·Â礭¤Ê¥Ç¥£¥¹¥¯
+(¸À¤Ã¤Æ¤ß¤ì¤Ð¡¢8 ¥®¥¬Ä¶) ¤ò»ý¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥Ç¥£¥¹¥¯¤Î½é¤áÊÕ¤ê¤Ë¡¢/boot ¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤ò»ý¤Ã¤Æ¤¤¤ë¤Ù¤­¤Ç¤¹¡£
+
+4.2 GNU GRUB (GRand Unified Bootloader)
+-------------------------------------------
+GRUB ¤Ï x86 ÍѤΡ¢Èæ³ÓŪ¿·¤·¤¤¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ç¤¹¡£¤É¤¦¤ä¤Ã¤Æ GRUB ¤¬¥¤¥ó¥¹
+¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤Ë¤è¤Ã¤Æ¡¢¤½¤ì¤Ï¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òÍý²ò¤¹¤ë¤«¤â¤·¤ì¤Ê¤¤
+¤·¡¢Ã±¤Ëµ¯Æ°¥Õ¥¡¥¤¥ë¤¬¼ý¤á¤é¤ì¤Æ¤¤¤ë¤«¤ò³Ð¤¨¤Æ¤¤¤ë¤À¤±¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+¡ÖStage 1.5¡×¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òÍý²ò¤·¤Þ¤¹¡£¤â¤· Stage 1.5
+¤ò»È¤Ã¤Æ¤¤¤Ê¤¤¤«¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥óÈֹ椬ÊѤï¤Ã¤¿¤é¡¢Stage 2 ¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë
+¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹ (GRUB ¤Î²òÀâ¤òÆɤó¤Ç¤¯¤À¤µ¤¤)¡£¤½¤¦¤Ç¤Ê¤¤¤Ê¤é¡¢²¿¤â¤·¤Ê
+¤¯¤Æ¹½¤¤¤Þ¤»¤ó¡£
+ GRUB ¤Ï LBA ¤¬ÍøÍѲÄǽ¤«¡¢¼«Æ°Åª¤Ë¸¡½Ð¤·¡¢¤â¤·ÍøÍѲÄǽ¤Ê¤é¡¢¤½¤ì¤ò
+»È¤¦¤Ç¤·¤ç¤¦ (LILO ¤Î¡Ölba32¡×¥ª¥×¥·¥ç¥ó¤ÈƱÅù)¡£
+
+4.3 MS DOS¡¢MS Windows 9x¡¢MS Windows ME
+--------------------------------------------
+DOS ¤È Windows ¤Ï¡¢¤â¤·¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î FAT ¤Î¼ïÎà (FAT16 ¤« FAT32)
+¤òÊѹ¹¤¹¤ì¤Ð¡¢¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤òÍ׵ᤷ¤Þ¤¹¡£
+Parted ¤Ï¤³¤ì¤ò¹Ô¤ª¤¦¤È»î¤ß¤ëÁ°¤Ë·Ù¹ð¤¹¤ë¤Ç¤·¤ç¤¦¡£¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ
+¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤¿¤á¤Ë¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤òºîÀ®¤¹¤ë¤«¡¢¥Ö¡¼¥È CDROM ¤ò»ÈÍÑ
+¤Ç¤­¤Þ¤¹¡£¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ÎÊýË¡¤Ï Windows ME ¤Ç¤ÏƯ¤­¤Þ¤»¤ó¡£
+
+¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ÎÊýË¡: (DOS/Windows 9x)
+
+ (1) Windows ¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ÎºîÀ®
+ * Windows ¤òµ¯Æ°¤·¤Þ¤¹¡£¡Ø¤³¤Î¤³¤È¤Ï Parted ¤ò»È¤¦Á°¤Ë¡¢¥Ö¡¼¥È¡¦
+¥Ç¥£¥¹¥¯¤òºî¤ë¤Ù¤­¤Ç¤¢¤ë¤È°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£¡Ù
+ * Windows ¥¨¥¯¥¹¥×¥í¡¼¥é¤Î¥Õ¥í¥Ã¥Ô¥£¡¦¥É¥é¥¤¥Ö¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£
+ * ¡Ö¥Õ¥©¡¼¥Þ¥Ã¥È¡×¤ò¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£
+ * ¡Ö¥·¥¹¥Æ¥à¡¦¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼¤¹¤ë¡×¤Ë°õ¤òÉÕ¤±¤Þ¤¹¡£
+ * ¡Ö¥Õ¥©¡¼¥Þ¥Ã¥È¡×¤ò¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£
+ * C:\WINDOWS\COMMAND\SYS.COM ¤ò A:\ ¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£Ãí: C:\WINDOWS
+ ¤ÏÊ̤Î̾Á°¤ÇÆɤó¤Ç¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡¢C:\WIN98 ¤Î¤è¤¦¤Ê¡£
+ (2) µ¯Æ°¤¹¤ë¤È¤­¤Ë¥Õ¥í¥Ã¥Ô¥£¡¦¥É¥é¥¤¥Ö¤Ë¤½¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤ò»Ä¤·¤Æ¤ª¤¤¤Æ¡¢
+Windows ¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤«¤éµ¯Æ°¤·¤Þ¤¹¡£
+ (3) DOS ¥×¥í¥ó¥×¥È¤Ç¼¡¤òÂǤÁ¤Þ¤¹:
+ A:\>sys c:
+
+ÌõÃí: Ìõ¼Ô¤Ïµ×¤·¤¯ÆüËܸìÈÇ Windows ¤ò¿¨¤Ã¤¿¤³¤È¤¬¤Ê¤¤¤Î¤Ç¡¢Ìõ¸ì¤¬Åö¤Ã¤Æ¤Ê¤¤¤«
+¤â¤·¤ì¤Þ¤»¤ó¡£°ã¤Ã¤Æ¤¿¤é¡¢¶µ¤¨¤Æ¤¯¤À¤µ¤¤¡£
+
+CDROM ¤ÎÊýË¡: (Windows 9x/ME)
+
+ (1) Windows ¤Î CDROM ¤òÁÞ¤·¡¢¤½¤ì¤«¤éµ¯Æ°¤·¤Þ¤¹¡£(¡ÖCDROM ¥µ¥Ý¡¼¥È¤Ê¤·¤Ç
+µ¯Æ°¡×¤òÁª¤Ó¤Þ¤¹)
+ (2) ¼¡¤Î¤è¤¦¤ËÂǤÁ¤Þ¤¹:
+ A:\>c:
+ C:\>cd \windows\command (\win98\command ¤ä»÷¤¿¤è¤¦¤Ê¤â¤Î¤«¤â)
+ C:\WINDOWS\COMMAND>sys c:
+
+
+¤Þ¤¿¡¢DOS ¤ä Windows ¤Ï¿ô¸Ä¤ÎÀ©¸Â¤ò²¡¤·ÉÕ¤±¤Þ¤¹:
+
+ * ¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¡Öboot¡×¥Õ¥é¥°¤ÇÁªÂò¤µ¤ì¤Æ¤¤¤ë¤Ù¤­¤Ç¤¹¡£¤¿¤Ã¤¿
+°ì¤Ä¤Î¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤À¤±¤¬ÁªÂò¤µ¤ìÆÀ¤Þ¤¹ (¤È¤­¤É¤­¡Ö¥¢¥¯¥Æ¥£¥Ö¡×
+(active) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤È¸Æ¤Ð¤ì¤Þ¤¹)¡£Î㤨¤Ð¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 3 ¤ò¥Ö¡¼¥È¡¦
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ËÀßÄꤹ¤ë¤Ë¤Ï¡¢¤³¤¦¤·¤Þ¤¹:
+
+ (parted) set 3 boot on
+
+ * MS DOS ¤ä MS Windows 9x/ME ¤ÏºÇ½é¤Î FAT ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤«¤é¤·¤«µ¯Æ°¤Ç¤­
+¤Þ¤»¤ó¡£¤¹¤Ê¤ï¤Á¡¢°ìÈÖ¾®¤µ¤¤¡Ø¥Þ¥¤¥Ê¡¼¡ÙÈÖ¹æ¤ò»ý¤Ä¡¢±£¤µ¤ì¤Æ¤¤¤Ê¤¤ FAT ¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤Ç¤¹¡£GRUB ¤ä LILO ¤Î¤è¤¦¤Ê¥Ö¡¼¥È¡¦¥í¡¼¥À (¤½¤·¤Æ¡¢¤¤¤¯¤Ä¤«¤Î BIOS)
+¤Ï¤³¤Î¿¶¤ëÉñ¤¤¤òÊѹ¹¤Ç¤­¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤...
+
+ * ¤â¤· (LBA ¥¢¥É¥ì¥Ã¥·¥ó¥°¤Ç¤Ï¤Ê¤¯) CHS ¥¢¥É¥ì¥Ã¥·¥ó¥°¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢
+¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î³«»ÏÅÀ¤Ï¥·¥ê¥ó¥À 1024 ¤è¤ê¤â¾®¤µ¤¯¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Î LBA ¥Õ¥é¥°¤òÍ­¸ú¤Ë¤·¤¿¤ê¡¢Ìµ¸ú¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢
+MS DOS ¤Ë LBA ¥¢¥É¥ì¥Ã¥·¥ó¥°¤ò»È¤¦ (¤¢¤ë¤¤¤Ï¡¢»È¤ï¤Ê¤¤) ¤è¤¦¤Ë¶µ¤¨¤ë¤³¤È¤¬
+¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 2 ¾å¤Î LBA ¥Õ¥é¥°¤òÍ­¸ú¤¹¤ë¤Ë¤Ï¡¢¤³¤¦¤·¤Þ¤¹:
+
+ (parted) set 2 lba on
+
+Ãí: LBA ¥¢¥É¥ì¥Ã¥·¥ó¥°¤Ï¡¢PC-DOS ¤ÎÁ´¤Æ¥Ð¡¼¥¸¥ç¥ó¤À¤±¤Ç¤Ê¤¯¡¢MS-DOS 6.22 ¤ä
+¤½¤ì°ÊÁ°¤Ç¤Ï¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
+
+·Ù¹ð: ¤¤¤¯¤Ä¤«¤Î BIOS ¤Ç¤Ï¡¢BIOS ¤Ç¤âÍ­¸ú¤Ë¤·¤Ê¤¤¤È¡¢LBA ¥¢¥É¥ì¥Ã¥·¥ó¥°¤¬
+Í­¸ú¤Ë¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£²¿¤é¤«¤ÎÍýͳ¤Ç¡¢Windows ¤¬¤³¤Î¥Õ¥é¥°¤òÊѹ¹¤·¤¿¸å¤Ë
+µ¯Æ°¤·¤Ê¤¤¤Ê¤é¡¢¤³¤ì¤¬¤ª¤½¤é¤¯¤½¤ÎÌäÂê¤Ç¤¹¡£
+
+ * ¡ÖËÜÅö¤Î¡×MS-DOS (¤Ä¤Þ¤ê¡¢¥Ð¡¼¥¸¥ç¥ó 6.22 ¤Þ¤Ç) ¤È MS-DOS 7.0 (¤Ä¤Þ¤ê¡¢
+Windows 95/95a) ¤Ï FAT32 ¤òÃΤê¤Þ¤»¤ó¡£¤½¤Î¤¿¤á¡¢¡ØºÇ½é¤Î¡Ù FAT ¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤¬ FAT32 ¤Î¤È¤­¡¢¤½¤ì¤é¤ò ¡ØÆóÈÖÌܤΡ٠FAT (¤â¤Á¤í¤ó¡¢FAT16 ¤Î¤ß)
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤«¤éµ¯Æ°¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£Î¾Êý¤È¤â´ðËܥѡ¼¥Æ¥£¥·¥ç¥ó¤Ç¤Ê¤±
+¤ì¤Ð¤Ê¤é¤º¡¢µ¯Æ°¤·¤¿¤¤Êý¤ò¥¢¥¯¥Æ¥£¥Ö¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ËÀßÄꤹ¤ëɬÍפ¬¤¢¤ë
+¤Ç¤·¤ç¤¦¡£
+
+4.4 MS Windows NT
+--------------------------------------
+Windows NT ¤Ï FAT32 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÆɤó¤À¤ê¡¢µ¯Æ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£
+¤½¤ì¤æ¤¨¡¢¤â¤· Windows NT ¤Ç»È¤¤¤¿¤¤¤Ê¤é¡¢FAT16 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤«¤é FAT32
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ËÊѹ¹¤·¤Æ¤ÏÀäÂФ¤¤±¤Þ¤»¤ó¡£
+
+4.5 MS Windows 2000
+-----------------------
+Windows 2000 ¤Ï¡¢¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î FAT ¤Î¼ïÎà (FAT16 ¤« FAT32)
+¤òÊѹ¹¤·¤¿¤é¡¢¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤òÍ׵ᤷ¤Þ¤¹¡£Parted
+¤Ï¤³¤ì¤ò¹Ô¤ª¤¦¤È»î¤ß¤ëÁ°¤Ë·Ù¹ð¤¹¤ë¤Ç¤·¤ç¤¦¡£¤½¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤òºÆ¥¤¥ó¥¹¥È¡¼
+¥ë¤¹¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹:
+ (1) Windows 2000 ¤Î CD ¤«¤éµ¯Æ°¤·¤Þ¤¹¡£
+ (2) ¥¤¥ó¥¹¥È¡¼¥ë¤Ë¼è¤ê¤«¤«¤ê¤¿¤¤¤«¤É¤¦¤«¤ò¿Ö¤¯¤Ç¤·¤ç¤¦¡£Enter ¤òÂǤÁ¤Þ¤¹¡£
+ (3) ¤½¤·¤Æ¡¢¿·¤·¤¤¥·¥¹¥Æ¥à¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤¤¤«¡¢Â¸ºß¤¹¤ë¥·¥¹¥Æ¥à¤ò½¤Éü¤·
+¤¿¤¤¤«¤ò¿Ò¤Í¤ë¤Ç¤·¤ç¤¦¡£¸å¼Ô¤òÁª¤Ó¤Þ¤¹ (¡ÖR¡×¤ò²¡¤·¤Æ)¡£
+ (4) ¼«Æ°½¤Éü¤ò¹Ô¤¤¤¿¤¤¤«¡¢Éüµì¥³¥ó¥½¡¼¥ë (recovery console) ¤ò»È¤¤¤¿¤¤¤«¤ò
+¿Ö¤¯¤Ç¤·¤ç¤¦¡£Éüµì¥³¥ó¥½¡¼¥ë¤ò»È¤¦¤ÈÁªÂò¤·¤Þ¤¹¡£
+ (5) ¤½¤Î¥³¥ó¥½¡¼¥ë¤Ç¡¢¤³¤¦ÂǤÁ¤Þ¤¹:
+
+ C:\>fixboot
+
+NT/2000 ¤Î¥Ö¡¼¥È¡¦¥í¡¼¥À¤Ï¤Þ¤¿°Ê²¼¤òɬÍפȤ·¤Þ¤¹:
+ * ¡Ø´ðËÜ¡Ù FAT12¡¢FAT16¡¢¤¢¤ë¤¤¤Ï¡¢NTFS ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó (Windows 2000 ¤Ç¤Ï
+FAT32 ¤â²Äǽ)¡¢¤½¤ì¤Ï¡Ö¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡×¤È¸Æ¤Ð¤ì¤Þ¤¹¤¬¡¢¤½¤ÎÃæ¤Ë¡¢
+¤½¤ì¼«¿È¤Î¥Ö¡¼¥È¡¦¥»¥¯¥¿¤Î¥³¡¼¥É¤¬¤¢¤ë¤³¤È¡£¤³¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¡Öboot¡×
+¥Õ¥é¥°¤¬ Parted ¤ÇΩ¤Æ¤é¤ì¤Æ¤¤¤ë¤Ù¤­¤Ç¤¹¡£
+ * ¥Õ¥¡¥¤¥ë NTLDR¡¢BOOT.INI ¤È NTDETECT.COM ¤¬¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥óÆâ¤Ë
+¤¢¤ë¤³¤È¡£BOOT.INI ¤Ï´ðËܥѡ¼¥Æ¥£¥·¥ç¥ó¤ÎʪÍý°ÌÃÖ¤ä¡Ö¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡×
+¤È¸Æ¤Ð¤ì¤ë¡¢Windows NT ¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿ÏÀÍý¥É¥é¥¤¥Ö¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òÊÝ»ý
+¤·¤Þ¤¹¡£¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤È¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï°ì¤Ä¤Î´ðËܥѡ¼¥Æ¥£
+¥·¥ç¥ó¤Ë°ì½ï¤ËÀßÃÖ¤·¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£
+ * Ǥ°Õ¤Ç¡¢¥Õ¥¡¥¤¥ë NTBOOTDD.SYS ¤¬¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥óÆâ¤Ë¤¢¤ë¤³¤È¡¢
+¤½¤ì¤Ï¡¢¼«¿È¤Î BIOS ¤ò»ý¤¿¤Ê¤¤ (¤¢¤ë¤¤¤Ï¡¢¤½¤Î BIOS ¤¬Â礭¤Ê¥Ç¥£¥¹¥¯¤Ë¥¢¥¯
+¥»¥¹¤Ç¤­¤Ê¤¤) ¤È¤­¤Î¡¢SCSI ¤ä IDE ¥³¥ó¥È¥í¡¼¥é¤Î̾Á°¤òÊѤ¨¤é¤ì¤¿¥Ç¥£¥¹¥¯¡¦
+¥É¥é¥¤¥Ð¤Ç¤¹¡£
+ * MS Windows NT ¤Ç¤Ï¡¢¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¥·¥ê¥ó¥À 1024 °ÊÁ°¤Ç½ª¤ï¤ë
+¤Ù¤­¤Ç¡¢¥·¥ê¥ó¥À 1024 °ÊÁ°¤Ë³«»Ï¤·¡Ø¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡Ù¡£¤â¤·¥·¥ê¥ó¥À 1024
+°Ê¹ß¤Ç½ª¤ï¤ê¡¢µ¯Æ°¤ËɬÍפʥե¡¥¤¥ë¤¬¤³¤Î¶­³¦°Ê¹ß¤ËÆ°¤«¤µ¤ì¤¿¤é¡¢MS Windows
+NT ¤Ï¤â¤Ï¤ä³«»Ï¤·¤Ê¤¤¤Ç¤·¤ç¤¦!
+ * ¥Ö¡¼¥È¤È¥·¥¹¥Æ¥à¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎξÊý¤Ï¡¢¤½¤Î¾¤ÎÊѹ¹¤Ê¤·¤Ë¡¢Â礭¤µ¤ò
+Êѹ¹¤µ¤ì¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£
+ * ¤â¤·¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÈÖ¹æ (¤Ä¤Þ¤ê¡¢¤½¤Î¡Ø¥Þ¥¤¥Ê¡¼¡ÙÈÖ¹æ) ¤¬Êѹ¹
+¤µ¤ì¤ì¤Ð¡¢BOOT.INIT ¤ò¹¹¿·¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+4.6 Quik
+------------
+Quik ¤Ï¡ÖµìÀ¤³¦ (old world)¡×¤Î Macintosh PowerPC ÍѤΡ¢ÉáµÚ¤·¤¿¥Ö¡¼¥È¡¦
+¥í¡¼¥À¤Ç¤¹¡£¤â¤·ext2 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѤ¨¤¿¤é¡¢Quik ¤òºÆ¥¤¥ó¥¹¥È¡¼
+¥ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹:
+
+ # /sbin/quik
+
+4.7 Yaboot
+--------------
+Yaboot ¤Ï¡Ö¿·À¤³¦ (new world)¡×¤Î Macintosh PowerPC ÍѤΡ¢ÉáµÚ¤·¤¿¥Ö¡¼¥È¡¦
+¥í¡¼¥À¤Ç¤¹¡£(¡Ö¿·À¤³¦¡×¤Ï 1999 ¤«¤éÀ½Â¤¤µ¤ì¤Æ¤¤¤ë¡¢¿§¤ÎÉÕ¤¤¤¿ PowerPC ¤Ë
+°¤·¤Æ¤¤¤Þ¤¹)
+ Yaboot ¤Ï¡¢¾¯¤Ê¤¯¤È¤â 800k ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡¢¤½¤ì¼«¿È¤Îµ¯Æ°¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤òɬÍפȤ·¤Þ¤¹¡£¤À¤«¤é¡¢¤â¤· GNU/Linux ¤ò¿¿¤Ã¿·¤«¤é¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤¤
+¤ë¤Ê¤é¡¢¤³¤Î¤è¤¦¤Ê¤³¤È¤ò¤¹¤ë¤Ç¤·¤ç¤¦:
+
+ (parted) mklabel mac
+ (parted) print
+ Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ (parted) mkpart primary hfs 0.032 1
+ (parted) print
+ Disk geometry for /dev/hdb: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ 2 0.031 1.000
+ (parted) set 2 boot on
+ (parted) print
+ Disk geometry for /dev/hdb: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ 2 0.031 1.000 boot
+
+ ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤·¤¿¸å¤Ë Yaboot ¤òºÆ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë
+ɬÍפϤ¢¤ê¤Þ¤»¤ó¡£Yaboot ¤Ï ybin ¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡£
+
+
+------------------------------------------------------------------------------
+5 ¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à
+------------------------------------------------------------------------------
+º£¤Î¤È¤³¤í¡¢Parted ¤Ï GNU/Linux ¤Î²¼¤Ç¤Î¤ßÆ°ºî¤·¤Þ¤¹¡£¤·¤«¤·¡¢Â¾¤Î¥ª¥Ú¥ì¡¼
+¥Æ¥£¥ó¥°¡¦¥·¥¹¥Æ¥à¤Ë¤è¤Ã¤Æ»È¤ï¤ì¤Æ¤¤¤ë¡¢¤¢¤ë¤¤¤Ï¡¢¶¦Í­¤µ¤ì¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+¤ÎÂ礭¤µ¤òÊѹ¹¤¹¤ë¤Î¤ËÍøÍѤǤ­¤Þ¤¹¡£
+
+¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎÂ礭¤µ¤òÊѹ¹¤·¤¿¤¤¤È¤­¡¢¥Þ¥¦¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ò³Îǧ
+¤·¤Æ¤¯¤À¤µ¤¤¡£Parted ¤Ï¥Þ¥¦¥ó¥È¤µ¤ì¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó
+(¤³¤ì¤Ï¾­ÍèÊѤï¤ë¤«¤â¤·¤ì¤Þ¤»¤ó...)
+
+¤â¤·¥ë¡¼¥È¤ä¥Ö¡¼¥È¡¦¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤·¤¿¤¤¤Ê¤é¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯
+¤ò»È¤¦ (¥»¥¯¥·¥ç¥ó 1.5 ¤ò»²¾È) ¤«¡¢ext2resize ¥Ñ¥Ã¥±¡¼¥¸¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¡¢
+Andreas Dilger ¤Î online ext2 resizer (¾Ü¤·¤¯¤Ï¡¢6¾Ï¤ò»²¾È) ¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£
+
+¤â¤·¥Þ¥¦¥ó¥È¤µ¤ì¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¤¢¤ë¥Ç¥£¥¹¥¯¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤ò
+½¤Àµ¤¹¤ë¤Ê¤é¡¢¤¹¤°¤ËºÆµ¯Æ°¤¹¤ë¤Ù¤­¤Ç¤¹¡£Linux ¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤Ë
+²Ã¤¨¤¿Êѹ¹¤Ë¤Ä¤¤¤Æʬ¤«¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£ (¤³¤ì¤Ï¥«¡¼¥Í¥ë 2.4 ¤Ç¡¢¤½¤ì¤Î¥µ¥Ý¡¼
+¥È¤òÄɲ乤ë¤È¤­¤Ëľ¤µ¤ì¤ë¤Ç¤·¤ç¤¦)
+
+
+5.1 GNU/Linux ¤È FreeBSD
+------------------------------------------------------------------------------
+ξÊý¤Î¥·¥¹¥Æ¥à¤Ï¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Ë¤Ï¤«¤Ê¤ê½ÀÆð¤Ç¡¢¤¿¤¯¤µ¤ó¤Î°Û¤Ê¤ë¥Ç¥£¥¹¥¯¡¦
+¥é¥Ù¥ë¤Î¼ïÎà¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£
+ FreeBSD ¤Ï¡¢MSDOS ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤È¤Ï¸ß´¹À­¤Î¤Ê¤¤¡¢
+¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¡¦¥·¥¹¥Æ¥à¤È¡¢MSDOS ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤È¸ß´¹¤Ê¡¢
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥¹¥é¥¤¥¹¡¦¥·¥¹¥Æ¥à¤ò»ý¤Á¤Þ¤¹¡£Parted ¤Ï BSD ¥Ç¥£¥¹¥¯¡¦
+¥é¥Ù¥ë¡¦¥·¥¹¥Æ¥à¤À¤±¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡£¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥¹¥é¥¤¥¹¡¦¥·¥¹¥Æ¥à
+¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤³¤È¤Ï¤¢¤ê¤½¤¦¤Ë¤Ê¤¯¡¢¤Ê¤¼¤Ê¤é¡¢¤½¤Î°ÕÌ£ÏÀ¤Ï¤¤¤µ¤µ¤«´ñ̯¤Ç¡¢
+¡ÖÉáÄ̤Ρץѡ¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤¬¤ä¤ë¤è¤¦¤Ë¤ÏƯ¤«¤Ê¤¤¤«¤é¤Ç¤¹¡£
+
+
+5.2 MS Windows ¤È OS/2
+------------------------------------------------------------------------------
+MS Windows ¤È OS/2 ¤Ï msdos ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤À¤±¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤¹¡£¤½¤ì¤æ
+¤¨¡¢¤â¤·¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤òºîÀ®¤¹¤ë¤Ê¤é¡¢°Ê²¼¤ò»ÈÍѤ¹¤ë¤Ù¤­¤Ç¤¹:
+
+ (parted) mklabel msdos
+
+
+5.3 MacOS
+------------------------------------------------------------------------------
+MacOS (¤È OpenFirmware) ¤Ï mac ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤À¤±¤òÍý²ò¤·¤Þ¤¹¡£¤½¤ì¤æ¤¨¡¢
+¤â¤·¿·¤·¤¤¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤òºîÀ®¤¹¤ë¤Ê¤é¡¢°Ê²¼¤ò»ÈÍѤ¹¤ë¤Ù¤­¤Ç¤¹:
+
+ (parted) mklabel mac
+
+Ãí: Mac ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Þ¥Ã¥×¤Ç¤Ï¡¢¶õ¤­Îΰè¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Þ¥Ã¥×¤Î¹àÌÜ
+¤ò¤È¤Ã¤Æ¤·¤Þ¤¦ (¤½¤·¤Æ¡¢Linux ¤Ï 15 ¤òĶ¤¨¤ë¹àÌܤò»ý¤Ä¤³¤È¤ò¹¥¤Þ¤Ê¤¤) ¤Î¤Ç¡¢
+¶õ¤­Îΰè¤ò»Ä¤¹¤Î¤òÈò¤±¤ë¤Ù¤­¤Ç¤¹¡£Î㤨¤Ð¡¢¤â¤·°Ê²¼¤ò¹Ô¤¨¤Ð:
+
+ (parted) print
+ Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ 2 0.031 1.000 boot
+ 3 1.000 1000.000 ext2 root root
+ (parted) mkpartfs primary ext2 1001 2000
+ (parted) print
+ Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ 2 0.031 1.000 boot
+ 3 1.000 1000.000 ext2 root root
+ 4 1001.000 2000.000 ext2
+
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó 3 ¤È 4 ¤Î´Ö¤Ë¡¢1 ¥á¥¬¥Ð¥¤¥È¤Î¶õ¤­Îΰ褬¤¢¤ê¤Þ¤¹¡£¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤ò 0.1M Î¥¤·¤ÆºîÀ®¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤³¤ì¤òÈò¤±¤é¤ì¤Þ¤¹ (¤³¤Î¾ì¹ç¡¢
+Parted ¤Ï¼«Æ°Åª¤Ë¤½¤ì¤é¤ò°ì½ï¤Ë¡Ö²¡¤·¹þ¤ß¡×¤Þ¤¹)¡£¤À¤«¤é¡¢¾å¤ÎÎã¤Ç¤Ï¡¢ÊѤï¤ê
+¤Ë¼¡¤ò¹Ô¤¦¤Ù¤­¤Ç¤¹:
+
+ (parted) mkpartfs primary ext2 1000.1 2000
+ (parted) print
+ Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+ Disk label type: mac
+ Minor Start End Filesystem Name Flags
+ 1 0.000 0.031 Apple
+ 2 0.031 1.000 boot
+ 3 1.000 1000.000 ext2 root root
+ 4 1000.000 2000.000 ext2
+
+
+------------------------------------------------------------------------------
+6 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à
+------------------------------------------------------------------------------
+
+Parted ¤Ï°Ê²¼¤ÎÁàºî¤ËÂФ¹¤ë¥µ¥Ý¡¼¥È¤ò»ý¤Ã¤Æ¤¤¤Þ¤¹:
+
+¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à ¸¡½Ð ºîÀ® Â礭¤µÊѹ¹ ¥³¥Ô¡¼ ÅÀ¸¡
+ext2 * * *1 *2 *3
+ext3 * *1 *2 *3
+fat * * *4 *4 *
+hfs *
+jfs *
+linux-swap * * * * *
+ntfs *
+reiserfs *
+ufs *
+xfs *
+
+Ãí:
+(1) ext2 ¤È ext3 ¤Ç¤Ï¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î³«»ÏÅÀ¤Ï¸ÇÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+(2) ¥³¥Ô¡¼Àè¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¡¢¥³¥Ô¡¼¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤è¤êÂ礭¤¯ (¤¢¤ë¤¤¤Ï¡¢
+´°Á´¤ËƱ¤¸¥µ¥¤¥º) ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
+
+(3) ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤¬³«¤«¤ì¤ë¤È¤­¤Ë¡¢¸ÂÄꤵ¤ì¤¿ÅÀ¸¡¤¬¹Ô¤ï¤ì¤Þ¤¹¡£¤³¤ì¤¬
+º£¤Î¤È¤³¤íÍ£°ì¤ÎÅÀ¸¡¤Ç¤¹¡£¤â¤·¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ë²¿¤é¤«¤Î¸í¤ê(¤½¤·¤Æ¡¢°ìÈÌ
+¤Ë¸í¤ê¤ÎÂçȾ) ¤¬¤¢¤ì¤Ð¡¢(resize ¤ò´Þ¤à) Á´¤Æ¤Î¥³¥Þ¥ó¥É¤Ï¤½¤Î¼ºÇÔ¤ò¾å¼ê¤¯½èÍý
+¤·¡¢¤½¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ï¼êÉÕ¤«¤º¤Î¤Þ¤Þ¤Ë¤Ê¤ê¤Þ¤¹¡£
+
+(4) fat ¤Ç¤Ï¡¢Â礭¤µ¤ÎÊѹ¹¤ä¥³¥Ô¡¼¤Î¸å¡¢¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤Ï¥¯¥é
+¥¹¥¿¤ÎÂ礭¤µ¤ËÀ©¸Â¤µ¤ì¤Þ¤¹ (¼ç¤Ë FAT16 ¤Ë±Æ¶Á¤·¤Þ¤¹)¡£¤³¤ì¤Ï¤¢¤Ê¤¿¤¬¹Í¤¨¤ë
+¤è¤ê¤â°­¤¯¤Æ¡¢¤È¤¤¤¦¤Î¤â¡¢¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤òÁª¤Ö¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤«¤é¤Ç¤¹
+(¤½¤ì¤Ï Windows ¤Î¥Ð¥°¤Ç¤¹¤¬¡¢¸ß´¹À­¤ÏÍߤ·¤¤¡¢¤½¤¦¤Ç¤¹¤è¤Í?)
+ ¤À¤«¤é¡¢¼ÂºÝŪ¤Ë¤Ï¡¢(Parted ¤Ï¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤ò½Ì¾®¤Ç¤­¤ë¤Î¤Ç) ¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤ò¾ï¤Ë½Ì¾®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¤¢¤Ê¤¿¤¬Íߤ¹¤ëÂ礭¤µ¤Ë¡¢¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤òÁýÂ礵¤»¤ë¤³¤È¤Ï¤Ç¤­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤â¤· FAT32 ¤ò»È¤¦¤³¤È¤Ë²¿¤â
+ÌäÂ꤬¤Ê¤¤¤Ê¤é¡¢¾ï¤Ë¤¢¤Ê¤¿¤¬Íߤ¹¤ëÂ礭¤µ¤Ë¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÁýÂ礵¤»¤é¤ì¤ë¤Ç
+¤·¤ç¤¦¡£
+ Í×Ìó: ¤¤¤Ä¤Ç¤â¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò½Ì¾®¤Ç¤­¤Þ¤¹¡£¤â¤·²¿¤é¤«¤ÎÍýͳ¤Ç FAT32
+¤ò»È¤¨¤Ê¤¤¤Ê¤é¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÁýÂ礵¤»¤é¤ì¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£
+
+
+6.1 Ext2
+------------------------------------------------------------------------------
+Parted ¤Ï (¤Þ¤À) ext2 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¥³¥Ô¡¼¤òľÀܤϥµ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£
+¤·¤«¤·¤Ê¤¬¤é¡¢¤³¤ì¤ò°Ù¤¹¿ë¤²¤ëÊýË¡¤¬¾¯¤·¤À¤±¤¢¤ê¤Þ¤¹:
+ * Parted ¤Î mkfs ¥³¥Þ¥ó¥É (¤« mkfs.ext2) ¤ò»È¤¤¡¢¤½¤ì¤«¤é¥·¥§¥ë¤Ç
+°Ê²¼¤ò¼Â¹Ô¤·¤Þ¤¹:
+ ľ¤·¤Æ¤¯¤ì¡ª¡ª ¤³¤ì¤Ï¤¢¤Þ¤ê¾å¼ê¤¯¹Ô¤«¤Ê¤¤ - ¤Ç¤âÂçÄñ¤Î¿Í¤Ë¤ÏÂç¾æÉ×
+ ¤Ê¤Ï¤º...
+
+ # mount -t ext2 /dev/hda2 /mnt/dst
+ # find /mnt/src -depth | cpio -pm /mnt/dst
+
+ * ¤â¤·Ê£À½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¸µ¤è¤ê¤âÂ礭¤¯¤Ê¤ë¤Ê¤é¡¢¤³¤¦¤¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹:
+¤Þ¤º¡¢¿·¤·¤¤ ext2 ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¡£¤½¤ì¤«¤é:
+
+ # dd if=/dev/src-device of=/dev/dst-device bs=1024 count=(OLD SIZE)
+ # parted /dev/hda resize 2 (START) (END)
+
+¤³¤³¤Ç¡¢(OLD SIZE) ¤Ï¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¥­¥í¥Ð¥¤¥È¤Çɽ¤·¤¿Â礭¤µ¤Ç¤¹¡£
+(START) ¤È (END) ¤ÏÊ£À½¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ËÂФ¹¤ë¡¢¿·¤·¤¤³«»ÏÅÀ¤È½ªÃ¼¤Ç¤¹¡£
+
+
+6.2 FAT16 ¤È FAT32
+------------------------------------------------------------------------------
+Parted ¤Ï (¤Þ¤À) FAT ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤òÁýÂ礵¤»¤é¤ì¤Þ¤»
+¤ó¡£¤³¤Î¤³¤È¤Î¤¿¤á¤Ë¡¢¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤ÎÊѹ¹¤ä¥³¥Ô¡¼¤ËÀ©¸Â¤¬Àߤ±¤é¤ì¤Þ
+¤¹¡£¤³¤ì¤Ï¤·¤Ð¤·¤ÐÁ´¤¯´ñ²ø¤Ç¡¢¤È¤¤¤¦¤Î¤â¡¢Parted ¤Ï FAT16 ¤È FAT32 ¤Î¥Õ¥¡¥¤
+¥ë¡¦¥·¥¹¥Æ¥à¤òÊÑ´¹¤Ç¤­¤ë¤«¤é¤Ç¡¢¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤¬¤É¤ì¤Û¤É¤Ë¤Ê¤êÆÀ¤ë¤«¤Ë¤Ä¤¤
+¤Æ¡¢°Û¤Ê¤ëÀ©¸Â¤¬¤¢¤ê¤Þ¤¹¡£
+
+Î㤨¤Ð¡¢¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤¬ 4k ¤Ç¤¢¤ë 100Mb ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¤¢¤ë¤È¤·¤Æ¤ß¤Þ
+¤·¤ç¤¦¡£¤³¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò 400Mb ¤ËÊѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤Ê¤¼¤Ê¤é¡¢¤½
+¤Î¥¯¥é¥¹¥¿¤ÎÂ礭¤µ¤ò 16k ¤ËÊѹ¹¤¹¤ëɬÍפ¬¤¢¤ë¤«¤é¤Ç¤¹¡£¤·¤«¤·¡¢¤â¤· FAT32
+¤ò»È¤¨¤Ð¡¢¤½¤ì¤Ï 600Mb ¤ËÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£600Mb ¤Î FAT32 ¥Õ¥¡¥¤¥ë¡¦¥·
+¥¹¥Æ¥à¤ËÂФ·¤Æ¡¢µÕ¤âÀ®¤êΩ¤Á¤Þ¤¹¡£
+
+Ãí: ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ò¥³¥Ô¡¼¤·¤¿¤ê¡¢Â礭¤µ¤òÊѹ¹¤¹¤ë¤È¤­¡¢Parted ¤Ï (¤â¤·
+²Äǽ¤Ê¤é) FAT16 ¤È FAT32 ¤Î´Ö¤ÇÊÑ´¹¤·¤¿¤¤¤«¿Ò¤Í¤ë¤Ç¤·¤ç¤¦¡£¤½¤ì¤æ¤¨¡¢¤¢¤ë
+¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò (Â礭¤µ¤òÊѹ¹¤»¤º¤Ë) FAT32 ¤ËÊÑ´¹¤·¤¿¤¤¤À¤±¤Ê¤é¡¢¤½¤Î¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤òƱ¤¸Â礭¤µ¤ËÊѹ¹¤¹¤ë¤À¤±¤Ç¤Ç¤­¤Þ¤¹¡£
+
+6.2.1 MS DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó
+--------------------------------
+MS DriveSpace ¤Ï MS Windows 95 ¤ËÉÕ°¤·¤Æ¤¤¤ë¥×¥í¥°¥é¥à¤Ç¡¢FAT ¥Õ¥¡¥¤¥ë¡¦
+¥·¥¹¥Æ¥à¤ò°µ½Ì¤¹¤ë¤Î¤Ë»ÈÍѤǤ­¤Þ¤¹¡£»ä¤Ï¤³¤ì¤Ï DoubleSpace ¤ÈƱ¤¸¤è¤¦¤ËÆ°ºî
+¤¹¤ë¤È¹Í¤¨¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤³¤È¤Ï¤É¤ì¤Ç¤â DoubleSpace ¤Ë¤âÅö¤Æ
+¤Ï¤Þ¤ë¤Ï¤º¤Ç¤¹¡£
+
+¤³¤ì¤é¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѹ¹¤·¤¿¤ê¥³¥Ô¡¼¤¹¤ë¤¿¤á¤Ë Parted ¤ò»ÈÍѤ¹¤ë
+¤³¤È¤Ï²Äǽ¤Ç¤¹¤¬¡¢2¡¢3¡¢Í¾Ê¬¤Ë¤ä¤é¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó...
+
+6.2.1.1 DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÁýÂç
+--------------------------------------
+(1) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò˾¤ß¤ÎÂ礭¤µ¤ËÁýÂ礵¤»¤ë¤Î¤Ë¡¢Parted ¤Î resize ¥³¥Þ¥ó¥É
+¤ò»È¤¤¤Þ¤¹¡£
+
+(2) ¶õ¤­Îΰè¤ò¥Û¥¹¥È¡¦¥É¥é¥¤¥Ö¤«¤é°µ½Ì¥É¥é¥¤¥Ö¤Ø°Ü¤¹¤¿¤á¤Ë¡¢MS DriveSpace
+¤ò»ÈÍѤ·¤Þ¤¹¡£
+
+6.2.1.2 DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î½Ì¾®
+----------------------------------------
+(1) °µ½Ì¥É¥é¥¤¥Ö¤«¤é¥Û¥¹¥È¡¦¥É¥é¥¤¥Ö¤Ø¶õ¤­Îΰè¤ò°Ü¤¹¤¿¤á¤Ë¡¢MS DriveSpace
+¤ò»ÈÍѤ·¤Þ¤¹¡£°Ü¤µ¤ì¤ë¶õ¤­Îΰè¤ÎÎ̤ϥѡ¼¥Æ¥£¥·¥ç¥ó¤ò½Ì¾®¤¹¤ë¡¢Ë¾¤ß¤ÎÎ̤È
+°ìÃפ·¤Þ¤¹¡£
+
+(2) ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò˾¤ß¤ÎÂ礭¤µ¤Ë½Ì¾®¤¹¤ë¤¿¤á¤Ë¡¢Parted ¤Î resize ¥³¥Þ¥ó¥É
+¤ò»ÈÍѤ·¤Þ¤¹¡£Ãí: Parted ¤Ï¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¤É¤ì¤À¤±½Ì¾®¤¹¤ë¤Î¤«¤¬Ê¬¤«¤ë
+¤è¤¦¡¢¤½¤Î¿ô»ú¤ò¾å¼ê¤¯ÊÖ¤·¤Æ¤Ï¤¯¤ì¤Þ¤»¤ó¡£¤³¤ì¤Ï¤ä¤ë¤Ù¤­¤³¤È¤Î¥ê¥¹¥È¤Ëµó¤²
+¤é¤ì¤Æ¤¤¤Þ¤¹¡£
+
+6.2.1.3 DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î¥³¥Ô¡¼
+--------------------------------------
+¤â¤· DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¤â¤Ã¤ÈÂ礭¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¥³¥Ô¡¼¤·¤¿¤¤¤Ê¤é¡¢
+˾¤ß¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÂ礭¤µ¤òÊѤ¨¤ë¤Î¤Ç¤Ï¤Ê¤¯¥³¥Ô¡¼¤¹¤ë¤³¤È¤ò½ü¤¤¤Æ¡¢
+DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎÁýÂçÍѤÎÀâÌÀ¤Ë½¾¤Ã¤Æ¤¯¤À¤µ¤¤¡£¤½¤·¤Æ¡¢DriveSpace
+¤Ç¤Î¿·¤·¤¤¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò»È¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
+
+¤·¤«¤·¡¢¤â¤· DriveSpace ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¤è¤ê¾®¤µ¤Ê¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ë¥³¥Ô¡¼
+¤·¤¿¤¤¤Ê¤é¡¢Êª»ö¤Ï¾¯¡¹Ê£»¨¤Ë¤Ê¤ê¤Þ¤¹:
+
+(1) °µ½Ì¥É¥é¥¤¥Ö¤«¤é¸»¤Ç¤¢¤ë¥Û¥¹¥È¡¦¥É¥é¥¤¥Ö¤Ë¶õ¤­Îΰè¤ò°Ü¤¹¤¿¤á¤Ë¡¢MS
+DriveSpace ¤ò»È¤¤¤Þ¤¹¡£°Ü¤µ¤ì¤ëÎΰè¤ÎÎ̤ϸµ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÈÊ£À½¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤Î˾¤ß¤ÎÂ礭¤µ¤Îº¹¤è¤ê¤âÂ礭¤¯¤¢¤ë¤Ù¤­¤Ç¤¹¡£
+
+(2) ¸µ¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òÊ£À½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ø¥³¥Ô¡¼¤¹¤ë¤¿¤á¡¢Parted ¤ò»È¤¤
+¤Þ¤¹¡£
+
+(3) ¸µ¤Î¥Û¥¹¥È¡¦¥É¥é¥¤¥Ö¤«¤é°µ½Ì¥É¥é¥¤¥Ö¤Ø¶õ¤­Îΰè¤òÌ᤹¤¿¤á¡¢MS DriveSpace
+¤ò»È¤¤¤Þ¤¹¡£
+
+(4) Ê£À½¥Û¥¹¥È¡¦¥É¥é¥¤¥Ö¤«¤é°µ½Ì¥É¥é¥¤¥Ö¤Ø¶õ¤­Îΰè¤òÌ᤹¤¿¤á¡¢MS DriveSpace
+¤ò»È¤¤¤Þ¤¹¡£
+
+6.3 Reiserfs
+------------------------------------------------------------------------------
+Parted ¤Ï reiserfs ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¡£¤·¤«¤·¡¢reiserfs ¤Ë¤Ï¤½¤ì¼«¿È¤Î
+Â礭¤µÊѹ¹¥Ä¡¼¥ë¡¢resize_reiserfs ¤¬ÉÕ¤¤¤Æ¤¤¤Þ¤¹¡£¤¿¤À¤¢¤Ê¤¿¤ÎÃΤ餻¤ë¤¿¤á
+¤À¤±¤Ë ;-)
+
+
+------------------------------------------------------------------------------
+7 LVM¡¢RAID ¤ÈľÀÜŪ¤Ê¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Ø¤Î¥¢¥¯¥»¥¹
+------------------------------------------------------------------------------
+
+LVM (ÏÀÍý¥Ü¥ê¥å¡¼¥à¡¦¥Þ¥Í¡¼¥¸¥ã) ¤Ï¥Ñ¡¼¥Æ¥£¥·¥ç¥Ë¥ó¥°¤ÎÂåÂØ¥·¥¹¥Æ¥à¤Ç¤¹¡£¤½¤ì
+¤ÏÏÀÍý¥Ü¥ê¥å¡¼¥à (¤Ä¤Þ¤ê¡¢¡Ö²¾Áۥѡ¼¥Æ¥£¥·¥ç¥ó¡×) ¤¬¤¿¤¯¤µ¤ó¤ÎʪÍý¥Ü¥ê¥å¡¼¥à
+(¤Ä¤Þ¤ê¡¢¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¤ä¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¤Ë¹­¤¬¤ë¤³¤È¤òµö¤·¤Þ¤¹¡£LVM ¤Ï
+Linux ¥Ð¡¼¥¸¥ç¥ó 2.4 ¤«¤½¤ì°Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+RAID (°Â²Á¤Ê¥Ç¥£¥¹¥¯¤Î¾éŤÊÇÛÎó) ¤Ï¤¿¤¯¤µ¤ó¤Î¥Ç¥£¥¹¥¯¤ä¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò°ì½ï
+¤Ë¡¢¡Ö²¾Áۥѡ¼¥Æ¥£¥·¥ç¥ó¡×¤È¤·¤Æ»È¤¦¤¿¤á¤Î¥·¥¹¥Æ¥à¤Ç¤¹¡£¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ò
+ÍøÍѤ¹¤ë¤Î¤Ë¡¢¿ô¼ï¤Î°Û¤Ê¤ë¥â¡¼¥É¤¬¤¢¤ê¡¢ËܼÁŪ¤Ë¤Ï:
+ * À­Ç½¤ò¸þ¾å¤µ¤»¡¢Á´Îΰè¤òñ°ì¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¾å¤ÇÍøÍѤǤ­¤ë¤è¤¦¤Ë¤¹¤ë
+¤¿¤á¡¢Ê£¿ô¤Î (¾®¤µ¤Ê) ¥Ç¥£¥¹¥¯¤òñ°ì¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¤¿¤á¤Ë»ÈÍÑ¡£
+ * ¿®ÍêÀ­¤ÈÀ­Ç½¤ò¸þ¾å¤µ¤»¤ë¤¿¤á¡¢¾ðÊó¤Î¾éĹ¤Ê¥³¥Ô¡¼¤ò¼ý¤á¤ë¤Î¤ËÊ£¿ô¤Î¥Ç¥£¥¹
+¥¯¤ò»ÈÍÑ¡£
+¥½¥Õ¥È¥¦¥§¥¢ RAID ¤Ï Linux ¥Ð¡¼¥¸¥ç¥ó 2.0 ¤«¤½¤ì°Ê¹ß¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
+
+¥Ï¡¼¥É¥¦¥§¥¢ RAID ¤Ï¤Õ¤Ä¤¦¤Ë Parted ¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Þ¤¹ - ¤À¤«¤é¡¢¤â¤· (¥½¥Õ
+¥È¥¦¥§¥¢ RAID ¤ËÂФ·¤Æ) ¥Ï¡¼¥É¥¦¥§¥¢ RAID ¤ò»È¤Ã¤Æ¤¤¤ë¤Ê¤é¡¢¤³¤Î¥»¥¯¥·¥ç¥ó¤ò
+ÆɤàɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
+
+LVM¡¢¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ä¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¤·¤Ð¤·¤ÐƱ»þ¤Ë»ÈÍѤµ¤ì¤Þ¤¹¤¬¡¢¤½¤ì¤é
+¤ÏÁ´¤ÆÆÈΩ¤Ë»È¤ï¤ìÆÀ¤Þ¤¹:
+ * LVM ¤È¥½¥Õ¥È¥¦¥§¥¢ RAID ¤Ï¤·¤Ð¤·¤Ð¡¢À¸¤Î¥Ï¡¼¥É¡¦¥Ç¥£¥¹¥¯¤Ç¤Ï¤Ê¤¯¡¢¥Ñ¡¼
+¥Æ¥£¥·¥ç¥ó¤«¤éÀ®¤êΩ¤Á¤Þ¤¹¡£
+ * !!! ľ¤·¤Æ¤¯¤ì (Ãí: LVM ¾å¤Ç»È¤ï¤ì¤¿ RAID ¤Ï¤Þ¤À Linux ¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤Æ
+¤¤¤Ê¤¤ (?))
+
+GNU Parted ¤Ï LVM ¤ä¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ò´°Á´¤Ë¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Þ¤»¤ó¤¬¡¢¤½¤ì
+¤é¤Î¸Ä¡¹¤Î¥Ä¡¼¥ë¤ÈÁȤ߹ç¤ï¤»¤Æ»È¤¦¤È¤­¡¢¤½¤ì¤Ç¤â¤Ê¤ªÍ­ÍѤǤ¹¡£Parted ¤Ï°Ê²¼¤Î
+ºî¶È¤ËÌò¤ËΩ¤Á¤Þ¤¹:
+ * ¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ä LVM ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎºîÀ®
+ * ÏÀÍý¥Ü¥ê¥å¡¼¥à (¤¢¤ë¤¤¤Ï¡¢¡Ö²¾Áۥѡ¼¥Æ¥£¥·¥ç¥ó¡×) ¾å¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à
+¤ÎºîÀ®¡¢Â礭¤µÊѹ¹¤ä¥³¥Ô¡¼
+
+
+7.1 RAID ¤ä LVM ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ÎºîÀ®
+-------------------------------------------------------------------------------
+
+RAID ¤ä LVM ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤¹¤ë¤¿¤á¤Ë¡¢°Ê²¼¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó:
+(1) mkpart ¥³¥Þ¥ó¥É¤Ç¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òºîÀ®¤·¤Þ¤¹¡£
+(2) ¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¾å¤Î LVM ¤ä RAID ¥Õ¥é¥°¤òΩ¤Æ¤Þ¤¹¡£
+
+Î㤨¤Ð:
+
+ (parted) mkpart primary ext2 0 4000
+ (parted) set 1 lvm on
+
+Ãí: ¤½¤Î LVM ¤ä RAID ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¤Þ¤À»ÈÍѽàÈ÷¤¬À°¤Ã¤Æ¤¤¤Ê¤¤¤Ç¤·¤ç¤¦¡£
+¤½¤ì¤Ç¤â¤ä¤Ï¤ê¡¢RAID ¤ËÂФ·¤Æ¤Ï mkraid(8) ¤ò¼Â¹Ô¤·¤¿¤ê¡¢ÊªÍý¥Ü¥ê¥å¡¼¥à¤ò½é´ü
+²½¤·¤¿¤ê¡¢ÏÀÍý¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤Ê¤É¤Î¤¿¤á¤Ë¡¢LVM ¥Ä¡¼¥ë¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
+
+
+7.2 ¥½¥Õ¥È¥¦¥§¥¢ RAID ¤ä LVM ÏÀÍý¥Ü¥ê¥å¡¼¥à¾å¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥àÁàºî
+-------------------------------------------------------------------------------
+
+Parted ¤Ï RAID ¤ä LVM ¤òÍý²ò¤·¤Þ¤»¤ó¤¬¡¢RAID ¤ä LVM ÏÀÍý¥Ü¥ê¥å¡¼¥à¤òÁàºî¤¹¤ë
+¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤ì¤Ï Linux ¤Î RAID ¤ä LVM ¤Î¥µ¥Ý¡¼¥È¤òÍøÍѤ·¤Þ¤¹¡£¤½¤ì¤æ¤¨¡¢
+¤¢¤Ê¤¿¤Î Linux ¥«¡¼¥Í¥ë¤¬ RAID ¤ä LVM ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¸Â¤ê¡¢¤³¤ì¤é¤Î
+ÊýË¡¤ò»È¤¨¤Þ¤¹¡£
+
+RAID ¤ä LVM ÏÀÍý¥Ü¥ê¥å¡¼¥à (¤¢¤ë¤¤¤Ï¡¢¤½¤ì¤¬½ÅÍפʤ顢À¸¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¾å
+¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òÁàºî¤¹¤ë¤¿¤á¤Ë¡¢ÏÀÍý¥Ü¥ê¥å¡¼¥à (¥Ñ¡¼¥Æ¥£¥·¥ç¥ó) ¥Ç¥Ð¥¤
+¥¹¤òÁª¤Ö¤³¤È¤Ë¤è¤Ã¤Æ¡¢parted ¤ò³«»Ï¤Ç¤­¤Þ¤¹¡£Î㤨¤Ð:
+
+ # parted /dev/md0
+
+¤³¤Î¾Ï¤Î»Ä¤ê¤Ç¤Ï¡¢¡Ö²¾ÁۥǥХ¤¥¹¡×¤Ï Parted ¤¬ÊÔ½¸¤·¤Æ¤¤¤ë¥Ç¥Ð¥¤¥¹¤ò»Ø¤¹¤Ç
+¤·¤ç¤¦ (¤¹¤°¾å¤ÎÎã¤Ç¤Ï: /dev/md0)¡£
+
+
+7.2.1 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎºîÀ®
+------------------------------
+(1) loop ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤òºîÀ®¤·¤Þ¤¹¡£¤³¤ì¤Ïµ¶¤Î¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Ç¡¢
+Parted ¤Ë²¾ÁۥǥХ¤¥¹¤òñ°ì¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤È¤·¤Æ°·¤¦¤è¤¦¤Ë¶µ¤¨¤Þ¤¹¡£
+¤³¤Îµ¶¤Î¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤Ç¤Ï¡¢¥¼¥í¡¢¤Þ¤¿¤Ï¡¢°ì¤Ä¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤¬¤¢¤ê¤Þ¤¹¡£
+
+ (parted) mklabel loop
+
+(2) Parted ¤Î mkpartfs ¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢¤½¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òºîÀ®¤·¤Þ¤¹¡£
+¤½¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î³«»ÏÅÀ¤ò¥¼¥í¤Ë¤¹¤ë¤Ù¤­¤Ç¤¹¡£¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï²¾ÁÛ
+¥Ç¥Ð¥¤¥¹Æâ¤Î¤É¤³¤Ç½ª¤ï¤Ã¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£²¾ÁۥǥХ¤¥¹¤ÎÂ礭¤µ¤Ï print ¥³¥Þ
+¥ó¥É¤Ç¸«½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£Îã:
+
+ (parted) print
+ Disk geometry for /dev/md0: 0.000-47.065 megabytes
+ Disk label type: loop
+ Minor Start End Filesystem Flags
+ (parted) mkpartfs primary ext2 0 47.065
+ (parted) print
+ Disk geometry for /dev/md0: 0.000-47.065 megabytes
+ Disk label type: loop
+ Minor Start End Filesystem Flags
+ 1 0.000 47.065 ext2
+
+7.2.2 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎÂ礭¤µÊѹ¹
+------------------------------
+Ä̾²¾ÁۥǥХ¤¥¹¤ÎÂ礭¤µ¤òÊѹ¹¤¹¤ë¤Î¤ÈƱ¤¸»þ¤Ë¡¢¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎÂ礭¤µ
+¤òÊѹ¹¤·¤Þ¤¹¡£¤â¤·¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤È²¾ÁۥǥХ¤¥¹¤ÎÂ礭¤µ¤òÁýÂ礵¤»¤Æ¤¤¤ë
+¤Ê¤é¡¢¤Þ¤º¤½¤Î¥Ç¥Ð¥¤¥¹¤ò (RAID ¤ä LVM ¥Ä¡¼¥ë¤Ç) ÁýÂ礵¤»¤ë¤Ù¤­¤Ç¡¢¤½¤·¤Æ¤½¤Î
+¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òÁýÂ礵¤»¤Þ¤¹¡£¤â¤·¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤È²¾ÁۥǥХ¤¥¹¤ò½Ì¾®
+¤·¤Æ¤¤¤ë¤Ê¤é¡¢¤Þ¤º¤½¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ò½Ì¾®¤µ¤»¡¢¤½¤·¤Æ¡¢¤½¤Î²¾ÁۥǥХ¤¥¹
+¤ò¸å¤Ç¹Ô¤¦¤Ù¤­¤Ç¤¹¡£
+
+Parted ¤Ç¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤ÎÂ礭¤µ¤òÊѹ¹¤¹¤ë¤¿¤á¤Ë¡¢resize ¥³¥Þ¥ó¥É¤ò»È¤¤
+¤Þ¤¹¡£Î㤨¤Ð:
+
+ (parted) select /dev/md0
+ (parted) resize 1 0 20
+
+7.2.3 ²¾ÁۥǥХ¤¥¹¤«¤é¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ø¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¥³¥Ô¡¼
+------------------------------------------------------------------
+ñ¤Ë cp ¥³¥Þ¥ó¥É¤ò»È¤¤¤Þ¤¹¡£Î㤨¤Ð:
+
+ (parted) select /dev/hda
+ (parted) cp /dev/md0 1 3
+
+7.2.4 ¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤«¤é²¾ÁۥǥХ¤¥¹¤Ø¤Î¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤Î¥³¥Ô¡¼
+-------------------------------------------------
+(1) ²¾ÁۥǥХ¤¥¹¾å¤Ë loop ¥Ç¥£¥¹¥¯¡¦¥é¥Ù¥ë¤òºîÀ®¤·¤Þ¤¹¡£Î㤨¤Ð:
+
+ (parted) select /dev/md0
+ (parted) mklabel loop
+
+(2) mkpartfs ¥³¥Þ¥ó¥É¤ò»È¤Ã¤Æ¡¢²¾ÁۥǥХ¤¥¹¾å¤Ë¥Õ¥¡¥¤¥ë¡¦¥·¥¹¥Æ¥à¤òºîÀ®¤·¤Þ¤¹¡£
+Î㤨¤Ð:
+
+ (parted) mkpartfs primary ext2 0 47.065
+
+(3) cp ¥³¥Þ¥ó¥É¤Ç¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¥³¥Ô¡¼¤·¤Þ¤¹:
+
+ (parted) select /dev/hda
+ (parted) cp /dev/md0 3 1
+
+
+------------------------------------------------------------------------------
+8 ¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¥ó¥°
+------------------------------------------------------------------------------
+
+¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¥ó¥°¤ÏÂà¶þ¤Ê Windows ¤Î¥¤¥ó¥¹¥È¡¼¥ëºî¶È¤ò²óÈò¤¹¤ë¤¿¤á¤Î
+¼êË¡¤Ç¤¹¡£Î㤨¤Ð¡¢¤â¤· Windows ¤È Office ¤ò 1000 ¥Þ¥·¥ó¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¤¤
+¤Ê¤é¡¢Â¿Ê¬ 1000 »þ´Ö¤ÎÌó 5 Çܤ°¤é¤¤¤«¤«¤ë¤Ç¤·¤ç¤¦¡£GNU/Linux ¤À¤È¡¢Red Hat
+¤Î kickstart ¤Î¤è¤¦¤Ê¥×¥í¥°¥é¥à¤¬¤¢¤ë¤Î¤Ç¡¢¤½¤ó¤Ê¤Ë¤Ò¤É¤¯¤Ï¤¢¤ê¤Þ¤»¤ó¡£
+¤½¤Î¥×¥í¥°¥é¥à¤Ï¾¤Î¥×¥í¥°¥é¥à¤Î¥¤¥ó¥¹¥È¡¼¥ë¤ä¡¢¼ÂºÝŪ¤Ë¤Ï¡¢¤¢¤Ê¤¿¤¬¤ä¤ë
+ɬÍפΤ¢¤ë¤³¤È¤ò²¿¤Ç¤â¼«Æ°²½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢¥Ç¥£¥¹¥¯¡¦
+¥¤¥á¡¼¥¸¥ó¥°¤ÏËÜÅö¤Ë Windows ¥Þ¥·¥ó¤À¤±¤Î¤¿¤á¤Ë»È¤ï¤ì¤Æ¤¤¤Þ¤¹¡£ÌÀ¤é¤«¤Ë¡¢
+²æ¡¹¤Ï Windows (¤ä¡¢¤¤¤«¤Ê¤ë¼«Í³¤Ç¤Ê¤¤¥½¥Õ¥È¥¦¥§¥¢) ¤òÁ´¤¯»È¤ï¤Ê¤¤¤è¤¦¤Ë
+´«¤á¤Æ¤¤¤Þ¤¹¤¬¡¢¤Û¤È¤ó¤É¤ÎÁÈ¿¥¤Ç¤Ï¡¢Î¾Êý¤Î¥·¥¹¥Æ¥à¤¬ÍøÍѤǤ­¤ë¾õÂ֤ˤ¢¤ë
+°Ü¹Ô´ü¤ò·Ð¤ë¤³¤È¤Ê¤¯¡¢Windows ¤«¤é GNU/Linux (¤ä¾¤Î¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢)
+¤ËÀڤ괹¤¨¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¤³¤È¤òÍý²ò¤·¤Æ¤¤¤Þ¤¹¡£
+
+¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¥ó¥°¤ò»È¤¨¤Ð¡¢¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤È CD ¤òÁÞ¤·¹þ¤ß¡¢¤½¤ì¤ò
+Èô¤Ð¤¹¤³¤È¤Ë¤è¤Ã¤Æ¡¢Windows ¤È Office ¤ò´Þ¤à¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Î¥Ç¥£¥¹¥¯¡¦¥¤
+¥á¡¼¥¸¤ò CD ¤Ë¾Æ¤­¡¢¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤òľÀÜÁ´¤Æ¤Î¥³¥ó¥Ô¥å¡¼¥¿¤Î¥Ï¡¼¥É¡¦
+¥Ç¥£¥¹¥¯¤Ë¥³¥Ô¡¼¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤·¤«¤· Windows ¤Î¥Ç¥£¥¹¥¯¾å¤Î¥Ñ¡¼¥Æ¥£
+¥·¥ç¥ó¤Ï¤ª¤½¤é¤¯¤â¤Ã¤ÈÂ礭¤¯¤Ê¤ë¤Ç¤·¤ç¤¦¤«¤é¡¢¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤Ï¤Þ¤¿Âç
+¤­¤µ¤òÊѹ¹¤µ¤ì¤Í¤Ð¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¡£»ä¤Ï²¿¿Í¤â¤Î¿Í¡¹¤¬¤³¤Î½èÃÖ¤ò Linux ¤Î
+¥Ö¡¼¥È¡¦¥Õ¥í¥Ã¥Ô¥£¤È Parted ¤ò»È¤Ã¤Æ¤¦¤Þ¤¯¼«Æ°²½¤·¤¿¤Èʹ¤¤¤Æ¤¤¤Þ¤¹¡£¤½¤Î
+¥Õ¥í¥Ã¥Ô¥£¤ò CD ¾å¤Î¥Ö¡¼¥È¡¦¥¤¥á¡¼¥¸¤È¤·¤ÆÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢CDROM ¤À
+¤±¤ò»È¤¦¤³¤È¤â²Äǽ¤Ç¤¹¡£¤è¤ê¿¤¯¤Î¾ðÊó¤òÃΤ뤿¤á¤Ë CD writing HOWTO ¤òÆɤó
+¤Ç¤¯¤À¤µ¤¤¡£¤³¤¦¤·¤¿¤³¤ÈÁ´ÂΤòƯ¤«¤»¤ë¤¿¤á¤Ë¤ä¤é¤Ê¤¤¤È¤¤¤±¤Ê¤¤ÉԲĻ׵ĤÊ
+¤³¤È¤¬¾¯¤·¤¢¤ê¤Þ¤¹ (¤½¤ì¤é¤Ï¼¡¤Î°ÂÄê·ÏÎó¤Çľ¤µ¤ì¤ë¤Ç¤·¤ç¤¦)¡£¤¤¤º¤ì¤Ë¤»¤è¡¢
+°Ê²¼¤¬°ìÈÌŪ¤ÊÊýË¡¤Ç¤¹:
+
+(1) ˾¤ß¤ÎÀßÄê¤Ç¡¢¤¢¤ë¥Þ¥·¥ó¤Ë Windows ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£640 Mb °Ê¾å
+»È¤ï¤º¡¢´°Á´¤Ê Linux ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤È CD ¤Î¥¤¥á¡¼¥¸Æó¤Äʬ¤Î¥³¥Ô¡¼ÍѤÎ
+1300 Mb ¤Î¤¿¤á¤Ë½½Ê¬¤Ê;ÃϤò»Ä¤¹¸Â¤ê¡¢¤½¤Î¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¹¥¤­¤Ê¤À¤±Â礭¤¯
+¤·¤Æ¹½¤¤¤Þ¤»¤ó¡£
+
+(2) ¤½¤Î¥Þ¥·¥ó¤Ë Linux ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
+
+(3) ¤½¤Î CD ¤Î¥¤¥á¡¼¥¸¤Î¤¿¤á¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºî¤ê¤Þ¤¹ (Îã: /root/cdimage/)¡£
+
+(4) ¤½¤Î CD ¤Î¥¤¥á¡¼¥¸¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë 640 Mb ¤Î¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¤Î¥Õ¥¡¥¤¥ë
+(Îã: /root/cdimage/diskimage) ¤òºîÀ®¤·¤Þ¤¹:
+
+ # dd if=/dev/zero of=/root/cdimage/diskimage bs=1M count=640
+
+(5) Windows ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¥Ç¥£¥¹¥¯¡¦¥¤¥á¡¼¥¸¤Ø¥³¥Ô¡¼¤¹¤ë¤¿¤á¡¢Parted ¤ò
+ÍøÍѤ·¤Þ¤¹:
+
+ # parted /root/cdimage/diskimage mklabel msdos mkpart primary fat 0 639
+ # parted /root/cdimage/diskimage cp /dev/hda 1 1
+
+(6) ¤½¤Î CD ¤Î¥¤¥á¡¼¥¸¤Î¥Ç¥£¥ì¥¯¥È¥ê¤«¤é CD ¥¤¥á¡¼¥¸¤òºîÀ®¤·¡¢¤½¤ì¤ò¤¢¤Ê¤¿
+¹¥¤ß¤Î CD ½ñ¤­¹þ¤ß¥Ä¡¼¥ë¤Ç CD ¤Ë¾Æ¤­¤Þ¤¹¡£
+
+(7) Êì¹ñ¸ì¥µ¥Ý¡¼¥È¤È readline ¥µ¥Ý¡¼¥È¤ò̵¸ú¤Ë¤·¤¿¡¢Parted ¤ÎÆÃÊ̤ʥС¼¥¸¥ç¥ó
+¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Þ¤¹ (¤¢¤ë¤¤¤Ï¡¢Freshmeat ¤«¤éÆÃÊÌ¤Ê RPM ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹):
+
+ localhost:~/parted-1.0.0# ./configure --disable-nls
+ --without-readline --disable-shared; make
+
+(8) Linux ¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯¤òºîÀ®¤·¤Þ¤¹ (Bootdisk HOWTO ¤ò»²¾È)¡£
+
+(9) ¤½¤Î¥Ö¡¼¥È¡¦¥Ç¥£¥¹¥¯ (¤«Êä½¼¤Î¥ë¡¼¥È¡¦¥Ç¥£¥¹¥¯) ¤Ë¾ÊάÈǤΠParted ¤ò
+ÃÖ¤­¤Þ¤¹¡£
+
+(10) °Ê²¼¤ò¹Ô¤¦¥·¥§¥ë¡¦¥¹¥¯¥ê¥×¥È¤ò½ñ¤­¤Þ¤¹:
+
+ mount /dev/cdrom /mnt/cdrom
+ parted --script /dev/hda mklabel msdos mkpartfs primary fat 0 SOME-SIZE
+ parted --script /dev/hda cp /mnt/cdrom/diskimage 1 1
+ parted --script /dev/hda set 1 boot on
+ /sbin/halt
+
+(11) ¥¤¥ó¥¹¥È¡¼¥ë³«»Ï¡ª ¤½¤Î¥Õ¥í¥Ã¥Ô¥£¤È CD ¤ò³Æ¥³¥ó¥Ô¥å¡¼¥¿¤ËÁÞ¤·¹þ¤ß¡¢
+¤½¤ì¤ò²ó¤·¤Æ¤¤¤­¤Þ¤¹...
+
+ÌÀ¤é¤«¤Ë¡¢»ä¤Ï¤³¤ÎÊýË¡¤ò¤º¤Ã¤È´Êñ¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤·¡¢¤½¤¦¤¹¤ë¤Ç¤·¤ç¤¦¡£
+²æ¡¹¤Ï¤³¤ì¤ò¹Ô¤¦¤Î¤Ë¾®·¿¤Î¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤òºî¤í¤¦¤È¹Í¤¨¤Æ¤¤¤ë¤È¤³¤í
+¤Ç¤¹¡£»ä¤Ë¤Ï¤½¤¦¤¤¤¦¤â¤Î¤ò´ÉÍý¤¹¤ë»þ´Ö¤¬¤¢¤ê¤Þ¤»¤ó¡¢Í­»Ö¤Ï¤¤¤Þ¤»¤ó¤«¡©
+
+
+------------------------------------------------------------------------------
+9 ¤µ¤é¤Ê¤ë¾ðÊó¤È´ØÏ¢¥½¥Õ¥È¥¦¥§¥¢
+------------------------------------------------------------------------------
+
+¤â¤·¤â¤Ã¤È¤¿¤¯¤µ¤ó¤Î¾ðÊó¤òȯ¸«¤·¤¿¤é¡¢µ¤·Ú¤Ë parted@gnu.org ¤Ë¼ÁÌä¤òÁ÷¤Ã¤Æ
+¤¯¤À¤µ¤¤¡£(!) ¤Ï¤ª¤½¤é¤¯¤¢¤Ê¤¿¤Î¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë¾ðÊó¤«
+¥½¥Õ¥È¥¦¥§¥¢¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£
+
+GNU Parted ÇÛÉÛʪÃæ¤Î¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤Ï¤µ¤é¤Ê¤ë¾ðÊó¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹:
+ * ABOUT-NLS - Êì¹ñ¸ì¥µ¥Ý¡¼¥È¤Î»ÈÍÑ¤È Free Translation Project ¤Ë¤Ä¤¤¤Æ¤Î
+¾ðÊó
+ * API - libparted ¤Î API ¤Î²òÀâ
+ * AUTHORS - 郎²¿¤ò½ñ¤¤¤¿¤«
+ * BUGS - ̤²ò·è¤Î¥Ð¥°
+ * ChangeLog - GNU Parted ¤Ë¤Ê¤µ¤ì¤¿Êѹ¹¤ÎÍúÎò
+ * COPYING - GNU Parted ¤ÎÇÛÉÛ¾ò·ï¤Ç¤¢¤ë¡¢GNU General Public License
+ * COPYING.DOC - Parted ¤Î²òÀâ½ñ¤¬ÇÛÉÛ¤µ¤ì¤Æ¤è¤¤¾ò·ï¤Ç¤¢¤ë¡¢GNU Free
+Documentation Licence
+ * FAT - FAT ¤ÎÂ礭¤µÊѹ¹¥×¥í¥°¥é¥à¤ÎÆ°ºî¤Î»ÅÁȤ˴ؤ¹¤ë¾ðÊó (¥×¥í¥°¥é¥ÞÍÑ)
+ * INSTALL - GNU Parted ¤ä ¾¤Î¤Û¤È¤ó¤É¤Î¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Î¥³¥ó¥Ñ¥¤¥ëÊýË¡
+ * TODO - ¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡¢·×²èÃæ¤ÎÆÃħ
+
+°Ê²¼¤Î²òÀâ½ñ¤Ï GNU Parted ¤È¤Ï°ì½ï¤ËÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤¬¡¢Ìò¤ËΩ¤Ä¤«¤â
+¤·¤ì¤Þ¤»¤ó¡£¤³¤ì¤é¤Î¤¦¤Á¡¢¤Û¤È¤ó¤É¤Ï¿ʬ¤¢¤Ê¤¿¤Î¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó¤Ë
+Æþ¤Ã¤Æ¤¤¤ë¤Ç¤·¤ç¤¦¡£Î㤨¤Ð¡¢Red Hat Linux ¤Ç¤Ï¡¢CD ¾å¤Î /doc/HOWTO ¤È
+/doc/FAQ ¤ò¸«¤Æ¤¯¤À¤µ¤¤¡£
+
+[ÌõÃí: ¿¤¯¤Î LDP ¥É¥­¥å¥á¥ó¥È¤ÏÍ­»Ö¤Î¼ê¤Ë¤è¤êÆüËܸì¤ËËÝÌõ¤µ¤ì¤Æ¤ª¤ê¡¢JF
+¤Î¥Ú¡¼¥¸¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹:
+ http://jf.linux.or.jp/
+°Ê²¼¤Ç¤Ï¥ª¥ê¥¸¥Ê¥ë¤ÎURL¤Î¤Þ¤Þ¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£]
+
+ * Filesystems HOWTO http://penguin.cz/~mhi/fs/
+ * Hard Disk Upgrade mini-HOWTO (!): http://sunsite.unc.edu/LDP/HOWTO
+ * Large Disk HOWTO http://www.win.tue.nl/~aeb/linux/Large-Disk.html
+ * LILO mini-HOWTO (!) http://sunsite.unc.edu/LDP/HOWTO
+ * MILO HOWTO (!) http://sunsite.unc.edu/LDP/HOWTO
+ * Linux+OS mini-HOWTOs (!): Linux+DOS+Win95+OS2, Linux+FreeBSD-mini-HOWTO,
+Linux+Win95, Linux+FreeBSD, Linux+NT-Loader. ¤³¤ì¤é¤Ï°Ê²¼¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹:
+ http://sunsite.unc.edu/LDP/HOWTO
+ * Partition mini-HOWTO (!):
+ http://www.linuxdoc.org/HOWTO/mini/Partition/index.html
+ * Partition Table HOWTO
+ http://www.win.tue.nl/~aeb/partitions/partition_tables.html
+ * Partition Types list
+ http://www.win.tue.nl/~aeb/partitions/partition_types.html
+ * Software RAID HOWTO
+ http://linas.org/linux/Software-RAID/Software-RAID.html
+
+¤³¤³¤Ç¾¤Î´ØÏ¢¤·¤¿¥×¥í¥°¥é¥à¤òµó¤²¤Þ¤¹¡£¤³¤ì¤é¤Î°ìÉô¤âÍ­ÍѤʲòÀâ¤ò»ý¤Ã¤Æ
+¤¤¤Þ¤¹:
+ * Disk Drake. www.linux-mandrake.com/diskdrake. ¤³¤ì¤Ï Parted ¤Èµ¡Ç½Åª¤Ë
+Îà»÷¤·¤Æ¤¤¤Þ¤¹¡£Disk Drake ¤Î FAT ¥³¡¼¥É¤Ï²æ¡¹¤Î Parted ¤Î¥³¡¼¥É¤ò´ð¤Ë¤·¤Æ¤¤
+¤Þ¤¹¡£¤µ¤¢¡¢Disk Drake ¤¬¤É¤Î¤è¤¦¤Ë Parted ¤ËɤŨ¤¹¤ë¤«¸«¤Æ¤ß¤Þ¤·¤ç¤¦: (²æ¡¹
+ξ¼Ô¤¬Æ±°Õ¤·¤Æ¤¤¤Þ¤¹ :-) Disk Drake ¤Ï:
+
+ - »È¤¦¤Î¤¬¤â¤Ã¤È´Êñ¤Ç¡¢´Ö°ã¤¤¤òÈȤµ¤Ê¤¤¤è¤¦¤Ë¼é¤Ã¤Æ¤¯¤ì¤Þ¤¹
+ - ¤â¤Ã¤È´°À®Å٤ι⤤ÌäÂê²ò·è¼êË¡ (/etc/fstab¡¢lilo ¤Ê¤É¤ò½èÍý¤·¤Þ¤¹)
+ - FAT ¤Î¥µ¥Ý¡¼¥È¤Ï¤â¤Ã¤ÈÉϼå (FAT16¡¢FAT32 ´Ö¤ÇÊÑ´¹¤Ç¤­¤Ê¤¤¤·¡¢
+ ¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¤ò¥³¥Ô¡¼¤Ç¤­¤Þ¤»¤ó)
+ - ext2 ¤Î¥µ¥Ý¡¼¥È¤Ï¤â¤Ã¤ÈÉϼå (º£¤Î¤È¤³¤í¤Ï)
+ - (µìÍè¤Î) DOS ¤ä Windows ¥·¥¹¥Æ¥à¤È¤Î¸ß´¹À­¤ò¤¢¤ó¤Þ¤ê¹Íθ¤·¤Æ¤Þ¤»¤ó
+ - Èó PC ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¤Ï¥µ¥Ý¡¼¥È¤Ê¤·
+
+ * dosfsck
+ * e2fsck, resize2fs e2fsprogs (!)
+ http://web.mit.edu/tytso/www/linux/e2fsprogs.html
+ * ext2resize - Parted ¤ÈƱ¤¸¥³¡¼¥É¤ò»È¤¤¤Þ¤¹¤¬¡¢¥¢¥ó¥Þ¥¦¥ó¥È¤òɬÍפȤ·¤Ê¤¤¡¢
+online ext2 resizer ¤Î¤è¤¦¤Ê¡¢Â¾¤Î¤¤¤¤¤â¤Î¤ò¤¤¤¯¤Ä¤«´Þ¤ó¤Ç¤¤¤Þ¤¹¡£
+ http://ext2resize.sourceforge.net
+ * fdisk (!)
+ * FIPS (!) (First Interactive Partition Splitter)
+ http://www.igd.fhg.de/~aschaefe/fips/
+ * GPart - ²õ¤ì¤¿¥Ñ¡¼¥Æ¥£¥·¥ç¥ó¡¦¥Æ¡¼¥Ö¥ë¤ò²óÉü¤µ¤»¤Þ¤¹¡£
+ http://www.stud.uni-hannover.de/user/76201/gpart
+ * GNU GRUB - GRand Unified Bootloader
+ http://www.gnu.org/software/grub/grub.html
+ * LILO (!) (LInux LOader) ftp://tsx-11.mit.edu/pub/linux/packages/lilo/
+ * LVM http://linux.msede.com/lvm
+ * mkdosfs (!) (¤È¤­¤É¤­ mkfs.msdos ¤È¸Æ¤Ð¤ì¤Þ¤¹)
+ * mke2fs (!) (¤È¤­¤É¤­ mkfs.ext2 ¤È¸Æ¤Ð¤ì¤Þ¤¹)
+ * mkfs (!)
+ * mkswap (!)
+ * quik (!)
+ * reiserfs: Ãí: reiserfs ¤ÎÂ礭¤µÊѹ¹¥Ä¡¼¥ë¤ÏÄ̾ï¤Î reiserfs ÇÛÉÛʪ¤Ë´Þ¤Þ
+¤ì¤Æ¤¤¤Þ¤¹¡£
+ http://devlinux.com/projects/reiserfs
+ * yaboot (!) http://ppclinux.apple.com/~benh/
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..eaf3da0
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,505 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{https://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification. Examples
+of transparent image formats include PNG, XCF and
+JPG@. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{https://www.gnu.org/licenses/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.''@: line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
diff --git a/doc/parted-pt_BR.texi b/doc/parted-pt_BR.texi
new file mode 100644
index 0000000..2fdeb55
--- /dev/null
+++ b/doc/parted-pt_BR.texi
@@ -0,0 +1,2901 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename parted-pt_BR.info
+@settitle Manual do Usuário do Parted
+@c %**end of header
+
+@c RMK: for definitions and discussion of my methods, skip to the end
+@c of the file, after the "bye" directive.
+
+@include version.texi
+
+@paragraphindent 4
+
+@direntry
+* parted: (parted). software de particionamento GNU
+@c RMK: the following doesn't work. 'info --usage' is improperly documented.
+@c * Chamando o parted: (parted)Chamando o Parted. Opções de linha de comando e comandos
+@end direntry
+
+@c RMK: texi: an info section describing the file is texinfo custom.
+@ifinfo
+This file documents the use of GNU Parted, a program for creating,
+resising, checking and copy partitions, and file systems on them.
+
+Copyright 1999--2002, 2009--2014, 2019--2023 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+no Invariant Sections, with the no Front-Cover Texts, and with no
+Back-Cover Texts. A copy of the license is included in the section
+entitled ``GNU Free Documentation License''.
+
+@end ifinfo
+
+@c RMK: texi : the titlepage section is texinfo custom.
+@titlepage
+@title Manual do GNU Parted
+@subtitle GNU Parted, versão @value{VERSION}, @value{UPDATED}
+@author Andrew Clausen @email{clausen@@gnu.org}
+@c FDL: Following section 4.B of the GNU Free Documentation License,
+@c I am required to list myself as an author of this work.
+@author Richard M. Kreuter @email{kreuter@@anduril.rutgers.edu}
+@author Bernardo João Torres da Silveira (Tradução Portuguesa) @email{bernardojts@@ig.com.br}
+
+@page
+@vskip 0pt plus 1filll
+
+Copyright 1999--2002, 2009--2014, 2019--2023 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end titlepage
+
+@ifnottex
+@node Top
+@top TITLE
+
+@c RMK: added Top node describing this manual Should it be more verbose?
+This document describes the use of GNU Parted, a program for creating,
+destroying, resizing, checking and copying hard drive partitions, and
+the file systems on them.
+
+This document applies to @value{VERSION} of GNU Parted. Its content is
+substantially similar to the user's manual included in the source
+distribution of GNU Parted @value{VERSION}. That file was written by
+Andrew Clausen.
+@end ifnottex
+
+@c if we don't get menus (eg: HTML), use contents instead
+@shortcontents
+
+@menu
+* Instrodução:: Overview
+* Usando o Parted:: Particionando um Disco Rígido
+* BIOSes e Firmwares:: Entre ligar e carregar
+* Carregadores de Boot:: Como o sistema operacional inicia
+* Sistemas Operacionais:: Sistemas Operacionais e sistemas de arquivo
+* Sistemas de Arquivo:: Sistemas de arquivo suportados, e seus truques
+* LVM e RAID:: Volumes virtuais de disco
+* Espelhamento de Disco:: Clonando instalações
+* Software Relacionado:: Leitura posterior em tópicos relacionados
+* Copiando esse Manual:: Como fazer cópias desse manual
+* História:: A história desse manual
+@ifnotplaintext
+* Índice:: Índice de conceitos citados
+@end ifnotplaintext
+@end menu
+
+@node Introdução
+@chapter Introdução
+
+@menu
+* Overview:: GNU Parted e conhecimentos necessários
+* Software Necessário:: Dependências de software do GNU Parted
+* Plataformas Suportadas:: Aonde você pode usar o GNU Parted
+* Licença:: O que você pode e o que não pode com o GNU Parted
+* Compilando:: Como compilar o GNU Parted
+* Discos de boot do Parted:: Como usar o Parted em plataformas não suportadas
+@end menu
+
+@node Overview
+@section Overview do GNU Parted
+@cindex descrição do parted
+@cindex overview
+@cindex descrição do parted
+@cindex bugs, como relatar
+@cindex relatando bugs
+@cindex falando com os desenvolvedores
+
+O GNU Parted é um programa para criar, destruir, redimensionar,
+checar e copiar partições, e os sistemas de arquivos nelas.
+Ele é útil para criar espaço para novos sistemas operacionais,
+reorganizar o uso de disco, copiar dados entre discos rígidos, e
+``espelhamento de discos'' --- clonar instalações em muitos
+computadores.
+
+Esta documentação assume que você conhece partições e sistemas de
+arquivos. Se você pode querer aprender mais sobre eles, a Partition
+mini-HOWTO é leitura recomendada. Ela provavelmente vem com a sua
+distribuição, ou está disponível em
+
+@c FIXME: standards: howto labelled non-free by LDP
+@uref{http://www.linuxdoc.org/HOWTO/mini/Partition/index.html}
+
+O GNU Parted foi feito para minizar as chances de perdas de dados.
+Por exemplo, ele foi feito para evitar perda de dados durante
+interrupções (como falta de luz) e realiza muitas checagens de erro.
+Contudo podem existir bugs no Parted, então você deve fazer backup de
+arquivos importantes.
+
+A página do GNU Parted é @uref{www.gnu.org/software/parted}. Ele pode
+ser baixado em @uref{ftp.gnu.org/gnu/parted}.
+
+A lista de e-mails do Parted é @email{parted@@gnu.org}. Para se
+inscrever, escreve para @email{bug-parted-request@@gnu.org} com @samp{subscribe} no assunto. Informações para inscrição e os arquivos estão disponíveis em:
+
+@uref{http://mail.gnu.org/mailman/listinfo/bug-parted}
+
+Por favor mande relatos de bugs para @email{bug-parted@@gnu.org}.
+Quando enviar relatos de bugs, por favor inclua a versão do GNU Parted.
+Se o bug é relativo a tabelas de partição, então por favor inclua a
+saída desses comandos:
+
+@example
+@group
+# @kbd{fdisk /dev/hda -l}
+# @kbd{fdisk /dev/hda}
+Command (m for help): @kbd{p}
+Command (m for help): @kbd{x}
+Extended command (m for help): @kbd{p}
+@end group
+@end example
+
+Sinta-se à vontade para pedir ajuda nessa lista --- somente confira se
+a sua pergunta não foi respondida aqui ainda. Se você não entende a
+documentação, por favor nos diga, para que possamos explicar melhor.
+Nossa filosofia é: se você precisar pedir por ajuda, então algo precisa
+ser ajustado para que você (e outros) não precisem pedir por ajuda.
+
+Do mesmo modo, adoraríamos ouvir suas idéias :-)
+
+@node Software Necessário
+@section Software necessário para usar o Parted
+@cindex dependências de software
+@cindex software necessário
+@cindex libuuid
+@cindex e2fsprogs
+@cindex readline
+@cindex gettext
+
+O GNU Parted depende dos seguintes pacotes para compilar corretamente:
+
+@itemize @bullet
+
+@item libuuid, part of the e2fsprogs package. Se você não tem, você
+pode pegá-la em:
+
+ @uref{http://web.mit.edu/tytso/www/linux/e2fsprogs.html}
+
+Se você quer compilar o Parted e a e2fsprogs, note que você vai
+predcisar fazer @kbd{make install} and @kbd{make install-libs} e2fsprogs.
+
+@item GNU Readline (opcional), disponível em
+
+ @uref{ftp://ftp.gnu.org/gnu/readline}
+
+Se você está compilando o Parted, e você não tem readline, você
+pode desabilitar o suporte do Parted a readline com o a opção
+@kbd{--disable-readline} para o @command{configure}.
+
+@item GNU gettext (ou software compatível) para compilação, se
+você dese suporte a internacionalização.
+
+ @uref{ftp://ftp.gnu.org/gnu/gettext}
+
+@item libreiserfs, se vocÊ quiser suporte a reiserfs:
+
+ @uref{http://reiserfs.linux.kiev.ua}
+
+Preste atenção que o parted vai automaticamente detectar a libreiserfs
+quando rodar, e vai habilitar o suporte a reiserfs. A libreiserfs é
+nova e não foi muito testada ainda.
+
+@end itemize
+
+@node Plataformas Suportadas
+@section Platformas aonde o GNU Parted roda
+@cindex plataformas suportadas
+@cindex platformas, suportadas
+
+Esperamos que essa lista cresça bastante. Se você não tem uma dessas
+plataformas (Linux no momento!), então você precisar usar um disco de
+boot. @xref{Discos de boot do Parted, Usando os Discos de Boot do Parted}.
+
+@table @asis
+@item GNU/Linux
+Linux versões 2.0 para cima, no Alpha, PCs x86, PC98, Macintosh PowerPC, e Sun.
+
+@c RMK: veracidade: bem, *Eu* nunca ussei o parted num GNU/Hurd ... :)
+@item GNU/Hurd
+Suporte experimental.
+
+@end table
+
+A GNU libc 2.1 ou superior é necessária. Você provavelmente pode usar
+versões anteriores usando a opção @samp{--disable-nls}.
+@xref{Compilando o GNU Parted}. (Nota: Eu acho que nós já tiramos essa
+necessidade. Á fazer: checar se funciona na libc 2.0!)
+
+@node Licença
+@section Termos de distribuição para o GNU Parted
+@cindex termos da licença
+@cindex terms da distribuição
+@cindex gnu gpl
+@cindex gpl
+
+O GNU Parted é software livre, previsto pela GNU General Public
+Licese Version 3, ou (a seu critério) qualquer versão posterior.
+Ela deve vir com a distribuição do Parted, no arquivo COPYING.
+Se não, veja <http://www.gnu.org/licenses/>.
+
+Libparted é considerada parte do GNU Parted. Ela é prevista pela GNU
+General Public License. NÃO é lançada sobre a GNU Lesser General Public
+License (LGPL).
+
+@node Compilando
+@section Compilando o GNU Parted
+@cindex compilando o parted
+@cindex compilando o parted
+
+Se você quer compilar o GNU Parted, geralmente é feito com:
+
+@example
+@group
+$ @kbd{./configure}
+$ @kbd{make}
+@end group
+@end example
+
+Contudo há algumas opções para o @command{configure}:
+
+@table @code
+@item --without-readline
+desliga o uso de readline. Isso é útil para fazer discos de boot,
+etc., onde poucas bibliotecas estão disponíveis.
+
+@item --disable-debug
+não inclui símbolos para debugar
+
+@item --disable-dynamic-loading
+desabilita o carregamento dinâmico de algumas biblioteas (somente
+reiserfs no momento, apesar de haver pretensões de expansão). Carregamento
+dinâmico é útil porque ele permite você reusar as bibliotecas compartilhadas
+do libparted mesmo quando você não sabe se algumas bibliotecas vão estar
+disponíveis. Isso tem um pequeno aumento (principalmente ligando com a
+libdl), então pode ser útil desabilitar isso em discos de boot se você
+não precisa de flexibilidade.
+
+@item --disable-fs
+desabilita o suporte a todos os sistemas de arquivo
+
+@item --disable-nls
+desativa o suporte a língua nativa. Isso é útil par usar com versões
+antigas da glibc, ou uma versão reduzida da glibc boa para discos de
+boot.
+
+@item --disable-shared
+desabilita o uso de bibliotecas compartilhadas. Ela pode ser necessária
+para uso com versões antigas da GNU libc, se você receber um erro sobre
+algum ``registrador cuspido''. Também útil para discos de boot.
+
+@item --disable-Werror
+ignorar avisos na compilação
+
+@item --enable-all-static
+compila o executável do Parted como um binário completamente estático
+Isto é conveniente para discos de boot, porque você não precisa instalar
+qualquer bibliotecas no disco de boot (contudo, alguns programas podem
+precisar delas@dots{}) Nota: você também vai precisar rodar o strip(1).
+
+@item --enable-discover-only
+suporta somente leitura/checagem
+
+@item --enable-mtrace
+habilita debugar os malloc()'s
+
+@item --enable-read-only
+desabilita escrita (para debugar)
+
+@end table
+
+@node Discos de Boot do Parted
+@section Usando um Disco de Boot do Parted
+@cindex disco de boot
+@cindex disquete de boot
+@cindex plataformas não-suportadas
+
+Se você quer rodar o Parted numa máquina sem o GNU/Linux instalado, ou
+voê quer redimensionar uma partição raíz ou de boot, você vai precisar
+usar um disco de boot.
+
+Uma imagem para um disco de boot está disponível em:
+
+@uref{ftp://ftp.gnu.org/gnu/parted/bootdisk/partboot.img}
+
+@c RMK: printing: added some wording here to make the paragraph look
+@c acceptable in print
+Para criar os discos de boot, a imagem de disco deve ser escrita para
+um disquete de boot. No GNU/Linux, isso pode ser feito com
+
+@example
+# @kbd{dd if=partboot.img of=/dev/fd0 bs=1440k}
+@end example
+
+@noindent Ou use o RAWRITE.EXE dentro do DOS.
+
+Infelizmente, o disco de boot não dá suporte a vários tipos de hardware.
+Se o seu disco rígido não é suportado, então você vai precisar fazer o
+seu próprio disco de boot. Você pode copiar o binário do parted do disco
+de boot do parted para outro disco, ou tentar outros discos de boot, ou
+fazer o seu próprio. Você pode achar o mkparted útil, que é um script
+shell para fazer seus próprios discos de boot do parted. Ele está
+disponível em:
+
+@uref{ftp://ftp.tux.org/pub/people/kent-robotti/mkparted}
+
+Para copiar o parted do disco de boot para outro disco:
+
+@enumerate
+@item Fazer o Boot de um disco de boot do Parted.
+
+@item Insira outro disquete de boot formatado em ext2. Se ele não está
+formatado, você pode criar um sistema de arquivo com, por exemplo:
+
+@example
+$ @kbd{parted /dev/fd0 mklabel loop mkpartfs primary ext2 0 1.4}
+@end example
+
+@item Monte o disquete, ex:
+
+@example
+$ @kbd{mount -t ext2 /dev/fd0 /mnt/floppy}
+@end example
+
+@item Copie o @file{/sbin/parted} para o disquete, ex:
+
+@example
+$ @kbd{cp /sbin/parted /mnt/floppy}
+@end example
+
+@item Copie @file{/lib/*} para o disquete, ex:
+
+@example
+$ @kbd{cp /lib/* /mnt/floppy}
+@end example
+
+@item Desmonte o disquete, ex:
+
+@example
+$ @kbd{umount /mnt/floppy}
+@end example
+
+@item Ache um disquete de boot que @emph{realmente} suporte o seu
+disco rígidos. (Dica: try looking for rescue disks from various
+distributions on big mirror sites)
+
+@item Tire o seu disquete de boot. Monte o disquete aonde você copiou o Parted.
+
+@item Rode o Parted. Por exemplo,
+
+@example
+# @kbd{cd /mnt/floppy}
+# @kbd{LD_LIBRARY_PATH=. ./parted}
+@end example
+@end enumerate
+
+@node Usando o Parted
+@chapter Usando o Parted
+@cindex comandos
+
+@menu
+* Particionando:: Particionamento de disco no context
+* Rodando o Parted:: Particionamento com o Parted
+* Chamando o Parted:: Chamando o parted e suas opções
+* Explicação dos command:: Explicação completa dos comandos do parted
+* Exemplos:: Sessões de exemplo do Parted
+@end menu
+
+@node Particionando
+@section Conceitos de Particionamento
+@cindex overview do particionamento
+
+Infelizmente, particionar o disco é mais complicado. Isto é porque
+exisstem interações entre muitos sistemas operacionais diferentes
+que precisam ser levadas em conta:
+
+@itemize @bullet
+@item
+A BIOS ou firmware - o programa que é colocado numa ROm dentro do seu
+computador, que faz checagem de memória, etc. Você não pode (facilmente)
+mudar os programas nesse sistema. Exemplos de BIOS ou programas firmware:
+AmiBIOS, Award, Phoenix, OpenFirmware. Você somente vai ter um desses
+programas.
+
+@item
+O carregador de boot - o programa que permite você selecionar qual
+sistema operacional que você quer usar, e carrega aquele sistema
+operacional. Exemplos: LILO, GRUB, Yaboot, Quik. Você pode ter mais de
+um carregador de boot instalado, especialmente se você tem mais de um
+tipo de sistema operacional instalado.
+
+@item
+O sistema operacional (nesse momento, este deve ser o GNU/Linux) que
+rode Parted e outros sistemas operacionais que você use.
+
+@item
+Os tipos de sistemas de arquivo - a maneira como os dados devem ser
+guardados nas partições. Exemplos deles são: ext2, fat32, hfs, reiserfs.
+Você freqüentemente ter partições de sistemas de arquivo diferente.
+@end itemize
+
+O Parted suporta muitas combinações de BIOS, carregadores de boot,
+sistemas operacionais, e sistemas de arquivo, e vai suportar mais
+ainda no futuro. Para melhor entender as regras de cada, por favor
+veja @ref{BIOSes and Firmware}, @ref{Boot Loaders},
+@ref{Sistemas operacionais}, e @ref{Sistemas de arquivo}.
+
+Este capítulo descreve como usar o Parted, que é sempre o mesmo, não
+importa que sistemas que você está usando. Você deve ler esse capítulo,
+então cada um dos capítulos sobre BIOS's, carregadores de boot, sistemas
+operacionais, e sistemas de arquivo. Contudo, você só precisa ler as
+seções que são relevantes pra você. Por exemplo, se você só usa o LILO
+como carregador de boot, você só precisar ler a introdução e
+@ref{LILO, the section on LILO}.
+
+@node Rodando o Parted
+@section Usando o GNU Parted
+@cindex modos de uso
+
+O Parted tem dois modos: linha de comando e interativo. O Parted
+sempre deve começar com:
+
+@example
+# @kbd{parted @var{device}}
+@end example
+
+@noindent aonde @var{device} o dispositivo de disco rígido que você
+quer editar. (Se você é malandro, o Parted vai tentar adivinhar qual
+dispositivo você quer.)
+
+No modo de linha de comando, ele é seguido por um ou mais comandos.
+Por exemplo:
+
+@example
+# @kbd{parted /dev/sda resize 1 52 104 mkfs 2 fat16}
+@end example
+
+@noindent Opções (como @kbd{--help}) só podem ser especificadas na
+linha de comando.
+
+No modo interativo, os comandos são inseridos um de cada vez num prompt,
+e você modifica o disco imediatamente. Por exemplo:
+
+@example
+(parted) @kbd{resize 1 52.0005 104.5}
+(parted) @kbd{mkfs 2 fat16}
+@end example
+
+@c RMK MARK
+
+@noindent Abreviações não-ambíguas são permitidas. Por exemplo, você pode
+digitar ``p'' ao invés de ``print'', e ``re'' ao invés de ``resize''.
+Comandos podem ser digitados, tanto em inglês, ou em português. Isto
+pode criar ambiguidades.
+
+Também perceba que você pode specificar casas decimais nos números
+correspondentes (em megabytes). Números negativos são contados a partir
+do final do disco, com "-0" sendo o final do disco.
+
+Se você não der um paramêtro para um comando, o Parted vai perguntar para
+você. Por exemplo:
+
+@example
+(parted) @kbd{resize 1}
+Start? @kbd{0}
+End? @kbd{400}
+@end example
+
+O Parted sempre vai avisar você antes de fazer algo que é potencialmente
+perigoso, a não ser que algo seja algo obviamente perigoso (por exemplo:
+rm, mklabel, mkfs). Por exemplo, se você tenta diminuir ``muito'' uma
+partição (por exemplo, menos que o espaço disponível), o Parted vai
+automaticamente redimensionar para o mínimo que ele pode fazer sem perder
+dados. Se este mínimo é muito diferente do que você pediu, ele vai avisar
+que vai fazer uma coisa significantemente diferente do que você pediu.
+Por causa dos sistemas de particionamento terem restrições complicadas,
+o Parted geralmente vai fazer algo diferente do que você pediu (Por
+exemplo, criar um particionamento começando em 10.352, e não 10.4).
+
+@node Chamando o Parted
+@section Opções de Linha de Comando
+@cindex opções na chamada
+@cindex comandos, overview
+@cindex opções na chamada
+
+Quando chamado na linha de comando, o parted suporta a seguinte sintaxe:
+
+@example
+# @kbd{parted [@var{opção}] @var{dispositivo} [@var{comando} [@var{argumento}]]}
+@end example
+
+As seguintes opções e comandos estão disponíveis. Para explicações
+detalhadas do uso dos comandos do parted, veja @ref{Command explanations}.
+Opções começam com um hífen, e comandos não:
+
+Opções
+
+@table @samp
+@item -h
+@itemx --help
+mostra uma mensagem de ajuda
+
+@item -s
+@itemx --script
+nunca pede pela intervenção do usuário
+
+@item -v
+@itemx --version
+mostra a versão
+display the vesion
+@end table
+
+@node Explicação dos comandos
+@section Comandos de Sessão no Parted
+@cindex sintaxe dos comandos
+@cindex listagem detalhada dos comandos
+@cindex comandos, lista detalhada
+
+O GNU Parted nos dá os seguintes comandos:
+
+@menu
+* check::
+* cp::
+* help::
+* mklabel::
+* mkfs::
+* mkpart::
+* mkpartfs::
+* move::
+* name::
+* print::
+* quit::
+* rescue::
+* resize::
+* rm::
+* select::
+* set::
+@end menu
+
+@node check
+@subsection check
+@cindex check, descrição do comando
+@cindex descrição do comando, check
+
+@deffn Comando check @var{minor}
+
+Checa se o sistemas de arquivo na partição @var{minor}
+tem algum erro.
+
+Exemplo:
+
+@example
+(parted) @kbd{check 1}
+@end example
+
+Checa o sistema na partição 1.
+@end deffn
+
+@node cp
+@subsection cp
+@cindex cp, descrição do comando
+@cindex descrição do comando, cp
+
+@deffn Comando cp [@var{qual-dispositivo}] @var{from-minor} @var{to-minor}
+
+Copia o sistemas de arquivo na partição @var{from-minor} para a partição
+@var{to-minor}, apagando o conteúdo original da partição de destino.
+
+Um parâmetro opcional pode ser dado, @var{qual-dispositivo}, que
+especifica de qual dispositivo a partição de origem é.
+
+Sistemas de arquivo suportados
+@itemize
+@item ext2, ext3
+(desde que a partição de destino é maior que a partição de origem)
+
+@item fat16, fat32
+@item linux-swap
+(equivalente ao mkswap na partição de destino)
+@item reiserfs (se a libreiserfs está instalada)
+
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{cp /dev/hdb 2 3}
+@end example
+
+@c FIXME: this doesn't format right.
+
+Copia a partição 2 do @file{/dev/hdb} (por exemplo, @file{/dev/hdb2})
+para a partição em 3, no dispositivo aonde o Parted foi carregado,
+destruindo o conteúdo original da partição 3.
+@end deffn
+
+@node help
+@subsection help
+@cindex help, descrição do comando
+@cindex descrição do comando, help
+
+@deffn Comando help [@var{comando}]
+
+Mostra a ajuda geral, ou a ajuda no @var{comando}.
+
+Exemplo:
+
+@example
+(parted) @kbd{help resize}
+@end example
+
+Mostra a ajuda para o comando resize.
+@end deffn
+
+@node mklabel
+@subsection mklabel
+@cindex mklabel, descrição do comando
+@cindex descrição do comando, mkindex
+
+@deffn Comando mklabel @var{tipo-de-etiqueta}
+
+Cria uma nova etiqueta de disco, do tipo @var{tipo-de-etiqueta}. A nova
+etiqueta de disco não vai ter partições. Este comando (normalmente) não
+vai tecnicamente destruir seus dados, mas vai fazê-los inutilizáveis,
+e você vai precisar usar o comando rescue (@pxref{Softwares Relacionados})
+para recuperar qualquer partição. Gpart só trabalha com etiquetas de
+disco do msdos (AFAIK), mas é muito melhor que o parted para recuperar
+partições. O Parted funciona em todas as tabelas de partição.
+@footnote{Todo mundo parece ter diferentes palavras para ``etiqueta
+de disco'' --- todas essas palavras significam a mesma coisa: tabela
+de partições, mapa das partições. Também o Registro Mestre do Boot em
+máquinas x86 é guardado no mesmo setor das Tabelas de Partição (você
+não precisa saber disso para usar o Parted).}
+
+@var{tipo-de-etiqueta} deve ser de um desses tipos de tabelas de partição suportados:
+@itemize
+@item bsd
+@item loop (acesso bruto ao disco)
+@item gpt
+@item mac
+@item msdos
+@item pc98
+@item sun
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{mklabel msdos}
+@end example
+
+Cria uma etiqueta de disco ao estilo msdos.
+@end deffn
+
+@node mkfs
+@subsection mkfs
+@cindex mkfs, descrição do comando
+@cindex descrição do comando, mkfs
+
+@deffn Command mkfs @var{minor} @var{tipo-de-sistema-de-arquivo}
+
+Faz um sistemas de arquivo @var{tipo-de-sistema-de-arquivo} na partição
+@var{minor}, destruindo todos os dados que residem naquela partição.
+
+Tipos de arquivo suportados:
+@itemize
+@item ext2
+@item mips
+@item fat16
+@item fat32
+@item linux-swap
+@item reiserfs (se a libreiserfs estiver instalada)
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{mkfs 2 fat32}
+@end example
+
+Faz um sistemas de arquivo @var{fat32} na partição 2.
+@end deffn
+
+@node mkpart
+@subsection mkpart
+@cindex mkpart, descrição do comando
+@cindex descrição do comando, mkpart
+
+@deffn Comando mkpart @var{tipo-de-partição} [@var{tipo-de-sistemas-de-arquivo}] @var{começo} @var{fim}
+
+Cria uma nova partição, @emph{sem} criar um novo sistemas de arquivo
+na partição. Ela é útil para criar partições para sistemas de arquivo
+(ou LVM, etc.) que o Parted não suporta. Você pode especificar tipo
+de sistemas de arquivo, para definir o código de partição apropriado
+na tabela de partições para a nova partição. @var{tipo-de-sistemas-de-arquivo}
+é necessário para partições de dados (por exemplo, partições não-
+extendidas). @var{começo} e @var{fim} são a distância do começo do
+didco, isto é, a ``distância'' do começo do disco.
+
+@var{tipo-de-partição} é uma dessas: primary (primária), extended
+(extendida), logical (lógica). Extendida e lógica somente são usadas
+para tabelas de partição do tipo msdos e mips.
+
+@var{tipo-de-sistemas-de-arquivo} deve ser um dos suportados:
+@itemize
+@item ext2
+@item fat32
+@item fat16
+@item HFS
+@item linux-swap
+@item NTFS
+@item reiserfs
+@item ufs
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{mkpart logical 0.0 692.1}
+@end example
+
+Cria uma partição lógica que vai conter um sistemas de arquivo ext2.
+A partição vai começar no começo do disco, e finalizar em 692.1
+megabytes naquele disco.
+
+@end deffn
+
+@node mkpartfs
+@subsection mkpartfs
+@cindex mkpartfs, descrição do comando
+@cindex descrição do comando, mkpartfs
+
+@deffn Comando mkpartfs @var{tipo-de-partição} @var{tipo-de-sistemas-de-arquivos} @var{começo} @var{fim}
+
+Cria uma nova partição do tipo @var{tipo-de-partição} com um novo
+sistemas de arquivo do tipo @var{tipo-de-sistemas-de-arquivo} nele.
+a nova partição vai começar em @var{começo} megabytes, e tem fim em
+@var{fim} megabytes do começo do disco.
+Não use esse comando para recuperar uma partição (use mkpart ao invés
+disso).
+
+@var{tipo-de-partição} é uma dessas: primary (primária), extended
+(extendida), logical (lógica). Extendida e lógica são somente usadas
+por tabelas de partição do tipo msdos e mips.
+
+@var{tipo-de-sistemas-de-arquivo} deve ser um dos seguintes suportados:
+@itemize
+@item ext2
+@item fat32
+@item fat16
+@item linux-swap
+@item reiserfs (se a libreiserfs está instalada)
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{mkpartfs logical ext2 440 670}
+@end example
+
+Cria uma partição lógica e coloca um sistemas de arquivo do tipo
+ext2, começando em 440 megabytes e finalizando em 670 megabytes
+do começo do disco.
+@end deffn
+
+@node move
+@subsection move
+@cindex move, descrição do comando
+@cindex descrição do comando, move
+
+@deffn Comando move @var{minor} @var{começo} [@var{fim}]
+
+Move a partição no disco, movendo seu começo para @var{começo}.
+Nota: mover nunca muda o número do minor.
+
+Se nenhum @var{fim} é dado, o tamanho da partição permanece o mesmo.
+
+Sistemas de arquivo suportados:
+@itemize
+@item ext2, ext3
+(desde que a partição de destino é maior que a partição de origem)
+@item fat32
+@item fat16
+@item linux-swap
+@item reiserfs (se a libreiserfs está instalada)
+@end itemize
+
+Exemplo:
+
+@example
+(parted) move 2 150
+@end example
+
+Move a partição com o minor número 2 para que ela comece 150 megabytes
+do início do disco.
+
+@end deffn
+
+@node name
+@subsection name
+@cindex name, descrição do comando
+@cindex descrição do comando, name
+
+@deffn Comando name @var{minor} @var{nome}
+
+Define um nome para a partição @var{minor} (Mac e PC98 somente). O
+nome poder ser colocado entre aspas.
+
+Exemplo:
+
+@example
+(parted) @kbd{name 2 'Secreto'}
+@end example
+
+Define o nome da partição 2 para `Secreto'.
+@end deffn
+
+@node print
+@subsection print
+@cindex print, descrição do comando
+@cindex descrição do comando, print
+
+@deffn Comando print
+
+Mostra a tabela de partições que o parted está editando.
+
+Exemplo:
+
+@example
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hda: 0.000-2445.679 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.031 945.000 primary FAT boot, lba
+2 945.000 2358.562 primary ext2
+3 2358.562 2445.187 primary linux-swap
+@end group
+@end example
+@end deffn
+
+@node quit
+@subsection quit
+@cindex quit, descrição do comando
+@cindex descrição do comando, quit
+
+@deffn Comando quit
+
+Sai do Parted.
+
+@c RMK: generality: the following will apply to any operating system on
+@c which parted will run, not only Linux-based ones.
+@c clausen: yeah... just that the way hurd and linux work are totally
+@c different, and it's actually very hard to speak in general. Need to
+@c discuss this more
+É somente depois que o Parted sai que o kernel do Linux fica sabendo
+das mudanças que o Parted fez nos discos. Contudo, as mudanças causadas
+quando você digita um comando vai @emph{provavelmente} serem feitas para
+o disco imediatamente após digitar um comando. Mas, Linux é cache, e o
+cache do hardware do disco pode por uma demora nisso.
+@end deffn
+
+@node rescue
+@subsection rescue
+@cindex rescue, descrição do comando
+@cindex descrição do comando, rescue
+
+@deffn Comando rescue @var{começo} @var{fim}
+resgata partições perdidas entre @var{começo} e @var{fim}
+Procura entre @var{começo} e @var{fim} por assinaturas de sistemas de
+arquivo. Se alguma é encontrada, ele vai perguntar se você quer criar
+uma partição pra ele. Isto é útil quando você acidentalmente apagou uma
+partição com o comando rm do parted, por exemplo.
+
+Infelizmente não há uma barra de progresso, porque é difícil (uma
+possível correção!) para dizer quanto vai demorar. Se o Parted não acha
+nada, ele vai demorar muito tempo procurando (o que é um bug que deve
+ser corrigido). No entanto, no exemplo abaixo, a partição é
+instantaneamente recuperada.
+
+Exemplo:
+
+@example
+(parted) @kbd{print}
+@group
+Disk geometry for /dev/hdc: 0.000-8063.507 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.031 8056.032 primary ext3
+@end group
+(parted) @kbd{rm}
+Partition number? 1
+(parted) @kbd{print}
+@group
+Disk geometry for /dev/hdc: 0.000-8063.507 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+@end group
+@end example
+
+AI! Nós deletamos a nossa partição ext3!!! Parted vem para nos salvar...
+
+@example
+(parted) @kbd{rescue}
+Start? 0.0005?
+End? 8063.5073?
+Information: A ext3 primary partition was found at 0.031Mb ->
+8056.030Mb. Do you want to add it to the partition table?
+Yes/No/Cancel? @kbd{y}
+(parted) @kbd{print}
+@group
+Disk geometry for /dev/hdc: 0.000-8063.507 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.031 8056.032 primary ext3
+@end group
+@end example
+
+Está de volta! :)
+
+@end deffn
+
+@node resize
+@subsection resize
+@cindex resize, descrição do comando
+@cindex descrição do comando, resize
+
+@deffn Comando resize @var{minor} @var{começo} @var{fim}
+
+Redimensiona a partição com o número @var{minor}. A partição vai começar
+em @var{começo} do começo do disco, e terminar em @var{fim} do começo do
+disco. O resize nunca muda o número do minor. Partições extendidas podem
+ser redimensionadas, desde que a nova partição entendida contenha
+todas as partições lógicas.
+
+Note que o Parted não requer que um sistema seja ``desfragmentado''
+(Parted pode mover os dados seguramente se necessário). É uma perda
+de tempo desframentar. Não se preocupe!
+
+Sistemas de arquivo suportados:
+@itemize
+@item ext2, ext3 - restrição: o novo @var{começo} deve ser o mesmo do antigo @var{começo}.
+
+@item fat16, fat32
+
+@item linux-swap
+@item reiserfs (se a libreiserfs estiver instalada)
+@end itemize
+
+Exemplo:
+
+@example
+(parted) @kbd{resize 3 200 850}
+@end example
+
+Redimensiona a partição 3, para que ela começa em 200 megabytes
+e termine em 850 megabytes do começo do disco.
+@end deffn
+
+@node rm
+@subsection rm
+@cindex rm, descrição do comando
+@cindex descrição do comando, rm
+
+
+@deffn Comando rm @var{minor}
+
+Remove a partição com número @var{minor}. Se você acidentalmente apagar
+a partição com esse comando, use o mkpart (@emph{não} o mkpartfs) para
+recuperá-la. Você também pode usar o programa gpart (@pxref{Programas
+Relacionados}) para recuperar tabelas de partição danificadas.
+
+Nota para tabelas de partição do tipo msdos: se você apagar uma partição
+lógica, todas as partições lógicas com um número maior que essa vão ser
+apagados. Por exemplo, se você apagar uma partição lógica com um número
+minor 6, então as partições que eram número 7, 8 e 9 devem ser renumeradas
+para 6, 7 e 8 respectivamente. Isto significa que você deve atualizar a
+@file{/etc/fstab} em sistemas GNU/Linux.
+
+Exemplo:
+
+@example
+(parted) @kbd{rm 3}
+@end example
+
+Remove a partição 3.
+@end deffn
+
+@node select
+@subsection select
+@cindex select, descrição do comando
+@cindex descrição do comando, select
+
+@deffn Comando select @var{dispositivo}
+
+Seleciona o dispositivo, @var{dispositivo}, para o Parted editar. O
+dispositivo geralmente é um dispositivo de disco rígido do Linux, ou,
+se acesso direto a um arquivo é necessário --- uma partição, dispositivo
+RAID em software, ou um volume lógico LVM.
+
+Exemplo:
+
+@example
+(parted) @kbd{select /dev/hdb}
+@end example
+
+Seleciona @file{/dev/hdb} (o disco slave na primeira controladora ide
+no Linux) como um dispositivo para editar.
+@end deffn
+
+@node set
+@subsection set
+@cindex set, descrição do comando
+@cindex descrição do comando, set
+
+@deffn Comando set @var{minor} @var{sinalizador} @var{estado}
+
+Muda um sinalizador na partição de número @var{minor}. Um
+sinalizador pode ser ``on'' ou ``off''. Algumas ou todas essas
+flags estarão disponíveis, dependendo qual tabela de partições
+você está usando:
+
+@table @samp
+@item boot
+(Mac, MSDOS, PC98) - só deve ser habilitada se você quer fazer
+boot da partição. A semântica poder variar entre as tabelas de
+partição. Para tabelas de partição do MSDOS, somente uma partição
+pode ser carregável. Se você está instalando LILO numa partição
+(@pxref{LILO}), então aquela partição deve ser carregável. Para tabelas
+de partição do PC98, todas as partições ext2 devem ser carregáveis
+(Isto é reforçado pelo Parted).
+
+@item lba
+(MSDOS) - este sinalizador pode ser habilitado, para dizer ao MS DOS,
+o MS Windows 9x ao MS Windows ME e outros sistemas baseados neles
+para usar o modo Linear (LBA).
+
+@item root
+(Mac) - este sinalizador deve ser habilitado se a partição está na
+partição raiz a ser usada pelo Linux.
+
+@item swap
+(Mac) - este sinalizador deve ser habilitado se a partição é a swap
+que vai ser usada pelo Linux.
+
+@item hidden
+(MSDOS, PC98) - esta flag deve ser habilitada para esconder partições
+de sistemas operacionais Microsoft.
+
+@item raid
+(MSDOS) - este sinalizador pode ser habilitado para dizer ao Linux que
+essa partição é uma partição de software RAID. @xref{LVM e RAID}.
+
+@item LVM
+(MSDOS) - este sinalizador pode ser habilitado para dizer à partição
+linux que a partição é um volume físico.
+
+@end table
+
+O comando print mostra todas os sinalizadores para cada partição.
+
+Exemplo:
+
+@example
+(parted) @kbd{set 1 boot on}
+@end example
+
+Define o sinalizador de @samp{boot} na partição 1.
+@end deffn
+
+@node Exexmplos
+@section Sessões de Exemplo do Parted
+@cindex sessões de exemplo do parted
+@cindex sessões de exemplo do parted
+
+Estes exemplos tenta cobrir a maior parte das circunstâncias, com a
+exceção de espelhamento de disco, que é discutido em @ref{Espelhamento
+de disco}.
+
+@menu
+* Aumentando uma partição usando espaço não-usado::
+* Redimensionando uma partição ext2 num disco cheio::
+@end menu
+
+@node Aumentando uma partição usando espaço inusado
+@subsection Exemplo: Aumentando uma partição para usar espaço inusado
+@cindex aumentando uma partição, exemplo
+@cindex exemplo, aumentando uma partição
+
+Suponhã que seu disco se pareça com isso:
+
+@example
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.063 500.000 primary ext2
+2 500.000 625.000 primary linux-swap
+@end group
+@end example
+
+@noindent Existem 375 Mb de espaço livre no final do disco (depois da
+partição 2). A Partição 1 tem um sistemas de arquivo ext2, que é o
+dispositivo riaz. A partição 2 é um dispositivo de swap.
+
+Suponha que você queira usar o espaço livre no final do disco para o
+sistemas de arquivo na partição 1. Você pode fazer o seguinte:
+
+@enumerate
+@item Estes passos vão modificar tanto o sistemas de arquivo raiz na
+partição 1, quanto o dispositivo de swap na partição 2. Portanto, você
+não deveria estar usando nenhuma das duas partições. Você provavelmente
+deve usar um disco de boot do Parted. @xref{Discos de boot do Parted}.
+Do disco de boot, rode o Parted:
+
+@example
+# @kbd{parted /dev/hda}
+@end example
+
+@item Remove a partição 2 (a partição de swap). Normalmente, você não
+ia querer apagar uma partição com dados nela. Mas, uma partição não
+contém dados enquanto não está montada, então você pode removê-la, e
+criar uma outra partição de swap no seu lugar.
+
+@example
+(parted) @kbd{rm 2}
+@end example
+
+@item Cria uma nova partição de swap no fim do disco:
+
+@example
+@group
+(parted) @kbd{mkpartfs primary linux-swap 875 999.9}
+(parted) @kbd{print}
+Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.063 500.000 primary ext2
+2 875.000 1000.000 primary linux-swap
+@end group
+@end example
+
+@item Aumenta a partição 1 no espaço que está sobrando
+
+@example
+(parted) @kbd{resize 1 0.063 874.9}
+@end example
+
+Tudo feito!
+
+@example
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hda: 0.000-1000.000 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.063 874.999 primary ext2
+2 875.000 1000.000 primary linux-swap
+@end group
+@end example
+@end enumerate
+
+
+@node Redimensionando uma partição ext2 em um disco cheio
+@subsection Exemplo: Redimensionando uma partição ext2 num disco cheio
+@cindex redimensionando uma partição num disco cheio, exemplo
+@cindex exemplo, redimensionando uma partição num disco cheio
+
+Suponha que o seu disco se pareça com isso:
+
+@example
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hda: 0-8063.5 megabytes
+Disk label type: msdos
+Minor Start End Type Filesystem Flags
+1 0.0 23.5 primary ext2 boot
+2 23.5 8056.0 extended
+5 23.6 3545.6 logical ext2
+6 3545.6 7067.7 logical ext2
+7 7067.7 7326.5 logical ext2
+8 7326.5 7585.4 logical ext2
+9 7585.4 7844.2 logical linux-swap
+@end group
+
+@group
+$ @kbd{df -h}
+Filesystem Size Used Avail Use% Mounted on
+/dev/hda8 251M 31M 207M 13% /
+/dev/hda1 23M 2.4M 19M 11% /boot
+/dev/hda5 3.4G 577M 2.7G 18% /usr
+/dev/hda6 3.4G 289M 2.9G 9% /home
+/dev/hda7 251M 12M 226M 5% /var
+@end group
+@end example
+
+Suponha que você queira aumentar a partição do @file{/var}
+@file{/dev/hda7}) para 1GB, usando algum espaço da partição
+do @file{/home} (@file{/dev/hda6}).
+
+Para redimensionar uma partição usando o Parted, você pode usar
+o comando resize:
+
+@example
+(parted) resize @var{numero-da-particao} @var{novo-começo} @var{novo-fim}
+@end example
+
+@noindent @var{novo começo} deve ser o mesmo que o antigo começo em
+partições ext2 (infelizmente). Então esse processo vai ficar mais
+complicado. @emph{É} possível, portanto. @footnote{Se o Parted suportasse
+mover o começo de partições ext2 (como ele faz com partições FAT), então
+seria muito mais simples:
+
+@example
+@group
+(parted) @kbd{resize 6 3545.6 6200}
+(parted) @kbd{resize 7 6200 7326.5}
+@end group
+@end example
+}
+
+@enumerate
+@item Diminuir a partição do @file{/home} (@file{/dev/hda6}) em 500MB:
+
+@example
+# @kbd{parted /dev/hda}
+(parted) @kbd{resize 6 3545.6 6200}
+@end example
+
+@item Cria uma nova partição no seu lugar. Ali é onde @file{/var} vai
+estar, eventualmente. Esta nova partição vai ser numerada como 10.
+
+@example
+(parted) @kbd{mkpartfs logical ext2 6200 7067.7}
+@end example
+
+@item Copia a antiga partição do @file{/var} (@file{/dev/hda7}) para
+a nova (@file{/dev/hda10}).
+
+@example
+(parted) @kbd{cp 7 10}
+@end example
+
+@item Apaga a antiga @file{/var}
+
+@example
+(parted) rm 7
+@end example
+
+Nesse momento: todas as partições lógicas com número maior que 7
+mudaram de número. Então 8, 9 e 10 viraram 7, 8 e 9 respectivamente.
+
+Esta renumeração não vai acontecer de verdade enquanto qualquer uma delas
+estiver montadas naquele disco (só vai acontecer quando você reiniciar).
+Isto é do que essa mensagem de aviso trata. Então você @emph{nunca} deve
+tentar montar um sistemas de arquivo tocado pelo Parted (redimensionado
+ou criado pelo Parted), antes de reiniciar se você receber essa mensagem.
+
+@item Redimensiona a nova partição do @file{/var} (agora numerada para 9),
+adicionando o espaço da antiga partição do @file{/var}:
+
+@example
+@group
+(parted) @kbd{resize 9 6200 7326.5}
+(parted) @kbd{quit}
+Warning: The kernel was unable to re-read the partition table on
+/dev/hda (Device or resource busy). This means Linux knows nothing
+about any modifications you made. You should reboot your computer
+before doing anything with /dev/hda.
+@end group
+@end example
+
+@item Pelos números das partições terem mudado, a @file{/etc/fstab} deve
+ser atualizada. Isto pode ser feito antes de reiniciar, porque a partição
+raiz não foi tocada pelo Parted. (Se você quer que o Parted faça algo com
+a partição raiz, você precisa usar o disco de boot).
+
+Se a antiga @file{/etc/fstab} se parece com isso:
+
+@example
+@group
+/dev/hda8 / ext2 defaults 1 1
+/dev/hda1 /boot ext2 defaults 1 2
+/dev/hda6 /home ext2 grpquota,usrquota 0 2
+/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0
+/dev/hda5 /usr ext2 defaults 1 2
+/dev/hda7 /var ext2 grpquota,usrquota 0 2
+/dev/fd0 /mnt/floppy auto noauto,owner 0 0
+none /proc proc defaults 0 0
+none /dev/pts devpts gid=5,mode=620 0 0
+/dev/hda9 swap swap defaults 0 0
+@end group
+@end example
+
+Algumas linhas precisam ser alteradas:
+A few lines need to be changed:
+@itemize
+@item @file{/var} is now /dev/hda9 (because we copied it to a new
+partition)
+
+@item @file{/dev/hda8} (the root device) has been renumbered to
+@file{/dev/hda7}
+
+@item @file{/dev/hda9} (the swap device) has been renumbered to
+@file{/dev/hda8}
+@end itemize
+
+The new @file{/etc/fstab} looks like this:
+
+@example
+@group
+/dev/hda7 / ext2 defaults 1 1
+/dev/hda1 /boot ext2 defaults 1 2
+/dev/hda6 /home ext2 grpquota,usrquota 0 2
+/dev/cdrom /mnt/cdrom iso9660 noauto,owner,ro 0 0
+/dev/hda5 /usr ext2 defaults 1 2
+/dev/hda9 /var ext2 grpquota,usrquota 0 2
+/dev/fd0 /mnt/floppy auto noauto,owner 0 0
+none /proc proc defaults 0 0
+none /dev/pts devpts gid=5,mode=620 0 0
+/dev/hda8 swap swap defaults 0 0
+@end group
+@end example
+
+@item Reboot. That's it!
+@end enumerate
+
+@node BIOSes and Firmware
+@chapter BIOSes and Firmware
+@cindex bios
+@cindex firmware
+
+``BIOS'' (Basic Input/Output System) and ``firmware'' mean the same
+thing. However, on PC and PC98 based computers, the word BIOS is more
+common. On Apple Macintosh and Sun computers, the word ``firmware'' is
+more common. The BIOS or firmware program is built into a ROM chip
+inside your computer, that does memory checks, etc. You cannot
+(easily) change this program. Since BIOSes today are generally
+compatible with BIOSes in use 20 years ago, these programs tend to have
+an antiquated design. Features have been added in counter-intuitive
+ways over the years, leading to overly complicated systems that cause a
+lot of confusion today.
+
+@menu
+* PC BIOSes:: The Legacy of IBM
+* Macintosh OpenFirmware:: Go Forth, Young Hacker!
+* PC98 BIOS:: The BIOS of the PC98 computer
+* SGI / MIPS Firmware:: The firmware of SGI MIPS computers
+@end menu
+
+@node PC BIOSes
+@section The PC BIOS
+@cindex pc bios
+@cindex bios, pc
+
+There are a few popular PC BIOSes: AmiBIOS, Award, Phoenix, and others.
+They all work in a similar way. None of these BIOSes understand or know
+about partition tables. They affect partitioning indirectly.
+
+There are a few popular PC BIOSes: AmiBIOS, Award, Phoenix, and others.
+They all work in a similar way. None of these BIOSes understand or know
+about partition tables. They affect partitioning indirectly.
+
+outras. Elas todas trabalham de modo semelhante. Nenhma dessas BIOSs
+entende ou conhecem sobre tabelas de partição, mas elas a afetam
+indiretamente.
+
+O seguinte ocorre quando o seu computador é ligado:
+
+@enumerate
+@item Estas BIOSs carregam o primeiro bit do programa carregador de boot,
+guardado na MBR (Master Boot Record - Registro Mestre do Boot) no
+disco rígido.
+
+@item A BIOS execute o primeiro bit do carregador de boot, guardado na MBR
+(Master Boot Record - Registro Mestre do Boot) no disco rígido.
+
+@item O programa carregador de boot usa a BIOS para carregar o resto do
+próprio programa.
+
+@item O carregador de boot usa a BIOS para carregar o sistema operacional
+(ou quem sabe, outro carregador de boot, nesse caso, você vai para o passo
+2 de novo).
+
+@item O sistema operacional pode ou não usar a bios para acessar arquivos
+(o Windows geralmente usa, o Linux ou o BSd não).
+@end enumerate
+
+@c RMK: FIXME: learn how to refer to entries in the above list, so that
+@c the following paragraphs doesn't depend on the order details of the
+@c list.
+
+Os passos (3) a (5) involvem programas comunicando-se com a BIOS, para
+pedir para falar com os discos. Existem duas maneiras de se comunicar
+com a BIOS para fazer isso: usando CHS (Cylinders Heads and Sectors -
+Cilindros Trilhas e Setores) ou LBA (Linear Block Addressing -
+Endereçamento de Blocos Linear). BIOSs antigas somente vão suportar CHS.
+As novas BIOSs geralmente suportam tanto LBA quanto CHS, apesar do
+suporte a CHS ser interrompido no futuro. (o CHS é considerado um sistema
+legado horrível.)
+
+Passos (3) e (4), feitos pelo carregador deboot, sempre vão usar o mesmo
+método de acesso --- sempre LBA ou sempre CHS. No caso do carregador de
+boot do Windows, ele é determinado pelo indicador de LBA na partição de
+boot do Windows (@pxref{definida} para informações sobre indicadores).
+No caso do Linux, você provavelmente estará usando LILO ou GRUB como
+carregador de boot. O GRUB usa LBA se estiver disponível, e CHS se não.
+O LILO requer que você escolha quando você instala ele (com as opções
+"linear" ou "lba32").
+
+@c RMK: FIXME: find way to refer to above steps by @-command
+Passo (5) - E/S feita pelo sistema operacional - somente o Windows
+faz E/S pela BIOS. [Nós ainda não sabemos o suficiente sobre os
+problemas, mas parece que o Windows pode ter seus próprios problemas
+com o modo CHS. As pessoas nos disseram de vezes em que o Windows
+corrompe seu próprio sistemas de arquivo, etc. É realmente difícil
+para nós saber o que está acontecendo. Nós recomendamos fortemente
+que você use LBA, se você pode!]
+
+Então existem 3 possíveis situações, todas discutidas aqui:
+
+@enumerate
+@item Você está usando o modo CHS, e a sua BIOS só suporta o modo CHS.
+@item Você está usando o modo CHS, e a sua BIOS suporta tanto LBA quanto CHS.
+Então, você quer converter do modo CHS para LBA O Mais Rápido Possível
+@sc{tm}.
+@item Você já está usando o modo LBA.
+@end enumerate
+
+@menu
+* O Parted e o modo CHS:: Usando o Parted em BIOSs com modo CHS
+* Do modo CHS para LBA:: Convertendo a BIOS do modo CHS para LBA
+* O Parted e o modo LBA:: Usando o Parted com o modo LBA
+@end menu
+
+@node O Parted e o modo CHS
+@subsection Usando o Parted em BIOS do modo CHS
+@cindex bios de modo chs
+@cindex chs, bios com geometria de disco do modo
+
+O Linux normalmente detecta a geometria da BIOS automaticamente. Contudo,
+às vezes isso dá errado. Neste caso, você mesmo deve dizer ao Linux,
+passando um parâmetro para ele. Por exemplo, se o Linux pensa que o seu
+disco rígido @file{/dev/hda} tem a geometria 256/64/63, mas o programa
+de configuração da BIOS diz que a geometria é 512/32/63, então você deve
+passar esse parâmetro ao Linux:
+
+@example
+@kbd{hda=512,32,63}
+@end example
+
+Os parâmetros são passados de diversas maneiras, dependendo do carregador
+de boot que você está usando. Você provavelmente está usando o LILO. Neste
+caso, você adiciona a seguinte linha para o @file{/etc/lilo.conf}: (Você
+então precisa rodar o @command{/sbin/lilo}, e reiniciar para as mudanças
+terem efeito)
+
+@c RMK: FIXME: can't get the quotes right: texinfo double quotes ``'' don't
+@c work in example's, and keyboard double quotes "" don't look right in text.
+@example
+append="hda=512,32,63"
+@end example
+
+O Parted geralmente pode detectar se o Linux detectou a geometria incorreta.
+Contudo, ele não pode fazer isso se não existem partições no disco. Neste
+caso, você mesmo pode checar. É muito importante que você faça isso.
+
+Algumas vezes, o Parted vai reclamar que as partições não estão alinhadas
+aos limites dos cilindros. O Parted vai te dar a opção de ignorar. Se você
+ignorar, então o Parted via fazer alguns truques com a sua tabela de
+partições. No Linux não vai ter problemas. No DOS e no Windows não vão ter
+problemas se eles estão usando o modo LBA. Se o DOS/Windows está usando
+o modo CHS, então reinstalar o gerenciador de boot (@pxref{MS DOS
+MS Windows 9x MS Windows ME}) deve resolver qualquer problema - mas mudar
+pro modo LBA é preferível (veja @pxref{Do modo CHS para LBA}).
+
+Partições que estão envolvidas no processo de boot devem finalizar antes
+do cilindro 1024, se o modo CHS está sendo usado. Veja a seção sobre
+o processo de boot para determinar se a partição está envolvida no
+processo de boot. A configuração típica é ter uma pequena partição
+Linux para o @file{/boot}, uma partição Windows, e então a(s)
+partição(ões) Linux.
+
+@node Do modo CHS para o LBA
+@subsection Convertendo do modo CHS para o LBA
+@cindex chs para lba, converting de
+
+Para fazer com que o carregador de boot do Windows e o sistema
+operacional usarem o modo LBA, somente defina o indicador LBA em todas
+as partições FAT @ref{set}. Você não deve ter problemas. Se você
+tiver problemas carregando o Windows, então reinstalar o carregador
+de boot do Windows vai consertar isso @ref{MS DOS MS Windows 9x MS
+Windows ME}.
+
+O Linux não usa a BIOS para E/S. Contudo, o carregador de boot (LILO
+ou GRUB) pode. O GRUB automaticamente usa LBA, caso esteja disponível.
+O LILO exige a opção ``linear'' ou ``lba32''. Então, se o LILO ainda
+carrega após mudar o @file{/etc/lilo.conf} e rodar o @command{/sbin/lilo},
+então está tudo feito! @xref{LILO}. (Se você tiver problemas, reverta
+para CHS de volta, removendo a opção ``linear'' ou ``lba32'', e
+reinstalando o lilo do disco de boot.)
+
+Agora que você está usando LBA continue lendo@dots{}
+
+@node O Parted e o modo LBA
+@subsection Usando o Parted no modo LBA
+@cindex modo lba
+@cindex lba, geometria de disco do modo
+
+O modo LBA resolve todos os problemas do CHS. Contudo, não existe uma
+maneira confiável para o Linux ou o Parted saber que você está usando
+LBA, então o Parted pode te dar avisos sobre cilindros não alinhados,
+ou a geometria da BIOS ser inconsistente, etc. Você pode ignorar essas
+mensagens, se você está usando o modo LBA. (Versões antigas do Parted
+tinham problemas, mas todos foram resolvidos).
+
+Quando o seu disco está no modo LBA, o Parted (e a maioria dos outros
+programas) vai dizer que a sua geometria é X/255/63 - a menos que
+você tenha mudado do CHS para LBA.
+
+@node Macintosh OpenFirmware
+@section OpenFirmware do the Apple Macintosh
+@cindex open firmware, macintosh
+@cindex macintosh open firmware
+
+Existem duas versões do OpenFirmware do PowerMac - uma usada no
+``antigo mundo'' do PowerMac, e outra usada no ``novo mundo''. O
+``Novo mundo'' se refere aos PowerPCs coloridos feitos desde 1999.
+Eles tem diferenças significantes. Contudo, ambos entendem tabelas
+de partição.
+
+Ambas requerem que o usuário escolha exatamente uma partição para ser
+a partição de boot (a partição com o carregador de boot). Contudo,
+eles usam mecanismos diferentes para fazer isso.
+
+@menu
+* Velho Mundo::
+* Novo Mundo::
+@end menu
+
+@node Velho Mundo
+@subsection OpenFirware Macintosh do Velho Mundo
+@cindex firmware macintosh do velho mundo
+@cindex velho mundo, firmware macintosh do
+@cindex firmware macintosh do velho mundo
+
+A partição escolhida para dar boot é definida por vários carregadores
+de boot, como o Quik. Então, você não deve precisar fazer nada. Nós
+poderíamos adicionar suporte a isso no Parted, se alguém gritar muito
+alto@dots{}
+
+@node Novo Mundo
+@subsection OpenFirware Macintosh do Novo Mundo
+@cindex firware macintosh do velho mundo
+@cindex novo mundo, firwarem macintosh do
+@cindex firwarem macintosh do novo mundo
+
+@c RMK: completeness: do we have a description of HFS anywhere here?
+OpenFirmware do novo mundo requer que a partição que dá boot seja HFS
+e marcada como partição de boot. Ela usa um mecanismo diferente para
+ser marcada como a partição de boot. Isto é controlado com o indicador
+``boot'' no Parted. Por exemplo:
+
+@example
+(parted) @kbd{set 2 boot on}
+@end example
+
+@node BIOS dos PC98
+@section As BIOS dos PC98
+@cindex bios do pc98
+
+@c RMK: completeness : should we describe what machines are likely to
+@c have a PC 98 bios?
+@c RMK: illiteracy: the only pages I found for PC98 info were in Japanese,
+@c which I can't read :(
+A BIOS dos PC98 permitem a você marcar qualquer número de partição
+como bootável. Você pode desmarcar ou marcar uma partição como bootável
+com o indicador ``boot'' do Parted. Por exemplo:
+
+@example
+(parted) @kbd{set 2 boot off}
+@end example
+
+
+@node Firmwares dos SGI / MIPS
+@section Firmware dos SGI / MIPS
+@cindex firmware dos sgi
+@cindex firmware dos mips
+
+
+
+O firmware dos SGI / MIPS permite você fazer o boot de arquivos de
+boot especiais, que são gerenciados pela tabela de partições. No
+Parted, esses arquivos de boot são tratados como partições lógicas
+dentro das partições extendidas.
+
+Por exemplo:
+
+@example
+Disk label type: mips
+Minor Start End Type Filesystem Name Flags
+9 0.000 2.732 extended
+17 0.002 0.002 logical sgilabel
+18 0.003 1.162 logical symmon
+19 1.404 1.670 logical sash
+1 2.732 8555.212 primary xfs root
+2 8555.213 8682.270 primary swap
+@end example
+
+A Partição 9 é a partição extendida (um cabeçalho de volume, na terminologia
+dos SGI/MIPS) aonde o arquivo de boot pode ficar. As partições 17, 18 e 19
+são os arquivos de boot. Seus nomes podem ser manipulados com o comando name
+do Parted. A partição 1 e 2 são partições normais. Elas não podem ter nomes.
+
+Note que o Linux não vê os arquivos de boot como partições (talvez devesse?).
+Então o /dev/hda17 não existe no Linux. Você deve usar o dvhtool(8) para
+manipular arquivos de boot.
+
+@node Carregadores de Boot
+@chapter Carregadores de Boot
+@cindex carregadores de boot
+
+O carregador de boot é o programa que permite que você selecione qual
+sistema operacional você quer usar, e carrega aquele sistema operacional.
+Você pode ter mais de um carregador de boot instalado, especialmente se
+você tem mais de um tipo de sistema operacional instalado. É comum para
+carregadores de boot poderem carregar outros carregadores de boot.
+
+Quando se redimensiona uma partição, muitos dados se movem. Muitos
+carregadores de boot não entendem o sistemas de arquivo. Eles só lembram
+aonde que as informações necessárias para o carregador de boot reside.
+Se esta informação é movida, deve-se dizer ao carregador de boot pra
+onde elas se moveram. Isto é feito reinstalando o carregador de boot
+(por exemplo, rodando novamente o programa instalador do carregador de
+boot, que normalmente envolve digitar um único comando na shell). Nem
+todos os carregadores de boot exigem isso.
+
+@menu
+* LILO:: O LInux LOader
+* GNU GRUB:: GNU GRand Unified Boot-loader
+* MS DOS MS Windows 9x MS Windows ME:: Software Legado da MS
+* MS Windows NT:: Carregador do MS Windows NT
+* MS Windows 2000:: Carregador do MS Windows 2000
+* Quik:: Quik
+* Yaboot:: Yaboot
+
+@end menu
+
+@node LILO
+@section LILO: um carregador de boot para o kernel do Linux
+@cindex lilo
+
+LILO é um carregador de boot popular para os x86. O carregador de
+boot do LILO é geralmente instalado com:
+
+@example
+# @kbd{/sbin/lilo}
+@end example
+
+Se você está usando um disco de boot, então você deve fazer isso:
+(aonde @file{/dev/hda1} deve ser substituído com a partição raiz)
+
+@example
+# @kbd{mount /dev/hda1 /mnt}
+# @kbd{chroot /mnt /sbin/lilo}
+# @kbd{umount /dev/hda1}
+@end example
+
+Versões antigas do LILO não suportam o modo LBA (@pxref{BIOSs de PC}).
+O modo LBA é habilitado com as opções lba32 ou linear, no @file{/etc/lilo.conf}
+(veja a documentação do LILO para maiores informações).
+
+Se você usa o modo LBA, você não deve ter problemas, contanto que a
+sua BIOS suporte LBA.
+
+Se você usa o modo CHS, então a partição com o diretório @file{/boot}
+deve acabar antes do cilindro 1024. Então, se você tem um disco grande
+(vamos dizer, com mais de 8 gigabytes), você deve ter um partição para
+o @file{/boot} próximo ao começo do disco.
+
+@node GNU GRUB
+@section GRUB: O GNU GRand Unified Bootloader
+@cindex grub
+
+GRUB é um carregador de boot relativamente novo, para x86. Dependendo
+de como o GRUB é instalado, ele pode entender o sistemas de arquivo,
+ou simplesmente lembrar aonde os arquivos de boot estão guardados. Ele
+entende o sistemas de arquivo se ele está usando ``Stage1.5''. Se ele
+não está usando Stage1.5, ou o número da partição muda, então você precisa
+reinstalar o Stage2 (por favor veja a documentação do GRUB). Do modo
+contrário, você não precisa fazer nada.
+
+O GRUB automaticamente detecta se LBA está disponível, e vai usá-lo
+se ele está disponível (equivalente à opção ``lba32'' do LILO).
+
+@node MS DOS MS Windows 9x MS Windows ME
+@section Carregadores de Boot Legados dos Sistemas Operacionais Microsoft
+@cindex carregador de boot do win32
+@cindex carregador de boot legado dos sistemas operacinais microsoft
+
+O DOS e Windows requerem que você reinstale o carregador de boot se você
+mudar o tipo de FAT (FAT16 ou FAT32) da partição de boot. O Parted vai
+avisar você antes de fazer isso. Para reinstalar o carregador de boot,
+você pode tanto criar um disco de boot, ou usar o CDROM de boot. O
+método do disco de boot não funciona com o Windows ME.
+
+@itemize @minus
+@item MÉTODO DO DISCO DE BOOT (DOS/Windows 9x)
+
+@enumerate
+
+@item Criar um disco de boot do Windows
+
+@itemize @bullet
+
+@item Carregue o Windows. @emph{Isto implica que você deve
+fazer um disco de boot antes de usar o parted}.
+
+@item Clique com o direito no drive de disquete no Windows Explorer.
+
+@item Clique em ``Formatar''.
+
+@item Selecione ``Copiar somente os arquivos de sistema''.
+
+@item Clique em ``Formatar''.
+
+@item Copie o C:\WINDOWS\COMMAND\SYS.COM para o A:\ Nota: você deve
+ter chamado o C:\WINDOWS de algo mais, como C:\WIN98.
+
+@end itemize
+
+@item Carregue o disco de boot do Windows, deixando o disco de boot no
+drive de disquete quando carregar. Você pode precisar dizer à sua BIOS
+para usar o disquete como boot.
+
+@item Digite o seguinte no prompt do DOS:
+
+@example
+A:\>@kbd{sys c:}
+@end example
+
+@end enumerate
+
+@item MÉTODO DO CDROM: (Windows 9x/ME)
+
+@enumerate
+
+@item Insira o CDROM do Windows, e faça boot dele. (Selecione ``boot sem
+suporte a CDROM'').
+
+@item Digite:
+
+@example
+A:\>@kbd{c:}
+C:\>@kbd{cd \windows\command} (pode ser \win98\command, ou similar)
+C:\WINDOWS\COMMAND>@kbd{sys c:}
+@end example
+
+Isto é tudo.
+
+@end enumerate
+@end itemize
+
+Além disso, o DOS e Windows impõe algumas restrições:
+
+@itemize @bullet
+
+@item A partição de boot deve ser selecionada com o indicador ``boot''.
+Somente uma partição podem ser selecionadas (algumas vezes chamadas de
+partições ``ativas''). Por exemplo, para definir a partição 3 como a
+partição de boot faça:
+
+@example
+(parted) @kbd{set 3 boot on}
+@end example
+
+@item O MS DOS e o MS Windows 9x/ME só podem fazer boot da primeira
+partição FAT. Isto é, a partição FAT com o menor número de partição,
+que não está oculta. Note que os carregadores de boot como o GRUB e o
+LILO (e algumas BIOSs) podem mudar esse comportamento@dots{}
+
+@item Se você está usando endereçamento CHS (ao invés de endereçamento
+LBA), então o início da partição de boot deve ser antes do cilindro 1024.
+Você pode dizer ao MS DOS para usar (ou não usar) o endereçamento LBA,
+habilitando ou desabilitando o indicador LBA na partição de boot. Por
+exemplo, habilitar o indicador LBA na partição 2, faça:
+
+@example
+(parted) @kbd{set 2 lba on}
+@end example
+
+Nota: o endereçamento LBA não é suportado pelo MS-DOS 6.22 ou inferior,
+bem como todas as versões do PC-DOS.
+
+Aviso: algumas BIOSs não vão habilitar o endereçamento LBA, ao menos
+que você habilite na BIOS também. Se, por alguma razão, o Windows não
+inicializar após mudar esse indicador, então este é provavelmente o
+problema.
+
+@item o MS-DOS ``real'' (por exemplo, versão 6.2 pra cima) e o MS-DOS
+7.0 (por exemplo, o Windows 95/98a) não conhecem FAT32. Então é possível
+inicializar eles da @emph{segunda partição fat} (somente FAT16, claro),
+quando @emph{a primeira partição fat} é FAT32. Ambas tem que ser partições
+primárias, então você provavelmente vai ter que definir qual você quer
+inicializar como partição ativa.
+
+@end itemize
+
+@node MS Windows NT
+@section O Carregador de Boot do Microsoft Windows NT
+@cindex carregador de boot do microsoft windows nt
+
+O Windows NT não pode ler ou inicializar de partições FAT32. Portanto,
+você não deve nunca converter partições FAT16 para FAT32, se você quer
+usá-las com o Windows NT.
+
+@node MS Windows 2000
+@section O Carregador de Boot do Microsoft Windows 2000
+@cindex carregador de boot do microsoft windows 2000
+
+O Windows 2000 requer que você reinstale o carregador de boot se você
+mudar o tipo de FAT (FAT16 ou FAT32) do sistemas de partições. O Parted
+vai avisar você antes de tentar fazer isso. Para reinstalar o carregador
+de boot, faça:
+
+@enumerate
+@item Faça boot do CD do Windows 2000.
+@item Ele vai perguntar se você quer continuar. Aperte Enter.
+@item Ele então vai perguntar se você quer instalar um novo sistema, ou
+Consertar um sistema pré-existente. Escolha a última (apertando ``R'').
+Ele vai perguntar se você quer reparar automaticamente, ou se você quer
+usar o console de recuperação. Escolha usar o console de recuperação.
+@item No console, digite:
+
+@example
+C:\>@kbd{fixboot}
+@end example
+
+O sistema deve inicializar com sucesso agora.
+@end enumerate
+
+O carregador de boot do NT/2000 também precisa:
+
+@itemize @bullet
+
+@item seu próprio código no setor de boot de uma partição PRIMÁRIA
+FAT12, FAT16 ou NTFS (FAT32 é possível com o Windows 2000), que é
+chamada de ``partição de sistema''. Esta partição deve ser marcada
+com o indicador de ``boot'' no Parted.
+
+@item os arquivos NTLDR, BOOT.INI e NTDETECT.COM dentro do sistema
+da partição. O BOOT.INI guarda toda a informação sobre a localização
+física da primeira partição ou de um drive lógico aonde o Windows NT
+foi instalado, chamado de ``partição de boot''. A partição de boot e
+a partição de sistema podem estar localizadas juntas numa partição
+primária.
+
+@c RMK: usage: ambiguous use of 'this': it refers to disk controller?
+@item opcionalmente, o arquivo NTBOOTDD.SYS dentro do sistemas de
+partições que é renomeado driver de disco para o seu controlador SCSI
+ou IDE, quando ele não tem BIOS própria (ou sua BIOS não acessa discos
+grandes).
+
+@item com o MS Windows NT, o sistemas de partições deve terminar antes
+do cilindro 1024 e @emph{deve} começar antes do cilindro 1024. Se ele
+termina antes do cilindro 1024 e os arquivos necessários para a
+inicialização são movidos depois dessa borda, o MS Windows NT não vai mais
+inicializar.
+@item ambos a partição de boot e de sistemas deve ser redimensionada, sem
+a necessidade de qualquer outra mudança.
+
+@item se o número da partição de boot muda (por exemplo, seu número
+de partição), então o BOOT.INI deve ser atualizado.
+
+@end itemize
+
+@node Quik
+@section Quik: um carregador de boot para PowerPCs Macintosh
+@cindex carregador de boot para macintoshs do velho mundo
+@cindex velho mundo, carregador de boot do macintosh do
+
+O Quik é um carregador de boot popular para PowerPCs Macintosh do
+``Velho Mundo''. Você precisa reinstalar o Quik se você redimensionar
+uma partição ext2, usando:
+
+@example
+# @kbd{/sbin/quik}
+@end example
+
+@node Yaboot
+@section Yaboot: um carregador de boot para PowerPCs Macintosh
+@cindex carregador de boot para macintoshs do velho mundo
+@cindex velho mundo, carregadores de boot para macintoshs do
+O Yaboot é um carregador de boot popular para Power PCs Macintosh
+do ``velho mundo''. (``Novo-mundo'' se refere aos PowerPCs coloridos
+fabricados desde 1999.)
+
+O Yaboot precisa de sua partição de boot que deve ser pelo menos 800k.
+Então, se você está instalando o GNU/Linux do zero, você faria algo
+como isso:
+
+@example
+(parted) @kbd{mklabel mac}
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+@end group
+(parted) @kbd{mkpart primary hfs 0.032 1}
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hdb: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+2 0.031 1.000
+@end group
+(parted) @kbd{set 2 boot on}
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/hdb: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+2 0.031 1.000 boot
+@end group
+@end example
+
+Você não precisa reinstalar o Yaboot depois de redimensionar uma partição.
+O Yaboot é instalado com o ybin @ref{Software Relacionado}.
+
+@node Sistemas Operacionais
+@chapter Sistemas Operacionais
+@cindex sistemas operacionais
+
+O Parted somente roda sob o GNU/Linux e o GNU/Hurd, no momento. Contudo,
+ele pode ser usado para redimensionar partições usadas por, ou
+compartilhadas com outros sistemas operacionais.
+
+Quando você quer redimensionar um sistemas de arquivo, certifique-se
+de que não está montado. O Parted não pode redimensionar partições
+montadas (isto pode mudar no futuro@dots{}).
+Se você modificar a tabela de partições num disco com um partição montada
+nela, você deve reiniciar imediatamente. O Linux não vai saber sobre as
+mudanças que você fez na tabela de partições. (Isto vai ser corrigido,
+com o kernel 2.4, e quando nós adicionarmos suporte a ele.)
+
+Se você quer redimensionar sua partição root ou de boot, use um disco
+de boot @pxref{Discos de boot do Parted}, ou use o redimensionador
+online do Andreas Dilger, incluído no pacote ext2resize @ref{Ext2}.
+
+@menu
+* GNU/Linux e FreeBSD:: Suporte a tabelas de partição nesses sistemas livres
+* MS Windows and OS/2:: Suporte a tabelas de partição nesses sistemas
+* MacOS:: As tabelas de partição suportadas pelo MacOS
+@end menu
+
+@node GNU/Linux e FreeBSD
+@section Tabelas de partição usadas pelo GNU/Linux e FreeBSD
+@cindex tabelas de partição do gnu/linux
+@cindex tabelas de partição do freebsd
+@cindex freebsd, tabelas de partição do
+@cindex linux, tabelas de partição do
+
+Ambos os sistemas GNU/Linux e FreeBSD são mais mais flexíveis quanto
+a tabelas de partição, suportando muitos tipos de tabelas de partição.
+
+@c RMK: padding: added notes about disklabel support for Linux kernel
+Por ser mais difícil para uma máquina usar discos rígidos com tabelas
+de partição normalmente usadas por outras arquiteturas, distribuições
+padrão do kernel do Linux somente suportam as tabelas de partição
+populares para a arquitetura para as quais foram compiladas. Por
+exemplo, um kernel do Linux padrão compilado para o PC provavelmente
+não vai ter suporte a tabelas de partição do Mac ou da Sun. Para acessar
+os sistemas de arquivo em discos com tabelas de partição não suportados,
+o kernel vai ter que ser recompilado.
+
+O FreeBSD tem um sistemas de tabelas de partições que é incompatível
+com as tabelas de partições do MSDOS. O Parted somente suporta o
+sistemas de tabelas de partição dos BSDs. É improvável que suporte
+o sistemas de partições em fatias, porque a semântica é muito estranha,
+e não trabalha como tabelas de partição ``normais''.
+
+@node O MS Windows e o OS/2
+@section Tabelas de partição de disco suportadas por sistemas Microsoft e o OS/2
+@cindex tabelas de partição legadas pela microsoft e a ibm
+@cindex microsoft e ibm, tabelas de partição legadas pela
+
+O MS Windows e o OS/2 somente suportam as tabelas de partição do MSDOS.
+Portanto, se você criar uma nova tabela de partições, você deve usar:
+
+@example
+(parted) @kbd{mklabel msdos}
+@end example
+
+@node MacOS
+@section Suporte a Tabelas de Partição no Sistema Operacional Macintosh
+@cindex tabelas de partição do macintosh
+@cindex macintosh, tabelas de partição do
+
+@c RMK: completeness: does Mac OS X understand non-mac disklabels?
+O MacOS (e o OpenFirmware) somente entende as tabelas de partição
+do mac. Portanto se você criar uma nova tabelas de partições,
+você deve usar:
+
+@example
+(parted) @kbd{mklabel mac}
+@end example
+
+Note que para tabelas de partição do Mac, você deve evitar deixar
+espaços livres em volta, porque as regiões de espaço livre deixam
+entradas na tabela de partições (e o Linux não gosta de ter mais de
+15 entradas). Por exemplo, se você fizer:
+
+@example
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+2 0.031 1.000 boot
+3 1.000 1000.000 ext2 root root
+@end group
+(parted) @kbd{ mkpartfs primary ext2 1001 2000}
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+2 0.031 1.000 boot
+3 1.000 1000.000 ext2 root root
+4 1001.000 2000.000 ext2
+@end group
+@end example
+
+Existe 1 megabyte de espaço livre entre as partições 3 e 4. Você pode
+evitar isso, criando partições de 0.1M (no caso, o Parted automaticamente
+``junta'' elas). Então, no exemplo acima, você deveria fazer isso ao invés:
+
+@example
+(parted) @kbd{mkpartfs primary ext2 1000.1 2000}
+@group
+(parted) @kbd{print}
+Disk geometry for /dev/sda: 0.000-6149.882 megabytes
+Disk label type: mac
+Minor Start End Filesystem Name Flags
+1 0.000 0.031 Apple
+2 0.031 1.000 boot
+3 1.000 1000.000 ext2 root root
+4 1000.000 2000.000 ext2
+@end group
+@end example
+
+@node Sistemas de Arquivo
+@chapter Sistemas de Arquivo suportados pelo Parted
+@cindex sistemas de arquivo
+
+@menu
+* Sistemas Suportados:: File systems operations supported by GNU Parted
+* Ext2:: Sistemas ext2 do Linux no Parted
+* FAT16 and FAT32:: Sistemas Legados e o Parted da Microsoft e o Parted
+* Reiserfs:: Sistema jornalístico Reiser e o Parted
+@end menu
+
+@node Sistemas de Arquivo Suportados
+@section Sistemas de Arquivo Suportados pelo GNU Parted
+@cindex sistemas de arquivo suportados
+@cindex sistemas de arquivo suportados
+
+O Parted tem suporte a essas operações:
+
+@c RMK: FIXME: can we put in nicer marks for "true", and note markers
+@c to associate notes below with entries in this table?
+
+@multitable {Filesystem} {detect} {create} {resize} {copy} {check}
+@item Sistema de Arquivo @tab detecta @tab cria @tab redimensiona @tab copia @tab checa
+@item ext2 @tab * @tab * @tab *1 @tab *2 @tab *3
+@item ext3 @tab * @tab @tab *1 @tab *2 @tab *3
+@item fat16 @tab * @tab * @tab *4 @tab *4 @tab *
+@item fat32 @tab * @tab * @tab * @tab * @tab *
+@item hfs @tab * @tab @tab @tab @tab
+@item jfs @tab * @tab @tab @tab @tab
+@item linux-swap @tab * @tab * @tab * @tab * @tab *
+@item ntfs @tab * @tab @tab @tab @tab
+@item reiserfs @tab * @tab *5 @tab *1,5 @tab *5 @tab *3,5
+@item ufs @tab * @tab @tab @tab @tab
+@item xfs @tab * @tab @tab @tab @tab
+@end multitable
+
+@c RMK: note: the following is not an enumerated list, just a bunch of
+@c notes associated to entries in the above matrix. That's bad.
+
+@noindent NOTAS:
+(1) O início da partição deve estar fixa para ext2, ext3 e reiserfs.
+
+(2) A partição que você copia deve ser maior (ou exatament o mesmo
+tamanho) da partição que você está copiando.
+
+(3) Checagem limitada é feita quando o sistemas de arquivo é aberto.
+Esta é a única checagem no momento. Todos os comandos (incluindo o
+resize) vão falhar graciosamente, deixando o sistemas de arquivo
+intacto, se não existir erros no sistemas de arquivo (e a vasta maioria
+de erros no geral).
+
+(4) O tamanho da nova partição, após redimensionar ou copiar, é restrito
+pelo tamanho de cluster para a fat (principalmente afeta FAT16). Isto
+é pior do que você pensa, porque você não chega a escolher o tamanho
+do cluster (isso é um bug no Windows, mas você quer compatibilidade,
+certo?).
+
+Então, em prática, você sempre pode diminuir sua partição (porque o
+Parted pode diminuir o tamanho do cluster), você não vai poder aumentar
+a partição pro tamanho que você quer. Se você não tiver problemas em
+usar FAT32, você sempre vai poder aumentar a partição pro tamanho
+que você quiser.
+
+Resumo: você sempre pode diminuir a sua partição. Se você não pode
+usar FAT32 por alguma razão, então você não vai poder aumentar sua
+partição.
+
+(5) O suporte a reiserfs é habilitado se você instalar libreiserfs,
+disponível em @uref{reiserfs.linux.kiev.ua}. (É provável que esteja
+disonível logo em www.namesys.com... nos diga se/quando isso acontecer!)
+
+@node Ext2
+@section O GNU Parted e o Second Extended Filesystem
+@cindex suporte a sistema de arquivo ext2
+@cindex suporte a sistemas second extended
+
+O Parted não suporta diretamente cópia de sistemas de arquivo ext2
+(ainda). Contudo, existem algumas maneiras de se conseguir isso:
+
+@itemize
+@item Use o comando mkfs (ou mkfs.ext2), e então rode na shell:
+
+ME CONSERTE!!! isto ainda não funciona muito bem - mas deve estar OK
+para a maioria das pessoas@dots{}
+
+@example
+# @kbd{mount -t ext2 /dev/hda2 /mnt/dst}
+# @kbd{find /mnt/src -depth | cpio -pm /mnt/dst}
+@end example
+
+@item Se você duplicar uma partição que será maior que o original,
+isto também pode ser feito: primeiro, crie uma nova partição ext2.
+Então:
+
+@example
+# @kbd{dd if=/dev/dsp-antigo of=/dev/dsp-novo bs=1024 count=@var{tam_ant}}
+# @kbd{parted /dev/hda resize 2 @var{início} @var{fim}}
+@end example
+
+@noindent aonde @var{tam_ant} é o tamanho da partição original em kilobytes.
+@var{início} e @var{fim} são o novo começo e fim para a partição duplicada.
+@end itemize
+
+@node FAT16 e FAT32
+@section Suporte a Sistemas de Arquivo da Microsoft
+@cindex suporte a sistemas de arquivo fat
+@cindex suporte a sistemas de arquivo legados da microsoft
+
+O Parted não pode aumentar o tamanho do cluster de sistemas de arquivo
+FAT (ainda). Isto põe restrições em redimensionar e copiar partições.
+Isto é geralmente bizarro, porque o Parted pode converter sistemas de
+arquivo entre FAT16 e FAT32, que tem restrições diferentes no que o
+tamanho do cluster pode ser.
+
+Por exemplo, vamos dizer que uma partição de 100Mb com um tamanho de
+cluster de 4k. Esta partição não pode ser redimensionados para 400Mb,
+porque o tamanho do cluster deveria ser mudado para 16k. Contudo, ele
+pode ser redimensionado para 600Mb se você usar FAT32. O contrário é
+verdade para sistemas de arquivo FAT32 de 600Mb.
+
+Note: quando você copia ou redimensiona um sistemas de arquivo, o Parted
+vai perguntar se você quer converter entre FAT16 e FAT32 (se isso for
+possível). Portanto, se você só quer converter um partição para FAT32
+(sem redimensionar), você só precisa redimensionar a partição para o
+mesmo tamanho.
+
+@menu
+* MS DriveSpace:: Partições MS DriveSpace
+@end menu
+
+
+@node MS DriveSpace
+@subsection Partições MS DriveSpace
+@cindex partições drivespace
+
+O MS DriveSpace é um programa que vem com o MS Windows 95 que pdoe ser
+usado para comprimir sistemas de arquivo FAT. Eu acredito que ele
+funcione do mesmo jeito que o DoubleSpace, então tudo dito aqui pode
+ser aplicado no DoubleSpace também.
+
+É possível para o Parted redimensionar e copiar essas partições, mas
+você tem que fazer algumas coisas a mais@dots{}
+
+@menu
+* Aumentando uma partição DriveSpace::
+* Diminuindo um partição DriveSpace::
+* Copiando uma partição DriveSpace::
+@end menu
+
+
+@node Aumentando uma partição DriveSpace
+@subsection Aumentando uma partição DriveSpace
+@cindex partição drivespace, aumentando uma
+
+Para aumentar o tamanho de uma partição DriveSpace, faça o seguinte
+@enumerate
+@item Use o comando resize do Parted para aumentar a partição para o tamanho desejado.
+
+@item Use o MS DriveSpace para enviar o espaço livre do drive de origem
+para o drive comprimido.
+
+@end enumerate
+
+@node Diminuindo uma partição DriveSpace
+@subsubsection Diminuindo uma partição DriveSpace
+@cindex partição drivespace, diminuindo uma
+
+Para aumentar o tamanho de uma partição DriveSpace, faça o seguinte:
+
+@enumerate
+@item Use o MS DriveSpace para jogar o espaço livre do drive comprimido
+para o drive de origem. O número de espaço jogado corresponde ao
+montante que se deve diminuir a partição.
+
+@c RMK: usage: "Parted doesn't give good feedback on what the nubmers" huh?
+@item Use o comando resize do Parted para diminuir uma partição para o
+tamanho desejado. NOTA: O Parted não tem uma boa resposta com os números
+pelo qual se pede para uma partição diminuir. Isto está na lista de
+afazeres.
+
+@end enumerate
+
+@node Copiando uma partição DriveSpace
+@subsubsection Copiando uma partição DriveSpace
+@cindex partição drivespace, copiando uma
+
+Se você quer copiar uma partição DriveSpace para uma partição que é
+maior, então você pode seguir as instruções para aumentar uma partição
+DriveSpace, exceto se você copiar ao invés de redimensionar para a
+partição desejada, e ter certeza de que você usou a nova partição no
+DriveSpace.
+
+Contudo, se você quer copiar uma partição DriveSpace que é menor, as
+coisas ficam um pouco mais complicadas:
+
+@enumerate
+@item Use o MS DriveSpace para empurrar o espaço livre do disco
+comprimido para o drive de origem. O montante de disco empurrado deve ser
+mais que a diferença entre o disco de origem e o tamanho desejado de
+uma das partições duplicadas.
+
+@item Use o Parted para copiar a partição de destino para a partição
+duplicada.
+
+@item Use o MS DriveSpace para empurrar o espaço livre do disco de
+origem de volta para o disco comprimido.
+
+@item Use o MS DriveSpace para empurrar o espaço livre do drive duplicado
+de volta para o drive comprimido.
+@end enumerate
+
+
+@node Reiserfs
+@section Sistemas de Arquivo Jornalístico Reiserfs
+@cindex reiserfs
+
+O Parted suporta reiserfs se a libreiserfs está instalada. O Parted
+detecta isso ao rodar, e automaticamente ativa o suporte. Você pode
+baixar a libreiserfs em:
+
+ @uref{http://reiserfs.linux.kiev.ua}
+
+Note que a libreiserfs é software novo, e não foi largamente testado.
+
+
+@node LVM e RAID
+@chapter LVM e RAID
+@cindex lvm e raid
+@cindex raid e lvm
+
+@menu
+* Visão geral da LVM e RAID:: Visão geral da LVM e RAID
+* Criando partições RAID ou LVM:: Configurando partições RAID e LVM
+* Manipulando um volume RAID ou LVM:: Operações em partições RAID ou LVM
+@end menu
+
+@node Visão geral do LVM e RAID
+@section Logical Volume Manager e Redundant Arrays of Inexpensive Disks
+@cindex lvm e raid, visão geral do
+@cindex lvw, visão geral
+@cindex raid, visão geral
+
+O LVM (Logical Volume Manager) é um sistema alternativo para
+particionamento. Ele permite volumes lógicos (por exemplo, ``partições
+virtuais'') a serem espalhadas em muitos volumes físicos (por exemplo,
+discos e/ou partições). O LVM é suportado no Linux versão 2.4 e
+superior.
+
+RAID (Redundant Array of Inexpensive Disks - Ordem Redundante de Discos
+Baratos) é um sistema para usar muitos discos e/ou partições juntas, como
+uma ``partição virtual''. Existem muito poucos modos de usar software
+RAID, e são essencialmente:
+
+@c RMK: if there are only two options, why not put them into a sentence?
+@itemize
+@item usar múltiplos (pequenos) discos par um único sistemas de arquivo,
+aumentar a performance e fazer todo o espaço disponível ser disponível
+num único sistemas de arquivo.
+@item usar múltiplos discos para guardar cópias redundantes de informação,
+para aumentar a confiança e performance.
+@end itemize
+RAID por software é suportado no Linux versão 2.0 e superior.
+
+@c RMK: usage: what does ``is supported normally by Parted'' mean?
+RAID por hardware é normalmente suportado pelo Parted - então você não
+precisa ler essa seção se você está usando RAID por hardware (o
+oposto para RAID por software).
+
+LVM, RAID por software e partições são comumente usadas simultaneamente,
+mas elas todas podem ser usadas independentemente. LVM e RAID por
+software são geralmente compostas de partições, mais do que discos
+rígidos.
+
+O GNU Parted não suporta LVM e RAID por software completamente,
+mas ele é ainda útil quando usado em combinação com suas ferramentas
+respectivas. O Parted é útil para essas tarefas:
+
+@itemize
+@item criar uma partição RAID ou LVM de software
+
+@item criando, redimensionando ou copiando um sistema de arquivo num
+volume lógico (ou ``partição lógica'')
+@end itemize
+
+@node Criando partições LVM ou RAID
+@section Criando partições LVM ou RAID
+@cindex criação de partições lvm
+@cindex criação de partições raid
+
+Para criar uma partição RAID ou LVM, você deve:
+@enumerate
+@item Criar uma partição com o comando mkpart
+@item Definir o indicador LVM ou RAID na partição.
+@end enumerate
+
+Por exemplo:
+
+@example
+(parted) @kbd{mkpart primary ext2 0 4000}
+(parted) @kbd{set 1 lvm on}
+@end example
+
+Nota: a partição LVM ou RAID não vai estar pronta para uso ainda. Você
+ainda precisa rodar o mkraid(8) para RAIDs, ou usar as ferramentas de
+LVM para inicializar o volume físico, e criar grupos lógicos, etc.
+
+@node Manipulando um volume RAID ou LVM
+@section Manipulando um Sistema de Arquivo num volume RAID ou LVM
+@cindex operação em partições raid
+@cindex operações em partições lvm
+
+O Parted pode manipular volumes lógicos RAID e LVM, mesmo não entendendo
+RAID ou LVM. Ele utiliza o suporte do Linux a RAID e LVM. Portanto, você
+somente pode usar esses métodos se o seu kernel do Linux suporta RAID
+e/ou LVM.
+
+Para manipular um sistema de arquivo num volume lógico RAID ou LVM (ou,
+uma partição sozinha, para esse intuito), você pode iniciar o parted
+selecionando o dispositivo do volume (partição) lógico. Por exemplo:
+
+@example
+# @kbd{parted /dev/md0}
+@end example
+
+Para o resto desse capítulo, ``dispositivo virtual'' vai se referir
+ao dispositivo que o Parted está editando (no nosso exemplo, @file{/dev/md0}).
+For the rest of this chapter, ``virtual device'' will refer to the
+device Parted is editting (in our example cases, @file{/dev/md0}).
+
+@menu
+* Criando um sistema de arquivo num dispositivo RAID ou LVM::
+* Redimensionando um sistema de arquivo::
+* Copiando um sistema de arquivo de um dispositivo virtual para uma partição::
+* Copiando um sistema de arquivo para um dispositivo virtual::
+@end menu
+
+@node Criando um Sistema de Arquivo num dispositivo RAID ou LVM
+@subsection Criando um Sistema de Arquivo num Dispositivo VIrtual LVM ou RAID
+@cindex lvm, criando um sistema de arquivo em
+@cindex raid, criando um sistema de arquivo em
+
+Para criar um sistema de arquivo num volume LVM, use os seguintes passos:
+
+@enumerate
+@item Crie uma tabelas de partição de loop. Este é uma tabela de partições
+falsa, que diz ao Parted para tratar o dispositivo virtual como um único
+sistema de arquivo. Com essa falsa tabela de partições, existe ou nenhuma
+ou uma partição.
+
+@example
+(parted) @kbd{mklabel loop}
+@end example
+
+@item Crie o sistema de arquivo, usando o comando mkpartfs do Parted.
+Você deve deixar o início do sistema de arquivo 0. A partição pode
+terminar em qualquer lugar dentro do dispositivo virtual. Você pode
+encontrar o tamanho do dispositivo virtual com o comando print. Por
+exemplo:
+
+@example
+(parted) @kbd{print}
+@group
+Disk geometry for /dev/md0: 0.000-47.065 megabytes
+Disk label type: loop
+Minor Start End Filesystem Flags
+@end group
+(parted) @kbd{mkpartfs primary ext2 0 47.065}
+(parted) @kbd{print}
+@group
+Disk geometry for /dev/md0: 0.000-47.065 megabytes
+Disk label type: loop
+Minor Start End Filesystem Flags
+1 0.000 47.065 ext2
+@end group
+@end example
+@end enumerate
+
+@node Redimensionando um sistemas de arquivo
+@subsection Redimensionando um Sistema de Arquivos num Dispositivo Virtual LVM ou RAID
+@cindex lvm, redimensionando um sistema de arquivo
+@cindex raid, redimensionando um sistema de arquivo
+
+Você geralmente redimensiona o sistema de arquivo ao mesmo tempo que
+você redimensiona o seu dispositivo virtual. Se você está aumentando
+o sistema de arquivo e o dispositivo virtual, você deve primeiro
+aumentar o dispositivo virtual (com as ferramentas RAID ou LVM), e então
+aumentar o sistema de arquivo. Se você está diminuindo o sistema de
+arquivo e o dispositivo virtual, você deve diminuir o sistema de arquivo
+primeiro, e então o dispositivo virtual.
+
+Para redimensionar o sistema de arquivo no Parted, use o comando resize.
+Por exemplo:
+
+@example
+(parted) @kbd{select /dev/md0}
+(parted) @kbd{resize 1 0 20}
+@end example
+
+@node Copiando um sistema de arquivo de um dispositivo virtual para uma partição
+@subsection Copiando um Sistema de Arquivo de um Dispositivo LVM ou RAID para uma partição
+@cindex lvm, copiando de um lvm para uma partição
+@cindex raid, copiando de um raid para uma partição
+
+Para copiar um sistema de arquivo de um dispositivo virtual LVM ou RAID,
+é só usar o comando cp. Por exemplo:
+
+(parted) @kbd{select /dev/hda}
+(parted) @kbd{cp /dev/md0 1 3}
+@node Copiando um sistema de arquivo para um dispositivo virtual
+@subsection Copiando um Sistema de Arquivo de um Dispositivo Virtual RAID ou LVM
+@cindex lvm, copiando de uma partição lvm para um volume
+@cindex raid, copiando de uma partição para um volume raid
+
+Para copiar o sistema de arquivo para um dispositivo virtual LVM ou RAID,
+use a seguinte receita:
+
+@enumerate
+@item Crie a tabela de partições de loop no dispositivo virtual. Por exemplo:
+
+@example
+(parted) @kbd{select /dev/md0}
+(parted) @kbd{mklabel loop}
+@end example
+
+@item Crie um sistema de arquivo no dispositivo virtual, com o comando
+mkpartfs. Por exemplo:
+
+@example
+(parted) @kbd{mkpartfs primary ext2 0 47.065}
+@end example
+
+@item Copie a partição com o comando cp:
+
+@example
+(parted) @kbd{select /dev/hda}
+(parted) @kbd{cp /dev/md0 3 1}
+@end example
+@end enumerate
+
+@node Espelhamento de Discos
+@chapter Espelhamento de Discos
+@cindex espelhamento de discos
+
+Espelhamento de disco é o método para evitar o tedioso processo de
+instalação do Windows. Por exemplo, se você quer instalar o Windows e
+o Office em 1000 máquinas, vai levar provavelmente 5 vezes 1000 horas.
+As coisas não são tão ruins com o GNU/Linux, porque existem programas
+como o kickstart da Red Hat, que permite você automatizar a instalação
+de outros programas, ou praticamente qualquer coisa que você precise
+fazer. Portanto, o espelhamento de disco é somente usado para máquinas
+Windows (ou qualquer software não-livre) em geral, mas nós imaginamos
+que a maioria das organizações achariam impossível migrar do Windows
+para o GNU/Linux (ou qualquer outro software livre) sem um período de
+transição, aonde ambos os sistemas estão disponíveis.
+
+@c FIXME: standards: the CD-Writing howto is listed as non-free by LDP
+Com o espelhamento de disco, você pode torrar um CD com uma imagem de
+disco ou de uma partição contendo o Windows e o Office, e copiar a
+partição diretamente nos discos rígidos de todos os computadores,
+colocando um disco de boot e um CD, e deixando rolar. Mas a partição
+no disco Windows vai provavelmente ser maior, então a partição também
+vai ter de ser redimensionada. Eu já vi várias pessoas comentarem que
+elas gerenciaram esse processo usando discos de boot do Linux e o Parted.
+É possível usar o CDROM somente, usando o disquete de boot como a imagem
+de boot do CD. Leia a CD writing HOWTO para maiores informações. Existem
+algumas coisas peculiares que você tem que fazer pra coisa toda funcionar
+(que vai ser resolvida na próxima série estável do Parted). De qualquer
+modo, este é o processo geral:
+
+@enumerate
+@item Instale o Windows numa máquina, com a configuração que você
+quiser. Você pode ter uma partição do tamanho que quiser, contanto
+que não use mais de 640Mb, e deixe espaço para um instalação completa
+do Linux, e outros 1300Mb para duas cópias da imagem de disco.
+
+@item Instale o Linux na máquina.
+
+@item Faça um diretório para imagem do CD (exemplo: @file{/root/imagem})
+
+@item Crie um arquivo de imagem de disco (exemplo: @file{/root/imagem/disco})
+no diretório do CD:
+
+@example
+# @kbd{dd if=/dev/zero of=/root/imagem/disco bs=1M count=640}
+@end example
+
+@item Use o Parted para copiar a partição Windows para a imagem de disco:
+
+@example
+# @kbd{parted /root/cdimage/diskimage mklabel msdos}
+# @kbd{parted /root/cdimage/diskimage mkpart primary fat32 0 639}
+# @kbd{parted /root/cdimage/diskimage cp /dev/hda 1 1}
+@end example
+
+@item Crie uma imagem de CD do diretório da imagem de CD e torre esse
+CD com a sua ferramenta favorita de gravação.
+
+@item Compile uma versão especial do Parted sem suporte a língua
+nacional e suporte a readline (ou baixe a RPM especial da Freshmeat):
+
+@example
+localhost:~/parted-1.0.0# @kbd{./configure --disable-nls --without-readline --disable-shared; make}
+@end example
+
+@c FIXME: standards: LDP labelled the Bootdisk HOWTO non-free.
+@item Crie um disquete de boot do Linux (veja a Bootdisk HOWTO).
+
+@item Ponha a versão reduzida do Parted no disquete de boot (ou
+um disco raiz suplementar).
+
+@item Escreva um script shell para fazer o seguinte:
+
+@example
+@asis{mount /dev/cdrom /mnt/cdrom}
+@asis{parted --script /dev/hda mklabel msdos}
+@asis{parted --script /dev/hda mkpartfs primary fat 0 @var{algum-tamanho}}
+@asis{parted --script /dev/hda cp /mnt/cdrom/diskimage 1 1}
+@asis{parted --script /dev/hda set 1 boot on}
+@asis{/sbin/halt}
+@end example
+
+@var{algum-tamanho} é o tamanho que você quer que a primeira partição use.
+
+@item Inicie a instalação! Ponha o disquete + CD dentro de cada computador,
+e deixe rolar@dots{}
+@end enumerate
+
+Obviamente eu posso e vou fazer esse processo muito mais fácil. Nós
+estamos considerando fazer uma mini-distribuição para fazer isso.
+Eu não teria tempo para fazer isso --- algum voluntário?
+
+@node Software Relacionado
+@chapter Software Relacionado
+@cindex software relacionado
+@cindex leitura posterior
+@cindex documentação relacionada
+
+Se você quer procurar mais informações, sinta-se à vontade para enviar
+perguntas para @email{parted@@gnu.org}. (!) indica que a
+informação/software está provavelmente incluída na sua distribuição.
+
+Estes arquivos na distribuição do Parted contém informações adicionais:
+
+@itemize @bullet
+
+@item ABOUT-NLS - informações sobre usar o Suporte a Língua Nativa, e o Projeto de Tradução Livre
+
+@item API - a documentação sobre a API da libparted
+
+@item AUTHORS - quem escreveu o que
+
+@item BUGS - erros não arrumados
+
+@item ChangeLog - mudanças feitas no Parted
+
+@item COPYING - a GNU General Public License, os termos pelos quais o GNU Parted pode ser distribuido
+
+@item COPYING.DOC - a GNU Free Documentation Licence, o termo pelo qual
+a documentação do Parted pode ser distribuída.
+
+@item FAT -- informações sobre como o redimensionador de FAT funciona (para programadores)
+
+@item INSTALL --- como compilar e instalar o Parted, e a maioria dos outros softwares livres
+
+@item TODO --- recursos planejados que ainda não foram implementados
+@end itemize
+
+Estes documentos não são distribuídos com o Parted, mas você pode achar
+eles úteis. A maioria deles provavelmente vai estar na sua distribuição.
+Por exemplo, no Red Hat Linux, olhe no cd dentro de @file{/doc/HOWTO} e
+@file{/doc/FAQ}.
+
+@itemize @bullet
+
+@c RMK: usefulness: available at the LDP -- should these urls be updated?
+@c RMK: standards: GPL'd documentation.
+@item Filesystems HOWTO @uref{http://penguin.cz/~mhi/fs}
+
+@c RMK: usefulness: available at the LDP -- should these urls be updated?
+@c FIXME: standards: LDP labelled this non-free
+@item Hard Disk Upgrade mini-HOWTO (!): @uref{http://sunsite.unc.edu/LDP/HOWTO}
+
+@c RMK: usefulness: available at the LDP -- should these urls be updated?
+@c FIXME: standards: LDP labelled this non-free
+@item Large Disk HOWTO @uref{http://www.win.tue.nl/~aeb/linux/Large-Disk.html}
+
+@item LILO mini-HOWTO (!) @uref{http://sunsite.unc.edu/LDP/HOWTO}
+
+@c RMK: usefulness: available at the LDP -- should these urls be updated?
+@item MILO HOWTO (!) @uref{http://sunsite.unc.edu/LDP/HOWTO}
+
+@c FIXME: standards: in short, none of the following is free documenation
+@c FIXME: standards: Linux+DOS+Win95+OS2 labelled non-free by LDP
+@c FIXME: standards: Linux+FreeBSD-mini labelled non-free by LDP
+@c FIXME: reference: can't find a Linux+Win95, only Linux+Win95-mini
+@c FIXME: standards: Linux+Win95-mini labelled non-free by LDP
+@c FIXME: reference: can't find a Linux+FreeBSD, only Linux+FreeBSD-mini
+@c FIXME: reference: can't find a Linux+NT-Loader, only "NT OS Loader +
+@c Linux mini
+@c FIXME: standards: NT OS Loader + Linux mini labelled non-free by LDP
+@item Linux+OS mini-HOWTOs (!): Linux+DOS+Win95+OS2, Linux+FreeBSD-mini-HOWTO,
+Linux+Win95, Linux+FreeBSD, Linux+NT-Loader. You can get these from: @uref{http://sunsite.unc.edu/LDP/HOWTO}
+
+@c FIXME: standards: Partition mini labelled non-free by LDP
+@item Partition mini-HOWTO (!): @uref{http://www.linuxdoc.org/HOWTO/mini/Partition/index.html}
+
+@c RMK: standards: no clear distribution terms
+@item Partition Table HOWTO @uref{http://www.win.tue.nl/~aeb/partitions/partition_tables.html}
+
+@c FIXME: standards: no clear distribution terms
+@item Lista de Tipos de Partições @uref{http://www.win.tue.nl/~aeb/partitions/partition_types.html}
+
+@item Software RAID HOWTO @uref{http://linas.org/linux/Software-RAID/Software-RAID.html}
+
+@end itemize
+
+Outros programas relacionados estão listados aqui. Alguns deles também
+tem documentação útil:
+
+@itemize @bullet
+
+@item Disk Drake. Disponível em @uref{www.linux-mandrake.com/diskdrake}
+Ele é simular em funcionalidade ao Parted. O código de FAT no Disk Drake
+é baseado no nosso código do Parted. Aqui é como o Disk Drake se
+compara ao Parted: (que ambos concordamos :-) O Disk Drake é:
+
+@itemize @minus
+@item mais fácil de usar, te proteje de cometer enganos
+@item uma solução mais completa (lida com o @file{/etc/fstab}, lilo, etc.)
+@item menos suporte à FAT (não pode converter FAT16<->FAT32, não copia partições)
+@item menos suporte a ext2 (no momento)
+@item menos atenção à compatibilidade entre sistemas DOS/Windows (mais antigos)
+@item sem suporte a arquiteturas não-PC
+@end itemize
+
+@item dvhtool (para SGI/MIPS) (!)
+
+@c RMK: standards: unchecked
+@item dosfsck (!)
+
+@item e2fsck, resize2fs e2fsprogs (!) @uref{http://web.mit.edu/tytso/www/linux/e2fsprogs.html}
+
+@item ext2resize - usa o mesmo código do Parted, mas inclui algumas
+outras coisas também, como um redimensionar ext2 na hora, que não
+requer desmontagem. @uref{http://ext2resize.sourceforge.net}
+
+@item fdisk (!)
+
+@item FIPS (!) (First Interactive Partition Splitter - Primeiro Divisor de Partições Interativo) @uref{http://www.igd.fhg.de/~aschaefe/fips}
+
+@ RMK: standards: GPL'd
+@item GPart - recupera tabelas de partição quebradas. @uref{http://www.stud.uni-hannover.de/user/76201/gpart}
+
+@item GNU GRUB - GRand Unified Boot-loader @uref{http://www.gnu.org/software/grub/grub.html}
+
+@item LILO (!) (LInux LOader) @uref{ftp://tsx-11.mit.edu/pub/linux/packages/lilo}
+
+@item LVM @uref{http://linux.msede.com/lvm}
+
+@c RMK: standards: is mkdosfs Free?
+@item mkdosfs (!) (às vezes chamada de mkfs.msdos)
+
+@item mke2fs (!) (às vezes chamada de mkfs.ext2)
+
+@item mkfs (!)
+
+@item mkswap (!)
+
+@item quik (!)
+
+@item reiserfs: NOTA: um redimensionador reiserfs é incluído com a
+distribuição reiserfs normal. @uref{http://devlinux.com/projects/reiserfs}
+Também, uma implementação independente da raiserfs userland (que o parted
+também utiliza) @uref{http://reiserfs.linux.kiev.ua}. Ele pode ser adotado
+por outros usuários no futuro...
+
+@item yaboot (!) @uref{http://penguinppc.org/bootloaders/yaboot/}
+
+@item ybin (!) @uref{http://penguinppc.org/bootloaders/yaboot/}
+
+@end itemize
+
+@node Copiando Este Manual
+@appendix Copiando Este Manual
+
+@menu
+* GNU Free Documentation License:: Licença para copiar esse manual
+@end menu
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+@cindex FDL, GNU Free Documentation License
+@include fdl.texi
+
+@c FDL: FDL 4.I suggests a HISTORY section be included in
+@c the documentation. In this case it seems superfluous, but
+@c here's one, in case it is desired. As far as I'm concerned,
+@c this node doesn't fit well into the structure of the document
+@c at present.
+@node História
+@appendix A história desse manual
+@cindex a história desse manual
+
+Esse manual é baseado no arquivo, USER, incluído na versão 1.4.22.
+O código-fonte do GNU Parted está disponível em @uref{ftp.gnu.org/gnu/parted}.
+
+Formatação texinfo por Richard M. Kreuter, 2002.
+
+Este manual é distribuído sob a GNU Free Documentation License,
+versão 1.1 ou superior, à sua discrição, sem Seções Invariantes,
+sem Textos na Capa, e sem Textos na Contra-capa. @xref{Copiando
+este Manual}, para mais detalhes.
+
+@c FIXME: why doesn't this @ifnotplaintext work?!
+@c @ifnotplaintext
+@node Índice
+@unnumbered Índice
+@printindex cp
+@c @end ifnotplaintext
+
+@bye
+
+@ignore
+I've (that is, RMK) included (too much) commentary in this file.
+
+Lines of the form
+
+ FIXME:<category>:
+
+are bugs, and should be fixed. The categories are sort of vague, but
+"standards" means that something doesnt't meet somebody's (probably
+I've tried to check the license for each program and documentation
+referenced, but have missed some. As a rule, if a Howto or mini-Howto
+has been labelled as non-free by the LDP, then I've assumed it's also
+non-Free for GNU purposes. I've also tried to note the free software
+and documentation, since omission of such notes lead me to recheck things
+I'd forgotten I'd check, etc.
+
+Many nodes give some detailed explanation of how to use parted along
+with a non-free operating system using non-free utilities that are part
+of that system. This may be a violation of the GNU standards,
+node/section "References". I've marked up the text anyhow, in case the
+content is deemed acceptable by decision makers, and hope that my
+contribution here doesn't sway decisions.
+
+For what it's worth, I've noted references to non-free software as
+"acceptable" in case the reference includes a description of what the
+software can't do (e.g., not suck, not harm mankind). This idiosyncratic
+assessment of the permissibility of reference of non-free software is
+meant partly as a joke.
+
+Note: there is a free (GPL'd) DOS compatible operating system, FreeDOS,
+that I've tested and found to work pretty well, better in many respects
+that Micros~1's DOS. Many of the tips and tricks described in the
+manual might work with or be needed for a FreeDOS based system. In
+principle, one could rewrite the sections of this manual to make
+reference only to 'DOS-compatible' systems, and refer people to FreeDOS.
+
+I, for one, would be happy to refer people to FreeDOS, since it's a nice
+project that could play a valuable role among free operating systems
+(actually, it does: it's the DOS kernel for DOSEMU). But would
+reworking references to MS DOS and its progeny to refer to FreeDOS just
+be a clever hack around the GNU standards? I dunno...
+
+<Sigh> Screed over.
+
+Notes on possible (unimplemented!) modifications:
+
+The output samples from parted's print command, fdisk's p command, etc.,
+might be made into tables (multi-column tables) to ensure spiffy formatting.
+
+I'd like to find a way to make *entry: see *synonym type references in
+the index, so, e.g., to refer people looking for Apple to Macintosh, and
+PowerPC to Macintosh, etc. Probably texinfo does this already; I dunno.
+
+
+Notes on general fixes:
+
+RMK: usage: eg -> e.g. ("e.g." is customarily spelled thus).
+
+RMK: usage: "its" is English possessive third person singular adjective
+(cf "sein/ihr", "son/sa/ses"). "it's" is a contraction of "it is",
+i.e., third person singular present active indicative of "to be" (cf
+"das ist", "il est"). I hope that description doesn't come off too
+snotty. I've changed 'it's' to 'its' more times than noted above.
+
+RMK: usage (punctuation): in English, commas are only used to separate
+relative clauses when the information in the clause is deemed
+non-essential for identifying the referent of the noun on which the
+clause depends (German uses commas around every relative clause, by
+contrast). So: "I have read the book that was assigned" doesn't have a
+comma because the clause 'that was assigned' is needed to identify which
+book is the object of 'read', whereas "I have read the book, which
+wasn't very good" implies that the fact that the book wasn't very good
+is extra information, not required for the identification of the book,
+e.g. its identity has already been established).
+
+@end ignore
diff --git a/doc/parted.info b/doc/parted.info
new file mode 100644
index 0000000..99376fd
--- /dev/null
+++ b/doc/parted.info
@@ -0,0 +1,1708 @@
+This is parted.info, produced by makeinfo version 6.8 from parted.texi.
+
+Copyright (C) 1999-2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+INFO-DIR-SECTION System administration
+START-INFO-DIR-ENTRY
+* parted: (parted). GNU partitioning software
+END-INFO-DIR-ENTRY
+
+ This file documents the use of GNU Parted, a program for creating and
+manipulating partition tables.
+
+
+File: parted.info, Node: Top, Next: Introduction, Up: (dir)
+
+GNU Parted User Manual
+**********************
+
+This file documents the use of GNU Parted, a program for creating and
+manipulating partition tables.
+
+ This document applies roughly to version *3.6* of GNU Parted.
+
+ The original version was written by Andrew Clausen in text format.
+Richard M. Kreuter translated it into Texinfo format in 2002, to be
+heavily edited by Leslie P. Polzer in 2006.
+
+* Menu:
+
+* Introduction:: Overview
+* Using Parted:: Partitioning a Hard Drive
+* Related information:: Further reading on related topics
+* Copying This Manual:: How to make copies of this manual
+* History:: This manual's history
+* Concept index:: Concept index
+
+
+File: parted.info, Node: Introduction, Next: Using Parted, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+* Menu:
+
+* Overview:: GNU Parted and prerequisite knowledge
+* Software Required:: GNU Parted's software dependencies
+* Supported Platforms:: Where you can use GNU Parted
+* License:: What you may and may not do with GNU Parted
+* Compiling:: How to build GNU Parted
+
+
+File: parted.info, Node: Overview, Next: Software Required, Up: Introduction
+
+1.1 Overview of GNU Parted
+==========================
+
+GNU Parted is a program for creating and manipulating partition tables.
+
+ This documentation is written with the assumption that the reader has
+some understanding of partitioning and file systems.
+
+ GNU Parted was designed to minimize the chance of data loss. For
+example, it was designed to avoid data loss during interruptions (like
+power failure) and performs many safety checks. However, there could be
+bugs in GNU Parted, so you should back up your important files before
+running Parted.
+
+ The GNU Parted homepage is <https://www.gnu.org/software/parted>. The
+library and frontend themselves can be downloaded from
+<https://ftp.gnu.org/gnu/parted>. You can also find a listing of
+mailing lists, notes for contributing and more useful information on the
+web site.
+
+ Please send bug reports to <bug-parted@gnu.org>. When sending bug
+reports, please include the version of GNU Parted. Please include the
+output from these commands (for disk '/dev/hda'):
+
+ # parted /dev/hda unit s print free
+
+ Feel free to ask for help on this list -- just check that your
+question isn't answered here first. If you don't understand the
+documentation, please tell us, so we can explain it better. General
+philosophy is: if you need to ask for help, then something needs to be
+fixed so you (and others) don't need to ask for help.
+
+ Also, we'd love to hear your ideas :-)
+
+
+File: parted.info, Node: Software Required, Next: Supported Platforms, Prev: Overview, Up: Introduction
+
+1.2 Software Required for the use of Parted
+===========================================
+
+If you're installing or compiling Parted yourself, you'll need to have
+some other programs installed. If you are compiling Parted, you will
+need both the normal and devel packages of these programs installed:
+
+ * GNU parted source is available either as a source tarball:
+
+ <https://git.savannah.gnu.org/gitweb/?p=parted.git>
+
+ or using git (See the README-hacking instructions):
+
+ <https://git.savannah.gnu.org/gitweb/?p=parted.git>
+
+ * libuuid, part of the e2fsprogs package. If you don't have this,
+ you can get it from:
+
+ <http://web.mit.edu/tytso/www/linux/e2fsprogs.html>
+
+ If you want to compile Parted and e2fsprogs, note that you will
+ need to 'make install' and 'make install-libs' e2fsprogs.
+
+ * GNU Readline (optional), available from
+
+ <https://ftp.gnu.org/gnu/readline>
+
+ If you are compiling Parted, and you don't have readline, you can
+ disable Parted's readline support with the '--disable-readline'
+ option for 'configure'.
+
+ * GNU gettext (or compatible software) for compilation, if
+ internationalisation support is desired.
+
+ <https://ftp.gnu.org/gnu/gettext>
+
+
+File: parted.info, Node: Supported Platforms, Next: License, Prev: Software Required, Up: Introduction
+
+1.3 Platforms on which GNU Parted runs
+======================================
+
+Hopefully, this list will grow a lot. If you do not have one of these
+platforms, then you can use a rescue disk and a static binary of GNU
+Parted.
+
+GNU/Linux
+ Linux versions 2.0 and up, on Alpha, x86 PCs, PC98, Macintosh
+ PowerPC, Sun hardware.
+
+GNU/Hurd
+
+
+File: parted.info, Node: License, Next: Compiling, Prev: Supported Platforms, Up: Introduction
+
+1.4 Terms of distribution for GNU Parted
+========================================
+
+GNU Parted is free software, covered by the GNU General Public License
+Version 3, or (at your option) any later version. This should have been
+included with the Parted distribution, in the COPYING file. If not, see
+<http://www.gnu.org/licenses/>.
+
+ Libparted is considered part of GNU Parted. It is covered by the GNU
+General Public License. It is NOT released under the GNU Lesser General
+Public License (LGPL).
+
+
+File: parted.info, Node: Compiling, Prev: License, Up: Introduction
+
+1.5 Building GNU Parted
+=======================
+
+If you want to compile GNU Parted, this is generally done with:
+
+ $ ./configure
+ $ make
+
+ However, there are a few options for 'configure':
+
+'--without-readline'
+ turns off use of readline. This is useful for making rescue disks,
+ etc., where few libraries are available.
+
+'--disable-debug'
+ don't include assertions
+
+'--disable-nls'
+ turns off native language support. This is useful for use with old
+ versions of glibc, or a trimmed down version of glibc suitable for
+ rescue disks.
+
+'--disable-shared'
+ turns off shared libraries. This may be necessary for use with old
+ versions of GNU libc, if you get a compile error about a "spilled
+ register". Also useful for boot/rescue disks.
+
+'--enable-discover-only'
+ support only reading/probing (reduces size considerably)
+
+'--enable-mtrace'
+ enable malloc() debugging
+
+'--enable-read-only'
+ disable writing (for debugging)
+
+1.5.1 Introduction
+------------------
+
+If you want to run GNU Parted on a machine without GNU/Linux installed,
+or you want to modify a root or boot partition, use GParted Live:
+<https://gparted.org/livecd.php>.
+
+
+File: parted.info, Node: Using Parted, Next: Related information, Prev: Introduction, Up: Top
+
+2 Using Parted
+**************
+
+* Menu:
+
+* Partitioning:: Disk partitioning in context
+* Running Parted:: Partitioning with Parted
+* Invoking Parted:: Parted's invocation options and commands
+* Command explanations:: Full explanation of parted's commands
+
+
+File: parted.info, Node: Partitioning, Next: Running Parted, Up: Using Parted
+
+2.1 Introduction to Partitioning
+================================
+
+Partitioning is the process of dividing a storage device into local
+sections, called partitions, which help organize multiple filesystems
+and their associated operating systems.
+
+ A storage device presents itself as a sequence of bytes, numbered
+starting from zero and increasing until the maximum capacity of the
+device is reached. Bytes are normally read and written a sector at a
+time, rather than individually. Each sector contains a fixed number of
+bytes, with the number determined by the device.
+
+ +------------------------------------------------------------+
+ | storage device with no partitions |
+ +------------------------------------------------------------+
+ 0 start end
+
+ In order to store multiple filesystems, a storage device can be
+divided up in to multiple partitions. Each partition can be thought of
+as an area which contains a real filesystem inside of it. To show where
+these partitions are on the device a small table is written at the
+start, shown as PT in the diagram below. This table is called a
+partition table, or disklabel, and also stores the type of each
+partition and some flags.
+
+ +--+---------------+----------------+------------------------+
+ |PT| Partition 1 | Partition 2 | Partition 3 |
+ +--+---------------+----------------+------------------------+
+ 0 start end
+
+
+File: parted.info, Node: Running Parted, Next: Invoking Parted, Prev: Partitioning, Up: Using Parted
+
+2.2 Using GNU Parted
+====================
+
+Parted has two modes: command line and interactive. Parted should
+always be started with:
+
+ # parted DEVICE
+
+where DEVICE is the hard disk device to edit. (If you're lazy and omit
+the DEVICE argument, Parted will attempt to guess which device you
+want.)
+
+ In command line mode, this is followed by one or more commands. For
+example:
+
+ # parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB
+
+Options (like '--help') can only be specified on the command line.
+
+ In interactive mode, commands are entered one at a time at a prompt,
+and modify the disk immediately. For example:
+
+ (parted) mklabel gpt
+ (parted) mkpart P1 ext3 1MiB 8MiB
+
+Unambiguous abbreviations are allowed. For example, you can type "p"
+instead of "print", and "u" instead of "units". Commands can be typed
+either in English, or your native language (if your language has been
+translated). This may create ambiguities. Commands are
+case-insensitive.
+
+ Numbers indicating partition locations can be whole numbers or
+decimals. The suffix selects the unit, which may be one of those
+described in *note unit::, except CHS and compact. If no suffix is
+given, then the default unit is assumed. Negative numbers count back
+from the end of the disk, with "-1s" indicating the sector at the end of
+the disk. Parted will compute sensible ranges for the locations you
+specify (e.g. a range of +/- 500 MB when you specify the location in
+"G"). Use the sector unit "s" to specify exact locations. With
+parted-2.4 and newer, IEC binary units like "MiB", "GiB", "TiB", etc.,
+specify exact locations as well. *Note IEC binary units::.
+
+ If you don't give a parameter to a command, Parted will prompt you for
+it. For example:
+
+ (parted) mklabel
+ New disk label type? gpt
+
+ Parted will always warn you before doing something that is potentially
+dangerous, unless the command is one of those that is inherently
+dangerous (viz., rm, mklabel and mkpart). Since many partitioning
+systems have complicated constraints, Parted will usually do something
+slightly different to what you asked. (For example, create a partition
+starting at 10.352Mb, not 10.4Mb) If the calculated values differ too
+much, Parted will ask you for confirmation.
+
+
+File: parted.info, Node: Invoking Parted, Next: Command explanations, Prev: Running Parted, Up: Using Parted
+
+2.3 Command Line Options
+========================
+
+When invoked from the command line, Parted supports the following
+syntax:
+
+ # parted [OPTION] DEVICE [COMMAND [ARGUMENT]]
+
+ Available options and commands follow. For detailed explanations of
+the use of Parted commands, see *note Command explanations::. Options
+begin with a hyphen, commands do not:
+
+ Options:
+
+'-h'
+'--help'
+ display a help message
+
+'-l'
+'--list'
+ lists partition layout on all block devices
+
+'-m'
+'--machine'
+ display output in machine parseable format
+
+'-j'
+'--json'
+ display output in JSON format
+
+'-s'
+'--script'
+ never prompt the user
+
+'-f'
+'--fix'
+ automatically answer exceptions with "fix" in script mode, which is
+ useful for: GPT header not including full disk size; moving the
+ backup GPT table to the end of the disk; MAC fix missing partition
+ map entry; etc.
+
+'-a alignment-type'
+'--align alignment-type'
+ Set alignment for newly created partitions, valid alignment types
+ are: none, cylinder, minimal and optimal.
+
+'-v'
+'--version'
+ display the version
+
+
+File: parted.info, Node: Command explanations, Prev: Invoking Parted, Up: Using Parted
+
+2.4 Parted Session Commands
+===========================
+
+GNU Parted provides the following commands:
+
+* Menu:
+
+* align-check::
+* disk_set::
+* disk_toggle::
+* help::
+* mklabel::
+* mkpart::
+* name::
+* print::
+* quit::
+* rescue::
+* resizepart::
+* rm::
+* select::
+* set::
+* toggle::
+* type::
+* unit::
+
+ Note that after version 2.4, the following commands were removed:
+check, cp, mkfs, mkpartfs, move, resize.
+
+
+File: parted.info, Node: align-check, Next: disk_set, Up: Command explanations
+
+2.4.1 align-check
+-----------------
+
+ -- Command: align-check ALIGN-TYPE N
+
+ Determine whether the starting sector of partition N meets the
+ disk's selected alignment criteria. ALIGN-TYPE must be 'minimal',
+ 'optimal' or an abbreviation. When in script mode, if the
+ partition does not meet the alignment requirement, exit with status
+ 1; otherwise (including on older kernels for which alignment data
+ is not available), continue processing any remaining commands.
+ Without '--script', print either 'N aligned' or 'N not aligned'.
+
+ Example:
+
+ (parted) align-check minimal 1
+ 1 aligned
+
+
+File: parted.info, Node: disk_set, Next: disk_toggle, Prev: align-check, Up: Command explanations
+
+2.4.2 disk_set
+--------------
+
+ -- Command: disk_set FLAG STATE
+
+ Changes a flag on the disk. A flag can be either "on" or "off".
+ Some or all of these flags will be available, depending on what
+ disk label you are using:
+
+ 'pmbr_boot'
+ (GPT) - this flag enables the boot flag on the GPT's
+ protective MBR partition.
+
+ The disk's flags are displayed by the print command on the "Disk
+ Flags:" line. They are also output as the last field of the disk
+ information in machine mode.
+
+ (parted) disk_set pmbr_boot on
+
+ Set the PMBR's boot flag.
+
+
+File: parted.info, Node: disk_toggle, Next: help, Prev: disk_set, Up: Command explanations
+
+2.4.3 disk_toggle
+-----------------
+
+ -- Command: disk_toggle FLAG
+
+ Toggle the state of the disk flag.
+
+
+File: parted.info, Node: help, Next: mklabel, Prev: disk_toggle, Up: Command explanations
+
+2.4.4 help
+----------
+
+ -- Command: help [COMMAND]
+
+ Prints general help, or help on COMMAND.
+
+ Example:
+
+ (parted) help mklabel
+
+ Print help for the mklabel command.
+
+
+File: parted.info, Node: mklabel, Next: mkpart, Prev: help, Up: Command explanations
+
+2.4.5 mklabel
+-------------
+
+ -- Command: mklabel LABEL-TYPE
+
+ Creates a new disk label, of type LABEL-TYPE. The new disk label
+ will have no partitions. This command (normally) won't technically
+ destroy your data, but it will make it basically unusable, and you
+ will need to use the rescue command (*note Related information::)
+ to recover any partitions. Parted works on all partition tables.
+ (1)
+
+ LABEL-TYPE must be one of these supported disk labels:
+ * aix
+ * amiga
+ * bsd
+ * dvh
+ * gpt
+ * loop (raw disk access)
+ * mac
+ * msdos
+ * pc98
+ * sun
+
+ Example:
+
+ (parted) mklabel msdos
+
+ Create an MS-DOS disk label. This is still the most common disk
+ label for PCs.
+
+ ---------- Footnotes ----------
+
+ (1) Everyone seems to have a different word for "disk label" -- these
+are all the same thing: partition table, partition map.
+
+
+File: parted.info, Node: mkpart, Next: name, Prev: mklabel, Up: Command explanations
+
+2.4.6 mkpart
+------------
+
+ -- Command: mkpart [PART-TYPE NAME FS-TYPE] START END
+
+ Creates a new partition, _without_ creating a new file system on
+ that partition. This is useful for creating partitions for file
+ systems (or LVM, etc.) that Parted doesn't support. You may
+ specify a file system type, to set the appropriate partition code
+ in the partition table for the new partition. FS-TYPE is required
+ for data partitions (i.e., non-extended partitions). START and END
+ are the offset from the beginning of the disk, that is, the
+ "distance" from the start of the disk.
+
+ PART-TYPE is one of 'primary', 'extended' or 'logical', and may be
+ specified only with 'msdos' or 'dvh' partition tables. A NAME must
+ be specified for a 'gpt' partition table. Neither PART-TYPE nor
+ NAME may be used with a 'sun' partition table.
+
+ FS-TYPE must be one of these supported file systems:
+ * btrfs
+ * ext2, ext3, ext4
+ * fat16, fat32
+ * hfs, hfs+, hfsx
+ * hp-ufs
+ * jfs
+ * linux-swap, linux-swap(new,old,v0,v1)
+ * nilfs2
+ * ntfs
+ * reiserfs
+ * sun-ufs
+ * ufs
+ * xfs
+
+ For example, the following creates a logical partition that will
+ contain an ext2 file system. The partition will start at the
+ beginning of the disk, and end 692.1 megabytes into the disk.
+
+ (parted) mkpart logical 0.0 692.1
+
+ Now, we will show how to partition a low-end flash device
+ ("low-end", as of 2011/2012). For such devices, you should use
+ 4MiB-aligned partitions(1). This command creates a tiny
+ place-holder partition at the beginning, and then uses all
+ remaining space to create the partition you'll actually use:
+
+ $ parted -s /dev/sdX -- mklabel msdos \
+ mkpart primary fat32 64s 4MiB \
+ mkpart primary fat32 4MiB -1s
+
+ Note the use of '--', to prevent the following '-1s' last-sector
+ indicator from being interpreted as an invalid command-line option.
+ The above creates two empty partitions. The first is unaligned and
+ tiny, with length less than 4MiB. The second partition starts
+ precisely at the 4MiB mark and extends to the end of the device.
+
+ The next step is typically to create a file system in the second
+ partition:
+
+ $ mkfs.vfat /dev/sdX2
+
+ ---------- Footnotes ----------
+
+ (1) Cheap flash drives will be with us for a long time to come, and,
+for them, 1MiB alignment is not enough. Use at least 4MiB-aligned
+partitions. For details, see Arnd Bergman's article,
+<http://lwn.net/Articles/428584/> and its many comments.
+
+
+File: parted.info, Node: name, Next: print, Prev: mkpart, Up: Command explanations
+
+2.4.7 name
+----------
+
+ -- Command: name NUMBER NAME
+
+ Sets the name for the partition NUMBER (GPT, Mac, MIPS and PC98
+ only). The name can be placed in quotes. And depending on the
+ shell may need to also be wrapped in single quotes so that the
+ shell doesn't strip off the double quotes.
+
+ Example:
+
+ (parted) name 2 'Secret Documents'
+
+ Set the name of partition 2 to 'Secret Documents'.
+
+
+File: parted.info, Node: print, Next: quit, Prev: name, Up: Command explanations
+
+2.4.8 print
+-----------
+
+ -- Command: print [PRINT-TYPE]
+
+ Displays the partition table on the device parted is editing, or
+ detailed information about a particular partition.
+
+ PRINT-TYPE is optional, and can be one of 'devices', 'free',
+ 'list', or 'all'.
+
+ 'devices'
+ display all active block devices
+
+ 'free'
+ display information about free unpartitioned space on the
+ current block device
+
+ 'list, all'
+ display the partition tables of all active block devices
+
+ Example:
+
+ (parted) print
+ Model: ATA Samsung SSD 850 (scsi)
+ Disk /dev/sda: 2684MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: msdos
+ Disk Flags:
+
+ Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext2 lba
+ 3 2300MB 2500MB 200MB primary linux-swap(v1) lba
+ (parted) print free
+ Model: ATA Samsung SSD 850 (scsi)
+ Disk /dev/sda: 2684MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: msdos
+ Disk Flags:
+
+ Number Start End Size Type File system Flags
+ 16.4kB 1049kB 1032kB Free Space
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext2 lba
+ 3 2300MB 2500MB 200MB primary linux-swap(v1) lba
+ 2500MB 2684MB 185MB Free Space
+
+
+
+File: parted.info, Node: quit, Next: rescue, Prev: print, Up: Command explanations
+
+2.4.9 quit
+----------
+
+ -- Command: quit
+
+ Quits Parted.
+
+ It is only after Parted exits that the Linux kernel knows about the
+ changes Parted has made to the disks. However, the changes caused
+ by typing your commands will _probably_ be made to the disk
+ immediately after typing a command. However, the operating
+ system's cache and the disk's hardware cache may delay this.
+
+
+File: parted.info, Node: rescue, Next: resizepart, Prev: quit, Up: Command explanations
+
+2.4.10 rescue
+-------------
+
+ -- Command: rescue START END
+ Rescue a lost partition that used to be located approximately
+ between START and END. If such a partition is found, Parted will
+ ask you if you want to create a partition for it. This is useful
+ if you accidentally deleted a partition with parted's rm command,
+ for example.
+
+ Example:
+
+ (parted) print
+ Model: ATA Samsung SSD 850 (scsi)
+ Disk /dev/sda: 2684MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: msdos
+ Disk Flags:
+
+ Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext4 lba
+ (parted) rm
+ Partition number? 2
+ (parted) print
+ Model: ATA Samsung SSD 850 (scsi)
+ Disk /dev/sda: 2684MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: msdos
+ Disk Flags:
+
+ Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+
+ OUCH! We deleted our ext4 partition!!! Parted comes to the
+ rescue...
+
+ (parted) rescue
+ Start? 1000
+ End? 2684
+ Information: A ext4 primary partition was found at 1000MB ->
+ 2300MB. Do you want to add it to the partition table?
+ Yes/No/Cancel? y
+ (parted) print
+ Model: ATA Samsung SSD 850 (scsi)
+ Disk /dev/sda: 2684MB
+ Sector size (logical/physical): 512B/512B
+ Partition Table: msdos
+ Disk Flags:
+
+ Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext4 lba
+
+ It's back! :)
+
+
+File: parted.info, Node: resizepart, Next: rm, Prev: rescue, Up: Command explanations
+
+2.4.11 resizepart
+-----------------
+
+ -- Command: resizepart NUMBER END
+
+ Moves the END position of partition NUMBER. Note that this does
+ not modify any filesystem present in the partition. If you wish to
+ do this, you will need to use external tools, such as 'resize2fs'.
+
+ When growing a partition you will want to grow the filesystem
+ afterwards, but when shrinking, you need to shrink the filesystem
+ before the partition.
+
+
+File: parted.info, Node: rm, Next: select, Prev: resizepart, Up: Command explanations
+
+2.4.12 rm
+---------
+
+ -- Command: rm NUMBER
+
+ Removes the partition with number NUMBER. If you accidentally
+ delete a partition with this command, use *note rescue:: to recover
+ it. Also, you can use the gpart program (*note Related
+ information::) to recover damaged disk labels.
+
+ Note for msdos disk labels: if you delete a logical partition, all
+ logical partitions with a larger partition number will be
+ renumbered. For example, if you delete a logical partition with a
+ partition number of 6, then logical partitions that were number 7,
+ 8 and 9 would be renumbered to 6, 7 and 8 respectively. This
+ means, for example, that you have to update '/etc/fstab' on
+ GNU/Linux systems.
+
+ Example:
+
+ (parted) rm 3
+
+ Remove partition 3.
+
+
+File: parted.info, Node: select, Next: set, Prev: rm, Up: Command explanations
+
+2.4.13 select
+-------------
+
+ -- Command: select DEVICE
+
+ Selects the device, DEVICE, for Parted to edit. The device can be
+ a Linux hard disk device, a partition, a software RAID device, LVM
+ logical volume, or disk image file.
+
+ Example:
+
+ (parted) select /dev/hdb
+
+ Select '/dev/hdb' (the slave device on the first ide controller on
+ Linux) as the device to edit.
+
+
+File: parted.info, Node: set, Next: toggle, Prev: select, Up: Command explanations
+
+2.4.14 set
+----------
+
+ -- Command: set NUMBER FLAG STATE
+
+ Changes a flag on the partition with number NUMBER. A flag can be
+ either "on" or "off". Some or all of these flags will be
+ available, depending on what disk label you are using:
+
+ 'bios_grub'
+ (GPT) - Enable this to record that the selected partition is a
+ GRUB BIOS partition.
+
+ 'legacy_boot'
+ (GPT) - this flag is used to tell special purpose software
+ that the GPT partition may be bootable.
+
+ 'bls_boot'
+ (MS-DOS, GPT) - Enable this to indicate that the selected
+ partition is a Linux Boot Loader Specification compatible
+ /boot partition.
+
+ 'boot'
+ (Mac, MS-DOS, PC98) - should be enabled if you want to boot
+ off the partition. The semantics vary between disk labels.
+ For MS-DOS disk labels, only one partition can be bootable.
+ If you are installing LILO on a partition that partition must
+ be bootable. For PC98 disk labels, all ext2 partitions must
+ be bootable (this is enforced by Parted).
+
+ 'msftdata'
+ (GPT) - This flag identifies partitions that contain Microsoft
+ filesystems (NTFS or FAT). It may optionally be set on Linux
+ filesystems to mimic the type of configuration created by
+ parted 3.0 and earlier, in which a separate Linux filesystem
+ type code was not available on GPT disks. This flag can only
+ be removed within parted by replacing it with a competing
+ flag, such as boot or msftres.
+
+ 'msftres'
+ (MS-DOS,GPT) - This flag identifies a "Microsoft Reserved"
+ partition, which is used by Windows. Note that this flag
+ should not normally be set on Windows filesystem partitions
+ (those that contain NTFS or FAT filesystems).
+
+ 'irst'
+ (MS-DOS, GPT) - this flag identifies an Intel Rapid Start
+ Technology partition.
+
+ 'esp'
+ (MS-DOS, GPT) - this flag identifies a UEFI System Partition.
+ On GPT it is an alias for boot.
+
+ 'chromeos_kernel'
+ (GPT) - this flag indicates a partition that can be used with
+ the Chrome OS bootloader and verified boot implementation.
+
+ 'lba'
+ (MS-DOS) - this flag can be enabled to tell MS DOS, MS Windows
+ 9x and MS Windows ME based operating systems to use Linear
+ (LBA) mode.
+
+ 'root'
+ (Mac) - this flag should be enabled if the partition is the
+ root device to be used by Linux.
+
+ 'linux-home'
+ (GPT) - Enable this to indicate that the selected partition is
+ a Linux /home partition.
+
+ 'swap'
+ (MS-DOS, GPT, Mac) - this flag should be enabled if the
+ partition is the swap device to be used by Linux.
+
+ 'hidden'
+ (MS-DOS, PC98) - this flag can be enabled to hide partitions
+ from Microsoft operating systems.
+
+ 'raid'
+ (MS-DOS) - this flag can be enabled to tell linux the
+ partition is a software RAID partition.
+
+ 'LVM'
+ (MS-DOS) - this flag can be enabled to tell linux the
+ partition is a physical volume.
+
+ 'PALO'
+ (MS-DOS) - this flag can be enabled so that the partition can
+ be used by the Linux/PA-RISC boot loader, palo.
+
+ 'PREP'
+ (MS-DOS, GPT) - this flag can be enabled so that the partition
+ can be used as a PReP boot partition on PowerPC PReP or IBM
+ RS6K/CHRP hardware.
+
+ 'DIAG'
+ (MS-DOS) - Enable this to indicate that a partition can be
+ used as a diagnostics / recovery partition.
+
+ The print command displays all enabled flags for each partition.
+
+ Example:
+
+ (parted) set 1 boot on
+
+ Set the 'boot' flag on partition 1.
+
+
+File: parted.info, Node: toggle, Next: type, Prev: set, Up: Command explanations
+
+2.4.15 toggle
+-------------
+
+ -- Command: toggle NUMBER FLAG
+
+ Toggle the state of FLAG on partition NUMBER.
+
+
+File: parted.info, Node: type, Next: unit, Prev: toggle, Up: Command explanations
+
+2.4.16 type
+-----------
+
+ -- Command: type NUMBER ID or UUID
+
+ On MS-DOS set the type-id aka partition id to ID on partition
+ NUMBER. The id is a value between 0x01 and 0xff, e.g. the ID for
+ Linux is 0x83. A list with some IDs is available at
+ <https://en.wikipedia.org/wiki/Partition_type>.
+
+ On GPT set the type-uuid to UUID on partition NUMBER. E.g. the
+ UUID for Linux is 0fc63daf-8483-4772-8e79-3d69d8477de4. A list
+ with some UUIDs is availabe at
+ <https://en.wikipedia.org/wiki/GUID_Partition_Table>.
+
+
+File: parted.info, Node: unit, Prev: type, Up: Command explanations
+
+2.4.17 unit
+-----------
+
+ -- Command: unit UNIT
+
+ Selects the current default unit that Parted will use to display
+ locations and capacities on the disk and to interpret those given
+ by the user if they are not suffixed by an UNIT.
+
+ UNIT may be one of:
+
+ 's'
+ sector (n bytes depending on the sector size, often 512)
+
+ 'B'
+ byte
+
+ 'KiB'
+ kibibyte (1024 bytes)
+
+ 'MiB'
+ mebibyte (1048576 bytes)
+
+ 'GiB'
+ gibibyte (1073741824 bytes)
+
+ 'TiB'
+ tebibyte (1099511627776 bytes)
+
+ 'kB'
+ kilobyte (1000 bytes)
+
+ 'MB'
+ megabyte (1000000 bytes)
+
+ 'GB'
+ gigabyte (1000000000 bytes)
+
+ 'TB'
+ terabyte (1000000000000 bytes)
+
+ '%'
+ percentage of the device (between 0 and 100)
+
+ 'cyl'
+ cylinders (related to the BIOS CHS geometry)
+
+ 'chs'
+ cylinders, heads, sectors addressing (related to the BIOS CHS
+ geometry)
+
+ 'compact'
+ This is a special unit that defaults to megabytes for input,
+ and picks a unit that gives a compact human readable
+ representation for output.
+
+ The default unit apply only for the output and when no unit is
+ specified after an input number. Input numbers can be followed by
+ an unit (without any space or other character between them), in
+ which case this unit apply instead of the default unit for this
+ particular number, but CHS and cylinder units are not supported as
+ a suffix. If no suffix is given, then the default unit is assumed.
+ Parted will compute sensible ranges for the locations you specify
+ (e.g., a range of +/- 500 MB when you specify the location in "G",
+ and a range of +/- 500 KB when you specify the location in "M") and
+ will select the nearest location in this range from the one you
+ wrote that satisfies constraints from both the operation, the
+ filesystem being worked on, the disk label, other partitions and so
+ on. Use the sector unit "s" to specify exact locations (if they do
+ not satisfy all constraints, Parted will ask you for the nearest
+ solution). Note that negative numbers count back from the end of
+ the disk, with "-1s" pointing to the last sector of the disk.
+
+ Note that as of parted-2.4, when you specify start and/or end
+ values using IEC binary units like "MiB", "GiB", "TiB", etc.,
+ parted treats those values as exact, and equivalent to the same
+ number specified in bytes (i.e., with the "B" suffix), in that it
+ provides _no_ "helpful" range of sloppiness. Contrast that with a
+ partition start request of "4GB", which may actually resolve to
+ some sector up to 500MB before or after that point. Thus, when
+ creating a partition, you should prefer to specify units of bytes
+ ("B"), sectors ("s"), or IEC binary units like "MiB", but not "MB",
+ "GB", etc.
+
+ Example:
+
+ (parted) unit compact
+ (parted) print
+ Disk geometry for /dev/hda: 0kB - 123GB
+ Disk label type: msdos
+ Number Start End Size Type File system Flags
+ 1 32kB 1078MB 1077MB primary reiserfs boot
+ 2 1078MB 2155MB 1078MB primary linux-swap
+ 3 2155MB 123GB 121GB extended
+ 5 2155MB 7452MB 5297MB logical reiserfs
+ (parted) unit chs print
+ Disk geometry for /dev/hda: 0,0,0 - 14946,225,62
+ BIOS cylinder,head,sector geometry: 14946,255,63. Each cylinder
+ is 8225kB.
+ Disk label type: msdos
+ Number Start End Type File system Flags
+ 1 0,1,0 130,254,62 primary reiserfs boot
+ 2 131,0,0 261,254,62 primary linux-swap
+ 3 262,0,0 14945,254,62 extended
+ 5 262,2,0 905,254,62 logical reiserfs
+ (parted) unit mb print
+ Disk geometry for /dev/hda: 0MB - 122942MB
+ Disk label type: msdos
+ Number Start End Size Type File system Flags
+ 1 0MB 1078MB 1077MB primary reiserfs boot
+ 2 1078MB 2155MB 1078MB primary linux-swap
+ 3 2155MB 122935MB 120780MB extended
+ 5 2155MB 7452MB 5297MB logical reiserfs
+
+
+File: parted.info, Node: Related information, Next: Copying This Manual, Prev: Using Parted, Up: Top
+
+3 Related information
+*********************
+
+If you want to find out more information, please see the GNU Parted web
+site.
+
+ These files in the Parted distribution contain further information:
+
+ * 'ABOUT-NLS' - information about using Native Language Support, and
+ the Free Translation Project.
+
+ * 'AUTHORS' - who wrote what.
+
+ * 'ChangeLog' - record of changes made to Parted.
+
+ * 'COPYING' - the GNU General Public License, the terms under which
+ GNU Parted may be distributed.
+
+ * 'COPYING.DOC' - the GNU Free Documentation Licence, the term under
+ which Parted's documentation may be distributed.
+
+ * 'INSTALL' -- how to compile and install Parted, and most other free
+ software
+
+
+File: parted.info, Node: Copying This Manual, Next: History, Prev: Related information, Up: Top
+
+Appendix A Copying This Manual
+******************************
+
+* Menu:
+
+* GNU Free Documentation License:: License for copying this manual
+
+
+File: parted.info, Node: GNU Free Documentation License, Up: Copying This Manual
+
+A.1 GNU Free Documentation License
+==================================
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <https://www.gnu.org/licenses/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: parted.info, Node: History, Next: Concept index, Prev: Copying This Manual, Up: Top
+
+Appendix B This manual's history
+********************************
+
+This manual was based on the file 'USER' included in GNU Parted version
+1.4.22 source distribution. The GNU Parted source distribution is
+available at <https://ftp.gnu.org/gnu/parted>.
+
+ Initial Texinfo formatting by Richard M. Kreuter, 2002.
+
+ Maintainance by Andrew Clausen from 2002 to 2005 and by Leslie P.
+Polzer from July 2005 onwards.
+
+ This manual is distributed under the GNU Free Documentation License,
+version 1.1 or later, at your discretion, any later version published by
+the Free Software Foundation; with no Invariant Sections, with no
+Front-Cover Texts, and with no Back-Cover Texts. *Note Copying This
+Manual::, for details.
+
+
+File: parted.info, Node: Concept index, Prev: History, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* align-check, command description: align-check. (line 6)
+* bugs, reporting: Overview. (line 6)
+* building parted: Compiling. (line 6)
+* command description, align-check: align-check. (line 6)
+* command description, disk_set: disk_set. (line 6)
+* command description, disk_toggle: disk_toggle. (line 6)
+* command description, help: help. (line 6)
+* command description, mkindex: mklabel. (line 6)
+* command description, mkpart: mkpart. (line 6)
+* command description, name: name. (line 6)
+* command description, print: print. (line 6)
+* command description, quit: quit. (line 6)
+* command description, rescue: rescue. (line 6)
+* command description, resizepart: resizepart. (line 6)
+* command description, rm: rm. (line 6)
+* command description, select: select. (line 6)
+* command description, set: set. (line 6)
+* command description, toggle: toggle. (line 6)
+* command description, type: type. (line 6)
+* command description, unit: unit. (line 6)
+* command syntax: Command explanations. (line 6)
+* commands: Using Parted. (line 6)
+* commands, detailed listing: Command explanations. (line 6)
+* commands, overview: Invoking Parted. (line 6)
+* compiling parted: Compiling. (line 6)
+* contacting developers: Overview. (line 6)
+* description of parted: Overview. (line 6)
+* detailed command listing: Command explanations. (line 6)
+* disk_set, command description: disk_set. (line 6)
+* disk_toggle, command description: disk_toggle. (line 6)
+* e2fsprogs: Software Required. (line 6)
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+* further reading: Related information. (line 6)
+* gettext: Software Required. (line 6)
+* gnu gpl: License. (line 6)
+* gpl: License. (line 6)
+* help, command description: help. (line 6)
+* history of this manual: History. (line 6)
+* invocation options: Invoking Parted. (line 6)
+* libuuid: Software Required. (line 6)
+* license terms: License. (line 6)
+* mklabel, command description: mklabel. (line 6)
+* mkpart, command description: mkpart. (line 6)
+* modes of use: Running Parted. (line 6)
+* name, command description: name. (line 6)
+* options at invocation: Invoking Parted. (line 6)
+* overview: Overview. (line 6)
+* parted description: Overview. (line 6)
+* partitioning overview: Partitioning. (line 6)
+* platforms, supported: Supported Platforms. (line 6)
+* print, command description: print. (line 6)
+* quit, command description: quit. (line 6)
+* readline: Software Required. (line 6)
+* related documentation: Related information. (line 6)
+* reporting bugs: Overview. (line 6)
+* required software: Software Required. (line 6)
+* rescue, command description: rescue. (line 6)
+* resizepart, command description: resizepart. (line 6)
+* rm, command description: rm. (line 6)
+* select, command description: select. (line 6)
+* set, command description: set. (line 6)
+* software dependencies: Software Required. (line 6)
+* supported platforms: Supported Platforms. (line 6)
+* terms of distribution: License. (line 6)
+* toggle, command description: toggle. (line 6)
+* type, command description: type. (line 6)
+* unit, command description: unit. (line 6)
+
+
+
+Tag Table:
+Node: Top764
+Node: Introduction1567
+Node: Overview2023
+Node: Software Required3537
+Node: Supported Platforms4881
+Node: License5335
+Node: Compiling5939
+Node: Using Parted7208
+Node: Partitioning7627
+Node: Running Parted9265
+Node: Invoking Parted11644
+Node: Command explanations12854
+Node: align-check13355
+Node: disk_set14080
+Node: disk_toggle14788
+Node: help14995
+Node: mklabel15281
+Ref: mklabel-Footnote-116204
+Node: mkpart16334
+Ref: mkpart-Footnote-118863
+Node: name19114
+Node: print19631
+Node: quit21398
+Node: rescue21892
+Node: resizepart23966
+Node: rm24514
+Node: select25409
+Node: set25897
+Node: toggle29835
+Node: type30037
+Node: unit30674
+Ref: IEC binary units33058
+Node: Related information35151
+Node: Copying This Manual35973
+Node: GNU Free Documentation License36217
+Node: History61329
+Node: Concept index62142
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/doc/parted.texi b/doc/parted.texi
new file mode 100644
index 0000000..5d4074d
--- /dev/null
+++ b/doc/parted.texi
@@ -0,0 +1,1267 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename parted.info
+@settitle Parted User's Manual
+@include version.texi
+@paragraphindent 2
+@c %**end of header
+
+@ifinfo
+This file documents the use of GNU Parted, a program for creating
+and manipulating partition tables.
+@end ifinfo
+
+@ifnottex @c texi2pdf don't understand copying and insertcopying ???
+@c modifications must also be done in the titlepage
+@copying
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end copying
+@c WTF does the info get the copying output and the plaintext output not ????
+@ifplaintext
+@insertcopying
+@end ifplaintext
+@end ifnottex
+
+@dircategory System administration
+@direntry
+* parted: (parted). GNU partitioning software
+@end direntry
+
+@titlepage
+@title GNU Parted User Manual
+@subtitle GNU Parted, version @value{VERSION}, @value{UPDATED}
+@author Andrew Clausen @email{clausen@@gnu.org}
+@author Richard M. Kreuter @email{kreuter@@anduril.rutgers.edu}
+@author Leslie Patrick Polzer @email{polzer@@gnu.org}
+
+
+@c @page
+@c @vskip 0pt plus 1filll
+
+@c modifications must also be done in the copying block
+Copyright @copyright{} 1999--2023 Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts. A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end titlepage
+
+@ifnottex
+@node Top
+@top GNU Parted User Manual
+
+@c WTF doesn't texi2html include the titlepage?
+@ifhtml
+@insertcopying
+@end ifhtml
+
+This file documents the use of GNU Parted, a program for creating
+and manipulating partition tables.
+
+This document applies roughly to version @strong{@value{VERSION}} of GNU Parted.
+
+The original version was written by Andrew Clausen in text format.
+Richard M. Kreuter translated it into Texinfo format in 2002, to be heavily
+edited by Leslie P. Polzer in 2006.
+@end ifnottex
+
+@shortcontents
+
+@menu
+* Introduction:: Overview
+* Using Parted:: Partitioning a Hard Drive
+* Related information:: Further reading on related topics
+* Copying This Manual:: How to make copies of this manual
+* History:: This manual's history
+* Concept index:: Concept index
+@end menu
+
+@node Introduction
+@chapter Introduction
+
+@menu
+* Overview:: GNU Parted and prerequisite knowledge
+* Software Required:: GNU Parted's software dependencies
+* Supported Platforms:: Where you can use GNU Parted
+* License:: What you may and may not do with GNU Parted
+* Compiling:: How to build GNU Parted
+@end menu
+
+@node Overview
+@section Overview of GNU Parted
+@cindex description of parted
+@cindex overview
+@cindex parted description
+@cindex bugs, reporting
+@cindex reporting bugs
+@cindex contacting developers
+
+GNU Parted is a program for creating and manipulating partition tables.
+
+This documentation is written with the assumption that the reader
+has some understanding of partitioning and file systems.
+
+GNU Parted was designed to minimize the chance of data loss. For
+example, it was designed to avoid data loss during interruptions (like
+power failure) and performs many safety checks. However, there could
+be bugs in GNU Parted, so you should back up your important files before
+running Parted.
+
+The GNU Parted homepage is @uref{https://www.gnu.org/software/parted}. The
+library and frontend themselves can be downloaded from
+@uref{https://ftp.gnu.org/gnu/parted}.
+You can also find a listing of mailing lists, notes for contributing and
+more useful information on the web site.
+
+Please send bug reports to @email{bug-parted@@gnu.org}. When sending bug
+reports, please include the version of GNU Parted.
+Please include the output from these commands (for disk @file{/dev/hda}):
+
+@example
+@group
+# @kbd{parted /dev/hda unit s print free}
+@end group
+@end example
+
+Feel free to ask for help on this list --- just check that your question
+isn't answered here first. If you don't understand the documentation,
+please tell us, so we can explain it better. General philosophy is:
+if you need to ask for help, then something needs to be fixed so you
+(and others) don't need to ask for help.
+
+Also, we'd love to hear your ideas :-)
+
+@node Software Required
+@section Software Required for the use of Parted
+@cindex software dependencies
+@cindex required software
+@cindex libuuid
+@cindex e2fsprogs
+@cindex readline
+@cindex gettext
+
+If you're installing or compiling Parted yourself, you'll need to
+have some other programs installed. If you are compiling Parted,
+you will need both the normal and devel packages of these programs
+installed:
+
+@itemize @bullet
+
+@item GNU parted source is available either as a source tarball:
+
+ @uref{https://git.savannah.gnu.org/gitweb/?p=parted.git}
+
+or using git (See the README-hacking instructions):
+
+ @uref{https://git.savannah.gnu.org/gitweb/?p=parted.git}
+
+@item libuuid, part of the e2fsprogs package. If you don't have this,
+you can get it from:
+
+ @uref{http://web.mit.edu/tytso/www/linux/e2fsprogs.html}
+
+If you want to compile Parted and e2fsprogs, note that you will need to
+@kbd{make install} and @kbd{make install-libs} e2fsprogs.
+
+@item GNU Readline (optional), available from
+
+ @uref{https://ftp.gnu.org/gnu/readline}
+
+If you are compiling Parted, and you don't have readline, you can
+disable Parted's readline support with the @kbd{--disable-readline}
+option for @command{configure}.
+
+@item GNU gettext (or compatible software) for compilation, if
+internationalisation support is desired.
+
+ @uref{https://ftp.gnu.org/gnu/gettext}
+
+@end itemize
+
+@node Supported Platforms
+@section Platforms on which GNU Parted runs
+@cindex supported platforms
+@cindex platforms, supported
+
+Hopefully, this list will grow a lot. If you do not have one of these
+platforms, then you can use a rescue disk and a static binary of GNU Parted.
+
+@table @asis
+@item GNU/Linux
+Linux versions 2.0 and up, on Alpha, x86 PCs, PC98, Macintosh PowerPC, Sun hardware.
+
+@item GNU/Hurd
+@end table
+
+@node License
+@section Terms of distribution for GNU Parted
+@cindex license terms
+@cindex terms of distribution
+@cindex gnu gpl
+@cindex gpl
+
+GNU Parted is free software, covered by the GNU General Public License
+Version 3, or (at your option) any later version. This should have been
+included with the Parted distribution, in the COPYING file. If not,
+see <http://www.gnu.org/licenses/>.
+
+Libparted is considered part of GNU Parted. It is covered by the GNU
+General Public License. It is NOT released under the GNU Lesser General
+Public License (LGPL).
+
+@node Compiling
+@section Building GNU Parted
+@cindex compiling parted
+@cindex building parted
+
+If you want to compile GNU Parted, this is generally done with:
+
+@example
+@group
+$ @kbd{./configure}
+$ @kbd{make}
+@end group
+@end example
+
+However, there are a few options for @command{configure}:
+
+@table @code
+@item --without-readline
+turns off use of readline. This is useful for making rescue disks,
+etc., where few libraries are available.
+
+@item --disable-debug
+don't include assertions
+
+@item --disable-nls
+turns off native language support. This is useful for use with old
+versions of glibc, or a trimmed down version of glibc suitable for
+rescue disks.
+
+@item --disable-shared
+turns off shared libraries. This may be necessary for use with old
+versions of GNU libc, if you get a compile error about a ``spilled
+register''. Also useful for boot/rescue disks.
+
+@item --enable-discover-only
+support only reading/probing (reduces size considerably)
+
+@item --enable-mtrace
+enable malloc() debugging
+
+@item --enable-read-only
+disable writing (for debugging)
+
+@end table
+
+@subsection Introduction
+If you want to run GNU Parted on a machine without GNU/Linux installed,
+or you want to modify a root or boot partition, use GParted Live:
+@uref{https://gparted.org/livecd.php}.
+
+@node Using Parted
+@chapter Using Parted
+@cindex commands
+
+@menu
+* Partitioning:: Disk partitioning in context
+* Running Parted:: Partitioning with Parted
+* Invoking Parted:: Parted's invocation options and commands
+* Command explanations:: Full explanation of parted's commands
+@end menu
+
+@node Partitioning
+@section Introduction to Partitioning
+@cindex partitioning overview
+
+Partitioning is the process of dividing a storage device into local
+sections, called partitions, which help organize multiple filesystems
+and their associated operating systems.
+
+A storage device presents itself as a sequence of bytes, numbered
+starting from zero and increasing until the maximum capacity of the
+device is reached. Bytes are normally read and written a sector at a
+time, rather than individually. Each sector contains a fixed number
+of bytes, with the number determined by the device.
+
+@example
++------------------------------------------------------------+
+| storage device with no partitions |
++------------------------------------------------------------+
+0 start end
+@end example
+
+In order to store multiple filesystems, a storage device can be divided
+up in to multiple partitions. Each partition can be thought of as an
+area which contains a real filesystem inside of it. To show where these
+partitions are on the device a small table is written at the start,
+shown as PT in the diagram below. This table is called a partition
+table, or disklabel, and also stores the type of each partition and
+some flags.
+
+@example
++--+---------------+----------------+------------------------+
+|PT| Partition 1 | Partition 2 | Partition 3 |
++--+---------------+----------------+------------------------+
+0 start end
+@end example
+
+
+@node Running Parted
+@section Using GNU Parted
+@cindex modes of use
+
+Parted has two modes: command line and interactive. Parted should
+always be started with:
+
+@example
+# @kbd{parted @var{device}}
+@end example
+
+@noindent where @var{device} is the hard disk device to edit. (If you're
+lazy and omit the DEVICE argument, Parted will attempt to guess which
+device you want.)
+
+In command line mode, this is followed by one or more commands. For
+example:
+
+@example
+# @kbd{parted /dev/sda mklabel gpt mkpart P1 ext3 1MiB 8MiB }
+@end example
+
+@noindent Options (like @kbd{--help}) can only be specified on the
+command line.
+
+In interactive mode, commands are entered one at a time at a prompt, and
+modify the disk immediately. For example:
+
+@example
+(parted) @kbd{mklabel gpt}
+(parted) @kbd{mkpart P1 ext3 1MiB 8MiB }
+@end example
+
+@noindent Unambiguous abbreviations are allowed. For example, you can
+type ``p'' instead of ``print'', and ``u'' instead of ``units''.
+Commands can be typed either in English, or your native language (if
+your language has been translated). This may create ambiguities.
+Commands are case-insensitive.
+
+Numbers indicating partition locations can be whole numbers or decimals.
+The suffix selects the unit, which may be one of those described in
+@ref{unit}, except CHS and compact. If no suffix is given, then the default
+unit is assumed. Negative numbers count back from the end of the disk,
+with ``-1s'' indicating the sector at the end of the disk.
+Parted will compute sensible
+ranges for the locations you specify (e.g. a range of +/- 500 MB when you
+specify the location in ``G''). Use the sector unit ``s'' to specify exact
+locations. With parted-2.4 and newer,
+IEC binary units like ``MiB'', ``GiB'', ``TiB'', etc., specify
+exact locations as well.
+@xref{IEC binary units}.
+
+If you don't give a parameter to a command, Parted will prompt you for it.
+For example:
+
+@example
+(parted) @kbd{mklabel}
+New disk label type? @kbd{gpt}
+@end example
+
+Parted will always warn you before doing something that is potentially
+dangerous, unless the command is one of those that is inherently
+dangerous (viz., rm, mklabel and mkpart).
+Since many partitioning systems have complicated constraints, Parted will
+usually do something slightly different to what you asked. (For example,
+create a partition starting at 10.352Mb, not 10.4Mb)
+If the calculated values differ too much, Parted will ask you for
+confirmation.
+
+
+@node Invoking Parted
+@section Command Line Options
+@cindex options at invocation
+@cindex commands, overview
+@cindex invocation options
+
+When invoked from the command line, Parted supports the following syntax:
+
+@example
+# @kbd{parted [@var{option}] @var{device} [@var{command} [@var{argument}]]}
+@end example
+
+Available options and commands follow. For detailed explanations of the
+use of Parted commands, see @ref{Command explanations}. Options begin
+with a hyphen, commands do not:
+
+Options:
+
+@table @samp
+@item -h
+@itemx --help
+display a help message
+
+@item -l
+@itemx --list
+lists partition layout on all block devices
+
+@item -m
+@itemx --machine
+display output in machine parseable format
+
+@item -j
+@itemx --json
+display output in JSON format
+
+@item -s
+@itemx --script
+never prompt the user
+
+@item -f
+@itemx --fix
+automatically answer exceptions with "fix" in script mode, which is useful for:
+GPT header not including full disk size; moving the backup GPT table to the end of the disk;
+MAC fix missing partition map entry; etc.
+
+@item -a alignment-type
+@itemx --align alignment-type
+Set alignment for newly created partitions, valid alignment types are:
+none, cylinder, minimal and optimal.
+
+@item -v
+@itemx --version
+display the version
+@end table
+
+@node Command explanations
+@section Parted Session Commands
+@cindex command syntax
+@cindex detailed command listing
+@cindex commands, detailed listing
+
+GNU Parted provides the following commands:
+
+@menu
+* align-check::
+* disk_set::
+* disk_toggle::
+* help::
+* mklabel::
+* mkpart::
+* name::
+* print::
+* quit::
+* rescue::
+* resizepart::
+* rm::
+* select::
+* set::
+* toggle::
+* type::
+* unit::
+@end menu
+
+Note that after version 2.4, the following commands were removed:
+check, cp, mkfs, mkpartfs, move, resize.
+
+@node align-check
+@subsection align-check
+@cindex align-check, command description
+@cindex command description, align-check
+
+@deffn Command align-check @var{align-type} @var{n}
+
+Determine whether the starting sector of partition @var{n}
+meets the disk's selected alignment criteria.
+@var{align-type} must be @samp{minimal}, @samp{optimal}
+or an abbreviation.
+When in script mode, if the partition does not meet the alignment
+requirement, exit with status 1; otherwise (including on older
+kernels for which alignment data is not available), continue processing
+any remaining commands.
+Without @option{--script}, print either @samp{@var{N} aligned}
+or @samp{@var{N} not aligned}.
+
+Example:
+
+@example
+(parted) @kbd{align-check minimal 1}
+1 aligned
+@end example
+
+@end deffn
+
+@node disk_set
+@subsection disk_set
+@cindex disk_set, command description
+@cindex command description, disk_set
+
+@deffn Command disk_set @var{flag} @var{state}
+
+Changes a flag on the disk. A flag can be either ``on'' or ``off''.
+Some or all of these flags will be available, depending on what disk
+label you are using:
+
+@table @samp
+
+@item pmbr_boot
+(GPT) - this flag enables the boot flag on the GPT's protective MBR
+partition.
+
+@end table
+
+The disk's flags are displayed by the print command on the "Disk Flags:"
+line. They are also output as the last field of the disk information
+in machine mode.
+
+@example
+(parted) @kbd{disk_set pmbr_boot on}
+@end example
+
+Set the PMBR's boot flag.
+@end deffn
+
+@node disk_toggle
+@subsection disk_toggle
+@cindex disk_toggle, command description
+@cindex command description, disk_toggle
+
+@deffn Command disk_toggle @var{flag}
+
+Toggle the state of the disk flag.
+@end deffn
+
+@node help
+@subsection help
+@cindex help, command description
+@cindex command description, help
+
+@deffn Command help [@var{command}]
+
+Prints general help, or help on @var{command}.
+
+Example:
+
+@example
+(parted) @kbd{help mklabel}
+@end example
+
+Print help for the mklabel command.
+@end deffn
+
+@node mklabel
+@subsection mklabel
+@cindex mklabel, command description
+@cindex command description, mkindex
+
+@deffn Command mklabel @var{label-type}
+
+Creates a new disk label, of type @var{label-type}. The new disk label
+will have no partitions. This command (normally) won't technically
+destroy your data, but it will make it basically unusable,
+and you will need to use the rescue command (@pxref{Related information})
+to recover any partitions.
+Parted works on all partition tables. @footnote{Everyone seems to
+have a different word for ``disk label'' --- these are all the same
+thing: partition table, partition map.}
+
+@var{label-type} must be one of these supported disk labels:
+@itemize @bullet
+@item aix
+@item amiga
+@item bsd
+@item dvh
+@item gpt
+@item loop (raw disk access)
+@item mac
+@item msdos
+@item pc98
+@item sun
+@end itemize
+
+Example:
+
+@example
+(parted) @kbd{mklabel msdos}
+@end example
+
+Create an MS-DOS disk label. This is still the most common disk label for
+PCs.
+@end deffn
+
+@node mkpart
+@subsection mkpart
+@cindex mkpart, command description
+@cindex command description, mkpart
+
+@deffn Command mkpart [@var{part-type} @var{name} @var{fs-type}] @var{start} @var{end}
+
+Creates a new partition, @emph{without} creating a new file system on
+that partition. This is useful for creating partitions for file systems
+(or LVM, etc.) that Parted doesn't support. You may specify a file
+system type, to set the appropriate partition code in the partition
+table for the new partition. @var{fs-type} is required for data
+partitions (i.e., non-extended partitions). @var{start} and @var{end}
+are the offset from the beginning of the disk, that is, the ``distance''
+from the start of the disk.
+
+@var{part-type} is one of @samp{primary}, @samp{extended} or @samp{logical},
+and may be specified only with @samp{msdos} or @samp{dvh} partition tables.
+A @var{name} must be specified for a @samp{gpt} partition table.
+Neither @var{part-type} nor @var{name} may be used with a @samp{sun}
+partition table.
+
+@var{fs-type} must be one of these supported file systems:
+@itemize @bullet
+@item btrfs
+@item ext2, ext3, ext4
+@item fat16, fat32
+@item hfs, hfs+, hfsx
+@item hp-ufs
+@item jfs
+@item linux-swap, linux-swap(new,old,v0,v1)
+@item nilfs2
+@item ntfs
+@item reiserfs
+@item sun-ufs
+@item ufs
+@item xfs
+@end itemize
+
+For example, the following creates a logical partition that will contain
+an ext2 file system. The partition will start at the beginning of the disk,
+and end 692.1 megabytes into the disk.
+
+@example
+(parted) @kbd{mkpart logical 0.0 692.1}
+@end example
+
+Now, we will show how to partition a low-end flash
+device (``low-end'', as of 2011/2012).
+For such devices, you should use 4MiB-aligned partitions@footnote{
+Cheap flash drives will be with us for a long time to
+come, and, for them, 1MiB alignment is not enough.
+Use at least 4MiB-aligned partitions.
+For details, see Arnd Bergman's article,
+@uref{http://lwn.net/Articles/428584/} and its many comments.}.
+This command creates a tiny place-holder partition at the beginning, and
+then uses all remaining space to create the partition you'll actually use:
+
+@example
+$ @kbd{parted -s /dev/sdX -- mklabel msdos \}
+@kbd{ mkpart primary fat32 64s 4MiB \}
+@kbd{ mkpart primary fat32 4MiB -1s}
+@end example
+
+Note the use of @samp{--}, to prevent the following @samp{-1s} last-sector
+indicator from being interpreted as an invalid command-line option.
+The above creates two empty partitions. The first is unaligned and tiny,
+with length less than 4MiB.
+The second partition starts precisely at the 4MiB mark
+and extends to the end of the device.
+
+The next step is typically to create a file system in the second partition:
+
+@example
+$ @kbd{mkfs.vfat /dev/sdX2}
+@end example
+
+
+@end deffn
+
+@node name
+@subsection name
+@cindex name, command description
+@cindex command description, name
+
+@deffn Command name @var{number} @var{name}
+
+Sets the name for the partition @var{number} (GPT, Mac, MIPS and PC98 only).
+The name can be placed in quotes. And depending on the shell may need to also
+be wrapped in single quotes so that the shell doesn't strip off the double
+quotes.
+
+Example:
+
+@example
+(parted) @kbd{name 2 'Secret Documents'}
+@end example
+
+Set the name of partition 2 to `Secret Documents'.
+@end deffn
+
+@node print
+@subsection print
+@cindex print, command description
+@cindex command description, print
+
+@deffn Command print [@var{print-type}]
+
+Displays the partition table on the device parted is editing, or
+detailed information about a particular partition.
+
+@var{print-type} is optional, and can be one of @samp{devices},
+@samp{free}, @samp{list}, or @samp{all}.
+
+@table @code
+
+@item devices
+display all active block devices
+
+@item free
+display information about free unpartitioned space on the current block device
+
+@item list, all
+display the partition tables of all active block devices
+
+@end table
+
+Example:
+
+@example
+@group
+(parted) @kbd{print}
+Model: ATA Samsung SSD 850 (scsi)
+Disk /dev/sda: 2684MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext2 lba
+ 3 2300MB 2500MB 200MB primary linux-swap(v1) lba
+(parted) @kbd{print free}
+Model: ATA Samsung SSD 850 (scsi)
+Disk /dev/sda: 2684MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 16.4kB 1049kB 1032kB Free Space
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext2 lba
+ 3 2300MB 2500MB 200MB primary linux-swap(v1) lba
+ 2500MB 2684MB 185MB Free Space
+
+@end group
+@end example
+@end deffn
+
+@node quit
+@subsection quit
+@cindex quit, command description
+@cindex command description, quit
+
+@deffn Command quit
+
+Quits Parted.
+
+@c RMK: generality: the following will apply to any operating system on
+@c which parted will run, not only Linux-based ones.
+@c clausen: yeah... just that the way hurd and linux work are totally
+@c different, and it's actually very hard to speak in general. Need to
+@c discuss this more
+It is only after Parted exits that the Linux kernel knows about the changes
+Parted has made to the disks. However, the changes caused by typing your
+commands will @emph{probably} be made to the disk immediately after typing a
+command. However, the operating system's cache and the disk's hardware cache
+may delay this.
+@end deffn
+
+@node rescue
+@subsection rescue
+@cindex rescue, command description
+@cindex command description, rescue
+
+@deffn Command rescue @var{start} @var{end}
+Rescue a lost partition that used to be located approximately between
+@var{start} and @var{end}. If such a partition is found, Parted will
+ask you if you want to create a partition for it. This is useful if you
+accidentally deleted a partition with parted's rm command, for example.
+
+Example:
+
+@example
+(parted) @kbd{print}
+@group
+Model: ATA Samsung SSD 850 (scsi)
+Disk /dev/sda: 2684MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext4 lba
+@end group
+(parted) @kbd{rm}
+Partition number? 2
+(parted) @kbd{print}
+@group
+Model: ATA Samsung SSD 850 (scsi)
+Disk /dev/sda: 2684MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+@end group
+@end example
+
+OUCH! We deleted our ext4 partition!!! Parted comes to the rescue...
+
+@example
+(parted) @kbd{rescue}
+Start? 1000
+End? 2684
+Information: A ext4 primary partition was found at 1000MB ->
+2300MB. Do you want to add it to the partition table?
+Yes/No/Cancel? @kbd{y}
+(parted) @kbd{print}
+@group
+Model: ATA Samsung SSD 850 (scsi)
+Disk /dev/sda: 2684MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 1000MB 999MB primary boot, lba
+ 2 1000MB 2300MB 1299MB primary ext4 lba
+@end group
+@end example
+
+It's back! :)
+
+@end deffn
+
+@node resizepart
+@subsection resizepart
+@cindex resizepart, command description
+@cindex command description, resizepart
+
+@deffn Command resizepart @var{number} @var{end}
+
+Moves the @var{end} position of partition @var{number}. Note that this
+does not modify any filesystem present in the partition. If you wish to
+do this, you will need to use external tools, such as @command{resize2fs}.
+
+When growing a partition you will want to grow the filesystem afterwards,
+but when shrinking, you need to shrink the filesystem before the partition.
+@end deffn
+
+@node rm
+@subsection rm
+@cindex rm, command description
+@cindex command description, rm
+
+
+@deffn Command rm @var{number}
+
+Removes the partition with number @var{number}. If you accidentally delete
+a partition with this command, use @pxref{rescue} to
+recover it. Also, you can use the gpart program (@pxref{Related information})
+to recover damaged disk labels.
+
+Note for msdos disk labels: if you delete a logical partition, all
+logical partitions with a larger partition number will be renumbered. For
+example, if you delete a logical partition with a partition number of 6,
+then logical partitions that were number 7, 8 and 9 would be renumbered
+to 6, 7 and 8 respectively. This means, for example, that you have to
+update @file{/etc/fstab} on GNU/Linux systems.
+
+Example:
+
+@example
+(parted) @kbd{rm 3}
+@end example
+
+Remove partition 3.
+@end deffn
+
+@node select
+@subsection select
+@cindex select, command description
+@cindex command description, select
+
+@deffn Command select @var{device}
+
+Selects the device, @var{device}, for Parted to edit. The device can
+be a Linux hard disk device, a partition, a software RAID device,
+LVM logical volume, or disk image file.
+
+Example:
+
+@example
+(parted) @kbd{select /dev/hdb}
+@end example
+
+Select @file{/dev/hdb} (the slave device on the first ide controller on
+Linux) as the device to edit.
+@end deffn
+
+@node set
+@subsection set
+@cindex set, command description
+@cindex command description, set
+
+@deffn Command set @var{number} @var{flag} @var{state}
+
+Changes a flag on the partition with number @var{number}. A flag can be
+either ``on'' or ``off''. Some or all of these flags will be available,
+depending on what disk label you are using:
+
+@table @samp
+
+@item bios_grub
+(GPT) - Enable this to record that the selected partition is a
+GRUB BIOS partition.
+
+@item legacy_boot
+(GPT) - this flag is used to tell special purpose software that the GPT
+partition may be bootable.
+
+@item bls_boot
+(MS-DOS, GPT) - Enable this to indicate that the selected partition is a
+Linux Boot Loader Specification compatible /boot partition.
+
+@item boot
+(Mac, MS-DOS, PC98) - should be enabled if you want to boot off the
+partition. The semantics vary between disk labels. For MS-DOS disk
+labels, only one partition can be bootable. If you are installing LILO
+on a partition that partition must be bootable.
+For PC98 disk labels, all ext2 partitions must be bootable (this is
+enforced by Parted).
+
+@item msftdata
+(GPT) - This flag identifies partitions that contain Microsoft filesystems
+(NTFS or FAT). It may optionally be set on Linux filesystems to mimic the
+type of configuration created by parted 3.0 and earlier, in which a
+separate Linux filesystem type code was not available on GPT disks. This
+flag can only be removed within parted by replacing it with a competing
+flag, such as boot or msftres.
+
+@item msftres
+(MS-DOS,GPT) - This flag identifies a "Microsoft Reserved" partition, which
+is used by Windows. Note that this flag should not normally be
+set on Windows filesystem partitions (those that contain NTFS or FAT
+filesystems).
+
+@item irst
+(MS-DOS, GPT) - this flag identifies an Intel Rapid Start Technology
+partition.
+
+@item esp
+(MS-DOS, GPT) - this flag identifies a UEFI System Partition. On GPT
+it is an alias for boot.
+
+@item chromeos_kernel
+(GPT) - this flag indicates a partition that can be used with the Chrome OS
+bootloader and verified boot implementation.
+
+@item lba
+(MS-DOS) - this flag can be enabled to tell MS DOS, MS Windows 9x and
+MS Windows ME based operating systems to use Linear (LBA) mode.
+
+@item root
+(Mac) - this flag should be enabled if the partition is the root device
+to be used by Linux.
+
+@item linux-home
+(GPT) - Enable this to indicate that the selected partition is a
+Linux /home partition.
+
+@item swap
+(MS-DOS, GPT, Mac) - this flag should be enabled if the partition is the
+swap device to be used by Linux.
+
+@item hidden
+(MS-DOS, PC98) - this flag can be enabled to hide partitions from
+Microsoft operating systems.
+
+@item raid
+(MS-DOS) - this flag can be enabled to tell linux the partition is a
+software RAID partition.
+
+@item LVM
+(MS-DOS) - this flag can be enabled to tell linux the partition is a
+physical volume.
+
+@item PALO
+(MS-DOS) - this flag can be enabled so that the partition can be used
+by the Linux/PA-RISC boot loader, palo.
+
+@item PREP
+(MS-DOS, GPT) - this flag can be enabled so that the partition can be used
+as a PReP boot partition on PowerPC PReP or IBM RS6K/CHRP hardware.
+
+@item DIAG
+(MS-DOS) - Enable this to indicate that a partition can be used
+as a diagnostics / recovery partition.
+
+@end table
+
+The print command displays all enabled flags for each partition.
+
+Example:
+
+@example
+(parted) @kbd{set 1 boot on}
+@end example
+
+Set the @samp{boot} flag on partition 1.
+@end deffn
+
+@node toggle
+@subsection toggle
+@cindex toggle, command description
+@cindex command description, toggle
+
+@deffn Command toggle @var{number} @var{flag}
+
+Toggle the state of @var{flag} on partition @var{number}.
+
+@end deffn
+
+@node type
+@subsection type
+@cindex type, command description
+@cindex command description, type
+
+@deffn Command type @var{number} @var{id} or @var{uuid}
+
+On MS-DOS set the type-id aka partition id to @var{id} on partition
+@var{number}. The id is a value between 0x01 and 0xff, e.g. the ID for
+Linux is 0x83. A list with some IDs is available at
+@uref{https://en.wikipedia.org/wiki/Partition_type}.
+
+On GPT set the type-uuid to @var{uuid} on partition
+@var{number}. E.g. the UUID for Linux is
+0fc63daf-8483-4772-8e79-3d69d8477de4. A list with some UUIDs is availabe
+at @uref{https://en.wikipedia.org/wiki/GUID_Partition_Table}.
+
+@end deffn
+
+@node unit
+@subsection unit
+@cindex unit, command description
+@cindex command description, unit
+
+@deffn Command unit @var{unit}
+
+Selects the current default unit that Parted will use to display
+locations and capacities on the disk and to interpret those given
+by the user if they are not suffixed by an @var{unit}.
+
+@var{unit} may be one of:
+
+@table @samp
+@item s
+sector (n bytes depending on the sector size, often 512)
+
+@item B
+byte
+
+@item KiB
+kibibyte (1024 bytes)
+
+@item MiB
+mebibyte (1048576 bytes)
+
+@item GiB
+gibibyte (1073741824 bytes)
+
+@item TiB
+tebibyte (1099511627776 bytes)
+
+@item kB
+kilobyte (1000 bytes)
+
+@item MB
+megabyte (1000000 bytes)
+
+@item GB
+gigabyte (1000000000 bytes)
+
+@item TB
+terabyte (1000000000000 bytes)
+
+@item %
+percentage of the device (between 0 and 100)
+
+@item cyl
+cylinders (related to the BIOS CHS geometry)
+
+@item chs
+cylinders, heads, sectors addressing (related to the BIOS CHS geometry)
+
+@item compact
+This is a special unit that defaults to megabytes for input, and picks a
+unit that gives a compact human readable representation for output.
+@end table
+
+The default unit apply only for the output and when no unit is
+specified after an input number. Input numbers can be followed by
+an unit (without any space or other character between them), in
+which case this unit apply instead of the default unit for this
+particular number, but CHS and cylinder units are not supported as
+a suffix. If no suffix is given, then the default unit is assumed.
+Parted will compute sensible ranges for the locations you specify
+(e.g., a range of +/- 500 MB when you specify the location in ``G'',
+and a range of +/- 500 KB when you specify the location in ``M'')
+and will select the nearest location in this range from the one you
+wrote that satisfies constraints from both the operation, the
+filesystem being worked on, the disk label, other partitions and so
+on. Use the sector unit ``s'' to specify exact locations (if they
+do not satisfy all constraints, Parted will ask you for the nearest
+solution). Note that negative numbers count back from the end of
+the disk, with ``-1s'' pointing to the last sector of the disk.
+
+@anchor{IEC binary units}
+Note that as of parted-2.4, when you specify start and/or end values
+using IEC binary units like ``MiB'', ``GiB'', ``TiB'', etc., parted
+treats those values as exact, and equivalent to the same number
+specified in bytes (i.e., with the ``B'' suffix), in that it provides
+@emph{no} ``helpful'' range of sloppiness. Contrast that with
+a partition start request of ``4GB'', which may actually resolve to
+some sector up to 500MB before or after that point.
+Thus, when creating a partition, you should prefer to specify
+units of bytes (``B''), sectors (``s''), or IEC binary units like ``MiB'',
+but not ``MB'', ``GB'', etc.
+
+Example:
+
+@example
+@group
+(parted) unit compact
+(parted) print
+Disk geometry for /dev/hda: 0kB - 123GB
+Disk label type: msdos
+Number Start End Size Type File system Flags
+1 32kB 1078MB 1077MB primary reiserfs boot
+2 1078MB 2155MB 1078MB primary linux-swap
+3 2155MB 123GB 121GB extended
+5 2155MB 7452MB 5297MB logical reiserfs
+@end group
+@group
+(parted) unit chs print
+Disk geometry for /dev/hda: 0,0,0 - 14946,225,62
+BIOS cylinder,head,sector geometry: 14946,255,63. Each cylinder
+is 8225kB.
+Disk label type: msdos
+Number Start End Type File system Flags
+1 0,1,0 130,254,62 primary reiserfs boot
+2 131,0,0 261,254,62 primary linux-swap
+3 262,0,0 14945,254,62 extended
+5 262,2,0 905,254,62 logical reiserfs
+@end group
+@group
+(parted) unit mb print
+Disk geometry for /dev/hda: 0MB - 122942MB
+Disk label type: msdos
+Number Start End Size Type File system Flags
+1 0MB 1078MB 1077MB primary reiserfs boot
+2 1078MB 2155MB 1078MB primary linux-swap
+3 2155MB 122935MB 120780MB extended
+5 2155MB 7452MB 5297MB logical reiserfs
+@end group
+@end example
+
+@end deffn
+
+@node Related information
+@chapter Related information
+@cindex further reading
+@cindex related documentation
+
+If you want to find out more information, please see the GNU Parted web site.
+
+These files in the Parted distribution contain further information:
+
+@itemize @bullet
+
+@item @kbd{ABOUT-NLS} - information about using Native Language Support, and the Free Translation Project.
+
+@item @kbd{AUTHORS} - who wrote what.
+
+@item @kbd{ChangeLog} - record of changes made to Parted.
+
+@item @kbd{COPYING} - the GNU General Public License, the terms under which GNU Parted may be distributed.
+
+@item @kbd{COPYING.DOC} - the GNU Free Documentation Licence, the term under
+which Parted's documentation may be distributed.
+
+@item @kbd{INSTALL} --- how to compile and install Parted, and most other free
+software
+
+@end itemize
+
+@node Copying This Manual
+@appendix Copying This Manual
+
+@menu
+* GNU Free Documentation License:: License for copying this manual
+@end menu
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+@cindex FDL, GNU Free Documentation License
+@include fdl.texi
+
+@node History
+@appendix This manual's history
+@cindex history of this manual
+
+This manual was based on the file @kbd{USER} included in GNU Parted version
+1.4.22 source distribution. The GNU Parted source distribution is
+available at @uref{https://ftp.gnu.org/gnu/parted}.
+
+Initial Texinfo formatting by Richard M. Kreuter, 2002.
+
+Maintainance by Andrew Clausen from 2002 to 2005 and by Leslie P. Polzer
+from July 2005 onwards.
+
+This manual is distributed under the GNU Free Documentation License,
+version 1.1 or later, at your discretion, any later version published
+by the Free Software Foundation; with no Invariant Sections, with no
+Front-Cover Texts, and with no Back-Cover Texts. @xref{Copying
+This Manual}, for details.
+
+@node Concept index
+@unnumbered Index
+@printindex cp
+
+@bye
+
+@ignore
+
+Notes by RMK:
+Notes on possible (unimplemented!) modifications:
+
+The output samples from parted's print command, fdisk's p command, etc.,
+might be made into tables (multi-column tables) to ensure spiffy formatting.
+
+I'd like to find a way to make *entry: see *synonym type references in
+the index, so, e.g., to refer people looking for Apple to Macintosh, and
+PowerPC to Macintosh, etc. Probably texinfo does this already; I dunno.
+
+Notes by Leslie:
+
+TODO:
+ - add "version" command.
+ - read through and correct.
+ - role of FreeDOS?
+
+@end ignore
diff --git a/doc/po4a.mk b/doc/po4a.mk
new file mode 100644
index 0000000..aaf4024
--- /dev/null
+++ b/doc/po4a.mk
@@ -0,0 +1,91 @@
+#
+# You must set the $(lang) variable when you include this makefile.
+#
+# You can use the $(po4a_translate_options) variable to specify additional
+# options to po4a.
+# For example: po4a_translate_options=-L KOI8-R -A KOI8-R
+#
+#
+# This makefile deals with the manpages generated from POs with po4a, and
+# should be included in an automake Makefile.am.
+#
+# The po must be named:
+# <man>.$(lang).po
+# If a man page require an addendum, you must name it:
+# <man>.$(lang).po.addendum
+# Where <man> corresponds to a filename in the C directory (which contains
+# the English man pages).
+#
+# The POs suffix is $(lang).po to allow dl10n to detect the outdated POs.
+#
+#
+# If a man page cannot be generated (it is not sufficiently translated; the
+# threshold is 80%), it won't be distributed, and the build won't fail.
+#
+
+mandir = $(mandir)/$(lang)
+
+# Inform automake that we want to install some man pages in section 1, 5
+# and 8.
+# We can't simply use:
+# dist_man_MANS = $(wildcard *.[1-9])
+# Because when Makefile.in is generated, dist_man_MANS is empty, and
+# automake do not generate the install-man targets.
+dist_man_MANS =
+
+# Override the automake's install-man target.
+# And set dist_man_MANS according to the pages that could be generated
+# when this target is called.
+install-man: dist_man_MANS = pt_BR-parted.8
+install-man: install-man1 install-man5 install-man8
+
+# For each .po, try to generate the man page
+all-local:
+ $(AM_V_GEN)for po in `ls -1 $(srcdir)/*.$(lang).po 2>/dev/null`; do \
+ $(MAKE) $$(basename $${po%.$(lang).po}); \
+ done
+
+# Remove the man pages that were generated from a .po
+clean-local:
+ $(AM_V_GEN)for po in `ls -1 $(srcdir)/*.$(lang).po 2>/dev/null`; do \
+ rm -f $$(basename $${po%.$(lang).po}); \
+ done
+
+.PHONY: updatepo
+# Update the PO in srcdir, according to the POT in C.
+# Based on the gettext po/Makefile.in.in
+updatepo:
+ $(AM_V_GEN)tmpdir=`pwd`; \
+ cd $(srcdir); \
+ for po in *.$(lang).po; do \
+ case "$$po" in '*'*) continue;; esac; \
+ pot=../C/po/$${po%$(lang).po}pot; \
+ echo "$(MSGMERGE) $$po $$pot -o $${po%po}new.po"; \
+ if $(MSGMERGE) $$po $$pot -o $$tmpdir/$${po%po}new.po; then \
+ if cmp $$po $$tmpdir/$${po%po}new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$${po%po}new.po; \
+ else \
+ if mv -f $$tmpdir/$${po%po}new.po $$po; then \
+ :; \
+ else \
+ echo "msgmerge for $$po failed: cannot move $$tmpdir/$${po%po}new.po to $$po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$po failed!" 1>&2; \
+ rm -f $$tmpdir/$${po%po}new.po; \
+ fi; \
+ msgfmt -o /dev/null --statistics $$po; \
+ done
+
+dist-hook: updatepo
+
+# Build the pages
+partprobe.8:
+ $(AM_V_GEN)for locale in pt_BR ; do \
+ po4a-translate -f man -m $(srcdir)/../C/$@ -p $@.$$locale.po -l $@ $(po4a_translate_options) ; \
+ if [ -f $(srcdir)/$@.$$locale.po.addendum ]; then \
+ po4a-translate -f man -m $(srcdir)/../C/$@ -p $@.$$locale.po -l $@ -a $(srcdir)/$@.$$locale.po.addendum $(po4a_translate_options) ; \
+ fi ; \
+ done
diff --git a/doc/pt_BR/Makefile.am b/doc/pt_BR/Makefile.am
new file mode 100644
index 0000000..d5c994d
--- /dev/null
+++ b/doc/pt_BR/Makefile.am
@@ -0,0 +1,5 @@
+## Process this file with automake to produce Makefile.in
+
+lang=pt_BR
+
+include ../po4a.mk
diff --git a/doc/pt_BR/Makefile.in b/doc/pt_BR/Makefile.in
new file mode 100644
index 0000000..d0e6c11
--- /dev/null
+++ b/doc/pt_BR/Makefile.in
@@ -0,0 +1,1885 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# You must set the $(lang) variable when you include this makefile.
+#
+# You can use the $(po4a_translate_options) variable to specify additional
+# options to po4a.
+# For example: po4a_translate_options=-L KOI8-R -A KOI8-R
+#
+#
+# This makefile deals with the manpages generated from POs with po4a, and
+# should be included in an automake Makefile.am.
+#
+# The po must be named:
+# <man>.$(lang).po
+# If a man page require an addendum, you must name it:
+# <man>.$(lang).po.addendum
+# Where <man> corresponds to a filename in the C directory (which contains
+# the English man pages).
+#
+# The POs suffix is $(lang).po to allow dl10n to detect the outdated POs.
+#
+#
+# If a man page cannot be generated (it is not sufficiently translated; the
+# threshold is 80%), it won't be distributed, and the build won't fail.
+#
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc/pt_BR
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/../po4a.mk \
+ $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = $(mandir)/$(lang)
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lang = pt_BR
+
+# Inform automake that we want to install some man pages in section 1, 5
+# and 8.
+# We can't simply use:
+# dist_man_MANS = $(wildcard *.[1-9])
+# Because when Makefile.in is generated, dist_man_MANS is empty, and
+# automake do not generate the install-man targets.
+dist_man_MANS =
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../po4a.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/pt_BR/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu doc/pt_BR/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/../po4a.mk $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+ clean-libtool clean-local cscopelist-am ctags-am dist-hook \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Override the automake's install-man target.
+# And set dist_man_MANS according to the pages that could be generated
+# when this target is called.
+install-man: dist_man_MANS = pt_BR-parted.8
+install-man: install-man1 install-man5 install-man8
+
+# For each .po, try to generate the man page
+all-local:
+ $(AM_V_GEN)for po in `ls -1 $(srcdir)/*.$(lang).po 2>/dev/null`; do \
+ $(MAKE) $$(basename $${po%.$(lang).po}); \
+ done
+
+# Remove the man pages that were generated from a .po
+clean-local:
+ $(AM_V_GEN)for po in `ls -1 $(srcdir)/*.$(lang).po 2>/dev/null`; do \
+ rm -f $$(basename $${po%.$(lang).po}); \
+ done
+
+.PHONY: updatepo
+# Update the PO in srcdir, according to the POT in C.
+# Based on the gettext po/Makefile.in.in
+updatepo:
+ $(AM_V_GEN)tmpdir=`pwd`; \
+ cd $(srcdir); \
+ for po in *.$(lang).po; do \
+ case "$$po" in '*'*) continue;; esac; \
+ pot=../C/po/$${po%$(lang).po}pot; \
+ echo "$(MSGMERGE) $$po $$pot -o $${po%po}new.po"; \
+ if $(MSGMERGE) $$po $$pot -o $$tmpdir/$${po%po}new.po; then \
+ if cmp $$po $$tmpdir/$${po%po}new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$${po%po}new.po; \
+ else \
+ if mv -f $$tmpdir/$${po%po}new.po $$po; then \
+ :; \
+ else \
+ echo "msgmerge for $$po failed: cannot move $$tmpdir/$${po%po}new.po to $$po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$po failed!" 1>&2; \
+ rm -f $$tmpdir/$${po%po}new.po; \
+ fi; \
+ msgfmt -o /dev/null --statistics $$po; \
+ done
+
+dist-hook: updatepo
+
+# Build the pages
+partprobe.8:
+ $(AM_V_GEN)for locale in pt_BR ; do \
+ po4a-translate -f man -m $(srcdir)/../C/$@ -p $@.$$locale.po -l $@ $(po4a_translate_options) ; \
+ if [ -f $(srcdir)/$@.$$locale.po.addendum ]; then \
+ po4a-translate -f man -m $(srcdir)/../C/$@ -p $@.$$locale.po -l $@ -a $(srcdir)/$@.$$locale.po.addendum $(po4a_translate_options) ; \
+ fi ; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..a554ff1
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 25 March 2023
+@set UPDATED-MONTH March 2023
+@set EDITION 3.6
+@set VERSION 3.6
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..a554ff1
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 25 March 2023
+@set UPDATED-MONTH March 2023
+@set EDITION 3.6
+@set VERSION 3.6
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..57a52d5
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = parted
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..6c80906
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,1969 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = parted
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+ check-am clean clean-generic clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ installdirs-am maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+ ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/parted/Makefile.am b/include/parted/Makefile.am
new file mode 100644
index 0000000..6f808c6
--- /dev/null
+++ b/include/parted/Makefile.am
@@ -0,0 +1,56 @@
+if COMPILE_FOR_S390
+S390_HDRS = fdasd.h vtoc.h
+else
+S390_HDRS =
+endif
+
+partedincludedir = $(includedir)/parted
+partedinclude_HEADERS = constraint.h \
+ debug.h \
+ device.h \
+ disk.h \
+ exception.h \
+ filesys.h \
+ geom.h \
+ natmath.h \
+ timer.h \
+ unit.h \
+ parted.h
+
+noinst_HEADERS = crc32.h \
+ endian.h \
+ $(S390_HDRS)
+
+BUILT_SOURCES = \
+ $(partedinclude_HEADERS) \
+ $(noinst_HEADERS) \
+ fdasd.h \
+ vtoc.h
+
+EXTRA_DIST = $(BUILT_SOURCES:%.h=%.in.h)
+
+# We use _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE internally,
+# but cannot use those in a published header, so replace each of those
+# strings with its expansion.
+# Technically, attribute const was introduced in gcc-2.95 and
+# attribute pure in 2.96, but to keep it simple, we're testing
+# for 2.96 or newer for both.
+
+hash_if = \n\#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)\n
+subst_const_attr = \
+ s/ _GL_ATTRIBUTE_CONST\b/$(hash_if) __attribute ((__const__))\n\#endif\n/
+subst_pure_attr = \
+ s/ _GL_ATTRIBUTE_PURE\b/$(hash_if) __attribute ((__pure__))\n\#endif\n/
+
+$(BUILT_SOURCES): Makefile.am
+
+%.h: %.in.h
+ $(AM_V_GEN)rm -f $@ $@-t
+ $(AM_V_at)perl -p \
+ -e '$(subst_const_attr);' \
+ -e '$(subst_pure_attr);' \
+ $< > $@-t
+ $(AM_V_at)chmod a=r $@-t
+ $(AM_V_at)mv $@-t $@
+
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
diff --git a/include/parted/Makefile.in b/include/parted/Makefile.in
new file mode 100644
index 0000000..16a4a7f
--- /dev/null
+++ b/include/parted/Makefile.in
@@ -0,0 +1,1968 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include/parted
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__noinst_HEADERS_DIST) \
+ $(partedinclude_HEADERS) $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__noinst_HEADERS_DIST = crc32.h endian.h fdasd.h vtoc.h
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(partedincludedir)"
+HEADERS = $(noinst_HEADERS) $(partedinclude_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@COMPILE_FOR_S390_FALSE@S390_HDRS =
+@COMPILE_FOR_S390_TRUE@S390_HDRS = fdasd.h vtoc.h
+partedincludedir = $(includedir)/parted
+partedinclude_HEADERS = constraint.h \
+ debug.h \
+ device.h \
+ disk.h \
+ exception.h \
+ filesys.h \
+ geom.h \
+ natmath.h \
+ timer.h \
+ unit.h \
+ parted.h
+
+noinst_HEADERS = crc32.h \
+ endian.h \
+ $(S390_HDRS)
+
+BUILT_SOURCES = \
+ $(partedinclude_HEADERS) \
+ $(noinst_HEADERS) \
+ fdasd.h \
+ vtoc.h
+
+EXTRA_DIST = $(BUILT_SOURCES:%.h=%.in.h)
+
+# We use _GL_ATTRIBUTE_CONST and _GL_ATTRIBUTE_PURE internally,
+# but cannot use those in a published header, so replace each of those
+# strings with its expansion.
+# Technically, attribute const was introduced in gcc-2.95 and
+# attribute pure in 2.96, but to keep it simple, we're testing
+# for 2.96 or newer for both.
+hash_if = \n\#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)\n
+subst_const_attr = \
+ s/ _GL_ATTRIBUTE_CONST\b/$(hash_if) __attribute ((__const__))\n\#endif\n/
+
+subst_pure_attr = \
+ s/ _GL_ATTRIBUTE_PURE\b/$(hash_if) __attribute ((__pure__))\n\#endif\n/
+
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/parted/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu include/parted/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-partedincludeHEADERS: $(partedinclude_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(partedinclude_HEADERS)'; test -n "$(partedincludedir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(partedincludedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(partedincludedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(partedincludedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(partedincludedir)" || exit $$?; \
+ done
+
+uninstall-partedincludeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(partedinclude_HEADERS)'; test -n "$(partedincludedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(partedincludedir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(partedincludedir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-partedincludeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-partedincludeHEADERS
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+ clean-libtool cscopelist-am ctags ctags-am distclean \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man \
+ install-partedincludeHEADERS install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-generic \
+ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+ uninstall-am uninstall-partedincludeHEADERS
+
+.PRECIOUS: Makefile
+
+
+$(BUILT_SOURCES): Makefile.am
+
+%.h: %.in.h
+ $(AM_V_GEN)rm -f $@ $@-t
+ $(AM_V_at)perl -p \
+ -e '$(subst_const_attr);' \
+ -e '$(subst_pure_attr);' \
+ $< > $@-t
+ $(AM_V_at)chmod a=r $@-t
+ $(AM_V_at)mv $@-t $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/parted/constraint.h b/include/parted/constraint.h
new file mode 100644
index 0000000..cfb411c
--- /dev/null
+++ b/include/parted/constraint.h
@@ -0,0 +1,101 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_CONSTRAINT_H_INCLUDED
+#define PED_CONSTRAINT_H_INCLUDED
+
+typedef struct _PedConstraint PedConstraint;
+
+#include <parted/device.h>
+#include <parted/geom.h>
+#include <parted/natmath.h>
+
+struct _PedConstraint {
+ PedAlignment* start_align;
+ PedAlignment* end_align;
+ PedGeometry* start_range;
+ PedGeometry* end_range;
+ PedSector min_size;
+ PedSector max_size;
+};
+
+extern int
+ped_constraint_init (
+ PedConstraint* constraint,
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size);
+
+extern PedConstraint*
+ped_constraint_new (
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size);
+
+extern PedConstraint*
+ped_constraint_new_from_min_max (
+ const PedGeometry* min,
+ const PedGeometry* max);
+
+extern PedConstraint*
+ped_constraint_new_from_min (const PedGeometry* min);
+
+extern PedConstraint*
+ped_constraint_new_from_max (const PedGeometry* max);
+
+extern PedConstraint*
+ped_constraint_duplicate (const PedConstraint* constraint);
+
+extern void
+ped_constraint_done (PedConstraint* constraint);
+
+extern void
+ped_constraint_destroy (PedConstraint* constraint);
+
+extern PedConstraint*
+ped_constraint_intersect (const PedConstraint* a, const PedConstraint* b);
+
+extern PedGeometry*
+ped_constraint_solve_max (const PedConstraint* constraint);
+
+extern PedGeometry*
+ped_constraint_solve_nearest (
+ const PedConstraint* constraint, const PedGeometry* geom);
+
+extern int
+ped_constraint_is_solution (const PedConstraint* constraint,
+ const PedGeometry* geom)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedConstraint*
+ped_constraint_any (const PedDevice* dev);
+
+extern PedConstraint*
+ped_constraint_exact (const PedGeometry* geom);
+
+#endif /* PED_CONSTRAINT_H_INCLUDED */
diff --git a/include/parted/constraint.in.h b/include/parted/constraint.in.h
new file mode 100644
index 0000000..1fb0079
--- /dev/null
+++ b/include/parted/constraint.in.h
@@ -0,0 +1,97 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_CONSTRAINT_H_INCLUDED
+#define PED_CONSTRAINT_H_INCLUDED
+
+typedef struct _PedConstraint PedConstraint;
+
+#include <parted/device.h>
+#include <parted/geom.h>
+#include <parted/natmath.h>
+
+struct _PedConstraint {
+ PedAlignment* start_align;
+ PedAlignment* end_align;
+ PedGeometry* start_range;
+ PedGeometry* end_range;
+ PedSector min_size;
+ PedSector max_size;
+};
+
+extern int
+ped_constraint_init (
+ PedConstraint* constraint,
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size);
+
+extern PedConstraint*
+ped_constraint_new (
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size);
+
+extern PedConstraint*
+ped_constraint_new_from_min_max (
+ const PedGeometry* min,
+ const PedGeometry* max);
+
+extern PedConstraint*
+ped_constraint_new_from_min (const PedGeometry* min);
+
+extern PedConstraint*
+ped_constraint_new_from_max (const PedGeometry* max);
+
+extern PedConstraint*
+ped_constraint_duplicate (const PedConstraint* constraint);
+
+extern void
+ped_constraint_done (PedConstraint* constraint);
+
+extern void
+ped_constraint_destroy (PedConstraint* constraint);
+
+extern PedConstraint*
+ped_constraint_intersect (const PedConstraint* a, const PedConstraint* b);
+
+extern PedGeometry*
+ped_constraint_solve_max (const PedConstraint* constraint);
+
+extern PedGeometry*
+ped_constraint_solve_nearest (
+ const PedConstraint* constraint, const PedGeometry* geom);
+
+extern int
+ped_constraint_is_solution (const PedConstraint* constraint,
+ const PedGeometry* geom) _GL_ATTRIBUTE_PURE;
+
+extern PedConstraint*
+ped_constraint_any (const PedDevice* dev);
+
+extern PedConstraint*
+ped_constraint_exact (const PedGeometry* geom);
+
+#endif /* PED_CONSTRAINT_H_INCLUDED */
diff --git a/include/parted/crc32.h b/include/parted/crc32.h
new file mode 100644
index 0000000..8c06b25
--- /dev/null
+++ b/include/parted/crc32.h
@@ -0,0 +1,39 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ crc32.h
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _CRC32_H
+#define _CRC32_H
+
+#include <stdint.h>
+
+/*
+ * This computes a 32 bit CRC of the data in the buffer, and returns the CRC.
+ * The polynomial used is 0xedb88320.
+ */
+
+extern uint32_t __efi_crc32 (const void *buf, unsigned long len,
+ uint32_t seed)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+#endif /* _CRC32_H */
diff --git a/include/parted/crc32.in.h b/include/parted/crc32.in.h
new file mode 100644
index 0000000..459db5d
--- /dev/null
+++ b/include/parted/crc32.in.h
@@ -0,0 +1,35 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ crc32.h
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _CRC32_H
+#define _CRC32_H
+
+#include <stdint.h>
+
+/*
+ * This computes a 32 bit CRC of the data in the buffer, and returns the CRC.
+ * The polynomial used is 0xedb88320.
+ */
+
+extern uint32_t __efi_crc32 (const void *buf, unsigned long len,
+ uint32_t seed) _GL_ATTRIBUTE_PURE;
+
+#endif /* _CRC32_H */
diff --git a/include/parted/debug.h b/include/parted/debug.h
new file mode 100644
index 0000000..97cd000
--- /dev/null
+++ b/include/parted/debug.h
@@ -0,0 +1,88 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_DEBUG_H_INCLUDED
+#define PED_DEBUG_H_INCLUDED
+
+#include <stdarg.h>
+
+#ifdef DEBUG
+
+typedef void (PedDebugHandler) ( const int level, const char* file, int line,
+ const char* function, const char* msg );
+
+extern void ped_debug_set_handler (PedDebugHandler* handler);
+extern void ped_debug ( const int level, const char* file, int line,
+ const char* function, const char* msg, ... );
+
+extern void __attribute__((__noreturn__))
+ped_assert ( const char* cond_text,
+ const char* file, int line, const char* function );
+
+#if defined __GNUC__ && !defined __JSFTRACE__
+
+#define PED_DEBUG(level, ...) \
+ ped_debug ( level, __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ __VA_ARGS__ )
+
+#define PED_ASSERT(cond) \
+ do { \
+ if (!(cond)) { \
+ ped_assert ( \
+ #cond, \
+ __FILE__, \
+ __LINE__, \
+ __PRETTY_FUNCTION__ ); \
+ } \
+ } while (0)
+
+#else /* !__GNUC__ */
+
+/* function because variadic macros are C99 */
+static void PED_DEBUG (int level, ...)
+{
+ va_list va_args;
+
+ va_start (va_args, level);
+ ped_debug ( level, "unknown file", 0, "unknown function", va_args );
+ va_end (va_args);
+}
+
+#define PED_ASSERT(cond) \
+ do { \
+ if (!(cond)) { \
+ ped_assert ( \
+ #cond, \
+ "unknown", \
+ 0, \
+ "unknown"); \
+ } \
+ } while (0)
+
+#endif /* __GNUC__ */
+
+#else /* !DEBUG */
+
+#define PED_ASSERT(cond) do {} while (0)
+#define PED_DEBUG(level, ...) do {} while (0)
+
+
+#endif /* DEBUG */
+
+#endif /* PED_DEBUG_H_INCLUDED */
diff --git a/include/parted/debug.in.h b/include/parted/debug.in.h
new file mode 100644
index 0000000..97cd000
--- /dev/null
+++ b/include/parted/debug.in.h
@@ -0,0 +1,88 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2000, 2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_DEBUG_H_INCLUDED
+#define PED_DEBUG_H_INCLUDED
+
+#include <stdarg.h>
+
+#ifdef DEBUG
+
+typedef void (PedDebugHandler) ( const int level, const char* file, int line,
+ const char* function, const char* msg );
+
+extern void ped_debug_set_handler (PedDebugHandler* handler);
+extern void ped_debug ( const int level, const char* file, int line,
+ const char* function, const char* msg, ... );
+
+extern void __attribute__((__noreturn__))
+ped_assert ( const char* cond_text,
+ const char* file, int line, const char* function );
+
+#if defined __GNUC__ && !defined __JSFTRACE__
+
+#define PED_DEBUG(level, ...) \
+ ped_debug ( level, __FILE__, __LINE__, __PRETTY_FUNCTION__, \
+ __VA_ARGS__ )
+
+#define PED_ASSERT(cond) \
+ do { \
+ if (!(cond)) { \
+ ped_assert ( \
+ #cond, \
+ __FILE__, \
+ __LINE__, \
+ __PRETTY_FUNCTION__ ); \
+ } \
+ } while (0)
+
+#else /* !__GNUC__ */
+
+/* function because variadic macros are C99 */
+static void PED_DEBUG (int level, ...)
+{
+ va_list va_args;
+
+ va_start (va_args, level);
+ ped_debug ( level, "unknown file", 0, "unknown function", va_args );
+ va_end (va_args);
+}
+
+#define PED_ASSERT(cond) \
+ do { \
+ if (!(cond)) { \
+ ped_assert ( \
+ #cond, \
+ "unknown", \
+ 0, \
+ "unknown"); \
+ } \
+ } while (0)
+
+#endif /* __GNUC__ */
+
+#else /* !DEBUG */
+
+#define PED_ASSERT(cond) do {} while (0)
+#define PED_DEBUG(level, ...) do {} while (0)
+
+
+#endif /* DEBUG */
+
+#endif /* PED_DEBUG_H_INCLUDED */
diff --git a/include/parted/device.h b/include/parted/device.h
new file mode 100644
index 0000000..49a4fd2
--- /dev/null
+++ b/include/parted/device.h
@@ -0,0 +1,172 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2001, 2005, 2007-2008, 2011-2014, 2019-2023 Free
+ Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedDevice
+ * @{
+ */
+
+/** \file device.h */
+
+#ifndef PED_DEVICE_H_INCLUDED
+#define PED_DEVICE_H_INCLUDED
+
+/** We can address 2^63 sectors */
+typedef long long PedSector;
+
+typedef enum {
+ PED_DEVICE_UNKNOWN = 0,
+ PED_DEVICE_SCSI = 1,
+ PED_DEVICE_IDE = 2,
+ PED_DEVICE_DAC960 = 3,
+ PED_DEVICE_CPQARRAY = 4,
+ PED_DEVICE_FILE = 5,
+ PED_DEVICE_ATARAID = 6,
+ PED_DEVICE_I2O = 7,
+ PED_DEVICE_UBD = 8,
+ PED_DEVICE_DASD = 9,
+ PED_DEVICE_VIODASD = 10,
+ PED_DEVICE_SX8 = 11,
+ PED_DEVICE_DM = 12,
+ PED_DEVICE_XVD = 13,
+ PED_DEVICE_SDMMC = 14,
+ PED_DEVICE_VIRTBLK = 15,
+ PED_DEVICE_AOE = 16,
+ PED_DEVICE_MD = 17,
+ PED_DEVICE_LOOP = 18,
+ PED_DEVICE_NVME = 19,
+ PED_DEVICE_RAM = 20,
+ PED_DEVICE_PMEM = 21
+} PedDeviceType;
+
+typedef struct _PedDevice PedDevice;
+typedef struct _PedDeviceArchOps PedDeviceArchOps;
+typedef struct _PedCHSGeometry PedCHSGeometry;
+
+/**
+ * A cylinder-head-sector "old-style" geometry.
+ *
+ * A device addressed in this way has C*H*S sectors.
+ */
+struct _PedCHSGeometry {
+ int cylinders;
+ int heads;
+ int sectors;
+};
+
+/** A block device - for example, /dev/hda, not /dev/hda3 */
+struct _PedDevice {
+ PedDevice* next;
+
+ char* model; /**< \brief description of hardware
+ (manufacturer, model) */
+ char* path; /**< device /dev entry */
+
+ PedDeviceType type; /**< SCSI, IDE, etc. \sa PedDeviceType */
+ long long sector_size; /**< logical sector size */
+ long long phys_sector_size; /**< physical sector size */
+ PedSector length; /**< device length (LBA) */
+
+ int open_count; /**< the number of times this device has
+ been opened with ped_device_open(). */
+ int read_only;
+ int external_mode;
+ int dirty;
+ int boot_dirty;
+
+ PedCHSGeometry hw_geom;
+ PedCHSGeometry bios_geom;
+ short host, did;
+
+ void* arch_specific;
+};
+
+#include <parted/natmath.h>
+
+/**
+ * List of functions implementing architecture-specific operations.
+ */
+struct _PedDeviceArchOps {
+ PedDevice* (*_new) (const char* path);
+ void (*destroy) (PedDevice* dev);
+ int (*is_busy) (PedDevice* dev);
+ int (*open) (PedDevice* dev);
+ int (*refresh_open) (PedDevice* dev);
+ int (*close) (PedDevice* dev);
+ int (*refresh_close) (PedDevice* dev);
+ int (*read) (const PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+ int (*write) (PedDevice* dev, const void* buffer,
+ PedSector start, PedSector count);
+ int (*sync) (PedDevice* dev);
+ int (*sync_fast) (PedDevice* dev);
+ PedSector (*check) (PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+ void (*probe_all) ();
+ /* These functions are optional */
+ PedAlignment *(*get_minimum_alignment)(const PedDevice *dev);
+ PedAlignment *(*get_optimum_alignment)(const PedDevice *dev);
+};
+
+#include <parted/constraint.h>
+#include <parted/timer.h>
+
+extern void ped_device_probe_all ();
+extern void ped_device_free_all ();
+
+extern PedDevice* ped_device_get (const char* name);
+extern PedDevice* ped_device_get_next (const PedDevice* dev)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_device_is_busy (PedDevice* dev);
+extern int ped_device_open (PedDevice* dev);
+extern int ped_device_close (PedDevice* dev);
+extern void ped_device_destroy (PedDevice* dev);
+extern void ped_device_cache_remove (PedDevice* dev);
+
+extern int ped_device_begin_external_access (PedDevice* dev);
+extern int ped_device_end_external_access (PedDevice* dev);
+
+extern int ped_device_read (const PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+extern int ped_device_write (PedDevice* dev, const void* buffer,
+ PedSector start, PedSector count);
+extern int ped_device_sync (PedDevice* dev);
+extern int ped_device_sync_fast (PedDevice* dev);
+extern PedSector ped_device_check (PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+extern PedConstraint* ped_device_get_constraint (const PedDevice* dev);
+
+extern PedConstraint *ped_device_get_minimal_aligned_constraint(
+ const PedDevice *dev);
+extern PedConstraint *ped_device_get_optimal_aligned_constraint(
+ const PedDevice *dev);
+
+extern PedAlignment *ped_device_get_minimum_alignment(const PedDevice *dev);
+extern PedAlignment *ped_device_get_optimum_alignment(const PedDevice *dev);
+
+/* private stuff ;-) */
+
+extern void _ped_device_probe (const char* path);
+
+#endif /* PED_DEVICE_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/device.in.h b/include/parted/device.in.h
new file mode 100644
index 0000000..bcee2dd
--- /dev/null
+++ b/include/parted/device.in.h
@@ -0,0 +1,168 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2001, 2005, 2007-2008, 2011-2014, 2019-2023 Free
+ Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedDevice
+ * @{
+ */
+
+/** \file device.h */
+
+#ifndef PED_DEVICE_H_INCLUDED
+#define PED_DEVICE_H_INCLUDED
+
+/** We can address 2^63 sectors */
+typedef long long PedSector;
+
+typedef enum {
+ PED_DEVICE_UNKNOWN = 0,
+ PED_DEVICE_SCSI = 1,
+ PED_DEVICE_IDE = 2,
+ PED_DEVICE_DAC960 = 3,
+ PED_DEVICE_CPQARRAY = 4,
+ PED_DEVICE_FILE = 5,
+ PED_DEVICE_ATARAID = 6,
+ PED_DEVICE_I2O = 7,
+ PED_DEVICE_UBD = 8,
+ PED_DEVICE_DASD = 9,
+ PED_DEVICE_VIODASD = 10,
+ PED_DEVICE_SX8 = 11,
+ PED_DEVICE_DM = 12,
+ PED_DEVICE_XVD = 13,
+ PED_DEVICE_SDMMC = 14,
+ PED_DEVICE_VIRTBLK = 15,
+ PED_DEVICE_AOE = 16,
+ PED_DEVICE_MD = 17,
+ PED_DEVICE_LOOP = 18,
+ PED_DEVICE_NVME = 19,
+ PED_DEVICE_RAM = 20,
+ PED_DEVICE_PMEM = 21
+} PedDeviceType;
+
+typedef struct _PedDevice PedDevice;
+typedef struct _PedDeviceArchOps PedDeviceArchOps;
+typedef struct _PedCHSGeometry PedCHSGeometry;
+
+/**
+ * A cylinder-head-sector "old-style" geometry.
+ *
+ * A device addressed in this way has C*H*S sectors.
+ */
+struct _PedCHSGeometry {
+ int cylinders;
+ int heads;
+ int sectors;
+};
+
+/** A block device - for example, /dev/hda, not /dev/hda3 */
+struct _PedDevice {
+ PedDevice* next;
+
+ char* model; /**< \brief description of hardware
+ (manufacturer, model) */
+ char* path; /**< device /dev entry */
+
+ PedDeviceType type; /**< SCSI, IDE, etc. \sa PedDeviceType */
+ long long sector_size; /**< logical sector size */
+ long long phys_sector_size; /**< physical sector size */
+ PedSector length; /**< device length (LBA) */
+
+ int open_count; /**< the number of times this device has
+ been opened with ped_device_open(). */
+ int read_only;
+ int external_mode;
+ int dirty;
+ int boot_dirty;
+
+ PedCHSGeometry hw_geom;
+ PedCHSGeometry bios_geom;
+ short host, did;
+
+ void* arch_specific;
+};
+
+#include <parted/natmath.h>
+
+/**
+ * List of functions implementing architecture-specific operations.
+ */
+struct _PedDeviceArchOps {
+ PedDevice* (*_new) (const char* path);
+ void (*destroy) (PedDevice* dev);
+ int (*is_busy) (PedDevice* dev);
+ int (*open) (PedDevice* dev);
+ int (*refresh_open) (PedDevice* dev);
+ int (*close) (PedDevice* dev);
+ int (*refresh_close) (PedDevice* dev);
+ int (*read) (const PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+ int (*write) (PedDevice* dev, const void* buffer,
+ PedSector start, PedSector count);
+ int (*sync) (PedDevice* dev);
+ int (*sync_fast) (PedDevice* dev);
+ PedSector (*check) (PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+ void (*probe_all) ();
+ /* These functions are optional */
+ PedAlignment *(*get_minimum_alignment)(const PedDevice *dev);
+ PedAlignment *(*get_optimum_alignment)(const PedDevice *dev);
+};
+
+#include <parted/constraint.h>
+#include <parted/timer.h>
+
+extern void ped_device_probe_all ();
+extern void ped_device_free_all ();
+
+extern PedDevice* ped_device_get (const char* name);
+extern PedDevice* ped_device_get_next (const PedDevice* dev) _GL_ATTRIBUTE_PURE;
+extern int ped_device_is_busy (PedDevice* dev);
+extern int ped_device_open (PedDevice* dev);
+extern int ped_device_close (PedDevice* dev);
+extern void ped_device_destroy (PedDevice* dev);
+extern void ped_device_cache_remove (PedDevice* dev);
+
+extern int ped_device_begin_external_access (PedDevice* dev);
+extern int ped_device_end_external_access (PedDevice* dev);
+
+extern int ped_device_read (const PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+extern int ped_device_write (PedDevice* dev, const void* buffer,
+ PedSector start, PedSector count);
+extern int ped_device_sync (PedDevice* dev);
+extern int ped_device_sync_fast (PedDevice* dev);
+extern PedSector ped_device_check (PedDevice* dev, void* buffer,
+ PedSector start, PedSector count);
+extern PedConstraint* ped_device_get_constraint (const PedDevice* dev);
+
+extern PedConstraint *ped_device_get_minimal_aligned_constraint(
+ const PedDevice *dev);
+extern PedConstraint *ped_device_get_optimal_aligned_constraint(
+ const PedDevice *dev);
+
+extern PedAlignment *ped_device_get_minimum_alignment(const PedDevice *dev);
+extern PedAlignment *ped_device_get_optimum_alignment(const PedDevice *dev);
+
+/* private stuff ;-) */
+
+extern void _ped_device_probe (const char* path);
+
+#endif /* PED_DEVICE_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/disk.h b/include/parted/disk.h
new file mode 100644
index 0000000..0b1d4b9
--- /dev/null
+++ b/include/parted/disk.h
@@ -0,0 +1,503 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2002, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+/** \file disk.h */
+
+#ifndef PED_DISK_H_INCLUDED
+#define PED_DISK_H_INCLUDED
+
+/* Include these to work around gnulib redefining free, read, etc. which causes problems
+ * with pt-common.h
+ */
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdint.h>
+
+/**
+ * Disk flags
+ */
+enum _PedDiskFlag {
+ /* This flag (which defaults to true) controls if disk types for
+ which cylinder alignment is optional do cylinder alignment when a
+ new partition gets added.
+ This flag is available for msdos and sun disklabels (for sun labels
+ it only controls the aligning of the end of the partition) */
+ PED_DISK_CYLINDER_ALIGNMENT=1,
+ /* This flag controls whether the boot flag of a GPT PMBR is set */
+ PED_DISK_GPT_PMBR_BOOT=2,
+};
+// NOTE: DO NOT define using enums
+#define PED_DISK_FIRST_FLAG 1 // PED_DISK_CYLINDER_ALIGNMENT
+#define PED_DISK_LAST_FLAG 2 // PED_DISK_GPT_PMBR_BOOT
+
+/**
+ * Partition types
+ */
+enum _PedPartitionType {
+ PED_PARTITION_NORMAL = 0x00,
+ PED_PARTITION_LOGICAL = 0x01,
+ PED_PARTITION_EXTENDED = 0x02,
+ PED_PARTITION_FREESPACE = 0x04,
+ PED_PARTITION_METADATA = 0x08,
+ PED_PARTITION_PROTECTED = 0x10
+};
+
+/**
+ * Partition flags.
+ */
+enum _PedPartitionFlag {
+ PED_PARTITION_BOOT=1,
+ PED_PARTITION_ROOT=2,
+ PED_PARTITION_SWAP=3,
+ PED_PARTITION_HIDDEN=4,
+ PED_PARTITION_RAID=5,
+ PED_PARTITION_LVM=6,
+ PED_PARTITION_LBA=7,
+ PED_PARTITION_HPSERVICE=8,
+ PED_PARTITION_PALO=9,
+ PED_PARTITION_PREP=10,
+ PED_PARTITION_MSFT_RESERVED=11,
+ PED_PARTITION_BIOS_GRUB=12,
+ PED_PARTITION_APPLE_TV_RECOVERY=13,
+ PED_PARTITION_DIAG=14,
+ PED_PARTITION_LEGACY_BOOT=15,
+ PED_PARTITION_MSFT_DATA=16,
+ PED_PARTITION_IRST=17,
+ PED_PARTITION_ESP=18,
+ PED_PARTITION_CHROMEOS_KERNEL=19,
+ PED_PARTITION_BLS_BOOT=20,
+ PED_PARTITION_LINUX_HOME=21,
+ PED_PARTITION_NO_AUTOMOUNT=22,
+};
+// NOTE: DO NOT define using enums
+#define PED_PARTITION_FIRST_FLAG 1 // PED_PARTITION_BOOT
+#define PED_PARTITION_LAST_FLAG 22 // PED_PARTITION_NO_AUTOMOUNT
+
+enum _PedDiskTypeFeature {
+ PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
+ PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */
+ PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */
+ PED_DISK_TYPE_DISK_UUID=16, /**< supports disk uuids */
+ PED_DISK_TYPE_PARTITION_UUID=32, /**< supports partition uuids */
+};
+// NOTE: DO NOT define using enums
+#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED
+#define PED_DISK_TYPE_LAST_FEATURE 32 // PED_DISK_TYPE_PARTITION_UUID
+
+struct _PedDisk;
+struct _PedPartition;
+struct _PedDiskOps;
+struct _PedDiskType;
+struct _PedDiskArchOps;
+
+typedef enum _PedDiskFlag PedDiskFlag;
+typedef enum _PedPartitionType PedPartitionType;
+typedef enum _PedPartitionFlag PedPartitionFlag;
+typedef enum _PedDiskTypeFeature PedDiskTypeFeature;
+typedef struct _PedDisk PedDisk;
+typedef struct _PedPartition PedPartition;
+typedef const struct _PedDiskOps PedDiskOps;
+typedef struct _PedDiskType PedDiskType;
+typedef const struct _PedDiskArchOps PedDiskArchOps;
+
+#include <parted/device.h>
+#include <parted/filesys.h>
+#include <parted/natmath.h>
+#include <parted/geom.h>
+#include <stdbool.h>
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+/** \file disk.h */
+
+/**
+ * PedPartition structure represents a partition.
+ */
+struct _PedPartition {
+ PedPartition* prev;
+ PedPartition* next;
+
+ /**< the partition table of the partition */
+ PedDisk* disk;
+ PedGeometry geom; /**< geometry of the partition */
+
+ /**< the partition number: In Linux, this is the
+ same as the minor number. No assumption
+ should be made about "num" and "type"
+ - different disk labels have different rules. */
+
+ int num;
+ PedPartitionType type; /**< the type of partition: a bit field of
+ PED_PARTITION_LOGICAL, PED_PARTITION_EXTENDED,
+ PED_PARTITION_METADATA
+ and PED_PARTITION_FREESPACE.
+ Both the first two, and the last two are
+ mutually exclusive.
+ An extended partition is a primary
+ partition that may contain logical partitions.
+ There is at most one extended partition on
+ a disk.
+ A logical partition is like a primary
+ partition, except it's inside an extended
+ partition. Internally, pseudo partitions are
+ allocated to represent free space, or disk
+ label meta-data. These have the
+ PED_PARTITION_FREESPACE or
+ PED_PARTITION_METADATA bit set. */
+
+ /**< The type of file system on the partition. NULL if unknown. */
+ const PedFileSystemType* fs_type;
+
+ /**< Only used for an extended partition. The list of logical
+ partitions (and free space and metadata within the extended
+ partition). */
+ PedPartition* part_list;
+
+ void* disk_specific;
+};
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+/**
+ * Represents a disk label (partition table).
+ */
+struct _PedDisk {
+ PedDevice* dev; /**< the device where the
+ partition table lies */
+ const PedDiskType* type; /**< type of disk label */
+ const int* block_sizes; /**< block sizes supported
+ by this label */
+ PedPartition* part_list; /**< list of partitions. Access with
+ ped_disk_next_partition() */
+
+ void* disk_specific;
+
+/* office use only ;-) */
+ int needs_clobber; /**< clobber before write? */
+ int update_mode; /**< mode without free/metadata
+ partitions, for easier
+ update */
+};
+
+struct _PedDiskOps {
+ /* disk label operations */
+ int (*probe) (const PedDevice *dev);
+ int (*clobber) (PedDevice* dev);
+ PedDisk* (*alloc) (const PedDevice* dev);
+ PedDisk* (*duplicate) (const PedDisk* disk);
+ void (*free) (PedDisk* disk);
+ int (*read) (PedDisk* disk);
+ int (*write) (const PedDisk* disk);
+ int (*disk_set_flag) (
+ PedDisk *disk,
+ PedDiskFlag flag,
+ int state);
+ int (*disk_get_flag) (
+ const PedDisk *disk,
+ PedDiskFlag flag);
+ int (*disk_is_flag_available) (
+ const PedDisk *disk,
+ PedDiskFlag flag);
+ uint8_t* (*disk_get_uuid) (const PedDisk* disk);
+ /** \todo add label guessing op here */
+
+ /* partition operations */
+ PedPartition* (*partition_new) (
+ const PedDisk* disk,
+ PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+ PedPartition* (*partition_duplicate) (const PedPartition* part);
+ void (*partition_destroy) (PedPartition* part);
+ int (*partition_set_system) (PedPartition* part,
+ const PedFileSystemType* fs_type);
+ int (*partition_set_flag) (
+ PedPartition* part,
+ PedPartitionFlag flag,
+ int state);
+ int (*partition_get_flag) (
+ const PedPartition* part,
+ PedPartitionFlag flag);
+ int (*partition_is_flag_available) (
+ const PedPartition* part,
+ PedPartitionFlag flag);
+ void (*partition_set_name) (PedPartition* part, const char* name);
+ const char* (*partition_get_name) (const PedPartition* part);
+
+ int (*partition_set_type_id) (PedPartition* part, uint8_t id);
+ uint8_t (*partition_get_type_id) (const PedPartition* part);
+
+ int (*partition_set_type_uuid) (PedPartition* part, const uint8_t* uuid);
+ uint8_t* (*partition_get_type_uuid) (const PedPartition* part);
+
+ uint8_t* (*partition_get_uuid) (const PedPartition* part);
+
+ int (*partition_align) (PedPartition* part,
+ const PedConstraint* constraint);
+ int (*partition_enumerate) (PedPartition* part);
+ bool (*partition_check) (const PedPartition* part);
+
+ /* other */
+ int (*alloc_metadata) (PedDisk* disk);
+ int (*get_max_primary_partition_count) (const PedDisk* disk);
+ bool (*get_max_supported_partition_count) (const PedDisk* disk,
+ int* supported);
+ PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
+ PedSector (*max_length) (void);
+ PedSector (*max_start_sector) (void);
+};
+
+struct _PedDiskType {
+ PedDiskType* next;
+ const char* name; /**< the name of the partition table type.
+ \todo not very intuitive name */
+ PedDiskOps* const ops;
+
+ PedDiskTypeFeature features; /**< bitmap of supported features */
+};
+
+/**
+ * Architecture-specific operations. i.e. communication with kernel (or
+ * whatever) about changes, etc.
+ */
+struct _PedDiskArchOps {
+ char* (*partition_get_path) (const PedPartition* part);
+ int (*partition_is_busy) (const PedPartition* part);
+ int (*disk_commit) (PedDisk* disk);
+};
+
+extern void ped_disk_type_register (PedDiskType* type);
+extern void ped_disk_type_unregister (PedDiskType* type);
+
+extern PedDiskType* ped_disk_type_get_next (PedDiskType const *type)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedDiskType* ped_disk_type_get (const char* name)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_disk_type_check_feature (const PedDiskType* disk_type,
+ PedDiskTypeFeature feature)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedDiskType* ped_disk_probe (PedDevice* dev);
+extern int ped_disk_clobber (PedDevice* dev);
+extern PedDisk* ped_disk_new (PedDevice* dev);
+extern PedDisk* ped_disk_new_fresh (PedDevice* dev,
+ const PedDiskType* disk_type);
+extern PedDisk* ped_disk_duplicate (const PedDisk* old_disk);
+extern void ped_disk_destroy (PedDisk* disk);
+extern int ped_disk_commit (PedDisk* disk);
+extern int ped_disk_commit_to_dev (PedDisk* disk);
+extern int ped_disk_commit_to_os (PedDisk* disk);
+extern int ped_disk_check (const PedDisk* disk);
+extern void ped_disk_print (const PedDisk* disk);
+
+extern int ped_disk_get_primary_partition_count (const PedDisk* disk)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_disk_get_last_partition_num (const PedDisk* disk)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk);
+extern bool ped_disk_get_max_supported_partition_count(const PedDisk* disk,
+ int* supported);
+extern PedAlignment *ped_disk_get_partition_alignment(const PedDisk *disk);
+
+extern int ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state);
+extern int ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag);
+extern int ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag);
+
+extern uint8_t* ped_disk_get_uuid (const PedDisk* disk);
+
+extern const char *ped_disk_flag_get_name(PedDiskFlag flag);
+extern PedDiskFlag ped_disk_flag_get_by_name(const char *name);
+extern PedDiskFlag ped_disk_flag_next(PedDiskFlag flag)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+extern PedPartition* ped_partition_new (const PedDisk* disk,
+ PedPartitionType type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+extern void ped_partition_destroy (PedPartition* part);
+extern int ped_partition_is_active (const PedPartition* part)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag,
+ int state);
+extern int ped_partition_get_flag (const PedPartition* part,
+ PedPartitionFlag flag);
+extern int ped_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag);
+extern int ped_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type);
+extern int ped_partition_set_name (PedPartition* part, const char* name);
+extern const char* ped_partition_get_name (const PedPartition* part);
+
+extern int ped_partition_set_type_id (PedPartition* part, uint8_t id);
+extern uint8_t ped_partition_get_type_id (const PedPartition* part);
+
+extern int ped_partition_set_type_uuid (PedPartition* part, const uint8_t* uuid);
+extern uint8_t* ped_partition_get_type_uuid (const PedPartition* part);
+
+extern uint8_t* ped_partition_get_uuid (const PedPartition* part);
+
+extern int ped_partition_is_busy (const PedPartition* part);
+extern char* ped_partition_get_path (const PedPartition* part);
+
+extern const char* ped_partition_type_get_name (PedPartitionType part_type)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern const char* ped_partition_flag_get_name (PedPartitionFlag flag);
+extern PedPartitionFlag ped_partition_flag_get_by_name (const char* name);
+extern PedPartitionFlag ped_partition_flag_next (PedPartitionFlag flag)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+extern int ped_disk_add_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint);
+extern int ped_disk_remove_partition (PedDisk* disk, PedPartition* part);
+extern int ped_disk_delete_partition (PedDisk* disk, PedPartition* part);
+extern int ped_disk_delete_all (PedDisk* disk);
+extern int ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint,
+ PedSector start, PedSector end);
+extern int ped_disk_maximize_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint);
+extern PedGeometry* ped_disk_get_max_partition_geometry (PedDisk* disk,
+ PedPartition* part, const PedConstraint* constraint);
+extern int ped_disk_minimize_extended_partition (PedDisk* disk);
+
+extern PedPartition* ped_disk_next_partition (const PedDisk* disk,
+ const PedPartition* part)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedPartition* ped_disk_get_partition (const PedDisk* disk, int num)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedPartition* ped_disk_get_partition_by_sector (const PedDisk* disk,
+ PedSector sect)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedPartition* ped_disk_extended_partition (const PedDisk* disk)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedSector ped_disk_max_partition_length (const PedDisk *disk);
+extern PedSector ped_disk_max_partition_start_sector (const PedDisk *disk);
+
+/* internal functions */
+extern PedDisk* _ped_disk_alloc (const PedDevice* dev, const PedDiskType* type);
+extern void _ped_disk_free (PedDisk* disk);
+
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+extern PedPartition* _ped_partition_alloc (const PedDisk* disk,
+ PedPartitionType type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+extern void _ped_partition_free (PedPartition* part);
+
+extern int _ped_partition_attempt_align (
+ PedPartition* part, const PedConstraint* external,
+ PedConstraint* internal);
+
+#endif /* PED_DISK_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/disk.in.h b/include/parted/disk.in.h
new file mode 100644
index 0000000..8f6a5c3
--- /dev/null
+++ b/include/parted/disk.in.h
@@ -0,0 +1,451 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2002, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+/** \file disk.h */
+
+#ifndef PED_DISK_H_INCLUDED
+#define PED_DISK_H_INCLUDED
+
+/* Include these to work around gnulib redefining free, read, etc. which causes problems
+ * with pt-common.h
+ */
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdint.h>
+
+/**
+ * Disk flags
+ */
+enum _PedDiskFlag {
+ /* This flag (which defaults to true) controls if disk types for
+ which cylinder alignment is optional do cylinder alignment when a
+ new partition gets added.
+ This flag is available for msdos and sun disklabels (for sun labels
+ it only controls the aligning of the end of the partition) */
+ PED_DISK_CYLINDER_ALIGNMENT=1,
+ /* This flag controls whether the boot flag of a GPT PMBR is set */
+ PED_DISK_GPT_PMBR_BOOT=2,
+};
+// NOTE: DO NOT define using enums
+#define PED_DISK_FIRST_FLAG 1 // PED_DISK_CYLINDER_ALIGNMENT
+#define PED_DISK_LAST_FLAG 2 // PED_DISK_GPT_PMBR_BOOT
+
+/**
+ * Partition types
+ */
+enum _PedPartitionType {
+ PED_PARTITION_NORMAL = 0x00,
+ PED_PARTITION_LOGICAL = 0x01,
+ PED_PARTITION_EXTENDED = 0x02,
+ PED_PARTITION_FREESPACE = 0x04,
+ PED_PARTITION_METADATA = 0x08,
+ PED_PARTITION_PROTECTED = 0x10
+};
+
+/**
+ * Partition flags.
+ */
+enum _PedPartitionFlag {
+ PED_PARTITION_BOOT=1,
+ PED_PARTITION_ROOT=2,
+ PED_PARTITION_SWAP=3,
+ PED_PARTITION_HIDDEN=4,
+ PED_PARTITION_RAID=5,
+ PED_PARTITION_LVM=6,
+ PED_PARTITION_LBA=7,
+ PED_PARTITION_HPSERVICE=8,
+ PED_PARTITION_PALO=9,
+ PED_PARTITION_PREP=10,
+ PED_PARTITION_MSFT_RESERVED=11,
+ PED_PARTITION_BIOS_GRUB=12,
+ PED_PARTITION_APPLE_TV_RECOVERY=13,
+ PED_PARTITION_DIAG=14,
+ PED_PARTITION_LEGACY_BOOT=15,
+ PED_PARTITION_MSFT_DATA=16,
+ PED_PARTITION_IRST=17,
+ PED_PARTITION_ESP=18,
+ PED_PARTITION_CHROMEOS_KERNEL=19,
+ PED_PARTITION_BLS_BOOT=20,
+ PED_PARTITION_LINUX_HOME=21,
+ PED_PARTITION_NO_AUTOMOUNT=22,
+};
+// NOTE: DO NOT define using enums
+#define PED_PARTITION_FIRST_FLAG 1 // PED_PARTITION_BOOT
+#define PED_PARTITION_LAST_FLAG 22 // PED_PARTITION_NO_AUTOMOUNT
+
+enum _PedDiskTypeFeature {
+ PED_DISK_TYPE_EXTENDED=1, /**< supports extended partitions */
+ PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
+ PED_DISK_TYPE_PARTITION_TYPE_ID=4, /**< supports partition type-ids */
+ PED_DISK_TYPE_PARTITION_TYPE_UUID=8, /**< supports partition type-uuids */
+ PED_DISK_TYPE_DISK_UUID=16, /**< supports disk uuids */
+ PED_DISK_TYPE_PARTITION_UUID=32, /**< supports partition uuids */
+};
+// NOTE: DO NOT define using enums
+#define PED_DISK_TYPE_FIRST_FEATURE 1 // PED_DISK_TYPE_EXTENDED
+#define PED_DISK_TYPE_LAST_FEATURE 32 // PED_DISK_TYPE_PARTITION_UUID
+
+struct _PedDisk;
+struct _PedPartition;
+struct _PedDiskOps;
+struct _PedDiskType;
+struct _PedDiskArchOps;
+
+typedef enum _PedDiskFlag PedDiskFlag;
+typedef enum _PedPartitionType PedPartitionType;
+typedef enum _PedPartitionFlag PedPartitionFlag;
+typedef enum _PedDiskTypeFeature PedDiskTypeFeature;
+typedef struct _PedDisk PedDisk;
+typedef struct _PedPartition PedPartition;
+typedef const struct _PedDiskOps PedDiskOps;
+typedef struct _PedDiskType PedDiskType;
+typedef const struct _PedDiskArchOps PedDiskArchOps;
+
+#include <parted/device.h>
+#include <parted/filesys.h>
+#include <parted/natmath.h>
+#include <parted/geom.h>
+#include <stdbool.h>
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+/** \file disk.h */
+
+/**
+ * PedPartition structure represents a partition.
+ */
+struct _PedPartition {
+ PedPartition* prev;
+ PedPartition* next;
+
+ /**< the partition table of the partition */
+ PedDisk* disk;
+ PedGeometry geom; /**< geometry of the partition */
+
+ /**< the partition number: In Linux, this is the
+ same as the minor number. No assumption
+ should be made about "num" and "type"
+ - different disk labels have different rules. */
+
+ int num;
+ PedPartitionType type; /**< the type of partition: a bit field of
+ PED_PARTITION_LOGICAL, PED_PARTITION_EXTENDED,
+ PED_PARTITION_METADATA
+ and PED_PARTITION_FREESPACE.
+ Both the first two, and the last two are
+ mutually exclusive.
+ An extended partition is a primary
+ partition that may contain logical partitions.
+ There is at most one extended partition on
+ a disk.
+ A logical partition is like a primary
+ partition, except it's inside an extended
+ partition. Internally, pseudo partitions are
+ allocated to represent free space, or disk
+ label meta-data. These have the
+ PED_PARTITION_FREESPACE or
+ PED_PARTITION_METADATA bit set. */
+
+ /**< The type of file system on the partition. NULL if unknown. */
+ const PedFileSystemType* fs_type;
+
+ /**< Only used for an extended partition. The list of logical
+ partitions (and free space and metadata within the extended
+ partition). */
+ PedPartition* part_list;
+
+ void* disk_specific;
+};
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+/**
+ * Represents a disk label (partition table).
+ */
+struct _PedDisk {
+ PedDevice* dev; /**< the device where the
+ partition table lies */
+ const PedDiskType* type; /**< type of disk label */
+ const int* block_sizes; /**< block sizes supported
+ by this label */
+ PedPartition* part_list; /**< list of partitions. Access with
+ ped_disk_next_partition() */
+
+ void* disk_specific;
+
+/* office use only ;-) */
+ int needs_clobber; /**< clobber before write? */
+ int update_mode; /**< mode without free/metadata
+ partitions, for easier
+ update */
+};
+
+struct _PedDiskOps {
+ /* disk label operations */
+ int (*probe) (const PedDevice *dev);
+ int (*clobber) (PedDevice* dev);
+ PedDisk* (*alloc) (const PedDevice* dev);
+ PedDisk* (*duplicate) (const PedDisk* disk);
+ void (*free) (PedDisk* disk);
+ int (*read) (PedDisk* disk);
+ int (*write) (const PedDisk* disk);
+ int (*disk_set_flag) (
+ PedDisk *disk,
+ PedDiskFlag flag,
+ int state);
+ int (*disk_get_flag) (
+ const PedDisk *disk,
+ PedDiskFlag flag);
+ int (*disk_is_flag_available) (
+ const PedDisk *disk,
+ PedDiskFlag flag);
+ uint8_t* (*disk_get_uuid) (const PedDisk* disk);
+ /** \todo add label guessing op here */
+
+ /* partition operations */
+ PedPartition* (*partition_new) (
+ const PedDisk* disk,
+ PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+ PedPartition* (*partition_duplicate) (const PedPartition* part);
+ void (*partition_destroy) (PedPartition* part);
+ int (*partition_set_system) (PedPartition* part,
+ const PedFileSystemType* fs_type);
+ int (*partition_set_flag) (
+ PedPartition* part,
+ PedPartitionFlag flag,
+ int state);
+ int (*partition_get_flag) (
+ const PedPartition* part,
+ PedPartitionFlag flag);
+ int (*partition_is_flag_available) (
+ const PedPartition* part,
+ PedPartitionFlag flag);
+ void (*partition_set_name) (PedPartition* part, const char* name);
+ const char* (*partition_get_name) (const PedPartition* part);
+
+ int (*partition_set_type_id) (PedPartition* part, uint8_t id);
+ uint8_t (*partition_get_type_id) (const PedPartition* part);
+
+ int (*partition_set_type_uuid) (PedPartition* part, const uint8_t* uuid);
+ uint8_t* (*partition_get_type_uuid) (const PedPartition* part);
+
+ uint8_t* (*partition_get_uuid) (const PedPartition* part);
+
+ int (*partition_align) (PedPartition* part,
+ const PedConstraint* constraint);
+ int (*partition_enumerate) (PedPartition* part);
+ bool (*partition_check) (const PedPartition* part);
+
+ /* other */
+ int (*alloc_metadata) (PedDisk* disk);
+ int (*get_max_primary_partition_count) (const PedDisk* disk);
+ bool (*get_max_supported_partition_count) (const PedDisk* disk,
+ int* supported);
+ PedAlignment *(*get_partition_alignment)(const PedDisk *disk);
+ PedSector (*max_length) (void);
+ PedSector (*max_start_sector) (void);
+};
+
+struct _PedDiskType {
+ PedDiskType* next;
+ const char* name; /**< the name of the partition table type.
+ \todo not very intuitive name */
+ PedDiskOps* const ops;
+
+ PedDiskTypeFeature features; /**< bitmap of supported features */
+};
+
+/**
+ * Architecture-specific operations. i.e. communication with kernel (or
+ * whatever) about changes, etc.
+ */
+struct _PedDiskArchOps {
+ char* (*partition_get_path) (const PedPartition* part);
+ int (*partition_is_busy) (const PedPartition* part);
+ int (*disk_commit) (PedDisk* disk);
+};
+
+extern void ped_disk_type_register (PedDiskType* type);
+extern void ped_disk_type_unregister (PedDiskType* type);
+
+extern PedDiskType* ped_disk_type_get_next (PedDiskType const *type)
+ _GL_ATTRIBUTE_PURE;
+extern PedDiskType* ped_disk_type_get (const char* name)
+ _GL_ATTRIBUTE_PURE;
+extern int ped_disk_type_check_feature (const PedDiskType* disk_type,
+ PedDiskTypeFeature feature)
+ _GL_ATTRIBUTE_PURE;
+
+extern PedDiskType* ped_disk_probe (PedDevice* dev);
+extern int ped_disk_clobber (PedDevice* dev);
+extern PedDisk* ped_disk_new (PedDevice* dev);
+extern PedDisk* ped_disk_new_fresh (PedDevice* dev,
+ const PedDiskType* disk_type);
+extern PedDisk* ped_disk_duplicate (const PedDisk* old_disk);
+extern void ped_disk_destroy (PedDisk* disk);
+extern int ped_disk_commit (PedDisk* disk);
+extern int ped_disk_commit_to_dev (PedDisk* disk);
+extern int ped_disk_commit_to_os (PedDisk* disk);
+extern int ped_disk_check (const PedDisk* disk);
+extern void ped_disk_print (const PedDisk* disk);
+
+extern int ped_disk_get_primary_partition_count (const PedDisk* disk)
+ _GL_ATTRIBUTE_PURE;
+extern int ped_disk_get_last_partition_num (const PedDisk* disk)
+ _GL_ATTRIBUTE_PURE;
+extern int ped_disk_get_max_primary_partition_count (const PedDisk* disk);
+extern bool ped_disk_get_max_supported_partition_count(const PedDisk* disk,
+ int* supported);
+extern PedAlignment *ped_disk_get_partition_alignment(const PedDisk *disk);
+
+extern int ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state);
+extern int ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag);
+extern int ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag);
+
+extern uint8_t* ped_disk_get_uuid (const PedDisk* disk);
+
+extern const char *ped_disk_flag_get_name(PedDiskFlag flag);
+extern PedDiskFlag ped_disk_flag_get_by_name(const char *name);
+extern PedDiskFlag ped_disk_flag_next(PedDiskFlag flag) _GL_ATTRIBUTE_CONST;
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+extern PedPartition* ped_partition_new (const PedDisk* disk,
+ PedPartitionType type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+extern void ped_partition_destroy (PedPartition* part);
+extern int ped_partition_is_active (const PedPartition* part) _GL_ATTRIBUTE_PURE;
+extern int ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag,
+ int state);
+extern int ped_partition_get_flag (const PedPartition* part,
+ PedPartitionFlag flag);
+extern int ped_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag);
+extern int ped_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type);
+extern int ped_partition_set_name (PedPartition* part, const char* name);
+extern const char* ped_partition_get_name (const PedPartition* part);
+
+extern int ped_partition_set_type_id (PedPartition* part, uint8_t id);
+extern uint8_t ped_partition_get_type_id (const PedPartition* part);
+
+extern int ped_partition_set_type_uuid (PedPartition* part, const uint8_t* uuid);
+extern uint8_t* ped_partition_get_type_uuid (const PedPartition* part);
+
+extern uint8_t* ped_partition_get_uuid (const PedPartition* part);
+
+extern int ped_partition_is_busy (const PedPartition* part);
+extern char* ped_partition_get_path (const PedPartition* part);
+
+extern const char* ped_partition_type_get_name (PedPartitionType part_type)
+ _GL_ATTRIBUTE_CONST;
+extern const char* ped_partition_flag_get_name (PedPartitionFlag flag);
+extern PedPartitionFlag ped_partition_flag_get_by_name (const char* name);
+extern PedPartitionFlag ped_partition_flag_next (PedPartitionFlag flag)
+ _GL_ATTRIBUTE_CONST;
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ * @{
+ */
+
+extern int ped_disk_add_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint);
+extern int ped_disk_remove_partition (PedDisk* disk, PedPartition* part);
+extern int ped_disk_delete_partition (PedDisk* disk, PedPartition* part);
+extern int ped_disk_delete_all (PedDisk* disk);
+extern int ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint,
+ PedSector start, PedSector end);
+extern int ped_disk_maximize_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint);
+extern PedGeometry* ped_disk_get_max_partition_geometry (PedDisk* disk,
+ PedPartition* part, const PedConstraint* constraint);
+extern int ped_disk_minimize_extended_partition (PedDisk* disk);
+
+extern PedPartition* ped_disk_next_partition (const PedDisk* disk,
+ const PedPartition* part)
+ _GL_ATTRIBUTE_PURE;
+extern PedPartition* ped_disk_get_partition (const PedDisk* disk, int num)
+ _GL_ATTRIBUTE_PURE;
+extern PedPartition* ped_disk_get_partition_by_sector (const PedDisk* disk,
+ PedSector sect)
+ _GL_ATTRIBUTE_PURE;
+extern PedPartition* ped_disk_extended_partition (const PedDisk* disk)
+ _GL_ATTRIBUTE_PURE;
+
+extern PedSector ped_disk_max_partition_length (const PedDisk *disk);
+extern PedSector ped_disk_max_partition_start_sector (const PedDisk *disk);
+
+/* internal functions */
+extern PedDisk* _ped_disk_alloc (const PedDevice* dev, const PedDiskType* type);
+extern void _ped_disk_free (PedDisk* disk);
+
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+extern PedPartition* _ped_partition_alloc (const PedDisk* disk,
+ PedPartitionType type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+extern void _ped_partition_free (PedPartition* part);
+
+extern int _ped_partition_attempt_align (
+ PedPartition* part, const PedConstraint* external,
+ PedConstraint* internal);
+
+#endif /* PED_DISK_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/endian.h b/include/parted/endian.h
new file mode 100644
index 0000000..f9f473c
--- /dev/null
+++ b/include/parted/endian.h
@@ -0,0 +1,85 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* should only be #included by files in libparted */
+
+#ifndef PED_ENDIAN_H_INCLUDED
+#define PED_ENDIAN_H_INCLUDED
+
+#include <stdint.h>
+
+/* returns the n'th least significant byte */
+#define _GET_BYTE(x, n) ( ((x) >> (8 * (n))) & 0xff )
+
+#define _PED_SWAP16(x) ( (_GET_BYTE(x, 0) << 8) \
+ + (_GET_BYTE(x, 1) << 0) )
+
+#define _PED_SWAP32(x) ( (_GET_BYTE(x, 0) << 24) \
+ + (_GET_BYTE(x, 1) << 16) \
+ + (_GET_BYTE(x, 2) << 8) \
+ + (_GET_BYTE(x, 3) << 0) )
+
+#define _PED_SWAP64(x) ( (_GET_BYTE(x, 0) << 56) \
+ + (_GET_BYTE(x, 1) << 48) \
+ + (_GET_BYTE(x, 2) << 40) \
+ + (_GET_BYTE(x, 3) << 32) \
+ + (_GET_BYTE(x, 4) << 24) \
+ + (_GET_BYTE(x, 5) << 16) \
+ + (_GET_BYTE(x, 6) << 8) \
+ + (_GET_BYTE(x, 7) << 0) )
+
+#define PED_SWAP16(x) ((uint16_t) _PED_SWAP16( (uint16_t) (x) ))
+#define PED_SWAP32(x) ((uint32_t) _PED_SWAP32( (uint32_t) (x) ))
+#define PED_SWAP64(x) ((uint64_t) _PED_SWAP64( (uint64_t) (x) ))
+
+#ifdef WORDS_BIGENDIAN
+
+#define PED_CPU_TO_LE16(x) PED_SWAP16(x)
+#define PED_CPU_TO_BE16(x) (x)
+#define PED_CPU_TO_LE32(x) PED_SWAP32(x)
+#define PED_CPU_TO_BE32(x) (x)
+#define PED_CPU_TO_LE64(x) PED_SWAP64(x)
+#define PED_CPU_TO_BE64(x) (x)
+
+#define PED_LE16_TO_CPU(x) PED_SWAP16(x)
+#define PED_BE16_TO_CPU(x) (x)
+#define PED_LE32_TO_CPU(x) PED_SWAP32(x)
+#define PED_BE32_TO_CPU(x) (x)
+#define PED_LE64_TO_CPU(x) PED_SWAP64(x)
+#define PED_BE64_TO_CPU(x) (x)
+
+#else /* !WORDS_BIGENDIAN */
+
+#define PED_CPU_TO_LE16(x) (x)
+#define PED_CPU_TO_BE16(x) PED_SWAP16(x)
+#define PED_CPU_TO_LE32(x) (x)
+#define PED_CPU_TO_BE32(x) PED_SWAP32(x)
+#define PED_CPU_TO_LE64(x) (x)
+#define PED_CPU_TO_BE64(x) PED_SWAP64(x)
+
+#define PED_LE16_TO_CPU(x) (x)
+#define PED_BE16_TO_CPU(x) PED_SWAP16(x)
+#define PED_LE32_TO_CPU(x) (x)
+#define PED_BE32_TO_CPU(x) PED_SWAP32(x)
+#define PED_LE64_TO_CPU(x) (x)
+#define PED_BE64_TO_CPU(x) PED_SWAP64(x)
+
+#endif /* !WORDS_BIGENDIAN */
+
+#endif /* PED_ENDIAN_H_INCLUDED */
diff --git a/include/parted/endian.in.h b/include/parted/endian.in.h
new file mode 100644
index 0000000..f9f473c
--- /dev/null
+++ b/include/parted/endian.in.h
@@ -0,0 +1,85 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* should only be #included by files in libparted */
+
+#ifndef PED_ENDIAN_H_INCLUDED
+#define PED_ENDIAN_H_INCLUDED
+
+#include <stdint.h>
+
+/* returns the n'th least significant byte */
+#define _GET_BYTE(x, n) ( ((x) >> (8 * (n))) & 0xff )
+
+#define _PED_SWAP16(x) ( (_GET_BYTE(x, 0) << 8) \
+ + (_GET_BYTE(x, 1) << 0) )
+
+#define _PED_SWAP32(x) ( (_GET_BYTE(x, 0) << 24) \
+ + (_GET_BYTE(x, 1) << 16) \
+ + (_GET_BYTE(x, 2) << 8) \
+ + (_GET_BYTE(x, 3) << 0) )
+
+#define _PED_SWAP64(x) ( (_GET_BYTE(x, 0) << 56) \
+ + (_GET_BYTE(x, 1) << 48) \
+ + (_GET_BYTE(x, 2) << 40) \
+ + (_GET_BYTE(x, 3) << 32) \
+ + (_GET_BYTE(x, 4) << 24) \
+ + (_GET_BYTE(x, 5) << 16) \
+ + (_GET_BYTE(x, 6) << 8) \
+ + (_GET_BYTE(x, 7) << 0) )
+
+#define PED_SWAP16(x) ((uint16_t) _PED_SWAP16( (uint16_t) (x) ))
+#define PED_SWAP32(x) ((uint32_t) _PED_SWAP32( (uint32_t) (x) ))
+#define PED_SWAP64(x) ((uint64_t) _PED_SWAP64( (uint64_t) (x) ))
+
+#ifdef WORDS_BIGENDIAN
+
+#define PED_CPU_TO_LE16(x) PED_SWAP16(x)
+#define PED_CPU_TO_BE16(x) (x)
+#define PED_CPU_TO_LE32(x) PED_SWAP32(x)
+#define PED_CPU_TO_BE32(x) (x)
+#define PED_CPU_TO_LE64(x) PED_SWAP64(x)
+#define PED_CPU_TO_BE64(x) (x)
+
+#define PED_LE16_TO_CPU(x) PED_SWAP16(x)
+#define PED_BE16_TO_CPU(x) (x)
+#define PED_LE32_TO_CPU(x) PED_SWAP32(x)
+#define PED_BE32_TO_CPU(x) (x)
+#define PED_LE64_TO_CPU(x) PED_SWAP64(x)
+#define PED_BE64_TO_CPU(x) (x)
+
+#else /* !WORDS_BIGENDIAN */
+
+#define PED_CPU_TO_LE16(x) (x)
+#define PED_CPU_TO_BE16(x) PED_SWAP16(x)
+#define PED_CPU_TO_LE32(x) (x)
+#define PED_CPU_TO_BE32(x) PED_SWAP32(x)
+#define PED_CPU_TO_LE64(x) (x)
+#define PED_CPU_TO_BE64(x) PED_SWAP64(x)
+
+#define PED_LE16_TO_CPU(x) (x)
+#define PED_BE16_TO_CPU(x) PED_SWAP16(x)
+#define PED_LE32_TO_CPU(x) (x)
+#define PED_BE32_TO_CPU(x) PED_SWAP32(x)
+#define PED_LE64_TO_CPU(x) (x)
+#define PED_BE64_TO_CPU(x) PED_SWAP64(x)
+
+#endif /* !WORDS_BIGENDIAN */
+
+#endif /* PED_ENDIAN_H_INCLUDED */
diff --git a/include/parted/exception.h b/include/parted/exception.h
new file mode 100644
index 0000000..527cc73
--- /dev/null
+++ b/include/parted/exception.h
@@ -0,0 +1,136 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedException
+ * @{
+ */
+
+/** \file exception.h */
+
+#ifndef PED_EXCEPTION_H_INCLUDED
+#define PED_EXCEPTION_H_INCLUDED
+
+typedef struct _PedException PedException;
+
+/**
+ * Exception type
+ */
+enum _PedExceptionType {
+ PED_EXCEPTION_INFORMATION=1,
+ PED_EXCEPTION_WARNING=2,
+ PED_EXCEPTION_ERROR=3,
+ PED_EXCEPTION_FATAL=4,
+ PED_EXCEPTION_BUG=5,
+ PED_EXCEPTION_NO_FEATURE=6,
+};
+typedef enum _PedExceptionType PedExceptionType;
+
+/**
+ * Option for resolving the exception
+ */
+enum _PedExceptionOption {
+ /* individual options */
+ PED_EXCEPTION_UNHANDLED=0,
+ PED_EXCEPTION_FIX=1,
+ PED_EXCEPTION_YES=2,
+ PED_EXCEPTION_NO=4,
+ PED_EXCEPTION_OK=8,
+ PED_EXCEPTION_RETRY=16,
+ PED_EXCEPTION_IGNORE=32,
+ PED_EXCEPTION_CANCEL=64,
+
+ /* combinations of individual options */
+ PED_EXCEPTION_OK_CANCEL = PED_EXCEPTION_OK + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_YES_NO = PED_EXCEPTION_YES + PED_EXCEPTION_NO,
+ PED_EXCEPTION_YES_NO_CANCEL =
+ PED_EXCEPTION_YES_NO + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_IGNORE_CANCEL =
+ PED_EXCEPTION_IGNORE + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_RETRY_CANCEL = PED_EXCEPTION_RETRY + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL =
+ PED_EXCEPTION_RETRY + PED_EXCEPTION_IGNORE_CANCEL,
+};
+
+#define PED_EXCEPTION_OPTION_FIRST PED_EXCEPTION_FIX
+#define PED_EXCEPTION_OPTION_LAST PED_EXCEPTION_CANCEL /* last individual option */
+
+typedef enum _PedExceptionOption PedExceptionOption;
+
+/**
+ * Structure with information about exception
+ */
+struct _PedException {
+ char* message; /**< text describing what the event was */
+ PedExceptionType type; /**< type of exception */
+ PedExceptionOption options; /**< ORed list of options that
+ the exception handler can
+ return (the ways an exception
+ can be resolved) */
+};
+
+typedef PedExceptionOption (PedExceptionHandler) (PedException* ex);
+
+extern int ped_exception; /* set to true if there's an exception */
+
+extern char* ped_exception_get_type_string (PedExceptionType ex_type)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern char* ped_exception_get_option_string (PedExceptionOption ex_opt)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern void ped_exception_set_handler (PedExceptionHandler* handler);
+extern PedExceptionHandler *ped_exception_get_handler(void)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedExceptionOption ped_exception_default_handler (PedException* ex);
+
+extern PedExceptionOption ped_exception_throw (PedExceptionType ex_type,
+ PedExceptionOption ex_opt,
+ const char* message,
+ ...);
+/* rethrows an exception - i.e. calls the exception handler, (or returns a
+ code to return to pass up higher) */
+extern PedExceptionOption ped_exception_rethrow ();
+
+/* frees an exception, indicating that the exception has been handled.
+ Calling an exception handler counts. */
+extern void ped_exception_catch ();
+
+/* indicate that exceptions should not go to the exception handler, but passed
+ up to the calling function(s) */
+extern void ped_exception_fetch_all ();
+
+/* indicate that exceptions should invoke the exception handler */
+extern void ped_exception_leave_all ();
+
+#endif /* PED_EXCEPTION_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/exception.in.h b/include/parted/exception.in.h
new file mode 100644
index 0000000..97b8c5b
--- /dev/null
+++ b/include/parted/exception.in.h
@@ -0,0 +1,124 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedException
+ * @{
+ */
+
+/** \file exception.h */
+
+#ifndef PED_EXCEPTION_H_INCLUDED
+#define PED_EXCEPTION_H_INCLUDED
+
+typedef struct _PedException PedException;
+
+/**
+ * Exception type
+ */
+enum _PedExceptionType {
+ PED_EXCEPTION_INFORMATION=1,
+ PED_EXCEPTION_WARNING=2,
+ PED_EXCEPTION_ERROR=3,
+ PED_EXCEPTION_FATAL=4,
+ PED_EXCEPTION_BUG=5,
+ PED_EXCEPTION_NO_FEATURE=6,
+};
+typedef enum _PedExceptionType PedExceptionType;
+
+/**
+ * Option for resolving the exception
+ */
+enum _PedExceptionOption {
+ /* individual options */
+ PED_EXCEPTION_UNHANDLED=0,
+ PED_EXCEPTION_FIX=1,
+ PED_EXCEPTION_YES=2,
+ PED_EXCEPTION_NO=4,
+ PED_EXCEPTION_OK=8,
+ PED_EXCEPTION_RETRY=16,
+ PED_EXCEPTION_IGNORE=32,
+ PED_EXCEPTION_CANCEL=64,
+
+ /* combinations of individual options */
+ PED_EXCEPTION_OK_CANCEL = PED_EXCEPTION_OK + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_YES_NO = PED_EXCEPTION_YES + PED_EXCEPTION_NO,
+ PED_EXCEPTION_YES_NO_CANCEL =
+ PED_EXCEPTION_YES_NO + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_IGNORE_CANCEL =
+ PED_EXCEPTION_IGNORE + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_RETRY_CANCEL = PED_EXCEPTION_RETRY + PED_EXCEPTION_CANCEL,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL =
+ PED_EXCEPTION_RETRY + PED_EXCEPTION_IGNORE_CANCEL,
+};
+
+#define PED_EXCEPTION_OPTION_FIRST PED_EXCEPTION_FIX
+#define PED_EXCEPTION_OPTION_LAST PED_EXCEPTION_CANCEL /* last individual option */
+
+typedef enum _PedExceptionOption PedExceptionOption;
+
+/**
+ * Structure with information about exception
+ */
+struct _PedException {
+ char* message; /**< text describing what the event was */
+ PedExceptionType type; /**< type of exception */
+ PedExceptionOption options; /**< ORed list of options that
+ the exception handler can
+ return (the ways an exception
+ can be resolved) */
+};
+
+typedef PedExceptionOption (PedExceptionHandler) (PedException* ex);
+
+extern int ped_exception; /* set to true if there's an exception */
+
+extern char* ped_exception_get_type_string (PedExceptionType ex_type)
+ _GL_ATTRIBUTE_CONST;
+extern char* ped_exception_get_option_string (PedExceptionOption ex_opt)
+ _GL_ATTRIBUTE_PURE;
+
+extern void ped_exception_set_handler (PedExceptionHandler* handler);
+extern PedExceptionHandler *ped_exception_get_handler(void)
+ _GL_ATTRIBUTE_PURE;
+
+extern PedExceptionOption ped_exception_default_handler (PedException* ex);
+
+extern PedExceptionOption ped_exception_throw (PedExceptionType ex_type,
+ PedExceptionOption ex_opt,
+ const char* message,
+ ...);
+/* rethrows an exception - i.e. calls the exception handler, (or returns a
+ code to return to pass up higher) */
+extern PedExceptionOption ped_exception_rethrow ();
+
+/* frees an exception, indicating that the exception has been handled.
+ Calling an exception handler counts. */
+extern void ped_exception_catch ();
+
+/* indicate that exceptions should not go to the exception handler, but passed
+ up to the calling function(s) */
+extern void ped_exception_fetch_all ();
+
+/* indicate that exceptions should invoke the exception handler */
+extern void ped_exception_leave_all ();
+
+#endif /* PED_EXCEPTION_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/fdasd.h b/include/parted/fdasd.h
new file mode 100644
index 0000000..e3ba183
--- /dev/null
+++ b/include/parted/fdasd.h
@@ -0,0 +1,299 @@
+/*
+ * File...........: s390-tools/fdasd/fdasd.h
+ * Author(s)......: Volker Sameske <sameske@de.ibm.com>
+ * Horst Hummel <Horst.Hummel@de.ibm.com>
+ * Bugreports.to..: <Linux390@de.ibm.com>
+ * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2001-2002
+ *
+ * History of changes (starts March 2001)
+ * version 1.01 - menu entry 's' to show mapping devnode - DS name
+ * 1.02 - DS names count now from 0001 instead from 0000
+ * 1.03 - volser checks: 'AA AAA' to 'AAAAA '
+ * - removed dependency to kernel headers.
+ * 1.04 - added -p option
+ * 1.05 - new API policy, set it back to 0
+ */
+#ifndef FDASD_H
+#define FDASD_H
+
+#include <parted/vtoc.h>
+
+/*****************************************************************************
+ * SECTION: Definitions needed for DASD-API (see dasd.h) *
+ *****************************************************************************/
+
+#define DASD_IOCTL_LETTER 'D'
+
+#define DASD_PARTN_BITS 2
+
+#define PARTITION_LINUX_SWAP 0x82
+#define PARTITION_LINUX 0x83
+#define PARTITION_LINUX_LVM 0x8e
+#define PARTITION_LINUX_RAID 0xfd
+
+#define PART_TYPE_NATIVE "NATIVE"
+#define PART_TYPE_SWAP "SWAP "
+#define PART_TYPE_RAID "RAID "
+#define PART_TYPE_LVM "LVM "
+
+#ifdef DEBUG_DASD
+#define PDEBUG fprintf(stderr, "%s:%d:%s\n", \
+ __FILE__, \
+ __LINE__, \
+ __PRETTY_FUNCTION__);
+#else
+#define PDEBUG
+#endif
+
+/*
+ * struct dasd_information_t
+ * represents any data about the device, which is visible to userspace.
+ * including foramt and featueres.
+ */
+typedef struct dasd_information_t {
+ unsigned int devno; /* S/390 devno */
+ unsigned int real_devno; /* for aliases */
+ unsigned int schid; /* S/390 subchannel identifier */
+ unsigned int cu_type : 16; /* from SenseID */
+ unsigned int cu_model : 8; /* from SenseID */
+ unsigned int dev_type : 16; /* from SenseID */
+ unsigned int dev_model : 8; /* from SenseID */
+ unsigned int open_count;
+ unsigned int req_queue_len;
+ unsigned int chanq_len; /* length of chanq */
+ char type[4]; /* from discipline.name, 'none' for */
+ /* unknown */
+ unsigned int status; /* current device level */
+ unsigned int label_block; /* where to find the VOLSER */
+ unsigned int FBA_layout; /* fixed block size (like AIXVOL) */
+ unsigned int characteristics_size;
+ unsigned int confdata_size;
+ char characteristics[64]; /* from read_device_characteristics */
+ char configuration_data[256]; /* from read_configuration_data */
+} dasd_information_t;
+
+struct dasd_eckd_characteristics {
+ unsigned short cu_type;
+ struct {
+ unsigned char support:2;
+ unsigned char async:1;
+ unsigned char reserved:1;
+ unsigned char cache_info:1;
+ unsigned char model:3;
+ } __attribute__ ((packed)) cu_model;
+ unsigned short dev_type;
+ unsigned char dev_model;
+ struct {
+ unsigned char mult_burst:1;
+ unsigned char RT_in_LR:1;
+ unsigned char reserved1:1;
+ unsigned char RD_IN_LR:1;
+ unsigned char reserved2:4;
+ unsigned char reserved3:8;
+ unsigned char defect_wr:1;
+ unsigned char XRC_supported:1;
+ unsigned char reserved4:1;
+ unsigned char striping:1;
+ unsigned char reserved5:4;
+ unsigned char cfw:1;
+ unsigned char reserved6:2;
+ unsigned char cache:1;
+ unsigned char dual_copy:1;
+ unsigned char dfw:1;
+ unsigned char reset_alleg:1;
+ unsigned char sense_down:1;
+ } __attribute__ ((packed)) facilities;
+ unsigned char dev_class;
+ unsigned char unit_type;
+ unsigned short no_cyl;
+ unsigned short trk_per_cyl;
+ unsigned char sec_per_trk;
+ unsigned char byte_per_track[3];
+ unsigned short home_bytes;
+ unsigned char formula;
+ union {
+ struct {
+ unsigned char f1;
+ unsigned short f2;
+ unsigned short f3;
+ } __attribute__ ((packed)) f_0x01;
+ struct {
+ unsigned char f1;
+ unsigned char f2;
+ unsigned char f3;
+ unsigned char f4;
+ unsigned char f5;
+ } __attribute__ ((packed)) f_0x02;
+ } __attribute__ ((packed)) factors;
+ unsigned short first_alt_trk;
+ unsigned short no_alt_trk;
+ unsigned short first_dia_trk;
+ unsigned short no_dia_trk;
+ unsigned short first_sup_trk;
+ unsigned short no_sup_trk;
+ unsigned char MDR_ID;
+ unsigned char OBR_ID;
+ unsigned char director;
+ unsigned char rd_trk_set;
+ unsigned short max_rec_zero;
+ unsigned char reserved1;
+ unsigned char RWANY_in_LR;
+ unsigned char factor6;
+ unsigned char factor7;
+ unsigned char factor8;
+ unsigned char reserved2[3];
+ unsigned char reserved3[6];
+ unsigned int long_no_cyl;
+} __attribute__ ((packed));
+
+/*
+ * struct format_data_t
+ * represents all data necessary to format a dasd
+ */
+typedef struct format_data_t {
+ int start_unit; /* from track */
+ int stop_unit; /* to track */
+ int blksize; /* sectorsize */
+ int intensity;
+} format_data_t;
+
+/*
+ * values to be used for format_data_t.intensity
+ * 0/8: normal format
+ * 1/9: also write record zero
+ * 3/11: also write home address
+ * 4/12: invalidate track
+ */
+#define DASD_FMT_INT_FMT_R0 1 /* write record zero */
+#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */
+#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */
+#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */
+
+
+/* Disable the volume (for Linux) */
+#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0)
+/* Enable the volume (for Linux) */
+#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1)
+
+/* retrieve API version number */
+#define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int)
+/* Get information on a dasd device (enhanced) */
+#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
+
+
+/*****************************************************************************
+ * SECTION: Further IOCTL Definitions (see fs.h) *
+ *****************************************************************************/
+#define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */
+/* re-read partition table */
+#define BLKRRPART _IO(0x12,95)
+/* get block device sector size */
+#define BLKSSZGET _IO(0x12,104)
+/* device size in bytes (u64 *arg)*/
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
+/* get device geometry */
+#define HDIO_GETGEO 0x0301
+
+/*****************************************************************************
+ * SECTION: FDASD internal types *
+ *****************************************************************************/
+#define PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
+#define USABLE_PARTITIONS ((1 << DASD_PARTN_BITS) - 1)
+
+#define DASD_MIN_API_VERSION 0
+
+#define DEFAULT_FDASD_CONF "/etc/fdasd.conf" /* default config file */
+
+#define FDASD_VERSION "1.32.0"
+#define DEVICE "device"
+#define DISC "disc"
+#define PART "part"
+
+#define ALTERNATE_CYLINDERS_USED 0x10
+
+typedef struct partition_info {
+ u_int8_t used;
+ unsigned long start_trk;
+ unsigned long end_trk;
+ unsigned long len_trk;
+ unsigned long fspace_trk;
+ format1_label_t *f1;
+ struct partition_info *next;
+ struct partition_info *prev;
+ u_int8_t type;
+} partition_info_t;
+
+typedef struct config_data {
+ unsigned long start;
+ unsigned long stop;
+} config_data_t;
+
+typedef struct fdasd_anchor {
+ int vlabel_changed;
+ int vtoc_changed;
+ int auto_partition;
+ int print_table;
+ int big_disk;
+ int silent;
+ int verbose;
+ int devno;
+ int option_reuse;
+ int option_recreate;
+ int partno[USABLE_PARTITIONS];
+ u_int16_t dev_type;
+ unsigned int used_partitions;
+ unsigned long label_pos;
+ unsigned int blksize;
+ unsigned long fspace_trk;
+ format4_label_t *f4;
+ format5_label_t *f5;
+ format7_label_t *f7;
+ format9_label_t *f9; /* template for all f9 labels */
+ partition_info_t *first;
+ partition_info_t *last;
+ volume_label_t *vlabel;
+ config_data_t confdata[USABLE_PARTITIONS];
+ u_int32_t hw_cylinders;
+ u_int32_t formatted_cylinders;
+ struct fdasd_hd_geometry geo;
+ unsigned int label_block;
+ unsigned int FBA_layout;
+ bool is_file;
+} fdasd_anchor_t;
+
+enum offset {lower, upper};
+
+enum fdasd_failure {
+ unable_to_open_disk,
+ unable_to_seek_disk,
+ unable_to_read_disk,
+ read_only_disk,
+ unable_to_ioctl,
+ api_version_mismatch,
+ wrong_disk_type,
+ wrong_disk_format,
+ disk_in_use,
+ config_syntax_error,
+ vlabel_corrupted,
+ dsname_corrupted,
+ malloc_failed,
+ device_verification_failed,
+ volser_not_found
+};
+
+void fdasd_cleanup (fdasd_anchor_t *anchor);
+void fdasd_initialize_anchor (fdasd_anchor_t * anc);
+int fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int fd);
+void fdasd_check_api_version (fdasd_anchor_t *anc, int fd);
+int fdasd_check_volume (fdasd_anchor_t *anc, int fd);
+int fdasd_write_labels (fdasd_anchor_t *anc, int fd);
+void fdasd_recreate_vtoc(fdasd_anchor_t *anc);
+partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
+ unsigned int start, unsigned int stop);
+int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ;
+void fdasd_check_volser(char *volser, int devno);
+int fdasd_get_volser(fdasd_anchor_t *anc, char *volser, int fd);
+void fdasd_change_volser(fdasd_anchor_t *anc, char *str);
+void fdasd_reuse_vtoc(fdasd_anchor_t *anc);
+
+#endif /* FDASD_H */
diff --git a/include/parted/fdasd.in.h b/include/parted/fdasd.in.h
new file mode 100644
index 0000000..e3ba183
--- /dev/null
+++ b/include/parted/fdasd.in.h
@@ -0,0 +1,299 @@
+/*
+ * File...........: s390-tools/fdasd/fdasd.h
+ * Author(s)......: Volker Sameske <sameske@de.ibm.com>
+ * Horst Hummel <Horst.Hummel@de.ibm.com>
+ * Bugreports.to..: <Linux390@de.ibm.com>
+ * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2001-2002
+ *
+ * History of changes (starts March 2001)
+ * version 1.01 - menu entry 's' to show mapping devnode - DS name
+ * 1.02 - DS names count now from 0001 instead from 0000
+ * 1.03 - volser checks: 'AA AAA' to 'AAAAA '
+ * - removed dependency to kernel headers.
+ * 1.04 - added -p option
+ * 1.05 - new API policy, set it back to 0
+ */
+#ifndef FDASD_H
+#define FDASD_H
+
+#include <parted/vtoc.h>
+
+/*****************************************************************************
+ * SECTION: Definitions needed for DASD-API (see dasd.h) *
+ *****************************************************************************/
+
+#define DASD_IOCTL_LETTER 'D'
+
+#define DASD_PARTN_BITS 2
+
+#define PARTITION_LINUX_SWAP 0x82
+#define PARTITION_LINUX 0x83
+#define PARTITION_LINUX_LVM 0x8e
+#define PARTITION_LINUX_RAID 0xfd
+
+#define PART_TYPE_NATIVE "NATIVE"
+#define PART_TYPE_SWAP "SWAP "
+#define PART_TYPE_RAID "RAID "
+#define PART_TYPE_LVM "LVM "
+
+#ifdef DEBUG_DASD
+#define PDEBUG fprintf(stderr, "%s:%d:%s\n", \
+ __FILE__, \
+ __LINE__, \
+ __PRETTY_FUNCTION__);
+#else
+#define PDEBUG
+#endif
+
+/*
+ * struct dasd_information_t
+ * represents any data about the device, which is visible to userspace.
+ * including foramt and featueres.
+ */
+typedef struct dasd_information_t {
+ unsigned int devno; /* S/390 devno */
+ unsigned int real_devno; /* for aliases */
+ unsigned int schid; /* S/390 subchannel identifier */
+ unsigned int cu_type : 16; /* from SenseID */
+ unsigned int cu_model : 8; /* from SenseID */
+ unsigned int dev_type : 16; /* from SenseID */
+ unsigned int dev_model : 8; /* from SenseID */
+ unsigned int open_count;
+ unsigned int req_queue_len;
+ unsigned int chanq_len; /* length of chanq */
+ char type[4]; /* from discipline.name, 'none' for */
+ /* unknown */
+ unsigned int status; /* current device level */
+ unsigned int label_block; /* where to find the VOLSER */
+ unsigned int FBA_layout; /* fixed block size (like AIXVOL) */
+ unsigned int characteristics_size;
+ unsigned int confdata_size;
+ char characteristics[64]; /* from read_device_characteristics */
+ char configuration_data[256]; /* from read_configuration_data */
+} dasd_information_t;
+
+struct dasd_eckd_characteristics {
+ unsigned short cu_type;
+ struct {
+ unsigned char support:2;
+ unsigned char async:1;
+ unsigned char reserved:1;
+ unsigned char cache_info:1;
+ unsigned char model:3;
+ } __attribute__ ((packed)) cu_model;
+ unsigned short dev_type;
+ unsigned char dev_model;
+ struct {
+ unsigned char mult_burst:1;
+ unsigned char RT_in_LR:1;
+ unsigned char reserved1:1;
+ unsigned char RD_IN_LR:1;
+ unsigned char reserved2:4;
+ unsigned char reserved3:8;
+ unsigned char defect_wr:1;
+ unsigned char XRC_supported:1;
+ unsigned char reserved4:1;
+ unsigned char striping:1;
+ unsigned char reserved5:4;
+ unsigned char cfw:1;
+ unsigned char reserved6:2;
+ unsigned char cache:1;
+ unsigned char dual_copy:1;
+ unsigned char dfw:1;
+ unsigned char reset_alleg:1;
+ unsigned char sense_down:1;
+ } __attribute__ ((packed)) facilities;
+ unsigned char dev_class;
+ unsigned char unit_type;
+ unsigned short no_cyl;
+ unsigned short trk_per_cyl;
+ unsigned char sec_per_trk;
+ unsigned char byte_per_track[3];
+ unsigned short home_bytes;
+ unsigned char formula;
+ union {
+ struct {
+ unsigned char f1;
+ unsigned short f2;
+ unsigned short f3;
+ } __attribute__ ((packed)) f_0x01;
+ struct {
+ unsigned char f1;
+ unsigned char f2;
+ unsigned char f3;
+ unsigned char f4;
+ unsigned char f5;
+ } __attribute__ ((packed)) f_0x02;
+ } __attribute__ ((packed)) factors;
+ unsigned short first_alt_trk;
+ unsigned short no_alt_trk;
+ unsigned short first_dia_trk;
+ unsigned short no_dia_trk;
+ unsigned short first_sup_trk;
+ unsigned short no_sup_trk;
+ unsigned char MDR_ID;
+ unsigned char OBR_ID;
+ unsigned char director;
+ unsigned char rd_trk_set;
+ unsigned short max_rec_zero;
+ unsigned char reserved1;
+ unsigned char RWANY_in_LR;
+ unsigned char factor6;
+ unsigned char factor7;
+ unsigned char factor8;
+ unsigned char reserved2[3];
+ unsigned char reserved3[6];
+ unsigned int long_no_cyl;
+} __attribute__ ((packed));
+
+/*
+ * struct format_data_t
+ * represents all data necessary to format a dasd
+ */
+typedef struct format_data_t {
+ int start_unit; /* from track */
+ int stop_unit; /* to track */
+ int blksize; /* sectorsize */
+ int intensity;
+} format_data_t;
+
+/*
+ * values to be used for format_data_t.intensity
+ * 0/8: normal format
+ * 1/9: also write record zero
+ * 3/11: also write home address
+ * 4/12: invalidate track
+ */
+#define DASD_FMT_INT_FMT_R0 1 /* write record zero */
+#define DASD_FMT_INT_FMT_HA 2 /* write home address, also set FMT_R0 ! */
+#define DASD_FMT_INT_INVAL 4 /* invalidate tracks */
+#define DASD_FMT_INT_COMPAT 8 /* use OS/390 compatible disk layout */
+
+
+/* Disable the volume (for Linux) */
+#define BIODASDDISABLE _IO(DASD_IOCTL_LETTER,0)
+/* Enable the volume (for Linux) */
+#define BIODASDENABLE _IO(DASD_IOCTL_LETTER,1)
+
+/* retrieve API version number */
+#define DASDAPIVER _IOR(DASD_IOCTL_LETTER,0,int)
+/* Get information on a dasd device (enhanced) */
+#define BIODASDINFO _IOR(DASD_IOCTL_LETTER,1,dasd_information_t)
+
+
+/*****************************************************************************
+ * SECTION: Further IOCTL Definitions (see fs.h) *
+ *****************************************************************************/
+#define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */
+/* re-read partition table */
+#define BLKRRPART _IO(0x12,95)
+/* get block device sector size */
+#define BLKSSZGET _IO(0x12,104)
+/* device size in bytes (u64 *arg)*/
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
+/* get device geometry */
+#define HDIO_GETGEO 0x0301
+
+/*****************************************************************************
+ * SECTION: FDASD internal types *
+ *****************************************************************************/
+#define PARTN_MASK ((1 << DASD_PARTN_BITS) - 1)
+#define USABLE_PARTITIONS ((1 << DASD_PARTN_BITS) - 1)
+
+#define DASD_MIN_API_VERSION 0
+
+#define DEFAULT_FDASD_CONF "/etc/fdasd.conf" /* default config file */
+
+#define FDASD_VERSION "1.32.0"
+#define DEVICE "device"
+#define DISC "disc"
+#define PART "part"
+
+#define ALTERNATE_CYLINDERS_USED 0x10
+
+typedef struct partition_info {
+ u_int8_t used;
+ unsigned long start_trk;
+ unsigned long end_trk;
+ unsigned long len_trk;
+ unsigned long fspace_trk;
+ format1_label_t *f1;
+ struct partition_info *next;
+ struct partition_info *prev;
+ u_int8_t type;
+} partition_info_t;
+
+typedef struct config_data {
+ unsigned long start;
+ unsigned long stop;
+} config_data_t;
+
+typedef struct fdasd_anchor {
+ int vlabel_changed;
+ int vtoc_changed;
+ int auto_partition;
+ int print_table;
+ int big_disk;
+ int silent;
+ int verbose;
+ int devno;
+ int option_reuse;
+ int option_recreate;
+ int partno[USABLE_PARTITIONS];
+ u_int16_t dev_type;
+ unsigned int used_partitions;
+ unsigned long label_pos;
+ unsigned int blksize;
+ unsigned long fspace_trk;
+ format4_label_t *f4;
+ format5_label_t *f5;
+ format7_label_t *f7;
+ format9_label_t *f9; /* template for all f9 labels */
+ partition_info_t *first;
+ partition_info_t *last;
+ volume_label_t *vlabel;
+ config_data_t confdata[USABLE_PARTITIONS];
+ u_int32_t hw_cylinders;
+ u_int32_t formatted_cylinders;
+ struct fdasd_hd_geometry geo;
+ unsigned int label_block;
+ unsigned int FBA_layout;
+ bool is_file;
+} fdasd_anchor_t;
+
+enum offset {lower, upper};
+
+enum fdasd_failure {
+ unable_to_open_disk,
+ unable_to_seek_disk,
+ unable_to_read_disk,
+ read_only_disk,
+ unable_to_ioctl,
+ api_version_mismatch,
+ wrong_disk_type,
+ wrong_disk_format,
+ disk_in_use,
+ config_syntax_error,
+ vlabel_corrupted,
+ dsname_corrupted,
+ malloc_failed,
+ device_verification_failed,
+ volser_not_found
+};
+
+void fdasd_cleanup (fdasd_anchor_t *anchor);
+void fdasd_initialize_anchor (fdasd_anchor_t * anc);
+int fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int fd);
+void fdasd_check_api_version (fdasd_anchor_t *anc, int fd);
+int fdasd_check_volume (fdasd_anchor_t *anc, int fd);
+int fdasd_write_labels (fdasd_anchor_t *anc, int fd);
+void fdasd_recreate_vtoc(fdasd_anchor_t *anc);
+partition_info_t * fdasd_add_partition (fdasd_anchor_t *anc,
+ unsigned int start, unsigned int stop);
+int fdasd_prepare_labels (fdasd_anchor_t *anc, int fd) ;
+void fdasd_check_volser(char *volser, int devno);
+int fdasd_get_volser(fdasd_anchor_t *anc, char *volser, int fd);
+void fdasd_change_volser(fdasd_anchor_t *anc, char *str);
+void fdasd_reuse_vtoc(fdasd_anchor_t *anc);
+
+#endif /* FDASD_H */
diff --git a/include/parted/filesys.h b/include/parted/filesys.h
new file mode 100644
index 0000000..9fe6b6c
--- /dev/null
+++ b/include/parted/filesys.h
@@ -0,0 +1,116 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2006-2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedFileSystem
+ * @{
+ */
+
+/** \file filesys.h */
+
+#ifndef PED_FILESYS_H_INCLUDED
+#define PED_FILESYS_H_INCLUDED
+
+typedef struct _PedFileSystem PedFileSystem;
+typedef struct _PedFileSystemType PedFileSystemType;
+typedef struct _PedFileSystemAlias PedFileSystemAlias;
+typedef const struct _PedFileSystemOps PedFileSystemOps;
+
+#include <parted/geom.h>
+#include <parted/constraint.h>
+#include <parted/timer.h>
+
+struct _PedFileSystemOps {
+ PedGeometry* (*probe) (PedGeometry* geom);
+};
+
+/**
+ * Structure describing type of file system
+ */
+struct _PedFileSystemType {
+ PedFileSystemType* next;
+ const char* const name; /**< name of the file system type */
+ PedFileSystemOps* const ops;
+};
+
+/**
+ * Structure describing a file system alias. This is separate from
+ * PedFileSystemType because probing only looks through the list of types,
+ * and does not probe aliases separately.
+ */
+struct _PedFileSystemAlias {
+ PedFileSystemAlias* next;
+ PedFileSystemType* fs_type;
+ const char* alias;
+ int deprecated;
+};
+
+
+/**
+ * Structure describing file system
+ */
+struct _PedFileSystem {
+ PedFileSystemType* type; /**< the file system type */
+ PedGeometry* geom; /**< where the file system actually is */
+ int checked; /**< 1 if the file system has been checked.
+ 0 otherwise. */
+
+ void* type_specific;
+
+};
+
+extern void ped_file_system_type_register (PedFileSystemType* type);
+extern void ped_file_system_type_unregister (PedFileSystemType* type);
+
+extern void ped_file_system_alias_register (PedFileSystemType* type,
+ const char* alias, int deprecated);
+extern void ped_file_system_alias_unregister (PedFileSystemType* type,
+ const char* alias);
+
+extern PedFileSystemType* ped_file_system_type_get (const char* name);
+extern PedFileSystemType*
+ped_file_system_type_get_next (const PedFileSystemType* fs_type)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedFileSystemAlias*
+ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern PedFileSystemType* ped_file_system_probe (PedGeometry* geom);
+extern PedGeometry* ped_file_system_probe_specific (
+ const PedFileSystemType* fs_type,
+ PedGeometry* geom);
+
+PedFileSystem *ped_file_system_open (PedGeometry *geom);
+int ped_file_system_close (PedFileSystem *fs);
+int ped_file_system_resize (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+PedConstraint *ped_file_system_get_resize_constraint (const PedFileSystem *fs);
+
+#endif /* PED_FILESYS_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/filesys.in.h b/include/parted/filesys.in.h
new file mode 100644
index 0000000..93079b0
--- /dev/null
+++ b/include/parted/filesys.in.h
@@ -0,0 +1,108 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2006-2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedFileSystem
+ * @{
+ */
+
+/** \file filesys.h */
+
+#ifndef PED_FILESYS_H_INCLUDED
+#define PED_FILESYS_H_INCLUDED
+
+typedef struct _PedFileSystem PedFileSystem;
+typedef struct _PedFileSystemType PedFileSystemType;
+typedef struct _PedFileSystemAlias PedFileSystemAlias;
+typedef const struct _PedFileSystemOps PedFileSystemOps;
+
+#include <parted/geom.h>
+#include <parted/constraint.h>
+#include <parted/timer.h>
+
+struct _PedFileSystemOps {
+ PedGeometry* (*probe) (PedGeometry* geom);
+};
+
+/**
+ * Structure describing type of file system
+ */
+struct _PedFileSystemType {
+ PedFileSystemType* next;
+ const char* const name; /**< name of the file system type */
+ PedFileSystemOps* const ops;
+};
+
+/**
+ * Structure describing a file system alias. This is separate from
+ * PedFileSystemType because probing only looks through the list of types,
+ * and does not probe aliases separately.
+ */
+struct _PedFileSystemAlias {
+ PedFileSystemAlias* next;
+ PedFileSystemType* fs_type;
+ const char* alias;
+ int deprecated;
+};
+
+
+/**
+ * Structure describing file system
+ */
+struct _PedFileSystem {
+ PedFileSystemType* type; /**< the file system type */
+ PedGeometry* geom; /**< where the file system actually is */
+ int checked; /**< 1 if the file system has been checked.
+ 0 otherwise. */
+
+ void* type_specific;
+
+};
+
+extern void ped_file_system_type_register (PedFileSystemType* type);
+extern void ped_file_system_type_unregister (PedFileSystemType* type);
+
+extern void ped_file_system_alias_register (PedFileSystemType* type,
+ const char* alias, int deprecated);
+extern void ped_file_system_alias_unregister (PedFileSystemType* type,
+ const char* alias);
+
+extern PedFileSystemType* ped_file_system_type_get (const char* name);
+extern PedFileSystemType*
+ped_file_system_type_get_next (const PedFileSystemType* fs_type)
+ _GL_ATTRIBUTE_PURE;
+
+extern PedFileSystemAlias*
+ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias)
+ _GL_ATTRIBUTE_PURE;
+
+extern PedFileSystemType* ped_file_system_probe (PedGeometry* geom);
+extern PedGeometry* ped_file_system_probe_specific (
+ const PedFileSystemType* fs_type,
+ PedGeometry* geom);
+
+PedFileSystem *ped_file_system_open (PedGeometry *geom);
+int ped_file_system_close (PedFileSystem *fs);
+int ped_file_system_resize (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+PedConstraint *ped_file_system_get_resize_constraint (const PedFileSystem *fs);
+
+#endif /* PED_FILESYS_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/geom.h b/include/parted/geom.h
new file mode 100644
index 0000000..387b779
--- /dev/null
+++ b/include/parted/geom.h
@@ -0,0 +1,106 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2001, 2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedGeometry
+ * @{
+ */
+
+/** \file geom.h */
+
+#ifndef PED_GEOM_H_INCLUDED
+#define PED_GEOM_H_INCLUDED
+
+typedef struct _PedGeometry PedGeometry;
+
+/**
+ * Geometry of the partition
+ */
+struct _PedGeometry {
+ PedDevice* dev;
+ PedSector start;
+ PedSector length;
+ PedSector end;
+};
+
+#include <parted/device.h>
+#include <parted/timer.h>
+
+extern int ped_geometry_init (PedGeometry* geom, const PedDevice* dev,
+ PedSector start, PedSector length);
+extern PedGeometry* ped_geometry_new (const PedDevice* dev, PedSector start,
+ PedSector length);
+extern PedGeometry* ped_geometry_duplicate (const PedGeometry* geom);
+extern PedGeometry* ped_geometry_intersect (const PedGeometry* a,
+ const PedGeometry* b);
+extern void ped_geometry_destroy (PedGeometry* geom);
+extern int ped_geometry_set (PedGeometry* geom, PedSector start,
+ PedSector length);
+extern int ped_geometry_set_start (PedGeometry* geom, PedSector start);
+extern int ped_geometry_set_end (PedGeometry* geom, PedSector end);
+extern int ped_geometry_test_overlap (const PedGeometry* a,
+ const PedGeometry* b)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_geometry_test_inside (const PedGeometry* a,
+ const PedGeometry* b)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_geometry_test_equal (const PedGeometry* a, const PedGeometry* b)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern int ped_geometry_test_sector_inside (const PedGeometry* geom,
+ PedSector sect)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern int ped_geometry_read (const PedGeometry* geom, void* buffer,
+ PedSector offset, PedSector count);
+extern int ped_geometry_read_alloc (const PedGeometry* geom, void** buffer,
+ PedSector offset, PedSector count);
+extern int ped_geometry_write (PedGeometry* geom, const void* buffer,
+ PedSector offset, PedSector count);
+extern PedSector ped_geometry_check (PedGeometry* geom, void* buffer,
+ PedSector buffer_size, PedSector offset,
+ PedSector granularity, PedSector count,
+ PedTimer* timer);
+extern int ped_geometry_sync (PedGeometry* geom);
+extern int ped_geometry_sync_fast (PedGeometry* geom);
+
+/* returns -1 if "sector" is not within dest's space. */
+extern PedSector ped_geometry_map (const PedGeometry* dst,
+ const PedGeometry* src,
+ PedSector sector)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+#endif /* PED_GEOM_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/geom.in.h b/include/parted/geom.in.h
new file mode 100644
index 0000000..54c731c
--- /dev/null
+++ b/include/parted/geom.in.h
@@ -0,0 +1,86 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1998-2001, 2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedGeometry
+ * @{
+ */
+
+/** \file geom.h */
+
+#ifndef PED_GEOM_H_INCLUDED
+#define PED_GEOM_H_INCLUDED
+
+typedef struct _PedGeometry PedGeometry;
+
+/**
+ * Geometry of the partition
+ */
+struct _PedGeometry {
+ PedDevice* dev;
+ PedSector start;
+ PedSector length;
+ PedSector end;
+};
+
+#include <parted/device.h>
+#include <parted/timer.h>
+
+extern int ped_geometry_init (PedGeometry* geom, const PedDevice* dev,
+ PedSector start, PedSector length);
+extern PedGeometry* ped_geometry_new (const PedDevice* dev, PedSector start,
+ PedSector length);
+extern PedGeometry* ped_geometry_duplicate (const PedGeometry* geom);
+extern PedGeometry* ped_geometry_intersect (const PedGeometry* a,
+ const PedGeometry* b);
+extern void ped_geometry_destroy (PedGeometry* geom);
+extern int ped_geometry_set (PedGeometry* geom, PedSector start,
+ PedSector length);
+extern int ped_geometry_set_start (PedGeometry* geom, PedSector start);
+extern int ped_geometry_set_end (PedGeometry* geom, PedSector end);
+extern int ped_geometry_test_overlap (const PedGeometry* a,
+ const PedGeometry* b) _GL_ATTRIBUTE_PURE;
+extern int ped_geometry_test_inside (const PedGeometry* a,
+ const PedGeometry* b) _GL_ATTRIBUTE_PURE;
+extern int ped_geometry_test_equal (const PedGeometry* a, const PedGeometry* b)
+ _GL_ATTRIBUTE_PURE;
+extern int ped_geometry_test_sector_inside (const PedGeometry* geom,
+ PedSector sect) _GL_ATTRIBUTE_PURE;
+
+extern int ped_geometry_read (const PedGeometry* geom, void* buffer,
+ PedSector offset, PedSector count);
+extern int ped_geometry_read_alloc (const PedGeometry* geom, void** buffer,
+ PedSector offset, PedSector count);
+extern int ped_geometry_write (PedGeometry* geom, const void* buffer,
+ PedSector offset, PedSector count);
+extern PedSector ped_geometry_check (PedGeometry* geom, void* buffer,
+ PedSector buffer_size, PedSector offset,
+ PedSector granularity, PedSector count,
+ PedTimer* timer);
+extern int ped_geometry_sync (PedGeometry* geom);
+extern int ped_geometry_sync_fast (PedGeometry* geom);
+
+/* returns -1 if "sector" is not within dest's space. */
+extern PedSector ped_geometry_map (const PedGeometry* dst,
+ const PedGeometry* src,
+ PedSector sector) _GL_ATTRIBUTE_PURE;
+
+#endif /* PED_GEOM_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/natmath.h b/include/parted/natmath.h
new file mode 100644
index 0000000..e88c821
--- /dev/null
+++ b/include/parted/natmath.h
@@ -0,0 +1,144 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedAlignment
+ * @{
+ */
+
+/** \file natmath.h */
+
+#ifndef PED_NATMATH_H_INCLUDED
+#define PED_NATMATH_H_INCLUDED
+
+
+typedef struct _PedAlignment PedAlignment;
+
+#include <parted/disk.h>
+#include <parted/device.h>
+#include <parted/geom.h>
+
+#define PED_MIN(a, b) ( ((a)<(b)) ? (a) : (b) )
+#define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) )
+
+/* this is weird (I'm still not sure I should be doing this!)
+ *
+ * For the functions: new, destroy, duplicate and merge: the following values
+ * for align are valid:
+ * * align == NULL (!) represents no solution
+ * * align->grain_size == 0 represents a single solution
+ * (align->offset)
+ * * align->grain_size > 0 represents a set of solutions
+ *
+ * These are invalid:
+ * * align->offset < 0 Note: this gets "normalized"
+ * * align->grain_size < 0
+ *
+ * For the align_* operations, there must be a solution. i.e. align != NULL
+ * All solutions must be greater than zero.
+ */
+
+struct _PedAlignment {
+ PedSector offset;
+ PedSector grain_size;
+};
+
+extern PedSector ped_round_up_to (PedSector sector, PedSector grain_size)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern PedSector ped_round_down_to (PedSector sector, PedSector grain_size)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern PedSector ped_round_to_nearest (PedSector sector, PedSector grain_size)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern PedSector ped_greatest_common_divisor (PedSector a, PedSector b)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern int ped_alignment_init (PedAlignment* align, PedSector offset,
+ PedSector grain_size);
+extern PedAlignment* ped_alignment_new (PedSector offset, PedSector grain_size);
+extern void ped_alignment_destroy (PedAlignment* align);
+extern PedAlignment* ped_alignment_duplicate (const PedAlignment* align);
+extern PedAlignment* ped_alignment_intersect (const PedAlignment* a,
+ const PedAlignment* b);
+
+extern PedSector
+ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedSector
+ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+extern PedSector
+ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern int
+ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern const PedAlignment* ped_alignment_any;
+extern const PedAlignment* ped_alignment_none;
+
+static inline PedSector
+ped_div_round_up (PedSector numerator, PedSector divisor)
+{
+ return (numerator + divisor - 1) / divisor;
+}
+
+
+static inline PedSector
+ped_div_round_to_nearest (PedSector numerator, PedSector divisor)
+{
+ return (numerator + divisor/2) / divisor;
+}
+
+#endif /* PED_NATMATH_H_INCLUDED */
+
+/**
+ * @}
+ */
diff --git a/include/parted/natmath.in.h b/include/parted/natmath.in.h
new file mode 100644
index 0000000..e4c04e4
--- /dev/null
+++ b/include/parted/natmath.in.h
@@ -0,0 +1,112 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedAlignment
+ * @{
+ */
+
+/** \file natmath.h */
+
+#ifndef PED_NATMATH_H_INCLUDED
+#define PED_NATMATH_H_INCLUDED
+
+
+typedef struct _PedAlignment PedAlignment;
+
+#include <parted/disk.h>
+#include <parted/device.h>
+#include <parted/geom.h>
+
+#define PED_MIN(a, b) ( ((a)<(b)) ? (a) : (b) )
+#define PED_MAX(a, b) ( ((a)>(b)) ? (a) : (b) )
+
+/* this is weird (I'm still not sure I should be doing this!)
+ *
+ * For the functions: new, destroy, duplicate and merge: the following values
+ * for align are valid:
+ * * align == NULL (!) represents no solution
+ * * align->grain_size == 0 represents a single solution
+ * (align->offset)
+ * * align->grain_size > 0 represents a set of solutions
+ *
+ * These are invalid:
+ * * align->offset < 0 Note: this gets "normalized"
+ * * align->grain_size < 0
+ *
+ * For the align_* operations, there must be a solution. i.e. align != NULL
+ * All solutions must be greater than zero.
+ */
+
+struct _PedAlignment {
+ PedSector offset;
+ PedSector grain_size;
+};
+
+extern PedSector ped_round_up_to (PedSector sector, PedSector grain_size)
+ _GL_ATTRIBUTE_CONST;
+extern PedSector ped_round_down_to (PedSector sector, PedSector grain_size)
+ _GL_ATTRIBUTE_CONST;
+extern PedSector ped_round_to_nearest (PedSector sector, PedSector grain_size)
+ _GL_ATTRIBUTE_CONST;
+extern PedSector ped_greatest_common_divisor (PedSector a, PedSector b)
+ _GL_ATTRIBUTE_PURE;
+
+extern int ped_alignment_init (PedAlignment* align, PedSector offset,
+ PedSector grain_size);
+extern PedAlignment* ped_alignment_new (PedSector offset, PedSector grain_size);
+extern void ped_alignment_destroy (PedAlignment* align);
+extern PedAlignment* ped_alignment_duplicate (const PedAlignment* align);
+extern PedAlignment* ped_alignment_intersect (const PedAlignment* a,
+ const PedAlignment* b);
+
+extern PedSector
+ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector) _GL_ATTRIBUTE_PURE;
+extern PedSector
+ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector) _GL_ATTRIBUTE_PURE;
+extern PedSector
+ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector) _GL_ATTRIBUTE_PURE;
+
+extern int
+ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector) _GL_ATTRIBUTE_PURE;
+
+extern const PedAlignment* ped_alignment_any;
+extern const PedAlignment* ped_alignment_none;
+
+static inline PedSector
+ped_div_round_up (PedSector numerator, PedSector divisor)
+{
+ return (numerator + divisor - 1) / divisor;
+}
+
+
+static inline PedSector
+ped_div_round_to_nearest (PedSector numerator, PedSector divisor)
+{
+ return (numerator + divisor/2) / divisor;
+}
+
+#endif /* PED_NATMATH_H_INCLUDED */
+
+/**
+ * @}
+ */
diff --git a/include/parted/parted.h b/include/parted/parted.h
new file mode 100644
index 0000000..e53655c
--- /dev/null
+++ b/include/parted/parted.h
@@ -0,0 +1,61 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PARTED_H_INCLUDED
+#define PARTED_H_INCLUDED
+
+#define PED_DEFAULT_ALIGNMENT (1024 * 1024)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+# define __attribute(arg) __attribute__ (arg)
+#else
+# define __attribute(arg)
+#endif
+
+#include <parted/constraint.h>
+#include <parted/device.h>
+#include <parted/disk.h>
+#include <parted/exception.h>
+#include <parted/filesys.h>
+#include <parted/natmath.h>
+#include <parted/unit.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+extern const char *ped_get_version ()
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+
+extern void* __attribute__ ((malloc)) ped_malloc (size_t size);
+extern void* __attribute__ ((malloc)) ped_calloc (size_t size);
+extern void free (void* ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PARTED_H_INCLUDED */
diff --git a/include/parted/parted.in.h b/include/parted/parted.in.h
new file mode 100644
index 0000000..9546127
--- /dev/null
+++ b/include/parted/parted.in.h
@@ -0,0 +1,57 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PARTED_H_INCLUDED
+#define PARTED_H_INCLUDED
+
+#define PED_DEFAULT_ALIGNMENT (1024 * 1024)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
+# define __attribute(arg) __attribute__ (arg)
+#else
+# define __attribute(arg)
+#endif
+
+#include <parted/constraint.h>
+#include <parted/device.h>
+#include <parted/disk.h>
+#include <parted/exception.h>
+#include <parted/filesys.h>
+#include <parted/natmath.h>
+#include <parted/unit.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+extern const char *ped_get_version () _GL_ATTRIBUTE_CONST;
+
+extern void* __attribute__ ((malloc)) ped_malloc (size_t size);
+extern void* __attribute__ ((malloc)) ped_calloc (size_t size);
+extern void free (void* ptr);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PARTED_H_INCLUDED */
diff --git a/include/parted/timer.h b/include/parted/timer.h
new file mode 100644
index 0000000..f3aef74
--- /dev/null
+++ b/include/parted/timer.h
@@ -0,0 +1,66 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001-2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedTimer
+ * @{
+ */
+
+/** \file timer.h */
+
+#ifndef PED_TIMER_H_INCLUDED
+#define PED_TIMER_H_INCLUDED
+
+#include <time.h>
+
+typedef struct _PedTimer PedTimer;
+
+typedef void PedTimerHandler (PedTimer* timer, void* context);
+
+/*
+ * Structure keeping track of progress and time
+ */
+struct _PedTimer {
+ float frac; /**< fraction of operation done */
+ time_t start; /**< time of start of op */
+ time_t now; /**< time of last update (now!) */
+ time_t predicted_end; /**< expected finish time */
+ const char* state_name; /**< eg: "copying data" */
+ PedTimerHandler* handler; /**< who to notify on updates */
+ void* context; /**< context to pass to handler */
+};
+
+extern PedTimer* ped_timer_new (PedTimerHandler* handler, void* context);
+extern void ped_timer_destroy (PedTimer* timer);
+
+/* a nested timer automatically notifies it's parent. You should only
+ * create one when you are going to use it (not before)
+ */
+extern PedTimer* ped_timer_new_nested (PedTimer* parent, float nest_frac);
+extern void ped_timer_destroy_nested (PedTimer* timer);
+
+extern void ped_timer_touch (PedTimer* timer);
+extern void ped_timer_reset (PedTimer* timer);
+extern void ped_timer_update (PedTimer* timer, float new_frac);
+extern void ped_timer_set_state_name (PedTimer* timer, const char* state_name);
+
+#endif /* PED_TIMER_H_INCLUDED */
+
+
+/** @} */
diff --git a/include/parted/timer.in.h b/include/parted/timer.in.h
new file mode 100644
index 0000000..f3aef74
--- /dev/null
+++ b/include/parted/timer.in.h
@@ -0,0 +1,66 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001-2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedTimer
+ * @{
+ */
+
+/** \file timer.h */
+
+#ifndef PED_TIMER_H_INCLUDED
+#define PED_TIMER_H_INCLUDED
+
+#include <time.h>
+
+typedef struct _PedTimer PedTimer;
+
+typedef void PedTimerHandler (PedTimer* timer, void* context);
+
+/*
+ * Structure keeping track of progress and time
+ */
+struct _PedTimer {
+ float frac; /**< fraction of operation done */
+ time_t start; /**< time of start of op */
+ time_t now; /**< time of last update (now!) */
+ time_t predicted_end; /**< expected finish time */
+ const char* state_name; /**< eg: "copying data" */
+ PedTimerHandler* handler; /**< who to notify on updates */
+ void* context; /**< context to pass to handler */
+};
+
+extern PedTimer* ped_timer_new (PedTimerHandler* handler, void* context);
+extern void ped_timer_destroy (PedTimer* timer);
+
+/* a nested timer automatically notifies it's parent. You should only
+ * create one when you are going to use it (not before)
+ */
+extern PedTimer* ped_timer_new_nested (PedTimer* parent, float nest_frac);
+extern void ped_timer_destroy_nested (PedTimer* timer);
+
+extern void ped_timer_touch (PedTimer* timer);
+extern void ped_timer_reset (PedTimer* timer);
+extern void ped_timer_update (PedTimer* timer, float new_frac);
+extern void ped_timer_set_state_name (PedTimer* timer, const char* state_name);
+
+#endif /* PED_TIMER_H_INCLUDED */
+
+
+/** @} */
diff --git a/include/parted/unit.h b/include/parted/unit.h
new file mode 100644
index 0000000..bb8459b
--- /dev/null
+++ b/include/parted/unit.h
@@ -0,0 +1,101 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2005, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedUnit
+ * @{
+ */
+
+/** \file unit.h */
+
+#ifndef PED_UNIT_H_INCLUDED
+#define PED_UNIT_H_INCLUDED
+
+#include <parted/device.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#define PED_SECTOR_SIZE_DEFAULT 512LL
+#define PED_KILOBYTE_SIZE 1000LL
+#define PED_MEGABYTE_SIZE 1000000LL
+#define PED_GIGABYTE_SIZE 1000000000LL
+#define PED_TERABYTE_SIZE 1000000000000LL
+#define PED_KIBIBYTE_SIZE 1024LL
+#define PED_MEBIBYTE_SIZE 1048576LL
+#define PED_GIBIBYTE_SIZE 1073741824LL
+#define PED_TEBIBYTE_SIZE 1099511627776LL
+
+/**
+ * Human-friendly unit for representation of a location within device
+ */
+typedef enum {
+ PED_UNIT_SECTOR,
+ PED_UNIT_BYTE,
+ PED_UNIT_KILOBYTE,
+ PED_UNIT_MEGABYTE,
+ PED_UNIT_GIGABYTE,
+ PED_UNIT_TERABYTE,
+ PED_UNIT_COMPACT,
+ PED_UNIT_CYLINDER,
+ PED_UNIT_CHS,
+ PED_UNIT_PERCENT,
+ PED_UNIT_KIBIBYTE,
+ PED_UNIT_MEBIBYTE,
+ PED_UNIT_GIBIBYTE,
+ PED_UNIT_TEBIBYTE
+} PedUnit;
+
+#define PED_UNIT_FIRST PED_UNIT_SECTOR
+#define PED_UNIT_LAST PED_UNIT_TEBIBYTE
+
+extern long long ped_unit_get_size (const PedDevice* dev, PedUnit unit);
+extern const char *ped_unit_get_name (PedUnit unit)
+
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__const__))
+#endif
+;
+extern PedUnit ped_unit_get_by_name (const char* unit_name)
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+ __attribute ((__pure__))
+#endif
+;
+
+extern void ped_unit_set_default (PedUnit unit);
+extern PedUnit ped_unit_get_default ();
+
+extern char* ped_unit_format_byte (const PedDevice* dev, PedSector byte);
+extern char* ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte,
+ PedUnit unit);
+
+extern char* ped_unit_format (const PedDevice* dev, PedSector sector);
+extern char* ped_unit_format_custom (const PedDevice* dev, PedSector sector,
+ PedUnit unit);
+
+extern int ped_unit_parse (const char* str, const PedDevice* dev,
+ PedSector* sector,
+ PedGeometry** range);
+extern int ped_unit_parse_custom (const char* str, const PedDevice* dev,
+ PedUnit unit, PedSector* sector,
+ PedGeometry** range);
+
+#endif /* PED_UNIT_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/unit.in.h b/include/parted/unit.in.h
new file mode 100644
index 0000000..82f4c5c
--- /dev/null
+++ b/include/parted/unit.in.h
@@ -0,0 +1,93 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2005, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedUnit
+ * @{
+ */
+
+/** \file unit.h */
+
+#ifndef PED_UNIT_H_INCLUDED
+#define PED_UNIT_H_INCLUDED
+
+#include <parted/device.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#define PED_SECTOR_SIZE_DEFAULT 512LL
+#define PED_KILOBYTE_SIZE 1000LL
+#define PED_MEGABYTE_SIZE 1000000LL
+#define PED_GIGABYTE_SIZE 1000000000LL
+#define PED_TERABYTE_SIZE 1000000000000LL
+#define PED_KIBIBYTE_SIZE 1024LL
+#define PED_MEBIBYTE_SIZE 1048576LL
+#define PED_GIBIBYTE_SIZE 1073741824LL
+#define PED_TEBIBYTE_SIZE 1099511627776LL
+
+/**
+ * Human-friendly unit for representation of a location within device
+ */
+typedef enum {
+ PED_UNIT_SECTOR,
+ PED_UNIT_BYTE,
+ PED_UNIT_KILOBYTE,
+ PED_UNIT_MEGABYTE,
+ PED_UNIT_GIGABYTE,
+ PED_UNIT_TERABYTE,
+ PED_UNIT_COMPACT,
+ PED_UNIT_CYLINDER,
+ PED_UNIT_CHS,
+ PED_UNIT_PERCENT,
+ PED_UNIT_KIBIBYTE,
+ PED_UNIT_MEBIBYTE,
+ PED_UNIT_GIBIBYTE,
+ PED_UNIT_TEBIBYTE
+} PedUnit;
+
+#define PED_UNIT_FIRST PED_UNIT_SECTOR
+#define PED_UNIT_LAST PED_UNIT_TEBIBYTE
+
+extern long long ped_unit_get_size (const PedDevice* dev, PedUnit unit);
+extern const char *ped_unit_get_name (PedUnit unit)
+ _GL_ATTRIBUTE_CONST;
+extern PedUnit ped_unit_get_by_name (const char* unit_name) _GL_ATTRIBUTE_PURE;
+
+extern void ped_unit_set_default (PedUnit unit);
+extern PedUnit ped_unit_get_default ();
+
+extern char* ped_unit_format_byte (const PedDevice* dev, PedSector byte);
+extern char* ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte,
+ PedUnit unit);
+
+extern char* ped_unit_format (const PedDevice* dev, PedSector sector);
+extern char* ped_unit_format_custom (const PedDevice* dev, PedSector sector,
+ PedUnit unit);
+
+extern int ped_unit_parse (const char* str, const PedDevice* dev,
+ PedSector* sector,
+ PedGeometry** range);
+extern int ped_unit_parse_custom (const char* str, const PedDevice* dev,
+ PedUnit unit, PedSector* sector,
+ PedGeometry** range);
+
+#endif /* PED_UNIT_H_INCLUDED */
+
+/** @} */
diff --git a/include/parted/vtoc.h b/include/parted/vtoc.h
new file mode 100644
index 0000000..c2756f9
--- /dev/null
+++ b/include/parted/vtoc.h
@@ -0,0 +1,387 @@
+/*
+ * File...........: s390-tools/dasdview/vtoc.h
+ * Author(s)......: Horst Hummel <horst.hummel@de.ibm.com>
+ * Bugreports.to..: <Linux390@de.ibm.com>
+ *
+ * This is a user-space copy of the kernel vtoc,h.
+ *
+ * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2002
+ *
+ * History of changes (starts March 2002)
+ * 2002-03-12 initial
+ */
+
+#ifndef VTOC_H
+#define VTOC_H
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+
+#define LINE_LENGTH 80
+#define VTOC_START_CC 0x0
+#define VTOC_START_HH 0x1
+#define FIRST_USABLE_CYL 1
+#define FIRST_USABLE_TRK 2
+
+#define DASD_3380_TYPE 13148
+#define DASD_3390_TYPE 13200
+#define DASD_9345_TYPE 37701
+
+#define DASD_3380_VALUE 0xbb60
+#define DASD_3390_VALUE 0xe5a2
+#define DASD_9345_VALUE 0xbc98
+
+#define VOLSER_LENGTH 6
+#define BIG_DISK_SIZE 0x10000
+#define LV_COMPAT_CYL 0xFFFE
+
+/*****************************************************************************
+ * SECTION: Definition from hdreq.h *
+ *****************************************************************************/
+
+struct fdasd_hd_geometry {
+ unsigned char heads;
+ unsigned char sectors;
+ unsigned short cylinders;
+ unsigned long start;
+};
+
+
+typedef struct ttr ttr_t;
+typedef struct cchhb cchhb_t;
+typedef struct cchh cchh_t;
+typedef struct labeldate labeldate_t;
+typedef struct volume_label volume_label_t;
+typedef struct cms_volume_label cms_volume_label_t;
+typedef struct extent extent_t;
+typedef struct dev_const dev_const_t;
+typedef struct format1_label format1_label_t;
+typedef struct format4_label format4_label_t;
+typedef struct ds5ext ds5ext_t;
+typedef struct format5_label format5_label_t;
+typedef struct ds7ext ds7ext_t;
+typedef struct format7_label format7_label_t;
+typedef struct format9_label format9_label_t;
+
+struct __attribute__ ((packed)) ttr {
+ u_int16_t tt;
+ u_int8_t r;
+};
+
+struct __attribute__ ((packed)) cchhb {
+ u_int16_t cc;
+ u_int16_t hh;
+ u_int8_t b;
+};
+
+struct __attribute__ ((packed)) cchh {
+ u_int16_t cc;
+ u_int16_t hh;
+};
+
+struct __attribute__ ((packed)) labeldate {
+ u_int8_t year;
+ u_int16_t day;
+};
+
+/*
+ * The following structure is a merger of the cdl and ldl volume label.
+ * On an ldl disk there is no key information, so when reading an
+ * ldl label from disk, the data should be copied at the address of vollbl.
+ * On the other side, the field ldl_version is reserved in a cdl record
+ * and the field formatted_blocks exists only for ldl labels. So when
+ * reading a cdl label from disk, the formatted_blocks field will contain
+ * arbitrary data.
+ * This layout may be a bit awkward, but the advantage of having the
+ * same label type for both disk layout types is bigger than the effort
+ * for taking a bit of extra care at the fringes.
+ */
+
+struct __attribute__ ((packed)) volume_label {
+ char volkey[4]; /* volume key = volume label */
+ char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */
+ char volid[6]; /* volume identifier */
+ u_int8_t security; /* security byte */
+ cchhb_t vtoc; /* VTOC address */
+ char res1[5]; /* reserved */
+ char cisize[4]; /* CI-size for FBA,... */
+ /* ...blanks for CKD */
+ char blkperci[4]; /* no of blocks per CI (FBA), blanks for CKD */
+ char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */
+ char res2[4]; /* reserved */
+ char lvtoc[14]; /* owner code for LVTOC */
+ char res3[28]; /* reserved */
+ char ldl_version; /* version number, valid for ldl format */
+ u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in
+ EBCDIC) */
+};
+
+/*
+ * See:
+ * z/VM V5R2.0 CMS Planning and Administration
+ * SC24-6078-01
+ * What CMS Does / Disk and File Management / Disk File Format
+ * http://publib.boulder.ibm.com/infocenter/zvm/v5r4/topic/com.ibm.zvm.v54.dmsd1/hcsg2b1018.htm
+ */
+struct __attribute__ ((packed)) cms_volume_label {
+ char label_id[4]; /* Label identifier ("CMS1" in EBCDIC) */
+ char vol_id[6]; /* Volume identifier */
+ char version_id[2]; /* Version identifier ("\0\0") */
+ u_int32_t block_size; /* Disk block size (512, 1024, 2048 or 4096) */
+ u_int32_t origin_ptr; /* Disk origin pointer (4 or 5) */
+ u_int32_t usable_count; /* Number of usable cylinders/blocks */
+ u_int32_t formatted_count; /* Max # of formatted cylinders/blocks */
+ u_int32_t block_count; /* Disk size in CMS blocks */
+ u_int32_t used_count; /* Number of CMS blocks in use */
+ u_int32_t fst_size; /* File Status Table (FST) size (64) */
+ u_int32_t fst_count; /* Number of FSTs per CMS block */
+ char format_date[6]; /* Disk FORMAT date (YYMMDDhhmmss) */
+ char reserved1[2]; /* Reserved fields.
+ The low-order bit of the first byte is a
+ century flag. 0 = 1900s, 1 = 2000s.
+ It is used in conjunction with
+ "format_date" to determine the
+ four-digit year. */
+ u_int32_t disk_offset; /* Offset in blocks to the start of the
+ reserved file when the disk is reserved.
+ This is the number of blocks to skip
+ before the partition starts. */
+ u_int32_t map_block; /* Allocation map block with next hole */
+ u_int32_t hblk_disp; /* Displacement in HBLK data of next hole */
+ u_int32_t user_disp; /* Disp into user part of allocation map */
+ u_int32_t open_files; /* Count of SFS open files for this ADT.
+ open_files is not really part of the
+ volume label. It is not used for
+ minidisks. */
+ char segment_name[8]; /* Name of the shared segment.
+ segment_name is not really part of the
+ volume label. It is not stored on disk. */
+};
+
+struct __attribute__ ((packed)) extent {
+ u_int8_t typeind; /* extent type indicator */
+ u_int8_t seqno; /* extent sequence number */
+ cchh_t llimit; /* starting point of this extent */
+ cchh_t ulimit; /* ending point of this extent */
+};
+
+struct __attribute__ ((packed)) dev_const {
+ u_int16_t DS4DSCYL; /* number of logical cyls */
+ u_int16_t DS4DSTRK; /* number of tracks in a logical cylinder */
+ u_int16_t DS4DEVTK; /* device track length */
+ u_int8_t DS4DEVI; /* non-last keyed record overhead */
+ u_int8_t DS4DEVL; /* last keyed record overhead */
+ u_int8_t DS4DEVK; /* non-keyed record overhead differential */
+ u_int8_t DS4DEVFG; /* flag byte */
+ u_int16_t DS4DEVTL; /* device tolerance */
+ u_int8_t DS4DEVDT; /* number of DSCB's per track */
+ u_int8_t DS4DEVDB; /* number of directory blocks per track */
+};
+
+/*
+ * format 1 and format 8 label have the same layout so we use the following
+ * structure for both.
+ */
+struct __attribute__ ((packed)) format1_label {
+ char DS1DSNAM[44]; /* data set name */
+ u_int8_t DS1FMTID; /* format identifier */
+ char DS1DSSN[6]; /* data set serial number */
+ u_int16_t DS1VOLSQ; /* volume sequence number */
+ labeldate_t DS1CREDT; /* creation date: ydd */
+ labeldate_t DS1EXPDT; /* expiration date */
+ u_int8_t DS1NOEPV; /* number of extents on volume */
+ u_int8_t DS1NOBDB; /* no. of bytes used in last direction blk */
+ u_int8_t DS1FLAG1; /* flag 1 */
+ char DS1SYSCD[13]; /* system code */
+ labeldate_t DS1REFD; /* date last referenced */
+ u_int8_t DS1SMSFG; /* system managed storage indicators */
+ u_int8_t DS1SCXTF; /* sec. space extension flag byte */
+ u_int16_t DS1SCXTV; /* secondary space extension value */
+ u_int8_t DS1DSRG1; /* data set organisation byte 1 */
+ u_int8_t DS1DSRG2; /* data set organisation byte 2 */
+ u_int8_t DS1RECFM; /* record format */
+ u_int8_t DS1OPTCD; /* option code */
+ u_int16_t DS1BLKL; /* block length */
+ u_int16_t DS1LRECL; /* record length */
+ u_int8_t DS1KEYL; /* key length */
+ u_int16_t DS1RKP; /* relative key position */
+ u_int8_t DS1DSIND; /* data set indicators */
+ u_int8_t DS1SCAL1; /* secondary allocation flag byte */
+ char DS1SCAL3[3]; /* secondary allocation quantity */
+ ttr_t DS1LSTAR; /* last used track and block on track */
+ u_int16_t DS1TRBAL; /* space remaining on last used track */
+ u_int16_t res1; /* reserved */
+ extent_t DS1EXT1; /* first extent description */
+ extent_t DS1EXT2; /* second extent description */
+ extent_t DS1EXT3; /* third extent description */
+ cchhb_t DS1PTRDS; /* possible pointer to f2 or f3 DSCB */
+};
+
+struct __attribute__ ((packed)) format4_label {
+ char DS4KEYCD[44]; /* key code for VTOC labels: 44 times 0x04 */
+ u_int8_t DS4IDFMT; /* format identifier */
+ cchhb_t DS4HPCHR; /* highest address of a format 1 DSCB */
+ u_int16_t DS4DSREC; /* number of available DSCB's */
+ cchh_t DS4HCCHH; /* CCHH of next available alternate track */
+ u_int16_t DS4NOATK; /* number of remaining alternate tracks */
+ u_int8_t DS4VTOCI; /* VTOC indicators */
+ u_int8_t DS4NOEXT; /* number of extents in VTOC */
+ u_int8_t DS4SMSFG; /* system managed storage indicators */
+ u_int8_t DS4DEVAC; /* number of alternate cylinders.
+ Subtract from first two bytes of
+ DS4DEVSZ to get number of usable
+ cylinders. can be zero. valid
+ only if DS4DEVAV on. */
+ dev_const_t DS4DEVCT; /* device constants */
+ char DS4AMTIM[8]; /* VSAM timestamp */
+ char DS4AMCAT[3]; /* VSAM catalog indicator */
+ char DS4R2TIM[8]; /* VSAM volume/catalog match timestamp */
+ char res1[5]; /* reserved */
+ char DS4F6PTR[5]; /* pointer to first format 6 DSCB */
+ extent_t DS4VTOCE; /* VTOC extent description */
+ char res2[10]; /* reserved */
+ u_int8_t DS4EFLVL; /* extended free-space management level */
+ cchhb_t DS4EFPTR; /* pointer to extended free-space info */
+ char res3; /* reserved */
+ u_int32_t DS4DCYL; /* number of logical cyls */
+ char res4[2]; /* reserved */
+ u_int8_t DS4DEVF2; /* device flags */
+ char res5; /* reserved */
+};
+
+struct __attribute__ ((packed)) ds5ext {
+ u_int16_t t; /* RTA of the first track of free extent */
+ u_int16_t fc; /* number of whole cylinders in free ext. */
+ u_int8_t ft; /* number of remaining free tracks */
+};
+
+struct __attribute__ ((packed)) format5_label {
+ char DS5KEYID[4]; /* key identifier */
+ ds5ext_t DS5AVEXT; /* first available (free-space) extent. */
+ ds5ext_t DS5EXTAV[7]; /* seven available extents */
+ u_int8_t DS5FMTID; /* format identifier */
+ ds5ext_t DS5MAVET[18]; /* eighteen available extents */
+ cchhb_t DS5PTRDS; /* pointer to next format5 DSCB */
+};
+
+struct __attribute__ ((packed)) ds7ext {
+ u_int32_t a; /* starting RTA value */
+ u_int32_t b; /* ending RTA value + 1 */
+};
+
+struct __attribute__ ((packed)) format7_label {
+ char DS7KEYID[4]; /* key identifier */
+ ds7ext_t DS7EXTNT[5]; /* space for 5 extent descriptions */
+ u_int8_t DS7FMTID; /* format identifier */
+ ds7ext_t DS7ADEXT[11]; /* space for 11 extent descriptions */
+ char res1[2]; /* reserved */
+ cchhb_t DS7PTRDS; /* pointer to next FMT7 DSCB */
+};
+
+struct __attribute__ ((packed)) format9_label {
+ u_int8_t DS9KEYID; /* key code for format 9 labels (0x09) */
+ u_int8_t DS9SUBTY; /* subtype (0x01) */
+ u_int8_t DS9NUMF9; /* number of F9 datasets */
+ u_int8_t res1[41]; /* reserved */
+ u_int8_t DS9FMTID; /* format identifier */
+ u_int8_t res2[95]; /* reserved */
+};
+
+char *vtoc_ebcdic_enc (char const *source, char *target, int l);
+char *vtoc_ebcdic_dec (char const *source, char *target, int l);
+void vtoc_set_extent (extent_t *ext, u_int8_t typeind, u_int8_t seqno,
+ cchh_t *lower, cchh_t *upper);
+void vtoc_set_cchh (cchh_t *addr, u_int32_t cc, u_int16_t hh);
+u_int32_t vtoc_get_cyl_from_cchh(cchh_t *addr);
+u_int16_t vtoc_get_head_from_cchh(cchh_t *addr);
+void vtoc_set_cchhb (cchhb_t *addr, u_int32_t cc, u_int16_t hh, u_int8_t b);
+u_int32_t vtoc_get_cyl_from_cchhb(cchhb_t *addr);
+u_int16_t vtoc_get_head_from_cchhb(cchhb_t *addr);
+u_int64_t cchhb2blk(cchhb_t *p, struct fdasd_hd_geometry *geo);
+u_int64_t cchh2blk (cchh_t *p, struct fdasd_hd_geometry *geo);
+u_int32_t cchh2trk (cchh_t *p, struct fdasd_hd_geometry *geo);
+void vtoc_set_date (labeldate_t *d, u_int8_t year, u_int16_t day);
+
+void vtoc_volume_label_init (volume_label_t *vlabel);
+
+int vtoc_read_volume_label (int fd, unsigned long vlabel_start,
+ volume_label_t *vlabel);
+
+int vtoc_write_volume_label (int fd, unsigned long vlabel_start,
+ volume_label_t const *vlabel);
+
+void vtoc_volume_label_set_volser (volume_label_t *vlabel, char const *volser);
+
+char *vtoc_volume_label_get_volser (volume_label_t *vlabel, char *volser);
+
+void vtoc_volume_label_set_key (volume_label_t *vlabel, char const *key);
+
+void vtoc_volume_label_set_label (volume_label_t *vlabel, char const *lbl);
+
+char *vtoc_volume_label_get_label (volume_label_t *vlabel, char *lbl);
+
+void vtoc_read_label (int fd, unsigned long position, format1_label_t *f1,
+ format4_label_t *f4, format5_label_t *f5,
+ format7_label_t *f7);
+
+void vtoc_write_label (int fd, unsigned long position,
+ format1_label_t const *f1,
+ format4_label_t const *f4,
+ format5_label_t const *f5,
+ format7_label_t const *f7,
+ format9_label_t const *f9);
+
+void vtoc_init_format1_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1);
+
+void vtoc_init_format4_label (format4_label_t *f4lbl,
+ unsigned int compat_cylinders,
+ unsigned int real_cylinders,
+ unsigned int tracks,
+ unsigned int blocks,
+ unsigned int blksize,
+ u_int16_t dev_type);
+
+void vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1,
+ u_int16_t unused_update);
+
+void vtoc_init_format5_label (format5_label_t *f5);
+
+void vtoc_update_format5_label_add (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b,
+ u_int8_t c);
+
+void vtoc_update_format5_label_del (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b,
+ u_int8_t c);
+
+void vtoc_init_format7_label (format7_label_t *f7);
+
+void vtoc_update_format7_label_add (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b);
+
+void vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b);
+
+void vtoc_init_format8_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1);
+
+void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8);
+
+void vtoc_init_format9_label (format9_label_t *f9);
+
+void vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5,
+ format7_label_t *f7, char ch, int verbose,
+ u_int32_t start, u_int32_t stop, u_int32_t cyl,
+ u_int32_t trk);
+
+#endif /* VTOC_H */
diff --git a/include/parted/vtoc.in.h b/include/parted/vtoc.in.h
new file mode 100644
index 0000000..c2756f9
--- /dev/null
+++ b/include/parted/vtoc.in.h
@@ -0,0 +1,387 @@
+/*
+ * File...........: s390-tools/dasdview/vtoc.h
+ * Author(s)......: Horst Hummel <horst.hummel@de.ibm.com>
+ * Bugreports.to..: <Linux390@de.ibm.com>
+ *
+ * This is a user-space copy of the kernel vtoc,h.
+ *
+ * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2002
+ *
+ * History of changes (starts March 2002)
+ * 2002-03-12 initial
+ */
+
+#ifndef VTOC_H
+#define VTOC_H
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+
+#define LINE_LENGTH 80
+#define VTOC_START_CC 0x0
+#define VTOC_START_HH 0x1
+#define FIRST_USABLE_CYL 1
+#define FIRST_USABLE_TRK 2
+
+#define DASD_3380_TYPE 13148
+#define DASD_3390_TYPE 13200
+#define DASD_9345_TYPE 37701
+
+#define DASD_3380_VALUE 0xbb60
+#define DASD_3390_VALUE 0xe5a2
+#define DASD_9345_VALUE 0xbc98
+
+#define VOLSER_LENGTH 6
+#define BIG_DISK_SIZE 0x10000
+#define LV_COMPAT_CYL 0xFFFE
+
+/*****************************************************************************
+ * SECTION: Definition from hdreq.h *
+ *****************************************************************************/
+
+struct fdasd_hd_geometry {
+ unsigned char heads;
+ unsigned char sectors;
+ unsigned short cylinders;
+ unsigned long start;
+};
+
+
+typedef struct ttr ttr_t;
+typedef struct cchhb cchhb_t;
+typedef struct cchh cchh_t;
+typedef struct labeldate labeldate_t;
+typedef struct volume_label volume_label_t;
+typedef struct cms_volume_label cms_volume_label_t;
+typedef struct extent extent_t;
+typedef struct dev_const dev_const_t;
+typedef struct format1_label format1_label_t;
+typedef struct format4_label format4_label_t;
+typedef struct ds5ext ds5ext_t;
+typedef struct format5_label format5_label_t;
+typedef struct ds7ext ds7ext_t;
+typedef struct format7_label format7_label_t;
+typedef struct format9_label format9_label_t;
+
+struct __attribute__ ((packed)) ttr {
+ u_int16_t tt;
+ u_int8_t r;
+};
+
+struct __attribute__ ((packed)) cchhb {
+ u_int16_t cc;
+ u_int16_t hh;
+ u_int8_t b;
+};
+
+struct __attribute__ ((packed)) cchh {
+ u_int16_t cc;
+ u_int16_t hh;
+};
+
+struct __attribute__ ((packed)) labeldate {
+ u_int8_t year;
+ u_int16_t day;
+};
+
+/*
+ * The following structure is a merger of the cdl and ldl volume label.
+ * On an ldl disk there is no key information, so when reading an
+ * ldl label from disk, the data should be copied at the address of vollbl.
+ * On the other side, the field ldl_version is reserved in a cdl record
+ * and the field formatted_blocks exists only for ldl labels. So when
+ * reading a cdl label from disk, the formatted_blocks field will contain
+ * arbitrary data.
+ * This layout may be a bit awkward, but the advantage of having the
+ * same label type for both disk layout types is bigger than the effort
+ * for taking a bit of extra care at the fringes.
+ */
+
+struct __attribute__ ((packed)) volume_label {
+ char volkey[4]; /* volume key = volume label */
+ char vollbl[4]; /* volume label ("VOL1" in EBCDIC) */
+ char volid[6]; /* volume identifier */
+ u_int8_t security; /* security byte */
+ cchhb_t vtoc; /* VTOC address */
+ char res1[5]; /* reserved */
+ char cisize[4]; /* CI-size for FBA,... */
+ /* ...blanks for CKD */
+ char blkperci[4]; /* no of blocks per CI (FBA), blanks for CKD */
+ char labperci[4]; /* no of labels per CI (FBA), blanks for CKD */
+ char res2[4]; /* reserved */
+ char lvtoc[14]; /* owner code for LVTOC */
+ char res3[28]; /* reserved */
+ char ldl_version; /* version number, valid for ldl format */
+ u_int64_t formatted_blocks; /* valid when ldl_version >= "2" (in
+ EBCDIC) */
+};
+
+/*
+ * See:
+ * z/VM V5R2.0 CMS Planning and Administration
+ * SC24-6078-01
+ * What CMS Does / Disk and File Management / Disk File Format
+ * http://publib.boulder.ibm.com/infocenter/zvm/v5r4/topic/com.ibm.zvm.v54.dmsd1/hcsg2b1018.htm
+ */
+struct __attribute__ ((packed)) cms_volume_label {
+ char label_id[4]; /* Label identifier ("CMS1" in EBCDIC) */
+ char vol_id[6]; /* Volume identifier */
+ char version_id[2]; /* Version identifier ("\0\0") */
+ u_int32_t block_size; /* Disk block size (512, 1024, 2048 or 4096) */
+ u_int32_t origin_ptr; /* Disk origin pointer (4 or 5) */
+ u_int32_t usable_count; /* Number of usable cylinders/blocks */
+ u_int32_t formatted_count; /* Max # of formatted cylinders/blocks */
+ u_int32_t block_count; /* Disk size in CMS blocks */
+ u_int32_t used_count; /* Number of CMS blocks in use */
+ u_int32_t fst_size; /* File Status Table (FST) size (64) */
+ u_int32_t fst_count; /* Number of FSTs per CMS block */
+ char format_date[6]; /* Disk FORMAT date (YYMMDDhhmmss) */
+ char reserved1[2]; /* Reserved fields.
+ The low-order bit of the first byte is a
+ century flag. 0 = 1900s, 1 = 2000s.
+ It is used in conjunction with
+ "format_date" to determine the
+ four-digit year. */
+ u_int32_t disk_offset; /* Offset in blocks to the start of the
+ reserved file when the disk is reserved.
+ This is the number of blocks to skip
+ before the partition starts. */
+ u_int32_t map_block; /* Allocation map block with next hole */
+ u_int32_t hblk_disp; /* Displacement in HBLK data of next hole */
+ u_int32_t user_disp; /* Disp into user part of allocation map */
+ u_int32_t open_files; /* Count of SFS open files for this ADT.
+ open_files is not really part of the
+ volume label. It is not used for
+ minidisks. */
+ char segment_name[8]; /* Name of the shared segment.
+ segment_name is not really part of the
+ volume label. It is not stored on disk. */
+};
+
+struct __attribute__ ((packed)) extent {
+ u_int8_t typeind; /* extent type indicator */
+ u_int8_t seqno; /* extent sequence number */
+ cchh_t llimit; /* starting point of this extent */
+ cchh_t ulimit; /* ending point of this extent */
+};
+
+struct __attribute__ ((packed)) dev_const {
+ u_int16_t DS4DSCYL; /* number of logical cyls */
+ u_int16_t DS4DSTRK; /* number of tracks in a logical cylinder */
+ u_int16_t DS4DEVTK; /* device track length */
+ u_int8_t DS4DEVI; /* non-last keyed record overhead */
+ u_int8_t DS4DEVL; /* last keyed record overhead */
+ u_int8_t DS4DEVK; /* non-keyed record overhead differential */
+ u_int8_t DS4DEVFG; /* flag byte */
+ u_int16_t DS4DEVTL; /* device tolerance */
+ u_int8_t DS4DEVDT; /* number of DSCB's per track */
+ u_int8_t DS4DEVDB; /* number of directory blocks per track */
+};
+
+/*
+ * format 1 and format 8 label have the same layout so we use the following
+ * structure for both.
+ */
+struct __attribute__ ((packed)) format1_label {
+ char DS1DSNAM[44]; /* data set name */
+ u_int8_t DS1FMTID; /* format identifier */
+ char DS1DSSN[6]; /* data set serial number */
+ u_int16_t DS1VOLSQ; /* volume sequence number */
+ labeldate_t DS1CREDT; /* creation date: ydd */
+ labeldate_t DS1EXPDT; /* expiration date */
+ u_int8_t DS1NOEPV; /* number of extents on volume */
+ u_int8_t DS1NOBDB; /* no. of bytes used in last direction blk */
+ u_int8_t DS1FLAG1; /* flag 1 */
+ char DS1SYSCD[13]; /* system code */
+ labeldate_t DS1REFD; /* date last referenced */
+ u_int8_t DS1SMSFG; /* system managed storage indicators */
+ u_int8_t DS1SCXTF; /* sec. space extension flag byte */
+ u_int16_t DS1SCXTV; /* secondary space extension value */
+ u_int8_t DS1DSRG1; /* data set organisation byte 1 */
+ u_int8_t DS1DSRG2; /* data set organisation byte 2 */
+ u_int8_t DS1RECFM; /* record format */
+ u_int8_t DS1OPTCD; /* option code */
+ u_int16_t DS1BLKL; /* block length */
+ u_int16_t DS1LRECL; /* record length */
+ u_int8_t DS1KEYL; /* key length */
+ u_int16_t DS1RKP; /* relative key position */
+ u_int8_t DS1DSIND; /* data set indicators */
+ u_int8_t DS1SCAL1; /* secondary allocation flag byte */
+ char DS1SCAL3[3]; /* secondary allocation quantity */
+ ttr_t DS1LSTAR; /* last used track and block on track */
+ u_int16_t DS1TRBAL; /* space remaining on last used track */
+ u_int16_t res1; /* reserved */
+ extent_t DS1EXT1; /* first extent description */
+ extent_t DS1EXT2; /* second extent description */
+ extent_t DS1EXT3; /* third extent description */
+ cchhb_t DS1PTRDS; /* possible pointer to f2 or f3 DSCB */
+};
+
+struct __attribute__ ((packed)) format4_label {
+ char DS4KEYCD[44]; /* key code for VTOC labels: 44 times 0x04 */
+ u_int8_t DS4IDFMT; /* format identifier */
+ cchhb_t DS4HPCHR; /* highest address of a format 1 DSCB */
+ u_int16_t DS4DSREC; /* number of available DSCB's */
+ cchh_t DS4HCCHH; /* CCHH of next available alternate track */
+ u_int16_t DS4NOATK; /* number of remaining alternate tracks */
+ u_int8_t DS4VTOCI; /* VTOC indicators */
+ u_int8_t DS4NOEXT; /* number of extents in VTOC */
+ u_int8_t DS4SMSFG; /* system managed storage indicators */
+ u_int8_t DS4DEVAC; /* number of alternate cylinders.
+ Subtract from first two bytes of
+ DS4DEVSZ to get number of usable
+ cylinders. can be zero. valid
+ only if DS4DEVAV on. */
+ dev_const_t DS4DEVCT; /* device constants */
+ char DS4AMTIM[8]; /* VSAM timestamp */
+ char DS4AMCAT[3]; /* VSAM catalog indicator */
+ char DS4R2TIM[8]; /* VSAM volume/catalog match timestamp */
+ char res1[5]; /* reserved */
+ char DS4F6PTR[5]; /* pointer to first format 6 DSCB */
+ extent_t DS4VTOCE; /* VTOC extent description */
+ char res2[10]; /* reserved */
+ u_int8_t DS4EFLVL; /* extended free-space management level */
+ cchhb_t DS4EFPTR; /* pointer to extended free-space info */
+ char res3; /* reserved */
+ u_int32_t DS4DCYL; /* number of logical cyls */
+ char res4[2]; /* reserved */
+ u_int8_t DS4DEVF2; /* device flags */
+ char res5; /* reserved */
+};
+
+struct __attribute__ ((packed)) ds5ext {
+ u_int16_t t; /* RTA of the first track of free extent */
+ u_int16_t fc; /* number of whole cylinders in free ext. */
+ u_int8_t ft; /* number of remaining free tracks */
+};
+
+struct __attribute__ ((packed)) format5_label {
+ char DS5KEYID[4]; /* key identifier */
+ ds5ext_t DS5AVEXT; /* first available (free-space) extent. */
+ ds5ext_t DS5EXTAV[7]; /* seven available extents */
+ u_int8_t DS5FMTID; /* format identifier */
+ ds5ext_t DS5MAVET[18]; /* eighteen available extents */
+ cchhb_t DS5PTRDS; /* pointer to next format5 DSCB */
+};
+
+struct __attribute__ ((packed)) ds7ext {
+ u_int32_t a; /* starting RTA value */
+ u_int32_t b; /* ending RTA value + 1 */
+};
+
+struct __attribute__ ((packed)) format7_label {
+ char DS7KEYID[4]; /* key identifier */
+ ds7ext_t DS7EXTNT[5]; /* space for 5 extent descriptions */
+ u_int8_t DS7FMTID; /* format identifier */
+ ds7ext_t DS7ADEXT[11]; /* space for 11 extent descriptions */
+ char res1[2]; /* reserved */
+ cchhb_t DS7PTRDS; /* pointer to next FMT7 DSCB */
+};
+
+struct __attribute__ ((packed)) format9_label {
+ u_int8_t DS9KEYID; /* key code for format 9 labels (0x09) */
+ u_int8_t DS9SUBTY; /* subtype (0x01) */
+ u_int8_t DS9NUMF9; /* number of F9 datasets */
+ u_int8_t res1[41]; /* reserved */
+ u_int8_t DS9FMTID; /* format identifier */
+ u_int8_t res2[95]; /* reserved */
+};
+
+char *vtoc_ebcdic_enc (char const *source, char *target, int l);
+char *vtoc_ebcdic_dec (char const *source, char *target, int l);
+void vtoc_set_extent (extent_t *ext, u_int8_t typeind, u_int8_t seqno,
+ cchh_t *lower, cchh_t *upper);
+void vtoc_set_cchh (cchh_t *addr, u_int32_t cc, u_int16_t hh);
+u_int32_t vtoc_get_cyl_from_cchh(cchh_t *addr);
+u_int16_t vtoc_get_head_from_cchh(cchh_t *addr);
+void vtoc_set_cchhb (cchhb_t *addr, u_int32_t cc, u_int16_t hh, u_int8_t b);
+u_int32_t vtoc_get_cyl_from_cchhb(cchhb_t *addr);
+u_int16_t vtoc_get_head_from_cchhb(cchhb_t *addr);
+u_int64_t cchhb2blk(cchhb_t *p, struct fdasd_hd_geometry *geo);
+u_int64_t cchh2blk (cchh_t *p, struct fdasd_hd_geometry *geo);
+u_int32_t cchh2trk (cchh_t *p, struct fdasd_hd_geometry *geo);
+void vtoc_set_date (labeldate_t *d, u_int8_t year, u_int16_t day);
+
+void vtoc_volume_label_init (volume_label_t *vlabel);
+
+int vtoc_read_volume_label (int fd, unsigned long vlabel_start,
+ volume_label_t *vlabel);
+
+int vtoc_write_volume_label (int fd, unsigned long vlabel_start,
+ volume_label_t const *vlabel);
+
+void vtoc_volume_label_set_volser (volume_label_t *vlabel, char const *volser);
+
+char *vtoc_volume_label_get_volser (volume_label_t *vlabel, char *volser);
+
+void vtoc_volume_label_set_key (volume_label_t *vlabel, char const *key);
+
+void vtoc_volume_label_set_label (volume_label_t *vlabel, char const *lbl);
+
+char *vtoc_volume_label_get_label (volume_label_t *vlabel, char *lbl);
+
+void vtoc_read_label (int fd, unsigned long position, format1_label_t *f1,
+ format4_label_t *f4, format5_label_t *f5,
+ format7_label_t *f7);
+
+void vtoc_write_label (int fd, unsigned long position,
+ format1_label_t const *f1,
+ format4_label_t const *f4,
+ format5_label_t const *f5,
+ format7_label_t const *f7,
+ format9_label_t const *f9);
+
+void vtoc_init_format1_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1);
+
+void vtoc_init_format4_label (format4_label_t *f4lbl,
+ unsigned int compat_cylinders,
+ unsigned int real_cylinders,
+ unsigned int tracks,
+ unsigned int blocks,
+ unsigned int blksize,
+ u_int16_t dev_type);
+
+void vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1,
+ u_int16_t unused_update);
+
+void vtoc_init_format5_label (format5_label_t *f5);
+
+void vtoc_update_format5_label_add (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b,
+ u_int8_t c);
+
+void vtoc_update_format5_label_del (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b,
+ u_int8_t c);
+
+void vtoc_init_format7_label (format7_label_t *f7);
+
+void vtoc_update_format7_label_add (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b);
+
+void vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b);
+
+void vtoc_init_format8_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1);
+
+void vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8);
+
+void vtoc_init_format9_label (format9_label_t *f9);
+
+void vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5,
+ format7_label_t *f7, char ch, int verbose,
+ u_int32_t start, u_int32_t stop, u_int32_t cyl,
+ u_int32_t trk);
+
+#endif /* VTOC_H */
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644
index 0000000..89c4aec
--- /dev/null
+++ b/lib/Makefile.am
@@ -0,0 +1,14 @@
+AM_CFLAGS =
+AM_CPPFLAGS =
+BUILT_SOURCES =
+CLEANFILES =
+EXTRA_DIST =
+MAINTAINERCLEANFILES =
+MOSTLYCLEANDIRS =
+MOSTLYCLEANFILES =
+SUFFIXES =
+noinst_LTLIBRARIES =
+
+include gnulib.mk
+
+AM_CFLAGS += $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644
index 0000000..edfa863
--- /dev/null
+++ b/lib/Makefile.in
@@ -0,0 +1,4923 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by:
+# gnulib-tool --import --local-dir=gl \
+# --lib=libgnulib \
+# --source-base=lib \
+# --m4-base=m4 \
+# --doc-base=doc \
+# --tests-base=gnulib-tests \
+# --aux-dir=build-aux \
+# --with-tests \
+# --makefile-name=gnulib.mk \
+# --no-conditional-dependencies \
+# --libtool \
+# --macro-prefix=gl \
+# --avoid=dummy \
+# alloca \
+# announce-gen \
+# argmatch \
+# assert \
+# c-ctype \
+# c-strcase \
+# calloc-gnu \
+# canonicalize-lgpl \
+# close \
+# closeout \
+# config-h \
+# configmake \
+# dirname \
+# do-release-commit-and-tag \
+# fdl \
+# fsync \
+# gettext-h \
+# git-version-gen \
+# gitlog-to-changelog \
+# gnu-web-doc-update \
+# gnumakefile \
+# gnupload \
+# inttypes \
+# lib-ignore \
+# long-options \
+# lseek \
+# maintainer-makefile \
+# malloc-gnu \
+# manywarnings \
+# mkstemp \
+# mktempd \
+# progname \
+# realloc-gnu \
+# rpmatch \
+# safe-read \
+# stdbool \
+# strdup-posix \
+# unlink \
+# update-copyright \
+# useless-if-before-free \
+# usleep \
+# vc-list-files \
+# version-etc-fsf \
+# warnings \
+# xstrtol \
+# xstrtoll
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@GL_COND_OBJ_BTOWC_TRUE@am__append_1 = btowc.c
+@GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__append_2 = canonicalize-lgpl.c
+@GL_COND_OBJ_CLOSE_TRUE@am__append_3 = close.c
+@GL_COND_OBJ_DUP2_TRUE@am__append_4 = dup2.c
+@GL_COND_OBJ_ERROR_TRUE@am__append_5 = error.c
+@GL_COND_OBJ_FCNTL_TRUE@am__append_6 = fcntl.c
+@GL_COND_OBJ_FPENDING_TRUE@am__append_7 = fpending.c
+@GL_COND_OBJ_FREE_TRUE@am__append_8 = free.c
+@GL_COND_OBJ_FSTAT_TRUE@am__append_9 = fstat.c
+@GL_COND_OBJ_FSYNC_TRUE@am__append_10 = fsync.c
+@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_11 = getdtablesize.c
+@GL_COND_OBJ_GETOPT_TRUE@am__append_12 = getopt.c getopt1.c
+@GL_COND_OBJ_GETPROGNAME_TRUE@am__append_13 = getprogname.c
+@GL_COND_OBJ_GETRANDOM_TRUE@am__append_14 = getrandom.c
+@GL_COND_OBJ_LOCALECONV_TRUE@am__append_15 = localeconv.c
+@GL_COND_OBJ_LSEEK_TRUE@am__append_16 = lseek.c
+@GL_COND_OBJ_LSTAT_TRUE@am__append_17 = lstat.c
+@GL_COND_OBJ_MBRTOWC_TRUE@am__append_18 = mbrtowc.c
+@GL_COND_OBJ_MBSINIT_TRUE@am__append_19 = mbsinit.c
+@GL_COND_OBJ_MBTOWC_TRUE@am__append_20 = mbtowc.c
+@GL_COND_OBJ_MEMPCPY_TRUE@am__append_21 = mempcpy.c
+@GL_COND_OBJ_MKDIR_TRUE@am__append_22 = mkdir.c
+@GL_COND_OBJ_MKSTEMP_TRUE@am__append_23 = mkstemp.c
+@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_24 = msvc-inval.c
+@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_25 = msvc-nothrow.c
+@GL_COND_OBJ_NL_LANGINFO_TRUE@am__append_26 = nl_langinfo.c
+@GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__append_27 = nl_langinfo-lock.c
+@GL_COND_OBJ_OPEN_TRUE@am__append_28 = open.c
+@GL_COND_OBJ_RAWMEMCHR_TRUE@am__append_29 = rawmemchr.c
+@GL_COND_OBJ_READ_TRUE@am__append_30 = read.c
+@GL_COND_OBJ_READLINK_TRUE@am__append_31 = readlink.c
+@GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_32 = reallocarray.c
+@GL_COND_OBJ_REGEX_TRUE@am__append_33 = regex.c
+@GL_COND_OBJ_RPMATCH_TRUE@am__append_34 = rpmatch.c
+@GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__append_35 = setlocale-lock.c
+@GL_COND_OBJ_SLEEP_TRUE@am__append_36 = sleep.c
+@GL_COND_OBJ_STAT_TRUE@am__append_37 = stat.c
+@GL_COND_OBJ_STDIO_READ_TRUE@am__append_38 = stdio-read.c
+@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_39 = stdio-write.c
+@GL_COND_OBJ_STRDUP_TRUE@am__append_40 = strdup.c
+@GL_COND_OBJ_STRERROR_TRUE@am__append_41 = strerror.c
+@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_42 = strerror-override.c
+@GL_COND_OBJ_STRTOLL_TRUE@am__append_43 = strtoll.c
+@GL_COND_OBJ_STRTOULL_TRUE@am__append_44 = strtoull.c
+@GL_COND_OBJ_UNLINK_TRUE@am__append_45 = unlink.c
+@GL_COND_OBJ_USLEEP_TRUE@am__append_46 = usleep.c
+@GL_COND_OBJ_WCRTOMB_TRUE@am__append_47 = wcrtomb.c
+@GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__append_48 = windows-mutex.c
+@GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__append_49 = windows-once.c
+@GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__append_50 = windows-recmutex.c
+@GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__append_51 = windows-rwlock.c
+subdir = lib
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__libgnulib_la_SOURCES_DIST = argmatch.c basename-lgpl.c btowc.c \
+ c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c c-strncasecmp.c \
+ canonicalize-lgpl.c cloexec.c close.c close-stream.c \
+ closeout.c dirname.c basename.c dirname-lgpl.c stripslash.c \
+ dup2.c error.c exitfail.c fcntl.c fd-hook.c fpending.c free.c \
+ fstat.c fsync.c getdtablesize.c getopt.c getopt1.c \
+ getprogname.c getrandom.c gettext.h \
+ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \
+ malloc/dynarray_finalize.c malloc/dynarray_resize.c \
+ malloc/dynarray_resize_clear.c malloc/scratch_buffer_grow.c \
+ malloc/scratch_buffer_grow_preserve.c \
+ malloc/scratch_buffer_set_array_size.c hard-locale.c ialloc.c \
+ idx.h localcharset.c localeconv.c glthread/lock.h \
+ glthread/lock.c long-options.c lseek.c lstat.c malloca.c \
+ mbrtowc.c mbsinit.c mbtowc.c mempcpy.c minmax.h mkdir.c \
+ mkstemp.c msvc-inval.c msvc-nothrow.c nl_langinfo.c \
+ nl_langinfo-lock.c open.c progname.h progname.c quotearg.c \
+ rawmemchr.c read.c readlink.c reallocarray.c regex.c rpmatch.c \
+ safe-read.c setlocale_null.c setlocale-lock.c sleep.c stat.c \
+ stat-time.c stdio-read.c stdio-write.c strdup.c strerror.c \
+ strerror-override.c strtoll.c strtoull.c tempname.c \
+ glthread/threadlib.c unistd.c unlink.c usleep.c version-etc.h \
+ version-etc.c version-etc-fsf.c wcrtomb.c wctype-h.c \
+ windows-mutex.c windows-once.c windows-recmutex.c \
+ windows-rwlock.c xmalloc.c xalloc-die.c xstrtol.c xstrtoul.c \
+ xstrtoll.c xstrtoull.c
+@GL_COND_OBJ_BTOWC_TRUE@am__objects_1 = libgnulib_la-btowc.lo
+@GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__objects_2 = libgnulib_la-canonicalize-lgpl.lo
+@GL_COND_OBJ_CLOSE_TRUE@am__objects_3 = libgnulib_la-close.lo
+@GL_COND_OBJ_DUP2_TRUE@am__objects_4 = libgnulib_la-dup2.lo
+@GL_COND_OBJ_ERROR_TRUE@am__objects_5 = libgnulib_la-error.lo
+@GL_COND_OBJ_FCNTL_TRUE@am__objects_6 = libgnulib_la-fcntl.lo
+@GL_COND_OBJ_FPENDING_TRUE@am__objects_7 = libgnulib_la-fpending.lo
+@GL_COND_OBJ_FREE_TRUE@am__objects_8 = libgnulib_la-free.lo
+@GL_COND_OBJ_FSTAT_TRUE@am__objects_9 = libgnulib_la-fstat.lo
+@GL_COND_OBJ_FSYNC_TRUE@am__objects_10 = libgnulib_la-fsync.lo
+@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_11 = \
+@GL_COND_OBJ_GETDTABLESIZE_TRUE@ libgnulib_la-getdtablesize.lo
+@GL_COND_OBJ_GETOPT_TRUE@am__objects_12 = libgnulib_la-getopt.lo \
+@GL_COND_OBJ_GETOPT_TRUE@ libgnulib_la-getopt1.lo
+@GL_COND_OBJ_GETPROGNAME_TRUE@am__objects_13 = \
+@GL_COND_OBJ_GETPROGNAME_TRUE@ libgnulib_la-getprogname.lo
+@GL_COND_OBJ_GETRANDOM_TRUE@am__objects_14 = \
+@GL_COND_OBJ_GETRANDOM_TRUE@ libgnulib_la-getrandom.lo
+am__dirstamp = $(am__leading_dot)dirstamp
+@GL_COND_OBJ_LOCALECONV_TRUE@am__objects_15 = \
+@GL_COND_OBJ_LOCALECONV_TRUE@ libgnulib_la-localeconv.lo
+@GL_COND_OBJ_LSEEK_TRUE@am__objects_16 = libgnulib_la-lseek.lo
+@GL_COND_OBJ_LSTAT_TRUE@am__objects_17 = libgnulib_la-lstat.lo
+@GL_COND_OBJ_MBRTOWC_TRUE@am__objects_18 = libgnulib_la-mbrtowc.lo
+@GL_COND_OBJ_MBSINIT_TRUE@am__objects_19 = libgnulib_la-mbsinit.lo
+@GL_COND_OBJ_MBTOWC_TRUE@am__objects_20 = libgnulib_la-mbtowc.lo
+@GL_COND_OBJ_MEMPCPY_TRUE@am__objects_21 = libgnulib_la-mempcpy.lo
+@GL_COND_OBJ_MKDIR_TRUE@am__objects_22 = libgnulib_la-mkdir.lo
+@GL_COND_OBJ_MKSTEMP_TRUE@am__objects_23 = libgnulib_la-mkstemp.lo
+@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_24 = \
+@GL_COND_OBJ_MSVC_INVAL_TRUE@ libgnulib_la-msvc-inval.lo
+@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_25 = \
+@GL_COND_OBJ_MSVC_NOTHROW_TRUE@ libgnulib_la-msvc-nothrow.lo
+@GL_COND_OBJ_NL_LANGINFO_TRUE@am__objects_26 = \
+@GL_COND_OBJ_NL_LANGINFO_TRUE@ libgnulib_la-nl_langinfo.lo
+@GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__objects_27 = libgnulib_la-nl_langinfo-lock.lo
+@GL_COND_OBJ_OPEN_TRUE@am__objects_28 = libgnulib_la-open.lo
+@GL_COND_OBJ_RAWMEMCHR_TRUE@am__objects_29 = \
+@GL_COND_OBJ_RAWMEMCHR_TRUE@ libgnulib_la-rawmemchr.lo
+@GL_COND_OBJ_READ_TRUE@am__objects_30 = libgnulib_la-read.lo
+@GL_COND_OBJ_READLINK_TRUE@am__objects_31 = libgnulib_la-readlink.lo
+@GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_32 = \
+@GL_COND_OBJ_REALLOCARRAY_TRUE@ libgnulib_la-reallocarray.lo
+@GL_COND_OBJ_REGEX_TRUE@am__objects_33 = libgnulib_la-regex.lo
+@GL_COND_OBJ_RPMATCH_TRUE@am__objects_34 = libgnulib_la-rpmatch.lo
+@GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__objects_35 = libgnulib_la-setlocale-lock.lo
+@GL_COND_OBJ_SLEEP_TRUE@am__objects_36 = libgnulib_la-sleep.lo
+@GL_COND_OBJ_STAT_TRUE@am__objects_37 = libgnulib_la-stat.lo
+@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_38 = \
+@GL_COND_OBJ_STDIO_READ_TRUE@ libgnulib_la-stdio-read.lo
+@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_39 = \
+@GL_COND_OBJ_STDIO_WRITE_TRUE@ libgnulib_la-stdio-write.lo
+@GL_COND_OBJ_STRDUP_TRUE@am__objects_40 = libgnulib_la-strdup.lo
+@GL_COND_OBJ_STRERROR_TRUE@am__objects_41 = libgnulib_la-strerror.lo
+@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_42 = libgnulib_la-strerror-override.lo
+@GL_COND_OBJ_STRTOLL_TRUE@am__objects_43 = libgnulib_la-strtoll.lo
+@GL_COND_OBJ_STRTOULL_TRUE@am__objects_44 = libgnulib_la-strtoull.lo
+@GL_COND_OBJ_UNLINK_TRUE@am__objects_45 = libgnulib_la-unlink.lo
+@GL_COND_OBJ_USLEEP_TRUE@am__objects_46 = libgnulib_la-usleep.lo
+@GL_COND_OBJ_WCRTOMB_TRUE@am__objects_47 = libgnulib_la-wcrtomb.lo
+@GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__objects_48 = \
+@GL_COND_OBJ_WINDOWS_MUTEX_TRUE@ libgnulib_la-windows-mutex.lo
+@GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__objects_49 = \
+@GL_COND_OBJ_WINDOWS_ONCE_TRUE@ libgnulib_la-windows-once.lo
+@GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__objects_50 = libgnulib_la-windows-recmutex.lo
+@GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__objects_51 = libgnulib_la-windows-rwlock.lo
+am_libgnulib_la_OBJECTS = libgnulib_la-argmatch.lo \
+ libgnulib_la-basename-lgpl.lo $(am__objects_1) \
+ libgnulib_la-c-ctype.lo libgnulib_la-c-strcasecmp.lo \
+ libgnulib_la-c-strncasecmp.lo $(am__objects_2) \
+ libgnulib_la-cloexec.lo $(am__objects_3) \
+ libgnulib_la-close-stream.lo libgnulib_la-closeout.lo \
+ libgnulib_la-dirname.lo libgnulib_la-basename.lo \
+ libgnulib_la-dirname-lgpl.lo libgnulib_la-stripslash.lo \
+ $(am__objects_4) $(am__objects_5) libgnulib_la-exitfail.lo \
+ $(am__objects_6) libgnulib_la-fd-hook.lo $(am__objects_7) \
+ $(am__objects_8) $(am__objects_9) $(am__objects_10) \
+ $(am__objects_11) $(am__objects_12) $(am__objects_13) \
+ $(am__objects_14) malloc/libgnulib_la-dynarray_at_failure.lo \
+ malloc/libgnulib_la-dynarray_emplace_enlarge.lo \
+ malloc/libgnulib_la-dynarray_finalize.lo \
+ malloc/libgnulib_la-dynarray_resize.lo \
+ malloc/libgnulib_la-dynarray_resize_clear.lo \
+ malloc/libgnulib_la-scratch_buffer_grow.lo \
+ malloc/libgnulib_la-scratch_buffer_grow_preserve.lo \
+ malloc/libgnulib_la-scratch_buffer_set_array_size.lo \
+ libgnulib_la-hard-locale.lo libgnulib_la-ialloc.lo \
+ libgnulib_la-localcharset.lo $(am__objects_15) \
+ glthread/libgnulib_la-lock.lo libgnulib_la-long-options.lo \
+ $(am__objects_16) $(am__objects_17) libgnulib_la-malloca.lo \
+ $(am__objects_18) $(am__objects_19) $(am__objects_20) \
+ $(am__objects_21) $(am__objects_22) $(am__objects_23) \
+ $(am__objects_24) $(am__objects_25) $(am__objects_26) \
+ $(am__objects_27) $(am__objects_28) libgnulib_la-progname.lo \
+ libgnulib_la-quotearg.lo $(am__objects_29) $(am__objects_30) \
+ $(am__objects_31) $(am__objects_32) $(am__objects_33) \
+ $(am__objects_34) libgnulib_la-safe-read.lo \
+ libgnulib_la-setlocale_null.lo $(am__objects_35) \
+ $(am__objects_36) $(am__objects_37) libgnulib_la-stat-time.lo \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40) \
+ $(am__objects_41) $(am__objects_42) $(am__objects_43) \
+ $(am__objects_44) libgnulib_la-tempname.lo \
+ glthread/libgnulib_la-threadlib.lo libgnulib_la-unistd.lo \
+ $(am__objects_45) $(am__objects_46) \
+ libgnulib_la-version-etc.lo libgnulib_la-version-etc-fsf.lo \
+ $(am__objects_47) libgnulib_la-wctype-h.lo $(am__objects_48) \
+ $(am__objects_49) $(am__objects_50) $(am__objects_51) \
+ libgnulib_la-xmalloc.lo libgnulib_la-xalloc-die.lo \
+ libgnulib_la-xstrtol.lo libgnulib_la-xstrtoul.lo \
+ libgnulib_la-xstrtoll.lo libgnulib_la-xstrtoull.lo
+libgnulib_la_OBJECTS = $(am_libgnulib_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libgnulib_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgnulib_la_CFLAGS) \
+ $(CFLAGS) $(libgnulib_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/alloca.Plo \
+ ./$(DEPDIR)/libgnulib_la-alloca.Plo \
+ ./$(DEPDIR)/libgnulib_la-argmatch.Plo \
+ ./$(DEPDIR)/libgnulib_la-basename-lgpl.Plo \
+ ./$(DEPDIR)/libgnulib_la-basename.Plo \
+ ./$(DEPDIR)/libgnulib_la-btowc.Plo \
+ ./$(DEPDIR)/libgnulib_la-c-ctype.Plo \
+ ./$(DEPDIR)/libgnulib_la-c-strcasecmp.Plo \
+ ./$(DEPDIR)/libgnulib_la-c-strncasecmp.Plo \
+ ./$(DEPDIR)/libgnulib_la-calloc.Plo \
+ ./$(DEPDIR)/libgnulib_la-canonicalize-lgpl.Plo \
+ ./$(DEPDIR)/libgnulib_la-cloexec.Plo \
+ ./$(DEPDIR)/libgnulib_la-close-stream.Plo \
+ ./$(DEPDIR)/libgnulib_la-close.Plo \
+ ./$(DEPDIR)/libgnulib_la-closeout.Plo \
+ ./$(DEPDIR)/libgnulib_la-dirname-lgpl.Plo \
+ ./$(DEPDIR)/libgnulib_la-dirname.Plo \
+ ./$(DEPDIR)/libgnulib_la-dup2.Plo \
+ ./$(DEPDIR)/libgnulib_la-error.Plo \
+ ./$(DEPDIR)/libgnulib_la-exitfail.Plo \
+ ./$(DEPDIR)/libgnulib_la-fcntl.Plo \
+ ./$(DEPDIR)/libgnulib_la-fd-hook.Plo \
+ ./$(DEPDIR)/libgnulib_la-fpending.Plo \
+ ./$(DEPDIR)/libgnulib_la-free.Plo \
+ ./$(DEPDIR)/libgnulib_la-fstat.Plo \
+ ./$(DEPDIR)/libgnulib_la-fsync.Plo \
+ ./$(DEPDIR)/libgnulib_la-getdtablesize.Plo \
+ ./$(DEPDIR)/libgnulib_la-getopt.Plo \
+ ./$(DEPDIR)/libgnulib_la-getopt1.Plo \
+ ./$(DEPDIR)/libgnulib_la-getprogname.Plo \
+ ./$(DEPDIR)/libgnulib_la-getrandom.Plo \
+ ./$(DEPDIR)/libgnulib_la-hard-locale.Plo \
+ ./$(DEPDIR)/libgnulib_la-ialloc.Plo \
+ ./$(DEPDIR)/libgnulib_la-lc-charset-dispatch.Plo \
+ ./$(DEPDIR)/libgnulib_la-localcharset.Plo \
+ ./$(DEPDIR)/libgnulib_la-localeconv.Plo \
+ ./$(DEPDIR)/libgnulib_la-long-options.Plo \
+ ./$(DEPDIR)/libgnulib_la-lseek.Plo \
+ ./$(DEPDIR)/libgnulib_la-lstat.Plo \
+ ./$(DEPDIR)/libgnulib_la-malloc.Plo \
+ ./$(DEPDIR)/libgnulib_la-malloca.Plo \
+ ./$(DEPDIR)/libgnulib_la-mbrtowc.Plo \
+ ./$(DEPDIR)/libgnulib_la-mbsinit.Plo \
+ ./$(DEPDIR)/libgnulib_la-mbtowc-lock.Plo \
+ ./$(DEPDIR)/libgnulib_la-mbtowc.Plo \
+ ./$(DEPDIR)/libgnulib_la-mempcpy.Plo \
+ ./$(DEPDIR)/libgnulib_la-mkdir.Plo \
+ ./$(DEPDIR)/libgnulib_la-mkstemp.Plo \
+ ./$(DEPDIR)/libgnulib_la-msvc-inval.Plo \
+ ./$(DEPDIR)/libgnulib_la-msvc-nothrow.Plo \
+ ./$(DEPDIR)/libgnulib_la-nl_langinfo-lock.Plo \
+ ./$(DEPDIR)/libgnulib_la-nl_langinfo.Plo \
+ ./$(DEPDIR)/libgnulib_la-open.Plo \
+ ./$(DEPDIR)/libgnulib_la-progname.Plo \
+ ./$(DEPDIR)/libgnulib_la-quotearg.Plo \
+ ./$(DEPDIR)/libgnulib_la-rawmemchr.Plo \
+ ./$(DEPDIR)/libgnulib_la-read.Plo \
+ ./$(DEPDIR)/libgnulib_la-readlink.Plo \
+ ./$(DEPDIR)/libgnulib_la-realloc.Plo \
+ ./$(DEPDIR)/libgnulib_la-reallocarray.Plo \
+ ./$(DEPDIR)/libgnulib_la-regcomp.Plo \
+ ./$(DEPDIR)/libgnulib_la-regex.Plo \
+ ./$(DEPDIR)/libgnulib_la-regex_internal.Plo \
+ ./$(DEPDIR)/libgnulib_la-regexec.Plo \
+ ./$(DEPDIR)/libgnulib_la-rpmatch.Plo \
+ ./$(DEPDIR)/libgnulib_la-safe-read.Plo \
+ ./$(DEPDIR)/libgnulib_la-setlocale-lock.Plo \
+ ./$(DEPDIR)/libgnulib_la-setlocale_null.Plo \
+ ./$(DEPDIR)/libgnulib_la-sleep.Plo \
+ ./$(DEPDIR)/libgnulib_la-stat-time.Plo \
+ ./$(DEPDIR)/libgnulib_la-stat-w32.Plo \
+ ./$(DEPDIR)/libgnulib_la-stat.Plo \
+ ./$(DEPDIR)/libgnulib_la-stdio-read.Plo \
+ ./$(DEPDIR)/libgnulib_la-stdio-write.Plo \
+ ./$(DEPDIR)/libgnulib_la-strdup.Plo \
+ ./$(DEPDIR)/libgnulib_la-strerror-override.Plo \
+ ./$(DEPDIR)/libgnulib_la-strerror.Plo \
+ ./$(DEPDIR)/libgnulib_la-stripslash.Plo \
+ ./$(DEPDIR)/libgnulib_la-strtol.Plo \
+ ./$(DEPDIR)/libgnulib_la-strtoll.Plo \
+ ./$(DEPDIR)/libgnulib_la-strtoul.Plo \
+ ./$(DEPDIR)/libgnulib_la-strtoull.Plo \
+ ./$(DEPDIR)/libgnulib_la-tempname.Plo \
+ ./$(DEPDIR)/libgnulib_la-unistd.Plo \
+ ./$(DEPDIR)/libgnulib_la-unlink.Plo \
+ ./$(DEPDIR)/libgnulib_la-usleep.Plo \
+ ./$(DEPDIR)/libgnulib_la-version-etc-fsf.Plo \
+ ./$(DEPDIR)/libgnulib_la-version-etc.Plo \
+ ./$(DEPDIR)/libgnulib_la-wcrtomb.Plo \
+ ./$(DEPDIR)/libgnulib_la-wctype-h.Plo \
+ ./$(DEPDIR)/libgnulib_la-windows-mutex.Plo \
+ ./$(DEPDIR)/libgnulib_la-windows-once.Plo \
+ ./$(DEPDIR)/libgnulib_la-windows-recmutex.Plo \
+ ./$(DEPDIR)/libgnulib_la-windows-rwlock.Plo \
+ ./$(DEPDIR)/libgnulib_la-xalloc-die.Plo \
+ ./$(DEPDIR)/libgnulib_la-xmalloc.Plo \
+ ./$(DEPDIR)/libgnulib_la-xstrtol.Plo \
+ ./$(DEPDIR)/libgnulib_la-xstrtoll.Plo \
+ ./$(DEPDIR)/libgnulib_la-xstrtoul.Plo \
+ ./$(DEPDIR)/libgnulib_la-xstrtoull.Plo \
+ glthread/$(DEPDIR)/libgnulib_la-lock.Plo \
+ glthread/$(DEPDIR)/libgnulib_la-threadlib.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Plo \
+ malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libgnulib_la_SOURCES) $(EXTRA_libgnulib_la_SOURCES)
+DIST_SOURCES = $(am__libgnulib_la_SOURCES_DIST) \
+ $(EXTRA_libgnulib_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
+ config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+ $(srcdir)/gnulib.mk $(top_srcdir)/build-aux/depcomp alloca.c
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = $(GNULIB_WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS =
+BUILT_SOURCES = $(ALLOCA_H) $(ASSERT_H) configmake.h $(ERRNO_H) \
+ $(ERROR_H) fcntl.h $(GETOPT_H) $(GETOPT_CDEFS_H) \
+ malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h \
+ malloc/scratch_buffer.gl.h inttypes.h langinfo.h $(LIMITS_H) \
+ locale.h $(STDARG_H) $(STDCKDINT_H) $(STDDEF_H) $(STDINT_H) \
+ stdio.h stdlib.h string.h sys/random.h sys/stat.h sys/types.h \
+ time.h unistd.h wchar.h wctype.h
+CLEANFILES = configmake.h configmake.h-t
+EXTRA_DIST = alloca.c alloca.in.h $(top_srcdir)/build-aux/announce-gen \
+ argmatch.h assert.in.h verify.h assure.h attribute.h \
+ basename-lgpl.h c-strcaseeq.h calloc.c calloc.c cloexec.h \
+ close-stream.h closeout.h stripslash.c dirname.h \
+ $(top_srcdir)/build-aux/do-release-commit-and-tag \
+ eloop-threshold.h errno.in.h error.in.h exitfail.h fcntl.in.h \
+ fd-hook.h filename.h fpending.h stdio-impl.h stat-w32.c \
+ stat-w32.h $(top_srcdir)/build-aux/gendocs.sh \
+ getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h \
+ getopt-pfx-ext.h getopt.in.h getopt_int.h getprogname.h \
+ $(top_srcdir)/build-aux/git-version-gen \
+ $(top_srcdir)/build-aux/gitlog-to-changelog dynarray.h \
+ malloc/dynarray-skeleton.c malloc/dynarray.h \
+ malloc/scratch_buffer.h scratch_buffer.h \
+ $(top_srcdir)/build-aux/gnu-web-doc-update \
+ $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \
+ hard-locale.h ialloc.h intprops-internal.h intprops.h \
+ inttypes.in.h langinfo.in.h cdefs.h libc-config.h limits.in.h \
+ localcharset.h locale.in.h long-options.h \
+ $(top_srcdir)/maint.mk malloc.c malloc.c malloca.h \
+ lc-charset-dispatch.c lc-charset-dispatch.h \
+ mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h \
+ windows-initguard.h mbtowc-impl.h \
+ $(top_srcdir)/build-aux/mktempd msvc-inval.h msvc-nothrow.h \
+ windows-initguard.h pathmax.h quote.h quote.h quotearg.h \
+ rawmemchr.valgrind realloc.c realloc.c regcomp.c regex.h \
+ regex_internal.c regex_internal.h regexec.c safe-read.h \
+ sys-limits.h setlocale_null.h windows-initguard.h _Noreturn.h \
+ arg-nonnull.h c++defs.h warn-on-use.h stat-w32.c stat-w32.h \
+ stat-time.h stdarg.in.h intprops-internal.h stdckdint.in.h \
+ stddef.in.h stdint.in.h stdio.in.h stdlib.in.h streq.h \
+ strerror-override.h string.in.h strtol.c strtol.c strtoul.c \
+ sys_random.in.h sys_stat.in.h sys_types.in.h tempname.h \
+ time.in.h unistd.in.h $(top_srcdir)/build-aux/update-copyright \
+ $(top_srcdir)/build-aux/useless-if-before-free \
+ $(top_srcdir)/build-aux/vc-list-files verify.h wchar.in.h \
+ wctype.in.h windows-initguard.h windows-mutex.h windows-once.h \
+ windows-initguard.h windows-recmutex.h windows-initguard.h \
+ windows-rwlock.h xalloc.h xalloc.h xalloc-oversized.h \
+ xstrtol.h
+MAINTAINERCLEANFILES =
+MOSTLYCLEANDIRS = sys sys
+MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t assert.h \
+ assert.h-t errno.h errno.h-t error.h error.h-t fcntl.h \
+ fcntl.h-t getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t \
+ malloc/dynarray.gl.h malloc/dynarray.gl.h-t \
+ malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t \
+ malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t \
+ inttypes.h inttypes.h-t langinfo.h langinfo.h-t limits.h \
+ limits.h-t locale.h locale.h-t stdarg.h stdarg.h-t stdckdint.h \
+ stdckdint.h-t stddef.h stddef.h-t stdint.h stdint.h-t stdio.h \
+ stdio.h-t stdlib.h stdlib.h-t string.h string.h-t sys/random.h \
+ sys/random.h-t sys/stat.h sys/stat.h-t sys/types.h \
+ sys/types.h-t time.h time.h-t unistd.h unistd.h-t wchar.h \
+ wchar.h-t wctype.h wctype.h-t
+SUFFIXES =
+# No GNU Make output.
+noinst_LTLIBRARIES = libgnulib.la
+libgnulib_la_SOURCES = argmatch.c basename-lgpl.c $(am__append_1) \
+ c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c c-strncasecmp.c \
+ $(am__append_2) cloexec.c $(am__append_3) close-stream.c \
+ closeout.c dirname.c basename.c dirname-lgpl.c stripslash.c \
+ $(am__append_4) $(am__append_5) exitfail.c $(am__append_6) \
+ fd-hook.c $(am__append_7) $(am__append_8) $(am__append_9) \
+ $(am__append_10) $(am__append_11) $(am__append_12) \
+ $(am__append_13) $(am__append_14) gettext.h \
+ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \
+ malloc/dynarray_finalize.c malloc/dynarray_resize.c \
+ malloc/dynarray_resize_clear.c malloc/scratch_buffer_grow.c \
+ malloc/scratch_buffer_grow_preserve.c \
+ malloc/scratch_buffer_set_array_size.c hard-locale.c ialloc.c \
+ idx.h localcharset.c $(am__append_15) glthread/lock.h \
+ glthread/lock.c long-options.c $(am__append_16) \
+ $(am__append_17) malloca.c $(am__append_18) $(am__append_19) \
+ $(am__append_20) $(am__append_21) minmax.h $(am__append_22) \
+ $(am__append_23) $(am__append_24) $(am__append_25) \
+ $(am__append_26) $(am__append_27) $(am__append_28) progname.h \
+ progname.c quotearg.c $(am__append_29) $(am__append_30) \
+ $(am__append_31) $(am__append_32) $(am__append_33) \
+ $(am__append_34) safe-read.c setlocale_null.c $(am__append_35) \
+ $(am__append_36) $(am__append_37) stat-time.c $(am__append_38) \
+ $(am__append_39) $(am__append_40) $(am__append_41) \
+ $(am__append_42) $(am__append_43) $(am__append_44) tempname.c \
+ glthread/threadlib.c unistd.c $(am__append_45) \
+ $(am__append_46) version-etc.h version-etc.c version-etc-fsf.c \
+ $(am__append_47) wctype-h.c $(am__append_48) $(am__append_49) \
+ $(am__append_50) $(am__append_51) xmalloc.c xalloc-die.c \
+ xstrtol.c xstrtoul.c xstrtoll.c xstrtoull.c
+libgnulib_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
+libgnulib_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@
+libgnulib_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@
+EXTRA_libgnulib_la_SOURCES = alloca.c calloc.c calloc.c stripslash.c \
+ stat-w32.c malloc/dynarray-skeleton.c malloc.c malloc.c \
+ lc-charset-dispatch.c mbtowc-lock.c realloc.c realloc.c \
+ regcomp.c regex_internal.c regexec.c stat-w32.c strtol.c \
+ strtol.c strtoul.c
+libgnulib_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(CLOCK_TIME_LIB) \
+ $(GETRANDOM_LIB) $(HARD_LOCALE_LIB) $(LIBTHREAD) $(LTLIBINTL) \
+ $(MBRTOWC_LIB) $(SETLOCALE_NULL_LIB)
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER)
+
+# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
+SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,
+
+# '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT".
+SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
+
+# '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading
+# "DO_NOT_EDIT". Although this could be done more simply via:
+# SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t
+# the -n and 'w' avoid a fork+exec, at least when GNU Make is used.
+SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
+
+# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
+gl_V_at = $(AM_V_GEN)
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+_NORETURN_H = $(srcdir)/_Noreturn.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+ARG_NONNULL_H = $(srcdir)/arg-nonnull.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+CXXDEFS_H = $(srcdir)/c++defs.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+WARN_ON_USE_H = $(srcdir)/warn-on-use.h
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/gnulib.mk $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu lib/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+$(srcdir)/gnulib.mk $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @test -f $@ || rm -f stamp-h1
+ @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status lib/config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+malloc/$(am__dirstamp):
+ @$(MKDIR_P) malloc
+ @: > malloc/$(am__dirstamp)
+malloc/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) malloc/$(DEPDIR)
+ @: > malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray_at_failure.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray_emplace_enlarge.lo: \
+ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray_finalize.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray_resize.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray_resize_clear.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-scratch_buffer_grow.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-scratch_buffer_grow_preserve.lo: \
+ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-scratch_buffer_set_array_size.lo: \
+ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp)
+glthread/$(am__dirstamp):
+ @$(MKDIR_P) glthread
+ @: > glthread/$(am__dirstamp)
+glthread/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) glthread/$(DEPDIR)
+ @: > glthread/$(DEPDIR)/$(am__dirstamp)
+glthread/libgnulib_la-lock.lo: glthread/$(am__dirstamp) \
+ glthread/$(DEPDIR)/$(am__dirstamp)
+glthread/libgnulib_la-threadlib.lo: glthread/$(am__dirstamp) \
+ glthread/$(DEPDIR)/$(am__dirstamp)
+malloc/libgnulib_la-dynarray-skeleton.lo: malloc/$(am__dirstamp) \
+ malloc/$(DEPDIR)/$(am__dirstamp)
+
+libgnulib.la: $(libgnulib_la_OBJECTS) $(libgnulib_la_DEPENDENCIES) $(EXTRA_libgnulib_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgnulib_la_LINK) $(libgnulib_la_OBJECTS) $(libgnulib_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f glthread/*.$(OBJEXT)
+ -rm -f glthread/*.lo
+ -rm -f malloc/*.$(OBJEXT)
+ -rm -f malloc/*.lo
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-alloca.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-argmatch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-basename-lgpl.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-basename.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-btowc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-c-ctype.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-c-strcasecmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-c-strncasecmp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-calloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-canonicalize-lgpl.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-cloexec.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-close-stream.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-close.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-closeout.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-dirname-lgpl.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-dirname.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-dup2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-error.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-exitfail.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-fcntl.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-fd-hook.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-fpending.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-free.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-fstat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-fsync.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-getdtablesize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-getopt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-getopt1.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-getprogname.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-getrandom.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-hard-locale.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-ialloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-lc-charset-dispatch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-localcharset.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-localeconv.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-long-options.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-lseek.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-lstat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-malloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-malloca.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mbrtowc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mbsinit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mbtowc-lock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mbtowc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mempcpy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mkdir.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-mkstemp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-msvc-inval.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-msvc-nothrow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-nl_langinfo-lock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-nl_langinfo.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-open.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-progname.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-quotearg.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-rawmemchr.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-read.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-readlink.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-realloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-reallocarray.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-regcomp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-regex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-regex_internal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-regexec.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-rpmatch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-safe-read.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-setlocale-lock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-setlocale_null.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-sleep.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stat-time.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stat-w32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stdio-read.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stdio-write.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strdup.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strerror-override.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strerror.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-stripslash.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strtol.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strtoll.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strtoul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-strtoull.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-tempname.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-unistd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-unlink.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-usleep.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-version-etc-fsf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-version-etc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-wcrtomb.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-wctype-h.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-windows-mutex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-windows-once.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-windows-recmutex.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-windows-rwlock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xalloc-die.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xmalloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xstrtol.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xstrtoll.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xstrtoul.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnulib_la-xstrtoull.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnulib_la-lock.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnulib_la-threadlib.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgnulib_la-argmatch.lo: argmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-argmatch.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-argmatch.Tpo -c -o libgnulib_la-argmatch.lo `test -f 'argmatch.c' || echo '$(srcdir)/'`argmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-argmatch.Tpo $(DEPDIR)/libgnulib_la-argmatch.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argmatch.c' object='libgnulib_la-argmatch.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-argmatch.lo `test -f 'argmatch.c' || echo '$(srcdir)/'`argmatch.c
+
+libgnulib_la-basename-lgpl.lo: basename-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-basename-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-basename-lgpl.Tpo -c -o libgnulib_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-basename-lgpl.Tpo $(DEPDIR)/libgnulib_la-basename-lgpl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnulib_la-basename-lgpl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c
+
+libgnulib_la-btowc.lo: btowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-btowc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-btowc.Tpo -c -o libgnulib_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-btowc.Tpo $(DEPDIR)/libgnulib_la-btowc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnulib_la-btowc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c
+
+libgnulib_la-c-ctype.lo: c-ctype.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-c-ctype.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-c-ctype.Tpo -c -o libgnulib_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-c-ctype.Tpo $(DEPDIR)/libgnulib_la-c-ctype.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnulib_la-c-ctype.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c
+
+libgnulib_la-c-strcasecmp.lo: c-strcasecmp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-c-strcasecmp.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-c-strcasecmp.Tpo -c -o libgnulib_la-c-strcasecmp.lo `test -f 'c-strcasecmp.c' || echo '$(srcdir)/'`c-strcasecmp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-c-strcasecmp.Tpo $(DEPDIR)/libgnulib_la-c-strcasecmp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-strcasecmp.c' object='libgnulib_la-c-strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-c-strcasecmp.lo `test -f 'c-strcasecmp.c' || echo '$(srcdir)/'`c-strcasecmp.c
+
+libgnulib_la-c-strncasecmp.lo: c-strncasecmp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-c-strncasecmp.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-c-strncasecmp.Tpo -c -o libgnulib_la-c-strncasecmp.lo `test -f 'c-strncasecmp.c' || echo '$(srcdir)/'`c-strncasecmp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-c-strncasecmp.Tpo $(DEPDIR)/libgnulib_la-c-strncasecmp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-strncasecmp.c' object='libgnulib_la-c-strncasecmp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-c-strncasecmp.lo `test -f 'c-strncasecmp.c' || echo '$(srcdir)/'`c-strncasecmp.c
+
+libgnulib_la-canonicalize-lgpl.lo: canonicalize-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-canonicalize-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-canonicalize-lgpl.Tpo -c -o libgnulib_la-canonicalize-lgpl.lo `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-canonicalize-lgpl.Tpo $(DEPDIR)/libgnulib_la-canonicalize-lgpl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='canonicalize-lgpl.c' object='libgnulib_la-canonicalize-lgpl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-canonicalize-lgpl.lo `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c
+
+libgnulib_la-cloexec.lo: cloexec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-cloexec.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-cloexec.Tpo -c -o libgnulib_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-cloexec.Tpo $(DEPDIR)/libgnulib_la-cloexec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnulib_la-cloexec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c
+
+libgnulib_la-close.lo: close.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-close.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-close.Tpo -c -o libgnulib_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-close.Tpo $(DEPDIR)/libgnulib_la-close.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnulib_la-close.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c
+
+libgnulib_la-close-stream.lo: close-stream.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-close-stream.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-close-stream.Tpo -c -o libgnulib_la-close-stream.lo `test -f 'close-stream.c' || echo '$(srcdir)/'`close-stream.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-close-stream.Tpo $(DEPDIR)/libgnulib_la-close-stream.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close-stream.c' object='libgnulib_la-close-stream.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-close-stream.lo `test -f 'close-stream.c' || echo '$(srcdir)/'`close-stream.c
+
+libgnulib_la-closeout.lo: closeout.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-closeout.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-closeout.Tpo -c -o libgnulib_la-closeout.lo `test -f 'closeout.c' || echo '$(srcdir)/'`closeout.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-closeout.Tpo $(DEPDIR)/libgnulib_la-closeout.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='closeout.c' object='libgnulib_la-closeout.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-closeout.lo `test -f 'closeout.c' || echo '$(srcdir)/'`closeout.c
+
+libgnulib_la-dirname.lo: dirname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-dirname.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-dirname.Tpo -c -o libgnulib_la-dirname.lo `test -f 'dirname.c' || echo '$(srcdir)/'`dirname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-dirname.Tpo $(DEPDIR)/libgnulib_la-dirname.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname.c' object='libgnulib_la-dirname.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-dirname.lo `test -f 'dirname.c' || echo '$(srcdir)/'`dirname.c
+
+libgnulib_la-basename.lo: basename.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-basename.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-basename.Tpo -c -o libgnulib_la-basename.lo `test -f 'basename.c' || echo '$(srcdir)/'`basename.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-basename.Tpo $(DEPDIR)/libgnulib_la-basename.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename.c' object='libgnulib_la-basename.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-basename.lo `test -f 'basename.c' || echo '$(srcdir)/'`basename.c
+
+libgnulib_la-dirname-lgpl.lo: dirname-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-dirname-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-dirname-lgpl.Tpo -c -o libgnulib_la-dirname-lgpl.lo `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-dirname-lgpl.Tpo $(DEPDIR)/libgnulib_la-dirname-lgpl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='libgnulib_la-dirname-lgpl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-dirname-lgpl.lo `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c
+
+libgnulib_la-stripslash.lo: stripslash.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stripslash.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stripslash.Tpo -c -o libgnulib_la-stripslash.lo `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stripslash.Tpo $(DEPDIR)/libgnulib_la-stripslash.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='libgnulib_la-stripslash.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stripslash.lo `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c
+
+libgnulib_la-dup2.lo: dup2.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-dup2.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-dup2.Tpo -c -o libgnulib_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-dup2.Tpo $(DEPDIR)/libgnulib_la-dup2.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnulib_la-dup2.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c
+
+libgnulib_la-error.lo: error.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-error.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-error.Tpo -c -o libgnulib_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-error.Tpo $(DEPDIR)/libgnulib_la-error.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnulib_la-error.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c
+
+libgnulib_la-exitfail.lo: exitfail.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-exitfail.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-exitfail.Tpo -c -o libgnulib_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-exitfail.Tpo $(DEPDIR)/libgnulib_la-exitfail.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exitfail.c' object='libgnulib_la-exitfail.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c
+
+libgnulib_la-fcntl.lo: fcntl.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-fcntl.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-fcntl.Tpo -c -o libgnulib_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-fcntl.Tpo $(DEPDIR)/libgnulib_la-fcntl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnulib_la-fcntl.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c
+
+libgnulib_la-fd-hook.lo: fd-hook.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-fd-hook.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-fd-hook.Tpo -c -o libgnulib_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-fd-hook.Tpo $(DEPDIR)/libgnulib_la-fd-hook.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnulib_la-fd-hook.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c
+
+libgnulib_la-fpending.lo: fpending.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-fpending.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-fpending.Tpo -c -o libgnulib_la-fpending.lo `test -f 'fpending.c' || echo '$(srcdir)/'`fpending.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-fpending.Tpo $(DEPDIR)/libgnulib_la-fpending.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fpending.c' object='libgnulib_la-fpending.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-fpending.lo `test -f 'fpending.c' || echo '$(srcdir)/'`fpending.c
+
+libgnulib_la-free.lo: free.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-free.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-free.Tpo -c -o libgnulib_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-free.Tpo $(DEPDIR)/libgnulib_la-free.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnulib_la-free.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c
+
+libgnulib_la-fstat.lo: fstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-fstat.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-fstat.Tpo -c -o libgnulib_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-fstat.Tpo $(DEPDIR)/libgnulib_la-fstat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnulib_la-fstat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c
+
+libgnulib_la-fsync.lo: fsync.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-fsync.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-fsync.Tpo -c -o libgnulib_la-fsync.lo `test -f 'fsync.c' || echo '$(srcdir)/'`fsync.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-fsync.Tpo $(DEPDIR)/libgnulib_la-fsync.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fsync.c' object='libgnulib_la-fsync.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-fsync.lo `test -f 'fsync.c' || echo '$(srcdir)/'`fsync.c
+
+libgnulib_la-getdtablesize.lo: getdtablesize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-getdtablesize.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-getdtablesize.Tpo -c -o libgnulib_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-getdtablesize.Tpo $(DEPDIR)/libgnulib_la-getdtablesize.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnulib_la-getdtablesize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c
+
+libgnulib_la-getopt.lo: getopt.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-getopt.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-getopt.Tpo -c -o libgnulib_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-getopt.Tpo $(DEPDIR)/libgnulib_la-getopt.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt.c' object='libgnulib_la-getopt.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c
+
+libgnulib_la-getopt1.lo: getopt1.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-getopt1.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-getopt1.Tpo -c -o libgnulib_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-getopt1.Tpo $(DEPDIR)/libgnulib_la-getopt1.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='libgnulib_la-getopt1.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c
+
+libgnulib_la-getprogname.lo: getprogname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-getprogname.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-getprogname.Tpo -c -o libgnulib_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-getprogname.Tpo $(DEPDIR)/libgnulib_la-getprogname.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnulib_la-getprogname.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c
+
+libgnulib_la-getrandom.lo: getrandom.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-getrandom.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-getrandom.Tpo -c -o libgnulib_la-getrandom.lo `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-getrandom.Tpo $(DEPDIR)/libgnulib_la-getrandom.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getrandom.c' object='libgnulib_la-getrandom.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-getrandom.lo `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c
+
+malloc/libgnulib_la-dynarray_at_failure.lo: malloc/dynarray_at_failure.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray_at_failure.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Tpo -c -o malloc/libgnulib_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_at_failure.c' object='malloc/libgnulib_la-dynarray_at_failure.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c
+
+malloc/libgnulib_la-dynarray_emplace_enlarge.lo: malloc/dynarray_emplace_enlarge.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray_emplace_enlarge.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Tpo -c -o malloc/libgnulib_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_emplace_enlarge.c' object='malloc/libgnulib_la-dynarray_emplace_enlarge.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c
+
+malloc/libgnulib_la-dynarray_finalize.lo: malloc/dynarray_finalize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray_finalize.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Tpo -c -o malloc/libgnulib_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_finalize.c' object='malloc/libgnulib_la-dynarray_finalize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c
+
+malloc/libgnulib_la-dynarray_resize.lo: malloc/dynarray_resize.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray_resize.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Tpo -c -o malloc/libgnulib_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize.c' object='malloc/libgnulib_la-dynarray_resize.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c
+
+malloc/libgnulib_la-dynarray_resize_clear.lo: malloc/dynarray_resize_clear.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray_resize_clear.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Tpo -c -o malloc/libgnulib_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize_clear.c' object='malloc/libgnulib_la-dynarray_resize_clear.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c
+
+malloc/libgnulib_la-scratch_buffer_grow.lo: malloc/scratch_buffer_grow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-scratch_buffer_grow.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Tpo -c -o malloc/libgnulib_la-scratch_buffer_grow.lo `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Tpo malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow.c' object='malloc/libgnulib_la-scratch_buffer_grow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-scratch_buffer_grow.lo `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c
+
+malloc/libgnulib_la-scratch_buffer_grow_preserve.lo: malloc/scratch_buffer_grow_preserve.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-scratch_buffer_grow_preserve.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Tpo -c -o malloc/libgnulib_la-scratch_buffer_grow_preserve.lo `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Tpo malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow_preserve.c' object='malloc/libgnulib_la-scratch_buffer_grow_preserve.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-scratch_buffer_grow_preserve.lo `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c
+
+malloc/libgnulib_la-scratch_buffer_set_array_size.lo: malloc/scratch_buffer_set_array_size.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-scratch_buffer_set_array_size.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Tpo -c -o malloc/libgnulib_la-scratch_buffer_set_array_size.lo `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Tpo malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_set_array_size.c' object='malloc/libgnulib_la-scratch_buffer_set_array_size.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-scratch_buffer_set_array_size.lo `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c
+
+libgnulib_la-hard-locale.lo: hard-locale.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-hard-locale.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-hard-locale.Tpo -c -o libgnulib_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-hard-locale.Tpo $(DEPDIR)/libgnulib_la-hard-locale.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnulib_la-hard-locale.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c
+
+libgnulib_la-ialloc.lo: ialloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-ialloc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-ialloc.Tpo -c -o libgnulib_la-ialloc.lo `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-ialloc.Tpo $(DEPDIR)/libgnulib_la-ialloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ialloc.c' object='libgnulib_la-ialloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-ialloc.lo `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c
+
+libgnulib_la-localcharset.lo: localcharset.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-localcharset.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-localcharset.Tpo -c -o libgnulib_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-localcharset.Tpo $(DEPDIR)/libgnulib_la-localcharset.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnulib_la-localcharset.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c
+
+libgnulib_la-localeconv.lo: localeconv.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-localeconv.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-localeconv.Tpo -c -o libgnulib_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-localeconv.Tpo $(DEPDIR)/libgnulib_la-localeconv.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localeconv.c' object='libgnulib_la-localeconv.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c
+
+glthread/libgnulib_la-lock.lo: glthread/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT glthread/libgnulib_la-lock.lo -MD -MP -MF glthread/$(DEPDIR)/libgnulib_la-lock.Tpo -c -o glthread/libgnulib_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnulib_la-lock.Tpo glthread/$(DEPDIR)/libgnulib_la-lock.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnulib_la-lock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o glthread/libgnulib_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c
+
+libgnulib_la-long-options.lo: long-options.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-long-options.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-long-options.Tpo -c -o libgnulib_la-long-options.lo `test -f 'long-options.c' || echo '$(srcdir)/'`long-options.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-long-options.Tpo $(DEPDIR)/libgnulib_la-long-options.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='long-options.c' object='libgnulib_la-long-options.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-long-options.lo `test -f 'long-options.c' || echo '$(srcdir)/'`long-options.c
+
+libgnulib_la-lseek.lo: lseek.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-lseek.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-lseek.Tpo -c -o libgnulib_la-lseek.lo `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-lseek.Tpo $(DEPDIR)/libgnulib_la-lseek.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lseek.c' object='libgnulib_la-lseek.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-lseek.lo `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c
+
+libgnulib_la-lstat.lo: lstat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-lstat.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-lstat.Tpo -c -o libgnulib_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-lstat.Tpo $(DEPDIR)/libgnulib_la-lstat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lstat.c' object='libgnulib_la-lstat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c
+
+libgnulib_la-malloca.lo: malloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-malloca.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-malloca.Tpo -c -o libgnulib_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-malloca.Tpo $(DEPDIR)/libgnulib_la-malloca.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnulib_la-malloca.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c
+
+libgnulib_la-mbrtowc.lo: mbrtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mbrtowc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mbrtowc.Tpo -c -o libgnulib_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mbrtowc.Tpo $(DEPDIR)/libgnulib_la-mbrtowc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnulib_la-mbrtowc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c
+
+libgnulib_la-mbsinit.lo: mbsinit.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mbsinit.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mbsinit.Tpo -c -o libgnulib_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mbsinit.Tpo $(DEPDIR)/libgnulib_la-mbsinit.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnulib_la-mbsinit.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c
+
+libgnulib_la-mbtowc.lo: mbtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mbtowc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mbtowc.Tpo -c -o libgnulib_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mbtowc.Tpo $(DEPDIR)/libgnulib_la-mbtowc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnulib_la-mbtowc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c
+
+libgnulib_la-mempcpy.lo: mempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mempcpy.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mempcpy.Tpo -c -o libgnulib_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mempcpy.Tpo $(DEPDIR)/libgnulib_la-mempcpy.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mempcpy.c' object='libgnulib_la-mempcpy.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c
+
+libgnulib_la-mkdir.lo: mkdir.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mkdir.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mkdir.Tpo -c -o libgnulib_la-mkdir.lo `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mkdir.Tpo $(DEPDIR)/libgnulib_la-mkdir.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdir.c' object='libgnulib_la-mkdir.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mkdir.lo `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c
+
+libgnulib_la-mkstemp.lo: mkstemp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mkstemp.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mkstemp.Tpo -c -o libgnulib_la-mkstemp.lo `test -f 'mkstemp.c' || echo '$(srcdir)/'`mkstemp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mkstemp.Tpo $(DEPDIR)/libgnulib_la-mkstemp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkstemp.c' object='libgnulib_la-mkstemp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mkstemp.lo `test -f 'mkstemp.c' || echo '$(srcdir)/'`mkstemp.c
+
+libgnulib_la-msvc-inval.lo: msvc-inval.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-msvc-inval.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-msvc-inval.Tpo -c -o libgnulib_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-msvc-inval.Tpo $(DEPDIR)/libgnulib_la-msvc-inval.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnulib_la-msvc-inval.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c
+
+libgnulib_la-msvc-nothrow.lo: msvc-nothrow.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-msvc-nothrow.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-msvc-nothrow.Tpo -c -o libgnulib_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-msvc-nothrow.Tpo $(DEPDIR)/libgnulib_la-msvc-nothrow.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnulib_la-msvc-nothrow.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c
+
+libgnulib_la-nl_langinfo.lo: nl_langinfo.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-nl_langinfo.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-nl_langinfo.Tpo -c -o libgnulib_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-nl_langinfo.Tpo $(DEPDIR)/libgnulib_la-nl_langinfo.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo.c' object='libgnulib_la-nl_langinfo.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c
+
+libgnulib_la-nl_langinfo-lock.lo: nl_langinfo-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-nl_langinfo-lock.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-nl_langinfo-lock.Tpo -c -o libgnulib_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-nl_langinfo-lock.Tpo $(DEPDIR)/libgnulib_la-nl_langinfo-lock.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo-lock.c' object='libgnulib_la-nl_langinfo-lock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c
+
+libgnulib_la-open.lo: open.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-open.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-open.Tpo -c -o libgnulib_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-open.Tpo $(DEPDIR)/libgnulib_la-open.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnulib_la-open.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c
+
+libgnulib_la-progname.lo: progname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-progname.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-progname.Tpo -c -o libgnulib_la-progname.lo `test -f 'progname.c' || echo '$(srcdir)/'`progname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-progname.Tpo $(DEPDIR)/libgnulib_la-progname.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='progname.c' object='libgnulib_la-progname.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-progname.lo `test -f 'progname.c' || echo '$(srcdir)/'`progname.c
+
+libgnulib_la-quotearg.lo: quotearg.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-quotearg.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-quotearg.Tpo -c -o libgnulib_la-quotearg.lo `test -f 'quotearg.c' || echo '$(srcdir)/'`quotearg.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-quotearg.Tpo $(DEPDIR)/libgnulib_la-quotearg.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotearg.c' object='libgnulib_la-quotearg.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-quotearg.lo `test -f 'quotearg.c' || echo '$(srcdir)/'`quotearg.c
+
+libgnulib_la-rawmemchr.lo: rawmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-rawmemchr.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-rawmemchr.Tpo -c -o libgnulib_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-rawmemchr.Tpo $(DEPDIR)/libgnulib_la-rawmemchr.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawmemchr.c' object='libgnulib_la-rawmemchr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c
+
+libgnulib_la-read.lo: read.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-read.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-read.Tpo -c -o libgnulib_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-read.Tpo $(DEPDIR)/libgnulib_la-read.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='read.c' object='libgnulib_la-read.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c
+
+libgnulib_la-readlink.lo: readlink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-readlink.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-readlink.Tpo -c -o libgnulib_la-readlink.lo `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-readlink.Tpo $(DEPDIR)/libgnulib_la-readlink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readlink.c' object='libgnulib_la-readlink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-readlink.lo `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c
+
+libgnulib_la-reallocarray.lo: reallocarray.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-reallocarray.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-reallocarray.Tpo -c -o libgnulib_la-reallocarray.lo `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-reallocarray.Tpo $(DEPDIR)/libgnulib_la-reallocarray.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reallocarray.c' object='libgnulib_la-reallocarray.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-reallocarray.lo `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c
+
+libgnulib_la-regex.lo: regex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-regex.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-regex.Tpo -c -o libgnulib_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-regex.Tpo $(DEPDIR)/libgnulib_la-regex.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex.c' object='libgnulib_la-regex.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c
+
+libgnulib_la-rpmatch.lo: rpmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-rpmatch.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-rpmatch.Tpo -c -o libgnulib_la-rpmatch.lo `test -f 'rpmatch.c' || echo '$(srcdir)/'`rpmatch.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-rpmatch.Tpo $(DEPDIR)/libgnulib_la-rpmatch.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rpmatch.c' object='libgnulib_la-rpmatch.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-rpmatch.lo `test -f 'rpmatch.c' || echo '$(srcdir)/'`rpmatch.c
+
+libgnulib_la-safe-read.lo: safe-read.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-safe-read.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-safe-read.Tpo -c -o libgnulib_la-safe-read.lo `test -f 'safe-read.c' || echo '$(srcdir)/'`safe-read.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-safe-read.Tpo $(DEPDIR)/libgnulib_la-safe-read.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='safe-read.c' object='libgnulib_la-safe-read.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-safe-read.lo `test -f 'safe-read.c' || echo '$(srcdir)/'`safe-read.c
+
+libgnulib_la-setlocale_null.lo: setlocale_null.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-setlocale_null.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-setlocale_null.Tpo -c -o libgnulib_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-setlocale_null.Tpo $(DEPDIR)/libgnulib_la-setlocale_null.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnulib_la-setlocale_null.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c
+
+libgnulib_la-setlocale-lock.lo: setlocale-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-setlocale-lock.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-setlocale-lock.Tpo -c -o libgnulib_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-setlocale-lock.Tpo $(DEPDIR)/libgnulib_la-setlocale-lock.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnulib_la-setlocale-lock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c
+
+libgnulib_la-sleep.lo: sleep.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-sleep.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-sleep.Tpo -c -o libgnulib_la-sleep.lo `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-sleep.Tpo $(DEPDIR)/libgnulib_la-sleep.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sleep.c' object='libgnulib_la-sleep.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-sleep.lo `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c
+
+libgnulib_la-stat.lo: stat.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stat.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stat.Tpo -c -o libgnulib_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stat.Tpo $(DEPDIR)/libgnulib_la-stat.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnulib_la-stat.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c
+
+libgnulib_la-stat-time.lo: stat-time.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stat-time.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stat-time.Tpo -c -o libgnulib_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stat-time.Tpo $(DEPDIR)/libgnulib_la-stat-time.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnulib_la-stat-time.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c
+
+libgnulib_la-stdio-read.lo: stdio-read.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stdio-read.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stdio-read.Tpo -c -o libgnulib_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stdio-read.Tpo $(DEPDIR)/libgnulib_la-stdio-read.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnulib_la-stdio-read.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c
+
+libgnulib_la-stdio-write.lo: stdio-write.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stdio-write.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stdio-write.Tpo -c -o libgnulib_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stdio-write.Tpo $(DEPDIR)/libgnulib_la-stdio-write.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnulib_la-stdio-write.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c
+
+libgnulib_la-strdup.lo: strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strdup.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strdup.Tpo -c -o libgnulib_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strdup.Tpo $(DEPDIR)/libgnulib_la-strdup.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strdup.c' object='libgnulib_la-strdup.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c
+
+libgnulib_la-strerror.lo: strerror.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strerror.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strerror.Tpo -c -o libgnulib_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strerror.Tpo $(DEPDIR)/libgnulib_la-strerror.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnulib_la-strerror.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c
+
+libgnulib_la-strerror-override.lo: strerror-override.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strerror-override.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strerror-override.Tpo -c -o libgnulib_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strerror-override.Tpo $(DEPDIR)/libgnulib_la-strerror-override.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnulib_la-strerror-override.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c
+
+libgnulib_la-strtoll.lo: strtoll.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strtoll.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strtoll.Tpo -c -o libgnulib_la-strtoll.lo `test -f 'strtoll.c' || echo '$(srcdir)/'`strtoll.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strtoll.Tpo $(DEPDIR)/libgnulib_la-strtoll.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtoll.c' object='libgnulib_la-strtoll.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strtoll.lo `test -f 'strtoll.c' || echo '$(srcdir)/'`strtoll.c
+
+libgnulib_la-strtoull.lo: strtoull.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strtoull.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strtoull.Tpo -c -o libgnulib_la-strtoull.lo `test -f 'strtoull.c' || echo '$(srcdir)/'`strtoull.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strtoull.Tpo $(DEPDIR)/libgnulib_la-strtoull.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtoull.c' object='libgnulib_la-strtoull.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strtoull.lo `test -f 'strtoull.c' || echo '$(srcdir)/'`strtoull.c
+
+libgnulib_la-tempname.lo: tempname.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-tempname.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-tempname.Tpo -c -o libgnulib_la-tempname.lo `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-tempname.Tpo $(DEPDIR)/libgnulib_la-tempname.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tempname.c' object='libgnulib_la-tempname.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-tempname.lo `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c
+
+glthread/libgnulib_la-threadlib.lo: glthread/threadlib.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT glthread/libgnulib_la-threadlib.lo -MD -MP -MF glthread/$(DEPDIR)/libgnulib_la-threadlib.Tpo -c -o glthread/libgnulib_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnulib_la-threadlib.Tpo glthread/$(DEPDIR)/libgnulib_la-threadlib.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnulib_la-threadlib.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o glthread/libgnulib_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c
+
+libgnulib_la-unistd.lo: unistd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-unistd.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-unistd.Tpo -c -o libgnulib_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-unistd.Tpo $(DEPDIR)/libgnulib_la-unistd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnulib_la-unistd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c
+
+libgnulib_la-unlink.lo: unlink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-unlink.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-unlink.Tpo -c -o libgnulib_la-unlink.lo `test -f 'unlink.c' || echo '$(srcdir)/'`unlink.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-unlink.Tpo $(DEPDIR)/libgnulib_la-unlink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unlink.c' object='libgnulib_la-unlink.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-unlink.lo `test -f 'unlink.c' || echo '$(srcdir)/'`unlink.c
+
+libgnulib_la-usleep.lo: usleep.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-usleep.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-usleep.Tpo -c -o libgnulib_la-usleep.lo `test -f 'usleep.c' || echo '$(srcdir)/'`usleep.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-usleep.Tpo $(DEPDIR)/libgnulib_la-usleep.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='usleep.c' object='libgnulib_la-usleep.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-usleep.lo `test -f 'usleep.c' || echo '$(srcdir)/'`usleep.c
+
+libgnulib_la-version-etc.lo: version-etc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-version-etc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-version-etc.Tpo -c -o libgnulib_la-version-etc.lo `test -f 'version-etc.c' || echo '$(srcdir)/'`version-etc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-version-etc.Tpo $(DEPDIR)/libgnulib_la-version-etc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version-etc.c' object='libgnulib_la-version-etc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-version-etc.lo `test -f 'version-etc.c' || echo '$(srcdir)/'`version-etc.c
+
+libgnulib_la-version-etc-fsf.lo: version-etc-fsf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-version-etc-fsf.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-version-etc-fsf.Tpo -c -o libgnulib_la-version-etc-fsf.lo `test -f 'version-etc-fsf.c' || echo '$(srcdir)/'`version-etc-fsf.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-version-etc-fsf.Tpo $(DEPDIR)/libgnulib_la-version-etc-fsf.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version-etc-fsf.c' object='libgnulib_la-version-etc-fsf.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-version-etc-fsf.lo `test -f 'version-etc-fsf.c' || echo '$(srcdir)/'`version-etc-fsf.c
+
+libgnulib_la-wcrtomb.lo: wcrtomb.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-wcrtomb.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-wcrtomb.Tpo -c -o libgnulib_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-wcrtomb.Tpo $(DEPDIR)/libgnulib_la-wcrtomb.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcrtomb.c' object='libgnulib_la-wcrtomb.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c
+
+libgnulib_la-wctype-h.lo: wctype-h.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-wctype-h.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-wctype-h.Tpo -c -o libgnulib_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-wctype-h.Tpo $(DEPDIR)/libgnulib_la-wctype-h.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnulib_la-wctype-h.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c
+
+libgnulib_la-windows-mutex.lo: windows-mutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-windows-mutex.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-windows-mutex.Tpo -c -o libgnulib_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-windows-mutex.Tpo $(DEPDIR)/libgnulib_la-windows-mutex.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnulib_la-windows-mutex.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c
+
+libgnulib_la-windows-once.lo: windows-once.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-windows-once.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-windows-once.Tpo -c -o libgnulib_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-windows-once.Tpo $(DEPDIR)/libgnulib_la-windows-once.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnulib_la-windows-once.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c
+
+libgnulib_la-windows-recmutex.lo: windows-recmutex.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-windows-recmutex.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-windows-recmutex.Tpo -c -o libgnulib_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-windows-recmutex.Tpo $(DEPDIR)/libgnulib_la-windows-recmutex.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnulib_la-windows-recmutex.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c
+
+libgnulib_la-windows-rwlock.lo: windows-rwlock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-windows-rwlock.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-windows-rwlock.Tpo -c -o libgnulib_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-windows-rwlock.Tpo $(DEPDIR)/libgnulib_la-windows-rwlock.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnulib_la-windows-rwlock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c
+
+libgnulib_la-xmalloc.lo: xmalloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xmalloc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xmalloc.Tpo -c -o libgnulib_la-xmalloc.lo `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xmalloc.Tpo $(DEPDIR)/libgnulib_la-xmalloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmalloc.c' object='libgnulib_la-xmalloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xmalloc.lo `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c
+
+libgnulib_la-xalloc-die.lo: xalloc-die.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xalloc-die.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xalloc-die.Tpo -c -o libgnulib_la-xalloc-die.lo `test -f 'xalloc-die.c' || echo '$(srcdir)/'`xalloc-die.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xalloc-die.Tpo $(DEPDIR)/libgnulib_la-xalloc-die.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xalloc-die.c' object='libgnulib_la-xalloc-die.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xalloc-die.lo `test -f 'xalloc-die.c' || echo '$(srcdir)/'`xalloc-die.c
+
+libgnulib_la-xstrtol.lo: xstrtol.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xstrtol.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xstrtol.Tpo -c -o libgnulib_la-xstrtol.lo `test -f 'xstrtol.c' || echo '$(srcdir)/'`xstrtol.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xstrtol.Tpo $(DEPDIR)/libgnulib_la-xstrtol.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xstrtol.c' object='libgnulib_la-xstrtol.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xstrtol.lo `test -f 'xstrtol.c' || echo '$(srcdir)/'`xstrtol.c
+
+libgnulib_la-xstrtoul.lo: xstrtoul.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xstrtoul.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xstrtoul.Tpo -c -o libgnulib_la-xstrtoul.lo `test -f 'xstrtoul.c' || echo '$(srcdir)/'`xstrtoul.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xstrtoul.Tpo $(DEPDIR)/libgnulib_la-xstrtoul.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xstrtoul.c' object='libgnulib_la-xstrtoul.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xstrtoul.lo `test -f 'xstrtoul.c' || echo '$(srcdir)/'`xstrtoul.c
+
+libgnulib_la-xstrtoll.lo: xstrtoll.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xstrtoll.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xstrtoll.Tpo -c -o libgnulib_la-xstrtoll.lo `test -f 'xstrtoll.c' || echo '$(srcdir)/'`xstrtoll.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xstrtoll.Tpo $(DEPDIR)/libgnulib_la-xstrtoll.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xstrtoll.c' object='libgnulib_la-xstrtoll.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xstrtoll.lo `test -f 'xstrtoll.c' || echo '$(srcdir)/'`xstrtoll.c
+
+libgnulib_la-xstrtoull.lo: xstrtoull.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-xstrtoull.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-xstrtoull.Tpo -c -o libgnulib_la-xstrtoull.lo `test -f 'xstrtoull.c' || echo '$(srcdir)/'`xstrtoull.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-xstrtoull.Tpo $(DEPDIR)/libgnulib_la-xstrtoull.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xstrtoull.c' object='libgnulib_la-xstrtoull.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-xstrtoull.lo `test -f 'xstrtoull.c' || echo '$(srcdir)/'`xstrtoull.c
+
+libgnulib_la-alloca.lo: alloca.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-alloca.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-alloca.Tpo -c -o libgnulib_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-alloca.Tpo $(DEPDIR)/libgnulib_la-alloca.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alloca.c' object='libgnulib_la-alloca.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c
+
+libgnulib_la-calloc.lo: calloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-calloc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-calloc.Tpo -c -o libgnulib_la-calloc.lo `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-calloc.Tpo $(DEPDIR)/libgnulib_la-calloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calloc.c' object='libgnulib_la-calloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-calloc.lo `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c
+
+libgnulib_la-stat-w32.lo: stat-w32.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-stat-w32.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-stat-w32.Tpo -c -o libgnulib_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-stat-w32.Tpo $(DEPDIR)/libgnulib_la-stat-w32.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnulib_la-stat-w32.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c
+
+malloc/libgnulib_la-dynarray-skeleton.lo: malloc/dynarray-skeleton.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT malloc/libgnulib_la-dynarray-skeleton.lo -MD -MP -MF malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Tpo -c -o malloc/libgnulib_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Tpo malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray-skeleton.c' object='malloc/libgnulib_la-dynarray-skeleton.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnulib_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c
+
+libgnulib_la-malloc.lo: malloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-malloc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-malloc.Tpo -c -o libgnulib_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-malloc.Tpo $(DEPDIR)/libgnulib_la-malloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnulib_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c
+
+libgnulib_la-lc-charset-dispatch.lo: lc-charset-dispatch.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-lc-charset-dispatch.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-lc-charset-dispatch.Tpo -c -o libgnulib_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-lc-charset-dispatch.Tpo $(DEPDIR)/libgnulib_la-lc-charset-dispatch.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnulib_la-lc-charset-dispatch.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c
+
+libgnulib_la-mbtowc-lock.lo: mbtowc-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-mbtowc-lock.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-mbtowc-lock.Tpo -c -o libgnulib_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-mbtowc-lock.Tpo $(DEPDIR)/libgnulib_la-mbtowc-lock.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnulib_la-mbtowc-lock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c
+
+libgnulib_la-realloc.lo: realloc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-realloc.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-realloc.Tpo -c -o libgnulib_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-realloc.Tpo $(DEPDIR)/libgnulib_la-realloc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnulib_la-realloc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c
+
+libgnulib_la-regcomp.lo: regcomp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-regcomp.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-regcomp.Tpo -c -o libgnulib_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-regcomp.Tpo $(DEPDIR)/libgnulib_la-regcomp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regcomp.c' object='libgnulib_la-regcomp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c
+
+libgnulib_la-regex_internal.lo: regex_internal.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-regex_internal.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-regex_internal.Tpo -c -o libgnulib_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-regex_internal.Tpo $(DEPDIR)/libgnulib_la-regex_internal.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex_internal.c' object='libgnulib_la-regex_internal.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c
+
+libgnulib_la-regexec.lo: regexec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-regexec.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-regexec.Tpo -c -o libgnulib_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-regexec.Tpo $(DEPDIR)/libgnulib_la-regexec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regexec.c' object='libgnulib_la-regexec.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c
+
+libgnulib_la-strtol.lo: strtol.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strtol.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strtol.Tpo -c -o libgnulib_la-strtol.lo `test -f 'strtol.c' || echo '$(srcdir)/'`strtol.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strtol.Tpo $(DEPDIR)/libgnulib_la-strtol.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtol.c' object='libgnulib_la-strtol.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strtol.lo `test -f 'strtol.c' || echo '$(srcdir)/'`strtol.c
+
+libgnulib_la-strtoul.lo: strtoul.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -MT libgnulib_la-strtoul.lo -MD -MP -MF $(DEPDIR)/libgnulib_la-strtoul.Tpo -c -o libgnulib_la-strtoul.lo `test -f 'strtoul.c' || echo '$(srcdir)/'`strtoul.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnulib_la-strtoul.Tpo $(DEPDIR)/libgnulib_la-strtoul.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtoul.c' object='libgnulib_la-strtoul.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnulib_la_CFLAGS) $(CFLAGS) -c -o libgnulib_la-strtoul.lo `test -f 'strtoul.c' || echo '$(srcdir)/'`strtoul.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+ -rm -rf glthread/.libs glthread/_libs
+ -rm -rf malloc/.libs malloc/_libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) config.h
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f glthread/$(DEPDIR)/$(am__dirstamp)
+ -rm -f glthread/$(am__dirstamp)
+ -rm -f malloc/$(DEPDIR)/$(am__dirstamp)
+ -rm -f malloc/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/alloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-alloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-argmatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-basename-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-basename.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-btowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-ctype.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-strcasecmp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-strncasecmp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-calloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-canonicalize-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-cloexec.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-close-stream.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-close.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-closeout.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dirname-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dirname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dup2.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-error.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-exitfail.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fcntl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fd-hook.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fpending.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-free.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fstat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fsync.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getdtablesize.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getopt.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getopt1.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getprogname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getrandom.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-hard-locale.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-ialloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lc-charset-dispatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-localcharset.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-localeconv.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-long-options.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lseek.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lstat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-malloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-malloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbrtowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbsinit.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbtowc-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbtowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mempcpy.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mkdir.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mkstemp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-msvc-inval.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-msvc-nothrow.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-nl_langinfo-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-nl_langinfo.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-open.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-progname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-quotearg.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-rawmemchr.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-readlink.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-realloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-reallocarray.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regcomp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regex_internal.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regexec.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-rpmatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-safe-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-setlocale-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-setlocale_null.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-sleep.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat-time.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat-w32.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stdio-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stdio-write.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strdup.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strerror-override.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strerror.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stripslash.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtol.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoll.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoul.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoull.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-tempname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-unistd.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-unlink.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-usleep.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-version-etc-fsf.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-version-etc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-wcrtomb.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-wctype-h.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-mutex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-once.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-recmutex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-rwlock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xalloc-die.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xmalloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtol.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoll.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoul.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoull.Plo
+ -rm -f glthread/$(DEPDIR)/libgnulib_la-lock.Plo
+ -rm -f glthread/$(DEPDIR)/libgnulib_la-threadlib.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-local distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/alloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-alloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-argmatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-basename-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-basename.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-btowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-ctype.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-strcasecmp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-c-strncasecmp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-calloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-canonicalize-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-cloexec.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-close-stream.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-close.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-closeout.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dirname-lgpl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dirname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-dup2.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-error.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-exitfail.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fcntl.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fd-hook.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fpending.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-free.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fstat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-fsync.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getdtablesize.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getopt.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getopt1.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getprogname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-getrandom.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-hard-locale.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-ialloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lc-charset-dispatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-localcharset.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-localeconv.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-long-options.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lseek.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-lstat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-malloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-malloca.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbrtowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbsinit.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbtowc-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mbtowc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mempcpy.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mkdir.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-mkstemp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-msvc-inval.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-msvc-nothrow.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-nl_langinfo-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-nl_langinfo.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-open.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-progname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-quotearg.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-rawmemchr.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-readlink.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-realloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-reallocarray.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regcomp.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regex_internal.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-regexec.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-rpmatch.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-safe-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-setlocale-lock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-setlocale_null.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-sleep.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat-time.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat-w32.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stat.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stdio-read.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stdio-write.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strdup.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strerror-override.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strerror.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-stripslash.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtol.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoll.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoul.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-strtoull.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-tempname.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-unistd.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-unlink.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-usleep.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-version-etc-fsf.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-version-etc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-wcrtomb.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-wctype-h.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-mutex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-once.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-recmutex.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-windows-rwlock.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xalloc-die.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xmalloc.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtol.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoll.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoul.Plo
+ -rm -f ./$(DEPDIR)/libgnulib_la-xstrtoull.Plo
+ -rm -f glthread/$(DEPDIR)/libgnulib_la-lock.Plo
+ -rm -f glthread/$(DEPDIR)/libgnulib_la-threadlib.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray-skeleton.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_at_failure.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_emplace_enlarge.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_finalize.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_resize.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-dynarray_resize_clear.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_grow_preserve.Plo
+ -rm -f malloc/$(DEPDIR)/libgnulib_la-scratch_buffer_set_array_size.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+ maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-local
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-local distclean-tags distdir dvi dvi-am html html-am \
+ info info-am install install-am install-data install-data-am \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ maintainer-clean-local mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+ pdf-am ps ps-am tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_ALLOCA_H_TRUE@ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \
+@GL_GENERATE_ALLOCA_H_TRUE@ $(srcdir)/alloca.in.h > $@-t
+@GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@
+
+# We need the following in order to create <assert.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_ASSERT_H_TRUE@assert.h: assert.in.h verify.h $(top_builddir)/config.status
+@GL_GENERATE_ASSERT_H_TRUE@ $(gl_V_at){ $(SED_HEADER_STDOUT) \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/assert.in.h && \
+@GL_GENERATE_ASSERT_H_TRUE@ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|_gl_verify|_gl_static_assert|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \
+@GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/verify.h; \
+@GL_GENERATE_ASSERT_H_TRUE@ } > $@-t
+@GL_GENERATE_ASSERT_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_ASSERT_H_FALSE@assert.h: $(top_builddir)/config.status
+@GL_GENERATE_ASSERT_H_FALSE@ rm -f $@
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+ or 2.70.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+ $(gl_V_at){ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ echo '#if HAVE_WINSOCK2_H'; \
+ echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \
+ echo '#endif'; \
+ printf '#define PREFIX %s\n' $(prefix_c_make); \
+ printf '#define EXEC_PREFIX %s\n' $(exec_prefix_c_make); \
+ printf '#define BINDIR %s\n' $(bindir_c_make); \
+ printf '#define SBINDIR %s\n' $(sbindir_c_make); \
+ printf '#define LIBEXECDIR %s\n' $(libexecdir_c_make); \
+ printf '#define DATAROOTDIR %s\n' $(datarootdir_c_make); \
+ printf '#define DATADIR %s\n' $(datadir_c_make); \
+ printf '#define SYSCONFDIR %s\n' $(sysconfdir_c_make); \
+ printf '#define SHAREDSTATEDIR %s\n' $(sharedstatedir_c_make); \
+ printf '#define LOCALSTATEDIR %s\n' $(localstatedir_c_make); \
+ printf '#define RUNSTATEDIR %s\n' $(runstatedir_c_make); \
+ printf '#define INCLUDEDIR %s\n' $(includedir_c_make); \
+ printf '#define OLDINCLUDEDIR %s\n' $(oldincludedir_c_make); \
+ printf '#define DOCDIR %s\n' $(docdir_c_make); \
+ printf '#define INFODIR %s\n' $(infodir_c_make); \
+ printf '#define HTMLDIR %s\n' $(htmldir_c_make); \
+ printf '#define DVIDIR %s\n' $(dvidir_c_make); \
+ printf '#define PDFDIR %s\n' $(pdfdir_c_make); \
+ printf '#define PSDIR %s\n' $(psdir_c_make); \
+ printf '#define LIBDIR %s\n' $(libdir_c_make); \
+ printf '#define LISPDIR %s\n' $(lispdir_c_make); \
+ printf '#define LOCALEDIR %s\n' $(localedir_c_make); \
+ printf '#define MANDIR %s\n' $(mandir_c_make); \
+ printf '#define MANEXT %s\n' \"$(manext)\"; \
+ printf '#define PKGDATADIR %s\n' $(pkgdatadir_c_make); \
+ printf '#define PKGINCLUDEDIR %s\n' $(pkgincludedir_c_make); \
+ printf '#define PKGLIBDIR %s\n' $(pkglibdir_c_make); \
+ printf '#define PKGLIBEXECDIR %s\n' $(pkglibexecdir_c_make); \
+ } | sed '/""/d' > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+@GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@ $(srcdir)/errno.in.h > $@-t
+@GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_FALSE@ rm -f $@
+
+# We need the following in order to create <error.h> when the system
+# doesn't have one that works.
+@GL_GENERATE_ERROR_H_TRUE@error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H)
+@GL_GENERATE_ERROR_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \
+@GL_GENERATE_ERROR_H_TRUE@ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+@GL_GENERATE_ERROR_H_TRUE@ $(srcdir)/error.in.h > $@-t
+@GL_GENERATE_ERROR_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_ERROR_H_FALSE@error.h: $(top_builddir)/config.status
+@GL_GENERATE_ERROR_H_FALSE@ rm -f $@
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \
+ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \
+ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \
+ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \
+ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \
+ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \
+ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \
+ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/fcntl.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_GETOPT_H_TRUE@getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+@GL_GENERATE_GETOPT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+@GL_GENERATE_GETOPT_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+@GL_GENERATE_GETOPT_H_TRUE@ $(srcdir)/getopt.in.h > $@-t
+@GL_GENERATE_GETOPT_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_GETOPT_H_FALSE@getopt.h: $(top_builddir)/config.status
+@GL_GENERATE_GETOPT_H_FALSE@ rm -f $@
+
+@GL_GENERATE_GETOPT_CDEFS_H_TRUE@getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status
+@GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_GEN)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_GETOPT_CDEFS_H_TRUE@ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+@GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(srcdir)/getopt-cdefs.in.h > $@-t
+@GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_GETOPT_CDEFS_H_FALSE@getopt-cdefs.h: $(top_builddir)/config.status
+@GL_GENERATE_GETOPT_CDEFS_H_FALSE@ rm -f $@
+
+malloc/dynarray.gl.h: malloc/dynarray.h
+ $(AM_V_GEN)$(MKDIR_P) 'malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/dynarray.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c
+ $(AM_V_GEN)$(MKDIR_P) 'malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \
+ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \
+ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \
+ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ $(srcdir)/malloc/dynarray-skeleton.c > $@-t
+ $(AM_V_at)mv $@-t $@
+
+malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h
+ $(AM_V_GEN)$(MKDIR_P) 'malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/scratch_buffer.h > $@-t
+ $(AM_V_at)mv $@-t $@
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+ test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \
+ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \
+ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \
+ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \
+ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \
+ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \
+ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \
+ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \
+ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/inttypes.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <langinfo.h> when the system doesn't have one.
+langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \
+ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \
+ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \
+ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \
+ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \
+ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \
+ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \
+ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \
+ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/langinfo.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+@GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@ $(srcdir)/limits.in.h > $@-t
+@GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_FALSE@ rm -f $@
+
+# We need the following in order to create <locale.h> when the system
+# doesn't have one that provides all definitions.
+locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \
+ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \
+ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \
+ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \
+ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \
+ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \
+ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \
+ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \
+ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \
+ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \
+ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \
+ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \
+ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \
+ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \
+ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \
+ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \
+ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/locale.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDARG_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+@GL_GENERATE_STDARG_H_TRUE@ $(srcdir)/stdarg.in.h > $@-t
+@GL_GENERATE_STDARG_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status
+@GL_GENERATE_STDARG_H_FALSE@ rm -f $@
+
+# We need the following in order to create <stdckdint.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDCKDINT_H_TRUE@stdckdint.h: stdckdint.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDCKDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDCKDINT_H_TRUE@ $(srcdir)/stdckdint.in.h > $@-t
+@GL_GENERATE_STDCKDINT_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_STDCKDINT_H_FALSE@stdckdint.h: $(top_builddir)/config.status
+@GL_GENERATE_STDCKDINT_H_FALSE@ rm -f $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@ $(srcdir)/stddef.in.h > $@-t
+@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_FALSE@ rm -f $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@ $(srcdir)/stdint.in.h > $@-t
+@GL_GENERATE_STDINT_H_TRUE@ $(AM_V_at)mv $@-t $@
+@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_FALSE@ rm -f $@
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \
+ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \
+ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \
+ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \
+ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \
+ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \
+ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \
+ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \
+ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \
+ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \
+ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \
+ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \
+ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \
+ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \
+ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \
+ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \
+ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \
+ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \
+ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \
+ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \
+ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \
+ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \
+ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \
+ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \
+ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \
+ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \
+ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \
+ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \
+ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \
+ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \
+ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \
+ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \
+ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \
+ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \
+ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \
+ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \
+ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \
+ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \
+ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \
+ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \
+ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \
+ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \
+ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \
+ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \
+ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \
+ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \
+ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \
+ < $(srcdir)/stdio.in.h | \
+ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \
+ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \
+ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \
+ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \
+ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \
+ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \
+ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \
+ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \
+ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \
+ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \
+ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \
+ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \
+ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \
+ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \
+ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \
+ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \
+ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \
+ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \
+ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \
+ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \
+ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \
+ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \
+ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \
+ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
+ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
+ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
+ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
+ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
+ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \
+ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \
+ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \
+ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \
+ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \
+ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \
+ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \
+ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \
+ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \
+ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \
+ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \
+ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \
+ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \
+ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \
+ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \
+ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \
+ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \
+ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \
+ < $(srcdir)/stdlib.in.h | \
+ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \
+ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \
+ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \
+ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \
+ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \
+ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \
+ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \
+ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \
+ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \
+ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \
+ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \
+ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \
+ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
+ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \
+ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \
+ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
+ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
+ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \
+ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \
+ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \
+ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
+ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \
+ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \
+ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \
+ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \
+ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
+ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \
+ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \
+ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \
+ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \
+ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
+ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
+ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
+ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
+ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
+ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
+ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \
+ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
+ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \
+ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \
+ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \
+ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \
+ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \
+ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \
+ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \
+ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \
+ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \
+ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \
+ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \
+ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \
+ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \
+ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \
+ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \
+ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \
+ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \
+ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \
+ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \
+ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \
+ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \
+ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \
+ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \
+ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \
+ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \
+ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \
+ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \
+ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \
+ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \
+ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \
+ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \
+ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \
+ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \
+ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \
+ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \
+ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \
+ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \
+ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \
+ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \
+ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \
+ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \
+ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \
+ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \
+ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \
+ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \
+ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \
+ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ < $(srcdir)/string.in.h | \
+ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \
+ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \
+ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \
+ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \
+ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \
+ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \
+ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \
+ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <sys/random.h> when the system
+# doesn't have one.
+sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \
+ -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \
+ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \
+ -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \
+ -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/sys_random.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
+ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \
+ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \
+ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \
+ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \
+ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \
+ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \
+ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \
+ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \
+ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \
+ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \
+ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \
+ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \
+ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \
+ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \
+ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \
+ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \
+ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \
+ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \
+ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \
+ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \
+ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \
+ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \
+ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \
+ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \
+ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \
+ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/sys_stat.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+ $(AM_V_GEN)$(MKDIR_P) 'sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+ $(srcdir)/sys_types.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \
+ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \
+ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \
+ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \
+ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \
+ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \
+ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \
+ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \
+ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \
+ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \
+ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \
+ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \
+ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
+ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \
+ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \
+ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
+ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
+ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
+ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
+ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \
+ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \
+ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \
+ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \
+ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \
+ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \
+ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \
+ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \
+ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \
+ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \
+ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \
+ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \
+ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \
+ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \
+ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \
+ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \
+ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \
+ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \
+ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \
+ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \
+ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \
+ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \
+ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \
+ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \
+ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \
+ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \
+ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \
+ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \
+ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \
+ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \
+ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \
+ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \
+ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \
+ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \
+ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \
+ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \
+ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \
+ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \
+ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \
+ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \
+ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \
+ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \
+ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \
+ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \
+ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \
+ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \
+ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \
+ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \
+ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \
+ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \
+ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \
+ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \
+ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \
+ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \
+ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \
+ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \
+ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \
+ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \
+ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \
+ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \
+ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \
+ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \
+ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \
+ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \
+ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \
+ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \
+ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \
+ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \
+ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \
+ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \
+ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \
+ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \
+ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \
+ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \
+ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \
+ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \
+ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \
+ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \
+ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \
+ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \
+ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \
+ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \
+ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \
+ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \
+ < $(srcdir)/unistd.in.h | \
+ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \
+ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \
+ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
+ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \
+ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \
+ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
+ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
+ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
+ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \
+ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
+ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
+ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
+ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \
+ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
+ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+ | \
+ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \
+ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \
+ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \
+ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \
+ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \
+ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \
+ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \
+ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \
+ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \
+ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \
+ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \
+ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \
+ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
+ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
+ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \
+ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \
+ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
+ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
+ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
+ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
+ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \
+ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
+ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \
+ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \
+ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
+ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \
+ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \
+ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \
+ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \
+ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \
+ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \
+ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \
+ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \
+ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \
+ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \
+ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \
+ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \
+ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \
+ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \
+ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \
+ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \
+ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \
+ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \
+ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \
+ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \
+ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \
+ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \
+ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \
+ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \
+ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \
+ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \
+ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \
+ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \
+ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \
+ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \
+ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \
+ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \
+ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \
+ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \
+ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \
+ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \
+ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \
+ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \
+ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \
+ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \
+ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \
+ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \
+ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \
+ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ < $(srcdir)/wchar.in.h | \
+ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \
+ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
+ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \
+ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+ | \
+ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \
+ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
+ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
+ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
+ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
+ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \
+ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \
+ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \
+ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \
+ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/wctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+ @for dir in '' $(MOSTLYCLEANDIRS); do \
+ if test -n "$$dir" && test -d $$dir; then \
+ echo "rmdir $$dir"; rmdir $$dir; \
+ fi; \
+ done; \
+ :
+distclean-local: distclean-gnulib-libobjs
+distclean-gnulib-libobjs:
+ -rm -f @gl_LIBOBJDEPS@
+maintainer-clean-local: distclean-gnulib-libobjs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h
new file mode 100644
index 0000000..6ecea98
--- /dev/null
+++ b/lib/_Noreturn.h
@@ -0,0 +1,50 @@
+/* A C macro for declaring that a function does not return.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _Noreturn
+# if (defined __cplusplus \
+ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+ || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+ && 0)
+ /* [[noreturn]] is not practically usable, because with it the syntax
+ extern _Noreturn void func (...);
+ would not be valid; such a declaration would only be valid with 'extern'
+ and '_Noreturn' swapped, or without the 'extern' keyword. However, some
+ AIX system header files and several gnulib header files use precisely
+ this syntax with 'extern'. */
+# define _Noreturn [[noreturn]]
+# elif (defined __clang__ && __clang_major__ < 16 \
+ && defined _GL_WORK_AROUND_LLVM_BUG_59792)
+ /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around
+ that rare LLVM bug, though you may get many false-alarm warnings. */
+# define _Noreturn
+# elif ((!defined __cplusplus || defined __clang__) \
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
+ /* _Noreturn works as-is. */
+# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \
+ || 0x5110 <= __SUNPRO_C)
+# define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn
+# endif
+#endif
diff --git a/lib/alloca.c b/lib/alloca.c
new file mode 100644
index 0000000..5eb16a9
--- /dev/null
+++ b/lib/alloca.c
@@ -0,0 +1,167 @@
+/* alloca.c -- allocate automatically reclaimed memory
+ This file is in the public domain. */
+
+/* (Mostly) portable implementation -- D A Gwyn
+
+ This implementation of the PWB library alloca function,
+ which is used to allocate space off the run-time stack so
+ that it is automatically reclaimed upon procedure exit,
+ was inspired by discussions with J. Q. Johnson of Cornell.
+ J.Otto Tennant <jot@cray.com> contributed the Cray support.
+
+ There are some preprocessor constants that can
+ be defined when compiling for your specific system, for
+ improved efficiency; however, the defaults should be okay.
+
+ The general concept of this implementation is to keep
+ track of all alloca-allocated blocks, and reclaim any
+ that are found to be deeper in the stack than the current
+ invocation. This heuristic does not reclaim storage as
+ soon as it becomes invalid, but it will do so eventually.
+
+ As a special case, alloca(0) reclaims storage without
+ allocating any. It is a good idea to use alloca(0) in
+ your main control loop, etc. to force garbage collection. */
+
+#include <config.h>
+
+#include <alloca.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+/* If compiling with GCC or clang, this file is not needed. */
+#if !(defined __GNUC__ || defined __clang__)
+
+/* If someone has defined alloca as a macro,
+ there must be some other way alloca is supposed to work. */
+# ifndef alloca
+
+/* Define STACK_DIRECTION if you know the direction of stack
+ growth for your system; otherwise it will be automatically
+ deduced at run-time.
+
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+
+# ifndef STACK_DIRECTION
+# define STACK_DIRECTION 0 /* Direction unknown. */
+# endif
+
+# if STACK_DIRECTION != 0
+
+# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
+
+# else /* STACK_DIRECTION == 0; need run-time code. */
+
+static int stack_dir; /* 1 or -1 once known. */
+# define STACK_DIR stack_dir
+
+static int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
+
+# endif /* STACK_DIRECTION == 0 */
+
+/* An "alloca header" is used to:
+ (a) chain together all alloca'ed blocks;
+ (b) keep track of stack depth.
+
+ It is very important that sizeof(header) agree with malloc
+ alignment chunk size. The following default should work okay. */
+
+# ifndef ALIGN_SIZE
+# define ALIGN_SIZE sizeof(double)
+# endif
+
+typedef union hdr
+{
+ char align[ALIGN_SIZE]; /* To force sizeof(header). */
+ struct
+ {
+ union hdr *next; /* For chaining headers. */
+ char *deep; /* For stack depth measure. */
+ } h;
+} header;
+
+static header *last_alloca_header = NULL; /* -> last alloca header. */
+
+/* Return a pointer to at least SIZE bytes of storage,
+ which will be automatically reclaimed upon exit from
+ the procedure that called alloca. Originally, this space
+ was supposed to be taken from the current stack frame of the
+ caller, but that method cannot be made to work for some
+ implementations of C, for example under Gould's UTX/32. */
+
+void *
+alloca (size_t size)
+{
+ auto char probe; /* Probes stack depth: */
+ register char *depth = &probe;
+
+# if STACK_DIRECTION == 0
+ if (STACK_DIR == 0) /* Unknown growth direction. */
+ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20);
+# endif
+
+ /* Reclaim garbage, defined as all alloca'd storage that
+ was allocated from deeper in the stack than currently. */
+
+ {
+ register header *hp; /* Traverses linked list. */
+
+ for (hp = last_alloca_header; hp != NULL;)
+ if ((STACK_DIR > 0 && hp->h.deep > depth)
+ || (STACK_DIR < 0 && hp->h.deep < depth))
+ {
+ register header *np = hp->h.next;
+
+ free (hp); /* Collect garbage. */
+
+ hp = np; /* -> next header. */
+ }
+ else
+ break; /* Rest are not deeper. */
+
+ last_alloca_header = hp; /* -> last valid storage. */
+ }
+
+ if (size == 0)
+ return NULL; /* No allocation required. */
+
+ /* Allocate combined header + user data storage. */
+
+ {
+ /* Address of header. */
+ register header *new;
+
+ size_t combined_size = sizeof (header) + size;
+ if (combined_size < sizeof (header))
+ memory_full ();
+
+ new = malloc (combined_size);
+
+ if (! new)
+ memory_full ();
+
+ new->h.next = last_alloca_header;
+ new->h.deep = depth;
+
+ last_alloca_header = new;
+
+ /* User storage begins just after header. */
+
+ return (void *) (new + 1);
+ }
+}
+
+# endif /* no alloca */
+#endif /* not GCC || clang */
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
new file mode 100644
index 0000000..a1bb3d7
--- /dev/null
+++ b/lib/alloca.in.h
@@ -0,0 +1,72 @@
+/* Memory allocation on the stack.
+
+ Copyright (C) 1995, 1999, 2001-2004, 2006-2023 Free Software Foundation,
+ Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+ means there is a real alloca function. */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+ allocated on the stack, which will last until the function returns.
+ Use of alloca should be avoided:
+ - inside arguments of function calls - undefined behaviour,
+ - in inline functions - the allocation may actually last until the
+ calling function returns,
+ - for huge N (say, N >= 65536) - you never know how large (or small)
+ the stack is, and when the stack cannot fulfill the memory allocation
+ request, the program just crashes.
+ */
+
+#ifndef alloca
+ /* Some version of mingw have an <alloca.h> that causes trouble when
+ included after 'alloca' gets defined as a macro. As a workaround,
+ include this <alloca.h> first and define 'alloca' as a macro afterwards
+ if needed. */
+# if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@
+# include_next <alloca.h>
+# endif
+#endif
+#ifndef alloca
+# if defined __GNUC__ || (__clang_major__ >= 4)
+# define alloca __builtin_alloca
+# elif defined _AIX
+# define alloca __alloca
+# elif defined _MSC_VER
+# include <malloc.h>
+# define alloca _alloca
+# elif defined __DECC && defined __VMS
+# define alloca __ALLOCA
+# elif defined __TANDEM && defined _TNS_E_TARGET
+# ifdef __cplusplus
+extern "C"
+# endif
+void *_alloca (unsigned short);
+# pragma intrinsic (_alloca)
+# define alloca _alloca
+# elif defined __MVS__
+# include <stdlib.h>
+# else
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
+# endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/lib/arg-nonnull.h b/lib/arg-nonnull.h
new file mode 100644
index 0000000..9498ae1
--- /dev/null
+++ b/lib/arg-nonnull.h
@@ -0,0 +1,26 @@
+/* A C macro for declaring that specific arguments must not be NULL.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+ that the values passed as arguments n, ..., m must be non-NULL pointers.
+ n = 1 stands for the first argument, n = 2 for the second argument etc. */
+#ifndef _GL_ARG_NONNULL
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__
+# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+# define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/lib/argmatch.c b/lib/argmatch.c
new file mode 100644
index 0000000..9cddb37
--- /dev/null
+++ b/lib/argmatch.c
@@ -0,0 +1,293 @@
+/* argmatch.c -- find a match for a string in an array
+
+ Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by David MacKenzie <djm@ai.mit.edu>
+ Modified by Akim Demaille <demaille@inf.enst.fr> */
+
+#include <config.h>
+
+/* Specification. */
+#include "argmatch.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define _(msgid) gettext (msgid)
+
+#include "error.h"
+#include "quotearg.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* When reporting an invalid argument, show nonprinting characters
+ by using the quoting style ARGMATCH_QUOTING_STYLE. Do not use
+ literal_quoting_style. */
+#ifndef ARGMATCH_QUOTING_STYLE
+# define ARGMATCH_QUOTING_STYLE locale_quoting_style
+#endif
+
+/* Non failing version of argmatch call this function after failing. */
+#ifndef ARGMATCH_DIE
+# include "exitfail.h"
+# define ARGMATCH_DIE exit (exit_failure)
+#endif
+
+#ifdef ARGMATCH_DIE_DECL
+ARGMATCH_DIE_DECL;
+#endif
+
+static void
+__argmatch_die (void)
+{
+ ARGMATCH_DIE;
+}
+
+/* Used by XARGMATCH. See description in argmatch.h.
+ Default to __argmatch_die, but allow caller to change this at run-time. */
+argmatch_exit_fn argmatch_die = __argmatch_die;
+
+
+/* If ARG is an unambiguous match for an element of the
+ NULL-terminated array ARGLIST, return the index in ARGLIST
+ of the matched element, else -1 if it does not match any element
+ or -2 if it is ambiguous (is a prefix of more than one element).
+
+ If VALLIST is none null, use it to resolve ambiguities limited to
+ synonyms, i.e., for
+ "yes", "yop" -> 0
+ "no", "nope" -> 1
+ "y" is a valid argument, for 0, and "n" for 1. */
+
+ptrdiff_t
+argmatch (const char *arg, const char *const *arglist,
+ const void *vallist, size_t valsize)
+{
+ size_t i; /* Temporary index in ARGLIST. */
+ size_t arglen; /* Length of ARG. */
+ ptrdiff_t matchind = -1; /* Index of first nonexact match. */
+ bool ambiguous = false; /* If true, multiple nonexact match(es). */
+
+ arglen = strlen (arg);
+
+ /* Test all elements for either exact match or abbreviated matches. */
+ for (i = 0; arglist[i]; i++)
+ {
+ if (!strncmp (arglist[i], arg, arglen))
+ {
+ if (strlen (arglist[i]) == arglen)
+ /* Exact match found. */
+ return i;
+ else if (matchind == -1)
+ /* First nonexact match found. */
+ matchind = i;
+ else
+ {
+ /* Second nonexact match found. */
+ if (vallist == NULL
+ || memcmp ((char const *) vallist + valsize * matchind,
+ (char const *) vallist + valsize * i, valsize))
+ {
+ /* There is a real ambiguity, or we could not
+ disambiguate. */
+ ambiguous = true;
+ }
+ }
+ }
+ }
+ if (ambiguous)
+ return -2;
+ else
+ return matchind;
+}
+
+ptrdiff_t
+argmatch_exact (const char *arg, const char *const *arglist)
+{
+ size_t i;
+
+ /* Test elements for exact match. */
+ for (i = 0; arglist[i]; i++)
+ {
+ if (!strcmp (arglist[i], arg))
+ return i;
+ }
+
+ return -1;
+}
+
+/* Error reporting for argmatch.
+ CONTEXT is a description of the type of entity that was being matched.
+ VALUE is the invalid value that was given.
+ PROBLEM is the return value from argmatch. */
+
+void
+argmatch_invalid (const char *context, const char *value, ptrdiff_t problem)
+{
+ char const *format = (problem == -1
+ ? _("invalid argument %s for %s")
+ : _("ambiguous argument %s for %s"));
+
+ error (0, 0, format, quotearg_n_style (0, ARGMATCH_QUOTING_STYLE, value),
+ quote_n (1, context));
+}
+
+/* List the valid arguments for argmatch.
+ ARGLIST is the same as in argmatch.
+ VALLIST is a pointer to an array of values.
+ VALSIZE is the size of the elements of VALLIST */
+void
+argmatch_valid (const char *const *arglist,
+ const void *vallist, size_t valsize)
+{
+ size_t i;
+ const char *last_val = NULL;
+
+ /* We try to put synonyms on the same line. The assumption is that
+ synonyms follow each other */
+ fputs (_("Valid arguments are:"), stderr);
+ for (i = 0; arglist[i]; i++)
+ if ((i == 0)
+ || memcmp (last_val, (char const *) vallist + valsize * i, valsize))
+ {
+ fprintf (stderr, "\n - %s", quote (arglist[i]));
+ last_val = (char const *) vallist + valsize * i;
+ }
+ else
+ {
+ fprintf (stderr, ", %s", quote (arglist[i]));
+ }
+ putc ('\n', stderr);
+}
+
+/* Never failing versions of the previous functions.
+
+ CONTEXT is the context for which argmatch is called (e.g.,
+ "--version-control", or "$VERSION_CONTROL" etc.). Upon failure,
+ calls the (supposed never to return) function EXIT_FN. */
+
+ptrdiff_t
+__xargmatch_internal (const char *context,
+ const char *arg, const char *const *arglist,
+ const void *vallist, size_t valsize,
+ argmatch_exit_fn exit_fn,
+ bool allow_abbreviation)
+{
+ ptrdiff_t res;
+
+ if (allow_abbreviation)
+ res = argmatch (arg, arglist, vallist, valsize);
+ else
+ res = argmatch_exact (arg, arglist);
+
+ if (res >= 0)
+ /* Success. */
+ return res;
+
+ /* We failed. Explain why. */
+ argmatch_invalid (context, arg, res);
+ argmatch_valid (arglist, vallist, valsize);
+ (*exit_fn) ();
+
+ return -1; /* To please the compilers. */
+}
+
+/* Look for VALUE in VALLIST, an array of objects of size VALSIZE and
+ return the first corresponding argument in ARGLIST */
+const char *
+argmatch_to_argument (const void *value,
+ const char *const *arglist,
+ const void *vallist, size_t valsize)
+{
+ size_t i;
+
+ for (i = 0; arglist[i]; i++)
+ if (!memcmp (value, (char const *) vallist + valsize * i, valsize))
+ return arglist[i];
+ return NULL;
+}
+
+#ifdef TEST
+/*
+ * Based on "getversion.c" by David MacKenzie <djm@gnu.ai.mit.edu>
+ */
+
+/* When to make backup files. */
+enum backup_type
+{
+ /* Never make backups. */
+ no_backups,
+
+ /* Make simple backups of every file. */
+ simple_backups,
+
+ /* Make numbered backups of files that already have numbered backups,
+ and simple backups of the others. */
+ numbered_existing_backups,
+
+ /* Make numbered backups of every file. */
+ numbered_backups
+};
+
+/* Two tables describing arguments (keys) and their corresponding
+ values */
+static const char *const backup_args[] =
+{
+ "no", "none", "off",
+ "simple", "never",
+ "existing", "nil",
+ "numbered", "t",
+ 0
+};
+
+static const enum backup_type backup_vals[] =
+{
+ no_backups, no_backups, no_backups,
+ simple_backups, simple_backups,
+ numbered_existing_backups, numbered_existing_backups,
+ numbered_backups, numbered_backups
+};
+
+int
+main (int argc, const char *const *argv)
+{
+ const char *cp;
+ enum backup_type backup_type = no_backups;
+
+ if (argc > 2)
+ {
+ fprintf (stderr, "Usage: %s [VERSION_CONTROL]\n", getprogname ());
+ exit (1);
+ }
+
+ if ((cp = getenv ("VERSION_CONTROL")))
+ backup_type = XARGMATCH ("$VERSION_CONTROL", cp,
+ backup_args, backup_vals);
+
+ if (argc == 2)
+ backup_type = XARGMATCH (getprogname (), argv[1],
+ backup_args, backup_vals);
+
+ printf ("The version control is '%s'\n",
+ ARGMATCH_TO_ARGUMENT (&backup_type, backup_args, backup_vals));
+
+ return 0;
+}
+#endif
diff --git a/lib/argmatch.h b/lib/argmatch.h
new file mode 100644
index 0000000..f18127f
--- /dev/null
+++ b/lib/argmatch.h
@@ -0,0 +1,345 @@
+/* argmatch.h -- definitions and prototypes for argmatch.c
+
+ Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by David MacKenzie <djm@ai.mit.edu>
+ Modified by Akim Demaille <demaille@inf.enst.fr> */
+
+#ifndef ARGMATCH_H_
+# define ARGMATCH_H_ 1
+
+# include <limits.h>
+# include <stddef.h>
+# include <stdio.h>
+# include <string.h> /* memcmp */
+
+# include "gettext.h"
+# include "quote.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# define ARRAY_CARDINALITY(Array) (sizeof (Array) / sizeof *(Array))
+
+/* Assert there are as many real arguments as there are values
+ (argument list ends with a NULL guard). */
+
+# define ARGMATCH_VERIFY(Arglist, Vallist) \
+ static_assert (ARRAY_CARDINALITY (Arglist) \
+ == ARRAY_CARDINALITY (Vallist) + 1)
+
+/* Return the index of the element of ARGLIST (NULL terminated) that
+ matches with ARG. If VALLIST is not NULL, then use it to resolve
+ false ambiguities (i.e., different matches of ARG but corresponding
+ to the same values in VALLIST). */
+
+ptrdiff_t argmatch (char const *arg, char const *const *arglist,
+ void const *vallist, size_t valsize) _GL_ATTRIBUTE_PURE;
+
+ptrdiff_t argmatch_exact (char const *arg, char const *const *arglist)
+ _GL_ATTRIBUTE_PURE;
+
+# define ARGMATCH(Arg, Arglist, Vallist) \
+ argmatch (Arg, Arglist, (void const *) (Vallist), sizeof *(Vallist))
+
+# define ARGMATCH_EXACT(Arg, Arglist) \
+ argmatch_exact (Arg, Arglist)
+
+/* xargmatch calls this function when it fails. This function should not
+ return. By default, this is a function that calls ARGMATCH_DIE which
+ in turn defaults to 'exit (exit_failure)'. */
+typedef void (*argmatch_exit_fn) (void);
+extern argmatch_exit_fn argmatch_die;
+
+/* Report on stderr why argmatch failed. Report correct values. */
+
+void argmatch_invalid (char const *context, char const *value,
+ ptrdiff_t problem);
+
+/* Left for compatibility with the old name invalid_arg */
+
+# define invalid_arg(Context, Value, Problem) \
+ argmatch_invalid (Context, Value, Problem)
+
+
+
+/* Report on stderr the list of possible arguments. */
+
+void argmatch_valid (char const *const *arglist,
+ void const *vallist, size_t valsize);
+
+# define ARGMATCH_VALID(Arglist, Vallist) \
+ argmatch_valid (Arglist, (void const *) (Vallist), sizeof *(Vallist))
+
+
+
+/* Like argmatch/argmatch_exact, but upon failure, report an explanation
+ of the failure, and exit using the function EXIT_FN. */
+
+ptrdiff_t __xargmatch_internal (char const *context,
+ char const *arg, char const *const *arglist,
+ void const *vallist, size_t valsize,
+ argmatch_exit_fn exit_fn,
+ bool allow_abbreviation);
+
+/* Programmer friendly interface to __xargmatch_internal. */
+
+# define XARGMATCH(Context, Arg, Arglist, Vallist) \
+ ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \
+ (void const *) (Vallist), \
+ sizeof *(Vallist), \
+ argmatch_die, \
+ true)])
+
+# define XARGMATCH_EXACT(Context, Arg, Arglist, Vallist) \
+ ((Vallist) [__xargmatch_internal (Context, Arg, Arglist, \
+ (void const *) (Vallist), \
+ sizeof *(Vallist), \
+ argmatch_die, \
+ false)])
+
+/* Convert a value into a corresponding argument. */
+
+char const *argmatch_to_argument (void const *value,
+ char const *const *arglist,
+ void const *vallist, size_t valsize)
+ _GL_ATTRIBUTE_PURE;
+
+# define ARGMATCH_TO_ARGUMENT(Value, Arglist, Vallist) \
+ argmatch_to_argument (Value, Arglist, \
+ (void const *) (Vallist), sizeof *(Vallist))
+
+# define ARGMATCH_DEFINE_GROUP(Name, Type) \
+ /* The type of the values of this group. */ \
+ typedef Type argmatch_##Name##_type; \
+ \
+ /* The size of the type of the values of this group. */ \
+ enum argmatch_##Name##_size_enum \
+ { \
+ argmatch_##Name##_size = sizeof (argmatch_##Name##_type) \
+ }; \
+ \
+ /* Argument mapping of this group. */ \
+ typedef struct \
+ { \
+ /* Argument (e.g., "simple"). */ \
+ const char *arg; \
+ /* Value (e.g., simple_backups). */ \
+ const argmatch_##Name##_type val; \
+ } argmatch_##Name##_arg; \
+ \
+ /* Documentation of this group. */ \
+ typedef struct \
+ { \
+ /* Argument (e.g., "simple"). */ \
+ const char *arg; \
+ /* Documentation (e.g., N_("always make simple backups")). */ \
+ const char *doc; \
+ } argmatch_##Name##_doc; \
+ \
+ /* All the features of an argmatch group. */ \
+ typedef struct \
+ { \
+ const argmatch_##Name##_arg* args; \
+ const argmatch_##Name##_doc* docs; \
+ \
+ /* Printed before the usage message. */ \
+ const char *doc_pre; \
+ /* Printed after the usage message. */ \
+ const char *doc_post; \
+ } argmatch_##Name##_group_type; \
+ \
+ /* The structure the user must build. */ \
+ extern const argmatch_##Name##_group_type argmatch_##Name##_group; \
+ \
+ /* Print the documentation of this group. */ \
+ void argmatch_##Name##_usage (FILE *out); \
+ \
+ /* If nonnegative, the index I of ARG in ARGS, i.e, \
+ ARGS[I] == ARG. \
+ Return -1 for invalid argument, -2 for ambiguous argument. */ \
+ ptrdiff_t argmatch_##Name##_choice (const char *arg); \
+ \
+ /* A pointer to the corresponding value if it exists, or \
+ report an error and exit with failure if the argument was \
+ not recognized. */ \
+ const argmatch_##Name##_type* \
+ argmatch_##Name##_value (const char *context, const char *arg); \
+ \
+ /* The first argument in ARGS that matches this value, or NULL. */ \
+ const char * \
+ argmatch_##Name##_argument (const argmatch_##Name##_type *val); \
+ \
+ ptrdiff_t \
+ argmatch_##Name##_choice (const char *arg) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ size_t size = argmatch_##Name##_size; \
+ ptrdiff_t res = -1; /* Index of first nonexact match. */ \
+ bool ambiguous = false; /* Whether multiple nonexact match(es). */ \
+ size_t arglen = strlen (arg); \
+ \
+ /* Test all elements for either exact match or abbreviated \
+ matches. */ \
+ for (size_t i = 0; g->args[i].arg; i++) \
+ if (!strncmp (g->args[i].arg, arg, arglen)) \
+ { \
+ if (strlen (g->args[i].arg) == arglen) \
+ /* Exact match found. */ \
+ return i; \
+ else if (res == -1) \
+ /* First nonexact match found. */ \
+ res = i; \
+ else if (memcmp (&g->args[res].val, &g->args[i].val, size)) \
+ /* Second nonexact match found. */ \
+ /* There is a real ambiguity, or we could not \
+ disambiguate. */ \
+ ambiguous = true; \
+ } \
+ return ambiguous ? -2 : res; \
+ } \
+ \
+ const char * \
+ argmatch_##Name##_argument (const argmatch_##Name##_type *val) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ size_t size = argmatch_##Name##_size; \
+ for (size_t i = 0; g->args[i].arg; i++) \
+ if (!memcmp (val, &g->args[i].val, size)) \
+ return g->args[i].arg; \
+ return NULL; \
+ } \
+ \
+ /* List the valid values of this group. */ \
+ static void \
+ argmatch_##Name##_valid (FILE *out) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ size_t size = argmatch_##Name##_size; \
+ \
+ /* Try to put synonyms on the same line. Synonyms are expected \
+ to follow each other. */ \
+ fputs (gettext ("Valid arguments are:"), out); \
+ for (int i = 0; g->args[i].arg; i++) \
+ if (i == 0 \
+ || memcmp (&g->args[i-1].val, &g->args[i].val, size)) \
+ fprintf (out, "\n - %s", quote (g->args[i].arg)); \
+ else \
+ fprintf (out, ", %s", quote (g->args[i].arg)); \
+ putc ('\n', out); \
+ } \
+ \
+ const argmatch_##Name##_type* \
+ argmatch_##Name##_value (const char *context, const char *arg) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ ptrdiff_t res = argmatch_##Name##_choice (arg); \
+ if (res < 0) \
+ { \
+ argmatch_invalid (context, arg, res); \
+ argmatch_##Name##_valid (stderr); \
+ argmatch_die (); \
+ } \
+ return &g->args[res].val; \
+ } \
+ \
+ /* The column in which the documentation is displayed. \
+ The leftmost possible, but no more than 20. */ \
+ static int \
+ argmatch_##Name##_doc_col (void) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ size_t size = argmatch_##Name##_size; \
+ int res = 0; \
+ for (int i = 0; g->docs[i].arg; ++i) \
+ { \
+ int col = 4; \
+ int ival = argmatch_##Name##_choice (g->docs[i].arg); \
+ if (ival < 0) \
+ /* Pseudo argument, display it. */ \
+ col += strlen (g->docs[i].arg); \
+ else \
+ /* Genuine argument, display it with its synonyms. */ \
+ for (int j = 0; g->args[j].arg; ++j) \
+ if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \
+ col += (col == 4 ? 0 : 2) + strlen (g->args[j].arg); \
+ if (res <= col) \
+ res = col <= 20 ? col : 20; \
+ } \
+ return res ? res : 20; \
+ } \
+ \
+ void \
+ argmatch_##Name##_usage (FILE *out) \
+ { \
+ const argmatch_##Name##_group_type *g = &argmatch_##Name##_group; \
+ size_t size = argmatch_##Name##_size; \
+ /* Width of the screen. Help2man does not seem to support \
+ arguments on several lines, so in that case pretend a very \
+ large width. */ \
+ const int screen_width = getenv ("HELP2MAN") ? INT_MAX : 80; \
+ if (g->doc_pre) \
+ fprintf (out, "%s\n", gettext (g->doc_pre)); \
+ int doc_col = argmatch_##Name##_doc_col (); \
+ for (int i = 0; g->docs[i].arg; ++i) \
+ { \
+ int col = 0; \
+ bool first = true; \
+ int ival = argmatch_##Name##_choice (g->docs[i].arg); \
+ if (ival < 0) \
+ /* Pseudo argument, display it. */ \
+ col += fprintf (out, " %s", g->docs[i].arg); \
+ else \
+ /* Genuine argument, display it with its synonyms. */ \
+ for (int j = 0; g->args[j].arg; ++j) \
+ if (! memcmp (&g->args[ival].val, &g->args[j].val, size)) \
+ { \
+ if (!first \
+ && screen_width < col + 2 + strlen (g->args[j].arg)) \
+ { \
+ fprintf (out, ",\n"); \
+ col = 0; \
+ first = true; \
+ } \
+ if (first) \
+ { \
+ col += fprintf (out, " "); \
+ first = false; \
+ } \
+ else \
+ col += fprintf (out, ","); \
+ col += fprintf (out, " %s", g->args[j].arg); \
+ } \
+ /* The doc. Separated by at least two spaces. */ \
+ if (doc_col < col + 2) \
+ { \
+ fprintf (out, "\n"); \
+ col = 0; \
+ } \
+ fprintf (out, "%*s%s\n", \
+ doc_col - col, "", gettext (g->docs[i].doc)); \
+ } \
+ if (g->doc_post) \
+ fprintf (out, "%s\n", gettext (g->doc_post)); \
+ }
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* ARGMATCH_H_ */
diff --git a/lib/assert.in.h b/lib/assert.in.h
new file mode 100644
index 0000000..b0ab99c
--- /dev/null
+++ b/lib/assert.in.h
@@ -0,0 +1,27 @@
+/* Substitute for and wrapper around <assert.h>
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Do not guard the include, since <assert.h> is supposed to define
+ the assert macro each time it is included. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#@INCLUDE_NEXT@ @NEXT_ASSERT_H@
+
+/* The definition of static_assert is copied here. */
diff --git a/lib/assure.h b/lib/assure.h
new file mode 100644
index 0000000..e31076d
--- /dev/null
+++ b/lib/assure.h
@@ -0,0 +1,57 @@
+/* Run-time assert-like macros.
+
+ Copyright (C) 2014-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+#ifndef _GL_ASSURE_H
+#define _GL_ASSURE_H
+
+#include <assert.h>
+#include "verify.h"
+
+/* Evaluate an assertion E that is guaranteed to be true.
+ If NDEBUG is not defined, abort the program if E is false.
+ If NDEBUG is defined, the compiler can assume E and behavior is
+ undefined if E is false, fails to evaluate, or has side effects.
+
+ Unlike standard 'assert', this macro evaluates E even when NDEBUG
+ is defined, so as to catch typos, avoid some GCC warnings, and
+ improve performance when E is simple enough.
+
+ Also see the documentation for 'assume' in verify.h. */
+
+#ifdef NDEBUG
+# define affirm(E) assume (E)
+#else
+# define affirm(E) assert (E)
+#endif
+
+/* Check E's value at runtime, and report an error and abort if not.
+ However, do nothing if NDEBUG is defined.
+
+ Unlike standard 'assert', this macro compiles E even when NDEBUG
+ is defined, so as to catch typos and avoid some GCC warnings.
+ Unlike 'affirm', it is OK for E to use hard-to-optimize features,
+ since E is not executed if NDEBUG is defined. */
+
+#ifdef NDEBUG
+# define assure(E) ((void) (0 && (E)))
+#else
+# define assure(E) assert (E)
+#endif
+
+#endif
diff --git a/lib/attribute.h b/lib/attribute.h
new file mode 100644
index 0000000..130644d
--- /dev/null
+++ b/lib/attribute.h
@@ -0,0 +1,226 @@
+/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers
+
+ Copyright 2020-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+/* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_*
+ macros used within Gnulib. */
+
+/* These attributes can be placed in two ways:
+ - At the start of a declaration (i.e. even before storage-class
+ specifiers!); then they apply to all entities that are declared
+ by the declaration.
+ - Immediately after the name of an entity being declared by the
+ declaration; then they apply to that entity only. */
+
+#ifndef _GL_ATTRIBUTE_H
+#define _GL_ATTRIBUTE_H
+
+
+/* This file defines two types of attributes:
+ * C23 standard attributes. These have macro names that do not begin with
+ 'ATTRIBUTE_'.
+ * Selected GCC attributes; see:
+ https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html
+ https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
+ https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html
+ These names begin with 'ATTRIBUTE_' to avoid name clashes. */
+
+
+/* =============== Attributes for specific kinds of functions =============== */
+
+/* Attributes for functions that should not be used. */
+
+/* Warn if the entity is used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: namespace, class, template specialization. */
+#define DEPRECATED _GL_ATTRIBUTE_DEPRECATED
+
+/* If a function call is not optimized way, warn with MSG. */
+/* Applies to: functions. */
+#define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg)
+
+/* If a function call is not optimized way, report an error with MSG. */
+/* Applies to: functions. */
+#define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg)
+
+
+/* Attributes for memory-allocating functions. */
+
+/* The function returns a pointer to freshly allocated memory. */
+/* Applies to: functions. */
+#define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC
+
+/* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function
+ is the size of the returned memory block.
+ ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments
+ to determine the size of the returned memory block. */
+/* Applies to: function, pointer to function, function types. */
+#define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args)
+
+/* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i)
+#define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE
+
+/* Attributes for variadic functions. */
+
+/* The variadic function expects a trailing NULL argument.
+ ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
+ ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
+/* Applies to: functions. */
+#define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos)
+
+
+/* ================== Attributes for compiler diagnostics ================== */
+
+/* Attributes that help the compiler diagnose programmer mistakes.
+ Some of them may also help for some compiler optimizations. */
+
+/* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) -
+ The STRING-INDEXth function argument is a format string of style
+ ARCHETYPE, which is one of:
+ printf, gnu_printf
+ scanf, gnu_scanf,
+ strftime, gnu_strftime,
+ strfmon,
+ or the same thing prefixed and suffixed with '__'.
+ If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
+ are suitable for the format string. */
+/* Applies to: functions. */
+#define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec)
+
+/* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL.
+ ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */
+/* Applies to: functions. */
+#define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args)
+
+/* The function's return value is a non-NULL pointer. */
+/* Applies to: functions. */
+#define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL
+
+/* Warn if the caller does not use the return value,
+ unless the caller uses something like ignore_value. */
+/* Applies to: function, enumeration, class. */
+#define NODISCARD _GL_ATTRIBUTE_NODISCARD
+
+
+/* Attributes that disable false alarms when the compiler diagnoses
+ programmer "mistakes". */
+
+/* Do not warn if the entity is not used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: class. */
+#define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
+
+/* The contents of a character array is not meant to be NUL-terminated. */
+/* Applies to: struct/union members and variables that are arrays of element
+ type '[[un]signed] char'. */
+#define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING
+
+/* Do not warn if control flow falls through to the immediately
+ following 'case' or 'default' label. */
+/* Applies to: Empty statement (;), inside a 'switch' statement. */
+#define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH
+
+
+/* ================== Attributes for debugging information ================== */
+
+/* Attributes regarding debugging information emitted by the compiler. */
+
+/* Omit the function from stack traces when debugging. */
+/* Applies to: function. */
+#define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL
+
+/* Make the entity visible to debuggers etc., even with '-fwhole-program'. */
+/* Applies to: functions, variables. */
+#define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
+
+
+/* ========== Attributes that mainly direct compiler optimizations ========== */
+
+/* The function does not throw exceptions. */
+/* Applies to: functions. */
+#define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW
+
+/* Do not inline the function. */
+/* Applies to: functions. */
+#define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE
+
+/* Always inline the function, and report an error if the compiler
+ cannot inline. */
+/* Applies to: function. */
+#define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE
+
+/* It is OK for a compiler to omit duplicate calls with the same arguments.
+ This attribute is safe for a function that neither depends on
+ nor affects observable state, and always returns exactly once -
+ e.g., does not loop forever, and does not call longjmp.
+ (This attribute is stricter than ATTRIBUTE_PURE.) */
+/* Applies to: functions. */
+#define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST
+
+/* It is OK for a compiler to omit duplicate calls with the same
+ arguments if observable state is not changed between calls.
+ This attribute is safe for a function that does not affect
+ observable state, and always returns exactly once.
+ (This attribute is looser than ATTRIBUTE_CONST.) */
+/* Applies to: functions. */
+#define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE
+
+/* The function is rarely executed. */
+/* Applies to: functions. */
+#define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD
+
+/* If called from some other compilation unit, the function executes
+ code from that unit only by return or by exception handling,
+ letting the compiler optimize that unit more aggressively. */
+/* Applies to: functions. */
+#define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF
+
+/* For struct members: The member has the smallest possible alignment.
+ For struct, union, class: All members have the smallest possible alignment,
+ minimizing the memory required. */
+/* Applies to: struct members, struct, union,
+ in C++ also: class. */
+#define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED
+
+
+/* ================ Attributes that make invalid code valid ================ */
+
+/* Attributes that prevent fatal compiler optimizations for code that is not
+ fully ISO C compliant. */
+
+/* Pointers to the type may point to the same storage as pointers to
+ other types, thus disabling strict aliasing optimization. */
+/* Applies to: types. */
+#define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS
+
+
+#endif /* _GL_ATTRIBUTE_H */
diff --git a/lib/basename-lgpl.c b/lib/basename-lgpl.c
new file mode 100644
index 0000000..6de60aa
--- /dev/null
+++ b/lib/basename-lgpl.c
@@ -0,0 +1,70 @@
+/* basename.c -- return the last element in a file name
+
+ Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "basename-lgpl.h"
+
+#include <string.h>
+
+#include "filename.h"
+
+char *
+last_component (char const *name)
+{
+ char const *base = name + FILE_SYSTEM_PREFIX_LEN (name);
+ char const *p;
+ bool last_was_slash = false;
+
+ while (ISSLASH (*base))
+ base++;
+
+ for (p = base; *p; p++)
+ {
+ if (ISSLASH (*p))
+ last_was_slash = true;
+ else if (last_was_slash)
+ {
+ base = p;
+ last_was_slash = false;
+ }
+ }
+
+ return (char *) base;
+}
+
+size_t
+base_len (char const *name)
+{
+ size_t len;
+ size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
+
+ for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--)
+ continue;
+
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1
+ && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2])
+ return 2;
+
+ if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len
+ && len == prefix_len && ISSLASH (name[prefix_len]))
+ return prefix_len + 1;
+
+ return len;
+}
diff --git a/lib/basename-lgpl.h b/lib/basename-lgpl.h
new file mode 100644
index 0000000..5d996c1
--- /dev/null
+++ b/lib/basename-lgpl.h
@@ -0,0 +1,78 @@
+/* Extract the last component (base name) of a file name.
+
+ Copyright (C) 1998, 2001, 2003-2006, 2009-2023 Free Software Foundation,
+ Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _BASENAME_LGPL_H
+#define _BASENAME_LGPL_H
+
+#include <stddef.h>
+
+#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Return the address of the last file name component of FILENAME.
+ If FILENAME has some trailing slash(es), they are considered to be
+ part of the last component.
+ If FILENAME has no relative file name components because it is a file
+ system root, return the empty string.
+ Examples:
+ FILENAME RESULT
+ "foo.c" "foo.c"
+ "foo/bar.c" "bar.c"
+ "/foo/bar.c" "bar.c"
+ "foo/bar/" "bar/"
+ "foo/bar//" "bar//"
+ "/" ""
+ "//" ""
+ "" ""
+ The return value is a tail of the given FILENAME; do NOT free() it! */
+
+/* This function was traditionally called 'basename', but we avoid this
+ function name because
+ * Various platforms have different functions in their libc.
+ In particular, the glibc basename(), defined in <string.h>, does
+ not consider trailing slashes to be part of the component:
+ FILENAME RESULT
+ "foo/bar/" ""
+ "foo/bar//" ""
+ * The 'basename' command eliminates trailing slashes and for a root
+ produces a non-empty result:
+ FILENAME RESULT
+ "foo/bar/" "bar"
+ "foo/bar//" "bar"
+ "/" "/"
+ "//" "/"
+ */
+extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE;
+
+/* Return the length of the basename FILENAME.
+ Typically FILENAME is the value returned by base_name or last_component.
+ Act like strlen (FILENAME), except omit all trailing slashes. */
+extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _BASENAME_LGPL_H */
diff --git a/lib/basename.c b/lib/basename.c
new file mode 100644
index 0000000..21fab1e
--- /dev/null
+++ b/lib/basename.c
@@ -0,0 +1,64 @@
+/* basename.c -- return the last element in a file name
+
+ Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "dirname.h"
+
+#include <string.h>
+#include "xalloc.h"
+
+char *
+base_name (char const *name)
+{
+ char const *base = last_component (name);
+ idx_t length;
+ int dotslash_len;
+ if (*base)
+ {
+ length = base_len (base);
+
+ /* Collapse a sequence of trailing slashes into one. */
+ length += ISSLASH (base[length]);
+
+ /* On systems with drive letters, "a/b:c" must return "./b:c" rather
+ than "b:c" to avoid confusion with a drive letter. On systems
+ with pure POSIX semantics, this is not an issue. */
+ dotslash_len = FILE_SYSTEM_PREFIX_LEN (base) != 0 ? 2 : 0;
+ }
+ else
+ {
+ /* There is no last component, so NAME is a file system root or
+ the empty string. */
+ base = name;
+ length = base_len (base);
+ dotslash_len = 0;
+ }
+
+ char *p = ximalloc (dotslash_len + length + 1);
+ if (dotslash_len)
+ {
+ p[0] = '.';
+ p[1] = '/';
+ }
+
+ /* Finally, copy the basename. */
+ memcpy (p + dotslash_len, base, length);
+ p[dotslash_len + length] = '\0';
+ return p;
+}
diff --git a/lib/btowc.c b/lib/btowc.c
new file mode 100644
index 0000000..caadbd7
--- /dev/null
+++ b/lib/btowc.c
@@ -0,0 +1,39 @@
+/* Convert unibyte character to wide character.
+ Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <wchar.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+wint_t
+btowc (int c)
+{
+ if (c != EOF)
+ {
+ char buf[1];
+ wchar_t wc;
+
+ buf[0] = c;
+ if (mbtowc (&wc, buf, 1) >= 0)
+ return wc;
+ }
+ return WEOF;
+}
diff --git a/lib/c++defs.h b/lib/c++defs.h
new file mode 100644
index 0000000..8ad4695
--- /dev/null
+++ b/lib/c++defs.h
@@ -0,0 +1,331 @@
+/* C++ compatible function declaration macros.
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* Begin/end the GNULIB_NAMESPACE namespace. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
+# define _GL_END_NAMESPACE }
+#else
+# define _GL_BEGIN_NAMESPACE
+# define _GL_END_NAMESPACE
+#endif
+
+/* The three most frequent use cases of these macros are:
+
+ * For providing a substitute for a function that is missing on some
+ platforms, but is declared and works fine on the platforms on which
+ it exists:
+
+ #if @GNULIB_FOO@
+ # if !@HAVE_FOO@
+ _GL_FUNCDECL_SYS (foo, ...);
+ # endif
+ _GL_CXXALIAS_SYS (foo, ...);
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+
+ * For providing a replacement for a function that exists on all platforms,
+ but is broken/insufficient and needs to be replaced on some platforms:
+
+ #if @GNULIB_FOO@
+ # if @REPLACE_FOO@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+ # undef foo
+ # define foo rpl_foo
+ # endif
+ _GL_FUNCDECL_RPL (foo, ...);
+ _GL_CXXALIAS_RPL (foo, ...);
+ # else
+ _GL_CXXALIAS_SYS (foo, ...);
+ # endif
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+
+ * For providing a replacement for a function that exists on some platforms
+ but is broken/insufficient and needs to be replaced on some of them and
+ is additionally either missing or undeclared on some other platforms:
+
+ #if @GNULIB_FOO@
+ # if @REPLACE_FOO@
+ # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+ # undef foo
+ # define foo rpl_foo
+ # endif
+ _GL_FUNCDECL_RPL (foo, ...);
+ _GL_CXXALIAS_RPL (foo, ...);
+ # else
+ # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
+ _GL_FUNCDECL_SYS (foo, ...);
+ # endif
+ _GL_CXXALIAS_SYS (foo, ...);
+ # endif
+ _GL_CXXALIASWARN (foo);
+ #elif defined GNULIB_POSIXCHECK
+ ...
+ #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+ performs the declaration with C linkage. */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+ declares a replacement function, named rpl_func, with the given prototype,
+ consisting of return type, parameters, and attributes.
+ Example:
+ _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+ _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+ declares the system function, named func, with the given prototype,
+ consisting of return type, parameters, and attributes.
+ Example:
+ _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+ _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+ declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+ Example:
+ _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+
+ Wrapping rpl_func in an object with an inline conversion operator
+ avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is
+ actually used in the program. */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return ::rpl_func; \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_MDA (func, rettype, parameters);
+ is to be used when func is a Microsoft deprecated alias, on native Windows.
+ It declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to _func, if GNULIB_NAMESPACE is defined.
+ Example:
+ _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_MDA(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters)
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+ is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+ except that the C function rpl_func may have a slightly different
+ declaration. A cast is used to silence the "invalid conversion" error
+ that would otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>(::rpl_func); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters);
+ is like _GL_CXXALIAS_MDA (func, rettype, parameters);
+ except that the C function func may have a slightly different declaration.
+ A cast is used to silence the "invalid conversion" error that would
+ otherwise occur. */
+#define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \
+ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters)
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+ declares a C++ alias called GNULIB_NAMESPACE::func
+ that redirects to the system provided function func, if GNULIB_NAMESPACE
+ is defined.
+ Example:
+ _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+
+ Wrapping func in an object with an inline conversion operator
+ avoids a reference to func unless GNULIB_NAMESPACE::func is
+ actually used in the program. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return ::func; \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters);
+ except that the C function func may have a slightly different declaration.
+ A cast is used to silence the "invalid conversion" error that would
+ otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>(::func); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+ is like _GL_CXXALIAS_SYS (func, rettype, parameters);
+ except that the C function is picked among a set of overloaded functions,
+ namely the one with rettype2 and parameters2. Two consecutive casts
+ are used to silence the "cannot find a match" and "invalid conversion"
+ errors that would otherwise occur. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+ /* The outer cast must be a reinterpret_cast.
+ The inner cast: When the function is defined as a set of overloaded
+ functions, it works as a static_cast<>, choosing the designated variant.
+ When the function is defined as a single variant, it works as a
+ reinterpret_cast<>. The parenthesized cast syntax works both ways. */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+ namespace GNULIB_NAMESPACE \
+ { \
+ static const struct _gl_ ## func ## _wrapper \
+ { \
+ typedef rettype (*type) parameters; \
+ \
+ inline operator type () const \
+ { \
+ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \
+ } \
+ } func = {}; \
+ } \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+ causes a warning to be emitted when ::func is used but not when
+ GNULIB_NAMESPACE::func is used. func must be defined without overloaded
+ variants. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+ _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+ we enable the warning only when not optimizing. */
+# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ _GL_WARN_ON_USE (func, \
+ "The symbol ::" #func " refers to the system function. " \
+ "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ extern __typeof__ (func) func
+# else
+# define _GL_CXXALIASWARN_2(func,namespace) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+ causes a warning to be emitted when the given overloaded variant of ::func
+ is used but not when GNULIB_NAMESPACE::func is used. */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+ GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+ we enable the warning only when not optimizing. */
+# if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__)
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \
+ "The symbol ::" #func " refers to the system function. " \
+ "Use " #namespace "::" #func " instead.")
+# else
+# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+ _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/lib/c-ctype.c b/lib/c-ctype.c
new file mode 100644
index 0000000..a4343f4
--- /dev/null
+++ b/lib/c-ctype.c
@@ -0,0 +1,21 @@
+/* Character handling in C locale.
+
+ Copyright (C) 2003-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#define C_CTYPE_INLINE _GL_EXTERN_INLINE
+#include "c-ctype.h"
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
new file mode 100644
index 0000000..35ca83d
--- /dev/null
+++ b/lib/c-ctype.h
@@ -0,0 +1,364 @@
+/* Character handling in C locale.
+
+ These functions work like the corresponding functions in <ctype.h>,
+ except that they have the C (POSIX) locale hardwired, whereas the
+ <ctype.h> functions' behaviour depends on the current locale set via
+ setlocale.
+
+ Copyright (C) 2000-2003, 2006, 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef C_CTYPE_H
+#define C_CTYPE_H
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef C_CTYPE_INLINE
+# define C_CTYPE_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* The functions defined in this file assume the "C" locale and a character
+ set without diacritics (ASCII-US or EBCDIC-US or something like that).
+ Even if the "C" locale on a particular system is an extension of the ASCII
+ character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
+ is ISO-8859-1), the functions in this file recognize only the ASCII
+ characters. */
+
+
+#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)
+/* The character set is ASCII or one of its variants or extensions, not EBCDIC.
+ Testing the value of '\n' and '\r' is not relevant. */
+# define C_CTYPE_ASCII 1
+#elif ! (' ' == '\x40' && '0' == '\xf0' \
+ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \
+ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2')
+# error "Only ASCII and EBCDIC are supported"
+#endif
+
+#if 'A' < 0
+# error "EBCDIC and char is signed -- not supported"
+#endif
+
+/* Cases for control characters. */
+
+#define _C_CTYPE_CNTRL \
+ case '\a': case '\b': case '\f': case '\n': \
+ case '\r': case '\t': case '\v': \
+ _C_CTYPE_OTHER_CNTRL
+
+/* ASCII control characters other than those with \-letter escapes. */
+
+#if C_CTYPE_ASCII
+# define _C_CTYPE_OTHER_CNTRL \
+ case '\x00': case '\x01': case '\x02': case '\x03': \
+ case '\x04': case '\x05': case '\x06': case '\x0e': \
+ case '\x0f': case '\x10': case '\x11': case '\x12': \
+ case '\x13': case '\x14': case '\x15': case '\x16': \
+ case '\x17': case '\x18': case '\x19': case '\x1a': \
+ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \
+ case '\x1f': case '\x7f'
+#else
+ /* Use EBCDIC code page 1047's assignments for ASCII control chars;
+ assume all EBCDIC code pages agree about these assignments. */
+# define _C_CTYPE_OTHER_CNTRL \
+ case '\x00': case '\x01': case '\x02': case '\x03': \
+ case '\x07': case '\x0e': case '\x0f': case '\x10': \
+ case '\x11': case '\x12': case '\x13': case '\x18': \
+ case '\x19': case '\x1c': case '\x1d': case '\x1e': \
+ case '\x1f': case '\x26': case '\x27': case '\x2d': \
+ case '\x2e': case '\x32': case '\x37': case '\x3c': \
+ case '\x3d': case '\x3f'
+#endif
+
+/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */
+
+#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
+ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
+ case 'e' + (N): case 'f' + (N)
+#define _C_CTYPE_LOWER_N(N) \
+ _C_CTYPE_LOWER_A_THRU_F_N(N): \
+ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
+ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
+ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
+ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
+ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
+
+/* Cases for hex letters, digits, lower, punct, and upper. */
+
+#define _C_CTYPE_A_THRU_F \
+ _C_CTYPE_LOWER_A_THRU_F_N (0): \
+ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a')
+#define _C_CTYPE_DIGIT \
+ case '0': case '1': case '2': case '3': \
+ case '4': case '5': case '6': case '7': \
+ case '8': case '9'
+#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0)
+#define _C_CTYPE_PUNCT \
+ case '!': case '"': case '#': case '$': \
+ case '%': case '&': case '\'': case '(': \
+ case ')': case '*': case '+': case ',': \
+ case '-': case '.': case '/': case ':': \
+ case ';': case '<': case '=': case '>': \
+ case '?': case '@': case '[': case '\\': \
+ case ']': case '^': case '_': case '`': \
+ case '{': case '|': case '}': case '~'
+#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a')
+
+
+/* Function definitions. */
+
+/* Unlike the functions in <ctype.h>, which require an argument in the range
+ of the 'unsigned char' type, the functions here operate on values that are
+ in the 'unsigned char' range or in the 'char' range. In other words,
+ when you have a 'char' value, you need to cast it before using it as
+ argument to a <ctype.h> function:
+
+ const char *s = ...;
+ if (isalpha ((unsigned char) *s)) ...
+
+ but you don't need to cast it for the functions defined in this file:
+
+ const char *s = ...;
+ if (c_isalpha (*s)) ...
+ */
+
+C_CTYPE_INLINE bool
+c_isalnum (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_DIGIT:
+ _C_CTYPE_LOWER:
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isalpha (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_LOWER:
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+/* The function isascii is not locale dependent.
+ Its use in EBCDIC is questionable. */
+C_CTYPE_INLINE bool
+c_isascii (int c)
+{
+ switch (c)
+ {
+ case ' ':
+ _C_CTYPE_CNTRL:
+ _C_CTYPE_DIGIT:
+ _C_CTYPE_LOWER:
+ _C_CTYPE_PUNCT:
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isblank (int c)
+{
+ return c == ' ' || c == '\t';
+}
+
+C_CTYPE_INLINE bool
+c_iscntrl (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_CNTRL:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isdigit (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_DIGIT:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isgraph (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_DIGIT:
+ _C_CTYPE_LOWER:
+ _C_CTYPE_PUNCT:
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_islower (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_LOWER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isprint (int c)
+{
+ switch (c)
+ {
+ case ' ':
+ _C_CTYPE_DIGIT:
+ _C_CTYPE_LOWER:
+ _C_CTYPE_PUNCT:
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_ispunct (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_PUNCT:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isspace (int c)
+{
+ switch (c)
+ {
+ case ' ': case '\t': case '\n': case '\v': case '\f': case '\r':
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isupper (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_UPPER:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE bool
+c_isxdigit (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_DIGIT:
+ _C_CTYPE_A_THRU_F:
+ return true;
+ default:
+ return false;
+ }
+}
+
+C_CTYPE_INLINE int
+c_tolower (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_UPPER:
+ return c - 'A' + 'a';
+ default:
+ return c;
+ }
+}
+
+C_CTYPE_INLINE int
+c_toupper (int c)
+{
+ switch (c)
+ {
+ _C_CTYPE_LOWER:
+ return c - 'a' + 'A';
+ default:
+ return c;
+ }
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* C_CTYPE_H */
diff --git a/lib/c-strcase.h b/lib/c-strcase.h
new file mode 100644
index 0000000..9bcca01
--- /dev/null
+++ b/lib/c-strcase.h
@@ -0,0 +1,56 @@
+/* Case-insensitive string comparison functions in C locale.
+ Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef C_STRCASE_H
+#define C_STRCASE_H
+
+#include <stddef.h>
+
+
+/* The functions defined in this file assume the "C" locale and a character
+ set without diacritics (ASCII-US or EBCDIC-US or something like that).
+ Even if the "C" locale on a particular system is an extension of the ASCII
+ character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it
+ is ISO-8859-1), the functions in this file recognize only the ASCII
+ characters. More precisely, one of the string arguments must be an ASCII
+ string; the other one can also contain non-ASCII characters (but then
+ the comparison result will be nonzero). */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Compare strings S1 and S2, ignoring case, returning less than, equal to or
+ greater than zero if S1 is lexicographically less than, equal to or greater
+ than S2. */
+extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE;
+
+/* Compare no more than N characters of strings S1 and S2, ignoring case,
+ returning less than, equal to or greater than zero if S1 is
+ lexicographically less than, equal to or greater than S2. */
+extern int c_strncasecmp (const char *s1, const char *s2, size_t n)
+ _GL_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* C_STRCASE_H */
diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c
new file mode 100644
index 0000000..8a958dc
--- /dev/null
+++ b/lib/c-strcasecmp.c
@@ -0,0 +1,56 @@
+/* c-strcasecmp.c -- case insensitive string comparator in C locale
+ Copyright (C) 1998-1999, 2005-2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "c-strcase.h"
+
+#include <limits.h>
+
+#include "c-ctype.h"
+
+int
+c_strcasecmp (const char *s1, const char *s2)
+{
+ register const unsigned char *p1 = (const unsigned char *) s1;
+ register const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+
+ if (p1 == p2)
+ return 0;
+
+ do
+ {
+ c1 = c_tolower (*p1);
+ c2 = c_tolower (*p2);
+
+ if (c1 == '\0')
+ break;
+
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ if (UCHAR_MAX <= INT_MAX)
+ return c1 - c2;
+ else
+ /* On machines where 'char' and 'int' are types of the same size, the
+ difference of two 'unsigned char' values - including the sign bit -
+ doesn't fit in an 'int'. */
+ return _GL_CMP (c1, c2);
+}
diff --git a/lib/c-strcaseeq.h b/lib/c-strcaseeq.h
new file mode 100644
index 0000000..1d0759a
--- /dev/null
+++ b/lib/c-strcaseeq.h
@@ -0,0 +1,181 @@
+/* Optimized case-insensitive string comparison in C locale.
+ Copyright (C) 2001-2002, 2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#include "c-strcase.h"
+#include "c-ctype.h"
+
+/* STRCASEEQ allows to optimize string comparison with a small literal string.
+ STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0)
+ is semantically equivalent to
+ c_strcasecmp (s, "UTF-8") == 0
+ just faster. */
+
+/* Help GCC to generate good code for string comparisons with
+ immediate strings. */
+#if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__
+
+/* Case insensitive comparison of ASCII characters. */
+# if C_CTYPE_ASCII
+# define CASEEQ(other,upper) \
+ (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper))
+# else
+# define CASEEQ(other,upper) \
+ (c_toupper (other) == (upper))
+# endif
+
+static inline int
+strcaseeq9 (const char *s1, const char *s2)
+{
+ return c_strcasecmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+strcaseeq8 (const char *s1, const char *s2, char s28)
+{
+ if (CASEEQ (s1[8], s28))
+ {
+ if (s28 == 0)
+ return 1;
+ else
+ return strcaseeq9 (s1, s2);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq7 (const char *s1, const char *s2, char s27, char s28)
+{
+ if (CASEEQ (s1[7], s27))
+ {
+ if (s27 == 0)
+ return 1;
+ else
+ return strcaseeq8 (s1, s2, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[6], s26))
+ {
+ if (s26 == 0)
+ return 1;
+ else
+ return strcaseeq7 (s1, s2, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[5], s25))
+ {
+ if (s25 == 0)
+ return 1;
+ else
+ return strcaseeq6 (s1, s2, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[4], s24))
+ {
+ if (s24 == 0)
+ return 1;
+ else
+ return strcaseeq5 (s1, s2, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[3], s23))
+ {
+ if (s23 == 0)
+ return 1;
+ else
+ return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[2], s22))
+ {
+ if (s22 == 0)
+ return 1;
+ else
+ return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[1], s21))
+ {
+ if (s21 == 0)
+ return 1;
+ else
+ return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (CASEEQ (s1[0], s20))
+ {
+ if (s20 == 0)
+ return 1;
+ else
+ return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+ strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+ (c_strcasecmp (s1, s2) == 0)
+
+#endif
diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c
new file mode 100644
index 0000000..4ca8c5f
--- /dev/null
+++ b/lib/c-strncasecmp.c
@@ -0,0 +1,56 @@
+/* c-strncasecmp.c -- case insensitive string comparator in C locale
+ Copyright (C) 1998-1999, 2005-2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "c-strcase.h"
+
+#include <limits.h>
+
+#include "c-ctype.h"
+
+int
+c_strncasecmp (const char *s1, const char *s2, size_t n)
+{
+ register const unsigned char *p1 = (const unsigned char *) s1;
+ register const unsigned char *p2 = (const unsigned char *) s2;
+ unsigned char c1, c2;
+
+ if (p1 == p2 || n == 0)
+ return 0;
+
+ do
+ {
+ c1 = c_tolower (*p1);
+ c2 = c_tolower (*p2);
+
+ if (--n == 0 || c1 == '\0')
+ break;
+
+ ++p1;
+ ++p2;
+ }
+ while (c1 == c2);
+
+ if (UCHAR_MAX <= INT_MAX)
+ return c1 - c2;
+ else
+ /* On machines where 'char' and 'int' are types of the same size, the
+ difference of two 'unsigned char' values - including the sign bit -
+ doesn't fit in an 'int'. */
+ return _GL_CMP (c1, c2);
+}
diff --git a/lib/calloc.c b/lib/calloc.c
new file mode 100644
index 0000000..08843ac
--- /dev/null
+++ b/lib/calloc.c
@@ -0,0 +1,55 @@
+/* calloc() function that is glibc compatible.
+ This wrapper function is required at least on Tru64 UNIX 5.1 and mingw.
+ Copyright (C) 2004-2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdlib.h>
+
+#include <errno.h>
+
+#include "xalloc-oversized.h"
+
+/* Call the system's calloc below. */
+#undef calloc
+
+/* Allocate and zero-fill an NxS-byte block of memory from the heap,
+ even if N or S is zero. */
+
+void *
+rpl_calloc (size_t n, size_t s)
+{
+ if (n == 0 || s == 0)
+ n = s = 1;
+
+ if (xalloc_oversized (n, s))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ void *result = calloc (n, s);
+
+#if !HAVE_MALLOC_POSIX
+ if (result == NULL)
+ errno = ENOMEM;
+#endif
+
+ return result;
+}
diff --git a/lib/canonicalize-lgpl.c b/lib/canonicalize-lgpl.c
new file mode 100644
index 0000000..e701297
--- /dev/null
+++ b/lib/canonicalize-lgpl.c
@@ -0,0 +1,469 @@
+/* Return the canonical absolute name of a given file.
+ Copyright (C) 1996-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc
+ optimizes away the name == NULL test below. */
+# define _GL_ARG_NONNULL(params)
+
+# include <libc-config.h>
+#endif
+
+/* Specification. */
+#include <stdlib.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <eloop-threshold.h>
+#include <filename.h>
+#include <idx.h>
+#include <intprops.h>
+#include <scratch_buffer.h>
+
+#ifdef _LIBC
+# include <shlib-compat.h>
+# define GCC_LINT 1
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define __canonicalize_file_name canonicalize_file_name
+# define __realpath realpath
+# define __strdup strdup
+# include "pathmax.h"
+# define __faccessat faccessat
+# if defined _WIN32 && !defined __CYGWIN__
+# define __getcwd _getcwd
+# elif HAVE_GETCWD
+# if IN_RELOCWRAPPER
+ /* When building the relocatable program wrapper, use the system's getcwd
+ function, not the gnulib override, otherwise we would get a link error.
+ */
+# undef getcwd
+# endif
+# if defined VMS && !defined getcwd
+ /* We want the directory in Unix syntax, not in VMS syntax.
+ The gnulib override of 'getcwd' takes 2 arguments; the original VMS
+ 'getcwd' takes 3 arguments. */
+# define __getcwd(buf, max) getcwd (buf, max, 0)
+# else
+# define __getcwd getcwd
+# endif
+# else
+# define __getcwd(buf, max) getwd (buf)
+# endif
+# define __mempcpy mempcpy
+# define __pathconf pathconf
+# define __rawmemchr rawmemchr
+# define __readlink readlink
+# if IN_RELOCWRAPPER
+ /* When building the relocatable program wrapper, use the system's memmove
+ function, not the gnulib override, otherwise we would get a link error.
+ */
+# undef memmove
+# endif
+#endif
+
+/* Suppress bogus GCC -Wmaybe-uninitialized warnings. */
+#if defined GCC_LINT || defined lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
+
+#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
+# define DOUBLE_SLASH_IS_DISTINCT_ROOT false
+#endif
+
+#if defined _LIBC || !FUNC_REALPATH_WORKS
+
+/* Return true if FILE's existence can be shown, false (setting errno)
+ otherwise. Follow symbolic links. */
+static bool
+file_accessible (char const *file)
+{
+# if defined _LIBC || HAVE_FACCESSAT
+ return __faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0;
+# else
+ struct stat st;
+ return stat (file, &st) == 0 || errno == EOVERFLOW;
+# endif
+}
+
+/* True if concatenating END as a suffix to a file name means that the
+ code needs to check that the file name is that of a searchable
+ directory, since the canonicalize_filename_mode_stk code won't
+ check this later anyway when it checks an ordinary file name
+ component within END. END must either be empty, or start with a
+ slash. */
+
+static bool _GL_ATTRIBUTE_PURE
+suffix_requires_dir_check (char const *end)
+{
+ /* If END does not start with a slash, the suffix is OK. */
+ while (ISSLASH (*end))
+ {
+ /* Two or more slashes act like a single slash. */
+ do
+ end++;
+ while (ISSLASH (*end));
+
+ switch (*end++)
+ {
+ default: return false; /* An ordinary file name component is OK. */
+ case '\0': return true; /* Trailing "/" is trouble. */
+ case '.': break; /* Possibly "." or "..". */
+ }
+ /* Trailing "/.", or "/.." even if not trailing, is trouble. */
+ if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1]))))
+ return true;
+ }
+
+ return false;
+}
+
+/* Append this to a file name to test whether it is a searchable directory.
+ On POSIX platforms "/" suffices, but "/./" is sometimes needed on
+ macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on
+ platforms like AIX 7.2 that need at least "/.". */
+
+# if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK
+static char const dir_suffix[] = "/";
+# else
+static char const dir_suffix[] = "/./";
+# endif
+
+/* Return true if DIR is a searchable dir, false (setting errno) otherwise.
+ DIREND points to the NUL byte at the end of the DIR string.
+ Store garbage into DIREND[0 .. strlen (dir_suffix)]. */
+
+static bool
+dir_check (char *dir, char *dirend)
+{
+ strcpy (dirend, dir_suffix);
+ return file_accessible (dir);
+}
+
+static idx_t
+get_path_max (void)
+{
+# ifdef PATH_MAX
+ long int path_max = PATH_MAX;
+# else
+ /* The caller invoked realpath with a null RESOLVED, even though
+ PATH_MAX is not defined as a constant. The glibc manual says
+ programs should not do this, and POSIX says the behavior is undefined.
+ Historically, glibc here used the result of pathconf, or 1024 if that
+ failed; stay consistent with this (dubious) historical practice. */
+ int err = errno;
+ long int path_max = __pathconf ("/", _PC_PATH_MAX);
+ __set_errno (err);
+# endif
+ return path_max < 0 ? 1024 : path_max <= IDX_MAX ? path_max : IDX_MAX;
+}
+
+/* Scratch buffers used by realpath_stk and managed by __realpath. */
+struct realpath_bufs
+{
+ struct scratch_buffer rname;
+ struct scratch_buffer extra;
+ struct scratch_buffer link;
+};
+
+static char *
+realpath_stk (const char *name, char *resolved, struct realpath_bufs *bufs)
+{
+ char *dest;
+ char const *start;
+ char const *end;
+ int num_links = 0;
+
+ if (name == NULL)
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ either parameter is a null pointer. We extend this to allow
+ the RESOLVED parameter to be NULL in case the we are expected to
+ allocate the room for the return value. */
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (name[0] == '\0')
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ the name argument points to an empty string. */
+ __set_errno (ENOENT);
+ return NULL;
+ }
+
+ char *rname = bufs->rname.data;
+ bool end_in_extra_buffer = false;
+ bool failed = true;
+
+ /* This is always zero for Posix hosts, but can be 2 for MS-Windows
+ and MS-DOS X:/foo/bar file names. */
+ idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name);
+
+ if (!IS_ABSOLUTE_FILE_NAME (name))
+ {
+ while (!__getcwd (bufs->rname.data, bufs->rname.length))
+ {
+ if (errno != ERANGE)
+ {
+ dest = rname;
+ goto error;
+ }
+ if (!scratch_buffer_grow (&bufs->rname))
+ return NULL;
+ rname = bufs->rname.data;
+ }
+ dest = __rawmemchr (rname, '\0');
+ start = name;
+ prefix_len = FILE_SYSTEM_PREFIX_LEN (rname);
+ }
+ else
+ {
+ dest = __mempcpy (rname, name, prefix_len);
+ *dest++ = '/';
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT)
+ {
+ if (prefix_len == 0 /* implies ISSLASH (name[0]) */
+ && ISSLASH (name[1]) && !ISSLASH (name[2]))
+ *dest++ = '/';
+ *dest = '\0';
+ }
+ start = name + prefix_len;
+ }
+
+ for ( ; *start; start = end)
+ {
+ /* Skip sequence of multiple file name separators. */
+ while (ISSLASH (*start))
+ ++start;
+
+ /* Find end of component. */
+ for (end = start; *end && !ISSLASH (*end); ++end)
+ /* Nothing. */;
+
+ /* Length of this file name component; it can be zero if a file
+ name ends in '/'. */
+ idx_t startlen = end - start;
+
+ if (startlen == 0)
+ break;
+ else if (startlen == 1 && start[0] == '.')
+ /* nothing */;
+ else if (startlen == 2 && start[0] == '.' && start[1] == '.')
+ {
+ /* Back up to previous component, ignore if at root already. */
+ if (dest > rname + prefix_len + 1)
+ for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest)
+ continue;
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT
+ && dest == rname + 1 && !prefix_len
+ && ISSLASH (*dest) && !ISSLASH (dest[1]))
+ dest++;
+ }
+ else
+ {
+ if (!ISSLASH (dest[-1]))
+ *dest++ = '/';
+
+ while (rname + bufs->rname.length - dest
+ < startlen + sizeof dir_suffix)
+ {
+ idx_t dest_offset = dest - rname;
+ if (!scratch_buffer_grow_preserve (&bufs->rname))
+ return NULL;
+ rname = bufs->rname.data;
+ dest = rname + dest_offset;
+ }
+
+ dest = __mempcpy (dest, start, startlen);
+ *dest = '\0';
+
+ char *buf;
+ ssize_t n;
+ while (true)
+ {
+ buf = bufs->link.data;
+ idx_t bufsize = bufs->link.length;
+ n = __readlink (rname, buf, bufsize - 1);
+ if (n < bufsize - 1)
+ break;
+ if (!scratch_buffer_grow (&bufs->link))
+ return NULL;
+ }
+ if (0 <= n)
+ {
+ if (++num_links > __eloop_threshold ())
+ {
+ __set_errno (ELOOP);
+ goto error;
+ }
+
+ buf[n] = '\0';
+
+ char *extra_buf = bufs->extra.data;
+ idx_t end_idx IF_LINT (= 0);
+ if (end_in_extra_buffer)
+ end_idx = end - extra_buf;
+ size_t len = strlen (end);
+ if (INT_ADD_OVERFLOW (len, n))
+ {
+ __set_errno (ENOMEM);
+ return NULL;
+ }
+ while (bufs->extra.length <= len + n)
+ {
+ if (!scratch_buffer_grow_preserve (&bufs->extra))
+ return NULL;
+ extra_buf = bufs->extra.data;
+ }
+ if (end_in_extra_buffer)
+ end = extra_buf + end_idx;
+
+ /* Careful here, end may be a pointer into extra_buf... */
+ memmove (&extra_buf[n], end, len + 1);
+ name = end = memcpy (extra_buf, buf, n);
+ end_in_extra_buffer = true;
+
+ if (IS_ABSOLUTE_FILE_NAME (buf))
+ {
+ idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf);
+
+ dest = __mempcpy (rname, buf, pfxlen);
+ *dest++ = '/'; /* It's an absolute symlink */
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT)
+ {
+ if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen)
+ *dest++ = '/';
+ *dest = '\0';
+ }
+ /* Install the new prefix to be in effect hereafter. */
+ prefix_len = pfxlen;
+ }
+ else
+ {
+ /* Back up to previous component, ignore if at root
+ already: */
+ if (dest > rname + prefix_len + 1)
+ for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest)
+ continue;
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1
+ && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len)
+ dest++;
+ }
+ }
+ else if (! (suffix_requires_dir_check (end)
+ ? dir_check (rname, dest)
+ : errno == EINVAL))
+ goto error;
+ }
+ }
+ if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1]))
+ --dest;
+ if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len
+ && ISSLASH (*dest) && !ISSLASH (dest[1]))
+ dest++;
+ failed = false;
+
+error:
+ *dest++ = '\0';
+ if (resolved != NULL)
+ {
+ /* Copy the full result on success or partial result if failure was due
+ to the path not existing or not being accessible. */
+ if ((!failed || errno == ENOENT || errno == EACCES)
+ && dest - rname <= get_path_max ())
+ {
+ strcpy (resolved, rname);
+ if (failed)
+ return NULL;
+ else
+ return resolved;
+ }
+ if (!failed)
+ __set_errno (ENAMETOOLONG);
+ return NULL;
+ }
+ else
+ {
+ if (failed)
+ return NULL;
+ else
+ return __strdup (bufs->rname.data);
+ }
+}
+
+/* Return the canonical absolute name of file NAME. A canonical name
+ does not contain any ".", ".." components nor any repeated file name
+ separators ('/') or symlinks. All file name components must exist. If
+ RESOLVED is null, the result is malloc'd; otherwise, if the
+ canonical name is PATH_MAX chars or more, returns null with 'errno'
+ set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. If the name cannot be resolved and
+ RESOLVED is non-NULL, it contains the name of the first component
+ that cannot be resolved. If the name can be resolved, RESOLVED
+ holds the same value as the value returned. */
+
+char *
+__realpath (const char *name, char *resolved)
+{
+ struct realpath_bufs bufs;
+ scratch_buffer_init (&bufs.rname);
+ scratch_buffer_init (&bufs.extra);
+ scratch_buffer_init (&bufs.link);
+ char *result = realpath_stk (name, resolved, &bufs);
+ scratch_buffer_free (&bufs.link);
+ scratch_buffer_free (&bufs.extra);
+ scratch_buffer_free (&bufs.rname);
+ return result;
+}
+libc_hidden_def (__realpath)
+versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
+
+#endif /* defined _LIBC || !FUNC_REALPATH_WORKS */
+
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
+char *
+attribute_compat_text_section
+__old_realpath (const char *name, char *resolved)
+{
+ if (resolved == NULL)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ return __realpath (name, resolved);
+}
+compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
+#endif
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+ return __realpath (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
diff --git a/lib/cdefs.h b/lib/cdefs.h
new file mode 100644
index 0000000..412f036
--- /dev/null
+++ b/lib/cdefs.h
@@ -0,0 +1,715 @@
+/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
+ Copyright The GNU Toolchain Authors.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_CDEFS_H
+#define _SYS_CDEFS_H 1
+
+/* We are almost always included from features.h. */
+#ifndef _FEATURES_H
+# include <features.h>
+#endif
+
+/* The GNU libc does not support any K&R compilers or the traditional mode
+ of ISO C compilers anymore. Check for some of the combinations not
+ supported anymore. */
+#if defined __GNUC__ && !defined __STDC__
+# error "You need a ISO C conforming compiler to use the glibc headers"
+#endif
+
+/* Some user header file might have defined this before. */
+#undef __P
+#undef __PMT
+
+/* Compilers that lack __has_attribute may object to
+ #if defined __has_attribute && __has_attribute (...)
+ even though they do not need to evaluate the right-hand side of the &&.
+ Similarly for __has_builtin, etc. */
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))
+# define __glibc_has_attribute(attr) __has_attribute (attr)
+#else
+# define __glibc_has_attribute(attr) 0
+#endif
+#ifdef __has_builtin
+# define __glibc_has_builtin(name) __has_builtin (name)
+#else
+# define __glibc_has_builtin(name) 0
+#endif
+#ifdef __has_extension
+# define __glibc_has_extension(ext) __has_extension (ext)
+#else
+# define __glibc_has_extension(ext) 0
+#endif
+
+#if defined __GNUC__ || defined __clang__
+
+/* All functions, except those with callbacks or those that
+ synchronize memory, are leaf functions. */
+# if __GNUC_PREREQ (4, 6) && !defined _LIBC
+# define __LEAF , __leaf__
+# define __LEAF_ATTR __attribute__ ((__leaf__))
+# else
+# define __LEAF
+# define __LEAF_ATTR
+# endif
+
+/* GCC can always grok prototypes. For C++ programs we add throw()
+ to help it optimize the function calls. But this only works with
+ gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions
+ as non-throwing using a function attribute since programs can use
+ the -fexceptions options for C code as well. */
+# if !defined __cplusplus \
+ && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__))
+# define __THROW __attribute__ ((__nothrow__ __LEAF))
+# define __THROWNL __attribute__ ((__nothrow__))
+# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct
+# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct
+# else
+# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4)
+# if __cplusplus >= 201103L
+# define __THROW noexcept (true)
+# else
+# define __THROW throw ()
+# endif
+# define __THROWNL __THROW
+# define __NTH(fct) __LEAF_ATTR fct __THROW
+# define __NTHNL(fct) fct __THROW
+# else
+# define __THROW
+# define __THROWNL
+# define __NTH(fct) fct
+# define __NTHNL(fct) fct
+# endif
+# endif
+
+#else /* Not GCC or clang. */
+
+# if (defined __cplusplus \
+ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
+# define __inline inline
+# else
+# define __inline /* No inline functions. */
+# endif
+
+# define __THROW
+# define __THROWNL
+# define __NTH(fct) fct
+
+#endif /* GCC || clang. */
+
+/* These two macros are not used in glibc anymore. They are kept here
+ only because some other projects expect the macros to be defined. */
+#define __P(args) args
+#define __PMT(args) args
+
+/* For these things, GCC behaves the ANSI way normally,
+ and the non-ANSI way under -traditional. */
+
+#define __CONCAT(x,y) x ## y
+#define __STRING(x) #x
+
+/* This is not a typedef so `const __ptr_t' does the right thing. */
+#define __ptr_t void *
+
+
+/* C++ needs to know that types and declarations are C, not C++. */
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+
+/* Gnulib avoids these definitions, as they don't work on non-glibc platforms.
+ In particular, __bos and __bos0 are defined differently in the Android libc.
+ */
+#ifndef __GNULIB_CDEFS
+
+/* Fortify support. */
+# define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+# define __bos0(ptr) __builtin_object_size (ptr, 0)
+
+/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */
+# if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \
+ || __GNUC_PREREQ (12, 0))
+# define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0)
+# define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1)
+# else
+# define __glibc_objsize0(__o) __bos0 (__o)
+# define __glibc_objsize(__o) __bos (__o)
+# endif
+
+/* Compile time conditions to choose between the regular, _chk and _chk_warn
+ variants. These conditions should get evaluated to constant and optimized
+ away. */
+
+# define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s))
+# define __glibc_unsigned_or_positive(__l) \
+ ((__typeof (__l)) 0 < (__typeof (__l)) -1 \
+ || (__builtin_constant_p (__l) && (__l) > 0))
+
+/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ
+ condition can be folded to a constant and if it is true, or unknown (-1) */
+# define __glibc_safe_or_unknown_len(__l, __s, __osz) \
+ ((__osz) == (__SIZE_TYPE__) -1 \
+ || (__glibc_unsigned_or_positive (__l) \
+ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
+ (__s), (__osz))) \
+ && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz))))
+
+/* Conversely, we know at compile time that the length is unsafe if the
+ __L * __S <= __OBJSZ condition can be folded to a constant and if it is
+ false. */
+# define __glibc_unsafe_len(__l, __s, __osz) \
+ (__glibc_unsigned_or_positive (__l) \
+ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \
+ __s, __osz)) \
+ && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz))
+
+/* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be
+ declared. */
+
+# define __glibc_fortify(f, __l, __s, __osz, ...) \
+ (__glibc_safe_or_unknown_len (__l, __s, __osz) \
+ ? __ ## f ## _alias (__VA_ARGS__) \
+ : (__glibc_unsafe_len (__l, __s, __osz) \
+ ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \
+ : __ ## f ## _chk (__VA_ARGS__, __osz))) \
+
+/* Fortify function f, where object size argument passed to f is the number of
+ elements and not total size. */
+
+# define __glibc_fortify_n(f, __l, __s, __osz, ...) \
+ (__glibc_safe_or_unknown_len (__l, __s, __osz) \
+ ? __ ## f ## _alias (__VA_ARGS__) \
+ : (__glibc_unsafe_len (__l, __s, __osz) \
+ ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \
+ : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \
+
+#endif
+
+
+#if __GNUC_PREREQ (4,3)
+# define __warnattr(msg) __attribute__((__warning__ (msg)))
+# define __errordecl(name, msg) \
+ extern void name (void) __attribute__((__error__ (msg)))
+#else
+# define __warnattr(msg)
+# define __errordecl(name, msg) extern void name (void)
+#endif
+
+/* Support for flexible arrays.
+ Headers that should use flexible arrays only if they're "real"
+ (e.g. only if they won't affect sizeof()) should test
+ #if __glibc_c99_flexarr_available. */
+#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc
+# define __flexarr []
+# define __glibc_c99_flexarr_available 1
+#elif __GNUC_PREREQ (2,97) || defined __clang__
+/* GCC 2.97 and clang support C99 flexible array members as an extension,
+ even when in C89 mode or compiling C++ (any version). */
+# define __flexarr []
+# define __glibc_c99_flexarr_available 1
+#elif defined __GNUC__
+/* Pre-2.97 GCC did not support C99 flexible arrays but did have
+ an equivalent extension with slightly different notation. */
+# define __flexarr [0]
+# define __glibc_c99_flexarr_available 1
+#else
+/* Some other non-C99 compiler. Approximate with [1]. */
+# define __flexarr [1]
+# define __glibc_c99_flexarr_available 0
+#endif
+
+
+/* __asm__ ("xyz") is used throughout the headers to rename functions
+ at the assembly language level. This is wrapped by the __REDIRECT
+ macro, in order to support compilers that can do this some other
+ way. When compilers don't support asm-names at all, we have to do
+ preprocessor tricks instead (which don't have exactly the right
+ semantics, but it's the best we can do).
+
+ Example:
+ int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
+
+#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4)
+
+# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
+# ifdef __cplusplus
+# define __REDIRECT_NTH(name, proto, alias) \
+ name proto __THROW __asm__ (__ASMNAME (#alias))
+# define __REDIRECT_NTHNL(name, proto, alias) \
+ name proto __THROWNL __asm__ (__ASMNAME (#alias))
+# else
+# define __REDIRECT_NTH(name, proto, alias) \
+ name proto __asm__ (__ASMNAME (#alias)) __THROW
+# define __REDIRECT_NTHNL(name, proto, alias) \
+ name proto __asm__ (__ASMNAME (#alias)) __THROWNL
+# endif
+# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
+# define __ASMNAME2(prefix, cname) __STRING (prefix) cname
+
+/*
+#elif __SOME_OTHER_COMPILER__
+
+# define __REDIRECT(name, proto, alias) name proto; \
+ _Pragma("let " #name " = " #alias)
+*/
+#endif
+
+/* GCC and clang have various useful declarations that can be made with
+ the '__attribute__' syntax. All of the ways we use this do fine if
+ they are omitted for compilers that don't understand it. */
+#if !(defined __GNUC__ || defined __clang__)
+# define __attribute__(xyz) /* Ignore */
+#endif
+
+/* At some point during the gcc 2.96 development the `malloc' attribute
+ for functions was introduced. We don't want to use it unconditionally
+ (although this would be possible) since it generates warnings. */
+#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__)
+# define __attribute_malloc__ __attribute__ ((__malloc__))
+#else
+# define __attribute_malloc__ /* Ignore */
+#endif
+
+/* Tell the compiler which arguments to an allocation function
+ indicate the size of the allocation. */
+#if __GNUC_PREREQ (4, 3)
+# define __attribute_alloc_size__(params) \
+ __attribute__ ((__alloc_size__ params))
+#else
+# define __attribute_alloc_size__(params) /* Ignore. */
+#endif
+
+/* Tell the compiler which argument to an allocation function
+ indicates the alignment of the allocation. */
+#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__)
+# define __attribute_alloc_align__(param) \
+ __attribute__ ((__alloc_align__ param))
+#else
+# define __attribute_alloc_align__(param) /* Ignore. */
+#endif
+
+/* At some point during the gcc 2.96 development the `pure' attribute
+ for functions was introduced. We don't want to use it unconditionally
+ (although this would be possible) since it generates warnings. */
+#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__)
+# define __attribute_pure__ __attribute__ ((__pure__))
+#else
+# define __attribute_pure__ /* Ignore */
+#endif
+
+/* This declaration tells the compiler that the value is constant. */
+#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__)
+# define __attribute_const__ __attribute__ ((__const__))
+#else
+# define __attribute_const__ /* Ignore */
+#endif
+
+#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__)
+# define __attribute_maybe_unused__ __attribute__ ((__unused__))
+#else
+# define __attribute_maybe_unused__ /* Ignore */
+#endif
+
+/* At some point during the gcc 3.1 development the `used' attribute
+ for functions was introduced. We don't want to use it unconditionally
+ (although this would be possible) since it generates warnings. */
+#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__)
+# define __attribute_used__ __attribute__ ((__used__))
+# define __attribute_noinline__ __attribute__ ((__noinline__))
+#else
+# define __attribute_used__ __attribute__ ((__unused__))
+# define __attribute_noinline__ /* Ignore */
+#endif
+
+/* Since version 3.2, gcc allows marking deprecated functions. */
+#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__)
+# define __attribute_deprecated__ __attribute__ ((__deprecated__))
+#else
+# define __attribute_deprecated__ /* Ignore */
+#endif
+
+/* Since version 4.5, gcc also allows one to specify the message printed
+ when a deprecated function is used. clang claims to be gcc 4.2, but
+ may also support this feature. */
+#if __GNUC_PREREQ (4,5) \
+ || __glibc_has_extension (__attribute_deprecated_with_message__)
+# define __attribute_deprecated_msg__(msg) \
+ __attribute__ ((__deprecated__ (msg)))
+#else
+# define __attribute_deprecated_msg__(msg) __attribute_deprecated__
+#endif
+
+/* At some point during the gcc 2.8 development the `format_arg' attribute
+ for functions was introduced. We don't want to use it unconditionally
+ (although this would be possible) since it generates warnings.
+ If several `format_arg' attributes are given for the same function, in
+ gcc-3.0 and older, all but the last one are ignored. In newer gccs,
+ all designated arguments are considered. */
+#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__)
+# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
+#else
+# define __attribute_format_arg__(x) /* Ignore */
+#endif
+
+/* At some point during the gcc 2.97 development the `strfmon' format
+ attribute for functions was introduced. We don't want to use it
+ unconditionally (although this would be possible) since it
+ generates warnings. */
+#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__)
+# define __attribute_format_strfmon__(a,b) \
+ __attribute__ ((__format__ (__strfmon__, a, b)))
+#else
+# define __attribute_format_strfmon__(a,b) /* Ignore */
+#endif
+
+/* The nonnull function attribute marks pointer parameters that
+ must not be NULL. This has the name __nonnull in glibc,
+ and __attribute_nonnull__ in files shared with Gnulib to avoid
+ collision with a different __nonnull in DragonFlyBSD 5.9. */
+#ifndef __attribute_nonnull__
+# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__)
+# define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params))
+# else
+# define __attribute_nonnull__(params)
+# endif
+#endif
+#ifndef __nonnull
+# define __nonnull(params) __attribute_nonnull__ (params)
+#endif
+
+/* The returns_nonnull function attribute marks the return type of the function
+ as always being non-null. */
+#ifndef __returns_nonnull
+# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__)
+# define __returns_nonnull __attribute__ ((__returns_nonnull__))
+# else
+# define __returns_nonnull
+# endif
+#endif
+
+/* If fortification mode, we warn about unused results of certain
+ function calls which can lead to problems. */
+#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__)
+# define __attribute_warn_unused_result__ \
+ __attribute__ ((__warn_unused_result__))
+# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0
+# define __wur __attribute_warn_unused_result__
+# endif
+#else
+# define __attribute_warn_unused_result__ /* empty */
+#endif
+#ifndef __wur
+# define __wur /* Ignore */
+#endif
+
+/* Forces a function to be always inlined. */
+#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__)
+/* The Linux kernel defines __always_inline in stddef.h (283d7573), and
+ it conflicts with this definition. Therefore undefine it first to
+ allow either header to be included first. */
+# undef __always_inline
+# define __always_inline __inline __attribute__ ((__always_inline__))
+#else
+# undef __always_inline
+# define __always_inline __inline
+#endif
+
+/* Associate error messages with the source location of the call site rather
+ than with the source location inside the function. */
+#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__)
+# define __attribute_artificial__ __attribute__ ((__artificial__))
+#else
+# define __attribute_artificial__ /* Ignore */
+#endif
+
+/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+ inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__
+ or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
+ older than 4.3 may define these macros and still not guarantee GNU inlining
+ semantics.
+
+ clang++ identifies itself as gcc-4.2, but has support for GNU inlining
+ semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and
+ __GNUC_GNU_INLINE__ macro definitions. */
+#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
+ || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
+ || defined __GNUC_GNU_INLINE__)))
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+# define __extern_always_inline \
+ extern __always_inline __attribute__ ((__gnu_inline__))
+# else
+# define __extern_inline extern __inline
+# define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+#ifdef __extern_always_inline
+# define __fortify_function __extern_always_inline __attribute_artificial__
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+ __extern_always_inline function to some other vararg function. */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
+# define __va_arg_pack_len() __builtin_va_arg_pack_len ()
+#endif
+
+/* It is possible to compile containing GCC extensions even if GCC is
+ run in pedantic mode if the uses are carefully marked using the
+ `__extension__' keyword. But this is not generally available before
+ version 2.8. */
+#if !(__GNUC_PREREQ (2,8) || defined __clang__)
+# define __extension__ /* Ignore */
+#endif
+
+/* __restrict is known in EGCS 1.2 and above, and in clang.
+ It works also in C++ mode (outside of arrays), but only when spelled
+ as '__restrict', not 'restrict'. */
+#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3)
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+# define __restrict restrict
+# else
+# define __restrict /* Ignore */
+# endif
+#endif
+
+/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
+ array_name[restrict]
+ GCC 3.1 and clang support this.
+ This syntax is not usable in C++ mode. */
+#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus
+# define __restrict_arr __restrict
+#else
+# ifdef __GNUC__
+# define __restrict_arr /* Not supported in old GCC. */
+# else
+# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
+# define __restrict_arr restrict
+# else
+/* Some other non-C99 compiler. */
+# define __restrict_arr /* Not supported. */
+# endif
+# endif
+#endif
+
+#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect)
+# define __glibc_unlikely(cond) __builtin_expect ((cond), 0)
+# define __glibc_likely(cond) __builtin_expect ((cond), 1)
+#else
+# define __glibc_unlikely(cond) (cond)
+# define __glibc_likely(cond) (cond)
+#endif
+
+#if (!defined _Noreturn \
+ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+ && !(__GNUC_PREREQ (4,7) \
+ || (3 < __clang_major__ + (5 <= __clang_minor__))))
+# if __GNUC_PREREQ (2,8)
+# define _Noreturn __attribute__ ((__noreturn__))
+# else
+# define _Noreturn
+# endif
+#endif
+
+#if __GNUC_PREREQ (8, 0)
+/* Describes a char array whose address can safely be passed as the first
+ argument to strncpy and strncat, as the char array is not necessarily
+ a NUL-terminated string. */
+# define __attribute_nonstring__ __attribute__ ((__nonstring__))
+#else
+# define __attribute_nonstring__
+#endif
+
+/* Undefine (also defined in libc-symbols.h). */
+#undef __attribute_copy__
+#if __GNUC_PREREQ (9, 0)
+/* Copies attributes from the declaration or type referenced by
+ the argument. */
+# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg)))
+#else
+# define __attribute_copy__(arg)
+#endif
+
+#if (!defined _Static_assert && !defined __cplusplus \
+ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \
+ && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \
+ || defined __STRICT_ANSI__))
+# define _Static_assert(expr, diagnostic) \
+ extern int (*__Static_assert_function (void)) \
+ [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })]
+#endif
+
+/* Gnulib avoids including these, as they don't work on non-glibc or
+ older glibc platforms. */
+#ifndef __GNULIB_CDEFS
+# include <bits/wordsize.h>
+# include <bits/long-double.h>
+#endif
+
+#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
+# ifdef __REDIRECT
+
+/* Alias name defined automatically. */
+# define __LDBL_REDIR(name, proto) ... unused__ldbl_redir
+# define __LDBL_REDIR_DECL(name) \
+ extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128"));
+
+/* Alias name defined automatically, with leading underscores. */
+# define __LDBL_REDIR2_DECL(name) \
+ extern __typeof (__##name) __##name \
+ __asm (__ASMNAME ("__" #name "ieee128"));
+
+/* Alias name defined manually. */
+# define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1
+# define __LDBL_REDIR1_DECL(name, alias) \
+ extern __typeof (name) name __asm (__ASMNAME (#alias));
+
+# define __LDBL_REDIR1_NTH(name, proto, alias) \
+ __REDIRECT_NTH (name, proto, alias)
+# define __REDIRECT_NTH_LDBL(name, proto, alias) \
+ __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128)
+
+/* Unused. */
+# define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl
+# define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth
+
+# else
+_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform");
+# endif
+#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH
+# define __LDBL_COMPAT 1
+# ifdef __REDIRECT
+# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias)
+# define __LDBL_REDIR(name, proto) \
+ __LDBL_REDIR1 (name, proto, __nldbl_##name)
+# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias)
+# define __LDBL_REDIR_NTH(name, proto) \
+ __LDBL_REDIR1_NTH (name, proto, __nldbl_##name)
+# define __LDBL_REDIR2_DECL(name) \
+ extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name));
+# define __LDBL_REDIR1_DECL(name, alias) \
+ extern __typeof (name) name __asm (__ASMNAME (#alias));
+# define __LDBL_REDIR_DECL(name) \
+ extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name));
+# define __REDIRECT_LDBL(name, proto, alias) \
+ __LDBL_REDIR1 (name, proto, __nldbl_##alias)
+# define __REDIRECT_NTH_LDBL(name, proto, alias) \
+ __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias)
+# endif
+#endif
+#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \
+ || !defined __REDIRECT
+# define __LDBL_REDIR1(name, proto, alias) name proto
+# define __LDBL_REDIR(name, proto) name proto
+# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW
+# define __LDBL_REDIR_NTH(name, proto) name proto __THROW
+# define __LDBL_REDIR2_DECL(name)
+# define __LDBL_REDIR_DECL(name)
+# ifdef __REDIRECT
+# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias)
+# define __REDIRECT_NTH_LDBL(name, proto, alias) \
+ __REDIRECT_NTH (name, proto, alias)
+# endif
+#endif
+
+/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is
+ intended for use in preprocessor macros.
+
+ Note: MESSAGE must be a _single_ string; concatenation of string
+ literals is not supported. */
+#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5)
+# define __glibc_macro_warning1(message) _Pragma (#message)
+# define __glibc_macro_warning(message) \
+ __glibc_macro_warning1 (GCC warning message)
+#else
+# define __glibc_macro_warning(msg)
+#endif
+
+/* Generic selection (ISO C11) is a C-only feature, available in GCC
+ since version 4.9. Previous versions do not provide generic
+ selection, even though they might set __STDC_VERSION__ to 201112L,
+ when in -std=c11 mode. Thus, we must check for !defined __GNUC__
+ when testing __STDC_VERSION__ for generic selection support.
+ On the other hand, Clang also defines __GNUC__, so a clang-specific
+ check is required to enable the use of generic selection. */
+#if !defined __cplusplus \
+ && (__GNUC_PREREQ (4, 9) \
+ || __glibc_has_extension (c_generic_selections) \
+ || (!defined __GNUC__ && defined __STDC_VERSION__ \
+ && __STDC_VERSION__ >= 201112L))
+# define __HAVE_GENERIC_SELECTION 1
+#else
+# define __HAVE_GENERIC_SELECTION 0
+#endif
+
+#if __GNUC_PREREQ (10, 0)
+/* Designates a 1-based positional argument ref-index of pointer type
+ that can be used to access size-index elements of the pointed-to
+ array according to access mode, or at least one element when
+ size-index is not provided:
+ access (access-mode, <ref-index> [, <size-index>]) */
+# define __attr_access(x) __attribute__ ((__access__ x))
+/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may
+ use the access attribute to get object sizes from function definition
+ arguments, so we can't use them on functions we fortify. Drop the object
+ size hints for such functions. */
+# if __USE_FORTIFY_LEVEL == 3
+# define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o)))
+# else
+# define __fortified_attr_access(a, o, s) __attr_access ((a, o, s))
+# endif
+# if __GNUC_PREREQ (11, 0)
+# define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno)))
+# else
+# define __attr_access_none(argno)
+# endif
+#else
+# define __fortified_attr_access(a, o, s)
+# define __attr_access(x)
+# define __attr_access_none(argno)
+#endif
+
+#if __GNUC_PREREQ (11, 0)
+/* Designates dealloc as a function to call to deallocate objects
+ allocated by the declared function. */
+# define __attr_dealloc(dealloc, argno) \
+ __attribute__ ((__malloc__ (dealloc, argno)))
+# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1)
+#else
+# define __attr_dealloc(dealloc, argno)
+# define __attr_dealloc_free
+#endif
+
+/* Specify that a function such as setjmp or vfork may return
+ twice. */
+#if __GNUC_PREREQ (4, 1)
+# define __attribute_returns_twice__ __attribute__ ((__returns_twice__))
+#else
+# define __attribute_returns_twice__ /* Ignore. */
+#endif
+
+#endif /* sys/cdefs.h */
diff --git a/lib/cloexec.c b/lib/cloexec.c
new file mode 100644
index 0000000..e4cecbd
--- /dev/null
+++ b/lib/cloexec.c
@@ -0,0 +1,83 @@
+/* cloexec.c - set or clear the close-on-exec descriptor flag
+
+ Copyright (C) 1991, 2004-2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* The code is taken from glibc/manual/llio.texi */
+
+#include <config.h>
+
+#include "cloexec.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
+ or clear the flag if VALUE is false.
+ Return 0 on success, or -1 on error with 'errno' set.
+
+ Note that on MingW, this function does NOT protect DESC from being
+ inherited into spawned children. Instead, either use dup_cloexec
+ followed by closing the original DESC, or use interfaces such as
+ open or pipe2 that accept flags like O_CLOEXEC to create DESC
+ non-inheritable in the first place. */
+
+int
+set_cloexec_flag (int desc, bool value)
+{
+#ifdef F_SETFD
+
+ int flags = fcntl (desc, F_GETFD, 0);
+
+ if (0 <= flags)
+ {
+ int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC);
+
+ if (flags == newflags
+ || fcntl (desc, F_SETFD, newflags) != -1)
+ return 0;
+ }
+
+ return -1;
+
+#else /* !F_SETFD */
+
+ /* Use dup2 to reject invalid file descriptors; the cloexec flag
+ will be unaffected. */
+ if (desc < 0)
+ {
+ errno = EBADF;
+ return -1;
+ }
+ if (dup2 (desc, desc) < 0)
+ /* errno is EBADF here. */
+ return -1;
+
+ /* There is nothing we can do on this kind of platform. Punt. */
+ return 0;
+#endif /* !F_SETFD */
+}
+
+
+/* Duplicates a file handle FD, while marking the copy to be closed
+ prior to exec or spawn. Returns -1 and sets errno if FD could not
+ be duplicated. */
+
+int
+dup_cloexec (int fd)
+{
+ return fcntl (fd, F_DUPFD_CLOEXEC, 0);
+}
diff --git a/lib/cloexec.h b/lib/cloexec.h
new file mode 100644
index 0000000..057fd66
--- /dev/null
+++ b/lib/cloexec.h
@@ -0,0 +1,34 @@
+/* cloexec.c - set or clear the close-on-exec descriptor flag
+
+ Copyright (C) 2004, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true,
+ or clear the flag if VALUE is false.
+ Return 0 on success, or -1 on error with 'errno' set.
+
+ Note that on MingW, this function does NOT protect DESC from being
+ inherited into spawned children. Instead, either use dup_cloexec
+ followed by closing the original DESC, or use interfaces such as
+ open or pipe2 that accept flags like O_CLOEXEC to create DESC
+ non-inheritable in the first place. */
+
+int set_cloexec_flag (int desc, bool value);
+
+/* Duplicates a file handle FD, while marking the copy to be closed
+ prior to exec or spawn. Returns -1 and sets errno if FD could not
+ be duplicated. */
+
+int dup_cloexec (int fd);
diff --git a/lib/close-stream.c b/lib/close-stream.c
new file mode 100644
index 0000000..ab686ba
--- /dev/null
+++ b/lib/close-stream.c
@@ -0,0 +1,77 @@
+/* Close a stream, with nicer error checking than fclose's.
+
+ Copyright (C) 1998-2002, 2004, 2006-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "close-stream.h"
+
+#include <errno.h>
+
+#include "fpending.h"
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+/* Close STREAM. Return 0 if successful, EOF (setting errno)
+ otherwise. A failure might set errno to 0 if the error number
+ cannot be determined.
+
+ A failure with errno set to EPIPE may or may not indicate an error
+ situation worth signaling to the user. See the documentation of the
+ close_stdout_set_ignore_EPIPE function for details.
+
+ If a program writes *anything* to STREAM, that program should close
+ STREAM and make sure that it succeeds before exiting. Otherwise,
+ suppose that you go to the extreme of checking the return status
+ of every function that does an explicit write to STREAM. The last
+ printf can succeed in writing to the internal stream buffer, and yet
+ the fclose(STREAM) could still fail (due e.g., to a disk full error)
+ when it tries to write out that buffered data. Thus, you would be
+ left with an incomplete output file and the offending program would
+ exit successfully. Even calling fflush is not always sufficient,
+ since some file systems (NFS and CODA) buffer written/flushed data
+ until an actual close call.
+
+ Besides, it's wasteful to check the return value from every call
+ that writes to STREAM -- just let the internal stream state record
+ the failure. That's what the ferror test is checking below. */
+
+int
+close_stream (FILE *stream)
+{
+ const bool some_pending = (__fpending (stream) != 0);
+ const bool prev_fail = (ferror (stream) != 0);
+ const bool fclose_fail = (fclose (stream) != 0);
+
+ /* Return an error indication if there was a previous failure or if
+ fclose failed, with one exception: ignore an fclose failure if
+ there was no previous error, no data remains to be flushed, and
+ fclose failed with EBADF. That can happen when a program like cp
+ is invoked like this 'cp a b >&-' (i.e., with standard output
+ closed) and doesn't generate any output (hence no previous error
+ and nothing to be flushed). */
+
+ if (prev_fail || (fclose_fail && (some_pending || errno != EBADF)))
+ {
+ if (! fclose_fail)
+ errno = 0;
+ return EOF;
+ }
+
+ return 0;
+}
diff --git a/lib/close-stream.h b/lib/close-stream.h
new file mode 100644
index 0000000..3b52cc6
--- /dev/null
+++ b/lib/close-stream.h
@@ -0,0 +1,20 @@
+/* Close a stream, with nicer error checking than fclose's.
+
+ Copyright (C) 2006-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+
+int close_stream (FILE *stream);
diff --git a/lib/close.c b/lib/close.c
new file mode 100644
index 0000000..3c1b09e
--- /dev/null
+++ b/lib/close.c
@@ -0,0 +1,75 @@
+/* close replacement.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <errno.h>
+
+#include "fd-hook.h"
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
+
+#undef close
+
+#if defined _WIN32 && !defined __CYGWIN__
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+close_nothrow (int fd)
+{
+ int result;
+
+ TRY_MSVC_INVAL
+ {
+ result = _close (fd);
+ }
+ CATCH_MSVC_INVAL
+ {
+ result = -1;
+ errno = EBADF;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+# else
+# define close_nothrow _close
+# endif
+#else
+# define close_nothrow close
+#endif
+
+/* Override close() to call into other gnulib modules. */
+
+int
+rpl_close (int fd)
+{
+#if WINDOWS_SOCKETS
+ int retval = execute_all_close_hooks (close_nothrow, fd);
+#else
+ int retval = close_nothrow (fd);
+#endif
+
+#if REPLACE_FCHDIR
+ if (retval >= 0)
+ _gl_unregister_fd (fd);
+#endif
+
+ return retval;
+}
diff --git a/lib/closeout.c b/lib/closeout.c
new file mode 100644
index 0000000..d9e8211
--- /dev/null
+++ b/lib/closeout.c
@@ -0,0 +1,135 @@
+/* Close standard output and standard error, exiting with a diagnostic on error.
+
+ Copyright (C) 1998-2002, 2004, 2006, 2008-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "closeout.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+#include "close-stream.h"
+#include "error.h"
+#include "exitfail.h"
+#include "quotearg.h"
+
+#ifndef __has_feature
+# define __has_feature(a) false
+#endif
+
+#if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer)
+enum { SANITIZE_ADDRESS = true };
+#else
+enum { SANITIZE_ADDRESS = false };
+#endif
+
+static const char *file_name;
+
+/* Set the file name to be reported in the event an error is detected
+ by close_stdout. */
+void
+close_stdout_set_file_name (const char *file)
+{
+ file_name = file;
+}
+
+static bool ignore_EPIPE /* = false */;
+
+/* Specify the reaction to an EPIPE error during the closing of stdout:
+ - If ignore = true, it shall be ignored.
+ - If ignore = false, it shall evoke a diagnostic, along with a nonzero
+ exit status.
+ The default is ignore = false.
+
+ This setting matters only if the SIGPIPE signal is ignored (i.e. its
+ handler set to SIG_IGN) or blocked. Only particular programs need to
+ temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because
+ it was ignored or blocked in the parent process when it created the
+ child process, it usually is a bug in the parent process: It is bad
+ practice to have SIGPIPE ignored or blocked while creating a child
+ process.
+
+ EPIPE occurs when writing to a pipe or socket that has no readers now,
+ when SIGPIPE is ignored or blocked.
+
+ The ignore = false setting is suitable for a scenario where it is normally
+ guaranteed that the pipe writer terminates before the pipe reader. In
+ this case, an EPIPE is an indication of a premature termination of the
+ pipe reader and should lead to a diagnostic and a nonzero exit status.
+
+ The ignore = true setting is suitable for a scenario where you don't know
+ ahead of time whether the pipe writer or the pipe reader will terminate
+ first. In this case, an EPIPE is an indication that the pipe writer can
+ stop doing useless write() calls; this is what close_stdout does anyway.
+ EPIPE is part of the normal pipe/socket shutdown protocol in this case,
+ and should not lead to a diagnostic message. */
+
+void
+close_stdout_set_ignore_EPIPE (bool ignore)
+{
+ ignore_EPIPE = ignore;
+}
+
+/* Close standard output. On error, issue a diagnostic and _exit
+ with status 'exit_failure'.
+
+ Also close standard error. On error, _exit with status 'exit_failure'.
+
+ Since close_stdout is commonly registered via 'atexit', POSIX
+ and the C standard both say that it should not call 'exit',
+ because the behavior is undefined if 'exit' is called more than
+ once. So it calls '_exit' instead of 'exit'. If close_stdout
+ is registered via atexit before other functions are registered,
+ the other functions can act before this _exit is invoked.
+
+ Applications that use close_stdout should flush any streams
+ other than stdout and stderr before exiting, since the call to
+ _exit will bypass other buffer flushing. Applications should
+ be flushing and closing other streams anyway, to check for I/O
+ errors. Also, applications should not use tmpfile, since _exit
+ can bypass the removal of these files.
+
+ It's important to detect such failures and exit nonzero because many
+ tools (most notably 'make' and other build-management systems) depend
+ on being able to detect failure in other tools via their exit status. */
+
+void
+close_stdout (void)
+{
+ if (close_stream (stdout) != 0
+ && !(ignore_EPIPE && errno == EPIPE))
+ {
+ char const *write_error = _("write error");
+ if (file_name)
+ error (0, errno, "%s: %s", quotearg_colon (file_name),
+ write_error);
+ else
+ error (0, errno, "%s", write_error);
+
+ _exit (exit_failure);
+ }
+
+ /* Close stderr only if not sanitizing, as sanitizers may report to
+ stderr after this function returns. */
+ if (!SANITIZE_ADDRESS && close_stream (stderr) != 0)
+ _exit (exit_failure);
+}
diff --git a/lib/closeout.h b/lib/closeout.h
new file mode 100644
index 0000000..d975725
--- /dev/null
+++ b/lib/closeout.h
@@ -0,0 +1,34 @@
+/* Close standard output and standard error.
+
+ Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef CLOSEOUT_H
+# define CLOSEOUT_H 1
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+void close_stdout_set_file_name (const char *file);
+void close_stdout_set_ignore_EPIPE (bool ignore);
+void close_stdout (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
diff --git a/lib/config.h.in b/lib/config.h.in
new file mode 100644
index 0000000..5b9dca5
--- /dev/null
+++ b/lib/config.h.in
@@ -0,0 +1,2445 @@
+/* lib/config.h.in. Generated from configure.ac by autoheader. */
+
+/* Define if building universal (internal helper macro) */
+#undef AC_APPLE_UNIVERSAL_BUILD
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define to 1 if using 'alloca.c'. */
+#undef C_ALLOCA
+
+/* Enable assertions, etc. */
+#undef DEBUG
+
+/* Probing functionality only */
+#undef DISCOVER_ONLY
+
+/* Define to 1 if // is a file system root distinct from /. */
+#undef DOUBLE_SLASH_IS_DISTINCT_ROOT
+
+/* device mapper (libdevmapper) support */
+#undef ENABLE_DEVICE_MAPPER
+
+/* Mtrace malloc() debugging */
+#undef ENABLE_MTRACE
+
+/* Define to 1 if translation of program messages to the user's native
+ language is requested. */
+#undef ENABLE_NLS
+
+/* Include PC98 partition tables. (Sometimes excluded to avoid collisions with
+ msdos partition tables */
+#undef ENABLE_PC98
+
+/* Define this to 1 if F_DUPFD behavior does not match POSIX */
+#undef FCNTL_DUPFD_BUGGY
+
+/* Define to nothing if C supports flexible array members, and to 1 if it does
+ not. That way, with a declaration like 'struct s { int n; short
+ d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99
+ compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate
+ the size in bytes of such a struct containing an N-element array. */
+#undef FLEXIBLE_ARRAY_MEMBER
+
+/* Define to 1 if mkdir mistakenly creates a directory given with a trailing
+ dot component. */
+#undef FUNC_MKDIR_DOT_BUG
+
+/* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */
+#undef FUNC_NL_LANGINFO_YESEXPR_WORKS
+
+/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
+ and handles a trailing slash correctly. */
+#undef FUNC_REALPATH_NEARLY_WORKS
+
+/* Define to 1 if realpath() can malloc memory, always gives an absolute path,
+ and handles leading slashes and a trailing slash correctly. */
+#undef FUNC_REALPATH_WORKS
+
+/* Define this to 'void' or 'struct timezone' to match the system's
+ declaration of the second argument to gettimeofday. */
+#undef GETTIMEOFDAY_TIMEZONE
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module canonicalize-lgpl shall be considered present. */
+#undef GNULIB_CANONICALIZE_LGPL
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module close-stream shall be considered present. */
+#undef GNULIB_CLOSE_STREAM
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module dirname shall be considered present. */
+#undef GNULIB_DIRNAME
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module fscanf shall be considered present. */
+#undef GNULIB_FSCANF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module isblank shall be considered present. */
+#undef GNULIB_ISBLANK
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module lock shall be considered present. */
+#undef GNULIB_LOCK
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module msvc-nothrow shall be considered present. */
+#undef GNULIB_MSVC_NOTHROW
+
+/* enable some gnulib portability checks */
+#undef GNULIB_PORTCHECK
+
+/* Define to 1 if printf and friends should be labeled with attribute
+ "__gnu_printf__" instead of "__printf__" */
+#undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module reallocarray shall be considered present. */
+#undef GNULIB_REALLOCARRAY
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module scanf shall be considered present. */
+#undef GNULIB_SCANF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module strerror shall be considered present. */
+#undef GNULIB_STRERROR
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module strerror_r-posix shall be considered present. */
+#undef GNULIB_STRERROR_R_POSIX
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module tempname shall be considered present. */
+#undef GNULIB_TEMPNAME
+
+/* Define to 1 when the gnulib module accept should be tested. */
+#undef GNULIB_TEST_ACCEPT
+
+/* Define to 1 when the gnulib module bind should be tested. */
+#undef GNULIB_TEST_BIND
+
+/* Define to 1 when the gnulib module btowc should be tested. */
+#undef GNULIB_TEST_BTOWC
+
+/* Define to 1 when the gnulib module calloc-gnu should be tested. */
+#undef GNULIB_TEST_CALLOC_GNU
+
+/* Define to 1 when the gnulib module calloc-posix should be tested. */
+#undef GNULIB_TEST_CALLOC_POSIX
+
+/* Define to 1 when the gnulib module canonicalize_file_name should be tested.
+ */
+#undef GNULIB_TEST_CANONICALIZE_FILE_NAME
+
+/* Define to 1 when the gnulib module cloexec should be tested. */
+#undef GNULIB_TEST_CLOEXEC
+
+/* Define to 1 when the gnulib module close should be tested. */
+#undef GNULIB_TEST_CLOSE
+
+/* Define to 1 when the gnulib module connect should be tested. */
+#undef GNULIB_TEST_CONNECT
+
+/* Define to 1 when the gnulib module dup2 should be tested. */
+#undef GNULIB_TEST_DUP2
+
+/* Define to 1 when the gnulib module environ should be tested. */
+#undef GNULIB_TEST_ENVIRON
+
+/* Define to 1 when the gnulib module fcntl should be tested. */
+#undef GNULIB_TEST_FCNTL
+
+/* Define to 1 when the gnulib module fdopen should be tested. */
+#undef GNULIB_TEST_FDOPEN
+
+/* Define to 1 when the gnulib module fgetc should be tested. */
+#undef GNULIB_TEST_FGETC
+
+/* Define to 1 when the gnulib module fgets should be tested. */
+#undef GNULIB_TEST_FGETS
+
+/* Define to 1 when the gnulib module fprintf should be tested. */
+#undef GNULIB_TEST_FPRINTF
+
+/* Define to 1 when the gnulib module fputc should be tested. */
+#undef GNULIB_TEST_FPUTC
+
+/* Define to 1 when the gnulib module fputs should be tested. */
+#undef GNULIB_TEST_FPUTS
+
+/* Define to 1 when the gnulib module fread should be tested. */
+#undef GNULIB_TEST_FREAD
+
+/* Define to 1 when the gnulib module free-posix should be tested. */
+#undef GNULIB_TEST_FREE_POSIX
+
+/* Define to 1 when the gnulib module fscanf should be tested. */
+#undef GNULIB_TEST_FSCANF
+
+/* Define to 1 when the gnulib module fstat should be tested. */
+#undef GNULIB_TEST_FSTAT
+
+/* Define to 1 when the gnulib module fsync should be tested. */
+#undef GNULIB_TEST_FSYNC
+
+/* Define to 1 when the gnulib module ftruncate should be tested. */
+#undef GNULIB_TEST_FTRUNCATE
+
+/* Define to 1 when the gnulib module fwrite should be tested. */
+#undef GNULIB_TEST_FWRITE
+
+/* Define to 1 when the gnulib module getc should be tested. */
+#undef GNULIB_TEST_GETC
+
+/* Define to 1 when the gnulib module getchar should be tested. */
+#undef GNULIB_TEST_GETCHAR
+
+/* Define to 1 when the gnulib module getcwd should be tested. */
+#undef GNULIB_TEST_GETCWD
+
+/* Define to 1 when the gnulib module getdtablesize should be tested. */
+#undef GNULIB_TEST_GETDTABLESIZE
+
+/* Define to 1 when the gnulib module getopt-posix should be tested. */
+#undef GNULIB_TEST_GETOPT_POSIX
+
+/* Define to 1 when the gnulib module getpagesize should be tested. */
+#undef GNULIB_TEST_GETPAGESIZE
+
+/* Define to 1 when the gnulib module getprogname should be tested. */
+#undef GNULIB_TEST_GETPROGNAME
+
+/* Define to 1 when the gnulib module getrandom should be tested. */
+#undef GNULIB_TEST_GETRANDOM
+
+/* Define to 1 when the gnulib module gettimeofday should be tested. */
+#undef GNULIB_TEST_GETTIMEOFDAY
+
+/* Define to 1 when the gnulib module ioctl should be tested. */
+#undef GNULIB_TEST_IOCTL
+
+/* Define to 1 when the gnulib module listen should be tested. */
+#undef GNULIB_TEST_LISTEN
+
+/* Define to 1 when the gnulib module localeconv should be tested. */
+#undef GNULIB_TEST_LOCALECONV
+
+/* Define to 1 when the gnulib module localename should be tested. */
+#undef GNULIB_TEST_LOCALENAME
+
+/* Define to 1 when the gnulib module lseek should be tested. */
+#undef GNULIB_TEST_LSEEK
+
+/* Define to 1 when the gnulib module lstat should be tested. */
+#undef GNULIB_TEST_LSTAT
+
+/* Define to 1 when the gnulib module malloc-gnu should be tested. */
+#undef GNULIB_TEST_MALLOC_GNU
+
+/* Define to 1 when the gnulib module malloc-posix should be tested. */
+#undef GNULIB_TEST_MALLOC_POSIX
+
+/* Define to 1 when the gnulib module mbrtowc should be tested. */
+#undef GNULIB_TEST_MBRTOWC
+
+/* Define to 1 when the gnulib module mbsinit should be tested. */
+#undef GNULIB_TEST_MBSINIT
+
+/* Define to 1 when the gnulib module mbtowc should be tested. */
+#undef GNULIB_TEST_MBTOWC
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#undef GNULIB_TEST_MEMCHR
+
+/* Define to 1 when the gnulib module mempcpy should be tested. */
+#undef GNULIB_TEST_MEMPCPY
+
+/* Define to 1 when the gnulib module mkdir should be tested. */
+#undef GNULIB_TEST_MKDIR
+
+/* Define to 1 when the gnulib module mkstemp should be tested. */
+#undef GNULIB_TEST_MKSTEMP
+
+/* Define to 1 when the gnulib module nanosleep should be tested. */
+#undef GNULIB_TEST_NANOSLEEP
+
+/* Define to 1 when the gnulib module nl_langinfo should be tested. */
+#undef GNULIB_TEST_NL_LANGINFO
+
+/* Define to 1 when the gnulib module open should be tested. */
+#undef GNULIB_TEST_OPEN
+
+/* Define to 1 when the gnulib module perror should be tested. */
+#undef GNULIB_TEST_PERROR
+
+/* Define to 1 when the gnulib module pipe should be tested. */
+#undef GNULIB_TEST_PIPE
+
+/* Define to 1 when the gnulib module printf should be tested. */
+#undef GNULIB_TEST_PRINTF
+
+/* Define to 1 when the gnulib module pselect should be tested. */
+#undef GNULIB_TEST_PSELECT
+
+/* Define to 1 when the gnulib module pthread_sigmask should be tested. */
+#undef GNULIB_TEST_PTHREAD_SIGMASK
+
+/* Define to 1 when the gnulib module pthread-thread should be tested. */
+#undef GNULIB_TEST_PTHREAD_THREAD
+
+/* Define to 1 when the gnulib module putc should be tested. */
+#undef GNULIB_TEST_PUTC
+
+/* Define to 1 when the gnulib module putchar should be tested. */
+#undef GNULIB_TEST_PUTCHAR
+
+/* Define to 1 when the gnulib module putenv should be tested. */
+#undef GNULIB_TEST_PUTENV
+
+/* Define to 1 when the gnulib module puts should be tested. */
+#undef GNULIB_TEST_PUTS
+
+/* Define to 1 when the gnulib module raise should be tested. */
+#undef GNULIB_TEST_RAISE
+
+/* Define to 1 when the gnulib module rawmemchr should be tested. */
+#undef GNULIB_TEST_RAWMEMCHR
+
+/* Define to 1 when the gnulib module read should be tested. */
+#undef GNULIB_TEST_READ
+
+/* Define to 1 when the gnulib module readlink should be tested. */
+#undef GNULIB_TEST_READLINK
+
+/* Define to 1 when the gnulib module reallocarray should be tested. */
+#undef GNULIB_TEST_REALLOCARRAY
+
+/* Define to 1 when the gnulib module realloc-gnu should be tested. */
+#undef GNULIB_TEST_REALLOC_GNU
+
+/* Define to 1 when the gnulib module realloc-posix should be tested. */
+#undef GNULIB_TEST_REALLOC_POSIX
+
+/* Define to 1 when the gnulib module realpath should be tested. */
+#undef GNULIB_TEST_REALPATH
+
+/* Define to 1 when the gnulib module rpmatch should be tested. */
+#undef GNULIB_TEST_RPMATCH
+
+/* Define to 1 when the gnulib module scanf should be tested. */
+#undef GNULIB_TEST_SCANF
+
+/* Define to 1 when the gnulib module sched_yield should be tested. */
+#undef GNULIB_TEST_SCHED_YIELD
+
+/* Define to 1 when the gnulib module select should be tested. */
+#undef GNULIB_TEST_SELECT
+
+/* Define to 1 when the gnulib module setenv should be tested. */
+#undef GNULIB_TEST_SETENV
+
+/* Define to 1 when the gnulib module setlocale should be tested. */
+#undef GNULIB_TEST_SETLOCALE
+
+/* Define to 1 when the gnulib module setlocale_null should be tested. */
+#undef GNULIB_TEST_SETLOCALE_NULL
+
+/* Define to 1 when the gnulib module setsockopt should be tested. */
+#undef GNULIB_TEST_SETSOCKOPT
+
+/* Define to 1 when the gnulib module sigprocmask should be tested. */
+#undef GNULIB_TEST_SIGPROCMASK
+
+/* Define to 1 when the gnulib module sleep should be tested. */
+#undef GNULIB_TEST_SLEEP
+
+/* Define to 1 when the gnulib module socket should be tested. */
+#undef GNULIB_TEST_SOCKET
+
+/* Define to 1 when the gnulib module stat should be tested. */
+#undef GNULIB_TEST_STAT
+
+/* Define to 1 when the gnulib module strdup should be tested. */
+#undef GNULIB_TEST_STRDUP
+
+/* Define to 1 when the gnulib module strerror should be tested. */
+#undef GNULIB_TEST_STRERROR
+
+/* Define to 1 when the gnulib module strerror_r should be tested. */
+#undef GNULIB_TEST_STRERROR_R
+
+/* Define to 1 when the gnulib module strtoll should be tested. */
+#undef GNULIB_TEST_STRTOLL
+
+/* Define to 1 when the gnulib module strtoull should be tested. */
+#undef GNULIB_TEST_STRTOULL
+
+/* Define to 1 when the gnulib module symlink should be tested. */
+#undef GNULIB_TEST_SYMLINK
+
+/* Define to 1 when the gnulib module time should be tested. */
+#undef GNULIB_TEST_TIME
+
+/* Define to 1 when the gnulib module unlink should be tested. */
+#undef GNULIB_TEST_UNLINK
+
+/* Define to 1 when the gnulib module unsetenv should be tested. */
+#undef GNULIB_TEST_UNSETENV
+
+/* Define to 1 when the gnulib module usleep should be tested. */
+#undef GNULIB_TEST_USLEEP
+
+/* Define to 1 when the gnulib module vfprintf should be tested. */
+#undef GNULIB_TEST_VFPRINTF
+
+/* Define to 1 when the gnulib module vprintf should be tested. */
+#undef GNULIB_TEST_VPRINTF
+
+/* Define to 1 when the gnulib module wcrtomb should be tested. */
+#undef GNULIB_TEST_WCRTOMB
+
+/* Define to 1 when the gnulib module wctob should be tested. */
+#undef GNULIB_TEST_WCTOB
+
+/* Define to 1 when the gnulib module wctomb should be tested. */
+#undef GNULIB_TEST_WCTOMB
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module xalloc shall be considered present. */
+#undef GNULIB_XALLOC
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+ whether the gnulib module xalloc-die shall be considered present. */
+#undef GNULIB_XALLOC_DIE
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+ may be supplied by this distribution. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if <alloca.h> works. */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Has backtrace support */
+#undef HAVE_BACKTRACE
+
+/* Define to 1 if you have the <bcrypt.h> header file. */
+#undef HAVE_BCRYPT_H
+
+/* Define to 1 if you have the <blkid/blkid.h> header file. */
+#undef HAVE_BLKID_BLKID_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
+/* Define to 1 if you have the `btowc' function. */
+#undef HAVE_BTOWC
+
+/* Define to 1 if nanosleep mishandles large arguments. */
+#undef HAVE_BUG_BIG_NANOSLEEP
+
+/* Define to 1 if you have the `canonicalize_file_name' function. */
+#undef HAVE_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if you have the `catgets' function. */
+#undef HAVE_CATGETS
+
+/* Define to 1 if you have the Mac OS X function
+ CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES
+
+/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
+ the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define to 1 if you have the `clock_getres' function. */
+#undef HAVE_CLOCK_GETRES
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 1 if you have the `clock_settime' function. */
+#undef HAVE_CLOCK_SETTIME
+
+/* Define to 1 if you have the <crtdefs.h> header file. */
+#undef HAVE_CRTDEFS_H
+
+/* Define to 1 if the alignas and alignof keywords work. */
+#undef HAVE_C_ALIGNASOF
+
+/* Define to 1 if bool, true and false work as per C2023. */
+#undef HAVE_C_BOOL
+
+/* Define to 1 if the static_assert keyword works. */
+#undef HAVE_C_STATIC_ASSERT
+
+/* Define to 1 if C supports variable-length arrays. */
+#undef HAVE_C_VARARRAYS
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+ */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ALARM
+
+/* Define to 1 if you have the declaration of `ecvt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_ECVT
+
+/* Define to 1 if you have the declaration of `execvpe', and to 0 if you
+ don't. */
+#undef HAVE_DECL_EXECVPE
+
+/* Define to 1 if you have the declaration of `fcloseall', and to 0 if you
+ don't. */
+#undef HAVE_DECL_FCLOSEALL
+
+/* Define to 1 if you have the declaration of `fcvt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_FCVT
+
+/* Define to 1 if you have the declaration of `gcvt', and to 0 if you don't.
+ */
+#undef HAVE_DECL_GCVT
+
+/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you
+ don't. */
+#undef HAVE_DECL_GETDTABLESIZE
+
+/* Define to 1 if you have the declaration of `getw', and to 0 if you don't.
+ */
+#undef HAVE_DECL_GETW
+
+/* Define to 1 if you have the declaration of `inet_pton', and to 0 if you
+ don't. */
+#undef HAVE_DECL_INET_PTON
+
+/* Define to 1 if you have the declaration of `isblank', and to 0 if you
+ don't. */
+#undef HAVE_DECL_ISBLANK
+
+/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you
+ don't. */
+#undef HAVE_DECL_MBRTOWC
+
+/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you
+ don't. */
+#undef HAVE_DECL_MBSINIT
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+ to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+ and to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 if you have the declaration of `putw', and to 0 if you don't.
+ */
+#undef HAVE_DECL_PUTW
+
+/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SETENV
+
+/* Define to 1 if you have the declaration of `sleep', and to 0 if you don't.
+ */
+#undef HAVE_DECL_SLEEP
+
+/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't.
+ */
+#undef HAVE_DECL_STRDUP
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRERROR_R
+
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+ don't. */
+#undef HAVE_DECL_TOWLOWER
+
+/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you
+ don't. */
+#undef HAVE_DECL_UNSETENV
+
+/* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you
+ don't. */
+#undef HAVE_DECL_WCRTOMB
+
+/* Define to 1 if you have the declaration of `wcsdup', and to 0 if you don't.
+ */
+#undef HAVE_DECL_WCSDUP
+
+/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't.
+ */
+#undef HAVE_DECL_WCTOB
+
+/* Define to 1 if you have the declaration of `_putenv', and to 0 if you
+ don't. */
+#undef HAVE_DECL__PUTENV
+
+/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't.
+ */
+#undef HAVE_DECL___ARGV
+
+/* Define to 1 if you have the declaration of `__fpending', and to 0 if you
+ don't. */
+#undef HAVE_DECL___FPENDING
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `duplocale' function. */
+#undef HAVE_DUPLOCALE
+
+/* Define if you have the declaration of environ. */
+#undef HAVE_ENVIRON_DECL
+
+/* Define to 1 if you have the `error' function. */
+#undef HAVE_ERROR
+
+/* Define to 1 if you have the <error.h> header file. */
+#undef HAVE_ERROR_H
+
+/* Define to 1 if you have the `faccessat' function. */
+#undef HAVE_FACCESSAT
+
+/* Define if the locale_t type contains insufficient information, as on
+ OpenBSD. */
+#undef HAVE_FAKE_LOCALES
+
+/* Define to 1 if you have the `fcntl' function. */
+#undef HAVE_FCNTL
+
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
+/* Define to 1 if you have the `freelocale' function. */
+#undef HAVE_FREELOCALE
+
+/* Define if the 'free' function is guaranteed to preserve errno. */
+#undef HAVE_FREE_POSIX
+
+/* Define to 1 if you have the `fsync' function. */
+#undef HAVE_FSYNC
+
+/* Define to 1 if you have the `ftruncate' function. */
+#undef HAVE_FTRUNCATE
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getdtablesize' function. */
+#undef HAVE_GETDTABLESIZE
+
+/* Define to 1 if you have the `getexecname' function. */
+#undef HAVE_GETEXECNAME
+
+/* Define to 1 if you have the `getlocalename_l' function. */
+#undef HAVE_GETLOCALENAME_L
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define to 1 if you have the `getppriv' function. */
+#undef HAVE_GETPPRIV
+
+/* Define to 1 if you have the `getprogname' function. */
+#undef HAVE_GETPROGNAME
+
+/* Define to 1 if you have the `getrandom' function. */
+#undef HAVE_GETRANDOM
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if the uselocale exists, may be safely called, and returns
+ sufficient information. */
+#undef HAVE_GOOD_USELOCALE
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* Define to 1 if you have the `inet_pton' function. */
+#undef HAVE_INET_PTON
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `ioctl' function. */
+#undef HAVE_IOCTL
+
+/* Define to 1 if <sys/socket.h> defines AF_INET. */
+#undef HAVE_IPV4
+
+/* Define to 1 if <sys/socket.h> defines AF_INET6. */
+#undef HAVE_IPV6
+
+/* Define to 1 if you have the `isblank' function. */
+#undef HAVE_ISBLANK
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#undef HAVE_ISWCNTRL
+
+/* Define to 1 if you have the `iswctype' function. */
+#undef HAVE_ISWCTYPE
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define to 1 if you have the <langinfo.h> header file. */
+#undef HAVE_LANGINFO_H
+
+/* Define if you have <langinfo.h> and nl_langinfo(YESEXPR). */
+#undef HAVE_LANGINFO_YESEXPR
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <libintl.h> header file. */
+#undef HAVE_LIBINTL_H
+
+/* Define to 1 if you have the `parted' library (-lparted). */
+#undef HAVE_LIBPARTED
+
+/* have readline */
+#undef HAVE_LIBREADLINE
+
+/* Define to 1 if the bcrypt library is guaranteed to be present. */
+#undef HAVE_LIB_BCRYPT
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/ext2_fs.h> header file. */
+#undef HAVE_LINUX_EXT2_FS_H
+
+/* Define to 1 if the system has the type 'long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define if malloc, realloc, and calloc set errno on allocation failure. */
+#undef HAVE_MALLOC_POSIX
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+ config.h and <sys/mman.h>. */
+#undef HAVE_MAP_ANONYMOUS
+
+/* Define to 1 if you have the `mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
+/* Define to 1 if you have the `mbsinit' function. */
+#undef HAVE_MBSINIT
+
+/* Define to 1 if <wchar.h> declares mbstate_t. */
+#undef HAVE_MBSTATE_T
+
+/* Define to 1 if you have the `mbtowc' function. */
+#undef HAVE_MBTOWC
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have the <minix/config.h> header file. */
+#undef HAVE_MINIX_CONFIG_H
+
+/* Define to 1 if <limits.h> defines the MIN and MAX macros. */
+#undef HAVE_MINMAX_IN_LIMITS_H
+
+/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */
+#undef HAVE_MINMAX_IN_SYS_PARAM_H
+
+/* Define to 1 if you have the `mkstemp' function. */
+#undef HAVE_MKSTEMP
+
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 on MSVC platforms that have the "invalid parameter handler"
+ concept. */
+#undef HAVE_MSVC_INVALID_PARAMETER_HANDLER
+
+/* Define if the locale_t type does not contain the name of each locale
+ category. */
+#undef HAVE_NAMELESS_LOCALES
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the `newlocale' function. */
+#undef HAVE_NEWLOCALE
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#undef HAVE_NL_LANGINFO
+
+/* Define to 1 if you have the <OS.h> header file. */
+#undef HAVE_OS_H
+
+/* Define to 1 if you have the `pipe' function. */
+#undef HAVE_PIPE
+
+/* Define to 1 if you have the <priv.h> header file. */
+#undef HAVE_PRIV_H
+
+/* Define to 1 if you have the `pselect' function. */
+#undef HAVE_PSELECT
+
+/* Define if you have the <pthread.h> header and the POSIX threads API. */
+#undef HAVE_PTHREAD_API
+
+/* Define to 1 if you have the `pthread_atfork' function. */
+#undef HAVE_PTHREAD_ATFORK
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
+#undef HAVE_PTHREAD_MUTEX_RECURSIVE
+
+/* Define if the POSIX multithreading library has read/write locks. */
+#undef HAVE_PTHREAD_RWLOCK
+
+/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a
+ reader. */
+#undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+
+/* Define to 1 if the pthread_sigmask function can be used (despite bugs). */
+#undef HAVE_PTHREAD_SIGMASK
+
+/* Define to 1 if the system has the type `pthread_spinlock_t'. */
+#undef HAVE_PTHREAD_SPINLOCK_T
+
+/* Define to 1 if the system has the type `pthread_t'. */
+#undef HAVE_PTHREAD_T
+
+/* Define to 1 if you have the `raise' function. */
+#undef HAVE_RAISE
+
+/* Define to 1 if you have the `rawmemchr' function. */
+#undef HAVE_RAWMEMCHR
+
+/* Define to 1 if you have the <readline/history.h> header file. */
+#undef HAVE_READLINE_HISTORY_H
+
+/* Define to 1 if you have the <readline/readline.h> header file. */
+#undef HAVE_READLINE_READLINE_H
+
+/* Define to 1 if you have the `readlink' function. */
+#undef HAVE_READLINK
+
+/* Define to 1 if you have the `reallocarray' function. */
+#undef HAVE_REALLOCARRAY
+
+/* Define to 1 if you have the `realpath' function. */
+#undef HAVE_REALPATH
+
+/* Define to 1 if you have the `rl_completion_matches' function. */
+#undef HAVE_RL_COMPLETION_MATCHES
+
+/* Define to 1 if you have the `rpmatch' function. */
+#undef HAVE_RPMATCH
+
+/* Define to 1 if the system has the type `sa_family_t'. */
+#undef HAVE_SA_FAMILY_T
+
+/* Define to 1 if you have the <sched.h> header file. */
+#undef HAVE_SCHED_H
+
+/* Define to 1 if you have the <sdkddkver.h> header file. */
+#undef HAVE_SDKDDKVER_H
+
+/* Define to 1 if you have the <search.h> header file. */
+#undef HAVE_SEARCH_H
+
+/* Define to 1 if you have the <semaphore.h> header file. */
+#undef HAVE_SEMAPHORE_H
+
+/* Define to 1 if you have the `setdtablesize' function. */
+#undef HAVE_SETDTABLESIZE
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `shutdown' function. */
+#undef HAVE_SHUTDOWN
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
+/* Define to 1 if the system has the type `sigset_t'. */
+#undef HAVE_SIGSET_T
+
+/* Define to 1 if you have the `sleep' function. */
+#undef HAVE_SLEEP
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define if the locale_t type is as on Solaris 11.4. */
+#undef HAVE_SOLARIS114_LOCALES
+
+/* Define to 1 if you have the <stdbool.h> header file. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdckdint.h> header file. */
+#undef HAVE_STDCKDINT_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdio_ext.h> header file. */
+#undef HAVE_STDIO_EXT_H
+
+/* Define to 1 if you have the <stdio.h> header file. */
+#undef HAVE_STDIO_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strerror_r' function. */
+#undef HAVE_STRERROR_R
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strtoll' function. */
+#undef HAVE_STRTOLL
+
+/* Define to 1 if you have the `strtoull' function. */
+#undef HAVE_STRTOULL
+
+/* Define to 1 if `decimal_point' is a member of `struct lconv'. */
+#undef HAVE_STRUCT_LCONV_DECIMAL_POINT
+
+/* Define to 1 if the system has the type `struct sockaddr_storage'. */
+#undef HAVE_STRUCT_SOCKADDR_STORAGE
+
+/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
+#undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY
+
+/* Define to 1 if `st_atimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMENSEC
+
+/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+
+/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+
+/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+
+/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+
+/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC
+
+/* Define to 1 if you have the `symlink' function. */
+#undef HAVE_SYMLINK
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/cdefs.h> header file. */
+#undef HAVE_SYS_CDEFS_H
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/random.h> header file. */
+#undef HAVE_SYS_RANDOM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/single_threaded.h> header file. */
+#undef HAVE_SYS_SINGLE_THREADED_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <termcap.h> header file. */
+#undef HAVE_TERMCAP_H
+
+/* Define to 1 if you have the `thrd_create' function. */
+#undef HAVE_THRD_CREATE
+
+/* Define to 1 if you have the <threads.h> header file. */
+#undef HAVE_THREADS_H
+
+/* Define to 1 if you have the `towlower' function. */
+#undef HAVE_TOWLOWER
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `unsetenv' function. */
+#undef HAVE_UNSETENV
+
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the `uselocale' function. */
+#undef HAVE_USELOCALE
+
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
+/* Define if you have a global __progname variable */
+#undef HAVE_VAR___PROGNAME
+
+/* Define to 1 or 0, depending whether the compiler supports simple visibility
+ declarations. */
+#undef HAVE_VISIBILITY
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#undef HAVE_WCRTOMB
+
+/* Define to 1 if you have the `wctob' function. */
+#undef HAVE_WCTOB
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Define to 1 if the compiler and linker support weak declarations of
+ symbols. */
+#undef HAVE_WEAK_SYMBOLS
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#undef HAVE_WINSOCK2_H
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to 1 if O_NOATIME works. */
+#undef HAVE_WORKING_O_NOATIME
+
+/* Define to 1 if O_NOFOLLOW works. */
+#undef HAVE_WORKING_O_NOFOLLOW
+
+/* Define if the uselocale function exists and may safely be called. */
+#undef HAVE_WORKING_USELOCALE
+
+/* Define to 1 if you have the <ws2tcpip.h> header file. */
+#undef HAVE_WS2TCPIP_H
+
+/* Define to 1 if you have the <xlocale.h> header file. */
+#undef HAVE_XLOCALE_H
+
+/* Define to 1 if you have the `_chsize' function. */
+#undef HAVE__CHSIZE
+
+/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */
+#undef HAVE__SET_INVALID_PARAMETER_HANDLER
+
+/* Define to 1 if the compiler supports __builtin_expect,
+ and to 2 if <builtins.h> does. */
+#undef HAVE___BUILTIN_EXPECT
+#ifndef HAVE___BUILTIN_EXPECT
+# define __builtin_expect(e, c) (e)
+#elif HAVE___BUILTIN_EXPECT == 2
+# include <builtins.h>
+#endif
+
+
+/* Define to 1 if ctype.h defines __header_inline. */
+#undef HAVE___HEADER_INLINE
+
+/* Please see the Gnulib manual for how to use these macros.
+
+ Suppress extern inline with HP-UX cc, as it appears to be broken; see
+ <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+ Suppress extern inline with Sun C in standards-conformance mode, as it
+ mishandles inline functions that call each other. E.g., for 'inline void f
+ (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+ 'reference to static identifier "f" in extern inline function'.
+ This bug was observed with Oracle Developer Studio 12.6
+ (Sun C 5.15 SunOS_sparc 2017/05/30).
+
+ Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+ on configurations that mistakenly use 'static inline' to implement
+ functions or macros in standard C headers like <ctype.h>. For example,
+ if isdigit is mistakenly implemented via a static inline function,
+ a program containing an extern inline function that calls isdigit
+ may not work since the C standard prohibits extern inline functions
+ from calling static functions (ISO C 99 section 6.7.4.(3).
+ This bug is known to occur on:
+
+ OS X 10.8 and earlier; see:
+ https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+ DragonFly; see
+ http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
+
+ FreeBSD; see:
+ https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+ OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+ for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+ Assume DragonFly and FreeBSD will be similar.
+
+ GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+ inline semantics, unless -fgnu89-inline is used. It defines a macro
+ __GNUC_STDC_INLINE__ to indicate this situation or a macro
+ __GNUC_GNU_INLINE__ to indicate the opposite situation.
+ GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+ semantics but warns, unless -fgnu89-inline is used:
+ warning: C99 inline functions are not supported; using GNU89
+ warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+ It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+ || defined __DragonFly__ || defined __FreeBSD__) \
+ && (defined HAVE___HEADER_INLINE \
+ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+ && ! defined __clang__) \
+ : ((! defined _DONT_USE_CTYPE_INLINE_ \
+ && (defined __GNUC__ || defined __cplusplus)) \
+ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+ && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+ : (199901L <= __STDC_VERSION__ \
+ && !defined __HP_cc \
+ && !defined __PGI \
+ && !(defined __SUNPRO_C && __STDC__))) \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
+# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+# define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE _GL_UNUSED static
+# define _GL_EXTERN_INLINE _GL_UNUSED static
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+ suppress bogus "no previous prototype for 'FOO'"
+ and "no previous declaration for 'FOO'" diagnostics,
+ when FOO is an inline function in the header; see
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+# define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+# define _GL_INLINE_HEADER_CONST_PRAGMA \
+ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+ _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
+/* Define to 1 if the compiler supports the keyword '__inline'. */
+#undef HAVE___INLINE
+
+/* Define to 1 if you have the `__xpg_strerror_r' function. */
+#undef HAVE___XPG_STRERROR_R
+
+/* Extract low level special HFS(+) files for debugging purposes when using
+ the "check" command (NOT FOR PACKAGING) */
+#undef HFS_EXTRACT_FS
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if localename.c overrides newlocale(), duplocale(), freelocale(). */
+#undef LOCALENAME_ENHANCE_LOCALE_FUNCS
+
+/* Define to 1 if lseek does not detect pipes. */
+#undef LSEEK_PIPE_BROKEN
+
+/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing
+ slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
+/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */
+#undef MALLOC_0_IS_NONNULL
+
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#undef MAP_ANONYMOUS
+
+/* Define if the mbrtowc function does not return (size_t) -2 for empty input.
+ */
+#undef MBRTOWC_EMPTY_INPUT_BUG
+
+/* Define if the mbrtowc function may signal encoding errors in the C locale.
+ */
+#undef MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ
+
+/* Define if the mbrtowc function has the NULL pwc argument bug. */
+#undef MBRTOWC_NULL_ARG1_BUG
+
+/* Define if the mbrtowc function has the NULL string argument bug. */
+#undef MBRTOWC_NULL_ARG2_BUG
+
+/* Define if the mbrtowc function does not return 0 for a NUL character. */
+#undef MBRTOWC_NUL_RETVAL_BUG
+
+/* Define if the mbrtowc function returns a wrong return value. */
+#undef MBRTOWC_RETVAL_BUG
+
+/* Define if the mbrtowc function stores a wide character when reporting
+ incomplete input. */
+#undef MBRTOWC_STORES_INCOMPLETE_BUG
+
+/* Use GNU style printf and scanf. */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+
+
+/* Define to 1 on musl libc. */
+#undef MUSL_LIBC
+
+/* Define to 1 if assertions should be disabled. */
+#undef NDEBUG
+
+/* Define to 1 to enable general improvements of setlocale. */
+#undef NEED_SETLOCALE_IMPROVED
+
+/* Define to 1 to enable a multithread-safety fix of setlocale. */
+#undef NEED_SETLOCALE_MTSAFE
+
+/* Define to 1 if nl_langinfo is multithread-safe. */
+#undef NL_LANGINFO_MTSAFE
+
+/* Define to 1 if open() fails to recognize a trailing slash. */
+#undef OPEN_TRAILING_SLASH_BUG
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* String identifying the packager of this software */
+#undef PACKAGE_PACKAGER
+
+/* Packager info for bug reports (URL/e-mail/...) */
+#undef PACKAGE_PACKAGER_BUG_REPORTS
+
+/* Packager-specific version information */
+#undef PACKAGE_PACKAGER_VERSION
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to the type that is the result of default argument promotions of
+ type mode_t. */
+#undef PROMOTED_MODE_T
+
+/* Define if pthread_create is an inline function. */
+#undef PTHREAD_CREATE_IS_INLINE
+
+/* Define if the pthread_in_use() detection is hard. */
+#undef PTHREAD_IN_USE_DETECTION_HARD
+
+/* Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.
+ */
+#undef PTHREAD_SIGMASK_FAILS_WITH_ERRNO
+
+/* Define to 1 if pthread_sigmask may return 0 and have no effect. */
+#undef PTHREAD_SIGMASK_INEFFECTIVE
+
+/* Define to 1 if pthread_sigmask() unblocks signals incorrectly. */
+#undef PTHREAD_SIGMASK_UNBLOCK_BUG
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define to 1 if readlink fails to recognize a trailing slash. */
+#undef READLINK_TRAILING_SLASH_BUG
+
+/* Define to 1 if readlink sets errno instead of truncating a too-long link.
+ */
+#undef READLINK_TRUNCATE_BUG
+
+/* Disable all writing code */
+#undef READ_ONLY
+
+/* Define to 1 if stat needs help when passed a file name with a trailing
+ slash */
+#undef REPLACE_FUNC_STAT_FILE
+
+/* Define if nl_langinfo exists but is overridden by gnulib. */
+#undef REPLACE_NL_LANGINFO
+
+/* Define to 1 if strerror(0) does not return a message implying success. */
+#undef REPLACE_STRERROR_0
+
+/* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */
+#undef SETLOCALE_NULL_ALL_MTSAFE
+
+/* Define to 1 if setlocale (category, NULL) is multithread-safe. */
+#undef SETLOCALE_NULL_ONE_MTSAFE
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* The size of `off_t', as computed by sizeof. */
+#undef SIZEOF_OFF_T
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+#undef STAT_MACROS_BROKEN
+
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
+#undef STDC_HEADERS
+
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
+/* Define to 1 if the type of the st_atim member of a struct stat is struct
+ timespec. */
+#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+
+/* Define to 1 if unlink (dir) cannot possibly succeed. */
+#undef UNLINK_CANNOT_UNLINK_DIR
+
+/* Define to 1 if unlink() on a parent directory may succeed */
+#undef UNLINK_PARENT_BUG
+
+/* Define if you have sufficient blkid support. */
+#undef USE_BLKID
+
+/* Define if the combination of the ISO C and POSIX multithreading APIs can be
+ used. */
+#undef USE_ISOC_AND_POSIX_THREADS
+
+/* Define if the ISO C multithreading library can be used. */
+#undef USE_ISOC_THREADS
+
+/* Define if the POSIX multithreading library can be used. */
+#undef USE_POSIX_THREADS
+
+/* Define if references to the POSIX multithreading library are satisfied by
+ libc. */
+#undef USE_POSIX_THREADS_FROM_LIBC
+
+/* Define if references to the POSIX multithreading library should be made
+ weak. */
+#undef USE_POSIX_THREADS_WEAK
+
+/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by C23 Annex F. */
+#ifndef __STDC_WANT_IEC_60559_EXT__
+# undef __STDC_WANT_IEC_60559_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+
+
+/* Define if the native Windows multithreading API can be used. */
+#undef USE_WINDOWS_THREADS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if unsetenv returns void instead of int. */
+#undef VOID_UNSETENV
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
+/* Define if the wcrtomb function does not work in the C locale. */
+#undef WCRTOMB_C_LOCALE_BUG
+
+/* Define if the wcrtomb function has an incorrect return value. */
+#undef WCRTOMB_RETVAL_BUG
+
+/* Define if WSAStartup is needed. */
+#undef WINDOWS_SOCKETS
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+ 'wint_t'. */
+#undef WINT_T_SUFFIX
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+ significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+# define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+# undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#undef _FILE_OFFSET_BITS
+
+/* enable compile-time and run-time bounds-checking, and some warnings */
+#undef _FORTIFY_SOURCE
+
+/* True if the compiler says it groks GNU C version MAJOR.MINOR. */
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define _GL_GNUC_PREREQ(major, minor) \
+ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__))
+#else
+# define _GL_GNUC_PREREQ(major, minor) 0
+#endif
+
+
+/* Define to enable the declarations of ISO C 11 types and functions. */
+#undef _ISOC11_SOURCE
+
+/* Define to 1 on platforms where this makes off_t a 64-bit type. */
+#undef _LARGE_FILES
+
+/* Define to 1 on Solaris. */
+#undef _LCONV_C99
+
+/* The _Noreturn keyword of C11. */
+#ifndef _Noreturn
+# if (defined __cplusplus \
+ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+ || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+ && 0)
+ /* [[noreturn]] is not practically usable, because with it the syntax
+ extern _Noreturn void func (...);
+ would not be valid; such a declaration would only be valid with 'extern'
+ and '_Noreturn' swapped, or without the 'extern' keyword. However, some
+ AIX system header files and several gnulib header files use precisely
+ this syntax with 'extern'. */
+# define _Noreturn [[noreturn]]
+# elif (defined __clang__ && __clang_major__ < 16 \
+ && defined _GL_WORK_AROUND_LLVM_BUG_59792)
+ /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around
+ that rare LLVM bug, though you may get many false-alarm warnings. */
+# define _Noreturn
+# elif ((!defined __cplusplus || defined __clang__) \
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (_GL_GNUC_PREREQ (4, 7) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
+ /* _Noreturn works as-is. */
+# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C
+# define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn
+# endif
+#endif
+
+
+/* Define to 1 in order to get the POSIX compatible declarations of socket
+ functions. */
+#undef _POSIX_PII_SOCKET
+
+/* Define if you want <regex.h> to include <limits.h>, so that it consistently
+ overrides <limits.h>'s RE_DUP_MAX. */
+#undef _REGEX_INCLUDE_LIMITS_H
+
+/* Define if you want regoff_t to be at least as wide POSIX requires. */
+#undef _REGEX_LARGE_OFFSETS
+
+/* Number of bits in time_t, on hosts where this is settable. */
+#undef _TIME_BITS
+
+/* For standard stat data types on VMS. */
+#undef _USE_STD_STAT
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+ used. */
+#undef __GETOPT_PREFIX
+
+/* Define to 1 on platforms where this makes time_t a 64-bit type. */
+#undef __MINGW_USE_VC2005_COMPAT
+
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_CONSTANT_MACROS
+
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_LIMIT_MACROS
+
+/* Define to 1 if C does not support variable-length arrays, and if the
+ compiler does not already define this. */
+#undef __STDC_NO_VLA__
+
+/* The _GL_ASYNC_SAFE marker should be attached to functions that are
+ signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
+ invoked from such signal handlers. Such functions have some restrictions:
+ * All functions that it calls should be marked _GL_ASYNC_SAFE as well,
+ or should be listed as async-signal-safe in POSIX
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04>
+ section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in
+ particular, are NOT async-signal-safe.
+ * All memory locations (variables and struct fields) that these functions
+ access must be marked 'volatile'. This holds for both read and write
+ accesses. Otherwise the compiler might optimize away stores to and
+ reads from such locations that occur in the program, depending on its
+ data flow analysis. For example, when the program contains a loop
+ that is intended to inspect a variable set from within a signal handler
+ while (!signal_occurred)
+ ;
+ the compiler is allowed to transform this into an endless loop if the
+ variable 'signal_occurred' is not declared 'volatile'.
+ Additionally, recall that:
+ * A signal handler should not modify errno (except if it is a handler
+ for a fatal signal and ends by raising the same signal again, thus
+ provoking the termination of the process). If it invokes a function
+ that may clobber errno, it needs to save and restore the value of
+ errno. */
+#define _GL_ASYNC_SAFE
+
+
+/* Attributes. */
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 5 <= __clang_major__)))
+# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__)
+#else
+# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr
+# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2)
+# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95)
+# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1)
+# define _GL_ATTR_diagnose_if 0
+# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1)
+# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0)
+# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6)
+# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
+# ifdef _ICC
+# define _GL_ATTR_may_alias 0
+# else
+# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3)
+# endif
+# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1)
+# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3)
+# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0)
+# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3)
+# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96)
+# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9)
+# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0)
+# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
+#endif
+
+/* Disable GCC -Wpedantic if using __has_c_attribute and this is not C23+. */
+#if (defined __has_c_attribute && _GL_GNUC_PREREQ (4, 6) \
+ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+
+/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function
+ is the size of the returned memory block.
+ _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
+ by the Nth argument of the function is the size of the returned memory block.
+ */
+/* Applies to: function, pointer to function, function types. */
+#ifndef _GL_ATTRIBUTE_ALLOC_SIZE
+# if _GL_HAS_ATTRIBUTE (alloc_size)
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
+# else
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
+ function and report an error if it cannot do so. */
+/* Applies to: function. */
+#ifndef _GL_ATTRIBUTE_ALWAYS_INLINE
+# if _GL_HAS_ATTRIBUTE (always_inline)
+# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
+# else
+# define _GL_ATTRIBUTE_ALWAYS_INLINE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
+ in stack traces when debugging. The compiler should omit the function from
+ stack traces. */
+/* Applies to: function. */
+#ifndef _GL_ATTRIBUTE_ARTIFICIAL
+# if _GL_HAS_ATTRIBUTE (artificial)
+# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
+# else
+# define _GL_ATTRIBUTE_ARTIFICIAL
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */
+/* Applies to: functions. */
+/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at
+ <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>.
+ Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */
+#ifndef _GL_ATTRIBUTE_COLD
+# if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__
+# ifndef __SUNPRO_C
+# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+# define _GL_ATTRIBUTE_COLD __attribute__ ((cold))
+# endif
+# else
+# define _GL_ATTRIBUTE_COLD
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
+ calls to the function with the same arguments.
+ This attribute is safe for a function that neither depends on nor affects
+ observable state, and always returns exactly once - e.g., does not loop
+ forever, and does not call longjmp.
+ (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_CONST
+# if _GL_HAS_ATTRIBUTE (const)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+# define _GL_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if _GL_GNUC_PREREQ (11, 0)
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+/* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue
+ to use this earlier definition, since <stdlib.h> may not have been included
+ yet. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# if defined __cplusplus && defined __GNUC__ && !defined __clang__
+/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
+# else
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC (free, 1)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated.
+ The compiler may warn if the entity is used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: namespace, class, template specialization. */
+#ifndef _GL_ATTRIBUTE_DEPRECATED
+# ifdef __has_c_attribute
+# if __has_c_attribute (__deprecated__)
+# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated)
+# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
+# endif
+# ifndef _GL_ATTRIBUTE_DEPRECATED
+# define _GL_ATTRIBUTE_DEPRECATED
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and
+ the function call is not optimized away.
+ _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and
+ the function call is not optimized away. */
+/* Applies to: functions. */
+#if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING)
+# if _GL_HAS_ATTRIBUTE (error)
+# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
+# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
+# elif _GL_HAS_ATTRIBUTE (diagnose_if)
+# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error")))
+# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning")))
+# else
+# define _GL_ATTRIBUTE_ERROR(msg)
+# define _GL_ATTRIBUTE_WARNING(msg)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain
+ visible to debuggers etc., even with '-fwhole-program'. */
+/* Applies to: functions, variables. */
+#ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
+# if _GL_HAS_ATTRIBUTE (externally_visible)
+# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible))
+# else
+# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if
+ the control flow falls through to the immediately following 'case' or
+ 'default' label. The compiler should not warn in this case. */
+/* Applies to: Empty statement (;), inside a 'switch' statement. */
+/* Always expands to something. */
+#ifndef _GL_ATTRIBUTE_FALLTHROUGH
+# ifdef __has_c_attribute
+# if __has_c_attribute (__fallthrough__)
+# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough)
+# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+# ifndef _GL_ATTRIBUTE_FALLTHROUGH
+# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK))
+ declares that the STRING-INDEXth function argument is a format string of
+ style ARCHETYPE, which is one of:
+ printf, gnu_printf
+ scanf, gnu_scanf,
+ strftime, gnu_strftime,
+ strfmon,
+ or the same thing prefixed and suffixed with '__'.
+ If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
+ are suitable for the format string. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_FORMAT
+# if _GL_HAS_ATTRIBUTE (format)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+# else
+# define _GL_ATTRIBUTE_FORMAT(spec)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other
+ compilation unit, it executes code from that unit only by return or by
+ exception handling. This declaration lets the compiler optimize that unit
+ more aggressively. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_LEAF
+# if _GL_HAS_ATTRIBUTE (leaf)
+# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
+# else
+# define _GL_ATTRIBUTE_LEAF
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if _GL_HAS_ATTRIBUTE (malloc)
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the
+ same storage as pointers to other types. Thus this declaration disables
+ strict aliasing optimization. */
+/* Applies to: types. */
+/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */
+#ifndef _GL_ATTRIBUTE_MAY_ALIAS
+# if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C
+# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
+# else
+# define _GL_ATTRIBUTE_MAY_ALIAS
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if
+ the entity is not used. The compiler should not warn if the entity is not
+ used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: class. */
+/* In C++ and C23, this is spelled [[__maybe_unused__]].
+ GCC's syntax is __attribute__ ((__unused__)).
+ clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode,
+ __has_c_attribute (__maybe_unused__) yields true but the use of
+ [[__maybe_unused__]] nevertheless produces a warning. */
+#ifndef _GL_ATTRIBUTE_MAYBE_UNUSED
+# if defined __clang__ && defined __cplusplus
+# if !defined __apple_build_version__ && __clang_major__ >= 10
+# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
+# endif
+# elif defined __has_c_attribute
+# if __has_c_attribute (__maybe_unused__)
+# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
+# endif
+# endif
+# ifndef _GL_ATTRIBUTE_MAYBE_UNUSED
+# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
+# endif
+#endif
+/* Alternative spelling of this macro, for convenience and for
+ compatibility with glibc/include/libc-symbols.h. */
+#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
+/* Earlier spellings of this macro. */
+#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED
+
+/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not
+ discard the return value. The compiler may warn if the caller does not use
+ the return value, unless the caller uses something like ignore_value. */
+/* Applies to: function, enumeration, class. */
+#ifndef _GL_ATTRIBUTE_NODISCARD
+# if defined __clang__ && defined __cplusplus
+ /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces
+ a warning.
+ The 1000 below means a yet unknown threshold. When clang++ version X
+ starts supporting [[__nodiscard__]] without warning about it, you can
+ replace the 1000 with X. */
+# if __clang_major__ >= 1000
+# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
+# endif
+# elif defined __has_c_attribute
+# if __has_c_attribute (__nodiscard__)
+# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result)
+# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
+# endif
+# ifndef _GL_ATTRIBUTE_NODISCARD
+# define _GL_ATTRIBUTE_NODISCARD
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the
+ function. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NOINLINE
+# if _GL_HAS_ATTRIBUTE (noinline)
+# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
+# else
+# define _GL_ATTRIBUTE_NOINLINE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,...
+ must not be NULL.
+ _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be
+ null. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NONNULL
+# if _GL_HAS_ATTRIBUTE (nonnull)
+# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
+# else
+# define _GL_ATTRIBUTE_NONNULL(args)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is
+ not meant to be NUL-terminated. */
+/* Applies to: struct/union members and variables that are arrays of element
+ type '[[un]signed] char'. */
+#ifndef _GL_ATTRIBUTE_NONSTRING
+# if _GL_HAS_ATTRIBUTE (nonstring)
+# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
+# else
+# define _GL_ATTRIBUTE_NONSTRING
+# endif
+#endif
+
+/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */
+
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
+# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+# else
+# define _GL_ATTRIBUTE_NOTHROW
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_PACKED declares:
+ For struct members: The member has the smallest possible alignment.
+ For struct, union, class: All members have the smallest possible alignment,
+ minimizing the memory required. */
+/* Applies to: struct members, struct, union,
+ in C++ also: class. */
+#ifndef _GL_ATTRIBUTE_PACKED
+# if _GL_HAS_ATTRIBUTE (packed)
+# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
+# else
+# define _GL_ATTRIBUTE_PACKED
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
+ calls to the function with the same arguments if observable state is not
+ changed between calls.
+ This attribute is safe for a function that does not affect
+ observable state, and always returns exactly once.
+ (This attribute is looser than _GL_ATTRIBUTE_CONST.) */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if _GL_HAS_ATTRIBUTE (pure)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is
+ a non-NULL pointer. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_RETURNS_NONNULL
+# if _GL_HAS_ATTRIBUTE (returns_nonnull)
+# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
+# else
+# define _GL_ATTRIBUTE_RETURNS_NONNULL
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a
+ trailing NULL argument.
+ _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
+ _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_SENTINEL
+# if _GL_HAS_ATTRIBUTE (sentinel)
+# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
+# else
+# define _GL_ATTRIBUTE_SENTINEL(pos)
+# endif
+#endif
+
+/* A helper macro. Don't use it directly. */
+#ifndef _GL_ATTRIBUTE_UNUSED
+# if _GL_HAS_ATTRIBUTE (unused)
+# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+# define _GL_ATTRIBUTE_UNUSED
+# endif
+#endif
+
+
+/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the
+ immediately preceding label is not used. The compiler should not warn
+ if the label is not used. */
+/* Applies to: label (both in C and C++). */
+/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;'
+ syntax. But clang does. */
+#ifndef _GL_UNUSED_LABEL
+# if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__
+# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
+# else
+# define _GL_UNUSED_LABEL
+# endif
+#endif
+
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef gid_t
+
+/* A replacement for va_copy, if needed. */
+#define gl_va_copy(a,b) ((a) = (b))
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+ the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+ earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+ __APPLE__ && __MACH__ test for Mac OS X.
+ __APPLE_CC__ tests for the Apple compiler and its version.
+ __STDC_VERSION__ tests for the C99 mode. */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to 1 if the compiler is checking for lint. */
+#undef lint
+
+/* Define to a type if <wchar.h> does not define. */
+#undef mbstate_t
+
+/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where
+ n1 and n2 are expressions without side effects, that evaluate to real
+ numbers (excluding NaN).
+ It returns
+ 1 if n1 > n2
+ 0 if n1 == n2
+ -1 if n1 < n2
+ The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional
+ jump with nearly all GCC versions up to GCC 10.
+ This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many
+ GCC versions up to GCC 9.
+ The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9
+ avoids conditional jumps in all GCC versions >= 3.4. */
+#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
+
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to the type of st_nlink in struct stat, or a supertype. */
+#undef nlink_t
+
+/* Define as a signed integer type capable of holding a process identifier. */
+#undef pid_t
+
+/* Define to rpl_re_comp if the replacement should be used. */
+#undef re_comp
+
+/* Define to rpl_re_compile_fastmap if the replacement should be used. */
+#undef re_compile_fastmap
+
+/* Define to rpl_re_compile_pattern if the replacement should be used. */
+#undef re_compile_pattern
+
+/* Define to rpl_re_exec if the replacement should be used. */
+#undef re_exec
+
+/* Define to rpl_re_match if the replacement should be used. */
+#undef re_match
+
+/* Define to rpl_re_match_2 if the replacement should be used. */
+#undef re_match_2
+
+/* Define to rpl_re_search if the replacement should be used. */
+#undef re_search
+
+/* Define to rpl_re_search_2 if the replacement should be used. */
+#undef re_search_2
+
+/* Define to rpl_re_set_registers if the replacement should be used. */
+#undef re_set_registers
+
+/* Define to rpl_re_set_syntax if the replacement should be used. */
+#undef re_set_syntax
+
+/* Define to rpl_re_syntax_options if the replacement should be used. */
+#undef re_syntax_options
+
+/* Define to rpl_regcomp if the replacement should be used. */
+#undef regcomp
+
+/* Define to rpl_regerror if the replacement should be used. */
+#undef regerror
+
+/* Define to rpl_regexec if the replacement should be used. */
+#undef regexec
+
+/* Define to rpl_regfree if the replacement should be used. */
+#undef regfree
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported only directly. */
+#undef restrict
+/* Work around a bug in older versions of Sun C++, which did not
+ #define __restrict__ or support _Restrict or __restrict__
+ even though the corresponding Sun C compiler ended up with
+ "#define restrict _Restrict" or "#define restrict __restrict__"
+ in the previous line. This workaround can be removed once
+ we assume Oracle Developer Studio 12.5 (2016) or later. */
+#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* type to use in place of socklen_t if not defined */
+#undef socklen_t
+
+/* Define as a signed type of the same size as size_t. */
+#undef ssize_t
+
+/* Define to `int' if <sys/types.h> doesn't define. */
+#undef uid_t
+
+/* Define to an unsigned 32-bit type if <sys/types.h> lacks this type. */
+#undef useconds_t
+
+/* Define as a macro for copying va_list variables. */
+#undef va_copy
+
+#if !defined HAVE_C_ALIGNASOF && __cplusplus < 201103 && !defined alignof
+# if HAVE_STDALIGN_H
+# include <stdalign.h>
+# endif
+
+/* ISO C23 alignas and alignof for platforms that lack it.
+
+ References:
+ ISO C23 (latest free draft
+ <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf>)
+ sections 6.5.3.4, 6.7.5, 7.15.
+ C++11 (latest free draft
+ <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
+ section 18.10. */
+
+/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment
+ requirement of a structure member (i.e., slot or field) that is of
+ type TYPE, as an integer constant expression.
+
+ This differs from GCC's and clang's __alignof__ operator, which can
+ yield a better-performing alignment for an object of that type. For
+ example, on x86 with GCC and on Linux/x86 with clang,
+ __alignof__ (double) and __alignof__ (long long) are 8, whereas
+ alignof (double) and alignof (long long) are 4 unless the option
+ '-malign-double' is used.
+
+ The result cannot be used as a value for an 'enum' constant, if you
+ want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */
+
+/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
+ clang versions < 8.0.0 have the same bug. */
+# if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
+ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
+ && !defined __clang__) \
+ || (defined __clang__ && __clang_major__ < 8))
+# undef/**/_Alignof
+# ifdef __cplusplus
+# if (201103 <= __cplusplus || defined _MSC_VER)
+# define _Alignof(type) alignof (type)
+# else
+ template <class __t> struct __alignof_helper { char __a; __t __b; };
+# define _Alignof(type) offsetof (__alignof_helper<type>, __b)
+# define _GL_STDALIGN_NEEDS_STDDEF 1
+# endif
+# else
+# if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__
+# define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b)
+# else
+# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b)
+# define _GL_STDALIGN_NEEDS_STDDEF 1
+# endif
+# endif
+# endif
+# if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))
+# undef/**/alignof
+# define alignof _Alignof
+# endif
+
+/* alignas (A), also known as _Alignas (A), aligns a variable or type
+ to the alignment A, where A is an integer constant expression. For
+ example:
+
+ int alignas (8) foo;
+ struct s { int a; int alignas (8) bar; };
+
+ aligns the address of FOO and the offset of BAR to be multiples of 8.
+
+ A should be a power of two that is at least the type's alignment
+ and at most the implementation's alignment limit. This limit is
+ 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable
+ to MSVC through at least version 10.0, A should be an integer
+ constant, as MSVC does not support expressions such as 1 << 3.
+ To be portable to Sun C 5.11, do not align auto variables to
+ anything stricter than their default alignment.
+
+ The following C23 requirements are not supported here:
+
+ - If A is zero, alignas has no effect.
+ - alignas can be used multiple times; the strictest one wins.
+ - alignas (TYPE) is equivalent to alignas (alignof (TYPE)).
+
+ */
+# if !HAVE_STDALIGN_H
+# if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112
+# if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)
+# define _Alignas(a) alignas (a)
+# elif (!defined __attribute__ \
+ && ((defined __APPLE__ && defined __MACH__ \
+ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ : __GNUC__ && !defined __ibmxl__) \
+ || (4 <= __clang_major__) \
+ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__))
+# define _Alignas(a) __attribute__ ((__aligned__ (a)))
+# elif 1300 <= _MSC_VER
+# define _Alignas(a) __declspec (align (a))
+# endif
+# endif
+# if ((defined _Alignas \
+ && !(defined __cplusplus \
+ && (201103 <= __cplusplus || defined _MSC_VER))) \
+ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# define alignas _Alignas
+# endif
+# endif
+
+# if _GL_STDALIGN_NEEDS_STDDEF
+# include <stddef.h>
+# endif
+#endif
+
+#ifndef HAVE_C_BOOL
+# if !defined __cplusplus && !defined __bool_true_false_are_defined
+# if HAVE_STDBOOL_H
+# include <stdbool.h>
+# else
+# if defined __SUNPRO_C
+# error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC."
+# else
+# error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'."
+# endif
+# endif
+# endif
+# if !true
+# define true (!false)
+# endif
+#endif
+
+#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \
+ && (!defined __cplusplus \
+ || (__cpp_static_assert < 201411 \
+ && __GNUG__ < 6 && __clang_major__ < 6)))
+ #include <assert.h>
+ #undef/**/assert
+ #ifdef __sgi
+ #undef/**/__ASSERT_H__
+ #endif
+ /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments.
+ We need it also to be invocable with a single argument. */
+ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus
+ #undef/**/static_assert
+ #define static_assert _Static_assert
+ #endif
+#endif
diff --git a/lib/dirname-lgpl.c b/lib/dirname-lgpl.c
new file mode 100644
index 0000000..e9454af
--- /dev/null
+++ b/lib/dirname-lgpl.c
@@ -0,0 +1,86 @@
+/* dirname.c -- return all but the last element in a file name
+
+ Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "dirname.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Return the length of the prefix of FILE that will be used by
+ dir_name. If FILE is in the working directory, this returns zero
+ even though 'dir_name (FILE)' will return ".". Works properly even
+ if there are trailing slashes (by effectively ignoring them). */
+
+size_t
+dir_len (char const *file)
+{
+ size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
+ size_t length;
+
+ /* Advance prefix_length beyond important leading slashes. */
+ prefix_length += (prefix_length != 0
+ ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+ && ISSLASH (file[prefix_length]))
+ : (ISSLASH (file[0])
+ ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT
+ && ISSLASH (file[1]) && ! ISSLASH (file[2])
+ ? 2 : 1))
+ : 0));
+
+ /* Strip the basename and any redundant slashes before it. */
+ for (length = last_component (file) - file;
+ prefix_length < length; length--)
+ if (! ISSLASH (file[length - 1]))
+ break;
+ return length;
+}
+
+
+/* In general, we can't use the builtin 'dirname' function if available,
+ since it has different meanings in different environments.
+ In some environments the builtin 'dirname' modifies its argument.
+
+ Return the leading directories part of FILE, allocated with malloc.
+ Works properly even if there are trailing slashes (by effectively
+ ignoring them). Return NULL on failure.
+
+ If lstat (FILE) would succeed, then { chdir (dir_name (FILE));
+ lstat (base_name (FILE)); } will access the same file. Likewise,
+ if the sequence { chdir (dir_name (FILE));
+ rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE
+ to "foo" in the same directory FILE was in. */
+
+char *
+mdir_name (char const *file)
+{
+ size_t length = dir_len (file);
+ bool append_dot = (length == 0
+ || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+ && length == FILE_SYSTEM_PREFIX_LEN (file)
+ && file[2] != '\0' && ! ISSLASH (file[2])));
+ char *dir = malloc (length + append_dot + 1);
+ if (!dir)
+ return NULL;
+ memcpy (dir, file, length);
+ if (append_dot)
+ dir[length++] = '.';
+ dir[length] = '\0';
+ return dir;
+}
diff --git a/lib/dirname.c b/lib/dirname.c
new file mode 100644
index 0000000..e72f713
--- /dev/null
+++ b/lib/dirname.c
@@ -0,0 +1,38 @@
+/* dirname.c -- return all but the last element in a file name
+
+ Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "dirname.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include "xalloc.h"
+
+/* Just like mdir_name (dirname-lgpl.c), except, rather than
+ returning NULL upon malloc failure, here, we report the
+ "memory exhausted" condition and exit. */
+
+char *
+dir_name (char const *file)
+{
+ char *result = mdir_name (file);
+ if (!result)
+ xalloc_die ();
+ return result;
+}
diff --git a/lib/dirname.h b/lib/dirname.h
new file mode 100644
index 0000000..f98e83b
--- /dev/null
+++ b/lib/dirname.h
@@ -0,0 +1,53 @@
+/* Take file names apart into directory and base names.
+
+ Copyright (C) 1998, 2001, 2003-2006, 2009-2023 Free Software Foundation,
+ Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef DIRNAME_H_
+# define DIRNAME_H_ 1
+
+# include <stdlib.h>
+# include "filename.h"
+# include "basename-lgpl.h"
+
+# ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+# endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+# if GNULIB_DIRNAME
+char *base_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+char *dir_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+# endif
+
+char *mdir_name (char const *file)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE;
+size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE;
+
+bool strip_trailing_slashes (char *file);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* not DIRNAME_H_ */
diff --git a/lib/dup2.c b/lib/dup2.c
new file mode 100644
index 0000000..7d197ca
--- /dev/null
+++ b/lib/dup2.c
@@ -0,0 +1,189 @@
+/* Duplicate an open file descriptor to a specified file descriptor.
+
+ Copyright (C) 1999, 2004-2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Paul Eggert */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <errno.h>
+#include <fcntl.h>
+
+#undef dup2
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* Get declarations of the native Windows API functions. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+# endif
+
+/* Get _get_osfhandle. */
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+dup2_nothrow (int fd, int desired_fd)
+{
+ int result;
+
+ TRY_MSVC_INVAL
+ {
+ result = _dup2 (fd, desired_fd);
+ }
+ CATCH_MSVC_INVAL
+ {
+ errno = EBADF;
+ result = -1;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+# else
+# define dup2_nothrow _dup2
+# endif
+
+static int
+ms_windows_dup2 (int fd, int desired_fd)
+{
+ int result;
+
+ /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open,
+ dup2 (fd, fd) returns 0, but all further attempts to use fd in
+ future dup2 calls will hang. */
+ if (fd == desired_fd)
+ {
+ if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+ return fd;
+ }
+
+ /* Wine 1.0.1 return 0 when desired_fd is negative but not -1:
+ https://bugs.winehq.org/show_bug.cgi?id=21289 */
+ if (desired_fd < 0)
+ {
+ errno = EBADF;
+ return -1;
+ }
+
+ result = dup2_nothrow (fd, desired_fd);
+
+ if (result == 0)
+ result = desired_fd;
+
+ return result;
+}
+
+# define dup2 ms_windows_dup2
+
+#elif defined __KLIBC__
+
+# include <InnoTekLIBC/backend.h>
+
+static int
+klibc_dup2dirfd (int fd, int desired_fd)
+{
+ int tempfd;
+ int dupfd;
+
+ tempfd = open ("NUL", O_RDONLY);
+ if (tempfd == -1)
+ return -1;
+
+ if (tempfd == desired_fd)
+ {
+ close (tempfd);
+
+ char path[_MAX_PATH];
+ if (__libc_Back_ioFHToPath (fd, path, sizeof (path)))
+ return -1;
+
+ return open(path, O_RDONLY);
+ }
+
+ dupfd = klibc_dup2dirfd (fd, desired_fd);
+
+ close (tempfd);
+
+ return dupfd;
+}
+
+static int
+klibc_dup2 (int fd, int desired_fd)
+{
+ int dupfd;
+ struct stat sbuf;
+
+ dupfd = dup2 (fd, desired_fd);
+ if (dupfd == -1 && errno == ENOTSUP \
+ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
+ {
+ close (desired_fd);
+
+ return klibc_dup2dirfd (fd, desired_fd);
+ }
+
+ return dupfd;
+}
+
+# define dup2 klibc_dup2
+#endif
+
+int
+rpl_dup2 (int fd, int desired_fd)
+{
+ int result;
+
+#ifdef F_GETFL
+ /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF.
+ On Cygwin 1.5.x, dup2 (1, 1) returns 0.
+ On Cygwin 1.7.17, dup2 (1, -1) dumps core.
+ On Cygwin 1.7.25, dup2 (1, 256) can dump core.
+ On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */
+# if HAVE_SETDTABLESIZE
+ setdtablesize (desired_fd + 1);
+# endif
+ if (desired_fd < 0)
+ fd = desired_fd;
+ if (fd == desired_fd)
+ return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
+#endif
+
+ result = dup2 (fd, desired_fd);
+
+ /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */
+ if (result == -1 && errno == EMFILE)
+ errno = EBADF;
+#if REPLACE_FCHDIR
+ if (fd != desired_fd && result != -1)
+ result = _gl_register_dup (fd, result);
+#endif
+ return result;
+}
diff --git a/lib/dynarray.h b/lib/dynarray.h
new file mode 100644
index 0000000..9155910
--- /dev/null
+++ b/lib/dynarray.h
@@ -0,0 +1,284 @@
+/* Type-safe arrays which grow dynamically.
+ Copyright 2021-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert and Bruno Haible, 2021. */
+
+#ifndef _GL_DYNARRAY_H
+#define _GL_DYNARRAY_H
+
+/* Before including this file, you need to define:
+
+ DYNARRAY_STRUCT
+ The struct tag of dynamic array to be defined.
+
+ DYNARRAY_ELEMENT
+ The type name of the element type. Elements are copied
+ as if by memcpy, and can change address as the dynamic
+ array grows.
+
+ DYNARRAY_PREFIX
+ The prefix of the functions which are defined.
+
+ The following parameters are optional:
+
+ DYNARRAY_ELEMENT_FREE
+ DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the
+ contents of elements. E is of type DYNARRAY_ELEMENT *.
+
+ DYNARRAY_ELEMENT_INIT
+ DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new
+ element. E is of type DYNARRAY_ELEMENT *.
+ If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is
+ defined, new elements are automatically zero-initialized.
+ Otherwise, new elements have undefined contents.
+
+ DYNARRAY_INITIAL_SIZE
+ The size of the statically allocated array (default:
+ at least 2, more elements if they fit into 128 bytes).
+ Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0,
+ there is no statically allocated array at, and all non-empty
+ arrays are heap-allocated.
+
+ DYNARRAY_FINAL_TYPE
+ The name of the type which holds the final array. If not
+ defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE
+ must be a struct type, with members of type DYNARRAY_ELEMENT and
+ size_t at the start (in this order).
+
+ These macros are undefined after this header file has been
+ included.
+
+ The following types are provided (their members are private to the
+ dynarray implementation):
+
+ struct DYNARRAY_STRUCT
+
+ The following functions are provided:
+ */
+
+/* Initialize a dynamic array object. This must be called before any
+ use of the object. */
+#if 0
+static void
+ DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Deallocate the dynamic array and its elements. */
+#if 0
+static void
+ DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Return true if the dynamic array is in an error state. */
+#if 0
+static bool
+ DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Mark the dynamic array as failed. All elements are deallocated as
+ a side effect. */
+#if 0
+static void
+ DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Return the number of elements which have been added to the dynamic
+ array. */
+#if 0
+static size_t
+ DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Return a pointer to the first array element, if any. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+#if 0
+static DYNARRAY_ELEMENT *
+ DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Return a pointer one element past the last array element. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+#if 0
+static DYNARRAY_ELEMENT *
+ DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Return a pointer to the array element at INDEX. Terminate the
+ process if INDEX is out of bounds. */
+#if 0
+static DYNARRAY_ELEMENT *
+ DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index);
+#endif
+
+/* Add ITEM at the end of the array, enlarging it by one element.
+ Mark *LIST as failed if the dynamic array allocation size cannot be
+ increased. */
+#if 0
+static void
+ DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list,
+ DYNARRAY_ELEMENT item);
+#endif
+
+/* Allocate a place for a new element in *LIST and return a pointer to
+ it. The pointer can be NULL if the dynamic array cannot be
+ enlarged due to a memory allocation failure. */
+#if 0
+static DYNARRAY_ELEMENT *
+ DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Change the size of *LIST to SIZE. If SIZE is larger than the
+ existing size, new elements are added (which can be initialized).
+ Otherwise, the list is truncated, and elements are freed. Return
+ false on memory allocation failure (and mark *LIST as failed). */
+#if 0
+static bool
+ DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size);
+#endif
+
+/* Remove the last element of LIST if it is present. */
+#if 0
+static void
+ DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list);
+#endif
+
+/* Remove all elements from the list. The elements are freed, but the
+ list itself is not. */
+#if 0
+static void
+ DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list);
+#endif
+
+#if defined DYNARRAY_FINAL_TYPE
+/* Transfer the dynamic array to a permanent location at *RESULT.
+ Returns true on success on false on allocation failure. In either
+ case, *LIST is re-initialized and can be reused. A NULL pointer is
+ stored in *RESULT if LIST refers to an empty list. On success, the
+ pointer in *RESULT is heap-allocated and must be deallocated using
+ free. */
+#if 0
+static bool
+ DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list,
+ DYNARRAY_FINAL_TYPE *result);
+#endif
+#else /* !defined DYNARRAY_FINAL_TYPE */
+/* Transfer the dynamic array to a heap-allocated array and return a
+ pointer to it. The pointer is NULL if memory allocation fails, or
+ if the array is empty, so this function should be used only for
+ arrays which are known not be empty (usually because they always
+ have a sentinel at the end). If LENGTHP is not NULL, the array
+ length is written to *LENGTHP. *LIST is re-initialized and can be
+ reused. */
+#if 0
+static DYNARRAY_ELEMENT *
+ DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list,
+ size_t *lengthp);
+#endif
+#endif
+
+/* A minimal example which provides a growing list of integers can be
+ defined like this:
+
+ struct int_array
+ {
+ // Pointer to result array followed by its length,
+ // as required by DYNARRAY_FINAL_TYPE.
+ int *array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_int
+ #define DYNARRAY_ELEMENT int
+ #define DYNARRAY_PREFIX dynarray_int_
+ #define DYNARRAY_FINAL_TYPE struct int_array
+ #include <malloc/dynarray-skeleton.c>
+
+ To create a three-element array with elements 1, 2, 3, use this
+ code:
+
+ struct dynarray_int dyn;
+ dynarray_int_init (&dyn);
+ for (int i = 1; i <= 3; ++i)
+ {
+ int *place = dynarray_int_emplace (&dyn);
+ assert (place != NULL);
+ *place = i;
+ }
+ struct int_array result;
+ bool ok = dynarray_int_finalize (&dyn, &result);
+ assert (ok);
+ assert (result.length == 3);
+ assert (result.array[0] == 1);
+ assert (result.array[1] == 2);
+ assert (result.array[2] == 3);
+ free (result.array);
+
+ If the elements contain resources which must be freed, define
+ DYNARRAY_ELEMENT_FREE appropriately, like this:
+
+ struct str_array
+ {
+ char **array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_str
+ #define DYNARRAY_ELEMENT char *
+ #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr)
+ #define DYNARRAY_PREFIX dynarray_str_
+ #define DYNARRAY_FINAL_TYPE struct str_array
+ #include <malloc/dynarray-skeleton.c>
+ */
+
+
+/* The implementation is imported from glibc. */
+
+/* Avoid possible conflicts with symbols exported by the GNU libc. */
+#define __libc_dynarray_at_failure gl_dynarray_at_failure
+#define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge
+#define __libc_dynarray_finalize gl_dynarray_finalize
+#define __libc_dynarray_resize_clear gl_dynarray_resize_clear
+#define __libc_dynarray_resize gl_dynarray_resize
+
+#if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX
+
+# ifndef _GL_LIKELY
+/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */
+# define _GL_LIKELY(cond) __builtin_expect ((cond), 1)
+# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0)
+# endif
+
+/* Define auxiliary structs and declare auxiliary functions, common to all
+ instantiations of dynarray. */
+# include <malloc/dynarray.gl.h>
+
+/* Define the instantiation, specified through
+ DYNARRAY_STRUCT
+ DYNARRAY_ELEMENT
+ DYNARRAY_PREFIX
+ etc. */
+# include <malloc/dynarray-skeleton.gl.h>
+
+#else
+
+/* This file is being included from one of the malloc/dynarray_*.c files. */
+# include <malloc/dynarray.h>
+
+#endif
+
+#endif /* _GL_DYNARRAY_H */
diff --git a/lib/eloop-threshold.h b/lib/eloop-threshold.h
new file mode 100644
index 0000000..510f261
--- /dev/null
+++ b/lib/eloop-threshold.h
@@ -0,0 +1,83 @@
+/* Threshold at which to diagnose ELOOP. Generic version.
+ Copyright (C) 2012-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _ELOOP_THRESHOLD_H
+#define _ELOOP_THRESHOLD_H 1
+
+#include <limits.h>
+#ifdef _LIBC
+# include <sys/param.h>
+# define _GL_ATTRIBUTE_CONST __attribute__ ((const))
+#else
+# include <unistd.h>
+# include "minmax.h"
+# define __sysconf sysconf
+# if (!defined SYMLOOP_MAX \
+ && ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX))
+# define SYMLOOP_MAX 8
+# endif
+#endif
+
+/* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic
+ links that can be reliably traversed in the resolution of a
+ pathname in the absence of a loop." This makes it a minimum that
+ we should certainly accept. But it leaves open the possibility
+ that more might sometimes work--just not "reliably".
+
+ For example, Linux implements a complex policy whereby there is a
+ small limit on the number of direct symlink traversals (a symlink
+ to a symlink to a symlink), but larger limit on the total number of
+ symlink traversals overall. Hence the SYMLOOP_MAX number should be
+ the small one, but the limit library functions enforce on users
+ should be the larger one.
+
+ So, we use the larger of the reported SYMLOOP_MAX (if any) and our
+ own constant MIN_ELOOP_THRESHOLD, below. This constant should be
+ large enough that it never rules out a file name and directory tree
+ that the underlying system (i.e. calls to 'open' et al) would
+ resolve successfully. It should be small enough that actual loops
+ are detected without a huge number of iterations. */
+
+#ifndef MIN_ELOOP_THRESHOLD
+# define MIN_ELOOP_THRESHOLD 40
+#endif
+
+/* Return the maximum number of symlink traversals to permit
+ before diagnosing ELOOP. */
+static inline unsigned int _GL_ATTRIBUTE_CONST
+__eloop_threshold (void)
+{
+#ifdef SYMLOOP_MAX
+ const int symloop_max = SYMLOOP_MAX;
+#else
+ /* The function is marked 'const' even though we use memory and
+ call a function, because sysconf is required to return the
+ same value in every call and so it must always be safe to
+ call __eloop_threshold exactly once and reuse the value. */
+ static long int sysconf_symloop_max;
+ if (sysconf_symloop_max == 0)
+ sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX);
+ const unsigned int symloop_max = (sysconf_symloop_max <= 0
+ ? _POSIX_SYMLOOP_MAX
+ : sysconf_symloop_max);
+#endif
+
+ return MAX (symloop_max, MIN_ELOOP_THRESHOLD);
+}
+
+#endif /* eloop-threshold.h */
diff --git a/lib/errno.in.h b/lib/errno.in.h
new file mode 100644
index 0000000..3dda9c2
--- /dev/null
+++ b/lib/errno.in.h
@@ -0,0 +1,279 @@
+/* A POSIX-like <errno.h>.
+
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_ERRNO_H@
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+#define _@GUARD_PREFIX@_ERRNO_H
+
+
+/* On native Windows platforms, many macros are not defined. */
+# if defined _WIN32 && ! defined __CYGWIN__
+
+/* These are the same values as defined by MSVC 10, for interoperability. */
+
+# ifndef ENOMSG
+# define ENOMSG 122
+# define GNULIB_defined_ENOMSG 1
+# endif
+
+# ifndef EIDRM
+# define EIDRM 111
+# define GNULIB_defined_EIDRM 1
+# endif
+
+# ifndef ENOLINK
+# define ENOLINK 121
+# define GNULIB_defined_ENOLINK 1
+# endif
+
+# ifndef EPROTO
+# define EPROTO 134
+# define GNULIB_defined_EPROTO 1
+# endif
+
+# ifndef EBADMSG
+# define EBADMSG 104
+# define GNULIB_defined_EBADMSG 1
+# endif
+
+# ifndef EOVERFLOW
+# define EOVERFLOW 132
+# define GNULIB_defined_EOVERFLOW 1
+# endif
+
+# ifndef ENOTSUP
+# define ENOTSUP 129
+# define GNULIB_defined_ENOTSUP 1
+# endif
+
+# ifndef ENETRESET
+# define ENETRESET 117
+# define GNULIB_defined_ENETRESET 1
+# endif
+
+# ifndef ECONNABORTED
+# define ECONNABORTED 106
+# define GNULIB_defined_ECONNABORTED 1
+# endif
+
+# ifndef ECANCELED
+# define ECANCELED 105
+# define GNULIB_defined_ECANCELED 1
+# endif
+
+# ifndef EOWNERDEAD
+# define EOWNERDEAD 133
+# define GNULIB_defined_EOWNERDEAD 1
+# endif
+
+# ifndef ENOTRECOVERABLE
+# define ENOTRECOVERABLE 127
+# define GNULIB_defined_ENOTRECOVERABLE 1
+# endif
+
+# ifndef EINPROGRESS
+# define EINPROGRESS 112
+# define EALREADY 103
+# define ENOTSOCK 128
+# define EDESTADDRREQ 109
+# define EMSGSIZE 115
+# define EPROTOTYPE 136
+# define ENOPROTOOPT 123
+# define EPROTONOSUPPORT 135
+# define EOPNOTSUPP 130
+# define EAFNOSUPPORT 102
+# define EADDRINUSE 100
+# define EADDRNOTAVAIL 101
+# define ENETDOWN 116
+# define ENETUNREACH 118
+# define ECONNRESET 108
+# define ENOBUFS 119
+# define EISCONN 113
+# define ENOTCONN 126
+# define ETIMEDOUT 138
+# define ECONNREFUSED 107
+# define ELOOP 114
+# define EHOSTUNREACH 110
+# define EWOULDBLOCK 140
+# define GNULIB_defined_ESOCK 1
+# endif
+
+# ifndef ETXTBSY
+# define ETXTBSY 139
+# define ENODATA 120 /* not required by POSIX */
+# define ENOSR 124 /* not required by POSIX */
+# define ENOSTR 125 /* not required by POSIX */
+# define ETIME 137 /* not required by POSIX */
+# define EOTHER 131 /* not required by POSIX */
+# define GNULIB_defined_ESTREAMS 1
+# endif
+
+/* These are intentionally the same values as the WSA* error numbers, defined
+ in <winsock2.h>. */
+# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */
+# define EPFNOSUPPORT 10046 /* not required by POSIX */
+# define ESHUTDOWN 10058 /* not required by POSIX */
+# define ETOOMANYREFS 10059 /* not required by POSIX */
+# define EHOSTDOWN 10064 /* not required by POSIX */
+# define EPROCLIM 10067 /* not required by POSIX */
+# define EUSERS 10068 /* not required by POSIX */
+# define EDQUOT 10069
+# define ESTALE 10070
+# define EREMOTE 10071 /* not required by POSIX */
+# define GNULIB_defined_EWINSOCK 1
+
+# endif
+
+
+/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros
+ EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */
+# if @EMULTIHOP_HIDDEN@
+# define EMULTIHOP @EMULTIHOP_VALUE@
+# define GNULIB_defined_EMULTIHOP 1
+# endif
+# if @ENOLINK_HIDDEN@
+# define ENOLINK @ENOLINK_VALUE@
+# define GNULIB_defined_ENOLINK 1
+# endif
+# if @EOVERFLOW_HIDDEN@
+# define EOVERFLOW @EOVERFLOW_VALUE@
+# define GNULIB_defined_EOVERFLOW 1
+# endif
+
+
+/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK,
+ EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined.
+ Likewise, on NonStop Kernel, EDQUOT is not defined.
+ Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151,
+ HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133.
+
+ Note: When one of these systems defines some of these macros some day,
+ binaries will have to be recompiled so that they recognizes the new
+ errno values from the system. */
+
+# ifndef ENOMSG
+# define ENOMSG 2000
+# define GNULIB_defined_ENOMSG 1
+# endif
+
+# ifndef EIDRM
+# define EIDRM 2001
+# define GNULIB_defined_EIDRM 1
+# endif
+
+# ifndef ENOLINK
+# define ENOLINK 2002
+# define GNULIB_defined_ENOLINK 1
+# endif
+
+# ifndef EPROTO
+# define EPROTO 2003
+# define GNULIB_defined_EPROTO 1
+# endif
+
+# ifndef EMULTIHOP
+# define EMULTIHOP 2004
+# define GNULIB_defined_EMULTIHOP 1
+# endif
+
+# ifndef EBADMSG
+# define EBADMSG 2005
+# define GNULIB_defined_EBADMSG 1
+# endif
+
+# ifndef EOVERFLOW
+# define EOVERFLOW 2006
+# define GNULIB_defined_EOVERFLOW 1
+# endif
+
+# ifndef ENOTSUP
+# define ENOTSUP 2007
+# define GNULIB_defined_ENOTSUP 1
+# endif
+
+# ifndef ENETRESET
+# define ENETRESET 2011
+# define GNULIB_defined_ENETRESET 1
+# endif
+
+# ifndef ECONNABORTED
+# define ECONNABORTED 2012
+# define GNULIB_defined_ECONNABORTED 1
+# endif
+
+# ifndef ESTALE
+# define ESTALE 2009
+# define GNULIB_defined_ESTALE 1
+# endif
+
+# ifndef EDQUOT
+# define EDQUOT 2010
+# define GNULIB_defined_EDQUOT 1
+# endif
+
+# ifndef ECANCELED
+# define ECANCELED 2008
+# define GNULIB_defined_ECANCELED 1
+# endif
+
+/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not
+ defined. */
+
+# ifndef EOWNERDEAD
+# if defined __sun
+ /* Use the same values as defined for Solaris >= 8, for
+ interoperability. */
+# define EOWNERDEAD 58
+# define ENOTRECOVERABLE 59
+# elif defined _WIN32 && ! defined __CYGWIN__
+ /* We have a conflict here: pthreads-win32 defines these values
+ differently than MSVC 10. It's hairy to decide which one to use. */
+# if defined __MINGW32__ && !defined USE_WINDOWS_THREADS
+ /* Use the same values as defined by pthreads-win32, for
+ interoperability. */
+# define EOWNERDEAD 43
+# define ENOTRECOVERABLE 44
+# else
+ /* Use the same values as defined by MSVC 10, for
+ interoperability. */
+# define EOWNERDEAD 133
+# define ENOTRECOVERABLE 127
+# endif
+# else
+# define EOWNERDEAD 2013
+# define ENOTRECOVERABLE 2014
+# endif
+# define GNULIB_defined_EOWNERDEAD 1
+# define GNULIB_defined_ENOTRECOVERABLE 1
+# endif
+
+# ifndef EILSEQ
+# define EILSEQ 2015
+# define GNULIB_defined_EILSEQ 1
+# endif
+
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
diff --git a/lib/error.c b/lib/error.c
new file mode 100644
index 0000000..ef43728
--- /dev/null
+++ b/lib/error.c
@@ -0,0 +1,409 @@
+/* Error handler for noninteractive utilities
+ Copyright (C) 1990-1998, 2000-2007, 2009-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include "error.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC && ENABLE_NLS
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <wchar.h>
+# define mbsrtowcs __mbsrtowcs
+# define USE_UNLOCKED_IO 0
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b)
+# define _GL_ARG_NONNULL(a)
+#endif
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#ifndef _
+# define _(String) String
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+void (*error_print_progname) (void);
+
+/* This variable is incremented each time 'error' is called. */
+unsigned int error_message_count;
+
+#ifdef _LIBC
+/* In the GNU C library, there is a predefined variable for this. */
+
+# define program_name program_invocation_name
+# include <errno.h>
+# include <limits.h>
+# include <libio/libioP.h>
+
+/* In GNU libc we want do not want to use the common name 'error' directly.
+ Instead make it a weak alias. */
+extern void __error (int status, int errnum, const char *message, ...)
+ __attribute__ ((__format__ (__printf__, 3, 4)));
+extern void __error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message,
+ ...)
+ __attribute__ ((__format__ (__printf__, 5, 6)));
+# define error __error
+# define error_at_line __error_at_line
+
+# include <libio/iolibio.h>
+# define fflush(s) _IO_fflush (s)
+# undef putc
+# define putc(c, fp) _IO_putc (c, fp)
+
+# include <bits/libc-lock.h>
+
+#else /* not _LIBC */
+
+# include <fcntl.h>
+# include <unistd.h>
+
+# if defined _WIN32 && ! defined __CYGWIN__
+/* Get declarations of the native Windows API functions. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* Get _get_osfhandle. */
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+# endif
+
+/* The gnulib override of fcntl is not needed in this file. */
+# undef fcntl
+
+# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R)
+# ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+# endif
+# if STRERROR_R_CHAR_P
+char *strerror_r (int errnum, char *buf, size_t buflen);
+# else
+int strerror_r (int errnum, char *buf, size_t buflen);
+# endif
+# endif
+
+# define program_name getprogname ()
+
+# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r
+# define __strerror_r strerror_r
+# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */
+#endif /* not _LIBC */
+
+#if !_LIBC
+/* Return non-zero if FD is open. */
+static int
+is_open (int fd)
+{
+# if defined _WIN32 && ! defined __CYGWIN__
+ /* On native Windows: The initial state of unassigned standard file
+ descriptors is that they are open but point to an INVALID_HANDLE_VALUE.
+ There is no fcntl, and the gnulib replacement fcntl does not support
+ F_GETFL. */
+ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE;
+# else
+# ifndef F_GETFL
+# error Please port fcntl to your platform
+# endif
+ return 0 <= fcntl (fd, F_GETFL);
+# endif
+}
+#endif
+
+static void
+flush_stdout (void)
+{
+#if !_LIBC
+ int stdout_fd;
+
+# if GNULIB_FREOPEN_SAFER
+ /* Use of gnulib's freopen-safer module normally ensures that
+ fileno (stdout) == 1
+ whenever stdout is open. */
+ stdout_fd = STDOUT_FILENO;
+# else
+ /* POSIX states that fileno (stdout) after fclose is unspecified. But in
+ practice it is not a problem, because stdout is statically allocated and
+ the fd of a FILE stream is stored as a field in its allocated memory. */
+ stdout_fd = fileno (stdout);
+# endif
+ /* POSIX states that fflush (stdout) after fclose is unspecified; it
+ is safe in glibc, but not on all other platforms. fflush (NULL)
+ is always defined, but too draconian. */
+ if (0 <= stdout_fd && is_open (stdout_fd))
+#endif
+ fflush (stdout);
+}
+
+static void
+print_errno_message (int errnum)
+{
+ char const *s;
+
+#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R
+ char errbuf[1024];
+# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P)
+ s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+ if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+ s = errbuf;
+ else
+ s = 0;
+# endif
+#else
+ s = strerror (errnum);
+#endif
+
+#if !_LIBC
+ if (! s)
+ s = _("Unknown system error");
+#endif
+
+#if _LIBC
+ __fxprintf (NULL, ": %s", s);
+#else
+ fprintf (stderr, ": %s", s);
+#endif
+}
+
+static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+#if _LIBC
+ if (_IO_fwide (stderr, 0) > 0)
+ {
+ size_t len = strlen (message) + 1;
+ wchar_t *wmessage = NULL;
+ mbstate_t st;
+ size_t res;
+ const char *tmp;
+ bool use_malloc = false;
+
+ while (1)
+ {
+ if (__libc_use_alloca (len * sizeof (wchar_t)))
+ wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+ else
+ {
+ if (!use_malloc)
+ wmessage = NULL;
+
+ wchar_t *p = (wchar_t *) realloc (wmessage,
+ len * sizeof (wchar_t));
+ if (p == NULL)
+ {
+ free (wmessage);
+ fputws_unlocked (L"out of memory\n", stderr);
+ return;
+ }
+ wmessage = p;
+ use_malloc = true;
+ }
+
+ memset (&st, '\0', sizeof (st));
+ tmp = message;
+
+ res = mbsrtowcs (wmessage, &tmp, len, &st);
+ if (res != len)
+ break;
+
+ if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0))
+ {
+ /* This really should not happen if everything is fine. */
+ res = (size_t) -1;
+ break;
+ }
+
+ len *= 2;
+ }
+
+ if (res == (size_t) -1)
+ {
+ /* The string cannot be converted. */
+ if (use_malloc)
+ {
+ free (wmessage);
+ use_malloc = false;
+ }
+ wmessage = (wchar_t *) L"???";
+ }
+
+ __vfwprintf (stderr, wmessage, args);
+
+ if (use_malloc)
+ free (wmessage);
+ }
+ else
+#endif
+ vfprintf (stderr, message, args);
+
+ ++error_message_count;
+ if (errnum)
+ print_errno_message (errnum);
+#if _LIBC
+ __fxprintf (NULL, "\n");
+#else
+ putc ('\n', stderr);
+#endif
+ fflush (stderr);
+ if (status)
+ exit (status);
+}
+
+
+/* Print the program name and error message MESSAGE, which is a printf-style
+ format string with optional args.
+ If ERRNUM is nonzero, print its corresponding system error message.
+ Exit with status STATUS if it is nonzero. */
+void
+error (int status, int errnum, const char *message, ...)
+{
+ va_list args;
+
+#if defined _LIBC && defined __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+ 0);
+#endif
+
+ flush_stdout ();
+#ifdef _LIBC
+ _IO_flockfile (stderr);
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC
+ __fxprintf (NULL, "%s: ", program_name);
+#else
+ fprintf (stderr, "%s: ", program_name);
+#endif
+ }
+
+ va_start (args, message);
+ error_tail (status, errnum, message, args);
+ va_end (args);
+
+#ifdef _LIBC
+ _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+ __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+int error_one_per_line;
+
+void
+error_at_line (int status, int errnum, const char *file_name,
+ unsigned int line_number, const char *message, ...)
+{
+ va_list args;
+
+ if (error_one_per_line)
+ {
+ static const char *old_file_name;
+ static unsigned int old_line_number;
+
+ if (old_line_number == line_number
+ && (file_name == old_file_name
+ || (old_file_name != NULL
+ && file_name != NULL
+ && strcmp (old_file_name, file_name) == 0)))
+
+ /* Simply return and print nothing. */
+ return;
+
+ old_file_name = file_name;
+ old_line_number = line_number;
+ }
+
+#if defined _LIBC && defined __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+ 0);
+#endif
+
+ flush_stdout ();
+#ifdef _LIBC
+ _IO_flockfile (stderr);
+#endif
+ if (error_print_progname)
+ (*error_print_progname) ();
+ else
+ {
+#if _LIBC
+ __fxprintf (NULL, "%s:", program_name);
+#else
+ fprintf (stderr, "%s:", program_name);
+#endif
+ }
+
+#if _LIBC
+ __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ",
+ file_name, line_number);
+#else
+ fprintf (stderr, file_name != NULL ? "%s:%u: " : " ",
+ file_name, line_number);
+#endif
+
+ va_start (args, message);
+ error_tail (status, errnum, message, args);
+ va_end (args);
+
+#ifdef _LIBC
+ _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+ __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+#ifdef _LIBC
+/* Make the weak alias. */
+# undef error
+# undef error_at_line
+weak_alias (__error, error)
+weak_alias (__error_at_line, error_at_line)
+#endif
diff --git a/lib/error.in.h b/lib/error.in.h
new file mode 100644
index 0000000..dcb49d1
--- /dev/null
+++ b/lib/error.in.h
@@ -0,0 +1,118 @@
+/* Declarations for error-reporting functions.
+ Copyright (C) 1995-1997, 2003, 2006, 2008-2023 Free Software Foundation,
+ Inc.
+ This file is part of the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _@GUARD_PREFIX@_ERROR_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_ERROR_H@
+# @INCLUDE_NEXT@ @NEXT_ERROR_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_ERROR_H
+#define _@GUARD_PREFIX@_ERROR_H
+
+/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */
+#include <stdio.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+#if GNULIB_VFPRINTF_POSIX
+# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD
+#else
+# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Print a message with 'fprintf (stderr, FORMAT, ...)';
+ if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+ If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */
+#if @REPLACE_ERROR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef error
+# define error rpl_error
+# endif
+_GL_FUNCDECL_RPL (error, void,
+ (int __status, int __errnum, const char *__format, ...)
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)));
+_GL_CXXALIAS_RPL (error, void,
+ (int __status, int __errnum, const char *__format, ...));
+#else
+# if ! @HAVE_ERROR@
+_GL_FUNCDECL_SYS (error, void,
+ (int __status, int __errnum, const char *__format, ...)
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)));
+# endif
+_GL_CXXALIAS_SYS (error, void,
+ (int __status, int __errnum, const char *__format, ...));
+#endif
+#if __GLIBC__ >= 2
+_GL_CXXALIASWARN (error);
+#endif
+
+/* Likewise. If FILENAME is non-NULL, include FILENAME:LINENO: in the
+ message. */
+#if @REPLACE_ERROR_AT_LINE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef error_at_line
+# define error_at_line rpl_error_at_line
+# endif
+_GL_FUNCDECL_RPL (error_at_line, void,
+ (int __status, int __errnum, const char *__filename,
+ unsigned int __lineno, const char *__format, ...)
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)));
+_GL_CXXALIAS_RPL (error_at_line, void,
+ (int __status, int __errnum, const char *__filename,
+ unsigned int __lineno, const char *__format, ...));
+#else
+# if ! @HAVE_ERROR_AT_LINE@
+_GL_FUNCDECL_SYS (error_at_line, void,
+ (int __status, int __errnum, const char *__filename,
+ unsigned int __lineno, const char *__format, ...)
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)));
+# endif
+_GL_CXXALIAS_SYS (error_at_line, void,
+ (int __status, int __errnum, const char *__filename,
+ unsigned int __lineno, const char *__format, ...));
+#endif
+_GL_CXXALIASWARN (error_at_line);
+
+/* If NULL, error will flush stdout, then print on stderr the program
+ name, a colon and a space. Otherwise, error will call this
+ function without parameters instead. */
+extern void (*error_print_progname) (void);
+
+/* This variable is incremented each time 'error' is called. */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line. This
+ variable controls whether this mode is selected or not. */
+extern int error_one_per_line;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _@GUARD_PREFIX@_ERROR_H */
+#endif /* _@GUARD_PREFIX@_ERROR_H */
diff --git a/lib/exitfail.c b/lib/exitfail.c
new file mode 100644
index 0000000..d67a130
--- /dev/null
+++ b/lib/exitfail.c
@@ -0,0 +1,24 @@
+/* Failure exit status
+
+ Copyright (C) 2002-2003, 2005-2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "exitfail.h"
+
+#include <stdlib.h>
+
+int volatile exit_failure = EXIT_FAILURE;
diff --git a/lib/exitfail.h b/lib/exitfail.h
new file mode 100644
index 0000000..85a6af6
--- /dev/null
+++ b/lib/exitfail.h
@@ -0,0 +1,18 @@
+/* Failure exit status
+
+ Copyright (C) 2002, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+extern int volatile exit_failure;
diff --git a/lib/fcntl.c b/lib/fcntl.c
new file mode 100644
index 0000000..e220800
--- /dev/null
+++ b/lib/fcntl.c
@@ -0,0 +1,629 @@
+/* Provide file descriptor control.
+
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake <ebb9@byu.net>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <fcntl.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#ifdef __KLIBC__
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Get declarations of the native Windows API functions. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+/* Get _get_osfhandle. */
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Upper bound on getdtablesize(). See lib/getdtablesize.c. */
+# define OPEN_MAX_MAX 0x10000
+
+/* Duplicate OLDFD into the first available slot of at least NEWFD,
+ which must be positive, with FLAGS determining whether the duplicate
+ will be inheritable. */
+static int
+dupfd (int oldfd, int newfd, int flags)
+{
+ /* Mingw has no way to create an arbitrary fd. Iterate until all
+ file descriptors less than newfd are filled up. */
+ HANDLE curr_process = GetCurrentProcess ();
+ HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd);
+ unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT];
+ unsigned int fds_to_close_bound = 0;
+ int result;
+ BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE;
+ int mode;
+
+ if (newfd < 0 || getdtablesize () <= newfd)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ if (old_handle == INVALID_HANDLE_VALUE
+ || (mode = _setmode (oldfd, O_BINARY)) == -1)
+ {
+ /* oldfd is not open, or is an unassigned standard file
+ descriptor. */
+ errno = EBADF;
+ return -1;
+ }
+ _setmode (oldfd, mode);
+ flags |= mode;
+
+ for (;;)
+ {
+ HANDLE new_handle;
+ int duplicated_fd;
+ unsigned int index;
+
+ if (!DuplicateHandle (curr_process, /* SourceProcessHandle */
+ old_handle, /* SourceHandle */
+ curr_process, /* TargetProcessHandle */
+ (PHANDLE) &new_handle, /* TargetHandle */
+ (DWORD) 0, /* DesiredAccess */
+ inherit, /* InheritHandle */
+ DUPLICATE_SAME_ACCESS)) /* Options */
+ {
+ switch (GetLastError ())
+ {
+ case ERROR_TOO_MANY_OPEN_FILES:
+ errno = EMFILE;
+ break;
+ case ERROR_INVALID_HANDLE:
+ case ERROR_INVALID_TARGET_HANDLE:
+ case ERROR_DIRECT_ACCESS_HANDLE:
+ errno = EBADF;
+ break;
+ case ERROR_INVALID_PARAMETER:
+ case ERROR_INVALID_FUNCTION:
+ case ERROR_INVALID_ACCESS:
+ errno = EINVAL;
+ break;
+ default:
+ errno = EACCES;
+ break;
+ }
+ result = -1;
+ break;
+ }
+ duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags);
+ if (duplicated_fd < 0)
+ {
+ CloseHandle (new_handle);
+ result = -1;
+ break;
+ }
+ if (newfd <= duplicated_fd)
+ {
+ result = duplicated_fd;
+ break;
+ }
+
+ /* Set the bit duplicated_fd in fds_to_close[]. */
+ index = (unsigned int) duplicated_fd / CHAR_BIT;
+ if (fds_to_close_bound <= index)
+ {
+ if (sizeof fds_to_close <= index)
+ /* Need to increase OPEN_MAX_MAX. */
+ abort ();
+ memset (fds_to_close + fds_to_close_bound, '\0',
+ index + 1 - fds_to_close_bound);
+ fds_to_close_bound = index + 1;
+ }
+ fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT);
+ }
+
+ /* Close the previous fds that turned out to be too small. */
+ {
+ int saved_errno = errno;
+ unsigned int duplicated_fd;
+
+ for (duplicated_fd = 0;
+ duplicated_fd < fds_to_close_bound * CHAR_BIT;
+ duplicated_fd++)
+ if ((fds_to_close[duplicated_fd / CHAR_BIT]
+ >> (duplicated_fd % CHAR_BIT))
+ & 1)
+ close (duplicated_fd);
+
+ errno = saved_errno;
+ }
+
+# if REPLACE_FCHDIR
+ if (0 <= result)
+ result = _gl_register_dup (oldfd, result);
+# endif
+ return result;
+}
+#endif /* W32 */
+
+/* Forward declarations, because we '#undef fcntl' in the middle of this
+ compilation unit. */
+/* Our implementation of fcntl (fd, F_DUPFD, target). */
+static int rpl_fcntl_DUPFD (int fd, int target);
+/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */
+static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target);
+#ifdef __KLIBC__
+/* Adds support for fcntl on directories. */
+static int klibc_fcntl (int fd, int action, /* arg */...);
+#endif
+
+
+/* Perform the specified ACTION on the file descriptor FD, possibly
+ using the argument ARG further described below. This replacement
+ handles the following actions, and forwards all others on to the
+ native fcntl. An unrecognized ACTION returns -1 with errno set to
+ EINVAL.
+
+ F_DUPFD - duplicate FD, with int ARG being the minimum target fd.
+ If successful, return the duplicate, which will be inheritable;
+ otherwise return -1 and set errno.
+
+ F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum
+ target fd. If successful, return the duplicate, which will not be
+ inheritable; otherwise return -1 and set errno.
+
+ F_GETFD - ARG need not be present. If successful, return a
+ non-negative value containing the descriptor flags of FD (only
+ FD_CLOEXEC is portable, but other flags may be present); otherwise
+ return -1 and set errno. */
+
+int
+fcntl (int fd, int action, /* arg */...)
+#undef fcntl
+#ifdef __KLIBC__
+# define fcntl klibc_fcntl
+#endif
+{
+ va_list arg;
+ int result = -1;
+ va_start (arg, action);
+ switch (action)
+ {
+ case F_DUPFD:
+ {
+ int target = va_arg (arg, int);
+ result = rpl_fcntl_DUPFD (fd, target);
+ break;
+ }
+
+ case F_DUPFD_CLOEXEC:
+ {
+ int target = va_arg (arg, int);
+ result = rpl_fcntl_DUPFD_CLOEXEC (fd, target);
+ break;
+ }
+
+#if !HAVE_FCNTL
+ case F_GETFD:
+ {
+# if defined _WIN32 && ! defined __CYGWIN__
+ HANDLE handle = (HANDLE) _get_osfhandle (fd);
+ DWORD flags;
+ if (handle == INVALID_HANDLE_VALUE
+ || GetHandleInformation (handle, &flags) == 0)
+ errno = EBADF;
+ else
+ result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC;
+# else /* !W32 */
+ /* Use dup2 to reject invalid file descriptors. No way to
+ access this information, so punt. */
+ if (0 <= dup2 (fd, fd))
+ result = 0;
+# endif /* !W32 */
+ break;
+ } /* F_GETFD */
+#endif /* !HAVE_FCNTL */
+
+ /* Implementing F_SETFD on mingw is not trivial - there is no
+ API for changing the O_NOINHERIT bit on an fd, and merely
+ changing the HANDLE_FLAG_INHERIT bit on the underlying handle
+ can lead to odd state. It may be possible by duplicating the
+ handle, using _open_osfhandle with the right flags, then
+ using dup2 to move the duplicate onto the original, but that
+ is not supported for now. */
+
+ default:
+ {
+#if HAVE_FCNTL
+ switch (action)
+ {
+ #ifdef F_BARRIERFSYNC /* macOS */
+ case F_BARRIERFSYNC:
+ #endif
+ #ifdef F_CHKCLEAN /* macOS */
+ case F_CHKCLEAN:
+ #endif
+ #ifdef F_CLOSEM /* NetBSD, HP-UX */
+ case F_CLOSEM:
+ #endif
+ #ifdef F_FLUSH_DATA /* macOS */
+ case F_FLUSH_DATA:
+ #endif
+ #ifdef F_FREEZE_FS /* macOS */
+ case F_FREEZE_FS:
+ #endif
+ #ifdef F_FULLFSYNC /* macOS */
+ case F_FULLFSYNC:
+ #endif
+ #ifdef F_GETCONFINED /* macOS */
+ case F_GETCONFINED:
+ #endif
+ #ifdef F_GETDEFAULTPROTLEVEL /* macOS */
+ case F_GETDEFAULTPROTLEVEL:
+ #endif
+ #ifdef F_GETFD /* POSIX */
+ case F_GETFD:
+ #endif
+ #ifdef F_GETFL /* POSIX */
+ case F_GETFL:
+ #endif
+ #ifdef F_GETLEASE /* Linux */
+ case F_GETLEASE:
+ #endif
+ #ifdef F_GETNOSIGPIPE /* macOS */
+ case F_GETNOSIGPIPE:
+ #endif
+ #ifdef F_GETOWN /* POSIX */
+ case F_GETOWN:
+ #endif
+ #ifdef F_GETPIPE_SZ /* Linux */
+ case F_GETPIPE_SZ:
+ #endif
+ #ifdef F_GETPROTECTIONCLASS /* macOS */
+ case F_GETPROTECTIONCLASS:
+ #endif
+ #ifdef F_GETPROTECTIONLEVEL /* macOS */
+ case F_GETPROTECTIONLEVEL:
+ #endif
+ #ifdef F_GET_SEALS /* Linux */
+ case F_GET_SEALS:
+ #endif
+ #ifdef F_GETSIG /* Linux */
+ case F_GETSIG:
+ #endif
+ #ifdef F_MAXFD /* NetBSD */
+ case F_MAXFD:
+ #endif
+ #ifdef F_RECYCLE /* macOS */
+ case F_RECYCLE:
+ #endif
+ #ifdef F_SETFIFOENH /* HP-UX */
+ case F_SETFIFOENH:
+ #endif
+ #ifdef F_THAW_FS /* macOS */
+ case F_THAW_FS:
+ #endif
+ /* These actions take no argument. */
+ result = fcntl (fd, action);
+ break;
+
+ #ifdef F_ADD_SEALS /* Linux */
+ case F_ADD_SEALS:
+ #endif
+ #ifdef F_BADFD /* Solaris */
+ case F_BADFD:
+ #endif
+ #ifdef F_CHECK_OPENEVT /* macOS */
+ case F_CHECK_OPENEVT:
+ #endif
+ #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */
+ case F_DUP2FD:
+ #endif
+ #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */
+ case F_DUP2FD_CLOEXEC:
+ #endif
+ #ifdef F_DUP2FD_CLOFORK /* Solaris */
+ case F_DUP2FD_CLOFORK:
+ #endif
+ #ifdef F_DUPFD /* POSIX */
+ case F_DUPFD:
+ #endif
+ #ifdef F_DUPFD_CLOEXEC /* POSIX */
+ case F_DUPFD_CLOEXEC:
+ #endif
+ #ifdef F_DUPFD_CLOFORK /* Solaris */
+ case F_DUPFD_CLOFORK:
+ #endif
+ #ifdef F_GETXFL /* Solaris */
+ case F_GETXFL:
+ #endif
+ #ifdef F_GLOBAL_NOCACHE /* macOS */
+ case F_GLOBAL_NOCACHE:
+ #endif
+ #ifdef F_MAKECOMPRESSED /* macOS */
+ case F_MAKECOMPRESSED:
+ #endif
+ #ifdef F_MOVEDATAEXTENTS /* macOS */
+ case F_MOVEDATAEXTENTS:
+ #endif
+ #ifdef F_NOCACHE /* macOS */
+ case F_NOCACHE:
+ #endif
+ #ifdef F_NODIRECT /* macOS */
+ case F_NODIRECT:
+ #endif
+ #ifdef F_NOTIFY /* Linux */
+ case F_NOTIFY:
+ #endif
+ #ifdef F_OPLKACK /* IRIX */
+ case F_OPLKACK:
+ #endif
+ #ifdef F_OPLKREG /* IRIX */
+ case F_OPLKREG:
+ #endif
+ #ifdef F_RDAHEAD /* macOS */
+ case F_RDAHEAD:
+ #endif
+ #ifdef F_SETBACKINGSTORE /* macOS */
+ case F_SETBACKINGSTORE:
+ #endif
+ #ifdef F_SETCONFINED /* macOS */
+ case F_SETCONFINED:
+ #endif
+ #ifdef F_SETFD /* POSIX */
+ case F_SETFD:
+ #endif
+ #ifdef F_SETFL /* POSIX */
+ case F_SETFL:
+ #endif
+ #ifdef F_SETLEASE /* Linux */
+ case F_SETLEASE:
+ #endif
+ #ifdef F_SETNOSIGPIPE /* macOS */
+ case F_SETNOSIGPIPE:
+ #endif
+ #ifdef F_SETOWN /* POSIX */
+ case F_SETOWN:
+ #endif
+ #ifdef F_SETPIPE_SZ /* Linux */
+ case F_SETPIPE_SZ:
+ #endif
+ #ifdef F_SETPROTECTIONCLASS /* macOS */
+ case F_SETPROTECTIONCLASS:
+ #endif
+ #ifdef F_SETSIG /* Linux */
+ case F_SETSIG:
+ #endif
+ #ifdef F_SINGLE_WRITER /* macOS */
+ case F_SINGLE_WRITER:
+ #endif
+ /* These actions take an 'int' argument. */
+ {
+ int x = va_arg (arg, int);
+ result = fcntl (fd, action, x);
+ }
+ break;
+
+ default:
+ /* Other actions take a pointer argument. */
+ {
+ void *p = va_arg (arg, void *);
+ result = fcntl (fd, action, p);
+ }
+ break;
+ }
+#else
+ errno = EINVAL;
+#endif
+ break;
+ }
+ }
+ va_end (arg);
+ return result;
+}
+
+static int
+rpl_fcntl_DUPFD (int fd, int target)
+{
+ int result;
+#if !HAVE_FCNTL
+ result = dupfd (fd, target, 0);
+#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR
+ /* Detect invalid target; needed for cygwin 1.5.x. */
+ if (target < 0 || getdtablesize () <= target)
+ {
+ result = -1;
+ errno = EINVAL;
+ }
+ else
+ {
+ /* Haiku alpha 2 loses fd flags on original. */
+ int flags = fcntl (fd, F_GETFD);
+ if (flags < 0)
+ result = -1;
+ else
+ {
+ result = fcntl (fd, F_DUPFD, target);
+ if (0 <= result && fcntl (fd, F_SETFD, flags) == -1)
+ {
+ int saved_errno = errno;
+ close (result);
+ result = -1;
+ errno = saved_errno;
+ }
+# if REPLACE_FCHDIR
+ if (0 <= result)
+ result = _gl_register_dup (fd, result);
+# endif
+ }
+ }
+#else
+ result = fcntl (fd, F_DUPFD, target);
+#endif
+ return result;
+}
+
+static int
+rpl_fcntl_DUPFD_CLOEXEC (int fd, int target)
+{
+ int result;
+#if !HAVE_FCNTL
+ result = dupfd (fd, target, O_CLOEXEC);
+#else /* HAVE_FCNTL */
+# if defined __NetBSD__ || defined __HAIKU__
+ /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target)
+ has only the same effect as fcntl (fd, F_DUPFD, target). */
+ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets
+ the FD_CLOEXEC flag on fd, not on target. Therefore avoid the
+ system fcntl in this case. */
+# define have_dupfd_cloexec -1
+# else
+ /* Try the system call first, if the headers claim it exists
+ (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we
+ may be running with a glibc that has the macro but with an
+ older kernel that does not support it. Cache the
+ information on whether the system call really works, but
+ avoid caching failure if the corresponding F_DUPFD fails
+ for any reason. 0 = unknown, 1 = yes, -1 = no. */
+ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0;
+ if (0 <= have_dupfd_cloexec)
+ {
+ result = fcntl (fd, F_DUPFD_CLOEXEC, target);
+ if (0 <= result || errno != EINVAL)
+ {
+ have_dupfd_cloexec = 1;
+# if REPLACE_FCHDIR
+ if (0 <= result)
+ result = _gl_register_dup (fd, result);
+# endif
+ }
+ else
+ {
+ result = rpl_fcntl_DUPFD (fd, target);
+ if (result >= 0)
+ have_dupfd_cloexec = -1;
+ }
+ }
+ else
+# endif
+ result = rpl_fcntl_DUPFD (fd, target);
+ if (0 <= result && have_dupfd_cloexec == -1)
+ {
+ int flags = fcntl (result, F_GETFD);
+ if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1)
+ {
+ int saved_errno = errno;
+ close (result);
+ errno = saved_errno;
+ result = -1;
+ }
+ }
+#endif /* HAVE_FCNTL */
+ return result;
+}
+
+#undef fcntl
+
+#ifdef __KLIBC__
+
+static int
+klibc_fcntl (int fd, int action, /* arg */...)
+{
+ va_list arg_ptr;
+ int arg;
+ struct stat sbuf;
+ int result;
+
+ va_start (arg_ptr, action);
+ arg = va_arg (arg_ptr, int);
+ result = fcntl (fd, action, arg);
+ /* EPERM for F_DUPFD, ENOTSUP for others */
+ if (result == -1 && (errno == EPERM || errno == ENOTSUP)
+ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode))
+ {
+ ULONG ulMode;
+
+ switch (action)
+ {
+ case F_DUPFD:
+ /* Find available fd */
+ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF)
+ arg++;
+
+ result = dup2 (fd, arg);
+ break;
+
+ /* Using underlying APIs is right ? */
+ case F_GETFD:
+ if (DosQueryFHState (fd, &ulMode))
+ break;
+
+ result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0;
+ break;
+
+ case F_SETFD:
+ if (arg & ~FD_CLOEXEC)
+ break;
+
+ if (DosQueryFHState (fd, &ulMode))
+ break;
+
+ if (arg & FD_CLOEXEC)
+ ulMode |= OPEN_FLAGS_NOINHERIT;
+ else
+ ulMode &= ~OPEN_FLAGS_NOINHERIT;
+
+ /* Filter supported flags. */
+ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR
+ | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT);
+
+ if (DosSetFHState (fd, ulMode))
+ break;
+
+ result = 0;
+ break;
+
+ case F_GETFL:
+ result = 0;
+ break;
+
+ case F_SETFL:
+ if (arg != 0)
+ break;
+
+ result = 0;
+ break;
+
+ default:
+ errno = EINVAL;
+ break;
+ }
+ }
+
+ va_end (arg_ptr);
+
+ return result;
+}
+
+#endif
diff --git a/lib/fcntl.in.h b/lib/fcntl.in.h
new file mode 100644
index 0000000..e034eaf
--- /dev/null
+++ b/lib/fcntl.in.h
@@ -0,0 +1,445 @@
+/* Like <fcntl.h>, but with non-working flags defined to 0.
+
+ Copyright (C) 2006-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Paul Eggert */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_system_fcntl_h
+/* Special invocation convention. */
+
+/* Needed before <sys/stat.h>.
+ May also define off_t to a 64-bit type on native Windows. */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+ <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
+ But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+ extern "C" { ... } block, which leads to errors in C++ mode with the
+ overridden <sys/stat.h> from gnulib. These errors are known to be gone
+ with g++ version >= 4.3. */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
+# include <sys/stat.h>
+#endif
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+/* Native Windows platforms declare open(), creat() in <io.h>. */
+#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_FCNTL_H
+
+/* Needed before <sys/stat.h>.
+ May also define off_t to a 64-bit type on native Windows. */
+#include <sys/types.h>
+/* On some systems other than glibc, <sys/stat.h> is a prerequisite of
+ <fcntl.h>. On glibc systems, we would like to avoid namespace pollution.
+ But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an
+ extern "C" { ... } block, which leads to errors in C++ mode with the
+ overridden <sys/stat.h> from gnulib. These errors are known to be gone
+ with g++ version >= 4.3. */
+#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))))
+# include <sys/stat.h>
+#endif
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_FCNTL_H@
+
+/* Native Windows platforms declare open(), creat() in <io.h>. */
+#if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+#ifndef _@GUARD_PREFIX@_FCNTL_H
+#define _@GUARD_PREFIX@_FCNTL_H
+
+#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */
+# include <unistd.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
+/* Declare overridden functions. */
+
+#if @GNULIB_CREAT@
+# if @REPLACE_CREAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef creat
+# define creat rpl_creat
+# endif
+_GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef creat
+# define creat _creat
+# endif
+_GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (creat);
+#elif defined GNULIB_POSIXCHECK
+# undef creat
+/* Assume creat is always declared. */
+_GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - "
+ "use gnulib module creat for portability");
+#elif @GNULIB_MDA_CREAT@
+/* On native Windows, map 'creat' to '_creat', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::creat always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef creat
+# define creat _creat
+# endif
+/* Need to cast, because in mingw the last argument is 'int mode'. */
+_GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (creat);
+#endif
+
+#if @GNULIB_FCNTL@
+# if @REPLACE_FCNTL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fcntl
+# define fcntl rpl_fcntl
+# endif
+_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...));
+_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...));
+# if !GNULIB_defined_rpl_fcntl
+# define GNULIB_defined_rpl_fcntl 1
+# endif
+# else
+# if !@HAVE_FCNTL@
+_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...));
+# if !GNULIB_defined_fcntl
+# define GNULIB_defined_fcntl 1
+# endif
+# endif
+_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...));
+# endif
+_GL_CXXALIASWARN (fcntl);
+#elif defined GNULIB_POSIXCHECK
+# undef fcntl
+# if HAVE_RAW_DECL_FCNTL
+_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - "
+ "use gnulib module fcntl for portability");
+# endif
+#endif
+
+#if @GNULIB_OPEN@
+# if @REPLACE_OPEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef open
+# define open rpl_open
+# endif
+_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef open
+# define open _open
+# endif
+_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a
+ default argument. _GL_CXXALIASWARN does not work in this case. */
+# if !defined __hpux
+_GL_CXXALIASWARN (open);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef open
+/* Assume open is always declared. */
+_GL_WARN_ON_USE (open, "open is not always POSIX compliant - "
+ "use gnulib module open for portability");
+#elif @GNULIB_MDA_OPEN@
+/* On native Windows, map 'open' to '_open', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::open always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef open
+# define open _open
+# endif
+_GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...));
+# else
+_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+# endif
+# if !defined __hpux
+_GL_CXXALIASWARN (open);
+# endif
+#endif
+
+#if @GNULIB_OPENAT@
+# if @REPLACE_OPENAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef openat
+# define openat rpl_openat
+# endif
+_GL_FUNCDECL_RPL (openat, int,
+ (int fd, char const *file, int flags, /* mode_t mode */ ...)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (openat, int,
+ (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# else
+# if !@HAVE_OPENAT@
+_GL_FUNCDECL_SYS (openat, int,
+ (int fd, char const *file, int flags, /* mode_t mode */ ...)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (openat, int,
+ (int fd, char const *file, int flags, /* mode_t mode */ ...));
+# endif
+_GL_CXXALIASWARN (openat);
+#elif defined GNULIB_POSIXCHECK
+# undef openat
+# if HAVE_RAW_DECL_OPENAT
+_GL_WARN_ON_USE (openat, "openat is not portable - "
+ "use gnulib module openat for portability");
+# endif
+#endif
+
+
+/* Fix up the FD_* macros, only known to be missing on mingw. */
+
+#ifndef FD_CLOEXEC
+# define FD_CLOEXEC 1
+#endif
+
+/* Fix up the supported F_* macros. Intentionally leave other F_*
+ macros undefined. Only known to be missing on mingw. */
+
+#ifndef F_DUPFD_CLOEXEC
+# define F_DUPFD_CLOEXEC 0x40000000
+/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */
+# define GNULIB_defined_F_DUPFD_CLOEXEC 1
+#else
+# define GNULIB_defined_F_DUPFD_CLOEXEC 0
+#endif
+
+#ifndef F_DUPFD
+# define F_DUPFD 1
+#endif
+
+#ifndef F_GETFD
+# define F_GETFD 2
+#endif
+
+/* Fix up the O_* macros. */
+
+/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT
+ to values outside 'int' range, so omit these misdefinitions.
+ But avoid namespace pollution on non-AIX systems. */
+#ifdef _AIX
+# include <limits.h>
+# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX)
+# undef O_CLOEXEC
+# endif
+# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX)
+# undef O_NOFOLLOW
+# endif
+# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX)
+# undef O_TTY_INIT
+# endif
+#endif
+
+#if !defined O_DIRECT && defined O_DIRECTIO
+/* Tru64 spells it 'O_DIRECTIO'. */
+# define O_DIRECT O_DIRECTIO
+#endif
+
+#if !defined O_CLOEXEC && defined O_NOINHERIT
+/* Mingw spells it 'O_NOINHERIT'. */
+# define O_CLOEXEC O_NOINHERIT
+#endif
+
+#ifndef O_CLOEXEC
+# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */
+# define GNULIB_defined_O_CLOEXEC 1
+#else
+# define GNULIB_defined_O_CLOEXEC 0
+#endif
+
+#ifndef O_DIRECT
+# define O_DIRECT 0
+#endif
+
+#ifndef O_DIRECTORY
+# define O_DIRECTORY 0
+#endif
+
+#ifndef O_DSYNC
+# define O_DSYNC 0
+#endif
+
+#ifndef O_EXEC
+# define O_EXEC O_RDONLY /* This is often close enough in older systems. */
+#endif
+
+#ifndef O_IGNORE_CTTY
+# define O_IGNORE_CTTY 0
+#endif
+
+#ifndef O_NDELAY
+# define O_NDELAY 0
+#endif
+
+#ifndef O_NOATIME
+# define O_NOATIME 0
+#endif
+
+#ifndef O_NONBLOCK
+# define O_NONBLOCK O_NDELAY
+#endif
+
+/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero
+ value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY
+ or to 0 as fallback. */
+#if @GNULIB_NONBLOCKING@
+# if O_NONBLOCK
+# define GNULIB_defined_O_NONBLOCK 0
+# else
+# define GNULIB_defined_O_NONBLOCK 1
+# undef O_NONBLOCK
+# define O_NONBLOCK 0x40000000
+# endif
+#endif
+
+#ifndef O_NOCTTY
+# define O_NOCTTY 0
+#endif
+
+#ifndef O_NOFOLLOW
+# define O_NOFOLLOW 0
+#endif
+
+#ifndef O_NOLINK
+# define O_NOLINK 0
+#endif
+
+#ifndef O_NOLINKS
+# define O_NOLINKS 0
+#endif
+
+#ifndef O_NOTRANS
+# define O_NOTRANS 0
+#endif
+
+#ifndef O_RSYNC
+# define O_RSYNC 0
+#endif
+
+#ifndef O_SEARCH
+# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */
+#endif
+
+#ifndef O_SYNC
+# define O_SYNC 0
+#endif
+
+#ifndef O_TTY_INIT
+# define O_TTY_INIT 0
+#endif
+
+#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+# undef O_ACCMODE
+# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+ O_BINARY is usually declared in fcntl.h */
+#if !defined O_BINARY && defined _O_BINARY
+ /* For MSC-compatible compilers. */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+
+#if defined __BEOS__ || defined __HAIKU__
+ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+# define O_TEXT 0
+#endif
+
+/* Fix up the AT_* macros. */
+
+/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its
+ value exceeds INT_MAX, so its use as an int doesn't conform to the
+ C standard, and GCC and Sun C complain in some cases. If the bug
+ is present, undef AT_FDCWD here, so it can be redefined below. */
+#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553
+# undef AT_FDCWD
+#endif
+
+/* Use the same bit pattern as Solaris 9, but with the proper
+ signedness. The bit pattern is important, in case this actually is
+ Solaris with the above workaround. */
+#ifndef AT_FDCWD
+# define AT_FDCWD (-3041965)
+#endif
+
+/* Use the same values as Solaris 9. This shouldn't matter, but
+ there's no real reason to differ. */
+#ifndef AT_SYMLINK_NOFOLLOW
+# define AT_SYMLINK_NOFOLLOW 4096
+#endif
+
+#ifndef AT_REMOVEDIR
+# define AT_REMOVEDIR 1
+#endif
+
+/* Solaris 9 lacks these two, so just pick unique values. */
+#ifndef AT_SYMLINK_FOLLOW
+# define AT_SYMLINK_FOLLOW 2
+#endif
+
+#ifndef AT_EACCESS
+# define AT_EACCESS 4
+#endif
+
+/* Ignore this flag if not supported. */
+#ifndef AT_NO_AUTOMOUNT
+# define AT_NO_AUTOMOUNT 0
+#endif
+
+#endif /* _@GUARD_PREFIX@_FCNTL_H */
+#endif /* _@GUARD_PREFIX@_FCNTL_H */
+#endif
diff --git a/lib/fd-hook.c b/lib/fd-hook.c
new file mode 100644
index 0000000..3626115
--- /dev/null
+++ b/lib/fd-hook.c
@@ -0,0 +1,116 @@
+/* Hook for making file descriptor functions close(), ioctl() extensible.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2009.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "fd-hook.h"
+
+#include <stdlib.h>
+
+/* Currently, this entire code is only needed for the handling of sockets
+ on native Windows platforms. */
+#if WINDOWS_SOCKETS
+
+/* The first and last link in the doubly linked list.
+ Initially the list is empty. */
+static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL };
+
+int
+execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary,
+ int fd)
+{
+ if (remaining_list == &anchor)
+ /* End of list reached. */
+ return primary (fd);
+ else
+ return remaining_list->private_close_fn (remaining_list->private_next,
+ primary, fd);
+}
+
+int
+execute_all_close_hooks (gl_close_fn primary, int fd)
+{
+ return execute_close_hooks (anchor.private_next, primary, fd);
+}
+
+int
+execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary,
+ int fd, int request, void *arg)
+{
+ if (remaining_list == &anchor)
+ /* End of list reached. */
+ return primary (fd, request, arg);
+ else
+ return remaining_list->private_ioctl_fn (remaining_list->private_next,
+ primary, fd, request, arg);
+}
+
+int
+execute_all_ioctl_hooks (gl_ioctl_fn primary,
+ int fd, int request, void *arg)
+{
+ return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg);
+}
+
+void
+register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link)
+{
+ if (close_hook == NULL)
+ close_hook = execute_close_hooks;
+ if (ioctl_hook == NULL)
+ ioctl_hook = execute_ioctl_hooks;
+
+ if (link->private_next == NULL && link->private_prev == NULL)
+ {
+ /* Add the link to the doubly linked list. */
+ link->private_next = anchor.private_next;
+ link->private_prev = &anchor;
+ link->private_close_fn = close_hook;
+ link->private_ioctl_fn = ioctl_hook;
+ anchor.private_next->private_prev = link;
+ anchor.private_next = link;
+ }
+ else
+ {
+ /* The link is already in use. */
+ if (link->private_close_fn != close_hook
+ || link->private_ioctl_fn != ioctl_hook)
+ abort ();
+ }
+}
+
+void
+unregister_fd_hook (struct fd_hook *link)
+{
+ struct fd_hook *next = link->private_next;
+ struct fd_hook *prev = link->private_prev;
+
+ if (next != NULL && prev != NULL)
+ {
+ /* The link is in use. Remove it from the doubly linked list. */
+ prev->private_next = next;
+ next->private_prev = prev;
+ /* Clear the link, to mark it unused. */
+ link->private_next = NULL;
+ link->private_prev = NULL;
+ link->private_close_fn = NULL;
+ link->private_ioctl_fn = NULL;
+ }
+}
+
+#endif
diff --git a/lib/fd-hook.h b/lib/fd-hook.h
new file mode 100644
index 0000000..6bf3c24
--- /dev/null
+++ b/lib/fd-hook.h
@@ -0,0 +1,119 @@
+/* Hook for making file descriptor functions close(), ioctl() extensible.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+
+#ifndef FD_HOOK_H
+#define FD_HOOK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Currently, this entire code is only needed for the handling of sockets
+ on native Windows platforms. */
+#if WINDOWS_SOCKETS
+
+
+/* Type of function that closes FD. */
+typedef int (*gl_close_fn) (int fd);
+
+/* Type of function that applies a control request to FD. */
+typedef int (*gl_ioctl_fn) (int fd, int request, void *arg);
+
+/* An element of the list of file descriptor hooks.
+ In CLOS (Common Lisp Object System) speak, it consists of an "around"
+ method for the close() function and an "around" method for the ioctl()
+ function.
+ The fields of this structure are considered private. */
+struct fd_hook
+{
+ /* Doubly linked list. */
+ struct fd_hook *private_next;
+ struct fd_hook *private_prev;
+ /* Function that treats the types of FD that it knows about and calls
+ execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */
+ int (*private_close_fn) (const struct fd_hook *remaining_list,
+ gl_close_fn primary,
+ int fd);
+ /* Function that treats the types of FD that it knows about and calls
+ execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a
+ fallback. */
+ int (*private_ioctl_fn) (const struct fd_hook *remaining_list,
+ gl_ioctl_fn primary,
+ int fd, int request, void *arg);
+};
+
+/* This type of function closes FD, applying special knowledge for the FD
+ types it knows about, and calls
+ execute_close_hooks (REMAINING_LIST, PRIMARY, FD)
+ for the other FD types.
+ In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+ and PRIMARY is the "primary" method for close(). */
+typedef int (*close_hook_fn) (const struct fd_hook *remaining_list,
+ gl_close_fn primary,
+ int fd);
+
+/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+ Return 0 or -1, like close() would do. */
+extern int execute_close_hooks (const struct fd_hook *remaining_list,
+ gl_close_fn primary,
+ int fd);
+
+/* Execute all close hooks, with PRIMARY as "primary" method.
+ Return 0 or -1, like close() would do. */
+extern int execute_all_close_hooks (gl_close_fn primary, int fd);
+
+/* This type of function applies a control request to FD, applying special
+ knowledge for the FD types it knows about, and calls
+ execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG)
+ for the other FD types.
+ In CLOS speak, REMAINING_LIST is the remaining list of "around" methods,
+ and PRIMARY is the "primary" method for ioctl(). */
+typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list,
+ gl_ioctl_fn primary,
+ int fd, int request, void *arg);
+
+/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method.
+ Return 0 or -1, like ioctl() would do. */
+extern int execute_ioctl_hooks (const struct fd_hook *remaining_list,
+ gl_ioctl_fn primary,
+ int fd, int request, void *arg);
+
+/* Execute all ioctl hooks, with PRIMARY as "primary" method.
+ Return 0 or -1, like ioctl() would do. */
+extern int execute_all_ioctl_hooks (gl_ioctl_fn primary,
+ int fd, int request, void *arg);
+
+/* Add a function pair to the list of file descriptor hooks.
+ CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change.
+ The LINK variable points to a piece of memory which is guaranteed to be
+ accessible until the corresponding call to unregister_fd_hook. */
+extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook,
+ struct fd_hook *link);
+
+/* Removes a hook from the list of file descriptor hooks. */
+extern void unregister_fd_hook (struct fd_hook *link);
+
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FD_HOOK_H */
diff --git a/lib/filename.h b/lib/filename.h
new file mode 100644
index 0000000..a2400a9
--- /dev/null
+++ b/lib/filename.h
@@ -0,0 +1,112 @@
+/* Basic filename support macros.
+ Copyright (C) 2001-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* From Paul Eggert and Jim Meyering. */
+
+#ifndef _FILENAME_H
+#define _FILENAME_H
+
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Filename support.
+ ISSLASH(C) tests whether C is a directory separator
+ character.
+ HAS_DEVICE(Filename) tests whether Filename contains a device
+ specification.
+ FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification
+ at the beginning of Filename,
+ index of the part consisting of
+ alternating components and slashes.
+ FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+ 1 when a non-empty device specification
+ can be followed by an empty or relative
+ part,
+ 0 when a non-empty device specification
+ must be followed by a slash,
+ 0 when device specification don't exist.
+ IS_ABSOLUTE_FILE_NAME(Filename)
+ tests whether Filename is independent of
+ any notion of "current directory".
+ IS_RELATIVE_FILE_NAME(Filename)
+ tests whether Filename may be concatenated
+ to a directory filename.
+ Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a
+ relative file name!
+ IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device
+ or directory specification.
+ */
+#if defined _WIN32 || defined __CYGWIN__ \
+ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__
+ /* Native Windows, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+ /* Internal macro: Tests whether a character is a drive letter. */
+# define _IS_DRIVE_LETTER(C) \
+ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z'))
+ /* Help the compiler optimizing it. This assumes ASCII. */
+# undef _IS_DRIVE_LETTER
+# define _IS_DRIVE_LETTER(C) \
+ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a')
+# define HAS_DEVICE(Filename) \
+ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':')
+# define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0)
+# ifdef __CYGWIN__
+# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
+# else
+ /* On native Windows, OS/2, DOS, the system has the notion of a
+ "current directory" on each drive. */
+# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1
+# endif
+# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+# define IS_ABSOLUTE_FILE_NAME(Filename) \
+ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)])
+# else
+# define IS_ABSOLUTE_FILE_NAME(Filename) \
+ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))
+# endif
+# define IS_RELATIVE_FILE_NAME(Filename) \
+ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)))
+# define IS_FILE_NAME_WITH_DIR(Filename) \
+ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \
+ || HAS_DEVICE (Filename))
+#else
+ /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define HAS_DEVICE(Filename) ((void) (Filename), 0)
+# define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0)
+# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
+# define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0])
+# define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0]))
+# define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL)
+#endif
+
+/* Deprecated macros. For backward compatibility with old users of the
+ 'filename' module. */
+#define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME
+#define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FILENAME_H */
diff --git a/lib/fpending.c b/lib/fpending.c
new file mode 100644
index 0000000..e57155e
--- /dev/null
+++ b/lib/fpending.c
@@ -0,0 +1,63 @@
+/* fpending.c -- return the number of pending output bytes on a stream
+ Copyright (C) 2000, 2004, 2006-2007, 2009-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification. */
+#include "fpending.h"
+
+#include "stdio-impl.h"
+
+/* This file is not used on systems that already have the __fpending function,
+ namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34,
+ Android API >= 23. */
+
+/* Return the number of pending (aka buffered, unflushed)
+ bytes on the stream, FP, that is open for writing. */
+size_t
+__fpending (FILE *fp)
+{
+ /* Most systems provide FILE as a struct and the necessary bitmask in
+ <stdio.h>, because they need it for implementing getc() and putc() as
+ fast macros. */
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
+ return fp->_IO_write_ptr - fp->_IO_write_base;
+#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */
+ return fp_->_p - fp_->_bf._base;
+#elif defined __EMX__ /* emx+gcc */
+ return fp->_ptr - fp->_buffer;
+#elif defined __minix /* Minix */
+ return fp_->_ptr - fp_->_buf;
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */
+ return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0);
+#elif defined __UCLIBC__ /* uClibc */
+ return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0);
+#elif defined __QNX__ /* QNX */
+ return (fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0);
+#elif defined __MINT__ /* Atari FreeMiNT */
+ return fp->__bufp - fp->__buffer;
+#elif defined EPLAN9 /* Plan9 */
+ return fp->wp - fp->buf;
+#else
+# error "Please port gnulib fpending.c to your platform!"
+ return 1;
+#endif
+}
diff --git a/lib/fpending.h b/lib/fpending.h
new file mode 100644
index 0000000..5e860db
--- /dev/null
+++ b/lib/fpending.h
@@ -0,0 +1,29 @@
+/* Declare __fpending.
+
+ Copyright (C) 2000, 2003, 2005-2006, 2009-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+ Written by Jim Meyering. */
+
+#include <stddef.h>
+#include <stdio.h>
+#if HAVE_STDIO_EXT_H
+# include <stdio_ext.h>
+#endif
+
+#if !HAVE_DECL___FPENDING
+size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE;
+#endif
diff --git a/lib/free.c b/lib/free.c
new file mode 100644
index 0000000..372a6b0
--- /dev/null
+++ b/lib/free.c
@@ -0,0 +1,53 @@
+/* Make free() preserve errno.
+
+ Copyright (C) 2003, 2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Paul Eggert */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdlib.h>
+
+/* A function definition is only needed if HAVE_FREE_POSIX is not defined. */
+#if !HAVE_FREE_POSIX
+
+# include <errno.h>
+
+void
+rpl_free (void *p)
+# undef free
+{
+# if defined __GNUC__ && !defined __clang__
+ /* An invalid GCC optimization
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396>
+ would optimize away the assignments in the code below, when link-time
+ optimization (LTO) is enabled. Make the code more complicated, so that
+ GCC does not grok how to optimize it. */
+ int err[2];
+ err[0] = errno;
+ err[1] = errno;
+ errno = 0;
+ free (p);
+ errno = err[errno == 0];
+# else
+ int err = errno;
+ free (p);
+ errno = err;
+# endif
+}
+
+#endif
diff --git a/lib/fstat.c b/lib/fstat.c
new file mode 100644
index 0000000..6a23500
--- /dev/null
+++ b/lib/fstat.c
@@ -0,0 +1,94 @@
+/* fstat() replacement.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+ the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to
+ rpl_fstat. */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+/* Get the original definition of fstat. It might be defined as a macro. */
+#include <sys/types.h>
+#include <sys/stat.h>
+#undef __need_system_sys_stat_h
+
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WINDOWS_NATIVE
+#endif
+
+#if !defined WINDOWS_NATIVE
+
+static int
+orig_fstat (int fd, struct stat *buf)
+{
+ return fstat (fd, buf);
+}
+
+#endif
+
+/* Specification. */
+#ifdef __osf__
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+ eliminates this include because of the preliminary #include <sys/stat.h>
+ above. */
+# include "sys/stat.h"
+#else
+# include <sys/stat.h>
+#endif
+
+#include "stat-time.h"
+
+#include <errno.h>
+#include <unistd.h>
+#ifdef WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+# include "stat-w32.h"
+#endif
+
+int
+rpl_fstat (int fd, struct stat *buf)
+{
+#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY
+ /* Handle the case when rpl_open() used a dummy file descriptor to work
+ around an open() that can't normally visit directories. */
+ const char *name = _gl_directory_name (fd);
+ if (name != NULL)
+ return stat (name, buf);
+#endif
+
+#ifdef WINDOWS_NATIVE
+ /* Fill the fields ourselves, because the original fstat function returns
+ values for st_atime, st_mtime, st_ctime that depend on the current time
+ zone. See
+ <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+ return _gl_fstat_by_handle (h, NULL, buf);
+#else
+ return stat_time_normalize (orig_fstat (fd, buf), buf);
+#endif
+}
diff --git a/lib/fsync.c b/lib/fsync.c
new file mode 100644
index 0000000..5131466
--- /dev/null
+++ b/lib/fsync.c
@@ -0,0 +1,87 @@
+/* Emulate fsync on platforms that lack it, primarily Windows and
+ cross-compilers like MinGW.
+
+ This is derived from sqlite3 sources.
+ https://www.sqlite.org/src/finfo?name=src/os_win.c
+ https://www.sqlite.org/copyright.html
+
+ Written by Richard W.M. Jones <rjones.at.redhat.com>
+
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* FlushFileBuffers */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+# include <errno.h>
+
+/* Get _get_osfhandle. */
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+int
+fsync (int fd)
+{
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+ DWORD err;
+
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+
+ if (!FlushFileBuffers (h))
+ {
+ /* Translate some Windows errors into rough approximations of Unix
+ * errors. MSDN is useless as usual - in this case it doesn't
+ * document the full range of errors.
+ */
+ err = GetLastError ();
+ switch (err)
+ {
+ case ERROR_ACCESS_DENIED:
+ /* For a read-only handle, fsync should succeed, even though we have
+ no way to sync the access-time changes. */
+ return 0;
+
+ /* eg. Trying to fsync a tty. */
+ case ERROR_INVALID_HANDLE:
+ errno = EINVAL;
+ break;
+
+ default:
+ errno = EIO;
+ }
+ return -1;
+ }
+
+ return 0;
+}
+
+#else /* !Windows */
+
+# error "This platform lacks fsync function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib."
+
+#endif /* !Windows */
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
new file mode 100644
index 0000000..ac2d175
--- /dev/null
+++ b/lib/getdtablesize.c
@@ -0,0 +1,124 @@
+/* getdtablesize() function: Return maximum possible file descriptor value + 1.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+# include <stdio.h>
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+# endif
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+_setmaxstdio_nothrow (int newmax)
+{
+ int result;
+
+ TRY_MSVC_INVAL
+ {
+ result = _setmaxstdio (newmax);
+ }
+ CATCH_MSVC_INVAL
+ {
+ result = -1;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+# else
+# define _setmaxstdio_nothrow _setmaxstdio
+# endif
+
+/* Cache for the previous getdtablesize () result. Safe to cache because
+ Windows also lacks setrlimit. */
+static int dtablesize;
+
+int
+getdtablesize (void)
+{
+ if (dtablesize == 0)
+ {
+ /* We are looking for the number N such that the valid file descriptors
+ are 0..N-1. It can be obtained through a loop as follows:
+ {
+ int fd;
+ for (fd = 3; fd < 65536; fd++)
+ if (dup2 (0, fd) == -1)
+ break;
+ return fd;
+ }
+ On Windows XP, the result is 2048.
+ The drawback of this loop is that it allocates memory for a libc
+ internal array that is never freed.
+
+ The number N can also be obtained as the upper bound for
+ _getmaxstdio (). _getmaxstdio () returns the maximum number of open
+ FILE objects. The sanity check in _setmaxstdio reveals the maximum
+ number of file descriptors. This too allocates memory, but it is
+ freed when we call _setmaxstdio with the original value. */
+ int orig_max_stdio = _getmaxstdio ();
+ unsigned int bound;
+ for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2)
+ ;
+ _setmaxstdio_nothrow (orig_max_stdio);
+ dtablesize = bound;
+ }
+ return dtablesize;
+}
+
+#else
+
+# include <limits.h>
+# include <sys/resource.h>
+
+# ifndef RLIM_SAVED_CUR
+# define RLIM_SAVED_CUR RLIM_INFINITY
+# endif
+# ifndef RLIM_SAVED_MAX
+# define RLIM_SAVED_MAX RLIM_INFINITY
+# endif
+
+# ifdef __CYGWIN__
+ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it
+ hits the compile-time constant hard limit of 3200. We might as
+ well just report the hard limit. */
+# define rlim_cur rlim_max
+# endif
+
+int
+getdtablesize (void)
+{
+ struct rlimit lim;
+
+ if (getrlimit (RLIMIT_NOFILE, &lim) == 0
+ && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX
+ && lim.rlim_cur != RLIM_INFINITY
+ && lim.rlim_cur != RLIM_SAVED_CUR
+ && lim.rlim_cur != RLIM_SAVED_MAX)
+ return lim.rlim_cur;
+
+ return INT_MAX;
+}
+
+#endif
diff --git a/lib/getopt-cdefs.in.h b/lib/getopt-cdefs.in.h
new file mode 100644
index 0000000..e76c78c
--- /dev/null
+++ b/lib/getopt-cdefs.in.h
@@ -0,0 +1,66 @@
+/* getopt-on-non-glibc compatibility macros.
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of gnulib.
+ Unlike most of the getopt implementation, it is NOT shared
+ with the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_CDEFS_H
+#define _GETOPT_CDEFS_H 1
+
+/* This header should not be used directly; include getopt.h or
+ unistd.h instead. It does not have a protective #error, because
+ the guard macro for getopt.h in gnulib is not fixed. */
+
+/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect
+ a number of the internal macros supplied to GNU libc's headers by
+ sys/cdefs.h. Provide fallback definitions for all of them. */
+#if @HAVE_SYS_CDEFS_H@
+# include <sys/cdefs.h>
+#endif
+
+#ifndef __BEGIN_DECLS
+# ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# else
+# define __BEGIN_DECLS /* nothing */
+# endif
+#endif
+#ifndef __END_DECLS
+# ifdef __cplusplus
+# define __END_DECLS }
+# else
+# define __END_DECLS /* nothing */
+# endif
+#endif
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_VERSION__
+# define __GNUC_PREREQ(maj, min) \
+ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
+# else
+# define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#ifndef __THROW
+# if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4)
+# define __THROW throw ()
+# else
+# define __THROW
+# endif
+#endif
+
+#endif /* _GETOPT_CDEFS_H */
diff --git a/lib/getopt-core.h b/lib/getopt-core.h
new file mode 100644
index 0000000..c5dd493
--- /dev/null
+++ b/lib/getopt-core.h
@@ -0,0 +1,96 @@
+/* Declarations for getopt (basic, portable features only).
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library and is also part of gnulib.
+ Patches to this file should be submitted to both projects.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_CORE_H
+#define _GETOPT_CORE_H 1
+
+/* This header should not be used directly; include getopt.h or
+ unistd.h instead. Unlike most bits headers, it does not have
+ a protective #error, because the guard macro for getopt.h in
+ gnulib is not fixed. */
+
+__BEGIN_DECLS
+
+/* For communication from 'getopt' to the caller.
+ When 'getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when 'ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to 'getopt'.
+
+ On entry to 'getopt', zero means this is the first call; initialize.
+
+ When 'getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, 'optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message 'getopt' prints
+ for unrecognized options. */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized. */
+
+extern int optopt;
+
+/* Get definitions and prototypes for functions to process the
+ arguments in ARGV (ARGC of them, minus the program name) for
+ options given in OPTS.
+
+ Return the option character from OPTS just read. Return -1 when
+ there are no more options. For unrecognized options, or options
+ missing arguments, 'optopt' is set to the option letter, and '?' is
+ returned.
+
+ The OPTS string is a list of characters which are recognized option
+ letters, optionally followed by colons, specifying that that letter
+ takes an argument, to be placed in 'optarg'.
+
+ If a letter in OPTS is followed by two colons, its argument is
+ optional. This behavior is specific to the GNU 'getopt'.
+
+ The argument '--' causes premature termination of argument
+ scanning, explicitly telling 'getopt' that there are no more
+ options.
+
+ If OPTS begins with '-', then non-option arguments are treated as
+ arguments to the option '\1'. This behavior is specific to the GNU
+ 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in
+ the environment, then do not permute arguments.
+
+ For standards compliance, the 'argv' argument has the type
+ char *const *, but this is inaccurate; if argument permutation is
+ enabled, the argv array (not the strings it points to) must be
+ writable. */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+ __THROW _GL_ARG_NONNULL ((2, 3));
+
+__END_DECLS
+
+#endif /* _GETOPT_CORE_H */
diff --git a/lib/getopt-ext.h b/lib/getopt-ext.h
new file mode 100644
index 0000000..d37c293
--- /dev/null
+++ b/lib/getopt-ext.h
@@ -0,0 +1,77 @@
+/* Declarations for getopt (GNU extensions).
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library and is also part of gnulib.
+ Patches to this file should be submitted to both projects.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_EXT_H
+#define _GETOPT_EXT_H 1
+
+/* This header should not be used directly; include getopt.h instead.
+ Unlike most bits headers, it does not have a protective #error,
+ because the guard macro for getopt.h in gnulib is not fixed. */
+
+__BEGIN_DECLS
+
+/* Describe the long-named options requested by the application.
+ The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+ of 'struct option' terminated by an element containing a name which is
+ zero.
+
+ The field 'has_arg' is:
+ no_argument (or 0) if the option does not take an argument,
+ required_argument (or 1) if the option requires an argument,
+ optional_argument (or 2) if the option takes an optional argument.
+
+ If the field 'flag' is not NULL, it points to a variable that is set
+ to the value given in the field 'val' when the option is found, but
+ left unchanged if the option is not found.
+
+ To have a long-named option do something other than set an 'int' to
+ a compiled-in constant, such as set a value from 'optarg', set the
+ option's 'flag' field to zero and its 'val' field to a nonzero
+ value (the equivalent single-letter option character, if there is
+ one). For long options that have a zero 'flag' field, 'getopt'
+ returns the contents of the 'val' field. */
+
+struct option
+{
+ const char *name;
+ /* has_arg can't be an enum because some compilers complain about
+ type mismatches in all the code that assumes it is an int. */
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+/* Names for the values of the 'has_arg' field of 'struct option'. */
+
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind)
+ __THROW _GL_ARG_NONNULL ((2, 3));
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind)
+ __THROW _GL_ARG_NONNULL ((2, 3));
+
+__END_DECLS
+
+#endif /* _GETOPT_EXT_H */
diff --git a/lib/getopt-pfx-core.h b/lib/getopt-pfx-core.h
new file mode 100644
index 0000000..095e393
--- /dev/null
+++ b/lib/getopt-pfx-core.h
@@ -0,0 +1,66 @@
+/* getopt (basic, portable features) gnulib wrapper header.
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of gnulib.
+ Unlike most of the getopt implementation, it is NOT shared
+ with the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_PFX_CORE_H
+#define _GETOPT_PFX_CORE_H 1
+
+/* This header should not be used directly; include getopt.h or
+ unistd.h instead. It does not have a protective #error, because
+ the guard macro for getopt.h in gnulib is not fixed. */
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+ identifier that prefixes the external functions and variables
+ defined in getopt-core.h and getopt-ext.h. Systematically
+ rename identifiers so that they do not collide with the system
+ functions and variables. Renaming avoids problems with some
+ compilers and linkers. */
+#ifdef __GETOPT_PREFIX
+# ifndef __GETOPT_ID
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# endif
+# undef getopt
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# define getopt __GETOPT_ID (getopt)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+
+/* Work around a problem on macOS, which declares getopt with a
+ trailing __DARWIN_ALIAS(getopt) that would expand to something like
+ __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following
+ hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */
+# ifdef __APPLE__
+# define _GETOPT
+# endif
+
+/* The system's getopt.h may have already included getopt-core.h to
+ declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that
+ getopt-core.h declares them with prefixes. */
+# undef _GETOPT_CORE_H
+#endif
+
+#include <getopt-core.h>
+
+#endif /* _GETOPT_PFX_CORE_H */
diff --git a/lib/getopt-pfx-ext.h b/lib/getopt-pfx-ext.h
new file mode 100644
index 0000000..8578d72
--- /dev/null
+++ b/lib/getopt-pfx-ext.h
@@ -0,0 +1,70 @@
+/* getopt (GNU extensions) gnulib wrapper header.
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of gnulib.
+ Unlike most of the getopt implementation, it is NOT shared
+ with the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_PFX_EXT_H
+#define _GETOPT_PFX_EXT_H 1
+
+/* This header should not be used directly; include getopt.h instead.
+ It does not have a protective #error, because the guard macro for
+ getopt.h in gnulib is not fixed. */
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+ identifier that prefixes the external functions and variables
+ defined in getopt-core.h and getopt-ext.h. Systematically
+ rename identifiers so that they do not collide with the system
+ functions and variables. Renaming avoids problems with some
+ compilers and linkers. */
+#ifdef __GETOPT_PREFIX
+# ifndef __GETOPT_ID
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# endif
+# undef getopt_long
+# undef getopt_long_only
+# undef option
+# undef _getopt_internal
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+
+/* The system's getopt.h may have already included getopt-ext.h to
+ declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that
+ getopt-ext.h declares them with prefixes. */
+# undef _GETOPT_EXT_H
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+ getopt_long_only; they declare "char **argv". For backward
+ compatibility with old applications, if __GETOPT_PREFIX is not
+ defined, we supply GNU-libc-compatible, but incorrect, prototypes
+ using "char *const *argv". (GNU libc is stuck with the incorrect
+ prototypes, as they are baked into older versions of LSB.) */
+#ifndef __getopt_argv_const
+# if defined __GETOPT_PREFIX
+# define __getopt_argv_const /* empty */
+# else
+# define __getopt_argv_const const
+# endif
+#endif
+
+#include <getopt-ext.h>
+
+#endif /* _GETOPT_PFX_EXT_H */
diff --git a/lib/getopt.c b/lib/getopt.c
new file mode 100644
index 0000000..1e2441c
--- /dev/null
+++ b/lib/getopt.c
@@ -0,0 +1,811 @@
+/* Getopt for GNU.
+ Copyright (C) 1987-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library and is also part of gnulib.
+ Patches to this file should be submitted to both projects.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include "getopt.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifdef _LIBC
+/* When used as part of glibc, error printing must be done differently
+ for standards compliance. getopt is not a cancellation point, so
+ it must not call functions that are, and it is specified by an
+ older standard than stdio locking, so it must not refer to
+ functions in the "user namespace" related to stdio locking.
+ Finally, it must use glibc's internal message translation so that
+ the messages are looked up in the proper text domain. */
+# include <libintl.h>
+# define fprintf __fxprintf_nocancel
+# define flockfile(fp) _IO_flockfile (fp)
+# define funlockfile(fp) _IO_funlockfile (fp)
+#else
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+/* When used standalone, flockfile and funlockfile might not be
+ available. */
+# if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \
+ || (defined _WIN32 && ! defined __CYGWIN__))
+# define flockfile(fp) /* nop */
+# define funlockfile(fp) /* nop */
+# endif
+/* When used standalone, do not attempt to use alloca. */
+# define __libc_use_alloca(size) 0
+# undef alloca
+# define alloca(size) (abort (), (void *)0)
+#endif
+
+/* This implementation of 'getopt' has three modes for handling
+ options interspersed with non-option arguments. It can stop
+ scanning for options at the first non-option argument encountered,
+ as POSIX specifies. It can continue scanning for options after the
+ first non-option argument, but permute 'argv' as it goes so that,
+ after 'getopt' is done, all the options precede all the non-option
+ arguments and 'optind' points to the first non-option argument.
+ Or, it can report non-option arguments as if they were arguments to
+ the option character '\x01'.
+
+ The default behavior of 'getopt_long' is to permute the argument list.
+ When this implementation is used standalone, the default behavior of
+ 'getopt' is to stop at the first non-option argument, but when it is
+ used as part of GNU libc it also permutes the argument list. In both
+ cases, setting the environment variable POSIXLY_CORRECT to any value
+ disables permutation.
+
+ If the first character of the OPTSTRING argument to 'getopt' or
+ 'getopt_long' is '+', both functions will stop at the first
+ non-option argument. If it is '-', both functions will report
+ non-option arguments as arguments to the option character '\x01'. */
+
+#include "getopt_int.h"
+
+/* For communication from 'getopt' to the caller.
+ When 'getopt' finds an option that takes an argument,
+ the argument value is returned here.
+ Also, when 'ordering' is RETURN_IN_ORDER,
+ each non-option ARGV-element is returned here. */
+
+char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+ This is used for communication to and from the caller
+ and for communication between successive calls to 'getopt'.
+
+ On entry to 'getopt', zero means this is the first call; initialize.
+
+ When 'getopt' returns -1, this is the index of the first of the
+ non-option elements that the caller should itself scan.
+
+ Otherwise, 'optind' communicates from one call to the next
+ how much of ARGV has been scanned so far. */
+
+/* 1003.2 says this must be 1 before any call. */
+int optind = 1;
+
+/* Callers store zero here to inhibit the error message
+ for unrecognized options. */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+ This must be initialized on some systems to avoid linking in the
+ system's own getopt implementation. */
+
+int optopt = '?';
+
+/* Keep a global copy of all internal members of getopt_data. */
+
+static struct _getopt_data getopt_data;
+
+/* Exchange two adjacent subsequences of ARGV.
+ One subsequence is elements [first_nonopt,last_nonopt)
+ which contains all the non-options that have been skipped so far.
+ The other is elements [last_nonopt,optind), which contains all
+ the options processed since those non-options were skipped.
+
+ 'first_nonopt' and 'last_nonopt' are relocated so that they describe
+ the new indices of the non-options in ARGV after they are moved. */
+
+static void
+exchange (char **argv, struct _getopt_data *d)
+{
+ int bottom = d->__first_nonopt;
+ int middle = d->__last_nonopt;
+ int top = d->optind;
+ char *tem;
+
+ /* Exchange the shorter segment with the far end of the longer segment.
+ That puts the shorter segment into the right place.
+ It leaves the longer segment in the right place overall,
+ but it consists of two parts that need to be swapped next. */
+
+ while (top > middle && middle > bottom)
+ {
+ if (top - middle > middle - bottom)
+ {
+ /* Bottom segment is the short one. */
+ int len = middle - bottom;
+ int i;
+
+ /* Swap it with the top part of the top segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[top - (middle - bottom) + i];
+ argv[top - (middle - bottom) + i] = tem;
+ }
+ /* Exclude the moved bottom segment from further swapping. */
+ top -= len;
+ }
+ else
+ {
+ /* Top segment is the short one. */
+ int len = top - middle;
+ int i;
+
+ /* Swap it with the bottom part of the bottom segment. */
+ for (i = 0; i < len; i++)
+ {
+ tem = argv[bottom + i];
+ argv[bottom + i] = argv[middle + i];
+ argv[middle + i] = tem;
+ }
+ /* Exclude the moved top segment from further swapping. */
+ bottom += len;
+ }
+ }
+
+ /* Update records for the slots the non-options now occupy. */
+
+ d->__first_nonopt += (d->optind - d->__last_nonopt);
+ d->__last_nonopt = d->optind;
+}
+
+/* Process the argument starting with d->__nextchar as a long option.
+ d->optind should *not* have been advanced over this argument.
+
+ If the value returned is -1, it was not actually a long option, the
+ state is unchanged, and the argument should be processed as a set
+ of short options (this can only happen when long_only is true).
+ Otherwise, the option (and its argument, if any) have been consumed
+ and the return value is the value to return from _getopt_internal_r. */
+static int
+process_long_option (int argc, char **argv, const char *optstring,
+ const struct option *longopts, int *longind,
+ int long_only, struct _getopt_data *d,
+ int print_errors, const char *prefix)
+{
+ char *nameend;
+ size_t namelen;
+ const struct option *p;
+ const struct option *pfound = NULL;
+ int n_options;
+ int option_index;
+
+ for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+ /* Do nothing. */ ;
+ namelen = nameend - d->__nextchar;
+
+ /* First look for an exact match, counting the options as a side
+ effect. */
+ for (p = longopts, n_options = 0; p->name; p++, n_options++)
+ if (!strncmp (p->name, d->__nextchar, namelen)
+ && namelen == strlen (p->name))
+ {
+ /* Exact match found. */
+ pfound = p;
+ option_index = n_options;
+ break;
+ }
+
+ if (pfound == NULL)
+ {
+ /* Didn't find an exact match, so look for abbreviations. */
+ unsigned char *ambig_set = NULL;
+ int ambig_malloced = 0;
+ int ambig_fallback = 0;
+ int indfound = -1;
+
+ for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ if (!strncmp (p->name, d->__nextchar, namelen))
+ {
+ if (pfound == NULL)
+ {
+ /* First nonexact match found. */
+ pfound = p;
+ indfound = option_index;
+ }
+ else if (long_only
+ || pfound->has_arg != p->has_arg
+ || pfound->flag != p->flag
+ || pfound->val != p->val)
+ {
+ /* Second or later nonexact match found. */
+ if (!ambig_fallback)
+ {
+ if (!print_errors)
+ /* Don't waste effort tracking the ambig set if
+ we're not going to print it anyway. */
+ ambig_fallback = 1;
+ else if (!ambig_set)
+ {
+ if (__libc_use_alloca (n_options))
+ ambig_set = alloca (n_options);
+ else if ((ambig_set = malloc (n_options)) == NULL)
+ /* Fall back to simpler error message. */
+ ambig_fallback = 1;
+ else
+ ambig_malloced = 1;
+
+ if (ambig_set)
+ {
+ memset (ambig_set, 0, n_options);
+ ambig_set[indfound] = 1;
+ }
+ }
+ if (ambig_set)
+ ambig_set[option_index] = 1;
+ }
+ }
+ }
+
+ if (ambig_set || ambig_fallback)
+ {
+ if (print_errors)
+ {
+ if (ambig_fallback)
+ fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"),
+ argv[0], prefix, d->__nextchar);
+ else
+ {
+ flockfile (stderr);
+ fprintf (stderr,
+ _("%s: option '%s%s' is ambiguous; possibilities:"),
+ argv[0], prefix, d->__nextchar);
+
+ for (option_index = 0; option_index < n_options; option_index++)
+ if (ambig_set[option_index])
+ fprintf (stderr, " '%s%s'",
+ prefix, longopts[option_index].name);
+
+ /* This must use 'fprintf' even though it's only
+ printing a single character, so that it goes through
+ __fxprintf_nocancel when compiled as part of glibc. */
+ fprintf (stderr, "\n");
+ funlockfile (stderr);
+ }
+ }
+ if (ambig_malloced)
+ free (ambig_set);
+ d->__nextchar += strlen (d->__nextchar);
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+
+ option_index = indfound;
+ }
+
+ if (pfound == NULL)
+ {
+ /* Can't find it as a long option. If this is not getopt_long_only,
+ or the option starts with '--' or is not a valid short option,
+ then it's an error. */
+ if (!long_only || argv[d->optind][1] == '-'
+ || strchr (optstring, *d->__nextchar) == NULL)
+ {
+ if (print_errors)
+ fprintf (stderr, _("%s: unrecognized option '%s%s'\n"),
+ argv[0], prefix, d->__nextchar);
+
+ d->__nextchar = NULL;
+ d->optind++;
+ d->optopt = 0;
+ return '?';
+ }
+
+ /* Otherwise interpret it as a short option. */
+ return -1;
+ }
+
+ /* We have found a matching long option. Consume it. */
+ d->optind++;
+ d->__nextchar = NULL;
+ if (*nameend)
+ {
+ /* Don't test has_arg with >, because some C compilers don't
+ allow it to be used on enums. */
+ if (pfound->has_arg)
+ d->optarg = nameend + 1;
+ else
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option '%s%s' doesn't allow an argument\n"),
+ argv[0], prefix, pfound->name);
+
+ d->optopt = pfound->val;
+ return '?';
+ }
+ }
+ else if (pfound->has_arg == 1)
+ {
+ if (d->optind < argc)
+ d->optarg = argv[d->optind++];
+ else
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option '%s%s' requires an argument\n"),
+ argv[0], prefix, pfound->name);
+
+ d->optopt = pfound->val;
+ return optstring[0] == ':' ? ':' : '?';
+ }
+ }
+
+ if (longind != NULL)
+ *longind = option_index;
+ if (pfound->flag)
+ {
+ *(pfound->flag) = pfound->val;
+ return 0;
+ }
+ return pfound->val;
+}
+
+/* Initialize internal data upon the first call to getopt. */
+
+static const char *
+_getopt_initialize (_GL_UNUSED int argc,
+ _GL_UNUSED char **argv, const char *optstring,
+ struct _getopt_data *d, int posixly_correct)
+{
+ /* Start processing options with ARGV-element 1 (since ARGV-element 0
+ is the program name); the sequence of previously skipped
+ non-option ARGV-elements is empty. */
+ if (d->optind == 0)
+ d->optind = 1;
+
+ d->__first_nonopt = d->__last_nonopt = d->optind;
+ d->__nextchar = NULL;
+
+ /* Determine how to handle the ordering of options and nonoptions. */
+ if (optstring[0] == '-')
+ {
+ d->__ordering = RETURN_IN_ORDER;
+ ++optstring;
+ }
+ else if (optstring[0] == '+')
+ {
+ d->__ordering = REQUIRE_ORDER;
+ ++optstring;
+ }
+ else if (posixly_correct || !!getenv ("POSIXLY_CORRECT"))
+ d->__ordering = REQUIRE_ORDER;
+ else
+ d->__ordering = PERMUTE;
+
+ d->__initialized = 1;
+ return optstring;
+}
+
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+ given in OPTSTRING.
+
+ If an element of ARGV starts with '-', and is not exactly "-" or "--",
+ then it is an option element. The characters of this element
+ (aside from the initial '-') are option characters. If 'getopt'
+ is called repeatedly, it returns successively each of the option characters
+ from each of the option elements.
+
+ If 'getopt' finds another option character, it returns that character,
+ updating 'optind' and 'nextchar' so that the next call to 'getopt' can
+ resume the scan with the following option character or ARGV-element.
+
+ If there are no more option characters, 'getopt' returns -1.
+ Then 'optind' is the index in ARGV of the first ARGV-element
+ that is not an option. (The ARGV-elements have been permuted
+ so that those that are not options now come last.)
+
+ OPTSTRING is a string containing the legitimate option characters.
+ If an option character is seen that is not listed in OPTSTRING,
+ return '?' after printing an error message. If you set 'opterr' to
+ zero, the error message is suppressed but we still return '?'.
+
+ If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+ so the following text in the same ARGV-element, or the text of the following
+ ARGV-element, is returned in 'optarg'. Two colons mean an option that
+ wants an optional arg; if there is text in the current ARGV-element,
+ it is returned in 'optarg', otherwise 'optarg' is set to zero.
+
+ If OPTSTRING starts with '-' or '+', it requests different methods of
+ handling the non-option ARGV-elements.
+ See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+ Long-named options begin with '--' instead of '-'.
+ Their names may be abbreviated as long as the abbreviation is unique
+ or is an exact match for some defined option. If they have an
+ argument, it follows the option name in the same ARGV-element, separated
+ from the option name by a '=', or else the in next ARGV-element.
+ When 'getopt' finds a long-named option, it returns 0 if that option's
+ 'flag' field is nonzero, the value of the option's 'val' field
+ if the 'flag' field is zero.
+
+ The elements of ARGV aren't really const, because we permute them.
+ But we pretend they're const in the prototype to be compatible
+ with other systems.
+
+ LONGOPTS is a vector of 'struct option' terminated by an
+ element containing a name which is zero.
+
+ LONGIND returns the index in LONGOPT of the long-named option found.
+ It is only valid when a long-named option has been found by the most
+ recent call.
+
+ If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+ long-named options. */
+
+int
+_getopt_internal_r (int argc, char **argv, const char *optstring,
+ const struct option *longopts, int *longind,
+ int long_only, struct _getopt_data *d, int posixly_correct)
+{
+ int print_errors = d->opterr;
+
+ if (argc < 1)
+ return -1;
+
+ d->optarg = NULL;
+
+ if (d->optind == 0 || !d->__initialized)
+ optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct);
+ else if (optstring[0] == '-' || optstring[0] == '+')
+ optstring++;
+
+ if (optstring[0] == ':')
+ print_errors = 0;
+
+ /* Test whether ARGV[optind] points to a non-option argument. */
+#define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
+
+ if (d->__nextchar == NULL || *d->__nextchar == '\0')
+ {
+ /* Advance to the next ARGV-element. */
+
+ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ moved back by the user (who may also have changed the arguments). */
+ if (d->__last_nonopt > d->optind)
+ d->__last_nonopt = d->optind;
+ if (d->__first_nonopt > d->optind)
+ d->__first_nonopt = d->optind;
+
+ if (d->__ordering == PERMUTE)
+ {
+ /* If we have just processed some options following some non-options,
+ exchange them so that the options come first. */
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange (argv, d);
+ else if (d->__last_nonopt != d->optind)
+ d->__first_nonopt = d->optind;
+
+ /* Skip any additional non-options
+ and extend the range of non-options previously skipped. */
+
+ while (d->optind < argc && NONOPTION_P)
+ d->optind++;
+ d->__last_nonopt = d->optind;
+ }
+
+ /* The special ARGV-element '--' means premature end of options.
+ Skip it like a null option,
+ then exchange with previous non-options as if it were an option,
+ then skip everything else like a non-option. */
+
+ if (d->optind != argc && !strcmp (argv[d->optind], "--"))
+ {
+ d->optind++;
+
+ if (d->__first_nonopt != d->__last_nonopt
+ && d->__last_nonopt != d->optind)
+ exchange (argv, d);
+ else if (d->__first_nonopt == d->__last_nonopt)
+ d->__first_nonopt = d->optind;
+ d->__last_nonopt = argc;
+
+ d->optind = argc;
+ }
+
+ /* If we have done all the ARGV-elements, stop the scan
+ and back over any non-options that we skipped and permuted. */
+
+ if (d->optind == argc)
+ {
+ /* Set the next-arg-index to point at the non-options
+ that we previously skipped, so the caller will digest them. */
+ if (d->__first_nonopt != d->__last_nonopt)
+ d->optind = d->__first_nonopt;
+ return -1;
+ }
+
+ /* If we have come to a non-option and did not permute it,
+ either stop the scan or describe it to the caller and pass it by. */
+
+ if (NONOPTION_P)
+ {
+ if (d->__ordering == REQUIRE_ORDER)
+ return -1;
+ d->optarg = argv[d->optind++];
+ return 1;
+ }
+
+ /* We have found another option-ARGV-element.
+ Check whether it might be a long option. */
+ if (longopts)
+ {
+ if (argv[d->optind][1] == '-')
+ {
+ /* "--foo" is always a long option. The special option
+ "--" was handled above. */
+ d->__nextchar = argv[d->optind] + 2;
+ return process_long_option (argc, argv, optstring, longopts,
+ longind, long_only, d,
+ print_errors, "--");
+ }
+
+ /* If long_only and the ARGV-element has the form "-f",
+ where f is a valid short option, don't consider it an
+ abbreviated form of a long option that starts with f.
+ Otherwise there would be no way to give the -f short
+ option.
+
+ On the other hand, if there's a long option "fubar" and
+ the ARGV-element is "-fu", do consider that an
+ abbreviation of the long option, just like "--fu", and
+ not "-f" with arg "u".
+
+ This distinction seems to be the most useful approach. */
+ if (long_only && (argv[d->optind][2]
+ || !strchr (optstring, argv[d->optind][1])))
+ {
+ int code;
+ d->__nextchar = argv[d->optind] + 1;
+ code = process_long_option (argc, argv, optstring, longopts,
+ longind, long_only, d,
+ print_errors, "-");
+ if (code != -1)
+ return code;
+ }
+ }
+
+ /* It is not a long option. Skip the initial punctuation. */
+ d->__nextchar = argv[d->optind] + 1;
+ }
+
+ /* Look at and handle the next short option-character. */
+
+ {
+ char c = *d->__nextchar++;
+ const char *temp = strchr (optstring, c);
+
+ /* Increment 'optind' when we start to process its last character. */
+ if (*d->__nextchar == '\0')
+ ++d->optind;
+
+ if (temp == NULL || c == ':' || c == ';')
+ {
+ if (print_errors)
+ fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c);
+ d->optopt = c;
+ return '?';
+ }
+
+ /* Convenience. Treat POSIX -W foo same as long option --foo */
+ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL)
+ {
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ d->optarg = d->__nextchar;
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option requires an argument -- '%c'\n"),
+ argv[0], c);
+
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ return c;
+ }
+ else
+ d->optarg = argv[d->optind];
+
+ d->__nextchar = d->optarg;
+ d->optarg = NULL;
+ return process_long_option (argc, argv, optstring, longopts, longind,
+ 0 /* long_only */, d, print_errors, "-W ");
+ }
+ if (temp[1] == ':')
+ {
+ if (temp[2] == ':')
+ {
+ /* This is an option that accepts an argument optionally. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ d->optind++;
+ }
+ else
+ d->optarg = NULL;
+ d->__nextchar = NULL;
+ }
+ else
+ {
+ /* This is an option that requires an argument. */
+ if (*d->__nextchar != '\0')
+ {
+ d->optarg = d->__nextchar;
+ /* If we end this ARGV-element by taking the rest as an arg,
+ we must advance to the next element now. */
+ d->optind++;
+ }
+ else if (d->optind == argc)
+ {
+ if (print_errors)
+ fprintf (stderr,
+ _("%s: option requires an argument -- '%c'\n"),
+ argv[0], c);
+
+ d->optopt = c;
+ if (optstring[0] == ':')
+ c = ':';
+ else
+ c = '?';
+ }
+ else
+ /* We already incremented 'optind' once;
+ increment it again when taking next ARGV-elt as argument. */
+ d->optarg = argv[d->optind++];
+ d->__nextchar = NULL;
+ }
+ }
+ return c;
+ }
+}
+
+int
+_getopt_internal (int argc, char **argv, const char *optstring,
+ const struct option *longopts, int *longind, int long_only,
+ int posixly_correct)
+{
+ int result;
+
+ getopt_data.optind = optind;
+ getopt_data.opterr = opterr;
+
+ result = _getopt_internal_r (argc, argv, optstring, longopts,
+ longind, long_only, &getopt_data,
+ posixly_correct);
+
+ optind = getopt_data.optind;
+ optarg = getopt_data.optarg;
+ optopt = getopt_data.optopt;
+
+ return result;
+}
+
+/* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt.
+ Standalone applications just get a POSIX-compliant getopt.
+ POSIX and LSB both require these functions to take 'char *const *argv'
+ even though this is incorrect (because of the permutation). */
+#define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \
+ int \
+ NAME (int argc, char *const *argv, const char *optstring) \
+ { \
+ return _getopt_internal (argc, (char **)argv, optstring, \
+ 0, 0, 0, POSIXLY_CORRECT); \
+ }
+
+#ifdef _LIBC
+GETOPT_ENTRY(getopt, 0)
+GETOPT_ENTRY(__posix_getopt, 1)
+#else
+GETOPT_ENTRY(getopt, 1)
+#endif
+
+
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+ the above definition of 'getopt'. */
+
+int
+main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+
+ c = getopt (argc, argv, "abc:d:0123456789");
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value '%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/lib/getopt.in.h b/lib/getopt.in.h
new file mode 100644
index 0000000..0867d36
--- /dev/null
+++ b/lib/getopt.in.h
@@ -0,0 +1,61 @@
+/* Declarations for getopt.
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of gnulib.
+ Unlike most of the getopt implementation, it is NOT shared
+ with the GNU C Library, which supplies a different version of
+ this file.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _@GUARD_PREFIX@_GETOPT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard. We must
+ also inform the replacement unistd.h to not recursively use
+ <getopt.h>; our definitions will be present soon enough. */
+#if @HAVE_GETOPT_H@
+# define _GL_SYSTEM_GETOPT
+# @INCLUDE_NEXT@ @NEXT_GETOPT_H@
+# undef _GL_SYSTEM_GETOPT
+#endif
+
+#define _@GUARD_PREFIX@_GETOPT_H 1
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+ identifier that prefixes the external functions and variables
+ defined in getopt-core.h and getopt-ext.h. When this happens,
+ include the headers that might declare getopt so that they will not
+ cause confusion if included after this file (if the system had
+ <getopt.h>, we have already included it). */
+#if defined __GETOPT_PREFIX
+# if !@HAVE_GETOPT_H@
+# define __need_system_stdlib_h
+# include <stdlib.h>
+# undef __need_system_stdlib_h
+# include <stdio.h>
+# include <unistd.h>
+# endif
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+#include <getopt-cdefs.h>
+#include <getopt-pfx-core.h>
+#include <getopt-pfx-ext.h>
+
+#endif /* _@GUARD_PREFIX@_GETOPT_H */
diff --git a/lib/getopt1.c b/lib/getopt1.c
new file mode 100644
index 0000000..49323aa
--- /dev/null
+++ b/lib/getopt1.c
@@ -0,0 +1,159 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+ Copyright (C) 1987-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library and is also part of gnulib.
+ Patches to this file should be submitted to both projects.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include "getopt.h"
+#include "getopt_int.h"
+
+int
+getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, (char **) argv, options, long_options,
+ opt_index, 0, 0);
+}
+
+int
+_getopt_long_r (int argc, char **argv, const char *options,
+ const struct option *long_options, int *opt_index,
+ struct _getopt_data *d)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 0, d, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+ If an option that starts with '-' (not '--') doesn't match a long option,
+ but does match a short option, it is parsed as a short option
+ instead. */
+
+int
+getopt_long_only (int argc, char *__getopt_argv_const *argv,
+ const char *options,
+ const struct option *long_options, int *opt_index)
+{
+ return _getopt_internal (argc, (char **) argv, options, long_options,
+ opt_index, 1, 0);
+}
+
+int
+_getopt_long_only_r (int argc, char **argv, const char *options,
+ const struct option *long_options, int *opt_index,
+ struct _getopt_data *d)
+{
+ return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+ 1, d, 0);
+}
+
+
+#ifdef TEST
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char **argv)
+{
+ int c;
+ int digit_optind = 0;
+
+ while (1)
+ {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static const struct option long_options[] =
+ {
+ {"add", 1, 0, 0},
+ {"append", 0, 0, 0},
+ {"delete", 1, 0, 0},
+ {"verbose", 0, 0, 0},
+ {"create", 0, 0, 0},
+ {"file", 1, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long (argc, argv, "abc:d:0123456789",
+ long_options, &option_index);
+ if (c == -1)
+ break;
+
+ switch (c)
+ {
+ case 0:
+ printf ("option %s", long_options[option_index].name);
+ if (optarg)
+ printf (" with arg %s", optarg);
+ printf ("\n");
+ break;
+
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (digit_optind != 0 && digit_optind != this_option_optind)
+ printf ("digits occur in two different argv-elements.\n");
+ digit_optind = this_option_optind;
+ printf ("option %c\n", c);
+ break;
+
+ case 'a':
+ printf ("option a\n");
+ break;
+
+ case 'b':
+ printf ("option b\n");
+ break;
+
+ case 'c':
+ printf ("option c with value '%s'\n", optarg);
+ break;
+
+ case 'd':
+ printf ("option d with value '%s'\n", optarg);
+ break;
+
+ case '?':
+ break;
+
+ default:
+ printf ("?? getopt returned character code 0%o ??\n", c);
+ }
+ }
+
+ if (optind < argc)
+ {
+ printf ("non-option ARGV-elements: ");
+ while (optind < argc)
+ printf ("%s ", argv[optind++]);
+ printf ("\n");
+ }
+
+ exit (0);
+}
+
+#endif /* TEST */
diff --git a/lib/getopt_int.h b/lib/getopt_int.h
new file mode 100644
index 0000000..4d9e24b
--- /dev/null
+++ b/lib/getopt_int.h
@@ -0,0 +1,118 @@
+/* Internal declarations for getopt.
+ Copyright (C) 1989-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library and is also part of gnulib.
+ Patches to this file should be submitted to both projects.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _GETOPT_INT_H
+#define _GETOPT_INT_H 1
+
+#include <getopt.h>
+
+extern int _getopt_internal (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only, int __posixly_correct);
+
+
+/* Reentrant versions which can handle parsing multiple argument
+ vectors at the same time. */
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+ REQUIRE_ORDER means don't recognize them as options; stop option
+ processing when the first non-option is seen. This is what POSIX
+ specifies should happen.
+
+ PERMUTE means permute the contents of ARGV as we scan, so that
+ eventually all the non-options are at the end. This allows options
+ to be given in any order, even with programs that were not written
+ to expect this.
+
+ RETURN_IN_ORDER is an option available to programs that were
+ written to expect options and other ARGV-elements in any order
+ and that care about the ordering of the two. We describe each
+ non-option ARGV-element as if it were the argument of an option
+ with character code 1.
+
+ The special argument '--' forces an end of option-scanning regardless
+ of the value of 'ordering'. In the case of RETURN_IN_ORDER, only
+ '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */
+
+enum __ord
+ {
+ REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+ };
+
+/* Data type for reentrant functions. */
+struct _getopt_data
+{
+ /* These have exactly the same meaning as the corresponding global
+ variables, except that they are used for the reentrant
+ versions of getopt. */
+ int optind;
+ int opterr;
+ int optopt;
+ char *optarg;
+
+ /* Internal members. */
+
+ /* True if the internal members have been initialized. */
+ int __initialized;
+
+ /* The next char to be scanned in the option-element
+ in which the last option character we returned was found.
+ This allows us to pick up the scan where we left off.
+
+ If this is zero, or a null string, it means resume the scan
+ by advancing to the next ARGV-element. */
+ char *__nextchar;
+
+ /* See __ord above. */
+ enum __ord __ordering;
+
+ /* Handle permutation of arguments. */
+
+ /* Describe the part of ARGV that contains non-options that have
+ been skipped. 'first_nonopt' is the index in ARGV of the first
+ of them; 'last_nonopt' is the index after the last of them. */
+
+ int __first_nonopt;
+ int __last_nonopt;
+};
+
+/* The initializer is necessary to set OPTIND and OPTERR to their
+ default values and to clear the initialization flag. */
+#define _GETOPT_DATA_INITIALIZER { 1, 1 }
+
+extern int _getopt_internal_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ int __long_only, struct _getopt_data *__data,
+ int __posixly_correct);
+
+extern int _getopt_long_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts, int *__longind,
+ struct _getopt_data *__data);
+
+extern int _getopt_long_only_r (int ___argc, char **___argv,
+ const char *__shortopts,
+ const struct option *__longopts,
+ int *__longind,
+ struct _getopt_data *__data);
+
+#endif /* getopt_int.h */
diff --git a/lib/getprogname.c b/lib/getprogname.c
new file mode 100644
index 0000000..279d79f
--- /dev/null
+++ b/lib/getprogname.c
@@ -0,0 +1,300 @@
+/* Program name management.
+ Copyright (C) 2016-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. Also get __argv declaration. */
+#include <stdlib.h>
+
+#include <errno.h> /* get program_invocation_name declaration */
+
+#ifdef _AIX
+# include <unistd.h>
+# include <procinfo.h>
+# include <string.h>
+#endif
+
+#ifdef __MVS__
+# ifndef _OPEN_SYS
+# define _OPEN_SYS
+# endif
+# include <string.h>
+# include <sys/ps.h>
+#endif
+
+#ifdef __hpux
+# include <unistd.h>
+# include <sys/param.h>
+# include <sys/pstat.h>
+# include <string.h>
+#endif
+
+#if defined __sgi || defined __osf__
+# include <string.h>
+# include <unistd.h>
+# include <stdio.h>
+# include <fcntl.h>
+# include <sys/procfs.h>
+#endif
+
+#if defined __SCO_VERSION__ || defined __sysv5__
+# include <fcntl.h>
+# include <string.h>
+#endif
+
+#include "basename-lgpl.h"
+
+#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Solaris >= 11, Cygwin, Android API level >= 21 */
+char const *
+getprogname (void)
+{
+# if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */
+ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */
+ return program_invocation_short_name;
+# elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */
+ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */
+ return last_component (program_invocation_name);
+# elif HAVE_GETEXECNAME /* Solaris */
+ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */
+ const char *p = getexecname ();
+ if (!p)
+ p = "?";
+ return last_component (p);
+# elif HAVE_DECL___ARGV /* mingw, MSVC */
+ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */
+ const char *p = __argv && __argv[0] ? __argv[0] : "?";
+ return last_component (p);
+# elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */
+ /* https://man.openbsd.org/style.9 */
+ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */
+ /* Be careful to declare this only when we absolutely need it
+ (OpenBSD 5.1), rather than when it's available. Otherwise,
+ its mere declaration makes program_invocation_short_name
+ malfunction (have zero length) with Fedora 25's glibc. */
+ extern char *__progname;
+ const char *p = __progname;
+# if defined __ANDROID__
+ return last_component (p);
+# else
+ return p && p[0] ? p : "?";
+# endif
+# elif _AIX /* AIX */
+ /* Idea by Bastien ROUCARIÈS,
+ https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html
+ Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm
+ */
+ static char *p;
+ static int first = 1;
+ if (first)
+ {
+ first = 0;
+ pid_t pid = getpid ();
+ struct procentry64 procs;
+ p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1)
+ ? strdup (procs.pi_comm)
+ : NULL);
+ if (!p)
+ p = "?";
+ }
+ return p;
+# elif defined __hpux
+ static char *p;
+ static int first = 1;
+ if (first)
+ {
+ first = 0;
+ pid_t pid = getpid ();
+ struct pst_status status;
+ if (pstat_getproc (&status, sizeof status, 0, pid) > 0)
+ {
+ char *ucomm = status.pst_ucomm;
+ char *cmd = status.pst_cmd;
+ if (strlen (ucomm) < PST_UCOMMLEN - 1)
+ p = ucomm;
+ else
+ {
+ /* ucomm is truncated to length PST_UCOMMLEN - 1.
+ Look at cmd instead. */
+ char *space = strchr (cmd, ' ');
+ if (space != NULL)
+ *space = '\0';
+ p = strrchr (cmd, '/');
+ if (p != NULL)
+ p++;
+ else
+ p = cmd;
+ if (strlen (p) > PST_UCOMMLEN - 1
+ && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0)
+ /* p is less truncated than ucomm. */
+ ;
+ else
+ p = ucomm;
+ }
+ p = strdup (p);
+ }
+ else
+ {
+# if !defined __LP64__
+ /* Support for 32-bit programs running in 64-bit HP-UX.
+ The documented way to do this is to use the same source code
+ as above, but in a compilation unit where '#define _PSTAT64 1'
+ is in effect. I prefer a single compilation unit; the struct
+ size and the offsets are not going to change. */
+ char status64[1216];
+ if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0)
+ {
+ char *ucomm = status64 + 288;
+ char *cmd = status64 + 168;
+ if (strlen (ucomm) < PST_UCOMMLEN - 1)
+ p = ucomm;
+ else
+ {
+ /* ucomm is truncated to length PST_UCOMMLEN - 1.
+ Look at cmd instead. */
+ char *space = strchr (cmd, ' ');
+ if (space != NULL)
+ *space = '\0';
+ p = strrchr (cmd, '/');
+ if (p != NULL)
+ p++;
+ else
+ p = cmd;
+ if (strlen (p) > PST_UCOMMLEN - 1
+ && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0)
+ /* p is less truncated than ucomm. */
+ ;
+ else
+ p = ucomm;
+ }
+ p = strdup (p);
+ }
+ else
+# endif
+ p = NULL;
+ }
+ if (!p)
+ p = "?";
+ }
+ return p;
+# elif __MVS__ /* z/OS */
+ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */
+ static char *p = "?";
+ static int first = 1;
+ if (first)
+ {
+ pid_t pid = getpid ();
+ int token;
+ W_PSPROC buf;
+ first = 0;
+ memset (&buf, 0, sizeof(buf));
+ buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG);
+ buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN);
+ buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN);
+ if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr)
+ {
+ for (token = 0; token >= 0;
+ token = w_getpsent (token, &buf, sizeof(buf)))
+ {
+ if (token > 0 && buf.ps_pid == pid)
+ {
+ char *s = strdup (last_component (buf.ps_pathptr));
+ if (s)
+ p = s;
+ break;
+ }
+ }
+ }
+ free (buf.ps_cmdptr);
+ free (buf.ps_conttyptr);
+ free (buf.ps_pathptr);
+ }
+ return p;
+# elif defined __sgi || defined __osf__ /* IRIX or Tru64 */
+ char filename[50];
+ int fd;
+
+ # if defined __sgi
+ sprintf (filename, "/proc/pinfo/%d", (int) getpid ());
+ # else
+ sprintf (filename, "/proc/%d", (int) getpid ());
+ # endif
+ fd = open (filename, O_RDONLY | O_CLOEXEC);
+ if (0 <= fd)
+ {
+ prpsinfo_t buf;
+ int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf);
+ close (fd);
+ if (ioctl_ok)
+ {
+ char *name = buf.pr_fname;
+ size_t namesize = sizeof buf.pr_fname;
+ /* It may not be NUL-terminated. */
+ char *namenul = memchr (name, '\0', namesize);
+ size_t namelen = namenul ? namenul - name : namesize;
+ char *namecopy = malloc (namelen + 1);
+ if (namecopy)
+ {
+ namecopy[namelen] = '\0';
+ return memcpy (namecopy, name, namelen);
+ }
+ }
+ }
+ return NULL;
+# elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */
+ char buf[80];
+ int fd;
+ sprintf (buf, "/proc/%d/cmdline", getpid());
+ fd = open (buf, O_RDONLY);
+ if (0 <= fd)
+ {
+ size_t n = read (fd, buf, 79);
+ if (n > 0)
+ {
+ buf[n] = '\0'; /* Guarantee null-termination */
+ char *progname;
+ progname = strrchr (buf, '/');
+ if (progname)
+ {
+ progname = progname + 1; /* Skip the '/' */
+ }
+ else
+ {
+ progname = buf;
+ }
+ char *ret;
+ ret = malloc (strlen (progname) + 1);
+ if (ret)
+ {
+ strcpy (ret, progname);
+ return ret;
+ }
+ }
+ close (fd);
+ }
+ return "?";
+# else
+# error "getprogname module not ported to this OS"
+# endif
+}
+
+#endif
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/getprogname.h b/lib/getprogname.h
new file mode 100644
index 0000000..13314f2
--- /dev/null
+++ b/lib/getprogname.h
@@ -0,0 +1,26 @@
+/* Program name management.
+ Copyright (C) 2016-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_GETPROGNAME_H
+#define _GL_GETPROGNAME_H
+
+#include <stdlib.h>
+
+#if __GNUC__ || (__clang_major__ >= 4)
+# warning "The include file getprogname.h is deprecated. Use <stdlib.h> instead."
+#endif
+
+#endif
diff --git a/lib/getrandom.c b/lib/getrandom.c
new file mode 100644
index 0000000..19bb342
--- /dev/null
+++ b/lib/getrandom.c
@@ -0,0 +1,190 @@
+/* Obtain a series of random bytes.
+
+ Copyright 2020-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+#include <config.h>
+
+#include <sys/random.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# if HAVE_BCRYPT_H
+# include <bcrypt.h>
+# else
+# define NTSTATUS LONG
+typedef void * BCRYPT_ALG_HANDLE;
+# define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002
+# if HAVE_LIB_BCRYPT
+extern NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG);
+# endif
+# endif
+# if !HAVE_LIB_BCRYPT
+# include <wincrypt.h>
+# ifndef CRYPT_VERIFY_CONTEXT
+# define CRYPT_VERIFY_CONTEXT 0xF0000000
+# endif
+# endif
+#endif
+
+#include "minmax.h"
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* Don't assume that UNICODE is not defined. */
+# undef LoadLibrary
+# define LoadLibrary LoadLibraryA
+# undef CryptAcquireContext
+# define CryptAcquireContext CryptAcquireContextA
+
+# if !HAVE_LIB_BCRYPT
+
+/* Avoid warnings from gcc -Wcast-function-type. */
+# define GetProcAddress \
+ (void *) GetProcAddress
+
+/* BCryptGenRandom with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works only
+ starting with Windows 7. */
+typedef NTSTATUS (WINAPI * BCryptGenRandomFuncType) (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG);
+static BCryptGenRandomFuncType BCryptGenRandomFunc = NULL;
+static BOOL initialized = FALSE;
+
+static void
+initialize (void)
+{
+ HMODULE bcrypt = LoadLibrary ("bcrypt.dll");
+ if (bcrypt != NULL)
+ {
+ BCryptGenRandomFunc =
+ (BCryptGenRandomFuncType) GetProcAddress (bcrypt, "BCryptGenRandom");
+ }
+ initialized = TRUE;
+}
+
+# else
+
+# define BCryptGenRandomFunc BCryptGenRandom
+
+# endif
+
+#else
+/* These devices exist on all platforms except native Windows. */
+
+/* Name of a device through which the kernel returns high quality random
+ numbers, from an entropy pool. When the pool is empty, the call blocks
+ until entropy sources have added enough bits of entropy. */
+# ifndef NAME_OF_RANDOM_DEVICE
+# define NAME_OF_RANDOM_DEVICE "/dev/random"
+# endif
+
+/* Name of a device through which the kernel returns random or pseudo-random
+ numbers. It uses an entropy pool, but, in order to avoid blocking, adds
+ bits generated by a pseudo-random number generator, as needed. */
+# ifndef NAME_OF_NONCE_DEVICE
+# define NAME_OF_NONCE_DEVICE "/dev/urandom"
+# endif
+
+#endif
+
+/* Set BUFFER (of size LENGTH) to random bytes under the control of FLAGS.
+ Return the number of bytes written (> 0).
+ Upon error, return -1 and set errno. */
+ssize_t
+getrandom (void *buffer, size_t length, unsigned int flags)
+#undef getrandom
+{
+#if defined _WIN32 && ! defined __CYGWIN__
+ /* BCryptGenRandom, defined in <bcrypt.h>
+ <https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom>
+ with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag
+ works in Windows 7 and newer. */
+ static int bcrypt_not_working /* = 0 */;
+ if (!bcrypt_not_working)
+ {
+# if !HAVE_LIB_BCRYPT
+ if (!initialized)
+ initialize ();
+# endif
+ if (BCryptGenRandomFunc != NULL
+ && BCryptGenRandomFunc (NULL, buffer, length,
+ BCRYPT_USE_SYSTEM_PREFERRED_RNG)
+ == 0 /*STATUS_SUCCESS*/)
+ return length;
+ bcrypt_not_working = 1;
+ }
+# if !HAVE_LIB_BCRYPT
+ /* CryptGenRandom, defined in <wincrypt.h>
+ <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom>
+ works in older releases as well, but is now deprecated.
+ CryptAcquireContext, defined in <wincrypt.h>
+ <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta> */
+ {
+ static int crypt_initialized /* = 0 */;
+ static HCRYPTPROV provider;
+ if (!crypt_initialized)
+ {
+ if (CryptAcquireContext (&provider, NULL, NULL, PROV_RSA_FULL,
+ CRYPT_VERIFY_CONTEXT))
+ crypt_initialized = 1;
+ else
+ crypt_initialized = -1;
+ }
+ if (crypt_initialized >= 0)
+ {
+ if (!CryptGenRandom (provider, length, buffer))
+ {
+ errno = EIO;
+ return -1;
+ }
+ return length;
+ }
+ }
+# endif
+ errno = ENOSYS;
+ return -1;
+#elif HAVE_GETRANDOM
+ return getrandom (buffer, length, flags);
+#else
+ static int randfd[2] = { -1, -1 };
+ bool devrandom = (flags & GRND_RANDOM) != 0;
+ int fd = randfd[devrandom];
+
+ if (fd < 0)
+ {
+ static char const randdevice[][MAX (sizeof NAME_OF_NONCE_DEVICE,
+ sizeof NAME_OF_RANDOM_DEVICE)]
+ = { NAME_OF_NONCE_DEVICE, NAME_OF_RANDOM_DEVICE };
+ int oflags = (O_RDONLY + O_CLOEXEC
+ + (flags & GRND_NONBLOCK ? O_NONBLOCK : 0));
+ fd = open (randdevice[devrandom], oflags);
+ if (fd < 0)
+ {
+ if (errno == ENOENT || errno == ENOTDIR)
+ errno = ENOSYS;
+ return -1;
+ }
+ randfd[devrandom] = fd;
+ }
+
+ return read (fd, buffer, length);
+#endif
+}
diff --git a/lib/gettext.h b/lib/gettext.h
new file mode 100644
index 0000000..d0462c4
--- /dev/null
+++ b/lib/gettext.h
@@ -0,0 +1,300 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option
+ or through "#define ENABLE NLS 0" before including this file. */
+#if defined ENABLE_NLS && ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+ the gettext() and ngettext() macros. This is an alternative to calling
+ textdomain(), and is useful for libraries. */
+# ifdef DEFAULT_TEXT_DOMAIN
+# undef gettext
+# define gettext(Msgid) \
+ dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+ <libintl.h>, which chokes if dcgettext is defined as a macro. So include
+ it now, to make later inclusions of <libintl.h> a NOP. */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H
+# include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+ ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 \
+ ? ((void) (Msgid2), (const char *) (Msgid1)) \
+ : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+ ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+ ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* Prefer gnulib's setlocale override over libintl's setlocale override. */
+#ifdef GNULIB_defined_setlocale
+# undef setlocale
+# define setlocale rpl_setlocale
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file. */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+ MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
+ short and rarely need to change.
+ The letter 'p' stands for 'particular' or 'special'. */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#if defined __GNUC__ || defined __clang__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ int category)
+{
+ const char *translation = dcgettext (domain, msg_ctxt_id, category);
+ if (translation == msg_ctxt_id)
+ return msgid;
+ else
+ return translation;
+}
+
+#if defined __GNUC__ || defined __clang__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ const char *translation =
+ dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ if (translation == msg_ctxt_id || translation == msgid_plural)
+ return (n == 1 ? msgid : msgid_plural);
+ else
+ return translation;
+}
+
+/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
+ can be arbitrary expressions. But for string literals these macros are
+ less efficient than those above. */
+
+#include <string.h>
+
+/* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported.
+ This relates to the -Wvla and -Wvla-larger-than warnings, enabled in
+ the default GCC many warnings set. This allows programs to disable use
+ of VLAs, which may be unintended, or may be awkward to support portably,
+ or may have security implications due to non-deterministic stack usage. */
+
+#if (!defined GNULIB_NO_VLA \
+ && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \
+ && !defined __STDC_NO_VLA__)
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1
+#else
+# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0
+#endif
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#if defined __GNUC__ || defined __clang__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ int found_translation;
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcgettext (domain, msg_ctxt_id, category);
+ found_translation = (translation != msg_ctxt_id);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (found_translation)
+ return translation;
+ }
+ return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#if defined __GNUC__ || defined __clang__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ int found_translation;
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ found_translation = !(translation == msg_ctxt_id || translation == msgid_plural);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (found_translation)
+ return translation;
+ }
+ return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/lib/glthread/lock.c b/lib/glthread/lock.c
new file mode 100644
index 0000000..82fb755
--- /dev/null
+++ b/lib/glthread/lock.c
@@ -0,0 +1,749 @@
+/* Locking in multithreaded situations.
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-posix.h, gthr-posix95.h. */
+
+#include <config.h>
+
+#include "glthread/lock.h"
+
+/* ========================================================================= */
+
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+int
+glthread_lock_init (gl_lock_t *lock)
+{
+ if (mtx_init (&lock->mutex, mtx_plain) != thrd_success)
+ return ENOMEM;
+ lock->init_needed = 0;
+ return 0;
+}
+
+int
+glthread_lock_lock (gl_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_lock (&lock->mutex) != thrd_success)
+ return EAGAIN;
+ return 0;
+}
+
+int
+glthread_lock_unlock (gl_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_unlock (&lock->mutex) != thrd_success)
+ return EINVAL;
+ return 0;
+}
+
+int
+glthread_lock_destroy (gl_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ mtx_destroy (&lock->mutex);
+ return 0;
+}
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+int
+glthread_rwlock_init (gl_rwlock_t *lock)
+{
+ if (mtx_init (&lock->lock, mtx_plain) != thrd_success
+ || cnd_init (&lock->waiting_readers) != thrd_success
+ || cnd_init (&lock->waiting_writers) != thrd_success)
+ return ENOMEM;
+ lock->waiting_writers_count = 0;
+ lock->runcount = 0;
+ lock->init_needed = 0;
+ return 0;
+}
+
+int
+glthread_rwlock_rdlock (gl_rwlock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_lock (&lock->lock) != thrd_success)
+ return EAGAIN;
+ /* Test whether only readers are currently running, and whether the runcount
+ field will not overflow, and whether no writer is waiting. The latter
+ condition is because POSIX recommends that "write locks shall take
+ precedence over read locks", to avoid "writer starvation". */
+ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_readers. */
+ if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success)
+ {
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ }
+ lock->runcount++;
+ if (mtx_unlock (&lock->lock) != thrd_success)
+ return EINVAL;
+ return 0;
+}
+
+int
+glthread_rwlock_wrlock (gl_rwlock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_lock (&lock->lock) != thrd_success)
+ return EAGAIN;
+ /* Test whether no readers or writers are currently running. */
+ while (!(lock->runcount == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_writers. */
+ lock->waiting_writers_count++;
+ if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success)
+ {
+ lock->waiting_writers_count--;
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ lock->waiting_writers_count--;
+ }
+ lock->runcount--; /* runcount becomes -1 */
+ if (mtx_unlock (&lock->lock) != thrd_success)
+ return EINVAL;
+ return 0;
+}
+
+int
+glthread_rwlock_unlock (gl_rwlock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_lock (&lock->lock) != thrd_success)
+ return EAGAIN;
+ if (lock->runcount < 0)
+ {
+ /* Drop a writer lock. */
+ if (!(lock->runcount == -1))
+ {
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ lock->runcount = 0;
+ }
+ else
+ {
+ /* Drop a reader lock. */
+ if (!(lock->runcount > 0))
+ {
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ lock->runcount--;
+ }
+ if (lock->runcount == 0)
+ {
+ /* POSIX recommends that "write locks shall take precedence over read
+ locks", to avoid "writer starvation". */
+ if (lock->waiting_writers_count > 0)
+ {
+ /* Wake up one of the waiting writers. */
+ if (cnd_signal (&lock->waiting_writers) != thrd_success)
+ {
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ }
+ else
+ {
+ /* Wake up all waiting readers. */
+ if (cnd_broadcast (&lock->waiting_readers) != thrd_success)
+ {
+ mtx_unlock (&lock->lock);
+ return EINVAL;
+ }
+ }
+ }
+ if (mtx_unlock (&lock->lock) != thrd_success)
+ return EINVAL;
+ return 0;
+}
+
+int
+glthread_rwlock_destroy (gl_rwlock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ mtx_destroy (&lock->lock);
+ cnd_destroy (&lock->waiting_readers);
+ cnd_destroy (&lock->waiting_writers);
+ return 0;
+}
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+int
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+ if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success)
+ return ENOMEM;
+ lock->init_needed = 0;
+ return 0;
+}
+
+int
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_lock (&lock->mutex) != thrd_success)
+ return EAGAIN;
+ return 0;
+}
+
+int
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ if (mtx_unlock (&lock->mutex) != thrd_success)
+ return EINVAL;
+ return 0;
+}
+
+int
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+ if (lock->init_needed)
+ call_once (&lock->init_once, lock->init_func);
+ mtx_destroy (&lock->mutex);
+ return 0;
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
+
+# if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP
+
+# if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+ /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+
+int
+glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock)
+{
+ pthread_rwlockattr_t attributes;
+ int err;
+
+ err = pthread_rwlockattr_init (&attributes);
+ if (err != 0)
+ return err;
+ /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that
+ causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not
+ do this; see
+ http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */
+ err = pthread_rwlockattr_setkind_np (&attributes,
+ PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
+ if (err == 0)
+ err = pthread_rwlock_init(lock, &attributes);
+ /* pthread_rwlockattr_destroy always returns 0. It cannot influence the
+ return value. */
+ pthread_rwlockattr_destroy (&attributes);
+ return err;
+}
+
+# endif
+# else
+
+int
+glthread_rwlock_init_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_rwlock_init (&lock->rwlock, NULL);
+ if (err != 0)
+ return err;
+ lock->initialized = 1;
+ return 0;
+}
+
+int
+glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock)
+{
+ if (!lock->initialized)
+ {
+ int err;
+
+ err = pthread_mutex_lock (&lock->guard);
+ if (err != 0)
+ return err;
+ if (!lock->initialized)
+ {
+ err = glthread_rwlock_init_multithreaded (lock);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->guard);
+ return err;
+ }
+ }
+ err = pthread_mutex_unlock (&lock->guard);
+ if (err != 0)
+ return err;
+ }
+ return pthread_rwlock_rdlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock)
+{
+ if (!lock->initialized)
+ {
+ int err;
+
+ err = pthread_mutex_lock (&lock->guard);
+ if (err != 0)
+ return err;
+ if (!lock->initialized)
+ {
+ err = glthread_rwlock_init_multithreaded (lock);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->guard);
+ return err;
+ }
+ }
+ err = pthread_mutex_unlock (&lock->guard);
+ if (err != 0)
+ return err;
+ }
+ return pthread_rwlock_wrlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock)
+{
+ if (!lock->initialized)
+ return EINVAL;
+ return pthread_rwlock_unlock (&lock->rwlock);
+}
+
+int
+glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ if (!lock->initialized)
+ return EINVAL;
+ err = pthread_rwlock_destroy (&lock->rwlock);
+ if (err != 0)
+ return err;
+ lock->initialized = 0;
+ return 0;
+}
+
+# endif
+
+# else
+
+int
+glthread_rwlock_init_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_init (&lock->lock, NULL);
+ if (err != 0)
+ return err;
+ err = pthread_cond_init (&lock->waiting_readers, NULL);
+ if (err != 0)
+ return err;
+ err = pthread_cond_init (&lock->waiting_writers, NULL);
+ if (err != 0)
+ return err;
+ lock->waiting_writers_count = 0;
+ lock->runcount = 0;
+ return 0;
+}
+
+int
+glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_lock (&lock->lock);
+ if (err != 0)
+ return err;
+ /* Test whether only readers are currently running, and whether the runcount
+ field will not overflow, and whether no writer is waiting. The latter
+ condition is because POSIX recommends that "write locks shall take
+ precedence over read locks", to avoid "writer starvation". */
+ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_readers. */
+ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->lock);
+ return err;
+ }
+ }
+ lock->runcount++;
+ return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_lock (&lock->lock);
+ if (err != 0)
+ return err;
+ /* Test whether no readers or writers are currently running. */
+ while (!(lock->runcount == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_writers. */
+ lock->waiting_writers_count++;
+ err = pthread_cond_wait (&lock->waiting_writers, &lock->lock);
+ if (err != 0)
+ {
+ lock->waiting_writers_count--;
+ pthread_mutex_unlock (&lock->lock);
+ return err;
+ }
+ lock->waiting_writers_count--;
+ }
+ lock->runcount--; /* runcount becomes -1 */
+ return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_lock (&lock->lock);
+ if (err != 0)
+ return err;
+ if (lock->runcount < 0)
+ {
+ /* Drop a writer lock. */
+ if (!(lock->runcount == -1))
+ {
+ pthread_mutex_unlock (&lock->lock);
+ return EINVAL;
+ }
+ lock->runcount = 0;
+ }
+ else
+ {
+ /* Drop a reader lock. */
+ if (!(lock->runcount > 0))
+ {
+ pthread_mutex_unlock (&lock->lock);
+ return EINVAL;
+ }
+ lock->runcount--;
+ }
+ if (lock->runcount == 0)
+ {
+ /* POSIX recommends that "write locks shall take precedence over read
+ locks", to avoid "writer starvation". */
+ if (lock->waiting_writers_count > 0)
+ {
+ /* Wake up one of the waiting writers. */
+ err = pthread_cond_signal (&lock->waiting_writers);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->lock);
+ return err;
+ }
+ }
+ else
+ {
+ /* Wake up all waiting readers. */
+ err = pthread_cond_broadcast (&lock->waiting_readers);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->lock);
+ return err;
+ }
+ }
+ }
+ return pthread_mutex_unlock (&lock->lock);
+}
+
+int
+glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_destroy (&lock->lock);
+ if (err != 0)
+ return err;
+ err = pthread_cond_destroy (&lock->waiting_readers);
+ if (err != 0)
+ return err;
+ err = pthread_cond_destroy (&lock->waiting_writers);
+ if (err != 0)
+ return err;
+ return 0;
+}
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+ pthread_mutexattr_t attributes;
+ int err;
+
+ err = pthread_mutexattr_init (&attributes);
+ if (err != 0)
+ return err;
+ err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE);
+ if (err != 0)
+ {
+ pthread_mutexattr_destroy (&attributes);
+ return err;
+ }
+ err = pthread_mutex_init (lock, &attributes);
+ if (err != 0)
+ {
+ pthread_mutexattr_destroy (&attributes);
+ return err;
+ }
+ err = pthread_mutexattr_destroy (&attributes);
+ if (err != 0)
+ return err;
+ return 0;
+}
+
+# else
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+ pthread_mutexattr_t attributes;
+ int err;
+
+ err = pthread_mutexattr_init (&attributes);
+ if (err != 0)
+ return err;
+ err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE);
+ if (err != 0)
+ {
+ pthread_mutexattr_destroy (&attributes);
+ return err;
+ }
+ err = pthread_mutex_init (&lock->recmutex, &attributes);
+ if (err != 0)
+ {
+ pthread_mutexattr_destroy (&attributes);
+ return err;
+ }
+ err = pthread_mutexattr_destroy (&attributes);
+ if (err != 0)
+ return err;
+ lock->initialized = 1;
+ return 0;
+}
+
+int
+glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock)
+{
+ if (!lock->initialized)
+ {
+ int err;
+
+ err = pthread_mutex_lock (&lock->guard);
+ if (err != 0)
+ return err;
+ if (!lock->initialized)
+ {
+ err = glthread_recursive_lock_init_multithreaded (lock);
+ if (err != 0)
+ {
+ pthread_mutex_unlock (&lock->guard);
+ return err;
+ }
+ }
+ err = pthread_mutex_unlock (&lock->guard);
+ if (err != 0)
+ return err;
+ }
+ return pthread_mutex_lock (&lock->recmutex);
+}
+
+int
+glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock)
+{
+ if (!lock->initialized)
+ return EINVAL;
+ return pthread_mutex_unlock (&lock->recmutex);
+}
+
+int
+glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock)
+{
+ int err;
+
+ if (!lock->initialized)
+ return EINVAL;
+ err = pthread_mutex_destroy (&lock->recmutex);
+ if (err != 0)
+ return err;
+ lock->initialized = 0;
+ return 0;
+}
+
+# endif
+
+# else
+
+int
+glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock)
+{
+ int err;
+
+ err = pthread_mutex_init (&lock->mutex, NULL);
+ if (err != 0)
+ return err;
+ lock->owner = (pthread_t) 0;
+ lock->depth = 0;
+ return 0;
+}
+
+int
+glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock)
+{
+ pthread_t self = pthread_self ();
+ if (lock->owner != self)
+ {
+ int err;
+
+ err = pthread_mutex_lock (&lock->mutex);
+ if (err != 0)
+ return err;
+ lock->owner = self;
+ }
+ if (++(lock->depth) == 0) /* wraparound? */
+ {
+ lock->depth--;
+ return EAGAIN;
+ }
+ return 0;
+}
+
+int
+glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock)
+{
+ if (lock->owner != pthread_self ())
+ return EPERM;
+ if (lock->depth == 0)
+ return EINVAL;
+ if (--(lock->depth) == 0)
+ {
+ lock->owner = (pthread_t) 0;
+ return pthread_mutex_unlock (&lock->mutex);
+ }
+ else
+ return 0;
+}
+
+int
+glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock)
+{
+ if (lock->owner != (pthread_t) 0)
+ return EBUSY;
+ return pthread_mutex_destroy (&lock->mutex);
+}
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT;
+
+int
+glthread_once_singlethreaded (pthread_once_t *once_control)
+{
+ /* We don't know whether pthread_once_t is an integer type, a floating-point
+ type, a pointer type, or a structure type. */
+ char *firstbyte = (char *)once_control;
+ if (*firstbyte == *(const char *)&fresh_once)
+ {
+ /* First time use of once_control. Invert the first byte. */
+ *firstbyte = ~ *(const char *)&fresh_once;
+ return 1;
+ }
+ else
+ return 0;
+}
+
+# if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK)
+
+int
+glthread_once_multithreaded (pthread_once_t *once_control,
+ void (*init_function) (void))
+{
+ int err = pthread_once (once_control, init_function);
+ if (err == ENOSYS)
+ {
+ /* This happens on FreeBSD 11: The pthread_once function in libc returns
+ ENOSYS. */
+ if (glthread_once_singlethreaded (once_control))
+ init_function ();
+ return 0;
+ }
+ return err;
+}
+
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+#endif
+
+/* ========================================================================= */
diff --git a/lib/glthread/lock.h b/lib/glthread/lock.h
new file mode 100644
index 0000000..ae3ee2d
--- /dev/null
+++ b/lib/glthread/lock.h
@@ -0,0 +1,791 @@
+/* Locking in multithreaded situations.
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */
+
+/* This file contains locking primitives for use with a given thread library.
+ It does not contain primitives for creating threads or for other
+ synchronization primitives.
+
+ Normal (non-recursive) locks:
+ Type: gl_lock_t
+ Declaration: gl_lock_define(extern, name)
+ Initializer: gl_lock_define_initialized(, name)
+ Initialization: gl_lock_init (name);
+ Taking the lock: gl_lock_lock (name);
+ Releasing the lock: gl_lock_unlock (name);
+ De-initialization: gl_lock_destroy (name);
+ Equivalent functions with control of error handling:
+ Initialization: err = glthread_lock_init (&name);
+ Taking the lock: err = glthread_lock_lock (&name);
+ Releasing the lock: err = glthread_lock_unlock (&name);
+ De-initialization: err = glthread_lock_destroy (&name);
+
+ Read-Write (non-recursive) locks:
+ Type: gl_rwlock_t
+ Declaration: gl_rwlock_define(extern, name)
+ Initializer: gl_rwlock_define_initialized(, name)
+ Initialization: gl_rwlock_init (name);
+ Taking the lock: gl_rwlock_rdlock (name);
+ gl_rwlock_wrlock (name);
+ Releasing the lock: gl_rwlock_unlock (name);
+ De-initialization: gl_rwlock_destroy (name);
+ Equivalent functions with control of error handling:
+ Initialization: err = glthread_rwlock_init (&name);
+ Taking the lock: err = glthread_rwlock_rdlock (&name);
+ err = glthread_rwlock_wrlock (&name);
+ Releasing the lock: err = glthread_rwlock_unlock (&name);
+ De-initialization: err = glthread_rwlock_destroy (&name);
+
+ Recursive locks:
+ Type: gl_recursive_lock_t
+ Declaration: gl_recursive_lock_define(extern, name)
+ Initializer: gl_recursive_lock_define_initialized(, name)
+ Initialization: gl_recursive_lock_init (name);
+ Taking the lock: gl_recursive_lock_lock (name);
+ Releasing the lock: gl_recursive_lock_unlock (name);
+ De-initialization: gl_recursive_lock_destroy (name);
+ Equivalent functions with control of error handling:
+ Initialization: err = glthread_recursive_lock_init (&name);
+ Taking the lock: err = glthread_recursive_lock_lock (&name);
+ Releasing the lock: err = glthread_recursive_lock_unlock (&name);
+ De-initialization: err = glthread_recursive_lock_destroy (&name);
+
+ Once-only execution:
+ Type: gl_once_t
+ Initializer: gl_once_define(extern, name)
+ Execution: gl_once (name, initfunction);
+ Equivalent functions with control of error handling:
+ Execution: err = glthread_once (&name, initfunction);
+*/
+
+
+#ifndef _LOCK_H
+#define _LOCK_H
+
+#include <errno.h>
+#include <stdlib.h>
+
+#if !defined c11_threads_in_use
+# if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC
+# define c11_threads_in_use() 1
+# elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK
+# include <threads.h>
+# pragma weak thrd_exit
+# define c11_threads_in_use() (thrd_exit != NULL)
+# else
+# define c11_threads_in_use() 0
+# endif
+#endif
+
+/* ========================================================================= */
+
+#if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* Use the ISO C threads library. */
+
+# include <threads.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef struct
+ {
+ int volatile init_needed;
+ once_flag init_once;
+ void (*init_func) (void);
+ mtx_t mutex;
+ }
+ gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_lock_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+ static void _atomic_init_##NAME (void); \
+ STORAGECLASS gl_lock_t NAME = \
+ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+ static void _atomic_init_##NAME (void) \
+ { \
+ if (glthread_lock_init (&(NAME))) \
+ abort (); \
+ }
+extern int glthread_lock_init (gl_lock_t *lock);
+extern int glthread_lock_lock (gl_lock_t *lock);
+extern int glthread_lock_unlock (gl_lock_t *lock);
+extern int glthread_lock_destroy (gl_lock_t *lock);
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef struct
+ {
+ int volatile init_needed;
+ once_flag init_once;
+ void (*init_func) (void);
+ mtx_t lock; /* protects the remaining fields */
+ cnd_t waiting_readers; /* waiting readers */
+ cnd_t waiting_writers; /* waiting writers */
+ unsigned int waiting_writers_count; /* number of waiting writers */
+ int runcount; /* number of readers running, or -1 when a writer runs */
+ }
+ gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+ static void _atomic_init_##NAME (void); \
+ STORAGECLASS gl_rwlock_t NAME = \
+ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+ static void _atomic_init_##NAME (void) \
+ { \
+ if (glthread_rwlock_init (&(NAME))) \
+ abort (); \
+ }
+extern int glthread_rwlock_init (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy (gl_rwlock_t *lock);
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef struct
+ {
+ int volatile init_needed;
+ once_flag init_once;
+ void (*init_func) (void);
+ mtx_t mutex;
+ }
+ gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+ static void _atomic_init_##NAME (void); \
+ STORAGECLASS gl_recursive_lock_t NAME = \
+ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \
+ static void _atomic_init_##NAME (void) \
+ { \
+ if (glthread_recursive_lock_init (&(NAME))) \
+ abort (); \
+ }
+extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef once_flag gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+ STORAGECLASS once_flag NAME = ONCE_FLAG_INIT;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+ (call_once (ONCE_CONTROL, INITFUNCTION), 0)
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library. */
+
+# include <pthread.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+/* The pthread_in_use() detection needs to be done at runtime. */
+# define pthread_in_use() \
+ glthread_in_use ()
+extern int glthread_in_use (void);
+
+# endif
+
+# if USE_POSIX_THREADS_WEAK
+
+/* Use weak references to the POSIX threads library. */
+
+/* Weak references avoid dragging in external libraries if the other parts
+ of the program don't use them. Here we use them, because we don't want
+ every program that uses libintl to depend on libpthread. This assumes
+ that libpthread would not be loaded after libintl; i.e. if libintl is
+ loaded first, by an executable that does not depend on libpthread, and
+ then a module is dynamically loaded that depends on libpthread, libintl
+ will not be multithread-safe. */
+
+/* The way to test at runtime whether libpthread is present is to test
+ whether a function pointer's value, such as &pthread_mutex_init, is
+ non-NULL. However, some versions of GCC have a bug through which, in
+ PIC mode, &foo != NULL always evaluates to true if there is a direct
+ call to foo(...) in the same function. To avoid this, we test the
+ address of a function in libpthread that we don't use. */
+
+# pragma weak pthread_mutex_init
+# pragma weak pthread_mutex_lock
+# pragma weak pthread_mutex_unlock
+# pragma weak pthread_mutex_destroy
+# pragma weak pthread_rwlock_init
+# pragma weak pthread_rwlock_rdlock
+# pragma weak pthread_rwlock_wrlock
+# pragma weak pthread_rwlock_unlock
+# pragma weak pthread_rwlock_destroy
+# pragma weak pthread_once
+# pragma weak pthread_cond_init
+# pragma weak pthread_cond_wait
+# pragma weak pthread_cond_signal
+# pragma weak pthread_cond_broadcast
+# pragma weak pthread_cond_destroy
+# pragma weak pthread_mutexattr_init
+# pragma weak pthread_mutexattr_settype
+# pragma weak pthread_mutexattr_destroy
+# pragma weak pthread_rwlockattr_init
+# if __GNU_LIBRARY__ > 1
+# pragma weak pthread_rwlockattr_setkind_np
+# endif
+# pragma weak pthread_rwlockattr_destroy
+# ifndef pthread_self
+# pragma weak pthread_self
+# endif
+
+# if !PTHREAD_IN_USE_DETECTION_HARD
+ /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols
+ can be used to determine whether libpthread is in use. These are:
+ pthread_mutexattr_gettype
+ pthread_rwlockattr_destroy
+ pthread_rwlockattr_init
+ */
+# pragma weak pthread_mutexattr_gettype
+# define pthread_in_use() \
+ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
+# endif
+
+# else
+
+# if !PTHREAD_IN_USE_DETECTION_HARD
+# define pthread_in_use() 1
+# endif
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef pthread_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+ PTHREAD_MUTEX_INITIALIZER
+# define glthread_lock_init(LOCK) \
+ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0)
+# define glthread_lock_lock(LOCK) \
+ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0)
+# define glthread_lock_unlock(LOCK) \
+ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0)
+# define glthread_lock_destroy(LOCK) \
+ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1)))
+
+# if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP
+
+typedef pthread_rwlock_t gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer;
+# if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+# if defined PTHREAD_RWLOCK_INITIALIZER
+# define gl_rwlock_initializer \
+ PTHREAD_RWLOCK_INITIALIZER
+# else
+# define gl_rwlock_initializer \
+ PTHREAD_RWLOCK_INITIALIZER_NP
+# endif
+# define glthread_rwlock_init(LOCK) \
+ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0)
+# else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */
+# define gl_rwlock_initializer \
+ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP
+# define glthread_rwlock_init(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0)
+extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock);
+# endif
+# define glthread_rwlock_rdlock(LOCK) \
+ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0)
+# define glthread_rwlock_wrlock(LOCK) \
+ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0)
+# define glthread_rwlock_unlock(LOCK) \
+ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0)
+# define glthread_rwlock_destroy(LOCK) \
+ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0)
+
+# else
+
+typedef struct
+ {
+ int initialized;
+ pthread_mutex_t guard; /* protects the initialization */
+ pthread_rwlock_t rwlock; /* read-write lock */
+ }
+ gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+ { 0, PTHREAD_MUTEX_INITIALIZER }
+# define glthread_rwlock_init(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0)
+# define glthread_rwlock_rdlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_wrlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_unlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_destroy(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock);
+
+# endif
+
+# else
+
+typedef struct
+ {
+ pthread_mutex_t lock; /* protects the remaining fields */
+ pthread_cond_t waiting_readers; /* waiting readers */
+ pthread_cond_t waiting_writers; /* waiting writers */
+ unsigned int waiting_writers_count; /* number of waiting writers */
+ int runcount; /* number of readers running, or -1 when a writer runs */
+ }
+ gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 }
+# define glthread_rwlock_init(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0)
+# define glthread_rwlock_rdlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_wrlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_unlock(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0)
+# define glthread_rwlock_destroy(LOCK) \
+ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock);
+extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock);
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+typedef pthread_mutex_t gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_mutex_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer;
+# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+# define gl_recursive_lock_initializer \
+ PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+# else
+# define gl_recursive_lock_initializer \
+ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+# endif
+# define glthread_recursive_lock_init(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_lock(LOCK) \
+ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0)
+# define glthread_recursive_lock_unlock(LOCK) \
+ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0)
+# define glthread_recursive_lock_destroy(LOCK) \
+ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+
+# else
+
+typedef struct
+ {
+ pthread_mutex_t recmutex; /* recursive mutex */
+ pthread_mutex_t guard; /* protects the initialization */
+ int initialized;
+ }
+ gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 }
+# define glthread_recursive_lock_init(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_lock(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_unlock(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_destroy(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock);
+
+# endif
+
+# else
+
+/* Old versions of POSIX threads on Solaris did not have recursive locks.
+ We have to implement them ourselves. */
+
+typedef struct
+ {
+ pthread_mutex_t mutex;
+ pthread_t owner;
+ unsigned long depth;
+ }
+ gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 }
+# define glthread_recursive_lock_init(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_lock(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_unlock(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0)
+# define glthread_recursive_lock_destroy(LOCK) \
+ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0)
+extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock);
+extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock);
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef pthread_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT;
+# if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+ (pthread_in_use () \
+ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \
+ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0))
+# else
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+ (pthread_in_use () \
+ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \
+ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0))
+extern int glthread_once_multithreaded (pthread_once_t *once_control,
+ void (*init_function) (void));
+# endif
+extern int glthread_once_singlethreaded (pthread_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WINDOWS_THREADS
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# include "windows-mutex.h"
+# include "windows-rwlock.h"
+# include "windows-recmutex.h"
+# include "windows-once.h"
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* We can use CRITICAL_SECTION directly, rather than the native Windows Event,
+ Mutex, Semaphore types, because
+ - we need only to synchronize inside a single process (address space),
+ not inter-process locking,
+ - we don't need to support trylock operations. (TryEnterCriticalSection
+ does not work on Windows 95/98/ME. Packages that need trylock usually
+ define their own mutex type.) */
+
+/* There is no way to statically initialize a CRITICAL_SECTION. It needs
+ to be done lazily, once only. For this we need spinlocks. */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef glwthread_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_lock_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_lock_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+ GLWTHREAD_MUTEX_INIT
+# define glthread_lock_init(LOCK) \
+ (glwthread_mutex_init (LOCK), 0)
+# define glthread_lock_lock(LOCK) \
+ glwthread_mutex_lock (LOCK)
+# define glthread_lock_unlock(LOCK) \
+ glwthread_mutex_unlock (LOCK)
+# define glthread_lock_destroy(LOCK) \
+ glwthread_mutex_destroy (LOCK)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef glwthread_rwlock_t gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+ GLWTHREAD_RWLOCK_INIT
+# define glthread_rwlock_init(LOCK) \
+ (glwthread_rwlock_init (LOCK), 0)
+# define glthread_rwlock_rdlock(LOCK) \
+ glwthread_rwlock_rdlock (LOCK)
+# define glthread_rwlock_wrlock(LOCK) \
+ glwthread_rwlock_wrlock (LOCK)
+# define glthread_rwlock_unlock(LOCK) \
+ glwthread_rwlock_unlock (LOCK)
+# define glthread_rwlock_destroy(LOCK) \
+ glwthread_rwlock_destroy (LOCK)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef glwthread_recmutex_t gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+ GLWTHREAD_RECMUTEX_INIT
+# define glthread_recursive_lock_init(LOCK) \
+ (glwthread_recmutex_init (LOCK), 0)
+# define glthread_recursive_lock_lock(LOCK) \
+ glwthread_recmutex_lock (LOCK)
+# define glthread_recursive_lock_unlock(LOCK) \
+ glwthread_recmutex_unlock (LOCK)
+# define glthread_recursive_lock_destroy(LOCK) \
+ glwthread_recmutex_destroy (LOCK)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef glwthread_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+ (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0)
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS)
+
+/* Provide dummy implementation if threads are not supported. */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef int gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME)
+# define gl_lock_define_initialized(STORAGECLASS, NAME)
+# define glthread_lock_init(NAME) 0
+# define glthread_lock_lock(NAME) 0
+# define glthread_lock_unlock(NAME) 0
+# define glthread_lock_destroy(NAME) 0
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef int gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME)
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME)
+# define glthread_rwlock_init(NAME) 0
+# define glthread_rwlock_rdlock(NAME) 0
+# define glthread_rwlock_wrlock(NAME) 0
+# define glthread_rwlock_unlock(NAME) 0
+# define glthread_rwlock_destroy(NAME) 0
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef int gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME)
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME)
+# define glthread_recursive_lock_init(NAME) 0
+# define glthread_recursive_lock_lock(NAME) 0
+# define glthread_recursive_lock_unlock(NAME) 0
+# define glthread_recursive_lock_destroy(NAME) 0
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef int gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+ STORAGECLASS gl_once_t NAME = 0;
+# define glthread_once(ONCE_CONTROL, INITFUNCTION) \
+ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0)
+
+#endif
+
+/* ========================================================================= */
+
+/* Macros with built-in error handling. */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+#define gl_lock_init(NAME) \
+ do \
+ { \
+ if (glthread_lock_init (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_lock_lock(NAME) \
+ do \
+ { \
+ if (glthread_lock_lock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_lock_unlock(NAME) \
+ do \
+ { \
+ if (glthread_lock_unlock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_lock_destroy(NAME) \
+ do \
+ { \
+ if (glthread_lock_destroy (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+#define gl_rwlock_init(NAME) \
+ do \
+ { \
+ if (glthread_rwlock_init (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_rwlock_rdlock(NAME) \
+ do \
+ { \
+ if (glthread_rwlock_rdlock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_rwlock_wrlock(NAME) \
+ do \
+ { \
+ if (glthread_rwlock_wrlock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_rwlock_unlock(NAME) \
+ do \
+ { \
+ if (glthread_rwlock_unlock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_rwlock_destroy(NAME) \
+ do \
+ { \
+ if (glthread_rwlock_destroy (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+#define gl_recursive_lock_init(NAME) \
+ do \
+ { \
+ if (glthread_recursive_lock_init (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_recursive_lock_lock(NAME) \
+ do \
+ { \
+ if (glthread_recursive_lock_lock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_recursive_lock_unlock(NAME) \
+ do \
+ { \
+ if (glthread_recursive_lock_unlock (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+#define gl_recursive_lock_destroy(NAME) \
+ do \
+ { \
+ if (glthread_recursive_lock_destroy (&NAME)) \
+ abort (); \
+ } \
+ while (0)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+#define gl_once(NAME, INITFUNCTION) \
+ do \
+ { \
+ if (glthread_once (&NAME, INITFUNCTION)) \
+ abort (); \
+ } \
+ while (0)
+
+/* ========================================================================= */
+
+#endif /* _LOCK_H */
diff --git a/lib/glthread/threadlib.c b/lib/glthread/threadlib.c
new file mode 100644
index 0000000..5ecf827
--- /dev/null
+++ b/lib/glthread/threadlib.c
@@ -0,0 +1,108 @@
+/* Multithreading primitives.
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005. */
+
+#include <config.h>
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS
+
+/* Use the POSIX threads library. */
+
+# include <errno.h>
+# include <pthread.h>
+# include <stdlib.h>
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+# if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */
+
+/* Test using pthread_key_create. */
+
+int
+glthread_in_use (void)
+{
+ static int tested;
+ static int result; /* 1: linked with -lpthread, 0: only with libc */
+
+ if (!tested)
+ {
+ pthread_key_t key;
+ int err = pthread_key_create (&key, NULL);
+
+ if (err == ENOSYS)
+ result = 0;
+ else
+ {
+ result = 1;
+ if (err == 0)
+ pthread_key_delete (key);
+ }
+ tested = 1;
+ }
+ return result;
+}
+
+# else /* Solaris, HP-UX */
+
+/* Test using pthread_create. */
+
+/* The function to be executed by a dummy thread. */
+static void *
+dummy_thread_func (void *arg)
+{
+ return arg;
+}
+
+int
+glthread_in_use (void)
+{
+ static int tested;
+ static int result; /* 1: linked with -lpthread, 0: only with libc */
+
+ if (!tested)
+ {
+ pthread_t thread;
+
+ if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0)
+ /* Thread creation failed. */
+ result = 0;
+ else
+ {
+ /* Thread creation works. */
+ void *retval;
+ if (pthread_join (thread, &retval) != 0)
+ abort ();
+ result = 1;
+ }
+ tested = 1;
+ }
+ return result;
+}
+
+# endif
+
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
new file mode 100644
index 0000000..83cd117
--- /dev/null
+++ b/lib/gnulib.mk
@@ -0,0 +1,2658 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by:
+# gnulib-tool --import --local-dir=gl \
+# --lib=libgnulib \
+# --source-base=lib \
+# --m4-base=m4 \
+# --doc-base=doc \
+# --tests-base=gnulib-tests \
+# --aux-dir=build-aux \
+# --with-tests \
+# --makefile-name=gnulib.mk \
+# --no-conditional-dependencies \
+# --libtool \
+# --macro-prefix=gl \
+# --avoid=dummy \
+# alloca \
+# announce-gen \
+# argmatch \
+# assert \
+# c-ctype \
+# c-strcase \
+# calloc-gnu \
+# canonicalize-lgpl \
+# close \
+# closeout \
+# config-h \
+# configmake \
+# dirname \
+# do-release-commit-and-tag \
+# fdl \
+# fsync \
+# gettext-h \
+# git-version-gen \
+# gitlog-to-changelog \
+# gnu-web-doc-update \
+# gnumakefile \
+# gnupload \
+# inttypes \
+# lib-ignore \
+# long-options \
+# lseek \
+# maintainer-makefile \
+# malloc-gnu \
+# manywarnings \
+# mkstemp \
+# mktempd \
+# progname \
+# realloc-gnu \
+# rpmatch \
+# safe-read \
+# stdbool \
+# strdup-posix \
+# unlink \
+# update-copyright \
+# useless-if-before-free \
+# usleep \
+# vc-list-files \
+# version-etc-fsf \
+# warnings \
+# xstrtol \
+# xstrtoll
+
+
+MOSTLYCLEANFILES += core *.stackdump
+# No GNU Make output.
+
+noinst_LTLIBRARIES += libgnulib.la
+
+libgnulib_la_SOURCES =
+libgnulib_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)
+libgnulib_la_LIBADD = $(gl_LTLIBOBJS)
+libgnulib_la_DEPENDENCIES = $(gl_LTLIBOBJS)
+EXTRA_libgnulib_la_SOURCES =
+libgnulib_la_LDFLAGS = $(AM_LDFLAGS)
+libgnulib_la_LDFLAGS += -no-undefined
+libgnulib_la_LDFLAGS += $(CLOCK_TIME_LIB)
+libgnulib_la_LDFLAGS += $(GETRANDOM_LIB)
+libgnulib_la_LDFLAGS += $(HARD_LOCALE_LIB)
+libgnulib_la_LDFLAGS += $(LIBTHREAD)
+libgnulib_la_LDFLAGS += $(LTLIBINTL)
+libgnulib_la_LDFLAGS += $(MBRTOWC_LIB)
+libgnulib_la_LDFLAGS += $(SETLOCALE_NULL_LIB)
+
+## begin gnulib module absolute-header
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER)
+
+## end gnulib module absolute-header
+
+## begin gnulib module alloca
+
+
+libgnulib_la_LIBADD += @LTALLOCA@
+libgnulib_la_DEPENDENCIES += @LTALLOCA@
+EXTRA_DIST += alloca.c
+
+EXTRA_libgnulib_la_SOURCES += alloca.c
+
+## end gnulib module alloca
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+alloca.h: alloca.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \
+ $(srcdir)/alloca.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+alloca.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += alloca.h alloca.h-t
+
+EXTRA_DIST += alloca.in.h
+
+## end gnulib module alloca-opt
+
+## begin gnulib module announce-gen
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen
+
+## end gnulib module announce-gen
+
+## begin gnulib module argmatch
+
+libgnulib_la_SOURCES += argmatch.c
+
+EXTRA_DIST += argmatch.h
+
+## end gnulib module argmatch
+
+## begin gnulib module assert-h
+
+BUILT_SOURCES += $(ASSERT_H)
+
+# We need the following in order to create <assert.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ASSERT_H
+assert.h: assert.in.h verify.h $(top_builddir)/config.status
+ $(gl_V_at){ $(SED_HEADER_STDOUT) \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \
+ < $(srcdir)/assert.in.h && \
+ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \
+ -e 's|_gl_verify|_gl_static_assert|g' \
+ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \
+ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \
+ < $(srcdir)/verify.h; \
+ } > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+assert.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += assert.h assert.h-t
+
+EXTRA_DIST += assert.in.h verify.h
+
+## end gnulib module assert-h
+
+## begin gnulib module assure
+
+
+EXTRA_DIST += assure.h
+
+## end gnulib module assure
+
+## begin gnulib module attribute
+
+
+EXTRA_DIST += attribute.h
+
+## end gnulib module attribute
+
+## begin gnulib module basename-lgpl
+
+libgnulib_la_SOURCES += basename-lgpl.c
+
+EXTRA_DIST += basename-lgpl.h
+
+## end gnulib module basename-lgpl
+
+## begin gnulib module btowc
+
+if GL_COND_OBJ_BTOWC
+libgnulib_la_SOURCES += btowc.c
+endif
+
+## end gnulib module btowc
+
+## begin gnulib module c-ctype
+
+libgnulib_la_SOURCES += c-ctype.h c-ctype.c
+
+## end gnulib module c-ctype
+
+## begin gnulib module c-strcase
+
+libgnulib_la_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c
+
+## end gnulib module c-strcase
+
+## begin gnulib module c-strcaseeq
+
+
+EXTRA_DIST += c-strcaseeq.h
+
+## end gnulib module c-strcaseeq
+
+## begin gnulib module calloc-gnu
+
+
+EXTRA_DIST += calloc.c
+
+EXTRA_libgnulib_la_SOURCES += calloc.c
+
+## end gnulib module calloc-gnu
+
+## begin gnulib module calloc-posix
+
+
+EXTRA_DIST += calloc.c
+
+EXTRA_libgnulib_la_SOURCES += calloc.c
+
+## end gnulib module calloc-posix
+
+## begin gnulib module canonicalize-lgpl
+
+if GL_COND_OBJ_CANONICALIZE_LGPL
+libgnulib_la_SOURCES += canonicalize-lgpl.c
+endif
+
+## end gnulib module canonicalize-lgpl
+
+## begin gnulib module cloexec
+
+libgnulib_la_SOURCES += cloexec.c
+
+EXTRA_DIST += cloexec.h
+
+## end gnulib module cloexec
+
+## begin gnulib module close
+
+if GL_COND_OBJ_CLOSE
+libgnulib_la_SOURCES += close.c
+endif
+
+## end gnulib module close
+
+## begin gnulib module close-stream
+
+libgnulib_la_SOURCES += close-stream.c
+
+EXTRA_DIST += close-stream.h
+
+## end gnulib module close-stream
+
+## begin gnulib module closeout
+
+libgnulib_la_SOURCES += closeout.c
+
+EXTRA_DIST += closeout.h
+
+## end gnulib module closeout
+
+## begin gnulib module configmake
+
+# Listed in the same order as the GNU makefile conventions, and
+# provided by autoconf 2.59c+ or 2.70.
+# The Automake-defined pkg* macros are appended, in the order
+# listed in the Automake 1.10a+ documentation.
+configmake.h: Makefile
+ $(gl_V_at){ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+ echo '#if HAVE_WINSOCK2_H'; \
+ echo '# include <winsock2.h> /* avoid mingw pollution on DATADIR */'; \
+ echo '#endif'; \
+ printf '#define PREFIX %s\n' $(prefix_c_make); \
+ printf '#define EXEC_PREFIX %s\n' $(exec_prefix_c_make); \
+ printf '#define BINDIR %s\n' $(bindir_c_make); \
+ printf '#define SBINDIR %s\n' $(sbindir_c_make); \
+ printf '#define LIBEXECDIR %s\n' $(libexecdir_c_make); \
+ printf '#define DATAROOTDIR %s\n' $(datarootdir_c_make); \
+ printf '#define DATADIR %s\n' $(datadir_c_make); \
+ printf '#define SYSCONFDIR %s\n' $(sysconfdir_c_make); \
+ printf '#define SHAREDSTATEDIR %s\n' $(sharedstatedir_c_make); \
+ printf '#define LOCALSTATEDIR %s\n' $(localstatedir_c_make); \
+ printf '#define RUNSTATEDIR %s\n' $(runstatedir_c_make); \
+ printf '#define INCLUDEDIR %s\n' $(includedir_c_make); \
+ printf '#define OLDINCLUDEDIR %s\n' $(oldincludedir_c_make); \
+ printf '#define DOCDIR %s\n' $(docdir_c_make); \
+ printf '#define INFODIR %s\n' $(infodir_c_make); \
+ printf '#define HTMLDIR %s\n' $(htmldir_c_make); \
+ printf '#define DVIDIR %s\n' $(dvidir_c_make); \
+ printf '#define PDFDIR %s\n' $(pdfdir_c_make); \
+ printf '#define PSDIR %s\n' $(psdir_c_make); \
+ printf '#define LIBDIR %s\n' $(libdir_c_make); \
+ printf '#define LISPDIR %s\n' $(lispdir_c_make); \
+ printf '#define LOCALEDIR %s\n' $(localedir_c_make); \
+ printf '#define MANDIR %s\n' $(mandir_c_make); \
+ printf '#define MANEXT %s\n' \"$(manext)\"; \
+ printf '#define PKGDATADIR %s\n' $(pkgdatadir_c_make); \
+ printf '#define PKGINCLUDEDIR %s\n' $(pkgincludedir_c_make); \
+ printf '#define PKGLIBDIR %s\n' $(pkglibdir_c_make); \
+ printf '#define PKGLIBEXECDIR %s\n' $(pkglibexecdir_c_make); \
+ } | sed '/""/d' > $@-t
+ $(AM_V_at)mv $@-t $@
+
+BUILT_SOURCES += configmake.h
+CLEANFILES += configmake.h configmake.h-t
+
+## end gnulib module configmake
+
+## begin gnulib module dirname
+
+libgnulib_la_SOURCES += dirname.c basename.c
+
+EXTRA_DIST += stripslash.c
+
+EXTRA_libgnulib_la_SOURCES += stripslash.c
+
+## end gnulib module dirname
+
+## begin gnulib module dirname-lgpl
+
+libgnulib_la_SOURCES += dirname-lgpl.c stripslash.c
+
+EXTRA_DIST += dirname.h
+
+## end gnulib module dirname-lgpl
+
+## begin gnulib module do-release-commit-and-tag
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/do-release-commit-and-tag
+
+## end gnulib module do-release-commit-and-tag
+
+## begin gnulib module dup2
+
+if GL_COND_OBJ_DUP2
+libgnulib_la_SOURCES += dup2.c
+endif
+
+## end gnulib module dup2
+
+## begin gnulib module eloop-threshold
+
+
+EXTRA_DIST += eloop-threshold.h
+
+## end gnulib module eloop-threshold
+
+## begin gnulib module errno
+
+BUILT_SOURCES += $(ERRNO_H)
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+if GL_GENERATE_ERRNO_H
+errno.h: errno.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+ $(srcdir)/errno.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+errno.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += errno.h errno.h-t
+
+EXTRA_DIST += errno.in.h
+
+## end gnulib module errno
+
+## begin gnulib module error
+
+if GL_COND_OBJ_ERROR
+libgnulib_la_SOURCES += error.c
+endif
+
+## end gnulib module error
+
+## begin gnulib module error-h
+
+BUILT_SOURCES += $(ERROR_H)
+
+# We need the following in order to create <error.h> when the system
+# doesn't have one that works.
+if GL_GENERATE_ERROR_H
+error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \
+ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \
+ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \
+ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \
+ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ $(srcdir)/error.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+error.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += error.h error.h-t
+
+EXTRA_DIST += error.in.h
+
+## end gnulib module error-h
+
+## begin gnulib module exitfail
+
+libgnulib_la_SOURCES += exitfail.c
+
+EXTRA_DIST += exitfail.h
+
+## end gnulib module exitfail
+
+## begin gnulib module fcntl
+
+if GL_COND_OBJ_FCNTL
+libgnulib_la_SOURCES += fcntl.c
+endif
+
+## end gnulib module fcntl
+
+## begin gnulib module fcntl-h
+
+BUILT_SOURCES += fcntl.h
+
+# We need the following in order to create <fcntl.h> when the system
+# doesn't have one that works with the given compiler.
+fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \
+ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \
+ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \
+ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \
+ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \
+ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \
+ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \
+ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \
+ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \
+ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \
+ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \
+ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \
+ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/fcntl.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += fcntl.h fcntl.h-t
+
+EXTRA_DIST += fcntl.in.h
+
+## end gnulib module fcntl-h
+
+## begin gnulib module fd-hook
+
+libgnulib_la_SOURCES += fd-hook.c
+
+EXTRA_DIST += fd-hook.h
+
+## end gnulib module fd-hook
+
+## begin gnulib module filename
+
+
+EXTRA_DIST += filename.h
+
+## end gnulib module filename
+
+## begin gnulib module fpending
+
+if GL_COND_OBJ_FPENDING
+libgnulib_la_SOURCES += fpending.c
+endif
+
+EXTRA_DIST += fpending.h stdio-impl.h
+
+## end gnulib module fpending
+
+## begin gnulib module free-posix
+
+if GL_COND_OBJ_FREE
+libgnulib_la_SOURCES += free.c
+endif
+
+## end gnulib module free-posix
+
+## begin gnulib module fstat
+
+if GL_COND_OBJ_FSTAT
+libgnulib_la_SOURCES += fstat.c
+endif
+
+EXTRA_DIST += stat-w32.c stat-w32.h
+
+EXTRA_libgnulib_la_SOURCES += stat-w32.c
+
+## end gnulib module fstat
+
+## begin gnulib module fsync
+
+if GL_COND_OBJ_FSYNC
+libgnulib_la_SOURCES += fsync.c
+endif
+
+## end gnulib module fsync
+
+## begin gnulib module gen-header
+
+# In 'sed', replace the pattern space with a "DO NOT EDIT" comment.
+SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,
+
+# '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT".
+SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G
+
+# '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading
+# "DO_NOT_EDIT". Although this could be done more simply via:
+# SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t
+# the -n and 'w' avoid a fork+exec, at least when GNU Make is used.
+SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t'
+
+# Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that
+gl_V_at = $(AM_V_GEN)
+
+## end gnulib module gen-header
+
+## begin gnulib module gendocs
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh
+
+## end gnulib module gendocs
+
+## begin gnulib module getdtablesize
+
+if GL_COND_OBJ_GETDTABLESIZE
+libgnulib_la_SOURCES += getdtablesize.c
+endif
+
+## end gnulib module getdtablesize
+
+## begin gnulib module getopt-posix
+
+BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H)
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_GETOPT_H
+getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ $(srcdir)/getopt.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+getopt.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+
+if GL_GENERATE_GETOPT_CDEFS_H
+getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status
+ $(AM_V_GEN)$(SED_HEADER_STDOUT) \
+ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \
+ $(srcdir)/getopt-cdefs.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+getopt-cdefs.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+
+MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t
+
+if GL_COND_OBJ_GETOPT
+libgnulib_la_SOURCES += getopt.c getopt1.c
+endif
+
+EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.in.h getopt_int.h
+
+## end gnulib module getopt-posix
+
+## begin gnulib module getprogname
+
+if GL_COND_OBJ_GETPROGNAME
+libgnulib_la_SOURCES += getprogname.c
+endif
+
+EXTRA_DIST += getprogname.h
+
+## end gnulib module getprogname
+
+## begin gnulib module getrandom
+
+if GL_COND_OBJ_GETRANDOM
+libgnulib_la_SOURCES += getrandom.c
+endif
+
+## end gnulib module getrandom
+
+## begin gnulib module gettext-h
+
+libgnulib_la_SOURCES += gettext.h
+
+## end gnulib module gettext-h
+
+## begin gnulib module git-version-gen
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/git-version-gen
+
+## end gnulib module git-version-gen
+
+## begin gnulib module gitlog-to-changelog
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gitlog-to-changelog
+
+## end gnulib module gitlog-to-changelog
+
+## begin gnulib module glibc-internal/dynarray
+
+BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h
+
+malloc/dynarray.gl.h: malloc/dynarray.h
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/dynarray.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t
+
+malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \
+ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \
+ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \
+ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ $(srcdir)/malloc/dynarray-skeleton.c > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t
+
+libgnulib_la_SOURCES += malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c malloc/dynarray_finalize.c malloc/dynarray_resize.c malloc/dynarray_resize_clear.c
+
+EXTRA_DIST += dynarray.h malloc/dynarray-skeleton.c malloc/dynarray.h
+
+EXTRA_libgnulib_la_SOURCES += malloc/dynarray-skeleton.c
+
+## end gnulib module glibc-internal/dynarray
+
+## begin gnulib module glibc-internal/scratch_buffer
+
+BUILT_SOURCES += malloc/scratch_buffer.gl.h
+
+malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \
+ -e 's|__glibc_likely|_GL_LIKELY|g' \
+ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \
+ -e '/libc_hidden_proto/d' \
+ $(srcdir)/malloc/scratch_buffer.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t
+
+libgnulib_la_SOURCES += malloc/scratch_buffer_grow.c malloc/scratch_buffer_grow_preserve.c malloc/scratch_buffer_set_array_size.c
+
+EXTRA_DIST += malloc/scratch_buffer.h scratch_buffer.h
+
+## end gnulib module glibc-internal/scratch_buffer
+
+## begin gnulib module gnu-web-doc-update
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gnu-web-doc-update
+
+## end gnulib module gnu-web-doc-update
+
+## begin gnulib module gnumakefile
+
+EXTRA_DIST += $(top_srcdir)/GNUmakefile
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+ test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+
+## end gnulib module gnumakefile
+
+## begin gnulib module gnupload
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gnupload
+
+## end gnulib module gnupload
+
+## begin gnulib module hard-locale
+
+libgnulib_la_SOURCES += hard-locale.c
+
+EXTRA_DIST += hard-locale.h
+
+## end gnulib module hard-locale
+
+## begin gnulib module ialloc
+
+libgnulib_la_SOURCES += ialloc.c
+
+EXTRA_DIST += ialloc.h
+
+## end gnulib module ialloc
+
+## begin gnulib module idx
+
+libgnulib_la_SOURCES += idx.h
+
+## end gnulib module idx
+
+## begin gnulib module intprops
+
+
+EXTRA_DIST += intprops-internal.h intprops.h
+
+## end gnulib module intprops
+
+## begin gnulib module inttypes-incomplete
+
+BUILT_SOURCES += inttypes.h
+
+# We need the following in order to create <inttypes.h> when the system
+# doesn't have one that works with the given compiler.
+inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \
+ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \
+ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \
+ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \
+ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \
+ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \
+ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \
+ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \
+ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \
+ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \
+ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \
+ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \
+ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \
+ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \
+ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \
+ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \
+ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \
+ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \
+ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/inttypes.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += inttypes.h inttypes.h-t
+
+EXTRA_DIST += inttypes.in.h
+
+## end gnulib module inttypes-incomplete
+
+## begin gnulib module langinfo
+
+BUILT_SOURCES += langinfo.h
+
+# We need the following in order to create an empty placeholder for
+# <langinfo.h> when the system doesn't have one.
+langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \
+ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \
+ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \
+ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \
+ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \
+ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \
+ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \
+ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \
+ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/langinfo.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += langinfo.h langinfo.h-t
+
+EXTRA_DIST += langinfo.in.h
+
+## end gnulib module langinfo
+
+## begin gnulib module libc-config
+
+
+EXTRA_DIST += cdefs.h libc-config.h
+
+## end gnulib module libc-config
+
+## begin gnulib module limits-h
+
+BUILT_SOURCES += $(LIMITS_H)
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+if GL_GENERATE_LIMITS_H
+limits.h: limits.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+ $(srcdir)/limits.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+limits.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += limits.h limits.h-t
+
+EXTRA_DIST += limits.in.h
+
+## end gnulib module limits-h
+
+## begin gnulib module localcharset
+
+libgnulib_la_SOURCES += localcharset.c
+
+EXTRA_DIST += localcharset.h
+
+## end gnulib module localcharset
+
+## begin gnulib module locale
+
+BUILT_SOURCES += locale.h
+
+# We need the following in order to create <locale.h> when the system
+# doesn't have one that provides all definitions.
+locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \
+ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \
+ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \
+ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \
+ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \
+ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \
+ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \
+ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \
+ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \
+ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \
+ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \
+ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \
+ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \
+ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \
+ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \
+ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \
+ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/locale.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += locale.h locale.h-t
+
+EXTRA_DIST += locale.in.h
+
+## end gnulib module locale
+
+## begin gnulib module localeconv
+
+if GL_COND_OBJ_LOCALECONV
+libgnulib_la_SOURCES += localeconv.c
+endif
+
+## end gnulib module localeconv
+
+## begin gnulib module lock
+
+libgnulib_la_SOURCES += glthread/lock.h glthread/lock.c
+
+## end gnulib module lock
+
+## begin gnulib module long-options
+
+libgnulib_la_SOURCES += long-options.c
+
+EXTRA_DIST += long-options.h
+
+## end gnulib module long-options
+
+## begin gnulib module lseek
+
+if GL_COND_OBJ_LSEEK
+libgnulib_la_SOURCES += lseek.c
+endif
+
+## end gnulib module lseek
+
+## begin gnulib module lstat
+
+if GL_COND_OBJ_LSTAT
+libgnulib_la_SOURCES += lstat.c
+endif
+
+## end gnulib module lstat
+
+## begin gnulib module maintainer-makefile
+
+EXTRA_DIST += $(top_srcdir)/maint.mk
+
+## end gnulib module maintainer-makefile
+
+## begin gnulib module malloc-gnu
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnulib_la_SOURCES += malloc.c
+
+## end gnulib module malloc-gnu
+
+## begin gnulib module malloc-posix
+
+
+EXTRA_DIST += malloc.c
+
+EXTRA_libgnulib_la_SOURCES += malloc.c
+
+## end gnulib module malloc-posix
+
+## begin gnulib module malloca
+
+libgnulib_la_SOURCES += malloca.c
+
+EXTRA_DIST += malloca.h
+
+## end gnulib module malloca
+
+## begin gnulib module mbrtowc
+
+if GL_COND_OBJ_MBRTOWC
+libgnulib_la_SOURCES += mbrtowc.c
+endif
+
+EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h
+
+EXTRA_libgnulib_la_SOURCES += lc-charset-dispatch.c mbtowc-lock.c
+
+## end gnulib module mbrtowc
+
+## begin gnulib module mbsinit
+
+if GL_COND_OBJ_MBSINIT
+libgnulib_la_SOURCES += mbsinit.c
+endif
+
+## end gnulib module mbsinit
+
+## begin gnulib module mbtowc
+
+if GL_COND_OBJ_MBTOWC
+libgnulib_la_SOURCES += mbtowc.c
+endif
+
+EXTRA_DIST += mbtowc-impl.h
+
+## end gnulib module mbtowc
+
+## begin gnulib module mempcpy
+
+if GL_COND_OBJ_MEMPCPY
+libgnulib_la_SOURCES += mempcpy.c
+endif
+
+## end gnulib module mempcpy
+
+## begin gnulib module minmax
+
+libgnulib_la_SOURCES += minmax.h
+
+## end gnulib module minmax
+
+## begin gnulib module mkdir
+
+if GL_COND_OBJ_MKDIR
+libgnulib_la_SOURCES += mkdir.c
+endif
+
+## end gnulib module mkdir
+
+## begin gnulib module mkstemp
+
+if GL_COND_OBJ_MKSTEMP
+libgnulib_la_SOURCES += mkstemp.c
+endif
+
+## end gnulib module mkstemp
+
+## begin gnulib module mktempd
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/mktempd
+
+## end gnulib module mktempd
+
+## begin gnulib module msvc-inval
+
+if GL_COND_OBJ_MSVC_INVAL
+libgnulib_la_SOURCES += msvc-inval.c
+endif
+
+EXTRA_DIST += msvc-inval.h
+
+## end gnulib module msvc-inval
+
+## begin gnulib module msvc-nothrow
+
+if GL_COND_OBJ_MSVC_NOTHROW
+libgnulib_la_SOURCES += msvc-nothrow.c
+endif
+
+EXTRA_DIST += msvc-nothrow.h
+
+## end gnulib module msvc-nothrow
+
+## begin gnulib module nl_langinfo
+
+if GL_COND_OBJ_NL_LANGINFO
+libgnulib_la_SOURCES += nl_langinfo.c
+endif
+if GL_COND_OBJ_NL_LANGINFO_LOCK
+libgnulib_la_SOURCES += nl_langinfo-lock.c
+endif
+
+EXTRA_DIST += windows-initguard.h
+
+## end gnulib module nl_langinfo
+
+## begin gnulib module open
+
+if GL_COND_OBJ_OPEN
+libgnulib_la_SOURCES += open.c
+endif
+
+## end gnulib module open
+
+## begin gnulib module pathmax
+
+
+EXTRA_DIST += pathmax.h
+
+## end gnulib module pathmax
+
+## begin gnulib module progname
+
+libgnulib_la_SOURCES += progname.h progname.c
+
+## end gnulib module progname
+
+## begin gnulib module quote
+
+
+EXTRA_DIST += quote.h
+
+## end gnulib module quote
+
+## begin gnulib module quotearg
+
+libgnulib_la_SOURCES += quotearg.c
+
+EXTRA_DIST += quote.h quotearg.h
+
+## end gnulib module quotearg
+
+## begin gnulib module rawmemchr
+
+if GL_COND_OBJ_RAWMEMCHR
+libgnulib_la_SOURCES += rawmemchr.c
+endif
+
+EXTRA_DIST += rawmemchr.valgrind
+
+## end gnulib module rawmemchr
+
+## begin gnulib module read
+
+if GL_COND_OBJ_READ
+libgnulib_la_SOURCES += read.c
+endif
+
+## end gnulib module read
+
+## begin gnulib module readlink
+
+if GL_COND_OBJ_READLINK
+libgnulib_la_SOURCES += readlink.c
+endif
+
+## end gnulib module readlink
+
+## begin gnulib module realloc-gnu
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libgnulib_la_SOURCES += realloc.c
+
+## end gnulib module realloc-gnu
+
+## begin gnulib module realloc-posix
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libgnulib_la_SOURCES += realloc.c
+
+## end gnulib module realloc-posix
+
+## begin gnulib module reallocarray
+
+if GL_COND_OBJ_REALLOCARRAY
+libgnulib_la_SOURCES += reallocarray.c
+endif
+
+## end gnulib module reallocarray
+
+## begin gnulib module regex
+
+if GL_COND_OBJ_REGEX
+libgnulib_la_SOURCES += regex.c
+endif
+
+EXTRA_DIST += regcomp.c regex.h regex_internal.c regex_internal.h regexec.c
+
+EXTRA_libgnulib_la_SOURCES += regcomp.c regex_internal.c regexec.c
+
+## end gnulib module regex
+
+## begin gnulib module rpmatch
+
+if GL_COND_OBJ_RPMATCH
+libgnulib_la_SOURCES += rpmatch.c
+endif
+
+## end gnulib module rpmatch
+
+## begin gnulib module safe-read
+
+libgnulib_la_SOURCES += safe-read.c
+
+EXTRA_DIST += safe-read.h sys-limits.h
+
+## end gnulib module safe-read
+
+## begin gnulib module setlocale-null
+
+libgnulib_la_SOURCES += setlocale_null.c
+if GL_COND_OBJ_SETLOCALE_LOCK
+libgnulib_la_SOURCES += setlocale-lock.c
+endif
+
+EXTRA_DIST += setlocale_null.h windows-initguard.h
+
+## end gnulib module setlocale-null
+
+## begin gnulib module sleep
+
+if GL_COND_OBJ_SLEEP
+libgnulib_la_SOURCES += sleep.c
+endif
+
+## end gnulib module sleep
+
+## begin gnulib module snippet/_Noreturn
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+_NORETURN_H=$(srcdir)/_Noreturn.h
+
+EXTRA_DIST += _Noreturn.h
+
+## end gnulib module snippet/_Noreturn
+
+## begin gnulib module snippet/arg-nonnull
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+ARG_NONNULL_H=$(srcdir)/arg-nonnull.h
+
+EXTRA_DIST += arg-nonnull.h
+
+## end gnulib module snippet/arg-nonnull
+
+## begin gnulib module snippet/c++defs
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+CXXDEFS_H=$(srcdir)/c++defs.h
+
+EXTRA_DIST += c++defs.h
+
+## end gnulib module snippet/c++defs
+
+## begin gnulib module snippet/warn-on-use
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+WARN_ON_USE_H=$(srcdir)/warn-on-use.h
+
+EXTRA_DIST += warn-on-use.h
+
+## end gnulib module snippet/warn-on-use
+
+## begin gnulib module stat
+
+if GL_COND_OBJ_STAT
+libgnulib_la_SOURCES += stat.c
+endif
+
+EXTRA_DIST += stat-w32.c stat-w32.h
+
+EXTRA_libgnulib_la_SOURCES += stat-w32.c
+
+## end gnulib module stat
+
+## begin gnulib module stat-time
+
+libgnulib_la_SOURCES += stat-time.c
+
+EXTRA_DIST += stat-time.h
+
+## end gnulib module stat-time
+
+## begin gnulib module stdarg
+
+BUILT_SOURCES += $(STDARG_H)
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDARG_H
+stdarg.h: stdarg.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+ $(srcdir)/stdarg.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+stdarg.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += stdarg.h stdarg.h-t
+
+EXTRA_DIST += stdarg.in.h
+
+## end gnulib module stdarg
+
+## begin gnulib module stdckdint
+
+BUILT_SOURCES += $(STDCKDINT_H)
+
+# We need the following in order to create <stdckdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDCKDINT_H
+stdckdint.h: stdckdint.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ $(srcdir)/stdckdint.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+stdckdint.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += stdckdint.h stdckdint.h-t
+
+EXTRA_DIST += intprops-internal.h stdckdint.in.h
+
+## end gnulib module stdckdint
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDDEF_H
+stddef.h: stddef.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
+ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+ $(srcdir)/stddef.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+stddef.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDINT_H
+stdint.h: stdint.in.h $(top_builddir)/config.status
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \
+ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ $(srcdir)/stdint.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+else
+stdint.h: $(top_builddir)/config.status
+ rm -f $@
+endif
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end gnulib module stdint
+
+## begin gnulib module stdio
+
+BUILT_SOURCES += stdio.h
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \
+ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \
+ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \
+ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \
+ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \
+ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \
+ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \
+ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \
+ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \
+ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \
+ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \
+ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \
+ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \
+ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \
+ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \
+ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \
+ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \
+ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \
+ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \
+ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \
+ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \
+ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \
+ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \
+ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \
+ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \
+ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \
+ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \
+ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \
+ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \
+ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \
+ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \
+ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \
+ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \
+ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \
+ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \
+ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \
+ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \
+ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \
+ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \
+ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \
+ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \
+ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \
+ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \
+ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \
+ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \
+ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \
+ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \
+ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \
+ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \
+ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \
+ < $(srcdir)/stdio.in.h | \
+ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \
+ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \
+ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \
+ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \
+ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += stdio.h stdio.h-t
+
+if GL_COND_OBJ_STDIO_READ
+libgnulib_la_SOURCES += stdio-read.c
+endif
+if GL_COND_OBJ_STDIO_WRITE
+libgnulib_la_SOURCES += stdio-write.c
+endif
+
+EXTRA_DIST += stdio.in.h
+
+## end gnulib module stdio
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \
+ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \
+ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \
+ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \
+ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \
+ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \
+ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \
+ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \
+ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \
+ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \
+ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \
+ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \
+ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \
+ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \
+ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \
+ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \
+ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \
+ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \
+ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \
+ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \
+ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \
+ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \
+ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \
+ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \
+ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \
+ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \
+ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \
+ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \
+ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \
+ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \
+ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \
+ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \
+ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \
+ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \
+ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \
+ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \
+ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \
+ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \
+ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \
+ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \
+ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \
+ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \
+ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \
+ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \
+ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \
+ < $(srcdir)/stdlib.in.h | \
+ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \
+ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \
+ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \
+ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \
+ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \
+ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \
+ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \
+ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \
+ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \
+ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \
+ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \
+ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \
+ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \
+ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \
+ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \
+ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \
+ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \
+ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \
+ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \
+ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \
+ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \
+ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \
+ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \
+ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \
+ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \
+ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \
+ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \
+ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \
+ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \
+ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \
+ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \
+ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \
+ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \
+ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \
+ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \
+ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \
+ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \
+ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \
+ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \
+ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \
+ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \
+ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \
+ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \
+ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \
+ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \
+ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \
+ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \
+ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _Noreturn/r $(_NORETURN_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end gnulib module stdlib
+
+## begin gnulib module strdup-posix
+
+if GL_COND_OBJ_STRDUP
+libgnulib_la_SOURCES += strdup.c
+endif
+
+## end gnulib module strdup-posix
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += streq.h
+
+## end gnulib module streq
+
+## begin gnulib module strerror
+
+if GL_COND_OBJ_STRERROR
+libgnulib_la_SOURCES += strerror.c
+endif
+
+## end gnulib module strerror
+
+## begin gnulib module strerror-override
+
+if GL_COND_OBJ_STRERROR_OVERRIDE
+libgnulib_la_SOURCES += strerror-override.c
+endif
+
+EXTRA_DIST += strerror-override.h
+
+## end gnulib module strerror-override
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \
+ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \
+ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \
+ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \
+ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \
+ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \
+ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \
+ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \
+ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \
+ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \
+ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \
+ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \
+ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \
+ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \
+ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \
+ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \
+ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \
+ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \
+ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \
+ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \
+ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \
+ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \
+ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \
+ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \
+ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \
+ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \
+ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \
+ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \
+ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \
+ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \
+ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \
+ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \
+ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \
+ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \
+ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \
+ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \
+ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \
+ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \
+ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \
+ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \
+ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \
+ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \
+ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \
+ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ < $(srcdir)/string.in.h | \
+ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \
+ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \
+ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \
+ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \
+ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \
+ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \
+ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \
+ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end gnulib module string
+
+## begin gnulib module strtoll
+
+if GL_COND_OBJ_STRTOLL
+libgnulib_la_SOURCES += strtoll.c
+endif
+
+EXTRA_DIST += strtol.c
+
+EXTRA_libgnulib_la_SOURCES += strtol.c
+
+## end gnulib module strtoll
+
+## begin gnulib module strtoull
+
+if GL_COND_OBJ_STRTOULL
+libgnulib_la_SOURCES += strtoull.c
+endif
+
+EXTRA_DIST += strtol.c strtoul.c
+
+EXTRA_libgnulib_la_SOURCES += strtol.c strtoul.c
+
+## end gnulib module strtoull
+
+## begin gnulib module sys_random
+
+BUILT_SOURCES += sys/random.h
+
+# We need the following in order to create <sys/random.h> when the system
+# doesn't have one.
+sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \
+ -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \
+ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \
+ -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \
+ -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/sys_random.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += sys/random.h sys/random.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_random.in.h
+
+## end gnulib module sys_random
+
+## begin gnulib module sys_stat
+
+BUILT_SOURCES += sys/stat.h
+
+# We need the following in order to create <sys/stat.h> when the system
+# has one that is incomplete.
+sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \
+ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \
+ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \
+ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \
+ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \
+ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \
+ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \
+ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \
+ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \
+ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \
+ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \
+ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \
+ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \
+ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \
+ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \
+ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \
+ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \
+ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \
+ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \
+ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \
+ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \
+ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \
+ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \
+ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \
+ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \
+ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \
+ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \
+ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \
+ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \
+ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \
+ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \
+ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \
+ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \
+ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \
+ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \
+ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \
+ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \
+ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \
+ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \
+ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \
+ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \
+ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \
+ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \
+ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \
+ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \
+ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \
+ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/sys_stat.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t
+MOSTLYCLEANDIRS += sys
+
+EXTRA_DIST += sys_stat.in.h
+
+## end gnulib module sys_stat
+
+## begin gnulib module sys_types
+
+BUILT_SOURCES += sys/types.h
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+sys/types.h: sys_types.in.h $(top_builddir)/config.status
+ $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys'
+ $(AM_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+ $(srcdir)/sys_types.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += sys/types.h sys/types.h-t
+
+EXTRA_DIST += sys_types.in.h
+
+## end gnulib module sys_types
+
+## begin gnulib module tempname
+
+libgnulib_la_SOURCES += tempname.c
+
+EXTRA_DIST += tempname.h
+
+## end gnulib module tempname
+
+## begin gnulib module threadlib
+
+libgnulib_la_SOURCES += glthread/threadlib.c
+
+## end gnulib module threadlib
+
+## begin gnulib module time-h
+
+BUILT_SOURCES += time.h
+
+# We need the following in order to create <time.h> when the system
+# doesn't have one that works with the given compiler.
+time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \
+ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \
+ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \
+ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \
+ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \
+ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \
+ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \
+ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \
+ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \
+ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \
+ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \
+ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \
+ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \
+ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \
+ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \
+ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \
+ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \
+ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \
+ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \
+ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \
+ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \
+ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \
+ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \
+ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \
+ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \
+ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \
+ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \
+ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \
+ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \
+ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \
+ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \
+ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \
+ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \
+ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/time.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += time.h time.h-t
+
+EXTRA_DIST += time.in.h
+
+## end gnulib module time-h
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+libgnulib_la_SOURCES += unistd.c
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \
+ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \
+ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \
+ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \
+ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \
+ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \
+ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \
+ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \
+ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \
+ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \
+ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \
+ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \
+ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \
+ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \
+ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \
+ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \
+ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \
+ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \
+ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \
+ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \
+ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \
+ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \
+ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \
+ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \
+ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \
+ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \
+ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \
+ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \
+ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \
+ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \
+ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \
+ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \
+ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \
+ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \
+ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \
+ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \
+ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \
+ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \
+ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \
+ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \
+ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \
+ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \
+ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \
+ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \
+ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \
+ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \
+ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \
+ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \
+ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \
+ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \
+ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \
+ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \
+ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \
+ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \
+ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \
+ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \
+ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \
+ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \
+ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \
+ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \
+ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \
+ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \
+ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \
+ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \
+ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \
+ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \
+ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \
+ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \
+ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \
+ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \
+ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \
+ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \
+ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \
+ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \
+ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \
+ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \
+ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \
+ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \
+ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \
+ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \
+ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \
+ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \
+ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \
+ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \
+ < $(srcdir)/unistd.in.h | \
+ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \
+ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \
+ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \
+ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \
+ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \
+ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \
+ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \
+ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \
+ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \
+ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \
+ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \
+ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \
+ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \
+ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \
+ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \
+ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+ | \
+ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \
+ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \
+ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \
+ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \
+ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \
+ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \
+ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \
+ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \
+ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \
+ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \
+ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \
+ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \
+ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \
+ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \
+ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \
+ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \
+ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \
+ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \
+ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \
+ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \
+ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \
+ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \
+ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \
+ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \
+ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \
+ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \
+ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \
+ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end gnulib module unistd
+
+## begin gnulib module unlink
+
+if GL_COND_OBJ_UNLINK
+libgnulib_la_SOURCES += unlink.c
+endif
+
+## end gnulib module unlink
+
+## begin gnulib module update-copyright
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright
+
+## end gnulib module update-copyright
+
+## begin gnulib module useless-if-before-free
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free
+
+## end gnulib module useless-if-before-free
+
+## begin gnulib module usleep
+
+if GL_COND_OBJ_USLEEP
+libgnulib_la_SOURCES += usleep.c
+endif
+
+## end gnulib module usleep
+
+## begin gnulib module vc-list-files
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files
+
+## end gnulib module vc-list-files
+
+## begin gnulib module verify
+
+
+EXTRA_DIST += verify.h
+
+## end gnulib module verify
+
+## begin gnulib module version-etc
+
+libgnulib_la_SOURCES += version-etc.h version-etc.c
+
+## end gnulib module version-etc
+
+## begin gnulib module version-etc-fsf
+
+libgnulib_la_SOURCES += version-etc-fsf.c
+
+## end gnulib module version-etc-fsf
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \
+ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \
+ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \
+ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \
+ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \
+ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \
+ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \
+ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \
+ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \
+ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \
+ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \
+ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \
+ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \
+ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \
+ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \
+ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \
+ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \
+ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \
+ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \
+ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \
+ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \
+ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \
+ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \
+ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \
+ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \
+ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \
+ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \
+ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \
+ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \
+ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \
+ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \
+ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \
+ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \
+ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \
+ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \
+ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \
+ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \
+ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \
+ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \
+ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \
+ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \
+ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \
+ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \
+ < $(srcdir)/wchar.in.h | \
+ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \
+ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
+ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \
+ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+ | \
+ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \
+ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \
+ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end gnulib module wchar
+
+## begin gnulib module wcrtomb
+
+if GL_COND_OBJ_WCRTOMB
+libgnulib_la_SOURCES += wcrtomb.c
+endif
+
+## end gnulib module wcrtomb
+
+## begin gnulib module wctype-h
+
+BUILT_SOURCES += wctype.h
+libgnulib_la_SOURCES += wctype-h.c
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+ $(gl_V_at)$(SED_HEADER_STDOUT) \
+ -e 's|@''GUARD_PREFIX''@|GL|g' \
+ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
+ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
+ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
+ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
+ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
+ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \
+ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \
+ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \
+ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \
+ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+ $(srcdir)/wctype.in.h > $@-t
+ $(AM_V_at)mv $@-t $@
+MOSTLYCLEANFILES += wctype.h wctype.h-t
+
+EXTRA_DIST += wctype.in.h
+
+## end gnulib module wctype-h
+
+## begin gnulib module windows-mutex
+
+if GL_COND_OBJ_WINDOWS_MUTEX
+libgnulib_la_SOURCES += windows-mutex.c
+endif
+
+EXTRA_DIST += windows-initguard.h windows-mutex.h
+
+## end gnulib module windows-mutex
+
+## begin gnulib module windows-once
+
+if GL_COND_OBJ_WINDOWS_ONCE
+libgnulib_la_SOURCES += windows-once.c
+endif
+
+EXTRA_DIST += windows-once.h
+
+## end gnulib module windows-once
+
+## begin gnulib module windows-recmutex
+
+if GL_COND_OBJ_WINDOWS_RECMUTEX
+libgnulib_la_SOURCES += windows-recmutex.c
+endif
+
+EXTRA_DIST += windows-initguard.h windows-recmutex.h
+
+## end gnulib module windows-recmutex
+
+## begin gnulib module windows-rwlock
+
+if GL_COND_OBJ_WINDOWS_RWLOCK
+libgnulib_la_SOURCES += windows-rwlock.c
+endif
+
+EXTRA_DIST += windows-initguard.h windows-rwlock.h
+
+## end gnulib module windows-rwlock
+
+## begin gnulib module xalloc
+
+libgnulib_la_SOURCES += xmalloc.c
+
+EXTRA_DIST += xalloc.h
+
+## end gnulib module xalloc
+
+## begin gnulib module xalloc-die
+
+libgnulib_la_SOURCES += xalloc-die.c
+
+EXTRA_DIST += xalloc.h
+
+## end gnulib module xalloc-die
+
+## begin gnulib module xalloc-oversized
+
+
+EXTRA_DIST += xalloc-oversized.h
+
+## end gnulib module xalloc-oversized
+
+## begin gnulib module xstrtol
+
+libgnulib_la_SOURCES += xstrtol.c xstrtoul.c
+
+EXTRA_DIST += xstrtol.h
+
+## end gnulib module xstrtol
+
+## begin gnulib module xstrtoll
+
+libgnulib_la_SOURCES += xstrtoll.c xstrtoull.c
+
+## end gnulib module xstrtoll
+
+
+mostlyclean-local: mostlyclean-generic
+ @for dir in '' $(MOSTLYCLEANDIRS); do \
+ if test -n "$$dir" && test -d $$dir; then \
+ echo "rmdir $$dir"; rmdir $$dir; \
+ fi; \
+ done; \
+ :
+distclean-local: distclean-gnulib-libobjs
+distclean-gnulib-libobjs:
+ -rm -f @gl_LIBOBJDEPS@
+maintainer-clean-local: distclean-gnulib-libobjs
diff --git a/lib/hard-locale.c b/lib/hard-locale.c
new file mode 100644
index 0000000..c01fce5
--- /dev/null
+++ b/lib/hard-locale.c
@@ -0,0 +1,47 @@
+/* hard-locale.c -- Determine whether a locale is hard.
+
+ Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "hard-locale.h"
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+
+bool
+hard_locale (int category)
+{
+ char locale[SETLOCALE_NULL_MAX];
+
+ if (setlocale_null_r (category, locale, sizeof (locale)))
+ return false;
+
+ if (!(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0))
+ return true;
+
+#if defined __ANDROID__
+ /* On Android 5.0 or newer, it is possible to set a locale that has the same
+ name as the "C" locale but in fact uses UTF-8 encoding. Cf. test case 2 in
+ <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>. */
+ if (MB_CUR_MAX > 1)
+ return true;
+#endif
+
+ return false;
+}
diff --git a/lib/hard-locale.h b/lib/hard-locale.h
new file mode 100644
index 0000000..5123d71
--- /dev/null
+++ b/lib/hard-locale.h
@@ -0,0 +1,28 @@
+/* Determine whether a locale is hard.
+
+ Copyright (C) 1999, 2003-2004, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef HARD_LOCALE_H_
+# define HARD_LOCALE_H_ 1
+
+/* Return true if the specified CATEGORY of the current locale is hard, i.e.
+ different from the C or POSIX locale that has a fixed behavior.
+ CATEGORY must be one of the LC_* values, but not LC_ALL.
+ Note: This function uses the current global locale; it ignores the
+ per-thread locale. */
+extern bool hard_locale (int category);
+
+#endif /* HARD_LOCALE_H_ */
diff --git a/lib/ialloc.c b/lib/ialloc.c
new file mode 100644
index 0000000..cd44d8c
--- /dev/null
+++ b/lib/ialloc.c
@@ -0,0 +1,21 @@
+/* malloc with idx_t rather than size_t
+
+ Copyright 2021-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#define IALLOC_INLINE _GL_EXTERN_INLINE
+#include "ialloc.h"
diff --git a/lib/ialloc.h b/lib/ialloc.h
new file mode 100644
index 0000000..1d43faf
--- /dev/null
+++ b/lib/ialloc.h
@@ -0,0 +1,100 @@
+/* ialloc.h -- malloc with idx_t rather than size_t
+
+ Copyright 2021-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef IALLOC_H_
+#define IALLOC_H_
+
+#include "idx.h"
+
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef IALLOC_INLINE
+# define IALLOC_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+IALLOC_INLINE void * _GL_ATTRIBUTE_COLD
+_gl_alloc_nomem (void)
+{
+ errno = ENOMEM;
+ return NULL;
+}
+
+IALLOC_INLINE
+_GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/
+void *
+imalloc (idx_t s)
+{
+ return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem ();
+}
+
+IALLOC_INLINE
+/*_GL_ATTRIBUTE_DEALLOC_FREE*/
+void *
+irealloc (void *p, idx_t s)
+{
+ /* Work around GNU realloc glitch by treating a zero size as if it
+ were 1, so that returning NULL is equivalent to failing. */
+ return s <= SIZE_MAX ? realloc (p, s | !s) : _gl_alloc_nomem ();
+}
+
+IALLOC_INLINE
+_GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/
+void *
+icalloc (idx_t n, idx_t s)
+{
+ if (SIZE_MAX < n)
+ {
+ if (s != 0)
+ return _gl_alloc_nomem ();
+ n = 0;
+ }
+ if (SIZE_MAX < s)
+ {
+ if (n != 0)
+ return _gl_alloc_nomem ();
+ s = 0;
+ }
+ return calloc (n, s);
+}
+
+IALLOC_INLINE void *
+ireallocarray (void *p, idx_t n, idx_t s)
+{
+ /* Work around GNU reallocarray glitch by treating a zero size as if
+ it were 1, so that returning NULL is equivalent to failing. */
+ if (n == 0 || s == 0)
+ n = s = 1;
+ return (n <= SIZE_MAX && s <= SIZE_MAX
+ ? reallocarray (p, n, s)
+ : _gl_alloc_nomem ());
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/idx.h b/lib/idx.h
new file mode 100644
index 0000000..23020b7
--- /dev/null
+++ b/lib/idx.h
@@ -0,0 +1,134 @@
+/* A type for indices and sizes.
+ Copyright (C) 2020-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _IDX_H
+#define _IDX_H
+
+/* Get ptrdiff_t. */
+#include <stddef.h>
+
+/* Get PTRDIFF_MAX. */
+#include <stdint.h>
+
+/* The type 'idx_t' holds an (array) index or an (object) size.
+ Its implementation promotes to a signed integer type,
+ which can hold the values
+ 0..2^63-1 (on 64-bit platforms) or
+ 0..2^31-1 (on 32-bit platforms).
+
+ Why a signed integer type?
+
+ * Security: Signed types can be checked for overflow via
+ '-fsanitize=undefined', but unsigned types cannot.
+
+ * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few
+ surprising results for comparisons, such as
+
+ (int) -3 < (unsigned long) 7 => false
+ (int) -3 < (unsigned int) 7 => false
+ and on 32-bit machines:
+ (long) -3 < (unsigned int) 7 => false
+
+ This is surprising because the natural comparison order is by
+ value in the realm of infinite-precision signed integers (ℤ).
+
+ The best way to get rid of such surprises is to use signed types
+ for numerical integer values, and use unsigned types only for
+ bit masks and enums.
+
+ Why not use 'size_t' directly?
+
+ * Because 'size_t' is an unsigned type, and a signed type is better.
+ See above.
+
+ Why not use 'ssize_t'?
+
+ * 'ptrdiff_t' is more portable; it is standardized by ISO C
+ whereas 'ssize_t' is standardized only by POSIX.
+
+ * 'ssize_t' is not required to be as wide as 'size_t', and some
+ now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'.
+
+ * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider
+ than 'size_t', which can be a win and conforms to POSIX.
+
+ Won't this cause a problem with objects larger than PTRDIFF_MAX?
+
+ * Typical modern or large platforms do not allocate such objects,
+ so this is not much of a problem in practice; for example, you
+ can safely write 'idx_t len = strlen (s);'. To port to older
+ small platforms where allocations larger than PTRDIFF_MAX could
+ in theory be a problem, you can use Gnulib's ialloc module, or
+ functions like ximalloc in Gnulib's xalloc module.
+
+ Why not use 'ptrdiff_t' directly?
+
+ * Maintainability: When reading and modifying code, it helps to know that
+ a certain variable cannot have negative values. For example, when you
+ have a loop
+
+ int n = ...;
+ for (int i = 0; i < n; i++) ...
+
+ or
+
+ ptrdiff_t n = ...;
+ for (ptrdiff_t i = 0; i < n; i++) ...
+
+ you have to ask yourself "what if n < 0?". Whereas in
+
+ idx_t n = ...;
+ for (idx_t i = 0; i < n; i++) ...
+
+ you know that this case cannot happen.
+
+ Similarly, when a programmer writes
+
+ idx_t = ptr2 - ptr1;
+
+ there is an implied assertion that ptr1 and ptr2 point into the same
+ object and that ptr1 <= ptr2.
+
+ * Being future-proof: In the future, range types (integers which are
+ constrained to a certain range of values) may be added to C compilers
+ or to the C standard. Several programming languages (Ada, Haskell,
+ Common Lisp, Pascal) already have range types. Such range types may
+ help producing good code and good warnings. The type 'idx_t' could
+ then be typedef'ed to a range type that is signed after promotion. */
+
+/* In the future, idx_t could be typedef'ed to a signed range type.
+ The clang "extended integer types", supported in Clang 11 or newer
+ <https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>,
+ are a special case of range types. However, these types don't support binary
+ operators with plain integer types (e.g. expressions such as x > 1).
+ Therefore, they don't behave like signed types (and not like unsigned types
+ either). So, we cannot use them here. */
+
+/* Use the signed type 'ptrdiff_t'. */
+/* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same
+ size, but it is so on all platforms we have seen since 1990. */
+typedef ptrdiff_t idx_t;
+
+/* IDX_MAX is the maximum value of an idx_t. */
+#define IDX_MAX PTRDIFF_MAX
+
+/* So far no need has been found for an IDX_WIDTH macro.
+ Perhaps there should be another macro IDX_VALUE_BITS that does not
+ count the sign bit and is therefore one less than PTRDIFF_WIDTH. */
+
+#endif /* _IDX_H */
diff --git a/lib/intprops-internal.h b/lib/intprops-internal.h
new file mode 100644
index 0000000..0467a9c
--- /dev/null
+++ b/lib/intprops-internal.h
@@ -0,0 +1,392 @@
+/* intprops-internal.h -- properties of integer types not visible to users
+
+ Copyright (C) 2001-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_INTPROPS_INTERNAL_H
+#define _GL_INTPROPS_INTERNAL_H
+
+#include <limits.h>
+
+/* Return a value with the common real type of E and V and the value of V.
+ Do not evaluate E. */
+#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v))
+
+/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
+ <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */
+#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v))
+
+/* The extra casts in the following macros work around compiler bugs,
+ e.g., in Cray C 5.0.3.0. */
+
+/* True if the real type T is signed. */
+#define _GL_TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Return 1 if the real expression E, after promotion, has a
+ signed or floating type. Do not evaluate E. */
+#define _GL_EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
+
+
+/* Minimum and maximum values for integer types and expressions. */
+
+/* The width in bits of the integer type or expression T.
+ Do not evaluate T. T must not be a bit-field expression.
+ Padding bits are not supported; this is checked at compile-time below. */
+#define _GL_TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT)
+
+/* The maximum and minimum values for the type of the expression E,
+ after integer promotion. E is not evaluated. */
+#define _GL_INT_MINIMUM(e) \
+ (_GL_EXPR_SIGNED (e) \
+ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_CONVERT (e, 0))
+#define _GL_INT_MAXIMUM(e) \
+ (_GL_EXPR_SIGNED (e) \
+ ? _GL_SIGNED_INT_MAXIMUM (e) \
+ : _GL_INT_NEGATE_CONVERT (e, 1))
+#define _GL_SIGNED_INT_MAXIMUM(e) \
+ (((_GL_INT_CONVERT (e, 1) << (_GL_TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1)
+
+/* Work around OpenVMS incompatibility with C99. */
+#if !defined LLONG_MAX && defined __INT64_MAX
+# define LLONG_MAX __INT64_MAX
+# define LLONG_MIN __INT64_MIN
+#endif
+
+/* This include file assumes that signed types are two's complement without
+ padding bits; the above macros have undefined behavior otherwise.
+ If this is a problem for you, please let us know how to fix it for your host.
+ This assumption is tested by the intprops-tests module. */
+
+/* Does the __typeof__ keyword work? This could be done by
+ 'configure', but for now it's easier to do it by hand. */
+#if (2 <= __GNUC__ \
+ || (4 <= __clang_major__) \
+ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \
+ || (0x5110 <= __SUNPRO_C && !__STDC__))
+# define _GL_HAVE___TYPEOF__ 1
+#else
+# define _GL_HAVE___TYPEOF__ 0
+#endif
+
+/* Return 1 if the integer type or expression T might be signed. Return 0
+ if it is definitely unsigned. T must not be a bit-field expression.
+ This macro does not evaluate its argument, and expands to an
+ integer constant expression. */
+#if _GL_HAVE___TYPEOF__
+# define _GL_SIGNED_TYPE_OR_EXPR(t) _GL_TYPE_SIGNED (__typeof__ (t))
+#else
+# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
+#endif
+
+/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
+ A should not have side effects, and A's type should be an
+ integer with minimum value MIN and maximum MAX. */
+#define _GL_INT_NEGATE_RANGE_OVERFLOW(a, min, max) \
+ ((min) < 0 ? (a) < - (max) : 0 < (a))
+
+/* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow
+ (A, B, P) work when P is non-null. */
+#ifdef __EDG__
+/* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned
+ <https://bugs.gnu.org/53256>. */
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow)
+/* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x,
+ see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */
+#elif 7 <= __GNUC__
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 1
+#else
+# define _GL_HAS_BUILTIN_ADD_OVERFLOW 0
+#endif
+
+/* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */
+#if defined __clang_major__ && __clang_major__ < 14
+/* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW 0
+#else
+# define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW
+#endif
+
+/* True if __builtin_add_overflow_p (A, B, C) works, and similarly for
+ __builtin_sub_overflow_p and __builtin_mul_overflow_p. */
+#ifdef __EDG__
+/* In EDG-based compilers like ICC 2021.3 and earlier,
+ __builtin_add_overflow_p etc. are not treated as integral constant
+ expressions even when all arguments are. */
+# define _GL_HAS_BUILTIN_OVERFLOW_P 0
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p)
+#else
+# define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__)
+#endif
+
+#if (!defined _GL_STDCKDINT_H && 202311 <= __STDC_VERSION__ \
+ && ! (_GL_HAS_BUILTIN_ADD_OVERFLOW && _GL_HAS_BUILTIN_MUL_OVERFLOW))
+# include <stdckdint.h>
+#endif
+
+/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
+ Return 1 if the result overflows. Arguments should not have side
+ effects and A, B and *R can be of any integer type other than char,
+ bool, a bit-precise integer type, or an enumeration type. */
+#if _GL_HAS_BUILTIN_ADD_OVERFLOW
+# define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r)
+# define _GL_INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r)
+#elif defined ckd_add && defined ckd_sub && !defined _GL_STDCKDINT_H
+# define _GL_INT_ADD_WRAPV(a, b, r) ckd_add (r, + (a), + (b))
+# define _GL_INT_SUBTRACT_WRAPV(a, b, r) ckd_sub (r, + (a), + (b))
+#else
+# define _GL_INT_ADD_WRAPV(a, b, r) \
+ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW)
+# define _GL_INT_SUBTRACT_WRAPV(a, b, r) \
+ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW)
+#endif
+#if _GL_HAS_BUILTIN_MUL_OVERFLOW
+# if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \
+ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \
+ && !defined __EDG__)
+# define _GL_INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r)
+# else
+ /* Work around GCC bug 91450. */
+# define _GL_INT_MULTIPLY_WRAPV(a, b, r) \
+ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && _GL_EXPR_SIGNED (a) && _GL_EXPR_SIGNED (b) \
+ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \
+ ? ((void) __builtin_mul_overflow (a, b, r), 1) \
+ : __builtin_mul_overflow (a, b, r))
+# endif
+#elif defined ckd_mul && !defined _GL_STDCKDINT_H
+# define _GL_INT_MULTIPLY_WRAPV(a, b, r) ckd_mul (r, + (a), + (b))
+#else
+# define _GL_INT_MULTIPLY_WRAPV(a, b, r) \
+ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW)
+#endif
+
+/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See:
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193
+ https://llvm.org/bugs/show_bug.cgi?id=25390
+ For now, assume all versions of GCC-like compilers generate bogus
+ warnings for _Generic. This matters only for compilers that
+ lack relevant builtins. */
+#if __GNUC__ || defined __clang__
+# define _GL__GENERIC_BOGUS 1
+#else
+# define _GL__GENERIC_BOGUS 0
+#endif
+
+/* Store the low-order bits of A <op> B into *R, where OP specifies
+ the operation and OVERFLOW the overflow predicate. Return 1 if the
+ result overflows. Arguments should not have side effects,
+ and A, B and *R can be of any integer type other than char, bool, a
+ bit-precise integer type, or an enumeration type. */
+#if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
+ (_Generic \
+ (*(r), \
+ signed char: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ signed char, SCHAR_MIN, SCHAR_MAX), \
+ unsigned char: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ unsigned char, 0, UCHAR_MAX), \
+ short int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ short int, SHRT_MIN, SHRT_MAX), \
+ unsigned short int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ unsigned short int, 0, USHRT_MAX), \
+ int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ int, INT_MIN, INT_MAX), \
+ unsigned int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ unsigned int, 0, UINT_MAX), \
+ long int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ long int, LONG_MIN, LONG_MAX), \
+ unsigned long int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ unsigned long int, 0, ULONG_MAX), \
+ long long int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+ long long int, LLONG_MIN, LLONG_MAX), \
+ unsigned long long int: \
+ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+ unsigned long long int, 0, ULLONG_MAX)))
+#else
+/* Store the low-order bits of A <op> B into *R, where OP specifies
+ the operation and OVERFLOW the overflow predicate. If *R is
+ signed, its type is ST with bounds SMIN..SMAX; otherwise its type
+ is UT with bounds U..UMAX. ST and UT are narrower than int.
+ Return 1 if the result overflows. Arguments should not have side
+ effects, and A, B and *R can be of any integer type other than
+ char, bool, a bit-precise integer type, or an enumeration type. */
+# if _GL_HAVE___TYPEOF__
+# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \
+ (_GL_TYPE_SIGNED (__typeof__ (*(r))) \
+ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \
+ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax))
+# else
+# define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \
+ (overflow (a, b, smin, smax) \
+ ? (overflow (a, b, 0, umax) \
+ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \
+ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \
+ : (overflow (a, b, 0, umax) \
+ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \
+ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0)))
+# endif
+
+# define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \
+ (sizeof *(r) == sizeof (signed char) \
+ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
+ signed char, SCHAR_MIN, SCHAR_MAX, \
+ unsigned char, UCHAR_MAX) \
+ : sizeof *(r) == sizeof (short int) \
+ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \
+ short int, SHRT_MIN, SHRT_MAX, \
+ unsigned short int, USHRT_MAX) \
+ : sizeof *(r) == sizeof (int) \
+ ? (_GL_EXPR_SIGNED (*(r)) \
+ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ int, INT_MIN, INT_MAX) \
+ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \
+ unsigned int, 0, UINT_MAX)) \
+ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow))
+# ifdef LLONG_MAX
+# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+ (sizeof *(r) == sizeof (long int) \
+ ? (_GL_EXPR_SIGNED (*(r)) \
+ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ long int, LONG_MIN, LONG_MAX) \
+ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ unsigned long int, 0, ULONG_MAX)) \
+ : (_GL_EXPR_SIGNED (*(r)) \
+ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+ long long int, LLONG_MIN, LLONG_MAX) \
+ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \
+ unsigned long long int, 0, ULLONG_MAX)))
+# else
+# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \
+ (_GL_EXPR_SIGNED (*(r)) \
+ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ long int, LONG_MIN, LONG_MAX) \
+ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \
+ unsigned long int, 0, ULONG_MAX))
+# endif
+#endif
+
+/* Store the low-order bits of A <op> B into *R, where the operation
+ is given by OP. Use the unsigned type UT for calculation to avoid
+ overflow problems. *R's type is T, with extrema TMIN and TMAX.
+ T can be any signed integer type other than char, bool, a
+ bit-precise integer type, or an enumeration type.
+ Return 1 if the result overflows. */
+#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \
+ (overflow (a, b, tmin, tmax) \
+ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \
+ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0))
+
+/* Return 1 if the integer expressions A - B and -A would overflow,
+ respectively. Arguments should not have side effects,
+ and can be any signed integer type other than char, bool, a
+ bit-precise integer type, or an enumeration type.
+ These macros are tuned for their last input argument being a constant. */
+
+#if _GL_HAS_BUILTIN_OVERFLOW_P
+# define _GL_INT_NEGATE_OVERFLOW(a) \
+ __builtin_sub_overflow_p (0, a, (__typeof__ (- (a))) 0)
+#else
+# define _GL_INT_NEGATE_OVERFLOW(a) \
+ _GL_INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+#endif
+
+/* Return the low-order bits of A <op> B, where the operation is given
+ by OP. Use the unsigned type UT for calculation to avoid undefined
+ behavior on signed integer overflow, and convert the result to type T.
+ UT is at least as wide as T and is no narrower than unsigned int,
+ T is two's complement, and there is no padding or trap representations.
+ Assume that converting UT to T yields the low-order bits, as is
+ done in all known two's-complement C compilers. E.g., see:
+ https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html
+
+ According to the C standard, converting UT to T yields an
+ implementation-defined result or signal for values outside T's
+ range. However, code that works around this theoretical problem
+ runs afoul of a compiler bug in Oracle Studio 12.3 x86. See:
+ https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html
+ As the compiler bug is real, don't try to work around the
+ theoretical problem. */
+
+#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \
+ ((t) ((ut) (a) op (ut) (b)))
+
+/* Return true if the numeric values A + B, A - B, A * B fall outside
+ the range TMIN..TMAX. Arguments should not have side effects
+ and can be any integer type other than char, bool,
+ a bit-precise integer type, or an enumeration type.
+ TMIN should be signed and nonpositive.
+ TMAX should be positive, and should be signed unless TMIN is zero. */
+#define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \
+ ((b) < 0 \
+ ? (((tmin) \
+ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \
+ && (a) < (tmin) - (b)) \
+ : (a) <= -1 - (b)) \
+ || ((_GL_EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \
+ : (a) < 0 \
+ ? (((tmin) \
+ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \
+ && (b) < (tmin) - (a)) \
+ : (b) <= -1 - (a)) \
+ || ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \
+ && (tmax) < (a) + (b))) \
+ : (tmax) < (b) || (tmax) - (b) < (a))
+#define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \
+ (((a) < 0) == ((b) < 0) \
+ ? ((a) < (b) \
+ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \
+ : (tmax) < (a) - (b)) \
+ : (a) < 0 \
+ ? ((!_GL_EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \
+ || (a) - (tmin) < (b)) \
+ : ((! (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
+ && _GL_EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \
+ && (tmax) <= -1 - (b)) \
+ || (tmax) + (b) < (a)))
+#define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \
+ ((b) < 0 \
+ ? ((a) < 0 \
+ ? (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \
+ ? (a) < (tmax) / (b) \
+ : ((_GL_INT_NEGATE_OVERFLOW (b) \
+ ? _GL_INT_CONVERT (b, tmax) >> (_GL_TYPE_WIDTH (+ (b)) - 1) \
+ : (tmax) / -(b)) \
+ <= -1 - (a))) \
+ : _GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \
+ ? (_GL_EXPR_SIGNED (a) \
+ ? 0 < (a) + (tmin) \
+ : 0 < (a) && -1 - (tmin) < (a) - 1) \
+ : (tmin) / (b) < (a)) \
+ : (b) == 0 \
+ ? 0 \
+ : ((a) < 0 \
+ ? (_GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \
+ ? (_GL_EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \
+ : (tmin) / (a) < (b)) \
+ : (tmax) / (b) < (a)))
+
+#endif /* _GL_INTPROPS_INTERNAL_H */
diff --git a/lib/intprops.h b/lib/intprops.h
new file mode 100644
index 0000000..44b5e60
--- /dev/null
+++ b/lib/intprops.h
@@ -0,0 +1,335 @@
+/* intprops.h -- properties of integer types
+
+ Copyright (C) 2001-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_INTPROPS_H
+#define _GL_INTPROPS_H
+
+#include "intprops-internal.h"
+
+/* The extra casts in the following macros work around compiler bugs,
+ e.g., in Cray C 5.0.3.0. */
+
+/* True if the arithmetic type T is an integer type. bool counts as
+ an integer. */
+#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
+
+/* True if the real type T is signed. */
+#define TYPE_SIGNED(t) _GL_TYPE_SIGNED (t)
+
+/* Return 1 if the real expression E, after promotion, has a
+ signed or floating type. Do not evaluate E. */
+#define EXPR_SIGNED(e) _GL_EXPR_SIGNED (e)
+
+
+/* Minimum and maximum values for integer types and expressions. */
+
+/* The width in bits of the integer type or expression T.
+ Do not evaluate T. T must not be a bit-field expression.
+ Padding bits are not supported; this is checked at compile-time below. */
+#define TYPE_WIDTH(t) _GL_TYPE_WIDTH (t)
+
+/* The maximum and minimum values for the integer type T. */
+#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t))
+#define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
+
+/* Bound on length of the string representing an unsigned integer
+ value representable in B bits. log10 (2.0) < 146/485. The
+ smallest value of B where this bound is not tight is 2621. */
+#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
+
+/* Bound on length of the string representing an integer type or expression T.
+ T must not be a bit-field expression.
+
+ Subtract 1 for the sign bit if T is signed, and then add 1 more for
+ a minus sign if needed.
+
+ Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is
+ unsigned, this macro may overestimate the true bound by one byte when
+ applied to unsigned types of size 2, 4, 16, ... bytes. */
+#define INT_STRLEN_BOUND(t) \
+ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \
+ + _GL_SIGNED_TYPE_OR_EXPR (t))
+
+/* Bound on buffer size needed to represent an integer type or expression T,
+ including the terminating null. T must not be a bit-field expression. */
+#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
+
+
+/* Range overflow checks.
+
+ The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
+ operators overflow arithmetically when given the same arguments.
+ These macros do not rely on undefined or implementation-defined behavior.
+ Although their implementations are simple and straightforward,
+ they are harder to use and may be less efficient than the
+ INT_<op>_WRAPV, INT_<op>_OK, and INT_<op>_OVERFLOW macros described below.
+
+ Example usage:
+
+ long int i = ...;
+ long int j = ...;
+ if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
+ printf ("multiply would overflow");
+ else
+ printf ("product is %ld", i * j);
+
+ Restrictions on *_RANGE_OVERFLOW macros:
+
+ These macros do not check for all possible numerical problems or
+ undefined or unspecified behavior: they do not check for division
+ by zero, for bad shift counts, or for shifting negative numbers.
+
+ These macros may evaluate their arguments zero or multiple times,
+ so the arguments should not have side effects. The arithmetic
+ arguments (including the MIN and MAX arguments) must be of the same
+ integer type after the usual arithmetic conversions, and the type
+ must have minimum value MIN and maximum MAX. Unsigned types should
+ use a zero MIN of the proper type.
+
+ Because all arguments are subject to integer promotions, these
+ macros typically do not work on types narrower than 'int'.
+
+ These macros are tuned for constant MIN and MAX. For commutative
+ operations such as A + B, they are also tuned for constant B. */
+
+/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? (a) < (min) - (b) \
+ : (max) - (b) < (a))
+
+/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? (max) + (b) < (a) \
+ : (a) < (min) + (b))
+
+/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. */
+#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \
+ _GL_INT_NEGATE_RANGE_OVERFLOW (a, min, max)
+
+/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Avoid && and || as they tickle
+ bugs in Sun C 5.11 2010/08/13 and other compilers; see
+ <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */
+#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \
+ ((b) < 0 \
+ ? ((a) < 0 \
+ ? (a) < (max) / (b) \
+ : (b) == -1 \
+ ? 0 \
+ : (min) / (b) < (a)) \
+ : (b) == 0 \
+ ? 0 \
+ : ((a) < 0 \
+ ? (a) < (min) / (b) \
+ : (max) / (b) < (a)))
+
+/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Do not check for division by zero. */
+#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \
+ ((min) < 0 && (b) == -1 && (a) < - (max))
+
+/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Do not check for division by zero.
+ Mathematically, % should never overflow, but on x86-like hosts
+ INT_MIN % -1 traps, and the C standard permits this, so treat this
+ as an overflow too. */
+#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \
+ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
+
+/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
+ See above for restrictions. Here, MIN and MAX are for A only, and B need
+ not be of the same type as the other arguments. The C standard says that
+ behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
+ A is negative then A << B has undefined behavior and A >> B has
+ implementation-defined behavior, but do not check these other
+ restrictions. */
+#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \
+ ((a) < 0 \
+ ? (a) < (min) >> (b) \
+ : (max) >> (b) < (a))
+
+/* The _GL*_OVERFLOW macros have the same restrictions as the
+ *_RANGE_OVERFLOW macros, except that they do not assume that operands
+ (e.g., A and B) have the same type as MIN and MAX. Instead, they assume
+ that the result (e.g., A + B) has that type. */
+#if _GL_HAS_BUILTIN_OVERFLOW_P
+# define _GL_ADD_OVERFLOW(a, b, min, max) \
+ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0)
+# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \
+ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0)
+# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \
+ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0)
+#else
+# define _GL_ADD_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \
+ : (a) < 0 ? (b) <= (a) + (b) \
+ : (b) < 0 ? (a) <= (a) + (b) \
+ : (a) + (b) < (b))
+# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \
+ : (a) < 0 ? 1 \
+ : (b) < 0 ? (a) - (b) <= (a) \
+ : (a) < (b))
+# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \
+ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \
+ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
+#endif
+#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \
+ : (a) < 0 ? (b) <= (a) + (b) - 1 \
+ : (b) < 0 && (a) + (b) <= (a))
+#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \
+ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \
+ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \
+ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
+
+/* Return a nonzero value if A is a mathematical multiple of B, where
+ A is unsigned, B is negative, and MAX is the maximum value of A's
+ type. A's type must be the same as (A % B)'s type. Normally (A %
+ -B == 0) suffices, but things get tricky if -B would overflow. */
+#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \
+ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \
+ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \
+ ? (a) \
+ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \
+ : (a) % - (b)) \
+ == 0)
+
+/* Check for integer overflow, and report low order bits of answer.
+
+ The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
+ might not yield numerically correct answers due to arithmetic overflow.
+ The INT_<op>_WRAPV macros compute the low-order bits of the sum,
+ difference, and product of two C integers, and return 1 if these
+ low-order bits are not numerically correct.
+ These macros work correctly on all known practical hosts, and do not rely
+ on undefined behavior due to signed arithmetic overflow.
+
+ Example usage, assuming A and B are long int:
+
+ if (INT_MULTIPLY_OVERFLOW (a, b))
+ printf ("result would overflow\n");
+ else
+ printf ("result is %ld (no overflow)\n", a * b);
+
+ Example usage with WRAPV flavor:
+
+ long int result;
+ bool overflow = INT_MULTIPLY_WRAPV (a, b, &result);
+ printf ("result is %ld (%s)\n", result,
+ overflow ? "after overflow" : "no overflow");
+
+ Restrictions on these macros:
+
+ These macros do not check for all possible numerical problems or
+ undefined or unspecified behavior: they do not check for division
+ by zero, for bad shift counts, or for shifting negative numbers.
+
+ These macros may evaluate their arguments zero or multiple times, so the
+ arguments should not have side effects.
+
+ The WRAPV macros are not constant expressions. They support only
+ +, binary -, and *.
+
+ Because the WRAPV macros convert the result, they report overflow
+ in different circumstances than the OVERFLOW macros do. For
+ example, in the typical case with 16-bit 'short' and 32-bit 'int',
+ if A, B and *R are all of type 'short' then INT_ADD_OVERFLOW (A, B)
+ returns false because the addition cannot overflow after A and B
+ are converted to 'int', whereas INT_ADD_WRAPV (A, B, R) returns
+ true or false depending on whether the sum fits into 'short'.
+
+ These macros are tuned for their last input argument being a constant.
+
+ A, B, and *R should be integers; they need not be the same type,
+ and they need not be all signed or all unsigned.
+ However, none of the integer types should be bit-precise,
+ and *R's type should not be char, bool, or an enumeration type.
+
+ Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
+ A % B, and A << B would overflow, respectively. */
+
+#define INT_ADD_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
+#define INT_SUBTRACT_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
+#define INT_NEGATE_OVERFLOW(a) _GL_INT_NEGATE_OVERFLOW (a)
+#define INT_MULTIPLY_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
+#define INT_DIVIDE_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
+#define INT_REMAINDER_OVERFLOW(a, b) \
+ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
+#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
+ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
+ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
+
+/* Return 1 if the expression A <op> B would overflow,
+ where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
+ assuming MIN and MAX are the minimum and maximum for the result type.
+ Arguments should be free of side effects. */
+#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \
+ op_result_overflow (a, b, \
+ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \
+ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b)))
+
+/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R.
+ Return 1 if the result overflows. See above for restrictions. */
+#define INT_ADD_WRAPV(a, b, r) _GL_INT_ADD_WRAPV (a, b, r)
+#define INT_SUBTRACT_WRAPV(a, b, r) _GL_INT_SUBTRACT_WRAPV (a, b, r)
+#define INT_MULTIPLY_WRAPV(a, b, r) _GL_INT_MULTIPLY_WRAPV (a, b, r)
+
+/* The following macros compute A + B, A - B, and A * B, respectively.
+ If no overflow occurs, they set *R to the result and return 1;
+ otherwise, they return 0 and may modify *R.
+
+ Example usage:
+
+ long int result;
+ if (INT_ADD_OK (a, b, &result))
+ printf ("result is %ld\n", result);
+ else
+ printf ("overflow\n");
+
+ A, B, and *R should be integers; they need not be the same type,
+ and they need not be all signed or all unsigned.
+ However, none of the integer types should be bit-precise,
+ and *R's type should not be char, bool, or an enumeration type.
+
+ These macros work correctly on all known practical hosts, and do not rely
+ on undefined behavior due to signed arithmetic overflow.
+
+ These macros are not constant expressions.
+
+ These macros may evaluate their arguments zero or multiple times, so the
+ arguments should not have side effects.
+
+ These macros are tuned for B being a constant. */
+
+#define INT_ADD_OK(a, b, r) (! INT_ADD_WRAPV (a, b, r))
+#define INT_SUBTRACT_OK(a, b, r) (! INT_SUBTRACT_WRAPV (a, b, r))
+#define INT_MULTIPLY_OK(a, b, r) (! INT_MULTIPLY_WRAPV (a, b, r))
+
+#endif /* _GL_INTPROPS_H */
diff --git a/lib/inttypes.in.h b/lib/inttypes.in.h
new file mode 100644
index 0000000..5b7ef12
--- /dev/null
+++ b/lib/inttypes.in.h
@@ -0,0 +1,1028 @@
+/* Copyright (C) 2006-2023 Free Software Foundation, Inc.
+ Written by Paul Eggert, Bruno Haible, Derek Price.
+ This file is part of gnulib.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C 99 <inttypes.h> for platforms that lack it.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* Include the original <inttypes.h> if it exists, and if this file
+ has not been included yet or if this file includes gnulib stdint.h
+ which in turn includes this file.
+ The include_next requires a split double-inclusion guard. */
+#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+# if @HAVE_INTTYPES_H@
+
+ /* Some pre-C++11 <stdint.h> implementations need this. */
+# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
+# define __STDC_FORMAT_MACROS 1
+# endif
+
+# @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
+
+# define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H
+# endif
+#endif
+
+#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+#define INTTYPES_H
+
+/* Include <stdint.h> or the gnulib replacement.
+ But avoid namespace pollution on glibc systems. */
+#ifndef __GLIBC__
+# include <stdint.h>
+#endif
+/* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */
+#include <limits.h>
+/* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <stdio.h>
+#endif
+
+#if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1)
+# error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>."
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* 7.8.1 Macros for format specifiers */
+
+#if defined _TNS_R_TARGET
+ /* Tandem NonStop R series and compatible platforms released before
+ July 2005 support %Ld but not %lld. */
+# define _LONG_LONG_FORMAT_PREFIX "L"
+#else
+# define _LONG_LONG_FORMAT_PREFIX "ll"
+#endif
+
+#if !defined PRId8
+# ifdef INT8_MAX
+# define PRId8 "d"
+# endif
+#endif
+#if !defined PRIi8
+# ifdef INT8_MAX
+# define PRIi8 "i"
+# endif
+#endif
+#if !defined PRIo8
+# ifdef UINT8_MAX
+# define PRIo8 "o"
+# endif
+#endif
+#if !defined PRIu8
+# ifdef UINT8_MAX
+# define PRIu8 "u"
+# endif
+#endif
+#if !defined PRIx8
+# ifdef UINT8_MAX
+# define PRIx8 "x"
+# endif
+#endif
+#if !defined PRIX8
+# ifdef UINT8_MAX
+# define PRIX8 "X"
+# endif
+#endif
+#if !defined PRId16
+# ifdef INT16_MAX
+# define PRId16 "d"
+# endif
+#endif
+#if !defined PRIi16
+# ifdef INT16_MAX
+# define PRIi16 "i"
+# endif
+#endif
+#if !defined PRIo16
+# ifdef UINT16_MAX
+# define PRIo16 "o"
+# endif
+#endif
+#if !defined PRIu16
+# ifdef UINT16_MAX
+# define PRIu16 "u"
+# endif
+#endif
+#if !defined PRIx16
+# ifdef UINT16_MAX
+# define PRIx16 "x"
+# endif
+#endif
+#if !defined PRIX16
+# ifdef UINT16_MAX
+# define PRIX16 "X"
+# endif
+#endif
+#if !defined PRId32
+# ifdef INT32_MAX
+# define PRId32 "d"
+# endif
+#endif
+#if !defined PRIi32
+# ifdef INT32_MAX
+# define PRIi32 "i"
+# endif
+#endif
+#if !defined PRIo32
+# ifdef UINT32_MAX
+# define PRIo32 "o"
+# endif
+#endif
+#if !defined PRIu32
+# ifdef UINT32_MAX
+# define PRIu32 "u"
+# endif
+#endif
+#if !defined PRIx32
+# ifdef UINT32_MAX
+# define PRIx32 "x"
+# endif
+#endif
+#if !defined PRIX32
+# ifdef UINT32_MAX
+# define PRIX32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+# define _PRI64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _PRI64_PREFIX "I64"
+# elif LONG_MAX >> 30 == 1
+# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRId64
+# define PRId64 _PRI64_PREFIX "d"
+# endif
+# if !defined PRIi64
+# define PRIi64 _PRI64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+# define _PRIu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _PRIu64_PREFIX "I64"
+# elif ULONG_MAX >> 31 == 1
+# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined PRIo64
+# define PRIo64 _PRIu64_PREFIX "o"
+# endif
+# if !defined PRIu64
+# define PRIu64 _PRIu64_PREFIX "u"
+# endif
+# if !defined PRIx64
+# define PRIx64 _PRIu64_PREFIX "x"
+# endif
+# if !defined PRIX64
+# define PRIX64 _PRIu64_PREFIX "X"
+# endif
+#endif
+
+#if !defined PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdLEAST64
+# define PRIdLEAST64 PRId64
+# endif
+# if !defined PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+# endif
+# if !defined PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+# endif
+# if !defined PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+# endif
+# if !defined PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define PRIdFAST8 PRId64
+# else
+# define PRIdFAST8 "d"
+# endif
+#endif
+#if !defined PRIiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define PRIiFAST8 PRIi64
+# else
+# define PRIiFAST8 "i"
+# endif
+#endif
+#if !defined PRIoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIoFAST8 PRIo64
+# else
+# define PRIoFAST8 "o"
+# endif
+#endif
+#if !defined PRIuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIuFAST8 PRIu64
+# else
+# define PRIuFAST8 "u"
+# endif
+#endif
+#if !defined PRIxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIxFAST8 PRIx64
+# else
+# define PRIxFAST8 "x"
+# endif
+#endif
+#if !defined PRIXFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define PRIXFAST8 PRIX64
+# else
+# define PRIXFAST8 "X"
+# endif
+#endif
+#if !defined PRIdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define PRIdFAST16 PRId64
+# else
+# define PRIdFAST16 "d"
+# endif
+#endif
+#if !defined PRIiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define PRIiFAST16 PRIi64
+# else
+# define PRIiFAST16 "i"
+# endif
+#endif
+#if !defined PRIoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIoFAST16 PRIo64
+# else
+# define PRIoFAST16 "o"
+# endif
+#endif
+#if !defined PRIuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIuFAST16 PRIu64
+# else
+# define PRIuFAST16 "u"
+# endif
+#endif
+#if !defined PRIxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIxFAST16 PRIx64
+# else
+# define PRIxFAST16 "x"
+# endif
+#endif
+#if !defined PRIXFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define PRIXFAST16 PRIX64
+# else
+# define PRIXFAST16 "X"
+# endif
+#endif
+#if !defined PRIdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define PRIdFAST32 PRId64
+# else
+# define PRIdFAST32 "d"
+# endif
+#endif
+#if !defined PRIiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define PRIiFAST32 PRIi64
+# else
+# define PRIiFAST32 "i"
+# endif
+#endif
+#if !defined PRIoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIoFAST32 PRIo64
+# else
+# define PRIoFAST32 "o"
+# endif
+#endif
+#if !defined PRIuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIuFAST32 PRIu64
+# else
+# define PRIuFAST32 "u"
+# endif
+#endif
+#if !defined PRIxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIxFAST32 PRIx64
+# else
+# define PRIxFAST32 "x"
+# endif
+#endif
+#if !defined PRIXFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define PRIXFAST32 PRIX64
+# else
+# define PRIXFAST32 "X"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined PRIdFAST64
+# define PRIdFAST64 PRId64
+# endif
+# if !defined PRIiFAST64
+# define PRIiFAST64 PRIi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined PRIoFAST64
+# define PRIoFAST64 PRIo64
+# endif
+# if !defined PRIuFAST64
+# define PRIuFAST64 PRIu64
+# endif
+# if !defined PRIxFAST64
+# define PRIxFAST64 PRIx64
+# endif
+# if !defined PRIXFAST64
+# define PRIXFAST64 PRIX64
+# endif
+#endif
+
+#if !defined PRIdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+# define PRIdMAX PRId64
+# else
+# define PRIdMAX "ld"
+# endif
+#endif
+#if !defined PRIiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+# define PRIiMAX PRIi64
+# else
+# define PRIiMAX "li"
+# endif
+#endif
+#if !defined PRIoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define PRIoMAX PRIo64
+# else
+# define PRIoMAX "lo"
+# endif
+#endif
+#if !defined PRIuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define PRIuMAX PRIu64
+# else
+# define PRIuMAX "lu"
+# endif
+#endif
+#if !defined PRIxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define PRIxMAX PRIx64
+# else
+# define PRIxMAX "lx"
+# endif
+#endif
+#if !defined PRIXMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define PRIXMAX PRIX64
+# else
+# define PRIXMAX "lX"
+# endif
+#endif
+
+#if !defined PRIdPTR
+# ifdef INTPTR_MAX
+# define PRIdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined PRIiPTR
+# ifdef INTPTR_MAX
+# define PRIiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined PRIoPTR
+# ifdef UINTPTR_MAX
+# define PRIoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined PRIuPTR
+# ifdef UINTPTR_MAX
+# define PRIuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined PRIxPTR
+# ifdef UINTPTR_MAX
+# define PRIxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+#if !defined PRIXPTR
+# ifdef UINTPTR_MAX
+# define PRIXPTR @PRIPTR_PREFIX@ "X"
+# endif
+#endif
+
+#if !defined SCNd8
+# ifdef INT8_MAX
+# define SCNd8 "hhd"
+# endif
+#endif
+#if !defined SCNi8
+# ifdef INT8_MAX
+# define SCNi8 "hhi"
+# endif
+#endif
+#if !defined SCNo8
+# ifdef UINT8_MAX
+# define SCNo8 "hho"
+# endif
+#endif
+#if !defined SCNu8
+# ifdef UINT8_MAX
+# define SCNu8 "hhu"
+# endif
+#endif
+#if !defined SCNx8
+# ifdef UINT8_MAX
+# define SCNx8 "hhx"
+# endif
+#endif
+#if !defined SCNd16
+# ifdef INT16_MAX
+# define SCNd16 "hd"
+# endif
+#endif
+#if !defined SCNi16
+# ifdef INT16_MAX
+# define SCNi16 "hi"
+# endif
+#endif
+#if !defined SCNo16
+# ifdef UINT16_MAX
+# define SCNo16 "ho"
+# endif
+#endif
+#if !defined SCNu16
+# ifdef UINT16_MAX
+# define SCNu16 "hu"
+# endif
+#endif
+#if !defined SCNx16
+# ifdef UINT16_MAX
+# define SCNx16 "hx"
+# endif
+#endif
+#if !defined SCNd32
+# ifdef INT32_MAX
+# define SCNd32 "d"
+# endif
+#endif
+#if !defined SCNi32
+# ifdef INT32_MAX
+# define SCNi32 "i"
+# endif
+#endif
+#if !defined SCNo32
+# ifdef UINT32_MAX
+# define SCNo32 "o"
+# endif
+#endif
+#if !defined SCNu32
+# ifdef UINT32_MAX
+# define SCNu32 "u"
+# endif
+#endif
+#if !defined SCNx32
+# ifdef UINT32_MAX
+# define SCNx32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
+# define _SCN64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _SCN64_PREFIX "I64"
+# elif LONG_MAX >> 30 == 1
+# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNd64
+# define SCNd64 _SCN64_PREFIX "d"
+# endif
+# if !defined SCNi64
+# define SCNi64 _SCN64_PREFIX "i"
+# endif
+#endif
+#ifdef UINT64_MAX
+# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
+# define _SCNu64_PREFIX "l"
+# elif defined _MSC_VER || defined __MINGW32__
+# define _SCNu64_PREFIX "I64"
+# elif ULONG_MAX >> 31 == 1
+# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
+# endif
+# if !defined SCNo64
+# define SCNo64 _SCNu64_PREFIX "o"
+# endif
+# if !defined SCNu64
+# define SCNu64 _SCNu64_PREFIX "u"
+# endif
+# if !defined SCNx64
+# define SCNx64 _SCNu64_PREFIX "x"
+# endif
+#endif
+
+#if !defined SCNdLEAST8
+# define SCNdLEAST8 "hhd"
+#endif
+#if !defined SCNiLEAST8
+# define SCNiLEAST8 "hhi"
+#endif
+#if !defined SCNoLEAST8
+# define SCNoLEAST8 "hho"
+#endif
+#if !defined SCNuLEAST8
+# define SCNuLEAST8 "hhu"
+#endif
+#if !defined SCNxLEAST8
+# define SCNxLEAST8 "hhx"
+#endif
+#if !defined SCNdLEAST16
+# define SCNdLEAST16 "hd"
+#endif
+#if !defined SCNiLEAST16
+# define SCNiLEAST16 "hi"
+#endif
+#if !defined SCNoLEAST16
+# define SCNoLEAST16 "ho"
+#endif
+#if !defined SCNuLEAST16
+# define SCNuLEAST16 "hu"
+#endif
+#if !defined SCNxLEAST16
+# define SCNxLEAST16 "hx"
+#endif
+#if !defined SCNdLEAST32
+# define SCNdLEAST32 "d"
+#endif
+#if !defined SCNiLEAST32
+# define SCNiLEAST32 "i"
+#endif
+#if !defined SCNoLEAST32
+# define SCNoLEAST32 "o"
+#endif
+#if !defined SCNuLEAST32
+# define SCNuLEAST32 "u"
+#endif
+#if !defined SCNxLEAST32
+# define SCNxLEAST32 "x"
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdLEAST64
+# define SCNdLEAST64 SCNd64
+# endif
+# if !defined SCNiLEAST64
+# define SCNiLEAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoLEAST64
+# define SCNoLEAST64 SCNo64
+# endif
+# if !defined SCNuLEAST64
+# define SCNuLEAST64 SCNu64
+# endif
+# if !defined SCNxLEAST64
+# define SCNxLEAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define SCNdFAST8 SCNd64
+# elif INT_FAST8_MAX == 0x7fff
+# define SCNdFAST8 "hd"
+# elif INT_FAST8_MAX == 0x7f
+# define SCNdFAST8 "hhd"
+# else
+# define SCNdFAST8 "d"
+# endif
+#endif
+#if !defined SCNiFAST8
+# if INT_FAST8_MAX > INT32_MAX
+# define SCNiFAST8 SCNi64
+# elif INT_FAST8_MAX == 0x7fff
+# define SCNiFAST8 "hi"
+# elif INT_FAST8_MAX == 0x7f
+# define SCNiFAST8 "hhi"
+# else
+# define SCNiFAST8 "i"
+# endif
+#endif
+#if !defined SCNoFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNoFAST8 SCNo64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNoFAST8 "ho"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNoFAST8 "hho"
+# else
+# define SCNoFAST8 "o"
+# endif
+#endif
+#if !defined SCNuFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNuFAST8 SCNu64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNuFAST8 "hu"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNuFAST8 "hhu"
+# else
+# define SCNuFAST8 "u"
+# endif
+#endif
+#if !defined SCNxFAST8
+# if UINT_FAST8_MAX > UINT32_MAX
+# define SCNxFAST8 SCNx64
+# elif UINT_FAST8_MAX == 0xffff
+# define SCNxFAST8 "hx"
+# elif UINT_FAST8_MAX == 0xff
+# define SCNxFAST8 "hhx"
+# else
+# define SCNxFAST8 "x"
+# endif
+#endif
+#if !defined SCNdFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define SCNdFAST16 SCNd64
+# elif INT_FAST16_MAX == 0x7fff
+# define SCNdFAST16 "hd"
+# else
+# define SCNdFAST16 "d"
+# endif
+#endif
+#if !defined SCNiFAST16
+# if INT_FAST16_MAX > INT32_MAX
+# define SCNiFAST16 SCNi64
+# elif INT_FAST16_MAX == 0x7fff
+# define SCNiFAST16 "hi"
+# else
+# define SCNiFAST16 "i"
+# endif
+#endif
+#if !defined SCNoFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNoFAST16 SCNo64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNoFAST16 "ho"
+# else
+# define SCNoFAST16 "o"
+# endif
+#endif
+#if !defined SCNuFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNuFAST16 SCNu64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNuFAST16 "hu"
+# else
+# define SCNuFAST16 "u"
+# endif
+#endif
+#if !defined SCNxFAST16
+# if UINT_FAST16_MAX > UINT32_MAX
+# define SCNxFAST16 SCNx64
+# elif UINT_FAST16_MAX == 0xffff
+# define SCNxFAST16 "hx"
+# else
+# define SCNxFAST16 "x"
+# endif
+#endif
+#if !defined SCNdFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define SCNdFAST32 SCNd64
+# else
+# define SCNdFAST32 "d"
+# endif
+#endif
+#if !defined SCNiFAST32
+# if INT_FAST32_MAX > INT32_MAX
+# define SCNiFAST32 SCNi64
+# else
+# define SCNiFAST32 "i"
+# endif
+#endif
+#if !defined SCNoFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNoFAST32 SCNo64
+# else
+# define SCNoFAST32 "o"
+# endif
+#endif
+#if !defined SCNuFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNuFAST32 SCNu64
+# else
+# define SCNuFAST32 "u"
+# endif
+#endif
+#if !defined SCNxFAST32
+# if UINT_FAST32_MAX > UINT32_MAX
+# define SCNxFAST32 SCNx64
+# else
+# define SCNxFAST32 "x"
+# endif
+#endif
+#ifdef INT64_MAX
+# if !defined SCNdFAST64
+# define SCNdFAST64 SCNd64
+# endif
+# if !defined SCNiFAST64
+# define SCNiFAST64 SCNi64
+# endif
+#endif
+#ifdef UINT64_MAX
+# if !defined SCNoFAST64
+# define SCNoFAST64 SCNo64
+# endif
+# if !defined SCNuFAST64
+# define SCNuFAST64 SCNu64
+# endif
+# if !defined SCNxFAST64
+# define SCNxFAST64 SCNx64
+# endif
+#endif
+
+#if !defined SCNdMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+# define SCNdMAX SCNd64
+# else
+# define SCNdMAX "ld"
+# endif
+#endif
+#if !defined SCNiMAX
+# if @INT32_MAX_LT_INTMAX_MAX@
+# define SCNiMAX SCNi64
+# else
+# define SCNiMAX "li"
+# endif
+#endif
+#if !defined SCNoMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define SCNoMAX SCNo64
+# else
+# define SCNoMAX "lo"
+# endif
+#endif
+#if !defined SCNuMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define SCNuMAX SCNu64
+# else
+# define SCNuMAX "lu"
+# endif
+#endif
+#if !defined SCNxMAX
+# if @UINT32_MAX_LT_UINTMAX_MAX@
+# define SCNxMAX SCNx64
+# else
+# define SCNxMAX "lx"
+# endif
+#endif
+
+#if !defined SCNdPTR
+# ifdef INTPTR_MAX
+# define SCNdPTR @PRIPTR_PREFIX@ "d"
+# endif
+#endif
+#if !defined SCNiPTR
+# ifdef INTPTR_MAX
+# define SCNiPTR @PRIPTR_PREFIX@ "i"
+# endif
+#endif
+#if !defined SCNoPTR
+# ifdef UINTPTR_MAX
+# define SCNoPTR @PRIPTR_PREFIX@ "o"
+# endif
+#endif
+#if !defined SCNuPTR
+# ifdef UINTPTR_MAX
+# define SCNuPTR @PRIPTR_PREFIX@ "u"
+# endif
+#endif
+#if !defined SCNxPTR
+# ifdef UINTPTR_MAX
+# define SCNxPTR @PRIPTR_PREFIX@ "x"
+# endif
+#endif
+
+/* 7.8.2 Functions for greatest-width integer types */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if @GNULIB_IMAXABS@
+# if @REPLACE_IMAXABS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef imaxabs
+# define imaxabs rpl_imaxabs
+# endif
+_GL_FUNCDECL_RPL (imaxabs, intmax_t, (intmax_t x));
+_GL_CXXALIAS_RPL (imaxabs, intmax_t, (intmax_t x));
+# else
+# if !@HAVE_DECL_IMAXABS@
+_GL_FUNCDECL_SYS (imaxabs, intmax_t, (intmax_t x));
+# endif
+_GL_CXXALIAS_SYS (imaxabs, intmax_t, (intmax_t x));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (imaxabs);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxabs
+# if HAVE_RAW_DECL_IMAXABS
+_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
+ "use gnulib module imaxabs for portability");
+# endif
+#endif
+
+#if @GNULIB_IMAXDIV@
+# if !@HAVE_IMAXDIV_T@
+# if !GNULIB_defined_imaxdiv_t
+typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
+# define GNULIB_defined_imaxdiv_t 1
+# endif
+# endif
+# if @REPLACE_IMAXDIV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef imaxdiv
+# define imaxdiv rpl_imaxdiv
+# endif
+_GL_FUNCDECL_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom));
+_GL_CXXALIAS_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom));
+# else
+# if !@HAVE_DECL_IMAXDIV@
+_GL_FUNCDECL_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom));
+# endif
+_GL_CXXALIAS_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (imaxdiv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef imaxdiv
+# if HAVE_RAW_DECL_IMAXDIV
+_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
+ "use gnulib module imaxdiv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOIMAX@
+# if @REPLACE_STRTOIMAX@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strtoimax
+# define strtoimax rpl_strtoimax
+# endif
+_GL_FUNCDECL_RPL (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int));
+# else
+# if !@HAVE_DECL_STRTOIMAX@
+# undef strtoimax
+_GL_FUNCDECL_SYS (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoimax, intmax_t,
+ (const char *restrict, char **restrict, int));
+# endif
+_GL_CXXALIASWARN (strtoimax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoimax
+# if HAVE_RAW_DECL_STRTOIMAX
+_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
+ "use gnulib module strtoimax for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOUMAX@
+# if @REPLACE_STRTOUMAX@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strtoumax
+# define strtoumax rpl_strtoumax
+# endif
+_GL_FUNCDECL_RPL (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int));
+# else
+# if !@HAVE_DECL_STRTOUMAX@
+# undef strtoumax
+_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoumax, uintmax_t,
+ (const char *restrict, char **restrict, int));
+# endif
+_GL_CXXALIASWARN (strtoumax);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoumax
+# if HAVE_RAW_DECL_STRTOUMAX
+_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
+ "use gnulib module strtoumax for portability");
+# endif
+#endif
+
+/* Don't bother defining or declaring wcstoimax and wcstoumax, since
+ wide-character functions like this are hardly ever useful. */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/lib/langinfo.in.h b/lib/langinfo.in.h
new file mode 100644
index 0000000..82e1e3c
--- /dev/null
+++ b/lib/langinfo.in.h
@@ -0,0 +1,224 @@
+/* Substitute for and wrapper around <langinfo.h>.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/*
+ * POSIX <langinfo.h> for platforms that lack it or have an incomplete one.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html>
+ */
+
+#ifndef _@GUARD_PREFIX@_LANGINFO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_LANGINFO_H@
+# @INCLUDE_NEXT@ @NEXT_LANGINFO_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_LANGINFO_H
+#define _@GUARD_PREFIX@_LANGINFO_H
+
+
+#if !@HAVE_LANGINFO_H@
+
+/* A platform that lacks <langinfo.h>. */
+
+/* Assume that it also lacks <nl_types.h> and the nl_item type. */
+# if !GNULIB_defined_nl_item
+typedef int nl_item;
+# define GNULIB_defined_nl_item 1
+# endif
+
+/* nl_langinfo items of the LC_CTYPE category */
+# define CODESET 10000
+/* nl_langinfo items of the LC_NUMERIC category */
+# define RADIXCHAR 10001
+# define DECIMAL_POINT RADIXCHAR
+# define THOUSEP 10002
+# define THOUSANDS_SEP THOUSEP
+# define GROUPING 10114
+/* nl_langinfo items of the LC_TIME category */
+# define D_T_FMT 10003
+# define D_FMT 10004
+# define T_FMT 10005
+# define T_FMT_AMPM 10006
+# define AM_STR 10007
+# define PM_STR 10008
+# define DAY_1 10009
+# define DAY_2 (DAY_1 + 1)
+# define DAY_3 (DAY_1 + 2)
+# define DAY_4 (DAY_1 + 3)
+# define DAY_5 (DAY_1 + 4)
+# define DAY_6 (DAY_1 + 5)
+# define DAY_7 (DAY_1 + 6)
+# define ABDAY_1 10016
+# define ABDAY_2 (ABDAY_1 + 1)
+# define ABDAY_3 (ABDAY_1 + 2)
+# define ABDAY_4 (ABDAY_1 + 3)
+# define ABDAY_5 (ABDAY_1 + 4)
+# define ABDAY_6 (ABDAY_1 + 5)
+# define ABDAY_7 (ABDAY_1 + 6)
+# define MON_1 10023
+# define MON_2 (MON_1 + 1)
+# define MON_3 (MON_1 + 2)
+# define MON_4 (MON_1 + 3)
+# define MON_5 (MON_1 + 4)
+# define MON_6 (MON_1 + 5)
+# define MON_7 (MON_1 + 6)
+# define MON_8 (MON_1 + 7)
+# define MON_9 (MON_1 + 8)
+# define MON_10 (MON_1 + 9)
+# define MON_11 (MON_1 + 10)
+# define MON_12 (MON_1 + 11)
+# define ALTMON_1 10200
+# define ALTMON_2 (ALTMON_1 + 1)
+# define ALTMON_3 (ALTMON_1 + 2)
+# define ALTMON_4 (ALTMON_1 + 3)
+# define ALTMON_5 (ALTMON_1 + 4)
+# define ALTMON_6 (ALTMON_1 + 5)
+# define ALTMON_7 (ALTMON_1 + 6)
+# define ALTMON_8 (ALTMON_1 + 7)
+# define ALTMON_9 (ALTMON_1 + 8)
+# define ALTMON_10 (ALTMON_1 + 9)
+# define ALTMON_11 (ALTMON_1 + 10)
+# define ALTMON_12 (ALTMON_1 + 11)
+# define ABMON_1 10035
+# define ABMON_2 (ABMON_1 + 1)
+# define ABMON_3 (ABMON_1 + 2)
+# define ABMON_4 (ABMON_1 + 3)
+# define ABMON_5 (ABMON_1 + 4)
+# define ABMON_6 (ABMON_1 + 5)
+# define ABMON_7 (ABMON_1 + 6)
+# define ABMON_8 (ABMON_1 + 7)
+# define ABMON_9 (ABMON_1 + 8)
+# define ABMON_10 (ABMON_1 + 9)
+# define ABMON_11 (ABMON_1 + 10)
+# define ABMON_12 (ABMON_1 + 11)
+# define ERA 10047
+# define ERA_D_FMT 10048
+# define ERA_D_T_FMT 10049
+# define ERA_T_FMT 10050
+# define ALT_DIGITS 10051
+/* nl_langinfo items of the LC_MONETARY category */
+# define CRNCYSTR 10052
+# define CURRENCY_SYMBOL CRNCYSTR
+# define INT_CURR_SYMBOL 10100
+# define MON_DECIMAL_POINT 10101
+# define MON_THOUSANDS_SEP 10102
+# define MON_GROUPING 10103
+# define POSITIVE_SIGN 10104
+# define NEGATIVE_SIGN 10105
+# define FRAC_DIGITS 10106
+# define INT_FRAC_DIGITS 10107
+# define P_CS_PRECEDES 10108
+# define N_CS_PRECEDES 10109
+# define P_SEP_BY_SPACE 10110
+# define N_SEP_BY_SPACE 10111
+# define P_SIGN_POSN 10112
+# define N_SIGN_POSN 10113
+/* nl_langinfo items of the LC_MESSAGES category */
+# define YESEXPR 10053
+# define NOEXPR 10054
+
+#else
+
+/* A platform that has <langinfo.h>. */
+
+# if !@HAVE_LANGINFO_CODESET@
+# define CODESET 10000
+# define GNULIB_defined_CODESET 1
+# endif
+
+# if !@HAVE_LANGINFO_T_FMT_AMPM@
+# define T_FMT_AMPM 10006
+# define GNULIB_defined_T_FMT_AMPM 1
+# endif
+
+# if !@HAVE_LANGINFO_ALTMON@
+# define ALTMON_1 10200
+# define ALTMON_2 (ALTMON_1 + 1)
+# define ALTMON_3 (ALTMON_1 + 2)
+# define ALTMON_4 (ALTMON_1 + 3)
+# define ALTMON_5 (ALTMON_1 + 4)
+# define ALTMON_6 (ALTMON_1 + 5)
+# define ALTMON_7 (ALTMON_1 + 6)
+# define ALTMON_8 (ALTMON_1 + 7)
+# define ALTMON_9 (ALTMON_1 + 8)
+# define ALTMON_10 (ALTMON_1 + 9)
+# define ALTMON_11 (ALTMON_1 + 10)
+# define ALTMON_12 (ALTMON_1 + 11)
+# define GNULIB_defined_ALTMON 1
+# endif
+
+# if !@HAVE_LANGINFO_ERA@
+# define ERA 10047
+# define ERA_D_FMT 10048
+# define ERA_D_T_FMT 10049
+# define ERA_T_FMT 10050
+# define ALT_DIGITS 10051
+# define GNULIB_defined_ERA 1
+# endif
+
+# if !@HAVE_LANGINFO_YESEXPR@
+# define YESEXPR 10053
+# define NOEXPR 10054
+# define GNULIB_defined_YESEXPR 1
+# endif
+
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Declare overridden functions. */
+
+
+/* Return a piece of locale dependent information.
+ Note: The difference between nl_langinfo (CODESET) and locale_charset ()
+ is that the latter normalizes the encoding names to GNU conventions. */
+
+#if @GNULIB_NL_LANGINFO@
+# if @REPLACE_NL_LANGINFO@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef nl_langinfo
+# define nl_langinfo rpl_nl_langinfo
+# endif
+_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item));
+_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item));
+# else
+# if !@HAVE_NL_LANGINFO@
+_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item));
+# endif
+_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (nl_langinfo);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef nl_langinfo
+# if HAVE_RAW_DECL_NL_LANGINFO
+_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - "
+ "use gnulib module nl_langinfo for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_LANGINFO_H */
+#endif /* _@GUARD_PREFIX@_LANGINFO_H */
diff --git a/lib/lc-charset-dispatch.c b/lib/lc-charset-dispatch.c
new file mode 100644
index 0000000..cd74466
--- /dev/null
+++ b/lib/lc-charset-dispatch.c
@@ -0,0 +1,82 @@
+/* Dispatching based on the current locale's character encoding.
+ Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2018. */
+
+#include <config.h>
+
+/* Specification. */
+#include "lc-charset-dispatch.h"
+
+#if GNULIB_defined_mbstate_t
+
+# include "localcharset.h"
+# include "streq.h"
+
+# if GNULIB_WCHAR_SINGLE_LOCALE
+/* When we know that the locale does not change, provide a speedup by
+ caching the value of locale_encoding_classification. */
+# define locale_encoding_classification_cached locale_encoding_classification
+# else
+/* By default, don't make assumptions, hence no caching. */
+# define locale_encoding_classification_uncached locale_encoding_classification
+# endif
+
+# if GNULIB_WCHAR_SINGLE_LOCALE
+static inline
+# endif
+enc_t
+locale_encoding_classification_uncached (void)
+{
+ const char *encoding = locale_charset ();
+ if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0))
+ return enc_utf8;
+ if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0))
+ return enc_eucjp;
+ if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+ || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+ || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0))
+ return enc_94;
+ if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0))
+ return enc_euctw;
+ if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0))
+ return enc_gb18030;
+ if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0))
+ return enc_sjis;
+ return enc_other;
+}
+
+# if GNULIB_WCHAR_SINGLE_LOCALE
+
+static int cached_locale_enc = -1;
+
+enc_t
+locale_encoding_classification_cached (void)
+{
+ if (cached_locale_enc < 0)
+ cached_locale_enc = locale_encoding_classification_uncached ();
+ return cached_locale_enc;
+}
+
+# endif
+
+#else
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
+
+#endif
diff --git a/lib/lc-charset-dispatch.h b/lib/lc-charset-dispatch.h
new file mode 100644
index 0000000..c82b6a6
--- /dev/null
+++ b/lib/lc-charset-dispatch.h
@@ -0,0 +1,40 @@
+/* Dispatching based on the current locale's character encoding.
+ Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2018. */
+
+#include <wchar.h>
+
+#if GNULIB_defined_mbstate_t
+
+/* A classification of special values of the encoding of the current locale. */
+typedef enum
+ {
+ enc_other, /* other */
+ enc_utf8, /* UTF-8 */
+ enc_eucjp, /* EUC-JP */
+ enc_94, /* EUC-KR, GB2312, BIG5 */
+ enc_euctw, /* EUC-TW */
+ enc_gb18030, /* GB18030 */
+ enc_sjis /* SJIS */
+ }
+ enc_t;
+
+/* Returns a classification of special values of the encoding of the current
+ locale. */
+extern enc_t locale_encoding_classification (void);
+
+#endif
diff --git a/lib/libc-config.h b/lib/libc-config.h
new file mode 100644
index 0000000..5f5ad01
--- /dev/null
+++ b/lib/libc-config.h
@@ -0,0 +1,204 @@
+/* System definitions for code taken from the GNU C Library
+
+ Copyright 2017-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this program; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+/* This is intended to be a good-enough substitute for glibc system
+ macros like those defined in <sys/cdefs.h>, so that Gnulib code
+ shared with glibc can do this as the first #include:
+
+ #ifndef _LIBC
+ # include <libc-config.h>
+ #endif
+
+ When compiled as part of glibc this is a no-op; when compiled as
+ part of Gnulib this includes Gnulib's <config.h> and defines macros
+ that glibc library code would normally assume.
+
+ Note: This header file MUST NOT be included by public header files
+ of Gnulib. */
+
+#include <config.h>
+
+/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines
+ _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and
+ DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull.
+ Elsewhere it is harmless. */
+#include <errno.h>
+
+/* From glibc <errno.h>. */
+#ifndef __set_errno
+# define __set_errno(val) (errno = (val))
+#endif
+
+/* From glibc <features.h>. */
+
+#ifndef __GNUC_PREREQ
+# if defined __GNUC__ && defined __GNUC_MINOR__
+# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__))
+# else
+# define __GNUC_PREREQ(maj, min) 0
+# endif
+#endif
+
+#ifndef __glibc_clang_prereq
+# if defined __clang_major__ && defined __clang_minor__
+# ifdef __apple_build_version__
+/* Apple for some reason renumbers __clang_major__ and __clang_minor__.
+ Gnulib code uses only __glibc_clang_prereq (3, 5); map it to
+ 6000000 <= __apple_build_version__. Support for other calls to
+ __glibc_clang_prereq can be added here as needed. */
+# define __glibc_clang_prereq(maj, min) \
+ ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0)
+# else
+# define __glibc_clang_prereq(maj, min) \
+ ((maj) < __clang_major__ + ((min) <= __clang_minor__))
+# endif
+# else
+# define __glibc_clang_prereq(maj, min) 0
+# endif
+#endif
+
+#ifndef __attribute_nonnull__
+/* <sys/cdefs.h> either does not exist, or is too old for Gnulib.
+ Prepare to include <cdefs.h>, which is Gnulib's version of a
+ more-recent glibc <sys/cdefs.h>. */
+
+/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */
+# ifndef _FEATURES_H
+# define _FEATURES_H 1
+# endif
+/* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include
+ nonexistent files. */
+# define __GNULIB_CDEFS
+/* Undef the macros unconditionally defined by our copy of glibc
+ <sys/cdefs.h>, so that they do not clash with any system-defined
+ versions. */
+# undef _SYS_CDEFS_H
+# undef __ASMNAME
+# undef __ASMNAME2
+# undef __BEGIN_DECLS
+# undef __CONCAT
+# undef __END_DECLS
+# undef __HAVE_GENERIC_SELECTION
+# undef __LDBL_COMPAT
+# undef __LDBL_REDIR
+# undef __LDBL_REDIR1
+# undef __LDBL_REDIR1_DECL
+# undef __LDBL_REDIR1_NTH
+# undef __LDBL_REDIR2_DECL
+# undef __LDBL_REDIR_DECL
+# undef __LDBL_REDIR_NTH
+# undef __LEAF
+# undef __LEAF_ATTR
+# undef __NTH
+# undef __NTHNL
+# undef __REDIRECT
+# undef __REDIRECT_LDBL
+# undef __REDIRECT_NTH
+# undef __REDIRECT_NTHNL
+# undef __REDIRECT_NTH_LDBL
+# undef __STRING
+# undef __THROW
+# undef __THROWNL
+# undef __attr_access
+# undef __attr_access_none
+# undef __attr_dealloc
+# undef __attr_dealloc_free
+# undef __attribute__
+# undef __attribute_alloc_align__
+# undef __attribute_alloc_size__
+# undef __attribute_artificial__
+# undef __attribute_const__
+# undef __attribute_deprecated__
+# undef __attribute_deprecated_msg__
+# undef __attribute_format_arg__
+# undef __attribute_format_strfmon__
+# undef __attribute_malloc__
+# undef __attribute_maybe_unused__
+# undef __attribute_noinline__
+# undef __attribute_nonstring__
+# undef __attribute_pure__
+# undef __attribute_returns_twice__
+# undef __attribute_used__
+# undef __attribute_warn_unused_result__
+# undef __errordecl
+# undef __extension__
+# undef __extern_always_inline
+# undef __extern_inline
+# undef __flexarr
+# undef __fortified_attr_access
+# undef __fortify_function
+# undef __glibc_c99_flexarr_available
+# undef __glibc_has_attribute
+# undef __glibc_has_builtin
+# undef __glibc_has_extension
+# undef __glibc_likely
+# undef __glibc_macro_warning
+# undef __glibc_macro_warning1
+# undef __glibc_unlikely
+# undef __inline
+# undef __ptr_t
+# undef __restrict
+# undef __restrict_arr
+# undef __va_arg_pack
+# undef __va_arg_pack_len
+# undef __warnattr
+# undef __wur
+# ifndef __GNULIB_CDEFS
+# undef __bos
+# undef __bos0
+# undef __glibc_fortify
+# undef __glibc_fortify_n
+# undef __glibc_objsize
+# undef __glibc_objsize0
+# undef __glibc_safe_len_cond
+# undef __glibc_safe_or_unknown_len
+# undef __glibc_unsafe_len
+# undef __glibc_unsigned_or_positive
+# endif
+
+/* Include our copy of glibc <sys/cdefs.h>. */
+# include <cdefs.h>
+
+/* <cdefs.h> __inline is too pessimistic for non-GCC. */
+# undef __inline
+# ifndef HAVE___INLINE
+# if 199901 <= __STDC_VERSION__ || defined inline
+# define __inline inline
+# else
+# define __inline
+# endif
+# endif
+
+#endif /* defined __glibc_likely */
+
+
+/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */
+#define attribute_hidden
+#define libc_hidden_proto(name)
+#define libc_hidden_def(name)
+#define libc_hidden_weak(name)
+#define libc_hidden_ver(local, name)
+#define strong_alias(name, aliasname)
+#define weak_alias(name, aliasname)
+
+/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */
+#define SHLIB_COMPAT(lib, introduced, obsoleted) 0
+#define compat_symbol(lib, local, symbol, version) extern int dummy
+#define versioned_symbol(lib, local, symbol, version) extern int dummy
diff --git a/lib/limits.in.h b/lib/limits.in.h
new file mode 100644
index 0000000..a01b4c6
--- /dev/null
+++ b/lib/limits.in.h
@@ -0,0 +1,134 @@
+/* A GNU-like <limits.h>.
+
+ Copyright 2016-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined _GL_ALREADY_INCLUDING_LIMITS_H
+/* Special invocation convention:
+ On Haiku/x86_64, we have a sequence of nested includes
+ <limits.h> -> <syslimits.h> -> <limits.h>.
+ In this situation, LONG_MAX and INT_MAX are not yet defined,
+ therefore we should not attempt to define LONG_BIT. */
+
+#@INCLUDE_NEXT@ @NEXT_LIMITS_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+
+# define _GL_ALREADY_INCLUDING_LIMITS_H
+
+/* The include_next requires a split double-inclusion guard. */
+# @INCLUDE_NEXT@ @NEXT_LIMITS_H@
+
+# undef _GL_ALREADY_INCLUDING_LIMITS_H
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+#define _@GUARD_PREFIX@_LIMITS_H
+
+#ifndef LLONG_MIN
+# if defined LONG_LONG_MIN /* HP-UX 11.31 */
+# define LLONG_MIN LONG_LONG_MIN
+# elif defined LONGLONG_MIN /* IRIX 6.5 */
+# define LLONG_MIN LONGLONG_MIN
+# elif defined __GNUC__
+# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL)
+# endif
+#endif
+#ifndef LLONG_MAX
+# if defined LONG_LONG_MAX /* HP-UX 11.31 */
+# define LLONG_MAX LONG_LONG_MAX
+# elif defined LONGLONG_MAX /* IRIX 6.5 */
+# define LLONG_MAX LONGLONG_MAX
+# elif defined __GNUC__
+# define LLONG_MAX __LONG_LONG_MAX__
+# endif
+#endif
+#ifndef ULLONG_MAX
+# if defined ULONG_LONG_MAX /* HP-UX 11.31 */
+# define ULLONG_MAX ULONG_LONG_MAX
+# elif defined ULONGLONG_MAX /* IRIX 6.5 */
+# define ULLONG_MAX ULONGLONG_MAX
+# elif defined __GNUC__
+# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
+# endif
+#endif
+
+/* The number of usable bits in an unsigned or signed integer type
+ with minimum value MIN and maximum value MAX, as an int expression
+ suitable in #if. Cover all known practical hosts. This
+ implementation exploits the fact that MAX is 1 less than a power of
+ 2, and merely counts the number of 1 bits in MAX; "COBn" means
+ "count the number of 1 bits in the low-order n bits"). */
+#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max))
+#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n))
+#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n))
+#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n))
+#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n))
+#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n))
+#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1))
+
+#ifndef WORD_BIT
+/* Assume 'int' is 32 bits wide. */
+# define WORD_BIT 32
+#endif
+#ifndef LONG_BIT
+/* Assume 'long' is 32 or 64 bits wide. */
+# if LONG_MAX == INT_MAX
+# define LONG_BIT 32
+# else
+# define LONG_BIT 64
+# endif
+#endif
+
+/* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */
+
+#if (! defined ULLONG_WIDTH \
+ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)))
+# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
+# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
+# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
+# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX)
+# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX)
+# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX)
+# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX)
+# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX)
+# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
+# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
+# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
+#endif
+
+/* Macros specified by C23. */
+
+#if (defined _GNU_SOURCE \
+ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))
+# if ! defined BOOL_WIDTH
+# define BOOL_WIDTH 1
+# define BOOL_MAX 1
+# elif ! defined BOOL_MAX
+# define BOOL_MAX ((((1U << (BOOL_WIDTH - 1)) - 1) << 1) + 1)
+# endif
+#endif
+
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
+#endif
diff --git a/lib/localcharset.c b/lib/localcharset.c
new file mode 100644
index 0000000..7ed9c95
--- /dev/null
+++ b/lib/localcharset.c
@@ -0,0 +1,1159 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+ Copyright (C) 2000-2006, 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "localcharset.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
+# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define WINDOWS_NATIVE
+# include <locale.h>
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS. */
+# ifndef OS2
+# define OS2
+# endif
+#endif
+
+#if !defined WINDOWS_NATIVE
+# if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+# else
+# if 0 /* see comment regarding use of setlocale(), below */
+# include <locale.h>
+# endif
+# endif
+# ifdef __CYGWIN__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# endif
+#elif defined WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+ /* For the use of setlocale() below, the Gnulib override in setlocale.c is
+ not needed; see the platform lists in setlocale_null.m4. */
+# undef setlocale
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+/* For MB_CUR_MAX_L */
+#if defined DARWIN7
+# include <xlocale.h>
+#endif
+
+
+#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
+
+/* On these platforms, we use a mapping from non-canonical encoding name
+ to GNU canonical encoding name. */
+
+/* With glibc-2.1 or newer, we don't need any canonicalization,
+ because glibc has iconv and both glibc and libiconv support all
+ GNU canonical names directly. */
+# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__)
+
+struct table_entry
+{
+ const char alias[11+1];
+ const char canonical[11+1];
+};
+
+/* Table of platform-dependent mappings, sorted in ascending order. */
+static const struct table_entry alias_table[] =
+ {
+# if defined __FreeBSD__ /* FreeBSD */
+ /*{ "ARMSCII-8", "ARMSCII-8" },*/
+ { "Big5", "BIG5" },
+ { "C", "ASCII" },
+ /*{ "CP1131", "CP1131" },*/
+ /*{ "CP1251", "CP1251" },*/
+ /*{ "CP866", "CP866" },*/
+ /*{ "GB18030", "GB18030" },*/
+ /*{ "GB2312", "GB2312" },*/
+ /*{ "GBK", "GBK" },*/
+ /*{ "ISCII-DEV", "?" },*/
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-13", "ISO-8859-13" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-9", "ISO-8859-9" },
+ /*{ "KOI8-R", "KOI8-R" },*/
+ /*{ "KOI8-U", "KOI8-U" },*/
+ { "SJIS", "SHIFT_JIS" },
+ { "US-ASCII", "ASCII" },
+ { "eucCN", "GB2312" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" }
+# define alias_table_defined
+# endif
+# if defined __NetBSD__ /* NetBSD */
+ { "646", "ASCII" },
+ /*{ "ARMSCII-8", "ARMSCII-8" },*/
+ /*{ "BIG5", "BIG5" },*/
+ { "Big5-HKSCS", "BIG5-HKSCS" },
+ /*{ "CP1251", "CP1251" },*/
+ /*{ "CP866", "CP866" },*/
+ /*{ "GB18030", "GB18030" },*/
+ /*{ "GB2312", "GB2312" },*/
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-13", "ISO-8859-13" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ /*{ "KOI8-R", "KOI8-R" },*/
+ /*{ "KOI8-U", "KOI8-U" },*/
+ /*{ "PT154", "PT154" },*/
+ { "SJIS", "SHIFT_JIS" },
+ { "eucCN", "GB2312" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" },
+ { "eucTW", "EUC-TW" }
+# define alias_table_defined
+# endif
+# if defined __OpenBSD__ /* OpenBSD */
+ { "646", "ASCII" },
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-13", "ISO-8859-13" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "US-ASCII", "ASCII" }
+# define alias_table_defined
+# endif
+# if defined __APPLE__ && defined __MACH__ /* Mac OS X */
+ /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
+ useless:
+ - It returns the empty string when LANG is set to a locale of the
+ form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+ LC_CTYPE file.
+ - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+ the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+ - The documentation says:
+ "... all code that calls BSD system routines should ensure
+ that the const *char parameters of these routines are in UTF-8
+ encoding. All BSD system functions expect their string
+ parameters to be in UTF-8 encoding and nothing else."
+ It also says
+ "An additional caveat is that string parameters for files,
+ paths, and other file-system entities must be in canonical
+ UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+ characters are decomposed ..."
+ but this is not true: You can pass non-decomposed UTF-8 strings
+ to file system functions, and it is the OS which will convert
+ them to decomposed UTF-8 before accessing the file system.
+ - The Apple Terminal application displays UTF-8 by default.
+ - However, other applications are free to use different encodings:
+ - xterm uses ISO-8859-1 by default.
+ - TextEdit uses MacRoman by default.
+ We prefer UTF-8 over decomposed UTF-8-MAC because one should
+ minimize the use of decomposed Unicode. Unfortunately, through the
+ Darwin file system, decomposed UTF-8 strings are leaked into user
+ space nevertheless.
+ Then there are also the locales with encodings other than US-ASCII
+ and UTF-8. These locales can be occasionally useful to users (e.g.
+ when grepping through ISO-8859-1 encoded text files), when all their
+ file names are in US-ASCII.
+ */
+ { "ARMSCII-8", "ARMSCII-8" },
+ { "Big5", "BIG5" },
+ { "Big5HKSCS", "BIG5-HKSCS" },
+ { "CP1131", "CP1131" },
+ { "CP1251", "CP1251" },
+ { "CP866", "CP866" },
+ { "CP949", "CP949" },
+ { "GB18030", "GB18030" },
+ { "GB2312", "GB2312" },
+ { "GBK", "GBK" },
+ /*{ "ISCII-DEV", "?" },*/
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-13", "ISO-8859-13" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "KOI8-R", "KOI8-R" },
+ { "KOI8-U", "KOI8-U" },
+ { "PT154", "PT154" },
+ { "SJIS", "SHIFT_JIS" },
+ { "eucCN", "GB2312" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" }
+# define alias_table_defined
+# endif
+# if defined _AIX /* AIX */
+ /*{ "GBK", "GBK" },*/
+ { "IBM-1046", "CP1046" },
+ { "IBM-1124", "CP1124" },
+ { "IBM-1129", "CP1129" },
+ { "IBM-1252", "CP1252" },
+ { "IBM-850", "CP850" },
+ { "IBM-856", "CP856" },
+ { "IBM-921", "ISO-8859-13" },
+ { "IBM-922", "CP922" },
+ { "IBM-932", "CP932" },
+ { "IBM-943", "CP943" },
+ { "IBM-eucCN", "GB2312" },
+ { "IBM-eucJP", "EUC-JP" },
+ { "IBM-eucKR", "EUC-KR" },
+ { "IBM-eucTW", "EUC-TW" },
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-6", "ISO-8859-6" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-8", "ISO-8859-8" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "TIS-620", "TIS-620" },
+ /*{ "UTF-8", "UTF-8" },*/
+ { "big5", "BIG5" }
+# define alias_table_defined
+# endif
+# if defined __hpux /* HP-UX */
+ { "SJIS", "SHIFT_JIS" },
+ { "arabic8", "HP-ARABIC8" },
+ { "big5", "BIG5" },
+ { "cp1251", "CP1251" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" },
+ { "eucTW", "EUC-TW" },
+ { "gb18030", "GB18030" },
+ { "greek8", "HP-GREEK8" },
+ { "hebrew8", "HP-HEBREW8" },
+ { "hkbig5", "BIG5-HKSCS" },
+ { "hp15CN", "GB2312" },
+ { "iso88591", "ISO-8859-1" },
+ { "iso885913", "ISO-8859-13" },
+ { "iso885915", "ISO-8859-15" },
+ { "iso88592", "ISO-8859-2" },
+ { "iso88594", "ISO-8859-4" },
+ { "iso88595", "ISO-8859-5" },
+ { "iso88596", "ISO-8859-6" },
+ { "iso88597", "ISO-8859-7" },
+ { "iso88598", "ISO-8859-8" },
+ { "iso88599", "ISO-8859-9" },
+ { "kana8", "HP-KANA8" },
+ { "koi8r", "KOI8-R" },
+ { "roman8", "HP-ROMAN8" },
+ { "tis620", "TIS-620" },
+ { "turkish8", "HP-TURKISH8" },
+ { "utf8", "UTF-8" }
+# define alias_table_defined
+# endif
+# if defined __sgi /* IRIX */
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "eucCN", "GB2312" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" },
+ { "eucTW", "EUC-TW" }
+# define alias_table_defined
+# endif
+# if defined __osf__ /* OSF/1 */
+ /*{ "GBK", "GBK" },*/
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-8", "ISO-8859-8" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "KSC5601", "CP949" },
+ { "SJIS", "SHIFT_JIS" },
+ { "TACTIS", "TIS-620" },
+ /*{ "UTF-8", "UTF-8" },*/
+ { "big5", "BIG5" },
+ { "cp850", "CP850" },
+ { "dechanyu", "DEC-HANYU" },
+ { "dechanzi", "GB2312" },
+ { "deckanji", "DEC-KANJI" },
+ { "deckorean", "EUC-KR" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" },
+ { "eucTW", "EUC-TW" },
+ { "sdeckanji", "EUC-JP" }
+# define alias_table_defined
+# endif
+# if defined __sun /* Solaris */
+ { "5601", "EUC-KR" },
+ { "646", "ASCII" },
+ /*{ "BIG5", "BIG5" },*/
+ { "Big5-HKSCS", "BIG5-HKSCS" },
+ { "GB18030", "GB18030" },
+ /*{ "GBK", "GBK" },*/
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-11", "TIS-620" },
+ { "ISO8859-13", "ISO-8859-13" },
+ { "ISO8859-15", "ISO-8859-15" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-3", "ISO-8859-3" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-6", "ISO-8859-6" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-8", "ISO-8859-8" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "PCK", "SHIFT_JIS" },
+ { "TIS620.2533", "TIS-620" },
+ /*{ "UTF-8", "UTF-8" },*/
+ { "ansi-1251", "CP1251" },
+ { "cns11643", "EUC-TW" },
+ { "eucJP", "EUC-JP" },
+ { "gb2312", "GB2312" },
+ { "koi8-r", "KOI8-R" }
+# define alias_table_defined
+# endif
+# if defined __minix /* Minix */
+ { "646", "ASCII" }
+# define alias_table_defined
+# endif
+# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */
+ { "CP1361", "JOHAB" },
+ { "CP20127", "ASCII" },
+ { "CP20866", "KOI8-R" },
+ { "CP20936", "GB2312" },
+ { "CP21866", "KOI8-RU" },
+ { "CP28591", "ISO-8859-1" },
+ { "CP28592", "ISO-8859-2" },
+ { "CP28593", "ISO-8859-3" },
+ { "CP28594", "ISO-8859-4" },
+ { "CP28595", "ISO-8859-5" },
+ { "CP28596", "ISO-8859-6" },
+ { "CP28597", "ISO-8859-7" },
+ { "CP28598", "ISO-8859-8" },
+ { "CP28599", "ISO-8859-9" },
+ { "CP28605", "ISO-8859-15" },
+ { "CP38598", "ISO-8859-8" },
+ { "CP51932", "EUC-JP" },
+ { "CP51936", "GB2312" },
+ { "CP51949", "EUC-KR" },
+ { "CP51950", "EUC-TW" },
+ { "CP54936", "GB18030" },
+ { "CP65001", "UTF-8" },
+ { "CP936", "GBK" }
+# define alias_table_defined
+# endif
+# if defined OS2 /* OS/2 */
+ /* The list of encodings is taken from "List of OS/2 Codepages"
+ by Alex Taylor:
+ <http://altsan.org/os2/toolkits/uls/index.html#codepages>.
+ See also "__convcp() of kLIBC":
+ <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */
+ { "CP1004", "CP1252" },
+ /*{ "CP1041", "CP943" },*/
+ /*{ "CP1088", "CP949" },*/
+ { "CP1089", "ISO-8859-6" },
+ /*{ "CP1114", "CP950" },*/
+ /*{ "CP1115", "GB2312" },*/
+ { "CP1208", "UTF-8" },
+ /*{ "CP1380", "GB2312" },*/
+ { "CP1381", "GB2312" },
+ { "CP1383", "GB2312" },
+ { "CP1386", "GBK" },
+ /*{ "CP301", "CP943" },*/
+ { "CP3372", "EUC-JP" },
+ { "CP4946", "CP850" },
+ /*{ "CP5048", "JIS_X0208-1990" },*/
+ /*{ "CP5049", "JIS_X0212-1990" },*/
+ /*{ "CP5067", "KS_C_5601-1987" },*/
+ { "CP813", "ISO-8859-7" },
+ { "CP819", "ISO-8859-1" },
+ { "CP878", "KOI8-R" },
+ /*{ "CP897", "CP943" },*/
+ { "CP912", "ISO-8859-2" },
+ { "CP913", "ISO-8859-3" },
+ { "CP914", "ISO-8859-4" },
+ { "CP915", "ISO-8859-5" },
+ { "CP916", "ISO-8859-8" },
+ { "CP920", "ISO-8859-9" },
+ { "CP921", "ISO-8859-13" },
+ { "CP923", "ISO-8859-15" },
+ /*{ "CP941", "CP943" },*/
+ /*{ "CP947", "CP950" },*/
+ /*{ "CP951", "CP949" },*/
+ /*{ "CP952", "JIS_X0208-1990" },*/
+ /*{ "CP953", "JIS_X0212-1990" },*/
+ { "CP954", "EUC-JP" },
+ { "CP964", "EUC-TW" },
+ { "CP970", "EUC-KR" },
+ /*{ "CP971", "KS_C_5601-1987" },*/
+ { "IBM-1004", "CP1252" },
+ /*{ "IBM-1006", "?" },*/
+ /*{ "IBM-1008", "?" },*/
+ /*{ "IBM-1041", "CP943" },*/
+ /*{ "IBM-1051", "?" },*/
+ /*{ "IBM-1088", "CP949" },*/
+ { "IBM-1089", "ISO-8859-6" },
+ /*{ "IBM-1098", "?" },*/
+ /*{ "IBM-1114", "CP950" },*/
+ /*{ "IBM-1115", "GB2312" },*/
+ /*{ "IBM-1116", "?" },*/
+ /*{ "IBM-1117", "?" },*/
+ /*{ "IBM-1118", "?" },*/
+ /*{ "IBM-1119", "?" },*/
+ { "IBM-1124", "CP1124" },
+ { "IBM-1125", "CP1125" },
+ { "IBM-1131", "CP1131" },
+ { "IBM-1208", "UTF-8" },
+ { "IBM-1250", "CP1250" },
+ { "IBM-1251", "CP1251" },
+ { "IBM-1252", "CP1252" },
+ { "IBM-1253", "CP1253" },
+ { "IBM-1254", "CP1254" },
+ { "IBM-1255", "CP1255" },
+ { "IBM-1256", "CP1256" },
+ { "IBM-1257", "CP1257" },
+ /*{ "IBM-1275", "?" },*/
+ /*{ "IBM-1276", "?" },*/
+ /*{ "IBM-1277", "?" },*/
+ /*{ "IBM-1280", "?" },*/
+ /*{ "IBM-1281", "?" },*/
+ /*{ "IBM-1282", "?" },*/
+ /*{ "IBM-1283", "?" },*/
+ /*{ "IBM-1380", "GB2312" },*/
+ { "IBM-1381", "GB2312" },
+ { "IBM-1383", "GB2312" },
+ { "IBM-1386", "GBK" },
+ /*{ "IBM-301", "CP943" },*/
+ { "IBM-3372", "EUC-JP" },
+ { "IBM-367", "ASCII" },
+ { "IBM-437", "CP437" },
+ { "IBM-4946", "CP850" },
+ /*{ "IBM-5048", "JIS_X0208-1990" },*/
+ /*{ "IBM-5049", "JIS_X0212-1990" },*/
+ /*{ "IBM-5067", "KS_C_5601-1987" },*/
+ { "IBM-813", "ISO-8859-7" },
+ { "IBM-819", "ISO-8859-1" },
+ { "IBM-850", "CP850" },
+ /*{ "IBM-851", "?" },*/
+ { "IBM-852", "CP852" },
+ { "IBM-855", "CP855" },
+ { "IBM-856", "CP856" },
+ { "IBM-857", "CP857" },
+ /*{ "IBM-859", "?" },*/
+ { "IBM-860", "CP860" },
+ { "IBM-861", "CP861" },
+ { "IBM-862", "CP862" },
+ { "IBM-863", "CP863" },
+ { "IBM-864", "CP864" },
+ { "IBM-865", "CP865" },
+ { "IBM-866", "CP866" },
+ /*{ "IBM-868", "?" },*/
+ { "IBM-869", "CP869" },
+ { "IBM-874", "CP874" },
+ { "IBM-878", "KOI8-R" },
+ /*{ "IBM-895", "?" },*/
+ /*{ "IBM-897", "CP943" },*/
+ /*{ "IBM-907", "?" },*/
+ /*{ "IBM-909", "?" },*/
+ { "IBM-912", "ISO-8859-2" },
+ { "IBM-913", "ISO-8859-3" },
+ { "IBM-914", "ISO-8859-4" },
+ { "IBM-915", "ISO-8859-5" },
+ { "IBM-916", "ISO-8859-8" },
+ { "IBM-920", "ISO-8859-9" },
+ { "IBM-921", "ISO-8859-13" },
+ { "IBM-922", "CP922" },
+ { "IBM-923", "ISO-8859-15" },
+ { "IBM-932", "CP932" },
+ /*{ "IBM-941", "CP943" },*/
+ /*{ "IBM-942", "?" },*/
+ { "IBM-943", "CP943" },
+ /*{ "IBM-947", "CP950" },*/
+ { "IBM-949", "CP949" },
+ { "IBM-950", "CP950" },
+ /*{ "IBM-951", "CP949" },*/
+ /*{ "IBM-952", "JIS_X0208-1990" },*/
+ /*{ "IBM-953", "JIS_X0212-1990" },*/
+ { "IBM-954", "EUC-JP" },
+ /*{ "IBM-955", "?" },*/
+ { "IBM-964", "EUC-TW" },
+ { "IBM-970", "EUC-KR" },
+ /*{ "IBM-971", "KS_C_5601-1987" },*/
+ { "IBM-eucCN", "GB2312" },
+ { "IBM-eucJP", "EUC-JP" },
+ { "IBM-eucKR", "EUC-KR" },
+ { "IBM-eucTW", "EUC-TW" },
+ { "IBM33722", "EUC-JP" },
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-3", "ISO-8859-3" },
+ { "ISO8859-4", "ISO-8859-4" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-6", "ISO-8859-6" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-8", "ISO-8859-8" },
+ { "ISO8859-9", "ISO-8859-9" },
+ /*{ "JISX0201-1976", "JISX0201-1976" },*/
+ /*{ "JISX0208-1978", "?" },*/
+ /*{ "JISX0208-1983", "JIS_X0208-1983" },*/
+ /*{ "JISX0208-1990", "JIS_X0208-1990" },*/
+ /*{ "JISX0212-1990", "JIS_X0212-1990" },*/
+ /*{ "KSC5601-1987", "KS_C_5601-1987" },*/
+ { "SJIS-1", "CP943" },
+ { "SJIS-2", "CP943" },
+ { "eucJP", "EUC-JP" },
+ { "eucKR", "EUC-KR" },
+ { "eucTW-1993", "EUC-TW" }
+# define alias_table_defined
+# endif
+# if defined VMS /* OpenVMS */
+ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+ "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+ section 10.7 "Handling Different Character Sets". */
+ { "DECHANYU", "DEC-HANYU" },
+ { "DECHANZI", "GB2312" },
+ { "DECKANJI", "DEC-KANJI" },
+ { "DECKOREAN", "EUC-KR" },
+ { "ISO8859-1", "ISO-8859-1" },
+ { "ISO8859-2", "ISO-8859-2" },
+ { "ISO8859-5", "ISO-8859-5" },
+ { "ISO8859-7", "ISO-8859-7" },
+ { "ISO8859-8", "ISO-8859-8" },
+ { "ISO8859-9", "ISO-8859-9" },
+ { "SDECKANJI", "EUC-JP" },
+ { "SJIS", "SHIFT_JIS" },
+ { "eucJP", "EUC-JP" },
+ { "eucTW", "EUC-TW" }
+# define alias_table_defined
+# endif
+# ifndef alias_table_defined
+ /* Just a dummy entry, to avoid a C syntax error. */
+ { "", "" }
+# endif
+ };
+
+# endif
+
+#else
+
+/* On these platforms, we use a mapping from locale name to GNU canonical
+ encoding name. */
+
+struct table_entry
+{
+ const char locale[17+1];
+ const char canonical[11+1];
+};
+
+/* Table of platform-dependent mappings, sorted in ascending order. */
+static const struct table_entry locale_table[] =
+ {
+# if defined __FreeBSD__ /* FreeBSD 4.2 */
+ { "cs_CZ.ISO_8859-2", "ISO-8859-2" },
+ { "da_DK.DIS_8859-15", "ISO-8859-15" },
+ { "da_DK.ISO_8859-1", "ISO-8859-1" },
+ { "de_AT.DIS_8859-15", "ISO-8859-15" },
+ { "de_AT.ISO_8859-1", "ISO-8859-1" },
+ { "de_CH.DIS_8859-15", "ISO-8859-15" },
+ { "de_CH.ISO_8859-1", "ISO-8859-1" },
+ { "de_DE.DIS_8859-15", "ISO-8859-15" },
+ { "de_DE.ISO_8859-1", "ISO-8859-1" },
+ { "en_AU.DIS_8859-15", "ISO-8859-15" },
+ { "en_AU.ISO_8859-1", "ISO-8859-1" },
+ { "en_CA.DIS_8859-15", "ISO-8859-15" },
+ { "en_CA.ISO_8859-1", "ISO-8859-1" },
+ { "en_GB.DIS_8859-15", "ISO-8859-15" },
+ { "en_GB.ISO_8859-1", "ISO-8859-1" },
+ { "en_US.DIS_8859-15", "ISO-8859-15" },
+ { "en_US.ISO_8859-1", "ISO-8859-1" },
+ { "es_ES.DIS_8859-15", "ISO-8859-15" },
+ { "es_ES.ISO_8859-1", "ISO-8859-1" },
+ { "fi_FI.DIS_8859-15", "ISO-8859-15" },
+ { "fi_FI.ISO_8859-1", "ISO-8859-1" },
+ { "fr_BE.DIS_8859-15", "ISO-8859-15" },
+ { "fr_BE.ISO_8859-1", "ISO-8859-1" },
+ { "fr_CA.DIS_8859-15", "ISO-8859-15" },
+ { "fr_CA.ISO_8859-1", "ISO-8859-1" },
+ { "fr_CH.DIS_8859-15", "ISO-8859-15" },
+ { "fr_CH.ISO_8859-1", "ISO-8859-1" },
+ { "fr_FR.DIS_8859-15", "ISO-8859-15" },
+ { "fr_FR.ISO_8859-1", "ISO-8859-1" },
+ { "hr_HR.ISO_8859-2", "ISO-8859-2" },
+ { "hu_HU.ISO_8859-2", "ISO-8859-2" },
+ { "is_IS.DIS_8859-15", "ISO-8859-15" },
+ { "is_IS.ISO_8859-1", "ISO-8859-1" },
+ { "it_CH.DIS_8859-15", "ISO-8859-15" },
+ { "it_CH.ISO_8859-1", "ISO-8859-1" },
+ { "it_IT.DIS_8859-15", "ISO-8859-15" },
+ { "it_IT.ISO_8859-1", "ISO-8859-1" },
+ { "ja_JP.EUC", "EUC-JP" },
+ { "ja_JP.SJIS", "SHIFT_JIS" },
+ { "ja_JP.Shift_JIS", "SHIFT_JIS" },
+ { "ko_KR.EUC", "EUC-KR" },
+ { "la_LN.ASCII", "ASCII" },
+ { "la_LN.DIS_8859-15", "ISO-8859-15" },
+ { "la_LN.ISO_8859-1", "ISO-8859-1" },
+ { "la_LN.ISO_8859-2", "ISO-8859-2" },
+ { "la_LN.ISO_8859-4", "ISO-8859-4" },
+ { "lt_LN.ASCII", "ASCII" },
+ { "lt_LN.DIS_8859-15", "ISO-8859-15" },
+ { "lt_LN.ISO_8859-1", "ISO-8859-1" },
+ { "lt_LN.ISO_8859-2", "ISO-8859-2" },
+ { "lt_LT.ISO_8859-4", "ISO-8859-4" },
+ { "nl_BE.DIS_8859-15", "ISO-8859-15" },
+ { "nl_BE.ISO_8859-1", "ISO-8859-1" },
+ { "nl_NL.DIS_8859-15", "ISO-8859-15" },
+ { "nl_NL.ISO_8859-1", "ISO-8859-1" },
+ { "no_NO.DIS_8859-15", "ISO-8859-15" },
+ { "no_NO.ISO_8859-1", "ISO-8859-1" },
+ { "pl_PL.ISO_8859-2", "ISO-8859-2" },
+ { "pt_PT.DIS_8859-15", "ISO-8859-15" },
+ { "pt_PT.ISO_8859-1", "ISO-8859-1" },
+ { "ru_RU.CP866", "CP866" },
+ { "ru_RU.ISO_8859-5", "ISO-8859-5" },
+ { "ru_RU.KOI8-R", "KOI8-R" },
+ { "ru_SU.CP866", "CP866" },
+ { "ru_SU.ISO_8859-5", "ISO-8859-5" },
+ { "ru_SU.KOI8-R", "KOI8-R" },
+ { "sl_SI.ISO_8859-2", "ISO-8859-2" },
+ { "sv_SE.DIS_8859-15", "ISO-8859-15" },
+ { "sv_SE.ISO_8859-1", "ISO-8859-1" },
+ { "uk_UA.KOI8-U", "KOI8-U" },
+ { "zh_CN.EUC", "GB2312" },
+ { "zh_TW.BIG5", "BIG5" },
+ { "zh_TW.Big5", "BIG5" }
+# define locale_table_defined
+# endif
+# if defined __DJGPP__ /* DOS / DJGPP 2.03 */
+ /* The encodings given here may not all be correct.
+ If you find that the encoding given for your language and
+ country is not the one your DOS machine actually uses, just
+ correct it in this file, and send a mail to
+ Juan Manuel Guerrero <juan.guerrero@gmx.de>
+ and <bug-gnulib@gnu.org>. */
+ { "C", "ASCII" },
+ { "ar", "CP864" },
+ { "ar_AE", "CP864" },
+ { "ar_DZ", "CP864" },
+ { "ar_EG", "CP864" },
+ { "ar_IQ", "CP864" },
+ { "ar_IR", "CP864" },
+ { "ar_JO", "CP864" },
+ { "ar_KW", "CP864" },
+ { "ar_MA", "CP864" },
+ { "ar_OM", "CP864" },
+ { "ar_QA", "CP864" },
+ { "ar_SA", "CP864" },
+ { "ar_SY", "CP864" },
+ { "be", "CP866" },
+ { "be_BE", "CP866" },
+ { "bg", "CP866" }, /* not CP855 ?? */
+ { "bg_BG", "CP866" }, /* not CP855 ?? */
+ { "ca", "CP850" },
+ { "ca_ES", "CP850" },
+ { "cs", "CP852" },
+ { "cs_CZ", "CP852" },
+ { "da", "CP865" }, /* not CP850 ?? */
+ { "da_DK", "CP865" }, /* not CP850 ?? */
+ { "de", "CP850" },
+ { "de_AT", "CP850" },
+ { "de_CH", "CP850" },
+ { "de_DE", "CP850" },
+ { "el", "CP869" },
+ { "el_GR", "CP869" },
+ { "en", "CP850" },
+ { "en_AU", "CP850" }, /* not CP437 ?? */
+ { "en_CA", "CP850" },
+ { "en_GB", "CP850" },
+ { "en_NZ", "CP437" },
+ { "en_US", "CP437" },
+ { "en_ZA", "CP850" }, /* not CP437 ?? */
+ { "eo", "CP850" },
+ { "eo_EO", "CP850" },
+ { "es", "CP850" },
+ { "es_AR", "CP850" },
+ { "es_BO", "CP850" },
+ { "es_CL", "CP850" },
+ { "es_CO", "CP850" },
+ { "es_CR", "CP850" },
+ { "es_CU", "CP850" },
+ { "es_DO", "CP850" },
+ { "es_EC", "CP850" },
+ { "es_ES", "CP850" },
+ { "es_GT", "CP850" },
+ { "es_HN", "CP850" },
+ { "es_MX", "CP850" },
+ { "es_NI", "CP850" },
+ { "es_PA", "CP850" },
+ { "es_PE", "CP850" },
+ { "es_PY", "CP850" },
+ { "es_SV", "CP850" },
+ { "es_UY", "CP850" },
+ { "es_VE", "CP850" },
+ { "et", "CP850" },
+ { "et_EE", "CP850" },
+ { "eu", "CP850" },
+ { "eu_ES", "CP850" },
+ { "fi", "CP850" },
+ { "fi_FI", "CP850" },
+ { "fr", "CP850" },
+ { "fr_BE", "CP850" },
+ { "fr_CA", "CP850" },
+ { "fr_CH", "CP850" },
+ { "fr_FR", "CP850" },
+ { "ga", "CP850" },
+ { "ga_IE", "CP850" },
+ { "gd", "CP850" },
+ { "gd_GB", "CP850" },
+ { "gl", "CP850" },
+ { "gl_ES", "CP850" },
+ { "he", "CP862" },
+ { "he_IL", "CP862" },
+ { "hr", "CP852" },
+ { "hr_HR", "CP852" },
+ { "hu", "CP852" },
+ { "hu_HU", "CP852" },
+ { "id", "CP850" }, /* not CP437 ?? */
+ { "id_ID", "CP850" }, /* not CP437 ?? */
+ { "is", "CP861" }, /* not CP850 ?? */
+ { "is_IS", "CP861" }, /* not CP850 ?? */
+ { "it", "CP850" },
+ { "it_CH", "CP850" },
+ { "it_IT", "CP850" },
+ { "ja", "CP932" },
+ { "ja_JP", "CP932" },
+ { "kr", "CP949" }, /* not CP934 ?? */
+ { "kr_KR", "CP949" }, /* not CP934 ?? */
+ { "lt", "CP775" },
+ { "lt_LT", "CP775" },
+ { "lv", "CP775" },
+ { "lv_LV", "CP775" },
+ { "mk", "CP866" }, /* not CP855 ?? */
+ { "mk_MK", "CP866" }, /* not CP855 ?? */
+ { "mt", "CP850" },
+ { "mt_MT", "CP850" },
+ { "nb", "CP865" }, /* not CP850 ?? */
+ { "nb_NO", "CP865" }, /* not CP850 ?? */
+ { "nl", "CP850" },
+ { "nl_BE", "CP850" },
+ { "nl_NL", "CP850" },
+ { "nn", "CP865" }, /* not CP850 ?? */
+ { "nn_NO", "CP865" }, /* not CP850 ?? */
+ { "no", "CP865" }, /* not CP850 ?? */
+ { "no_NO", "CP865" }, /* not CP850 ?? */
+ { "pl", "CP852" },
+ { "pl_PL", "CP852" },
+ { "pt", "CP850" },
+ { "pt_BR", "CP850" },
+ { "pt_PT", "CP850" },
+ { "ro", "CP852" },
+ { "ro_RO", "CP852" },
+ { "ru", "CP866" },
+ { "ru_RU", "CP866" },
+ { "sk", "CP852" },
+ { "sk_SK", "CP852" },
+ { "sl", "CP852" },
+ { "sl_SI", "CP852" },
+ { "sq", "CP852" },
+ { "sq_AL", "CP852" },
+ { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+ { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+ { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+ { "sv", "CP850" },
+ { "sv_SE", "CP850" },
+ { "th", "CP874" },
+ { "th_TH", "CP874" },
+ { "tr", "CP857" },
+ { "tr_TR", "CP857" },
+ { "uk", "CP1125" },
+ { "uk_UA", "CP1125" },
+ { "zh_CN", "GBK" },
+ { "zh_TW", "CP950" } /* not CP938 ?? */
+# define locale_table_defined
+# endif
+# ifndef locale_table_defined
+ /* Just a dummy entry, to avoid a C syntax error. */
+ { "", "" }
+# endif
+ };
+
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed below.
+ The result must not be freed; it is statically allocated. The result
+ becomes invalid when setlocale() is used to change the global locale, or
+ when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG
+ is changed; threads in multithreaded programs should not do this.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+ const char *codeset;
+
+ /* This function must be multithread-safe. To achieve this without using
+ thread-local storage, we use a simple strcpy or memcpy to fill this static
+ buffer. Filling it through, for example, strcpy + strcat would not be
+ guaranteed to leave the buffer's contents intact if another thread is
+ currently accessing it. If necessary, the contents is first assembled in
+ a stack-allocated buffer. */
+
+#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
+
+# if HAVE_LANGINFO_CODESET
+
+ /* Most systems support nl_langinfo (CODESET) nowadays. */
+ codeset = nl_langinfo (CODESET);
+
+# ifdef __CYGWIN__
+ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always
+ returns "US-ASCII". Return the suffix of the locale name from the
+ environment variables (if present) or the codepage as a number. */
+ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+ {
+ const char *locale;
+ static char resultbuf[2 + 10 + 1];
+
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ if (locale != NULL && locale[0] != '\0')
+ {
+ /* If the locale name contains an encoding after the dot, return
+ it. */
+ const char *dot = strchr (locale, '.');
+
+ if (dot != NULL)
+ {
+ const char *modifier;
+
+ dot++;
+ /* Look for the possible @... trailer and remove it, if any. */
+ modifier = strchr (dot, '@');
+ if (modifier == NULL)
+ return dot;
+ if (modifier - dot < sizeof (resultbuf))
+ {
+ /* This way of filling resultbuf is multithread-safe. */
+ memcpy (resultbuf, dot, modifier - dot);
+ resultbuf [modifier - dot] = '\0';
+ return resultbuf;
+ }
+ }
+ }
+
+ /* The Windows API has a function returning the locale's codepage as a
+ number: GetACP(). This encoding is used by Cygwin, unless the user
+ has set the environment variable CYGWIN=codepage:oem (which very few
+ people do).
+ Output directed to console windows needs to be converted (to
+ GetOEMCP() if the console is using a raster font, or to
+ GetConsoleOutputCP() if it is using a TrueType font). Cygwin does
+ this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+ converting to GetConsoleOutputCP(). This leads to correct results,
+ except when SetConsoleOutputCP has been called and a raster font is
+ in use. */
+ {
+ char buf[2 + 10 + 1];
+
+ sprintf (buf, "CP%u", GetACP ());
+ strcpy (resultbuf, buf);
+ codeset = resultbuf;
+ }
+ }
+# endif
+
+ if (codeset == NULL)
+ /* The canonical name cannot be determined. */
+ codeset = "";
+
+# elif defined WINDOWS_NATIVE
+
+ char buf[2 + 10 + 1];
+ static char resultbuf[2 + 10 + 1];
+
+ /* The Windows API has a function returning the locale's codepage as
+ a number, but the value doesn't change according to what the
+ 'setlocale' call specified. So we use it as a last resort, in
+ case the string returned by 'setlocale' doesn't specify the
+ codepage. */
+ char *current_locale = setlocale (LC_CTYPE, NULL);
+ char *pdot = strrchr (current_locale, '.');
+
+ if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf))
+ sprintf (buf, "CP%s", pdot + 1);
+ else
+ {
+ /* The Windows API has a function returning the locale's codepage as a
+ number: GetACP().
+ When the output goes to a console window, it needs to be provided in
+ GetOEMCP() encoding if the console is using a raster font, or in
+ GetConsoleOutputCP() encoding if it is using a TrueType font.
+ But in GUI programs and for output sent to files and pipes, GetACP()
+ encoding is the best bet. */
+ sprintf (buf, "CP%u", GetACP ());
+ }
+ /* For a locale name such as "French_France.65001", in Windows 10,
+ setlocale now returns "French_France.utf8" instead. */
+ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0)
+ codeset = "UTF-8";
+ else
+ {
+ strcpy (resultbuf, buf);
+ codeset = resultbuf;
+ }
+
+# elif defined OS2
+
+ const char *locale;
+ static char resultbuf[2 + 10 + 1];
+ ULONG cp[3];
+ ULONG cplen;
+
+ codeset = NULL;
+
+ /* Allow user to override the codeset, as set in the operating system,
+ with standard language environment variables. */
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ }
+ if (locale != NULL && locale[0] != '\0')
+ {
+ /* If the locale name contains an encoding after the dot, return it. */
+ const char *dot = strchr (locale, '.');
+
+ if (dot != NULL)
+ {
+ const char *modifier;
+
+ dot++;
+ /* Look for the possible @... trailer and remove it, if any. */
+ modifier = strchr (dot, '@');
+ if (modifier == NULL)
+ return dot;
+ if (modifier - dot < sizeof (resultbuf))
+ {
+ /* This way of filling resultbuf is multithread-safe. */
+ memcpy (resultbuf, dot, modifier - dot);
+ resultbuf [modifier - dot] = '\0';
+ return resultbuf;
+ }
+ }
+
+ /* For the POSIX locale, don't use the system's codepage. */
+ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
+ codeset = "";
+ }
+
+ if (codeset == NULL)
+ {
+ /* OS/2 has a function returning the locale's codepage as a number. */
+ if (DosQueryCp (sizeof (cp), cp, &cplen))
+ codeset = "";
+ else
+ {
+ char buf[2 + 10 + 1];
+
+ sprintf (buf, "CP%u", cp[0]);
+ strcpy (resultbuf, buf);
+ codeset = resultbuf;
+ }
+ }
+
+# else
+
+# error "Add code for other platforms here."
+
+# endif
+
+ /* Resolve alias. */
+ {
+# ifdef alias_table_defined
+ /* On some platforms, UTF-8 locales are the most frequently used ones.
+ Speed up the common case and slow down the less common cases by
+ testing for this case first. */
+# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__
+ if (strcmp (codeset, "UTF-8") == 0)
+ goto done_table_lookup;
+ else
+# endif
+ {
+ const struct table_entry * const table = alias_table;
+ size_t const table_size =
+ sizeof (alias_table) / sizeof (struct table_entry);
+ /* The table is sorted. Perform a binary search. */
+ size_t hi = table_size;
+ size_t lo = 0;
+ while (lo < hi)
+ {
+ /* Invariant:
+ for i < lo, strcmp (table[i].alias, codeset) < 0,
+ for i >= hi, strcmp (table[i].alias, codeset) > 0. */
+ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+ int cmp = strcmp (table[mid].alias, codeset);
+ if (cmp < 0)
+ lo = mid + 1;
+ else if (cmp > 0)
+ hi = mid;
+ else
+ {
+ /* Found an i with
+ strcmp (table[i].alias, codeset) == 0. */
+ codeset = table[mid].canonical;
+ goto done_table_lookup;
+ }
+ }
+ }
+ if (0)
+ done_table_lookup: ;
+ else
+# endif
+ {
+ /* Did not find it in the table. */
+ /* On Mac OS X, all modern locales use the UTF-8 encoding.
+ BeOS and Haiku have a single locale, and it has UTF-8 encoding. */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+ codeset = "UTF-8";
+# else
+ /* Don't return an empty string. GNU libc and GNU libiconv interpret
+ the empty string as denoting "the locale's character encoding",
+ thus GNU libiconv would call this function a second time. */
+ if (codeset[0] == '\0')
+ codeset = "ASCII";
+# endif
+ }
+ }
+
+#else
+
+ /* On old systems which lack it, use setlocale or getenv. */
+ const char *locale = NULL;
+
+ /* But most old systems don't have a complete set of locales. Some
+ (like DJGPP) have only the C locale. Therefore we don't use setlocale
+ here; it would return "C" when it doesn't support the locale name the
+ user has set. */
+# if 0
+ locale = setlocale (LC_CTYPE, NULL);
+# endif
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_ALL");
+ if (locale == NULL || locale[0] == '\0')
+ {
+ locale = getenv ("LC_CTYPE");
+ if (locale == NULL || locale[0] == '\0')
+ locale = getenv ("LANG");
+ if (locale == NULL)
+ locale = "";
+ }
+ }
+
+ /* Map locale name to canonical encoding name. */
+ {
+# ifdef locale_table_defined
+ const struct table_entry * const table = locale_table;
+ size_t const table_size =
+ sizeof (locale_table) / sizeof (struct table_entry);
+ /* The table is sorted. Perform a binary search. */
+ size_t hi = table_size;
+ size_t lo = 0;
+ while (lo < hi)
+ {
+ /* Invariant:
+ for i < lo, strcmp (table[i].locale, locale) < 0,
+ for i >= hi, strcmp (table[i].locale, locale) > 0. */
+ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+ int cmp = strcmp (table[mid].locale, locale);
+ if (cmp < 0)
+ lo = mid + 1;
+ else if (cmp > 0)
+ hi = mid;
+ else
+ {
+ /* Found an i with
+ strcmp (table[i].locale, locale) == 0. */
+ codeset = table[mid].canonical;
+ goto done_table_lookup;
+ }
+ }
+ if (0)
+ done_table_lookup: ;
+ else
+# endif
+ {
+ /* Did not find it in the table. */
+ /* On Mac OS X, all modern locales use the UTF-8 encoding.
+ BeOS and Haiku have a single locale, and it has UTF-8 encoding. */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+ codeset = "UTF-8";
+# else
+ /* The canonical name cannot be determined. */
+ /* Don't return an empty string. GNU libc and GNU libiconv interpret
+ the empty string as denoting "the locale's character encoding",
+ thus GNU libiconv would call this function a second time. */
+ codeset = "ASCII";
+# endif
+ }
+ }
+
+#endif
+
+#ifdef DARWIN7
+ /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
+ (the default codeset) does not work when MB_CUR_MAX is 1. */
+ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
+ codeset = "ASCII";
+#endif
+
+ return codeset;
+}
diff --git a/lib/localcharset.h b/lib/localcharset.h
new file mode 100644
index 0000000..29ee8dc
--- /dev/null
+++ b/lib/localcharset.h
@@ -0,0 +1,137 @@
+/* Determine a canonical name for the current locale's character encoding.
+ Copyright (C) 2000-2003, 2009-2023 Free Software Foundation, Inc.
+ This file is part of the GNU CHARSET Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+ into one of the canonical names listed below.
+ The result must not be freed; it is statically allocated. The result
+ becomes invalid when setlocale() is used to change the global locale, or
+ when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG
+ is changed; threads in multithreaded programs should not do this.
+ If the canonical name cannot be determined, the result is a non-canonical
+ name. */
+extern const char * locale_charset (void);
+
+/* About GNU canonical names for character encodings:
+
+ Every canonical name must be supported by GNU libiconv. Support by GNU libc
+ is also desirable.
+
+ The name is case insensitive. Usually an upper case MIME charset name is
+ preferred.
+
+ The current list of these GNU canonical names is:
+
+ name MIME? used by which systems
+ (darwin = Mac OS X, windows = native Windows)
+
+ ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin
+ ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos
+ ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos
+ ISO-8859-3 Y glibc solaris cygwin
+ ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin
+ ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos
+ ISO-8859-6 Y glibc aix hpux solaris cygwin
+ ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos
+ ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos
+ ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos
+ ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin
+ ISO-8859-14 glibc cygwin
+ ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin
+ KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin
+ KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin
+ KOI8-T glibc
+ CP437 dos
+ CP775 dos
+ CP850 aix osf dos
+ CP852 dos
+ CP855 dos
+ CP856 aix
+ CP857 dos
+ CP861 dos
+ CP862 dos
+ CP864 dos
+ CP865 dos
+ CP866 freebsd netbsd openbsd darwin dos
+ CP869 dos
+ CP874 windows dos
+ CP922 aix
+ CP932 aix cygwin windows dos
+ CP943 aix zos
+ CP949 osf darwin windows dos
+ CP950 windows dos
+ CP1046 aix
+ CP1124 aix
+ CP1125 dos
+ CP1129 aix
+ CP1131 freebsd darwin
+ CP1250 windows
+ CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows
+ CP1252 aix windows
+ CP1253 windows
+ CP1254 windows
+ CP1255 glibc windows
+ CP1256 windows
+ CP1257 windows
+ GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos
+ EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+ EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos
+ EUC-TW glibc aix hpux irix osf solaris netbsd
+ BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos
+ BIG5-HKSCS glibc hpux solaris netbsd darwin
+ GBK glibc aix osf solaris freebsd darwin cygwin windows dos
+ GB18030 glibc hpux solaris freebsd netbsd darwin
+ SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin
+ JOHAB glibc solaris windows
+ TIS-620 glibc aix hpux osf solaris cygwin zos
+ VISCII Y glibc
+ TCVN5712-1 glibc
+ ARMSCII-8 glibc freebsd netbsd darwin
+ GEORGIAN-PS glibc cygwin
+ PT154 glibc netbsd cygwin
+ HP-ROMAN8 hpux
+ HP-ARABIC8 hpux
+ HP-GREEK8 hpux
+ HP-HEBREW8 hpux
+ HP-TURKISH8 hpux
+ HP-KANA8 hpux
+ DEC-KANJI osf
+ DEC-HANYU osf
+ UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos
+
+ Note: Names which are not marked as being a MIME name should not be used in
+ Internet protocols for information interchange (mail, news, etc.).
+
+ Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+ must understand both names and treat them as equivalent.
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/lib/locale.in.h b/lib/locale.in.h
new file mode 100644
index 0000000..e9c3418
--- /dev/null
+++ b/lib/locale.in.h
@@ -0,0 +1,305 @@
+/* A POSIX <locale.h>.
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \
+ || defined _GL_ALREADY_INCLUDING_LOCALE_H
+
+/* Special invocation convention:
+ - Inside mingw header files,
+ - To handle Solaris header files (through Solaris 10) when combined
+ with gettext's libintl.h. */
+
+#@INCLUDE_NEXT@ @NEXT_LOCALE_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_LOCALE_H
+
+#define _GL_ALREADY_INCLUDING_LOCALE_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_LOCALE_H@
+
+#undef _GL_ALREADY_INCLUDING_LOCALE_H
+
+#ifndef _@GUARD_PREFIX@_LOCALE_H
+#define _@GUARD_PREFIX@_LOCALE_H
+
+/* NetBSD 5.0 mis-defines NULL. */
+#include <stddef.h>
+
+/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */
+#if @HAVE_XLOCALE_H@
+# include <xlocale.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C.
+ On systems that don't define it, use the same value as GNU libintl. */
+#if !defined LC_MESSAGES
+# define LC_MESSAGES 1729
+#endif
+
+/* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and
+ int_n_*. Instead of overriding 'struct lconv', merely define these member
+ names as macros. This avoids trouble in C++ mode. */
+#if defined _MSC_VER
+# define int_p_cs_precedes p_cs_precedes
+# define int_p_sign_posn p_sign_posn
+# define int_p_sep_by_space p_sep_by_space
+# define int_n_cs_precedes n_cs_precedes
+# define int_n_sign_posn n_sign_posn
+# define int_n_sep_by_space n_sep_by_space
+#endif
+
+/* Bionic libc's 'struct lconv' is just a dummy. */
+#if @REPLACE_STRUCT_LCONV@
+# define lconv rpl_lconv
+struct lconv
+{
+ /* All 'char *' are actually 'const char *'. */
+
+ /* Members that depend on the LC_NUMERIC category of the locale. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */
+
+ /* Symbol used as decimal point. */
+ char *decimal_point;
+ /* Symbol used to separate groups of digits to the left of the decimal
+ point. */
+ char *thousands_sep;
+ /* Definition of the size of groups of digits to the left of the decimal
+ point. */
+ char *grouping;
+
+ /* Members that depend on the LC_MONETARY category of the locale. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */
+
+ /* Symbol used as decimal point. */
+ char *mon_decimal_point;
+ /* Symbol used to separate groups of digits to the left of the decimal
+ point. */
+ char *mon_thousands_sep;
+ /* Definition of the size of groups of digits to the left of the decimal
+ point. */
+ char *mon_grouping;
+ /* Sign used to indicate a value >= 0. */
+ char *positive_sign;
+ /* Sign used to indicate a value < 0. */
+ char *negative_sign;
+
+ /* For formatting local currency. */
+ /* Currency symbol (3 characters) followed by separator (1 character). */
+ char *currency_symbol;
+ /* Number of digits after the decimal point. */
+ char frac_digits;
+ /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
+ comes after the number. */
+ char p_cs_precedes;
+ /* For values >= 0: Position of the sign. */
+ char p_sign_posn;
+ /* For values >= 0: Placement of spaces between currency symbol, sign, and
+ number. */
+ char p_sep_by_space;
+ /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
+ comes after the number. */
+ char n_cs_precedes;
+ /* For values < 0: Position of the sign. */
+ char n_sign_posn;
+ /* For values < 0: Placement of spaces between currency symbol, sign, and
+ number. */
+ char n_sep_by_space;
+
+ /* For formatting international currency. */
+ /* Currency symbol (3 characters) followed by separator (1 character). */
+ char *int_curr_symbol;
+ /* Number of digits after the decimal point. */
+ char int_frac_digits;
+ /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it
+ comes after the number. */
+ char int_p_cs_precedes;
+ /* For values >= 0: Position of the sign. */
+ char int_p_sign_posn;
+ /* For values >= 0: Placement of spaces between currency symbol, sign, and
+ number. */
+ char int_p_sep_by_space;
+ /* For values < 0: 1 if the currency symbol precedes the number, 0 if it
+ comes after the number. */
+ char int_n_cs_precedes;
+ /* For values < 0: Position of the sign. */
+ char int_n_sign_posn;
+ /* For values < 0: Placement of spaces between currency symbol, sign, and
+ number. */
+ char int_n_sep_by_space;
+};
+#endif
+
+#if @GNULIB_LOCALECONV@
+# if @REPLACE_LOCALECONV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef localeconv
+# define localeconv rpl_localeconv
+# endif
+_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void));
+_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void));
+# else
+_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (localeconv);
+# endif
+#elif @REPLACE_STRUCT_LCONV@
+# undef localeconv
+# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv
+#elif defined GNULIB_POSIXCHECK
+# undef localeconv
+# if HAVE_RAW_DECL_LOCALECONV
+_GL_WARN_ON_USE (localeconv,
+ "localeconv returns too few information on some platforms - "
+ "use gnulib module localeconv for portability");
+# endif
+#endif
+
+#if @GNULIB_SETLOCALE@
+# if @REPLACE_SETLOCALE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef setlocale
+# define setlocale rpl_setlocale
+# define GNULIB_defined_setlocale 1
+# endif
+_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale));
+_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale));
+# else
+_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (setlocale);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setlocale
+# if HAVE_RAW_DECL_SETLOCALE
+_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - "
+ "use gnulib module setlocale for portability");
+# endif
+#endif
+
+#if @GNULIB_SETLOCALE_NULL@
+/* Included here for convenience. */
+# include "setlocale_null.h"
+#endif
+
+#if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@)
+# if @REPLACE_NEWLOCALE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef newlocale
+# define newlocale rpl_newlocale
+# define GNULIB_defined_newlocale 1
+# endif
+_GL_FUNCDECL_RPL (newlocale, locale_t,
+ (int category_mask, const char *name, locale_t base)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (newlocale, locale_t,
+ (int category_mask, const char *name, locale_t base));
+# else
+# if @HAVE_NEWLOCALE@
+_GL_CXXALIAS_SYS (newlocale, locale_t,
+ (int category_mask, const char *name, locale_t base));
+# endif
+# endif
+# if __GLIBC__ >= 2 && @HAVE_NEWLOCALE@
+_GL_CXXALIASWARN (newlocale);
+# endif
+# if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@
+# ifndef HAVE_WORKING_NEWLOCALE
+# define HAVE_WORKING_NEWLOCALE 1
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef newlocale
+# if HAVE_RAW_DECL_NEWLOCALE
+_GL_WARN_ON_USE (newlocale, "newlocale is not portable");
+# endif
+#endif
+
+#if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@)
+# if @REPLACE_DUPLOCALE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef duplocale
+# define duplocale rpl_duplocale
+# define GNULIB_defined_duplocale 1
+# endif
+_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale));
+# else
+# if @HAVE_DUPLOCALE@
+_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale));
+# endif
+# endif
+# if __GLIBC__ >= 2 && @HAVE_DUPLOCALE@
+_GL_CXXALIASWARN (duplocale);
+# endif
+# if @HAVE_DUPLOCALE@ || @REPLACE_DUPLOCALE@
+# ifndef HAVE_WORKING_DUPLOCALE
+# define HAVE_WORKING_DUPLOCALE 1
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef duplocale
+# if HAVE_RAW_DECL_DUPLOCALE
+_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - "
+ "use gnulib module duplocale for portability");
+# endif
+#endif
+
+#if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@)
+# if @REPLACE_FREELOCALE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef freelocale
+# define freelocale rpl_freelocale
+# define GNULIB_defined_freelocale 1
+# endif
+_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (freelocale, void, (locale_t locale));
+# else
+# if @HAVE_FREELOCALE@
+/* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is
+ int. */
+_GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale));
+# endif
+# endif
+# if __GLIBC__ >= 2 && @HAVE_FREELOCALE@
+_GL_CXXALIASWARN (freelocale);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef freelocale
+# if HAVE_RAW_DECL_FREELOCALE
+_GL_WARN_ON_USE (freelocale, "freelocale is not portable");
+# endif
+#endif
+
+#endif /* _@GUARD_PREFIX@_LOCALE_H */
+#endif /* _@GUARD_PREFIX@_LOCALE_H */
+#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */
diff --git a/lib/localeconv.c b/lib/localeconv.c
new file mode 100644
index 0000000..60c050f
--- /dev/null
+++ b/lib/localeconv.c
@@ -0,0 +1,103 @@
+/* Query locale dependent information for formatting numbers.
+ Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <locale.h>
+
+#if HAVE_STRUCT_LCONV_DECIMAL_POINT
+
+/* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_*
+ members. */
+
+struct lconv *
+localeconv (void)
+{
+ static struct lconv result;
+# undef lconv
+# undef localeconv
+ struct lconv *sys_result = localeconv ();
+
+ result.decimal_point = sys_result->decimal_point;
+ result.thousands_sep = sys_result->thousands_sep;
+ result.grouping = sys_result->grouping;
+ result.mon_decimal_point = sys_result->mon_decimal_point;
+ result.mon_thousands_sep = sys_result->mon_thousands_sep;
+ result.mon_grouping = sys_result->mon_grouping;
+ result.positive_sign = sys_result->positive_sign;
+ result.negative_sign = sys_result->negative_sign;
+ result.currency_symbol = sys_result->currency_symbol;
+ result.frac_digits = sys_result->frac_digits;
+ result.p_cs_precedes = sys_result->p_cs_precedes;
+ result.p_sign_posn = sys_result->p_sign_posn;
+ result.p_sep_by_space = sys_result->p_sep_by_space;
+ result.n_cs_precedes = sys_result->n_cs_precedes;
+ result.n_sign_posn = sys_result->n_sign_posn;
+ result.n_sep_by_space = sys_result->n_sep_by_space;
+ result.int_curr_symbol = sys_result->int_curr_symbol;
+ result.int_frac_digits = sys_result->int_frac_digits;
+ result.int_p_cs_precedes = sys_result->p_cs_precedes;
+ result.int_p_sign_posn = sys_result->p_sign_posn;
+ result.int_p_sep_by_space = sys_result->p_sep_by_space;
+ result.int_n_cs_precedes = sys_result->n_cs_precedes;
+ result.int_n_sign_posn = sys_result->n_sign_posn;
+ result.int_n_sep_by_space = sys_result->n_sep_by_space;
+
+ return &result;
+}
+
+#else
+
+/* Override for platforms where 'struct lconv' is a dummy. */
+
+# include <limits.h>
+
+struct lconv *
+localeconv (void)
+{
+ static /*const*/ struct lconv result =
+ {
+ /* decimal_point */ ".",
+ /* thousands_sep */ "",
+ /* grouping */ "",
+ /* mon_decimal_point */ "",
+ /* mon_thousands_sep */ "",
+ /* mon_grouping */ "",
+ /* positive_sign */ "",
+ /* negative_sign */ "",
+ /* currency_symbol */ "",
+ /* frac_digits */ CHAR_MAX,
+ /* p_cs_precedes */ CHAR_MAX,
+ /* p_sign_posn */ CHAR_MAX,
+ /* p_sep_by_space */ CHAR_MAX,
+ /* n_cs_precedes */ CHAR_MAX,
+ /* n_sign_posn */ CHAR_MAX,
+ /* n_sep_by_space */ CHAR_MAX,
+ /* int_curr_symbol */ "",
+ /* int_frac_digits */ CHAR_MAX,
+ /* int_p_cs_precedes */ CHAR_MAX,
+ /* int_p_sign_posn */ CHAR_MAX,
+ /* int_p_sep_by_space */ CHAR_MAX,
+ /* int_n_cs_precedes */ CHAR_MAX,
+ /* int_n_sign_posn */ CHAR_MAX,
+ /* int_n_sep_by_space */ CHAR_MAX
+ };
+
+ return &result;
+}
+
+#endif
diff --git a/lib/long-options.c b/lib/long-options.c
new file mode 100644
index 0000000..212863d
--- /dev/null
+++ b/lib/long-options.c
@@ -0,0 +1,139 @@
+/* Utility to accept --help and --version options as unobtrusively as possible.
+
+ Copyright (C) 1993-1994, 1998-2000, 2002-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification. */
+#include "long-options.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+#include "version-etc.h"
+#include "exitfail.h"
+
+static struct option const long_options[] =
+{
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'v'},
+ {NULL, 0, NULL, 0}
+};
+
+/* Process long options --help and --version, but only if argc == 2.
+ Be careful not to gobble up "--". */
+
+void
+parse_long_options (int argc,
+ char **argv,
+ const char *command_name,
+ const char *package,
+ const char *version,
+ void (*usage_func) (int),
+ /* const char *author1, ...*/ ...)
+{
+ int c;
+ int saved_opterr;
+
+ saved_opterr = opterr;
+
+ /* Don't print an error message for unrecognized options. */
+ opterr = 0;
+
+ if (argc == 2
+ && (c = getopt_long (argc, argv, "+", long_options, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ (*usage_func) (EXIT_SUCCESS);
+ break;
+
+ case 'v':
+ {
+ va_list authors;
+ va_start (authors, usage_func);
+ version_etc_va (stdout, command_name, package, version, authors);
+ exit (EXIT_SUCCESS);
+ }
+
+ default:
+ /* Don't process any other long-named options. */
+ break;
+ }
+ }
+
+ /* Restore previous value. */
+ opterr = saved_opterr;
+
+ /* Reset this to zero so that getopt internals get initialized from
+ the probably-new parameters when/if getopt is called later. */
+ optind = 0;
+}
+
+/* Process the GNU default long options --help and --version (see also
+ https://gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html),
+ and fail for any other unknown long or short option.
+ Use with SCAN_ALL=true to scan until "--", or with SCAN_ALL=false to stop
+ at the first non-option argument (or "--", whichever comes first). */
+void
+parse_gnu_standard_options_only (int argc,
+ char **argv,
+ const char *command_name,
+ const char *package,
+ const char *version,
+ bool scan_all,
+ void (*usage_func) (int),
+ /* const char *author1, ...*/ ...)
+{
+ int c;
+ int saved_opterr = opterr;
+
+ /* Print an error message for unrecognized options. */
+ opterr = 1;
+
+ const char *optstring = scan_all ? "" : "+";
+
+ if ((c = getopt_long (argc, argv, optstring, long_options, NULL)) != -1)
+ {
+ switch (c)
+ {
+ case 'h':
+ (*usage_func) (EXIT_SUCCESS);
+ break;
+
+ case 'v':
+ {
+ va_list authors;
+ va_start (authors, usage_func);
+ version_etc_va (stdout, command_name, package, version, authors);
+ exit (EXIT_SUCCESS);
+ }
+
+ default:
+ (*usage_func) (exit_failure);
+ break;
+ }
+ }
+
+ /* Restore previous value. */
+ opterr = saved_opterr;
+}
diff --git a/lib/long-options.h b/lib/long-options.h
new file mode 100644
index 0000000..ef40356
--- /dev/null
+++ b/lib/long-options.h
@@ -0,0 +1,40 @@
+/* long-options.h -- declaration for --help- and --version-handling function.
+ Copyright (C) 1993-1994, 1998-1999, 2003, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#ifndef LONG_OPTIONS_H_
+# define LONG_OPTIONS_H_ 1
+
+void parse_long_options (int _argc,
+ char **_argv,
+ const char *_command_name,
+ const char *_package,
+ const char *_version,
+ void (*_usage) (int),
+ /* const char *author1, ...*/ ...);
+
+void parse_gnu_standard_options_only (int argc,
+ char **argv,
+ const char *command_name,
+ const char *package,
+ const char *version,
+ bool scan_all,
+ void (*usage_func) (int),
+ /* const char *author1, ...*/ ...);
+
+#endif /* LONG_OPTIONS_H_ */
diff --git a/lib/lseek.c b/lib/lseek.c
new file mode 100644
index 0000000..7919b03
--- /dev/null
+++ b/lib/lseek.c
@@ -0,0 +1,89 @@
+/* An lseek() function that detects pipes.
+ Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Windows platforms. */
+/* Get GetFileType. */
+# include <windows.h>
+/* Get _get_osfhandle. */
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+#else
+# include <sys/stat.h>
+#endif
+#include <errno.h>
+
+#undef lseek
+
+off_t
+rpl_lseek (int fd, off_t offset, int whence)
+{
+#if defined _WIN32 && ! defined __CYGWIN__
+ /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+ if (h == INVALID_HANDLE_VALUE)
+ {
+ errno = EBADF;
+ return -1;
+ }
+ if (GetFileType (h) != FILE_TYPE_DISK)
+ {
+ errno = ESPIPE;
+ return -1;
+ }
+#elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA
+ if (whence == SEEK_DATA)
+ {
+ /* If OFFSET points to data, macOS lseek+SEEK_DATA returns the
+ start S of the first data region that begins *after* OFFSET,
+ where the region from OFFSET to S consists of possibly-empty
+ data followed by a possibly-empty hole. To work around this
+ portability glitch, check whether OFFSET is within data by
+ using lseek+SEEK_HOLE, and if so return to OFFSET by using
+ lseek+SEEK_SET. Also, contrary to the macOS documentation,
+ lseek+SEEK_HOLE can fail with ENXIO if there are no holes on
+ or after OFFSET. What a mess! */
+ off_t next_hole = lseek (fd, offset, SEEK_HOLE);
+ if (next_hole < 0)
+ return errno == ENXIO ? offset : next_hole;
+ if (next_hole != offset)
+ whence = SEEK_SET;
+ }
+#else
+ /* BeOS lseek mistakenly succeeds on pipes... */
+ struct stat statbuf;
+ if (fstat (fd, &statbuf) < 0)
+ return -1;
+ if (!S_ISREG (statbuf.st_mode))
+ {
+ errno = ESPIPE;
+ return -1;
+ }
+#endif
+#if _GL_WINDOWS_64_BIT_OFF_T || (defined __MINGW32__ && defined _FILE_OFFSET_BITS && (_FILE_OFFSET_BITS == 64))
+ return _lseeki64 (fd, offset, whence);
+#else
+ return lseek (fd, offset, whence);
+#endif
+}
diff --git a/lib/lstat.c b/lib/lstat.c
new file mode 100644
index 0000000..00a4ce2
--- /dev/null
+++ b/lib/lstat.c
@@ -0,0 +1,104 @@
+/* Work around a bug of lstat on some systems
+
+ Copyright (C) 1997-2006, 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+ the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to
+ rpl_lstat. */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+#if !HAVE_LSTAT
+/* On systems that lack symlinks, our replacement <sys/stat.h> already
+ defined lstat as stat, so there is nothing further to do other than
+ avoid an empty file. */
+typedef int dummy;
+#else /* HAVE_LSTAT */
+
+/* Get the original definition of lstat. It might be defined as a macro. */
+# include <sys/types.h>
+# include <sys/stat.h>
+# undef __need_system_sys_stat_h
+
+static int
+orig_lstat (const char *filename, struct stat *buf)
+{
+ return lstat (filename, buf);
+}
+
+/* Specification. */
+# ifdef __osf__
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+ eliminates this include because of the preliminary #include <sys/stat.h>
+ above. */
+# include "sys/stat.h"
+# else
+# include <sys/stat.h>
+# endif
+
+# include "stat-time.h"
+
+# include <string.h>
+# include <errno.h>
+
+/* lstat works differently on Linux and Solaris systems. POSIX (see
+ "pathname resolution" in the glossary) requires that programs like
+ 'ls' take into consideration the fact that FILE has a trailing slash
+ when FILE is a symbolic link. On Linux and Solaris 10 systems, the
+ lstat function already has the desired semantics (in treating
+ 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)',
+ but on Solaris 9 and earlier it does not.
+
+ If FILE has a trailing slash and specifies a symbolic link,
+ then use stat() to get more info on the referent of FILE.
+ If the referent is a non-directory, then set errno to ENOTDIR
+ and return -1. Otherwise, return stat's result. */
+
+int
+rpl_lstat (const char *file, struct stat *sbuf)
+{
+ int result = orig_lstat (file, sbuf);
+
+ /* This replacement file can blindly check against '/' rather than
+ using the ISSLASH macro, because all platforms with '\\' either
+ lack symlinks (mingw) or have working lstat (cygwin) and thus do
+ not compile this file. 0 len should have already been filtered
+ out above, with a failure return of ENOENT. */
+ if (result == 0)
+ {
+ if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/')
+ result = stat_time_normalize (result, sbuf);
+ else
+ {
+ /* At this point, a trailing slash is permitted only on
+ symlink-to-dir; but it should have found information on the
+ directory, not the symlink. Call 'stat' to get info about the
+ link's referent. Our replacement stat guarantees valid results,
+ even if the symlink is not pointing to a directory. */
+ if (!S_ISLNK (sbuf->st_mode))
+ {
+ errno = ENOTDIR;
+ return -1;
+ }
+ result = stat (file, sbuf);
+ }
+ }
+ return result;
+}
+
+#endif /* HAVE_LSTAT */
diff --git a/lib/malloc.c b/lib/malloc.c
new file mode 100644
index 0000000..3ade35c
--- /dev/null
+++ b/lib/malloc.c
@@ -0,0 +1,51 @@
+/* malloc() function that is glibc compatible.
+
+ Copyright (C) 1997-1998, 2006-2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+#include <stdlib.h>
+
+#include <errno.h>
+
+#include "xalloc-oversized.h"
+
+/* Allocate an N-byte block of memory from the heap, even if N is 0. */
+
+void *
+rpl_malloc (size_t n)
+{
+ if (n == 0)
+ n = 1;
+
+ if (xalloc_oversized (n, 1))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ void *result = malloc (n);
+
+#if !HAVE_MALLOC_POSIX
+ if (result == NULL)
+ errno = ENOMEM;
+#endif
+
+ return result;
+}
diff --git a/lib/malloc/dynarray-skeleton.c b/lib/malloc/dynarray-skeleton.c
new file mode 100644
index 0000000..580c278
--- /dev/null
+++ b/lib/malloc/dynarray-skeleton.c
@@ -0,0 +1,528 @@
+/* Type-safe arrays which grow dynamically.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Pre-processor macros which act as parameters:
+
+ DYNARRAY_STRUCT
+ The struct tag of dynamic array to be defined.
+ DYNARRAY_ELEMENT
+ The type name of the element type. Elements are copied
+ as if by memcpy, and can change address as the dynamic
+ array grows.
+ DYNARRAY_PREFIX
+ The prefix of the functions which are defined.
+
+ The following parameters are optional:
+
+ DYNARRAY_ELEMENT_FREE
+ DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the
+ contents of elements. E is of type DYNARRAY_ELEMENT *.
+ DYNARRAY_ELEMENT_INIT
+ DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new
+ element. E is of type DYNARRAY_ELEMENT *.
+ If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is
+ defined, new elements are automatically zero-initialized.
+ Otherwise, new elements have undefined contents.
+ DYNARRAY_INITIAL_SIZE
+ The size of the statically allocated array (default:
+ at least 2, more elements if they fit into 128 bytes).
+ Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0,
+ there is no statically allocated array at, and all non-empty
+ arrays are heap-allocated.
+ DYNARRAY_FINAL_TYPE
+ The name of the type which holds the final array. If not
+ defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE
+ must be a struct type, with members of type DYNARRAY_ELEMENT and
+ size_t at the start (in this order).
+
+ These macros are undefined after this header file has been
+ included.
+
+ The following types are provided (their members are private to the
+ dynarray implementation):
+
+ struct DYNARRAY_STRUCT
+
+ The following functions are provided:
+
+ void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *);
+ bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *);
+ size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t);
+ void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT);
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *);
+ bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t);
+ void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *);
+ void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *);
+
+ The following functions are provided are provided if the
+ prerequisites are met:
+
+ bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *,
+ DYNARRAY_FINAL_TYPE *);
+ (if DYNARRAY_FINAL_TYPE is defined)
+ DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *,
+ size_t *);
+ (if DYNARRAY_FINAL_TYPE is not defined)
+*/
+
+#include <malloc/dynarray.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DYNARRAY_STRUCT
+# error "DYNARRAY_STRUCT must be defined"
+#endif
+
+#ifndef DYNARRAY_ELEMENT
+# error "DYNARRAY_ELEMENT must be defined"
+#endif
+
+#ifndef DYNARRAY_PREFIX
+# error "DYNARRAY_PREFIX must be defined"
+#endif
+
+#ifdef DYNARRAY_INITIAL_SIZE
+# if DYNARRAY_INITIAL_SIZE < 0
+# error "DYNARRAY_INITIAL_SIZE must be non-negative"
+# endif
+# if DYNARRAY_INITIAL_SIZE > 0
+# define DYNARRAY_HAVE_SCRATCH 1
+# else
+# define DYNARRAY_HAVE_SCRATCH 0
+# endif
+#else
+/* Provide a reasonable default which limits the size of
+ DYNARRAY_STRUCT. */
+# define DYNARRAY_INITIAL_SIZE \
+ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT))
+# define DYNARRAY_HAVE_SCRATCH 1
+#endif
+
+/* Public type definitions. */
+
+/* All fields of this struct are private to the implementation. */
+struct DYNARRAY_STRUCT
+{
+ union
+ {
+ struct dynarray_header dynarray_abstract;
+ struct
+ {
+ /* These fields must match struct dynarray_header. */
+ size_t used;
+ size_t allocated;
+ DYNARRAY_ELEMENT *array;
+ } dynarray_header;
+ } u;
+
+#if DYNARRAY_HAVE_SCRATCH
+ /* Initial inline allocation. */
+ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE];
+#endif
+};
+
+/* Internal use only: Helper macros. */
+
+/* Ensure macro-expansion of DYNARRAY_PREFIX. */
+#define DYNARRAY_CONCAT0(prefix, name) prefix##name
+#define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name)
+#define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name)
+
+/* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free),
+ so that Gnulib does not change 'free' to 'rpl_free'. */
+#define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree)
+
+/* Address of the scratch buffer if any. */
+#if DYNARRAY_HAVE_SCRATCH
+# define DYNARRAY_SCRATCH(list) (list)->scratch
+#else
+# define DYNARRAY_SCRATCH(list) NULL
+#endif
+
+/* Internal use only: Helper functions. */
+
+/* Internal function. Call DYNARRAY_ELEMENT_FREE with the array
+ elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE
+ macro expansion. */
+static inline void
+DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array,
+ size_t __dynarray_used)
+{
+#ifdef DYNARRAY_ELEMENT_FREE
+ for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i)
+ DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]);
+#endif /* DYNARRAY_ELEMENT_FREE */
+}
+
+/* Internal function. Free the non-scratch array allocation. */
+static inline void
+DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list)
+{
+#if DYNARRAY_HAVE_SCRATCH
+ if (list->u.dynarray_header.array != list->scratch)
+ free (list->u.dynarray_header.array);
+#else
+ free (list->u.dynarray_header.array);
+#endif
+}
+
+/* Public functions. */
+
+/* Initialize a dynamic array object. This must be called before any
+ use of the object. */
+__attribute_nonnull__ ((1))
+static void
+DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list)
+{
+ list->u.dynarray_header.used = 0;
+ list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE;
+ list->u.dynarray_header.array = DYNARRAY_SCRATCH (list);
+}
+
+/* Deallocate the dynamic array and its elements. */
+__attribute_maybe_unused__ __attribute_nonnull__ ((1))
+static void
+DYNARRAY_FREE (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ DYNARRAY_NAME (free__array__) (list);
+ DYNARRAY_NAME (init) (list);
+}
+
+/* Return true if the dynamic array is in an error state. */
+__attribute_nonnull__ ((1))
+static inline bool
+DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.allocated == __dynarray_error_marker ();
+}
+
+/* Mark the dynamic array as failed. All elements are deallocated as
+ a side effect. */
+__attribute_nonnull__ ((1))
+static void
+DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ DYNARRAY_NAME (free__array__) (list);
+ list->u.dynarray_header.array = DYNARRAY_SCRATCH (list);
+ list->u.dynarray_header.used = 0;
+ list->u.dynarray_header.allocated = __dynarray_error_marker ();
+}
+
+/* Return the number of elements which have been added to the dynamic
+ array. */
+__attribute_nonnull__ ((1))
+static inline size_t
+DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.used;
+}
+
+/* Return a pointer to the array element at INDEX. Terminate the
+ process if INDEX is out of bounds. */
+__attribute_nonnull__ ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index)
+{
+ if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list)))
+ __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index);
+ return list->u.dynarray_header.array + index;
+}
+
+/* Return a pointer to the first array element, if any. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+__attribute_nonnull__ ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.array;
+}
+
+/* Return a pointer one element past the last array element. For a
+ zero-length array, the pointer can be NULL even though the dynamic
+ array has not entered the failure state. */
+__attribute_nonnull__ ((1))
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list)
+{
+ return list->u.dynarray_header.array + list->u.dynarray_header.used;
+}
+
+/* Internal function. Slow path for the add function below. */
+static void
+DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
+{
+ if (__glibc_unlikely
+ (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT))))
+ {
+ DYNARRAY_NAME (mark_failed) (list);
+ return;
+ }
+
+ /* Copy the new element and increase the array length. */
+ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item;
+}
+
+/* Add ITEM at the end of the array, enlarging it by one element.
+ Mark *LIST as failed if the dynamic array allocation size cannot be
+ increased. */
+__attribute_nonnull__ ((1))
+static inline void
+DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item)
+{
+ /* Do nothing in case of previous error. */
+ if (DYNARRAY_NAME (has_failed) (list))
+ return;
+
+ /* Enlarge the array if necessary. */
+ if (__glibc_unlikely (list->u.dynarray_header.used
+ == list->u.dynarray_header.allocated))
+ {
+ DYNARRAY_NAME (add__) (list, item);
+ return;
+ }
+
+ /* Copy the new element and increase the array length. */
+ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item;
+}
+
+/* Internal function. Building block for the emplace functions below.
+ Assumes space for one more element in *LIST. */
+static inline DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list)
+{
+ DYNARRAY_ELEMENT *result
+ = &list->u.dynarray_header.array[list->u.dynarray_header.used];
+ ++list->u.dynarray_header.used;
+#if defined (DYNARRAY_ELEMENT_INIT)
+ DYNARRAY_ELEMENT_INIT (result);
+#elif defined (DYNARRAY_ELEMENT_FREE)
+ memset (result, 0, sizeof (*result));
+#endif
+ return result;
+}
+
+/* Internal function. Slow path for the emplace function below. */
+static DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list)
+{
+ if (__glibc_unlikely
+ (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT))))
+ {
+ DYNARRAY_NAME (mark_failed) (list);
+ return NULL;
+ }
+ return DYNARRAY_NAME (emplace__tail__) (list);
+}
+
+/* Allocate a place for a new element in *LIST and return a pointer to
+ it. The pointer can be NULL if the dynamic array cannot be
+ enlarged due to a memory allocation failure. */
+__attribute_maybe_unused__ __attribute_warn_unused_result__
+__attribute_nonnull__ ((1))
+static
+/* Avoid inlining with the larger initialization code. */
+#if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE))
+inline
+#endif
+DYNARRAY_ELEMENT *
+DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list)
+{
+ /* Do nothing in case of previous error. */
+ if (DYNARRAY_NAME (has_failed) (list))
+ return NULL;
+
+ /* Enlarge the array if necessary. */
+ if (__glibc_unlikely (list->u.dynarray_header.used
+ == list->u.dynarray_header.allocated))
+ return (DYNARRAY_NAME (emplace__) (list));
+ return DYNARRAY_NAME (emplace__tail__) (list);
+}
+
+/* Change the size of *LIST to SIZE. If SIZE is larger than the
+ existing size, new elements are added (which can be initialized).
+ Otherwise, the list is truncated, and elements are freed. Return
+ false on memory allocation failure (and mark *LIST as failed). */
+__attribute_maybe_unused__ __attribute_nonnull__ ((1))
+static bool
+DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size)
+{
+ if (size > list->u.dynarray_header.used)
+ {
+ bool ok;
+#if defined (DYNARRAY_ELEMENT_INIT)
+ /* The new elements have to be initialized. */
+ size_t old_size = list->u.dynarray_header.used;
+ ok = __libc_dynarray_resize (&list->u.dynarray_abstract,
+ size, DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT));
+ if (ok)
+ for (size_t i = old_size; i < size; ++i)
+ {
+ DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]);
+ }
+#elif defined (DYNARRAY_ELEMENT_FREE)
+ /* Zero initialization is needed so that the elements can be
+ safely freed. */
+ ok = __libc_dynarray_resize_clear
+ (&list->u.dynarray_abstract, size,
+ DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT));
+#else
+ ok = __libc_dynarray_resize (&list->u.dynarray_abstract,
+ size, DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT));
+#endif
+ if (__glibc_unlikely (!ok))
+ DYNARRAY_NAME (mark_failed) (list);
+ return ok;
+ }
+ else
+ {
+ /* The list has shrunk in size. Free the removed elements. */
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array + size,
+ list->u.dynarray_header.used - size);
+ list->u.dynarray_header.used = size;
+ return true;
+ }
+}
+
+/* Remove the last element of LIST if it is present. */
+__attribute_maybe_unused__ __attribute_nonnull__ ((1))
+static void
+DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list)
+{
+ /* used > 0 implies that the array is the non-failed state. */
+ if (list->u.dynarray_header.used > 0)
+ {
+ size_t new_length = list->u.dynarray_header.used - 1;
+#ifdef DYNARRAY_ELEMENT_FREE
+ DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]);
+#endif
+ list->u.dynarray_header.used = new_length;
+ }
+}
+
+/* Remove all elements from the list. The elements are freed, but the
+ list itself is not. */
+__attribute_maybe_unused__ __attribute_nonnull__ ((1))
+static void
+DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list)
+{
+ /* free__elements__ does nothing if the list is in the failed
+ state. */
+ DYNARRAY_NAME (free__elements__)
+ (list->u.dynarray_header.array, list->u.dynarray_header.used);
+ list->u.dynarray_header.used = 0;
+}
+
+#ifdef DYNARRAY_FINAL_TYPE
+/* Transfer the dynamic array to a permanent location at *RESULT.
+ Returns true on success on false on allocation failure. In either
+ case, *LIST is re-initialized and can be reused. A NULL pointer is
+ stored in *RESULT if LIST refers to an empty list. On success, the
+ pointer in *RESULT is heap-allocated and must be deallocated using
+ free. */
+__attribute_maybe_unused__ __attribute_warn_unused_result__
+__attribute_nonnull__ ((1, 2))
+static bool
+DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list,
+ DYNARRAY_FINAL_TYPE *result)
+{
+ struct dynarray_finalize_result res;
+ if (__libc_dynarray_finalize (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT), &res))
+ {
+ /* On success, the result owns all the data. */
+ DYNARRAY_NAME (init) (list);
+ *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length };
+ return true;
+ }
+ else
+ {
+ /* On error, we need to free all data. */
+ DYNARRAY_FREE (list);
+ errno = ENOMEM;
+ return false;
+ }
+}
+#else /* !DYNARRAY_FINAL_TYPE */
+/* Transfer the dynamic array to a heap-allocated array and return a
+ pointer to it. The pointer is NULL if memory allocation fails, or
+ if the array is empty, so this function should be used only for
+ arrays which are known not be empty (usually because they always
+ have a sentinel at the end). If LENGTHP is not NULL, the array
+ length is written to *LENGTHP. *LIST is re-initialized and can be
+ reused. */
+__attribute_maybe_unused__ __attribute_warn_unused_result__
+__attribute_nonnull__ ((1))
+static DYNARRAY_ELEMENT *
+DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp)
+{
+ struct dynarray_finalize_result res;
+ if (__libc_dynarray_finalize (&list->u.dynarray_abstract,
+ DYNARRAY_SCRATCH (list),
+ sizeof (DYNARRAY_ELEMENT), &res))
+ {
+ /* On success, the result owns all the data. */
+ DYNARRAY_NAME (init) (list);
+ if (lengthp != NULL)
+ *lengthp = res.length;
+ return res.array;
+ }
+ else
+ {
+ /* On error, we need to free all data. */
+ DYNARRAY_FREE (list);
+ errno = ENOMEM;
+ return NULL;
+ }
+}
+#endif /* !DYNARRAY_FINAL_TYPE */
+
+/* Undo macro definitions. */
+
+#undef DYNARRAY_CONCAT0
+#undef DYNARRAY_CONCAT1
+#undef DYNARRAY_NAME
+#undef DYNARRAY_SCRATCH
+#undef DYNARRAY_HAVE_SCRATCH
+
+#undef DYNARRAY_STRUCT
+#undef DYNARRAY_ELEMENT
+#undef DYNARRAY_PREFIX
+#undef DYNARRAY_ELEMENT_FREE
+#undef DYNARRAY_ELEMENT_INIT
+#undef DYNARRAY_INITIAL_SIZE
+#undef DYNARRAY_FINAL_TYPE
diff --git a/lib/malloc/dynarray.h b/lib/malloc/dynarray.h
new file mode 100644
index 0000000..a9a3b08
--- /dev/null
+++ b/lib/malloc/dynarray.h
@@ -0,0 +1,177 @@
+/* Type-safe arrays which grow dynamically. Shared definitions.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* To use the dynarray facility, you need to include
+ <malloc/dynarray-skeleton.c> and define the parameter macros
+ documented in that file.
+
+ A minimal example which provides a growing list of integers can be
+ defined like this:
+
+ struct int_array
+ {
+ // Pointer to result array followed by its length,
+ // as required by DYNARRAY_FINAL_TYPE.
+ int *array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_int
+ #define DYNARRAY_ELEMENT int
+ #define DYNARRAY_PREFIX dynarray_int_
+ #define DYNARRAY_FINAL_TYPE struct int_array
+ #include <malloc/dynarray-skeleton.c>
+
+ To create a three-element array with elements 1, 2, 3, use this
+ code:
+
+ struct dynarray_int dyn;
+ dynarray_int_init (&dyn);
+ for (int i = 1; i <= 3; ++i)
+ {
+ int *place = dynarray_int_emplace (&dyn);
+ assert (place != NULL);
+ *place = i;
+ }
+ struct int_array result;
+ bool ok = dynarray_int_finalize (&dyn, &result);
+ assert (ok);
+ assert (result.length == 3);
+ assert (result.array[0] == 1);
+ assert (result.array[1] == 2);
+ assert (result.array[2] == 3);
+ free (result.array);
+
+ If the elements contain resources which must be freed, define
+ DYNARRAY_ELEMENT_FREE appropriately, like this:
+
+ struct str_array
+ {
+ char **array;
+ size_t length;
+ };
+
+ #define DYNARRAY_STRUCT dynarray_str
+ #define DYNARRAY_ELEMENT char *
+ #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr)
+ #define DYNARRAY_PREFIX dynarray_str_
+ #define DYNARRAY_FINAL_TYPE struct str_array
+ #include <malloc/dynarray-skeleton.c>
+
+ Compared to scratch buffers, dynamic arrays have the following
+ features:
+
+ - They have an element type, and are not just an untyped buffer of
+ bytes.
+
+ - When growing, previously stored elements are preserved. (It is
+ expected that scratch_buffer_grow_preserve and
+ scratch_buffer_set_array_size eventually go away because all
+ current users are moved to dynamic arrays.)
+
+ - Scratch buffers have a more aggressive growth policy because
+ growing them typically means a retry of an operation (across an
+ NSS service module boundary), which is expensive.
+
+ - For the same reason, scratch buffers have a much larger initial
+ stack allocation. */
+
+#ifndef _DYNARRAY_H
+#define _DYNARRAY_H
+
+#include <stddef.h>
+#include <string.h>
+
+struct dynarray_header
+{
+ size_t used;
+ size_t allocated;
+ void *array;
+};
+
+/* Marker used in the allocated member to indicate that an error was
+ encountered. */
+static inline size_t
+__dynarray_error_marker (void)
+{
+ return -1;
+}
+
+/* Internal function. See the has_failed function in
+ dynarray-skeleton.c. */
+static inline bool
+__dynarray_error (struct dynarray_header *list)
+{
+ return list->allocated == __dynarray_error_marker ();
+}
+
+/* Internal function. Enlarge the dynamically allocated area of the
+ array to make room for one more element. SCRATCH is a pointer to
+ the scratch area (which is not heap-allocated and must not be
+ freed). ELEMENT_SIZE is the size, in bytes, of one element.
+ Return false on failure, true on success. */
+bool __libc_dynarray_emplace_enlarge (struct dynarray_header *,
+ void *scratch, size_t element_size);
+
+/* Internal function. Enlarge the dynamically allocated area of the
+ array to make room for at least SIZE elements (which must be larger
+ than the existing used part of the dynamic array). SCRATCH is a
+ pointer to the scratch area (which is not heap-allocated and must
+ not be freed). ELEMENT_SIZE is the size, in bytes, of one element.
+ Return false on failure, true on success. */
+bool __libc_dynarray_resize (struct dynarray_header *, size_t size,
+ void *scratch, size_t element_size);
+
+/* Internal function. Like __libc_dynarray_resize, but clear the new
+ part of the dynamic array. */
+bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size,
+ void *scratch, size_t element_size);
+
+/* Internal type. */
+struct dynarray_finalize_result
+{
+ void *array;
+ size_t length;
+};
+
+/* Internal function. Copy the dynamically-allocated area to an
+ explicitly-sized heap allocation. SCRATCH is a pointer to the
+ embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the
+ element type. On success, true is returned, and pointer and length
+ are written to *RESULT. On failure, false is returned. The caller
+ has to take care of some of the memory management; this function is
+ expected to be called from dynarray-skeleton.c. */
+bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch,
+ size_t element_size,
+ struct dynarray_finalize_result *result);
+
+
+/* Internal function. Terminate the process after an index error.
+ SIZE is the number of elements of the dynamic array. INDEX is the
+ lookup index which triggered the failure. */
+_Noreturn void __libc_dynarray_at_failure (size_t size, size_t index);
+
+#ifndef _ISOMAC
+libc_hidden_proto (__libc_dynarray_emplace_enlarge)
+libc_hidden_proto (__libc_dynarray_resize)
+libc_hidden_proto (__libc_dynarray_resize_clear)
+libc_hidden_proto (__libc_dynarray_finalize)
+libc_hidden_proto (__libc_dynarray_at_failure)
+#endif
+
+#endif /* _DYNARRAY_H */
diff --git a/lib/malloc/dynarray_at_failure.c b/lib/malloc/dynarray_at_failure.c
new file mode 100644
index 0000000..ebc9310
--- /dev/null
+++ b/lib/malloc/dynarray_at_failure.c
@@ -0,0 +1,40 @@
+/* Report an dynamic array index out of bounds condition.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+# include <stdlib.h>
+#endif
+
+#include <dynarray.h>
+#include <stdio.h>
+
+void
+__libc_dynarray_at_failure (size_t size, size_t index)
+{
+#ifdef _LIBC
+ char buf[200];
+ __snprintf (buf, sizeof (buf), "Fatal glibc error: "
+ "array index %zu not less than array length %zu\n",
+ index, size);
+ __libc_fatal (buf);
+#else
+ abort ();
+#endif
+}
+libc_hidden_def (__libc_dynarray_at_failure)
diff --git a/lib/malloc/dynarray_emplace_enlarge.c b/lib/malloc/dynarray_emplace_enlarge.c
new file mode 100644
index 0000000..7da5393
--- /dev/null
+++ b/lib/malloc/dynarray_emplace_enlarge.c
@@ -0,0 +1,77 @@
+/* Increase the size of a dynamic array in preparation of an emplace operation.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <dynarray.h>
+#include <errno.h>
+#include <intprops.h>
+#include <stdlib.h>
+#include <string.h>
+
+bool
+__libc_dynarray_emplace_enlarge (struct dynarray_header *list,
+ void *scratch, size_t element_size)
+{
+ size_t new_allocated;
+ if (list->allocated == 0)
+ {
+ /* No scratch buffer provided. Choose a reasonable default
+ size. */
+ if (element_size < 4)
+ new_allocated = 16;
+ else if (element_size < 8)
+ new_allocated = 8;
+ else
+ new_allocated = 4;
+ }
+ else
+ /* Increase the allocated size, using an exponential growth
+ policy. */
+ {
+ new_allocated = list->allocated + list->allocated / 2 + 1;
+ if (new_allocated <= list->allocated)
+ {
+ /* Overflow. */
+ __set_errno (ENOMEM);
+ return false;
+ }
+ }
+
+ size_t new_size;
+ if (INT_MULTIPLY_WRAPV (new_allocated, element_size, &new_size))
+ return false;
+ void *new_array;
+ if (list->array == scratch)
+ {
+ /* The previous array was not heap-allocated. */
+ new_array = malloc (new_size);
+ if (new_array != NULL && list->array != NULL)
+ memcpy (new_array, list->array, list->used * element_size);
+ }
+ else
+ new_array = realloc (list->array, new_size);
+ if (new_array == NULL)
+ return false;
+ list->array = new_array;
+ list->allocated = new_allocated;
+ return true;
+}
+libc_hidden_def (__libc_dynarray_emplace_enlarge)
diff --git a/lib/malloc/dynarray_finalize.c b/lib/malloc/dynarray_finalize.c
new file mode 100644
index 0000000..673595a
--- /dev/null
+++ b/lib/malloc/dynarray_finalize.c
@@ -0,0 +1,66 @@
+/* Copy the dynamically-allocated area to an explicitly-sized heap allocation.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <dynarray.h>
+#include <stdlib.h>
+#include <string.h>
+
+bool
+__libc_dynarray_finalize (struct dynarray_header *list,
+ void *scratch, size_t element_size,
+ struct dynarray_finalize_result *result)
+{
+ if (__dynarray_error (list))
+ /* The caller will reported the deferred error. */
+ return false;
+
+ size_t used = list->used;
+
+ /* Empty list. */
+ if (used == 0)
+ {
+ /* An empty list could still be backed by a heap-allocated
+ array. Free it if necessary. */
+ if (list->array != scratch)
+ free (list->array);
+ *result = (struct dynarray_finalize_result) { NULL, 0 };
+ return true;
+ }
+
+ size_t allocation_size = used * element_size;
+ void *heap_array = malloc (allocation_size);
+ if (heap_array != NULL)
+ {
+ /* The new array takes ownership of the strings. */
+ if (list->array != NULL)
+ memcpy (heap_array, list->array, allocation_size);
+ if (list->array != scratch)
+ free (list->array);
+ *result = (struct dynarray_finalize_result)
+ { .array = heap_array, .length = used };
+ return true;
+ }
+ else
+ /* The caller will perform the freeing operation. */
+ return false;
+}
+libc_hidden_def (__libc_dynarray_finalize)
diff --git a/lib/malloc/dynarray_resize.c b/lib/malloc/dynarray_resize.c
new file mode 100644
index 0000000..7ecd4de
--- /dev/null
+++ b/lib/malloc/dynarray_resize.c
@@ -0,0 +1,68 @@
+/* Increase the size of a dynamic array.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <dynarray.h>
+#include <errno.h>
+#include <intprops.h>
+#include <stdlib.h>
+#include <string.h>
+
+bool
+__libc_dynarray_resize (struct dynarray_header *list, size_t size,
+ void *scratch, size_t element_size)
+{
+ /* The existing allocation provides sufficient room. */
+ if (size <= list->allocated)
+ {
+ list->used = size;
+ return true;
+ }
+
+ /* Otherwise, use size as the new allocation size. The caller is
+ expected to provide the final size of the array, so there is no
+ over-allocation here. */
+
+ size_t new_size_bytes;
+ if (INT_MULTIPLY_WRAPV (size, element_size, &new_size_bytes))
+ {
+ /* Overflow. */
+ __set_errno (ENOMEM);
+ return false;
+ }
+ void *new_array;
+ if (list->array == scratch)
+ {
+ /* The previous array was not heap-allocated. */
+ new_array = malloc (new_size_bytes);
+ if (new_array != NULL && list->array != NULL)
+ memcpy (new_array, list->array, list->used * element_size);
+ }
+ else
+ new_array = realloc (list->array, new_size_bytes);
+ if (new_array == NULL)
+ return false;
+ list->array = new_array;
+ list->allocated = size;
+ list->used = size;
+ return true;
+}
+libc_hidden_def (__libc_dynarray_resize)
diff --git a/lib/malloc/dynarray_resize_clear.c b/lib/malloc/dynarray_resize_clear.c
new file mode 100644
index 0000000..bb23c52
--- /dev/null
+++ b/lib/malloc/dynarray_resize_clear.c
@@ -0,0 +1,39 @@
+/* Increase the size of a dynamic array and clear the new part.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <dynarray.h>
+#include <string.h>
+
+bool
+__libc_dynarray_resize_clear (struct dynarray_header *list, size_t size,
+ void *scratch, size_t element_size)
+{
+ size_t old_size = list->used;
+ if (!__libc_dynarray_resize (list, size, scratch, element_size))
+ return false;
+ /* __libc_dynarray_resize already checked for overflow. */
+ char *array = list->array;
+ memset (array + (old_size * element_size), 0,
+ (size - old_size) * element_size);
+ return true;
+}
+libc_hidden_def (__libc_dynarray_resize_clear)
diff --git a/lib/malloc/scratch_buffer.h b/lib/malloc/scratch_buffer.h
new file mode 100644
index 0000000..33fd2b2
--- /dev/null
+++ b/lib/malloc/scratch_buffer.h
@@ -0,0 +1,135 @@
+/* Variable-sized buffer with on-stack default allocation.
+ Copyright (C) 2015-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _SCRATCH_BUFFER_H
+#define _SCRATCH_BUFFER_H
+
+/* Scratch buffers with a default stack allocation and fallback to
+ heap allocation. It is expected that this function is used in this
+ way:
+
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ return -1;
+
+ scratch_buffer_free (&tmpbuf);
+ return 0;
+
+ The allocation functions (scratch_buffer_grow,
+ scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make
+ sure that the heap allocation, if any, is freed, so that the code
+ above does not have a memory leak. The buffer still remains in a
+ state that can be deallocated using scratch_buffer_free, so a loop
+ like this is valid as well:
+
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ break;
+
+ scratch_buffer_free (&tmpbuf);
+
+ scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed
+ to grow the buffer by at least 512 bytes. This means that when
+ using the scratch buffer as a backing store for a non-character
+ array whose element size, in bytes, is 512 or smaller, the scratch
+ buffer only has to grow once to make room for at least one more
+ element.
+*/
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+/* Scratch buffer. Must be initialized with scratch_buffer_init
+ before its use. */
+struct scratch_buffer {
+ void *data; /* Pointer to the beginning of the scratch area. */
+ size_t length; /* Allocated space at the data pointer, in bytes. */
+ union { max_align_t __align; char __c[1024]; } __space;
+};
+
+/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space
+ and BUFFER->length reflects the available space. */
+static inline void
+scratch_buffer_init (struct scratch_buffer *buffer)
+{
+ buffer->data = buffer->__space.__c;
+ buffer->length = sizeof (buffer->__space);
+}
+
+/* Deallocates *BUFFER (if it was heap-allocated). */
+static inline void
+scratch_buffer_free (struct scratch_buffer *buffer)
+{
+ if (buffer->data != buffer->__space.__c)
+ free (buffer->data);
+}
+
+/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT
+ preserved. Return true on success, false on allocation failure (in
+ which case the old buffer is freed). On success, the new buffer is
+ larger than the previous size. On failure, *BUFFER is deallocated,
+ but remains in a free-able state, and errno is set. */
+bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer);
+libc_hidden_proto (__libc_scratch_buffer_grow)
+
+/* Alias for __libc_scratch_buffer_grow. */
+static __always_inline bool
+scratch_buffer_grow (struct scratch_buffer *buffer)
+{
+ return __glibc_likely (__libc_scratch_buffer_grow (buffer));
+}
+
+/* Like __libc_scratch_buffer_grow, but preserve the old buffer
+ contents on success, as a prefix of the new buffer. */
+bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer);
+libc_hidden_proto (__libc_scratch_buffer_grow_preserve)
+
+/* Alias for __libc_scratch_buffer_grow_preserve. */
+static __always_inline bool
+scratch_buffer_grow_preserve (struct scratch_buffer *buffer)
+{
+ return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer));
+}
+
+/* Grow *BUFFER so that it can store at least NELEM elements of SIZE
+ bytes. The buffer contents are NOT preserved. Both NELEM and SIZE
+ can be zero. Return true on success, false on allocation failure
+ (in which case the old buffer is freed, but *BUFFER remains in a
+ free-able state, and errno is set). It is unspecified whether this
+ function can reduce the array size. */
+bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer,
+ size_t nelem, size_t size);
+libc_hidden_proto (__libc_scratch_buffer_set_array_size)
+
+/* Alias for __libc_scratch_set_array_size. */
+static __always_inline bool
+scratch_buffer_set_array_size (struct scratch_buffer *buffer,
+ size_t nelem, size_t size)
+{
+ return __glibc_likely (__libc_scratch_buffer_set_array_size
+ (buffer, nelem, size));
+}
+
+#endif /* _SCRATCH_BUFFER_H */
diff --git a/lib/malloc/scratch_buffer_grow.c b/lib/malloc/scratch_buffer_grow.c
new file mode 100644
index 0000000..a5e8f2f
--- /dev/null
+++ b/lib/malloc/scratch_buffer_grow.c
@@ -0,0 +1,56 @@
+/* Variable-sized buffer with on-stack default allocation.
+ Copyright (C) 2015-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <scratch_buffer.h>
+#include <errno.h>
+
+bool
+__libc_scratch_buffer_grow (struct scratch_buffer *buffer)
+{
+ void *new_ptr;
+ size_t new_length = buffer->length * 2;
+
+ /* Discard old buffer. */
+ scratch_buffer_free (buffer);
+
+ /* Check for overflow. */
+ if (__glibc_likely (new_length >= buffer->length))
+ new_ptr = malloc (new_length);
+ else
+ {
+ __set_errno (ENOMEM);
+ new_ptr = NULL;
+ }
+
+ if (__glibc_unlikely (new_ptr == NULL))
+ {
+ /* Buffer must remain valid to free. */
+ scratch_buffer_init (buffer);
+ return false;
+ }
+
+ /* Install new heap-based buffer. */
+ buffer->data = new_ptr;
+ buffer->length = new_length;
+ return true;
+}
+libc_hidden_def (__libc_scratch_buffer_grow)
diff --git a/lib/malloc/scratch_buffer_grow_preserve.c b/lib/malloc/scratch_buffer_grow_preserve.c
new file mode 100644
index 0000000..c0b5d87
--- /dev/null
+++ b/lib/malloc/scratch_buffer_grow_preserve.c
@@ -0,0 +1,67 @@
+/* Variable-sized buffer with on-stack default allocation.
+ Copyright (C) 2015-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <scratch_buffer.h>
+#include <errno.h>
+#include <string.h>
+
+bool
+__libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer)
+{
+ size_t new_length = 2 * buffer->length;
+ void *new_ptr;
+
+ if (buffer->data == buffer->__space.__c)
+ {
+ /* Move buffer to the heap. No overflow is possible because
+ buffer->length describes a small buffer on the stack. */
+ new_ptr = malloc (new_length);
+ if (new_ptr == NULL)
+ return false;
+ memcpy (new_ptr, buffer->__space.__c, buffer->length);
+ }
+ else
+ {
+ /* Buffer was already on the heap. Check for overflow. */
+ if (__glibc_likely (new_length >= buffer->length))
+ new_ptr = realloc (buffer->data, new_length);
+ else
+ {
+ __set_errno (ENOMEM);
+ new_ptr = NULL;
+ }
+
+ if (__glibc_unlikely (new_ptr == NULL))
+ {
+ /* Deallocate, but buffer must remain valid to free. */
+ free (buffer->data);
+ scratch_buffer_init (buffer);
+ return false;
+ }
+ }
+
+ /* Install new heap-based buffer. */
+ buffer->data = new_ptr;
+ buffer->length = new_length;
+ return true;
+}
+libc_hidden_def (__libc_scratch_buffer_grow_preserve)
diff --git a/lib/malloc/scratch_buffer_set_array_size.c b/lib/malloc/scratch_buffer_set_array_size.c
new file mode 100644
index 0000000..24c3935
--- /dev/null
+++ b/lib/malloc/scratch_buffer_set_array_size.c
@@ -0,0 +1,64 @@
+/* Variable-sized buffer with on-stack default allocation.
+ Copyright (C) 2015-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <libc-config.h>
+#endif
+
+#include <scratch_buffer.h>
+#include <errno.h>
+#include <limits.h>
+
+bool
+__libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer,
+ size_t nelem, size_t size)
+{
+ size_t new_length = nelem * size;
+
+ /* Avoid overflow check if both values are small. */
+ if ((nelem | size) >> (sizeof (size_t) * CHAR_BIT / 2) != 0
+ && nelem != 0 && size != new_length / nelem)
+ {
+ /* Overflow. Discard the old buffer, but it must remain valid
+ to free. */
+ scratch_buffer_free (buffer);
+ scratch_buffer_init (buffer);
+ __set_errno (ENOMEM);
+ return false;
+ }
+
+ if (new_length <= buffer->length)
+ return true;
+
+ /* Discard old buffer. */
+ scratch_buffer_free (buffer);
+
+ char *new_ptr = malloc (new_length);
+ if (new_ptr == NULL)
+ {
+ /* Buffer must remain valid to free. */
+ scratch_buffer_init (buffer);
+ return false;
+ }
+
+ /* Install new heap-based buffer. */
+ buffer->data = new_ptr;
+ buffer->length = new_length;
+ return true;
+}
+libc_hidden_def (__libc_scratch_buffer_set_array_size)
diff --git a/lib/malloca.c b/lib/malloca.c
new file mode 100644
index 0000000..f055b1e
--- /dev/null
+++ b/lib/malloca.c
@@ -0,0 +1,112 @@
+/* Safe automatic memory allocation.
+ Copyright (C) 2003, 2006-2007, 2009-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003, 2018.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define _GL_USE_STDLIB_ALLOC 1
+#include <config.h>
+
+/* Specification. */
+#include "malloca.h"
+
+#include <stdckdint.h>
+
+#include "idx.h"
+
+/* The speed critical point in this file is freea() applied to an alloca()
+ result: it must be fast, to match the speed of alloca(). The speed of
+ mmalloca() and freea() in the other case are not critical, because they
+ are only invoked for big memory sizes.
+ Here we use a bit in the address as an indicator, an idea by Ondřej Bílka.
+ malloca() can return three types of pointers:
+ - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation.
+ - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap
+ allocation.
+ - NULL comes from a failed heap allocation. */
+
+/* Type for holding very small pointer differences. */
+typedef unsigned char small_t;
+/* Verify that it is wide enough. */
+static_assert (2 * sa_alignment_max - 1 <= (small_t) -1);
+
+void *
+mmalloca (size_t n)
+{
+#if HAVE_ALLOCA
+ /* Allocate one more word, used to determine the address to pass to freea(),
+ and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */
+ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1;
+ int plus = sizeof (small_t) + alignment2_mask;
+ idx_t nplus;
+ if (!ckd_add (&nplus, n, plus) && !xalloc_oversized (nplus, 1))
+ {
+ char *mem = (char *) malloc (nplus);
+
+ if (mem != NULL)
+ {
+ uintptr_t umem = (uintptr_t)mem, umemplus;
+ /* The ckd_add avoids signed integer overflow on
+ theoretical platforms where UINTPTR_MAX <= INT_MAX. */
+ ckd_add (&umemplus, umem, sizeof (small_t) + sa_alignment_max - 1);
+ idx_t offset = ((umemplus & ~alignment2_mask)
+ + sa_alignment_max - umem);
+ void *vp = mem + offset;
+ small_t *p = vp;
+ /* Here p >= mem + sizeof (small_t),
+ and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1
+ hence p + n <= mem + nplus.
+ So, the memory range [p, p+n) lies in the allocated memory range
+ [mem, mem + nplus). */
+ p[-1] = offset;
+ /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */
+ return p;
+ }
+ }
+ /* Out of memory. */
+ return NULL;
+#else
+# if !MALLOC_0_IS_NONNULL
+ if (n == 0)
+ n = 1;
+# endif
+ return malloc (n);
+#endif
+}
+
+#if HAVE_ALLOCA
+void
+freea (void *p)
+{
+ /* Check argument. */
+ if ((uintptr_t) p & (sa_alignment_max - 1))
+ {
+ /* p was not the result of a malloca() call. Invalid argument. */
+ abort ();
+ }
+ /* Determine whether p was a non-NULL pointer returned by mmalloca(). */
+ if ((uintptr_t) p & sa_alignment_max)
+ {
+ void *mem = (char *) p - ((small_t *) p)[-1];
+ free (mem);
+ }
+}
+#endif
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/malloca.h b/lib/malloca.h
new file mode 100644
index 0000000..325c727
--- /dev/null
+++ b/lib/malloca.h
@@ -0,0 +1,126 @@
+/* Safe automatic memory allocation.
+ Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _MALLOCA_H
+#define _MALLOCA_H
+
+#include <alloca.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include "xalloc-oversized.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call
+ alloca(N); otherwise it returns NULL. It either returns N bytes of
+ memory allocated on the stack, that lasts until the function returns,
+ or NULL.
+ Use of safe_alloca should be avoided:
+ - inside arguments of function calls - undefined behaviour,
+ - in inline functions - the allocation may actually last until the
+ calling function returns.
+*/
+#if HAVE_ALLOCA
+/* The OS usually guarantees only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ allocate anything larger than 4096 bytes. Also care for the possibility
+ of a few compiler-allocated temporary stack slots.
+ This must be a macro, not a function. */
+# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL)
+#else
+# define safe_alloca(N) ((void) (N), NULL)
+#endif
+
+/* Free a block of memory allocated through malloca(). */
+#if HAVE_ALLOCA
+extern void freea (void *p);
+#else
+# define freea free
+#endif
+
+/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of
+ memory allocated on the stack, that must be freed using freea() before
+ the function returns. Upon failure, it returns NULL. */
+#if HAVE_ALLOCA
+# define malloca(N) \
+ ((N) < 4032 - (2 * sa_alignment_max - 1) \
+ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \
+ + (2 * sa_alignment_max - 1)) \
+ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \
+ : mmalloca (N))
+#else
+# define malloca(N) \
+ mmalloca (N)
+#endif
+extern void *mmalloca (size_t n)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1));
+
+/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S).
+ It allocates an array of N objects, each with S bytes of memory,
+ on the stack. N and S should be nonnegative and free of side effects.
+ The array must be freed using freea() before the function returns. */
+#define nmalloca(n, s) \
+ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s)))
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+/* ------------------- Auxiliary, non-public definitions ------------------- */
+
+/* Determine the alignment of a type at compile time. */
+#if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__
+# define sa_alignof __alignof__
+#elif defined __cplusplus
+ template <class type> struct sa_alignof_helper { char __slot1; type __slot2; };
+# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2)
+#elif defined __hpux
+ /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof
+ values. */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#elif defined _AIX
+ /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof
+ values. */
+# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8)
+#else
+# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2)
+#endif
+
+enum
+{
+/* The desired alignment of memory allocations is the maximum alignment
+ among all elementary types. */
+ sa_alignment_long = sa_alignof (long),
+ sa_alignment_double = sa_alignof (double),
+ sa_alignment_longlong = sa_alignof (long long),
+ sa_alignment_longdouble = sa_alignof (long double),
+ sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1)
+ | (sa_alignment_longlong - 1)
+ | (sa_alignment_longdouble - 1)
+ ) + 1
+};
+
+#endif /* _MALLOCA_H */
diff --git a/lib/mbrtowc-impl-utf8.h b/lib/mbrtowc-impl-utf8.h
new file mode 100644
index 0000000..4fdd65d
--- /dev/null
+++ b/lib/mbrtowc-impl-utf8.h
@@ -0,0 +1,138 @@
+/* Convert multibyte character to wide character.
+ Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
+
+/* This file contains the part of the body of the mbrtowc and mbrtoc32 functions
+ that handles the special case of the UTF-8 encoding. */
+
+ /* Cf. unistr/u8-mbtouc.c. */
+ unsigned char c = (unsigned char) p[0];
+
+ if (c < 0x80)
+ {
+ if (pwc != NULL)
+ *pwc = c;
+ res = (c == 0 ? 0 : 1);
+ goto success;
+ }
+ if (c >= 0xc2)
+ {
+ if (c < 0xe0)
+ {
+ if (m == 1)
+ goto incomplete;
+ else /* m >= 2 */
+ {
+ unsigned char c2 = (unsigned char) p[1];
+
+ if ((c2 ^ 0x80) < 0x40)
+ {
+ if (pwc != NULL)
+ *pwc = ((unsigned int) (c & 0x1f) << 6)
+ | (unsigned int) (c2 ^ 0x80);
+ res = 2;
+ goto success;
+ }
+ }
+ }
+ else if (c < 0xf0)
+ {
+ if (m == 1)
+ goto incomplete;
+ else
+ {
+ unsigned char c2 = (unsigned char) p[1];
+
+ if ((c2 ^ 0x80) < 0x40
+ && (c >= 0xe1 || c2 >= 0xa0)
+ && (c != 0xed || c2 < 0xa0))
+ {
+ if (m == 2)
+ goto incomplete;
+ else /* m >= 3 */
+ {
+ unsigned char c3 = (unsigned char) p[2];
+
+ if ((c3 ^ 0x80) < 0x40)
+ {
+ unsigned int wc =
+ (((unsigned int) (c & 0x0f) << 12)
+ | ((unsigned int) (c2 ^ 0x80) << 6)
+ | (unsigned int) (c3 ^ 0x80));
+
+ if (FITS_IN_CHAR_TYPE (wc))
+ {
+ if (pwc != NULL)
+ *pwc = wc;
+ res = 3;
+ goto success;
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (c <= 0xf4)
+ {
+ if (m == 1)
+ goto incomplete;
+ else
+ {
+ unsigned char c2 = (unsigned char) p[1];
+
+ if ((c2 ^ 0x80) < 0x40
+ && (c >= 0xf1 || c2 >= 0x90)
+ && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90)))
+ {
+ if (m == 2)
+ goto incomplete;
+ else
+ {
+ unsigned char c3 = (unsigned char) p[2];
+
+ if ((c3 ^ 0x80) < 0x40)
+ {
+ if (m == 3)
+ goto incomplete;
+ else /* m >= 4 */
+ {
+ unsigned char c4 = (unsigned char) p[3];
+
+ if ((c4 ^ 0x80) < 0x40)
+ {
+ unsigned int wc =
+ (((unsigned int) (c & 0x07) << 18)
+ | ((unsigned int) (c2 ^ 0x80) << 12)
+ | ((unsigned int) (c3 ^ 0x80) << 6)
+ | (unsigned int) (c4 ^ 0x80));
+
+ if (FITS_IN_CHAR_TYPE (wc))
+ {
+ if (pwc != NULL)
+ *pwc = wc;
+ res = 4;
+ goto success;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ goto invalid;
diff --git a/lib/mbrtowc-impl.h b/lib/mbrtowc-impl.h
new file mode 100644
index 0000000..e9c04ed
--- /dev/null
+++ b/lib/mbrtowc-impl.h
@@ -0,0 +1,262 @@
+/* Convert multibyte character to wide character.
+ Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2008. */
+
+/* This file contains the body of the mbrtowc and mbrtoc32 functions,
+ when GNULIB_defined_mbstate_t is defined. */
+
+ char *pstate = (char *)ps;
+
+ if (s == NULL)
+ {
+ pwc = NULL;
+ s = "";
+ n = 1;
+ }
+
+ if (n == 0)
+ return (size_t)(-2);
+
+ /* Here n > 0. */
+
+ if (pstate == NULL)
+ pstate = internal_state;
+
+ {
+ size_t nstate = pstate[0];
+ char buf[4];
+ const char *p;
+ size_t m;
+ enc_t enc;
+ int res;
+
+ switch (nstate)
+ {
+ case 0:
+ p = s;
+ m = n;
+ break;
+ case 3:
+ buf[2] = pstate[3];
+ FALLTHROUGH;
+ case 2:
+ buf[1] = pstate[2];
+ FALLTHROUGH;
+ case 1:
+ buf[0] = pstate[1];
+ p = buf;
+ m = nstate;
+ buf[m++] = s[0];
+ if (n >= 2 && m < 4)
+ {
+ buf[m++] = s[1];
+ if (n >= 3 && m < 4)
+ buf[m++] = s[2];
+ }
+ break;
+ default:
+ errno = EINVAL;
+ return (size_t)(-1);
+ }
+
+ /* Here m > 0. */
+
+ enc = locale_encoding_classification ();
+
+ if (enc == enc_utf8) /* UTF-8 */
+ {
+ /* Achieve
+ - multi-thread safety and
+ - the ability to produce wide character values > WCHAR_MAX
+ by not calling mbtowc() at all. */
+#include "mbrtowc-impl-utf8.h"
+ }
+ else
+ {
+ /* The hidden internal state of mbtowc would make this function not
+ multi-thread safe. Achieve multi-thread safety through a lock. */
+ wchar_t wc;
+ res = mbtowc_with_lock (&wc, p, m);
+
+ if (res >= 0)
+ {
+ if ((wc == 0) != (res == 0))
+ abort ();
+ if (pwc != NULL)
+ *pwc = wc;
+ goto success;
+ }
+
+ /* mbtowc does not distinguish between invalid and incomplete multibyte
+ sequences. But mbrtowc needs to make this distinction.
+ There are two possible approaches:
+ - Use iconv() and its return value.
+ - Use built-in knowledge about the possible encodings.
+ Given the low quality of implementation of iconv() on the systems
+ that lack mbrtowc(), we use the second approach.
+ The possible encodings are:
+ - 8-bit encodings,
+ - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS,
+ - UTF-8 (already handled above).
+ Use specialized code for each. */
+ if (m >= 4 || m >= MB_CUR_MAX)
+ goto invalid;
+ /* Here MB_CUR_MAX > 1 and 0 < m < 4. */
+ switch (enc)
+ {
+ /* As a reference for this code, you can use the GNU libiconv
+ implementation. Look for uses of the RET_TOOFEW macro. */
+
+ case enc_eucjp: /* EUC-JP */
+ {
+ if (m == 1)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f)
+ goto incomplete;
+ }
+ if (m == 2)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if (c == 0x8f)
+ {
+ unsigned char c2 = (unsigned char) p[1];
+
+ if (c2 >= 0xa1 && c2 < 0xff)
+ goto incomplete;
+ }
+ }
+ goto invalid;
+ }
+
+ case enc_94: /* EUC-KR, GB2312, BIG5 */
+ {
+ if (m == 1)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if (c >= 0xa1 && c < 0xff)
+ goto incomplete;
+ }
+ goto invalid;
+ }
+
+ case enc_euctw: /* EUC-TW */
+ {
+ if (m == 1)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if ((c >= 0xa1 && c < 0xff) || c == 0x8e)
+ goto incomplete;
+ }
+ else /* m == 2 || m == 3 */
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if (c == 0x8e)
+ goto incomplete;
+ }
+ goto invalid;
+ }
+
+ case enc_gb18030: /* GB18030 */
+ {
+ if (m == 1)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe))
+ goto incomplete;
+ }
+ else /* m == 2 || m == 3 */
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if (c >= 0x90 && c <= 0xe3)
+ {
+ unsigned char c2 = (unsigned char) p[1];
+
+ if (c2 >= 0x30 && c2 <= 0x39)
+ {
+ if (m == 2)
+ goto incomplete;
+ else /* m == 3 */
+ {
+ unsigned char c3 = (unsigned char) p[2];
+
+ if (c3 >= 0x81 && c3 <= 0xfe)
+ goto incomplete;
+ }
+ }
+ }
+ }
+ goto invalid;
+ }
+
+ case enc_sjis: /* SJIS */
+ {
+ if (m == 1)
+ {
+ unsigned char c = (unsigned char) p[0];
+
+ if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea)
+ || (c >= 0xf0 && c <= 0xf9))
+ goto incomplete;
+ }
+ goto invalid;
+ }
+
+ default:
+ /* An unknown multibyte encoding. */
+ goto incomplete;
+ }
+ }
+
+ success:
+ /* res >= 0 is the corrected return value of
+ mbtowc_with_lock (&wc, p, m). */
+ if (nstate >= (res > 0 ? res : 1))
+ abort ();
+ res -= nstate;
+ pstate[0] = 0;
+ return res;
+
+ incomplete:
+ {
+ size_t k = nstate;
+ /* Here 0 <= k < m < 4. */
+ pstate[++k] = s[0];
+ if (k < m)
+ {
+ pstate[++k] = s[1];
+ if (k < m)
+ pstate[++k] = s[2];
+ }
+ if (k != m)
+ abort ();
+ }
+ pstate[0] = m;
+ return (size_t)(-2);
+
+ invalid:
+ errno = EILSEQ;
+ /* The conversion state is undefined, says POSIX. */
+ return (size_t)(-1);
+ }
diff --git a/lib/mbrtowc.c b/lib/mbrtowc.c
new file mode 100644
index 0000000..c1a689a
--- /dev/null
+++ b/lib/mbrtowc.c
@@ -0,0 +1,157 @@
+/* Convert multibyte character to wide character.
+ Copyright (C) 1999-2002, 2005-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <wchar.h>
+
+#if GNULIB_defined_mbstate_t
+/* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales
+ and directly for the UTF-8 locales. */
+
+# include <errno.h>
+# include <stdint.h>
+# include <stdlib.h>
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS
+# include <threads.h>
+# pragma weak thrd_exit
+# define c11_threads_in_use() (thrd_exit != NULL)
+# else
+# define c11_threads_in_use() 0
+# endif
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+
+# endif
+
+# include "attribute.h"
+# include "lc-charset-dispatch.h"
+# include "mbtowc-lock.h"
+
+static_assert (sizeof (mbstate_t) >= 4);
+static char internal_state[4];
+
+size_t
+mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+# define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX)
+# include "mbrtowc-impl.h"
+}
+
+#else
+/* Override the system's mbrtowc() function. */
+
+# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ
+# include "hard-locale.h"
+# include <locale.h>
+# endif
+
+# undef mbrtowc
+
+size_t
+rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)
+{
+ size_t ret;
+ wchar_t wc;
+
+# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG
+ if (s == NULL)
+ {
+ pwc = NULL;
+ s = "";
+ n = 1;
+ }
+# endif
+
+# if MBRTOWC_EMPTY_INPUT_BUG
+ if (n == 0)
+ return (size_t) -2;
+# endif
+
+ if (! pwc)
+ pwc = &wc;
+
+# if MBRTOWC_RETVAL_BUG
+ {
+ static mbstate_t internal_state;
+
+ /* Override mbrtowc's internal state. We cannot call mbsinit() on the
+ hidden internal state, but we can call it on our variable. */
+ if (ps == NULL)
+ ps = &internal_state;
+
+ if (!mbsinit (ps))
+ {
+ /* Parse the rest of the multibyte character byte for byte. */
+ size_t count = 0;
+ for (; n > 0; s++, n--)
+ {
+ ret = mbrtowc (&wc, s, 1, ps);
+
+ if (ret == (size_t)(-1))
+ return (size_t)(-1);
+ count++;
+ if (ret != (size_t)(-2))
+ {
+ /* The multibyte character has been completed. */
+ *pwc = wc;
+ return (wc == 0 ? 0 : count);
+ }
+ }
+ return (size_t)(-2);
+ }
+ }
+# endif
+
+# if MBRTOWC_STORES_INCOMPLETE_BUG
+ ret = mbrtowc (&wc, s, n, ps);
+ if (ret < (size_t) -2 && pwc != NULL)
+ *pwc = wc;
+# else
+ ret = mbrtowc (pwc, s, n, ps);
+# endif
+
+# if MBRTOWC_NUL_RETVAL_BUG
+ if (ret < (size_t) -2 && !*pwc)
+ return 0;
+# endif
+
+# if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ
+ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE))
+ {
+ unsigned char uc = *s;
+ *pwc = uc;
+ return 1;
+ }
+# endif
+
+ return ret;
+}
+
+#endif
diff --git a/lib/mbsinit.c b/lib/mbsinit.c
new file mode 100644
index 0000000..6e60079
--- /dev/null
+++ b/lib/mbsinit.c
@@ -0,0 +1,69 @@
+/* Test for initial conversion state.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <wchar.h>
+
+
+#if GNULIB_defined_mbstate_t
+
+/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs()
+ and wcrtomb(), wcsrtombs().
+ We assume that
+ - sizeof (mbstate_t) >= 4,
+ - only stateless encodings are supported (such as UTF-8 and EUC-JP, but
+ not ISO-2022 variants),
+ - for each encoding, the number of bytes for a wide character is <= 4.
+ (This maximum is attained for UTF-8, GB18030, EUC-TW.)
+ We define the meaning of mbstate_t as follows:
+ - In mb -> wc direction, mbstate_t's first byte contains the number of
+ buffered bytes (in the range 0..3), followed by up to 3 buffered bytes.
+ See mbrtowc.c.
+ - In wc -> mb direction, mbstate_t contains no information. In other
+ words, it is always in the initial state. */
+
+static_assert (sizeof (mbstate_t) >= 4);
+
+int
+mbsinit (const mbstate_t *ps)
+{
+ const char *pstate = (const char *)ps;
+
+ return pstate == NULL || pstate[0] == 0;
+}
+
+#else
+
+int
+mbsinit (const mbstate_t *ps)
+{
+# if defined _WIN32 && !defined __CYGWIN__
+ /* Native Windows. */
+ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter.
+ On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as
+ an 8-byte struct, of which the first 4 bytes matter. */
+ return ps == NULL || *(const unsigned int *)ps == 0;
+# else
+ /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */
+ /* Maybe this definition works, maybe not... */
+ return ps == NULL || *(const char *)ps == 0;
+# endif
+}
+
+#endif
diff --git a/lib/mbtowc-impl.h b/lib/mbtowc-impl.h
new file mode 100644
index 0000000..39b977b
--- /dev/null
+++ b/lib/mbtowc-impl.h
@@ -0,0 +1,44 @@
+/* Convert multibyte character to wide character.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* We don't need a static internal state, because the encoding is not state
+ dependent, and when mbrtowc returns (size_t)(-2). we throw the result
+ away. */
+
+int
+mbtowc (wchar_t *pwc, const char *s, size_t n)
+{
+ if (s == NULL)
+ return 0;
+ else
+ {
+ mbstate_t state;
+ wchar_t wc;
+ size_t result;
+
+ memset (&state, 0, sizeof (mbstate_t));
+ result = mbrtowc (&wc, s, n, &state);
+ if (result == (size_t)-1 || result == (size_t)-2)
+ {
+ errno = EILSEQ;
+ return -1;
+ }
+ if (pwc != NULL)
+ *pwc = wc;
+ return (wc == 0 ? 0 : result);
+ }
+}
diff --git a/lib/mbtowc-lock.c b/lib/mbtowc-lock.c
new file mode 100644
index 0000000..6ca6e10
--- /dev/null
+++ b/lib/mbtowc-lock.c
@@ -0,0 +1,150 @@
+/* Return the internal lock used by mbrtowc and mbrtoc32.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */
+
+#include <config.h>
+
+/* When it is known that the gl_get_mbtowc_lock function is defined
+ by a dependency library, it should not be defined here. */
+#if OMIT_MBTOWC_LOCK
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
+
+#else
+
+/* This file defines the internal lock used by mbrtowc and mbrtoc32.
+ It is a separate compilation unit, so that only one copy of it is
+ present when linking statically. */
+
+/* Prohibit renaming this symbol. */
+# undef gl_get_mbtowc_lock
+
+/* Macro for exporting a symbol (function, not variable) defined in this file,
+ when compiled into a shared library. */
+# ifndef DLL_EXPORTED
+# if HAVE_VISIBILITY
+ /* Override the effect of the compiler option '-fvisibility=hidden'. */
+# define DLL_EXPORTED __attribute__((__visibility__("default")))
+# elif defined _WIN32 || defined __CYGWIN__
+# define DLL_EXPORTED __declspec(dllexport)
+# else
+# define DLL_EXPORTED
+# endif
+# endif
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# include "windows-initguard.h"
+
+/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *',
+ because the latter is not guaranteed to be a stable ABI in the future. */
+
+/* Make sure the function gets exported from DLLs. */
+DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void);
+
+static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
+static CRITICAL_SECTION lock;
+
+/* Returns the internal lock used by mbrtowc and mbrtoc32. */
+CRITICAL_SECTION *
+gl_get_mbtowc_lock (void)
+{
+ if (!guard.done)
+ {
+ if (InterlockedIncrement (&guard.started) == 0)
+ {
+ /* This thread is the first one to need the lock. Initialize it. */
+ InitializeCriticalSection (&lock);
+ guard.done = 1;
+ }
+ else
+ {
+ /* Don't let guard.started grow and wrap around. */
+ InterlockedDecrement (&guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this mutex. */
+ while (!guard.done)
+ Sleep (0);
+ }
+ }
+ return &lock;
+}
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void);
+
+/* Returns the internal lock used by mbrtowc and mbrtoc32. */
+pthread_mutex_t *
+gl_get_mbtowc_lock (void)
+{
+ return &mutex;
+}
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+# include <stdlib.h>
+
+static int volatile init_needed = 1;
+static once_flag init_once = ONCE_FLAG_INIT;
+static mtx_t mutex;
+
+static void
+atomic_init (void)
+{
+ if (mtx_init (&mutex, mtx_plain) != thrd_success)
+ abort ();
+ init_needed = 0;
+}
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void);
+
+/* Returns the internal lock used by mbrtowc and mbrtoc32. */
+mtx_t *
+gl_get_mbtowc_lock (void)
+{
+ if (init_needed)
+ call_once (&init_once, atomic_init);
+ return &mutex;
+}
+
+# endif
+
+# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER
+/* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not
+ cause a link failure when no DLLs are involved. */
+# if defined _WIN64 || defined _LP64
+# define IMP(x) __imp_##x
+# else
+# define IMP(x) _imp__##x
+# endif
+void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock;
+# endif
+
+#endif
diff --git a/lib/mbtowc-lock.h b/lib/mbtowc-lock.h
new file mode 100644
index 0000000..2dc22ac
--- /dev/null
+++ b/lib/mbtowc-lock.h
@@ -0,0 +1,125 @@
+/* Use the internal lock used by mbrtowc and mbrtoc32.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */
+
+/* Use a lock, so that no two threads can invoke mbtowc at the same time. */
+
+static inline int
+mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m)
+{
+ /* Put the hidden internal state of mbtowc into its initial state.
+ This is needed at least with glibc, uClibc, and MSVC CRT.
+ See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */
+ mbtowc (NULL, NULL, 0);
+
+ return mbtowc (pwc, p, m);
+}
+
+/* Prohibit renaming this symbol. */
+#undef gl_get_mbtowc_lock
+
+#if GNULIB_MBRTOWC_SINGLE_THREAD
+
+/* All uses of this function are in a single thread. No locking needed. */
+
+static int
+mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m)
+{
+ return mbtowc_unlocked (pwc, p, m);
+}
+
+#elif defined _WIN32 && !defined __CYGWIN__
+
+extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void);
+
+static int
+mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m)
+{
+ CRITICAL_SECTION *lock = gl_get_mbtowc_lock ();
+ int ret;
+
+ EnterCriticalSection (lock);
+ ret = mbtowc_unlocked (pwc, p, m);
+ LeaveCriticalSection (lock);
+
+ return ret;
+}
+
+#elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */
+
+extern
+# if defined _WIN32 || defined __CYGWIN__
+ __declspec(dllimport)
+# endif
+ pthread_mutex_t *gl_get_mbtowc_lock (void);
+
+# if HAVE_WEAK_SYMBOLS /* IRIX */
+
+ /* Avoid the need to link with '-lpthread'. */
+# pragma weak pthread_mutex_lock
+# pragma weak pthread_mutex_unlock
+
+ /* Determine whether libpthread is in use. */
+# pragma weak pthread_mutexattr_gettype
+ /* See the comments in lock.h. */
+# define pthread_in_use() \
+ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
+
+# else
+# define pthread_in_use() 1
+# endif
+
+static int
+mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m)
+{
+ if (pthread_in_use())
+ {
+ pthread_mutex_t *lock = gl_get_mbtowc_lock ();
+ int ret;
+
+ if (pthread_mutex_lock (lock))
+ abort ();
+ ret = mbtowc_unlocked (pwc, p, m);
+ if (pthread_mutex_unlock (lock))
+ abort ();
+
+ return ret;
+ }
+ else
+ return mbtowc_unlocked (pwc, p, m);
+}
+
+#elif HAVE_THREADS_H
+
+extern mtx_t *gl_get_mbtowc_lock (void);
+
+static int
+mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m)
+{
+ mtx_t *lock = gl_get_mbtowc_lock ();
+ int ret;
+
+ if (mtx_lock (lock) != thrd_success)
+ abort ();
+ ret = mbtowc_unlocked (pwc, p, m);
+ if (mtx_unlock (lock) != thrd_success)
+ abort ();
+
+ return ret;
+}
+
+#endif
diff --git a/lib/mbtowc.c b/lib/mbtowc.c
new file mode 100644
index 0000000..8d9b06d
--- /dev/null
+++ b/lib/mbtowc.c
@@ -0,0 +1,26 @@
+/* Convert multibyte character to wide character.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include <errno.h>
+#include <string.h>
+#include <wchar.h>
+
+#include "mbtowc-impl.h"
diff --git a/lib/mempcpy.c b/lib/mempcpy.c
new file mode 100644
index 0000000..24a3135
--- /dev/null
+++ b/lib/mempcpy.c
@@ -0,0 +1,33 @@
+/* Copy memory area and return pointer after last written byte.
+ Copyright (C) 2003, 2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+/* A function definition is only needed if HAVE_MEMPCPY is not defined. */
+#if !HAVE_MEMPCPY
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+ last written byte. */
+void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+ return (char *) memcpy (dest, src, n) + n;
+}
+
+#endif
diff --git a/lib/minmax.h b/lib/minmax.h
new file mode 100644
index 0000000..1fbfc66
--- /dev/null
+++ b/lib/minmax.h
@@ -0,0 +1,60 @@
+/* MIN, MAX macros.
+ Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _MINMAX_H
+#define _MINMAX_H
+
+/* Note: MIN, MAX are also defined in <sys/param.h> on some systems
+ (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about
+ MIN, MAX macro redefinitions on some systems; the workaround is to
+ #include this file as the last one among the #include list. */
+
+/* Before we define the following symbols we get the <limits.h> file
+ since otherwise we get redefinitions on some systems if <limits.h> is
+ included after this file. Likewise for <sys/param.h>.
+ If more than one of these system headers define MIN and MAX, pick just
+ one of the headers (because the definitions most likely are the same). */
+#if HAVE_MINMAX_IN_LIMITS_H
+# include <limits.h>
+#elif HAVE_MINMAX_IN_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+
+/* Note: MIN and MAX should be used with two arguments of the
+ same type. They might not return the minimum and maximum of their two
+ arguments, if the arguments have different types or have unusual
+ floating-point values. For example, on a typical host with 32-bit 'int',
+ 64-bit 'long long', and 64-bit IEEE 754 'double' types:
+
+ MAX (-1, 2147483648) returns 4294967295.
+ MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0.
+ MAX (NaN, 0.0) returns 0.0.
+ MAX (+0.0, -0.0) returns -0.0.
+
+ and in each case the answer is in some sense bogus. */
+
+/* MAX(a,b) returns the maximum of A and B. */
+#ifndef MAX
+# define MAX(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+/* MIN(a,b) returns the minimum of A and B. */
+#ifndef MIN
+# define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#endif /* _MINMAX_H */
diff --git a/lib/mkdir.c b/lib/mkdir.c
new file mode 100644
index 0000000..f94aba1
--- /dev/null
+++ b/lib/mkdir.c
@@ -0,0 +1,93 @@
+/* On some systems, mkdir ("foo/", 0700) fails because of the trailing
+ slash. On those systems, this wrapper removes the trailing slash.
+
+ Copyright (C) 2001, 2003, 2006, 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering */
+
+#include <config.h>
+
+/* Specification. */
+#include <sys/stat.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "dirname.h"
+
+/* Disable the definition of mkdir to rpl_mkdir (from the <sys/stat.h>
+ substitute) in this file. Otherwise, we'd get an endless recursion. */
+#undef mkdir
+
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+ Additionally, it declares _mkdir (and depending on compile flags, an
+ alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
+ which are included in the <sys/stat.h> override. */
+#if defined _WIN32 && ! defined __CYGWIN__
+# define mkdir(name,mode) _mkdir (name)
+# define maybe_unused _GL_UNUSED
+#else
+# define maybe_unused /* empty */
+#endif
+
+/* This function is required at least for NetBSD 1.5.2. */
+
+int
+rpl_mkdir (char const *dir, maybe_unused mode_t mode)
+{
+ int ret_val;
+ char *tmp_dir;
+ size_t len = strlen (dir);
+
+ if (len && dir[len - 1] == '/')
+ {
+ tmp_dir = strdup (dir);
+ if (!tmp_dir)
+ {
+ /* Rather than rely on strdup-posix, we set errno ourselves. */
+ errno = ENOMEM;
+ return -1;
+ }
+ strip_trailing_slashes (tmp_dir);
+ }
+ else
+ {
+ tmp_dir = (char *) dir;
+ }
+#if FUNC_MKDIR_DOT_BUG
+ /* Additionally, cygwin 1.5 mistakenly creates a directory "d/./". */
+ {
+ char *last = last_component (tmp_dir);
+ if (*last == '.' && (last[1] == '\0'
+ || (last[1] == '.' && last[2] == '\0')))
+ {
+ struct stat st;
+ if (stat (tmp_dir, &st) == 0 || errno == EOVERFLOW)
+ errno = EEXIST;
+ return -1;
+ }
+ }
+#endif /* FUNC_MKDIR_DOT_BUG */
+
+ ret_val = mkdir (tmp_dir, mode);
+
+ if (tmp_dir != dir)
+ free (tmp_dir);
+
+ return ret_val;
+}
diff --git a/lib/mkstemp.c b/lib/mkstemp.c
new file mode 100644
index 0000000..77aadbb
--- /dev/null
+++ b/lib/mkstemp.c
@@ -0,0 +1,50 @@
+/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2023 Free Software
+ Foundation, Inc.
+ This file is derived from the one in the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if !_LIBC
+# include "tempname.h"
+# define __gen_tempname gen_tempname
+# ifndef __GT_FILE
+# define __GT_FILE GT_FILE
+# endif
+#endif
+
+#include <stdio.h>
+
+#ifndef __GT_FILE
+# define __GT_FILE 0
+#endif
+
+/* Generate a unique temporary file name from XTEMPLATE.
+ The last six characters of XTEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ Then open the file and return a fd.
+
+ If you are creating temporary files which will later be removed,
+ consider using the clean-temp module, which avoids several pitfalls
+ of using mkstemp directly. */
+int
+mkstemp (char *xtemplate)
+{
+ return __gen_tempname (xtemplate, 0, 0, __GT_FILE);
+}
diff --git a/lib/msvc-inval.c b/lib/msvc-inval.c
new file mode 100644
index 0000000..c5149a8
--- /dev/null
+++ b/lib/msvc-inval.c
@@ -0,0 +1,129 @@
+/* Invalid parameter handler for MSVC runtime libraries.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "msvc-inval.h"
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
+ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING)
+
+/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler
+ declaration. */
+# include <stdlib.h>
+
+# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+
+static void __cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+ const wchar_t *function,
+ const wchar_t *file,
+ unsigned int line,
+ uintptr_t dummy)
+{
+}
+
+# else
+
+/* Get declarations of the native Windows API functions. */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+
+# if defined _MSC_VER
+
+static void __cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+ const wchar_t *function,
+ const wchar_t *file,
+ unsigned int line,
+ uintptr_t dummy)
+{
+ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
+}
+
+# else
+
+/* An index to thread-local storage. */
+static DWORD tls_index;
+static int tls_initialized /* = 0 */;
+
+/* Used as a fallback only. */
+static struct gl_msvc_inval_per_thread not_per_thread;
+
+struct gl_msvc_inval_per_thread *
+gl_msvc_inval_current (void)
+{
+ if (!tls_initialized)
+ {
+ tls_index = TlsAlloc ();
+ tls_initialized = 1;
+ }
+ if (tls_index == TLS_OUT_OF_INDEXES)
+ /* TlsAlloc had failed. */
+ return &not_per_thread;
+ else
+ {
+ struct gl_msvc_inval_per_thread *pointer =
+ (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index);
+ if (pointer == NULL)
+ {
+ /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */
+ pointer =
+ (struct gl_msvc_inval_per_thread *)
+ malloc (sizeof (struct gl_msvc_inval_per_thread));
+ if (pointer == NULL)
+ /* Could not allocate memory. Use the global storage. */
+ pointer = &not_per_thread;
+ TlsSetValue (tls_index, pointer);
+ }
+ return pointer;
+ }
+}
+
+static void __cdecl
+gl_msvc_invalid_parameter_handler (const wchar_t *expression,
+ const wchar_t *function,
+ const wchar_t *file,
+ unsigned int line,
+ uintptr_t dummy)
+{
+ struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current ();
+ if (current->restart_valid)
+ longjmp (current->restart, 1);
+ else
+ /* An invalid parameter notification from outside the gnulib code.
+ Give the caller a chance to intervene. */
+ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL);
+}
+
+# endif
+
+# endif
+
+static int gl_msvc_inval_initialized /* = 0 */;
+
+void
+gl_msvc_inval_ensure_handler (void)
+{
+ if (gl_msvc_inval_initialized == 0)
+ {
+ _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler);
+ gl_msvc_inval_initialized = 1;
+ }
+}
+
+#endif
diff --git a/lib/msvc-inval.h b/lib/msvc-inval.h
new file mode 100644
index 0000000..ed00461
--- /dev/null
+++ b/lib/msvc-inval.h
@@ -0,0 +1,222 @@
+/* Invalid parameter handler for MSVC runtime libraries.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _MSVC_INVAL_H
+#define _MSVC_INVAL_H
+
+/* With MSVC runtime libraries with the "invalid parameter handler" concept,
+ functions like fprintf(), dup2(), or close() crash when the caller passes
+ an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF)
+ instead.
+ This file defines macros that turn such an invalid parameter notification
+ into a non-local exit. An error code can then be produced at the target
+ of this exit. You can thus write code like
+
+ TRY_MSVC_INVAL
+ {
+ <Code that can trigger an invalid parameter notification
+ but does not do 'return', 'break', 'continue', nor 'goto'.>
+ }
+ CATCH_MSVC_INVAL
+ {
+ <Code that handles an invalid parameter notification
+ but does not do 'return', 'break', 'continue', nor 'goto'.>
+ }
+ DONE_MSVC_INVAL;
+
+ This entire block expands to a single statement.
+
+ The handling of invalid parameters can be done in three ways:
+
+ * The default way, which is reasonable for programs (not libraries):
+ AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING])
+
+ * The way for libraries that make "hairy" calls (like close(-1), or
+ fclose(fp) where fileno(fp) is closed, or simply getdtablesize()):
+ AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING])
+
+ * The way for libraries that make no "hairy" calls:
+ AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING])
+ */
+
+#define DEFAULT_HANDLING 0
+#define HAIRY_LIBRARY_HANDLING 1
+#define SANE_LIBRARY_HANDLING 2
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \
+ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING)
+/* A native Windows platform with the "invalid parameter handler" concept,
+ and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */
+
+# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING
+/* Default handling. */
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* Ensure that the invalid parameter handler in installed that just returns.
+ Because we assume no other part of the program installs a different
+ invalid parameter handler, this solution is multithread-safe. */
+extern void gl_msvc_inval_ensure_handler (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+# define TRY_MSVC_INVAL \
+ do \
+ { \
+ gl_msvc_inval_ensure_handler (); \
+ if (1)
+# define CATCH_MSVC_INVAL \
+ else
+# define DONE_MSVC_INVAL \
+ } \
+ while (0)
+
+# else
+/* Handling for hairy libraries. */
+
+# include <excpt.h>
+
+/* Gnulib can define its own status codes, as described in the page
+ "Raising Software Exceptions" on microsoft.com
+ <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>.
+ Our status codes are composed of
+ - 0xE0000000, mandatory for all user-defined status codes,
+ - 0x474E550, a API identifier ("GNU"),
+ - 0, 1, 2, ..., used to distinguish different status codes from the
+ same API. */
+# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0)
+
+# if defined _MSC_VER
+/* A compiler that supports __try/__except, as described in the page
+ "try-except statement" on microsoft.com
+ <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>.
+ With __try/__except, we can use the multithread-safe exception handling. */
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* Ensure that the invalid parameter handler in installed that raises a
+ software exception with code STATUS_GNULIB_INVALID_PARAMETER.
+ Because we assume no other part of the program installs a different
+ invalid parameter handler, this solution is multithread-safe. */
+extern void gl_msvc_inval_ensure_handler (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+# define TRY_MSVC_INVAL \
+ do \
+ { \
+ gl_msvc_inval_ensure_handler (); \
+ __try
+# define CATCH_MSVC_INVAL \
+ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \
+ ? EXCEPTION_EXECUTE_HANDLER \
+ : EXCEPTION_CONTINUE_SEARCH)
+# define DONE_MSVC_INVAL \
+ } \
+ while (0)
+
+# else
+/* Any compiler.
+ We can only use setjmp/longjmp. */
+
+# include <setjmp.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+struct gl_msvc_inval_per_thread
+{
+ /* The restart that will resume execution at the code between
+ CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between
+ TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */
+ jmp_buf restart;
+
+ /* Tells whether the contents of restart is valid. */
+ int restart_valid;
+};
+
+/* Ensure that the invalid parameter handler in installed that passes
+ control to the gl_msvc_inval_restart if it is valid, or raises a
+ software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise.
+ Because we assume no other part of the program installs a different
+ invalid parameter handler, this solution is multithread-safe. */
+extern void gl_msvc_inval_ensure_handler (void);
+
+/* Return a pointer to the per-thread data for the current thread. */
+extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+# define TRY_MSVC_INVAL \
+ do \
+ { \
+ struct gl_msvc_inval_per_thread *msvc_inval_current; \
+ gl_msvc_inval_ensure_handler (); \
+ msvc_inval_current = gl_msvc_inval_current (); \
+ /* First, initialize gl_msvc_inval_restart. */ \
+ if (setjmp (msvc_inval_current->restart) == 0) \
+ { \
+ /* Then, mark it as valid. */ \
+ msvc_inval_current->restart_valid = 1;
+# define CATCH_MSVC_INVAL \
+ /* Execution completed. \
+ Mark gl_msvc_inval_restart as invalid. */ \
+ msvc_inval_current->restart_valid = 0; \
+ } \
+ else \
+ { \
+ /* Execution triggered an invalid parameter notification. \
+ Mark gl_msvc_inval_restart as invalid. */ \
+ msvc_inval_current->restart_valid = 0;
+# define DONE_MSVC_INVAL \
+ } \
+ } \
+ while (0)
+
+# endif
+
+# endif
+
+#else
+/* A platform that does not need to the invalid parameter handler,
+ or when SANE_LIBRARY_HANDLING is desired. */
+
+/* The braces here avoid GCC warnings like
+ "warning: suggest explicit braces to avoid ambiguous 'else'". */
+# define TRY_MSVC_INVAL \
+ do \
+ { \
+ if (1)
+# define CATCH_MSVC_INVAL \
+ else
+# define DONE_MSVC_INVAL \
+ } \
+ while (0)
+
+#endif
+
+#endif /* _MSVC_INVAL_H */
diff --git a/lib/msvc-nothrow.c b/lib/msvc-nothrow.c
new file mode 100644
index 0000000..f729fe6
--- /dev/null
+++ b/lib/msvc-nothrow.c
@@ -0,0 +1,51 @@
+/* Wrappers that don't throw invalid parameter notifications
+ with MSVC runtime libraries.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include "msvc-nothrow.h"
+
+/* Get declarations of the native Windows API functions. */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+#endif
+
+#undef _get_osfhandle
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+intptr_t
+_gl_nothrow_get_osfhandle (int fd)
+{
+ intptr_t result;
+
+ TRY_MSVC_INVAL
+ {
+ result = _get_osfhandle (fd);
+ }
+ CATCH_MSVC_INVAL
+ {
+ result = (intptr_t) INVALID_HANDLE_VALUE;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+#endif
diff --git a/lib/msvc-nothrow.h b/lib/msvc-nothrow.h
new file mode 100644
index 0000000..82d3f6a
--- /dev/null
+++ b/lib/msvc-nothrow.h
@@ -0,0 +1,43 @@
+/* Wrappers that don't throw invalid parameter notifications
+ with MSVC runtime libraries.
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _MSVC_NOTHROW_H
+#define _MSVC_NOTHROW_H
+
+/* With MSVC runtime libraries with the "invalid parameter handler" concept,
+ functions like fprintf(), dup2(), or close() crash when the caller passes
+ an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF)
+ instead.
+ This file defines wrappers that turn such an invalid parameter notification
+ into an error code. */
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* Get original declaration of _get_osfhandle. */
+# include <io.h>
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+
+/* Override _get_osfhandle. */
+extern intptr_t _gl_nothrow_get_osfhandle (int fd);
+# define _get_osfhandle _gl_nothrow_get_osfhandle
+
+# endif
+
+#endif
+
+#endif /* _MSVC_NOTHROW_H */
diff --git a/lib/nl_langinfo-lock.c b/lib/nl_langinfo-lock.c
new file mode 100644
index 0000000..e5cdcd3
--- /dev/null
+++ b/lib/nl_langinfo-lock.c
@@ -0,0 +1,150 @@
+/* Return the internal lock used by nl_langinfo.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */
+
+#include <config.h>
+
+/* When it is known that the gl_get_nl_langinfo_lock function is defined
+ by a dependency library, it should not be defined here. */
+#if OMIT_NL_LANGINFO_LOCK
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
+
+#else
+
+/* This file defines the internal lock used by nl_langinfo.
+ It is a separate compilation unit, so that only one copy of it is
+ present when linking statically. */
+
+/* Prohibit renaming this symbol. */
+# undef gl_get_nl_langinfo_lock
+
+/* Macro for exporting a symbol (function, not variable) defined in this file,
+ when compiled into a shared library. */
+# ifndef DLL_EXPORTED
+# if HAVE_VISIBILITY
+ /* Override the effect of the compiler option '-fvisibility=hidden'. */
+# define DLL_EXPORTED __attribute__((__visibility__("default")))
+# elif defined _WIN32 || defined __CYGWIN__
+# define DLL_EXPORTED __declspec(dllexport)
+# else
+# define DLL_EXPORTED
+# endif
+# endif
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# include "windows-initguard.h"
+
+/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *',
+ because the latter is not guaranteed to be a stable ABI in the future. */
+
+/* Make sure the function gets exported from DLLs. */
+DLL_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void);
+
+static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
+static CRITICAL_SECTION lock;
+
+/* Returns the internal lock used by nl_langinfo. */
+CRITICAL_SECTION *
+gl_get_nl_langinfo_lock (void)
+{
+ if (!guard.done)
+ {
+ if (InterlockedIncrement (&guard.started) == 0)
+ {
+ /* This thread is the first one to need the lock. Initialize it. */
+ InitializeCriticalSection (&lock);
+ guard.done = 1;
+ }
+ else
+ {
+ /* Don't let guard.started grow and wrap around. */
+ InterlockedDecrement (&guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this mutex. */
+ while (!guard.done)
+ Sleep (0);
+ }
+ }
+ return &lock;
+}
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void);
+
+/* Returns the internal lock used by nl_langinfo. */
+pthread_mutex_t *
+gl_get_nl_langinfo_lock (void)
+{
+ return &mutex;
+}
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+# include <stdlib.h>
+
+static int volatile init_needed = 1;
+static once_flag init_once = ONCE_FLAG_INIT;
+static mtx_t mutex;
+
+static void
+atomic_init (void)
+{
+ if (mtx_init (&mutex, mtx_plain) != thrd_success)
+ abort ();
+ init_needed = 0;
+}
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void);
+
+/* Returns the internal lock used by nl_langinfo. */
+mtx_t *
+gl_get_nl_langinfo_lock (void)
+{
+ if (init_needed)
+ call_once (&init_once, atomic_init);
+ return &mutex;
+}
+
+# endif
+
+# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER
+/* Make sure the '__declspec(dllimport)' in nl_langinfo.c does not cause
+ a link failure when no DLLs are involved. */
+# if defined _WIN64 || defined _LP64
+# define IMP(x) __imp_##x
+# else
+# define IMP(x) _imp__##x
+# endif
+void * IMP(gl_get_nl_langinfo_lock) = &gl_get_nl_langinfo_lock;
+# endif
+
+#endif
diff --git a/lib/nl_langinfo.c b/lib/nl_langinfo.c
new file mode 100644
index 0000000..f872c6d
--- /dev/null
+++ b/lib/nl_langinfo.c
@@ -0,0 +1,574 @@
+/* nl_langinfo() replacement: query locale dependent information.
+
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <langinfo.h>
+
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+# include <stdio.h>
+#endif
+
+#if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS
+# include <threads.h>
+# pragma weak thrd_exit
+# define c11_threads_in_use() (thrd_exit != NULL)
+# else
+# define c11_threads_in_use() 0
+# endif
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+
+# endif
+#endif
+
+/* nl_langinfo() must be multithread-safe. To achieve this without using
+ thread-local storage:
+ 1. We use a specific static buffer for each possible argument.
+ So that different threads can call nl_langinfo with different arguments,
+ without interfering.
+ 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it
+ through, for example, strcpy + strcat would not be guaranteed to leave
+ the buffer's contents intact if another thread is currently accessing
+ it. If necessary, the contents is first assembled in a stack-allocated
+ buffer. */
+
+#if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET
+/* Return the codeset of the current locale, if this is easily deducible.
+ Otherwise, return "". */
+static char *
+ctype_codeset (void)
+{
+ /* This function is only used on platforms which don't have uselocale().
+ Therefore we don't need to look at the per-thread locale first, here. */
+ static char result[2 + 10 + 1];
+ char buf[2 + 10 + 1];
+ char locale[SETLOCALE_NULL_MAX];
+ char *codeset;
+ size_t codesetlen;
+
+ if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale)))
+ locale[0] = '\0';
+
+ codeset = buf;
+ codeset[0] = '\0';
+
+ if (locale[0])
+ {
+ /* If the locale name contains an encoding after the dot, return it. */
+ char *dot = strchr (locale, '.');
+
+ if (dot)
+ {
+ /* Look for the possible @... trailer and remove it, if any. */
+ char *codeset_start = dot + 1;
+ char const *modifier = strchr (codeset_start, '@');
+
+ if (! modifier)
+ codeset = codeset_start;
+ else
+ {
+ codesetlen = modifier - codeset_start;
+ if (codesetlen < sizeof buf)
+ {
+ codeset = memcpy (buf, codeset_start, codesetlen);
+ codeset[codesetlen] = '\0';
+ }
+ }
+ }
+ }
+
+# if defined _WIN32 && ! defined __CYGWIN__
+ /* If setlocale is successful, it returns the number of the
+ codepage, as a string. Otherwise, fall back on Windows API
+ GetACP, which returns the locale's codepage as a number (although
+ this doesn't change according to what the 'setlocale' call specified).
+ Either way, prepend "CP" to make it a valid codeset name. */
+ codesetlen = strlen (codeset);
+ if (0 < codesetlen && codesetlen < sizeof buf - 2)
+ memmove (buf + 2, codeset, codesetlen + 1);
+ else
+ sprintf (buf + 2, "%u", GetACP ());
+ /* For a locale name such as "French_France.65001", in Windows 10,
+ setlocale now returns "French_France.utf8" instead. */
+ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0)
+ return (char *) "UTF-8";
+ else
+ {
+ memcpy (buf, "CP", 2);
+ strcpy (result, buf);
+ return result;
+ }
+# else
+ strcpy (result, codeset);
+ return result;
+#endif
+}
+#endif
+
+
+#if REPLACE_NL_LANGINFO
+
+/* Override nl_langinfo with support for added nl_item values. */
+
+# undef nl_langinfo
+
+/* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message
+ "thread5 disturbed by threadN!", even when threadN invokes only
+ nl_langinfo (CODESET);
+ nl_langinfo (CRNCYSTR);
+ Similarly on Solaris 10. */
+
+# if !NL_LANGINFO_MTSAFE /* Solaris */
+
+# define ITEMS (MAXSTRMSG + 1)
+# define MAX_RESULT_LEN 80
+
+static char *
+nl_langinfo_unlocked (nl_item item)
+{
+ static char result[ITEMS][MAX_RESULT_LEN];
+
+ /* The result of nl_langinfo is in storage that can be overwritten by
+ other calls to nl_langinfo. */
+ char *tmp = nl_langinfo (item);
+ if (item >= 0 && item < ITEMS && tmp != NULL)
+ {
+ size_t tmp_len = strlen (tmp);
+ if (tmp_len < MAX_RESULT_LEN)
+ strcpy (result[item], tmp);
+ else
+ {
+ /* Produce a truncated result. Oh well... */
+ result[item][MAX_RESULT_LEN - 1] = '\0';
+ memcpy (result[item], tmp, MAX_RESULT_LEN - 1);
+ }
+ return result[item];
+ }
+ else
+ return tmp;
+}
+
+/* Use a lock, so that no two threads can invoke nl_langinfo_unlocked
+ at the same time. */
+
+/* Prohibit renaming this symbol. */
+# undef gl_get_nl_langinfo_lock
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void);
+
+static char *
+nl_langinfo_with_lock (nl_item item)
+{
+ CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock ();
+ char *ret;
+
+ EnterCriticalSection (lock);
+ ret = nl_langinfo_unlocked (item);
+ LeaveCriticalSection (lock);
+
+ return ret;
+}
+
+# elif HAVE_PTHREAD_API
+
+extern
+# if defined _WIN32 || defined __CYGWIN__
+ __declspec(dllimport)
+# endif
+ pthread_mutex_t *gl_get_nl_langinfo_lock (void);
+
+# if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */
+
+ /* Avoid the need to link with '-lpthread'. */
+# pragma weak pthread_mutex_lock
+# pragma weak pthread_mutex_unlock
+
+ /* Determine whether libpthread is in use. */
+# pragma weak pthread_mutexattr_gettype
+ /* See the comments in lock.h. */
+# define pthread_in_use() \
+ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
+
+# else
+# define pthread_in_use() 1
+# endif
+
+static char *
+nl_langinfo_with_lock (nl_item item)
+{
+ if (pthread_in_use())
+ {
+ pthread_mutex_t *lock = gl_get_nl_langinfo_lock ();
+ char *ret;
+
+ if (pthread_mutex_lock (lock))
+ abort ();
+ ret = nl_langinfo_unlocked (item);
+ if (pthread_mutex_unlock (lock))
+ abort ();
+
+ return ret;
+ }
+ else
+ return nl_langinfo_unlocked (item);
+}
+
+# elif HAVE_THREADS_H
+
+extern mtx_t *gl_get_nl_langinfo_lock (void);
+
+static char *
+nl_langinfo_with_lock (nl_item item)
+{
+ mtx_t *lock = gl_get_nl_langinfo_lock ();
+ char *ret;
+
+ if (mtx_lock (lock) != thrd_success)
+ abort ();
+ ret = nl_langinfo_unlocked (item);
+ if (mtx_unlock (lock) != thrd_success)
+ abort ();
+
+ return ret;
+}
+
+# endif
+
+# else
+
+/* On other platforms, no lock is needed. */
+# define nl_langinfo_with_lock nl_langinfo
+
+# endif
+
+char *
+rpl_nl_langinfo (nl_item item)
+{
+ switch (item)
+ {
+# if GNULIB_defined_CODESET
+ case CODESET:
+ return ctype_codeset ();
+# endif
+# if GNULIB_defined_T_FMT_AMPM
+ case T_FMT_AMPM:
+ return (char *) "%I:%M:%S %p";
+# endif
+# if GNULIB_defined_ALTMON
+ case ALTMON_1:
+ case ALTMON_2:
+ case ALTMON_3:
+ case ALTMON_4:
+ case ALTMON_5:
+ case ALTMON_6:
+ case ALTMON_7:
+ case ALTMON_8:
+ case ALTMON_9:
+ case ALTMON_10:
+ case ALTMON_11:
+ case ALTMON_12:
+ /* We don't ship the appropriate localizations with gnulib. Therefore,
+ treat ALTMON_i like MON_i. */
+ item = item - ALTMON_1 + MON_1;
+ break;
+# endif
+# if GNULIB_defined_ERA
+ case ERA:
+ /* The format is not standardized. In glibc it is a sequence of strings
+ of the form "direction:offset:start_date:end_date:era_name:era_format"
+ with an empty string at the end. */
+ return (char *) "";
+ case ERA_D_FMT:
+ /* The %Ex conversion in strftime behaves like %x if the locale does not
+ have an alternative time format. */
+ item = D_FMT;
+ break;
+ case ERA_D_T_FMT:
+ /* The %Ec conversion in strftime behaves like %c if the locale does not
+ have an alternative time format. */
+ item = D_T_FMT;
+ break;
+ case ERA_T_FMT:
+ /* The %EX conversion in strftime behaves like %X if the locale does not
+ have an alternative time format. */
+ item = T_FMT;
+ break;
+ case ALT_DIGITS:
+ /* The format is not standardized. In glibc it is a sequence of 10
+ strings, appended in memory. */
+ return (char *) "\0\0\0\0\0\0\0\0\0\0";
+# endif
+# if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS
+ case YESEXPR:
+ return (char *) "^[yY]";
+ case NOEXPR:
+ return (char *) "^[nN]";
+# endif
+ default:
+ break;
+ }
+ return nl_langinfo_with_lock (item);
+}
+
+#else
+
+/* Provide nl_langinfo from scratch, either for native MS-Windows, or
+ for old Unix platforms without locales, such as Linux libc5 or
+ BeOS. */
+
+# include <time.h>
+
+char *
+nl_langinfo (nl_item item)
+{
+ char buf[100];
+ struct tm tmm = { 0 };
+
+ switch (item)
+ {
+ /* nl_langinfo items of the LC_CTYPE category */
+ case CODESET:
+ {
+ char *codeset = ctype_codeset ();
+ if (*codeset)
+ return codeset;
+ }
+# ifdef __BEOS__
+ return (char *) "UTF-8";
+# else
+ return (char *) "ISO-8859-1";
+# endif
+ /* nl_langinfo items of the LC_NUMERIC category */
+ case RADIXCHAR:
+ return localeconv () ->decimal_point;
+ case THOUSEP:
+ return localeconv () ->thousands_sep;
+# ifdef GROUPING
+ case GROUPING:
+ return localeconv () ->grouping;
+# endif
+ /* nl_langinfo items of the LC_TIME category.
+ TODO: Really use the locale. */
+ case D_T_FMT:
+ case ERA_D_T_FMT:
+ return (char *) "%a %b %e %H:%M:%S %Y";
+ case D_FMT:
+ case ERA_D_FMT:
+ return (char *) "%m/%d/%y";
+ case T_FMT:
+ case ERA_T_FMT:
+ return (char *) "%H:%M:%S";
+ case T_FMT_AMPM:
+ return (char *) "%I:%M:%S %p";
+ case AM_STR:
+ {
+ static char result[80];
+ if (!strftime (buf, sizeof result, "%p", &tmm))
+ return (char *) "AM";
+ strcpy (result, buf);
+ return result;
+ }
+ case PM_STR:
+ {
+ static char result[80];
+ tmm.tm_hour = 12;
+ if (!strftime (buf, sizeof result, "%p", &tmm))
+ return (char *) "PM";
+ strcpy (result, buf);
+ return result;
+ }
+ case DAY_1:
+ case DAY_2:
+ case DAY_3:
+ case DAY_4:
+ case DAY_5:
+ case DAY_6:
+ case DAY_7:
+ {
+ static char result[7][50];
+ static char const days[][sizeof "Wednesday"] = {
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
+ "Friday", "Saturday"
+ };
+ tmm.tm_wday = item - DAY_1;
+ if (!strftime (buf, sizeof result[0], "%A", &tmm))
+ return (char *) days[item - DAY_1];
+ strcpy (result[item - DAY_1], buf);
+ return result[item - DAY_1];
+ }
+ case ABDAY_1:
+ case ABDAY_2:
+ case ABDAY_3:
+ case ABDAY_4:
+ case ABDAY_5:
+ case ABDAY_6:
+ case ABDAY_7:
+ {
+ static char result[7][30];
+ static char const abdays[][sizeof "Sun"] = {
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ };
+ tmm.tm_wday = item - ABDAY_1;
+ if (!strftime (buf, sizeof result[0], "%a", &tmm))
+ return (char *) abdays[item - ABDAY_1];
+ strcpy (result[item - ABDAY_1], buf);
+ return result[item - ABDAY_1];
+ }
+ {
+ static char const months[][sizeof "September"] = {
+ "January", "February", "March", "April", "May", "June", "July",
+ "September", "October", "November", "December"
+ };
+ case MON_1:
+ case MON_2:
+ case MON_3:
+ case MON_4:
+ case MON_5:
+ case MON_6:
+ case MON_7:
+ case MON_8:
+ case MON_9:
+ case MON_10:
+ case MON_11:
+ case MON_12:
+ {
+ static char result[12][50];
+ tmm.tm_mon = item - MON_1;
+ if (!strftime (buf, sizeof result[0], "%B", &tmm))
+ return (char *) months[item - MON_1];
+ strcpy (result[item - MON_1], buf);
+ return result[item - MON_1];
+ }
+ case ALTMON_1:
+ case ALTMON_2:
+ case ALTMON_3:
+ case ALTMON_4:
+ case ALTMON_5:
+ case ALTMON_6:
+ case ALTMON_7:
+ case ALTMON_8:
+ case ALTMON_9:
+ case ALTMON_10:
+ case ALTMON_11:
+ case ALTMON_12:
+ {
+ static char result[12][50];
+ tmm.tm_mon = item - ALTMON_1;
+ /* The platforms without nl_langinfo() don't support strftime with
+ %OB. We don't even need to try. */
+ #if 0
+ if (!strftime (buf, sizeof result[0], "%OB", &tmm))
+ #endif
+ if (!strftime (buf, sizeof result[0], "%B", &tmm))
+ return (char *) months[item - ALTMON_1];
+ strcpy (result[item - ALTMON_1], buf);
+ return result[item - ALTMON_1];
+ }
+ }
+ case ABMON_1:
+ case ABMON_2:
+ case ABMON_3:
+ case ABMON_4:
+ case ABMON_5:
+ case ABMON_6:
+ case ABMON_7:
+ case ABMON_8:
+ case ABMON_9:
+ case ABMON_10:
+ case ABMON_11:
+ case ABMON_12:
+ {
+ static char result[12][30];
+ static char const abmonths[][sizeof "Jan"] = {
+ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+ "Sep", "Oct", "Nov", "Dec"
+ };
+ tmm.tm_mon = item - ABMON_1;
+ if (!strftime (buf, sizeof result[0], "%b", &tmm))
+ return (char *) abmonths[item - ABMON_1];
+ strcpy (result[item - ABMON_1], buf);
+ return result[item - ABMON_1];
+ }
+ case ERA:
+ return (char *) "";
+ case ALT_DIGITS:
+ return (char *) "\0\0\0\0\0\0\0\0\0\0";
+ /* nl_langinfo items of the LC_MONETARY category. */
+ case CRNCYSTR:
+ return localeconv () ->currency_symbol;
+# ifdef INT_CURR_SYMBOL
+ case INT_CURR_SYMBOL:
+ return localeconv () ->int_curr_symbol;
+ case MON_DECIMAL_POINT:
+ return localeconv () ->mon_decimal_point;
+ case MON_THOUSANDS_SEP:
+ return localeconv () ->mon_thousands_sep;
+ case MON_GROUPING:
+ return localeconv () ->mon_grouping;
+ case POSITIVE_SIGN:
+ return localeconv () ->positive_sign;
+ case NEGATIVE_SIGN:
+ return localeconv () ->negative_sign;
+ case FRAC_DIGITS:
+ return & localeconv () ->frac_digits;
+ case INT_FRAC_DIGITS:
+ return & localeconv () ->int_frac_digits;
+ case P_CS_PRECEDES:
+ return & localeconv () ->p_cs_precedes;
+ case N_CS_PRECEDES:
+ return & localeconv () ->n_cs_precedes;
+ case P_SEP_BY_SPACE:
+ return & localeconv () ->p_sep_by_space;
+ case N_SEP_BY_SPACE:
+ return & localeconv () ->n_sep_by_space;
+ case P_SIGN_POSN:
+ return & localeconv () ->p_sign_posn;
+ case N_SIGN_POSN:
+ return & localeconv () ->n_sign_posn;
+# endif
+ /* nl_langinfo items of the LC_MESSAGES category
+ TODO: Really use the locale. */
+ case YESEXPR:
+ return (char *) "^[yY]";
+ case NOEXPR:
+ return (char *) "^[nN]";
+ default:
+ return (char *) "";
+ }
+}
+
+#endif
diff --git a/lib/open.c b/lib/open.c
new file mode 100644
index 0000000..7ec8fdc
--- /dev/null
+++ b/lib/open.c
@@ -0,0 +1,209 @@
+/* Open a descriptor to a file.
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
+
+/* If the user's config.h happens to include <fcntl.h>, let it include only
+ the system's <fcntl.h> here, so that orig_open doesn't recurse to
+ rpl_open. */
+#define __need_system_fcntl_h
+#include <config.h>
+
+/* Get the original definition of open. It might be defined as a macro. */
+#include <fcntl.h>
+#include <sys/types.h>
+#undef __need_system_fcntl_h
+
+static int
+orig_open (const char *filename, int flags, mode_t mode)
+{
+#if defined _WIN32 && !defined __CYGWIN__
+ return _open (filename, flags, mode);
+#else
+ return open (filename, flags, mode);
+#endif
+}
+
+/* Specification. */
+/* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates
+ this include because of the preliminary #include <fcntl.h> above. */
+#include "fcntl.h"
+
+#include "cloexec.h"
+
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#ifndef REPLACE_OPEN_DIRECTORY
+# define REPLACE_OPEN_DIRECTORY 0
+#endif
+
+int
+open (const char *filename, int flags, ...)
+{
+ /* 0 = unknown, 1 = yes, -1 = no. */
+#if GNULIB_defined_O_CLOEXEC
+ int have_cloexec = -1;
+#else
+ static int have_cloexec;
+#endif
+
+ mode_t mode;
+ int fd;
+
+ mode = 0;
+ if (flags & O_CREAT)
+ {
+ va_list arg;
+ va_start (arg, flags);
+
+ /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4
+ creates crashing code when 'mode_t' is smaller than 'int'. */
+ mode = va_arg (arg, PROMOTED_MODE_T);
+
+ va_end (arg);
+ }
+
+#if GNULIB_defined_O_NONBLOCK
+ /* The only known platform that lacks O_NONBLOCK is mingw, but it
+ also lacks named pipes and Unix sockets, which are the only two
+ file types that require non-blocking handling in open().
+ Therefore, it is safe to ignore O_NONBLOCK here. It is handy
+ that mingw also lacks openat(), so that is also covered here. */
+ flags &= ~O_NONBLOCK;
+#endif
+
+#if defined _WIN32 && ! defined __CYGWIN__
+ if (strcmp (filename, "/dev/null") == 0)
+ filename = "NUL";
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+ /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename
+ ends in a slash, as POSIX says such a filename must name a directory
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
+ "A pathname that contains at least one non-<slash> character and that
+ ends with one or more trailing <slash> characters shall not be resolved
+ successfully unless the last pathname component before the trailing
+ <slash> characters names an existing directory"
+ If the named file already exists as a directory, then
+ - if O_CREAT is specified, open() must fail because of the semantics
+ of O_CREAT,
+ - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html>
+ says that it fails with errno = EISDIR in this case.
+ If the named file does not exist or does not name a directory, then
+ - if O_CREAT is specified, open() must fail since open() cannot create
+ directories,
+ - if O_WRONLY or O_RDWR is specified, open() must fail because the
+ file does not contain a '.' directory. */
+ if ((flags & O_CREAT)
+ || (flags & O_ACCMODE) == O_RDWR
+ || (flags & O_ACCMODE) == O_WRONLY)
+ {
+ size_t len = strlen (filename);
+ if (len > 0 && filename[len - 1] == '/')
+ {
+ errno = EISDIR;
+ return -1;
+ }
+ }
+#endif
+
+ fd = orig_open (filename,
+ flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode);
+
+ if (flags & O_CLOEXEC)
+ {
+ if (! have_cloexec)
+ {
+ if (0 <= fd)
+ have_cloexec = 1;
+ else if (errno == EINVAL)
+ {
+ fd = orig_open (filename, flags & ~O_CLOEXEC, mode);
+ have_cloexec = -1;
+ }
+ }
+ if (have_cloexec < 0 && 0 <= fd)
+ set_cloexec_flag (fd, true);
+ }
+
+
+#if REPLACE_FCHDIR
+ /* Implementing fchdir and fdopendir requires the ability to open a
+ directory file descriptor. If open doesn't support that (as on
+ mingw), we use a dummy file that behaves the same as directories
+ on Linux (ie. always reports EOF on attempts to read()), and
+ override fstat() in fchdir.c to hide the fact that we have a
+ dummy. */
+ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES
+ && ((flags & O_ACCMODE) == O_RDONLY
+ || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH)))
+ {
+ struct stat statbuf;
+ if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))
+ {
+ /* Maximum recursion depth of 1. */
+ fd = open ("/dev/null", flags, mode);
+ if (0 <= fd)
+ fd = _gl_register_fd (fd, filename);
+ }
+ else
+ errno = EACCES;
+ }
+#endif
+
+#if OPEN_TRAILING_SLASH_BUG
+ /* If the filename ends in a slash and fd does not refer to a directory,
+ then fail.
+ Rationale: POSIX says such a filename must name a directory
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>:
+ "A pathname that contains at least one non-<slash> character and that
+ ends with one or more trailing <slash> characters shall not be resolved
+ successfully unless the last pathname component before the trailing
+ <slash> characters names an existing directory"
+ If the named file without the slash is not a directory, open() must fail
+ with ENOTDIR. */
+ if (fd >= 0)
+ {
+ /* We know len is positive, since open did not fail with ENOENT. */
+ size_t len = strlen (filename);
+ if (filename[len - 1] == '/')
+ {
+ struct stat statbuf;
+
+ if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode))
+ {
+ close (fd);
+ errno = ENOTDIR;
+ return -1;
+ }
+ }
+ }
+#endif
+
+#if REPLACE_FCHDIR
+ if (!REPLACE_OPEN_DIRECTORY && 0 <= fd)
+ fd = _gl_register_fd (fd, filename);
+#endif
+
+ return fd;
+}
diff --git a/lib/pathmax.h b/lib/pathmax.h
new file mode 100644
index 0000000..0dd8f3b
--- /dev/null
+++ b/lib/pathmax.h
@@ -0,0 +1,83 @@
+/* Define PATH_MAX somehow. Requires sys/types.h.
+ Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _PATHMAX_H
+# define _PATHMAX_H
+
+/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename,
+ including the terminating NUL byte.
+ <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html>
+ PATH_MAX is not defined on systems which have no limit on filename length,
+ such as GNU/Hurd.
+
+ This file does *not* define PATH_MAX always. Programs that use this file
+ can handle the GNU/Hurd case in several ways:
+ - Either with a package-wide handling, or with a per-file handling,
+ - Either through a
+ #ifdef PATH_MAX
+ or through a fallback like
+ #ifndef PATH_MAX
+ # define PATH_MAX 8192
+ #endif
+ or through a fallback like
+ #ifndef PATH_MAX
+ # define PATH_MAX pathconf ("/", _PC_PATH_MAX)
+ #endif
+ */
+
+# include <unistd.h>
+
+# include <limits.h>
+
+# ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 256
+# endif
+
+/* Don't include sys/param.h if it already has been. */
+# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+# endif
+
+# if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+# endif
+
+# ifdef __hpux
+/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename,
+ *not* including the terminating NUL byte, and is set to 1023.
+ Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is
+ not defined at all any more. */
+# undef PATH_MAX
+# define PATH_MAX 1024
+# endif
+
+# if defined _WIN32 && ! defined __CYGWIN__
+/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com,
+ section "Maximum Path Length Limitation",
+ <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation>
+ explains that the maximum size of a filename, including the terminating
+ NUL byte, is 260 = 3 + 256 + 1.
+ This is the same value as
+ - FILENAME_MAX in <stdio.h>,
+ - _MAX_PATH in <stdlib.h>,
+ - MAX_PATH in <windef.h>.
+ Undefine the original value, because mingw's <limits.h> gets it wrong. */
+# undef PATH_MAX
+# define PATH_MAX 260
+# endif
+
+#endif /* _PATHMAX_H */
diff --git a/lib/progname.c b/lib/progname.c
new file mode 100644
index 0000000..ed928e0
--- /dev/null
+++ b/lib/progname.c
@@ -0,0 +1,92 @@
+/* Program name management.
+ Copyright (C) 2001-2003, 2005-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+
+#include <config.h>
+
+/* Specification. */
+#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
+#include "progname.h"
+
+#include <errno.h> /* get program_invocation_name declaration */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* String containing name the program is called with.
+ To be initialized by main(). */
+const char *program_name = NULL;
+
+/* Set program_name, based on argv[0].
+ argv0 must be a string allocated with indefinite extent, and must not be
+ modified after this call. */
+void
+set_program_name (const char *argv0)
+{
+ /* libtool creates a temporary executable whose name is sometimes prefixed
+ with "lt-" (depends on the platform). It also makes argv[0] absolute.
+ But the name of the temporary executable is a detail that should not be
+ visible to the end user and to the test suite.
+ Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here. */
+ const char *slash;
+ const char *base;
+
+ /* Sanity check. POSIX requires the invoking process to pass a non-NULL
+ argv[0]. */
+ if (argv0 == NULL)
+ {
+ /* It's a bug in the invoking program. Help diagnosing it. */
+ fputs ("A NULL argv[0] was passed through an exec system call.\n",
+ stderr);
+ abort ();
+ }
+
+ slash = strrchr (argv0, '/');
+ base = (slash != NULL ? slash + 1 : argv0);
+ if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)
+ {
+ argv0 = base;
+ if (strncmp (base, "lt-", 3) == 0)
+ {
+ argv0 = base + 3;
+ /* On glibc systems, remove the "lt-" prefix from the variable
+ program_invocation_short_name. */
+#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+ program_invocation_short_name = (char *) argv0;
+#endif
+ }
+ }
+
+ /* But don't strip off a leading <dirname>/ in general, because when the user
+ runs
+ /some/hidden/place/bin/cp foo foo
+ he should get the error message
+ /some/hidden/place/bin/cp: `foo' and `foo' are the same file
+ not
+ cp: `foo' and `foo' are the same file
+ */
+
+ program_name = argv0;
+
+ /* On glibc systems, the error() function comes from libc and uses the
+ variable program_invocation_name, not program_name. So set this variable
+ as well. */
+#if HAVE_DECL_PROGRAM_INVOCATION_NAME
+ program_invocation_name = (char *) argv0;
+#endif
+}
diff --git a/lib/progname.h b/lib/progname.h
new file mode 100644
index 0000000..945d169
--- /dev/null
+++ b/lib/progname.h
@@ -0,0 +1,62 @@
+/* Program name management.
+ Copyright (C) 2001-2004, 2006, 2009-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _PROGNAME_H
+#define _PROGNAME_H
+
+/* Programs using this file should do the following in main():
+ set_program_name (argv[0]);
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* String containing name the program is called with. */
+extern const char *program_name;
+
+/* Set program_name, based on argv[0].
+ argv0 must be a string allocated with indefinite extent, and must not be
+ modified after this call. */
+extern void set_program_name (const char *argv0);
+
+#if ENABLE_RELOCATABLE
+
+/* Set program_name, based on argv[0], and original installation prefix and
+ directory, for relocatability. */
+extern void set_program_name_and_installdir (const char *argv0,
+ const char *orig_installprefix,
+ const char *orig_installdir);
+#undef set_program_name
+#define set_program_name(ARG0) \
+ set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR)
+
+/* Return the full pathname of the current executable, based on the earlier
+ call to set_program_name_and_installdir. Return NULL if unknown. */
+extern char *get_full_program_name (void);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _PROGNAME_H */
diff --git a/lib/quote.h b/lib/quote.h
new file mode 100644
index 0000000..9ec5747
--- /dev/null
+++ b/lib/quote.h
@@ -0,0 +1,46 @@
+/* quote.h - prototypes for quote.c
+
+ Copyright (C) 1998-2001, 2003, 2009-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef QUOTE_H_
+# define QUOTE_H_ 1
+
+# include <stddef.h>
+
+/* The quoting options used by quote_n and quote. Its type is incomplete,
+ so it's useful only in expressions like '&quote_quoting_options'. */
+extern struct quoting_options quote_quoting_options;
+
+/* Return an unambiguous printable representation of ARG (of size
+ ARGSIZE), allocated in slot N, suitable for diagnostics. If
+ ARGSIZE is SIZE_MAX, use the string length of the argument for
+ ARGSIZE. */
+char const *quote_n_mem (int n, char const *arg, size_t argsize);
+
+/* Return an unambiguous printable representation of ARG (of size
+ ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use
+ the string length of the argument for ARGSIZE. */
+char const *quote_mem (char const *arg, size_t argsize);
+
+/* Return an unambiguous printable representation of ARG, allocated in
+ slot N, suitable for diagnostics. */
+char const *quote_n (int n, char const *arg);
+
+/* Return an unambiguous printable representation of ARG, suitable for
+ diagnostics. */
+char const *quote (char const *arg);
+
+#endif /* !QUOTE_H_ */
diff --git a/lib/quotearg.c b/lib/quotearg.c
new file mode 100644
index 0000000..975bd61
--- /dev/null
+++ b/lib/quotearg.c
@@ -0,0 +1,1080 @@
+/* quotearg.c - quote arguments for output
+
+ Copyright (C) 1998-2002, 2004-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert <eggert@twinsun.com> */
+
+/* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that
+ the quoting_options_from_style function might be candidate for
+ attribute 'pure' */
+#if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__
+# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure"
+#endif
+
+#include <config.h>
+
+#include "quotearg.h"
+#include "quote.h"
+
+#include "attribute.h"
+#include "minmax.h"
+#include "xalloc.h"
+#include "c-strcaseeq.h"
+#include "localcharset.h"
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
+#ifndef SIZE_MAX
+# define SIZE_MAX ((size_t) -1)
+#endif
+
+#define INT_BITS (sizeof (int) * CHAR_BIT)
+
+struct quoting_options
+{
+ /* Basic quoting style. */
+ enum quoting_style style;
+
+ /* Additional flags. Bitwise combination of enum quoting_flags. */
+ int flags;
+
+ /* Quote the characters indicated by this bit vector even if the
+ quoting style would not normally require them to be quoted. */
+ unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1];
+
+ /* The left quote for custom_quoting_style. */
+ char const *left_quote;
+
+ /* The right quote for custom_quoting_style. */
+ char const *right_quote;
+};
+
+/* Names of quoting styles. */
+char const *const quoting_style_args[] =
+{
+ "literal",
+ "shell",
+ "shell-always",
+ "shell-escape",
+ "shell-escape-always",
+ "c",
+ "c-maybe",
+ "escape",
+ "locale",
+ "clocale",
+ 0
+};
+
+/* Correspondences to quoting style names. */
+enum quoting_style const quoting_style_vals[] =
+{
+ literal_quoting_style,
+ shell_quoting_style,
+ shell_always_quoting_style,
+ shell_escape_quoting_style,
+ shell_escape_always_quoting_style,
+ c_quoting_style,
+ c_maybe_quoting_style,
+ escape_quoting_style,
+ locale_quoting_style,
+ clocale_quoting_style
+};
+
+/* The default quoting options. */
+static struct quoting_options default_quoting_options;
+
+/* Allocate a new set of quoting options, with contents initially identical
+ to O if O is not null, or to the default if O is null.
+ It is the caller's responsibility to free the result. */
+struct quoting_options *
+clone_quoting_options (struct quoting_options *o)
+{
+ int e = errno;
+ struct quoting_options *p = xmemdup (o ? o : &default_quoting_options,
+ sizeof *o);
+ errno = e;
+ return p;
+}
+
+/* Get the value of O's quoting style. If O is null, use the default. */
+enum quoting_style
+get_quoting_style (struct quoting_options const *o)
+{
+ return (o ? o : &default_quoting_options)->style;
+}
+
+/* In O (or in the default if O is null),
+ set the value of the quoting style to S. */
+void
+set_quoting_style (struct quoting_options *o, enum quoting_style s)
+{
+ (o ? o : &default_quoting_options)->style = s;
+}
+
+/* In O (or in the default if O is null),
+ set the value of the quoting options for character C to I.
+ Return the old value. Currently, the only values defined for I are
+ 0 (the default) and 1 (which means to quote the character even if
+ it would not otherwise be quoted). */
+int
+set_char_quoting (struct quoting_options *o, char c, int i)
+{
+ unsigned char uc = c;
+ unsigned int *p =
+ (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS;
+ int shift = uc % INT_BITS;
+ int r = (*p >> shift) & 1;
+ *p ^= ((i & 1) ^ r) << shift;
+ return r;
+}
+
+/* In O (or in the default if O is null),
+ set the value of the quoting options flag to I, which can be a
+ bitwise combination of enum quoting_flags, or 0 for default
+ behavior. Return the old value. */
+int
+set_quoting_flags (struct quoting_options *o, int i)
+{
+ int r;
+ if (!o)
+ o = &default_quoting_options;
+ r = o->flags;
+ o->flags = i;
+ return r;
+}
+
+void
+set_custom_quoting (struct quoting_options *o,
+ char const *left_quote, char const *right_quote)
+{
+ if (!o)
+ o = &default_quoting_options;
+ o->style = custom_quoting_style;
+ if (!left_quote || !right_quote)
+ abort ();
+ o->left_quote = left_quote;
+ o->right_quote = right_quote;
+}
+
+/* Return quoting options for STYLE, with no extra quoting. */
+static struct quoting_options /* NOT PURE!! */
+quoting_options_from_style (enum quoting_style style)
+{
+ struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL };
+ if (style == custom_quoting_style)
+ abort ();
+ o.style = style;
+ return o;
+}
+
+/* MSGID approximates a quotation mark. Return its translation if it
+ has one; otherwise, return either it or "\"", depending on S.
+
+ S is either clocale_quoting_style or locale_quoting_style. */
+static char const *
+gettext_quote (char const *msgid, enum quoting_style s)
+{
+ char const *translation = _(msgid);
+ char const *locale_code;
+
+ if (translation != msgid)
+ return translation;
+
+ /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019.
+ Here is a list of other locales that include U+2018 and U+2019:
+
+ ISO-8859-7 0xA1 KOI8-T 0x91
+ CP869 0x8B CP874 0x91
+ CP932 0x81 0x65 CP936 0xA1 0xAE
+ CP949 0xA1 0xAE CP950 0xA1 0xA5
+ CP1250 0x91 CP1251 0x91
+ CP1252 0x91 CP1253 0x91
+ CP1254 0x91 CP1255 0x91
+ CP1256 0x91 CP1257 0x91
+ EUC-JP 0xA1 0xC6 EUC-KR 0xA1 0xAE
+ EUC-TW 0xA1 0xE4 BIG5 0xA1 0xA5
+ BIG5-HKSCS 0xA1 0xA5 EUC-CN 0xA1 0xAE
+ GBK 0xA1 0xAE Georgian-PS 0x91
+ PT154 0x91
+
+ None of these is still in wide use; using iconv is overkill. */
+ locale_code = locale_charset ();
+ if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0))
+ return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99";
+ if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0))
+ return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf";
+
+ return (s == clocale_quoting_style ? "\"" : "'");
+}
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+ argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and
+ QUOTE_THESE_TOO to control quoting.
+ Terminate the output with a null character, and return the written
+ size of the output, not counting the terminating null.
+ If BUFFERSIZE is too small to store the output string, return the
+ value that would have been returned had BUFFERSIZE been large enough.
+ If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE.
+
+ This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG,
+ ARGSIZE, O), except it breaks O into its component pieces and is
+ not careful about errno. */
+
+static size_t
+quotearg_buffer_restyled (char *buffer, size_t buffersize,
+ char const *arg, size_t argsize,
+ enum quoting_style quoting_style, int flags,
+ unsigned int const *quote_these_too,
+ char const *left_quote,
+ char const *right_quote)
+{
+ size_t i;
+ size_t len = 0;
+ size_t orig_buffersize = 0;
+ char const *quote_string = 0;
+ size_t quote_string_len = 0;
+ bool backslash_escapes = false;
+ bool unibyte_locale = MB_CUR_MAX == 1;
+ bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
+ bool pending_shell_escape_end = false;
+ bool encountered_single_quote = false;
+ bool all_c_and_shell_quote_compat = true;
+
+#define STORE(c) \
+ do \
+ { \
+ if (len < buffersize) \
+ buffer[len] = (c); \
+ len++; \
+ } \
+ while (0)
+
+#define START_ESC() \
+ do \
+ { \
+ if (elide_outer_quotes) \
+ goto force_outer_quoting_style; \
+ escaping = true; \
+ if (quoting_style == shell_always_quoting_style \
+ && ! pending_shell_escape_end) \
+ { \
+ STORE ('\''); \
+ STORE ('$'); \
+ STORE ('\''); \
+ pending_shell_escape_end = true; \
+ } \
+ STORE ('\\'); \
+ } \
+ while (0)
+
+#define END_ESC() \
+ do \
+ { \
+ if (pending_shell_escape_end && ! escaping) \
+ { \
+ STORE ('\''); \
+ STORE ('\''); \
+ pending_shell_escape_end = false; \
+ } \
+ } \
+ while (0)
+
+ process_input:
+
+ switch (quoting_style)
+ {
+ case c_maybe_quoting_style:
+ quoting_style = c_quoting_style;
+ elide_outer_quotes = true;
+ FALLTHROUGH;
+ case c_quoting_style:
+ if (!elide_outer_quotes)
+ STORE ('"');
+ backslash_escapes = true;
+ quote_string = "\"";
+ quote_string_len = 1;
+ break;
+
+ case escape_quoting_style:
+ backslash_escapes = true;
+ elide_outer_quotes = false;
+ break;
+
+ case locale_quoting_style:
+ case clocale_quoting_style:
+ case custom_quoting_style:
+ {
+ if (quoting_style != custom_quoting_style)
+ {
+ /* TRANSLATORS:
+ Get translations for open and closing quotation marks.
+ The message catalog should translate "`" to a left
+ quotation mark suitable for the locale, and similarly for
+ "'". For example, a French Unicode local should translate
+ these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+ QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+ QUOTATION MARK), respectively.
+
+ If the catalog has no translation, we will try to
+ use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+ Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+ current locale is not Unicode, locale_quoting_style
+ will quote 'like this', and clocale_quoting_style will
+ quote "like this". You should always include translations
+ for "`" and "'" even if U+2018 and U+2019 are appropriate
+ for your locale.
+
+ If you don't know what to put here, please see
+ <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+ and use glyphs suitable for your language. */
+ left_quote = gettext_quote (N_("`"), quoting_style);
+ right_quote = gettext_quote (N_("'"), quoting_style);
+ }
+ if (!elide_outer_quotes)
+ for (quote_string = left_quote; *quote_string; quote_string++)
+ STORE (*quote_string);
+ backslash_escapes = true;
+ quote_string = right_quote;
+ quote_string_len = strlen (quote_string);
+ }
+ break;
+
+ case shell_escape_quoting_style:
+ backslash_escapes = true;
+ FALLTHROUGH;
+ case shell_quoting_style:
+ elide_outer_quotes = true;
+ FALLTHROUGH;
+ case shell_escape_always_quoting_style:
+ if (!elide_outer_quotes)
+ backslash_escapes = true;
+ FALLTHROUGH;
+ case shell_always_quoting_style:
+ quoting_style = shell_always_quoting_style;
+ if (!elide_outer_quotes)
+ STORE ('\'');
+ quote_string = "'";
+ quote_string_len = 1;
+ break;
+
+ case literal_quoting_style:
+ elide_outer_quotes = false;
+ break;
+
+ default:
+ abort ();
+ }
+
+ for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++)
+ {
+ unsigned char c;
+ unsigned char esc;
+ bool is_right_quote = false;
+ bool escaping = false;
+ bool c_and_shell_quote_compat = false;
+
+ if (backslash_escapes
+ && quoting_style != shell_always_quoting_style
+ && quote_string_len
+ && (i + quote_string_len
+ <= (argsize == SIZE_MAX && 1 < quote_string_len
+ /* Use strlen only if we must: when argsize is SIZE_MAX,
+ and when the quote string is more than 1 byte long.
+ If we do call strlen, save the result. */
+ ? (argsize = strlen (arg)) : argsize))
+ && memcmp (arg + i, quote_string, quote_string_len) == 0)
+ {
+ if (elide_outer_quotes)
+ goto force_outer_quoting_style;
+ is_right_quote = true;
+ }
+
+ c = arg[i];
+ switch (c)
+ {
+ case '\0':
+ if (backslash_escapes)
+ {
+ START_ESC ();
+ /* If quote_string were to begin with digits, we'd need to
+ test for the end of the arg as well. However, it's
+ hard to imagine any locale that would use digits in
+ quotes, and set_custom_quoting is documented not to
+ accept them. Use only a single \0 with shell-escape
+ as currently digits are not printed within $'...' */
+ if (quoting_style != shell_always_quoting_style
+ && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9')
+ {
+ STORE ('0');
+ STORE ('0');
+ }
+ c = '0';
+ /* We don't have to worry that this last '0' will be
+ backslash-escaped because, again, quote_string should
+ not start with it and because quote_these_too is
+ documented as not accepting it. */
+ }
+ else if (flags & QA_ELIDE_NULL_BYTES)
+ continue;
+ break;
+
+ case '?':
+ switch (quoting_style)
+ {
+ case shell_always_quoting_style:
+ if (elide_outer_quotes)
+ goto force_outer_quoting_style;
+ break;
+
+ case c_quoting_style:
+ if ((flags & QA_SPLIT_TRIGRAPHS)
+ && i + 2 < argsize && arg[i + 1] == '?')
+ switch (arg[i + 2])
+ {
+ case '!': case '\'':
+ case '(': case ')': case '-': case '/':
+ case '<': case '=': case '>':
+ /* Escape the second '?' in what would otherwise be
+ a trigraph. */
+ if (elide_outer_quotes)
+ goto force_outer_quoting_style;
+ c = arg[i + 2];
+ i += 2;
+ STORE ('?');
+ STORE ('"');
+ STORE ('"');
+ STORE ('?');
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case '\a': esc = 'a'; goto c_escape;
+ case '\b': esc = 'b'; goto c_escape;
+ case '\f': esc = 'f'; goto c_escape;
+ case '\n': esc = 'n'; goto c_and_shell_escape;
+ case '\r': esc = 'r'; goto c_and_shell_escape;
+ case '\t': esc = 't'; goto c_and_shell_escape;
+ case '\v': esc = 'v'; goto c_escape;
+ case '\\': esc = c;
+ /* Never need to escape '\' in shell case. */
+ if (quoting_style == shell_always_quoting_style)
+ {
+ if (elide_outer_quotes)
+ goto force_outer_quoting_style;
+ goto store_c;
+ }
+
+ /* No need to escape the escape if we are trying to elide
+ outer quotes and nothing else is problematic. */
+ if (backslash_escapes && elide_outer_quotes && quote_string_len)
+ goto store_c;
+
+ c_and_shell_escape:
+ if (quoting_style == shell_always_quoting_style
+ && elide_outer_quotes)
+ goto force_outer_quoting_style;
+ /* fall through */
+ c_escape:
+ if (backslash_escapes)
+ {
+ c = esc;
+ goto store_escape;
+ }
+ break;
+
+ case '{': case '}': /* sometimes special if isolated */
+ if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1))
+ break;
+ FALLTHROUGH;
+ case '#': case '~':
+ if (i != 0)
+ break;
+ FALLTHROUGH;
+ case ' ':
+ c_and_shell_quote_compat = true;
+ FALLTHROUGH;
+ case '!': /* special in bash */
+ case '"': case '$': case '&':
+ case '(': case ')': case '*': case ';':
+ case '<':
+ case '=': /* sometimes special in 0th or (with "set -k") later args */
+ case '>': case '[':
+ case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */
+ case '`': case '|':
+ /* A shell special character. In theory, '$' and '`' could
+ be the first bytes of multibyte characters, which means
+ we should check them with mbrtowc, but in practice this
+ doesn't happen so it's not worth worrying about. */
+ if (quoting_style == shell_always_quoting_style
+ && elide_outer_quotes)
+ goto force_outer_quoting_style;
+ break;
+
+ case '\'':
+ encountered_single_quote = true;
+ c_and_shell_quote_compat = true;
+ if (quoting_style == shell_always_quoting_style)
+ {
+ if (elide_outer_quotes)
+ goto force_outer_quoting_style;
+
+ if (buffersize && ! orig_buffersize)
+ {
+ /* Just scan string to see if supports a more concise
+ representation, rather than writing a longer string
+ but returning the length of the more concise form. */
+ orig_buffersize = buffersize;
+ buffersize = 0;
+ }
+
+ STORE ('\'');
+ STORE ('\\');
+ STORE ('\'');
+ pending_shell_escape_end = false;
+ }
+ break;
+
+ case '%': case '+': case ',': case '-': case '.': case '/':
+ case '0': case '1': case '2': case '3': case '4': case '5':
+ case '6': case '7': case '8': case '9': case ':':
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
+ case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
+ case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
+ case 'Y': case 'Z': case ']': case '_': case 'a': case 'b':
+ case 'c': case 'd': case 'e': case 'f': case 'g': case 'h':
+ case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
+ case 'o': case 'p': case 'q': case 'r': case 's': case 't':
+ case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+ /* These characters don't cause problems, no matter what the
+ quoting style is. They cannot start multibyte sequences.
+ A digit or a special letter would cause trouble if it
+ appeared at the beginning of quote_string because we'd then
+ escape by prepending a backslash. However, it's hard to
+ imagine any locale that would use digits or letters as
+ quotes, and set_custom_quoting is documented not to accept
+ them. Also, a digit or a special letter would cause
+ trouble if it appeared in quote_these_too, but that's also
+ documented as not accepting them. */
+ c_and_shell_quote_compat = true;
+ break;
+
+ default:
+ /* If we have a multibyte sequence, copy it until we reach
+ its end, find an error, or come back to the initial shift
+ state. For C-like styles, if the sequence has
+ unprintable characters, escape the whole sequence, since
+ we can't easily escape single characters within it. */
+ {
+ /* Length of multibyte sequence found so far. */
+ size_t m;
+
+ bool printable;
+
+ if (unibyte_locale)
+ {
+ m = 1;
+ printable = isprint (c) != 0;
+ }
+ else
+ {
+ mbstate_t mbstate;
+ memset (&mbstate, 0, sizeof mbstate);
+
+ m = 0;
+ printable = true;
+ if (argsize == SIZE_MAX)
+ argsize = strlen (arg);
+
+ do
+ {
+ wchar_t w;
+ size_t bytes = mbrtowc (&w, &arg[i + m],
+ argsize - (i + m), &mbstate);
+ if (bytes == 0)
+ break;
+ else if (bytes == (size_t) -1)
+ {
+ printable = false;
+ break;
+ }
+ else if (bytes == (size_t) -2)
+ {
+ printable = false;
+ while (i + m < argsize && arg[i + m])
+ m++;
+ break;
+ }
+ else
+ {
+ /* Work around a bug with older shells that "see" a '\'
+ that is really the 2nd byte of a multibyte character.
+ In practice the problem is limited to ASCII
+ chars >= '@' that are shell special chars. */
+ if ('[' == 0x5b && elide_outer_quotes
+ && quoting_style == shell_always_quoting_style)
+ {
+ size_t j;
+ for (j = 1; j < bytes; j++)
+ switch (arg[i + m + j])
+ {
+ case '[': case '\\': case '^':
+ case '`': case '|':
+ goto force_outer_quoting_style;
+
+ default:
+ break;
+ }
+ }
+
+ if (! iswprint (w))
+ printable = false;
+ m += bytes;
+ }
+ }
+ while (! mbsinit (&mbstate));
+ }
+
+ c_and_shell_quote_compat = printable;
+
+ if (1 < m || (backslash_escapes && ! printable))
+ {
+ /* Output a multibyte sequence, or an escaped
+ unprintable unibyte character. */
+ size_t ilim = i + m;
+
+ for (;;)
+ {
+ if (backslash_escapes && ! printable)
+ {
+ START_ESC ();
+ STORE ('0' + (c >> 6));
+ STORE ('0' + ((c >> 3) & 7));
+ c = '0' + (c & 7);
+ }
+ else if (is_right_quote)
+ {
+ STORE ('\\');
+ is_right_quote = false;
+ }
+ if (ilim <= i + 1)
+ break;
+ END_ESC ();
+ STORE (c);
+ c = arg[++i];
+ }
+
+ goto store_c;
+ }
+ }
+ }
+
+ if (! (((backslash_escapes && quoting_style != shell_always_quoting_style)
+ || elide_outer_quotes)
+ && quote_these_too
+ && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1)
+ && !is_right_quote)
+ goto store_c;
+
+ store_escape:
+ START_ESC ();
+
+ store_c:
+ END_ESC ();
+ STORE (c);
+
+ if (! c_and_shell_quote_compat)
+ all_c_and_shell_quote_compat = false;
+ }
+
+ if (len == 0 && quoting_style == shell_always_quoting_style
+ && elide_outer_quotes)
+ goto force_outer_quoting_style;
+
+ /* Single shell quotes (') are commonly enough used as an apostrophe,
+ that we attempt to minimize the quoting in this case. Note itʼs
+ better to use the apostrophe modifier "\u02BC" if possible, as that
+ renders better and works with the word match regex \W+ etc. */
+ if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes
+ && encountered_single_quote)
+ {
+ if (all_c_and_shell_quote_compat)
+ return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize,
+ c_quoting_style,
+ flags, quote_these_too,
+ left_quote, right_quote);
+ else if (! buffersize && orig_buffersize)
+ {
+ /* Disable read-only scan, and reprocess to write quoted string. */
+ buffersize = orig_buffersize;
+ len = 0;
+ goto process_input;
+ }
+ }
+
+ if (quote_string && !elide_outer_quotes)
+ for (; *quote_string; quote_string++)
+ STORE (*quote_string);
+
+ if (len < buffersize)
+ buffer[len] = '\0';
+ return len;
+
+ force_outer_quoting_style:
+ /* Don't reuse quote_these_too, since the addition of outer quotes
+ sufficiently quotes the specified characters. */
+ if (quoting_style == shell_always_quoting_style && backslash_escapes)
+ quoting_style = shell_escape_always_quoting_style;
+ return quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
+ quoting_style,
+ flags & ~QA_ELIDE_OUTER_QUOTES, NULL,
+ left_quote, right_quote);
+}
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+ argument ARG (of size ARGSIZE), using O to control quoting.
+ If O is null, use the default.
+ Terminate the output with a null character, and return the written
+ size of the output, not counting the terminating null.
+ If BUFFERSIZE is too small to store the output string, return the
+ value that would have been returned had BUFFERSIZE been large enough.
+ If ARGSIZE is SIZE_MAX, use the string length of the argument for
+ ARGSIZE. */
+size_t
+quotearg_buffer (char *buffer, size_t buffersize,
+ char const *arg, size_t argsize,
+ struct quoting_options const *o)
+{
+ struct quoting_options const *p = o ? o : &default_quoting_options;
+ int e = errno;
+ size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize,
+ p->style, p->flags, p->quote_these_too,
+ p->left_quote, p->right_quote);
+ errno = e;
+ return r;
+}
+
+char *
+quotearg_alloc (char const *arg, size_t argsize,
+ struct quoting_options const *o)
+{
+ return quotearg_alloc_mem (arg, argsize, NULL, o);
+}
+
+/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly
+ allocated storage containing the quoted string, and store the
+ resulting size into *SIZE, if non-NULL. The result can contain
+ embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not
+ NULL, and set_quoting_flags has not set the null byte elision
+ flag. */
+char *
+quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size,
+ struct quoting_options const *o)
+{
+ struct quoting_options const *p = o ? o : &default_quoting_options;
+ int e = errno;
+ /* Elide embedded null bytes if we can't return a size. */
+ int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES);
+ size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style,
+ flags, p->quote_these_too,
+ p->left_quote,
+ p->right_quote) + 1;
+ char *buf = xcharalloc (bufsize);
+ quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags,
+ p->quote_these_too,
+ p->left_quote, p->right_quote);
+ errno = e;
+ if (size)
+ *size = bufsize - 1;
+ return buf;
+}
+
+/* A storage slot with size and pointer to a value. */
+struct slotvec
+{
+ size_t size;
+ char *val;
+};
+
+/* Preallocate a slot 0 buffer, so that the caller can always quote
+ one small component of a "memory exhausted" message in slot 0. */
+static char slot0[256];
+static int nslots = 1;
+static struct slotvec slotvec0 = {sizeof slot0, slot0};
+static struct slotvec *slotvec = &slotvec0;
+
+void
+quotearg_free (void)
+{
+ struct slotvec *sv = slotvec;
+ int i;
+ for (i = 1; i < nslots; i++)
+ free (sv[i].val);
+ if (sv[0].val != slot0)
+ {
+ free (sv[0].val);
+ slotvec0.size = sizeof slot0;
+ slotvec0.val = slot0;
+ }
+ if (sv != &slotvec0)
+ {
+ free (sv);
+ slotvec = &slotvec0;
+ }
+ nslots = 1;
+}
+
+/* Use storage slot N to return a quoted version of argument ARG.
+ ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a
+ null-terminated string.
+ OPTIONS specifies the quoting options.
+ The returned value points to static storage that can be
+ reused by the next call to this function with the same value of N.
+ N must be nonnegative; it is typically small, and must be
+ less than MIN (INT_MAX, IDX_MAX). The type of N is signed
+ to allow for future extensions (using negative values). */
+static char *
+quotearg_n_options (int n, char const *arg, size_t argsize,
+ struct quoting_options const *options)
+{
+ int e = errno;
+
+ struct slotvec *sv = slotvec;
+
+ int nslots_max = MIN (INT_MAX, IDX_MAX);
+ if (! (0 <= n && n < nslots_max))
+ abort ();
+
+ if (nslots <= n)
+ {
+ bool preallocated = (sv == &slotvec0);
+ idx_t new_nslots = nslots;
+
+ slotvec = sv = xpalloc (preallocated ? NULL : sv, &new_nslots,
+ n - nslots + 1, nslots_max, sizeof *sv);
+ if (preallocated)
+ *sv = slotvec0;
+ memset (sv + nslots, 0, (new_nslots - nslots) * sizeof *sv);
+ nslots = new_nslots;
+ }
+
+ {
+ size_t size = sv[n].size;
+ char *val = sv[n].val;
+ /* Elide embedded null bytes since we don't return a size. */
+ int flags = options->flags | QA_ELIDE_NULL_BYTES;
+ size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize,
+ options->style, flags,
+ options->quote_these_too,
+ options->left_quote,
+ options->right_quote);
+
+ if (size <= qsize)
+ {
+ sv[n].size = size = qsize + 1;
+ if (val != slot0)
+ free (val);
+ sv[n].val = val = xcharalloc (size);
+ quotearg_buffer_restyled (val, size, arg, argsize, options->style,
+ flags, options->quote_these_too,
+ options->left_quote,
+ options->right_quote);
+ }
+
+ errno = e;
+ return val;
+ }
+}
+
+char *
+quotearg_n (int n, char const *arg)
+{
+ return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options);
+}
+
+char *
+quotearg_n_mem (int n, char const *arg, size_t argsize)
+{
+ return quotearg_n_options (n, arg, argsize, &default_quoting_options);
+}
+
+char *
+quotearg (char const *arg)
+{
+ return quotearg_n (0, arg);
+}
+
+char *
+quotearg_mem (char const *arg, size_t argsize)
+{
+ return quotearg_n_mem (0, arg, argsize);
+}
+
+char *
+quotearg_n_style (int n, enum quoting_style s, char const *arg)
+{
+ struct quoting_options const o = quoting_options_from_style (s);
+ return quotearg_n_options (n, arg, SIZE_MAX, &o);
+}
+
+char *
+quotearg_n_style_mem (int n, enum quoting_style s,
+ char const *arg, size_t argsize)
+{
+ struct quoting_options const o = quoting_options_from_style (s);
+ return quotearg_n_options (n, arg, argsize, &o);
+}
+
+char *
+quotearg_style (enum quoting_style s, char const *arg)
+{
+ return quotearg_n_style (0, s, arg);
+}
+
+char *
+quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize)
+{
+ return quotearg_n_style_mem (0, s, arg, argsize);
+}
+
+char *
+quotearg_char_mem (char const *arg, size_t argsize, char ch)
+{
+ struct quoting_options options;
+ options = default_quoting_options;
+ set_char_quoting (&options, ch, 1);
+ return quotearg_n_options (0, arg, argsize, &options);
+}
+
+char *
+quotearg_char (char const *arg, char ch)
+{
+ return quotearg_char_mem (arg, SIZE_MAX, ch);
+}
+
+char *
+quotearg_colon (char const *arg)
+{
+ return quotearg_char (arg, ':');
+}
+
+char *
+quotearg_colon_mem (char const *arg, size_t argsize)
+{
+ return quotearg_char_mem (arg, argsize, ':');
+}
+
+char *
+quotearg_n_style_colon (int n, enum quoting_style s, char const *arg)
+{
+ struct quoting_options options;
+ options = quoting_options_from_style (s);
+ set_char_quoting (&options, ':', 1);
+ return quotearg_n_options (n, arg, SIZE_MAX, &options);
+}
+
+char *
+quotearg_n_custom (int n, char const *left_quote,
+ char const *right_quote, char const *arg)
+{
+ return quotearg_n_custom_mem (n, left_quote, right_quote, arg,
+ SIZE_MAX);
+}
+
+char *
+quotearg_n_custom_mem (int n, char const *left_quote,
+ char const *right_quote,
+ char const *arg, size_t argsize)
+{
+ struct quoting_options o = default_quoting_options;
+ set_custom_quoting (&o, left_quote, right_quote);
+ return quotearg_n_options (n, arg, argsize, &o);
+}
+
+char *
+quotearg_custom (char const *left_quote, char const *right_quote,
+ char const *arg)
+{
+ return quotearg_n_custom (0, left_quote, right_quote, arg);
+}
+
+char *
+quotearg_custom_mem (char const *left_quote, char const *right_quote,
+ char const *arg, size_t argsize)
+{
+ return quotearg_n_custom_mem (0, left_quote, right_quote, arg,
+ argsize);
+}
+
+
+/* The quoting option used by the functions of quote.h. */
+struct quoting_options quote_quoting_options =
+ {
+ locale_quoting_style,
+ 0,
+ { 0 },
+ NULL, NULL
+ };
+
+char const *
+quote_n_mem (int n, char const *arg, size_t argsize)
+{
+ return quotearg_n_options (n, arg, argsize, &quote_quoting_options);
+}
+
+char const *
+quote_mem (char const *arg, size_t argsize)
+{
+ return quote_n_mem (0, arg, argsize);
+}
+
+char const *
+quote_n (int n, char const *arg)
+{
+ return quote_n_mem (n, arg, SIZE_MAX);
+}
+
+char const *
+quote (char const *arg)
+{
+ return quote_n (0, arg);
+}
+
+/*
+ * Hey Emacs!
+ * Local Variables:
+ * coding: utf-8
+ * End:
+ */
diff --git a/lib/quotearg.h b/lib/quotearg.h
new file mode 100644
index 0000000..eb15612
--- /dev/null
+++ b/lib/quotearg.h
@@ -0,0 +1,431 @@
+/* quotearg.h - quote arguments for output
+
+ Copyright (C) 1998-2002, 2004, 2006, 2008-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert <eggert@twinsun.com> */
+
+#ifndef QUOTEARG_H_
+# define QUOTEARG_H_ 1
+
+# include <stdlib.h>
+
+/* Basic quoting styles. For each style, an example is given on the
+ input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using
+ quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that
+ style and the default flags and quoted characters. Note that the
+ examples are shown here as valid C strings rather than what
+ displays on a terminal (with "??/" as a trigraph for "\\"). */
+enum quoting_style
+ {
+ /* Output names as-is (ls --quoting-style=literal). Can result in
+ embedded null bytes if QA_ELIDE_NULL_BYTES is not in
+ effect.
+
+ quotearg_buffer:
+ "simple", "\0 \t\n'\"\033??/\\", "a:b"
+ quotearg:
+ "simple", " \t\n'\"\033??/\\", "a:b"
+ quotearg_colon:
+ "simple", " \t\n'\"\033??/\\", "a:b"
+ */
+ literal_quoting_style,
+
+ /* Quote names for the shell if they contain shell metacharacters
+ or would cause ambiguous output (ls --quoting-style=shell).
+ Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not
+ in effect.
+
+ quotearg_buffer:
+ "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b"
+ quotearg:
+ "simple", "' \t\n'\\''\"\033??/\\'", "a:b"
+ quotearg_colon:
+ "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+ */
+ shell_quoting_style,
+
+ /* Quote names for the shell, even if they would normally not
+ require quoting (ls --quoting-style=shell-always). Can result
+ in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect.
+ Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in
+ effect.
+
+ quotearg_buffer:
+ "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'"
+ quotearg:
+ "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+ quotearg_colon:
+ "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'"
+ */
+ shell_always_quoting_style,
+
+ /* Quote names for the shell if they contain shell metacharacters
+ or other problematic characters (ls --quoting-style=shell-escape).
+ Non printable characters are quoted using the $'...' syntax,
+ which originated in ksh93 and is widely supported by most shells,
+ and proposed for inclusion in POSIX.
+
+ quotearg_buffer:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b"
+ quotearg:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b"
+ quotearg_colon:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "'a:b'"
+ */
+ shell_escape_quoting_style,
+
+ /* Quote names for the shell even if they would normally not
+ require quoting (ls --quoting-style=shell-escape).
+ Non printable characters are quoted using the $'...' syntax,
+ which originated in ksh93 and is widely supported by most shells,
+ and proposed for inclusion in POSIX. Behaves like
+ shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect.
+
+ quotearg_buffer:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b"
+ quotearg:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b"
+ quotearg_colon:
+ "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "'a:b'"
+ */
+ shell_escape_always_quoting_style,
+
+ /* Quote names as for a C language string (ls --quoting-style=c).
+ Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is
+ in effect. Split into consecutive strings if
+ QA_SPLIT_TRIGRAPHS.
+
+ quotearg_buffer:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+ quotearg:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+ quotearg_colon:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+ */
+ c_quoting_style,
+
+ /* Like c_quoting_style except omit the surrounding double-quote
+ characters if no quoted characters are encountered.
+
+ quotearg_buffer:
+ "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+ quotearg:
+ "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b"
+ quotearg_colon:
+ "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+ */
+ c_maybe_quoting_style,
+
+ /* Like c_quoting_style except always omit the surrounding
+ double-quote characters and ignore QA_SPLIT_TRIGRAPHS
+ (ls --quoting-style=escape).
+
+ quotearg_buffer:
+ "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+ quotearg:
+ "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b"
+ quotearg_colon:
+ "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b"
+ */
+ escape_quoting_style,
+
+ /* Like clocale_quoting_style, but use single quotes in the
+ default C locale or if the program does not use gettext
+ (ls --quoting-style=locale). For UTF-8 locales, quote
+ characters will use Unicode.
+
+ LC_MESSAGES=C
+ quotearg_buffer:
+ "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+ quotearg:
+ "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'"
+ quotearg_colon:
+ "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'"
+
+ LC_MESSAGES=pt_PT.utf8
+ quotearg_buffer:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+ quotearg:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+ quotearg_colon:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+ */
+ locale_quoting_style,
+
+ /* Like c_quoting_style except use quotation marks appropriate for
+ the locale and ignore QA_SPLIT_TRIGRAPHS
+ (ls --quoting-style=clocale).
+
+ LC_MESSAGES=C
+ quotearg_buffer:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+ quotearg:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\""
+ quotearg_colon:
+ "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\""
+
+ LC_MESSAGES=pt_PT.utf8
+ quotearg_buffer:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+ quotearg:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273"
+ quotearg_colon:
+ "\302\253simple\302\273",
+ "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273"
+ */
+ clocale_quoting_style,
+
+ /* Like clocale_quoting_style except use the custom quotation marks
+ set by set_custom_quoting. If custom quotation marks are not
+ set, the behavior is undefined.
+
+ left_quote = right_quote = "'"
+ quotearg_buffer:
+ "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+ quotearg:
+ "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'"
+ quotearg_colon:
+ "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'"
+
+ left_quote = "(" and right_quote = ")"
+ quotearg_buffer:
+ "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+ quotearg:
+ "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)"
+ quotearg_colon:
+ "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)"
+
+ left_quote = ":" and right_quote = " "
+ quotearg_buffer:
+ ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+ quotearg:
+ ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b "
+ quotearg_colon:
+ ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b "
+
+ left_quote = "\"'" and right_quote = "'\""
+ Notice that this is treated as a single level of quotes or two
+ levels where the outer quote need not be escaped within the inner
+ quotes. For two levels where the outer quote must be escaped
+ within the inner quotes, you must use separate quotearg
+ invocations.
+ quotearg_buffer:
+ "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+ quotearg:
+ "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\""
+ quotearg_colon:
+ "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\""
+ */
+ custom_quoting_style
+ };
+
+/* Flags for use in set_quoting_flags. */
+enum quoting_flags
+ {
+ /* Always elide null bytes from styles that do not quote them,
+ even when the length of the result is available to the
+ caller. */
+ QA_ELIDE_NULL_BYTES = 0x01,
+
+ /* Omit the surrounding quote characters if no escaped characters
+ are encountered. Note that if no other character needs
+ escaping, then neither does the escape character. */
+ QA_ELIDE_OUTER_QUOTES = 0x02,
+
+ /* In the c_quoting_style and c_maybe_quoting_style, split ANSI
+ trigraph sequences into concatenated strings (for example,
+ "?""?/" rather than "??/", which could be confused with
+ "\\"). */
+ QA_SPLIT_TRIGRAPHS = 0x04
+ };
+
+/* For now, --quoting-style=literal is the default, but this may change. */
+# ifndef DEFAULT_QUOTING_STYLE
+# define DEFAULT_QUOTING_STYLE literal_quoting_style
+# endif
+
+/* Names of quoting styles and their corresponding values. */
+extern char const *const quoting_style_args[];
+extern enum quoting_style const quoting_style_vals[];
+
+struct quoting_options;
+
+/* The functions listed below set and use a hidden variable
+ that contains the default quoting style options. */
+
+/* Allocate a new set of quoting options, with contents initially identical
+ to O if O is not null, or to the default if O is null.
+ It is the caller's responsibility to free the result. */
+struct quoting_options *clone_quoting_options (struct quoting_options *o)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+/* Get the value of O's quoting style. If O is null, use the default. */
+enum quoting_style get_quoting_style (struct quoting_options const *o);
+
+/* In O (or in the default if O is null),
+ set the value of the quoting style to S. */
+void set_quoting_style (struct quoting_options *o, enum quoting_style s);
+
+/* In O (or in the default if O is null),
+ set the value of the quoting options for character C to I.
+ Return the old value. Currently, the only values defined for I are
+ 0 (the default) and 1 (which means to quote the character even if
+ it would not otherwise be quoted). C must never be a digit or a
+ letter that has special meaning after a backslash (for example, "\t"
+ for tab). */
+int set_char_quoting (struct quoting_options *o, char c, int i);
+
+/* In O (or in the default if O is null),
+ set the value of the quoting options flag to I, which can be a
+ bitwise combination of enum quoting_flags, or 0 for default
+ behavior. Return the old value. */
+int set_quoting_flags (struct quoting_options *o, int i);
+
+/* In O (or in the default if O is null),
+ set the value of the quoting style to custom_quoting_style,
+ set the left quote to LEFT_QUOTE, and set the right quote to
+ RIGHT_QUOTE. Each of LEFT_QUOTE and RIGHT_QUOTE must be
+ null-terminated and can be the empty string. Because backslashes are
+ used for escaping, it does not make sense for RIGHT_QUOTE to contain
+ a backslash. RIGHT_QUOTE must not begin with a digit or a letter
+ that has special meaning after a backslash (for example, "\t" for
+ tab). */
+void set_custom_quoting (struct quoting_options *o,
+ char const *left_quote,
+ char const *right_quote);
+
+/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of
+ argument ARG (of size ARGSIZE), using O to control quoting.
+ If O is null, use the default.
+ Terminate the output with a null character, and return the written
+ size of the output, not counting the terminating null.
+ If BUFFERSIZE is too small to store the output string, return the
+ value that would have been returned had BUFFERSIZE been large enough.
+ If ARGSIZE is -1, use the string length of the argument for ARGSIZE.
+ On output, BUFFER might contain embedded null bytes if ARGSIZE was
+ not -1, the style of O does not use backslash escapes, and the
+ flags of O do not request elision of null bytes.*/
+size_t quotearg_buffer (char *restrict buffer, size_t buffersize,
+ char const *arg, size_t argsize,
+ struct quoting_options const *o);
+
+/* Like quotearg_buffer, except return the result in a newly allocated
+ buffer. It is the caller's responsibility to free the result. The
+ result will not contain embedded null bytes. */
+char *quotearg_alloc (char const *arg, size_t argsize,
+ struct quoting_options const *o)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+/* Like quotearg_alloc, except that the length of the result,
+ excluding the terminating null byte, is stored into SIZE if it is
+ non-NULL. The result might contain embedded null bytes if ARGSIZE
+ was not -1, SIZE was not NULL, the style of O does not use
+ backslash escapes, and the flags of O do not request elision of
+ null bytes.*/
+char *quotearg_alloc_mem (char const *arg, size_t argsize,
+ size_t *size, struct quoting_options const *o)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+/* Use storage slot N to return a quoted version of the string ARG.
+ Use the default quoting options.
+ The returned value points to static storage that can be
+ reused by the next call to this function with the same value of N.
+ N must be nonnegative. The output of all functions in the
+ quotearg_n family are guaranteed to not contain embedded null
+ bytes.*/
+char *quotearg_n (int n, char const *arg);
+
+/* Equivalent to quotearg_n (0, ARG). */
+char *quotearg (char const *arg);
+
+/* Use storage slot N to return a quoted version of the argument ARG
+ of size ARGSIZE. This is like quotearg_n (N, ARG), except it can
+ quote null bytes. */
+char *quotearg_n_mem (int n, char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */
+char *quotearg_mem (char const *arg, size_t argsize);
+
+/* Use style S and storage slot N to return a quoted version of the string ARG.
+ This is like quotearg_n (N, ARG), except that it uses S with no other
+ options to specify the quoting method. */
+char *quotearg_n_style (int n, enum quoting_style s, char const *arg);
+
+/* Use style S and storage slot N to return a quoted version of the
+ argument ARG of size ARGSIZE. This is like quotearg_n_style
+ (N, S, ARG), except it can quote null bytes. */
+char *quotearg_n_style_mem (int n, enum quoting_style s,
+ char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_style (0, S, ARG). */
+char *quotearg_style (enum quoting_style s, char const *arg);
+
+/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */
+char *quotearg_style_mem (enum quoting_style s,
+ char const *arg, size_t argsize);
+
+/* Like quotearg (ARG), except also quote any instances of CH.
+ See set_char_quoting for a description of acceptable CH values. */
+char *quotearg_char (char const *arg, char ch);
+
+/* Like quotearg_char (ARG, CH), except it can quote null bytes. */
+char *quotearg_char_mem (char const *arg, size_t argsize, char ch);
+
+/* Equivalent to quotearg_char (ARG, ':'). */
+char *quotearg_colon (char const *arg);
+
+/* Like quotearg_colon (ARG), except it can quote null bytes. */
+char *quotearg_colon_mem (char const *arg, size_t argsize);
+
+/* Like quotearg_n_style, except with ':' quoting enabled. */
+char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg);
+
+/* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style
+ with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE. See
+ set_custom_quoting for a description of acceptable LEFT_QUOTE and
+ RIGHT_QUOTE values. */
+char *quotearg_n_custom (int n, char const *left_quote,
+ char const *right_quote, char const *arg);
+
+/* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it
+ can quote null bytes. */
+char *quotearg_n_custom_mem (int n, char const *left_quote,
+ char const *right_quote,
+ char const *arg, size_t argsize);
+
+/* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */
+char *quotearg_custom (char const *left_quote, char const *right_quote,
+ char const *arg);
+
+/* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG,
+ ARGSIZE). */
+char *quotearg_custom_mem (char const *left_quote,
+ char const *right_quote,
+ char const *arg, size_t argsize);
+
+/* Free any dynamically allocated memory. */
+void quotearg_free (void);
+
+#endif /* !QUOTEARG_H_ */
diff --git a/lib/rawmemchr.c b/lib/rawmemchr.c
new file mode 100644
index 0000000..45c6cd3
--- /dev/null
+++ b/lib/rawmemchr.c
@@ -0,0 +1,123 @@
+/* Searching in a string.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+/* A function definition is only needed if HAVE_RAWMEMCHR is not defined. */
+#if !HAVE_RAWMEMCHR
+
+# include <limits.h>
+# include <stdint.h>
+
+
+/* Find the first occurrence of C in S. */
+void *
+rawmemchr (const void *s, int c_in)
+{
+ /* Change this typedef to experiment with performance. */
+ typedef uintptr_t longword;
+ /* If you change the "uintptr_t", you should change UINTPTR_WIDTH to match.
+ This verifies that the type does not have padding bits. */
+ static_assert (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (longword));
+
+ const unsigned char *char_ptr;
+ unsigned char c = c_in;
+
+ /* Handle the first few bytes by reading one byte at a time.
+ Do this until CHAR_PTR is aligned on a longword boundary. */
+ for (char_ptr = (const unsigned char *) s;
+ (uintptr_t) char_ptr % alignof (longword) != 0;
+ ++char_ptr)
+ if (*char_ptr == c)
+ return (void *) char_ptr;
+
+ longword const *longword_ptr = s = char_ptr;
+
+ /* Compute auxiliary longword values:
+ repeated_one is a value which has a 1 in every byte.
+ repeated_c has c in every byte. */
+ longword repeated_one = (longword) -1 / UCHAR_MAX;
+ longword repeated_c = repeated_one * c;
+ longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1);
+
+ /* Instead of the traditional loop which tests each byte, we will
+ test a longword at a time. The tricky part is testing if any of
+ the bytes in the longword in question are equal to
+ c. We first use an xor with repeated_c. This reduces the task
+ to testing whether any of the bytes in longword1 is zero.
+
+ (The following comments assume 8-bit bytes, as POSIX requires;
+ the code's use of UCHAR_MAX should work even if bytes have more
+ than 8 bits.)
+
+ We compute tmp =
+ ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80).
+ That is, we perform the following operations:
+ 1. Subtract repeated_one.
+ 2. & ~longword1.
+ 3. & a mask consisting of 0x80 in every byte.
+ Consider what happens in each byte:
+ - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+ and step 3 transforms it into 0x80. A carry can also be propagated
+ to more significant bytes.
+ - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+ position k (0 <= k <= 7); so the lowest k bits are 0. After step 1,
+ the byte ends in a single bit of value 0 and k bits of value 1.
+ After step 2, the result is just k bits of value 1: 2^k - 1. After
+ step 3, the result is 0. And no carry is produced.
+ So, if longword1 has only non-zero bytes, tmp is zero.
+ Whereas if longword1 has a zero byte, call j the position of the least
+ significant zero byte. Then the result has a zero at positions 0, ...,
+ j-1 and a 0x80 at position j. We cannot predict the result at the more
+ significant bytes (positions j+1..3), but it does not matter since we
+ already have a non-zero bit at position 8*j+7.
+
+ The test whether any byte in longword1 is zero is equivalent
+ to testing whether tmp is nonzero.
+
+ This test can read beyond the end of a string, depending on where
+ C_IN is encountered. However, this is considered safe since the
+ initialization phase ensured that the read will be aligned,
+ therefore, the read will not cross page boundaries and will not
+ cause a fault. */
+
+ while (1)
+ {
+ longword longword1 = *longword_ptr ^ repeated_c;
+
+ if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0)
+ break;
+ longword_ptr++;
+ }
+
+ char_ptr = s = longword_ptr;
+
+ /* At this point, we know that one of the sizeof (longword) bytes
+ starting at char_ptr is == c. If we knew endianness, we
+ could determine the first such byte without any further memory
+ accesses, just by looking at the tmp result from the last loop
+ iteration. However, the following simple and portable code does
+ not attempt this potential optimization. */
+
+ while (*char_ptr != c)
+ char_ptr++;
+ return (void *) char_ptr;
+}
+
+#endif
diff --git a/lib/rawmemchr.valgrind b/lib/rawmemchr.valgrind
new file mode 100644
index 0000000..f3e4cb0
--- /dev/null
+++ b/lib/rawmemchr.valgrind
@@ -0,0 +1,28 @@
+# Suppress a valgrind message about use of uninitialized memory in rawmemchr().
+
+# Copyright (C) 2008-2023 Free Software Foundation, Inc.
+#
+# This file is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# This use is OK because it provides only a speedup.
+{
+ rawmemchr-value4
+ Memcheck:Value4
+ fun:rawmemchr
+}
+{
+ rawmemchr-value8
+ Memcheck:Value8
+ fun:rawmemchr
+}
diff --git a/lib/read.c b/lib/read.c
new file mode 100644
index 0000000..a0bdf06
--- /dev/null
+++ b/lib/read.c
@@ -0,0 +1,95 @@
+/* POSIX compatible read() function.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+# include <errno.h>
+# include <io.h>
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+# include "msvc-inval.h"
+# endif
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
+# undef read
+
+# if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static ssize_t
+read_nothrow (int fd, void *buf, size_t count)
+{
+ ssize_t result;
+
+ TRY_MSVC_INVAL
+ {
+ result = _read (fd, buf, count);
+ }
+ CATCH_MSVC_INVAL
+ {
+ result = -1;
+ errno = EBADF;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+# else
+# define read_nothrow _read
+# endif
+
+ssize_t
+rpl_read (int fd, void *buf, size_t count)
+{
+ ssize_t ret = read_nothrow (fd, buf, count);
+
+# if GNULIB_NONBLOCKING
+ if (ret < 0
+ && GetLastError () == ERROR_NO_DATA)
+ {
+ HANDLE h = (HANDLE) _get_osfhandle (fd);
+ if (GetFileType (h) == FILE_TYPE_PIPE)
+ {
+ /* h is a pipe or socket. */
+ DWORD state;
+ if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0)
+ && (state & PIPE_NOWAIT) != 0)
+ /* h is a pipe in non-blocking mode.
+ Change errno from EINVAL to EAGAIN. */
+ errno = EAGAIN;
+ }
+ }
+# endif
+
+ return ret;
+}
+
+#endif
diff --git a/lib/readlink.c b/lib/readlink.c
new file mode 100644
index 0000000..14bbb7f
--- /dev/null
+++ b/lib/readlink.c
@@ -0,0 +1,104 @@
+/* Read the contents of a symbolic link.
+ Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#if !HAVE_READLINK
+
+/* readlink() substitute for systems that don't have a readlink() function,
+ such as DJGPP 2.03 and mingw32. */
+
+ssize_t
+readlink (char const *file, _GL_UNUSED char *buf,
+ _GL_UNUSED size_t bufsize)
+{
+ struct stat statbuf;
+
+ /* In general we should use lstat() here, not stat(). But on platforms
+ without symbolic links, lstat() - if it exists - would be equivalent to
+ stat(), therefore we can use stat(). This saves us a configure check. */
+ if (stat (file, &statbuf) >= 0)
+ errno = EINVAL;
+ return -1;
+}
+
+#else /* HAVE_READLINK */
+
+# undef readlink
+
+/* readlink() wrapper that uses correct types, for systems like cygwin
+ 1.5.x where readlink returns int, and which rejects trailing slash,
+ for Solaris 9. */
+
+ssize_t
+rpl_readlink (char const *file, char *buf, size_t bufsize)
+{
+# if READLINK_TRAILING_SLASH_BUG
+ size_t file_len = strlen (file);
+ if (file_len && file[file_len - 1] == '/')
+ {
+ /* Even if FILE without the slash is a symlink to a directory,
+ both lstat() and stat() must resolve the trailing slash to
+ the directory rather than the symlink. We can therefore
+ safely use stat() to distinguish between EINVAL and
+ ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */
+ struct stat st;
+ if (stat (file, &st) == 0 || errno == EOVERFLOW)
+ errno = EINVAL;
+ return -1;
+ }
+# endif /* READLINK_TRAILING_SLASH_BUG */
+
+ ssize_t r = readlink (file, buf, bufsize);
+
+# if READLINK_TRUNCATE_BUG
+ if (r < 0 && errno == ERANGE)
+ {
+ /* Try again with a bigger buffer. This is just for test cases;
+ real code invariably discards short reads. */
+ char stackbuf[4032];
+ r = readlink (file, stackbuf, sizeof stackbuf);
+ if (r < 0)
+ {
+ if (errno == ERANGE)
+ {
+ /* Clear the buffer, which is good enough for real code.
+ Thankfully, no test cases try short reads of enormous
+ symlinks and what would be the point anyway? */
+ r = bufsize;
+ memset (buf, 0, r);
+ }
+ }
+ else
+ {
+ if (bufsize < r)
+ r = bufsize;
+ memcpy (buf, stackbuf, r);
+ }
+ }
+# endif
+
+ return r;
+}
+
+#endif /* HAVE_READLINK */
diff --git a/lib/realloc.c b/lib/realloc.c
new file mode 100644
index 0000000..1063eb0
--- /dev/null
+++ b/lib/realloc.c
@@ -0,0 +1,63 @@
+/* realloc() function that is glibc compatible.
+
+ Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include <errno.h>
+
+#include "xalloc-oversized.h"
+
+/* Call the system's realloc below. This file does not define
+ _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */
+#undef realloc
+
+/* Change the size of an allocated block of memory P to N bytes,
+ with error checking. If P is NULL, use malloc. Otherwise if N is zero,
+ free P and return NULL. */
+
+void *
+rpl_realloc (void *p, size_t n)
+{
+ if (p == NULL)
+ return malloc (n);
+
+ if (n == 0)
+ {
+ free (p);
+ return NULL;
+ }
+
+ if (xalloc_oversized (n, 1))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ void *result = realloc (p, n);
+
+#if !HAVE_MALLOC_POSIX
+ if (result == NULL)
+ errno = ENOMEM;
+#endif
+
+ return result;
+}
diff --git a/lib/reallocarray.c b/lib/reallocarray.c
new file mode 100644
index 0000000..8c99250
--- /dev/null
+++ b/lib/reallocarray.c
@@ -0,0 +1,38 @@
+/* reallocarray function that is glibc compatible.
+
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* written by Darshit Shah */
+
+#include <config.h>
+
+#include <stdckdint.h>
+#include <stdlib.h>
+#include <errno.h>
+
+void *
+reallocarray (void *ptr, size_t nmemb, size_t size)
+{
+ size_t nbytes;
+ if (ckd_mul (&nbytes, nmemb, size))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ /* Rely on the semantics of GNU realloc. */
+ return realloc (ptr, nbytes);
+}
diff --git a/lib/regcomp.c b/lib/regcomp.c
new file mode 100644
index 0000000..8947839
--- /dev/null
+++ b/lib/regcomp.c
@@ -0,0 +1,3788 @@
+/* Extended regular expression matching and search library.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
+
+static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern,
+ size_t length, reg_syntax_t syntax);
+static void re_compile_fastmap_iter (regex_t *bufp,
+ const re_dfastate_t *init_state,
+ char *fastmap);
+static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len);
+static void free_charset (re_charset_t *cset);
+static void free_workarea_compile (regex_t *preg);
+static reg_errcode_t create_initial_state (re_dfa_t *dfa);
+static void optimize_utf8 (re_dfa_t *dfa);
+static reg_errcode_t analyze (regex_t *preg);
+static reg_errcode_t preorder (bin_tree_t *root,
+ reg_errcode_t (fn (void *, bin_tree_t *)),
+ void *extra);
+static reg_errcode_t postorder (bin_tree_t *root,
+ reg_errcode_t (fn (void *, bin_tree_t *)),
+ void *extra);
+static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node);
+static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node);
+static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg,
+ bin_tree_t *node);
+static reg_errcode_t calc_first (void *extra, bin_tree_t *node);
+static reg_errcode_t calc_next (void *extra, bin_tree_t *node);
+static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node);
+static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint);
+static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
+ unsigned int constraint);
+static reg_errcode_t calc_eclosure (re_dfa_t *dfa);
+static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa,
+ Idx node, bool root);
+static reg_errcode_t calc_inveclosure (re_dfa_t *dfa);
+static Idx fetch_number (re_string_t *input, re_token_t *token,
+ reg_syntax_t syntax);
+static int peek_token (re_token_t *token, re_string_t *input,
+ reg_syntax_t syntax);
+static bin_tree_t *parse (re_string_t *regexp, regex_t *preg,
+ reg_syntax_t syntax, reg_errcode_t *err);
+static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg,
+ re_token_t *token, reg_syntax_t syntax,
+ Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg,
+ re_token_t *token, reg_syntax_t syntax,
+ Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg,
+ re_token_t *token, reg_syntax_t syntax,
+ Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg,
+ re_token_t *token, reg_syntax_t syntax,
+ Idx nest, reg_errcode_t *err);
+static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp,
+ re_dfa_t *dfa, re_token_t *token,
+ reg_syntax_t syntax, reg_errcode_t *err);
+static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa,
+ re_token_t *token, reg_syntax_t syntax,
+ reg_errcode_t *err);
+static reg_errcode_t parse_bracket_element (bracket_elem_t *elem,
+ re_string_t *regexp,
+ re_token_t *token, int token_len,
+ re_dfa_t *dfa,
+ reg_syntax_t syntax,
+ bool accept_hyphen);
+static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem,
+ re_string_t *regexp,
+ re_token_t *token);
+static reg_errcode_t build_equiv_class (bitset_t sbcset,
+ re_charset_t *mbcset,
+ Idx *equiv_class_alloc,
+ const unsigned char *name);
+static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans,
+ bitset_t sbcset,
+ re_charset_t *mbcset,
+ Idx *char_class_alloc,
+ const char *class_name,
+ reg_syntax_t syntax);
+static bin_tree_t *build_charclass_op (re_dfa_t *dfa,
+ RE_TRANSLATE_TYPE trans,
+ const char *class_name,
+ const char *extra,
+ bool non_match, reg_errcode_t *err);
+static bin_tree_t *create_tree (re_dfa_t *dfa,
+ bin_tree_t *left, bin_tree_t *right,
+ re_token_type_t type);
+static bin_tree_t *create_token_tree (re_dfa_t *dfa,
+ bin_tree_t *left, bin_tree_t *right,
+ const re_token_t *token);
+static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa);
+static void free_token (re_token_t *node);
+static reg_errcode_t free_tree (void *extra, bin_tree_t *node);
+static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node);
+
+/* This table gives an error message for each of the error codes listed
+ in regex.h. Obviously the order here has to be same as there.
+ POSIX doesn't require that we do anything for REG_NOERROR,
+ but why not be nice? */
+
+static const char __re_error_msgid[] =
+ {
+#define REG_NOERROR_IDX 0
+ gettext_noop ("Success") /* REG_NOERROR */
+ "\0"
+#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success")
+ gettext_noop ("No match") /* REG_NOMATCH */
+ "\0"
+#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match")
+ gettext_noop ("Invalid regular expression") /* REG_BADPAT */
+ "\0"
+#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression")
+ gettext_noop ("Invalid collation character") /* REG_ECOLLATE */
+ "\0"
+#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character")
+ gettext_noop ("Invalid character class name") /* REG_ECTYPE */
+ "\0"
+#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name")
+ gettext_noop ("Trailing backslash") /* REG_EESCAPE */
+ "\0"
+#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash")
+ gettext_noop ("Invalid back reference") /* REG_ESUBREG */
+ "\0"
+#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference")
+ gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */
+ "\0"
+#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=")
+ gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */
+ "\0"
+#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(")
+ gettext_noop ("Unmatched \\{") /* REG_EBRACE */
+ "\0"
+#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{")
+ gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */
+ "\0"
+#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}")
+ gettext_noop ("Invalid range end") /* REG_ERANGE */
+ "\0"
+#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end")
+ gettext_noop ("Memory exhausted") /* REG_ESPACE */
+ "\0"
+#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted")
+ gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */
+ "\0"
+#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression")
+ gettext_noop ("Premature end of regular expression") /* REG_EEND */
+ "\0"
+#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression")
+ gettext_noop ("Regular expression too big") /* REG_ESIZE */
+ "\0"
+#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big")
+ gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
+ };
+
+static const size_t __re_error_msgid_idx[] =
+ {
+ REG_NOERROR_IDX,
+ REG_NOMATCH_IDX,
+ REG_BADPAT_IDX,
+ REG_ECOLLATE_IDX,
+ REG_ECTYPE_IDX,
+ REG_EESCAPE_IDX,
+ REG_ESUBREG_IDX,
+ REG_EBRACK_IDX,
+ REG_EPAREN_IDX,
+ REG_EBRACE_IDX,
+ REG_BADBR_IDX,
+ REG_ERANGE_IDX,
+ REG_ESPACE_IDX,
+ REG_BADRPT_IDX,
+ REG_EEND_IDX,
+ REG_ESIZE_IDX,
+ REG_ERPAREN_IDX
+ };
+
+/* Entry points for GNU code. */
+
+/* re_compile_pattern is the GNU regular expression compiler: it
+ compiles PATTERN (of length LENGTH) and puts the result in BUFP.
+ Returns 0 if the pattern was valid, otherwise an error string.
+
+ Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields
+ are set in BUFP on entry. */
+
+const char *
+re_compile_pattern (const char *pattern, size_t length,
+ struct re_pattern_buffer *bufp)
+{
+ reg_errcode_t ret;
+
+ /* And GNU code determines whether or not to get register information
+ by passing null for the REGS argument to re_match, etc., not by
+ setting no_sub, unless RE_NO_SUB is set. */
+ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB);
+
+ /* Match anchors at newline. */
+ bufp->newline_anchor = 1;
+
+ ret = re_compile_internal (bufp, pattern, length, re_syntax_options);
+
+ if (!ret)
+ return NULL;
+ return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
+}
+weak_alias (__re_compile_pattern, re_compile_pattern)
+
+/* Set by 're_set_syntax' to the current regexp syntax to recognize. Can
+ also be assigned to arbitrarily: each pattern buffer stores its own
+ syntax, so it can be changed between regex compilations. */
+/* This has no initializer because initialized variables in Emacs
+ become read-only after dumping. */
+reg_syntax_t re_syntax_options;
+
+
+/* Specify the precise syntax of regexps for compilation. This provides
+ for compatibility for various utilities which historically have
+ different, incompatible syntaxes.
+
+ The argument SYNTAX is a bit mask comprised of the various bits
+ defined in regex.h. We return the old syntax. */
+
+reg_syntax_t
+re_set_syntax (reg_syntax_t syntax)
+{
+ reg_syntax_t ret = re_syntax_options;
+
+ re_syntax_options = syntax;
+ return ret;
+}
+weak_alias (__re_set_syntax, re_set_syntax)
+
+int
+re_compile_fastmap (struct re_pattern_buffer *bufp)
+{
+ re_dfa_t *dfa = bufp->buffer;
+ char *fastmap = bufp->fastmap;
+
+ memset (fastmap, '\0', sizeof (char) * SBC_MAX);
+ re_compile_fastmap_iter (bufp, dfa->init_state, fastmap);
+ if (dfa->init_state != dfa->init_state_word)
+ re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap);
+ if (dfa->init_state != dfa->init_state_nl)
+ re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap);
+ if (dfa->init_state != dfa->init_state_begbuf)
+ re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap);
+ bufp->fastmap_accurate = 1;
+ return 0;
+}
+weak_alias (__re_compile_fastmap, re_compile_fastmap)
+
+static __always_inline void
+re_set_fastmap (char *fastmap, bool icase, int ch)
+{
+ fastmap[ch] = 1;
+ if (icase)
+ fastmap[tolower (ch)] = 1;
+}
+
+/* Helper function for re_compile_fastmap.
+ Compile fastmap for the initial_state INIT_STATE. */
+
+static void
+re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
+ char *fastmap)
+{
+ re_dfa_t *dfa = bufp->buffer;
+ Idx node_cnt;
+ bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE));
+ for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt)
+ {
+ Idx node = init_state->nodes.elems[node_cnt];
+ re_token_type_t type = dfa->nodes[node].type;
+
+ if (type == CHARACTER)
+ {
+ re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c);
+ if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
+ {
+ unsigned char buf[MB_LEN_MAX];
+ unsigned char *p;
+ wchar_t wc;
+ mbstate_t state;
+
+ p = buf;
+ *p++ = dfa->nodes[node].opr.c;
+ while (++node < dfa->nodes_len
+ && dfa->nodes[node].type == CHARACTER
+ && dfa->nodes[node].mb_partial)
+ *p++ = dfa->nodes[node].opr.c;
+ memset (&state, '\0', sizeof (state));
+ if (__mbrtowc (&wc, (const char *) buf, p - buf,
+ &state) == p - buf
+ && (__wcrtomb ((char *) buf, __towlower (wc), &state)
+ != (size_t) -1))
+ re_set_fastmap (fastmap, false, buf[0]);
+ }
+ }
+ else if (type == SIMPLE_BRACKET)
+ {
+ int i, ch;
+ for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
+ {
+ int j;
+ bitset_word_t w = dfa->nodes[node].opr.sbcset[i];
+ for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+ if (w & ((bitset_word_t) 1 << j))
+ re_set_fastmap (fastmap, icase, ch);
+ }
+ }
+ else if (type == COMPLEX_BRACKET)
+ {
+ re_charset_t *cset = dfa->nodes[node].opr.mbcset;
+ Idx i;
+
+#ifdef _LIBC
+ /* See if we have to try all bytes which start multiple collation
+ elements.
+ e.g. In da_DK, we want to catch 'a' since "aa" is a valid
+ collation element, and don't catch 'b' since 'b' is
+ the only collation element which starts from 'b' (and
+ it is caught by SIMPLE_BRACKET). */
+ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0
+ && (cset->ncoll_syms || cset->nranges))
+ {
+ const int32_t *table = (const int32_t *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+ for (i = 0; i < SBC_MAX; ++i)
+ if (table[i] < 0)
+ re_set_fastmap (fastmap, icase, i);
+ }
+#endif /* _LIBC */
+
+ /* See if we have to start the match at all multibyte characters,
+ i.e. where we would not find an invalid sequence. This only
+ applies to multibyte character sets; for single byte character
+ sets, the SIMPLE_BRACKET again suffices. */
+ if (dfa->mb_cur_max > 1
+ && (cset->nchar_classes || cset->non_match || cset->nranges
+#ifdef _LIBC
+ || cset->nequiv_classes
+#endif /* _LIBC */
+ ))
+ {
+ unsigned char c = 0;
+ do
+ {
+ mbstate_t mbs;
+ memset (&mbs, 0, sizeof (mbs));
+ if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2)
+ re_set_fastmap (fastmap, false, (int) c);
+ }
+ while (++c != 0);
+ }
+
+ else
+ {
+ /* ... Else catch all bytes which can start the mbchars. */
+ for (i = 0; i < cset->nmbchars; ++i)
+ {
+ char buf[256];
+ mbstate_t state;
+ memset (&state, '\0', sizeof (state));
+ if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
+ re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
+ if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
+ {
+ if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state)
+ != (size_t) -1)
+ re_set_fastmap (fastmap, false, *(unsigned char *) buf);
+ }
+ }
+ }
+ }
+ else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE)
+ {
+ memset (fastmap, '\1', sizeof (char) * SBC_MAX);
+ if (type == END_OF_RE)
+ bufp->can_be_null = 1;
+ return;
+ }
+ }
+}
+
+/* Entry point for POSIX code. */
+/* regcomp takes a regular expression as a string and compiles it.
+
+ PREG is a regex_t *. We do not expect any fields to be initialized,
+ since POSIX says we shouldn't. Thus, we set
+
+ 'buffer' to the compiled pattern;
+ 'used' to the length of the compiled pattern;
+ 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the
+ REG_EXTENDED bit in CFLAGS is set; otherwise, to
+ RE_SYNTAX_POSIX_BASIC;
+ 'newline_anchor' to REG_NEWLINE being set in CFLAGS;
+ 'fastmap' to an allocated space for the fastmap;
+ 'fastmap_accurate' to zero;
+ 're_nsub' to the number of subexpressions in PATTERN.
+
+ PATTERN is the address of the pattern string.
+
+ CFLAGS is a series of bits which affect compilation.
+
+ If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
+ use POSIX basic syntax.
+
+ If REG_NEWLINE is set, then . and [^...] don't match newline.
+ Also, regexec will try a match beginning after every newline.
+
+ If REG_ICASE is set, then we considers upper- and lowercase
+ versions of letters to be equivalent when matching.
+
+ If REG_NOSUB is set, then when PREG is passed to regexec, that
+ routine will report only success or failure, and nothing about the
+ registers.
+
+ It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
+ the return codes and their meanings.) */
+
+int
+regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags)
+{
+ reg_errcode_t ret;
+ reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED
+ : RE_SYNTAX_POSIX_BASIC);
+
+ preg->buffer = NULL;
+ preg->allocated = 0;
+ preg->used = 0;
+
+ /* Try to allocate space for the fastmap. */
+ preg->fastmap = re_malloc (char, SBC_MAX);
+ if (__glibc_unlikely (preg->fastmap == NULL))
+ return REG_ESPACE;
+
+ syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0;
+
+ /* If REG_NEWLINE is set, newlines are treated differently. */
+ if (cflags & REG_NEWLINE)
+ { /* REG_NEWLINE implies neither . nor [^...] match newline. */
+ syntax &= ~RE_DOT_NEWLINE;
+ syntax |= RE_HAT_LISTS_NOT_NEWLINE;
+ /* It also changes the matching behavior. */
+ preg->newline_anchor = 1;
+ }
+ else
+ preg->newline_anchor = 0;
+ preg->no_sub = !!(cflags & REG_NOSUB);
+ preg->translate = NULL;
+
+ ret = re_compile_internal (preg, pattern, strlen (pattern), syntax);
+
+ /* POSIX doesn't distinguish between an unmatched open-group and an
+ unmatched close-group: both are REG_EPAREN. */
+ if (ret == REG_ERPAREN)
+ ret = REG_EPAREN;
+
+ /* We have already checked preg->fastmap != NULL. */
+ if (__glibc_likely (ret == REG_NOERROR))
+ /* Compute the fastmap now, since regexec cannot modify the pattern
+ buffer. This function never fails in this implementation. */
+ (void) re_compile_fastmap (preg);
+ else
+ {
+ /* Some error occurred while compiling the expression. */
+ re_free (preg->fastmap);
+ preg->fastmap = NULL;
+ }
+
+ return (int) ret;
+}
+libc_hidden_def (__regcomp)
+weak_alias (__regcomp, regcomp)
+
+/* Returns a message corresponding to an error code, ERRCODE, returned
+ from either regcomp or regexec. We don't use PREG here. */
+
+size_t
+regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf,
+ size_t errbuf_size)
+{
+ const char *msg;
+ size_t msg_size;
+ int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0];
+
+ if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes))
+ /* Only error codes returned by the rest of the code should be passed
+ to this routine. If we are given anything else, or if other regex
+ code generates an invalid error code, then the program has a bug.
+ Dump core so we can fix it. */
+ abort ();
+
+ msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]);
+
+ msg_size = strlen (msg) + 1; /* Includes the null. */
+
+ if (__glibc_likely (errbuf_size != 0))
+ {
+ size_t cpy_size = msg_size;
+ if (__glibc_unlikely (msg_size > errbuf_size))
+ {
+ cpy_size = errbuf_size - 1;
+ errbuf[cpy_size] = '\0';
+ }
+ memcpy (errbuf, msg, cpy_size);
+ }
+
+ return msg_size;
+}
+weak_alias (__regerror, regerror)
+
+
+/* This static array is used for the map to single-byte characters when
+ UTF-8 is used. Otherwise we would allocate memory just to initialize
+ it the same all the time. UTF-8 is the preferred encoding so this is
+ a worthwhile optimization. */
+static const bitset_t utf8_sb_map =
+{
+ /* Set the first 128 bits. */
+#if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__
+ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX
+#else
+# if 4 * BITSET_WORD_BITS < ASCII_CHARS
+# error "bitset_word_t is narrower than 32 bits"
+# elif 3 * BITSET_WORD_BITS < ASCII_CHARS
+ BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX,
+# elif 2 * BITSET_WORD_BITS < ASCII_CHARS
+ BITSET_WORD_MAX, BITSET_WORD_MAX,
+# elif 1 * BITSET_WORD_BITS < ASCII_CHARS
+ BITSET_WORD_MAX,
+# endif
+ (BITSET_WORD_MAX
+ >> (SBC_MAX % BITSET_WORD_BITS == 0
+ ? 0
+ : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS))
+#endif
+};
+
+
+static void
+free_dfa_content (re_dfa_t *dfa)
+{
+ Idx i, j;
+
+ if (dfa->nodes)
+ for (i = 0; i < dfa->nodes_len; ++i)
+ free_token (dfa->nodes + i);
+ re_free (dfa->nexts);
+ for (i = 0; i < dfa->nodes_len; ++i)
+ {
+ if (dfa->eclosures != NULL)
+ re_node_set_free (dfa->eclosures + i);
+ if (dfa->inveclosures != NULL)
+ re_node_set_free (dfa->inveclosures + i);
+ if (dfa->edests != NULL)
+ re_node_set_free (dfa->edests + i);
+ }
+ re_free (dfa->edests);
+ re_free (dfa->eclosures);
+ re_free (dfa->inveclosures);
+ re_free (dfa->nodes);
+
+ if (dfa->state_table)
+ for (i = 0; i <= dfa->state_hash_mask; ++i)
+ {
+ struct re_state_table_entry *entry = dfa->state_table + i;
+ for (j = 0; j < entry->num; ++j)
+ {
+ re_dfastate_t *state = entry->array[j];
+ free_state (state);
+ }
+ re_free (entry->array);
+ }
+ re_free (dfa->state_table);
+ if (dfa->sb_char != utf8_sb_map)
+ re_free (dfa->sb_char);
+ re_free (dfa->subexp_map);
+#ifdef DEBUG
+ re_free (dfa->re_str);
+#endif
+
+ re_free (dfa);
+}
+
+
+/* Free dynamically allocated space used by PREG. */
+
+void
+regfree (regex_t *preg)
+{
+ re_dfa_t *dfa = preg->buffer;
+ if (__glibc_likely (dfa != NULL))
+ {
+ lock_fini (dfa->lock);
+ free_dfa_content (dfa);
+ }
+ preg->buffer = NULL;
+ preg->allocated = 0;
+
+ re_free (preg->fastmap);
+ preg->fastmap = NULL;
+
+ re_free (preg->translate);
+ preg->translate = NULL;
+}
+libc_hidden_def (__regfree)
+weak_alias (__regfree, regfree)
+
+/* Entry points compatible with 4.2 BSD regex library. We don't define
+ them unless specifically requested. */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+
+/* BSD has one and only one pattern buffer. */
+static struct re_pattern_buffer re_comp_buf;
+
+char *
+# ifdef _LIBC
+/* Make these definitions weak in libc, so POSIX programs can redefine
+ these names if they don't use our functions, and still use
+ regcomp/regexec above without link errors. */
+weak_function
+# endif
+re_comp (const char *s)
+{
+ reg_errcode_t ret;
+ char *fastmap;
+
+ if (!s)
+ {
+ if (!re_comp_buf.buffer)
+ return gettext ("No previous regular expression");
+ return 0;
+ }
+
+ if (re_comp_buf.buffer)
+ {
+ fastmap = re_comp_buf.fastmap;
+ re_comp_buf.fastmap = NULL;
+ __regfree (&re_comp_buf);
+ memset (&re_comp_buf, '\0', sizeof (re_comp_buf));
+ re_comp_buf.fastmap = fastmap;
+ }
+
+ if (re_comp_buf.fastmap == NULL)
+ {
+ re_comp_buf.fastmap = re_malloc (char, SBC_MAX);
+ if (re_comp_buf.fastmap == NULL)
+ return (char *) gettext (__re_error_msgid
+ + __re_error_msgid_idx[(int) REG_ESPACE]);
+ }
+
+ /* Since 're_exec' always passes NULL for the 'regs' argument, we
+ don't need to initialize the pattern buffer fields which affect it. */
+
+ /* Match anchors at newlines. */
+ re_comp_buf.newline_anchor = 1;
+
+ ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options);
+
+ if (!ret)
+ return NULL;
+
+ /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */
+ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]);
+}
+
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ __regfree (&re_comp_buf);
+}
+#endif
+
+#endif /* _REGEX_RE_COMP */
+
+/* Internal entry point.
+ Compile the regular expression PATTERN, whose length is LENGTH.
+ SYNTAX indicate regular expression's syntax. */
+
+static reg_errcode_t
+re_compile_internal (regex_t *preg, const char * pattern, size_t length,
+ reg_syntax_t syntax)
+{
+ reg_errcode_t err = REG_NOERROR;
+ re_dfa_t *dfa;
+ re_string_t regexp;
+
+ /* Initialize the pattern buffer. */
+ preg->fastmap_accurate = 0;
+ preg->syntax = syntax;
+ preg->not_bol = preg->not_eol = 0;
+ preg->used = 0;
+ preg->re_nsub = 0;
+ preg->can_be_null = 0;
+ preg->regs_allocated = REGS_UNALLOCATED;
+
+ /* Initialize the dfa. */
+ dfa = preg->buffer;
+ if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t)))
+ {
+ /* If zero allocated, but buffer is non-null, try to realloc
+ enough space. This loses if buffer's address is bogus, but
+ that is the user's responsibility. If ->buffer is NULL this
+ is a simple allocation. */
+ dfa = re_realloc (preg->buffer, re_dfa_t, 1);
+ if (dfa == NULL)
+ return REG_ESPACE;
+ preg->allocated = sizeof (re_dfa_t);
+ preg->buffer = dfa;
+ }
+ preg->used = sizeof (re_dfa_t);
+
+ err = init_dfa (dfa, length);
+ if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0))
+ err = REG_ESPACE;
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ free_dfa_content (dfa);
+ preg->buffer = NULL;
+ preg->allocated = 0;
+ return err;
+ }
+#ifdef DEBUG
+ /* Note: length+1 will not overflow since it is checked in init_dfa. */
+ dfa->re_str = re_malloc (char, length + 1);
+ strncpy (dfa->re_str, pattern, length + 1);
+#endif
+
+ err = re_string_construct (&regexp, pattern, length, preg->translate,
+ (syntax & RE_ICASE) != 0, dfa);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_compile_internal_free_return:
+ free_workarea_compile (preg);
+ re_string_destruct (&regexp);
+ lock_fini (dfa->lock);
+ free_dfa_content (dfa);
+ preg->buffer = NULL;
+ preg->allocated = 0;
+ return err;
+ }
+
+ /* Parse the regular expression, and build a structure tree. */
+ preg->re_nsub = 0;
+ dfa->str_tree = parse (&regexp, preg, syntax, &err);
+ if (__glibc_unlikely (dfa->str_tree == NULL))
+ goto re_compile_internal_free_return;
+
+ /* Analyze the tree and create the nfa. */
+ err = analyze (preg);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto re_compile_internal_free_return;
+
+ /* If possible, do searching in single byte encoding to speed things up. */
+ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL)
+ optimize_utf8 (dfa);
+
+ /* Then create the initial state of the dfa. */
+ err = create_initial_state (dfa);
+
+ /* Release work areas. */
+ free_workarea_compile (preg);
+ re_string_destruct (&regexp);
+
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ lock_fini (dfa->lock);
+ free_dfa_content (dfa);
+ preg->buffer = NULL;
+ preg->allocated = 0;
+ }
+
+ return err;
+}
+
+/* Initialize DFA. We use the length of the regular expression PAT_LEN
+ as the initial length of some arrays. */
+
+static reg_errcode_t
+init_dfa (re_dfa_t *dfa, size_t pat_len)
+{
+ __re_size_t table_size;
+#ifndef _LIBC
+ const char *codeset_name;
+#endif
+ size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t));
+ size_t max_object_size =
+ MAX (sizeof (struct re_state_table_entry),
+ MAX (sizeof (re_token_t),
+ MAX (sizeof (re_node_set),
+ MAX (sizeof (regmatch_t),
+ max_i18n_object_size))));
+
+ memset (dfa, '\0', sizeof (re_dfa_t));
+
+ /* Force allocation of str_tree_storage the first time. */
+ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
+
+ /* Avoid overflows. The extra "/ 2" is for the table_size doubling
+ calculation below, and for similar doubling calculations
+ elsewhere. And it's <= rather than <, because some of the
+ doubling calculations add 1 afterwards. */
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2
+ <= pat_len))
+ return REG_ESPACE;
+
+ dfa->nodes_alloc = pat_len + 1;
+ dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc);
+
+ /* table_size = 2 ^ ceil(log pat_len) */
+ for (table_size = 1; ; table_size <<= 1)
+ if (table_size > pat_len)
+ break;
+
+ dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size);
+ dfa->state_hash_mask = table_size - 1;
+
+ dfa->mb_cur_max = MB_CUR_MAX;
+#ifdef _LIBC
+ if (dfa->mb_cur_max == 6
+ && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0)
+ dfa->is_utf8 = 1;
+ dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII)
+ != 0);
+#else
+ codeset_name = nl_langinfo (CODESET);
+ if ((codeset_name[0] == 'U' || codeset_name[0] == 'u')
+ && (codeset_name[1] == 'T' || codeset_name[1] == 't')
+ && (codeset_name[2] == 'F' || codeset_name[2] == 'f')
+ && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0)
+ dfa->is_utf8 = 1;
+
+ /* We check exhaustively in the loop below if this charset is a
+ superset of ASCII. */
+ dfa->map_notascii = 0;
+#endif
+
+ if (dfa->mb_cur_max > 1)
+ {
+ if (dfa->is_utf8)
+ dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map;
+ else
+ {
+ int i, j, ch;
+
+ dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+ if (__glibc_unlikely (dfa->sb_char == NULL))
+ return REG_ESPACE;
+
+ /* Set the bits corresponding to single byte chars. */
+ for (i = 0, ch = 0; i < BITSET_WORDS; ++i)
+ for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+ {
+ wint_t wch = __btowc (ch);
+ if (wch != WEOF)
+ dfa->sb_char[i] |= (bitset_word_t) 1 << j;
+#ifndef _LIBC
+ if (isascii (ch) && wch != ch)
+ dfa->map_notascii = 1;
+#endif
+ }
+ }
+ }
+
+ if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL))
+ return REG_ESPACE;
+ return REG_NOERROR;
+}
+
+/* Initialize WORD_CHAR table, which indicate which character is
+ "word". In this case "word" means that it is the word construction
+ character used by some operators like "\<", "\>", etc. */
+
+static void
+init_word_char (re_dfa_t *dfa)
+{
+ int i = 0;
+ int j;
+ int ch = 0;
+ dfa->word_ops_used = 1;
+ if (__glibc_likely (dfa->map_notascii == 0))
+ {
+ bitset_word_t bits0 = 0x00000000;
+ bitset_word_t bits1 = 0x03ff0000;
+ bitset_word_t bits2 = 0x87fffffe;
+ bitset_word_t bits3 = 0x07fffffe;
+ if (BITSET_WORD_BITS == 64)
+ {
+ /* Pacify gcc -Woverflow on 32-bit platformns. */
+ dfa->word_char[0] = bits1 << 31 << 1 | bits0;
+ dfa->word_char[1] = bits3 << 31 << 1 | bits2;
+ i = 2;
+ }
+ else if (BITSET_WORD_BITS == 32)
+ {
+ dfa->word_char[0] = bits0;
+ dfa->word_char[1] = bits1;
+ dfa->word_char[2] = bits2;
+ dfa->word_char[3] = bits3;
+ i = 4;
+ }
+ else
+ goto general_case;
+ ch = 128;
+
+ if (__glibc_likely (dfa->is_utf8))
+ {
+ memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8);
+ return;
+ }
+ }
+
+ general_case:
+ for (; i < BITSET_WORDS; ++i)
+ for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch)
+ if (isalnum (ch) || ch == '_')
+ dfa->word_char[i] |= (bitset_word_t) 1 << j;
+}
+
+/* Free the work area which are only used while compiling. */
+
+static void
+free_workarea_compile (regex_t *preg)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_storage_t *storage, *next;
+ for (storage = dfa->str_tree_storage; storage; storage = next)
+ {
+ next = storage->next;
+ re_free (storage);
+ }
+ dfa->str_tree_storage = NULL;
+ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE;
+ dfa->str_tree = NULL;
+ re_free (dfa->org_indices);
+ dfa->org_indices = NULL;
+}
+
+/* Create initial states for all contexts. */
+
+static reg_errcode_t
+create_initial_state (re_dfa_t *dfa)
+{
+ Idx first, i;
+ reg_errcode_t err;
+ re_node_set init_nodes;
+
+ /* Initial states have the epsilon closure of the node which is
+ the first node of the regular expression. */
+ first = dfa->str_tree->first->node_idx;
+ dfa->init_node = first;
+ err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ /* The back-references which are in initial states can epsilon transit,
+ since in this case all of the subexpressions can be null.
+ Then we add epsilon closures of the nodes which are the next nodes of
+ the back-references. */
+ if (dfa->nbackref > 0)
+ for (i = 0; i < init_nodes.nelem; ++i)
+ {
+ Idx node_idx = init_nodes.elems[i];
+ re_token_type_t type = dfa->nodes[node_idx].type;
+
+ Idx clexp_idx;
+ if (type != OP_BACK_REF)
+ continue;
+ for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx)
+ {
+ re_token_t *clexp_node;
+ clexp_node = dfa->nodes + init_nodes.elems[clexp_idx];
+ if (clexp_node->type == OP_CLOSE_SUBEXP
+ && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx)
+ break;
+ }
+ if (clexp_idx == init_nodes.nelem)
+ continue;
+
+ if (type == OP_BACK_REF)
+ {
+ Idx dest_idx = dfa->edests[node_idx].elems[0];
+ if (!re_node_set_contains (&init_nodes, dest_idx))
+ {
+ reg_errcode_t merge_err
+ = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx);
+ if (merge_err != REG_NOERROR)
+ return merge_err;
+ i = 0;
+ }
+ }
+ }
+
+ /* It must be the first time to invoke acquire_state. */
+ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0);
+ /* We don't check ERR here, since the initial state must not be NULL. */
+ if (__glibc_unlikely (dfa->init_state == NULL))
+ return err;
+ if (dfa->init_state->has_constraint)
+ {
+ dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes,
+ CONTEXT_WORD);
+ dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes,
+ CONTEXT_NEWLINE);
+ dfa->init_state_begbuf = re_acquire_state_context (&err, dfa,
+ &init_nodes,
+ CONTEXT_NEWLINE
+ | CONTEXT_BEGBUF);
+ if (__glibc_unlikely (dfa->init_state_word == NULL
+ || dfa->init_state_nl == NULL
+ || dfa->init_state_begbuf == NULL))
+ return err;
+ }
+ else
+ dfa->init_state_word = dfa->init_state_nl
+ = dfa->init_state_begbuf = dfa->init_state;
+
+ re_node_set_free (&init_nodes);
+ return REG_NOERROR;
+}
+
+/* If it is possible to do searching in single byte encoding instead of UTF-8
+ to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change
+ DFA nodes where needed. */
+
+static void
+optimize_utf8 (re_dfa_t *dfa)
+{
+ Idx node;
+ int i;
+ bool mb_chars = false;
+ bool has_period = false;
+
+ for (node = 0; node < dfa->nodes_len; ++node)
+ switch (dfa->nodes[node].type)
+ {
+ case CHARACTER:
+ if (dfa->nodes[node].opr.c >= ASCII_CHARS)
+ mb_chars = true;
+ break;
+ case ANCHOR:
+ switch (dfa->nodes[node].opr.ctx_type)
+ {
+ case LINE_FIRST:
+ case LINE_LAST:
+ case BUF_FIRST:
+ case BUF_LAST:
+ break;
+ default:
+ /* Word anchors etc. cannot be handled. It's okay to test
+ opr.ctx_type since constraints (for all DFA nodes) are
+ created by ORing one or more opr.ctx_type values. */
+ return;
+ }
+ break;
+ case OP_PERIOD:
+ has_period = true;
+ break;
+ case OP_BACK_REF:
+ case OP_ALT:
+ case END_OF_RE:
+ case OP_DUP_ASTERISK:
+ case OP_OPEN_SUBEXP:
+ case OP_CLOSE_SUBEXP:
+ break;
+ case COMPLEX_BRACKET:
+ return;
+ case SIMPLE_BRACKET:
+ /* Just double check. */
+ {
+ int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0
+ ? 0
+ : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS);
+ for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i)
+ {
+ if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0)
+ return;
+ rshift = 0;
+ }
+ }
+ break;
+ default:
+ abort ();
+ }
+
+ if (mb_chars || has_period)
+ for (node = 0; node < dfa->nodes_len; ++node)
+ {
+ if (dfa->nodes[node].type == CHARACTER
+ && dfa->nodes[node].opr.c >= ASCII_CHARS)
+ dfa->nodes[node].mb_partial = 0;
+ else if (dfa->nodes[node].type == OP_PERIOD)
+ dfa->nodes[node].type = OP_UTF8_PERIOD;
+ }
+
+ /* The search can be in single byte locale. */
+ dfa->mb_cur_max = 1;
+ dfa->is_utf8 = 0;
+ dfa->has_mb_node = dfa->nbackref > 0 || has_period;
+}
+
+/* Analyze the structure tree, and calculate "first", "next", "edest",
+ "eclosure", and "inveclosure". */
+
+static reg_errcode_t
+analyze (regex_t *preg)
+{
+ re_dfa_t *dfa = preg->buffer;
+ reg_errcode_t ret;
+
+ /* Allocate arrays. */
+ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc);
+ dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc);
+ dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc);
+ dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc);
+ if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL
+ || dfa->edests == NULL || dfa->eclosures == NULL))
+ return REG_ESPACE;
+
+ dfa->subexp_map = re_malloc (Idx, preg->re_nsub);
+ if (dfa->subexp_map != NULL)
+ {
+ Idx i;
+ for (i = 0; i < preg->re_nsub; i++)
+ dfa->subexp_map[i] = i;
+ preorder (dfa->str_tree, optimize_subexps, dfa);
+ for (i = 0; i < preg->re_nsub; i++)
+ if (dfa->subexp_map[i] != i)
+ break;
+ if (i == preg->re_nsub)
+ {
+ re_free (dfa->subexp_map);
+ dfa->subexp_map = NULL;
+ }
+ }
+
+ ret = postorder (dfa->str_tree, lower_subexps, preg);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ ret = postorder (dfa->str_tree, calc_first, dfa);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ preorder (dfa->str_tree, calc_next, dfa);
+ ret = preorder (dfa->str_tree, link_nfa_nodes, dfa);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ ret = calc_eclosure (dfa);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+
+ /* We only need this during the prune_impossible_nodes pass in regexec.c;
+ skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */
+ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match)
+ || dfa->nbackref)
+ {
+ dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len);
+ if (__glibc_unlikely (dfa->inveclosures == NULL))
+ return REG_ESPACE;
+ ret = calc_inveclosure (dfa);
+ }
+
+ return ret;
+}
+
+/* Our parse trees are very unbalanced, so we cannot use a stack to
+ implement parse tree visits. Instead, we use parent pointers and
+ some hairy code in these two functions. */
+static reg_errcode_t
+postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
+ void *extra)
+{
+ bin_tree_t *node, *prev;
+
+ for (node = root; ; )
+ {
+ /* Descend down the tree, preferably to the left (or to the right
+ if that's the only child). */
+ while (node->left || node->right)
+ if (node->left)
+ node = node->left;
+ else
+ node = node->right;
+
+ do
+ {
+ reg_errcode_t err = fn (extra, node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ if (node->parent == NULL)
+ return REG_NOERROR;
+ prev = node;
+ node = node->parent;
+ }
+ /* Go up while we have a node that is reached from the right. */
+ while (node->right == prev || node->right == NULL);
+ node = node->right;
+ }
+}
+
+static reg_errcode_t
+preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)),
+ void *extra)
+{
+ bin_tree_t *node;
+
+ for (node = root; ; )
+ {
+ reg_errcode_t err = fn (extra, node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ /* Go to the left node, or up and to the right. */
+ if (node->left)
+ node = node->left;
+ else
+ {
+ bin_tree_t *prev = NULL;
+ while (node->right == prev || node->right == NULL)
+ {
+ prev = node;
+ node = node->parent;
+ if (!node)
+ return REG_NOERROR;
+ }
+ node = node->right;
+ }
+ }
+}
+
+/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell
+ re_search_internal to map the inner one's opr.idx to this one's. Adjust
+ backreferences as well. Requires a preorder visit. */
+static reg_errcode_t
+optimize_subexps (void *extra, bin_tree_t *node)
+{
+ re_dfa_t *dfa = (re_dfa_t *) extra;
+
+ if (node->token.type == OP_BACK_REF && dfa->subexp_map)
+ {
+ int idx = node->token.opr.idx;
+ node->token.opr.idx = dfa->subexp_map[idx];
+ dfa->used_bkref_map |= 1 << node->token.opr.idx;
+ }
+
+ else if (node->token.type == SUBEXP
+ && node->left && node->left->token.type == SUBEXP)
+ {
+ Idx other_idx = node->left->token.opr.idx;
+
+ node->left = node->left->left;
+ if (node->left)
+ node->left->parent = node;
+
+ dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx];
+ if (other_idx < BITSET_WORD_BITS)
+ dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx);
+ }
+
+ return REG_NOERROR;
+}
+
+/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation
+ of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */
+static reg_errcode_t
+lower_subexps (void *extra, bin_tree_t *node)
+{
+ regex_t *preg = (regex_t *) extra;
+ reg_errcode_t err = REG_NOERROR;
+
+ if (node->left && node->left->token.type == SUBEXP)
+ {
+ node->left = lower_subexp (&err, preg, node->left);
+ if (node->left)
+ node->left->parent = node;
+ }
+ if (node->right && node->right->token.type == SUBEXP)
+ {
+ node->right = lower_subexp (&err, preg, node->right);
+ if (node->right)
+ node->right->parent = node;
+ }
+
+ return err;
+}
+
+static bin_tree_t *
+lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_t *body = node->left;
+ bin_tree_t *op, *cls, *tree1, *tree;
+
+ if (preg->no_sub
+ /* We do not optimize empty subexpressions, because otherwise we may
+ have bad CONCAT nodes with NULL children. This is obviously not
+ very common, so we do not lose much. An example that triggers
+ this case is the sed "script" /\(\)/x. */
+ && node->left != NULL
+ && (node->token.opr.idx >= BITSET_WORD_BITS
+ || !(dfa->used_bkref_map
+ & ((bitset_word_t) 1 << node->token.opr.idx))))
+ return node->left;
+
+ /* Convert the SUBEXP node to the concatenation of an
+ OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */
+ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP);
+ cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP);
+ tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls;
+ tree = create_tree (dfa, op, tree1, CONCAT);
+ if (__glibc_unlikely (tree == NULL || tree1 == NULL
+ || op == NULL || cls == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+
+ op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx;
+ op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp;
+ return tree;
+}
+
+/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton
+ nodes. Requires a postorder visit. */
+static reg_errcode_t
+calc_first (void *extra, bin_tree_t *node)
+{
+ re_dfa_t *dfa = (re_dfa_t *) extra;
+ if (node->token.type == CONCAT)
+ {
+ node->first = node->left->first;
+ node->node_idx = node->left->node_idx;
+ }
+ else
+ {
+ node->first = node;
+ node->node_idx = re_dfa_add_node (dfa, node->token);
+ if (__glibc_unlikely (node->node_idx == -1))
+ return REG_ESPACE;
+ if (node->token.type == ANCHOR)
+ dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type;
+ }
+ return REG_NOERROR;
+}
+
+/* Pass 2: compute NEXT on the tree. Preorder visit. */
+static reg_errcode_t
+calc_next (void *extra, bin_tree_t *node)
+{
+ switch (node->token.type)
+ {
+ case OP_DUP_ASTERISK:
+ node->left->next = node;
+ break;
+ case CONCAT:
+ node->left->next = node->right->first;
+ node->right->next = node->next;
+ break;
+ default:
+ if (node->left)
+ node->left->next = node->next;
+ if (node->right)
+ node->right->next = node->next;
+ break;
+ }
+ return REG_NOERROR;
+}
+
+/* Pass 3: link all DFA nodes to their NEXT node (any order will do). */
+static reg_errcode_t
+link_nfa_nodes (void *extra, bin_tree_t *node)
+{
+ re_dfa_t *dfa = (re_dfa_t *) extra;
+ Idx idx = node->node_idx;
+ reg_errcode_t err = REG_NOERROR;
+
+ switch (node->token.type)
+ {
+ case CONCAT:
+ break;
+
+ case END_OF_RE:
+ DEBUG_ASSERT (node->next == NULL);
+ break;
+
+ case OP_DUP_ASTERISK:
+ case OP_ALT:
+ {
+ Idx left, right;
+ dfa->has_plural_match = 1;
+ if (node->left != NULL)
+ left = node->left->first->node_idx;
+ else
+ left = node->next->node_idx;
+ if (node->right != NULL)
+ right = node->right->first->node_idx;
+ else
+ right = node->next->node_idx;
+ DEBUG_ASSERT (left > -1);
+ DEBUG_ASSERT (right > -1);
+ err = re_node_set_init_2 (dfa->edests + idx, left, right);
+ }
+ break;
+
+ case ANCHOR:
+ case OP_OPEN_SUBEXP:
+ case OP_CLOSE_SUBEXP:
+ err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx);
+ break;
+
+ case OP_BACK_REF:
+ dfa->nexts[idx] = node->next->node_idx;
+ if (node->token.type == OP_BACK_REF)
+ err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]);
+ break;
+
+ default:
+ DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type));
+ dfa->nexts[idx] = node->next->node_idx;
+ break;
+ }
+
+ return err;
+}
+
+/* Duplicate the epsilon closure of the node ROOT_NODE.
+ Note that duplicated nodes have constraint INIT_CONSTRAINT in addition
+ to their own constraint. */
+
+static reg_errcode_t
+duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node,
+ Idx root_node, unsigned int init_constraint)
+{
+ Idx org_node, clone_node;
+ bool ok;
+ unsigned int constraint = init_constraint;
+ for (org_node = top_org_node, clone_node = top_clone_node;;)
+ {
+ Idx org_dest, clone_dest;
+ if (dfa->nodes[org_node].type == OP_BACK_REF)
+ {
+ /* If the back reference epsilon-transit, its destination must
+ also have the constraint. Then duplicate the epsilon closure
+ of the destination of the back reference, and store it in
+ edests of the back reference. */
+ org_dest = dfa->nexts[org_node];
+ re_node_set_empty (dfa->edests + clone_node);
+ clone_dest = duplicate_node (dfa, org_dest, constraint);
+ if (__glibc_unlikely (clone_dest == -1))
+ return REG_ESPACE;
+ dfa->nexts[clone_node] = dfa->nexts[org_node];
+ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+ else if (dfa->edests[org_node].nelem == 0)
+ {
+ /* In case of the node can't epsilon-transit, don't duplicate the
+ destination and store the original destination as the
+ destination of the node. */
+ dfa->nexts[clone_node] = dfa->nexts[org_node];
+ break;
+ }
+ else if (dfa->edests[org_node].nelem == 1)
+ {
+ /* In case of the node can epsilon-transit, and it has only one
+ destination. */
+ org_dest = dfa->edests[org_node].elems[0];
+ re_node_set_empty (dfa->edests + clone_node);
+ /* If the node is root_node itself, it means the epsilon closure
+ has a loop. Then tie it to the destination of the root_node. */
+ if (org_node == root_node && clone_node != org_node)
+ {
+ ok = re_node_set_insert (dfa->edests + clone_node, org_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ break;
+ }
+ /* In case the node has another constraint, append it. */
+ constraint |= dfa->nodes[org_node].constraint;
+ clone_dest = duplicate_node (dfa, org_dest, constraint);
+ if (__glibc_unlikely (clone_dest == -1))
+ return REG_ESPACE;
+ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+ else /* dfa->edests[org_node].nelem == 2 */
+ {
+ /* In case of the node can epsilon-transit, and it has two
+ destinations. In the bin_tree_t and DFA, that's '|' and '*'. */
+ org_dest = dfa->edests[org_node].elems[0];
+ re_node_set_empty (dfa->edests + clone_node);
+ /* Search for a duplicated node which satisfies the constraint. */
+ clone_dest = search_duplicated_node (dfa, org_dest, constraint);
+ if (clone_dest == -1)
+ {
+ /* There is no such duplicated node, create a new one. */
+ reg_errcode_t err;
+ clone_dest = duplicate_node (dfa, org_dest, constraint);
+ if (__glibc_unlikely (clone_dest == -1))
+ return REG_ESPACE;
+ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ err = duplicate_node_closure (dfa, org_dest, clone_dest,
+ root_node, constraint);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ else
+ {
+ /* There is a duplicated node which satisfies the constraint,
+ use it to avoid infinite loop. */
+ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+
+ org_dest = dfa->edests[org_node].elems[1];
+ clone_dest = duplicate_node (dfa, org_dest, constraint);
+ if (__glibc_unlikely (clone_dest == -1))
+ return REG_ESPACE;
+ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+ org_node = org_dest;
+ clone_node = clone_dest;
+ }
+ return REG_NOERROR;
+}
+
+/* Search for a node which is duplicated from the node ORG_NODE, and
+ satisfies the constraint CONSTRAINT. */
+
+static Idx
+search_duplicated_node (const re_dfa_t *dfa, Idx org_node,
+ unsigned int constraint)
+{
+ Idx idx;
+ for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx)
+ {
+ if (org_node == dfa->org_indices[idx]
+ && constraint == dfa->nodes[idx].constraint)
+ return idx; /* Found. */
+ }
+ return -1; /* Not found. */
+}
+
+/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT.
+ Return the index of the new node, or -1 if insufficient storage is
+ available. */
+
+static Idx
+duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint)
+{
+ Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]);
+ if (__glibc_likely (dup_idx != -1))
+ {
+ dfa->nodes[dup_idx].constraint = constraint;
+ dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint;
+ dfa->nodes[dup_idx].duplicated = 1;
+
+ /* Store the index of the original node. */
+ dfa->org_indices[dup_idx] = org_idx;
+ }
+ return dup_idx;
+}
+
+static reg_errcode_t
+calc_inveclosure (re_dfa_t *dfa)
+{
+ Idx src, idx;
+ bool ok;
+ for (idx = 0; idx < dfa->nodes_len; ++idx)
+ re_node_set_init_empty (dfa->inveclosures + idx);
+
+ for (src = 0; src < dfa->nodes_len; ++src)
+ {
+ Idx *elems = dfa->eclosures[src].elems;
+ for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx)
+ {
+ ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+ }
+
+ return REG_NOERROR;
+}
+
+/* Calculate "eclosure" for all the node in DFA. */
+
+static reg_errcode_t
+calc_eclosure (re_dfa_t *dfa)
+{
+ Idx node_idx;
+ bool incomplete;
+ DEBUG_ASSERT (dfa->nodes_len > 0);
+ incomplete = false;
+ /* For each nodes, calculate epsilon closure. */
+ for (node_idx = 0; ; ++node_idx)
+ {
+ reg_errcode_t err;
+ re_node_set eclosure_elem;
+ if (node_idx == dfa->nodes_len)
+ {
+ if (!incomplete)
+ break;
+ incomplete = false;
+ node_idx = 0;
+ }
+
+ DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1);
+
+ /* If we have already calculated, skip it. */
+ if (dfa->eclosures[node_idx].nelem != 0)
+ continue;
+ /* Calculate epsilon closure of 'node_idx'. */
+ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ if (dfa->eclosures[node_idx].nelem == 0)
+ {
+ incomplete = true;
+ re_node_set_free (&eclosure_elem);
+ }
+ }
+ return REG_NOERROR;
+}
+
+/* Calculate epsilon closure of NODE. */
+
+static reg_errcode_t
+calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root)
+{
+ reg_errcode_t err;
+ Idx i;
+ re_node_set eclosure;
+ bool incomplete = false;
+ err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ /* An epsilon closure includes itself. */
+ eclosure.elems[eclosure.nelem++] = node;
+
+ /* This indicates that we are calculating this node now.
+ We reference this value to avoid infinite loop. */
+ dfa->eclosures[node].nelem = -1;
+
+ /* If the current node has constraints, duplicate all nodes
+ since they must inherit the constraints. */
+ if (dfa->nodes[node].constraint
+ && dfa->edests[node].nelem
+ && !dfa->nodes[dfa->edests[node].elems[0]].duplicated)
+ {
+ err = duplicate_node_closure (dfa, node, node, node,
+ dfa->nodes[node].constraint);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+
+ /* Expand each epsilon destination nodes. */
+ if (IS_EPSILON_NODE(dfa->nodes[node].type))
+ for (i = 0; i < dfa->edests[node].nelem; ++i)
+ {
+ re_node_set eclosure_elem;
+ Idx edest = dfa->edests[node].elems[i];
+ /* If calculating the epsilon closure of 'edest' is in progress,
+ return intermediate result. */
+ if (dfa->eclosures[edest].nelem == -1)
+ {
+ incomplete = true;
+ continue;
+ }
+ /* If we haven't calculated the epsilon closure of 'edest' yet,
+ calculate now. Otherwise use calculated epsilon closure. */
+ if (dfa->eclosures[edest].nelem == 0)
+ {
+ err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ else
+ eclosure_elem = dfa->eclosures[edest];
+ /* Merge the epsilon closure of 'edest'. */
+ err = re_node_set_merge (&eclosure, &eclosure_elem);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ /* If the epsilon closure of 'edest' is incomplete,
+ the epsilon closure of this node is also incomplete. */
+ if (dfa->eclosures[edest].nelem == 0)
+ {
+ incomplete = true;
+ re_node_set_free (&eclosure_elem);
+ }
+ }
+
+ if (incomplete && !root)
+ dfa->eclosures[node].nelem = 0;
+ else
+ dfa->eclosures[node] = eclosure;
+ *new_set = eclosure;
+ return REG_NOERROR;
+}
+
+/* Functions for token which are used in the parser. */
+
+/* Fetch a token from INPUT.
+ We must not use this function inside bracket expressions. */
+
+static void
+fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax)
+{
+ re_string_skip_bytes (input, peek_token (result, input, syntax));
+}
+
+/* Peek a token from INPUT, and return the length of the token.
+ We must not use this function inside bracket expressions. */
+
+static int
+peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
+{
+ unsigned char c;
+
+ if (re_string_eoi (input))
+ {
+ token->type = END_OF_RE;
+ return 0;
+ }
+
+ c = re_string_peek_byte (input, 0);
+ token->opr.c = c;
+
+ token->word_char = 0;
+ token->mb_partial = 0;
+ if (input->mb_cur_max > 1
+ && !re_string_first_byte (input, re_string_cur_idx (input)))
+ {
+ token->type = CHARACTER;
+ token->mb_partial = 1;
+ return 1;
+ }
+ if (c == '\\')
+ {
+ unsigned char c2;
+ if (re_string_cur_idx (input) + 1 >= re_string_length (input))
+ {
+ token->type = BACK_SLASH;
+ return 1;
+ }
+
+ c2 = re_string_peek_byte_case (input, 1);
+ token->opr.c = c2;
+ token->type = CHARACTER;
+ if (input->mb_cur_max > 1)
+ {
+ wint_t wc = re_string_wchar_at (input,
+ re_string_cur_idx (input) + 1);
+ token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
+ }
+ else
+ token->word_char = IS_WORD_CHAR (c2) != 0;
+
+ switch (c2)
+ {
+ case '|':
+ if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR))
+ token->type = OP_ALT;
+ break;
+ case '1': case '2': case '3': case '4': case '5':
+ case '6': case '7': case '8': case '9':
+ if (!(syntax & RE_NO_BK_REFS))
+ {
+ token->type = OP_BACK_REF;
+ token->opr.idx = c2 - '1';
+ }
+ break;
+ case '<':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = WORD_FIRST;
+ }
+ break;
+ case '>':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = WORD_LAST;
+ }
+ break;
+ case 'b':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = WORD_DELIM;
+ }
+ break;
+ case 'B':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = NOT_WORD_DELIM;
+ }
+ break;
+ case 'w':
+ if (!(syntax & RE_NO_GNU_OPS))
+ token->type = OP_WORD;
+ break;
+ case 'W':
+ if (!(syntax & RE_NO_GNU_OPS))
+ token->type = OP_NOTWORD;
+ break;
+ case 's':
+ if (!(syntax & RE_NO_GNU_OPS))
+ token->type = OP_SPACE;
+ break;
+ case 'S':
+ if (!(syntax & RE_NO_GNU_OPS))
+ token->type = OP_NOTSPACE;
+ break;
+ case '`':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = BUF_FIRST;
+ }
+ break;
+ case '\'':
+ if (!(syntax & RE_NO_GNU_OPS))
+ {
+ token->type = ANCHOR;
+ token->opr.ctx_type = BUF_LAST;
+ }
+ break;
+ case '(':
+ if (!(syntax & RE_NO_BK_PARENS))
+ token->type = OP_OPEN_SUBEXP;
+ break;
+ case ')':
+ if (!(syntax & RE_NO_BK_PARENS))
+ token->type = OP_CLOSE_SUBEXP;
+ break;
+ case '+':
+ if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
+ token->type = OP_DUP_PLUS;
+ break;
+ case '?':
+ if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM))
+ token->type = OP_DUP_QUESTION;
+ break;
+ case '{':
+ if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
+ token->type = OP_OPEN_DUP_NUM;
+ break;
+ case '}':
+ if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES)))
+ token->type = OP_CLOSE_DUP_NUM;
+ break;
+ default:
+ break;
+ }
+ return 2;
+ }
+
+ token->type = CHARACTER;
+ if (input->mb_cur_max > 1)
+ {
+ wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input));
+ token->word_char = IS_WIDE_WORD_CHAR (wc) != 0;
+ }
+ else
+ token->word_char = IS_WORD_CHAR (token->opr.c);
+
+ switch (c)
+ {
+ case '\n':
+ if (syntax & RE_NEWLINE_ALT)
+ token->type = OP_ALT;
+ break;
+ case '|':
+ if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR))
+ token->type = OP_ALT;
+ break;
+ case '*':
+ token->type = OP_DUP_ASTERISK;
+ break;
+ case '+':
+ if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
+ token->type = OP_DUP_PLUS;
+ break;
+ case '?':
+ if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM))
+ token->type = OP_DUP_QUESTION;
+ break;
+ case '{':
+ if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+ token->type = OP_OPEN_DUP_NUM;
+ break;
+ case '}':
+ if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
+ token->type = OP_CLOSE_DUP_NUM;
+ break;
+ case '(':
+ if (syntax & RE_NO_BK_PARENS)
+ token->type = OP_OPEN_SUBEXP;
+ break;
+ case ')':
+ if (syntax & RE_NO_BK_PARENS)
+ token->type = OP_CLOSE_SUBEXP;
+ break;
+ case '[':
+ token->type = OP_OPEN_BRACKET;
+ break;
+ case '.':
+ token->type = OP_PERIOD;
+ break;
+ case '^':
+ if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE))
+ && re_string_cur_idx (input) != 0)
+ {
+ char prev = re_string_peek_byte (input, -1);
+ if (!(syntax & RE_NEWLINE_ALT) || prev != '\n')
+ break;
+ }
+ token->type = ANCHOR;
+ token->opr.ctx_type = LINE_FIRST;
+ break;
+ case '$':
+ if (!(syntax & RE_CONTEXT_INDEP_ANCHORS)
+ && re_string_cur_idx (input) + 1 != re_string_length (input))
+ {
+ re_token_t next;
+ re_string_skip_bytes (input, 1);
+ peek_token (&next, input, syntax);
+ re_string_skip_bytes (input, -1);
+ if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP)
+ break;
+ }
+ token->type = ANCHOR;
+ token->opr.ctx_type = LINE_LAST;
+ break;
+ default:
+ break;
+ }
+ return 1;
+}
+
+/* Peek a token from INPUT, and return the length of the token.
+ We must not use this function out of bracket expressions. */
+
+static int
+peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax)
+{
+ unsigned char c;
+ if (re_string_eoi (input))
+ {
+ token->type = END_OF_RE;
+ return 0;
+ }
+ c = re_string_peek_byte (input, 0);
+ token->opr.c = c;
+
+ if (input->mb_cur_max > 1
+ && !re_string_first_byte (input, re_string_cur_idx (input)))
+ {
+ token->type = CHARACTER;
+ return 1;
+ }
+
+ if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS)
+ && re_string_cur_idx (input) + 1 < re_string_length (input))
+ {
+ /* In this case, '\' escape a character. */
+ unsigned char c2;
+ re_string_skip_bytes (input, 1);
+ c2 = re_string_peek_byte (input, 0);
+ token->opr.c = c2;
+ token->type = CHARACTER;
+ return 1;
+ }
+ if (c == '[') /* '[' is a special char in a bracket exps. */
+ {
+ unsigned char c2;
+ int token_len;
+ if (re_string_cur_idx (input) + 1 < re_string_length (input))
+ c2 = re_string_peek_byte (input, 1);
+ else
+ c2 = 0;
+ token->opr.c = c2;
+ token_len = 2;
+ switch (c2)
+ {
+ case '.':
+ token->type = OP_OPEN_COLL_ELEM;
+ break;
+
+ case '=':
+ token->type = OP_OPEN_EQUIV_CLASS;
+ break;
+
+ case ':':
+ if (syntax & RE_CHAR_CLASSES)
+ {
+ token->type = OP_OPEN_CHAR_CLASS;
+ break;
+ }
+ FALLTHROUGH;
+ default:
+ token->type = CHARACTER;
+ token->opr.c = c;
+ token_len = 1;
+ break;
+ }
+ return token_len;
+ }
+ switch (c)
+ {
+ case ']':
+ token->type = OP_CLOSE_BRACKET;
+ break;
+ case '^':
+ token->type = OP_NON_MATCH_LIST;
+ break;
+ case '-':
+ /* In V7 Unix grep and Unix awk and mawk, [...---...]
+ (3 adjacent minus signs) stands for a single minus sign.
+ Support that without breaking anything else. */
+ if (! (re_string_cur_idx (input) + 2 < re_string_length (input)
+ && re_string_peek_byte (input, 1) == '-'
+ && re_string_peek_byte (input, 2) == '-'))
+ {
+ token->type = OP_CHARSET_RANGE;
+ break;
+ }
+ re_string_skip_bytes (input, 2);
+ FALLTHROUGH;
+ default:
+ token->type = CHARACTER;
+ }
+ return 1;
+}
+
+/* Functions for parser. */
+
+/* Entry point of the parser.
+ Parse the regular expression REGEXP and return the structure tree.
+ If an error occurs, ERR is set by error code, and return NULL.
+ This function build the following tree, from regular expression <reg_exp>:
+ CAT
+ / \
+ / \
+ <reg_exp> EOR
+
+ CAT means concatenation.
+ EOR means end of regular expression. */
+
+static bin_tree_t *
+parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax,
+ reg_errcode_t *err)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_t *tree, *eor, *root;
+ re_token_t current_token;
+ dfa->syntax = syntax;
+ fetch_token (&current_token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+ tree = parse_reg_exp (regexp, preg, &current_token, syntax, 0, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+ eor = create_tree (dfa, NULL, NULL, END_OF_RE);
+ if (tree != NULL)
+ root = create_tree (dfa, tree, eor, CONCAT);
+ else
+ root = eor;
+ if (__glibc_unlikely (eor == NULL || root == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ return root;
+}
+
+/* This function build the following tree, from regular expression
+ <branch1>|<branch2>:
+ ALT
+ / \
+ / \
+ <branch1> <branch2>
+
+ ALT means alternative, which represents the operator '|'. */
+
+static bin_tree_t *
+parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
+ reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_t *tree, *branch = NULL;
+ bitset_word_t initial_bkref_map = dfa->completed_bkref_map;
+ tree = parse_branch (regexp, preg, token, syntax, nest, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+
+ while (token->type == OP_ALT)
+ {
+ fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+ if (token->type != OP_ALT && token->type != END_OF_RE
+ && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
+ {
+ bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map;
+ dfa->completed_bkref_map = initial_bkref_map;
+ branch = parse_branch (regexp, preg, token, syntax, nest, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL))
+ {
+ if (tree != NULL)
+ postorder (tree, free_tree, NULL);
+ return NULL;
+ }
+ dfa->completed_bkref_map |= accumulated_bkref_map;
+ }
+ else
+ branch = NULL;
+ tree = create_tree (dfa, tree, branch, OP_ALT);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ }
+ return tree;
+}
+
+/* This function build the following tree, from regular expression
+ <exp1><exp2>:
+ CAT
+ / \
+ / \
+ <exp1> <exp2>
+
+ CAT means concatenation. */
+
+static bin_tree_t *
+parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token,
+ reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+ bin_tree_t *tree, *expr;
+ re_dfa_t *dfa = preg->buffer;
+ tree = parse_expression (regexp, preg, token, syntax, nest, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+
+ while (token->type != OP_ALT && token->type != END_OF_RE
+ && (nest == 0 || token->type != OP_CLOSE_SUBEXP))
+ {
+ expr = parse_expression (regexp, preg, token, syntax, nest, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL))
+ {
+ if (tree != NULL)
+ postorder (tree, free_tree, NULL);
+ return NULL;
+ }
+ if (tree != NULL && expr != NULL)
+ {
+ bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT);
+ if (newtree == NULL)
+ {
+ postorder (expr, free_tree, NULL);
+ postorder (tree, free_tree, NULL);
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ tree = newtree;
+ }
+ else if (tree == NULL)
+ tree = expr;
+ /* Otherwise expr == NULL, we don't need to create new tree. */
+ }
+ return tree;
+}
+
+/* This function build the following tree, from regular expression a*:
+ *
+ |
+ a
+*/
+
+static bin_tree_t *
+parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token,
+ reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_t *tree;
+ switch (token->type)
+ {
+ case CHARACTER:
+ tree = create_token_tree (dfa, NULL, NULL, token);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ if (dfa->mb_cur_max > 1)
+ {
+ while (!re_string_eoi (regexp)
+ && !re_string_first_byte (regexp, re_string_cur_idx (regexp)))
+ {
+ bin_tree_t *mbc_remain;
+ fetch_token (token, regexp, syntax);
+ mbc_remain = create_token_tree (dfa, NULL, NULL, token);
+ tree = create_tree (dfa, tree, mbc_remain, CONCAT);
+ if (__glibc_unlikely (mbc_remain == NULL || tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ }
+ }
+ break;
+
+ case OP_OPEN_SUBEXP:
+ tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+ break;
+
+ case OP_OPEN_BRACKET:
+ tree = parse_bracket_exp (regexp, dfa, token, syntax, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+ break;
+
+ case OP_BACK_REF:
+ if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx)))
+ {
+ *err = REG_ESUBREG;
+ return NULL;
+ }
+ dfa->used_bkref_map |= 1 << token->opr.idx;
+ tree = create_token_tree (dfa, NULL, NULL, token);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ ++dfa->nbackref;
+ dfa->has_mb_node = 1;
+ break;
+
+ case OP_OPEN_DUP_NUM:
+ if (syntax & RE_CONTEXT_INVALID_DUP)
+ {
+ *err = REG_BADRPT;
+ return NULL;
+ }
+ FALLTHROUGH;
+ case OP_DUP_ASTERISK:
+ case OP_DUP_PLUS:
+ case OP_DUP_QUESTION:
+ if (syntax & RE_CONTEXT_INVALID_OPS)
+ {
+ *err = REG_BADRPT;
+ return NULL;
+ }
+ else if (syntax & RE_CONTEXT_INDEP_OPS)
+ {
+ fetch_token (token, regexp, syntax);
+ return parse_expression (regexp, preg, token, syntax, nest, err);
+ }
+ FALLTHROUGH;
+ case OP_CLOSE_SUBEXP:
+ if ((token->type == OP_CLOSE_SUBEXP)
+ && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD))
+ {
+ *err = REG_ERPAREN;
+ return NULL;
+ }
+ FALLTHROUGH;
+ case OP_CLOSE_DUP_NUM:
+ /* We treat it as a normal character. */
+
+ /* Then we can these characters as normal characters. */
+ token->type = CHARACTER;
+ /* mb_partial and word_char bits should be initialized already
+ by peek_token. */
+ tree = create_token_tree (dfa, NULL, NULL, token);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ break;
+
+ case ANCHOR:
+ if ((token->opr.ctx_type
+ & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST))
+ && dfa->word_ops_used == 0)
+ init_word_char (dfa);
+ if (token->opr.ctx_type == WORD_DELIM
+ || token->opr.ctx_type == NOT_WORD_DELIM)
+ {
+ bin_tree_t *tree_first, *tree_last;
+ if (token->opr.ctx_type == WORD_DELIM)
+ {
+ token->opr.ctx_type = WORD_FIRST;
+ tree_first = create_token_tree (dfa, NULL, NULL, token);
+ token->opr.ctx_type = WORD_LAST;
+ }
+ else
+ {
+ token->opr.ctx_type = INSIDE_WORD;
+ tree_first = create_token_tree (dfa, NULL, NULL, token);
+ token->opr.ctx_type = INSIDE_NOTWORD;
+ }
+ tree_last = create_token_tree (dfa, NULL, NULL, token);
+ tree = create_tree (dfa, tree_first, tree_last, OP_ALT);
+ if (__glibc_unlikely (tree_first == NULL || tree_last == NULL
+ || tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ }
+ else
+ {
+ tree = create_token_tree (dfa, NULL, NULL, token);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ }
+ /* We must return here, since ANCHORs can't be followed
+ by repetition operators.
+ eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>",
+ it must not be "<ANCHOR(^)><REPEAT(*)>". */
+ fetch_token (token, regexp, syntax);
+ return tree;
+
+ case OP_PERIOD:
+ tree = create_token_tree (dfa, NULL, NULL, token);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ if (dfa->mb_cur_max > 1)
+ dfa->has_mb_node = 1;
+ break;
+
+ case OP_WORD:
+ case OP_NOTWORD:
+ tree = build_charclass_op (dfa, regexp->trans,
+ "alnum",
+ "_",
+ token->type == OP_NOTWORD, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+ break;
+
+ case OP_SPACE:
+ case OP_NOTSPACE:
+ tree = build_charclass_op (dfa, regexp->trans,
+ "space",
+ "",
+ token->type == OP_NOTSPACE, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL))
+ return NULL;
+ break;
+
+ case OP_ALT:
+ case END_OF_RE:
+ return NULL;
+
+ case BACK_SLASH:
+ *err = REG_EESCAPE;
+ return NULL;
+
+ default:
+ /* Must not happen? */
+ DEBUG_ASSERT (false);
+ return NULL;
+ }
+ fetch_token (token, regexp, syntax);
+
+ while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS
+ || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM)
+ {
+ bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token,
+ syntax, err);
+ if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL))
+ {
+ if (tree != NULL)
+ postorder (tree, free_tree, NULL);
+ return NULL;
+ }
+ tree = dup_tree;
+ /* In BRE consecutive duplications are not allowed. */
+ if ((syntax & RE_CONTEXT_INVALID_DUP)
+ && (token->type == OP_DUP_ASTERISK
+ || token->type == OP_OPEN_DUP_NUM))
+ {
+ if (tree != NULL)
+ postorder (tree, free_tree, NULL);
+ *err = REG_BADRPT;
+ return NULL;
+ }
+ }
+
+ return tree;
+}
+
+/* This function build the following tree, from regular expression
+ (<reg_exp>):
+ SUBEXP
+ |
+ <reg_exp>
+*/
+
+static bin_tree_t *
+parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token,
+ reg_syntax_t syntax, Idx nest, reg_errcode_t *err)
+{
+ re_dfa_t *dfa = preg->buffer;
+ bin_tree_t *tree;
+ size_t cur_nsub;
+ cur_nsub = preg->re_nsub++;
+
+ fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE);
+
+ /* The subexpression may be a null string. */
+ if (token->type == OP_CLOSE_SUBEXP)
+ tree = NULL;
+ else
+ {
+ tree = parse_reg_exp (regexp, preg, token, syntax, nest, err);
+ if (__glibc_unlikely (*err == REG_NOERROR
+ && token->type != OP_CLOSE_SUBEXP))
+ {
+ if (tree != NULL)
+ postorder (tree, free_tree, NULL);
+ *err = REG_EPAREN;
+ }
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+ }
+
+ if (cur_nsub <= '9' - '1')
+ dfa->completed_bkref_map |= 1 << cur_nsub;
+
+ tree = create_tree (dfa, tree, NULL, SUBEXP);
+ if (__glibc_unlikely (tree == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ tree->token.opr.idx = cur_nsub;
+ return tree;
+}
+
+/* This function parse repetition operators like "*", "+", "{1,3}" etc. */
+
+static bin_tree_t *
+parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa,
+ re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err)
+{
+ bin_tree_t *tree = NULL, *old_tree = NULL;
+ Idx i, start, end, start_idx = re_string_cur_idx (regexp);
+ re_token_t start_token = *token;
+
+ if (token->type == OP_OPEN_DUP_NUM)
+ {
+ end = 0;
+ start = fetch_number (regexp, token, syntax);
+ if (start == -1)
+ {
+ if (token->type == CHARACTER && token->opr.c == ',')
+ start = 0; /* We treat "{,m}" as "{0,m}". */
+ else
+ {
+ *err = REG_BADBR; /* <re>{} is invalid. */
+ return NULL;
+ }
+ }
+ if (__glibc_likely (start != -2))
+ {
+ /* We treat "{n}" as "{n,n}". */
+ end = ((token->type == OP_CLOSE_DUP_NUM) ? start
+ : ((token->type == CHARACTER && token->opr.c == ',')
+ ? fetch_number (regexp, token, syntax) : -2));
+ }
+ if (__glibc_unlikely (start == -2 || end == -2))
+ {
+ /* Invalid sequence. */
+ if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD)))
+ {
+ if (token->type == END_OF_RE)
+ *err = REG_EBRACE;
+ else
+ *err = REG_BADBR;
+
+ return NULL;
+ }
+
+ /* If the syntax bit is set, rollback. */
+ re_string_set_index (regexp, start_idx);
+ *token = start_token;
+ token->type = CHARACTER;
+ /* mb_partial and word_char bits should be already initialized by
+ peek_token. */
+ return elem;
+ }
+
+ if (__glibc_unlikely ((end != -1 && start > end)
+ || token->type != OP_CLOSE_DUP_NUM))
+ {
+ /* First number greater than second. */
+ *err = REG_BADBR;
+ return NULL;
+ }
+
+ if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end)))
+ {
+ *err = REG_ESIZE;
+ return NULL;
+ }
+ }
+ else
+ {
+ start = (token->type == OP_DUP_PLUS) ? 1 : 0;
+ end = (token->type == OP_DUP_QUESTION) ? 1 : -1;
+ }
+
+ fetch_token (token, regexp, syntax);
+
+ if (__glibc_unlikely (elem == NULL))
+ return NULL;
+ if (__glibc_unlikely (start == 0 && end == 0))
+ {
+ postorder (elem, free_tree, NULL);
+ return NULL;
+ }
+
+ /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */
+ if (__glibc_unlikely (start > 0))
+ {
+ tree = elem;
+ for (i = 2; i <= start; ++i)
+ {
+ elem = duplicate_tree (elem, dfa);
+ tree = create_tree (dfa, tree, elem, CONCAT);
+ if (__glibc_unlikely (elem == NULL || tree == NULL))
+ goto parse_dup_op_espace;
+ }
+
+ if (start == end)
+ return tree;
+
+ /* Duplicate ELEM before it is marked optional. */
+ elem = duplicate_tree (elem, dfa);
+ if (__glibc_unlikely (elem == NULL))
+ goto parse_dup_op_espace;
+ old_tree = tree;
+ }
+ else
+ old_tree = NULL;
+
+ if (elem->token.type == SUBEXP)
+ {
+ uintptr_t subidx = elem->token.opr.idx;
+ postorder (elem, mark_opt_subexp, (void *) subidx);
+ }
+
+ tree = create_tree (dfa, elem, NULL,
+ (end == -1 ? OP_DUP_ASTERISK : OP_ALT));
+ if (__glibc_unlikely (tree == NULL))
+ goto parse_dup_op_espace;
+
+ /* This loop is actually executed only when end != -1,
+ to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have
+ already created the start+1-th copy. */
+ if (TYPE_SIGNED (Idx) || end != -1)
+ for (i = start + 2; i <= end; ++i)
+ {
+ elem = duplicate_tree (elem, dfa);
+ tree = create_tree (dfa, tree, elem, CONCAT);
+ if (__glibc_unlikely (elem == NULL || tree == NULL))
+ goto parse_dup_op_espace;
+
+ tree = create_tree (dfa, tree, NULL, OP_ALT);
+ if (__glibc_unlikely (tree == NULL))
+ goto parse_dup_op_espace;
+ }
+
+ if (old_tree)
+ tree = create_tree (dfa, old_tree, tree, CONCAT);
+
+ return tree;
+
+ parse_dup_op_espace:
+ *err = REG_ESPACE;
+ return NULL;
+}
+
+/* Size of the names for collating symbol/equivalence_class/character_class.
+ I'm not sure, but maybe enough. */
+#define BRACKET_NAME_BUF_SIZE 32
+
+#ifndef _LIBC
+
+/* Convert the byte B to the corresponding wide character. In a
+ unibyte locale, treat B as itself. In a multibyte locale, return
+ WEOF if B is an encoding error. */
+static wint_t
+parse_byte (unsigned char b, re_dfa_t const *dfa)
+{
+ return dfa->mb_cur_max > 1 ? __btowc (b) : b;
+}
+
+/* Local function for parse_bracket_exp used in _LIBC environment.
+ Build the range expression which starts from START_ELEM, and ends
+ at END_ELEM. The result are written to MBCSET and SBCSET.
+ RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+ mbcset->range_ends, is a pointer argument since we may
+ update it. */
+
+static reg_errcode_t
+build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
+ bracket_elem_t *start_elem, bracket_elem_t *end_elem,
+ re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules,
+ const unsigned char *collseqmb, const char *collseqwc,
+ int_fast32_t table_size, const void *symb_table,
+ const unsigned char *extra)
+{
+ /* Equivalence Classes and Character Classes can't be a range start/end. */
+ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS
+ || start_elem->type == CHAR_CLASS
+ || end_elem->type == EQUIV_CLASS
+ || end_elem->type == CHAR_CLASS))
+ return REG_ERANGE;
+
+ /* We can handle no multi character collating elements without libc
+ support. */
+ if (__glibc_unlikely ((start_elem->type == COLL_SYM
+ && strlen ((char *) start_elem->opr.name) > 1)
+ || (end_elem->type == COLL_SYM
+ && strlen ((char *) end_elem->opr.name) > 1)))
+ return REG_ECOLLATE;
+
+ unsigned int
+ start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch
+ : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0]
+ : 0)),
+ end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch
+ : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0]
+ : 0));
+ wint_t
+ start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM)
+ ? parse_byte (start_ch, dfa) : start_elem->opr.wch),
+ end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM)
+ ? parse_byte (end_ch, dfa) : end_elem->opr.wch);
+
+ if (start_wc == WEOF || end_wc == WEOF)
+ return REG_ECOLLATE;
+ else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
+ && start_wc > end_wc))
+ return REG_ERANGE;
+
+ /* Got valid collation sequence values, add them as a new entry.
+ However, for !_LIBC we have no collation elements: if the
+ character set is single byte, the single byte character set
+ that we build below suffices. parse_bracket_exp passes
+ no MBCSET if dfa->mb_cur_max == 1. */
+ if (dfa->mb_cur_max > 1)
+ {
+ /* Check the space of the arrays. */
+ if (__glibc_unlikely (*range_alloc == mbcset->nranges))
+ {
+ /* There is not enough space, need realloc. */
+ wchar_t *new_array_start, *new_array_end;
+ Idx new_nranges;
+
+ /* +1 in case of mbcset->nranges is 0. */
+ new_nranges = 2 * mbcset->nranges + 1;
+ /* Use realloc since mbcset->range_starts and mbcset->range_ends
+ are NULL if *range_alloc == 0. */
+ new_array_start = re_realloc (mbcset->range_starts, wchar_t,
+ new_nranges);
+ new_array_end = re_realloc (mbcset->range_ends, wchar_t,
+ new_nranges);
+
+ if (__glibc_unlikely (new_array_start == NULL
+ || new_array_end == NULL))
+ {
+ re_free (new_array_start);
+ re_free (new_array_end);
+ return REG_ESPACE;
+ }
+
+ mbcset->range_starts = new_array_start;
+ mbcset->range_ends = new_array_end;
+ *range_alloc = new_nranges;
+ }
+
+ mbcset->range_starts[mbcset->nranges] = start_wc;
+ mbcset->range_ends[mbcset->nranges++] = end_wc;
+ }
+
+ /* Build the table for single byte characters. */
+ for (wchar_t wc = 0; wc < SBC_MAX; ++wc)
+ {
+ if (start_wc <= wc && wc <= end_wc)
+ bitset_set (sbcset, wc);
+ }
+
+ return REG_NOERROR;
+}
+#endif /* not _LIBC */
+
+#ifndef _LIBC
+/* Helper function for parse_bracket_exp only used in case of NOT _LIBC.
+ Build the collating element which is represented by NAME.
+ The result are written to MBCSET and SBCSET.
+ COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
+ pointer argument since we may update it. */
+
+static reg_errcode_t
+build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
+ Idx *coll_sym_alloc, const unsigned char *name,
+ uint_fast32_t nrules, int_fast32_t table_size,
+ const void *symb_table, const unsigned char *extra)
+{
+ size_t name_len = strlen ((const char *) name);
+ if (__glibc_unlikely (name_len != 1))
+ return REG_ECOLLATE;
+ else
+ {
+ bitset_set (sbcset, name[0]);
+ return REG_NOERROR;
+ }
+}
+#endif /* not _LIBC */
+
+#ifdef _LIBC
+/* Local function for parse_bracket_exp used in _LIBC environment.
+ Seek the collating symbol entry corresponding to NAME.
+ Return the index of the symbol in the SYMB_TABLE,
+ or -1 if not found. */
+
+static __always_inline int32_t
+seek_collating_symbol_entry (const unsigned char *name, size_t name_len,
+ const int32_t *symb_table,
+ int_fast32_t table_size,
+ const unsigned char *extra)
+{
+ int_fast32_t elem;
+
+ for (elem = 0; elem < table_size; elem++)
+ if (symb_table[2 * elem] != 0)
+ {
+ int32_t idx = symb_table[2 * elem + 1];
+ /* Skip the name of collating element name. */
+ idx += 1 + extra[idx];
+ if (/* Compare the length of the name. */
+ name_len == extra[idx]
+ /* Compare the name. */
+ && memcmp (name, &extra[idx + 1], name_len) == 0)
+ /* Yep, this is the entry. */
+ return elem;
+ }
+ return -1;
+}
+
+/* Local function for parse_bracket_exp used in _LIBC environment.
+ Look up the collation sequence value of BR_ELEM.
+ Return the value if succeeded, UINT_MAX otherwise. */
+
+static __always_inline unsigned int
+lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules,
+ const unsigned char *collseqmb,
+ const char *collseqwc,
+ int_fast32_t table_size,
+ const int32_t *symb_table,
+ const unsigned char *extra)
+{
+ if (br_elem->type == SB_CHAR)
+ {
+ /* if (MB_CUR_MAX == 1) */
+ if (nrules == 0)
+ return collseqmb[br_elem->opr.ch];
+ else
+ {
+ wint_t wc = __btowc (br_elem->opr.ch);
+ return __collseq_table_lookup (collseqwc, wc);
+ }
+ }
+ else if (br_elem->type == MB_CHAR)
+ {
+ if (nrules != 0)
+ return __collseq_table_lookup (collseqwc, br_elem->opr.wch);
+ }
+ else if (br_elem->type == COLL_SYM)
+ {
+ size_t sym_name_len = strlen ((char *) br_elem->opr.name);
+ if (nrules != 0)
+ {
+ int32_t elem, idx;
+ elem = seek_collating_symbol_entry (br_elem->opr.name,
+ sym_name_len,
+ symb_table, table_size,
+ extra);
+ if (elem != -1)
+ {
+ /* We found the entry. */
+ idx = symb_table[2 * elem + 1];
+ /* Skip the name of collating element name. */
+ idx += 1 + extra[idx];
+ /* Skip the byte sequence of the collating element. */
+ idx += 1 + extra[idx];
+ /* Adjust for the alignment. */
+ idx = (idx + 3) & ~3;
+ /* Skip the multibyte collation sequence value. */
+ idx += sizeof (unsigned int);
+ /* Skip the wide char sequence of the collating element. */
+ idx += sizeof (unsigned int) *
+ (1 + *(unsigned int *) (extra + idx));
+ /* Return the collation sequence value. */
+ return *(unsigned int *) (extra + idx);
+ }
+ else if (sym_name_len == 1)
+ {
+ /* No valid character. Match it as a single byte
+ character. */
+ return collseqmb[br_elem->opr.name[0]];
+ }
+ }
+ else if (sym_name_len == 1)
+ return collseqmb[br_elem->opr.name[0]];
+ }
+ return UINT_MAX;
+}
+
+/* Local function for parse_bracket_exp used in _LIBC environment.
+ Build the range expression which starts from START_ELEM, and ends
+ at END_ELEM. The result are written to MBCSET and SBCSET.
+ RANGE_ALLOC is the allocated size of mbcset->range_starts, and
+ mbcset->range_ends, is a pointer argument since we may
+ update it. */
+
+static __always_inline reg_errcode_t
+build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc,
+ bracket_elem_t *start_elem, bracket_elem_t *end_elem,
+ re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules,
+ const unsigned char *collseqmb, const char *collseqwc,
+ int_fast32_t table_size, const int32_t *symb_table,
+ const unsigned char *extra)
+{
+ unsigned int ch;
+ uint32_t start_collseq;
+ uint32_t end_collseq;
+
+ /* Equivalence Classes and Character Classes can't be a range
+ start/end. */
+ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS
+ || start_elem->type == CHAR_CLASS
+ || end_elem->type == EQUIV_CLASS
+ || end_elem->type == CHAR_CLASS))
+ return REG_ERANGE;
+
+ /* FIXME: Implement rational ranges here, too. */
+ start_collseq = lookup_collation_sequence_value (start_elem, nrules, collseqmb, collseqwc,
+ table_size, symb_table, extra);
+ end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, collseqwc,
+ table_size, symb_table, extra);
+ /* Check start/end collation sequence values. */
+ if (__glibc_unlikely (start_collseq == UINT_MAX
+ || end_collseq == UINT_MAX))
+ return REG_ECOLLATE;
+ if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES)
+ && start_collseq > end_collseq))
+ return REG_ERANGE;
+
+ /* Got valid collation sequence values, add them as a new entry.
+ However, if we have no collation elements, and the character set
+ is single byte, the single byte character set that we
+ build below suffices. */
+ if (nrules > 0 || dfa->mb_cur_max > 1)
+ {
+ /* Check the space of the arrays. */
+ if (__glibc_unlikely (*range_alloc == mbcset->nranges))
+ {
+ /* There is not enough space, need realloc. */
+ uint32_t *new_array_start;
+ uint32_t *new_array_end;
+ int new_nranges;
+
+ /* +1 in case of mbcset->nranges is 0. */
+ new_nranges = 2 * mbcset->nranges + 1;
+ new_array_start = re_realloc (mbcset->range_starts, uint32_t,
+ new_nranges);
+ new_array_end = re_realloc (mbcset->range_ends, uint32_t,
+ new_nranges);
+
+ if (__glibc_unlikely (new_array_start == NULL
+ || new_array_end == NULL))
+ return REG_ESPACE;
+
+ mbcset->range_starts = new_array_start;
+ mbcset->range_ends = new_array_end;
+ *range_alloc = new_nranges;
+ }
+
+ mbcset->range_starts[mbcset->nranges] = start_collseq;
+ mbcset->range_ends[mbcset->nranges++] = end_collseq;
+ }
+
+ /* Build the table for single byte characters. */
+ for (ch = 0; ch < SBC_MAX; ch++)
+ {
+ uint32_t ch_collseq;
+ /* if (MB_CUR_MAX == 1) */
+ if (nrules == 0)
+ ch_collseq = collseqmb[ch];
+ else
+ ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch));
+ if (start_collseq <= ch_collseq && ch_collseq <= end_collseq)
+ bitset_set (sbcset, ch);
+ }
+ return REG_NOERROR;
+}
+
+/* Local function for parse_bracket_exp used in _LIBC environment.
+ Build the collating element which is represented by NAME.
+ The result are written to MBCSET and SBCSET.
+ COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a
+ pointer argument since we may update it. */
+
+static __always_inline reg_errcode_t
+build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
+ Idx *coll_sym_alloc, const unsigned char *name,
+ uint_fast32_t nrules, int_fast32_t table_size,
+ const int32_t *symb_table, const unsigned char *extra)
+{
+ int32_t elem, idx;
+ size_t name_len = strlen ((const char *) name);
+ if (nrules != 0)
+ {
+ elem = seek_collating_symbol_entry (name, name_len, symb_table,
+ table_size, extra);
+ if (elem != -1)
+ {
+ /* We found the entry. */
+ idx = symb_table[2 * elem + 1];
+ /* Skip the name of collating element name. */
+ idx += 1 + extra[idx];
+ }
+ else if (name_len == 1)
+ {
+ /* No valid character, treat it as a normal
+ character. */
+ bitset_set (sbcset, name[0]);
+ return REG_NOERROR;
+ }
+ else
+ return REG_ECOLLATE;
+
+ /* Got valid collation sequence, add it as a new entry. */
+ /* Check the space of the arrays. */
+ if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms))
+ {
+ /* Not enough, realloc it. */
+ /* +1 in case of mbcset->ncoll_syms is 0. */
+ int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1;
+ /* Use realloc since mbcset->coll_syms is NULL
+ if *alloc == 0. */
+ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t,
+ new_coll_sym_alloc);
+ if (__glibc_unlikely (new_coll_syms == NULL))
+ return REG_ESPACE;
+ mbcset->coll_syms = new_coll_syms;
+ *coll_sym_alloc = new_coll_sym_alloc;
+ }
+ mbcset->coll_syms[mbcset->ncoll_syms++] = idx;
+ return REG_NOERROR;
+ }
+ else
+ {
+ if (__glibc_unlikely (name_len != 1))
+ return REG_ECOLLATE;
+ else
+ {
+ bitset_set (sbcset, name[0]);
+ return REG_NOERROR;
+ }
+ }
+}
+#endif /* _LIBC */
+
+/* This function parse bracket expression like "[abc]", "[a-c]",
+ "[[.a-a.]]" etc. */
+
+static bin_tree_t *
+parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ reg_syntax_t syntax, reg_errcode_t *err)
+{
+ const unsigned char *collseqmb = NULL;
+ const char *collseqwc = NULL;
+ uint_fast32_t nrules = 0;
+ int_fast32_t table_size = 0;
+ const void *symb_table = NULL;
+ const unsigned char *extra = NULL;
+
+ re_token_t br_token;
+ re_bitset_ptr_t sbcset;
+ re_charset_t *mbcset;
+ Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0;
+ Idx equiv_class_alloc = 0, char_class_alloc = 0;
+ bool non_match = false;
+ bin_tree_t *work_tree;
+ int token_len;
+ bool first_round = true;
+#ifdef _LIBC
+ collseqmb = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+ nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+ if (nrules)
+ {
+ /*
+ if (MB_CUR_MAX > 1)
+ */
+ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+ table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB);
+ symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB);
+ extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+ _NL_COLLATE_SYMB_EXTRAMB);
+ }
+#endif
+ sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+ mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
+ if (__glibc_unlikely (sbcset == NULL || mbcset == NULL))
+ {
+ re_free (sbcset);
+ re_free (mbcset);
+ *err = REG_ESPACE;
+ return NULL;
+ }
+
+ token_len = peek_token_bracket (token, regexp, syntax);
+ if (__glibc_unlikely (token->type == END_OF_RE))
+ {
+ *err = REG_BADPAT;
+ goto parse_bracket_exp_free_return;
+ }
+ if (token->type == OP_NON_MATCH_LIST)
+ {
+ mbcset->non_match = 1;
+ non_match = true;
+ if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
+ bitset_set (sbcset, '\n');
+ re_string_skip_bytes (regexp, token_len); /* Skip a token. */
+ token_len = peek_token_bracket (token, regexp, syntax);
+ if (__glibc_unlikely (token->type == END_OF_RE))
+ {
+ *err = REG_BADPAT;
+ goto parse_bracket_exp_free_return;
+ }
+ }
+
+ /* We treat the first ']' as a normal character. */
+ if (token->type == OP_CLOSE_BRACKET)
+ token->type = CHARACTER;
+
+ while (1)
+ {
+ bracket_elem_t start_elem, end_elem;
+ unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE];
+ unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE];
+ reg_errcode_t ret;
+ int token_len2 = 0;
+ bool is_range_exp = false;
+ re_token_t token2;
+
+ start_elem.opr.name = start_name_buf;
+ start_elem.type = COLL_SYM;
+ ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa,
+ syntax, first_round);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ {
+ *err = ret;
+ goto parse_bracket_exp_free_return;
+ }
+ first_round = false;
+
+ /* Get information about the next token. We need it in any case. */
+ token_len = peek_token_bracket (token, regexp, syntax);
+
+ /* Do not check for ranges if we know they are not allowed. */
+ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS)
+ {
+ if (__glibc_unlikely (token->type == END_OF_RE))
+ {
+ *err = REG_EBRACK;
+ goto parse_bracket_exp_free_return;
+ }
+ if (token->type == OP_CHARSET_RANGE)
+ {
+ re_string_skip_bytes (regexp, token_len); /* Skip '-'. */
+ token_len2 = peek_token_bracket (&token2, regexp, syntax);
+ if (__glibc_unlikely (token2.type == END_OF_RE))
+ {
+ *err = REG_EBRACK;
+ goto parse_bracket_exp_free_return;
+ }
+ if (token2.type == OP_CLOSE_BRACKET)
+ {
+ /* We treat the last '-' as a normal character. */
+ re_string_skip_bytes (regexp, -token_len);
+ token->type = CHARACTER;
+ }
+ else
+ is_range_exp = true;
+ }
+ }
+
+ if (is_range_exp == true)
+ {
+ end_elem.opr.name = end_name_buf;
+ end_elem.type = COLL_SYM;
+ ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2,
+ dfa, syntax, true);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ {
+ *err = ret;
+ goto parse_bracket_exp_free_return;
+ }
+
+ token_len = peek_token_bracket (token, regexp, syntax);
+
+ *err = build_range_exp (sbcset, mbcset, &range_alloc,
+ &start_elem, &end_elem,
+ dfa, syntax, nrules, collseqmb, collseqwc,
+ table_size, symb_table, extra);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ goto parse_bracket_exp_free_return;
+ }
+ else
+ {
+ switch (start_elem.type)
+ {
+ case SB_CHAR:
+ bitset_set (sbcset, start_elem.opr.ch);
+ break;
+ case MB_CHAR:
+ /* Check whether the array has enough space. */
+ if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars))
+ {
+ wchar_t *new_mbchars;
+ /* Not enough, realloc it. */
+ /* +1 in case of mbcset->nmbchars is 0. */
+ mbchar_alloc = 2 * mbcset->nmbchars + 1;
+ /* Use realloc since array is NULL if *alloc == 0. */
+ new_mbchars = re_realloc (mbcset->mbchars, wchar_t,
+ mbchar_alloc);
+ if (__glibc_unlikely (new_mbchars == NULL))
+ goto parse_bracket_exp_espace;
+ mbcset->mbchars = new_mbchars;
+ }
+ mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch;
+ break;
+ case EQUIV_CLASS:
+ *err = build_equiv_class (sbcset,
+ mbcset, &equiv_class_alloc,
+ start_elem.opr.name);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ goto parse_bracket_exp_free_return;
+ break;
+ case COLL_SYM:
+ *err = build_collating_symbol (sbcset,
+ mbcset, &coll_sym_alloc,
+ start_elem.opr.name,
+ nrules, table_size, symb_table, extra);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ goto parse_bracket_exp_free_return;
+ break;
+ case CHAR_CLASS:
+ *err = build_charclass (regexp->trans, sbcset,
+ mbcset, &char_class_alloc,
+ (const char *) start_elem.opr.name,
+ syntax);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ goto parse_bracket_exp_free_return;
+ break;
+ default:
+ DEBUG_ASSERT (false);
+ break;
+ }
+ }
+ if (__glibc_unlikely (token->type == END_OF_RE))
+ {
+ *err = REG_EBRACK;
+ goto parse_bracket_exp_free_return;
+ }
+ if (token->type == OP_CLOSE_BRACKET)
+ break;
+ }
+
+ re_string_skip_bytes (regexp, token_len); /* Skip a token. */
+
+ /* If it is non-matching list. */
+ if (non_match)
+ bitset_not (sbcset);
+
+ /* Ensure only single byte characters are set. */
+ if (dfa->mb_cur_max > 1)
+ bitset_mask (sbcset, dfa->sb_char);
+
+ if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes
+ || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes
+ || mbcset->non_match)))
+ {
+ bin_tree_t *mbc_tree;
+ int sbc_idx;
+ /* Build a tree for complex bracket. */
+ dfa->has_mb_node = 1;
+ br_token.type = COMPLEX_BRACKET;
+ br_token.opr.mbcset = mbcset;
+ mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+ if (__glibc_unlikely (mbc_tree == NULL))
+ goto parse_bracket_exp_espace;
+ for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx)
+ if (sbcset[sbc_idx])
+ break;
+ /* If there are no bits set in sbcset, there is no point
+ of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */
+ if (sbc_idx < BITSET_WORDS)
+ {
+ /* Build a tree for simple bracket. */
+ br_token.type = SIMPLE_BRACKET;
+ br_token.opr.sbcset = sbcset;
+ work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+ if (__glibc_unlikely (work_tree == NULL))
+ goto parse_bracket_exp_espace;
+
+ /* Then join them by ALT node. */
+ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT);
+ if (__glibc_unlikely (work_tree == NULL))
+ goto parse_bracket_exp_espace;
+ }
+ else
+ {
+ re_free (sbcset);
+ work_tree = mbc_tree;
+ }
+ }
+ else
+ {
+ free_charset (mbcset);
+ /* Build a tree for simple bracket. */
+ br_token.type = SIMPLE_BRACKET;
+ br_token.opr.sbcset = sbcset;
+ work_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+ if (__glibc_unlikely (work_tree == NULL))
+ goto parse_bracket_exp_espace;
+ }
+ return work_tree;
+
+ parse_bracket_exp_espace:
+ *err = REG_ESPACE;
+ parse_bracket_exp_free_return:
+ re_free (sbcset);
+ free_charset (mbcset);
+ return NULL;
+}
+
+/* Parse an element in the bracket expression. */
+
+static reg_errcode_t
+parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp,
+ re_token_t *token, int token_len, re_dfa_t *dfa,
+ reg_syntax_t syntax, bool accept_hyphen)
+{
+ int cur_char_size;
+ cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp));
+ if (cur_char_size > 1)
+ {
+ elem->type = MB_CHAR;
+ elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp));
+ re_string_skip_bytes (regexp, cur_char_size);
+ return REG_NOERROR;
+ }
+ re_string_skip_bytes (regexp, token_len); /* Skip a token. */
+ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS
+ || token->type == OP_OPEN_EQUIV_CLASS)
+ return parse_bracket_symbol (elem, regexp, token);
+ if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen)
+ {
+ /* A '-' must only appear as anything but a range indicator before
+ the closing bracket. Everything else is an error. */
+ re_token_t token2;
+ (void) peek_token_bracket (&token2, regexp, syntax);
+ if (token2.type != OP_CLOSE_BRACKET)
+ /* The actual error value is not standardized since this whole
+ case is undefined. But ERANGE makes good sense. */
+ return REG_ERANGE;
+ }
+ elem->type = SB_CHAR;
+ elem->opr.ch = token->opr.c;
+ return REG_NOERROR;
+}
+
+/* Parse a bracket symbol in the bracket expression. Bracket symbols are
+ such as [:<character_class>:], [.<collating_element>.], and
+ [=<equivalent_class>=]. */
+
+static reg_errcode_t
+parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp,
+ re_token_t *token)
+{
+ unsigned char ch, delim = token->opr.c;
+ int i = 0;
+ if (re_string_eoi(regexp))
+ return REG_EBRACK;
+ for (;; ++i)
+ {
+ if (i >= BRACKET_NAME_BUF_SIZE)
+ return REG_EBRACK;
+ if (token->type == OP_OPEN_CHAR_CLASS)
+ ch = re_string_fetch_byte_case (regexp);
+ else
+ ch = re_string_fetch_byte (regexp);
+ if (re_string_eoi(regexp))
+ return REG_EBRACK;
+ if (ch == delim && re_string_peek_byte (regexp, 0) == ']')
+ break;
+ elem->opr.name[i] = ch;
+ }
+ re_string_skip_bytes (regexp, 1);
+ elem->opr.name[i] = '\0';
+ switch (token->type)
+ {
+ case OP_OPEN_COLL_ELEM:
+ elem->type = COLL_SYM;
+ break;
+ case OP_OPEN_EQUIV_CLASS:
+ elem->type = EQUIV_CLASS;
+ break;
+ case OP_OPEN_CHAR_CLASS:
+ elem->type = CHAR_CLASS;
+ break;
+ default:
+ break;
+ }
+ return REG_NOERROR;
+}
+
+ /* Helper function for parse_bracket_exp.
+ Build the equivalence class which is represented by NAME.
+ The result are written to MBCSET and SBCSET.
+ EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes,
+ is a pointer argument since we may update it. */
+
+static reg_errcode_t
+build_equiv_class (bitset_t sbcset, re_charset_t *mbcset,
+ Idx *equiv_class_alloc, const unsigned char *name)
+{
+#ifdef _LIBC
+ uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+ if (nrules != 0)
+ {
+ const int32_t *table, *indirect;
+ const unsigned char *weights, *extra, *cp;
+ unsigned char char_buf[2];
+ int32_t idx1, idx2;
+ unsigned int ch;
+ size_t len;
+ /* Calculate the index for equivalence class. */
+ cp = name;
+ table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+ weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+ _NL_COLLATE_WEIGHTMB);
+ extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
+ _NL_COLLATE_EXTRAMB);
+ indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+ _NL_COLLATE_INDIRECTMB);
+ idx1 = findidx (table, indirect, extra, &cp, -1);
+ if (__glibc_unlikely (idx1 == 0 || *cp != '\0'))
+ /* This isn't a valid character. */
+ return REG_ECOLLATE;
+
+ /* Build single byte matching table for this equivalence class. */
+ len = weights[idx1 & 0xffffff];
+ for (ch = 0; ch < SBC_MAX; ++ch)
+ {
+ char_buf[0] = ch;
+ cp = char_buf;
+ idx2 = findidx (table, indirect, extra, &cp, 1);
+/*
+ idx2 = table[ch];
+*/
+ if (idx2 == 0)
+ /* This isn't a valid character. */
+ continue;
+ /* Compare only if the length matches and the collation rule
+ index is the same. */
+ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24)
+ && memcmp (weights + (idx1 & 0xffffff) + 1,
+ weights + (idx2 & 0xffffff) + 1, len) == 0)
+ bitset_set (sbcset, ch);
+ }
+ /* Check whether the array has enough space. */
+ if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes))
+ {
+ /* Not enough, realloc it. */
+ /* +1 in case of mbcset->nequiv_classes is 0. */
+ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1;
+ /* Use realloc since the array is NULL if *alloc == 0. */
+ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes,
+ int32_t,
+ new_equiv_class_alloc);
+ if (__glibc_unlikely (new_equiv_classes == NULL))
+ return REG_ESPACE;
+ mbcset->equiv_classes = new_equiv_classes;
+ *equiv_class_alloc = new_equiv_class_alloc;
+ }
+ mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1;
+ }
+ else
+#endif /* _LIBC */
+ {
+ if (__glibc_unlikely (strlen ((const char *) name) != 1))
+ return REG_ECOLLATE;
+ bitset_set (sbcset, *name);
+ }
+ return REG_NOERROR;
+}
+
+ /* Helper function for parse_bracket_exp.
+ Build the character class which is represented by NAME.
+ The result are written to MBCSET and SBCSET.
+ CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes,
+ is a pointer argument since we may update it. */
+
+static reg_errcode_t
+build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset,
+ re_charset_t *mbcset, Idx *char_class_alloc,
+ const char *class_name, reg_syntax_t syntax)
+{
+ int i;
+ const char *name = class_name;
+
+ /* In case of REG_ICASE "upper" and "lower" match the both of
+ upper and lower cases. */
+ if ((syntax & RE_ICASE)
+ && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0))
+ name = "alpha";
+
+ /* Check the space of the arrays. */
+ if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes))
+ {
+ /* Not enough, realloc it. */
+ /* +1 in case of mbcset->nchar_classes is 0. */
+ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1;
+ /* Use realloc since array is NULL if *alloc == 0. */
+ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t,
+ new_char_class_alloc);
+ if (__glibc_unlikely (new_char_classes == NULL))
+ return REG_ESPACE;
+ mbcset->char_classes = new_char_classes;
+ *char_class_alloc = new_char_class_alloc;
+ }
+ mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name);
+
+#define BUILD_CHARCLASS_LOOP(ctype_func) \
+ do { \
+ if (__glibc_unlikely (trans != NULL)) \
+ { \
+ for (i = 0; i < SBC_MAX; ++i) \
+ if (ctype_func (i)) \
+ bitset_set (sbcset, trans[i]); \
+ } \
+ else \
+ { \
+ for (i = 0; i < SBC_MAX; ++i) \
+ if (ctype_func (i)) \
+ bitset_set (sbcset, i); \
+ } \
+ } while (0)
+
+ if (strcmp (name, "alnum") == 0)
+ BUILD_CHARCLASS_LOOP (isalnum);
+ else if (strcmp (name, "cntrl") == 0)
+ BUILD_CHARCLASS_LOOP (iscntrl);
+ else if (strcmp (name, "lower") == 0)
+ BUILD_CHARCLASS_LOOP (islower);
+ else if (strcmp (name, "space") == 0)
+ BUILD_CHARCLASS_LOOP (isspace);
+ else if (strcmp (name, "alpha") == 0)
+ BUILD_CHARCLASS_LOOP (isalpha);
+ else if (strcmp (name, "digit") == 0)
+ BUILD_CHARCLASS_LOOP (isdigit);
+ else if (strcmp (name, "print") == 0)
+ BUILD_CHARCLASS_LOOP (isprint);
+ else if (strcmp (name, "upper") == 0)
+ BUILD_CHARCLASS_LOOP (isupper);
+ else if (strcmp (name, "blank") == 0)
+ BUILD_CHARCLASS_LOOP (isblank);
+ else if (strcmp (name, "graph") == 0)
+ BUILD_CHARCLASS_LOOP (isgraph);
+ else if (strcmp (name, "punct") == 0)
+ BUILD_CHARCLASS_LOOP (ispunct);
+ else if (strcmp (name, "xdigit") == 0)
+ BUILD_CHARCLASS_LOOP (isxdigit);
+ else
+ return REG_ECTYPE;
+
+ return REG_NOERROR;
+}
+
+static bin_tree_t *
+build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
+ const char *class_name,
+ const char *extra, bool non_match,
+ reg_errcode_t *err)
+{
+ re_bitset_ptr_t sbcset;
+ re_charset_t *mbcset;
+ Idx alloc = 0;
+ reg_errcode_t ret;
+ bin_tree_t *tree;
+
+ sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1);
+ if (__glibc_unlikely (sbcset == NULL))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1);
+ if (__glibc_unlikely (mbcset == NULL))
+ {
+ re_free (sbcset);
+ *err = REG_ESPACE;
+ return NULL;
+ }
+ mbcset->non_match = non_match;
+
+ /* We don't care the syntax in this case. */
+ ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0);
+
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ {
+ re_free (sbcset);
+ free_charset (mbcset);
+ *err = ret;
+ return NULL;
+ }
+ /* \w match '_' also. */
+ for (; *extra; extra++)
+ bitset_set (sbcset, *extra);
+
+ /* If it is non-matching list. */
+ if (non_match)
+ bitset_not (sbcset);
+
+ /* Ensure only single byte characters are set. */
+ if (dfa->mb_cur_max > 1)
+ bitset_mask (sbcset, dfa->sb_char);
+
+ /* Build a tree for simple bracket. */
+ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset };
+ tree = create_token_tree (dfa, NULL, NULL, &br_token);
+ if (__glibc_unlikely (tree == NULL))
+ goto build_word_op_espace;
+
+ if (dfa->mb_cur_max > 1)
+ {
+ bin_tree_t *mbc_tree;
+ /* Build a tree for complex bracket. */
+ br_token.type = COMPLEX_BRACKET;
+ br_token.opr.mbcset = mbcset;
+ dfa->has_mb_node = 1;
+ mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token);
+ if (__glibc_unlikely (mbc_tree == NULL))
+ goto build_word_op_espace;
+ /* Then join them by ALT node. */
+ tree = create_tree (dfa, tree, mbc_tree, OP_ALT);
+ if (__glibc_likely (mbc_tree != NULL))
+ return tree;
+ }
+ else
+ {
+ free_charset (mbcset);
+ return tree;
+ }
+
+ build_word_op_espace:
+ re_free (sbcset);
+ free_charset (mbcset);
+ *err = REG_ESPACE;
+ return NULL;
+}
+
+/* This is intended for the expressions like "a{1,3}".
+ Fetch a number from 'input', and return the number.
+ Return -1 if the number field is empty like "{,1}".
+ Return RE_DUP_MAX + 1 if the number field is too large.
+ Return -2 if an error occurred. */
+
+static Idx
+fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax)
+{
+ Idx num = -1;
+ unsigned char c;
+ while (1)
+ {
+ fetch_token (token, input, syntax);
+ c = token->opr.c;
+ if (__glibc_unlikely (token->type == END_OF_RE))
+ return -2;
+ if (token->type == OP_CLOSE_DUP_NUM || c == ',')
+ break;
+ num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2)
+ ? -2
+ : num == -1
+ ? c - '0'
+ : MIN (RE_DUP_MAX + 1, num * 10 + c - '0'));
+ }
+ return num;
+}
+
+static void
+free_charset (re_charset_t *cset)
+{
+ re_free (cset->mbchars);
+#ifdef _LIBC
+ re_free (cset->coll_syms);
+ re_free (cset->equiv_classes);
+#endif
+ re_free (cset->range_starts);
+ re_free (cset->range_ends);
+ re_free (cset->char_classes);
+ re_free (cset);
+}
+
+/* Functions for binary tree operation. */
+
+/* Create a tree node. */
+
+static bin_tree_t *
+create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
+ re_token_type_t type)
+{
+ re_token_t t = { .type = type };
+ return create_token_tree (dfa, left, right, &t);
+}
+
+static bin_tree_t *
+create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right,
+ const re_token_t *token)
+{
+ bin_tree_t *tree;
+ if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE))
+ {
+ bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1);
+
+ if (storage == NULL)
+ return NULL;
+ storage->next = dfa->str_tree_storage;
+ dfa->str_tree_storage = storage;
+ dfa->str_tree_storage_idx = 0;
+ }
+ tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++];
+
+ tree->parent = NULL;
+ tree->left = left;
+ tree->right = right;
+ tree->token = *token;
+ tree->token.duplicated = 0;
+ tree->token.opt_subexp = 0;
+ tree->first = NULL;
+ tree->next = NULL;
+ tree->node_idx = -1;
+
+ if (left != NULL)
+ left->parent = tree;
+ if (right != NULL)
+ right->parent = tree;
+ return tree;
+}
+
+/* Mark the tree SRC as an optional subexpression.
+ To be called from preorder or postorder. */
+
+static reg_errcode_t
+mark_opt_subexp (void *extra, bin_tree_t *node)
+{
+ Idx idx = (uintptr_t) extra;
+ if (node->token.type == SUBEXP && node->token.opr.idx == idx)
+ node->token.opt_subexp = 1;
+
+ return REG_NOERROR;
+}
+
+/* Free the allocated memory inside NODE. */
+
+static void
+free_token (re_token_t *node)
+{
+ if (node->type == COMPLEX_BRACKET && node->duplicated == 0)
+ free_charset (node->opr.mbcset);
+ else if (node->type == SIMPLE_BRACKET && node->duplicated == 0)
+ re_free (node->opr.sbcset);
+}
+
+/* Worker function for tree walking. Free the allocated memory inside NODE
+ and its children. */
+
+static reg_errcode_t
+free_tree (void *extra, bin_tree_t *node)
+{
+ free_token (&node->token);
+ return REG_NOERROR;
+}
+
+
+/* Duplicate the node SRC, and return new node. This is a preorder
+ visit similar to the one implemented by the generic visitor, but
+ we need more infrastructure to maintain two parallel trees --- so,
+ it's easier to duplicate. */
+
+static bin_tree_t *
+duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa)
+{
+ const bin_tree_t *node;
+ bin_tree_t *dup_root;
+ bin_tree_t **p_new = &dup_root, *dup_node = root->parent;
+
+ for (node = root; ; )
+ {
+ /* Create a new tree and link it back to the current parent. */
+ *p_new = create_token_tree (dfa, NULL, NULL, &node->token);
+ if (*p_new == NULL)
+ return NULL;
+ (*p_new)->parent = dup_node;
+ (*p_new)->token.duplicated = 1;
+ dup_node = *p_new;
+
+ /* Go to the left node, or up and to the right. */
+ if (node->left)
+ {
+ node = node->left;
+ p_new = &dup_node->left;
+ }
+ else
+ {
+ const bin_tree_t *prev = NULL;
+ while (node->right == prev || node->right == NULL)
+ {
+ prev = node;
+ node = node->parent;
+ dup_node = dup_node->parent;
+ if (!node)
+ return dup_root;
+ }
+ node = node->right;
+ p_new = &dup_node->right;
+ }
+ }
+}
diff --git a/lib/regex.c b/lib/regex.c
new file mode 100644
index 0000000..3beb0de
--- /dev/null
+++ b/lib/regex.c
@@ -0,0 +1,84 @@
+/* Extended regular expression matching and search library.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#define __STDC_WANT_IEC_60559_BFP_EXT__
+
+#ifndef _LIBC
+# include <libc-config.h>
+
+# if __GNUC_PREREQ (4, 6)
+# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure"
+# pragma GCC diagnostic ignored "-Wvla"
+# endif
+# if __GNUC_PREREQ (4, 3)
+# pragma GCC diagnostic ignored "-Wold-style-definition"
+# pragma GCC diagnostic ignored "-Wtype-limits"
+# endif
+#endif
+
+/* Make sure no one compiles this code with a C++ compiler. */
+#if defined __cplusplus && defined _LIBC
+# error "This is C code, use a C compiler"
+#endif
+
+#ifdef _LIBC
+/* We have to keep the namespace clean. */
+# define regfree(preg) __regfree (preg)
+# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
+# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
+# define regerror(errcode, preg, errbuf, errbuf_size) \
+ __regerror(errcode, preg, errbuf, errbuf_size)
+# define re_set_registers(bu, re, nu, st, en) \
+ __re_set_registers (bu, re, nu, st, en)
+# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
+ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
+# define re_match(bufp, string, size, pos, regs) \
+ __re_match (bufp, string, size, pos, regs)
+# define re_search(bufp, string, size, startpos, range, regs) \
+ __re_search (bufp, string, size, startpos, range, regs)
+# define re_compile_pattern(pattern, length, bufp) \
+ __re_compile_pattern (pattern, length, bufp)
+# define re_set_syntax(syntax) __re_set_syntax (syntax)
+# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
+ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
+# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
+
+# include "../locale/localeinfo.h"
+#endif
+
+/* On some systems, limits.h sets RE_DUP_MAX to a lower value than
+ GNU regex allows. Include it before <regex.h>, which correctly
+ #undefs RE_DUP_MAX and sets it to the right value. */
+#include <limits.h>
+
+#include <regex.h>
+#include "regex_internal.h"
+
+#include "regex_internal.c"
+#include "regcomp.c"
+#include "regexec.c"
+
+/* Binary backward compatibility. */
+#if _LIBC
+# include <shlib-compat.h>
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
+link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.")
+int re_max_failures = 2000;
+# endif
+#endif
diff --git a/lib/regex.h b/lib/regex.h
new file mode 100644
index 0000000..9ef0252
--- /dev/null
+++ b/lib/regex.h
@@ -0,0 +1,699 @@
+/* Definitions for data structures and routines for the regular
+ expression library.
+ Copyright (C) 1985, 1989-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _REGEX_H
+#define _REGEX_H 1
+
+#include <sys/types.h>
+
+/* Allow the use in C++ code. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define __USE_GNU to declare GNU extensions that violate the
+ POSIX name space rules. */
+#ifdef _GNU_SOURCE
+# define __USE_GNU 1
+#endif
+
+#ifdef _REGEX_LARGE_OFFSETS
+
+/* Use types and values that are wide enough to represent signed and
+ unsigned byte offsets in memory. This currently works only when
+ the regex code is used outside of the GNU C library; it is not yet
+ supported within glibc itself, and glibc users should not define
+ _REGEX_LARGE_OFFSETS. */
+
+/* The type of object sizes. */
+typedef size_t __re_size_t;
+
+/* The type of object sizes, in places where the traditional code
+ uses unsigned long int. */
+typedef size_t __re_long_size_t;
+
+#else
+
+/* The traditional GNU regex implementation mishandles strings longer
+ than INT_MAX. */
+typedef unsigned int __re_size_t;
+typedef unsigned long int __re_long_size_t;
+
+#endif
+
+/* The following two types have to be signed and unsigned integer type
+ wide enough to hold a value of a pointer. For most ANSI compilers
+ ptrdiff_t and size_t should be likely OK. Still size of these two
+ types is 2 for Microsoft C. Ugh... */
+typedef long int s_reg_t;
+typedef unsigned long int active_reg_t;
+
+/* The following bits are used to determine the regexp syntax we
+ recognize. The set/not-set meanings are chosen so that Emacs syntax
+ remains the value 0. The bits are given in alphabetical order, and
+ the definitions shifted by one from the previous bit; thus, when we
+ add or remove a bit, only one other definition need change. */
+typedef unsigned long int reg_syntax_t;
+
+#ifdef __USE_GNU
+/* If this bit is not set, then \ inside a bracket expression is literal.
+ If set, then such a \ quotes the following character. */
+# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1)
+
+/* If this bit is not set, then + and ? are operators, and \+ and \? are
+ literals.
+ If set, then \+ and \? are operators and + and ? are literals. */
+# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
+
+/* If this bit is set, then character classes are supported. They are:
+ [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
+ [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
+ If not set, then character classes are not supported. */
+# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
+
+/* If this bit is set, then ^ and $ are always anchors (outside bracket
+ expressions, of course).
+ If this bit is not set, then it depends:
+ ^ is an anchor if it is at the beginning of a regular
+ expression or after an open-group or an alternation operator;
+ $ is an anchor if it is at the end of a regular expression, or
+ before a close-group or an alternation operator.
+
+ This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
+ POSIX draft 11.2 says that * etc. in leading positions is undefined.
+ We already implemented a previous draft which made those constructs
+ invalid, though, so we haven't changed the code back. */
+# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
+
+/* If this bit is set, then special characters are always special
+ regardless of where they are in the pattern.
+ If this bit is not set, then special characters are special only in
+ some contexts; otherwise they are ordinary. Specifically,
+ * + ? and intervals are only special when not after the beginning,
+ open-group, or alternation operator. */
+# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
+
+/* If this bit is set, then *, +, ?, and { cannot be first in an re or
+ immediately after an alternation or begin-group operator. */
+# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
+
+/* If this bit is set, then . matches newline.
+ If not set, then it doesn't. */
+# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
+
+/* If this bit is set, then . doesn't match NUL.
+ If not set, then it does. */
+# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
+
+/* If this bit is set, nonmatching lists [^...] do not match newline.
+ If not set, they do. */
+# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
+
+/* If this bit is set, either \{...\} or {...} defines an
+ interval, depending on RE_NO_BK_BRACES.
+ If not set, \{, \}, {, and } are literals. */
+# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
+
+/* If this bit is set, +, ? and | aren't recognized as operators.
+ If not set, they are. */
+# define RE_LIMITED_OPS (RE_INTERVALS << 1)
+
+/* If this bit is set, newline is an alternation operator.
+ If not set, newline is literal. */
+# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
+
+/* If this bit is set, then '{...}' defines an interval, and \{ and \}
+ are literals.
+ If not set, then '\{...\}' defines an interval. */
+# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
+
+/* If this bit is set, (...) defines a group, and \( and \) are literals.
+ If not set, \(...\) defines a group, and ( and ) are literals. */
+# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
+
+/* If this bit is set, then \<digit> matches <digit>.
+ If not set, then \<digit> is a back-reference. */
+# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
+
+/* If this bit is set, then | is an alternation operator, and \| is literal.
+ If not set, then \| is an alternation operator, and | is literal. */
+# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
+
+/* If this bit is set, then an ending range point collating higher
+ than the starting range point, as in [z-a], is invalid.
+ If not set, then when ending range point collates higher than the
+ starting range point, the range is ignored. */
+# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
+
+/* If this bit is set, then an unmatched ) is ordinary.
+ If not set, then an unmatched ) is invalid. */
+# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
+
+/* If this bit is set, succeed as soon as we match the whole pattern,
+ without further backtracking. */
+# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1)
+
+/* If this bit is set, do not process the GNU regex operators.
+ If not set, then the GNU regex operators are recognized. */
+# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1)
+
+/* If this bit is set, turn on internal regex debugging.
+ If not set, and debugging was on, turn it off.
+ This only works if regex.c is compiled -DDEBUG.
+ We define this bit always, so that all that's needed to turn on
+ debugging is to recompile regex.c; the calling code can always have
+ this bit set, and it won't affect anything in the normal case. */
+# define RE_DEBUG (RE_NO_GNU_OPS << 1)
+
+/* If this bit is set, a syntactically invalid interval is treated as
+ a string of ordinary characters. For example, the ERE 'a{1' is
+ treated as 'a\{1'. */
+# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1)
+
+/* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1)
+
+/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only
+ for ^, because it is difficult to scan the regex backwards to find
+ whether ^ should be special. */
+# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1)
+
+/* If this bit is set, then \{ cannot be first in a regex or
+ immediately after an alternation, open-group or \} operator. */
+# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1)
+
+/* If this bit is set, then no_sub will be set to 1 during
+ re_compile_pattern. */
+# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1)
+#endif
+
+/* This global variable defines the particular regexp syntax to use (for
+ some interfaces). When a regexp is compiled, the syntax used is
+ stored in the pattern buffer, so changing this does not affect
+ already-compiled regexps. */
+extern reg_syntax_t re_syntax_options;
+
+#ifdef __USE_GNU
+/* Define combinations of the above bits for the standard possibilities.
+ (The [[[ comments delimit what gets put into the Texinfo file, so
+ don't delete them!) */
+/* [[[begin syntaxes]]] */
+# define RE_SYNTAX_EMACS 0
+
+# define RE_SYNTAX_AWK \
+ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
+ | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
+ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CHAR_CLASSES \
+ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS)
+
+# define RE_SYNTAX_GNU_AWK \
+ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \
+ | RE_INVALID_INTERVAL_ORD) \
+ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \
+ | RE_CONTEXT_INVALID_OPS ))
+
+# define RE_SYNTAX_POSIX_AWK \
+ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \
+ | RE_INTERVALS | RE_NO_GNU_OPS \
+ | RE_INVALID_INTERVAL_ORD)
+
+# define RE_SYNTAX_GREP \
+ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \
+ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL))
+
+# define RE_SYNTAX_EGREP \
+ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \
+ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL))
+
+/* POSIX grep -E behavior is no longer incompatible with GNU. */
+# define RE_SYNTAX_POSIX_EGREP \
+ RE_SYNTAX_EGREP
+
+/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */
+# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC
+
+# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
+
+/* Syntax bits common to both basic and extended POSIX regex syntax. */
+# define _RE_SYNTAX_POSIX_COMMON \
+ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
+ | RE_INTERVALS | RE_NO_EMPTY_RANGES)
+
+# define RE_SYNTAX_POSIX_BASIC \
+ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP)
+
+/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
+ RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
+ isn't minimal, since other operators, such as \`, aren't disabled. */
+# define RE_SYNTAX_POSIX_MINIMAL_BASIC \
+ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
+
+# define RE_SYNTAX_POSIX_EXTENDED \
+ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
+ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
+ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD)
+
+/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is
+ removed and RE_NO_BK_REFS is added. */
+# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
+ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
+ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
+ | RE_NO_BK_PARENS | RE_NO_BK_REFS \
+ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
+/* [[[end syntaxes]]] */
+
+/* Maximum number of duplicates an interval can allow. POSIX-conforming
+ systems might define this in <limits.h>, but we want our
+ value, so remove any previous define. */
+# ifdef _REGEX_INCLUDE_LIMITS_H
+# include <limits.h>
+# endif
+# ifdef RE_DUP_MAX
+# undef RE_DUP_MAX
+# endif
+
+/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored
+ the counter as a 2-byte signed integer. This is no longer true, so
+ RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to
+ ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined.
+ However, there would be a huge performance problem if someone
+ actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains
+ its historical value. */
+# define RE_DUP_MAX (0x7fff)
+#endif
+
+
+/* POSIX 'cflags' bits (i.e., information for 'regcomp'). */
+
+/* If this bit is set, then use extended regular expression syntax.
+ If not set, then use basic regular expression syntax. */
+#define REG_EXTENDED 1
+
+/* If this bit is set, then ignore case when matching.
+ If not set, then case is significant. */
+#define REG_ICASE (1 << 1)
+
+/* If this bit is set, then anchors do not match at newline
+ characters in the string.
+ If not set, then anchors do match at newlines. */
+#define REG_NEWLINE (1 << 2)
+
+/* If this bit is set, then report only success or fail in regexec.
+ If not set, then returns differ between not matching and errors. */
+#define REG_NOSUB (1 << 3)
+
+
+/* POSIX 'eflags' bits (i.e., information for regexec). */
+
+/* If this bit is set, then the beginning-of-line operator doesn't match
+ the beginning of the string (presumably because it's not the
+ beginning of a line).
+ If not set, then the beginning-of-line operator does match the
+ beginning of the string. */
+#define REG_NOTBOL 1
+
+/* Like REG_NOTBOL, except for the end-of-line. */
+#define REG_NOTEOL (1 << 1)
+
+/* Use PMATCH[0] to delimit the start and end of the search in the
+ buffer. */
+#define REG_STARTEND (1 << 2)
+
+
+/* If any error codes are removed, changed, or added, update the
+ '__re_error_msgid' table in regcomp.c. */
+
+typedef enum
+{
+ _REG_ENOSYS = -1, /* This will never happen for this implementation. */
+ _REG_NOERROR = 0, /* Success. */
+ _REG_NOMATCH, /* Didn't find a match (for regexec). */
+
+ /* POSIX regcomp return error codes. (In the order listed in the
+ standard.) */
+ _REG_BADPAT, /* Invalid pattern. */
+ _REG_ECOLLATE, /* Invalid collating element. */
+ _REG_ECTYPE, /* Invalid character class name. */
+ _REG_EESCAPE, /* Trailing backslash. */
+ _REG_ESUBREG, /* Invalid back reference. */
+ _REG_EBRACK, /* Unmatched left bracket. */
+ _REG_EPAREN, /* Parenthesis imbalance. */
+ _REG_EBRACE, /* Unmatched \{. */
+ _REG_BADBR, /* Invalid contents of \{\}. */
+ _REG_ERANGE, /* Invalid range end. */
+ _REG_ESPACE, /* Ran out of memory. */
+ _REG_BADRPT, /* No preceding re for repetition op. */
+
+ /* Error codes we've added. */
+ _REG_EEND, /* Premature end. */
+ _REG_ESIZE, /* Too large (e.g., repeat count too large). */
+ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
+} reg_errcode_t;
+
+#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K
+# define REG_ENOSYS _REG_ENOSYS
+#endif
+#define REG_NOERROR _REG_NOERROR
+#define REG_NOMATCH _REG_NOMATCH
+#define REG_BADPAT _REG_BADPAT
+#define REG_ECOLLATE _REG_ECOLLATE
+#define REG_ECTYPE _REG_ECTYPE
+#define REG_EESCAPE _REG_EESCAPE
+#define REG_ESUBREG _REG_ESUBREG
+#define REG_EBRACK _REG_EBRACK
+#define REG_EPAREN _REG_EPAREN
+#define REG_EBRACE _REG_EBRACE
+#define REG_BADBR _REG_BADBR
+#define REG_ERANGE _REG_ERANGE
+#define REG_ESPACE _REG_ESPACE
+#define REG_BADRPT _REG_BADRPT
+#define REG_EEND _REG_EEND
+#define REG_ESIZE _REG_ESIZE
+#define REG_ERPAREN _REG_ERPAREN
+
+/* This data structure represents a compiled pattern. Before calling
+ the pattern compiler, the fields 'buffer', 'allocated', 'fastmap',
+ and 'translate' can be set. After the pattern has been compiled,
+ the fields 're_nsub', 'not_bol' and 'not_eol' are available. All
+ other fields are private to the regex routines. */
+
+#ifndef RE_TRANSLATE_TYPE
+# define __RE_TRANSLATE_TYPE unsigned char *
+# ifdef __USE_GNU
+# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE
+# endif
+#endif
+
+#ifdef __USE_GNU
+# define __REPB_PREFIX(name) name
+#else
+# define __REPB_PREFIX(name) __##name
+#endif
+
+struct re_pattern_buffer
+{
+ /* Space that holds the compiled pattern. The type
+ 'struct re_dfa_t' is private and is not declared here. */
+ struct re_dfa_t *__REPB_PREFIX(buffer);
+
+ /* Number of bytes to which 'buffer' points. */
+ __re_long_size_t __REPB_PREFIX(allocated);
+
+ /* Number of bytes actually used in 'buffer'. */
+ __re_long_size_t __REPB_PREFIX(used);
+
+ /* Syntax setting with which the pattern was compiled. */
+ reg_syntax_t __REPB_PREFIX(syntax);
+
+ /* Pointer to a fastmap, if any, otherwise zero. re_search uses the
+ fastmap, if there is one, to skip over impossible starting points
+ for matches. */
+ char *__REPB_PREFIX(fastmap);
+
+ /* Either a translate table to apply to all characters before
+ comparing them, or zero for no translation. The translation is
+ applied to a pattern when it is compiled and to a string when it
+ is matched. */
+ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate);
+
+ /* Number of subexpressions found by the compiler. */
+ size_t re_nsub;
+
+ /* Zero if this pattern cannot match the empty string, one else.
+ Well, in truth it's used only in 're_search_2', to see whether or
+ not we should use the fastmap, so we don't set this absolutely
+ perfectly; see 're_compile_fastmap' (the "duplicate" case). */
+ unsigned __REPB_PREFIX(can_be_null) : 1;
+
+ /* If REGS_UNALLOCATED, allocate space in the 'regs' structure
+ for 'max (RE_NREGS, re_nsub + 1)' groups.
+ If REGS_REALLOCATE, reallocate space if necessary.
+ If REGS_FIXED, use what's there. */
+#ifdef __USE_GNU
+# define REGS_UNALLOCATED 0
+# define REGS_REALLOCATE 1
+# define REGS_FIXED 2
+#endif
+ unsigned __REPB_PREFIX(regs_allocated) : 2;
+
+ /* Set to zero when 're_compile_pattern' compiles a pattern; set to
+ one by 're_compile_fastmap' if it updates the fastmap. */
+ unsigned __REPB_PREFIX(fastmap_accurate) : 1;
+
+ /* If set, 're_match_2' does not return information about
+ subexpressions. */
+ unsigned __REPB_PREFIX(no_sub) : 1;
+
+ /* If set, a beginning-of-line anchor doesn't match at the beginning
+ of the string. */
+ unsigned __REPB_PREFIX(not_bol) : 1;
+
+ /* Similarly for an end-of-line anchor. */
+ unsigned __REPB_PREFIX(not_eol) : 1;
+
+ /* If true, an anchor at a newline matches. */
+ unsigned __REPB_PREFIX(newline_anchor) : 1;
+};
+
+typedef struct re_pattern_buffer regex_t;
+
+/* Type for byte offsets within the string. POSIX mandates this. */
+#ifdef _REGEX_LARGE_OFFSETS
+/* POSIX 1003.1-2008 requires that regoff_t be at least as wide as
+ ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t
+ is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not
+ visible here, so use ssize_t. */
+typedef ssize_t regoff_t;
+#else
+/* The traditional GNU regex implementation mishandles strings longer
+ than INT_MAX. */
+typedef int regoff_t;
+#endif
+
+
+#ifdef __USE_GNU
+/* This is the structure we store register match data in. See
+ regex.texinfo for a full description of what registers match. */
+struct re_registers
+{
+ __re_size_t num_regs;
+ regoff_t *start;
+ regoff_t *end;
+};
+
+
+/* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
+ 're_match_2' returns information about at least this many registers
+ the first time a 'regs' structure is passed. */
+# ifndef RE_NREGS
+# define RE_NREGS 30
+# endif
+#endif
+
+
+/* POSIX specification for registers. Aside from the different names than
+ 're_registers', POSIX uses an array of structures, instead of a
+ structure of arrays. */
+typedef struct
+{
+ regoff_t rm_so; /* Byte offset from string's start to substring's start. */
+ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
+} regmatch_t;
+
+/* Declarations for routines. */
+
+#ifndef _REGEX_NELTS
+# if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \
+ && !defined __STDC_NO_VLA__)
+# define _REGEX_NELTS(n) n
+# else
+# define _REGEX_NELTS(n)
+# endif
+#endif
+
+#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wvla"
+#endif
+
+#ifndef _Attr_access_
+# ifdef __attr_access
+# define _Attr_access_(arg) __attr_access (arg)
+# elif defined __GNUC__ && 10 <= __GNUC__
+# define _Attr_access_(x) __attribute__ ((__access__ x))
+# else
+# define _Attr_access_(x)
+# endif
+#endif
+
+#ifdef __USE_GNU
+/* Sets the current default syntax to SYNTAX, and return the old syntax.
+ You can also simply assign to the 're_syntax_options' variable. */
+extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax);
+
+/* Compile the regular expression PATTERN, with length LENGTH
+ and syntax given by the global 're_syntax_options', into the buffer
+ BUFFER. Return NULL if successful, and an error string if not.
+
+ To free the allocated storage, you must call 'regfree' on BUFFER.
+ Note that the translate table must either have been initialized by
+ 'regcomp', with a malloc'ed value, or set to NULL before calling
+ 'regfree'. */
+extern const char *re_compile_pattern (const char *__pattern, size_t __length,
+ struct re_pattern_buffer *__buffer)
+ _Attr_access_ ((__read_only__, 1, 2));
+
+
+/* Compile a fastmap for the compiled pattern in BUFFER; used to
+ accelerate searches. Return 0 if successful and -2 if was an
+ internal error. */
+extern int re_compile_fastmap (struct re_pattern_buffer *__buffer);
+
+
+/* Search in the string STRING (with length LENGTH) for the pattern
+ compiled into BUFFER. Start searching at position START, for RANGE
+ characters. Return the starting position of the match, -1 for no
+ match, or -2 for an internal error. Also return register
+ information in REGS (if REGS and BUFFER->no_sub are nonzero). */
+extern regoff_t re_search (struct re_pattern_buffer *__buffer,
+ const char *__String, regoff_t __length,
+ regoff_t __start, regoff_t __range,
+ struct re_registers *__regs)
+ _Attr_access_ ((__read_only__, 2, 3));
+
+
+/* Like 're_search', but search in the concatenation of STRING1 and
+ STRING2. Also, stop searching at index START + STOP. */
+extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer,
+ const char *__string1, regoff_t __length1,
+ const char *__string2, regoff_t __length2,
+ regoff_t __start, regoff_t __range,
+ struct re_registers *__regs,
+ regoff_t __stop)
+ _Attr_access_ ((__read_only__, 2, 3))
+ _Attr_access_ ((__read_only__, 4, 5));
+
+
+/* Like 're_search', but return how many characters in STRING the regexp
+ in BUFFER matched, starting at position START. */
+extern regoff_t re_match (struct re_pattern_buffer *__buffer,
+ const char *__String, regoff_t __length,
+ regoff_t __start, struct re_registers *__regs)
+ _Attr_access_ ((__read_only__, 2, 3));
+
+
+/* Relates to 're_match' as 're_search_2' relates to 're_search'. */
+extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer,
+ const char *__string1, regoff_t __length1,
+ const char *__string2, regoff_t __length2,
+ regoff_t __start, struct re_registers *__regs,
+ regoff_t __stop)
+ _Attr_access_ ((__read_only__, 2, 3))
+ _Attr_access_ ((__read_only__, 4, 5));
+
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+ ENDS. Subsequent matches using BUFFER and REGS will use this memory
+ for recording register information. STARTS and ENDS must be
+ allocated with malloc, and must each be at least 'NUM_REGS * sizeof
+ (regoff_t)' bytes long.
+
+ If NUM_REGS == 0, then subsequent matches should allocate their own
+ register data.
+
+ Unless this function is called, the first search or match using
+ BUFFER will allocate its own register data, without
+ freeing the old data. */
+extern void re_set_registers (struct re_pattern_buffer *__buffer,
+ struct re_registers *__regs,
+ __re_size_t __num_regs,
+ regoff_t *__starts, regoff_t *__ends);
+#endif /* Use GNU */
+
+#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC)
+/* 4.2 bsd compatibility. */
+extern char *re_comp (const char *);
+extern int re_exec (const char *);
+#endif
+
+/* For plain 'restrict', use glibc's __restrict if defined.
+ Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have
+ "restrict", and "configure" may have defined "restrict".
+ Other compilers use __restrict, __restrict__, and _Restrict, and
+ 'configure' might #define 'restrict' to those words, so pick a
+ different name. */
+#ifndef _Restrict_
+# if defined __restrict \
+ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
+ || __clang_major__ >= 3
+# define _Restrict_ __restrict
+# elif 199901L <= __STDC_VERSION__ || defined restrict
+# define _Restrict_ restrict
+# else
+# define _Restrict_
+# endif
+#endif
+/* For the ISO C99 syntax
+ array_name[restrict]
+ use glibc's __restrict_arr if available.
+ Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode).
+ Other ISO C99 compilers support it as well. */
+#ifndef _Restrict_arr_
+# ifdef __restrict_arr
+# define _Restrict_arr_ __restrict_arr
+# elif ((199901L <= __STDC_VERSION__ \
+ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ || __clang_major__ >= 3) \
+ && !defined __cplusplus)
+# define _Restrict_arr_ _Restrict_
+# else
+# define _Restrict_arr_
+# endif
+#endif
+
+/* POSIX compatibility. */
+extern int regcomp (regex_t *_Restrict_ __preg,
+ const char *_Restrict_ __pattern,
+ int __cflags);
+
+extern int regexec (const regex_t *_Restrict_ __preg,
+ const char *_Restrict_ __String, size_t __nmatch,
+ regmatch_t __pmatch[_Restrict_arr_
+ _REGEX_NELTS (__nmatch)],
+ int __eflags);
+
+extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg,
+ char *_Restrict_ __errbuf, size_t __errbuf_size)
+ _Attr_access_ ((__write_only__, 3, 4));
+
+extern void regfree (regex_t *__preg);
+
+#if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# pragma GCC diagnostic pop
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* C++ */
+
+#endif /* regex.h */
diff --git a/lib/regex_internal.c b/lib/regex_internal.c
new file mode 100644
index 0000000..998a19b
--- /dev/null
+++ b/lib/regex_internal.c
@@ -0,0 +1,1711 @@
+/* Extended regular expression matching and search library.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+static void re_string_construct_common (const char *str, Idx len,
+ re_string_t *pstr,
+ RE_TRANSLATE_TYPE trans, bool icase,
+ const re_dfa_t *dfa);
+static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa,
+ const re_node_set *nodes,
+ re_hashval_t hash);
+static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa,
+ const re_node_set *nodes,
+ unsigned int context,
+ re_hashval_t hash);
+static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr,
+ Idx new_buf_len);
+static void build_wcs_buffer (re_string_t *pstr);
+static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr);
+static void build_upper_buffer (re_string_t *pstr);
+static void re_string_translate_buffer (re_string_t *pstr);
+static unsigned int re_string_context_at (const re_string_t *input, Idx idx,
+ int eflags) __attribute__ ((pure));
+
+/* Functions for string operation. */
+
+/* This function allocate the buffers. It is necessary to call
+ re_string_reconstruct before using the object. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len,
+ RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
+{
+ reg_errcode_t ret;
+ Idx init_buf_len;
+
+ /* Ensure at least one character fits into the buffers. */
+ if (init_len < dfa->mb_cur_max)
+ init_len = dfa->mb_cur_max;
+ init_buf_len = (len + 1 < init_len) ? len + 1: init_len;
+ re_string_construct_common (str, len, pstr, trans, icase, dfa);
+
+ ret = re_string_realloc_buffers (pstr, init_buf_len);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+
+ pstr->word_char = dfa->word_char;
+ pstr->word_ops_used = dfa->word_ops_used;
+ pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
+ pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len;
+ pstr->valid_raw_len = pstr->valid_len;
+ return REG_NOERROR;
+}
+
+/* This function allocate the buffers, and initialize them. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_string_construct (re_string_t *pstr, const char *str, Idx len,
+ RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
+{
+ reg_errcode_t ret;
+ memset (pstr, '\0', sizeof (re_string_t));
+ re_string_construct_common (str, len, pstr, trans, icase, dfa);
+
+ if (len > 0)
+ {
+ ret = re_string_realloc_buffers (pstr, len + 1);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ }
+ pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str;
+
+ if (icase)
+ {
+ if (dfa->mb_cur_max > 1)
+ {
+ while (1)
+ {
+ ret = build_wcs_upper_buffer (pstr);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ if (pstr->valid_raw_len >= len)
+ break;
+ if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max)
+ break;
+ ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ }
+ }
+ else
+ build_upper_buffer (pstr);
+ }
+ else
+ {
+ if (dfa->mb_cur_max > 1)
+ build_wcs_buffer (pstr);
+ else
+ {
+ if (trans != NULL)
+ re_string_translate_buffer (pstr);
+ else
+ {
+ pstr->valid_len = pstr->bufs_len;
+ pstr->valid_raw_len = pstr->bufs_len;
+ }
+ }
+ }
+
+ return REG_NOERROR;
+}
+
+/* Helper functions for re_string_allocate, and re_string_construct. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len)
+{
+ if (pstr->mb_cur_max > 1)
+ {
+ wint_t *new_wcs;
+
+ /* Avoid overflow in realloc. */
+ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx));
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size)
+ < new_buf_len))
+ return REG_ESPACE;
+
+ new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len);
+ if (__glibc_unlikely (new_wcs == NULL))
+ return REG_ESPACE;
+ pstr->wcs = new_wcs;
+ if (pstr->offsets != NULL)
+ {
+ Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len);
+ if (__glibc_unlikely (new_offsets == NULL))
+ return REG_ESPACE;
+ pstr->offsets = new_offsets;
+ }
+ }
+ if (pstr->mbs_allocated)
+ {
+ unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char,
+ new_buf_len);
+ if (__glibc_unlikely (new_mbs == NULL))
+ return REG_ESPACE;
+ pstr->mbs = new_mbs;
+ }
+ pstr->bufs_len = new_buf_len;
+ return REG_NOERROR;
+}
+
+
+static void
+re_string_construct_common (const char *str, Idx len, re_string_t *pstr,
+ RE_TRANSLATE_TYPE trans, bool icase,
+ const re_dfa_t *dfa)
+{
+ pstr->raw_mbs = (const unsigned char *) str;
+ pstr->len = len;
+ pstr->raw_len = len;
+ pstr->trans = trans;
+ pstr->icase = icase;
+ pstr->mbs_allocated = (trans != NULL || icase);
+ pstr->mb_cur_max = dfa->mb_cur_max;
+ pstr->is_utf8 = dfa->is_utf8;
+ pstr->map_notascii = dfa->map_notascii;
+ pstr->stop = pstr->len;
+ pstr->raw_stop = pstr->stop;
+}
+
+
+/* Build wide character buffer PSTR->WCS.
+ If the byte sequence of the string are:
+ <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3>
+ Then wide character buffer will be:
+ <wc1> , WEOF , <wc2> , WEOF , <wc3>
+ We use WEOF for padding, they indicate that the position isn't
+ a first byte of a multibyte character.
+
+ Note that this function assumes PSTR->VALID_LEN elements are already
+ built and starts from PSTR->VALID_LEN. */
+
+static void
+build_wcs_buffer (re_string_t *pstr)
+{
+#ifdef _LIBC
+ unsigned char buf[MB_LEN_MAX];
+ DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max);
+#else
+ unsigned char buf[64];
+#endif
+ mbstate_t prev_st;
+ Idx byte_idx, end_idx, remain_len;
+ size_t mbclen;
+
+ /* Build the buffers from pstr->valid_len to either pstr->len or
+ pstr->bufs_len. */
+ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+ for (byte_idx = pstr->valid_len; byte_idx < end_idx;)
+ {
+ wchar_t wc;
+ const char *p;
+
+ remain_len = end_idx - byte_idx;
+ prev_st = pstr->cur_state;
+ /* Apply the translation if we need. */
+ if (__glibc_unlikely (pstr->trans != NULL))
+ {
+ int i, ch;
+
+ for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
+ {
+ ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i];
+ buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch];
+ }
+ p = (const char *) buf;
+ }
+ else
+ p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx;
+ mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+ if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0
+ || (mbclen == (size_t) -2
+ && pstr->bufs_len >= pstr->len)))
+ {
+ /* We treat these cases as a singlebyte character. */
+ mbclen = 1;
+ wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
+ if (__glibc_unlikely (pstr->trans != NULL))
+ wc = pstr->trans[wc];
+ pstr->cur_state = prev_st;
+ }
+ else if (__glibc_unlikely (mbclen == (size_t) -2))
+ {
+ /* The buffer doesn't have enough space, finish to build. */
+ pstr->cur_state = prev_st;
+ break;
+ }
+
+ /* Write wide character and padding. */
+ pstr->wcs[byte_idx++] = wc;
+ /* Write paddings. */
+ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+ pstr->wcs[byte_idx++] = WEOF;
+ }
+ pstr->valid_len = byte_idx;
+ pstr->valid_raw_len = byte_idx;
+}
+
+/* Build wide character buffer PSTR->WCS like build_wcs_buffer,
+ but for REG_ICASE. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+build_wcs_upper_buffer (re_string_t *pstr)
+{
+ mbstate_t prev_st;
+ Idx src_idx, byte_idx, end_idx, remain_len;
+ size_t mbclen;
+#ifdef _LIBC
+ char buf[MB_LEN_MAX];
+ DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX);
+#else
+ char buf[64];
+#endif
+
+ byte_idx = pstr->valid_len;
+ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+ /* The following optimization assumes that ASCII characters can be
+ mapped to wide characters with a simple cast. */
+ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed)
+ {
+ while (byte_idx < end_idx)
+ {
+ wchar_t wc;
+ unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx];
+
+ if (isascii (ch) && mbsinit (&pstr->cur_state))
+ {
+ /* The next step uses the assumption that wchar_t is encoded
+ ASCII-safe: all ASCII values can be converted like this. */
+ wchar_t wcu = __towupper (ch);
+ if (isascii (wcu))
+ {
+ pstr->mbs[byte_idx] = wcu;
+ pstr->wcs[byte_idx] = wcu;
+ byte_idx++;
+ continue;
+ }
+ }
+
+ remain_len = end_idx - byte_idx;
+ prev_st = pstr->cur_state;
+ mbclen = __mbrtowc (&wc,
+ ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx
+ + byte_idx), remain_len, &pstr->cur_state);
+ if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2))
+ {
+ wchar_t wcu = __towupper (wc);
+ if (wcu != wc)
+ {
+ size_t mbcdlen;
+
+ mbcdlen = __wcrtomb (buf, wcu, &prev_st);
+ if (__glibc_likely (mbclen == mbcdlen))
+ memcpy (pstr->mbs + byte_idx, buf, mbclen);
+ else
+ {
+ src_idx = byte_idx;
+ goto offsets_needed;
+ }
+ }
+ else
+ memcpy (pstr->mbs + byte_idx,
+ pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen);
+ pstr->wcs[byte_idx++] = wcu;
+ /* Write paddings. */
+ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+ pstr->wcs[byte_idx++] = WEOF;
+ }
+ else if (mbclen == (size_t) -1 || mbclen == 0
+ || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))
+ {
+ /* It is an invalid character, an incomplete character
+ at the end of the string, or '\0'. Just use the byte. */
+ pstr->mbs[byte_idx] = ch;
+ /* And also cast it to wide char. */
+ pstr->wcs[byte_idx++] = (wchar_t) ch;
+ if (__glibc_unlikely (mbclen == (size_t) -1))
+ pstr->cur_state = prev_st;
+ }
+ else
+ {
+ /* The buffer doesn't have enough space, finish to build. */
+ pstr->cur_state = prev_st;
+ break;
+ }
+ }
+ pstr->valid_len = byte_idx;
+ pstr->valid_raw_len = byte_idx;
+ return REG_NOERROR;
+ }
+ else
+ for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;)
+ {
+ wchar_t wc;
+ const char *p;
+ offsets_needed:
+ remain_len = end_idx - byte_idx;
+ prev_st = pstr->cur_state;
+ if (__glibc_unlikely (pstr->trans != NULL))
+ {
+ int i, ch;
+
+ for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i)
+ {
+ ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i];
+ buf[i] = pstr->trans[ch];
+ }
+ p = (const char *) buf;
+ }
+ else
+ p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx;
+ mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state);
+ if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2))
+ {
+ wchar_t wcu = __towupper (wc);
+ if (wcu != wc)
+ {
+ size_t mbcdlen;
+
+ mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st);
+ if (__glibc_likely (mbclen == mbcdlen))
+ memcpy (pstr->mbs + byte_idx, buf, mbclen);
+ else if (mbcdlen != (size_t) -1)
+ {
+ size_t i;
+
+ if (byte_idx + mbcdlen > pstr->bufs_len)
+ {
+ pstr->cur_state = prev_st;
+ break;
+ }
+
+ if (pstr->offsets == NULL)
+ {
+ pstr->offsets = re_malloc (Idx, pstr->bufs_len);
+
+ if (pstr->offsets == NULL)
+ return REG_ESPACE;
+ }
+ if (!pstr->offsets_needed)
+ {
+ for (i = 0; i < (size_t) byte_idx; ++i)
+ pstr->offsets[i] = i;
+ pstr->offsets_needed = 1;
+ }
+
+ memcpy (pstr->mbs + byte_idx, buf, mbcdlen);
+ pstr->wcs[byte_idx] = wcu;
+ pstr->offsets[byte_idx] = src_idx;
+ for (i = 1; i < mbcdlen; ++i)
+ {
+ pstr->offsets[byte_idx + i]
+ = src_idx + (i < mbclen ? i : mbclen - 1);
+ pstr->wcs[byte_idx + i] = WEOF;
+ }
+ pstr->len += mbcdlen - mbclen;
+ if (pstr->raw_stop > src_idx)
+ pstr->stop += mbcdlen - mbclen;
+ end_idx = (pstr->bufs_len > pstr->len)
+ ? pstr->len : pstr->bufs_len;
+ byte_idx += mbcdlen;
+ src_idx += mbclen;
+ continue;
+ }
+ else
+ memcpy (pstr->mbs + byte_idx, p, mbclen);
+ }
+ else
+ memcpy (pstr->mbs + byte_idx, p, mbclen);
+
+ if (__glibc_unlikely (pstr->offsets_needed != 0))
+ {
+ size_t i;
+ for (i = 0; i < mbclen; ++i)
+ pstr->offsets[byte_idx + i] = src_idx + i;
+ }
+ src_idx += mbclen;
+
+ pstr->wcs[byte_idx++] = wcu;
+ /* Write paddings. */
+ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;)
+ pstr->wcs[byte_idx++] = WEOF;
+ }
+ else if (mbclen == (size_t) -1 || mbclen == 0
+ || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))
+ {
+ /* It is an invalid character or '\0'. Just use the byte. */
+ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx];
+
+ if (__glibc_unlikely (pstr->trans != NULL))
+ ch = pstr->trans [ch];
+ pstr->mbs[byte_idx] = ch;
+
+ if (__glibc_unlikely (pstr->offsets_needed != 0))
+ pstr->offsets[byte_idx] = src_idx;
+ ++src_idx;
+
+ /* And also cast it to wide char. */
+ pstr->wcs[byte_idx++] = (wchar_t) ch;
+ if (__glibc_unlikely (mbclen == (size_t) -1))
+ pstr->cur_state = prev_st;
+ }
+ else
+ {
+ /* The buffer doesn't have enough space, finish to build. */
+ pstr->cur_state = prev_st;
+ break;
+ }
+ }
+ pstr->valid_len = byte_idx;
+ pstr->valid_raw_len = src_idx;
+ return REG_NOERROR;
+}
+
+/* Skip characters until the index becomes greater than NEW_RAW_IDX.
+ Return the index. */
+
+static Idx
+re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc)
+{
+ mbstate_t prev_st;
+ Idx rawbuf_idx;
+ size_t mbclen;
+ wint_t wc = WEOF;
+
+ /* Skip the characters which are not necessary to check. */
+ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len;
+ rawbuf_idx < new_raw_idx;)
+ {
+ wchar_t wc2;
+ Idx remain_len = pstr->raw_len - rawbuf_idx;
+ prev_st = pstr->cur_state;
+ mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx,
+ remain_len, &pstr->cur_state);
+ if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1
+ || mbclen == 0))
+ {
+ /* We treat these cases as a single byte character. */
+ if (mbclen == 0 || remain_len == 0)
+ wc = L'\0';
+ else
+ wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx);
+ mbclen = 1;
+ pstr->cur_state = prev_st;
+ }
+ else
+ wc = wc2;
+ /* Then proceed the next character. */
+ rawbuf_idx += mbclen;
+ }
+ *last_wc = wc;
+ return rawbuf_idx;
+}
+
+/* Build the buffer PSTR->MBS, and apply the translation if we need.
+ This function is used in case of REG_ICASE. */
+
+static void
+build_upper_buffer (re_string_t *pstr)
+{
+ Idx char_idx, end_idx;
+ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+ for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx)
+ {
+ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx];
+ if (__glibc_unlikely (pstr->trans != NULL))
+ ch = pstr->trans[ch];
+ pstr->mbs[char_idx] = toupper (ch);
+ }
+ pstr->valid_len = char_idx;
+ pstr->valid_raw_len = char_idx;
+}
+
+/* Apply TRANS to the buffer in PSTR. */
+
+static void
+re_string_translate_buffer (re_string_t *pstr)
+{
+ Idx buf_idx, end_idx;
+ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len;
+
+ for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx)
+ {
+ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx];
+ pstr->mbs[buf_idx] = pstr->trans[ch];
+ }
+
+ pstr->valid_len = buf_idx;
+ pstr->valid_raw_len = buf_idx;
+}
+
+/* This function re-construct the buffers.
+ Concretely, convert to wide character in case of pstr->mb_cur_max > 1,
+ convert to upper case in case of REG_ICASE, apply translation. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags)
+{
+ Idx offset;
+
+ if (__glibc_unlikely (pstr->raw_mbs_idx <= idx))
+ offset = idx - pstr->raw_mbs_idx;
+ else
+ {
+ /* Reset buffer. */
+ if (pstr->mb_cur_max > 1)
+ memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
+ pstr->len = pstr->raw_len;
+ pstr->stop = pstr->raw_stop;
+ pstr->valid_len = 0;
+ pstr->raw_mbs_idx = 0;
+ pstr->valid_raw_len = 0;
+ pstr->offsets_needed = 0;
+ pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
+ : CONTEXT_NEWLINE | CONTEXT_BEGBUF);
+ if (!pstr->mbs_allocated)
+ pstr->mbs = (unsigned char *) pstr->raw_mbs;
+ offset = idx;
+ }
+
+ if (__glibc_likely (offset != 0))
+ {
+ /* Should the already checked characters be kept? */
+ if (__glibc_likely (offset < pstr->valid_raw_len))
+ {
+ /* Yes, move them to the front of the buffer. */
+ if (__glibc_unlikely (pstr->offsets_needed))
+ {
+ Idx low = 0, high = pstr->valid_len, mid;
+ do
+ {
+ mid = (high + low) / 2;
+ if (pstr->offsets[mid] > offset)
+ high = mid;
+ else if (pstr->offsets[mid] < offset)
+ low = mid + 1;
+ else
+ break;
+ }
+ while (low < high);
+ if (pstr->offsets[mid] < offset)
+ ++mid;
+ pstr->tip_context = re_string_context_at (pstr, mid - 1,
+ eflags);
+ /* This can be quite complicated, so handle specially
+ only the common and easy case where the character with
+ different length representation of lower and upper
+ case is present at or after offset. */
+ if (pstr->valid_len > offset
+ && mid == offset && pstr->offsets[mid] == offset)
+ {
+ memmove (pstr->wcs, pstr->wcs + offset,
+ (pstr->valid_len - offset) * sizeof (wint_t));
+ memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset);
+ pstr->valid_len -= offset;
+ pstr->valid_raw_len -= offset;
+ for (low = 0; low < pstr->valid_len; low++)
+ pstr->offsets[low] = pstr->offsets[low + offset] - offset;
+ }
+ else
+ {
+ /* Otherwise, just find out how long the partial multibyte
+ character at offset is and fill it with WEOF/255. */
+ pstr->len = pstr->raw_len - idx + offset;
+ pstr->stop = pstr->raw_stop - idx + offset;
+ pstr->offsets_needed = 0;
+ while (mid > 0 && pstr->offsets[mid - 1] == offset)
+ --mid;
+ while (mid < pstr->valid_len)
+ if (pstr->wcs[mid] != WEOF)
+ break;
+ else
+ ++mid;
+ if (mid == pstr->valid_len)
+ pstr->valid_len = 0;
+ else
+ {
+ pstr->valid_len = pstr->offsets[mid] - offset;
+ if (pstr->valid_len)
+ {
+ for (low = 0; low < pstr->valid_len; ++low)
+ pstr->wcs[low] = WEOF;
+ memset (pstr->mbs, 255, pstr->valid_len);
+ }
+ }
+ pstr->valid_raw_len = pstr->valid_len;
+ }
+ }
+ else
+ {
+ pstr->tip_context = re_string_context_at (pstr, offset - 1,
+ eflags);
+ if (pstr->mb_cur_max > 1)
+ memmove (pstr->wcs, pstr->wcs + offset,
+ (pstr->valid_len - offset) * sizeof (wint_t));
+ if (__glibc_unlikely (pstr->mbs_allocated))
+ memmove (pstr->mbs, pstr->mbs + offset,
+ pstr->valid_len - offset);
+ pstr->valid_len -= offset;
+ pstr->valid_raw_len -= offset;
+ DEBUG_ASSERT (pstr->valid_len > 0);
+ }
+ }
+ else
+ {
+ /* No, skip all characters until IDX. */
+ Idx prev_valid_len = pstr->valid_len;
+
+ if (__glibc_unlikely (pstr->offsets_needed))
+ {
+ pstr->len = pstr->raw_len - idx + offset;
+ pstr->stop = pstr->raw_stop - idx + offset;
+ pstr->offsets_needed = 0;
+ }
+ pstr->valid_len = 0;
+ if (pstr->mb_cur_max > 1)
+ {
+ Idx wcs_idx;
+ wint_t wc = WEOF;
+
+ if (pstr->is_utf8)
+ {
+ const unsigned char *raw, *p, *end;
+
+ /* Special case UTF-8. Multi-byte chars start with any
+ byte other than 0x80 - 0xbf. */
+ raw = pstr->raw_mbs + pstr->raw_mbs_idx;
+ end = raw + (offset - pstr->mb_cur_max);
+ if (end < pstr->raw_mbs)
+ end = pstr->raw_mbs;
+ p = raw + offset - 1;
+#ifdef _LIBC
+ /* We know the wchar_t encoding is UCS4, so for the simple
+ case, ASCII characters, skip the conversion step. */
+ if (isascii (*p) && __glibc_likely (pstr->trans == NULL))
+ {
+ memset (&pstr->cur_state, '\0', sizeof (mbstate_t));
+ /* pstr->valid_len = 0; */
+ wc = (wchar_t) *p;
+ }
+ else
+#endif
+ for (; p >= end; --p)
+ if ((*p & 0xc0) != 0x80)
+ {
+ mbstate_t cur_state;
+ wchar_t wc2;
+ Idx mlen = raw + pstr->len - p;
+ unsigned char buf[6];
+ size_t mbclen;
+
+ const unsigned char *pp = p;
+ if (__glibc_unlikely (pstr->trans != NULL))
+ {
+ int i = mlen < 6 ? mlen : 6;
+ while (--i >= 0)
+ buf[i] = pstr->trans[p[i]];
+ pp = buf;
+ }
+ /* XXX Don't use mbrtowc, we know which conversion
+ to use (UTF-8 -> UCS4). */
+ memset (&cur_state, 0, sizeof (cur_state));
+ mbclen = __mbrtowc (&wc2, (const char *) pp, mlen,
+ &cur_state);
+ if (raw + offset - p <= mbclen
+ && mbclen < (size_t) -2)
+ {
+ memset (&pstr->cur_state, '\0',
+ sizeof (mbstate_t));
+ pstr->valid_len = mbclen - (raw + offset - p);
+ wc = wc2;
+ }
+ break;
+ }
+ }
+
+ if (wc == WEOF)
+ pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx;
+ if (wc == WEOF)
+ pstr->tip_context
+ = re_string_context_at (pstr, prev_valid_len - 1, eflags);
+ else
+ pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0)
+ && IS_WIDE_WORD_CHAR (wc))
+ ? CONTEXT_WORD
+ : ((IS_WIDE_NEWLINE (wc)
+ && pstr->newline_anchor)
+ ? CONTEXT_NEWLINE : 0));
+ if (__glibc_unlikely (pstr->valid_len))
+ {
+ for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx)
+ pstr->wcs[wcs_idx] = WEOF;
+ if (pstr->mbs_allocated)
+ memset (pstr->mbs, 255, pstr->valid_len);
+ }
+ pstr->valid_raw_len = pstr->valid_len;
+ }
+ else
+ {
+ int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1];
+ pstr->valid_raw_len = 0;
+ if (pstr->trans)
+ c = pstr->trans[c];
+ pstr->tip_context = (bitset_contain (pstr->word_char, c)
+ ? CONTEXT_WORD
+ : ((IS_NEWLINE (c) && pstr->newline_anchor)
+ ? CONTEXT_NEWLINE : 0));
+ }
+ }
+ if (!__glibc_unlikely (pstr->mbs_allocated))
+ pstr->mbs += offset;
+ }
+ pstr->raw_mbs_idx = idx;
+ pstr->len -= offset;
+ pstr->stop -= offset;
+
+ /* Then build the buffers. */
+ if (pstr->mb_cur_max > 1)
+ {
+ if (pstr->icase)
+ {
+ reg_errcode_t ret = build_wcs_upper_buffer (pstr);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ }
+ else
+ build_wcs_buffer (pstr);
+ }
+ else
+ if (__glibc_unlikely (pstr->mbs_allocated))
+ {
+ if (pstr->icase)
+ build_upper_buffer (pstr);
+ else if (pstr->trans != NULL)
+ re_string_translate_buffer (pstr);
+ }
+ else
+ pstr->valid_len = pstr->len;
+
+ pstr->cur_idx = 0;
+ return REG_NOERROR;
+}
+
+static unsigned char
+__attribute__ ((pure))
+re_string_peek_byte_case (const re_string_t *pstr, Idx idx)
+{
+ int ch;
+ Idx off;
+
+ /* Handle the common (easiest) cases first. */
+ if (__glibc_likely (!pstr->mbs_allocated))
+ return re_string_peek_byte (pstr, idx);
+
+ if (pstr->mb_cur_max > 1
+ && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx))
+ return re_string_peek_byte (pstr, idx);
+
+ off = pstr->cur_idx + idx;
+ if (pstr->offsets_needed)
+ off = pstr->offsets[off];
+
+ ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
+
+ /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I
+ this function returns CAPITAL LETTER I instead of first byte of
+ DOTLESS SMALL LETTER I. The latter would confuse the parser,
+ since peek_byte_case doesn't advance cur_idx in any way. */
+ if (pstr->offsets_needed && !isascii (ch))
+ return re_string_peek_byte (pstr, idx);
+
+ return ch;
+}
+
+static unsigned char
+re_string_fetch_byte_case (re_string_t *pstr)
+{
+ if (__glibc_likely (!pstr->mbs_allocated))
+ return re_string_fetch_byte (pstr);
+
+ if (pstr->offsets_needed)
+ {
+ Idx off;
+ int ch;
+
+ /* For tr_TR.UTF-8 [[:islower:]] there is
+ [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip
+ in that case the whole multi-byte character and return
+ the original letter. On the other side, with
+ [[: DOTLESS SMALL LETTER I return [[:I, as doing
+ anything else would complicate things too much. */
+
+ if (!re_string_first_byte (pstr, pstr->cur_idx))
+ return re_string_fetch_byte (pstr);
+
+ off = pstr->offsets[pstr->cur_idx];
+ ch = pstr->raw_mbs[pstr->raw_mbs_idx + off];
+
+ if (! isascii (ch))
+ return re_string_fetch_byte (pstr);
+
+ re_string_skip_bytes (pstr,
+ re_string_char_size_at (pstr, pstr->cur_idx));
+ return ch;
+ }
+
+ return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++];
+}
+
+static void
+re_string_destruct (re_string_t *pstr)
+{
+ re_free (pstr->wcs);
+ re_free (pstr->offsets);
+ if (pstr->mbs_allocated)
+ re_free (pstr->mbs);
+}
+
+/* Return the context at IDX in INPUT. */
+
+static unsigned int
+re_string_context_at (const re_string_t *input, Idx idx, int eflags)
+{
+ int c;
+ if (__glibc_unlikely (idx < 0))
+ /* In this case, we use the value stored in input->tip_context,
+ since we can't know the character in input->mbs[-1] here. */
+ return input->tip_context;
+ if (__glibc_unlikely (idx == input->len))
+ return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF
+ : CONTEXT_NEWLINE | CONTEXT_ENDBUF);
+ if (input->mb_cur_max > 1)
+ {
+ wint_t wc;
+ Idx wc_idx = idx;
+ while(input->wcs[wc_idx] == WEOF)
+ {
+ DEBUG_ASSERT (wc_idx >= 0);
+ --wc_idx;
+ if (wc_idx < 0)
+ return input->tip_context;
+ }
+ wc = input->wcs[wc_idx];
+ if (__glibc_unlikely (input->word_ops_used != 0)
+ && IS_WIDE_WORD_CHAR (wc))
+ return CONTEXT_WORD;
+ return (IS_WIDE_NEWLINE (wc) && input->newline_anchor
+ ? CONTEXT_NEWLINE : 0);
+ }
+ else
+ {
+ c = re_string_byte_at (input, idx);
+ if (bitset_contain (input->word_char, c))
+ return CONTEXT_WORD;
+ return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0;
+ }
+}
+
+/* Functions for set operation. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_alloc (re_node_set *set, Idx size)
+{
+ set->alloc = size;
+ set->nelem = 0;
+ set->elems = re_malloc (Idx, size);
+ if (__glibc_unlikely (set->elems == NULL)
+ && (MALLOC_0_IS_NONNULL || size != 0))
+ return REG_ESPACE;
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_init_1 (re_node_set *set, Idx elem)
+{
+ set->alloc = 1;
+ set->nelem = 1;
+ set->elems = re_malloc (Idx, 1);
+ if (__glibc_unlikely (set->elems == NULL))
+ {
+ set->alloc = set->nelem = 0;
+ return REG_ESPACE;
+ }
+ set->elems[0] = elem;
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2)
+{
+ set->alloc = 2;
+ set->elems = re_malloc (Idx, 2);
+ if (__glibc_unlikely (set->elems == NULL))
+ return REG_ESPACE;
+ if (elem1 == elem2)
+ {
+ set->nelem = 1;
+ set->elems[0] = elem1;
+ }
+ else
+ {
+ set->nelem = 2;
+ if (elem1 < elem2)
+ {
+ set->elems[0] = elem1;
+ set->elems[1] = elem2;
+ }
+ else
+ {
+ set->elems[0] = elem2;
+ set->elems[1] = elem1;
+ }
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_init_copy (re_node_set *dest, const re_node_set *src)
+{
+ dest->nelem = src->nelem;
+ if (src->nelem > 0)
+ {
+ dest->alloc = dest->nelem;
+ dest->elems = re_malloc (Idx, dest->alloc);
+ if (__glibc_unlikely (dest->elems == NULL))
+ {
+ dest->alloc = dest->nelem = 0;
+ return REG_ESPACE;
+ }
+ memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
+ }
+ else
+ re_node_set_init_empty (dest);
+ return REG_NOERROR;
+}
+
+/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to
+ DEST. Return value indicate the error code or REG_NOERROR if succeeded.
+ Note: We assume dest->elems is NULL, when dest->alloc is 0. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
+ const re_node_set *src2)
+{
+ Idx i1, i2, is, id, delta, sbase;
+ if (src1->nelem == 0 || src2->nelem == 0)
+ return REG_NOERROR;
+
+ /* We need dest->nelem + 2 * elems_in_intersection; this is a
+ conservative estimate. */
+ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc)
+ {
+ Idx new_alloc = src1->nelem + src2->nelem + dest->alloc;
+ Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc);
+ if (__glibc_unlikely (new_elems == NULL))
+ return REG_ESPACE;
+ dest->elems = new_elems;
+ dest->alloc = new_alloc;
+ }
+
+ /* Find the items in the intersection of SRC1 and SRC2, and copy
+ into the top of DEST those that are not already in DEST itself. */
+ sbase = dest->nelem + src1->nelem + src2->nelem;
+ i1 = src1->nelem - 1;
+ i2 = src2->nelem - 1;
+ id = dest->nelem - 1;
+ for (;;)
+ {
+ if (src1->elems[i1] == src2->elems[i2])
+ {
+ /* Try to find the item in DEST. Maybe we could binary search? */
+ while (id >= 0 && dest->elems[id] > src1->elems[i1])
+ --id;
+
+ if (id < 0 || dest->elems[id] != src1->elems[i1])
+ dest->elems[--sbase] = src1->elems[i1];
+
+ if (--i1 < 0 || --i2 < 0)
+ break;
+ }
+
+ /* Lower the highest of the two items. */
+ else if (src1->elems[i1] < src2->elems[i2])
+ {
+ if (--i2 < 0)
+ break;
+ }
+ else
+ {
+ if (--i1 < 0)
+ break;
+ }
+ }
+
+ id = dest->nelem - 1;
+ is = dest->nelem + src1->nelem + src2->nelem - 1;
+ delta = is - sbase + 1;
+
+ /* Now copy. When DELTA becomes zero, the remaining
+ DEST elements are already in place; this is more or
+ less the same loop that is in re_node_set_merge. */
+ dest->nelem += delta;
+ if (delta > 0 && id >= 0)
+ for (;;)
+ {
+ if (dest->elems[is] > dest->elems[id])
+ {
+ /* Copy from the top. */
+ dest->elems[id + delta--] = dest->elems[is--];
+ if (delta == 0)
+ break;
+ }
+ else
+ {
+ /* Slide from the bottom. */
+ dest->elems[id + delta] = dest->elems[id];
+ if (--id < 0)
+ break;
+ }
+ }
+
+ /* Copy remaining SRC elements. */
+ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx));
+
+ return REG_NOERROR;
+}
+
+/* Calculate the union set of the sets SRC1 and SRC2. And store it to
+ DEST. Return value indicate the error code or REG_NOERROR if succeeded. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_init_union (re_node_set *dest, const re_node_set *src1,
+ const re_node_set *src2)
+{
+ Idx i1, i2, id;
+ if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0)
+ {
+ dest->alloc = src1->nelem + src2->nelem;
+ dest->elems = re_malloc (Idx, dest->alloc);
+ if (__glibc_unlikely (dest->elems == NULL))
+ return REG_ESPACE;
+ }
+ else
+ {
+ if (src1 != NULL && src1->nelem > 0)
+ return re_node_set_init_copy (dest, src1);
+ else if (src2 != NULL && src2->nelem > 0)
+ return re_node_set_init_copy (dest, src2);
+ else
+ re_node_set_init_empty (dest);
+ return REG_NOERROR;
+ }
+ for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;)
+ {
+ if (src1->elems[i1] > src2->elems[i2])
+ {
+ dest->elems[id++] = src2->elems[i2++];
+ continue;
+ }
+ if (src1->elems[i1] == src2->elems[i2])
+ ++i2;
+ dest->elems[id++] = src1->elems[i1++];
+ }
+ if (i1 < src1->nelem)
+ {
+ memcpy (dest->elems + id, src1->elems + i1,
+ (src1->nelem - i1) * sizeof (Idx));
+ id += src1->nelem - i1;
+ }
+ else if (i2 < src2->nelem)
+ {
+ memcpy (dest->elems + id, src2->elems + i2,
+ (src2->nelem - i2) * sizeof (Idx));
+ id += src2->nelem - i2;
+ }
+ dest->nelem = id;
+ return REG_NOERROR;
+}
+
+/* Calculate the union set of the sets DEST and SRC. And store it to
+ DEST. Return value indicate the error code or REG_NOERROR if succeeded. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_node_set_merge (re_node_set *dest, const re_node_set *src)
+{
+ Idx is, id, sbase, delta;
+ if (src == NULL || src->nelem == 0)
+ return REG_NOERROR;
+ if (dest->alloc < 2 * src->nelem + dest->nelem)
+ {
+ Idx new_alloc = 2 * (src->nelem + dest->alloc);
+ Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc);
+ if (__glibc_unlikely (new_buffer == NULL))
+ return REG_ESPACE;
+ dest->elems = new_buffer;
+ dest->alloc = new_alloc;
+ }
+
+ if (__glibc_unlikely (dest->nelem == 0))
+ {
+ /* Although we already guaranteed above that dest->alloc != 0 and
+ therefore dest->elems != NULL, add a debug assertion to pacify
+ GCC 11.2.1's -fanalyzer. */
+ DEBUG_ASSERT (dest->elems);
+ dest->nelem = src->nelem;
+ memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx));
+ return REG_NOERROR;
+ }
+
+ /* Copy into the top of DEST the items of SRC that are not
+ found in DEST. Maybe we could binary search in DEST? */
+ for (sbase = dest->nelem + 2 * src->nelem,
+ is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; )
+ {
+ if (dest->elems[id] == src->elems[is])
+ is--, id--;
+ else if (dest->elems[id] < src->elems[is])
+ dest->elems[--sbase] = src->elems[is--];
+ else /* if (dest->elems[id] > src->elems[is]) */
+ --id;
+ }
+
+ if (is >= 0)
+ {
+ /* If DEST is exhausted, the remaining items of SRC must be unique. */
+ sbase -= is + 1;
+ memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx));
+ }
+
+ id = dest->nelem - 1;
+ is = dest->nelem + 2 * src->nelem - 1;
+ delta = is - sbase + 1;
+ if (delta == 0)
+ return REG_NOERROR;
+
+ /* Now copy. When DELTA becomes zero, the remaining
+ DEST elements are already in place. */
+ dest->nelem += delta;
+ for (;;)
+ {
+ if (dest->elems[is] > dest->elems[id])
+ {
+ /* Copy from the top. */
+ dest->elems[id + delta--] = dest->elems[is--];
+ if (delta == 0)
+ break;
+ }
+ else
+ {
+ /* Slide from the bottom. */
+ dest->elems[id + delta] = dest->elems[id];
+ if (--id < 0)
+ {
+ /* Copy remaining SRC elements. */
+ memcpy (dest->elems, dest->elems + sbase,
+ delta * sizeof (Idx));
+ break;
+ }
+ }
+ }
+
+ return REG_NOERROR;
+}
+
+/* Insert the new element ELEM to the re_node_set* SET.
+ SET should not already have ELEM.
+ Return true if successful. */
+
+static bool
+__attribute_warn_unused_result__
+re_node_set_insert (re_node_set *set, Idx elem)
+{
+ Idx idx;
+ /* In case the set is empty. */
+ if (set->alloc == 0)
+ return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR);
+
+ if (__glibc_unlikely (set->nelem) == 0)
+ {
+ /* Although we already guaranteed above that set->alloc != 0 and
+ therefore set->elems != NULL, add a debug assertion to pacify
+ GCC 11.2 -fanalyzer. */
+ DEBUG_ASSERT (set->elems);
+ set->elems[0] = elem;
+ ++set->nelem;
+ return true;
+ }
+
+ /* Realloc if we need. */
+ if (set->alloc == set->nelem)
+ {
+ Idx *new_elems;
+ set->alloc = set->alloc * 2;
+ new_elems = re_realloc (set->elems, Idx, set->alloc);
+ if (__glibc_unlikely (new_elems == NULL))
+ return false;
+ set->elems = new_elems;
+ }
+
+ /* Move the elements which follows the new element. Test the
+ first element separately to skip a check in the inner loop. */
+ if (elem < set->elems[0])
+ {
+ for (idx = set->nelem; idx > 0; idx--)
+ set->elems[idx] = set->elems[idx - 1];
+ }
+ else
+ {
+ for (idx = set->nelem; set->elems[idx - 1] > elem; idx--)
+ set->elems[idx] = set->elems[idx - 1];
+ DEBUG_ASSERT (set->elems[idx - 1] < elem);
+ }
+
+ /* Insert the new element. */
+ set->elems[idx] = elem;
+ ++set->nelem;
+ return true;
+}
+
+/* Insert the new element ELEM to the re_node_set* SET.
+ SET should not already have any element greater than or equal to ELEM.
+ Return true if successful. */
+
+static bool
+__attribute_warn_unused_result__
+re_node_set_insert_last (re_node_set *set, Idx elem)
+{
+ /* Realloc if we need. */
+ if (set->alloc == set->nelem)
+ {
+ Idx *new_elems;
+ set->alloc = (set->alloc + 1) * 2;
+ new_elems = re_realloc (set->elems, Idx, set->alloc);
+ if (__glibc_unlikely (new_elems == NULL))
+ return false;
+ set->elems = new_elems;
+ }
+
+ /* Insert the new element. */
+ set->elems[set->nelem++] = elem;
+ return true;
+}
+
+/* Compare two node sets SET1 and SET2.
+ Return true if SET1 and SET2 are equivalent. */
+
+static bool
+__attribute__ ((pure))
+re_node_set_compare (const re_node_set *set1, const re_node_set *set2)
+{
+ Idx i;
+ if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem)
+ return false;
+ for (i = set1->nelem ; --i >= 0 ; )
+ if (set1->elems[i] != set2->elems[i])
+ return false;
+ return true;
+}
+
+/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */
+
+static Idx
+__attribute__ ((pure))
+re_node_set_contains (const re_node_set *set, Idx elem)
+{
+ __re_size_t idx, right, mid;
+ if (set->nelem <= 0)
+ return 0;
+
+ /* Binary search the element. */
+ idx = 0;
+ right = set->nelem - 1;
+ while (idx < right)
+ {
+ mid = (idx + right) / 2;
+ if (set->elems[mid] < elem)
+ idx = mid + 1;
+ else
+ right = mid;
+ }
+ return set->elems[idx] == elem ? idx + 1 : 0;
+}
+
+static void
+re_node_set_remove_at (re_node_set *set, Idx idx)
+{
+ if (idx < 0 || idx >= set->nelem)
+ return;
+ --set->nelem;
+ for (; idx < set->nelem; idx++)
+ set->elems[idx] = set->elems[idx + 1];
+}
+
+
+/* Add the token TOKEN to dfa->nodes, and return the index of the token.
+ Or return -1 if an error occurred. */
+
+static Idx
+re_dfa_add_node (re_dfa_t *dfa, re_token_t token)
+{
+ if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc))
+ {
+ size_t new_nodes_alloc = dfa->nodes_alloc * 2;
+ Idx *new_nexts, *new_indices;
+ re_node_set *new_edests, *new_eclosures;
+ re_token_t *new_nodes;
+
+ /* Avoid overflows in realloc. */
+ const size_t max_object_size = MAX (sizeof (re_token_t),
+ MAX (sizeof (re_node_set),
+ sizeof (Idx)));
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size)
+ < new_nodes_alloc))
+ return -1;
+
+ new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc);
+ if (__glibc_unlikely (new_nodes == NULL))
+ return -1;
+ dfa->nodes = new_nodes;
+ dfa->nodes_alloc = new_nodes_alloc;
+ new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc);
+ if (new_nexts != NULL)
+ dfa->nexts = new_nexts;
+ new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc);
+ if (new_indices != NULL)
+ dfa->org_indices = new_indices;
+ new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc);
+ if (new_edests != NULL)
+ dfa->edests = new_edests;
+ new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc);
+ if (new_eclosures != NULL)
+ dfa->eclosures = new_eclosures;
+ if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL
+ || new_edests == NULL || new_eclosures == NULL))
+ return -1;
+ }
+ dfa->nodes[dfa->nodes_len] = token;
+ dfa->nodes[dfa->nodes_len].constraint = 0;
+ dfa->nodes[dfa->nodes_len].accept_mb =
+ ((token.type == OP_PERIOD && dfa->mb_cur_max > 1)
+ || token.type == COMPLEX_BRACKET);
+ dfa->nexts[dfa->nodes_len] = -1;
+ re_node_set_init_empty (dfa->edests + dfa->nodes_len);
+ re_node_set_init_empty (dfa->eclosures + dfa->nodes_len);
+ return dfa->nodes_len++;
+}
+
+static re_hashval_t
+calc_state_hash (const re_node_set *nodes, unsigned int context)
+{
+ re_hashval_t hash = nodes->nelem + context;
+ Idx i;
+ for (i = 0 ; i < nodes->nelem ; i++)
+ hash += nodes->elems[i];
+ return hash;
+}
+
+/* Search for the state whose node_set is equivalent to NODES.
+ Return the pointer to the state, if we found it in the DFA.
+ Otherwise create the new one and return it. In case of an error
+ return NULL and set the error code in ERR.
+ Note: - We assume NULL as the invalid state, then it is possible that
+ return value is NULL and ERR is REG_NOERROR.
+ - We never return non-NULL value in case of any errors, it is for
+ optimization. */
+
+static re_dfastate_t *
+__attribute_warn_unused_result__
+re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa,
+ const re_node_set *nodes)
+{
+ re_hashval_t hash;
+ re_dfastate_t *new_state;
+ struct re_state_table_entry *spot;
+ Idx i;
+#if defined GCC_LINT || defined lint
+ /* Suppress bogus uninitialized-variable warnings. */
+ *err = REG_NOERROR;
+#endif
+ if (__glibc_unlikely (nodes->nelem == 0))
+ {
+ *err = REG_NOERROR;
+ return NULL;
+ }
+ hash = calc_state_hash (nodes, 0);
+ spot = dfa->state_table + (hash & dfa->state_hash_mask);
+
+ for (i = 0 ; i < spot->num ; i++)
+ {
+ re_dfastate_t *state = spot->array[i];
+ if (hash != state->hash)
+ continue;
+ if (re_node_set_compare (&state->nodes, nodes))
+ return state;
+ }
+
+ /* There are no appropriate state in the dfa, create the new one. */
+ new_state = create_ci_newstate (dfa, nodes, hash);
+ if (__glibc_unlikely (new_state == NULL))
+ *err = REG_ESPACE;
+
+ return new_state;
+}
+
+/* Search for the state whose node_set is equivalent to NODES and
+ whose context is equivalent to CONTEXT.
+ Return the pointer to the state, if we found it in the DFA.
+ Otherwise create the new one and return it. In case of an error
+ return NULL and set the error code in ERR.
+ Note: - We assume NULL as the invalid state, then it is possible that
+ return value is NULL and ERR is REG_NOERROR.
+ - We never return non-NULL value in case of any errors, it is for
+ optimization. */
+
+static re_dfastate_t *
+__attribute_warn_unused_result__
+re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa,
+ const re_node_set *nodes, unsigned int context)
+{
+ re_hashval_t hash;
+ re_dfastate_t *new_state;
+ struct re_state_table_entry *spot;
+ Idx i;
+#if defined GCC_LINT || defined lint
+ /* Suppress bogus uninitialized-variable warnings. */
+ *err = REG_NOERROR;
+#endif
+ if (nodes->nelem == 0)
+ {
+ *err = REG_NOERROR;
+ return NULL;
+ }
+ hash = calc_state_hash (nodes, context);
+ spot = dfa->state_table + (hash & dfa->state_hash_mask);
+
+ for (i = 0 ; i < spot->num ; i++)
+ {
+ re_dfastate_t *state = spot->array[i];
+ if (state->hash == hash
+ && state->context == context
+ && re_node_set_compare (state->entrance_nodes, nodes))
+ return state;
+ }
+ /* There are no appropriate state in 'dfa', create the new one. */
+ new_state = create_cd_newstate (dfa, nodes, context, hash);
+ if (__glibc_unlikely (new_state == NULL))
+ *err = REG_ESPACE;
+
+ return new_state;
+}
+
+/* Finish initialization of the new state NEWSTATE, and using its hash value
+ HASH put in the appropriate bucket of DFA's state table. Return value
+ indicates the error code if failed. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+register_state (const re_dfa_t *dfa, re_dfastate_t *newstate,
+ re_hashval_t hash)
+{
+ struct re_state_table_entry *spot;
+ reg_errcode_t err;
+ Idx i;
+
+ newstate->hash = hash;
+ err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return REG_ESPACE;
+ for (i = 0; i < newstate->nodes.nelem; i++)
+ {
+ Idx elem = newstate->nodes.elems[i];
+ if (!IS_EPSILON_NODE (dfa->nodes[elem].type))
+ if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem))
+ return REG_ESPACE;
+ }
+
+ spot = dfa->state_table + (hash & dfa->state_hash_mask);
+ if (__glibc_unlikely (spot->alloc <= spot->num))
+ {
+ Idx new_alloc = 2 * spot->num + 2;
+ re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *,
+ new_alloc);
+ if (__glibc_unlikely (new_array == NULL))
+ return REG_ESPACE;
+ spot->array = new_array;
+ spot->alloc = new_alloc;
+ }
+ spot->array[spot->num++] = newstate;
+ return REG_NOERROR;
+}
+
+static void
+free_state (re_dfastate_t *state)
+{
+ re_node_set_free (&state->non_eps_nodes);
+ re_node_set_free (&state->inveclosure);
+ if (state->entrance_nodes != &state->nodes)
+ {
+ re_node_set_free (state->entrance_nodes);
+ re_free (state->entrance_nodes);
+ }
+ re_node_set_free (&state->nodes);
+ re_free (state->word_trtable);
+ re_free (state->trtable);
+ re_free (state);
+}
+
+/* Create the new state which is independent of contexts.
+ Return the new state if succeeded, otherwise return NULL. */
+
+static re_dfastate_t *
+__attribute_warn_unused_result__
+create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
+ re_hashval_t hash)
+{
+ Idx i;
+ reg_errcode_t err;
+ re_dfastate_t *newstate;
+
+ newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
+ if (__glibc_unlikely (newstate == NULL))
+ return NULL;
+ err = re_node_set_init_copy (&newstate->nodes, nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_free (newstate);
+ return NULL;
+ }
+
+ newstate->entrance_nodes = &newstate->nodes;
+ for (i = 0 ; i < nodes->nelem ; i++)
+ {
+ re_token_t *node = dfa->nodes + nodes->elems[i];
+ re_token_type_t type = node->type;
+ if (type == CHARACTER && !node->constraint)
+ continue;
+ newstate->accept_mb |= node->accept_mb;
+
+ /* If the state has the halt node, the state is a halt state. */
+ if (type == END_OF_RE)
+ newstate->halt = 1;
+ else if (type == OP_BACK_REF)
+ newstate->has_backref = 1;
+ else if (type == ANCHOR || node->constraint)
+ newstate->has_constraint = 1;
+ }
+ err = register_state (dfa, newstate, hash);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ free_state (newstate);
+ newstate = NULL;
+ }
+ return newstate;
+}
+
+/* Create the new state which is depend on the context CONTEXT.
+ Return the new state if succeeded, otherwise return NULL. */
+
+static re_dfastate_t *
+__attribute_warn_unused_result__
+create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
+ unsigned int context, re_hashval_t hash)
+{
+ Idx i, nctx_nodes = 0;
+ reg_errcode_t err;
+ re_dfastate_t *newstate;
+
+ newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1);
+ if (__glibc_unlikely (newstate == NULL))
+ return NULL;
+ err = re_node_set_init_copy (&newstate->nodes, nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_free (newstate);
+ return NULL;
+ }
+
+ newstate->context = context;
+ newstate->entrance_nodes = &newstate->nodes;
+
+ for (i = 0 ; i < nodes->nelem ; i++)
+ {
+ re_token_t *node = dfa->nodes + nodes->elems[i];
+ re_token_type_t type = node->type;
+ unsigned int constraint = node->constraint;
+
+ if (type == CHARACTER && !constraint)
+ continue;
+ newstate->accept_mb |= node->accept_mb;
+
+ /* If the state has the halt node, the state is a halt state. */
+ if (type == END_OF_RE)
+ newstate->halt = 1;
+ else if (type == OP_BACK_REF)
+ newstate->has_backref = 1;
+
+ if (constraint)
+ {
+ if (newstate->entrance_nodes == &newstate->nodes)
+ {
+ re_node_set *entrance_nodes = re_malloc (re_node_set, 1);
+ if (__glibc_unlikely (entrance_nodes == NULL))
+ {
+ free_state (newstate);
+ return NULL;
+ }
+ newstate->entrance_nodes = entrance_nodes;
+ if (re_node_set_init_copy (newstate->entrance_nodes, nodes)
+ != REG_NOERROR)
+ {
+ free_state (newstate);
+ return NULL;
+ }
+ nctx_nodes = 0;
+ newstate->has_constraint = 1;
+ }
+
+ if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context))
+ {
+ re_node_set_remove_at (&newstate->nodes, i - nctx_nodes);
+ ++nctx_nodes;
+ }
+ }
+ }
+ err = register_state (dfa, newstate, hash);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ free_state (newstate);
+ newstate = NULL;
+ }
+ return newstate;
+}
diff --git a/lib/regex_internal.h b/lib/regex_internal.h
new file mode 100644
index 0000000..149ec2e
--- /dev/null
+++ b/lib/regex_internal.h
@@ -0,0 +1,834 @@
+/* Extended regular expression matching and search library.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _REGEX_INTERNAL_H
+#define _REGEX_INTERNAL_H 1
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <langinfo.h>
+#include <locale.h>
+#include <wchar.h>
+#include <wctype.h>
+#include <stdint.h>
+
+#ifndef _LIBC
+# include <dynarray.h>
+#endif
+
+#include <intprops.h>
+#include <verify.h>
+
+#if defined DEBUG && DEBUG != 0
+# include <assert.h>
+# define DEBUG_ASSERT(x) assert (x)
+#else
+# define DEBUG_ASSERT(x) assume (x)
+#endif
+
+#ifdef _LIBC
+# include <libc-lock.h>
+# define lock_define(name) __libc_lock_define (, name)
+# define lock_init(lock) (__libc_lock_init (lock), 0)
+# define lock_fini(lock) ((void) 0)
+# define lock_lock(lock) __libc_lock_lock (lock)
+# define lock_unlock(lock) __libc_lock_unlock (lock)
+#elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD
+# include "glthread/lock.h"
+# define lock_define(name) gl_lock_define (, name)
+# define lock_init(lock) glthread_lock_init (&(lock))
+# define lock_fini(lock) glthread_lock_destroy (&(lock))
+# define lock_lock(lock) glthread_lock_lock (&(lock))
+# define lock_unlock(lock) glthread_lock_unlock (&(lock))
+#elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD
+# include <pthread.h>
+# define lock_define(name) pthread_mutex_t name;
+# define lock_init(lock) pthread_mutex_init (&(lock), 0)
+# define lock_fini(lock) pthread_mutex_destroy (&(lock))
+# define lock_lock(lock) pthread_mutex_lock (&(lock))
+# define lock_unlock(lock) pthread_mutex_unlock (&(lock))
+#else
+# define lock_define(name)
+# define lock_init(lock) 0
+# define lock_fini(lock) ((void) 0)
+ /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */
+# define lock_lock(lock) ((void) dfa)
+# define lock_unlock(lock) ((void) 0)
+#endif
+
+/* In case that the system doesn't have isblank(). */
+#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK))
+# define isblank(ch) ((ch) == ' ' || (ch) == '\t')
+#endif
+
+/* regex code assumes isascii has its usual numeric meaning,
+ even if the portable character set uses EBCDIC encoding,
+ and even if wint_t is wider than int. */
+#ifndef _LIBC
+# undef isascii
+# define isascii(c) (((c) & ~0x7f) == 0)
+#endif
+
+#ifdef _LIBC
+# ifndef _RE_DEFINE_LOCALE_FUNCTIONS
+# define _RE_DEFINE_LOCALE_FUNCTIONS 1
+# include <locale/localeinfo.h>
+# include <locale/coll-lookup.h>
+# endif
+#endif
+
+/* This is for other GNU distributions with internationalized messages. */
+#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
+# include <libintl.h>
+# ifdef _LIBC
+# undef gettext
+# define gettext(msgid) \
+ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES)
+# endif
+#else
+# undef gettext
+# define gettext(msgid) (msgid)
+#endif
+
+#ifndef gettext_noop
+/* This define is so xgettext can find the internationalizable
+ strings. */
+# define gettext_noop(String) String
+#endif
+
+/* Number of ASCII characters. */
+#define ASCII_CHARS 0x80
+
+/* Number of single byte characters. */
+#define SBC_MAX (UCHAR_MAX + 1)
+
+#define COLL_ELEM_LEN_MAX 8
+
+/* The character which represents newline. */
+#define NEWLINE_CHAR '\n'
+#define WIDE_NEWLINE_CHAR L'\n'
+
+/* Rename to standard API for using out of glibc. */
+#ifndef _LIBC
+# undef __wctype
+# undef __iswalnum
+# undef __iswctype
+# undef __towlower
+# undef __towupper
+# define __wctype wctype
+# define __iswalnum iswalnum
+# define __iswctype iswctype
+# define __towlower towlower
+# define __towupper towupper
+# define __btowc btowc
+# define __mbrtowc mbrtowc
+# define __wcrtomb wcrtomb
+# define __regfree regfree
+#endif /* not _LIBC */
+
+/* Types related to integers. Unless protected by #ifdef _LIBC, the
+ regex code should avoid exact-width types like int32_t and uint64_t
+ as some non-GCC platforms lack them, an issue when this code is
+ used in Gnulib. */
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2))
+#endif
+#ifndef ULONG_WIDTH
+# define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX)
+/* The number of usable bits in an unsigned integer type with maximum
+ value MAX, as an int expression suitable in #if. Cover all known
+ practical hosts. This implementation exploits the fact that MAX is
+ 1 less than a power of 2, and merely counts the number of 1 bits in
+ MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */
+# define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max)
+# define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n))
+# define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n))
+# define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n))
+# define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n))
+# define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n))
+# define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1))
+# if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1)
+# error "ULONG_MAX out of range"
+# endif
+#endif
+
+/* The type of indexes into strings. This is signed, not size_t,
+ since the API requires indexes to fit in regoff_t anyway, and using
+ signed integers makes the code a bit smaller and presumably faster.
+ The traditional GNU regex implementation uses int for indexes.
+ The POSIX-compatible implementation uses a possibly-wider type.
+ The name 'Idx' is three letters to minimize the hassle of
+ reindenting a lot of regex code that formerly used 'int'. */
+typedef regoff_t Idx;
+#ifdef _REGEX_LARGE_OFFSETS
+# define IDX_MAX SSIZE_MAX
+#else
+# define IDX_MAX INT_MAX
+#endif
+
+/* A hash value, suitable for computing hash tables. */
+typedef __re_size_t re_hashval_t;
+
+/* An integer used to represent a set of bits. It must be unsigned,
+ and must be at least as wide as unsigned int. */
+typedef unsigned long int bitset_word_t;
+/* All bits set in a bitset_word_t. */
+#define BITSET_WORD_MAX ULONG_MAX
+/* Number of bits in a bitset_word_t. */
+#define BITSET_WORD_BITS ULONG_WIDTH
+
+/* Number of bitset_word_t values in a bitset_t. */
+#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS)
+
+typedef bitset_word_t bitset_t[BITSET_WORDS];
+typedef bitset_word_t *re_bitset_ptr_t;
+typedef const bitset_word_t *re_const_bitset_ptr_t;
+
+#define PREV_WORD_CONSTRAINT 0x0001
+#define PREV_NOTWORD_CONSTRAINT 0x0002
+#define NEXT_WORD_CONSTRAINT 0x0004
+#define NEXT_NOTWORD_CONSTRAINT 0x0008
+#define PREV_NEWLINE_CONSTRAINT 0x0010
+#define NEXT_NEWLINE_CONSTRAINT 0x0020
+#define PREV_BEGBUF_CONSTRAINT 0x0040
+#define NEXT_ENDBUF_CONSTRAINT 0x0080
+#define WORD_DELIM_CONSTRAINT 0x0100
+#define NOT_WORD_DELIM_CONSTRAINT 0x0200
+
+typedef enum
+{
+ INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
+ WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT,
+ WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
+ INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT,
+ LINE_FIRST = PREV_NEWLINE_CONSTRAINT,
+ LINE_LAST = NEXT_NEWLINE_CONSTRAINT,
+ BUF_FIRST = PREV_BEGBUF_CONSTRAINT,
+ BUF_LAST = NEXT_ENDBUF_CONSTRAINT,
+ WORD_DELIM = WORD_DELIM_CONSTRAINT,
+ NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT
+} re_context_type;
+
+typedef struct
+{
+ Idx alloc;
+ Idx nelem;
+ Idx *elems;
+} re_node_set;
+
+typedef enum
+{
+ NON_TYPE = 0,
+
+ /* Node type, These are used by token, node, tree. */
+ CHARACTER = 1,
+ END_OF_RE = 2,
+ SIMPLE_BRACKET = 3,
+ OP_BACK_REF = 4,
+ OP_PERIOD = 5,
+ COMPLEX_BRACKET = 6,
+ OP_UTF8_PERIOD = 7,
+
+ /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used
+ when the debugger shows values of this enum type. */
+#define EPSILON_BIT 8
+ OP_OPEN_SUBEXP = EPSILON_BIT | 0,
+ OP_CLOSE_SUBEXP = EPSILON_BIT | 1,
+ OP_ALT = EPSILON_BIT | 2,
+ OP_DUP_ASTERISK = EPSILON_BIT | 3,
+ ANCHOR = EPSILON_BIT | 4,
+
+ /* Tree type, these are used only by tree. */
+ CONCAT = 16,
+ SUBEXP = 17,
+
+ /* Token type, these are used only by token. */
+ OP_DUP_PLUS = 18,
+ OP_DUP_QUESTION,
+ OP_OPEN_BRACKET,
+ OP_CLOSE_BRACKET,
+ OP_CHARSET_RANGE,
+ OP_OPEN_DUP_NUM,
+ OP_CLOSE_DUP_NUM,
+ OP_NON_MATCH_LIST,
+ OP_OPEN_COLL_ELEM,
+ OP_CLOSE_COLL_ELEM,
+ OP_OPEN_EQUIV_CLASS,
+ OP_CLOSE_EQUIV_CLASS,
+ OP_OPEN_CHAR_CLASS,
+ OP_CLOSE_CHAR_CLASS,
+ OP_WORD,
+ OP_NOTWORD,
+ OP_SPACE,
+ OP_NOTSPACE,
+ BACK_SLASH
+
+} re_token_type_t;
+
+typedef struct
+{
+ /* Multibyte characters. */
+ wchar_t *mbchars;
+
+#ifdef _LIBC
+ /* Collating symbols. */
+ int32_t *coll_syms;
+#endif
+
+#ifdef _LIBC
+ /* Equivalence classes. */
+ int32_t *equiv_classes;
+#endif
+
+ /* Range expressions. */
+#ifdef _LIBC
+ uint32_t *range_starts;
+ uint32_t *range_ends;
+#else
+ wchar_t *range_starts;
+ wchar_t *range_ends;
+#endif
+
+ /* Character classes. */
+ wctype_t *char_classes;
+
+ /* If this character set is the non-matching list. */
+ unsigned int non_match : 1;
+
+ /* # of multibyte characters. */
+ Idx nmbchars;
+
+ /* # of collating symbols. */
+ Idx ncoll_syms;
+
+ /* # of equivalence classes. */
+ Idx nequiv_classes;
+
+ /* # of range expressions. */
+ Idx nranges;
+
+ /* # of character classes. */
+ Idx nchar_classes;
+} re_charset_t;
+
+typedef struct
+{
+ union
+ {
+ unsigned char c; /* for CHARACTER */
+ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */
+ re_charset_t *mbcset; /* for COMPLEX_BRACKET */
+ Idx idx; /* for BACK_REF */
+ re_context_type ctx_type; /* for ANCHOR */
+ } opr;
+#if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__
+ re_token_type_t type : 8;
+#else
+ re_token_type_t type;
+#endif
+ unsigned int constraint : 10; /* context constraint */
+ unsigned int duplicated : 1;
+ unsigned int opt_subexp : 1;
+ unsigned int accept_mb : 1;
+ /* These 2 bits can be moved into the union if needed (e.g. if running out
+ of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */
+ unsigned int mb_partial : 1;
+ unsigned int word_char : 1;
+} re_token_t;
+
+#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT)
+
+struct re_string_t
+{
+ /* Indicate the raw buffer which is the original string passed as an
+ argument of regexec(), re_search(), etc.. */
+ const unsigned char *raw_mbs;
+ /* Store the multibyte string. In case of "case insensitive mode" like
+ REG_ICASE, upper cases of the string are stored, otherwise MBS points
+ the same address that RAW_MBS points. */
+ unsigned char *mbs;
+ /* Store the wide character string which is corresponding to MBS. */
+ wint_t *wcs;
+ Idx *offsets;
+ mbstate_t cur_state;
+ /* Index in RAW_MBS. Each character mbs[i] corresponds to
+ raw_mbs[raw_mbs_idx + i]. */
+ Idx raw_mbs_idx;
+ /* The length of the valid characters in the buffers. */
+ Idx valid_len;
+ /* The corresponding number of bytes in raw_mbs array. */
+ Idx valid_raw_len;
+ /* The length of the buffers MBS and WCS. */
+ Idx bufs_len;
+ /* The index in MBS, which is updated by re_string_fetch_byte. */
+ Idx cur_idx;
+ /* length of RAW_MBS array. */
+ Idx raw_len;
+ /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */
+ Idx len;
+ /* End of the buffer may be shorter than its length in the cases such
+ as re_match_2, re_search_2. Then, we use STOP for end of the buffer
+ instead of LEN. */
+ Idx raw_stop;
+ /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */
+ Idx stop;
+
+ /* The context of mbs[0]. We store the context independently, since
+ the context of mbs[0] may be different from raw_mbs[0], which is
+ the beginning of the input string. */
+ unsigned int tip_context;
+ /* The translation passed as a part of an argument of re_compile_pattern. */
+ RE_TRANSLATE_TYPE trans;
+ /* Copy of re_dfa_t's word_char. */
+ re_const_bitset_ptr_t word_char;
+ /* true if REG_ICASE. */
+ unsigned char icase;
+ unsigned char is_utf8;
+ unsigned char map_notascii;
+ unsigned char mbs_allocated;
+ unsigned char offsets_needed;
+ unsigned char newline_anchor;
+ unsigned char word_ops_used;
+ int mb_cur_max;
+};
+typedef struct re_string_t re_string_t;
+
+
+struct re_dfa_t;
+typedef struct re_dfa_t re_dfa_t;
+
+#ifndef _LIBC
+# define IS_IN(libc) false
+#endif
+
+#define re_string_peek_byte(pstr, offset) \
+ ((pstr)->mbs[(pstr)->cur_idx + offset])
+#define re_string_fetch_byte(pstr) \
+ ((pstr)->mbs[(pstr)->cur_idx++])
+#define re_string_first_byte(pstr, idx) \
+ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF)
+#define re_string_is_single_byte_char(pstr, idx) \
+ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \
+ || (pstr)->wcs[(idx) + 1] != WEOF))
+#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx)
+#define re_string_cur_idx(pstr) ((pstr)->cur_idx)
+#define re_string_get_buffer(pstr) ((pstr)->mbs)
+#define re_string_length(pstr) ((pstr)->len)
+#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx])
+#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx))
+#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx))
+
+#ifdef _LIBC
+# define MALLOC_0_IS_NONNULL 1
+#elif !defined MALLOC_0_IS_NONNULL
+# define MALLOC_0_IS_NONNULL 0
+#endif
+
+#ifndef MAX
+# define MAX(a,b) ((a) < (b) ? (b) : (a))
+#endif
+#ifndef MIN
+# define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif
+
+#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t)))
+#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t)))
+#define re_free(p) free (p)
+
+struct bin_tree_t
+{
+ struct bin_tree_t *parent;
+ struct bin_tree_t *left;
+ struct bin_tree_t *right;
+ struct bin_tree_t *first;
+ struct bin_tree_t *next;
+
+ re_token_t token;
+
+ /* 'node_idx' is the index in dfa->nodes, if 'type' == 0.
+ Otherwise 'type' indicate the type of this node. */
+ Idx node_idx;
+};
+typedef struct bin_tree_t bin_tree_t;
+
+#define BIN_TREE_STORAGE_SIZE \
+ ((1024 - sizeof (void *)) / sizeof (bin_tree_t))
+
+struct bin_tree_storage_t
+{
+ struct bin_tree_storage_t *next;
+ bin_tree_t data[BIN_TREE_STORAGE_SIZE];
+};
+typedef struct bin_tree_storage_t bin_tree_storage_t;
+
+#define CONTEXT_WORD 1
+#define CONTEXT_NEWLINE (CONTEXT_WORD << 1)
+#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1)
+#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1)
+
+#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD)
+#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE)
+#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF)
+#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF)
+#define IS_ORDINARY_CONTEXT(c) ((c) == 0)
+
+#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_')
+#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR)
+#define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_')
+#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR)
+
+#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \
+ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
+ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
+ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\
+ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context)))
+
+#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \
+ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \
+ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \
+ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \
+ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context)))
+
+struct re_dfastate_t
+{
+ re_hashval_t hash;
+ re_node_set nodes;
+ re_node_set non_eps_nodes;
+ re_node_set inveclosure;
+ re_node_set *entrance_nodes;
+ struct re_dfastate_t **trtable, **word_trtable;
+ unsigned int context : 4;
+ unsigned int halt : 1;
+ /* If this state can accept "multi byte".
+ Note that we refer to multibyte characters, and multi character
+ collating elements as "multi byte". */
+ unsigned int accept_mb : 1;
+ /* If this state has backreference node(s). */
+ unsigned int has_backref : 1;
+ unsigned int has_constraint : 1;
+};
+typedef struct re_dfastate_t re_dfastate_t;
+
+struct re_state_table_entry
+{
+ Idx num;
+ Idx alloc;
+ re_dfastate_t **array;
+};
+
+/* Array type used in re_sub_match_last_t and re_sub_match_top_t. */
+
+typedef struct
+{
+ Idx next_idx;
+ Idx alloc;
+ re_dfastate_t **array;
+} state_array_t;
+
+/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */
+
+typedef struct
+{
+ Idx node;
+ Idx str_idx; /* The position NODE match at. */
+ state_array_t path;
+} re_sub_match_last_t;
+
+/* Store information about the node NODE whose type is OP_OPEN_SUBEXP.
+ And information about the node, whose type is OP_CLOSE_SUBEXP,
+ corresponding to NODE is stored in LASTS. */
+
+typedef struct
+{
+ Idx str_idx;
+ Idx node;
+ state_array_t *path;
+ Idx alasts; /* Allocation size of LASTS. */
+ Idx nlasts; /* The number of LASTS. */
+ re_sub_match_last_t **lasts;
+} re_sub_match_top_t;
+
+struct re_backref_cache_entry
+{
+ Idx node;
+ Idx str_idx;
+ Idx subexp_from;
+ Idx subexp_to;
+ bitset_word_t eps_reachable_subexps_map;
+ char more;
+};
+
+typedef struct
+{
+ /* The string object corresponding to the input string. */
+ re_string_t input;
+ const re_dfa_t *const dfa;
+ /* EFLAGS of the argument of regexec. */
+ int eflags;
+ /* Where the matching ends. */
+ Idx match_last;
+ Idx last_node;
+ /* The state log used by the matcher. */
+ re_dfastate_t **state_log;
+ Idx state_log_top;
+ /* Back reference cache. */
+ Idx nbkref_ents;
+ Idx abkref_ents;
+ struct re_backref_cache_entry *bkref_ents;
+ int max_mb_elem_len;
+ Idx nsub_tops;
+ Idx asub_tops;
+ re_sub_match_top_t **sub_tops;
+} re_match_context_t;
+
+typedef struct
+{
+ re_dfastate_t **sifted_states;
+ re_dfastate_t **limited_states;
+ Idx last_node;
+ Idx last_str_idx;
+ re_node_set limits;
+} re_sift_context_t;
+
+struct re_fail_stack_ent_t
+{
+ Idx idx;
+ Idx node;
+ regmatch_t *regs;
+ re_node_set eps_via_nodes;
+};
+
+struct re_fail_stack_t
+{
+ Idx num;
+ Idx alloc;
+ struct re_fail_stack_ent_t *stack;
+};
+
+struct re_dfa_t
+{
+ re_token_t *nodes;
+ size_t nodes_alloc;
+ size_t nodes_len;
+ Idx *nexts;
+ Idx *org_indices;
+ re_node_set *edests;
+ re_node_set *eclosures;
+ re_node_set *inveclosures;
+ struct re_state_table_entry *state_table;
+ re_dfastate_t *init_state;
+ re_dfastate_t *init_state_word;
+ re_dfastate_t *init_state_nl;
+ re_dfastate_t *init_state_begbuf;
+ bin_tree_t *str_tree;
+ bin_tree_storage_t *str_tree_storage;
+ re_bitset_ptr_t sb_char;
+ int str_tree_storage_idx;
+
+ /* number of subexpressions 're_nsub' is in regex_t. */
+ re_hashval_t state_hash_mask;
+ Idx init_node;
+ Idx nbackref; /* The number of backreference in this dfa. */
+
+ /* Bitmap expressing which backreference is used. */
+ bitset_word_t used_bkref_map;
+ bitset_word_t completed_bkref_map;
+
+ unsigned int has_plural_match : 1;
+ /* If this dfa has "multibyte node", which is a backreference or
+ a node which can accept multibyte character or multi character
+ collating element. */
+ unsigned int has_mb_node : 1;
+ unsigned int is_utf8 : 1;
+ unsigned int map_notascii : 1;
+ unsigned int word_ops_used : 1;
+ int mb_cur_max;
+ bitset_t word_char;
+ reg_syntax_t syntax;
+ Idx *subexp_map;
+#ifdef DEBUG
+ char* re_str;
+#endif
+ lock_define (lock)
+};
+
+#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set))
+#define re_node_set_remove(set,id) \
+ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1))
+#define re_node_set_empty(p) ((p)->nelem = 0)
+#define re_node_set_free(set) re_free ((set)->elems)
+
+
+typedef enum
+{
+ SB_CHAR,
+ MB_CHAR,
+ EQUIV_CLASS,
+ COLL_SYM,
+ CHAR_CLASS
+} bracket_elem_type;
+
+typedef struct
+{
+ bracket_elem_type type;
+ union
+ {
+ unsigned char ch;
+ unsigned char *name;
+ wchar_t wch;
+ } opr;
+} bracket_elem_t;
+
+
+/* Functions for bitset_t operation. */
+
+static inline void
+bitset_set (bitset_t set, Idx i)
+{
+ set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS;
+}
+
+static inline void
+bitset_clear (bitset_t set, Idx i)
+{
+ set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS);
+}
+
+static inline bool
+bitset_contain (const bitset_t set, Idx i)
+{
+ return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1;
+}
+
+static inline void
+bitset_empty (bitset_t set)
+{
+ memset (set, '\0', sizeof (bitset_t));
+}
+
+static inline void
+bitset_set_all (bitset_t set)
+{
+ memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS));
+ if (SBC_MAX % BITSET_WORD_BITS != 0)
+ set[BITSET_WORDS - 1] =
+ ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1;
+}
+
+static inline void
+bitset_copy (bitset_t dest, const bitset_t src)
+{
+ memcpy (dest, src, sizeof (bitset_t));
+}
+
+static inline void
+bitset_not (bitset_t set)
+{
+ int bitset_i;
+ for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i)
+ set[bitset_i] = ~set[bitset_i];
+ if (SBC_MAX % BITSET_WORD_BITS != 0)
+ set[BITSET_WORDS - 1] =
+ ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1)
+ & ~set[BITSET_WORDS - 1]);
+}
+
+static inline void
+bitset_merge (bitset_t dest, const bitset_t src)
+{
+ int bitset_i;
+ for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
+ dest[bitset_i] |= src[bitset_i];
+}
+
+static inline void
+bitset_mask (bitset_t dest, const bitset_t src)
+{
+ int bitset_i;
+ for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i)
+ dest[bitset_i] &= src[bitset_i];
+}
+
+/* Functions for re_string. */
+static int
+__attribute__ ((pure, unused))
+re_string_char_size_at (const re_string_t *pstr, Idx idx)
+{
+ int byte_idx;
+ if (pstr->mb_cur_max == 1)
+ return 1;
+ for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx)
+ if (pstr->wcs[idx + byte_idx] != WEOF)
+ break;
+ return byte_idx;
+}
+
+static wint_t
+__attribute__ ((pure, unused))
+re_string_wchar_at (const re_string_t *pstr, Idx idx)
+{
+ if (pstr->mb_cur_max == 1)
+ return (wint_t) pstr->mbs[idx];
+ return (wint_t) pstr->wcs[idx];
+}
+
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
+
+static int
+__attribute__ ((pure, unused))
+re_string_elem_size_at (const re_string_t *pstr, Idx idx)
+{
+#ifdef _LIBC
+ const unsigned char *p, *extra;
+ const int32_t *table, *indirect;
+ uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+
+ if (nrules != 0)
+ {
+ table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+ extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+ indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+ _NL_COLLATE_INDIRECTMB);
+ p = pstr->mbs + idx;
+ findidx (table, indirect, extra, &p, pstr->len - idx);
+ return p - pstr->mbs - idx;
+ }
+#endif /* _LIBC */
+
+ return 1;
+}
+
+#ifdef _LIBC
+# if __GNUC__ >= 7
+# define FALLTHROUGH __attribute__ ((__fallthrough__))
+# else
+# define FALLTHROUGH ((void) 0)
+# endif
+#else
+# include "attribute.h"
+#endif
+
+#endif /* _REGEX_INTERNAL_H */
diff --git a/lib/regexec.c b/lib/regexec.c
new file mode 100644
index 0000000..13e0349
--- /dev/null
+++ b/lib/regexec.c
@@ -0,0 +1,4221 @@
+/* Extended regular expression matching and search library.
+ Copyright (C) 2002-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags,
+ Idx n);
+static void match_ctx_clean (re_match_context_t *mctx);
+static void match_ctx_free (re_match_context_t *cache);
+static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node,
+ Idx str_idx, Idx from, Idx to);
+static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx);
+static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node,
+ Idx str_idx);
+static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop,
+ Idx node, Idx str_idx);
+static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
+ re_dfastate_t **limited_sts, Idx last_node,
+ Idx last_str_idx);
+static reg_errcode_t re_search_internal (const regex_t *preg,
+ const char *string, Idx length,
+ Idx start, Idx last_start, Idx stop,
+ size_t nmatch, regmatch_t pmatch[],
+ int eflags);
+static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp,
+ const char *string1, Idx length1,
+ const char *string2, Idx length2,
+ Idx start, regoff_t range,
+ struct re_registers *regs,
+ Idx stop, bool ret_len);
+static regoff_t re_search_stub (struct re_pattern_buffer *bufp,
+ const char *string, Idx length, Idx start,
+ regoff_t range, Idx stop,
+ struct re_registers *regs,
+ bool ret_len);
+static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch,
+ Idx nregs, int regs_allocated);
+static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx);
+static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match,
+ Idx *p_match_first);
+static Idx check_halt_state_context (const re_match_context_t *mctx,
+ const re_dfastate_t *state, Idx idx);
+static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
+ regmatch_t *prev_idx_match, Idx cur_node,
+ Idx cur_idx, Idx nmatch);
+static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs,
+ Idx str_idx, Idx dest_node, Idx nregs,
+ regmatch_t *regs, regmatch_t *prevregs,
+ re_node_set *eps_via_nodes);
+static reg_errcode_t set_regs (const regex_t *preg,
+ const re_match_context_t *mctx,
+ size_t nmatch, regmatch_t *pmatch,
+ bool fl_backtrack);
+static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs);
+
+static int sift_states_iter_mb (const re_match_context_t *mctx,
+ re_sift_context_t *sctx,
+ Idx node_idx, Idx str_idx, Idx max_str_idx);
+static reg_errcode_t sift_states_backward (const re_match_context_t *mctx,
+ re_sift_context_t *sctx);
+static reg_errcode_t build_sifted_states (const re_match_context_t *mctx,
+ re_sift_context_t *sctx, Idx str_idx,
+ re_node_set *cur_dest);
+static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx,
+ re_sift_context_t *sctx,
+ Idx str_idx,
+ re_node_set *dest_nodes);
+static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa,
+ re_node_set *dest_nodes,
+ const re_node_set *candidates);
+static bool check_dst_limits (const re_match_context_t *mctx,
+ const re_node_set *limits,
+ Idx dst_node, Idx dst_idx, Idx src_node,
+ Idx src_idx);
+static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx,
+ int boundaries, Idx subexp_idx,
+ Idx from_node, Idx bkref_idx);
+static int check_dst_limits_calc_pos (const re_match_context_t *mctx,
+ Idx limit, Idx subexp_idx,
+ Idx node, Idx str_idx,
+ Idx bkref_idx);
+static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa,
+ re_node_set *dest_nodes,
+ const re_node_set *candidates,
+ re_node_set *limits,
+ struct re_backref_cache_entry *bkref_ents,
+ Idx str_idx);
+static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx,
+ re_sift_context_t *sctx,
+ Idx str_idx, const re_node_set *candidates);
+static reg_errcode_t merge_state_array (const re_dfa_t *dfa,
+ re_dfastate_t **dst,
+ re_dfastate_t **src, Idx num);
+static re_dfastate_t *find_recover_state (reg_errcode_t *err,
+ re_match_context_t *mctx);
+static re_dfastate_t *transit_state (reg_errcode_t *err,
+ re_match_context_t *mctx,
+ re_dfastate_t *state);
+static re_dfastate_t *merge_state_with_log (reg_errcode_t *err,
+ re_match_context_t *mctx,
+ re_dfastate_t *next_state);
+static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx,
+ re_node_set *cur_nodes,
+ Idx str_idx);
+#if 0
+static re_dfastate_t *transit_state_sb (reg_errcode_t *err,
+ re_match_context_t *mctx,
+ re_dfastate_t *pstate);
+#endif
+static reg_errcode_t transit_state_mb (re_match_context_t *mctx,
+ re_dfastate_t *pstate);
+static reg_errcode_t transit_state_bkref (re_match_context_t *mctx,
+ const re_node_set *nodes);
+static reg_errcode_t get_subexp (re_match_context_t *mctx,
+ Idx bkref_node, Idx bkref_str_idx);
+static reg_errcode_t get_subexp_sub (re_match_context_t *mctx,
+ const re_sub_match_top_t *sub_top,
+ re_sub_match_last_t *sub_last,
+ Idx bkref_node, Idx bkref_str);
+static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
+ Idx subexp_idx, int type);
+static reg_errcode_t check_arrival (re_match_context_t *mctx,
+ state_array_t *path, Idx top_node,
+ Idx top_str, Idx last_node, Idx last_str,
+ int type);
+static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx,
+ Idx str_idx,
+ re_node_set *cur_nodes,
+ re_node_set *next_nodes);
+static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa,
+ re_node_set *cur_nodes,
+ Idx ex_subexp, int type);
+static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa,
+ re_node_set *dst_nodes,
+ Idx target, Idx ex_subexp,
+ int type);
+static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx,
+ re_node_set *cur_nodes, Idx cur_str,
+ Idx subexp_num, int type);
+static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state);
+static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
+ const re_string_t *input, Idx idx);
+#ifdef _LIBC
+static unsigned int find_collation_sequence_value (const unsigned char *mbs,
+ size_t name_len);
+#endif
+static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa,
+ const re_dfastate_t *state,
+ re_node_set *states_node,
+ bitset_t *states_ch);
+static bool check_node_accept (const re_match_context_t *mctx,
+ const re_token_t *node, Idx idx);
+static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len);
+
+/* Entry point for POSIX code. */
+
+/* regexec searches for a given pattern, specified by PREG, in the
+ string STRING.
+
+ If NMATCH is zero or REG_NOSUB was set in the cflags argument to
+ 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
+ least NMATCH elements, and we set them to the offsets of the
+ corresponding matched substrings.
+
+ EFLAGS specifies "execution flags" which affect matching: if
+ REG_NOTBOL is set, then ^ does not match at the beginning of the
+ string; if REG_NOTEOL is set, then $ does not match at the end.
+
+ Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if
+ EFLAGS is invalid. */
+
+int
+regexec (const regex_t *__restrict preg, const char *__restrict string,
+ size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags)
+{
+ reg_errcode_t err;
+ Idx start, length;
+ re_dfa_t *dfa = preg->buffer;
+
+ if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND))
+ return REG_BADPAT;
+
+ if (eflags & REG_STARTEND)
+ {
+ start = pmatch[0].rm_so;
+ length = pmatch[0].rm_eo;
+ }
+ else
+ {
+ start = 0;
+ length = strlen (string);
+ }
+
+ lock_lock (dfa->lock);
+ if (preg->no_sub)
+ err = re_search_internal (preg, string, length, start, length,
+ length, 0, NULL, eflags);
+ else
+ err = re_search_internal (preg, string, length, start, length,
+ length, nmatch, pmatch, eflags);
+ lock_unlock (dfa->lock);
+ return err != REG_NOERROR;
+}
+
+#ifdef _LIBC
+libc_hidden_def (__regexec)
+
+# include <shlib-compat.h>
+versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4);
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+__typeof__ (__regexec) __compat_regexec;
+
+int
+attribute_compat_text_section
+__compat_regexec (const regex_t *__restrict preg,
+ const char *__restrict string, size_t nmatch,
+ regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags)
+{
+ return regexec (preg, string, nmatch, pmatch,
+ eflags & (REG_NOTBOL | REG_NOTEOL));
+}
+compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0);
+# endif
+#endif
+
+/* Entry points for GNU code. */
+
+/* re_match, re_search, re_match_2, re_search_2
+
+ The former two functions operate on STRING with length LENGTH,
+ while the later two operate on concatenation of STRING1 and STRING2
+ with lengths LENGTH1 and LENGTH2, respectively.
+
+ re_match() matches the compiled pattern in BUFP against the string,
+ starting at index START.
+
+ re_search() first tries matching at index START, then it tries to match
+ starting from index START + 1, and so on. The last start position tried
+ is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same
+ way as re_match().)
+
+ The parameter STOP of re_{match,search}_2 specifies that no match exceeding
+ the first STOP characters of the concatenation of the strings should be
+ concerned.
+
+ If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match
+ and all groups is stored in REGS. (For the "_2" variants, the offsets are
+ computed relative to the concatenation, not relative to the individual
+ strings.)
+
+ On success, re_match* functions return the length of the match, re_search*
+ return the position of the start of the match. They return -1 on
+ match failure, -2 on error. */
+
+regoff_t
+re_match (struct re_pattern_buffer *bufp, const char *string, Idx length,
+ Idx start, struct re_registers *regs)
+{
+ return re_search_stub (bufp, string, length, start, 0, length, regs, true);
+}
+#ifdef _LIBC
+weak_alias (__re_match, re_match)
+#endif
+
+regoff_t
+re_search (struct re_pattern_buffer *bufp, const char *string, Idx length,
+ Idx start, regoff_t range, struct re_registers *regs)
+{
+ return re_search_stub (bufp, string, length, start, range, length, regs,
+ false);
+}
+#ifdef _LIBC
+weak_alias (__re_search, re_search)
+#endif
+
+regoff_t
+re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1,
+ const char *string2, Idx length2, Idx start,
+ struct re_registers *regs, Idx stop)
+{
+ return re_search_2_stub (bufp, string1, length1, string2, length2,
+ start, 0, regs, stop, true);
+}
+#ifdef _LIBC
+weak_alias (__re_match_2, re_match_2)
+#endif
+
+regoff_t
+re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1,
+ const char *string2, Idx length2, Idx start, regoff_t range,
+ struct re_registers *regs, Idx stop)
+{
+ return re_search_2_stub (bufp, string1, length1, string2, length2,
+ start, range, regs, stop, false);
+}
+#ifdef _LIBC
+weak_alias (__re_search_2, re_search_2)
+#endif
+
+static regoff_t
+re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1,
+ Idx length1, const char *string2, Idx length2, Idx start,
+ regoff_t range, struct re_registers *regs,
+ Idx stop, bool ret_len)
+{
+ const char *str;
+ regoff_t rval;
+ Idx len;
+ char *s = NULL;
+
+ if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0
+ || INT_ADD_WRAPV (length1, length2, &len))))
+ return -2;
+
+ /* Concatenate the strings. */
+ if (length2 > 0)
+ if (length1 > 0)
+ {
+ s = re_malloc (char, len);
+
+ if (__glibc_unlikely (s == NULL))
+ return -2;
+#ifdef _LIBC
+ memcpy (__mempcpy (s, string1, length1), string2, length2);
+#else
+ memcpy (s, string1, length1);
+ memcpy (s + length1, string2, length2);
+#endif
+ str = s;
+ }
+ else
+ str = string2;
+ else
+ str = string1;
+
+ rval = re_search_stub (bufp, str, len, start, range, stop, regs,
+ ret_len);
+ re_free (s);
+ return rval;
+}
+
+/* The parameters have the same meaning as those of re_search.
+ Additional parameters:
+ If RET_LEN is true the length of the match is returned (re_match style);
+ otherwise the position of the match is returned. */
+
+static regoff_t
+re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length,
+ Idx start, regoff_t range, Idx stop, struct re_registers *regs,
+ bool ret_len)
+{
+ reg_errcode_t result;
+ regmatch_t *pmatch;
+ Idx nregs;
+ regoff_t rval;
+ int eflags = 0;
+ re_dfa_t *dfa = bufp->buffer;
+ Idx last_start = start + range;
+
+ /* Check for out-of-range. */
+ if (__glibc_unlikely (start < 0 || start > length))
+ return -1;
+ if (__glibc_unlikely (length < last_start
+ || (0 <= range && last_start < start)))
+ last_start = length;
+ else if (__glibc_unlikely (last_start < 0
+ || (range < 0 && start <= last_start)))
+ last_start = 0;
+
+ lock_lock (dfa->lock);
+
+ eflags |= (bufp->not_bol) ? REG_NOTBOL : 0;
+ eflags |= (bufp->not_eol) ? REG_NOTEOL : 0;
+
+ /* Compile fastmap if we haven't yet. */
+ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate)
+ re_compile_fastmap (bufp);
+
+ if (__glibc_unlikely (bufp->no_sub))
+ regs = NULL;
+
+ /* We need at least 1 register. */
+ if (regs == NULL)
+ nregs = 1;
+ else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED
+ && regs->num_regs <= bufp->re_nsub))
+ {
+ nregs = regs->num_regs;
+ if (__glibc_unlikely (nregs < 1))
+ {
+ /* Nothing can be copied to regs. */
+ regs = NULL;
+ nregs = 1;
+ }
+ }
+ else
+ nregs = bufp->re_nsub + 1;
+ pmatch = re_malloc (regmatch_t, nregs);
+ if (__glibc_unlikely (pmatch == NULL))
+ {
+ rval = -2;
+ goto out;
+ }
+
+ result = re_search_internal (bufp, string, length, start, last_start, stop,
+ nregs, pmatch, eflags);
+
+ rval = 0;
+
+ /* I hope we needn't fill their regs with -1's when no match was found. */
+ if (result != REG_NOERROR)
+ rval = result == REG_NOMATCH ? -1 : -2;
+ else if (regs != NULL)
+ {
+ /* If caller wants register contents data back, copy them. */
+ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs,
+ bufp->regs_allocated);
+ if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED))
+ rval = -2;
+ }
+
+ if (__glibc_likely (rval == 0))
+ {
+ if (ret_len)
+ {
+ DEBUG_ASSERT (pmatch[0].rm_so == start);
+ rval = pmatch[0].rm_eo - start;
+ }
+ else
+ rval = pmatch[0].rm_so;
+ }
+ re_free (pmatch);
+ out:
+ lock_unlock (dfa->lock);
+ return rval;
+}
+
+static unsigned
+re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs,
+ int regs_allocated)
+{
+ int rval = REGS_REALLOCATE;
+ Idx i;
+ Idx need_regs = nregs + 1;
+ /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code
+ uses. */
+
+ /* Have the register data arrays been allocated? */
+ if (regs_allocated == REGS_UNALLOCATED)
+ { /* No. So allocate them with malloc. */
+ regs->start = re_malloc (regoff_t, need_regs);
+ if (__glibc_unlikely (regs->start == NULL))
+ return REGS_UNALLOCATED;
+ regs->end = re_malloc (regoff_t, need_regs);
+ if (__glibc_unlikely (regs->end == NULL))
+ {
+ re_free (regs->start);
+ return REGS_UNALLOCATED;
+ }
+ regs->num_regs = need_regs;
+ }
+ else if (regs_allocated == REGS_REALLOCATE)
+ { /* Yes. If we need more elements than were already
+ allocated, reallocate them. If we need fewer, just
+ leave it alone. */
+ if (__glibc_unlikely (need_regs > regs->num_regs))
+ {
+ regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs);
+ regoff_t *new_end;
+ if (__glibc_unlikely (new_start == NULL))
+ return REGS_UNALLOCATED;
+ new_end = re_realloc (regs->end, regoff_t, need_regs);
+ if (__glibc_unlikely (new_end == NULL))
+ {
+ re_free (new_start);
+ return REGS_UNALLOCATED;
+ }
+ regs->start = new_start;
+ regs->end = new_end;
+ regs->num_regs = need_regs;
+ }
+ }
+ else
+ {
+ DEBUG_ASSERT (regs_allocated == REGS_FIXED);
+ /* This function may not be called with REGS_FIXED and nregs too big. */
+ DEBUG_ASSERT (nregs <= regs->num_regs);
+ rval = REGS_FIXED;
+ }
+
+ /* Copy the regs. */
+ for (i = 0; i < nregs; ++i)
+ {
+ regs->start[i] = pmatch[i].rm_so;
+ regs->end[i] = pmatch[i].rm_eo;
+ }
+ for ( ; i < regs->num_regs; ++i)
+ regs->start[i] = regs->end[i] = -1;
+
+ return rval;
+}
+
+/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
+ ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
+ this memory for recording register information. STARTS and ENDS
+ must be allocated using the malloc library routine, and must each
+ be at least NUM_REGS * sizeof (regoff_t) bytes long.
+
+ If NUM_REGS == 0, then subsequent matches should allocate their own
+ register data.
+
+ Unless this function is called, the first search or match using
+ PATTERN_BUFFER will allocate its own register data, without
+ freeing the old data. */
+
+void
+re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs,
+ __re_size_t num_regs, regoff_t *starts, regoff_t *ends)
+{
+ if (num_regs)
+ {
+ bufp->regs_allocated = REGS_REALLOCATE;
+ regs->num_regs = num_regs;
+ regs->start = starts;
+ regs->end = ends;
+ }
+ else
+ {
+ bufp->regs_allocated = REGS_UNALLOCATED;
+ regs->num_regs = 0;
+ regs->start = regs->end = NULL;
+ }
+}
+#ifdef _LIBC
+weak_alias (__re_set_registers, re_set_registers)
+#endif
+
+/* Entry points compatible with 4.2 BSD regex library. We don't define
+ them unless specifically requested. */
+
+#if defined _REGEX_RE_COMP || defined _LIBC
+int
+# ifdef _LIBC
+weak_function
+# endif
+re_exec (const char *s)
+{
+ return 0 == regexec (&re_comp_buf, s, 0, NULL, 0);
+}
+#endif /* _REGEX_RE_COMP */
+
+/* Internal entry point. */
+
+/* Searches for a compiled pattern PREG in the string STRING, whose
+ length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same
+ meaning as with regexec. LAST_START is START + RANGE, where
+ START and RANGE have the same meaning as with re_search.
+ Return REG_NOERROR if we find a match, and REG_NOMATCH if not,
+ otherwise return the error code.
+ Note: We assume front end functions already check ranges.
+ (0 <= LAST_START && LAST_START <= LENGTH) */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+re_search_internal (const regex_t *preg, const char *string, Idx length,
+ Idx start, Idx last_start, Idx stop, size_t nmatch,
+ regmatch_t pmatch[], int eflags)
+{
+ reg_errcode_t err;
+ const re_dfa_t *dfa = preg->buffer;
+ Idx left_lim, right_lim;
+ int incr;
+ bool fl_longest_match;
+ int match_kind;
+ Idx match_first;
+ Idx match_last = -1;
+ Idx extra_nmatch;
+ bool sb;
+ int ch;
+ re_match_context_t mctx = { .dfa = dfa };
+ char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate
+ && start != last_start && !preg->can_be_null)
+ ? preg->fastmap : NULL);
+ RE_TRANSLATE_TYPE t = preg->translate;
+
+ extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0;
+ nmatch -= extra_nmatch;
+
+ /* Check if the DFA haven't been compiled. */
+ if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL
+ || dfa->init_state_word == NULL
+ || dfa->init_state_nl == NULL
+ || dfa->init_state_begbuf == NULL))
+ return REG_NOMATCH;
+
+ /* We assume front-end functions already check them. */
+ DEBUG_ASSERT (0 <= last_start && last_start <= length);
+
+ /* If initial states with non-begbuf contexts have no elements,
+ the regex must be anchored. If preg->newline_anchor is set,
+ we'll never use init_state_nl, so do not check it. */
+ if (dfa->init_state->nodes.nelem == 0
+ && dfa->init_state_word->nodes.nelem == 0
+ && (dfa->init_state_nl->nodes.nelem == 0
+ || !preg->newline_anchor))
+ {
+ if (start != 0 && last_start != 0)
+ return REG_NOMATCH;
+ start = last_start = 0;
+ }
+
+ /* We must check the longest matching, if nmatch > 0. */
+ fl_longest_match = (nmatch != 0 || dfa->nbackref);
+
+ err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1,
+ preg->translate, (preg->syntax & RE_ICASE) != 0,
+ dfa);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ mctx.input.stop = stop;
+ mctx.input.raw_stop = stop;
+ mctx.input.newline_anchor = preg->newline_anchor;
+
+ err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+
+ /* We will log all the DFA states through which the dfa pass,
+ if nmatch > 1, or this dfa has "multibyte node", which is a
+ back-reference or a node which can accept multibyte character or
+ multi character collating element. */
+ if (nmatch > 1 || dfa->has_mb_node)
+ {
+ /* Avoid overflow. */
+ if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *))
+ <= mctx.input.bufs_len)))
+ {
+ err = REG_ESPACE;
+ goto free_return;
+ }
+
+ mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1);
+ if (__glibc_unlikely (mctx.state_log == NULL))
+ {
+ err = REG_ESPACE;
+ goto free_return;
+ }
+ }
+
+ match_first = start;
+ mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF
+ : CONTEXT_NEWLINE | CONTEXT_BEGBUF;
+
+ /* Check incrementally whether the input string matches. */
+ incr = (last_start < start) ? -1 : 1;
+ left_lim = (last_start < start) ? last_start : start;
+ right_lim = (last_start < start) ? start : last_start;
+ sb = dfa->mb_cur_max == 1;
+ match_kind =
+ (fastmap
+ ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0)
+ | (start <= last_start ? 2 : 0)
+ | (t != NULL ? 1 : 0))
+ : 8);
+
+ for (;; match_first += incr)
+ {
+ err = REG_NOMATCH;
+ if (match_first < left_lim || right_lim < match_first)
+ goto free_return;
+
+ /* Advance as rapidly as possible through the string, until we
+ find a plausible place to start matching. This may be done
+ with varying efficiency, so there are various possibilities:
+ only the most common of them are specialized, in order to
+ save on code size. We use a switch statement for speed. */
+ switch (match_kind)
+ {
+ case 8:
+ /* No fastmap. */
+ break;
+
+ case 7:
+ /* Fastmap with single-byte translation, match forward. */
+ while (__glibc_likely (match_first < right_lim)
+ && !fastmap[t[(unsigned char) string[match_first]]])
+ ++match_first;
+ goto forward_match_found_start_or_reached_end;
+
+ case 6:
+ /* Fastmap without translation, match forward. */
+ while (__glibc_likely (match_first < right_lim)
+ && !fastmap[(unsigned char) string[match_first]])
+ ++match_first;
+
+ forward_match_found_start_or_reached_end:
+ if (__glibc_unlikely (match_first == right_lim))
+ {
+ ch = match_first >= length
+ ? 0 : (unsigned char) string[match_first];
+ if (!fastmap[t ? t[ch] : ch])
+ goto free_return;
+ }
+ break;
+
+ case 4:
+ case 5:
+ /* Fastmap without multi-byte translation, match backwards. */
+ while (match_first >= left_lim)
+ {
+ ch = match_first >= length
+ ? 0 : (unsigned char) string[match_first];
+ if (fastmap[t ? t[ch] : ch])
+ break;
+ --match_first;
+ }
+ if (match_first < left_lim)
+ goto free_return;
+ break;
+
+ default:
+ /* In this case, we can't determine easily the current byte,
+ since it might be a component byte of a multibyte
+ character. Then we use the constructed buffer instead. */
+ for (;;)
+ {
+ /* If MATCH_FIRST is out of the valid range, reconstruct the
+ buffers. */
+ __re_size_t offset = match_first - mctx.input.raw_mbs_idx;
+ if (__glibc_unlikely (offset
+ >= (__re_size_t) mctx.input.valid_raw_len))
+ {
+ err = re_string_reconstruct (&mctx.input, match_first,
+ eflags);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+
+ offset = match_first - mctx.input.raw_mbs_idx;
+ }
+ /* Use buffer byte if OFFSET is in buffer, otherwise '\0'. */
+ ch = (offset < mctx.input.valid_len
+ ? re_string_byte_at (&mctx.input, offset) : 0);
+ if (fastmap[ch])
+ break;
+ match_first += incr;
+ if (match_first < left_lim || match_first > right_lim)
+ {
+ err = REG_NOMATCH;
+ goto free_return;
+ }
+ }
+ break;
+ }
+
+ /* Reconstruct the buffers so that the matcher can assume that
+ the matching starts from the beginning of the buffer. */
+ err = re_string_reconstruct (&mctx.input, match_first, eflags);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+
+ /* Don't consider this char as a possible match start if it part,
+ yet isn't the head, of a multibyte character. */
+ if (!sb && !re_string_first_byte (&mctx.input, 0))
+ continue;
+
+ /* It seems to be appropriate one, then use the matcher. */
+ /* We assume that the matching starts from 0. */
+ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0;
+ match_last = check_matching (&mctx, fl_longest_match,
+ start <= last_start ? &match_first : NULL);
+ if (match_last != -1)
+ {
+ if (__glibc_unlikely (match_last == -2))
+ {
+ err = REG_ESPACE;
+ goto free_return;
+ }
+ else
+ {
+ mctx.match_last = match_last;
+ if ((!preg->no_sub && nmatch > 1) || dfa->nbackref)
+ {
+ re_dfastate_t *pstate = mctx.state_log[match_last];
+ mctx.last_node = check_halt_state_context (&mctx, pstate,
+ match_last);
+ }
+ if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match)
+ || dfa->nbackref)
+ {
+ err = prune_impossible_nodes (&mctx);
+ if (err == REG_NOERROR)
+ break;
+ if (__glibc_unlikely (err != REG_NOMATCH))
+ goto free_return;
+ match_last = -1;
+ }
+ else
+ break; /* We found a match. */
+ }
+ }
+
+ match_ctx_clean (&mctx);
+ }
+
+ DEBUG_ASSERT (match_last != -1);
+ DEBUG_ASSERT (err == REG_NOERROR);
+
+ /* Set pmatch[] if we need. */
+ if (nmatch > 0)
+ {
+ Idx reg_idx;
+
+ /* Initialize registers. */
+ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx)
+ pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1;
+
+ /* Set the points where matching start/end. */
+ pmatch[0].rm_so = 0;
+ pmatch[0].rm_eo = mctx.match_last;
+ /* FIXME: This function should fail if mctx.match_last exceeds
+ the maximum possible regoff_t value. We need a new error
+ code REG_OVERFLOW. */
+
+ if (!preg->no_sub && nmatch > 1)
+ {
+ err = set_regs (preg, &mctx, nmatch, pmatch,
+ dfa->has_plural_match && dfa->nbackref > 0);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+
+ /* At last, add the offset to each register, since we slid
+ the buffers so that we could assume that the matching starts
+ from 0. */
+ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
+ if (pmatch[reg_idx].rm_so != -1)
+ {
+ if (__glibc_unlikely (mctx.input.offsets_needed != 0))
+ {
+ pmatch[reg_idx].rm_so =
+ (pmatch[reg_idx].rm_so == mctx.input.valid_len
+ ? mctx.input.valid_raw_len
+ : mctx.input.offsets[pmatch[reg_idx].rm_so]);
+ pmatch[reg_idx].rm_eo =
+ (pmatch[reg_idx].rm_eo == mctx.input.valid_len
+ ? mctx.input.valid_raw_len
+ : mctx.input.offsets[pmatch[reg_idx].rm_eo]);
+ }
+ pmatch[reg_idx].rm_so += match_first;
+ pmatch[reg_idx].rm_eo += match_first;
+ }
+ for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx)
+ {
+ pmatch[nmatch + reg_idx].rm_so = -1;
+ pmatch[nmatch + reg_idx].rm_eo = -1;
+ }
+
+ if (dfa->subexp_map)
+ for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++)
+ if (dfa->subexp_map[reg_idx] != reg_idx)
+ {
+ pmatch[reg_idx + 1].rm_so
+ = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so;
+ pmatch[reg_idx + 1].rm_eo
+ = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo;
+ }
+ }
+
+ free_return:
+ re_free (mctx.state_log);
+ if (dfa->nbackref)
+ match_ctx_free (&mctx);
+ re_string_destruct (&mctx.input);
+ return err;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+prune_impossible_nodes (re_match_context_t *mctx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ Idx halt_node, match_last;
+ reg_errcode_t ret;
+ re_dfastate_t **sifted_states;
+ re_dfastate_t **lim_states = NULL;
+ re_sift_context_t sctx;
+ DEBUG_ASSERT (mctx->state_log != NULL);
+ match_last = mctx->match_last;
+ halt_node = mctx->last_node;
+
+ /* Avoid overflow. */
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *))
+ <= match_last))
+ return REG_ESPACE;
+
+ sifted_states = re_malloc (re_dfastate_t *, match_last + 1);
+ if (__glibc_unlikely (sifted_states == NULL))
+ {
+ ret = REG_ESPACE;
+ goto free_return;
+ }
+ if (dfa->nbackref)
+ {
+ lim_states = re_malloc (re_dfastate_t *, match_last + 1);
+ if (__glibc_unlikely (lim_states == NULL))
+ {
+ ret = REG_ESPACE;
+ goto free_return;
+ }
+ while (1)
+ {
+ memset (lim_states, '\0',
+ sizeof (re_dfastate_t *) * (match_last + 1));
+ sift_ctx_init (&sctx, sifted_states, lim_states, halt_node,
+ match_last);
+ ret = sift_states_backward (mctx, &sctx);
+ re_node_set_free (&sctx.limits);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ goto free_return;
+ if (sifted_states[0] != NULL || lim_states[0] != NULL)
+ break;
+ do
+ {
+ --match_last;
+ if (match_last < 0)
+ {
+ ret = REG_NOMATCH;
+ goto free_return;
+ }
+ } while (mctx->state_log[match_last] == NULL
+ || !mctx->state_log[match_last]->halt);
+ halt_node = check_halt_state_context (mctx,
+ mctx->state_log[match_last],
+ match_last);
+ }
+ ret = merge_state_array (dfa, sifted_states, lim_states,
+ match_last + 1);
+ re_free (lim_states);
+ lim_states = NULL;
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ goto free_return;
+ }
+ else
+ {
+ sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last);
+ ret = sift_states_backward (mctx, &sctx);
+ re_node_set_free (&sctx.limits);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ goto free_return;
+ if (sifted_states[0] == NULL)
+ {
+ ret = REG_NOMATCH;
+ goto free_return;
+ }
+ }
+ re_free (mctx->state_log);
+ mctx->state_log = sifted_states;
+ sifted_states = NULL;
+ mctx->last_node = halt_node;
+ mctx->match_last = match_last;
+ ret = REG_NOERROR;
+ free_return:
+ re_free (sifted_states);
+ re_free (lim_states);
+ return ret;
+}
+
+/* Acquire an initial state and return it.
+ We must select appropriate initial state depending on the context,
+ since initial states may have constraints like "\<", "^", etc.. */
+
+static __always_inline re_dfastate_t *
+acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx,
+ Idx idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ if (dfa->init_state->has_constraint)
+ {
+ unsigned int context;
+ context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags);
+ if (IS_WORD_CONTEXT (context))
+ return dfa->init_state_word;
+ else if (IS_ORDINARY_CONTEXT (context))
+ return dfa->init_state;
+ else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context))
+ return dfa->init_state_begbuf;
+ else if (IS_NEWLINE_CONTEXT (context))
+ return dfa->init_state_nl;
+ else if (IS_BEGBUF_CONTEXT (context))
+ {
+ /* It is relatively rare case, then calculate on demand. */
+ return re_acquire_state_context (err, dfa,
+ dfa->init_state->entrance_nodes,
+ context);
+ }
+ else
+ /* Must not happen? */
+ return dfa->init_state;
+ }
+ else
+ return dfa->init_state;
+}
+
+/* Check whether the regular expression match input string INPUT or not,
+ and return the index where the matching end. Return -1 if
+ there is no match, and return -2 in case of an error.
+ FL_LONGEST_MATCH means we want the POSIX longest matching.
+ If P_MATCH_FIRST is not NULL, and the match fails, it is set to the
+ next place where we may want to try matching.
+ Note that the matcher assumes that the matching starts from the current
+ index of the buffer. */
+
+static Idx
+__attribute_warn_unused_result__
+check_matching (re_match_context_t *mctx, bool fl_longest_match,
+ Idx *p_match_first)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err;
+ Idx match = 0;
+ Idx match_last = -1;
+ Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+ re_dfastate_t *cur_state;
+ bool at_init_state = p_match_first != NULL;
+ Idx next_start_idx = cur_str_idx;
+
+ err = REG_NOERROR;
+ cur_state = acquire_init_state_context (&err, mctx, cur_str_idx);
+ /* An initial state must not be NULL (invalid). */
+ if (__glibc_unlikely (cur_state == NULL))
+ {
+ DEBUG_ASSERT (err == REG_ESPACE);
+ return -2;
+ }
+
+ if (mctx->state_log != NULL)
+ {
+ mctx->state_log[cur_str_idx] = cur_state;
+
+ /* Check OP_OPEN_SUBEXP in the initial state in case that we use them
+ later. E.g. Processing back references. */
+ if (__glibc_unlikely (dfa->nbackref))
+ {
+ at_init_state = false;
+ err = check_subexp_matching_top (mctx, &cur_state->nodes, 0);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ if (cur_state->has_backref)
+ {
+ err = transit_state_bkref (mctx, &cur_state->nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+ }
+
+ /* If the RE accepts NULL string. */
+ if (__glibc_unlikely (cur_state->halt))
+ {
+ if (!cur_state->has_constraint
+ || check_halt_state_context (mctx, cur_state, cur_str_idx))
+ {
+ if (!fl_longest_match)
+ return cur_str_idx;
+ else
+ {
+ match_last = cur_str_idx;
+ match = 1;
+ }
+ }
+ }
+
+ while (!re_string_eoi (&mctx->input))
+ {
+ re_dfastate_t *old_state = cur_state;
+ Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1;
+
+ if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len)
+ && mctx->input.bufs_len < mctx->input.len)
+ || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len)
+ && mctx->input.valid_len < mctx->input.len))
+ {
+ err = extend_buffers (mctx, next_char_idx + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ DEBUG_ASSERT (err == REG_ESPACE);
+ return -2;
+ }
+ }
+
+ cur_state = transit_state (&err, mctx, cur_state);
+ if (mctx->state_log != NULL)
+ cur_state = merge_state_with_log (&err, mctx, cur_state);
+
+ if (cur_state == NULL)
+ {
+ /* Reached the invalid state or an error. Try to recover a valid
+ state using the state log, if available and if we have not
+ already found a valid (even if not the longest) match. */
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return -2;
+
+ if (mctx->state_log == NULL
+ || (match && !fl_longest_match)
+ || (cur_state = find_recover_state (&err, mctx)) == NULL)
+ break;
+ }
+
+ if (__glibc_unlikely (at_init_state))
+ {
+ if (old_state == cur_state)
+ next_start_idx = next_char_idx;
+ else
+ at_init_state = false;
+ }
+
+ if (cur_state->halt)
+ {
+ /* Reached a halt state.
+ Check the halt state can satisfy the current context. */
+ if (!cur_state->has_constraint
+ || check_halt_state_context (mctx, cur_state,
+ re_string_cur_idx (&mctx->input)))
+ {
+ /* We found an appropriate halt state. */
+ match_last = re_string_cur_idx (&mctx->input);
+ match = 1;
+
+ /* We found a match, do not modify match_first below. */
+ p_match_first = NULL;
+ if (!fl_longest_match)
+ break;
+ }
+ }
+ }
+
+ if (p_match_first)
+ *p_match_first += next_start_idx;
+
+ return match_last;
+}
+
+/* Check NODE match the current context. */
+
+static bool
+check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context)
+{
+ re_token_type_t type = dfa->nodes[node].type;
+ unsigned int constraint = dfa->nodes[node].constraint;
+ if (type != END_OF_RE)
+ return false;
+ if (!constraint)
+ return true;
+ if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context))
+ return false;
+ return true;
+}
+
+/* Check the halt state STATE match the current context.
+ Return 0 if not match, if the node, STATE has, is a halt node and
+ match the context, return the node. */
+
+static Idx
+check_halt_state_context (const re_match_context_t *mctx,
+ const re_dfastate_t *state, Idx idx)
+{
+ Idx i;
+ unsigned int context;
+ DEBUG_ASSERT (state->halt);
+ context = re_string_context_at (&mctx->input, idx, mctx->eflags);
+ for (i = 0; i < state->nodes.nelem; ++i)
+ if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context))
+ return state->nodes.elems[i];
+ return 0;
+}
+
+/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA
+ corresponding to the DFA).
+ Return the destination node, and update EPS_VIA_NODES;
+ return -1 on match failure, -2 on error. */
+
+static Idx
+proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs,
+ regmatch_t *prevregs,
+ Idx *pidx, Idx node, re_node_set *eps_via_nodes,
+ struct re_fail_stack_t *fs)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ if (IS_EPSILON_NODE (dfa->nodes[node].type))
+ {
+ re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes;
+ re_node_set *edests = &dfa->edests[node];
+
+ if (! re_node_set_contains (eps_via_nodes, node))
+ {
+ bool ok = re_node_set_insert (eps_via_nodes, node);
+ if (__glibc_unlikely (! ok))
+ return -2;
+ }
+
+ /* Pick a valid destination, or return -1 if none is found. */
+ Idx dest_node = -1;
+ for (Idx i = 0; i < edests->nelem; i++)
+ {
+ Idx candidate = edests->elems[i];
+ if (!re_node_set_contains (cur_nodes, candidate))
+ continue;
+ if (dest_node == -1)
+ dest_node = candidate;
+
+ else
+ {
+ /* In order to avoid infinite loop like "(a*)*", return the second
+ epsilon-transition if the first was already considered. */
+ if (re_node_set_contains (eps_via_nodes, dest_node))
+ return candidate;
+
+ /* Otherwise, push the second epsilon-transition on the fail stack. */
+ else if (fs != NULL
+ && push_fail_stack (fs, *pidx, candidate, nregs, regs,
+ prevregs, eps_via_nodes))
+ return -2;
+
+ /* We know we are going to exit. */
+ break;
+ }
+ }
+ return dest_node;
+ }
+ else
+ {
+ Idx naccepted = 0;
+ re_token_type_t type = dfa->nodes[node].type;
+
+ if (dfa->nodes[node].accept_mb)
+ naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx);
+ else if (type == OP_BACK_REF)
+ {
+ Idx subexp_idx = dfa->nodes[node].opr.idx + 1;
+ if (subexp_idx < nregs)
+ naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so;
+ if (fs != NULL)
+ {
+ if (subexp_idx >= nregs
+ || regs[subexp_idx].rm_so == -1
+ || regs[subexp_idx].rm_eo == -1)
+ return -1;
+ else if (naccepted)
+ {
+ char *buf = (char *) re_string_get_buffer (&mctx->input);
+ if (mctx->input.valid_len - *pidx < naccepted
+ || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx,
+ naccepted)
+ != 0))
+ return -1;
+ }
+ }
+
+ if (naccepted == 0)
+ {
+ Idx dest_node;
+ bool ok = re_node_set_insert (eps_via_nodes, node);
+ if (__glibc_unlikely (! ok))
+ return -2;
+ dest_node = dfa->edests[node].elems[0];
+ if (re_node_set_contains (&mctx->state_log[*pidx]->nodes,
+ dest_node))
+ return dest_node;
+ }
+ }
+
+ if (naccepted != 0
+ || check_node_accept (mctx, dfa->nodes + node, *pidx))
+ {
+ Idx dest_node = dfa->nexts[node];
+ *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted;
+ if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL
+ || !re_node_set_contains (&mctx->state_log[*pidx]->nodes,
+ dest_node)))
+ return -1;
+ re_node_set_empty (eps_via_nodes);
+ return dest_node;
+ }
+ }
+ return -1;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node,
+ Idx nregs, regmatch_t *regs, regmatch_t *prevregs,
+ re_node_set *eps_via_nodes)
+{
+ reg_errcode_t err;
+ Idx num = fs->num;
+ if (num == fs->alloc)
+ {
+ struct re_fail_stack_ent_t *new_array;
+ new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t,
+ fs->alloc * 2);
+ if (new_array == NULL)
+ return REG_ESPACE;
+ fs->alloc *= 2;
+ fs->stack = new_array;
+ }
+ fs->stack[num].idx = str_idx;
+ fs->stack[num].node = dest_node;
+ fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs);
+ if (fs->stack[num].regs == NULL)
+ return REG_ESPACE;
+ fs->num = num + 1;
+ memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs);
+ memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs);
+ err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes);
+ return err;
+}
+
+static Idx
+pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs,
+ regmatch_t *regs, regmatch_t *prevregs,
+ re_node_set *eps_via_nodes)
+{
+ if (fs == NULL || fs->num == 0)
+ return -1;
+ Idx num = --fs->num;
+ *pidx = fs->stack[num].idx;
+ memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs);
+ memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs);
+ re_node_set_free (eps_via_nodes);
+ re_free (fs->stack[num].regs);
+ *eps_via_nodes = fs->stack[num].eps_via_nodes;
+ DEBUG_ASSERT (0 <= fs->stack[num].node);
+ return fs->stack[num].node;
+}
+
+
+#define DYNARRAY_STRUCT regmatch_list
+#define DYNARRAY_ELEMENT regmatch_t
+#define DYNARRAY_PREFIX regmatch_list_
+#include <malloc/dynarray-skeleton.c>
+
+/* Set the positions where the subexpressions are starts/ends to registers
+ PMATCH.
+ Note: We assume that pmatch[0] is already set, and
+ pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch,
+ regmatch_t *pmatch, bool fl_backtrack)
+{
+ const re_dfa_t *dfa = preg->buffer;
+ Idx idx, cur_node;
+ re_node_set eps_via_nodes;
+ struct re_fail_stack_t *fs;
+ struct re_fail_stack_t fs_body = { 0, 2, NULL };
+ struct regmatch_list prev_match;
+ regmatch_list_init (&prev_match);
+
+ DEBUG_ASSERT (nmatch > 1);
+ DEBUG_ASSERT (mctx->state_log != NULL);
+ if (fl_backtrack)
+ {
+ fs = &fs_body;
+ fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc);
+ if (fs->stack == NULL)
+ return REG_ESPACE;
+ }
+ else
+ fs = NULL;
+
+ cur_node = dfa->init_node;
+ re_node_set_init_empty (&eps_via_nodes);
+
+ if (!regmatch_list_resize (&prev_match, nmatch))
+ {
+ regmatch_list_free (&prev_match);
+ free_fail_stack_return (fs);
+ return REG_ESPACE;
+ }
+ regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match);
+ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
+
+ for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;)
+ {
+ update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch);
+
+ if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node)
+ || (fs && re_node_set_contains (&eps_via_nodes, cur_node)))
+ {
+ Idx reg_idx;
+ cur_node = -1;
+ if (fs)
+ {
+ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx)
+ if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1)
+ {
+ cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
+ prev_idx_match, &eps_via_nodes);
+ break;
+ }
+ }
+ if (cur_node < 0)
+ {
+ re_node_set_free (&eps_via_nodes);
+ regmatch_list_free (&prev_match);
+ return free_fail_stack_return (fs);
+ }
+ }
+
+ /* Proceed to next node. */
+ cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match,
+ &idx, cur_node,
+ &eps_via_nodes, fs);
+
+ if (__glibc_unlikely (cur_node < 0))
+ {
+ if (__glibc_unlikely (cur_node == -2))
+ {
+ re_node_set_free (&eps_via_nodes);
+ regmatch_list_free (&prev_match);
+ free_fail_stack_return (fs);
+ return REG_ESPACE;
+ }
+ cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch,
+ prev_idx_match, &eps_via_nodes);
+ if (cur_node < 0)
+ {
+ re_node_set_free (&eps_via_nodes);
+ regmatch_list_free (&prev_match);
+ free_fail_stack_return (fs);
+ return REG_NOMATCH;
+ }
+ }
+ }
+ re_node_set_free (&eps_via_nodes);
+ regmatch_list_free (&prev_match);
+ return free_fail_stack_return (fs);
+}
+
+static reg_errcode_t
+free_fail_stack_return (struct re_fail_stack_t *fs)
+{
+ if (fs)
+ {
+ Idx fs_idx;
+ for (fs_idx = 0; fs_idx < fs->num; ++fs_idx)
+ {
+ re_node_set_free (&fs->stack[fs_idx].eps_via_nodes);
+ re_free (fs->stack[fs_idx].regs);
+ }
+ re_free (fs->stack);
+ }
+ return REG_NOERROR;
+}
+
+static void
+update_regs (const re_dfa_t *dfa, regmatch_t *pmatch,
+ regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch)
+{
+ int type = dfa->nodes[cur_node].type;
+ if (type == OP_OPEN_SUBEXP)
+ {
+ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
+
+ /* We are at the first node of this sub expression. */
+ if (reg_num < nmatch)
+ {
+ pmatch[reg_num].rm_so = cur_idx;
+ pmatch[reg_num].rm_eo = -1;
+ }
+ }
+ else if (type == OP_CLOSE_SUBEXP)
+ {
+ /* We are at the last node of this sub expression. */
+ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1;
+ if (reg_num < nmatch)
+ {
+ if (pmatch[reg_num].rm_so < cur_idx)
+ {
+ pmatch[reg_num].rm_eo = cur_idx;
+ /* This is a non-empty match or we are not inside an optional
+ subexpression. Accept this right away. */
+ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch);
+ }
+ else
+ {
+ if (dfa->nodes[cur_node].opt_subexp
+ && prev_idx_match[reg_num].rm_so != -1)
+ /* We transited through an empty match for an optional
+ subexpression, like (a?)*, and this is not the subexp's
+ first match. Copy back the old content of the registers
+ so that matches of an inner subexpression are undone as
+ well, like in ((a?))*. */
+ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch);
+ else
+ /* We completed a subexpression, but it may be part of
+ an optional one, so do not update PREV_IDX_MATCH. */
+ pmatch[reg_num].rm_eo = cur_idx;
+ }
+ }
+ }
+}
+
+/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0
+ and sift the nodes in each states according to the following rules.
+ Updated state_log will be wrote to STATE_LOG.
+
+ Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if...
+ 1. When STR_IDX == MATCH_LAST(the last index in the state_log):
+ If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to
+ the LAST_NODE, we throw away the node 'a'.
+ 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts
+ string 's' and transit to 'b':
+ i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw
+ away the node 'a'.
+ ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is
+ thrown away, we throw away the node 'a'.
+ 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b':
+ i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the
+ node 'a'.
+ ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away,
+ we throw away the node 'a'. */
+
+#define STATE_NODE_CONTAINS(state,node) \
+ ((state) != NULL && re_node_set_contains (&(state)->nodes, node))
+
+static reg_errcode_t
+sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx)
+{
+ reg_errcode_t err;
+ int null_cnt = 0;
+ Idx str_idx = sctx->last_str_idx;
+ re_node_set cur_dest;
+
+ DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL);
+
+ /* Build sifted state_log[str_idx]. It has the nodes which can epsilon
+ transit to the last_node and the last_node itself. */
+ err = re_node_set_init_1 (&cur_dest, sctx->last_node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+
+ /* Then check each states in the state_log. */
+ while (str_idx > 0)
+ {
+ /* Update counters. */
+ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0;
+ if (null_cnt > mctx->max_mb_elem_len)
+ {
+ memset (sctx->sifted_states, '\0',
+ sizeof (re_dfastate_t *) * str_idx);
+ re_node_set_free (&cur_dest);
+ return REG_NOERROR;
+ }
+ re_node_set_empty (&cur_dest);
+ --str_idx;
+
+ if (mctx->state_log[str_idx])
+ {
+ err = build_sifted_states (mctx, sctx, str_idx, &cur_dest);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+
+ /* Add all the nodes which satisfy the following conditions:
+ - It can epsilon transit to a node in CUR_DEST.
+ - It is in CUR_SRC.
+ And update state_log. */
+ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+ err = REG_NOERROR;
+ free_return:
+ re_node_set_free (&cur_dest);
+ return err;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx,
+ Idx str_idx, re_node_set *cur_dest)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes;
+ Idx i;
+
+ /* Then build the next sifted state.
+ We build the next sifted state on 'cur_dest', and update
+ 'sifted_states[str_idx]' with 'cur_dest'.
+ Note:
+ 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'.
+ 'cur_src' points the node_set of the old 'state_log[str_idx]'
+ (with the epsilon nodes pre-filtered out). */
+ for (i = 0; i < cur_src->nelem; i++)
+ {
+ Idx prev_node = cur_src->elems[i];
+ int naccepted = 0;
+ bool ok;
+ DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type));
+
+ /* If the node may accept "multi byte". */
+ if (dfa->nodes[prev_node].accept_mb)
+ naccepted = sift_states_iter_mb (mctx, sctx, prev_node,
+ str_idx, sctx->last_str_idx);
+
+ /* We don't check backreferences here.
+ See update_cur_sifted_state(). */
+ if (!naccepted
+ && check_node_accept (mctx, dfa->nodes + prev_node, str_idx)
+ && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1],
+ dfa->nexts[prev_node]))
+ naccepted = 1;
+
+ if (naccepted == 0)
+ continue;
+
+ if (sctx->limits.nelem)
+ {
+ Idx to_idx = str_idx + naccepted;
+ if (check_dst_limits (mctx, &sctx->limits,
+ dfa->nexts[prev_node], to_idx,
+ prev_node, str_idx))
+ continue;
+ }
+ ok = re_node_set_insert (cur_dest, prev_node);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+
+ return REG_NOERROR;
+}
+
+/* Helper functions. */
+
+static reg_errcode_t
+clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx)
+{
+ Idx top = mctx->state_log_top;
+
+ if ((next_state_log_idx >= mctx->input.bufs_len
+ && mctx->input.bufs_len < mctx->input.len)
+ || (next_state_log_idx >= mctx->input.valid_len
+ && mctx->input.valid_len < mctx->input.len))
+ {
+ reg_errcode_t err;
+ err = extend_buffers (mctx, next_state_log_idx + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+
+ if (top < next_state_log_idx)
+ {
+ DEBUG_ASSERT (mctx->state_log != NULL);
+ memset (mctx->state_log + top + 1, '\0',
+ sizeof (re_dfastate_t *) * (next_state_log_idx - top));
+ mctx->state_log_top = next_state_log_idx;
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst,
+ re_dfastate_t **src, Idx num)
+{
+ Idx st_idx;
+ reg_errcode_t err;
+ for (st_idx = 0; st_idx < num; ++st_idx)
+ {
+ if (dst[st_idx] == NULL)
+ dst[st_idx] = src[st_idx];
+ else if (src[st_idx] != NULL)
+ {
+ re_node_set merged_set;
+ err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes,
+ &src[st_idx]->nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ dst[st_idx] = re_acquire_state (&err, dfa, &merged_set);
+ re_node_set_free (&merged_set);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+update_cur_sifted_state (const re_match_context_t *mctx,
+ re_sift_context_t *sctx, Idx str_idx,
+ re_node_set *dest_nodes)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err = REG_NOERROR;
+ const re_node_set *candidates;
+ candidates = ((mctx->state_log[str_idx] == NULL) ? NULL
+ : &mctx->state_log[str_idx]->nodes);
+
+ if (dest_nodes->nelem == 0)
+ sctx->sifted_states[str_idx] = NULL;
+ else
+ {
+ if (candidates)
+ {
+ /* At first, add the nodes which can epsilon transit to a node in
+ DEST_NODE. */
+ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ /* Then, check the limitations in the current sift_context. */
+ if (sctx->limits.nelem)
+ {
+ err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits,
+ mctx->bkref_ents, str_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+
+ sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+
+ if (candidates && mctx->state_log[str_idx]->has_backref)
+ {
+ err = sift_states_bkref (mctx, sctx, str_idx, candidates);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes,
+ const re_node_set *candidates)
+{
+ reg_errcode_t err = REG_NOERROR;
+ Idx i;
+
+ re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ if (!state->inveclosure.alloc)
+ {
+ err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return REG_ESPACE;
+ for (i = 0; i < dest_nodes->nelem; i++)
+ {
+ err = re_node_set_merge (&state->inveclosure,
+ dfa->inveclosures + dest_nodes->elems[i]);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return REG_ESPACE;
+ }
+ }
+ return re_node_set_add_intersect (dest_nodes, candidates,
+ &state->inveclosure);
+}
+
+static reg_errcode_t
+sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes,
+ const re_node_set *candidates)
+{
+ Idx ecl_idx;
+ reg_errcode_t err;
+ re_node_set *inv_eclosure = dfa->inveclosures + node;
+ re_node_set except_nodes;
+ re_node_set_init_empty (&except_nodes);
+ for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
+ {
+ Idx cur_node = inv_eclosure->elems[ecl_idx];
+ if (cur_node == node)
+ continue;
+ if (IS_EPSILON_NODE (dfa->nodes[cur_node].type))
+ {
+ Idx edst1 = dfa->edests[cur_node].elems[0];
+ Idx edst2 = ((dfa->edests[cur_node].nelem > 1)
+ ? dfa->edests[cur_node].elems[1] : -1);
+ if ((!re_node_set_contains (inv_eclosure, edst1)
+ && re_node_set_contains (dest_nodes, edst1))
+ || (edst2 > 0
+ && !re_node_set_contains (inv_eclosure, edst2)
+ && re_node_set_contains (dest_nodes, edst2)))
+ {
+ err = re_node_set_add_intersect (&except_nodes, candidates,
+ dfa->inveclosures + cur_node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&except_nodes);
+ return err;
+ }
+ }
+ }
+ }
+ for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx)
+ {
+ Idx cur_node = inv_eclosure->elems[ecl_idx];
+ if (!re_node_set_contains (&except_nodes, cur_node))
+ {
+ Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1;
+ re_node_set_remove_at (dest_nodes, idx);
+ }
+ }
+ re_node_set_free (&except_nodes);
+ return REG_NOERROR;
+}
+
+static bool
+check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits,
+ Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ Idx lim_idx, src_pos, dst_pos;
+
+ Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx);
+ Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx);
+ for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
+ {
+ Idx subexp_idx;
+ struct re_backref_cache_entry *ent;
+ ent = mctx->bkref_ents + limits->elems[lim_idx];
+ subexp_idx = dfa->nodes[ent->node].opr.idx;
+
+ dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
+ subexp_idx, dst_node, dst_idx,
+ dst_bkref_idx);
+ src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx],
+ subexp_idx, src_node, src_idx,
+ src_bkref_idx);
+
+ /* In case of:
+ <src> <dst> ( <subexp> )
+ ( <subexp> ) <src> <dst>
+ ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */
+ if (src_pos == dst_pos)
+ continue; /* This is unrelated limitation. */
+ else
+ return true;
+ }
+ return false;
+}
+
+static int
+check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries,
+ Idx subexp_idx, Idx from_node, Idx bkref_idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ const re_node_set *eclosures = dfa->eclosures + from_node;
+ Idx node_idx;
+
+ /* Else, we are on the boundary: examine the nodes on the epsilon
+ closure. */
+ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx)
+ {
+ Idx node = eclosures->elems[node_idx];
+ switch (dfa->nodes[node].type)
+ {
+ case OP_BACK_REF:
+ if (bkref_idx != -1)
+ {
+ struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx;
+ do
+ {
+ Idx dst;
+ int cpos;
+
+ if (ent->node != node)
+ continue;
+
+ if (subexp_idx < BITSET_WORD_BITS
+ && !(ent->eps_reachable_subexps_map
+ & ((bitset_word_t) 1 << subexp_idx)))
+ continue;
+
+ /* Recurse trying to reach the OP_OPEN_SUBEXP and
+ OP_CLOSE_SUBEXP cases below. But, if the
+ destination node is the same node as the source
+ node, don't recurse because it would cause an
+ infinite loop: a regex that exhibits this behavior
+ is ()\1*\1* */
+ dst = dfa->edests[node].elems[0];
+ if (dst == from_node)
+ {
+ if (boundaries & 1)
+ return -1;
+ else /* if (boundaries & 2) */
+ return 0;
+ }
+
+ cpos =
+ check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
+ dst, bkref_idx);
+ if (cpos == -1 /* && (boundaries & 1) */)
+ return -1;
+ if (cpos == 0 && (boundaries & 2))
+ return 0;
+
+ if (subexp_idx < BITSET_WORD_BITS)
+ ent->eps_reachable_subexps_map
+ &= ~((bitset_word_t) 1 << subexp_idx);
+ }
+ while (ent++->more);
+ }
+ break;
+
+ case OP_OPEN_SUBEXP:
+ if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx)
+ return -1;
+ break;
+
+ case OP_CLOSE_SUBEXP:
+ if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx)
+ return 0;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return (boundaries & 2) ? 1 : 0;
+}
+
+static int
+check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit,
+ Idx subexp_idx, Idx from_node, Idx str_idx,
+ Idx bkref_idx)
+{
+ struct re_backref_cache_entry *lim = mctx->bkref_ents + limit;
+ int boundaries;
+
+ /* If we are outside the range of the subexpression, return -1 or 1. */
+ if (str_idx < lim->subexp_from)
+ return -1;
+
+ if (lim->subexp_to < str_idx)
+ return 1;
+
+ /* If we are within the subexpression, return 0. */
+ boundaries = (str_idx == lim->subexp_from);
+ boundaries |= (str_idx == lim->subexp_to) << 1;
+ if (boundaries == 0)
+ return 0;
+
+ /* Else, examine epsilon closure. */
+ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx,
+ from_node, bkref_idx);
+}
+
+/* Check the limitations of sub expressions LIMITS, and remove the nodes
+ which are against limitations from DEST_NODES. */
+
+static reg_errcode_t
+check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes,
+ const re_node_set *candidates, re_node_set *limits,
+ struct re_backref_cache_entry *bkref_ents, Idx str_idx)
+{
+ reg_errcode_t err;
+ Idx node_idx, lim_idx;
+
+ for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx)
+ {
+ Idx subexp_idx;
+ struct re_backref_cache_entry *ent;
+ ent = bkref_ents + limits->elems[lim_idx];
+
+ if (str_idx <= ent->subexp_from || ent->str_idx < str_idx)
+ continue; /* This is unrelated limitation. */
+
+ subexp_idx = dfa->nodes[ent->node].opr.idx;
+ if (ent->subexp_to == str_idx)
+ {
+ Idx ops_node = -1;
+ Idx cls_node = -1;
+ for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+ {
+ Idx node = dest_nodes->elems[node_idx];
+ re_token_type_t type = dfa->nodes[node].type;
+ if (type == OP_OPEN_SUBEXP
+ && subexp_idx == dfa->nodes[node].opr.idx)
+ ops_node = node;
+ else if (type == OP_CLOSE_SUBEXP
+ && subexp_idx == dfa->nodes[node].opr.idx)
+ cls_node = node;
+ }
+
+ /* Check the limitation of the open subexpression. */
+ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */
+ if (ops_node >= 0)
+ {
+ err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes,
+ candidates);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+
+ /* Check the limitation of the close subexpression. */
+ if (cls_node >= 0)
+ for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+ {
+ Idx node = dest_nodes->elems[node_idx];
+ if (!re_node_set_contains (dfa->inveclosures + node,
+ cls_node)
+ && !re_node_set_contains (dfa->eclosures + node,
+ cls_node))
+ {
+ /* It is against this limitation.
+ Remove it form the current sifted state. */
+ err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
+ candidates);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ --node_idx;
+ }
+ }
+ }
+ else /* (ent->subexp_to != str_idx) */
+ {
+ for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx)
+ {
+ Idx node = dest_nodes->elems[node_idx];
+ re_token_type_t type = dfa->nodes[node].type;
+ if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP)
+ {
+ if (subexp_idx != dfa->nodes[node].opr.idx)
+ continue;
+ /* It is against this limitation.
+ Remove it form the current sifted state. */
+ err = sub_epsilon_src_nodes (dfa, node, dest_nodes,
+ candidates);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+ }
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx,
+ Idx str_idx, const re_node_set *candidates)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err;
+ Idx node_idx, node;
+ re_sift_context_t local_sctx;
+ Idx first_idx = search_cur_bkref_entry (mctx, str_idx);
+
+ if (first_idx == -1)
+ return REG_NOERROR;
+
+ local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */
+
+ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx)
+ {
+ Idx enabled_idx;
+ re_token_type_t type;
+ struct re_backref_cache_entry *entry;
+ node = candidates->elems[node_idx];
+ type = dfa->nodes[node].type;
+ /* Avoid infinite loop for the REs like "()\1+". */
+ if (node == sctx->last_node && str_idx == sctx->last_str_idx)
+ continue;
+ if (type != OP_BACK_REF)
+ continue;
+
+ entry = mctx->bkref_ents + first_idx;
+ enabled_idx = first_idx;
+ do
+ {
+ Idx subexp_len;
+ Idx to_idx;
+ Idx dst_node;
+ bool ok;
+ re_dfastate_t *cur_state;
+
+ if (entry->node != node)
+ continue;
+ subexp_len = entry->subexp_to - entry->subexp_from;
+ to_idx = str_idx + subexp_len;
+ dst_node = (subexp_len ? dfa->nexts[node]
+ : dfa->edests[node].elems[0]);
+
+ if (to_idx > sctx->last_str_idx
+ || sctx->sifted_states[to_idx] == NULL
+ || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node)
+ || check_dst_limits (mctx, &sctx->limits, node,
+ str_idx, dst_node, to_idx))
+ continue;
+
+ if (local_sctx.sifted_states == NULL)
+ {
+ local_sctx = *sctx;
+ err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+ local_sctx.last_node = node;
+ local_sctx.last_str_idx = str_idx;
+ ok = re_node_set_insert (&local_sctx.limits, enabled_idx);
+ if (__glibc_unlikely (! ok))
+ {
+ err = REG_ESPACE;
+ goto free_return;
+ }
+ cur_state = local_sctx.sifted_states[str_idx];
+ err = sift_states_backward (mctx, &local_sctx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ if (sctx->limited_states != NULL)
+ {
+ err = merge_state_array (dfa, sctx->limited_states,
+ local_sctx.sifted_states,
+ str_idx + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+ local_sctx.sifted_states[str_idx] = cur_state;
+ re_node_set_remove (&local_sctx.limits, enabled_idx);
+
+ /* mctx->bkref_ents may have changed, reload the pointer. */
+ entry = mctx->bkref_ents + enabled_idx;
+ }
+ while (enabled_idx++, entry++->more);
+ }
+ err = REG_NOERROR;
+ free_return:
+ if (local_sctx.sifted_states != NULL)
+ {
+ re_node_set_free (&local_sctx.limits);
+ }
+
+ return err;
+}
+
+
+static int
+sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx,
+ Idx node_idx, Idx str_idx, Idx max_str_idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ int naccepted;
+ /* Check the node can accept "multi byte". */
+ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx);
+ if (naccepted > 0 && str_idx + naccepted <= max_str_idx
+ && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted],
+ dfa->nexts[node_idx]))
+ /* The node can't accept the "multi byte", or the
+ destination was already thrown away, then the node
+ couldn't accept the current input "multi byte". */
+ naccepted = 0;
+ /* Otherwise, it is sure that the node could accept
+ 'naccepted' bytes input. */
+ return naccepted;
+}
+
+/* Functions for state transition. */
+
+/* Return the next state to which the current state STATE will transit by
+ accepting the current input byte, and update STATE_LOG if necessary.
+ Return NULL on failure.
+ If STATE can accept a multibyte char/collating element/back reference
+ update the destination of STATE_LOG. */
+
+static re_dfastate_t *
+__attribute_warn_unused_result__
+transit_state (reg_errcode_t *err, re_match_context_t *mctx,
+ re_dfastate_t *state)
+{
+ re_dfastate_t **trtable;
+ unsigned char ch;
+
+ /* If the current state can accept multibyte. */
+ if (__glibc_unlikely (state->accept_mb))
+ {
+ *err = transit_state_mb (mctx, state);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+ }
+
+ /* Then decide the next state with the single byte. */
+#if 0
+ if (0)
+ /* don't use transition table */
+ return transit_state_sb (err, mctx, state);
+#endif
+
+ /* Use transition table */
+ ch = re_string_fetch_byte (&mctx->input);
+ for (;;)
+ {
+ trtable = state->trtable;
+ if (__glibc_likely (trtable != NULL))
+ return trtable[ch];
+
+ trtable = state->word_trtable;
+ if (__glibc_likely (trtable != NULL))
+ {
+ unsigned int context;
+ context
+ = re_string_context_at (&mctx->input,
+ re_string_cur_idx (&mctx->input) - 1,
+ mctx->eflags);
+ if (IS_WORD_CONTEXT (context))
+ return trtable[ch + SBC_MAX];
+ else
+ return trtable[ch];
+ }
+
+ if (!build_trtable (mctx->dfa, state))
+ {
+ *err = REG_ESPACE;
+ return NULL;
+ }
+
+ /* Retry, we now have a transition table. */
+ }
+}
+
+/* Update the state_log if we need */
+static re_dfastate_t *
+merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx,
+ re_dfastate_t *next_state)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ Idx cur_idx = re_string_cur_idx (&mctx->input);
+
+ if (cur_idx > mctx->state_log_top)
+ {
+ mctx->state_log[cur_idx] = next_state;
+ mctx->state_log_top = cur_idx;
+ }
+ else if (mctx->state_log[cur_idx] == 0)
+ {
+ mctx->state_log[cur_idx] = next_state;
+ }
+ else
+ {
+ re_dfastate_t *pstate;
+ unsigned int context;
+ re_node_set next_nodes, *log_nodes, *table_nodes = NULL;
+ /* If (state_log[cur_idx] != 0), it implies that cur_idx is
+ the destination of a multibyte char/collating element/
+ back reference. Then the next state is the union set of
+ these destinations and the results of the transition table. */
+ pstate = mctx->state_log[cur_idx];
+ log_nodes = pstate->entrance_nodes;
+ if (next_state != NULL)
+ {
+ table_nodes = next_state->entrance_nodes;
+ *err = re_node_set_init_union (&next_nodes, table_nodes,
+ log_nodes);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+ }
+ else
+ next_nodes = *log_nodes;
+ /* Note: We already add the nodes of the initial state,
+ then we don't need to add them here. */
+
+ context = re_string_context_at (&mctx->input,
+ re_string_cur_idx (&mctx->input) - 1,
+ mctx->eflags);
+ next_state = mctx->state_log[cur_idx]
+ = re_acquire_state_context (err, dfa, &next_nodes, context);
+ /* We don't need to check errors here, since the return value of
+ this function is next_state and ERR is already set. */
+
+ if (table_nodes != NULL)
+ re_node_set_free (&next_nodes);
+ }
+
+ if (__glibc_unlikely (dfa->nbackref) && next_state != NULL)
+ {
+ /* Check OP_OPEN_SUBEXP in the current state in case that we use them
+ later. We must check them here, since the back references in the
+ next state might use them. */
+ *err = check_subexp_matching_top (mctx, &next_state->nodes,
+ cur_idx);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+
+ /* If the next state has back references. */
+ if (next_state->has_backref)
+ {
+ *err = transit_state_bkref (mctx, &next_state->nodes);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+ next_state = mctx->state_log[cur_idx];
+ }
+ }
+
+ return next_state;
+}
+
+/* Skip bytes in the input that correspond to part of a
+ multi-byte match, then look in the log for a state
+ from which to restart matching. */
+static re_dfastate_t *
+find_recover_state (reg_errcode_t *err, re_match_context_t *mctx)
+{
+ re_dfastate_t *cur_state;
+ do
+ {
+ Idx max = mctx->state_log_top;
+ Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+
+ do
+ {
+ if (++cur_str_idx > max)
+ return NULL;
+ re_string_skip_bytes (&mctx->input, 1);
+ }
+ while (mctx->state_log[cur_str_idx] == NULL);
+
+ cur_state = merge_state_with_log (err, mctx, NULL);
+ }
+ while (*err == REG_NOERROR && cur_state == NULL);
+ return cur_state;
+}
+
+/* Helper functions for transit_state. */
+
+/* From the node set CUR_NODES, pick up the nodes whose types are
+ OP_OPEN_SUBEXP and which have corresponding back references in the regular
+ expression. And register them to use them later for evaluating the
+ corresponding back references. */
+
+static reg_errcode_t
+check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes,
+ Idx str_idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ Idx node_idx;
+ reg_errcode_t err;
+
+ /* TODO: This isn't efficient.
+ Because there might be more than one nodes whose types are
+ OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
+ nodes.
+ E.g. RE: (a){2} */
+ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx)
+ {
+ Idx node = cur_nodes->elems[node_idx];
+ if (dfa->nodes[node].type == OP_OPEN_SUBEXP
+ && dfa->nodes[node].opr.idx < BITSET_WORD_BITS
+ && (dfa->used_bkref_map
+ & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx)))
+ {
+ err = match_ctx_add_subtop (mctx, node, str_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+ return REG_NOERROR;
+}
+
+#if 0
+/* Return the next state to which the current state STATE will transit by
+ accepting the current input byte. Return NULL on failure. */
+
+static re_dfastate_t *
+transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx,
+ re_dfastate_t *state)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ re_node_set next_nodes;
+ re_dfastate_t *next_state;
+ Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input);
+ unsigned int context;
+
+ *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ return NULL;
+ for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt)
+ {
+ Idx cur_node = state->nodes.elems[node_cnt];
+ if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx))
+ {
+ *err = re_node_set_merge (&next_nodes,
+ dfa->eclosures + dfa->nexts[cur_node]);
+ if (__glibc_unlikely (*err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return NULL;
+ }
+ }
+ }
+ context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags);
+ next_state = re_acquire_state_context (err, dfa, &next_nodes, context);
+ /* We don't need to check errors here, since the return value of
+ this function is next_state and ERR is already set. */
+
+ re_node_set_free (&next_nodes);
+ re_string_skip_bytes (&mctx->input, 1);
+ return next_state;
+}
+#endif
+
+static reg_errcode_t
+transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err;
+ Idx i;
+
+ for (i = 0; i < pstate->nodes.nelem; ++i)
+ {
+ re_node_set dest_nodes, *new_nodes;
+ Idx cur_node_idx = pstate->nodes.elems[i];
+ int naccepted;
+ Idx dest_idx;
+ unsigned int context;
+ re_dfastate_t *dest_state;
+
+ if (!dfa->nodes[cur_node_idx].accept_mb)
+ continue;
+
+ if (dfa->nodes[cur_node_idx].constraint)
+ {
+ context = re_string_context_at (&mctx->input,
+ re_string_cur_idx (&mctx->input),
+ mctx->eflags);
+ if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint,
+ context))
+ continue;
+ }
+
+ /* How many bytes the node can accept? */
+ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input,
+ re_string_cur_idx (&mctx->input));
+ if (naccepted == 0)
+ continue;
+
+ /* The node can accepts 'naccepted' bytes. */
+ dest_idx = re_string_cur_idx (&mctx->input) + naccepted;
+ mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted
+ : mctx->max_mb_elem_len);
+ err = clean_state_log_if_needed (mctx, dest_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1);
+ new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx];
+
+ dest_state = mctx->state_log[dest_idx];
+ if (dest_state == NULL)
+ dest_nodes = *new_nodes;
+ else
+ {
+ err = re_node_set_init_union (&dest_nodes,
+ dest_state->entrance_nodes, new_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ context = re_string_context_at (&mctx->input, dest_idx - 1,
+ mctx->eflags);
+ mctx->state_log[dest_idx]
+ = re_acquire_state_context (&err, dfa, &dest_nodes, context);
+ if (dest_state != NULL)
+ re_node_set_free (&dest_nodes);
+ if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL
+ && err != REG_NOERROR))
+ return err;
+ }
+ return REG_NOERROR;
+}
+
+static reg_errcode_t
+transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err;
+ Idx i;
+ Idx cur_str_idx = re_string_cur_idx (&mctx->input);
+
+ for (i = 0; i < nodes->nelem; ++i)
+ {
+ Idx dest_str_idx, prev_nelem, bkc_idx;
+ Idx node_idx = nodes->elems[i];
+ unsigned int context;
+ const re_token_t *node = dfa->nodes + node_idx;
+ re_node_set *new_dest_nodes;
+
+ /* Check whether 'node' is a backreference or not. */
+ if (node->type != OP_BACK_REF)
+ continue;
+
+ if (node->constraint)
+ {
+ context = re_string_context_at (&mctx->input, cur_str_idx,
+ mctx->eflags);
+ if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
+ continue;
+ }
+
+ /* 'node' is a backreference.
+ Check the substring which the substring matched. */
+ bkc_idx = mctx->nbkref_ents;
+ err = get_subexp (mctx, node_idx, cur_str_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+
+ /* And add the epsilon closures (which is 'new_dest_nodes') of
+ the backreference to appropriate state_log. */
+ DEBUG_ASSERT (dfa->nexts[node_idx] != -1);
+ for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx)
+ {
+ Idx subexp_len;
+ re_dfastate_t *dest_state;
+ struct re_backref_cache_entry *bkref_ent;
+ bkref_ent = mctx->bkref_ents + bkc_idx;
+ if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx)
+ continue;
+ subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from;
+ new_dest_nodes = (subexp_len == 0
+ ? dfa->eclosures + dfa->edests[node_idx].elems[0]
+ : dfa->eclosures + dfa->nexts[node_idx]);
+ dest_str_idx = (cur_str_idx + bkref_ent->subexp_to
+ - bkref_ent->subexp_from);
+ context = re_string_context_at (&mctx->input, dest_str_idx - 1,
+ mctx->eflags);
+ dest_state = mctx->state_log[dest_str_idx];
+ prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0
+ : mctx->state_log[cur_str_idx]->nodes.nelem);
+ /* Add 'new_dest_node' to state_log. */
+ if (dest_state == NULL)
+ {
+ mctx->state_log[dest_str_idx]
+ = re_acquire_state_context (&err, dfa, new_dest_nodes,
+ context);
+ if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL
+ && err != REG_NOERROR))
+ goto free_return;
+ }
+ else
+ {
+ re_node_set dest_nodes;
+ err = re_node_set_init_union (&dest_nodes,
+ dest_state->entrance_nodes,
+ new_dest_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&dest_nodes);
+ goto free_return;
+ }
+ mctx->state_log[dest_str_idx]
+ = re_acquire_state_context (&err, dfa, &dest_nodes, context);
+ re_node_set_free (&dest_nodes);
+ if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL
+ && err != REG_NOERROR))
+ goto free_return;
+ }
+ /* We need to check recursively if the backreference can epsilon
+ transit. */
+ if (subexp_len == 0
+ && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem)
+ {
+ err = check_subexp_matching_top (mctx, new_dest_nodes,
+ cur_str_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ err = transit_state_bkref (mctx, new_dest_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto free_return;
+ }
+ }
+ }
+ err = REG_NOERROR;
+ free_return:
+ return err;
+}
+
+/* Enumerate all the candidates which the backreference BKREF_NODE can match
+ at BKREF_STR_IDX, and register them by match_ctx_add_entry().
+ Note that we might collect inappropriate candidates here.
+ However, the cost of checking them strictly here is too high, then we
+ delay these checking for prune_impossible_nodes(). */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ Idx subexp_num, sub_top_idx;
+ const char *buf = (const char *) re_string_get_buffer (&mctx->input);
+ /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */
+ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx);
+ if (cache_idx != -1)
+ {
+ const struct re_backref_cache_entry *entry
+ = mctx->bkref_ents + cache_idx;
+ do
+ if (entry->node == bkref_node)
+ return REG_NOERROR; /* We already checked it. */
+ while (entry++->more);
+ }
+
+ subexp_num = dfa->nodes[bkref_node].opr.idx;
+
+ /* For each sub expression */
+ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx)
+ {
+ reg_errcode_t err;
+ re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx];
+ re_sub_match_last_t *sub_last;
+ Idx sub_last_idx, sl_str, bkref_str_off;
+
+ if (dfa->nodes[sub_top->node].opr.idx != subexp_num)
+ continue; /* It isn't related. */
+
+ sl_str = sub_top->str_idx;
+ bkref_str_off = bkref_str_idx;
+ /* At first, check the last node of sub expressions we already
+ evaluated. */
+ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx)
+ {
+ regoff_t sl_str_diff;
+ sub_last = sub_top->lasts[sub_last_idx];
+ sl_str_diff = sub_last->str_idx - sl_str;
+ /* The matched string by the sub expression match with the substring
+ at the back reference? */
+ if (sl_str_diff > 0)
+ {
+ if (__glibc_unlikely (bkref_str_off + sl_str_diff
+ > mctx->input.valid_len))
+ {
+ /* Not enough chars for a successful match. */
+ if (bkref_str_off + sl_str_diff > mctx->input.len)
+ break;
+
+ err = clean_state_log_if_needed (mctx,
+ bkref_str_off
+ + sl_str_diff);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ buf = (const char *) re_string_get_buffer (&mctx->input);
+ }
+ if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0)
+ /* We don't need to search this sub expression any more. */
+ break;
+ }
+ bkref_str_off += sl_str_diff;
+ sl_str += sl_str_diff;
+ err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
+ bkref_str_idx);
+
+ /* Reload buf, since the preceding call might have reallocated
+ the buffer. */
+ buf = (const char *) re_string_get_buffer (&mctx->input);
+
+ if (err == REG_NOMATCH)
+ continue;
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+
+ if (sub_last_idx < sub_top->nlasts)
+ continue;
+ if (sub_last_idx > 0)
+ ++sl_str;
+ /* Then, search for the other last nodes of the sub expression. */
+ for (; sl_str <= bkref_str_idx; ++sl_str)
+ {
+ Idx cls_node;
+ regoff_t sl_str_off;
+ const re_node_set *nodes;
+ sl_str_off = sl_str - sub_top->str_idx;
+ /* The matched string by the sub expression match with the substring
+ at the back reference? */
+ if (sl_str_off > 0)
+ {
+ if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len))
+ {
+ /* If we are at the end of the input, we cannot match. */
+ if (bkref_str_off >= mctx->input.len)
+ break;
+
+ err = extend_buffers (mctx, bkref_str_off + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+
+ buf = (const char *) re_string_get_buffer (&mctx->input);
+ }
+ if (buf [bkref_str_off++] != buf[sl_str - 1])
+ break; /* We don't need to search this sub expression
+ any more. */
+ }
+ if (mctx->state_log[sl_str] == NULL)
+ continue;
+ /* Does this state have a ')' of the sub expression? */
+ nodes = &mctx->state_log[sl_str]->nodes;
+ cls_node = find_subexp_node (dfa, nodes, subexp_num,
+ OP_CLOSE_SUBEXP);
+ if (cls_node == -1)
+ continue; /* No. */
+ if (sub_top->path == NULL)
+ {
+ sub_top->path = calloc (sizeof (state_array_t),
+ sl_str - sub_top->str_idx + 1);
+ if (sub_top->path == NULL)
+ return REG_ESPACE;
+ }
+ /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node
+ in the current context? */
+ err = check_arrival (mctx, sub_top->path, sub_top->node,
+ sub_top->str_idx, cls_node, sl_str,
+ OP_CLOSE_SUBEXP);
+ if (err == REG_NOMATCH)
+ continue;
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str);
+ if (__glibc_unlikely (sub_last == NULL))
+ return REG_ESPACE;
+ err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node,
+ bkref_str_idx);
+ buf = (const char *) re_string_get_buffer (&mctx->input);
+ if (err == REG_NOMATCH)
+ continue;
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ }
+ return REG_NOERROR;
+}
+
+/* Helper functions for get_subexp(). */
+
+/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR.
+ If it can arrive, register the sub expression expressed with SUB_TOP
+ and SUB_LAST. */
+
+static reg_errcode_t
+get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top,
+ re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str)
+{
+ reg_errcode_t err;
+ Idx to_idx;
+ /* Can the subexpression arrive the back reference? */
+ err = check_arrival (mctx, &sub_last->path, sub_last->node,
+ sub_last->str_idx, bkref_node, bkref_str,
+ OP_OPEN_SUBEXP);
+ if (err != REG_NOERROR)
+ return err;
+ err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx,
+ sub_last->str_idx);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx;
+ return clean_state_log_if_needed (mctx, to_idx);
+}
+
+/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX.
+ Search '(' if FL_OPEN, or search ')' otherwise.
+ TODO: This function isn't efficient...
+ Because there might be more than one nodes whose types are
+ OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all
+ nodes.
+ E.g. RE: (a){2} */
+
+static Idx
+find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes,
+ Idx subexp_idx, int type)
+{
+ Idx cls_idx;
+ for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx)
+ {
+ Idx cls_node = nodes->elems[cls_idx];
+ const re_token_t *node = dfa->nodes + cls_node;
+ if (node->type == type
+ && node->opr.idx == subexp_idx)
+ return cls_node;
+ }
+ return -1;
+}
+
+/* Check whether the node TOP_NODE at TOP_STR can arrive to the node
+ LAST_NODE at LAST_STR. We record the path onto PATH since it will be
+ heavily reused.
+ Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot,
+ REG_ESPACE if memory is exhausted. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node,
+ Idx top_str, Idx last_node, Idx last_str, int type)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err = REG_NOERROR;
+ Idx subexp_num, backup_cur_idx, str_idx, null_cnt;
+ re_dfastate_t *cur_state = NULL;
+ re_node_set *cur_nodes, next_nodes;
+ re_dfastate_t **backup_state_log;
+ unsigned int context;
+
+ subexp_num = dfa->nodes[top_node].opr.idx;
+ /* Extend the buffer if we need. */
+ if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1))
+ {
+ re_dfastate_t **new_array;
+ Idx old_alloc = path->alloc;
+ Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1;
+ Idx new_alloc;
+ if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc))
+ return REG_ESPACE;
+ new_alloc = old_alloc + incr_alloc;
+ if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc))
+ return REG_ESPACE;
+ new_array = re_realloc (path->array, re_dfastate_t *, new_alloc);
+ if (__glibc_unlikely (new_array == NULL))
+ return REG_ESPACE;
+ path->array = new_array;
+ path->alloc = new_alloc;
+ memset (new_array + old_alloc, '\0',
+ sizeof (re_dfastate_t *) * (path->alloc - old_alloc));
+ }
+
+ str_idx = path->next_idx ? path->next_idx : top_str;
+
+ /* Temporary modify MCTX. */
+ backup_state_log = mctx->state_log;
+ backup_cur_idx = mctx->input.cur_idx;
+ mctx->state_log = path->array;
+ mctx->input.cur_idx = str_idx;
+
+ /* Setup initial node set. */
+ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
+ if (str_idx == top_str)
+ {
+ err = re_node_set_init_1 (&next_nodes, top_node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ }
+ else
+ {
+ cur_state = mctx->state_log[str_idx];
+ if (cur_state && cur_state->has_backref)
+ {
+ err = re_node_set_init_copy (&next_nodes, &cur_state->nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ else
+ re_node_set_init_empty (&next_nodes);
+ }
+ if (str_idx == top_str || (cur_state && cur_state->has_backref))
+ {
+ if (next_nodes.nelem)
+ {
+ err = expand_bkref_cache (mctx, &next_nodes, str_idx,
+ subexp_num, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ }
+ cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
+ if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ mctx->state_log[str_idx] = cur_state;
+ }
+
+ for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;)
+ {
+ re_node_set_empty (&next_nodes);
+ if (mctx->state_log[str_idx + 1])
+ {
+ err = re_node_set_merge (&next_nodes,
+ &mctx->state_log[str_idx + 1]->nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ }
+ if (cur_state)
+ {
+ err = check_arrival_add_next_nodes (mctx, str_idx,
+ &cur_state->non_eps_nodes,
+ &next_nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ }
+ ++str_idx;
+ if (next_nodes.nelem)
+ {
+ err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ err = expand_bkref_cache (mctx, &next_nodes, str_idx,
+ subexp_num, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ }
+ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags);
+ cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context);
+ if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR))
+ {
+ re_node_set_free (&next_nodes);
+ return err;
+ }
+ mctx->state_log[str_idx] = cur_state;
+ null_cnt = cur_state == NULL ? null_cnt + 1 : 0;
+ }
+ re_node_set_free (&next_nodes);
+ cur_nodes = (mctx->state_log[last_str] == NULL ? NULL
+ : &mctx->state_log[last_str]->nodes);
+ path->next_idx = str_idx;
+
+ /* Fix MCTX. */
+ mctx->state_log = backup_state_log;
+ mctx->input.cur_idx = backup_cur_idx;
+
+ /* Then check the current node set has the node LAST_NODE. */
+ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node))
+ return REG_NOERROR;
+
+ return REG_NOMATCH;
+}
+
+/* Helper functions for check_arrival. */
+
+/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them
+ to NEXT_NODES.
+ TODO: This function is similar to the functions transit_state*(),
+ however this function has many additional works.
+ Can't we unify them? */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx,
+ re_node_set *cur_nodes, re_node_set *next_nodes)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ bool ok;
+ Idx cur_idx;
+ reg_errcode_t err = REG_NOERROR;
+ re_node_set union_set;
+ re_node_set_init_empty (&union_set);
+ for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx)
+ {
+ int naccepted = 0;
+ Idx cur_node = cur_nodes->elems[cur_idx];
+ DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type));
+
+ /* If the node may accept "multi byte". */
+ if (dfa->nodes[cur_node].accept_mb)
+ {
+ naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input,
+ str_idx);
+ if (naccepted > 1)
+ {
+ re_dfastate_t *dest_state;
+ Idx next_node = dfa->nexts[cur_node];
+ Idx next_idx = str_idx + naccepted;
+ dest_state = mctx->state_log[next_idx];
+ re_node_set_empty (&union_set);
+ if (dest_state)
+ {
+ err = re_node_set_merge (&union_set, &dest_state->nodes);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&union_set);
+ return err;
+ }
+ }
+ ok = re_node_set_insert (&union_set, next_node);
+ if (__glibc_unlikely (! ok))
+ {
+ re_node_set_free (&union_set);
+ return REG_ESPACE;
+ }
+ mctx->state_log[next_idx] = re_acquire_state (&err, dfa,
+ &union_set);
+ if (__glibc_unlikely (mctx->state_log[next_idx] == NULL
+ && err != REG_NOERROR))
+ {
+ re_node_set_free (&union_set);
+ return err;
+ }
+ }
+ }
+
+ if (naccepted
+ || check_node_accept (mctx, dfa->nodes + cur_node, str_idx))
+ {
+ ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]);
+ if (__glibc_unlikely (! ok))
+ {
+ re_node_set_free (&union_set);
+ return REG_ESPACE;
+ }
+ }
+ }
+ re_node_set_free (&union_set);
+ return REG_NOERROR;
+}
+
+/* For all the nodes in CUR_NODES, add the epsilon closures of them to
+ CUR_NODES, however exclude the nodes which are:
+ - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN.
+ - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN.
+*/
+
+static reg_errcode_t
+check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes,
+ Idx ex_subexp, int type)
+{
+ reg_errcode_t err;
+ Idx idx, outside_node;
+ re_node_set new_nodes;
+ DEBUG_ASSERT (cur_nodes->nelem);
+ err = re_node_set_alloc (&new_nodes, cur_nodes->nelem);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ /* Create a new node set NEW_NODES with the nodes which are epsilon
+ closures of the node in CUR_NODES. */
+
+ for (idx = 0; idx < cur_nodes->nelem; ++idx)
+ {
+ Idx cur_node = cur_nodes->elems[idx];
+ const re_node_set *eclosure = dfa->eclosures + cur_node;
+ outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type);
+ if (outside_node == -1)
+ {
+ /* There are no problematic nodes, just merge them. */
+ err = re_node_set_merge (&new_nodes, eclosure);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&new_nodes);
+ return err;
+ }
+ }
+ else
+ {
+ /* There are problematic nodes, re-calculate incrementally. */
+ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node,
+ ex_subexp, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ re_node_set_free (&new_nodes);
+ return err;
+ }
+ }
+ }
+ re_node_set_free (cur_nodes);
+ *cur_nodes = new_nodes;
+ return REG_NOERROR;
+}
+
+/* Helper function for check_arrival_expand_ecl.
+ Check incrementally the epsilon closure of TARGET, and if it isn't
+ problematic append it to DST_NODES. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes,
+ Idx target, Idx ex_subexp, int type)
+{
+ Idx cur_node;
+ for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);)
+ {
+ bool ok;
+
+ if (dfa->nodes[cur_node].type == type
+ && dfa->nodes[cur_node].opr.idx == ex_subexp)
+ {
+ if (type == OP_CLOSE_SUBEXP)
+ {
+ ok = re_node_set_insert (dst_nodes, cur_node);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ }
+ break;
+ }
+ ok = re_node_set_insert (dst_nodes, cur_node);
+ if (__glibc_unlikely (! ok))
+ return REG_ESPACE;
+ if (dfa->edests[cur_node].nelem == 0)
+ break;
+ if (dfa->edests[cur_node].nelem == 2)
+ {
+ reg_errcode_t err;
+ err = check_arrival_expand_ecl_sub (dfa, dst_nodes,
+ dfa->edests[cur_node].elems[1],
+ ex_subexp, type);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ cur_node = dfa->edests[cur_node].elems[0];
+ }
+ return REG_NOERROR;
+}
+
+
+/* For all the back references in the current state, calculate the
+ destination of the back references by the appropriate entry
+ in MCTX->BKREF_ENTS. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes,
+ Idx cur_str, Idx subexp_num, int type)
+{
+ const re_dfa_t *const dfa = mctx->dfa;
+ reg_errcode_t err;
+ Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str);
+ struct re_backref_cache_entry *ent;
+
+ if (cache_idx_start == -1)
+ return REG_NOERROR;
+
+ restart:
+ ent = mctx->bkref_ents + cache_idx_start;
+ do
+ {
+ Idx to_idx, next_node;
+
+ /* Is this entry ENT is appropriate? */
+ if (!re_node_set_contains (cur_nodes, ent->node))
+ continue; /* No. */
+
+ to_idx = cur_str + ent->subexp_to - ent->subexp_from;
+ /* Calculate the destination of the back reference, and append it
+ to MCTX->STATE_LOG. */
+ if (to_idx == cur_str)
+ {
+ /* The backreference did epsilon transit, we must re-check all the
+ node in the current state. */
+ re_node_set new_dests;
+ reg_errcode_t err2, err3;
+ next_node = dfa->edests[ent->node].elems[0];
+ if (re_node_set_contains (cur_nodes, next_node))
+ continue;
+ err = re_node_set_init_1 (&new_dests, next_node);
+ err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type);
+ err3 = re_node_set_merge (cur_nodes, &new_dests);
+ re_node_set_free (&new_dests);
+ if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR
+ || err3 != REG_NOERROR))
+ {
+ err = (err != REG_NOERROR ? err
+ : (err2 != REG_NOERROR ? err2 : err3));
+ return err;
+ }
+ /* TODO: It is still inefficient... */
+ goto restart;
+ }
+ else
+ {
+ re_node_set union_set;
+ next_node = dfa->nexts[ent->node];
+ if (mctx->state_log[to_idx])
+ {
+ bool ok;
+ if (re_node_set_contains (&mctx->state_log[to_idx]->nodes,
+ next_node))
+ continue;
+ err = re_node_set_init_copy (&union_set,
+ &mctx->state_log[to_idx]->nodes);
+ ok = re_node_set_insert (&union_set, next_node);
+ if (__glibc_unlikely (err != REG_NOERROR || ! ok))
+ {
+ re_node_set_free (&union_set);
+ err = err != REG_NOERROR ? err : REG_ESPACE;
+ return err;
+ }
+ }
+ else
+ {
+ err = re_node_set_init_1 (&union_set, next_node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ return err;
+ }
+ mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set);
+ re_node_set_free (&union_set);
+ if (__glibc_unlikely (mctx->state_log[to_idx] == NULL
+ && err != REG_NOERROR))
+ return err;
+ }
+ }
+ while (ent++->more);
+ return REG_NOERROR;
+}
+
+/* Build transition table for the state.
+ Return true if successful. */
+
+static bool __attribute_noinline__
+build_trtable (const re_dfa_t *dfa, re_dfastate_t *state)
+{
+ reg_errcode_t err;
+ Idx i, j;
+ int ch;
+ bool need_word_trtable = false;
+ bitset_word_t elem, mask;
+ Idx ndests; /* Number of the destination states from 'state'. */
+ re_dfastate_t **trtable;
+ re_dfastate_t *dest_states[SBC_MAX];
+ re_dfastate_t *dest_states_word[SBC_MAX];
+ re_dfastate_t *dest_states_nl[SBC_MAX];
+ re_node_set follows;
+ bitset_t acceptable;
+
+ /* We build DFA states which corresponds to the destination nodes
+ from 'state'. 'dests_node[i]' represents the nodes which i-th
+ destination state contains, and 'dests_ch[i]' represents the
+ characters which i-th destination state accepts. */
+ re_node_set dests_node[SBC_MAX];
+ bitset_t dests_ch[SBC_MAX];
+
+ /* Initialize transition table. */
+ state->word_trtable = state->trtable = NULL;
+
+ /* At first, group all nodes belonging to 'state' into several
+ destinations. */
+ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch);
+ if (__glibc_unlikely (ndests <= 0))
+ {
+ /* Return false in case of an error, true otherwise. */
+ if (ndests == 0)
+ {
+ state->trtable = (re_dfastate_t **)
+ calloc (sizeof (re_dfastate_t *), SBC_MAX);
+ if (__glibc_unlikely (state->trtable == NULL))
+ return false;
+ return true;
+ }
+ return false;
+ }
+
+ err = re_node_set_alloc (&follows, ndests + 1);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ {
+ out_free:
+ re_node_set_free (&follows);
+ for (i = 0; i < ndests; ++i)
+ re_node_set_free (dests_node + i);
+ return false;
+ }
+
+ bitset_empty (acceptable);
+
+ /* Then build the states for all destinations. */
+ for (i = 0; i < ndests; ++i)
+ {
+ Idx next_node;
+ re_node_set_empty (&follows);
+ /* Merge the follows of this destination states. */
+ for (j = 0; j < dests_node[i].nelem; ++j)
+ {
+ next_node = dfa->nexts[dests_node[i].elems[j]];
+ if (next_node != -1)
+ {
+ err = re_node_set_merge (&follows, dfa->eclosures + next_node);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto out_free;
+ }
+ }
+ dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0);
+ if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR))
+ goto out_free;
+ /* If the new state has context constraint,
+ build appropriate states for these contexts. */
+ if (dest_states[i]->has_constraint)
+ {
+ dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows,
+ CONTEXT_WORD);
+ if (__glibc_unlikely (dest_states_word[i] == NULL
+ && err != REG_NOERROR))
+ goto out_free;
+
+ if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1)
+ need_word_trtable = true;
+
+ dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows,
+ CONTEXT_NEWLINE);
+ if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR))
+ goto out_free;
+ }
+ else
+ {
+ dest_states_word[i] = dest_states[i];
+ dest_states_nl[i] = dest_states[i];
+ }
+ bitset_merge (acceptable, dests_ch[i]);
+ }
+
+ if (!__glibc_unlikely (need_word_trtable))
+ {
+ /* We don't care about whether the following character is a word
+ character, or we are in a single-byte character set so we can
+ discern by looking at the character code: allocate a
+ 256-entry transition table. */
+ trtable = state->trtable =
+ (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX);
+ if (__glibc_unlikely (trtable == NULL))
+ goto out_free;
+
+ /* For all characters ch...: */
+ for (i = 0; i < BITSET_WORDS; ++i)
+ for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
+ elem;
+ mask <<= 1, elem >>= 1, ++ch)
+ if (__glibc_unlikely (elem & 1))
+ {
+ /* There must be exactly one destination which accepts
+ character ch. See group_nodes_into_DFAstates. */
+ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
+ ;
+
+ /* j-th destination accepts the word character ch. */
+ if (dfa->word_char[i] & mask)
+ trtable[ch] = dest_states_word[j];
+ else
+ trtable[ch] = dest_states[j];
+ }
+ }
+ else
+ {
+ /* We care about whether the following character is a word
+ character, and we are in a multi-byte character set: discern
+ by looking at the character code: build two 256-entry
+ transition tables, one starting at trtable[0] and one
+ starting at trtable[SBC_MAX]. */
+ trtable = state->word_trtable =
+ (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX);
+ if (__glibc_unlikely (trtable == NULL))
+ goto out_free;
+
+ /* For all characters ch...: */
+ for (i = 0; i < BITSET_WORDS; ++i)
+ for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1;
+ elem;
+ mask <<= 1, elem >>= 1, ++ch)
+ if (__glibc_unlikely (elem & 1))
+ {
+ /* There must be exactly one destination which accepts
+ character ch. See group_nodes_into_DFAstates. */
+ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j)
+ ;
+
+ /* j-th destination accepts the word character ch. */
+ trtable[ch] = dest_states[j];
+ trtable[ch + SBC_MAX] = dest_states_word[j];
+ }
+ }
+
+ /* new line */
+ if (bitset_contain (acceptable, NEWLINE_CHAR))
+ {
+ /* The current state accepts newline character. */
+ for (j = 0; j < ndests; ++j)
+ if (bitset_contain (dests_ch[j], NEWLINE_CHAR))
+ {
+ /* k-th destination accepts newline character. */
+ trtable[NEWLINE_CHAR] = dest_states_nl[j];
+ if (need_word_trtable)
+ trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j];
+ /* There must be only one destination which accepts
+ newline. See group_nodes_into_DFAstates. */
+ break;
+ }
+ }
+
+ re_node_set_free (&follows);
+ for (i = 0; i < ndests; ++i)
+ re_node_set_free (dests_node + i);
+ return true;
+}
+
+/* Group all nodes belonging to STATE into several destinations.
+ Then for all destinations, set the nodes belonging to the destination
+ to DESTS_NODE[i] and set the characters accepted by the destination
+ to DEST_CH[i]. Return the number of destinations if successful,
+ -1 on internal error. */
+
+static Idx
+group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state,
+ re_node_set *dests_node, bitset_t *dests_ch)
+{
+ reg_errcode_t err;
+ bool ok;
+ Idx i, j, k;
+ Idx ndests; /* Number of the destinations from 'state'. */
+ bitset_t accepts; /* Characters a node can accept. */
+ const re_node_set *cur_nodes = &state->nodes;
+ bitset_empty (accepts);
+ ndests = 0;
+
+ /* For all the nodes belonging to 'state', */
+ for (i = 0; i < cur_nodes->nelem; ++i)
+ {
+ re_token_t *node = &dfa->nodes[cur_nodes->elems[i]];
+ re_token_type_t type = node->type;
+ unsigned int constraint = node->constraint;
+
+ /* Enumerate all single byte character this node can accept. */
+ if (type == CHARACTER)
+ bitset_set (accepts, node->opr.c);
+ else if (type == SIMPLE_BRACKET)
+ {
+ bitset_merge (accepts, node->opr.sbcset);
+ }
+ else if (type == OP_PERIOD)
+ {
+ if (dfa->mb_cur_max > 1)
+ bitset_merge (accepts, dfa->sb_char);
+ else
+ bitset_set_all (accepts);
+ if (!(dfa->syntax & RE_DOT_NEWLINE))
+ bitset_clear (accepts, '\n');
+ if (dfa->syntax & RE_DOT_NOT_NULL)
+ bitset_clear (accepts, '\0');
+ }
+ else if (type == OP_UTF8_PERIOD)
+ {
+ if (ASCII_CHARS % BITSET_WORD_BITS == 0)
+ memset (accepts, -1, ASCII_CHARS / CHAR_BIT);
+ else
+ bitset_merge (accepts, utf8_sb_map);
+ if (!(dfa->syntax & RE_DOT_NEWLINE))
+ bitset_clear (accepts, '\n');
+ if (dfa->syntax & RE_DOT_NOT_NULL)
+ bitset_clear (accepts, '\0');
+ }
+ else
+ continue;
+
+ /* Check the 'accepts' and sift the characters which are not
+ match it the context. */
+ if (constraint)
+ {
+ if (constraint & NEXT_NEWLINE_CONSTRAINT)
+ {
+ bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR);
+ bitset_empty (accepts);
+ if (accepts_newline)
+ bitset_set (accepts, NEWLINE_CHAR);
+ else
+ continue;
+ }
+ if (constraint & NEXT_ENDBUF_CONSTRAINT)
+ {
+ bitset_empty (accepts);
+ continue;
+ }
+
+ if (constraint & NEXT_WORD_CONSTRAINT)
+ {
+ bitset_word_t any_set = 0;
+ if (type == CHARACTER && !node->word_char)
+ {
+ bitset_empty (accepts);
+ continue;
+ }
+ if (dfa->mb_cur_max > 1)
+ for (j = 0; j < BITSET_WORDS; ++j)
+ any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j]));
+ else
+ for (j = 0; j < BITSET_WORDS; ++j)
+ any_set |= (accepts[j] &= dfa->word_char[j]);
+ if (!any_set)
+ continue;
+ }
+ if (constraint & NEXT_NOTWORD_CONSTRAINT)
+ {
+ bitset_word_t any_set = 0;
+ if (type == CHARACTER && node->word_char)
+ {
+ bitset_empty (accepts);
+ continue;
+ }
+ if (dfa->mb_cur_max > 1)
+ for (j = 0; j < BITSET_WORDS; ++j)
+ any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j]));
+ else
+ for (j = 0; j < BITSET_WORDS; ++j)
+ any_set |= (accepts[j] &= ~dfa->word_char[j]);
+ if (!any_set)
+ continue;
+ }
+ }
+
+ /* Then divide 'accepts' into DFA states, or create a new
+ state. Above, we make sure that accepts is not empty. */
+ for (j = 0; j < ndests; ++j)
+ {
+ bitset_t intersec; /* Intersection sets, see below. */
+ bitset_t remains;
+ /* Flags, see below. */
+ bitset_word_t has_intersec, not_subset, not_consumed;
+
+ /* Optimization, skip if this state doesn't accept the character. */
+ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c))
+ continue;
+
+ /* Enumerate the intersection set of this state and 'accepts'. */
+ has_intersec = 0;
+ for (k = 0; k < BITSET_WORDS; ++k)
+ has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k];
+ /* And skip if the intersection set is empty. */
+ if (!has_intersec)
+ continue;
+
+ /* Then check if this state is a subset of 'accepts'. */
+ not_subset = not_consumed = 0;
+ for (k = 0; k < BITSET_WORDS; ++k)
+ {
+ not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k];
+ not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k];
+ }
+
+ /* If this state isn't a subset of 'accepts', create a
+ new group state, which has the 'remains'. */
+ if (not_subset)
+ {
+ bitset_copy (dests_ch[ndests], remains);
+ bitset_copy (dests_ch[j], intersec);
+ err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto error_return;
+ ++ndests;
+ }
+
+ /* Put the position in the current group. */
+ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]);
+ if (__glibc_unlikely (! ok))
+ goto error_return;
+
+ /* If all characters are consumed, go to next node. */
+ if (!not_consumed)
+ break;
+ }
+ /* Some characters remain, create a new group. */
+ if (j == ndests)
+ {
+ bitset_copy (dests_ch[ndests], accepts);
+ err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]);
+ if (__glibc_unlikely (err != REG_NOERROR))
+ goto error_return;
+ ++ndests;
+ bitset_empty (accepts);
+ }
+ }
+ assume (ndests <= SBC_MAX);
+ return ndests;
+ error_return:
+ for (j = 0; j < ndests; ++j)
+ re_node_set_free (dests_node + j);
+ return -1;
+}
+
+/* Check how many bytes the node 'dfa->nodes[node_idx]' accepts.
+ Return the number of the bytes the node accepts.
+ STR_IDX is the current index of the input string.
+
+ This function handles the nodes which can accept one character, or
+ one collating element like '.', '[a-z]', opposite to the other nodes
+ can only accept one byte. */
+
+#ifdef _LIBC
+# include <locale/weight.h>
+#endif
+
+static int
+check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx,
+ const re_string_t *input, Idx str_idx)
+{
+ const re_token_t *node = dfa->nodes + node_idx;
+ int char_len, elem_len;
+ Idx i;
+
+ if (__glibc_unlikely (node->type == OP_UTF8_PERIOD))
+ {
+ unsigned char c = re_string_byte_at (input, str_idx), d;
+ if (__glibc_likely (c < 0xc2))
+ return 0;
+
+ if (str_idx + 2 > input->len)
+ return 0;
+
+ d = re_string_byte_at (input, str_idx + 1);
+ if (c < 0xe0)
+ return (d < 0x80 || d > 0xbf) ? 0 : 2;
+ else if (c < 0xf0)
+ {
+ char_len = 3;
+ if (c == 0xe0 && d < 0xa0)
+ return 0;
+ }
+ else if (c < 0xf8)
+ {
+ char_len = 4;
+ if (c == 0xf0 && d < 0x90)
+ return 0;
+ }
+ else if (c < 0xfc)
+ {
+ char_len = 5;
+ if (c == 0xf8 && d < 0x88)
+ return 0;
+ }
+ else if (c < 0xfe)
+ {
+ char_len = 6;
+ if (c == 0xfc && d < 0x84)
+ return 0;
+ }
+ else
+ return 0;
+
+ if (str_idx + char_len > input->len)
+ return 0;
+
+ for (i = 1; i < char_len; ++i)
+ {
+ d = re_string_byte_at (input, str_idx + i);
+ if (d < 0x80 || d > 0xbf)
+ return 0;
+ }
+ return char_len;
+ }
+
+ char_len = re_string_char_size_at (input, str_idx);
+ if (node->type == OP_PERIOD)
+ {
+ if (char_len <= 1)
+ return 0;
+ /* FIXME: I don't think this if is needed, as both '\n'
+ and '\0' are char_len == 1. */
+ /* '.' accepts any one character except the following two cases. */
+ if ((!(dfa->syntax & RE_DOT_NEWLINE)
+ && re_string_byte_at (input, str_idx) == '\n')
+ || ((dfa->syntax & RE_DOT_NOT_NULL)
+ && re_string_byte_at (input, str_idx) == '\0'))
+ return 0;
+ return char_len;
+ }
+
+ elem_len = re_string_elem_size_at (input, str_idx);
+ if ((elem_len <= 1 && char_len <= 1) || char_len == 0)
+ return 0;
+
+ if (node->type == COMPLEX_BRACKET)
+ {
+ const re_charset_t *cset = node->opr.mbcset;
+#ifdef _LIBC
+ const unsigned char *pin
+ = ((const unsigned char *) re_string_get_buffer (input) + str_idx);
+ Idx j;
+ uint32_t nrules;
+#endif
+ int match_len = 0;
+ wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars)
+ ? re_string_wchar_at (input, str_idx) : 0);
+
+ /* match with multibyte character? */
+ for (i = 0; i < cset->nmbchars; ++i)
+ if (wc == cset->mbchars[i])
+ {
+ match_len = char_len;
+ goto check_node_accept_bytes_match;
+ }
+ /* match with character_class? */
+ for (i = 0; i < cset->nchar_classes; ++i)
+ {
+ wctype_t wt = cset->char_classes[i];
+ if (__iswctype (wc, wt))
+ {
+ match_len = char_len;
+ goto check_node_accept_bytes_match;
+ }
+ }
+
+#ifdef _LIBC
+ nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+ if (nrules != 0)
+ {
+ unsigned int in_collseq = 0;
+ const int32_t *table, *indirect;
+ const unsigned char *weights, *extra;
+ const char *collseqwc;
+
+ /* match with collating_symbol? */
+ if (cset->ncoll_syms)
+ extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+ for (i = 0; i < cset->ncoll_syms; ++i)
+ {
+ const unsigned char *coll_sym = extra + cset->coll_syms[i];
+ /* Compare the length of input collating element and
+ the length of current collating element. */
+ if (*coll_sym != elem_len)
+ continue;
+ /* Compare each bytes. */
+ for (j = 0; j < *coll_sym; j++)
+ if (pin[j] != coll_sym[1 + j])
+ break;
+ if (j == *coll_sym)
+ {
+ /* Match if every bytes is equal. */
+ match_len = j;
+ goto check_node_accept_bytes_match;
+ }
+ }
+
+ if (cset->nranges)
+ {
+ if (elem_len <= char_len)
+ {
+ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC);
+ in_collseq = __collseq_table_lookup (collseqwc, wc);
+ }
+ else
+ in_collseq = find_collation_sequence_value (pin, elem_len);
+ }
+ /* match with range expression? */
+ /* FIXME: Implement rational ranges here, too. */
+ for (i = 0; i < cset->nranges; ++i)
+ if (cset->range_starts[i] <= in_collseq
+ && in_collseq <= cset->range_ends[i])
+ {
+ match_len = elem_len;
+ goto check_node_accept_bytes_match;
+ }
+
+ /* match with equivalence_class? */
+ if (cset->nequiv_classes)
+ {
+ const unsigned char *cp = pin;
+ table = (const int32_t *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+ weights = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
+ extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+ indirect = (const int32_t *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+ int32_t idx = findidx (table, indirect, extra, &cp, elem_len);
+ int32_t rule = idx >> 24;
+ idx &= 0xffffff;
+ if (idx > 0)
+ {
+ size_t weight_len = weights[idx];
+ for (i = 0; i < cset->nequiv_classes; ++i)
+ {
+ int32_t equiv_class_idx = cset->equiv_classes[i];
+ int32_t equiv_class_rule = equiv_class_idx >> 24;
+ equiv_class_idx &= 0xffffff;
+ if (weights[equiv_class_idx] == weight_len
+ && equiv_class_rule == rule
+ && memcmp (weights + idx + 1,
+ weights + equiv_class_idx + 1,
+ weight_len) == 0)
+ {
+ match_len = elem_len;
+ goto check_node_accept_bytes_match;
+ }
+ }
+ }
+ }
+ }
+ else
+#endif /* _LIBC */
+ {
+ /* match with range expression? */
+ for (i = 0; i < cset->nranges; ++i)
+ {
+ if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i])
+ {
+ match_len = char_len;
+ goto check_node_accept_bytes_match;
+ }
+ }
+ }
+ check_node_accept_bytes_match:
+ if (!cset->non_match)
+ return match_len;
+ else
+ {
+ if (match_len > 0)
+ return 0;
+ else
+ return (elem_len > char_len) ? elem_len : char_len;
+ }
+ }
+ return 0;
+}
+
+#ifdef _LIBC
+static unsigned int
+find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len)
+{
+ uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
+ if (nrules == 0)
+ {
+ if (mbs_len == 1)
+ {
+ /* No valid character. Match it as a single byte character. */
+ const unsigned char *collseq = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
+ return collseq[mbs[0]];
+ }
+ return UINT_MAX;
+ }
+ else
+ {
+ int32_t idx;
+ const unsigned char *extra = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
+ int32_t extrasize = (const unsigned char *)
+ _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra;
+
+ for (idx = 0; idx < extrasize;)
+ {
+ int mbs_cnt;
+ bool found = false;
+ int32_t elem_mbs_len;
+ /* Skip the name of collating element name. */
+ idx = idx + extra[idx] + 1;
+ elem_mbs_len = extra[idx++];
+ if (mbs_len == elem_mbs_len)
+ {
+ for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt)
+ if (extra[idx + mbs_cnt] != mbs[mbs_cnt])
+ break;
+ if (mbs_cnt == elem_mbs_len)
+ /* Found the entry. */
+ found = true;
+ }
+ /* Skip the byte sequence of the collating element. */
+ idx += elem_mbs_len;
+ /* Adjust for the alignment. */
+ idx = (idx + 3) & ~3;
+ /* Skip the collation sequence value. */
+ idx += sizeof (uint32_t);
+ /* Skip the wide char sequence of the collating element. */
+ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1);
+ /* If we found the entry, return the sequence value. */
+ if (found)
+ return *(uint32_t *) (extra + idx);
+ /* Skip the collation sequence value. */
+ idx += sizeof (uint32_t);
+ }
+ return UINT_MAX;
+ }
+}
+#endif /* _LIBC */
+
+/* Check whether the node accepts the byte which is IDX-th
+ byte of the INPUT. */
+
+static bool
+check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
+ Idx idx)
+{
+ unsigned char ch;
+ ch = re_string_byte_at (&mctx->input, idx);
+ switch (node->type)
+ {
+ case CHARACTER:
+ if (node->opr.c != ch)
+ return false;
+ break;
+
+ case SIMPLE_BRACKET:
+ if (!bitset_contain (node->opr.sbcset, ch))
+ return false;
+ break;
+
+ case OP_UTF8_PERIOD:
+ if (ch >= ASCII_CHARS)
+ return false;
+ FALLTHROUGH;
+ case OP_PERIOD:
+ if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE))
+ || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL)))
+ return false;
+ break;
+
+ default:
+ return false;
+ }
+
+ if (node->constraint)
+ {
+ /* The node has constraints. Check whether the current context
+ satisfies the constraints. */
+ unsigned int context = re_string_context_at (&mctx->input, idx,
+ mctx->eflags);
+ if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context))
+ return false;
+ }
+
+ return true;
+}
+
+/* Extend the buffers, if the buffers have run out. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+extend_buffers (re_match_context_t *mctx, int min_len)
+{
+ reg_errcode_t ret;
+ re_string_t *pstr = &mctx->input;
+
+ /* Avoid overflow. */
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2
+ <= pstr->bufs_len))
+ return REG_ESPACE;
+
+ /* Double the lengths of the buffers, but allocate at least MIN_LEN. */
+ ret = re_string_realloc_buffers (pstr,
+ MAX (min_len,
+ MIN (pstr->len, pstr->bufs_len * 2)));
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+
+ if (mctx->state_log != NULL)
+ {
+ /* And double the length of state_log. */
+ /* XXX We have no indication of the size of this buffer. If this
+ allocation fail we have no indication that the state_log array
+ does not have the right size. */
+ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *,
+ pstr->bufs_len + 1);
+ if (__glibc_unlikely (new_array == NULL))
+ return REG_ESPACE;
+ mctx->state_log = new_array;
+ }
+
+ /* Then reconstruct the buffers. */
+ if (pstr->icase)
+ {
+ if (pstr->mb_cur_max > 1)
+ {
+ ret = build_wcs_upper_buffer (pstr);
+ if (__glibc_unlikely (ret != REG_NOERROR))
+ return ret;
+ }
+ else
+ build_upper_buffer (pstr);
+ }
+ else
+ {
+ if (pstr->mb_cur_max > 1)
+ build_wcs_buffer (pstr);
+ else
+ {
+ if (pstr->trans != NULL)
+ re_string_translate_buffer (pstr);
+ }
+ }
+ return REG_NOERROR;
+}
+
+
+/* Functions for matching context. */
+
+/* Initialize MCTX. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+match_ctx_init (re_match_context_t *mctx, int eflags, Idx n)
+{
+ mctx->eflags = eflags;
+ mctx->match_last = -1;
+ if (n > 0)
+ {
+ /* Avoid overflow. */
+ size_t max_object_size =
+ MAX (sizeof (struct re_backref_cache_entry),
+ sizeof (re_sub_match_top_t *));
+ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n))
+ return REG_ESPACE;
+
+ mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n);
+ mctx->sub_tops = re_malloc (re_sub_match_top_t *, n);
+ if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL))
+ return REG_ESPACE;
+ }
+ /* Already zero-ed by the caller.
+ else
+ mctx->bkref_ents = NULL;
+ mctx->nbkref_ents = 0;
+ mctx->nsub_tops = 0; */
+ mctx->abkref_ents = n;
+ mctx->max_mb_elem_len = 1;
+ mctx->asub_tops = n;
+ return REG_NOERROR;
+}
+
+/* Clean the entries which depend on the current input in MCTX.
+ This function must be invoked when the matcher changes the start index
+ of the input, or changes the input string. */
+
+static void
+match_ctx_clean (re_match_context_t *mctx)
+{
+ Idx st_idx;
+ for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx)
+ {
+ Idx sl_idx;
+ re_sub_match_top_t *top = mctx->sub_tops[st_idx];
+ for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx)
+ {
+ re_sub_match_last_t *last = top->lasts[sl_idx];
+ re_free (last->path.array);
+ re_free (last);
+ }
+ re_free (top->lasts);
+ if (top->path)
+ {
+ re_free (top->path->array);
+ re_free (top->path);
+ }
+ re_free (top);
+ }
+
+ mctx->nsub_tops = 0;
+ mctx->nbkref_ents = 0;
+}
+
+/* Free all the memory associated with MCTX. */
+
+static void
+match_ctx_free (re_match_context_t *mctx)
+{
+ /* First, free all the memory associated with MCTX->SUB_TOPS. */
+ match_ctx_clean (mctx);
+ re_free (mctx->sub_tops);
+ re_free (mctx->bkref_ents);
+}
+
+/* Add a new backreference entry to MCTX.
+ Note that we assume that caller never call this function with duplicate
+ entry, and call with STR_IDX which isn't smaller than any existing entry.
+*/
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from,
+ Idx to)
+{
+ if (mctx->nbkref_ents >= mctx->abkref_ents)
+ {
+ struct re_backref_cache_entry* new_entry;
+ new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry,
+ mctx->abkref_ents * 2);
+ if (__glibc_unlikely (new_entry == NULL))
+ {
+ re_free (mctx->bkref_ents);
+ return REG_ESPACE;
+ }
+ mctx->bkref_ents = new_entry;
+ memset (mctx->bkref_ents + mctx->nbkref_ents, '\0',
+ sizeof (struct re_backref_cache_entry) * mctx->abkref_ents);
+ mctx->abkref_ents *= 2;
+ }
+ if (mctx->nbkref_ents > 0
+ && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx)
+ mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1;
+
+ mctx->bkref_ents[mctx->nbkref_ents].node = node;
+ mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx;
+ mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from;
+ mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to;
+
+ /* This is a cache that saves negative results of check_dst_limits_calc_pos.
+ If bit N is clear, means that this entry won't epsilon-transition to
+ an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If
+ it is set, check_dst_limits_calc_pos_1 will recurse and try to find one
+ such node.
+
+ A backreference does not epsilon-transition unless it is empty, so set
+ to all zeros if FROM != TO. */
+ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map
+ = (from == to ? -1 : 0);
+
+ mctx->bkref_ents[mctx->nbkref_ents++].more = 0;
+ if (mctx->max_mb_elem_len < to - from)
+ mctx->max_mb_elem_len = to - from;
+ return REG_NOERROR;
+}
+
+/* Return the first entry with the same str_idx, or -1 if none is
+ found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */
+
+static Idx
+search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx)
+{
+ Idx left, right, mid, last;
+ last = right = mctx->nbkref_ents;
+ for (left = 0; left < right;)
+ {
+ mid = (left + right) / 2;
+ if (mctx->bkref_ents[mid].str_idx < str_idx)
+ left = mid + 1;
+ else
+ right = mid;
+ }
+ if (left < last && mctx->bkref_ents[left].str_idx == str_idx)
+ return left;
+ else
+ return -1;
+}
+
+/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches
+ at STR_IDX. */
+
+static reg_errcode_t
+__attribute_warn_unused_result__
+match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx)
+{
+ DEBUG_ASSERT (mctx->sub_tops != NULL);
+ DEBUG_ASSERT (mctx->asub_tops > 0);
+ if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops))
+ {
+ Idx new_asub_tops = mctx->asub_tops * 2;
+ re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops,
+ re_sub_match_top_t *,
+ new_asub_tops);
+ if (__glibc_unlikely (new_array == NULL))
+ return REG_ESPACE;
+ mctx->sub_tops = new_array;
+ mctx->asub_tops = new_asub_tops;
+ }
+ mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t));
+ if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL))
+ return REG_ESPACE;
+ mctx->sub_tops[mctx->nsub_tops]->node = node;
+ mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx;
+ return REG_NOERROR;
+}
+
+/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches
+ at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP.
+ Return the new entry if successful, NULL if memory is exhausted. */
+
+static re_sub_match_last_t *
+match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx)
+{
+ re_sub_match_last_t *new_entry;
+ if (__glibc_unlikely (subtop->nlasts == subtop->alasts))
+ {
+ Idx new_alasts = 2 * subtop->alasts + 1;
+ re_sub_match_last_t **new_array = re_realloc (subtop->lasts,
+ re_sub_match_last_t *,
+ new_alasts);
+ if (__glibc_unlikely (new_array == NULL))
+ return NULL;
+ subtop->lasts = new_array;
+ subtop->alasts = new_alasts;
+ }
+ new_entry = calloc (1, sizeof (re_sub_match_last_t));
+ if (__glibc_likely (new_entry != NULL))
+ {
+ subtop->lasts[subtop->nlasts] = new_entry;
+ new_entry->node = node;
+ new_entry->str_idx = str_idx;
+ ++subtop->nlasts;
+ }
+ return new_entry;
+}
+
+static void
+sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts,
+ re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx)
+{
+ sctx->sifted_states = sifted_sts;
+ sctx->limited_states = limited_sts;
+ sctx->last_node = last_node;
+ sctx->last_str_idx = last_str_idx;
+ re_node_set_init_empty (&sctx->limits);
+}
diff --git a/lib/rpmatch.c b/lib/rpmatch.c
new file mode 100644
index 0000000..a07c9b9
--- /dev/null
+++ b/lib/rpmatch.c
@@ -0,0 +1,175 @@
+/* Determine whether string value is affirmation or negative response
+ according to current locale's data.
+
+ Copyright (C) 1996, 1998, 2000, 2002-2003, 2006-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdlib.h>
+
+#include <stddef.h>
+
+#if ENABLE_NLS
+# include <sys/types.h>
+# include <limits.h>
+# include <string.h>
+# if HAVE_LANGINFO_YESEXPR
+# include <langinfo.h>
+# endif
+# include <regex.h>
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+# define N_(msgid) gettext_noop (msgid)
+
+# if HAVE_LANGINFO_YESEXPR
+/* Return the localized regular expression pattern corresponding to
+ ENGLISH_PATTERN. NL_INDEX can be used with nl_langinfo.
+ The resulting string may only be used until the next nl_langinfo call. */
+static const char *
+localized_pattern (const char *english_pattern, nl_item nl_index,
+ bool posixly_correct)
+{
+ const char *translated_pattern;
+
+ /* We prefer to get the patterns from a PO file. It would be possible to
+ always use nl_langinfo (YESEXPR) instead of _("^[yY]"), and
+ nl_langinfo (NOEXPR) instead of _("^[nN]"), if we could assume that the
+ system's locale support is good. But this is not the case e.g. on Cygwin.
+ The localizations of gnulib.pot are of better quality in general.
+ Also, if we use locale info from non-free systems that don't have a
+ 'localedef' command, we deprive the users of the freedom to localize
+ this pattern for their preferred language.
+ But some programs, such as 'cp', 'mv', 'rm', 'find', 'xargs', are
+ specified by POSIX to use nl_langinfo (YESEXPR). We implement this
+ behaviour if POSIXLY_CORRECT is set, for the sake of these programs. */
+
+ /* If the user wants strict POSIX compliance, use nl_langinfo. */
+ if (posixly_correct)
+ {
+ translated_pattern = nl_langinfo (nl_index);
+ /* Check against a broken system return value. */
+ if (translated_pattern != NULL && translated_pattern[0] != '\0')
+ return translated_pattern;
+ }
+
+ /* Look in the gnulib message catalog. */
+ translated_pattern = _(english_pattern);
+ if (translated_pattern == english_pattern)
+ {
+ /* The gnulib message catalog provides no translation.
+ Try the system's message catalog. */
+ translated_pattern = nl_langinfo (nl_index);
+ /* Check against a broken system return value. */
+ if (translated_pattern != NULL && translated_pattern[0] != '\0')
+ return translated_pattern;
+ /* Fall back to English. */
+ translated_pattern = english_pattern;
+ }
+ return translated_pattern;
+}
+# else
+# define localized_pattern(english_pattern,nl_index,posixly_correct) \
+ _(english_pattern)
+# endif
+
+static int
+try (const char *response, const char *pattern, char **lastp, regex_t *re)
+{
+ if (*lastp == NULL || strcmp (pattern, *lastp) != 0)
+ {
+ char *safe_pattern;
+
+ /* The pattern has changed. */
+ if (*lastp != NULL)
+ {
+ /* Free the old compiled pattern. */
+ regfree (re);
+ free (*lastp);
+ *lastp = NULL;
+ }
+ /* Put the PATTERN into safe memory before calling regcomp.
+ (regcomp may call nl_langinfo, overwriting PATTERN's storage. */
+ safe_pattern = strdup (pattern);
+ if (safe_pattern == NULL)
+ return -1;
+ /* Compile the pattern and cache it for future runs. */
+ if (regcomp (re, safe_pattern, REG_EXTENDED) != 0)
+ {
+ free (safe_pattern);
+ return -1;
+ }
+ *lastp = safe_pattern;
+ }
+
+ /* See if the regular expression matches RESPONSE. */
+ return regexec (re, response, 0, NULL, 0) == 0;
+}
+#endif
+
+
+int
+rpmatch (const char *response)
+{
+#if ENABLE_NLS
+ /* Match against one of the response patterns, compiling the pattern
+ first if necessary. */
+
+ /* We cache the response patterns and compiled regexps here. */
+ static char *last_yesexpr, *last_noexpr;
+ static regex_t cached_yesre, cached_nore;
+
+# if HAVE_LANGINFO_YESEXPR
+ bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
+# endif
+
+ const char *yesexpr, *noexpr;
+ int result;
+
+ /* TRANSLATORS: A regular expression testing for an affirmative answer
+ (english: "yes"). Testing the first character may be sufficient.
+ Take care to consider upper and lower case.
+ To enquire the regular expression that your system uses for this
+ purpose, you can use the command
+ locale -k LC_MESSAGES | grep '^yesexpr=' */
+ yesexpr = localized_pattern (N_("^[yY]"), YESEXPR, posixly_correct);
+ result = try (response, yesexpr, &last_yesexpr, &cached_yesre);
+ if (result < 0)
+ return -1;
+ if (result)
+ return 1;
+
+ /* TRANSLATORS: A regular expression testing for a negative answer
+ (english: "no"). Testing the first character may be sufficient.
+ Take care to consider upper and lower case.
+ To enquire the regular expression that your system uses for this
+ purpose, you can use the command
+ locale -k LC_MESSAGES | grep '^noexpr=' */
+ noexpr = localized_pattern (N_("^[nN]"), NOEXPR, posixly_correct);
+ result = try (response, noexpr, &last_noexpr, &cached_nore);
+ if (result < 0)
+ return -1;
+ if (result)
+ return 0;
+
+ return -1;
+#else
+ /* Test against "^[yY]" and "^[nN]", hardcoded to avoid requiring regex */
+ return (*response == 'y' || *response == 'Y' ? 1
+ : *response == 'n' || *response == 'N' ? 0 : -1);
+#endif
+}
diff --git a/lib/safe-read.c b/lib/safe-read.c
new file mode 100644
index 0000000..7f6dc09
--- /dev/null
+++ b/lib/safe-read.c
@@ -0,0 +1,71 @@
+/* An interface to read and write that retries after interrupts.
+
+ Copyright (C) 1993-1994, 1998, 2002-2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#ifdef SAFE_WRITE
+# include "safe-write.h"
+#else
+# include "safe-read.h"
+#endif
+
+/* Get ssize_t. */
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <errno.h>
+
+#ifdef EINTR
+# define IS_EINTR(x) ((x) == EINTR)
+#else
+# define IS_EINTR(x) 0
+#endif
+
+#include "sys-limits.h"
+
+#ifdef SAFE_WRITE
+# define safe_rw safe_write
+# define rw write
+#else
+# define safe_rw safe_read
+# define rw read
+# undef const
+# define const /* empty */
+#endif
+
+/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if
+ interrupted. Return the actual number of bytes read(written), zero for EOF,
+ or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error. */
+size_t
+safe_rw (int fd, void const *buf, size_t count)
+{
+ for (;;)
+ {
+ ssize_t result = rw (fd, buf, count);
+
+ if (0 <= result)
+ return result;
+ else if (IS_EINTR (errno))
+ continue;
+ else if (errno == EINVAL && SYS_BUFSIZE_MAX < count)
+ count = SYS_BUFSIZE_MAX;
+ else
+ return result;
+ }
+}
diff --git a/lib/safe-read.h b/lib/safe-read.h
new file mode 100644
index 0000000..d087447
--- /dev/null
+++ b/lib/safe-read.h
@@ -0,0 +1,47 @@
+/* An interface to read() that retries after interrupts.
+ Copyright (C) 2002, 2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Some system calls may be interrupted and fail with errno = EINTR in the
+ following situations:
+ - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user
+ types Ctrl-Z) on some platforms: Mac OS X.
+ - The process receives a signal for which a signal handler was installed
+ with sigaction() with an sa_flags field that does not contain
+ SA_RESTART.
+ - The process receives a signal for which a signal handler was installed
+ with signal() and for which no call to siginterrupt(sig,0) was done,
+ on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris.
+
+ This module provides a wrapper around read() that handles EINTR. */
+
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define SAFE_READ_ERROR ((size_t) -1)
+
+/* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted.
+ Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR
+ upon error. */
+extern size_t safe_read (int fd, void *buf, size_t count);
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/lib/scratch_buffer.h b/lib/scratch_buffer.h
new file mode 100644
index 0000000..4cf60d2
--- /dev/null
+++ b/lib/scratch_buffer.h
@@ -0,0 +1,117 @@
+/* Variable-sized buffer with on-stack default allocation.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert, 2017. */
+
+#ifndef _GL_SCRATCH_BUFFER_H
+#define _GL_SCRATCH_BUFFER_H
+
+/* Scratch buffers with a default stack allocation and fallback to
+ heap allocation. It is expected that this function is used in this
+ way:
+
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ return -1;
+
+ scratch_buffer_free (&tmpbuf);
+ return 0;
+
+ The allocation functions (scratch_buffer_grow,
+ scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make
+ sure that the heap allocation, if any, is freed, so that the code
+ above does not have a memory leak. The buffer still remains in a
+ state that can be deallocated using scratch_buffer_free, so a loop
+ like this is valid as well:
+
+ struct scratch_buffer tmpbuf;
+ scratch_buffer_init (&tmpbuf);
+
+ while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length))
+ if (!scratch_buffer_grow (&tmpbuf))
+ break;
+
+ scratch_buffer_free (&tmpbuf);
+
+ scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed
+ to grow the buffer by at least 512 bytes. This means that when
+ using the scratch buffer as a backing store for a non-character
+ array whose element size, in bytes, is 512 or smaller, the scratch
+ buffer only has to grow once to make room for at least one more
+ element.
+*/
+
+/* Scratch buffer. Must be initialized with scratch_buffer_init
+ before its use. */
+struct scratch_buffer;
+
+/* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space
+ and BUFFER->length reflects the available space. */
+#if 0
+extern void scratch_buffer_init (struct scratch_buffer *buffer);
+#endif
+
+/* Deallocates *BUFFER (if it was heap-allocated). */
+#if 0
+extern void scratch_buffer_free (struct scratch_buffer *buffer);
+#endif
+
+/* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT
+ preserved. Return true on success, false on allocation failure (in
+ which case the old buffer is freed). On success, the new buffer is
+ larger than the previous size. On failure, *BUFFER is deallocated,
+ but remains in a free-able state, and errno is set. */
+#if 0
+extern bool scratch_buffer_grow (struct scratch_buffer *buffer);
+#endif
+
+/* Like scratch_buffer_grow, but preserve the old buffer
+ contents on success, as a prefix of the new buffer. */
+#if 0
+extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer);
+#endif
+
+/* Grow *BUFFER so that it can store at least NELEM elements of SIZE
+ bytes. The buffer contents are NOT preserved. Both NELEM and SIZE
+ can be zero. Return true on success, false on allocation failure
+ (in which case the old buffer is freed, but *BUFFER remains in a
+ free-able state, and errno is set). It is unspecified whether this
+ function can reduce the array size. */
+#if 0
+extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer,
+ size_t nelem, size_t size);
+#endif
+
+
+/* The implementation is imported from glibc. */
+
+/* Avoid possible conflicts with symbols exported by the GNU libc. */
+#define __libc_scratch_buffer_grow gl_scratch_buffer_grow
+#define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve
+#define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size
+
+#ifndef _GL_LIKELY
+/* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */
+# define _GL_LIKELY(cond) __builtin_expect ((cond), 1)
+# define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0)
+#endif
+
+#include <malloc/scratch_buffer.gl.h>
+
+#endif /* _GL_SCRATCH_BUFFER_H */
diff --git a/lib/setlocale-lock.c b/lib/setlocale-lock.c
new file mode 100644
index 0000000..b70ba09
--- /dev/null
+++ b/lib/setlocale-lock.c
@@ -0,0 +1,150 @@
+/* Return the internal lock used by setlocale_null_r.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
+
+#include <config.h>
+
+/* When it is known that the gl_get_setlocale_null_lock function is defined
+ by a dependency library, it should not be defined here. */
+#if OMIT_SETLOCALE_LOCK
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
+
+#else
+
+/* This file defines the internal lock used by setlocale_null_r.
+ It is a separate compilation unit, so that only one copy of it is
+ present when linking statically. */
+
+/* Prohibit renaming this symbol. */
+# undef gl_get_setlocale_null_lock
+
+/* Macro for exporting a symbol (function, not variable) defined in this file,
+ when compiled into a shared library. */
+# ifndef DLL_EXPORTED
+# if HAVE_VISIBILITY
+ /* Override the effect of the compiler option '-fvisibility=hidden'. */
+# define DLL_EXPORTED __attribute__((__visibility__("default")))
+# elif defined _WIN32 || defined __CYGWIN__
+# define DLL_EXPORTED __declspec(dllexport)
+# else
+# define DLL_EXPORTED
+# endif
+# endif
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# include "windows-initguard.h"
+
+/* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *',
+ because the latter is not guaranteed to be a stable ABI in the future. */
+
+/* Make sure the function gets exported from DLLs. */
+DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void);
+
+static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
+static CRITICAL_SECTION lock;
+
+/* Returns the internal lock used by setlocale_null_r. */
+CRITICAL_SECTION *
+gl_get_setlocale_null_lock (void)
+{
+ if (!guard.done)
+ {
+ if (InterlockedIncrement (&guard.started) == 0)
+ {
+ /* This thread is the first one to need the lock. Initialize it. */
+ InitializeCriticalSection (&lock);
+ guard.done = 1;
+ }
+ else
+ {
+ /* Don't let guard.started grow and wrap around. */
+ InterlockedDecrement (&guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this mutex. */
+ while (!guard.done)
+ Sleep (0);
+ }
+ }
+ return &lock;
+}
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+
+static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void);
+
+/* Returns the internal lock used by setlocale_null_r. */
+pthread_mutex_t *
+gl_get_setlocale_null_lock (void)
+{
+ return &mutex;
+}
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+# include <stdlib.h>
+
+static int volatile init_needed = 1;
+static once_flag init_once = ONCE_FLAG_INIT;
+static mtx_t mutex;
+
+static void
+atomic_init (void)
+{
+ if (mtx_init (&mutex, mtx_plain) != thrd_success)
+ abort ();
+ init_needed = 0;
+}
+
+/* Make sure the function gets exported from shared libraries. */
+DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void);
+
+/* Returns the internal lock used by setlocale_null_r. */
+mtx_t *
+gl_get_setlocale_null_lock (void)
+{
+ if (init_needed)
+ call_once (&init_once, atomic_init);
+ return &mutex;
+}
+
+# endif
+
+# if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER
+/* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause
+ a link failure when no DLLs are involved. */
+# if defined _WIN64 || defined _LP64
+# define IMP(x) __imp_##x
+# else
+# define IMP(x) _imp__##x
+# endif
+void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock;
+# endif
+
+#endif
diff --git a/lib/setlocale_null.c b/lib/setlocale_null.c
new file mode 100644
index 0000000..89c8a06
--- /dev/null
+++ b/lib/setlocale_null.c
@@ -0,0 +1,411 @@
+/* Query the name of the current global locale.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
+
+#include <config.h>
+
+/* Specification. */
+#include "setlocale_null.h"
+
+#include <errno.h>
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#if defined _WIN32 && !defined __CYGWIN__
+# include <wchar.h>
+#endif
+
+#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE)
+# if defined _WIN32 && !defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# elif HAVE_PTHREAD_API
+
+# include <pthread.h>
+# if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS
+# include <threads.h>
+# pragma weak thrd_exit
+# define c11_threads_in_use() (thrd_exit != NULL)
+# else
+# define c11_threads_in_use() 0
+# endif
+
+# elif HAVE_THREADS_H
+
+# include <threads.h>
+
+# endif
+#endif
+
+/* Use the system's setlocale() function, not the gnulib override, here. */
+#undef setlocale
+
+static const char *
+setlocale_null_androidfix (int category)
+{
+ const char *result = setlocale (category, NULL);
+
+#ifdef __ANDROID__
+ if (result == NULL)
+ switch (category)
+ {
+ case LC_CTYPE:
+ case LC_NUMERIC:
+ case LC_TIME:
+ case LC_COLLATE:
+ case LC_MONETARY:
+ case LC_MESSAGES:
+ case LC_ALL:
+ case LC_PAPER:
+ case LC_NAME:
+ case LC_ADDRESS:
+ case LC_TELEPHONE:
+ case LC_MEASUREMENT:
+ result = "C";
+ break;
+ default:
+ break;
+ }
+#endif
+
+ return result;
+}
+
+static int
+setlocale_null_unlocked (int category, char *buf, size_t bufsize)
+{
+#if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER
+ /* On native Windows, nowadays, the setlocale() implementation is based
+ on _wsetlocale() and uses malloc() for the result. We are better off
+ using _wsetlocale() directly. */
+ const wchar_t *result = _wsetlocale (category, NULL);
+
+ if (result == NULL)
+ {
+ /* CATEGORY is invalid. */
+ if (bufsize > 0)
+ /* Return an empty string in BUF.
+ This is a convenience for callers that don't want to write explicit
+ code for handling EINVAL. */
+ buf[0] = '\0';
+ return EINVAL;
+ }
+ else
+ {
+ size_t length = wcslen (result);
+ if (length < bufsize)
+ {
+ size_t i;
+
+ /* Convert wchar_t[] -> char[], assuming plain ASCII. */
+ for (i = 0; i <= length; i++)
+ buf[i] = result[i];
+
+ return 0;
+ }
+ else
+ {
+ if (bufsize > 0)
+ {
+ /* Return a truncated result in BUF.
+ This is a convenience for callers that don't want to write
+ explicit code for handling ERANGE. */
+ size_t i;
+
+ /* Convert wchar_t[] -> char[], assuming plain ASCII. */
+ for (i = 0; i < bufsize; i++)
+ buf[i] = result[i];
+ buf[bufsize - 1] = '\0';
+ }
+ return ERANGE;
+ }
+ }
+#else
+ const char *result = setlocale_null_androidfix (category);
+
+ if (result == NULL)
+ {
+ /* CATEGORY is invalid. */
+ if (bufsize > 0)
+ /* Return an empty string in BUF.
+ This is a convenience for callers that don't want to write explicit
+ code for handling EINVAL. */
+ buf[0] = '\0';
+ return EINVAL;
+ }
+ else
+ {
+ size_t length = strlen (result);
+ if (length < bufsize)
+ {
+ memcpy (buf, result, length + 1);
+ return 0;
+ }
+ else
+ {
+ if (bufsize > 0)
+ {
+ /* Return a truncated result in BUF.
+ This is a convenience for callers that don't want to write
+ explicit code for handling ERANGE. */
+ memcpy (buf, result, bufsize - 1);
+ buf[bufsize - 1] = '\0';
+ }
+ return ERANGE;
+ }
+ }
+#endif
+}
+
+#if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */
+
+/* Use a lock, so that no two threads can invoke setlocale_null_unlocked
+ at the same time. */
+
+/* Prohibit renaming this symbol. */
+# undef gl_get_setlocale_null_lock
+
+# if defined _WIN32 && !defined __CYGWIN__
+
+extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void);
+
+static int
+setlocale_null_with_lock (int category, char *buf, size_t bufsize)
+{
+ CRITICAL_SECTION *lock = gl_get_setlocale_null_lock ();
+ int ret;
+
+ EnterCriticalSection (lock);
+ ret = setlocale_null_unlocked (category, buf, bufsize);
+ LeaveCriticalSection (lock);
+
+ return ret;
+}
+
+# elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */
+
+extern
+# if defined _WIN32 || defined __CYGWIN__
+ __declspec(dllimport)
+# endif
+ pthread_mutex_t *gl_get_setlocale_null_lock (void);
+
+# if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */
+
+ /* Avoid the need to link with '-lpthread'. */
+# pragma weak pthread_mutex_lock
+# pragma weak pthread_mutex_unlock
+
+ /* Determine whether libpthread is in use. */
+# pragma weak pthread_mutexattr_gettype
+ /* See the comments in lock.h. */
+# define pthread_in_use() \
+ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ())
+
+# else
+# define pthread_in_use() 1
+# endif
+
+static int
+setlocale_null_with_lock (int category, char *buf, size_t bufsize)
+{
+ if (pthread_in_use())
+ {
+ pthread_mutex_t *lock = gl_get_setlocale_null_lock ();
+ int ret;
+
+ if (pthread_mutex_lock (lock))
+ abort ();
+ ret = setlocale_null_unlocked (category, buf, bufsize);
+ if (pthread_mutex_unlock (lock))
+ abort ();
+
+ return ret;
+ }
+ else
+ return setlocale_null_unlocked (category, buf, bufsize);
+}
+
+# elif HAVE_THREADS_H
+
+extern mtx_t *gl_get_setlocale_null_lock (void);
+
+static int
+setlocale_null_with_lock (int category, char *buf, size_t bufsize)
+{
+ mtx_t *lock = gl_get_setlocale_null_lock ();
+ int ret;
+
+ if (mtx_lock (lock) != thrd_success)
+ abort ();
+ ret = setlocale_null_unlocked (category, buf, bufsize);
+ if (mtx_unlock (lock) != thrd_success)
+ abort ();
+
+ return ret;
+}
+
+# endif
+
+#endif
+
+int
+setlocale_null_r (int category, char *buf, size_t bufsize)
+{
+#if SETLOCALE_NULL_ALL_MTSAFE
+# if SETLOCALE_NULL_ONE_MTSAFE
+
+ return setlocale_null_unlocked (category, buf, bufsize);
+
+# else
+
+ if (category == LC_ALL)
+ return setlocale_null_unlocked (category, buf, bufsize);
+ else
+ return setlocale_null_with_lock (category, buf, bufsize);
+
+# endif
+#else
+# if SETLOCALE_NULL_ONE_MTSAFE
+
+ if (category == LC_ALL)
+ return setlocale_null_with_lock (category, buf, bufsize);
+ else
+ return setlocale_null_unlocked (category, buf, bufsize);
+
+# else
+
+ return setlocale_null_with_lock (category, buf, bufsize);
+
+# endif
+#endif
+}
+
+const char *
+setlocale_null (int category)
+{
+#if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE
+ return setlocale_null_androidfix (category);
+#else
+
+ /* This call must be multithread-safe. To achieve this without using
+ thread-local storage:
+ 1. We use a specific static buffer for each possible CATEGORY
+ argument. So that different threads can call setlocale_mtsafe
+ with different CATEGORY arguments, without interfering.
+ 2. We use a simple strcpy or memcpy to fill this static buffer.
+ Filling it through, for example, strcpy + strcat would not be
+ guaranteed to leave the buffer's contents intact if another thread
+ is currently accessing it. If necessary, the contents is first
+ assembled in a stack-allocated buffer. */
+ if (category == LC_ALL)
+ {
+# if SETLOCALE_NULL_ALL_MTSAFE
+ return setlocale_null_androidfix (LC_ALL);
+# else
+ char buf[SETLOCALE_NULL_ALL_MAX];
+ static char resultbuf[SETLOCALE_NULL_ALL_MAX];
+
+ if (setlocale_null_r (LC_ALL, buf, sizeof (buf)))
+ return "C";
+ strcpy (resultbuf, buf);
+ return resultbuf;
+# endif
+ }
+ else
+ {
+# if SETLOCALE_NULL_ONE_MTSAFE
+ return setlocale_null_androidfix (category);
+# else
+ enum
+ {
+ LC_CTYPE_INDEX,
+ LC_NUMERIC_INDEX,
+ LC_TIME_INDEX,
+ LC_COLLATE_INDEX,
+ LC_MONETARY_INDEX,
+ LC_MESSAGES_INDEX,
+# ifdef LC_PAPER
+ LC_PAPER_INDEX,
+# endif
+# ifdef LC_NAME
+ LC_NAME_INDEX,
+# endif
+# ifdef LC_ADDRESS
+ LC_ADDRESS_INDEX,
+# endif
+# ifdef LC_TELEPHONE
+ LC_TELEPHONE_INDEX,
+# endif
+# ifdef LC_MEASUREMENT
+ LC_MEASUREMENT_INDEX,
+# endif
+# ifdef LC_IDENTIFICATION
+ LC_IDENTIFICATION_INDEX,
+# endif
+ LC_INDICES_COUNT
+ }
+ i;
+ char buf[SETLOCALE_NULL_MAX];
+ static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX];
+ int err;
+
+ err = setlocale_null_r (category, buf, sizeof (buf));
+ if (err == EINVAL)
+ return NULL;
+ if (err)
+ return "C";
+
+ switch (category)
+ {
+ case LC_CTYPE: i = LC_CTYPE_INDEX; break;
+ case LC_NUMERIC: i = LC_NUMERIC_INDEX; break;
+ case LC_TIME: i = LC_TIME_INDEX; break;
+ case LC_COLLATE: i = LC_COLLATE_INDEX; break;
+ case LC_MONETARY: i = LC_MONETARY_INDEX; break;
+ case LC_MESSAGES: i = LC_MESSAGES_INDEX; break;
+# ifdef LC_PAPER
+ case LC_PAPER: i = LC_PAPER_INDEX; break;
+# endif
+# ifdef LC_NAME
+ case LC_NAME: i = LC_NAME_INDEX; break;
+# endif
+# ifdef LC_ADDRESS
+ case LC_ADDRESS: i = LC_ADDRESS_INDEX; break;
+# endif
+# ifdef LC_TELEPHONE
+ case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break;
+# endif
+# ifdef LC_MEASUREMENT
+ case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break;
+# endif
+# ifdef LC_IDENTIFICATION
+ case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break;
+# endif
+ default:
+ /* If you get here, a #ifdef LC_xxx is missing. */
+ abort ();
+ }
+
+ strcpy (resultbuf[i], buf);
+ return resultbuf[i];
+# endif
+ }
+#endif
+}
diff --git a/lib/setlocale_null.h b/lib/setlocale_null.h
new file mode 100644
index 0000000..c740fa0
--- /dev/null
+++ b/lib/setlocale_null.h
@@ -0,0 +1,82 @@
+/* Query the name of the current global locale.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019. */
+
+#ifndef _SETLOCALE_NULL_H
+#define _SETLOCALE_NULL_H
+
+#include <stddef.h>
+
+#include "arg-nonnull.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Recommended size of a buffer for a locale name for a single category.
+ On glibc systems, you can have locale names that are relative file names;
+ assume a maximum length 256.
+ In native Windows, in 2018 the longest locale name was of length 58
+ ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */
+#define SETLOCALE_NULL_MAX (256+1)
+
+/* Recommended size of a buffer for a locale name with all categories.
+ On glibc systems, you can have locale names that are relative file names;
+ assume maximum length 256 for each. There are 12 categories; so, the
+ maximum total length is 148+12*256.
+ In native Windows, there are 5 categories, and the maximum total length is
+ 55+5*58. */
+#define SETLOCALE_NULL_ALL_MAX (148+12*256+1)
+
+/* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL),
+ except that
+ - it is guaranteed to be multithread-safe,
+ - it returns the resulting locale category name or locale name in the
+ user-supplied buffer BUF, which must be BUFSIZE bytes long.
+ The recommended minimum buffer size is
+ - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and
+ - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL.
+ The return value is an error code: 0 if the call is successful, EINVAL if
+ CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed
+ size (including the trailing NUL byte). In the latter case, a truncated
+ result is returned in BUF, but still NUL-terminated if BUFSIZE > 0.
+ For this call to be multithread-safe, *all* calls to
+ setlocale (CATEGORY, NULL) in all other threads must have been converted
+ to use setlocale_null_r or setlocale_null as well, and the other threads
+ must not make other setlocale invocations (since changing the global locale
+ has side effects on all threads). */
+extern int setlocale_null_r (int category, char *buf, size_t bufsize)
+ _GL_ARG_NONNULL ((2));
+
+/* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that
+ it is guaranteed to be multithread-safe.
+ The return value is NULL if CATEGORY is invalid.
+ For this call to be multithread-safe, *all* calls to
+ setlocale (CATEGORY, NULL) in all other threads must have been converted
+ to use setlocale_null_r or setlocale_null as well, and the other threads
+ must not make other setlocale invocations (since changing the global locale
+ has side effects on all threads). */
+extern const char *setlocale_null (int category);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SETLOCALE_NULL_H */
diff --git a/lib/sleep.c b/lib/sleep.c
new file mode 100644
index 0000000..37c1213
--- /dev/null
+++ b/lib/sleep.c
@@ -0,0 +1,74 @@
+/* Pausing execution of the current thread.
+ Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <limits.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+unsigned int
+sleep (unsigned int seconds)
+{
+ unsigned int remaining;
+
+ /* Sleep for 1 second many times, because
+ 1. Sleep is not interruptible by Ctrl-C,
+ 2. we want to avoid arithmetic overflow while multiplying with 1000. */
+ for (remaining = seconds; remaining > 0; remaining--)
+ Sleep (1000);
+
+ return remaining;
+}
+
+#elif HAVE_SLEEP
+
+# undef sleep
+
+/* Guarantee unlimited sleep and a reasonable return value. Cygwin
+ 1.5.x rejects attempts to sleep more than 49.7 days (2**32
+ milliseconds), but uses uninitialized memory which results in a
+ garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too
+ small return value when asked to sleep more than 24.85 days. */
+unsigned int
+rpl_sleep (unsigned int seconds)
+{
+ /* This requires int larger than 16 bits. */
+ static_assert (UINT_MAX / 24 / 24 / 60 / 60);
+ const unsigned int limit = 24 * 24 * 60 * 60;
+ while (limit < seconds)
+ {
+ unsigned int result;
+ seconds -= limit;
+ result = sleep (limit);
+ if (result)
+ return seconds + result;
+ }
+ return sleep (seconds);
+}
+
+#else /* !HAVE_SLEEP */
+
+ #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib."
+
+#endif
diff --git a/lib/stat-time.c b/lib/stat-time.c
new file mode 100644
index 0000000..bc28223
--- /dev/null
+++ b/lib/stat-time.c
@@ -0,0 +1,21 @@
+/* stat-related time functions.
+
+ Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE
+#include "stat-time.h"
diff --git a/lib/stat-time.h b/lib/stat-time.h
new file mode 100644
index 0000000..92aa1e6
--- /dev/null
+++ b/lib/stat-time.h
@@ -0,0 +1,251 @@
+/* stat-related time functions.
+
+ Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert. */
+
+#ifndef STAT_TIME_H
+#define STAT_TIME_H 1
+
+#include <errno.h>
+#include <stdckdint.h>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_STAT_TIME_INLINE
+# define _GL_STAT_TIME_INLINE _GL_INLINE
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type
+ struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST,
+ ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST,
+ if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim
+ for access, status change, data modification, or birth (creation)
+ time respectively.
+
+ These macros are private to stat-time.h. */
+#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC
+# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim)
+# else
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)
+# endif
+#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC
+# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)
+#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC
+# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec)
+#endif
+
+/* Return the nanosecond component of *ST's access time. */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_atime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_atim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_atim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's status change time. */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_ctime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_ctim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_ctim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's data modification time. */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_mtime_ns (struct stat const *st)
+{
+# if defined STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_mtim).tv_nsec;
+# elif defined STAT_TIMESPEC_NS
+ return STAT_TIMESPEC_NS (st, st_mtim);
+# else
+ return 0;
+# endif
+}
+
+/* Return the nanosecond component of *ST's birth time. */
+_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE
+get_stat_birthtime_ns (_GL_UNUSED struct stat const *st)
+{
+# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC
+ return STAT_TIMESPEC (st, st_birthtim).tv_nsec;
+# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+ return STAT_TIMESPEC_NS (st, st_birthtim);
+# else
+ return 0;
+# endif
+}
+
+/* Return *ST's access time. */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_atime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_atim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_atime;
+ t.tv_nsec = get_stat_atime_ns (st);
+ return t;
+#endif
+}
+
+/* Return *ST's status change time. */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_ctime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_ctim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_ctime;
+ t.tv_nsec = get_stat_ctime_ns (st);
+ return t;
+#endif
+}
+
+/* Return *ST's data modification time. */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_mtime (struct stat const *st)
+{
+#ifdef STAT_TIMESPEC
+ return STAT_TIMESPEC (st, st_mtim);
+#else
+ struct timespec t;
+ t.tv_sec = st->st_mtime;
+ t.tv_nsec = get_stat_mtime_ns (st);
+ return t;
+#endif
+}
+
+/* Return *ST's birth time, if available; otherwise return a value
+ with tv_sec and tv_nsec both equal to -1. */
+_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE
+get_stat_birthtime (_GL_UNUSED struct stat const *st)
+{
+ struct timespec t;
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)
+ t = STAT_TIMESPEC (st, st_birthtim);
+#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC
+ t.tv_sec = st->st_birthtime;
+ t.tv_nsec = st->st_birthtimensec;
+#elif defined _WIN32 && ! defined __CYGWIN__
+ /* Native Windows platforms (but not Cygwin) put the "file creation
+ time" in st_ctime (!). See
+ <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */
+# if _GL_WINDOWS_STAT_TIMESPEC
+ t = st->st_ctim;
+# else
+ t.tv_sec = st->st_ctime;
+ t.tv_nsec = 0;
+# endif
+#else
+ /* Birth time is not supported. */
+ t.tv_sec = -1;
+ t.tv_nsec = -1;
+#endif
+
+#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \
+ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC)
+ /* FreeBSD and NetBSD sometimes signal the absence of knowledge by
+ using zero. Attempt to work around this problem. Alas, this can
+ report failure even for valid timestamps. Also, NetBSD
+ sometimes returns junk in the birth time fields; work around this
+ bug if it is detected. */
+ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000))
+ {
+ t.tv_sec = -1;
+ t.tv_nsec = -1;
+ }
+#endif
+
+ return t;
+}
+
+/* If a stat-like function returned RESULT, normalize the timestamps
+ in *ST, in case this platform suffers from the Solaris 11 bug where
+ tv_nsec might be negative. Return the adjusted RESULT, setting
+ errno to EOVERFLOW if normalization overflowed. This function
+ is intended to be private to this .h file. */
+_GL_STAT_TIME_INLINE int
+stat_time_normalize (int result, _GL_UNUSED struct stat *st)
+{
+#if defined __sun && defined STAT_TIMESPEC
+ if (result == 0)
+ {
+ long int timespec_hz = 1000000000;
+ short int const ts_off[] = { offsetof (struct stat, st_atim),
+ offsetof (struct stat, st_mtim),
+ offsetof (struct stat, st_ctim) };
+ int i;
+ for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++)
+ {
+ struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]);
+ long int q = ts->tv_nsec / timespec_hz;
+ long int r = ts->tv_nsec % timespec_hz;
+ if (r < 0)
+ {
+ r += timespec_hz;
+ q--;
+ }
+ ts->tv_nsec = r;
+ /* Overflow is possible, as Solaris 11 stat can yield
+ tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000.
+ INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */
+ if (ckd_add (&ts->tv_sec, q, ts->tv_sec))
+ {
+ errno = EOVERFLOW;
+ return -1;
+ }
+ }
+ }
+#endif
+ return result;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif
diff --git a/lib/stat-w32.c b/lib/stat-w32.c
new file mode 100644
index 0000000..2f01197
--- /dev/null
+++ b/lib/stat-w32.c
@@ -0,0 +1,460 @@
+/* Core of implementation of fstat and stat for native Windows.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible. */
+
+#include <config.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+
+/* Attempt to make <windows.h> define FILE_ID_INFO.
+ But ensure that the redefinition of _WIN32_WINNT does not make us assume
+ Windows Vista or newer when building for an older version of Windows. */
+#if HAVE_SDKDDKVER_H
+# include <sdkddkver.h>
+# if _WIN32_WINNT >= _WIN32_WINNT_VISTA
+# define WIN32_ASSUME_VISTA 1
+# else
+# define WIN32_ASSUME_VISTA 0
+# endif
+# if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8)
+# undef _WIN32_WINNT
+# define _WIN32_WINNT _WIN32_WINNT_WIN8
+# endif
+#else
+# define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include <unistd.h>
+#include <windows.h>
+
+/* Specification. */
+#include "stat-w32.h"
+
+#include "pathmax.h"
+
+/* Don't assume that UNICODE is not defined. */
+#undef LoadLibrary
+#define LoadLibrary LoadLibraryA
+#undef GetFinalPathNameByHandle
+#define GetFinalPathNameByHandle GetFinalPathNameByHandleA
+
+/* Older mingw headers do not define VOLUME_NAME_NONE. */
+#ifndef VOLUME_NAME_NONE
+# define VOLUME_NAME_NONE 4
+#endif
+
+#if !WIN32_ASSUME_VISTA
+
+/* Avoid warnings from gcc -Wcast-function-type. */
+# define GetProcAddress \
+ (void *) GetProcAddress
+
+# if _GL_WINDOWS_STAT_INODES == 2
+/* GetFileInformationByHandleEx was introduced only in Windows Vista. */
+typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile,
+ FILE_INFO_BY_HANDLE_CLASS fiClass,
+ LPVOID lpBuffer,
+ DWORD dwBufferSize);
+static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL;
+# endif
+/* GetFinalPathNameByHandle was introduced only in Windows Vista. */
+typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile,
+ LPSTR lpFilePath,
+ DWORD lenFilePath,
+ DWORD dwFlags);
+static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL;
+static BOOL initialized = FALSE;
+
+static void
+initialize (void)
+{
+ HMODULE kernel32 = LoadLibrary ("kernel32.dll");
+ if (kernel32 != NULL)
+ {
+# if _GL_WINDOWS_STAT_INODES == 2
+ GetFileInformationByHandleExFunc =
+ (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx");
+# endif
+ GetFinalPathNameByHandleFunc =
+ (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA");
+ }
+ initialized = TRUE;
+}
+
+#else
+
+# define GetFileInformationByHandleExFunc GetFileInformationByHandleEx
+# define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle
+
+#endif
+
+/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */
+#if _GL_WINDOWS_STAT_TIMESPEC
+struct timespec
+_gl_convert_FILETIME_to_timespec (const FILETIME *ft)
+{
+ struct timespec result;
+ /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */
+ unsigned long long since_1601 =
+ ((unsigned long long) ft->dwHighDateTime << 32)
+ | (unsigned long long) ft->dwLowDateTime;
+ if (since_1601 == 0)
+ {
+ result.tv_sec = 0;
+ result.tv_nsec = 0;
+ }
+ else
+ {
+ /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
+ leap years, in total 134774 days. */
+ unsigned long long since_1970 =
+ since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
+ result.tv_sec = since_1970 / (unsigned long long) 10000000;
+ result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100;
+ }
+ return result;
+}
+#else
+time_t
+_gl_convert_FILETIME_to_POSIX (const FILETIME *ft)
+{
+ /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */
+ unsigned long long since_1601 =
+ ((unsigned long long) ft->dwHighDateTime << 32)
+ | (unsigned long long) ft->dwLowDateTime;
+ if (since_1601 == 0)
+ return 0;
+ else
+ {
+ /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89
+ leap years, in total 134774 days. */
+ unsigned long long since_1970 =
+ since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000;
+ return since_1970 / (unsigned long long) 10000000;
+ }
+}
+#endif
+
+/* Fill *BUF with information about the file designated by H.
+ PATH is the file name, if known, otherwise NULL.
+ Return 0 if successful, or -1 with errno set upon failure. */
+int
+_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf)
+{
+ /* GetFileType
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */
+ DWORD type = GetFileType (h);
+ if (type == FILE_TYPE_DISK)
+ {
+#if !WIN32_ASSUME_VISTA
+ if (!initialized)
+ initialize ();
+#endif
+
+ /* st_mode can be determined through
+ GetFileAttributesEx
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+ or through
+ GetFileInformationByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+ or through
+ GetFileInformationByHandleEx with argument FileBasicInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info>
+ The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
+ BY_HANDLE_FILE_INFORMATION info;
+ if (! GetFileInformationByHandle (h, &info))
+ goto failed;
+
+ /* Test for error conditions before starting to fill *buf. */
+ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
+ {
+ errno = EOVERFLOW;
+ return -1;
+ }
+
+#if _GL_WINDOWS_STAT_INODES
+ /* st_ino can be determined through
+ GetFileInformationByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+ as 64 bits, or through
+ GetFileInformationByHandleEx with argument FileIdInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info>
+ as 128 bits.
+ The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */
+ /* Experiments show that GetFileInformationByHandleEx does not provide
+ much more information than GetFileInformationByHandle:
+ * The dwVolumeSerialNumber from GetFileInformationByHandle is equal
+ to the low 32 bits of the 64-bit VolumeSerialNumber from
+ GetFileInformationByHandleEx, and is apparently sufficient for
+ identifying the device.
+ * The nFileIndex from GetFileInformationByHandle is equal to the low
+ 64 bits of the 128-bit FileId from GetFileInformationByHandleEx,
+ and the high 64 bits of this 128-bit FileId are zero.
+ * On a FAT file system, GetFileInformationByHandleEx fails with error
+ ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle
+ succeeds.
+ * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with
+ error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle
+ succeeds. */
+# if _GL_WINDOWS_STAT_INODES == 2
+ if (GetFileInformationByHandleExFunc != NULL)
+ {
+ FILE_ID_INFO id;
+ if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id)))
+ {
+ buf->st_dev = id.VolumeSerialNumber;
+ static_assert (sizeof (ino_t) == sizeof (id.FileId));
+ memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t));
+ goto ino_done;
+ }
+ else
+ {
+ switch (GetLastError ())
+ {
+ case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */
+ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */
+ goto fallback;
+ default:
+ goto failed;
+ }
+ }
+ }
+ fallback: ;
+ /* Fallback for older Windows versions. */
+ buf->st_dev = info.dwVolumeSerialNumber;
+ buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
+ buf->st_ino._gl_ino[1] = 0;
+ ino_done: ;
+# else /* _GL_WINDOWS_STAT_INODES == 1 */
+ buf->st_dev = info.dwVolumeSerialNumber;
+ buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow;
+# endif
+#else
+ /* st_ino is not wide enough for identifying a file on a device.
+ Without st_ino, st_dev is pointless. */
+ buf->st_dev = 0;
+ buf->st_ino = 0;
+#endif
+
+ /* st_mode. */
+ unsigned int mode =
+ /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */
+ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
+ | S_IREAD_UGO
+ | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
+ if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ /* Determine whether the file is executable by looking at the file
+ name suffix.
+ If the file name is already known, use it. Otherwise, for
+ non-empty files, it can be determined through
+ GetFinalPathNameByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea>
+ or through
+ GetFileInformationByHandleEx with argument FileNameInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info>
+ Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
+ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
+ {
+ char fpath[PATH_MAX];
+ if (path != NULL
+ || (GetFinalPathNameByHandleFunc != NULL
+ && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE)
+ < sizeof (fpath)
+ && (path = fpath, 1)))
+ {
+ const char *last_dot = NULL;
+ const char *p;
+ for (p = path; *p != '\0'; p++)
+ if (*p == '.')
+ last_dot = p;
+ if (last_dot != NULL)
+ {
+ const char *suffix = last_dot + 1;
+ if (_stricmp (suffix, "exe") == 0
+ || _stricmp (suffix, "bat") == 0
+ || _stricmp (suffix, "cmd") == 0
+ || _stricmp (suffix, "com") == 0)
+ mode |= S_IEXEC_UGO;
+ }
+ }
+ else
+ /* Cannot determine file name. Pretend that it is executable. */
+ mode |= S_IEXEC_UGO;
+ }
+ }
+ buf->st_mode = mode;
+
+ /* st_nlink can be determined through
+ GetFileInformationByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+ or through
+ GetFileInformationByHandleEx with argument FileStandardInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info>
+ The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
+ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks);
+
+ /* There's no easy way to map the Windows SID concept to an integer. */
+ buf->st_uid = 0;
+ buf->st_gid = 0;
+
+ /* st_rdev is irrelevant for normal files and directories. */
+ buf->st_rdev = 0;
+
+ /* st_size can be determined through
+ GetFileSizeEx
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex>
+ or through
+ GetFileAttributesEx
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+ or through
+ GetFileInformationByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+ or through
+ GetFileInformationByHandleEx with argument FileStandardInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info>
+ The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
+ if (sizeof (buf->st_size) <= 4)
+ /* Range check already done above. */
+ buf->st_size = info.nFileSizeLow;
+ else
+ buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
+
+ /* st_atime, st_mtime, st_ctime can be determined through
+ GetFileTime
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime>
+ or through
+ GetFileAttributesEx
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data>
+ or through
+ GetFileInformationByHandle
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information>
+ or through
+ GetFileInformationByHandleEx with argument FileBasicInfo
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info>
+ The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */
+#if _GL_WINDOWS_STAT_TIMESPEC
+ buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
+ buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
+ buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
+#else
+ buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
+ buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
+ buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
+#endif
+
+ return 0;
+ }
+ else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE)
+ {
+ buf->st_dev = 0;
+#if _GL_WINDOWS_STAT_INODES == 2
+ buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
+#else
+ buf->st_ino = 0;
+#endif
+ buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR);
+ buf->st_nlink = 1;
+ buf->st_uid = 0;
+ buf->st_gid = 0;
+ buf->st_rdev = 0;
+ if (type == FILE_TYPE_PIPE)
+ {
+ /* PeekNamedPipe
+ <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */
+ DWORD bytes_available;
+ if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL))
+ buf->st_size = bytes_available;
+ else
+ buf->st_size = 0;
+ }
+ else
+ buf->st_size = 0;
+#if _GL_WINDOWS_STAT_TIMESPEC
+ buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0;
+ buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0;
+ buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0;
+#else
+ buf->st_atime = 0;
+ buf->st_mtime = 0;
+ buf->st_ctime = 0;
+#endif
+ return 0;
+ }
+ else
+ {
+ errno = ENOENT;
+ return -1;
+ }
+
+ failed:
+ {
+ DWORD error = GetLastError ();
+ #if 0
+ fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error);
+ #endif
+ switch (error)
+ {
+ case ERROR_ACCESS_DENIED:
+ case ERROR_SHARING_VIOLATION:
+ errno = EACCES;
+ break;
+
+ case ERROR_OUTOFMEMORY:
+ errno = ENOMEM;
+ break;
+
+ case ERROR_WRITE_FAULT:
+ case ERROR_READ_FAULT:
+ case ERROR_GEN_FAILURE:
+ errno = EIO;
+ break;
+
+ default:
+ errno = EINVAL;
+ break;
+ }
+ return -1;
+ }
+}
+
+#else
+
+/* This declaration is solely to ensure that after preprocessing
+ this file is never empty. */
+typedef int dummy;
+
+#endif
diff --git a/lib/stat-w32.h b/lib/stat-w32.h
new file mode 100644
index 0000000..c673874
--- /dev/null
+++ b/lib/stat-w32.h
@@ -0,0 +1,37 @@
+/* Core of implementation of fstat and stat for native Windows.
+ Copyright (C) 2017-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _STAT_W32_H
+#define _STAT_W32_H 1
+
+/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */
+#if _GL_WINDOWS_STAT_TIMESPEC
+extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft);
+#else
+extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft);
+#endif
+
+/* Fill *BUF with information about the file designated by H.
+ PATH is the file name, if known, otherwise NULL.
+ Return 0 if successful, or -1 with errno set upon failure. */
+extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf);
+
+/* Bitmasks for st_mode. */
+#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6))
+#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6))
+#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6))
+
+#endif /* _STAT_W32_H */
diff --git a/lib/stat.c b/lib/stat.c
new file mode 100644
index 0000000..7987e26
--- /dev/null
+++ b/lib/stat.c
@@ -0,0 +1,438 @@
+/* Work around platform bugs in stat.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake and Bruno Haible. */
+
+/* If the user's config.h happens to include <sys/stat.h>, let it include only
+ the system's <sys/stat.h> here, so that orig_stat doesn't recurse to
+ rpl_stat. */
+#define __need_system_sys_stat_h
+#include <config.h>
+
+/* Get the original definition of stat. It might be defined as a macro. */
+#include <sys/types.h>
+#include <sys/stat.h>
+#undef __need_system_sys_stat_h
+
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WINDOWS_NATIVE
+#endif
+
+#if !defined WINDOWS_NATIVE
+
+static int
+orig_stat (const char *filename, struct stat *buf)
+{
+ return stat (filename, buf);
+}
+
+#endif
+
+/* Specification. */
+#ifdef __osf__
+/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc
+ eliminates this include because of the preliminary #include <sys/stat.h>
+ above. */
+# include "sys/stat.h"
+#else
+# include <sys/stat.h>
+#endif
+
+#include "stat-time.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <string.h>
+#include "filename.h"
+#include "malloca.h"
+
+#ifdef WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "stat-w32.h"
+/* Don't assume that UNICODE is not defined. */
+# undef WIN32_FIND_DATA
+# define WIN32_FIND_DATA WIN32_FIND_DATAA
+# undef CreateFile
+# define CreateFile CreateFileA
+# undef FindFirstFile
+# define FindFirstFile FindFirstFileA
+#endif
+
+#ifdef WINDOWS_NATIVE
+/* Return TRUE if the given file name denotes an UNC root. */
+static BOOL
+is_unc_root (const char *rname)
+{
+ /* Test whether it has the syntax '\\server\share'. */
+ if (ISSLASH (rname[0]) && ISSLASH (rname[1]))
+ {
+ /* It starts with two slashes. Find the next slash. */
+ const char *p = rname + 2;
+ const char *q = p;
+ while (*q != '\0' && !ISSLASH (*q))
+ q++;
+ if (q > p && *q != '\0')
+ {
+ /* Found the next slash at q. */
+ q++;
+ const char *r = q;
+ while (*r != '\0' && !ISSLASH (*r))
+ r++;
+ if (r > q && *r == '\0')
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+#endif
+
+/* Store information about NAME into ST. Work around bugs with
+ trailing slashes. Mingw has other bugs (such as st_ino always
+ being 0 on success) which this wrapper does not work around. But
+ at least this implementation provides the ability to emulate fchdir
+ correctly. */
+
+int
+rpl_stat (char const *name, struct stat *buf)
+{
+#ifdef WINDOWS_NATIVE
+ /* Fill the fields ourselves, because the original stat function returns
+ values for st_atime, st_mtime, st_ctime that depend on the current time
+ zone. See
+ <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */
+ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work
+ around length limitations
+ <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */
+
+ /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>
+ specifies: "More than two leading <slash> characters shall be treated as
+ a single <slash> character." */
+ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2]))
+ {
+ name += 2;
+ while (ISSLASH (name[1]))
+ name++;
+ }
+
+ size_t len = strlen (name);
+ size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0);
+
+ /* Remove trailing slashes (except the very first one, at position
+ drive_prefix_len), but remember their presence. */
+ size_t rlen;
+ bool check_dir = false;
+
+ rlen = len;
+ while (rlen > drive_prefix_len && ISSLASH (name[rlen-1]))
+ {
+ check_dir = true;
+ if (rlen == drive_prefix_len + 1)
+ break;
+ rlen--;
+ }
+
+ /* Handle '' and 'C:'. */
+ if (!check_dir && rlen == drive_prefix_len)
+ {
+ errno = ENOENT;
+ return -1;
+ }
+
+ /* Handle '\\'. */
+ if (rlen == 1 && ISSLASH (name[0]) && len >= 2)
+ {
+ errno = ENOENT;
+ return -1;
+ }
+
+ const char *rname;
+ char *malloca_rname;
+ if (rlen == len)
+ {
+ rname = name;
+ malloca_rname = NULL;
+ }
+ else
+ {
+ malloca_rname = malloca (rlen + 1);
+ if (malloca_rname == NULL)
+ {
+ errno = ENOMEM;
+ return -1;
+ }
+ memcpy (malloca_rname, name, rlen);
+ malloca_rname[rlen] = '\0';
+ rname = malloca_rname;
+ }
+
+ /* There are two ways to get at the requested information:
+ - by scanning the parent directory and examining the relevant
+ directory entry,
+ - by opening the file directly.
+ The first approach fails for root directories (e.g. 'C:\') and
+ UNC root directories (e.g. '\\server\share').
+ The second approach fails for some system files (e.g. 'C:\pagefile.sys'
+ and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION.
+ The second approach gives more information (in particular, correct
+ st_dev, st_ino, st_nlink fields).
+ So we use the second approach and, as a fallback except for root and
+ UNC root directories, also the first approach. */
+ {
+ int ret;
+
+ {
+ /* Approach based on the file. */
+
+ /* Open a handle to the file.
+ CreateFile
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea>
+ <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */
+ HANDLE h =
+ CreateFile (rname,
+ FILE_READ_ATTRIBUTES,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+ NULL,
+ OPEN_EXISTING,
+ /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only
+ in case as different) makes sense only when applied to *all*
+ filesystem operations. */
+ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */,
+ NULL);
+ if (h != INVALID_HANDLE_VALUE)
+ {
+ ret = _gl_fstat_by_handle (h, rname, buf);
+ CloseHandle (h);
+ goto done;
+ }
+ }
+
+ /* Test for root and UNC root directories. */
+ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len]))
+ || is_unc_root (rname))
+ goto failed;
+
+ /* Fallback. */
+ {
+ /* Approach based on the directory entry. */
+
+ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL)
+ {
+ /* Other Windows API functions would fail with error
+ ERROR_INVALID_NAME. */
+ if (malloca_rname != NULL)
+ freea (malloca_rname);
+ errno = ENOENT;
+ return -1;
+ }
+
+ /* Get the details about the directory entry. This can be done through
+ FindFirstFile
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa>
+ or through
+ FindFirstFileEx with argument FindExInfoBasic
+ <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels>
+ <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */
+ WIN32_FIND_DATA info;
+ HANDLE h = FindFirstFile (rname, &info);
+ if (h == INVALID_HANDLE_VALUE)
+ goto failed;
+
+ /* Test for error conditions before starting to fill *buf. */
+ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0)
+ {
+ FindClose (h);
+ if (malloca_rname != NULL)
+ freea (malloca_rname);
+ errno = EOVERFLOW;
+ return -1;
+ }
+
+# if _GL_WINDOWS_STAT_INODES
+ buf->st_dev = 0;
+# if _GL_WINDOWS_STAT_INODES == 2
+ buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0;
+# else /* _GL_WINDOWS_STAT_INODES == 1 */
+ buf->st_ino = 0;
+# endif
+# else
+ /* st_ino is not wide enough for identifying a file on a device.
+ Without st_ino, st_dev is pointless. */
+ buf->st_dev = 0;
+ buf->st_ino = 0;
+# endif
+
+ /* st_mode. */
+ unsigned int mode =
+ /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */
+ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG)
+ | S_IREAD_UGO
+ | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO);
+ if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ /* Determine whether the file is executable by looking at the file
+ name suffix. */
+ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0)
+ {
+ const char *last_dot = NULL;
+ const char *p;
+ for (p = info.cFileName; *p != '\0'; p++)
+ if (*p == '.')
+ last_dot = p;
+ if (last_dot != NULL)
+ {
+ const char *suffix = last_dot + 1;
+ if (_stricmp (suffix, "exe") == 0
+ || _stricmp (suffix, "bat") == 0
+ || _stricmp (suffix, "cmd") == 0
+ || _stricmp (suffix, "com") == 0)
+ mode |= S_IEXEC_UGO;
+ }
+ }
+ }
+ buf->st_mode = mode;
+
+ /* st_nlink. Ignore hard links here. */
+ buf->st_nlink = 1;
+
+ /* There's no easy way to map the Windows SID concept to an integer. */
+ buf->st_uid = 0;
+ buf->st_gid = 0;
+
+ /* st_rdev is irrelevant for normal files and directories. */
+ buf->st_rdev = 0;
+
+ /* st_size. */
+ if (sizeof (buf->st_size) <= 4)
+ /* Range check already done above. */
+ buf->st_size = info.nFileSizeLow;
+ else
+ buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow;
+
+ /* st_atime, st_mtime, st_ctime. */
+# if _GL_WINDOWS_STAT_TIMESPEC
+ buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime);
+ buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime);
+ buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime);
+# else
+ buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime);
+ buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime);
+ buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime);
+# endif
+
+ FindClose (h);
+
+ ret = 0;
+ }
+
+ done:
+ if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode))
+ {
+ errno = ENOTDIR;
+ ret = -1;
+ }
+ if (malloca_rname != NULL)
+ {
+ int saved_errno = errno;
+ freea (malloca_rname);
+ errno = saved_errno;
+ }
+ return ret;
+ }
+
+ failed:
+ {
+ DWORD error = GetLastError ();
+ #if 0
+ fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error);
+ #endif
+
+ if (malloca_rname != NULL)
+ freea (malloca_rname);
+
+ switch (error)
+ {
+ /* Some of these errors probably cannot happen with the specific flags
+ that we pass to CreateFile. But who knows... */
+ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */
+ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */
+ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */
+ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */
+ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */
+ case ERROR_DIRECTORY:
+ errno = ENOENT;
+ break;
+
+ case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */
+ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */
+ /* XXX map to EACCES or EPERM? */
+ errno = EACCES;
+ break;
+
+ case ERROR_OUTOFMEMORY:
+ errno = ENOMEM;
+ break;
+
+ case ERROR_WRITE_PROTECT:
+ errno = EROFS;
+ break;
+
+ case ERROR_WRITE_FAULT:
+ case ERROR_READ_FAULT:
+ case ERROR_GEN_FAILURE:
+ errno = EIO;
+ break;
+
+ case ERROR_BUFFER_OVERFLOW:
+ case ERROR_FILENAME_EXCED_RANGE:
+ errno = ENAMETOOLONG;
+ break;
+
+ case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */
+ errno = EPERM;
+ break;
+
+ default:
+ errno = EINVAL;
+ break;
+ }
+
+ return -1;
+ }
+#else
+ int result = orig_stat (name, buf);
+ if (result == 0)
+ {
+# if REPLACE_FUNC_STAT_FILE
+ /* Solaris 9 mistakenly succeeds when given a non-directory with a
+ trailing slash. */
+ if (!S_ISDIR (buf->st_mode))
+ {
+ size_t len = strlen (name);
+ if (ISSLASH (name[len - 1]))
+ {
+ errno = ENOTDIR;
+ return -1;
+ }
+ }
+# endif /* REPLACE_FUNC_STAT_FILE */
+ result = stat_time_normalize (result, buf);
+ }
+ return result;
+#endif
+}
diff --git a/lib/stdarg.in.h b/lib/stdarg.in.h
new file mode 100644
index 0000000..64baf87
--- /dev/null
+++ b/lib/stdarg.in.h
@@ -0,0 +1,35 @@
+/* Substitute for and wrapper around <stdarg.h>.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _@GUARD_PREFIX@_STDARG_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STDARG_H@
+
+#ifndef _@GUARD_PREFIX@_STDARG_H
+#define _@GUARD_PREFIX@_STDARG_H
+
+#ifndef va_copy
+# define va_copy(a,b) ((a) = (b))
+#endif
+
+#endif /* _@GUARD_PREFIX@_STDARG_H */
+#endif /* _@GUARD_PREFIX@_STDARG_H */
diff --git a/lib/stdckdint.in.h b/lib/stdckdint.in.h
new file mode 100644
index 0000000..71bab5f
--- /dev/null
+++ b/lib/stdckdint.in.h
@@ -0,0 +1,35 @@
+/* stdckdint.h -- checked integer arithmetic
+
+ Copyright 2022-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_STDCKDINT_H
+#define _GL_STDCKDINT_H
+
+#include "intprops-internal.h"
+
+/* Store into *R the low-order bits of A + B, A - B, A * B, respectively.
+ Return 1 if the result overflows, 0 otherwise.
+ A, B, and *R can have any integer type other than char, bool, a
+ bit-precise integer type, or an enumeration type.
+
+ These are like the standard macros introduced in C23, except that
+ arguments should not have side effects. */
+
+#define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r))
+#define ckd_sub(r, a, b) ((bool) _GL_INT_SUBTRACT_WRAPV (a, b, r))
+#define ckd_mul(r, a, b) ((bool) _GL_INT_MULTIPLY_WRAPV (a, b, r))
+
+#endif /* _GL_STDCKDINT_H */
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
new file mode 100644
index 0000000..c7ce608
--- /dev/null
+++ b/lib/stddef.in.h
@@ -0,0 +1,186 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake. */
+
+/*
+ * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_wchar_t || defined __need_size_t \
+ || defined __need_ptrdiff_t || defined __need_NULL \
+ || defined __need_wint_t
+/* Special invocation convention inside gcc header files. In
+ particular, gcc provides a version of <stddef.h> that blindly
+ redefines NULL even when __need_wint_t was defined, even though
+ wint_t is not normally provided by <stddef.h>. Hence, we must
+ remember if special invocation has ever been used to obtain wint_t,
+ in which case we need to clean up NULL yet again. */
+
+# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
+# ifdef __need_wint_t
+# define _GL_STDDEF_WINT_T
+# endif
+# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+ /* On TinyCC, make sure that the macros that indicate the special invocation
+ convention get undefined. */
+# undef __need_wchar_t
+# undef __need_size_t
+# undef __need_ptrdiff_t
+# undef __need_NULL
+# undef __need_wint_t
+# endif
+
+#else
+/* Normal invocation convention. */
+
+# ifndef _@GUARD_PREFIX@_STDDEF_H
+
+/* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a
+ type with alignment 4, but 'long' has alignment 8. */
+# if defined _AIX && defined __LP64__
+# if !GNULIB_defined_max_align_t
+# ifdef _MAX_ALIGN_T
+/* /usr/include/stddef.h has already defined max_align_t. Override it. */
+typedef long rpl_max_align_t;
+# define max_align_t rpl_max_align_t
+# else
+/* Prevent /usr/include/stddef.h from defining max_align_t. */
+typedef long max_align_t;
+# define _MAX_ALIGN_T
+# endif
+# define __CLANG_MAX_ALIGN_T_DEFINED
+# define GNULIB_defined_max_align_t 1
+# endif
+# endif
+
+/* The include_next requires a split double-inclusion guard. */
+
+# @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */
+# if (@REPLACE_NULL@ \
+ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
+# undef NULL
+# ifdef __cplusplus
+ /* ISO C++ says that the macro NULL must expand to an integer constant
+ expression, hence '((void *) 0)' is not allowed in C++. */
+# if __GNUG__ >= 3
+ /* GNU C++ has a __null macro that behaves like an integer ('int' or
+ 'long') but has the same size as a pointer. Use that, to avoid
+ warnings. */
+# define NULL __null
+# else
+# define NULL 0L
+# endif
+# else
+# define NULL ((void *) 0)
+# endif
+# endif
+
+# ifndef _@GUARD_PREFIX@_STDDEF_H
+# define _@GUARD_PREFIX@_STDDEF_H
+
+/* Some platforms lack wchar_t. */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+/* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is
+ a hack in case the configure-time test was done with g++ even though
+ we are currently compiling with gcc.
+ On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was
+ included. Its definition is good since it has an alignment of 8 (on x86
+ and x86_64).
+ Similarly on OS/2 kLIBC. */
+#if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \
+ && defined __cplusplus
+# include <cstddef>
+#else
+# if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__))
+# if !GNULIB_defined_max_align_t
+/* On the x86, the maximum storage alignment of double, long, etc. is 4,
+ but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
+ and the C11 standard allows this. Work around this problem by
+ using __alignof__ (which returns 8 for double) rather than _Alignof
+ (which returns 4), and align each union member accordingly. */
+# if defined __GNUC__ || (__clang_major__ >= 4)
+# define _GL_STDDEF_ALIGNAS(type) \
+ __attribute__ ((__aligned__ (__alignof__ (type))))
+# else
+# define _GL_STDDEF_ALIGNAS(type) /* */
+# endif
+typedef union
+{
+ char *__p _GL_STDDEF_ALIGNAS (char *);
+ double __d _GL_STDDEF_ALIGNAS (double);
+ long double __ld _GL_STDDEF_ALIGNAS (long double);
+ long int __i _GL_STDDEF_ALIGNAS (long int);
+} rpl_max_align_t;
+# define max_align_t rpl_max_align_t
+# define __CLANG_MAX_ALIGN_T_DEFINED
+# define GNULIB_defined_max_align_t 1
+# endif
+# endif
+#endif
+
+/* ISO C 23 § 7.21.1 The unreachable macro */
+#ifndef unreachable
+
+/* Code borrowed from verify.h. */
+# ifndef _GL_HAS_BUILTIN_UNREACHABLE
+# if defined __clang_major__ && __clang_major__ < 5
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
+# define _GL_HAS_BUILTIN_UNREACHABLE 1
+# elif defined __has_builtin
+# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
+# else
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# endif
+# endif
+
+# if _GL_HAS_BUILTIN_UNREACHABLE
+# define unreachable() __builtin_unreachable ()
+# elif 1200 <= _MSC_VER
+# define unreachable() __assume (0)
+# else
+/* Declare abort(), without including <stdlib.h>. */
+extern
+# if defined __cplusplus
+"C"
+# endif
+_Noreturn
+void abort (void)
+# if defined __cplusplus && (__GLIBC__ >= 2)
+throw ()
+# endif
+;
+# define unreachable() abort ()
+# endif
+
+#endif
+
+# endif /* _@GUARD_PREFIX@_STDDEF_H */
+# endif /* _@GUARD_PREFIX@_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
new file mode 100644
index 0000000..5ddc644
--- /dev/null
+++ b/lib/stdint.in.h
@@ -0,0 +1,740 @@
+/* Copyright (C) 2001-2002, 2004-2023 Free Software Foundation, Inc.
+ Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+ This file is part of gnulib.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html>
+ */
+
+#ifndef _@GUARD_PREFIX@_STDINT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* When including a system file that in turn includes <inttypes.h>,
+ use the system <inttypes.h>, not our substitute. This avoids
+ problems with (for example) VMS, whose <sys/bitypes.h> includes
+ <inttypes.h>. */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* On Android (Bionic libc), <sys/types.h> includes this file before
+ having defined 'time_t'. Therefore in this case avoid including
+ other system header files; just include the system's <stdint.h>.
+ Ideally we should test __BIONIC__ here, but it is only defined after
+ <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */
+#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#else
+
+/* Get those types that are already defined in other system include
+ files, so that we can "#define int8_t signed char" below without
+ worrying about a later system include file containing a "typedef
+ signed char int8_t;" that will get messed up by our macro. Our
+ macros should all be consistent with the system versions, except
+ for the "fast" types and macros, which we recommend against using
+ in public interfaces due to compiler differences. */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+ /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+ with "This header file is to be used only for c99 mode compilations"
+ diagnostics. */
+# define __STDINT_H__
+# endif
+
+ /* Some pre-C++11 <stdint.h> implementations need this. */
+# ifdef __cplusplus
+# ifndef __STDC_CONSTANT_MACROS
+# define __STDC_CONSTANT_MACROS 1
+# endif
+# ifndef __STDC_LIMIT_MACROS
+# define __STDC_LIMIT_MACROS 1
+# endif
+# endif
+
+ /* Other systems may have an incomplete or buggy <stdint.h>.
+ Include it before <inttypes.h>, since any "#include <stdint.h>"
+ in <inttypes.h> would reinclude us, skipping our contents because
+ _@GUARD_PREFIX@_STDINT_H is defined.
+ The include_next requires a split double-inclusion guard. */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _@GUARD_PREFIX@_STDINT_H
+
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+ LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */
+#include <limits.h>
+
+/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
+ wint_t. */
+#if @GNULIBHEADERS_OVERRIDE_WINT_T@
+# undef WINT_MIN
+# undef WINT_MAX
+# define WINT_MIN 0x0U
+# define WINT_MAX 0xffffffffU
+#endif
+
+#if ! @HAVE_C99_STDINT_H@
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+ IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+ AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+ Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+ relies on the system <stdint.h> definitions, so include
+ <sys/types.h> after @NEXT_STDINT_H@. */
+# if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+# endif
+
+# if @HAVE_INTTYPES_H@
+ /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+ int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+ <inttypes.h> also defines intptr_t and uintptr_t. */
+# include <inttypes.h>
+# elif @HAVE_SYS_INTTYPES_H@
+ /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+ the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */
+# include <sys/inttypes.h>
+# endif
+
+# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+ /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+ int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is
+ included by <sys/types.h>. */
+# include <sys/bitypes.h>
+# endif
+
+# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for an integer type under the usual assumption.
+ Return an unspecified value if BITS == 0, adding a check to pacify
+ picky compilers. */
+
+/* These are separate macros, because if you try to merge these macros into
+ a single one, HP-UX cc rejects the resulting expression in constant
+ expressions. */
+# define _STDINT_UNSIGNED_MIN(bits, zero) \
+ (zero)
+# define _STDINT_SIGNED_MIN(bits, zero) \
+ (~ _STDINT_MAX (1, bits, zero))
+
+# define _STDINT_MAX(signed, bits, zero) \
+ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+#if !GNULIB_defined_stdint_types
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. */
+
+# undef int8_t
+# undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+# define int8_t gl_int8_t
+# define uint8_t gl_uint8_t
+
+# undef int16_t
+# undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+# define int16_t gl_int16_t
+# define uint16_t gl_uint16_t
+
+# undef int32_t
+# undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+# define int32_t gl_int32_t
+# define uint32_t gl_uint32_t
+
+/* If the system defines INT64_MAX, assume int64_t works. That way,
+ if the underlying platform defines int64_t to be a 64-bit long long
+ int, the code below won't mistakenly define it to be a 64-bit long
+ int, which would mess up C++ name mangling. We must use #ifdef
+ rather than #if, to avoid an error with HP-UX 10.20 cc. */
+
+# ifdef INT64_MAX
+# define GL_INT64_T
+# else
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+ types, since otherwise it breaks platforms like Tandem/NSK. */
+# if LONG_MAX >> 31 >> 31 == 1
+# undef int64_t
+typedef long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+# elif defined _MSC_VER
+# undef int64_t
+typedef __int64 gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+# else
+# undef int64_t
+typedef long long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+# endif
+# endif
+
+# ifdef UINT64_MAX
+# define GL_UINT64_T
+# else
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
+typedef unsigned long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+# elif defined _MSC_VER
+# undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+# else
+# undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+# endif
+# endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */
+# define _UINT8_T
+# define _UINT32_T
+# define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+ are the same as the corresponding N_t types. */
+
+# undef int_least8_t
+# undef uint_least8_t
+# undef int_least16_t
+# undef uint_least16_t
+# undef int_least32_t
+# undef uint_least32_t
+# undef int_least64_t
+# undef uint_least64_t
+# define int_least8_t int8_t
+# define uint_least8_t uint8_t
+# define int_least16_t int16_t
+# define uint_least16_t uint16_t
+# define int_least32_t int32_t
+# define uint_least32_t uint32_t
+# ifdef GL_INT64_T
+# define int_least64_t int64_t
+# endif
+# ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+# endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+ It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+ are taken from the same list of types. The following code normally
+ uses types consistent with glibc, as that lessens the chance of
+ incompatibility with older GNU hosts. */
+
+# undef int_fast8_t
+# undef uint_fast8_t
+# undef int_fast16_t
+# undef uint_fast16_t
+# undef int_fast32_t
+# undef uint_fast32_t
+# undef int_fast64_t
+# undef uint_fast64_t
+typedef signed char gl_int_fast8_t;
+typedef unsigned char gl_uint_fast8_t;
+
+# ifdef __sun
+/* Define types compatible with SunOS 5.10, so that code compiled under
+ earlier SunOS versions works with code compiled under SunOS 5.10. */
+typedef int gl_int_fast32_t;
+typedef unsigned int gl_uint_fast32_t;
+# else
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+# endif
+typedef gl_int_fast32_t gl_int_fast16_t;
+typedef gl_uint_fast32_t gl_uint_fast16_t;
+
+# define int_fast8_t gl_int_fast8_t
+# define uint_fast8_t gl_uint_fast8_t
+# define int_fast16_t gl_int_fast16_t
+# define uint_fast16_t gl_uint_fast16_t
+# define int_fast32_t gl_int_fast32_t
+# define uint_fast32_t gl_uint_fast32_t
+# ifdef GL_INT64_T
+# define int_fast64_t int64_t
+# endif
+# ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+# endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+/* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own
+ definitions of intptr_t and uintptr_t (which use int and unsigned)
+ to avoid clashes with declarations of system functions like sbrk.
+ Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and
+ uintptr_t to avoid conflicting declarations of system functions like
+ _findclose in <io.h>. */
+# if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \
+ || defined __MINGW32__)
+# undef intptr_t
+# undef uintptr_t
+# ifdef _WIN64
+typedef long long int gl_intptr_t;
+typedef unsigned long long int gl_uintptr_t;
+# else
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+# endif
+# define intptr_t gl_intptr_t
+# define uintptr_t gl_uintptr_t
+# endif
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+ public header files. */
+
+/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+ similarly for UINTMAX_MAX and uintmax_t. This avoids problems with
+ assuming one type where another is used by the system. */
+
+# ifndef INTMAX_MAX
+# undef INTMAX_C
+# undef intmax_t
+# if LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+# elif defined GL_INT64_T
+# define intmax_t int64_t
+# else
+typedef long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+# endif
+# endif
+
+# ifndef UINTMAX_MAX
+# undef UINTMAX_C
+# undef uintmax_t
+# if ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+# elif defined GL_UINT64_T
+# define uintmax_t uint64_t
+# else
+typedef unsigned long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+# endif
+# endif
+
+/* Verify that intmax_t and uintmax_t have the same size. Too much code
+ breaks if this is not the case. If this check fails, the reason is likely
+ to be found in the autoconf macros. */
+typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
+ ? 1 : -1];
+
+# define GNULIB_defined_stdint_types 1
+# endif /* !GNULIB_defined_stdint_types */
+
+/* 7.18.2. Limits of specified-width integer types */
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. */
+
+# undef INT8_MIN
+# undef INT8_MAX
+# undef UINT8_MAX
+# define INT8_MIN (~ INT8_MAX)
+# define INT8_MAX 127
+# define UINT8_MAX 255
+
+# undef INT16_MIN
+# undef INT16_MAX
+# undef UINT16_MAX
+# define INT16_MIN (~ INT16_MAX)
+# define INT16_MAX 32767
+# define UINT16_MAX 65535
+
+# undef INT32_MIN
+# undef INT32_MAX
+# undef UINT32_MAX
+# define INT32_MIN (~ INT32_MAX)
+# define INT32_MAX 2147483647
+# define UINT32_MAX 4294967295U
+
+# if defined GL_INT64_T && ! defined INT64_MAX
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+ evaluates the latter incorrectly in preprocessor expressions. */
+# define INT64_MIN (- INTMAX_C (1) << 63)
+# define INT64_MAX INTMAX_C (9223372036854775807)
+# endif
+
+# if defined GL_UINT64_T && ! defined UINT64_MAX
+# define UINT64_MAX UINTMAX_C (18446744073709551615)
+# endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+ are the same as the corresponding N_t types. */
+
+# undef INT_LEAST8_MIN
+# undef INT_LEAST8_MAX
+# undef UINT_LEAST8_MAX
+# define INT_LEAST8_MIN INT8_MIN
+# define INT_LEAST8_MAX INT8_MAX
+# define UINT_LEAST8_MAX UINT8_MAX
+
+# undef INT_LEAST16_MIN
+# undef INT_LEAST16_MAX
+# undef UINT_LEAST16_MAX
+# define INT_LEAST16_MIN INT16_MIN
+# define INT_LEAST16_MAX INT16_MAX
+# define UINT_LEAST16_MAX UINT16_MAX
+
+# undef INT_LEAST32_MIN
+# undef INT_LEAST32_MAX
+# undef UINT_LEAST32_MAX
+# define INT_LEAST32_MIN INT32_MIN
+# define INT_LEAST32_MAX INT32_MAX
+# define UINT_LEAST32_MAX UINT32_MAX
+
+# undef INT_LEAST64_MIN
+# undef INT_LEAST64_MAX
+# ifdef GL_INT64_T
+# define INT_LEAST64_MIN INT64_MIN
+# define INT_LEAST64_MAX INT64_MAX
+# endif
+
+# undef UINT_LEAST64_MAX
+# ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX UINT64_MAX
+# endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+ are taken from the same list of types. */
+
+# undef INT_FAST8_MIN
+# undef INT_FAST8_MAX
+# undef UINT_FAST8_MAX
+# define INT_FAST8_MIN SCHAR_MIN
+# define INT_FAST8_MAX SCHAR_MAX
+# define UINT_FAST8_MAX UCHAR_MAX
+
+# undef INT_FAST16_MIN
+# undef INT_FAST16_MAX
+# undef UINT_FAST16_MAX
+# define INT_FAST16_MIN INT_FAST32_MIN
+# define INT_FAST16_MAX INT_FAST32_MAX
+# define UINT_FAST16_MAX UINT_FAST32_MAX
+
+# undef INT_FAST32_MIN
+# undef INT_FAST32_MAX
+# undef UINT_FAST32_MAX
+# ifdef __sun
+# define INT_FAST32_MIN INT_MIN
+# define INT_FAST32_MAX INT_MAX
+# define UINT_FAST32_MAX UINT_MAX
+# else
+# define INT_FAST32_MIN LONG_MIN
+# define INT_FAST32_MAX LONG_MAX
+# define UINT_FAST32_MAX ULONG_MAX
+# endif
+
+# undef INT_FAST64_MIN
+# undef INT_FAST64_MAX
+# ifdef GL_INT64_T
+# define INT_FAST64_MIN INT64_MIN
+# define INT_FAST64_MAX INT64_MAX
+# endif
+
+# undef UINT_FAST64_MAX
+# ifdef GL_UINT64_T
+# define UINT_FAST64_MAX UINT64_MAX
+# endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+# undef INTPTR_MIN
+# undef INTPTR_MAX
+# undef UINTPTR_MAX
+# ifdef _WIN64
+# define INTPTR_MIN LLONG_MIN
+# define INTPTR_MAX LLONG_MAX
+# define UINTPTR_MAX ULLONG_MAX
+# else
+# define INTPTR_MIN LONG_MIN
+# define INTPTR_MAX LONG_MAX
+# define UINTPTR_MAX ULONG_MAX
+# endif
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+# ifndef INTMAX_MAX
+# undef INTMAX_MIN
+# ifdef INT64_MAX
+# define INTMAX_MIN INT64_MIN
+# define INTMAX_MAX INT64_MAX
+# else
+# define INTMAX_MIN INT32_MIN
+# define INTMAX_MAX INT32_MAX
+# endif
+# endif
+
+# ifndef UINTMAX_MAX
+# ifdef UINT64_MAX
+# define UINTMAX_MAX UINT64_MAX
+# else
+# define UINTMAX_MAX UINT32_MAX
+# endif
+# endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+# undef PTRDIFF_MIN
+# undef PTRDIFF_MAX
+# if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l)
+# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l)
+# else
+# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0)
+# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0)
+# endif
+# else
+# define PTRDIFF_MIN \
+ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX \
+ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# endif
+
+/* sig_atomic_t limits */
+# undef SIG_ATOMIC_MIN
+# undef SIG_ATOMIC_MAX
+# if @HAVE_SIGNED_SIG_ATOMIC_T@
+# define SIG_ATOMIC_MIN \
+ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# else
+# define SIG_ATOMIC_MIN \
+ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# endif
+# define SIG_ATOMIC_MAX \
+ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+ 0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+# undef SIZE_MAX
+# if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+# define SIZE_MAX _STDINT_MAX (0, 64, 0ul)
+# else
+# define SIZE_MAX _STDINT_MAX (0, 32, 0ul)
+# endif
+# else
+# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+# endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+ This include is not on the top, above, because on OSF/1 4.0 we have a
+ sequence of nested includes
+ <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+ <stdint.h> and assumes its types are already defined. */
+# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# endif
+# undef WCHAR_MIN
+# undef WCHAR_MAX
+# if @HAVE_SIGNED_WCHAR_T@
+# define WCHAR_MIN \
+ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# else
+# define WCHAR_MIN \
+ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# endif
+# define WCHAR_MAX \
+ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+/* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not
+ accurate, therefore use the definitions from above. */
+# if !@GNULIBHEADERS_OVERRIDE_WINT_T@
+# undef WINT_MIN
+# undef WINT_MAX
+# if @HAVE_SIGNED_WINT_T@
+# define WINT_MIN \
+ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# else
+# define WINT_MIN \
+ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# endif
+# define WINT_MAX \
+ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# endif
+
+/* 7.18.4. Macros for integer constants */
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+ types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */
+
+# undef INT8_C
+# undef UINT8_C
+# define INT8_C(x) x
+# define UINT8_C(x) x
+
+# undef INT16_C
+# undef UINT16_C
+# define INT16_C(x) x
+# define UINT16_C(x) x
+
+# undef INT32_C
+# undef UINT32_C
+# define INT32_C(x) x
+# define UINT32_C(x) x ## U
+
+# undef INT64_C
+# undef UINT64_C
+# if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+# elif defined _MSC_VER
+# define INT64_C(x) x##i64
+# else
+# define INT64_C(x) x##LL
+# endif
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+# elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+# else
+# define UINT64_C(x) x##ULL
+# endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+# ifndef INTMAX_C
+# if LONG_MAX >> 30 == 1
+# define INTMAX_C(x) x##LL
+# elif defined GL_INT64_T
+# define INTMAX_C(x) INT64_C(x)
+# else
+# define INTMAX_C(x) x##L
+# endif
+# endif
+
+# ifndef UINTMAX_C
+# if ULONG_MAX >> 31 == 1
+# define UINTMAX_C(x) x##ULL
+# elif defined GL_UINT64_T
+# define UINTMAX_C(x) UINT64_C(x)
+# else
+# define UINTMAX_C(x) x##UL
+# endif
+# endif
+
+#endif /* !@HAVE_C99_STDINT_H@ */
+
+/* Macros specified by ISO/IEC TS 18661-1:2014. */
+
+#if (!defined UINTMAX_WIDTH \
+ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+# ifdef INT8_MAX
+# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
+# endif
+# ifdef UINT8_MAX
+# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
+# endif
+# ifdef INT16_MAX
+# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
+# endif
+# ifdef UINT16_MAX
+# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
+# endif
+# ifdef INT32_MAX
+# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
+# endif
+# ifdef UINT32_MAX
+# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
+# endif
+# ifdef INT64_MAX
+# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
+# endif
+# ifdef UINT64_MAX
+# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
+# endif
+# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
+# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
+# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
+# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
+# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
+# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
+# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
+# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
+# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
+# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
+# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
+# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
+# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
+# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
+# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
+# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
+# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
+# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
+# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
+# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
+# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
+# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
+# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
+# ifdef WINT_MAX
+# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
+# endif
+# ifdef SIG_ATOMIC_MAX
+# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
+# endif
+#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
+
+#endif /* _@GUARD_PREFIX@_STDINT_H */
+#endif /* !(defined __ANDROID__ && ...) */
+#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
new file mode 100644
index 0000000..46608be
--- /dev/null
+++ b/lib/stdio-impl.h
@@ -0,0 +1,218 @@
+/* Implementation details of FILE streams.
+ Copyright (C) 2007-2008, 2010-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Many stdio implementations have the same logic and therefore can share
+ the same implementation of stdio extension API, except that some fields
+ have different naming conventions, or their access requires some casts. */
+
+/* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private. For now, work
+ around this problem by defining them ourselves. FIXME: Do not rely on glibc
+ internals. */
+#if defined _IO_EOF_SEEN
+# if !defined _IO_UNBUFFERED
+# define _IO_UNBUFFERED 0x2
+# endif
+# if !defined _IO_IN_BACKUP
+# define _IO_IN_BACKUP 0x100
+# endif
+#endif
+
+/* BSD stdio derived implementations. */
+
+#if defined __NetBSD__ /* NetBSD */
+/* Get __NetBSD_Version__. */
+# include <sys/param.h>
+#endif
+
+#include <errno.h> /* For detecting Plan9. */
+
+#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+
+# if defined __DragonFly__ /* DragonFly */
+ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */
+# define fp_ ((struct { struct __FILE_public pub; \
+ struct { unsigned char *_base; int _size; } _bf; \
+ void *cookie; \
+ void *_close; \
+ void *_read; \
+ void *_seek; \
+ void *_write; \
+ struct { unsigned char *_base; int _size; } _ub; \
+ int _ur; \
+ unsigned char _ubuf[3]; \
+ unsigned char _nbuf[1]; \
+ struct { unsigned char *_base; int _size; } _lb; \
+ int _blksize; \
+ fpos_t _offset; \
+ /* More fields, not relevant here. */ \
+ } *) fp)
+ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */
+# define _p pub._p
+# define _flags pub._flags
+# define _r pub._r
+# define _w pub._w
+# elif defined __ANDROID__ /* Android */
+# ifdef __LP64__
+# define _gl_flags_file_t int
+# else
+# define _gl_flags_file_t short
+# endif
+# ifdef __LP64__
+# define _gl_file_offset_t int64_t
+# else
+ /* see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md */
+# define _gl_file_offset_t __kernel_off_t
+# endif
+ /* Up to this commit from 2015-10-12
+ <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
+ the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
+ see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
+ and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
+ After this commit, the innards of FILE are hidden. */
+# define fp_ ((struct { unsigned char *_p; \
+ int _r; \
+ int _w; \
+ _gl_flags_file_t _flags; \
+ _gl_flags_file_t _file; \
+ struct { unsigned char *_base; size_t _size; } _bf; \
+ int _lbfsize; \
+ void *_cookie; \
+ void *_close; \
+ void *_read; \
+ void *_seek; \
+ void *_write; \
+ struct { unsigned char *_base; size_t _size; } _ext; \
+ unsigned char *_up; \
+ int _ur; \
+ unsigned char _ubuf[3]; \
+ unsigned char _nbuf[1]; \
+ struct { unsigned char *_base; size_t _size; } _lb; \
+ int _blksize; \
+ _gl_file_offset_t _offset; \
+ /* More fields, not relevant here. */ \
+ } *) fp)
+# else
+# define fp_ fp
+# endif
+
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
+ /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+ and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+ and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
+ struct __sfileext
+ {
+ struct __sbuf _ub; /* ungetc buffer */
+ /* More fields, not relevant here. */
+ };
+# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+# elif defined __ANDROID__ /* Android */
+ struct __sfileext
+ {
+ struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
+ /* More fields, not relevant here. */
+ };
+# define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub
+# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
+# define fp_ub fp_->_ub
+# endif
+
+# define HASUB(fp) (fp_ub._base != NULL)
+
+# if defined __ANDROID__ /* Android */
+ /* Needed after this commit from 2016-01-25
+ <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
+# ifndef __SEOF
+# define __SLBF 1
+# define __SNBF 2
+# define __SRD 4
+# define __SWR 8
+# define __SRW 0x10
+# define __SEOF 0x20
+# define __SERR 0x40
+# endif
+# ifndef __SOFF
+# define __SOFF 0x1000
+# endif
+# endif
+
+#endif
+
+
+/* SystemV derived implementations. */
+
+#ifdef __TANDEM /* NonStop Kernel */
+# ifndef _IOERR
+/* These values were determined by the program 'stdioext-flags' at
+ <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
+# define _IOERR 0x40
+# define _IOREAD 0x80
+# define _IOWRT 0x4
+# define _IORW 0x100
+# endif
+#endif
+
+#if defined _IOERR
+
+# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
+# define fp_ ((struct { unsigned char *_ptr; \
+ unsigned char *_base; \
+ unsigned char *_end; \
+ long _cnt; \
+ int _file; \
+ unsigned int _flag; \
+ } *) fp)
+# elif defined __VMS /* OpenVMS */
+# define fp_ ((struct _iobuf *) fp)
+# else
+# define fp_ fp
+# endif
+
+# if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer 5, OpenServer 6, UnixWare 7 */
+# define _cnt __cnt
+# define _ptr __ptr
+# define _base __base
+# define _flag __flag
+# endif
+
+#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */
+
+/* <stdio.h> does not define the innards of FILE any more. */
+# define WINDOWS_OPAQUE_FILE
+
+struct _gl_real_FILE
+{
+ /* Note: Compared to older Windows and to mingw, it has the fields
+ _base and _cnt swapped. */
+ unsigned char *_ptr;
+ unsigned char *_base;
+ int _cnt;
+ int _flag;
+ int _file;
+ int _charbuf;
+ int _bufsiz;
+};
+# define fp_ ((struct _gl_real_FILE *) fp)
+
+/* These values were determined by a program similar to the one at
+ <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
+# define _IOREAD 0x1
+# define _IOWRT 0x2
+# define _IORW 0x4
+# define _IOEOF 0x8
+# define _IOERR 0x10
+
+#endif
diff --git a/lib/stdio-read.c b/lib/stdio-read.c
new file mode 100644
index 0000000..6e2984c
--- /dev/null
+++ b/lib/stdio-read.c
@@ -0,0 +1,168 @@
+/* POSIX compatible FILE stream read function.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdio.h>
+
+/* Replace these functions only if module 'nonblocking' is requested. */
+#if GNULIB_NONBLOCKING
+
+/* On native Windows platforms, when read() is called on a non-blocking pipe
+ with an empty buffer, ReadFile() fails with error GetLastError() =
+ ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This
+ read() function is at the basis of the function which fills the buffer of
+ a FILE stream. */
+
+# if defined _WIN32 && ! defined __CYGWIN__
+
+# include <errno.h>
+# include <io.h>
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
+# define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \
+ if (ferror (stream)) \
+ return (EXPRESSION); \
+ else \
+ { \
+ RETTYPE ret; \
+ SetLastError (0); \
+ ret = (EXPRESSION); \
+ if (FAILED) \
+ { \
+ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0) \
+ { \
+ HANDLE h = (HANDLE) _get_osfhandle (fd); \
+ if (GetFileType (h) == FILE_TYPE_PIPE) \
+ { \
+ /* h is a pipe or socket. */ \
+ DWORD state; \
+ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \
+ NULL, NULL, 0) \
+ && (state & PIPE_NOWAIT) != 0) \
+ /* h is a pipe in non-blocking mode. \
+ Change errno from EINVAL to EAGAIN. */ \
+ errno = EAGAIN; \
+ } \
+ } \
+ } \
+ } \
+ return ret; \
+ }
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_SCANF
+int
+scanf (const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfscanf (stdin, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_FSCANF
+int
+fscanf (FILE *stream, const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfscanf (stream, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_VSCANF
+int
+vscanf (const char *format, va_list args)
+{
+ return vfscanf (stdin, format, args);
+}
+# endif
+
+/* Enable this function definition only if gnulib's <stdio.h> has prepared it.
+ Otherwise we get a function definition conflict with mingw64's <stdio.h>. */
+# if GNULIB_VFSCANF
+int
+vfscanf (FILE *stream, const char *format, va_list args)
+#undef vfscanf
+{
+ CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF)
+}
+# endif
+
+int
+getchar (void)
+{
+ return fgetc (stdin);
+}
+
+int
+fgetc (FILE *stream)
+#undef fgetc
+{
+ CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF)
+}
+
+char *
+fgets (char *s, int n, FILE *stream)
+#undef fgets
+{
+ CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL)
+}
+
+/* We intentionally don't bother to fix gets. */
+
+size_t
+fread (void *ptr, size_t s, size_t n, FILE *stream)
+#undef fread
+{
+ CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n)
+}
+
+# endif
+#endif
diff --git a/lib/stdio-write.c b/lib/stdio-write.c
new file mode 100644
index 0000000..9cf36cc
--- /dev/null
+++ b/lib/stdio-write.c
@@ -0,0 +1,206 @@
+/* POSIX compatible FILE stream write function.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <stdio.h>
+
+/* Replace these functions only if module 'nonblocking' or module 'sigpipe' is
+ requested. */
+#if GNULIB_NONBLOCKING || GNULIB_SIGPIPE
+
+/* On native Windows platforms, SIGPIPE does not exist. When write() is
+ called on a pipe with no readers, WriteFile() fails with error
+ GetLastError() = ERROR_NO_DATA, and write() in consequence fails with
+ error EINVAL. This write() function is at the basis of the function
+ which flushes the buffer of a FILE stream. */
+
+# if defined _WIN32 && ! defined __CYGWIN__
+
+# include <errno.h>
+# include <signal.h>
+# include <io.h>
+
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+
+# if GNULIB_MSVC_NOTHROW
+# include "msvc-nothrow.h"
+# else
+# include <io.h>
+# endif
+
+/* Don't assume that UNICODE is not defined. */
+# undef GetNamedPipeHandleState
+# define GetNamedPipeHandleState GetNamedPipeHandleStateA
+
+# if GNULIB_NONBLOCKING
+# define CLEAR_ERRNO \
+ errno = 0;
+# define HANDLE_ENOSPC \
+ if (errno == ENOSPC && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0) \
+ { \
+ HANDLE h = (HANDLE) _get_osfhandle (fd); \
+ if (GetFileType (h) == FILE_TYPE_PIPE) \
+ { \
+ /* h is a pipe or socket. */ \
+ DWORD state; \
+ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \
+ NULL, NULL, 0) \
+ && (state & PIPE_NOWAIT) != 0) \
+ /* h is a pipe in non-blocking mode. \
+ Change errno from ENOSPC to EAGAIN. */ \
+ errno = EAGAIN; \
+ } \
+ } \
+ } \
+ else
+# else
+# define CLEAR_ERRNO
+# define HANDLE_ENOSPC
+# endif
+
+# if GNULIB_SIGPIPE
+# define CLEAR_LastError \
+ SetLastError (0);
+# define HANDLE_ERROR_NO_DATA \
+ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \
+ { \
+ int fd = fileno (stream); \
+ if (fd >= 0 \
+ && GetFileType ((HANDLE) _get_osfhandle (fd)) \
+ == FILE_TYPE_PIPE) \
+ { \
+ /* Try to raise signal SIGPIPE. */ \
+ raise (SIGPIPE); \
+ /* If it is currently blocked or ignored, change errno from \
+ EINVAL to EPIPE. */ \
+ errno = EPIPE; \
+ } \
+ } \
+ else
+# else
+# define CLEAR_LastError
+# define HANDLE_ERROR_NO_DATA
+# endif
+
+# define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \
+ if (ferror (stream)) \
+ return (EXPRESSION); \
+ else \
+ { \
+ RETTYPE ret; \
+ CLEAR_ERRNO \
+ CLEAR_LastError \
+ ret = (EXPRESSION); \
+ if (FAILED) \
+ { \
+ HANDLE_ENOSPC \
+ HANDLE_ERROR_NO_DATA \
+ ; \
+ } \
+ return ret; \
+ }
+
+# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */
+int
+printf (const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfprintf (stdout, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */
+int
+fprintf (FILE *stream, const char *format, ...)
+{
+ int retval;
+ va_list args;
+
+ va_start (args, format);
+ retval = vfprintf (stream, format, args);
+ va_end (args);
+
+ return retval;
+}
+# endif
+
+# if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */
+int
+vprintf (const char *format, va_list args)
+{
+ return vfprintf (stdout, format, args);
+}
+# endif
+
+# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */
+int
+vfprintf (FILE *stream, const char *format, va_list args)
+#undef vfprintf
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF)
+}
+# endif
+
+int
+putchar (int c)
+{
+ return fputc (c, stdout);
+}
+
+int
+fputc (int c, FILE *stream)
+#undef fputc
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF)
+}
+
+int
+fputs (const char *string, FILE *stream)
+#undef fputs
+{
+ CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF)
+}
+
+int
+puts (const char *string)
+#undef puts
+{
+ FILE *stream = stdout;
+ CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF)
+}
+
+size_t
+fwrite (const void *ptr, size_t s, size_t n, FILE *stream)
+#undef fwrite
+{
+ CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n)
+}
+
+# endif
+#endif
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
new file mode 100644
index 0000000..098f841
--- /dev/null
+++ b/lib/stdio.in.h
@@ -0,0 +1,1734 @@
+/* A GNU-like <stdio.h>.
+
+ Copyright (C) 2004, 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+/* Special invocation convention:
+ - Inside glibc header files.
+ - On OSF/1 5.1 we have a sequence of nested includes
+ <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
+ <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
+ In this situation, the functions are not yet declared, therefore we cannot
+ provide the C++ aliases. */
+
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+
+/* Suppress macOS deprecation warnings for sprintf and vsprintf. */
+#if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE
+# define _POSIX_C_SOURCE 200809L
+# define _GL_DEFINED__POSIX_C_SOURCE
+#endif
+
+#define _GL_ALREADY_INCLUDING_STDIO_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#undef _GL_ALREADY_INCLUDING_STDIO_H
+
+#ifdef _GL_DEFINED__POSIX_C_SOURCE
+# undef _GL_DEFINED__POSIX_C_SOURCE
+# undef _POSIX_C_SOURCE
+#endif
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+#define _@GUARD_PREFIX@_STDIO_H
+
+/* Get va_list. Needed on many systems, including glibc 2.8. */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8
+ and eglibc 2.11.2.
+ May also define off_t to a 64-bit type on native Windows. */
+#include <sys/types.h>
+
+/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
+ && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
+ && ! defined __GLIBC__
+# include <sys/stat.h>
+#endif
+
+/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include
+ it before we #define perror rpl_perror. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include
+ it before we #define remove rpl_remove. */
+/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include
+ it before we #define rename rpl_rename. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__) \
+ && ! defined __GLIBC__
+# include <io.h>
+#endif
+
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The __-protected variants of the attributes 'format' and 'printf' are
+ accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+ We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+ gnulib and libintl do '#define printf __printf__' when they override
+ the 'printf' function. */
+#ifndef _GL_ATTRIBUTE_FORMAT
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+# else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+# endif
+#endif
+
+/* An __attribute__ __format__ specifier for a function that takes a format
+ string and arguments, where the format string directives are the ones
+ standardized by ISO C99 and POSIX.
+ _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */
+/* __gnu_printf__ is supported in GCC >= 4.4. */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__
+#else
+# define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__
+#endif
+
+/* An __attribute__ __format__ specifier for a function that takes a format
+ string and arguments, where the format string directives are the ones of the
+ system printf(), rather than the ones standardized by ISO C99 and POSIX.
+ _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */
+/* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to
+ the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates
+ whether this change is effective. On older mingw, it is not. */
+#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD
+#else
+# define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD
+ indicates to GCC that the function takes a format string and arguments,
+ where the format string directives are the ones standardized by ISO C99
+ and POSIX. */
+#define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument))
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD,
+ except that it indicates to GCC that the supported format string directives
+ are the ones of the system printf(), rather than the ones standardized by
+ ISO C99 and POSIX. */
+#define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument))
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF
+ indicates to GCC that the function takes a format string and arguments,
+ where the format string directives are the ones standardized by ISO C99
+ and POSIX. */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
+ except that it indicates to GCC that the supported format string directives
+ are the ones of the system scanf(), rather than the ones standardized by
+ ISO C99 and POSIX. */
+#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
+ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Macros for stringification. */
+#define _GL_STDIO_STRINGIZE(token) #token
+#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
+
+/* When also using extern inline, suppress the use of static inline in
+ standard headers of problematic Apple configurations, as Libc at
+ least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
+ <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>.
+ Perhaps Apple will fix this some day. */
+#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \
+ && defined __GNUC__ && defined __STDC__)
+# undef putc_unlocked
+#endif
+
+#if @GNULIB_DPRINTF@
+# if @REPLACE_DPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define dprintf rpl_dprintf
+# endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...));
+# else
+# if !@HAVE_DPRINTF@
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (dprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+ "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_FCLOSE@
+/* Close STREAM and its underlying file descriptor. */
+# if @REPLACE_FCLOSE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define fclose rpl_fclose
+# endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fclose);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared. */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+ "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if @GNULIB_MDA_FCLOSEALL@
+/* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is
+ not required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have
+ it. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fcloseall
+# define fcloseall _fcloseall
+# endif
+_GL_CXXALIAS_MDA (fcloseall, int, (void));
+# else
+# if @HAVE_DECL_FCLOSEALL@
+# if defined __FreeBSD__ || defined __DragonFly__
+_GL_CXXALIAS_SYS (fcloseall, void, (void));
+# else
+_GL_CXXALIAS_SYS (fcloseall, int, (void));
+# endif
+# endif
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCLOSEALL@
+_GL_CXXALIASWARN (fcloseall);
+# endif
+#endif
+
+#if @GNULIB_FDOPEN@
+# if @REPLACE_FDOPEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fdopen
+# define fdopen rpl_fdopen
+# endif
+_GL_FUNCDECL_RPL (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fdopen
+# define fdopen _fdopen
+# endif
+_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen
+/* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+ (int fd, const char *mode)
+ _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef fdopen
+/* Assume fdopen is always declared. */
+_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
+ "use gnulib module fdopen for portability");
+# elif @GNULIB_MDA_FDOPEN@
+/* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::fdopen always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fdopen
+# define fdopen _fdopen
+# endif
+_GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+# endif
+#endif
+
+#if @GNULIB_FFLUSH@
+/* Flush all pending data on STREAM according to POSIX rules. Both
+ output and seekable input streams are supported.
+ Note! LOSS OF DATA can occur if fflush is applied on an input stream
+ that is _not_seekable_ or on an update stream that is _not_seekable_
+ and in which the most recent operation was input. Seekability can
+ be tested with lseek(fileno(fp),0,SEEK_CUR). */
+# if @REPLACE_FFLUSH@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define fflush rpl_fflush
+# endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fflush);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared. */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+ "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FGETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fgetc
+# define fgetc rpl_fgetc
+# endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fgetc);
+# endif
+#endif
+
+#if @GNULIB_FGETS@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fgets
+# define fgets rpl_fgets
+# endif
+_GL_FUNCDECL_RPL (fgets, char *,
+ (char *restrict s, int n, FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (fgets, char *,
+ (char *restrict s, int n, FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (fgets, char *,
+ (char *restrict s, int n, FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fgets);
+# endif
+#endif
+
+#if @GNULIB_MDA_FILENO@
+/* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::fileno always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fileno
+# define fileno _fileno
+# endif
+_GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream));
+# endif
+_GL_CXXALIASWARN (fileno);
+#endif
+
+#if @GNULIB_FOPEN@
+# if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \
+ || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fopen
+# define fopen rpl_fopen
+# endif
+_GL_FUNCDECL_RPL (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+_GL_CXXALIAS_RPL (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+_GL_CXXALIAS_SYS (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fopen);
+# endif
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen
+/* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (fopen, FILE *,
+ (const char *restrict filename, const char *restrict mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared. */
+_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
+ "use gnulib module fopen for portability");
+# endif
+#endif
+
+#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
+# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
+ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define fprintf rpl_fprintf
+# endif
+# define GNULIB_overrides_fprintf 1
+# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (fprintf, int,
+ (FILE *restrict fp, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+# else
+_GL_FUNCDECL_RPL (fprintf, int,
+ (FILE *restrict fp, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_RPL (fprintf, int,
+ (FILE *restrict fp, const char *restrict format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int,
+ (FILE *restrict fp, const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fprintf);
+# endif
+#endif
+#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+# undef fprintf
+# endif
+/* Assume fprintf is always declared. */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+ "use gnulib module fprintf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#if @GNULIB_FPURGE@
+/* Discard all pending buffered I/O data on STREAM.
+ STREAM must not be wide-character oriented.
+ When discarding pending output, the file position is set back to where it
+ was before the write calls. When discarding pending input, the file
+ position is advanced to match the end of the previously read input.
+ Return 0 if successful. Upon error, return -1 and set errno. */
+# if @REPLACE_FPURGE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define fpurge rpl_fpurge
+# endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+# if !@HAVE_DECL_FPURGE@
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+ "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if @GNULIB_FPUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fputc
+# define fputc rpl_fputc
+# endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fputc);
+# endif
+#endif
+
+#if @GNULIB_FPUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fputs
+# define fputs rpl_fputs
+# endif
+_GL_FUNCDECL_RPL (fputs, int,
+ (const char *restrict string, FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int,
+ (const char *restrict string, FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int,
+ (const char *restrict string, FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fputs);
+# endif
+#endif
+
+#if @GNULIB_FREAD@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fread
+# define fread rpl_fread
+# endif
+_GL_FUNCDECL_RPL (fread, size_t,
+ (void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((4)));
+_GL_CXXALIAS_RPL (fread, size_t,
+ (void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (fread, size_t,
+ (void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fread);
+# endif
+#endif
+
+#if @GNULIB_FREOPEN@
+# if @REPLACE_FREOPEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef freopen
+# define freopen rpl_freopen
+# endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+ (const char *restrict filename, const char *restrict mode,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+ (const char *restrict filename, const char *restrict mode,
+ FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+ (const char *restrict filename, const char *restrict mode,
+ FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (freopen);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared. */
+_GL_WARN_ON_USE (freopen,
+ "freopen on native Windows platforms is not POSIX compliant - "
+ "use gnulib module freopen for portability");
+#endif
+
+#if @GNULIB_FSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fscanf
+# define fscanf rpl_fscanf
+# endif
+_GL_FUNCDECL_RPL (fscanf, int,
+ (FILE *restrict stream, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fscanf, int,
+ (FILE *restrict stream, const char *restrict format, ...));
+# else
+_GL_CXXALIAS_SYS (fscanf, int,
+ (FILE *restrict stream, const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fscanf);
+# endif
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+ GNU Coding Standards discourage the use of fseek, since it imposes
+ an arbitrary limitation on some 32-bit hosts. Remember that the
+ fseek module depends on the fseeko module, so we only have three
+ cases to consider:
+
+ 1. The developer is not using either module. Issue a warning under
+ GNULIB_POSIXCHECK for both functions, to remind them that both
+ functions have bugs on some systems. _GL_NO_LARGE_FILES has no
+ impact on this warning.
+
+ 2. The developer is using both modules. They may be unaware of the
+ arbitrary limitations of fseek, so issue a warning under
+ GNULIB_POSIXCHECK. On the other hand, they may be using both
+ modules intentionally, so the developer can define
+ _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+ is safe, to silence the warning.
+
+ 3. The developer is using the fseeko module, but not fseek. Gnulib
+ guarantees that fseek will still work around platform bugs in that
+ case, but we presume that the developer is aware of the pitfalls of
+ fseek and was trying to avoid it, so issue a warning even when
+ GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be
+ defined to silence the warning in particular compilation units.
+ In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+ fseek gets defined as a macro, it is recommended that the developer
+ uses the fseek module, even if he is not calling the fseek function.
+
+ Most gnulib clients that perform stream operations should fall into
+ category 3. */
+
+#if @GNULIB_FSEEK@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+# define _GL_FSEEK_WARN /* Category 2, above. */
+# undef fseek
+# endif
+# if @REPLACE_FSEEK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fseek
+# define fseek rpl_fseek
+# endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fseek);
+# endif
+#endif
+
+#if @GNULIB_FSEEKO@
+# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
+# define _GL_FSEEK_WARN /* Category 3, above. */
+# undef fseek
+# endif
+# if @REPLACE_FSEEKO@
+/* Provide an fseeko function that is aware of a preceding fflush(), and which
+ detects pipes. */
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fseeko
+# define fseeko rpl_fseeko
+# endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+# if ! @HAVE_DECL_FSEEKO@
+_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above. */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+ "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+ declared), or it is defined as rpl_fseek (declared above). */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+ "on 32-bit platforms - "
+ "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello. See the comments on fseek/fseeko. */
+
+#if @GNULIB_FTELL@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+# define _GL_FTELL_WARN /* Category 2, above. */
+# undef ftell
+# endif
+# if @REPLACE_FTELL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ftell
+# define ftell rpl_ftell
+# endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (ftell);
+# endif
+#endif
+
+#if @GNULIB_FTELLO@
+# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
+# define _GL_FTELL_WARN /* Category 3, above. */
+# undef ftell
+# endif
+# if @REPLACE_FTELLO@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ftello
+# define ftello rpl_ftello
+# endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+# if ! @HAVE_DECL_FTELLO@
+_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above. */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+ "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+ declared), or it is defined as rpl_ftell (declared above). */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+ "on 32-bit platforms - "
+ "use ftello function for handling of large files");
+#endif
+
+
+#if @GNULIB_FWRITE@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fwrite
+# define fwrite rpl_fwrite
+# endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+ (const void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+ (const void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+ (const void *restrict ptr, size_t s, size_t n,
+ FILE *restrict stream));
+
+/* Work around bug 11959 when fortifying glibc 2.4 through 2.15
+ <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>,
+ which sometimes causes an unwanted diagnostic for fwrite calls.
+ This affects only function declaration attributes under certain
+ versions of gcc and clang, and is not needed for C++. */
+# if (0 < __USE_FORTIFY_LEVEL \
+ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \
+ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \
+ && !defined __cplusplus)
+# undef fwrite
+# undef fwrite_unlocked
+extern size_t __REDIRECT (rpl_fwrite,
+ (const void *__restrict, size_t, size_t,
+ FILE *__restrict),
+ fwrite);
+extern size_t __REDIRECT (rpl_fwrite_unlocked,
+ (const void *__restrict, size_t, size_t,
+ FILE *__restrict),
+ fwrite_unlocked);
+# define fwrite rpl_fwrite
+# define fwrite_unlocked rpl_fwrite_unlocked
+# endif
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fwrite);
+# endif
+#endif
+
+#if @GNULIB_GETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getc
+# define getc rpl_fgetc
+# endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (getc, int, (FILE *stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getc);
+# endif
+#endif
+
+#if @GNULIB_GETCHAR@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getchar
+# define getchar rpl_getchar
+# endif
+_GL_FUNCDECL_RPL (getchar, int, (void));
+_GL_CXXALIAS_RPL (getchar, int, (void));
+# else
+_GL_CXXALIAS_SYS (getchar, int, (void));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getchar);
+# endif
+#endif
+
+#if @GNULIB_GETDELIM@
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+ STREAM, store it in *LINEPTR (and NUL-terminate it).
+ *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+ bytes of space. It is realloc'd as necessary.
+ Return the number of bytes read and stored at *LINEPTR (not including the
+ NUL terminator), or -1 on error or EOF. */
+# if @REPLACE_GETDELIM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getdelim
+# define getdelim rpl_getdelim
+# endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ int delimiter,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ int delimiter,
+ FILE *restrict stream));
+# else
+# if !@HAVE_DECL_GETDELIM@
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ int delimiter,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 2, 4)));
+# endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ int delimiter,
+ FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getdelim);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+ "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLINE@
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+ in *LINEPTR (and NUL-terminate it).
+ *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+ bytes of space. It is realloc'd as necessary.
+ Return the number of bytes read and stored at *LINEPTR (not including the
+ NUL terminator), or -1 on error or EOF. */
+# if @REPLACE_GETLINE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getline
+# define getline rpl_getline
+# endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ FILE *restrict stream));
+# else
+# if !@HAVE_DECL_GETLINE@
+_GL_FUNCDECL_SYS (getline, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ FILE *restrict stream)
+ _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+ (char **restrict lineptr, size_t *restrict linesize,
+ FILE *restrict stream));
+# endif
+# if __GLIBC__ >= 2 && @HAVE_DECL_GETLINE@
+_GL_CXXALIASWARN (getline);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+ "use gnulib module getline for portability");
+# endif
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+ so any use of gets warrants an unconditional warning; besides, C11
+ removed it. */
+#undef gets
+#if HAVE_RAW_DECL_GETS && !defined __cplusplus
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
+
+#if @GNULIB_MDA_GETW@
+/* On native Windows, map 'getw' to '_getw', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::getw always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getw
+# define getw _getw
+# endif
+_GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream));
+# else
+# if @HAVE_DECL_GETW@
+_GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream));
+# endif
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getw);
+# endif
+#endif
+
+#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
+struct obstack;
+/* Grow an obstack with formatted output. Return the number of
+ bytes added to OBS. No trailing nul byte is added, and the
+ object should be closed with obstack_finish before use. Upon
+ memory allocation error, call obstack_alloc_failed_handler. Upon
+ other error, return -1. */
+# if @REPLACE_OBSTACK_PRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define obstack_printf rpl_obstack_printf
+# endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+ (struct obstack *obs, const char *format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+ (struct obstack *obs, const char *format, ...));
+# else
+# if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_printf, int,
+ (struct obstack *obs, const char *format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+ (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if @REPLACE_OBSTACK_PRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define obstack_vprintf rpl_obstack_vprintf
+# endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+ (struct obstack *obs, const char *format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+ (struct obstack *obs, const char *format, va_list args));
+# else
+# if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+ (struct obstack *obs, const char *format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+ (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if @GNULIB_PCLOSE@
+# if !@HAVE_PCLOSE@
+_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
+_GL_CXXALIASWARN (pclose);
+#elif defined GNULIB_POSIXCHECK
+# undef pclose
+# if HAVE_RAW_DECL_PCLOSE
+_GL_WARN_ON_USE (pclose, "pclose is unportable - "
+ "use gnulib module pclose for more portability");
+# endif
+#endif
+
+#if @GNULIB_PERROR@
+/* Print a message to standard error, describing the value of ERRNO,
+ (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+ and terminated with a newline. */
+# if @REPLACE_PERROR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define perror rpl_perror
+# endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (perror);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared. */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+ "use gnulib module perror for portability");
+#endif
+
+#if @GNULIB_POPEN@
+# if @REPLACE_POPEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef popen
+# define popen rpl_popen
+# endif
+_GL_FUNCDECL_RPL (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+# if !@HAVE_POPEN@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
+# endif
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#else
+# if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined popen
+/* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */
+_GL_FUNCDECL_SYS (popen, FILE *,
+ (const char *cmd, const char *mode)
+ _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+ "use gnulib module popen or pipe for more portability");
+# endif
+# endif
+#endif
+
+#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
+# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
+ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+# if defined __GNUC__ || defined __clang__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))). */
+# define printf __printf__
+# endif
+# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+ (const char *restrict format, ...)
+ __asm__ (@ASM_SYMBOL_PREFIX@
+ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2)
+ _GL_ARG_NONNULL ((1)));
+# else
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+ (const char *restrict format, ...)
+ __asm__ (@ASM_SYMBOL_PREFIX@
+ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+ _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+# else
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define printf rpl_printf
+# endif
+_GL_FUNCDECL_RPL (printf, int,
+ (const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...));
+# endif
+# define GNULIB_overrides_printf 1
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (printf);
+# endif
+#endif
+#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+# undef printf
+# endif
+/* Assume printf is always declared. */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+ "use gnulib module printf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#if @GNULIB_PUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putc
+# define putc rpl_fputc
+# endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (putc);
+# endif
+#endif
+
+#if @GNULIB_PUTCHAR@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putchar
+# define putchar rpl_putchar
+# endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (putchar);
+# endif
+#endif
+
+#if @GNULIB_PUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef puts
+# define puts rpl_puts
+# endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (puts);
+# endif
+#endif
+
+#if @GNULIB_MDA_PUTW@
+/* On native Windows, map 'putw' to '_putw', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::putw always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putw
+# define putw _putw
+# endif
+_GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream));
+# else
+# if @HAVE_DECL_PUTW@
+_GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream));
+# endif
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (putw);
+# endif
+#endif
+
+#if @GNULIB_REMOVE@
+# if @REPLACE_REMOVE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef remove
+# define remove rpl_remove
+# endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (remove);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared. */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+ "use gnulib module remove for more portability");
+#endif
+
+#if @GNULIB_RENAME@
+# if @REPLACE_RENAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef rename
+# define rename rpl_rename
+# endif
+_GL_FUNCDECL_RPL (rename, int,
+ (const char *old_filename, const char *new_filename)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+ (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+ (const char *old_filename, const char *new_filename));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (rename);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared. */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+ "use gnulib module rename for more portability");
+#endif
+
+#if @GNULIB_RENAMEAT@
+# if @REPLACE_RENAMEAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef renameat
+# define renameat rpl_renameat
+# endif
+_GL_FUNCDECL_RPL (renameat, int,
+ (int fd1, char const *file1, int fd2, char const *file2)
+ _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+ (int fd1, char const *file1, int fd2, char const *file2));
+# else
+# if !@HAVE_RENAMEAT@
+_GL_FUNCDECL_SYS (renameat, int,
+ (int fd1, char const *file1, int fd2, char const *file2)
+ _GL_ARG_NONNULL ((2, 4)));
+# endif
+_GL_CXXALIAS_SYS (renameat, int,
+ (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+ "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if @GNULIB_SCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if defined __GNUC__ || defined __clang__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef scanf
+/* Don't break __attribute__((format(scanf,M,N))). */
+# define scanf __scanf__
+# endif
+_GL_FUNCDECL_RPL_1 (__scanf__, int,
+ (const char *restrict format, ...)
+ __asm__ (@ASM_SYMBOL_PREFIX@
+ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
+ _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...));
+# else
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef scanf
+# define scanf rpl_scanf
+# endif
+_GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...));
+# endif
+# else
+_GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (scanf);
+# endif
+#endif
+
+#if @GNULIB_SNPRINTF@
+# if @REPLACE_SNPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define snprintf rpl_snprintf
+# endif
+# define GNULIB_overrides_snprintf 1
+_GL_FUNCDECL_RPL (snprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4)
+ _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, ...));
+# else
+# if !@HAVE_DECL_SNPRINTF@
+_GL_FUNCDECL_SYS (snprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4)
+ _GL_ARG_NONNULL ((3)));
+# endif
+_GL_CXXALIAS_SYS (snprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (snprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+ "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that all sprintf uses should be warned about
+ (for example, OpenBSD issues a link warning for it),
+ since it can cause security holes due to buffer overruns.
+ However, we believe that sprintf can be used safely, and is more
+ efficient than snprintf in those safe cases; and as proof of our
+ belief, we use sprintf in several gnulib modules. So this header
+ intentionally avoids adding a warning to sprintf except when
+ GNULIB_POSIXCHECK is defined. */
+
+#if @GNULIB_SPRINTF_POSIX@
+# if @REPLACE_SPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define sprintf rpl_sprintf
+# endif
+# define GNULIB_overrides_sprintf 1
+_GL_FUNCDECL_RPL (sprintf, int,
+ (char *restrict str, const char *restrict format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int,
+ (char *restrict str, const char *restrict format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int,
+ (char *restrict str, const char *restrict format, ...));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (sprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared. */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+ "use gnulib module sprintf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#if @GNULIB_MDA_TEMPNAM@
+/* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::tempnam always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef tempnam
+# define tempnam _tempnam
+# endif
+_GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix));
+# else
+_GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix));
+# endif
+_GL_CXXALIASWARN (tempnam);
+#endif
+
+#if @GNULIB_TMPFILE@
+# if @REPLACE_TMPFILE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define tmpfile rpl_tmpfile
+# endif
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (tmpfile);
+# endif
+#else
+# if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile
+/* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */
+_GL_FUNCDECL_SYS (tmpfile, FILE *, (void)
+ _GL_ATTRIBUTE_DEALLOC (fclose, 1));
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
+_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
+ "use gnulib module tmpfile for portability");
+# endif
+# endif
+#endif
+
+#if @GNULIB_VASPRINTF@
+/* Write formatted output to a string dynamically allocated with malloc().
+ If the memory allocation succeeds, store the address of the string in
+ *RESULT and return the number of resulting bytes, excluding the trailing
+ NUL. Upon memory allocation error, or some other error, return -1. */
+# if @REPLACE_VASPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define asprintf rpl_asprintf
+# endif
+# define GNULIB_overrides_asprintf
+_GL_FUNCDECL_RPL (asprintf, int,
+ (char **result, const char *format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+ (char **result, const char *format, ...));
+# else
+# if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (asprintf, int,
+ (char **result, const char *format, ...)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (asprintf, int,
+ (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if @REPLACE_VASPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vasprintf rpl_vasprintf
+# endif
+# define GNULIB_overrides_vasprintf 1
+_GL_FUNCDECL_RPL (vasprintf, int,
+ (char **result, const char *format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+ (char **result, const char *format, va_list args));
+# else
+# if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (vasprintf, int,
+ (char **result, const char *format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+ (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if @GNULIB_VDPRINTF@
+# if @REPLACE_VDPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vdprintf rpl_vdprintf
+# endif
+_GL_FUNCDECL_RPL (vdprintf, int,
+ (int fd, const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int,
+ (int fd, const char *restrict format, va_list args));
+# else
+# if !@HAVE_VDPRINTF@
+_GL_FUNCDECL_SYS (vdprintf, int,
+ (int fd, const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((2)));
+# endif
+/* Need to cast, because on Solaris, the third parameter will likely be
+ __va_list args. */
+_GL_CXXALIAS_SYS_CAST (vdprintf, int,
+ (int fd, const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vdprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+ "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
+# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
+ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vfprintf rpl_vfprintf
+# endif
+# define GNULIB_overrides_vfprintf 1
+# if @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vfprintf, int,
+ (FILE *restrict fp,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+# else
+_GL_FUNCDECL_RPL (vfprintf, int,
+ (FILE *restrict fp,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_RPL (vfprintf, int,
+ (FILE *restrict fp,
+ const char *restrict format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+ __va_list args
+ and GCC's fixincludes did not change this to __gnuc_va_list. */
+_GL_CXXALIAS_SYS_CAST (vfprintf, int,
+ (FILE *restrict fp,
+ const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vfprintf);
+# endif
+#endif
+#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+# undef vfprintf
+# endif
+/* Assume vfprintf is always declared. */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+ "use gnulib module vfprintf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#if @GNULIB_VFSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef vfscanf
+# define vfscanf rpl_vfscanf
+# endif
+_GL_FUNCDECL_RPL (vfscanf, int,
+ (FILE *restrict stream,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfscanf, int,
+ (FILE *restrict stream,
+ const char *restrict format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfscanf, int,
+ (FILE *restrict stream,
+ const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vfscanf);
+# endif
+#endif
+
+#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
+# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
+ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vprintf rpl_vprintf
+# endif
+# define GNULIB_overrides_vprintf 1
+# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0)
+ _GL_ARG_NONNULL ((1)));
+# else
+_GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args));
+# else
+/* Need to cast, because on Solaris, the second parameter is
+ __va_list args
+ and GCC's fixincludes did not change this to __gnuc_va_list. */
+_GL_CXXALIAS_SYS_CAST (vprintf, int,
+ (const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vprintf);
+# endif
+#endif
+#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+# undef vprintf
+# endif
+/* Assume vprintf is always declared. */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+ "use gnulib module vprintf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#if @GNULIB_VSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef vscanf
+# define vscanf rpl_vscanf
+# endif
+_GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vscanf);
+# endif
+#endif
+
+#if @GNULIB_VSNPRINTF@
+# if @REPLACE_VSNPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vsnprintf rpl_vsnprintf
+# endif
+# define GNULIB_overrides_vsnprintf 1
+_GL_FUNCDECL_RPL (vsnprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0)
+ _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, va_list args));
+# else
+# if !@HAVE_DECL_VSNPRINTF@
+_GL_FUNCDECL_SYS (vsnprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0)
+ _GL_ARG_NONNULL ((3)));
+# endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+ (char *restrict str, size_t size,
+ const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vsnprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+ "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VSPRINTF_POSIX@
+# if @REPLACE_VSPRINTF@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define vsprintf rpl_vsprintf
+# endif
+# define GNULIB_overrides_vsprintf 1
+_GL_FUNCDECL_RPL (vsprintf, int,
+ (char *restrict str,
+ const char *restrict format, va_list args)
+ _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+ (char *restrict str,
+ const char *restrict format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+ __va_list args
+ and GCC's fixincludes did not change this to __gnuc_va_list. */
+_GL_CXXALIAS_SYS_CAST (vsprintf, int,
+ (char *restrict str,
+ const char *restrict format, va_list args));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (vsprintf);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared. */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+ "use gnulib module vsprintf-posix for portable "
+ "POSIX compliance");
+#endif
+
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif
diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h
new file mode 100644
index 0000000..a91f4e2
--- /dev/null
+++ b/lib/stdlib.in.h
@@ -0,0 +1,1678 @@
+/* A GNU-like <stdlib.h>.
+
+ Copyright (C) 1995, 2001-2004, 2006-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc
+/* Special invocation conventions inside some gnulib header files,
+ and inside some glibc header files, respectively. */
+
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#ifndef _@GUARD_PREFIX@_STDLIB_H
+#define _@GUARD_PREFIX@_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL. */
+#include <stddef.h>
+
+/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */
+#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS
+# include <sys/wait.h>
+#endif
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>. */
+#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@
+/* OpenIndiana has a bug: <sys/time.h> must be included before
+ <sys/loadavg.h>. */
+# include <sys/time.h>
+# include <sys/loadavg.h>
+#endif
+
+/* Native Windows platforms declare _mktemp() in <io.h>. */
+#if defined _WIN32 && !defined __CYGWIN__
+# include <io.h>
+#endif
+
+#if @GNULIB_RANDOM_R@
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+ from <stdlib.h> if _REENTRANT is defined. Include it whenever we need
+ 'struct random_data'. */
+# if @HAVE_RANDOM_H@
+# include <random.h>
+# endif
+
+# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@
+# include <stdint.h>
+# endif
+
+# if !@HAVE_STRUCT_RANDOM_DATA@
+/* Define 'struct random_data'.
+ But allow multiple gnulib generated <stdlib.h> replacements to coexist. */
+# if !GNULIB_defined_struct_random_data
+struct random_data
+{
+ int32_t *fptr; /* Front pointer. */
+ int32_t *rptr; /* Rear pointer. */
+ int32_t *state; /* Array of state values. */
+ int rand_type; /* Type of random number generator. */
+ int rand_deg; /* Degree of random number generator. */
+ int rand_sep; /* Distance between front and rear. */
+ int32_t *end_ptr; /* Pointer behind state table. */
+};
+# define GNULIB_defined_struct_random_data 1
+# endif
+# endif
+#endif
+
+#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__)
+/* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */
+/* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */
+/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */
+/* But avoid namespace pollution on glibc systems and native Windows. */
+# include <unistd.h>
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The attribute __pure__ was added in gcc 2.96. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE /* empty */
+# endif
+#endif
+
+/* The definition of _Noreturn is copied here. */
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89. */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+ with proper operation of xargs. */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if @GNULIB__EXIT@
+/* Terminate the current process with the given return code, without running
+ the 'atexit' handlers. */
+# if @REPLACE__EXIT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef _Exit
+# define _Exit rpl__Exit
+# endif
+_GL_FUNCDECL_RPL (_Exit, _Noreturn void, (int status));
+_GL_CXXALIAS_RPL (_Exit, void, (int status));
+# else
+# if !@HAVE__EXIT@
+_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status));
+# endif
+_GL_CXXALIAS_SYS (_Exit, void, (int status));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (_Exit);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef _Exit
+# if HAVE_RAW_DECL__EXIT
+_GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
+ "use gnulib module _Exit for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FREE_POSIX@
+# if @REPLACE_FREE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef free
+# define free rpl_free
+# endif
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_FUNCDECL_RPL (free, void, (void *ptr) throw ());
+# else
+_GL_FUNCDECL_RPL (free, void, (void *ptr));
+# endif
+_GL_CXXALIAS_RPL (free, void, (void *ptr));
+# else
+_GL_CXXALIAS_SYS (free, void, (void *ptr));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (free);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef free
+/* Assume free is always declared. */
+_GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - "
+ "use gnulib module free for portability");
+#endif
+
+
+/* Allocate memory with indefinite extent and specified alignment. */
+#if @GNULIB_ALIGNED_ALLOC@
+# if @REPLACE_ALIGNED_ALLOC@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef aligned_alloc
+# define aligned_alloc rpl_aligned_alloc
+# endif
+_GL_FUNCDECL_RPL (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size));
+# else
+# if @HAVE_ALIGNED_ALLOC@
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size));
+# endif
+# endif
+# if (__GLIBC__ >= 2) && @HAVE_ALIGNED_ALLOC@
+_GL_CXXALIASWARN (aligned_alloc);
+# endif
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc
+/* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+ (size_t alignment, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef aligned_alloc
+# if HAVE_RAW_DECL_ALIGNED_ALLOC
+_GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - "
+ "use gnulib module aligned_alloc for portability");
+# endif
+# endif
+#endif
+
+#if @GNULIB_ATOLL@
+/* Parse a signed decimal integer.
+ Returns the value of the integer. Errors are not detected. */
+# if !@HAVE_ATOLL@
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+ "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if @GNULIB_CALLOC_POSIX@
+# if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \
+ || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef calloc
+# define calloc rpl_calloc
+# endif
+_GL_FUNCDECL_RPL (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (calloc);
+# endif
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc
+/* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (calloc, void *,
+ (size_t nmemb, size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared. */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+ "use gnulib module calloc-posix for portability");
+# endif
+#endif
+
+#if @GNULIB_CANONICALIZE_FILE_NAME@
+# if @REPLACE_CANONICALIZE_FILE_NAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define canonicalize_file_name rpl_canonicalize_file_name
+# endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+# if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+# ifndef GNULIB_defined_canonicalize_file_name
+# define GNULIB_defined_canonicalize_file_name \
+ (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@)
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name
+/* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or
+ rpl_free. */
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+ (const char *name)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name,
+ "canonicalize_file_name is unportable - "
+ "use gnulib module canonicalize-lgpl for portability");
+# endif
+# endif
+#endif
+
+#if @GNULIB_MDA_ECVT@
+/* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have
+ it. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ecvt
+# define ecvt _ecvt
+# endif
+_GL_CXXALIAS_MDA (ecvt, char *,
+ (double number, int ndigits, int *decptp, int *signp));
+# else
+# if @HAVE_DECL_ECVT@
+_GL_CXXALIAS_SYS (ecvt, char *,
+ (double number, int ndigits, int *decptp, int *signp));
+# endif
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@
+_GL_CXXALIASWARN (ecvt);
+# endif
+#endif
+
+#if @GNULIB_MDA_FCVT@
+/* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have
+ it. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fcvt
+# define fcvt _fcvt
+# endif
+_GL_CXXALIAS_MDA (fcvt, char *,
+ (double number, int ndigits, int *decptp, int *signp));
+# else
+# if @HAVE_DECL_FCVT@
+_GL_CXXALIAS_SYS (fcvt, char *,
+ (double number, int ndigits, int *decptp, int *signp));
+# endif
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@
+_GL_CXXALIASWARN (fcvt);
+# endif
+#endif
+
+#if @GNULIB_MDA_GCVT@
+/* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have
+ it. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef gcvt
+# define gcvt _gcvt
+# endif
+_GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf));
+# else
+# if @HAVE_DECL_GCVT@
+_GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf));
+# endif
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@
+_GL_CXXALIASWARN (gcvt);
+# endif
+#endif
+
+#if @GNULIB_GETLOADAVG@
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+ The three numbers are the load average of the last 1 minute, the last 5
+ minutes, and the last 15 minutes, respectively.
+ LOADAVG is an array of NELEM numbers. */
+# if @REPLACE_GETLOADAVG@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getloadavg
+# define getloadavg rpl_getloadavg
+# endif
+_GL_FUNCDECL_RPL (getloadavg, int, (double loadavg[], int nelem)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getloadavg, int, (double loadavg[], int nelem));
+# else
+# if !@HAVE_DECL_GETLOADAVG@
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getloadavg);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+ "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if @GNULIB_GETPROGNAME@
+/* Return the base name of the executing program.
+ On native Windows this will usually end in ".exe" or ".EXE". */
+# if @REPLACE_GETPROGNAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getprogname
+# define getprogname rpl_getprogname
+# endif
+# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME
+_GL_FUNCDECL_RPL (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE);
+# else
+_GL_FUNCDECL_RPL (getprogname, const char *, (void));
+# endif
+_GL_CXXALIAS_RPL (getprogname, const char *, (void));
+# else
+# if !@HAVE_GETPROGNAME@
+# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME
+_GL_FUNCDECL_SYS (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE);
+# else
+_GL_FUNCDECL_SYS (getprogname, const char *, (void));
+# endif
+# endif
+_GL_CXXALIAS_SYS (getprogname, const char *, (void));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getprogname);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getprogname
+# if HAVE_RAW_DECL_GETPROGNAME
+_GL_WARN_ON_USE (getprogname, "getprogname is unportable - "
+ "use gnulib module getprogname for portability");
+# endif
+#endif
+
+#if @GNULIB_GETSUBOPT@
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+ "token" or "token=value", getsubopt parses the first of these elements.
+ If the first element refers to a "token" that is member of the given
+ NULL-terminated array of tokens:
+ - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+ the first option and the comma, sets *VALUEP to the value of the
+ element (or NULL if it doesn't contain an "=" sign),
+ - It returns the index of the "token" in the given array of tokens.
+ Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+ For more details see the POSIX specification.
+ https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */
+# if @REPLACE_GETSUBOPT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getsubopt
+# define getsubopt rpl_getsubopt
+# endif
+_GL_FUNCDECL_RPL (getsubopt, int,
+ (char **optionp, char *const *tokens, char **valuep)
+ _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getsubopt, int,
+ (char **optionp, char *const *tokens, char **valuep));
+# else
+# if !@HAVE_GETSUBOPT@
+_GL_FUNCDECL_SYS (getsubopt, int,
+ (char **optionp, char *const *tokens, char **valuep)
+ _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+ (char **optionp, char *const *tokens, char **valuep));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getsubopt);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+ "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if @GNULIB_GRANTPT@
+/* Change the ownership and access permission of the slave side of the
+ pseudo-terminal whose master side is specified by FD. */
+# if !@HAVE_GRANTPT@
+_GL_FUNCDECL_SYS (grantpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (grantpt, int, (int fd));
+_GL_CXXALIASWARN (grantpt);
+#elif defined GNULIB_POSIXCHECK
+# undef grantpt
+# if HAVE_RAW_DECL_GRANTPT
+_GL_WARN_ON_USE (grantpt, "grantpt is not portable - "
+ "use gnulib module grantpt for portability");
+# endif
+#endif
+
+/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not
+ rely on GNU or POSIX semantics for malloc and realloc (for example,
+ by never specifying a zero size), so it does not need malloc or
+ realloc to be redefined. */
+#if @GNULIB_MALLOC_POSIX@
+# if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \
+ || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@)
+# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+ || _GL_USE_STDLIB_ALLOC)
+# undef malloc
+# define malloc rpl_malloc
+# endif
+_GL_FUNCDECL_RPL (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (malloc);
+# endif
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc
+/* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (malloc, void *,
+ (size_t size)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef malloc
+/* Assume malloc is always declared. */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+ "use gnulib module malloc-posix for portability");
+# endif
+#endif
+
+/* Convert a multibyte character to a wide character. */
+#if @GNULIB_MBTOWC@
+# if @REPLACE_MBTOWC@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbtowc
+# define mbtowc rpl_mbtowc
+# endif
+_GL_FUNCDECL_RPL (mbtowc, int,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n));
+_GL_CXXALIAS_RPL (mbtowc, int,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n));
+# else
+# if !@HAVE_MBTOWC@
+_GL_FUNCDECL_SYS (mbtowc, int,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n));
+# endif
+_GL_CXXALIAS_SYS (mbtowc, int,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbtowc);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbtowc
+# if HAVE_RAW_DECL_MBTOWC
+_GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - "
+ "use gnulib module mbtowc for portability");
+# endif
+#endif
+
+#if @GNULIB_MKDTEMP@
+/* Create a unique temporary directory from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the directory name unique.
+ Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+ The directory is created mode 700. */
+# if !@HAVE_MKDTEMP@
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+ "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+ and O_TEXT, O_BINARY (defined in "binary-io.h").
+ The file is then created, with the specified flags, ensuring it didn't exist
+ before.
+ The file is created read-write (mask at least 0600 & ~umask), but it may be
+ world-readable and world-writable (mask 0666 & ~umask), depending on the
+ implementation.
+ Returns the open file descriptor if successful, otherwise -1 and errno
+ set. */
+# if @REPLACE_MKOSTEMP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkostemp
+# define mkostemp rpl_mkostemp
+# endif
+_GL_FUNCDECL_RPL (mkostemp, int, (char * /*template*/, int /*flags*/)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkostemp, int, (char * /*template*/, int /*flags*/));
+# else
+# if !@HAVE_MKOSTEMP@
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mkostemp);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+ "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+ The last six characters of TEMPLATE before a suffix of length
+ SUFFIXLEN must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+ and O_TEXT, O_BINARY (defined in "binary-io.h").
+ The file is then created, with the specified flags, ensuring it didn't exist
+ before.
+ The file is created read-write (mask at least 0600 & ~umask), but it may be
+ world-readable and world-writable (mask 0666 & ~umask), depending on the
+ implementation.
+ Returns the open file descriptor if successful, otherwise -1 and errno
+ set. */
+# if @REPLACE_MKOSTEMPS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkostemps
+# define mkostemps rpl_mkostemps
+# endif
+_GL_FUNCDECL_RPL (mkostemps, int,
+ (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkostemps, int,
+ (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+# else
+# if !@HAVE_MKOSTEMPS@
+_GL_FUNCDECL_SYS (mkostemps, int,
+ (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+ (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mkostemps);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+ "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ The file is then created, ensuring it didn't exist before.
+ The file is created read-write (mask at least 0600 & ~umask), but it may be
+ world-readable and world-writable (mask 0666 & ~umask), depending on the
+ implementation.
+ Returns the open file descriptor if successful, otherwise -1 and errno
+ set. */
+# if @REPLACE_MKSTEMP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mkstemp rpl_mkstemp
+# endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+# if ! @HAVE_MKSTEMP@
+_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+ "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+ The last six characters of TEMPLATE prior to a suffix of length
+ SUFFIXLEN must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ The file is then created, ensuring it didn't exist before.
+ The file is created read-write (mask at least 0600 & ~umask), but it may be
+ world-readable and world-writable (mask 0666 & ~umask), depending on the
+ implementation.
+ Returns the open file descriptor if successful, otherwise -1 and errno
+ set. */
+# if !@HAVE_MKSTEMPS@
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+ "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if @GNULIB_MDA_MKTEMP@
+/* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::mktemp always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mktemp
+# define mktemp _mktemp
+# endif
+_GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/));
+# else
+_GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mktemp);
+#endif
+
+/* Allocate memory with indefinite extent and specified alignment. */
+#if @GNULIB_POSIX_MEMALIGN@
+# if @REPLACE_POSIX_MEMALIGN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef posix_memalign
+# define posix_memalign rpl_posix_memalign
+# endif
+_GL_FUNCDECL_RPL (posix_memalign, int,
+ (void **memptr, size_t alignment, size_t size)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (posix_memalign, int,
+ (void **memptr, size_t alignment, size_t size));
+# else
+# if @HAVE_POSIX_MEMALIGN@
+_GL_CXXALIAS_SYS (posix_memalign, int,
+ (void **memptr, size_t alignment, size_t size));
+# endif
+# endif
+# if __GLIBC__ >= 2 && @HAVE_POSIX_MEMALIGN@
+_GL_CXXALIASWARN (posix_memalign);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_memalign
+# if HAVE_RAW_DECL_POSIX_MEMALIGN
+_GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - "
+ "use gnulib module posix_memalign for portability");
+# endif
+#endif
+
+#if @GNULIB_POSIX_OPENPT@
+/* Return an FD open to the master side of a pseudo-terminal. Flags should
+ include O_RDWR, and may also include O_NOCTTY. */
+# if @REPLACE_POSIX_OPENPT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef posix_openpt
+# define posix_openpt rpl_posix_openpt
+# endif
+_GL_FUNCDECL_RPL (posix_openpt, int, (int flags));
+_GL_CXXALIAS_RPL (posix_openpt, int, (int flags));
+# else
+# if !@HAVE_POSIX_OPENPT@
+_GL_FUNCDECL_SYS (posix_openpt, int, (int flags));
+# endif
+_GL_CXXALIAS_SYS (posix_openpt, int, (int flags));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (posix_openpt);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef posix_openpt
+# if HAVE_RAW_DECL_POSIX_OPENPT
+_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - "
+ "use gnulib module posix_openpt for portability");
+# endif
+#endif
+
+#if @GNULIB_PTSNAME@
+/* Return the pathname of the pseudo-terminal slave associated with
+ the master FD is open on, or NULL on errors. */
+# if @REPLACE_PTSNAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ptsname
+# define ptsname rpl_ptsname
+# endif
+_GL_FUNCDECL_RPL (ptsname, char *, (int fd));
+_GL_CXXALIAS_RPL (ptsname, char *, (int fd));
+# else
+# if !@HAVE_PTSNAME@
+_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIASWARN (ptsname);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname
+# if HAVE_RAW_DECL_PTSNAME
+_GL_WARN_ON_USE (ptsname, "ptsname is not portable - "
+ "use gnulib module ptsname for portability");
+# endif
+#endif
+
+#if @GNULIB_PTSNAME_R@
+/* Set the pathname of the pseudo-terminal slave associated with
+ the master FD is open on and return 0, or set errno and return
+ non-zero on errors. */
+# if @REPLACE_PTSNAME_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ptsname_r
+# define ptsname_r rpl_ptsname_r
+# endif
+_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len));
+# else
+# if !@HAVE_PTSNAME_R@
+_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+# endif
+_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len));
+# endif
+# ifndef GNULIB_defined_ptsname_r
+# define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@)
+# endif
+_GL_CXXALIASWARN (ptsname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname_r
+# if HAVE_RAW_DECL_PTSNAME_R
+_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - "
+ "use gnulib module ptsname_r for portability");
+# endif
+#endif
+
+#if @GNULIB_PUTENV@
+# if @REPLACE_PUTENV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putenv
+# define putenv rpl_putenv
+# endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putenv
+# define putenv _putenv
+# endif
+_GL_CXXALIAS_MDA (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#elif @GNULIB_MDA_PUTENV@
+/* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::putenv always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef putenv
+# define putenv _putenv
+# endif
+/* Need to cast, because on mingw, the parameter is either
+ 'const char *string' or 'char *string'. */
+_GL_CXXALIAS_MDA_CAST (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+#if @GNULIB_QSORT_R@
+/* Sort an array of NMEMB elements, starting at address BASE, each element
+ occupying SIZE bytes, in ascending order according to the comparison
+ function COMPARE. */
+# ifdef __cplusplus
+extern "C" {
+# endif
+# if !GNULIB_defined_qsort_r_fn_types
+typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *);
+# define GNULIB_defined_qsort_r_fn_types 1
+# endif
+# ifdef __cplusplus
+}
+# endif
+# if @REPLACE_QSORT_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef qsort_r
+# define qsort_r rpl_qsort_r
+# endif
+_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+ _gl_qsort_r_compar_fn compare,
+ void *arg) _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size,
+ _gl_qsort_r_compar_fn compare,
+ void *arg));
+# else
+# if !@HAVE_QSORT_R@
+_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
+ _gl_qsort_r_compar_fn compare,
+ void *arg) _GL_ARG_NONNULL ((1, 4)));
+# endif
+_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size,
+ _gl_qsort_r_compar_fn compare,
+ void *arg));
+# endif
+_GL_CXXALIASWARN (qsort_r);
+#elif defined GNULIB_POSIXCHECK
+# undef qsort_r
+# if HAVE_RAW_DECL_QSORT_R
+_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - "
+ "use gnulib module qsort_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+# ifndef RAND_MAX
+# define RAND_MAX 2147483647
+# endif
+# endif
+#endif
+
+
+#if @GNULIB_RANDOM@
+# if @REPLACE_RANDOM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef random
+# define random rpl_random
+# endif
+_GL_FUNCDECL_RPL (random, long, (void));
+_GL_CXXALIAS_RPL (random, long, (void));
+# else
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (random, long, (void));
+# endif
+/* Need to cast, because on Haiku, the return type is
+ int. */
+_GL_CXXALIAS_SYS_CAST (random, long, (void));
+# endif
+_GL_CXXALIASWARN (random);
+#elif defined GNULIB_POSIXCHECK
+# undef random
+# if HAVE_RAW_DECL_RANDOM
+_GL_WARN_ON_USE (random, "random is unportable - "
+ "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if @REPLACE_RANDOM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef srandom
+# define srandom rpl_srandom
+# endif
+_GL_FUNCDECL_RPL (srandom, void, (unsigned int seed));
+_GL_CXXALIAS_RPL (srandom, void, (unsigned int seed));
+# else
+# if !@HAVE_RANDOM@
+_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed));
+# endif
+/* Need to cast, because on FreeBSD, the first parameter is
+ unsigned long seed. */
+_GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed));
+# endif
+_GL_CXXALIASWARN (srandom);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom
+# if HAVE_RAW_DECL_SRANDOM
+_GL_WARN_ON_USE (srandom, "srandom is unportable - "
+ "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if @REPLACE_INITSTATE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef initstate
+# define initstate rpl_initstate
+# endif
+_GL_FUNCDECL_RPL (initstate, char *,
+ (unsigned int seed, char *buf, size_t buf_size)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (initstate, char *,
+ (unsigned int seed, char *buf, size_t buf_size));
+# else
+# if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@
+_GL_FUNCDECL_SYS (initstate, char *,
+ (unsigned int seed, char *buf, size_t buf_size)
+ _GL_ARG_NONNULL ((2)));
+# endif
+/* Need to cast, because on FreeBSD, the first parameter is
+ unsigned long seed. */
+_GL_CXXALIAS_SYS_CAST (initstate, char *,
+ (unsigned int seed, char *buf, size_t buf_size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (initstate);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef initstate
+# if HAVE_RAW_DECL_INITSTATE
+_GL_WARN_ON_USE (initstate, "initstate is unportable - "
+ "use gnulib module random for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM@
+# if @REPLACE_SETSTATE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef setstate
+# define setstate rpl_setstate
+# endif
+_GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setstate, char *, (char *arg_state));
+# else
+# if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@
+_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter
+ is const char *arg_state. */
+_GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (setstate);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setstate
+# if HAVE_RAW_DECL_SETSTATE
+_GL_WARN_ON_USE (setstate, "setstate is unportable - "
+ "use gnulib module random for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef random_r
+# define random_r rpl_random_r
+# endif
+_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result));
+# else
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+# endif
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+ "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef srandom_r
+# define srandom_r rpl_srandom_r
+# endif
+_GL_FUNCDECL_RPL (srandom_r, int,
+ (unsigned int seed, struct random_data *rand_state)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (srandom_r, int,
+ (unsigned int seed, struct random_data *rand_state));
+# else
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (srandom_r, int,
+ (unsigned int seed, struct random_data *rand_state)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+ (unsigned int seed, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+ "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef initstate_r
+# define initstate_r rpl_initstate_r
+# endif
+_GL_FUNCDECL_RPL (initstate_r, int,
+ (unsigned int seed, char *buf, size_t buf_size,
+ struct random_data *rand_state)
+ _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (initstate_r, int,
+ (unsigned int seed, char *buf, size_t buf_size,
+ struct random_data *rand_state));
+# else
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (initstate_r, int,
+ (unsigned int seed, char *buf, size_t buf_size,
+ struct random_data *rand_state)
+ _GL_ARG_NONNULL ((2, 4)));
+# endif
+/* Need to cast, because on Haiku, the third parameter is
+ unsigned long buf_size. */
+_GL_CXXALIAS_SYS_CAST (initstate_r, int,
+ (unsigned int seed, char *buf, size_t buf_size,
+ struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+ "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if @REPLACE_RANDOM_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef setstate_r
+# define setstate_r rpl_setstate_r
+# endif
+_GL_FUNCDECL_RPL (setstate_r, int,
+ (char *arg_state, struct random_data *rand_state)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (setstate_r, int,
+ (char *arg_state, struct random_data *rand_state));
+# else
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (setstate_r, int,
+ (char *arg_state, struct random_data *rand_state)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+/* Need to cast, because on Haiku, the first parameter is
+ void *arg_state. */
+_GL_CXXALIAS_SYS_CAST (setstate_r, int,
+ (char *arg_state, struct random_data *rand_state));
+# endif
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+ "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REALLOC_POSIX@
+# if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \
+ || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@)
+# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \
+ || _GL_USE_STDLIB_ALLOC)
+# undef realloc
+# define realloc rpl_realloc
+# endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+# if __GNUC__ >= 11
+/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (realloc);
+# endif
+#else
+# if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc
+/* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */
+_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
+ _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
+# undef realloc
+/* Assume realloc is always declared. */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+ "use gnulib module realloc-posix for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REALLOCARRAY@
+# if @REPLACE_REALLOCARRAY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef reallocarray
+# define reallocarray rpl_reallocarray
+# endif
+_GL_FUNCDECL_RPL (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+# else
+# if ! @HAVE_REALLOCARRAY@
+_GL_FUNCDECL_SYS (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+# endif
+_GL_CXXALIAS_SYS (reallocarray, void *,
+ (void *ptr, size_t nmemb, size_t size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (reallocarray);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef reallocarray
+# if HAVE_RAW_DECL_REALLOCARRAY
+_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - "
+ "use gnulib module reallocarray for portability");
+# endif
+#endif
+
+#if @GNULIB_REALPATH@
+# if @REPLACE_REALPATH@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define realpath rpl_realpath
+# endif
+_GL_FUNCDECL_RPL (realpath, char *,
+ (const char *restrict name, char *restrict resolved)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *,
+ (const char *restrict name, char *restrict resolved));
+# else
+# if !@HAVE_REALPATH@
+_GL_FUNCDECL_SYS (realpath, char *,
+ (const char *restrict name, char *restrict resolved)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (realpath, char *,
+ (const char *restrict name, char *restrict resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+ "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_RPMATCH@
+/* Test a user response to a question.
+ Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */
+# if !@HAVE_RPMATCH@
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+ "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if @GNULIB_SECURE_GETENV@
+/* Look up NAME in the environment, returning 0 in insecure situations. */
+# if !@HAVE_SECURE_GETENV@
+_GL_FUNCDECL_SYS (secure_getenv, char *,
+ (char const *name) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name));
+_GL_CXXALIASWARN (secure_getenv);
+#elif defined GNULIB_POSIXCHECK
+# undef secure_getenv
+# if HAVE_RAW_DECL_SECURE_GETENV
+_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - "
+ "use gnulib module secure_getenv for portability");
+# endif
+#endif
+
+#if @GNULIB_SETENV@
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value. */
+# if @REPLACE_SETENV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef setenv
+# define setenv rpl_setenv
+# endif
+_GL_FUNCDECL_RPL (setenv, int,
+ (const char *name, const char *value, int replace)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+ (const char *name, const char *value, int replace));
+# else
+# if !@HAVE_DECL_SETENV@
+_GL_FUNCDECL_SYS (setenv, int,
+ (const char *name, const char *value, int replace)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (setenv, int,
+ (const char *name, const char *value, int replace));
+# endif
+# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@)
+_GL_CXXALIASWARN (setenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+ "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOD@
+ /* Parse a double from STRING, updating ENDP if appropriate. */
+# if @REPLACE_STRTOD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtod rpl_strtod
+# endif
+# define GNULIB_defined_strtod_function 1
+_GL_FUNCDECL_RPL (strtod, double,
+ (const char *restrict str, char **restrict endp)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double,
+ (const char *restrict str, char **restrict endp));
+# else
+# if !@HAVE_STRTOD@
+_GL_FUNCDECL_SYS (strtod, double,
+ (const char *restrict str, char **restrict endp)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtod, double,
+ (const char *restrict str, char **restrict endp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strtod);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+ "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOLD@
+ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */
+# if @REPLACE_STRTOLD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtold rpl_strtold
+# endif
+# define GNULIB_defined_strtold_function 1
+_GL_FUNCDECL_RPL (strtold, long double,
+ (const char *restrict str, char **restrict endp)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtold, long double,
+ (const char *restrict str, char **restrict endp));
+# else
+# if !@HAVE_STRTOLD@
+_GL_FUNCDECL_SYS (strtold, long double,
+ (const char *restrict str, char **restrict endp)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtold, long double,
+ (const char *restrict str, char **restrict endp));
+# endif
+_GL_CXXALIASWARN (strtold);
+#elif defined GNULIB_POSIXCHECK
+# undef strtold
+# if HAVE_RAW_DECL_STRTOLD
+_GL_WARN_ON_USE (strtold, "strtold is unportable - "
+ "use gnulib module strtold for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOL@
+/* Parse a signed integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set
+ to ERANGE. */
+# if @REPLACE_STRTOL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtol rpl_strtol
+# endif
+# define GNULIB_defined_strtol_function 1
+_GL_FUNCDECL_RPL (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOL@
+_GL_FUNCDECL_SYS (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtol, long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strtol);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtol
+# if HAVE_RAW_DECL_STRTOL
+_GL_WARN_ON_USE (strtol, "strtol is unportable - "
+ "use gnulib module strtol for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOLL@
+/* Parse a signed integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+ to ERANGE. */
+# if @REPLACE_STRTOLL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoll rpl_strtoll
+# endif
+# define GNULIB_defined_strtoll_function 1
+_GL_FUNCDECL_RPL (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOLL@
+_GL_FUNCDECL_SYS (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+ "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOUL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */
+# if @REPLACE_STRTOUL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoul rpl_strtoul
+# endif
+# define GNULIB_defined_strtoul_function 1
+_GL_FUNCDECL_RPL (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOUL@
+_GL_FUNCDECL_SYS (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoul, unsigned long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strtoul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtoul
+# if HAVE_RAW_DECL_STRTOUL
+_GL_WARN_ON_USE (strtoul, "strtoul is unportable - "
+ "use gnulib module strtoul for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOULL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+ The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+ it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+ "0x").
+ If ENDPTR is not NULL, the address of the first byte after the integer is
+ stored in *ENDPTR.
+ Upon overflow, the return value is ULLONG_MAX, and errno is set to
+ ERANGE. */
+# if @REPLACE_STRTOULL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strtoull rpl_strtoull
+# endif
+# define GNULIB_defined_strtoull_function 1
+_GL_FUNCDECL_RPL (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# else
+# if !@HAVE_STRTOULL@
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+ (const char *restrict string, char **restrict endptr,
+ int base));
+# endif
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+ "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if @GNULIB_UNLOCKPT@
+/* Unlock the slave side of the pseudo-terminal whose master side is specified
+ by FD, so that it can be opened. */
+# if !@HAVE_UNLOCKPT@
+_GL_FUNCDECL_SYS (unlockpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (unlockpt, int, (int fd));
+_GL_CXXALIASWARN (unlockpt);
+#elif defined GNULIB_POSIXCHECK
+# undef unlockpt
+# if HAVE_RAW_DECL_UNLOCKPT
+_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - "
+ "use gnulib module unlockpt for portability");
+# endif
+#endif
+
+#if @GNULIB_UNSETENV@
+/* Remove the variable NAME from the environment. */
+# if @REPLACE_UNSETENV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef unsetenv
+# define unsetenv rpl_unsetenv
+# endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+# if !@HAVE_DECL_UNSETENV@
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@)
+_GL_CXXALIASWARN (unsetenv);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+ "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+/* Convert a wide character to a multibyte character. */
+#if @GNULIB_WCTOMB@
+# if @REPLACE_WCTOMB@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wctomb
+# define wctomb rpl_wctomb
+# endif
+_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc));
+_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc));
+# else
+_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wctomb);
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_STDLIB_H */
+#endif /* _@GUARD_PREFIX@_STDLIB_H */
+#endif
diff --git a/lib/strdup.c b/lib/strdup.c
new file mode 100644
index 0000000..08c40d5
--- /dev/null
+++ b/lib/strdup.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This file is part of the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+/* Get specification. */
+#include <string.h>
+
+#include <stdlib.h>
+
+#undef __strdup
+#ifdef _LIBC
+# undef strdup
+#endif
+
+#ifndef weak_alias
+# define __strdup strdup
+#endif
+
+/* Duplicate S, returning an identical malloc'd string. */
+char *
+__strdup (const char *s)
+{
+ size_t len = strlen (s) + 1;
+ void *new = malloc (len);
+
+ if (new == NULL)
+ return NULL;
+
+ return (char *) memcpy (new, s, len);
+}
+#ifdef libc_hidden_def
+libc_hidden_def (__strdup)
+#endif
+#ifdef weak_alias
+weak_alias (__strdup, strdup)
+#endif
diff --git a/lib/streq.h b/lib/streq.h
new file mode 100644
index 0000000..712948e
--- /dev/null
+++ b/lib/streq.h
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+ Copyright (C) 2001-2002, 2007, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>. */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ_OPT allows to optimize string comparison with a small literal string.
+ STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+ is semantically equivalent to
+ strcmp (s, "EUC-KR") == 0
+ just faster. */
+
+/* Help GCC to generate good code for string comparisons with
+ immediate strings. */
+#if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+ return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+ if (s1[8] == s28)
+ {
+ if (s28 == 0)
+ return 1;
+ else
+ return streq9 (s1, s2);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+ if (s1[7] == s27)
+ {
+ if (s27 == 0)
+ return 1;
+ else
+ return streq8 (s1, s2, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+ if (s1[6] == s26)
+ {
+ if (s26 == 0)
+ return 1;
+ else
+ return streq7 (s1, s2, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+ if (s1[5] == s25)
+ {
+ if (s25 == 0)
+ return 1;
+ else
+ return streq6 (s1, s2, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+ if (s1[4] == s24)
+ {
+ if (s24 == 0)
+ return 1;
+ else
+ return streq5 (s1, s2, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (s1[3] == s23)
+ {
+ if (s23 == 0)
+ return 1;
+ else
+ return streq4 (s1, s2, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (s1[2] == s22)
+ {
+ if (s22 == 0)
+ return 1;
+ else
+ return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (s1[1] == s21)
+ {
+ if (s21 == 0)
+ return 1;
+ else
+ return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+static inline int
+streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+ if (s1[0] == s20)
+ {
+ if (s20 == 0)
+ return 1;
+ else
+ return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+ }
+ else
+ return 0;
+}
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+ (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/lib/strerror-override.c b/lib/strerror-override.c
new file mode 100644
index 0000000..cddaa4a
--- /dev/null
+++ b/lib/strerror-override.c
@@ -0,0 +1,306 @@
+/* strerror-override.c --- POSIX compatible system error routine
+
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2010. */
+
+#include <config.h>
+
+#include "strerror-override.h"
+
+#include <errno.h>
+
+#if GNULIB_defined_EWINSOCK /* native Windows platforms */
+# if HAVE_WINSOCK2_H
+# include <winsock2.h>
+# endif
+#endif
+
+#if !GNULIB_defined_strerror_override_macro
+
+/* If ERRNUM maps to an errno value defined by gnulib, return a string
+ describing the error. Otherwise return NULL. */
+const char *
+strerror_override (int errnum)
+{
+ /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */
+ switch (errnum)
+ {
+# if REPLACE_STRERROR_0
+ case 0:
+ return "Success";
+# endif
+
+# if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */
+ case EINPROGRESS:
+ return "Operation now in progress";
+ case EALREADY:
+ return "Operation already in progress";
+ case ENOTSOCK:
+ return "Socket operation on non-socket";
+ case EDESTADDRREQ:
+ return "Destination address required";
+ case EMSGSIZE:
+ return "Message too long";
+ case EPROTOTYPE:
+ return "Protocol wrong type for socket";
+ case ENOPROTOOPT:
+ return "Protocol not available";
+ case EPROTONOSUPPORT:
+ return "Protocol not supported";
+ case EOPNOTSUPP:
+ return "Operation not supported";
+ case EAFNOSUPPORT:
+ return "Address family not supported by protocol";
+ case EADDRINUSE:
+ return "Address already in use";
+ case EADDRNOTAVAIL:
+ return "Cannot assign requested address";
+ case ENETDOWN:
+ return "Network is down";
+ case ENETUNREACH:
+ return "Network is unreachable";
+ case ECONNRESET:
+ return "Connection reset by peer";
+ case ENOBUFS:
+ return "No buffer space available";
+ case EISCONN:
+ return "Transport endpoint is already connected";
+ case ENOTCONN:
+ return "Transport endpoint is not connected";
+ case ETIMEDOUT:
+ return "Connection timed out";
+ case ECONNREFUSED:
+ return "Connection refused";
+ case ELOOP:
+ return "Too many levels of symbolic links";
+ case EHOSTUNREACH:
+ return "No route to host";
+ case EWOULDBLOCK:
+ return "Operation would block";
+# endif
+# if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */
+ case ETXTBSY:
+ return "Text file busy";
+ case ENODATA:
+ return "No data available";
+ case ENOSR:
+ return "Out of streams resources";
+ case ENOSTR:
+ return "Device not a stream";
+ case ETIME:
+ return "Timer expired";
+ case EOTHER:
+ return "Other error";
+# endif
+# if GNULIB_defined_EWINSOCK /* native Windows platforms */
+ case ESOCKTNOSUPPORT:
+ return "Socket type not supported";
+ case EPFNOSUPPORT:
+ return "Protocol family not supported";
+ case ESHUTDOWN:
+ return "Cannot send after transport endpoint shutdown";
+ case ETOOMANYREFS:
+ return "Too many references: cannot splice";
+ case EHOSTDOWN:
+ return "Host is down";
+ case EPROCLIM:
+ return "Too many processes";
+ case EUSERS:
+ return "Too many users";
+ case EDQUOT:
+ return "Disk quota exceeded";
+ case ESTALE:
+ return "Stale NFS file handle";
+ case EREMOTE:
+ return "Object is remote";
+# if HAVE_WINSOCK2_H
+ /* WSA_INVALID_HANDLE maps to EBADF */
+ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */
+ /* WSA_INVALID_PARAMETER maps to EINVAL */
+ case WSA_OPERATION_ABORTED:
+ return "Overlapped operation aborted";
+ case WSA_IO_INCOMPLETE:
+ return "Overlapped I/O event object not in signaled state";
+ case WSA_IO_PENDING:
+ return "Overlapped operations will complete later";
+ /* WSAEINTR maps to EINTR */
+ /* WSAEBADF maps to EBADF */
+ /* WSAEACCES maps to EACCES */
+ /* WSAEFAULT maps to EFAULT */
+ /* WSAEINVAL maps to EINVAL */
+ /* WSAEMFILE maps to EMFILE */
+ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */
+ /* WSAEINPROGRESS maps to EINPROGRESS */
+ /* WSAEALREADY maps to EALREADY */
+ /* WSAENOTSOCK maps to ENOTSOCK */
+ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */
+ /* WSAEMSGSIZE maps to EMSGSIZE */
+ /* WSAEPROTOTYPE maps to EPROTOTYPE */
+ /* WSAENOPROTOOPT maps to ENOPROTOOPT */
+ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */
+ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */
+ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */
+ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */
+ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */
+ /* WSAEADDRINUSE maps to EADDRINUSE */
+ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */
+ /* WSAENETDOWN maps to ENETDOWN */
+ /* WSAENETUNREACH maps to ENETUNREACH */
+ /* WSAENETRESET maps to ENETRESET */
+ /* WSAECONNABORTED maps to ECONNABORTED */
+ /* WSAECONNRESET maps to ECONNRESET */
+ /* WSAENOBUFS maps to ENOBUFS */
+ /* WSAEISCONN maps to EISCONN */
+ /* WSAENOTCONN maps to ENOTCONN */
+ /* WSAESHUTDOWN is ESHUTDOWN */
+ /* WSAETOOMANYREFS is ETOOMANYREFS */
+ /* WSAETIMEDOUT maps to ETIMEDOUT */
+ /* WSAECONNREFUSED maps to ECONNREFUSED */
+ /* WSAELOOP maps to ELOOP */
+ /* WSAENAMETOOLONG maps to ENAMETOOLONG */
+ /* WSAEHOSTDOWN is EHOSTDOWN */
+ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */
+ /* WSAENOTEMPTY maps to ENOTEMPTY */
+ /* WSAEPROCLIM is EPROCLIM */
+ /* WSAEUSERS is EUSERS */
+ /* WSAEDQUOT is EDQUOT */
+ /* WSAESTALE is ESTALE */
+ /* WSAEREMOTE is EREMOTE */
+ case WSASYSNOTREADY:
+ return "Network subsystem is unavailable";
+ case WSAVERNOTSUPPORTED:
+ return "Winsock.dll version out of range";
+ case WSANOTINITIALISED:
+ return "Successful WSAStartup not yet performed";
+ case WSAEDISCON:
+ return "Graceful shutdown in progress";
+ case WSAENOMORE: case WSA_E_NO_MORE:
+ return "No more results";
+ case WSAECANCELLED: case WSA_E_CANCELLED:
+ return "Call was canceled";
+ case WSAEINVALIDPROCTABLE:
+ return "Procedure call table is invalid";
+ case WSAEINVALIDPROVIDER:
+ return "Service provider is invalid";
+ case WSAEPROVIDERFAILEDINIT:
+ return "Service provider failed to initialize";
+ case WSASYSCALLFAILURE:
+ return "System call failure";
+ case WSASERVICE_NOT_FOUND:
+ return "Service not found";
+ case WSATYPE_NOT_FOUND:
+ return "Class type not found";
+ case WSAEREFUSED:
+ return "Database query was refused";
+ case WSAHOST_NOT_FOUND:
+ return "Host not found";
+ case WSATRY_AGAIN:
+ return "Nonauthoritative host not found";
+ case WSANO_RECOVERY:
+ return "Nonrecoverable error";
+ case WSANO_DATA:
+ return "Valid name, no data record of requested type";
+ /* WSA_QOS_* omitted */
+# endif
+# endif
+
+# if GNULIB_defined_ENOMSG
+ case ENOMSG:
+ return "No message of desired type";
+# endif
+
+# if GNULIB_defined_EIDRM
+ case EIDRM:
+ return "Identifier removed";
+# endif
+
+# if GNULIB_defined_ENOLINK
+ case ENOLINK:
+ return "Link has been severed";
+# endif
+
+# if GNULIB_defined_EPROTO
+ case EPROTO:
+ return "Protocol error";
+# endif
+
+# if GNULIB_defined_EMULTIHOP
+ case EMULTIHOP:
+ return "Multihop attempted";
+# endif
+
+# if GNULIB_defined_EBADMSG
+ case EBADMSG:
+ return "Bad message";
+# endif
+
+# if GNULIB_defined_EOVERFLOW
+ case EOVERFLOW:
+ return "Value too large for defined data type";
+# endif
+
+# if GNULIB_defined_ENOTSUP
+ case ENOTSUP:
+ return "Not supported";
+# endif
+
+# if GNULIB_defined_ENETRESET
+ case ENETRESET:
+ return "Network dropped connection on reset";
+# endif
+
+# if GNULIB_defined_ECONNABORTED
+ case ECONNABORTED:
+ return "Software caused connection abort";
+# endif
+
+# if GNULIB_defined_ESTALE
+ case ESTALE:
+ return "Stale NFS file handle";
+# endif
+
+# if GNULIB_defined_EDQUOT
+ case EDQUOT:
+ return "Disk quota exceeded";
+# endif
+
+# if GNULIB_defined_ECANCELED
+ case ECANCELED:
+ return "Operation canceled";
+# endif
+
+# if GNULIB_defined_EOWNERDEAD
+ case EOWNERDEAD:
+ return "Owner died";
+# endif
+
+# if GNULIB_defined_ENOTRECOVERABLE
+ case ENOTRECOVERABLE:
+ return "State not recoverable";
+# endif
+
+# if GNULIB_defined_EILSEQ
+ case EILSEQ:
+ return "Invalid or incomplete multibyte or wide character";
+# endif
+
+ default:
+ return NULL;
+ }
+}
+
+#endif
diff --git a/lib/strerror-override.h b/lib/strerror-override.h
new file mode 100644
index 0000000..388cc28
--- /dev/null
+++ b/lib/strerror-override.h
@@ -0,0 +1,57 @@
+/* strerror-override.h --- POSIX compatible system error routine
+
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_STRERROR_OVERRIDE_H
+# define _GL_STRERROR_OVERRIDE_H
+
+# include <errno.h>
+# include <stddef.h>
+
+/* Reasonable buffer size that should never trigger ERANGE; if this
+ proves too small, we intentionally abort(), to remind us to fix
+ this value. */
+# define STACKBUF_LEN 256
+
+/* If ERRNUM maps to an errno value defined by gnulib, return a string
+ describing the error. Otherwise return NULL. */
+# if REPLACE_STRERROR_0 \
+ || GNULIB_defined_ESOCK \
+ || GNULIB_defined_ESTREAMS \
+ || GNULIB_defined_EWINSOCK \
+ || GNULIB_defined_ENOMSG \
+ || GNULIB_defined_EIDRM \
+ || GNULIB_defined_ENOLINK \
+ || GNULIB_defined_EPROTO \
+ || GNULIB_defined_EMULTIHOP \
+ || GNULIB_defined_EBADMSG \
+ || GNULIB_defined_EOVERFLOW \
+ || GNULIB_defined_ENOTSUP \
+ || GNULIB_defined_ENETRESET \
+ || GNULIB_defined_ECONNABORTED \
+ || GNULIB_defined_ESTALE \
+ || GNULIB_defined_EDQUOT \
+ || GNULIB_defined_ECANCELED \
+ || GNULIB_defined_EOWNERDEAD \
+ || GNULIB_defined_ENOTRECOVERABLE \
+ || GNULIB_defined_EILSEQ
+extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST;
+# else
+# define strerror_override(ignored) NULL
+# define GNULIB_defined_strerror_override_macro 1
+# endif
+
+#endif /* _GL_STRERROR_OVERRIDE_H */
diff --git a/lib/strerror.c b/lib/strerror.c
new file mode 100644
index 0000000..d754f60
--- /dev/null
+++ b/lib/strerror.c
@@ -0,0 +1,70 @@
+/* strerror.c --- POSIX compatible system error routine
+
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <string.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "intprops.h"
+#include "strerror-override.h"
+
+/* Use the system functions, not the gnulib overrides in this file. */
+#undef sprintf
+
+char *
+strerror (int n)
+#undef strerror
+{
+ static char buf[STACKBUF_LEN];
+ size_t len;
+
+ /* Cast away const, due to the historical signature of strerror;
+ callers should not be modifying the string. */
+ const char *msg = strerror_override (n);
+ if (msg)
+ return (char *) msg;
+
+ msg = strerror (n);
+
+ /* Our strerror_r implementation might use the system's strerror
+ buffer, so all other clients of strerror have to see the error
+ copied into a buffer that we manage. This is not thread-safe,
+ even if the system strerror is, but portable programs shouldn't
+ be using strerror if they care about thread-safety. */
+ if (!msg || !*msg)
+ {
+ static char const fmt[] = "Unknown error %d";
+ static_assert (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n));
+ sprintf (buf, fmt, n);
+ errno = EINVAL;
+ return buf;
+ }
+
+ /* Fix STACKBUF_LEN if this ever aborts. */
+ len = strlen (msg);
+ if (sizeof buf <= len)
+ abort ();
+
+ memcpy (buf, msg, len + 1);
+ return buf;
+}
diff --git a/lib/string.in.h b/lib/string.in.h
new file mode 100644
index 0000000..b6bf432
--- /dev/null
+++ b/lib/string.in.h
@@ -0,0 +1,1359 @@
+/* A GNU-like <string.h>.
+
+ Copyright (C) 1995-1996, 2001-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined _GL_ALREADY_INCLUDING_STRING_H
+/* Special invocation convention:
+ - On OS X/NetBSD we have a sequence of nested includes
+ <string.h> -> <strings.h> -> "string.h"
+ In this situation system _chk variants due to -D_FORTIFY_SOURCE
+ might be used after any replacements defined here. */
+
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+
+#define _GL_ALREADY_INCLUDING_STRING_H
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#undef _GL_ALREADY_INCLUDING_STRING_H
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+#define _@GUARD_PREFIX@_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL. */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro. */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+ && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* AIX 7.2 and Android 13 declare ffsl and ffsll in <strings.h>, not in
+ <string.h>. */
+/* But in any case avoid namespace pollution on glibc systems. */
+#if ((@GNULIB_FFSL@ || @GNULIB_FFSLL@ || defined GNULIB_POSIXCHECK) \
+ && (defined _AIX || defined __ANDROID__)) \
+ && ! defined __GLIBC__
+# include <strings.h>
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# if defined __cplusplus && defined __GNUC__ && !defined __clang__
+/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
+# else
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC (free, 1)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The attribute __pure__ was added in gcc 2.96. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE /* empty */
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
+ been included yet. */
+#if @GNULIB_FREE_POSIX@
+# if (@REPLACE_FREE@ && !defined free \
+ && !(defined __cplusplus && defined GNULIB_NAMESPACE))
+/* We can't do '#define free rpl_free' here. */
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void rpl_free (void *) throw ();
+# else
+_GL_EXTERN_C void rpl_free (void *);
+# endif
+# undef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
+# else
+# if defined _MSC_VER && !defined free
+_GL_EXTERN_C
+# if defined _DLL
+ __declspec (dllimport)
+# endif
+ void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+# endif
+#else
+# if defined _MSC_VER && !defined free
+_GL_EXTERN_C
+# if defined _DLL
+ __declspec (dllimport)
+# endif
+ void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+#endif
+
+/* Clear a block of memory. The compiler will not delete a call to
+ this function, even if the block is dead after the call. */
+#if @GNULIB_EXPLICIT_BZERO@
+# if ! @HAVE_EXPLICIT_BZERO@
+_GL_FUNCDECL_SYS (explicit_bzero, void,
+ (void *__dest, size_t __n) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
+_GL_CXXALIASWARN (explicit_bzero);
+#elif defined GNULIB_POSIXCHECK
+# undef explicit_bzero
+# if HAVE_RAW_DECL_EXPLICIT_BZERO
+_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
+ "use gnulib module explicit_bzero for portability");
+# endif
+#endif
+
+/* Find the index of the least-significant set bit. */
+#if @GNULIB_FFSL@
+# if !@HAVE_FFSL@
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit. */
+#if @GNULIB_FFSLL@
+# if @REPLACE_FFSLL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define ffsll rpl_ffsll
+# endif
+_GL_FUNCDECL_RPL (ffsll, int, (long long int i));
+_GL_CXXALIAS_RPL (ffsll, int, (long long int i));
+# else
+# if !@HAVE_FFSLL@
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+#if @GNULIB_MDA_MEMCCPY@
+/* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::memccpy always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef memccpy
+# define memccpy _memccpy
+# endif
+_GL_CXXALIAS_MDA (memccpy, void *,
+ (void *dest, const void *src, int c, size_t n));
+# else
+_GL_CXXALIAS_SYS (memccpy, void *,
+ (void *dest, const void *src, int c, size_t n));
+# endif
+_GL_CXXALIASWARN (memccpy);
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL. */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef memchr
+# define memchr rpl_memchr
+# endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C" { const void * std::memchr (const void *, int, size_t); }
+ extern "C++" { void * std::memchr (void *, int, size_t); } */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+ void *, (void const *__s, int __c, size_t __n),
+ void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ());
+_GL_CXXALIASWARN1 (memchr, void const *,
+ (void const *__s, int __c, size_t __n) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared. */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+ "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK. */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define memmem rpl_memmem
+# endif
+_GL_FUNCDECL_RPL (memmem, void *,
+ (void const *__haystack, size_t __haystack_len,
+ void const *__needle, size_t __needle_len)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+ (void const *__haystack, size_t __haystack_len,
+ void const *__needle, size_t __needle_len));
+# else
+# if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+ (void const *__haystack, size_t __haystack_len,
+ void const *__needle, size_t __needle_len)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (memmem, void *,
+ (void const *__haystack, size_t __haystack_len,
+ void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+ "use gnulib module memmem-simple for portability, "
+ "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+ last written byte. */
+#if @GNULIB_MEMPCPY@
+# if @REPLACE_MEMPCPY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mempcpy
+# define mempcpy rpl_mempcpy
+# endif
+_GL_FUNCDECL_RPL (mempcpy, void *,
+ (void *restrict __dest, void const *restrict __src,
+ size_t __n)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mempcpy, void *,
+ (void *restrict __dest, void const *restrict __src,
+ size_t __n));
+# else
+# if !@HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+ (void *restrict __dest, void const *restrict __src,
+ size_t __n)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+ (void *restrict __dest, void const *restrict __src,
+ size_t __n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mempcpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+ "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int). */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+ extern "C++" { void * std::memrchr (void *, int, size_t); } */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+ void *, (void const *, int, size_t),
+ void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ());
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+ "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Overwrite a block of memory. The compiler will not optimize
+ effects away, even if the block is dead after the call. */
+#if @GNULIB_MEMSET_EXPLICIT@
+# if ! @HAVE_MEMSET_EXPLICIT@
+_GL_FUNCDECL_SYS (memset_explicit, void *,
+ (void *__dest, int __c, size_t __n) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n));
+_GL_CXXALIASWARN (memset_explicit);
+#elif defined GNULIB_POSIXCHECK
+# undef memset_explicit
+# if HAVE_RAW_DECL_MEMSET_EXPLICIT
+_GL_WARN_ON_USE (memset_explicit, "memset_explicit is unportable - "
+ "use gnulib module memset_explicit for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S. More efficient than
+ memchr(S,C,N), at the expense of undefined behavior if C does not
+ occur within N bytes. */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" { const void * std::rawmemchr (const void *, int); }
+ extern "C++" { void * std::rawmemchr (void *, int); } */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+ void *, (void const *__s, int __c_in),
+ void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (rawmemchr, void const *,
+ (void const *__s, int __c_in) throw ());
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+ "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */
+#if @GNULIB_STPCPY@
+# if @REPLACE_STPCPY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef stpcpy
+# define stpcpy rpl_stpcpy
+# endif
+_GL_FUNCDECL_RPL (stpcpy, char *,
+ (char *restrict __dst, char const *restrict __src)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpcpy, char *,
+ (char *restrict __dst, char const *restrict __src));
+# else
+# if !@HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+ (char *restrict __dst, char const *restrict __src)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+ (char *restrict __dst, char const *restrict __src));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (stpcpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+ "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+ last non-NUL byte written into DST. */
+#if @GNULIB_STPNCPY@
+# if @REPLACE_STPNCPY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef stpncpy
+# define stpncpy rpl_stpncpy
+# endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+ (char *restrict __dst, char const *restrict __src,
+ size_t __n)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+ (char *restrict __dst, char const *restrict __src,
+ size_t __n));
+# else
+# if ! @HAVE_STPNCPY@
+_GL_FUNCDECL_SYS (stpncpy, char *,
+ (char *restrict __dst, char const *restrict __src,
+ size_t __n)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+ (char *restrict __dst, char const *restrict __src,
+ size_t __n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (stpncpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+ "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+ GB18030 and the character to be searched is a digit. */
+# undef strchr
+/* Assume strchr is always declared. */
+_GL_WARN_ON_USE_CXX (strchr,
+ const char *, char *, (const char *, int),
+ "strchr cannot work correctly on character strings "
+ "in some multibyte locales - "
+ "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte. */
+#if @GNULIB_STRCHRNUL@
+# if @REPLACE_STRCHRNUL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strchrnul rpl_strchrnul
+# endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+ (const char *str, int ch));
+# else
+# if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" { const char * std::strchrnul (const char *, int); }
+ extern "C++" { char * std::strchrnul (char *, int); } */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+ char *, (char const *__s, int __c_in),
+ char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (strchrnul, char const *,
+ (char const *__s, int __c_in) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+ "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string. */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strdup
+# define strdup rpl_strdup
+# endif
+_GL_FUNCDECL_RPL (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strdup
+# define strdup _strdup
+# endif
+_GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
+# else
+# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+ /* strdup exists as a function and as a macro. Get rid of the macro. */
+# undef strdup
+# endif
+# if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup
+_GL_FUNCDECL_SYS (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#else
+# if __GNUC__ >= 11 && !defined strdup
+/* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */
+_GL_FUNCDECL_SYS (strdup, char *,
+ (char const *__s)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+ "use gnulib module strdup for portability");
+# endif
+# elif @GNULIB_MDA_STRDUP@
+/* On native Windows, map 'creat' to '_creat', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::strdup always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strdup
+# define strdup _strdup
+# endif
+_GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
+# else
+# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+# undef strdup
+# endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST. */
+#if @GNULIB_STRNCAT@
+# if @REPLACE_STRNCAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strncat
+# define strncat rpl_strncat
+# endif
+_GL_FUNCDECL_RPL (strncat, char *,
+ (char *restrict dest, const char *restrict src, size_t n)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *,
+ (char *restrict dest, const char *restrict src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *,
+ (char *restrict dest, const char *restrict src, size_t n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strncat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+ "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING. */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strndup
+# define strndup rpl_strndup
+# endif
+_GL_FUNCDECL_RPL (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
+# else
+# if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup)
+_GL_FUNCDECL_SYS (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#else
+# if __GNUC__ >= 11 && !defined strndup
+/* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */
+_GL_FUNCDECL_SYS (strndup, char *,
+ (char const *__s, size_t __n)
+ _GL_ARG_NONNULL ((1))
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+ "use gnulib module strndup for portability");
+# endif
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+ MAXLEN bytes. If no '\0' terminator is found in that many bytes,
+ return MAXLEN. */
+#if @GNULIB_STRNLEN@
+# if @REPLACE_STRNLEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strnlen
+# define strnlen rpl_strnlen
+# endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen));
+# else
+# if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+ "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+ Even in this simple case, it does not work with multibyte strings if the
+ locale encoding is GB18030 and one of the characters to be searched is a
+ digit. */
+# undef strcspn
+/* Assume strcspn is always declared. */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+ "in multibyte locales - "
+ "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT. */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C" { const char * strpbrk (const char *, const char *); }
+ extern "C++" { char * strpbrk (char *, const char *); } */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+ char *, (char const *__s, char const *__accept),
+ const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw ());
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+ (char const *__s, char const *__accept) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+ Even in this simple case, it does not work with multibyte strings if the
+ locale encoding is GB18030 and one of the characters to be searched is a
+ digit. */
+# undef strpbrk
+_GL_WARN_ON_USE_CXX (strpbrk,
+ const char *, char *, (const char *, const char *),
+ "strpbrk cannot work correctly on character strings "
+ "in multibyte locales - "
+ "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE_CXX (strpbrk,
+ const char *, char *, (const char *, const char *),
+ "strpbrk is unportable - "
+ "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+ Even in this simple case, it cannot work with multibyte strings. */
+# undef strspn
+/* Assume strspn is always declared. */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+ "in multibyte locales - "
+ "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+ GB18030 and the character to be searched is a digit. */
+# undef strrchr
+/* Assume strrchr is always declared. */
+_GL_WARN_ON_USE_CXX (strrchr,
+ const char *, char *, (const char *, int),
+ "strrchr cannot work correctly on character strings "
+ "in some multibyte locales - "
+ "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+ If one is found, overwrite it with a NUL, and advance *STRINGP
+ to point to the next char after it. Otherwise, set *STRINGP to NULL.
+ If *STRINGP was already NULL, nothing happens.
+ Return the old value of *STRINGP.
+
+ This is a variant of strtok() that is multithread-safe and supports
+ empty fields.
+
+ Caveat: It modifies the original string.
+ Caveat: These functions cannot be used on constant strings.
+ Caveat: The identity of the delimiting character is lost.
+ Caveat: It doesn't work with multibyte strings unless all of the delimiter
+ characters are ASCII characters < 0x30.
+
+ See also strtok_r(). */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+ (char **restrict __stringp, char const *restrict __delim)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+ (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+# undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+ "in multibyte locales - "
+ "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+ "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strstr rpl_strstr
+# endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" { const char * strstr (const char *, const char *); }
+ extern "C++" { char * strstr (char *, const char *); } */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+ char *, (const char *haystack, const char *needle),
+ const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strstr, char *,
+ (char *haystack, const char *needle) throw ());
+_GL_CXXALIASWARN1 (strstr, const char *,
+ (const char *haystack, const char *needle) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+ different from UTF-8:
+ POSIX says that it operates on "strings", and "string" in POSIX is defined
+ as a sequence of bytes, not of characters. */
+# undef strstr
+/* Assume strstr is always declared. */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+ "work correctly on character strings in most "
+ "multibyte locales - "
+ "use mbsstr if you care about internationalization, "
+ "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+ comparison. */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strcasestr rpl_strcasestr
+# endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+ (const char *haystack, const char *needle)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+ (const char *haystack, const char *needle));
+# else
+# if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+ (const char *haystack, const char *needle)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" { const char * strcasestr (const char *, const char *); }
+ extern "C++" { char * strcasestr (char *, const char *); } */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+ char *, (const char *haystack, const char *needle),
+ const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
+ || defined __clang__)
+_GL_CXXALIASWARN1 (strcasestr, char *,
+ (char *haystack, const char *needle) throw ());
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+ (const char *haystack, const char *needle) throw ());
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+ It is a glibc extension, and glibc implements it only for unibyte
+ locales. */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+ "strings in multibyte locales - "
+ "use mbscasestr if you care about "
+ "internationalization, or use c-strcasestr if you want "
+ "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+ If S is NULL, the saved pointer in SAVE_PTR is used as
+ the next starting point. For example:
+ char s[] = "-abc-=-def";
+ char *sp;
+ x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def"
+ x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL
+ x = strtok_r(NULL, "=", &sp); // x = NULL
+ // s = "abc\0-def\0"
+
+ This is a variant of strtok() that is multithread-safe.
+
+ For the POSIX documentation for this function, see:
+ https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html
+
+ Caveat: It modifies the original string.
+ Caveat: These functions cannot be used on constant strings.
+ Caveat: The identity of the delimiting character is lost.
+ Caveat: It doesn't work with multibyte strings unless all of the delimiter
+ characters are ASCII characters < 0x30.
+
+ See also strsep(). */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strtok_r
+# define strtok_r rpl_strtok_r
+# endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+ (char *restrict s, char const *restrict delim,
+ char **restrict save_ptr)
+ _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+ (char *restrict s, char const *restrict delim,
+ char **restrict save_ptr));
+# else
+# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+# undef strtok_r
+# endif
+# if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+ (char *restrict s, char const *restrict delim,
+ char **restrict save_ptr)
+ _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+ (char *restrict s, char const *restrict delim,
+ char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+ "strings in multibyte locales - "
+ "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+ "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX. They are gnulib
+ extensions. */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+ This considers multibyte characters, unlike strlen, which counts bytes. */
+# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */
+# undef mbslen
+# endif
+# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mbslen rpl_mbslen
+# endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbslen);
+# endif
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+ at STRING and ending at STRING + LEN. */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+ and return a pointer to it. Return NULL if C is not found in STRING.
+ Unlike strchr(), this function works correctly in multibyte locales with
+ encodings such as GB18030. */
+# if defined __hpux
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+# endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+ and return a pointer to it. Return NULL if C is not found in STRING.
+ Unlike strrchr(), this function works correctly in multibyte locales with
+ encodings such as GB18030. */
+# if defined __hpux || defined __INTERIX
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+# endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+ string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK.
+ Unlike strstr(), this function works correctly in multibyte locales with
+ encodings different from UTF-8. */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+ equal to or greater than zero if S1 is lexicographically less than, equal to
+ or greater than S2.
+ Note: This function may, in multibyte locales, return 0 for strings of
+ different lengths!
+ Unlike strcasecmp(), this function works correctly in multibyte locales. */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+ N characters with the initial segment of the character string S2 consisting
+ of at most N characters, ignoring case, returning less than, equal to or
+ greater than zero if the initial segment of S1 is lexicographically less
+ than, equal to or greater than the initial segment of S2.
+ Note: This function may, in multibyte locales, return 0 for initial segments
+ of different lengths!
+ Unlike strncasecmp(), this function works correctly in multibyte locales.
+ But beware that N is not a byte count but a character count! */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+ at most mbslen (PREFIX) characters with the character string PREFIX,
+ ignoring case. If the two match, return a pointer to the first byte
+ after this prefix in STRING. Otherwise, return NULL.
+ Note: This function may, in multibyte locales, return non-NULL if STRING
+ is of smaller length than PREFIX!
+ Unlike strncasecmp(), this function works correctly in multibyte
+ locales. */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+ string HAYSTACK, using case-insensitive comparison.
+ Note: This function may, in multibyte locales, return success even if
+ strlen (haystack) < strlen (needle) !
+ Unlike strcasestr(), this function works correctly in multibyte locales. */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+ in the character string ACCEPT. Return the number of bytes from the
+ beginning of the string to this occurrence, or to the end of the string
+ if none exists.
+ Unlike strcspn(), this function works correctly in multibyte locales. */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+ in the character string ACCEPT. Return the pointer to it, or NULL if none
+ exists.
+ Unlike strpbrk(), this function works correctly in multibyte locales. */
+# if defined __hpux
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+# endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+ not in the character string REJECT. Return the number of bytes from the
+ beginning of the string to this occurrence, or to the end of the string
+ if none exists.
+ Unlike strspn(), this function works correctly in multibyte locales. */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+ string DELIM) starting at the character string *STRINGP.
+ If one is found, overwrite it with a NUL, and advance *STRINGP to point
+ to the next multibyte character after it. Otherwise, set *STRINGP to NULL.
+ If *STRINGP was already NULL, nothing happens.
+ Return the old value of *STRINGP.
+
+ This is a variant of mbstok_r() that supports empty fields.
+
+ Caveat: It modifies the original string.
+ Caveat: These functions cannot be used on constant strings.
+ Caveat: The identity of the delimiting character is lost.
+
+ See also mbstok_r(). */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+ _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+ the character string DELIM.
+ If STRING is NULL, the saved pointer in SAVE_PTR is used as
+ the next starting point. For example:
+ char s[] = "-abc-=-def";
+ char *sp;
+ x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def"
+ x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL
+ x = mbstok_r(NULL, "=", &sp); // x = NULL
+ // s = "abc\0-def\0"
+
+ Caveat: It modifies the original string.
+ Caveat: These functions cannot be used on constant strings.
+ Caveat: The identity of the delimiting character is lost.
+
+ See also mbssep(). */
+_GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim,
+ char **save_ptr)
+ _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message. */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strerror
+# define strerror rpl_strerror
+# endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strerror);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared. */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+ "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message. Multithread-safe.
+ Uses the POSIX declaration, not the glibc declaration. */
+#if @GNULIB_STRERROR_R@
+# if @REPLACE_STRERROR_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strerror_r
+# define strerror_r rpl_strerror_r
+# endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+# if !@HAVE_DECL_STRERROR_R@
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if __GLIBC__ >= 2 && @HAVE_DECL_STRERROR_R@
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+ "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+/* Return the name of the system error code ERRNUM. */
+#if @GNULIB_STRERRORNAME_NP@
+# if @REPLACE_STRERRORNAME_NP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef strerrorname_np
+# define strerrorname_np rpl_strerrorname_np
+# endif
+_GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum));
+_GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum));
+# else
+# if !@HAVE_STRERRORNAME_NP@
+_GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum));
+# endif
+_GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum));
+# endif
+_GL_CXXALIASWARN (strerrorname_np);
+#elif defined GNULIB_POSIXCHECK
+# undef strerrorname_np
+# if HAVE_RAW_DECL_STRERRORNAME_NP
+_GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - "
+ "use gnulib module strerrorname_np for portability");
+# endif
+#endif
+
+/* Return an abbreviation string for the signal number SIG. */
+#if @GNULIB_SIGABBREV_NP@
+# if ! @HAVE_SIGABBREV_NP@
+_GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig));
+# endif
+_GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig));
+_GL_CXXALIASWARN (sigabbrev_np);
+#elif defined GNULIB_POSIXCHECK
+# undef sigabbrev_np
+# if HAVE_RAW_DECL_SIGABBREV_NP
+_GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - "
+ "use gnulib module sigabbrev_np for portability");
+# endif
+#endif
+
+/* Return an English description string for the signal number SIG. */
+#if @GNULIB_SIGDESCR_NP@
+# if ! @HAVE_SIGDESCR_NP@
+_GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig));
+# endif
+_GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig));
+_GL_CXXALIASWARN (sigdescr_np);
+#elif defined GNULIB_POSIXCHECK
+# undef sigdescr_np
+# if HAVE_RAW_DECL_SIGDESCR_NP
+_GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - "
+ "use gnulib module sigdescr_np for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strsignal rpl_strsignal
+# endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+# if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+# endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+ 'const char *'. */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+ "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+ _GL_ATTRIBUTE_PURE
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+ "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_STRING_H */
+#endif /* _@GUARD_PREFIX@_STRING_H */
+#endif
diff --git a/lib/stripslash.c b/lib/stripslash.c
new file mode 100644
index 0000000..fe46a9c
--- /dev/null
+++ b/lib/stripslash.c
@@ -0,0 +1,45 @@
+/* stripslash.c -- remove redundant trailing slashes from a file name
+
+ Copyright (C) 1990, 2001, 2003-2006, 2009-2023 Free Software Foundation,
+ Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "dirname.h"
+
+/* Remove trailing slashes from FILE. Return true if a trailing slash
+ was removed. This is useful when using file name completion from a
+ shell that adds a "/" after directory names (such as tcsh and
+ bash), because on symlinks to directories, several system calls
+ have different semantics according to whether a trailing slash is
+ present. */
+
+bool
+strip_trailing_slashes (char *file)
+{
+ char *base = last_component (file);
+ char *base_lim;
+ bool had_slash;
+
+ /* last_component returns "" for file system roots, but we need to turn
+ "///" into "/". */
+ if (! *base)
+ base = file;
+ base_lim = base + base_len (base);
+ had_slash = (*base_lim != '\0');
+ *base_lim = '\0';
+ return had_slash;
+}
diff --git a/lib/strtol.c b/lib/strtol.c
new file mode 100644
index 0000000..b93483d
--- /dev/null
+++ b/lib/strtol.c
@@ -0,0 +1,416 @@
+/* Convert string representation of a number into an integer value.
+
+ Copyright (C) 1991-1992, 1994-1999, 2003, 2005-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ NOTE: The canonical source of this file is maintained with the GNU C
+ Library. Bugs can be reported to bug-glibc@gnu.org.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+#else
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining 'strtoul' or 'strtoull', operating on
+ unsigned integers. */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name. */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# undef strtol
+# if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol __wcstoull_l
+# else
+# define strtol __wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol __strtoull_l
+# else
+# define strtol __strtoul_l
+# endif
+# endif
+# else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol __wcstoll_l
+# else
+# define strtol __wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol __strtoll_l
+# else
+# define strtol __strtol_l
+# endif
+# endif
+# endif
+#else
+# if UNSIGNED
+# undef strtol
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoull
+# else
+# define strtol wcstoul
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoull
+# else
+# define strtol strtoul
+# endif
+# endif
+# else
+# ifdef USE_WIDE_CHAR
+# undef strtol
+# ifdef QUAD
+# define strtol wcstoll
+# else
+# define strtol wcstol
+# endif
+# else
+# ifdef QUAD
+# undef strtol
+# define strtol strtoll
+# endif
+# endif
+# endif
+#endif
+
+/* If QUAD is defined, we are defining 'strtoll' or 'strtoull',
+ operating on 'long long int's. */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LLONG_MIN
+# define STRTOL_LONG_MAX LLONG_MAX
+# define STRTOL_ULONG_MAX ULLONG_MAX
+# if __GNUC__ == 2 && __GNUC_MINOR__ < 7
+ /* Work around gcc bug with using this constant. */
+ static const unsigned long long int maxquad = ULLONG_MAX;
+# undef STRTOL_ULONG_MAX
+# define STRTOL_ULONG_MAX maxquad
+# endif
+#else
+# define LONG long
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+#ifdef USE_NUMBER_GROUPING
+# define GROUP_PARAM_PROTO , int group
+#else
+# define GROUP_PARAM_PROTO
+#endif
+
+/* We use this code also for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT
+ macro. */
+#ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# undef _NL_CURRENT
+# define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+# define LOCALE_PARAM , loc
+# define LOCALE_PARAM_PROTO , __locale_t loc
+#else
+# define LOCALE_PARAM
+# define LOCALE_PARAM_PROTO
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wchar.h>
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
+# define TOUPPER(Ch) __towupper_l ((Ch), loc)
+# else
+# define ISSPACE(Ch) iswspace (Ch)
+# define ISALPHA(Ch) iswalpha (Ch)
+# define TOUPPER(Ch) towupper (Ch)
+# endif
+#else
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+# define ISSPACE(Ch) __isspace_l ((unsigned char) (Ch), loc)
+# define ISALPHA(Ch) __isalpha_l ((unsigned char) (Ch), loc)
+# define TOUPPER(Ch) __toupper_l ((unsigned char) (Ch), loc)
+# else
+# define ISSPACE(Ch) isspace ((unsigned char) (Ch))
+# define ISALPHA(Ch) isalpha ((unsigned char) (Ch))
+# define TOUPPER(Ch) toupper ((unsigned char) (Ch))
+# endif
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+# define INTERNAL(X) INTERNAL1(X)
+# define INTERNAL1(X) __##X##_internal
+# define WEAKNAME(X) WEAKNAME1(X)
+#else
+# define INTERNAL(X) X
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping. */
+# include "grouping.h"
+#endif
+
+
+
+/* Convert NPTR to an 'unsigned long int' or 'long int' in base BASE.
+ If BASE is 0 the base is determined by the presence of a leading
+ zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+ If BASE is < 2 or > 36, it is reset to 10.
+ If ENDPTR is not NULL, a pointer to the character after the last
+ one converted is stored in *ENDPTR. */
+
+INT
+INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base GROUP_PARAM_PROTO LOCALE_PARAM_PROTO)
+{
+ int negative;
+ register unsigned LONG int cutoff;
+ register unsigned int cutlim;
+ register unsigned LONG int i;
+ register const STRING_TYPE *s;
+ register UCHAR_TYPE c;
+ const STRING_TYPE *save, *end;
+ int overflow;
+
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_IN_EXTENDED_LOCALE_MODEL
+ struct locale_data *current = loc->__locales[LC_NUMERIC];
+# endif
+ /* The thousands character of the current locale. */
+ wchar_t thousands = L'\0';
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+
+ if (group)
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+# if defined _LIBC || defined _HAVE_BTOWC
+ thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP));
+ if (thousands == WEOF)
+ thousands = L'\0';
+# endif
+ if (thousands == L'\0')
+ grouping = NULL;
+ }
+ }
+ else
+ grouping = NULL;
+#endif
+
+ if (base < 0 || base == 1 || base > 36)
+ {
+ __set_errno (EINVAL);
+ return 0;
+ }
+
+ save = s = nptr;
+
+ /* Skip white space. */
+ while (ISSPACE (*s))
+ ++s;
+ if (*s == L_('\0'))
+ goto noconv;
+
+ /* Check for a sign. */
+ if (*s == L_('-'))
+ {
+ negative = 1;
+ ++s;
+ }
+ else if (*s == L_('+'))
+ {
+ negative = 0;
+ ++s;
+ }
+ else
+ negative = 0;
+
+ /* Recognize number prefix and if BASE is zero, figure it out ourselves. */
+ if (*s == L_('0'))
+ {
+ if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+ {
+ s += 2;
+ base = 16;
+ }
+ else if ((base == 0 || base == 2) && TOUPPER (s[1]) == L_('B'))
+ {
+ s += 2;
+ base = 2;
+ }
+ else if (base == 0)
+ base = 8;
+ }
+ else if (base == 0)
+ base = 10;
+
+ /* Save the pointer so we can check later if anything happened. */
+ save = s;
+
+#ifdef USE_NUMBER_GROUPING
+ if (group)
+ {
+ /* Find the end of the digit string and check its grouping. */
+ end = s;
+ for (c = *end; c != L_('\0'); c = *++end)
+ if ((wchar_t) c != thousands
+ && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9'))
+ && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+ break;
+ if (*s == thousands)
+ end = s;
+ else
+ end = correctly_grouped_prefix (s, end, thousands, grouping);
+ }
+ else
+#endif
+ end = NULL;
+
+ cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base;
+ cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base;
+
+ overflow = 0;
+ i = 0;
+ for (c = *s; c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Check for overflow. */
+ if (i > cutoff || (i == cutoff && c > cutlim))
+ overflow = 1;
+ else
+ {
+ i *= (unsigned LONG int) base;
+ i += c;
+ }
+ }
+
+ /* Check if anything actually happened. */
+ if (s == save)
+ goto noconv;
+
+ /* Store in ENDPTR the address of one character
+ past the last character we converted. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+ /* Check for a value that is within the range of
+ 'unsigned LONG int', but outside the range of 'LONG int'. */
+ if (overflow == 0
+ && i > (negative
+ ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+ : (unsigned LONG int) STRTOL_LONG_MAX))
+ overflow = 1;
+#endif
+
+ if (overflow)
+ {
+ __set_errno (ERANGE);
+#if UNSIGNED
+ return STRTOL_ULONG_MAX;
+#else
+ return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+ }
+
+ /* Return the result of the appropriate sign. */
+ return negative ? -i : i;
+
+noconv:
+ /* We must handle a special case here: the base is 0 or 16 and the
+ first two characters are '0' and 'x', but the rest are no
+ hexadecimal digits. Likewise when the base is 0 or 2 and the
+ first two characters are '0' and 'b', but the rest are no binary
+ digits. This is no error case. We return 0 and ENDPTR points to
+ the 'x' or 'b'. */
+ if (endptr != NULL)
+ {
+ if (save - nptr >= 2
+ && (TOUPPER (save[-1]) == L_('X') || TOUPPER (save[-1]) == L_('B'))
+ && save[-2] == L_('0'))
+ *endptr = (STRING_TYPE *) &save[-1];
+ else
+ /* There was no number to convert. */
+ *endptr = (STRING_TYPE *) nptr;
+ }
+
+ return 0L;
+}
+
+#ifdef USE_NUMBER_GROUPING
+/* External user entry point. */
+
+INT
+# ifdef weak_function
+weak_function
+# endif
+strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base LOCALE_PARAM_PROTO)
+{
+ return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM);
+}
+#endif
diff --git a/lib/strtoll.c b/lib/strtoll.c
new file mode 100644
index 0000000..9fdfa19
--- /dev/null
+++ b/lib/strtoll.c
@@ -0,0 +1,33 @@
+/* Function to parse a 'long long int' from text.
+ Copyright (C) 1995-1997, 1999, 2001, 2009-2023 Free Software Foundation,
+ Inc.
+ This file is part of the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <strtol.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/lib/strtoul.c b/lib/strtoul.c
new file mode 100644
index 0000000..2a360c7
--- /dev/null
+++ b/lib/strtoul.c
@@ -0,0 +1,19 @@
+/* Copyright (C) 1991, 1997, 2009-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define UNSIGNED 1
+
+#include "strtol.c"
diff --git a/lib/strtoull.c b/lib/strtoull.c
new file mode 100644
index 0000000..f05d34f
--- /dev/null
+++ b/lib/strtoull.c
@@ -0,0 +1,26 @@
+/* Function to parse an 'unsigned long long int' from text.
+ Copyright (C) 1995-1997, 1999, 2009-2023 Free Software Foundation, Inc.
+ NOTE: The canonical source of this file is maintained with the GNU C
+ Library. Bugs can be reported to bug-glibc@gnu.org.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include "strtoul.c"
+
+#ifdef _LIBC
+strong_alias (__strtoull_internal, __strtouq_internal)
+weak_alias (strtoull, strtouq)
+#endif
diff --git a/lib/sys-limits.h b/lib/sys-limits.h
new file mode 100644
index 0000000..0e9556d
--- /dev/null
+++ b/lib/sys-limits.h
@@ -0,0 +1,42 @@
+/* System call limits
+
+ Copyright 2018-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _GL_SYS_LIMITS_H
+#define _GL_SYS_LIMITS_H
+
+#include <limits.h>
+
+/* Maximum number of bytes to read or write in a single system call.
+ This can be useful for system calls like sendfile on GNU/Linux,
+ which do not handle more than MAX_RW_COUNT bytes correctly.
+ The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20,
+ where the 20 comes from the Hexagon port with 1 MiB pages; use that
+ as an approximation, as the exact value may not be available to us.
+
+ Using this also works around a serious Linux bug before 2.6.16; see
+ <https://bugzilla.redhat.com/show_bug.cgi?id=612839>.
+
+ Using this also works around a Tru64 5.1 bug, where attempting
+ to read INT_MAX bytes fails with errno == EINVAL. See
+ <https://lists.gnu.org/r/bug-gnu-utils/2002-04/msg00010.html>.
+
+ Using this is likely to work around similar bugs in other operating
+ systems. */
+
+enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 };
+
+#endif
diff --git a/lib/sys_random.in.h b/lib/sys_random.in.h
new file mode 100644
index 0000000..8dca132
--- /dev/null
+++ b/lib/sys_random.in.h
@@ -0,0 +1,100 @@
+/* Substitute for <sys/random.h>.
+ Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+# if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+# endif
+@PRAGMA_COLUMNS@
+
+#ifndef _@GUARD_PREFIX@_SYS_RANDOM_H
+
+#if @HAVE_SYS_RANDOM_H@
+
+/* On uClibc < 1.0.35, <sys/random.h> assumes prior inclusion of <stddef.h>.
+ Do not use __UCLIBC__ here, as it might not be defined yet.
+ But avoid namespace pollution on glibc systems. */
+# ifndef __GLIBC__
+# include <stddef.h>
+# endif
+/* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>.
+ On Max OS X 10.13, <sys/random.h> assumes prior inclusion of a file that
+ includes <Availability.h>, such as <stdlib.h> or <unistd.h>. */
+# if defined __APPLE__ && defined __MACH__ /* Mac OS X */
+# include <sys/types.h>
+# include <stdlib.h>
+# endif
+
+/* The include_next requires a split double-inclusion guard. */
+# @INCLUDE_NEXT@ @NEXT_SYS_RANDOM_H@
+
+#endif
+
+#ifndef _@GUARD_PREFIX@_SYS_RANDOM_H
+#define _@GUARD_PREFIX@_SYS_RANDOM_H
+
+#include <sys/types.h>
+
+/* Define the GRND_* constants. */
+#ifndef GRND_NONBLOCK
+# define GRND_NONBLOCK 1
+# define GRND_RANDOM 2
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
+/* Declare overridden functions. */
+
+
+#if @GNULIB_GETRANDOM@
+/* Fill a buffer with random bytes. */
+# if @REPLACE_GETRANDOM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getrandom
+# define getrandom rpl_getrandom
+# endif
+_GL_FUNCDECL_RPL (getrandom, ssize_t,
+ (void *buffer, size_t length, unsigned int flags)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getrandom, ssize_t,
+ (void *buffer, size_t length, unsigned int flags));
+# else
+# if !@HAVE_GETRANDOM@
+_GL_FUNCDECL_SYS (getrandom, ssize_t,
+ (void *buffer, size_t length, unsigned int flags)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getrandom, ssize_t,
+ (void *buffer, size_t length, unsigned int flags));
+# endif
+# if __GLIBC__ + (__GLIBC_MINOR__ >= 25) > 2
+_GL_CXXALIASWARN (getrandom);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getrandom
+# if HAVE_RAW_DECL_GETRANDOM
+_GL_WARN_ON_USE (getrandom, "getrandom is unportable - "
+ "use gnulib module getrandom for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */
+#endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */
diff --git a/lib/sys_stat.in.h b/lib/sys_stat.in.h
new file mode 100644
index 0000000..0c2f39c
--- /dev/null
+++ b/lib/sys_stat.in.h
@@ -0,0 +1,958 @@
+/* Provide a more complete sys/stat.h header file.
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */
+
+/* This file is supposed to be used on platforms where <sys/stat.h> is
+ incomplete. It is intended to provide definitions and prototypes
+ needed by an application. Start with what the system provides. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_system_sys_stat_h
+/* Special invocation convention. */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H
+
+/* Get nlink_t.
+ May also define off_t to a 64-bit type on native Windows. */
+#include <sys/types.h>
+
+/* Get struct timespec. */
+#include <time.h>
+
+/* The include_next requires a split double-inclusion guard. */
+#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@
+
+#ifndef _@GUARD_PREFIX@_SYS_STAT_H
+#define _@GUARD_PREFIX@_SYS_STAT_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Before doing "#define mknod rpl_mknod" below, we need to include all
+ headers that may declare mknod(). OS/2 kLIBC declares mknod() in
+ <unistd.h>, not in <sys/stat.h>. */
+#ifdef __KLIBC__
+# include <unistd.h>
+#endif
+
+/* Before doing "#define mkdir rpl_mkdir" below, we need to include all
+ headers that may declare mkdir(). Native Windows platforms declare mkdir
+ in <io.h> and/or <direct.h>, not in <sys/stat.h>. */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <io.h> /* mingw32, mingw64 */
+# include <direct.h> /* mingw64, MSVC 9 */
+#endif
+
+/* Native Windows platforms declare umask() in <io.h>. */
+#if 0 && (defined _WIN32 && ! defined __CYGWIN__)
+# include <io.h>
+#endif
+
+/* Large File Support on native Windows. */
+#if @WINDOWS_64_BIT_ST_SIZE@
+# define stat _stati64
+#endif
+
+/* Optionally, override 'struct stat' on native Windows. */
+#if @GNULIB_OVERRIDES_STRUCT_STAT@
+
+# undef stat
+# if @GNULIB_STAT@
+# define stat rpl_stat
+# else
+ /* Provoke a clear link error if stat() is used as a function and
+ module 'stat' is not in use. */
+# define stat stat_used_without_requesting_gnulib_module_stat
+# endif
+
+# if !GNULIB_defined_struct_stat
+struct stat
+{
+ dev_t st_dev;
+ ino_t st_ino;
+ mode_t st_mode;
+ nlink_t st_nlink;
+# if 0
+ uid_t st_uid;
+# else /* uid_t is not defined by default on native Windows. */
+ short st_uid;
+# endif
+# if 0
+ gid_t st_gid;
+# else /* gid_t is not defined by default on native Windows. */
+ short st_gid;
+# endif
+ dev_t st_rdev;
+ off_t st_size;
+# if 0
+ blksize_t st_blksize;
+ blkcnt_t st_blocks;
+# endif
+
+# if @WINDOWS_STAT_TIMESPEC@
+ struct timespec st_atim;
+ struct timespec st_mtim;
+ struct timespec st_ctim;
+# else
+ time_t st_atime;
+ time_t st_mtime;
+ time_t st_ctime;
+# endif
+};
+# if @WINDOWS_STAT_TIMESPEC@
+# define st_atime st_atim.tv_sec
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+ /* Indicator, for gnulib internal purposes. */
+# define _GL_WINDOWS_STAT_TIMESPEC 1
+# endif
+# define GNULIB_defined_struct_stat 1
+# endif
+
+/* Other possible values of st_mode. */
+# if 0
+# define _S_IFBLK 0x6000
+# endif
+# if 0
+# define _S_IFLNK 0xA000
+# endif
+# if 0
+# define _S_IFSOCK 0xC000
+# endif
+
+#endif
+
+#ifndef S_IFIFO
+# ifdef _S_IFIFO
+# define S_IFIFO _S_IFIFO
+# endif
+#endif
+
+#ifndef S_IFMT
+# define S_IFMT 0170000
+#endif
+
+#if STAT_MACROS_BROKEN
+# undef S_ISBLK
+# undef S_ISCHR
+# undef S_ISDIR
+# undef S_ISFIFO
+# undef S_ISLNK
+# undef S_ISNAM
+# undef S_ISMPB
+# undef S_ISMPC
+# undef S_ISNWK
+# undef S_ISREG
+# undef S_ISSOCK
+#endif
+
+#ifndef S_ISBLK
+# ifdef S_IFBLK
+# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+# else
+# define S_ISBLK(m) 0
+# endif
+#endif
+
+#ifndef S_ISCHR
+# ifdef S_IFCHR
+# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+# else
+# define S_ISCHR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDIR
+# ifdef S_IFDIR
+# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+# else
+# define S_ISDIR(m) 0
+# endif
+#endif
+
+#ifndef S_ISDOOR /* Solaris 2.5 and up */
+# define S_ISDOOR(m) 0
+#endif
+
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+# define S_ISFIFO(m) 0
+# endif
+#endif
+
+#ifndef S_ISLNK
+# ifdef S_IFLNK
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+# else
+# define S_ISLNK(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPB /* V7 */
+# ifdef S_IFMPB
+# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
+# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
+# else
+# define S_ISMPB(m) 0
+# define S_ISMPC(m) 0
+# endif
+#endif
+
+#ifndef S_ISMPX /* AIX */
+# define S_ISMPX(m) 0
+#endif
+
+#ifndef S_ISNAM /* Xenix */
+# ifdef S_IFNAM
+# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM)
+# else
+# define S_ISNAM(m) 0
+# endif
+#endif
+
+#ifndef S_ISNWK /* HP/UX */
+# ifdef S_IFNWK
+# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
+# else
+# define S_ISNWK(m) 0
+# endif
+#endif
+
+#ifndef S_ISPORT /* Solaris 10 and up */
+# define S_ISPORT(m) 0
+#endif
+
+#ifndef S_ISREG
+# ifdef S_IFREG
+# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+# else
+# define S_ISREG(m) 0
+# endif
+#endif
+
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+# define S_ISSOCK(m) 0
+# endif
+#endif
+
+
+#ifndef S_TYPEISMQ
+# define S_TYPEISMQ(p) 0
+#endif
+
+#ifndef S_TYPEISTMO
+# define S_TYPEISTMO(p) 0
+#endif
+
+
+#ifndef S_TYPEISSEM
+# ifdef S_INSEM
+# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM)
+# else
+# define S_TYPEISSEM(p) 0
+# endif
+#endif
+
+#ifndef S_TYPEISSHM
+# ifdef S_INSHD
+# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD)
+# else
+# define S_TYPEISSHM(p) 0
+# endif
+#endif
+
+/* high performance ("contiguous data") */
+#ifndef S_ISCTG
+# define S_ISCTG(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with data */
+#ifndef S_ISOFD
+# define S_ISOFD(p) 0
+#endif
+
+/* Cray DMF (data migration facility): off line, with no data */
+#ifndef S_ISOFL
+# define S_ISOFL(p) 0
+#endif
+
+/* 4.4BSD whiteout */
+#ifndef S_ISWHT
+# define S_ISWHT(m) 0
+#endif
+
+/* If any of the following are undefined,
+ define them to their de facto standard values. */
+#if !S_ISUID
+# define S_ISUID 04000
+#endif
+#if !S_ISGID
+# define S_ISGID 02000
+#endif
+
+/* S_ISVTX is a common extension to POSIX. */
+#ifndef S_ISVTX
+# define S_ISVTX 01000
+#endif
+
+#if !S_IRUSR && S_IREAD
+# define S_IRUSR S_IREAD
+#endif
+#if !S_IRUSR
+# define S_IRUSR 00400
+#endif
+#if !S_IRGRP
+# define S_IRGRP (S_IRUSR >> 3)
+#endif
+#if !S_IROTH
+# define S_IROTH (S_IRUSR >> 6)
+#endif
+
+#if !S_IWUSR && S_IWRITE
+# define S_IWUSR S_IWRITE
+#endif
+#if !S_IWUSR
+# define S_IWUSR 00200
+#endif
+#if !S_IWGRP
+# define S_IWGRP (S_IWUSR >> 3)
+#endif
+#if !S_IWOTH
+# define S_IWOTH (S_IWUSR >> 6)
+#endif
+
+#if !S_IXUSR && S_IEXEC
+# define S_IXUSR S_IEXEC
+#endif
+#if !S_IXUSR
+# define S_IXUSR 00100
+#endif
+#if !S_IXGRP
+# define S_IXGRP (S_IXUSR >> 3)
+#endif
+#if !S_IXOTH
+# define S_IXOTH (S_IXUSR >> 6)
+#endif
+
+#if !S_IRWXU
+# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
+#endif
+#if !S_IRWXG
+# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP)
+#endif
+#if !S_IRWXO
+# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH)
+#endif
+
+/* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are
+ not implemented in GNU/Linux, some Gnulib-using apps use the macros. */
+#if !S_IXUGO
+# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
+#endif
+#ifndef S_IRWXUGO
+# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
+
+/* Macros for futimens and utimensat. */
+#ifndef UTIME_NOW
+# define UTIME_NOW (-1)
+# define UTIME_OMIT (-2)
+#endif
+
+
+#if @GNULIB_CHMOD@
+# if @REPLACE_CHMOD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chmod
+# define chmod rpl_chmod
+# endif
+_GL_FUNCDECL_RPL (chmod, int, (const char *filename, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chmod, int, (const char *filename, mode_t mode));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chmod
+# define chmod _chmod
+# endif
+/* Need to cast, because in mingw the last argument is 'int mode'. */
+_GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (chmod);
+#elif defined GNULIB_POSIXCHECK
+# undef chmod
+# if HAVE_RAW_DECL_CHMOD
+_GL_WARN_ON_USE (chmod, "chmod has portability problems - "
+ "use gnulib module chmod for portability");
+# endif
+#elif @GNULIB_MDA_CHMOD@
+/* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::chmod always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chmod
+# define chmod _chmod
+# endif
+/* Need to cast, because in mingw the last argument is 'int mode'. */
+_GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode));
+# endif
+_GL_CXXALIASWARN (chmod);
+#endif
+
+
+#if @GNULIB_FCHMODAT@
+# if @REPLACE_FCHMODAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fchmodat
+# define fchmodat rpl_fchmodat
+# endif
+_GL_FUNCDECL_RPL (fchmodat, int,
+ (int fd, char const *file, mode_t mode, int flag)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchmodat, int,
+ (int fd, char const *file, mode_t mode, int flag));
+# else
+# if !@HAVE_FCHMODAT@
+_GL_FUNCDECL_SYS (fchmodat, int,
+ (int fd, char const *file, mode_t mode, int flag)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchmodat, int,
+ (int fd, char const *file, mode_t mode, int flag));
+# endif
+_GL_CXXALIASWARN (fchmodat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchmodat
+# if HAVE_RAW_DECL_FCHMODAT
+_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - "
+ "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSTAT@
+# if @REPLACE_FSTAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fstat
+# define fstat rpl_fstat
+# endif
+_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf));
+# else
+_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fstat);
+# endif
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef fstat
+# define fstat fstat_used_without_requesting_gnulib_module_fstat
+#elif @WINDOWS_64_BIT_ST_SIZE@
+/* Above, we define stat to _stati64. */
+# define fstat _fstati64
+#elif defined GNULIB_POSIXCHECK
+# undef fstat
+# if HAVE_RAW_DECL_FSTAT
+_GL_WARN_ON_USE (fstat, "fstat has portability problems - "
+ "use gnulib module fstat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSTATAT@
+# if @REPLACE_FSTATAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fstatat
+# define fstatat rpl_fstatat
+# endif
+_GL_FUNCDECL_RPL (fstatat, int,
+ (int fd, char const *restrict name, struct stat *restrict st,
+ int flags)
+ _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (fstatat, int,
+ (int fd, char const *restrict name, struct stat *restrict st,
+ int flags));
+# else
+# if !@HAVE_FSTATAT@
+_GL_FUNCDECL_SYS (fstatat, int,
+ (int fd, char const *restrict name, struct stat *restrict st,
+ int flags)
+ _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (fstatat, int,
+ (int fd, char const *restrict name, struct stat *restrict st,
+ int flags));
+# endif
+_GL_CXXALIASWARN (fstatat);
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef fstatat
+# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat
+#elif defined GNULIB_POSIXCHECK
+# undef fstatat
+# if HAVE_RAW_DECL_FSTATAT
+_GL_WARN_ON_USE (fstatat, "fstatat is not portable - "
+ "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FUTIMENS@
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens
+ implementation relies on futimesat, which on Solaris 10 makes an invocation
+ to futimens that is meant to invoke the libc's futimens(), not gnulib's
+ futimens(). */
+# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef futimens
+# define futimens rpl_futimens
+# endif
+_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2]));
+_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2]));
+# else
+# if !@HAVE_FUTIMENS@
+_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));
+# endif
+# if __GLIBC__ >= 2 && @HAVE_FUTIMENS@
+_GL_CXXALIASWARN (futimens);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef futimens
+# if HAVE_RAW_DECL_FUTIMENS
+_GL_WARN_ON_USE (futimens, "futimens is not portable - "
+ "use gnulib module futimens for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETUMASK@
+# if !@HAVE_GETUMASK@
+_GL_FUNCDECL_SYS (getumask, mode_t, (void));
+# endif
+_GL_CXXALIAS_SYS (getumask, mode_t, (void));
+# if @HAVE_GETUMASK@
+_GL_CXXALIASWARN (getumask);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getumask
+# if HAVE_RAW_DECL_GETUMASK
+_GL_WARN_ON_USE (getumask, "getumask is not portable - "
+ "use gnulib module getumask for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHMOD@
+/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME
+ denotes a symbolic link. */
+# if !@HAVE_LCHMOD@ || defined __hpux
+_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode));
+_GL_CXXALIASWARN (lchmod);
+#elif defined GNULIB_POSIXCHECK
+# undef lchmod
+# if HAVE_RAW_DECL_LCHMOD
+_GL_WARN_ON_USE (lchmod, "lchmod is unportable - "
+ "use gnulib module lchmod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKDIR@
+# if @REPLACE_MKDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkdir
+# define mkdir rpl_mkdir
+# endif
+_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# elif defined _WIN32 && !defined __CYGWIN__
+/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments.
+ Additionally, it declares _mkdir (and depending on compile flags, an
+ alias mkdir), only in the nonstandard includes <direct.h> and <io.h>,
+ which are included above. */
+# if !GNULIB_defined_rpl_mkdir
+static int
+rpl_mkdir (char const *name, mode_t mode)
+{
+ return _mkdir (name);
+}
+# define GNULIB_defined_rpl_mkdir 1
+# endif
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkdir
+# define mkdir rpl_mkdir
+# endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkdir);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdir
+# if HAVE_RAW_DECL_MKDIR
+_GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - "
+ "use gnulib module mkdir for portability");
+# endif
+#elif @GNULIB_MDA_MKDIR@
+/* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::mkdir always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !GNULIB_defined_rpl_mkdir
+static int
+rpl_mkdir (char const *name, mode_t mode)
+{
+ return _mkdir (name);
+}
+# define GNULIB_defined_rpl_mkdir 1
+# endif
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkdir
+# define mkdir rpl_mkdir
+# endif
+_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode));
+# else
+_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkdir);
+#endif
+
+
+#if @GNULIB_MKDIRAT@
+# if !@HAVE_MKDIRAT@
+_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode));
+_GL_CXXALIASWARN (mkdirat);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdirat
+# if HAVE_RAW_DECL_MKDIRAT
+_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - "
+ "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFO@
+# if @REPLACE_MKFIFO@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkfifo
+# define mkfifo rpl_mkfifo
+# endif
+_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode));
+# else
+# if !@HAVE_MKFIFO@
+_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode));
+# endif
+_GL_CXXALIASWARN (mkfifo);
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifo
+# if HAVE_RAW_DECL_MKFIFO
+_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - "
+ "use gnulib module mkfifo for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKFIFOAT@
+# if @REPLACE_MKFIFOAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mkfifoat
+# define mkfifoat rpl_mkfifoat
+# endif
+_GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode));
+# else
+# if !@HAVE_MKFIFOAT@
+_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mkfifoat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mkfifoat
+# if HAVE_RAW_DECL_MKFIFOAT
+_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - "
+ "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNOD@
+# if @REPLACE_MKNOD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mknod
+# define mknod rpl_mknod
+# endif
+_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# else
+# if !@HAVE_MKNOD@
+_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev)
+ _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */
+_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev));
+# endif
+_GL_CXXALIASWARN (mknod);
+#elif defined GNULIB_POSIXCHECK
+# undef mknod
+# if HAVE_RAW_DECL_MKNOD
+_GL_WARN_ON_USE (mknod, "mknod is not portable - "
+ "use gnulib module mknod for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MKNODAT@
+# if @REPLACE_MKNODAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mknodat
+# define mknodat rpl_mknodat
+# endif
+_GL_FUNCDECL_RPL (mknodat, int,
+ (int fd, char const *file, mode_t mode, dev_t dev)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mknodat, int,
+ (int fd, char const *file, mode_t mode, dev_t dev));
+# else
+# if !@HAVE_MKNODAT@
+_GL_FUNCDECL_SYS (mknodat, int,
+ (int fd, char const *file, mode_t mode, dev_t dev)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mknodat, int,
+ (int fd, char const *file, mode_t mode, dev_t dev));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mknodat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mknodat
+# if HAVE_RAW_DECL_MKNODAT
+_GL_WARN_ON_USE (mknodat, "mknodat is not portable - "
+ "use gnulib module mkfifoat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_STAT@
+# if @REPLACE_STAT@
+# if !@GNULIB_OVERRIDES_STRUCT_STAT@
+ /* We can't use the object-like #define stat rpl_stat, because of
+ struct stat. This means that rpl_stat will not be used if the user
+ does (stat)(a,b). Oh well. */
+# if defined _AIX && defined stat && defined _LARGE_FILES
+ /* With _LARGE_FILES defined, AIX (only) defines stat to stat64,
+ so we have to replace stat64() instead of stat(). */
+# undef stat64
+# define stat64(name, st) rpl_stat (name, st)
+# elif @WINDOWS_64_BIT_ST_SIZE@
+ /* Above, we define stat to _stati64. */
+# if defined __MINGW32__ && defined _stati64
+# ifndef _USE_32BIT_TIME_T
+ /* The system headers define _stati64 to _stat64. */
+# undef _stat64
+# define _stat64(name, st) rpl_stat (name, st)
+# endif
+# elif defined _MSC_VER && defined _stati64
+# ifdef _USE_32BIT_TIME_T
+ /* The system headers define _stati64 to _stat32i64. */
+# undef _stat32i64
+# define _stat32i64(name, st) rpl_stat (name, st)
+# else
+ /* The system headers define _stati64 to _stat64. */
+# undef _stat64
+# define _stat64(name, st) rpl_stat (name, st)
+# endif
+# else
+# undef _stati64
+# define _stati64(name, st) rpl_stat (name, st)
+# endif
+# elif defined __MINGW32__ && defined stat
+# ifdef _USE_32BIT_TIME_T
+ /* The system headers define stat to _stat32i64. */
+# undef _stat32i64
+# define _stat32i64(name, st) rpl_stat (name, st)
+# else
+ /* The system headers define stat to _stat64. */
+# undef _stat64
+# define _stat64(name, st) rpl_stat (name, st)
+# endif
+# elif defined _MSC_VER && defined stat
+# ifdef _USE_32BIT_TIME_T
+ /* The system headers define stat to _stat32. */
+# undef _stat32
+# define _stat32(name, st) rpl_stat (name, st)
+# else
+ /* The system headers define stat to _stat64i32. */
+# undef _stat64i32
+# define _stat64i32(name, st) rpl_stat (name, st)
+# endif
+# else /* !(_AIX || __MINGW32__ || _MSC_VER) */
+# undef stat
+# define stat(name, st) rpl_stat (name, st)
+# endif /* !_LARGE_FILES */
+# endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */
+_GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf)
+ _GL_ARG_NONNULL ((1, 2));
+# endif
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+/* see above:
+ #define stat stat_used_without_requesting_gnulib_module_stat
+ */
+#elif defined GNULIB_POSIXCHECK
+# undef stat
+# if HAVE_RAW_DECL_STAT
+_GL_WARN_ON_USE (stat, "stat is unportable - "
+ "use gnulib module stat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSTAT@
+# if ! @HAVE_LSTAT@
+/* mingw does not support symlinks, therefore it does not have lstat. But
+ without links, stat does just fine. */
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define lstat stat
+# endif
+_GL_CXXALIAS_RPL_1 (lstat, stat, int,
+ (const char *restrict name, struct stat *restrict buf));
+# elif @REPLACE_LSTAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef lstat
+# define lstat rpl_lstat
+# endif
+_GL_FUNCDECL_RPL (lstat, int,
+ (const char *restrict name, struct stat *restrict buf)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (lstat, int,
+ (const char *restrict name, struct stat *restrict buf));
+# else
+_GL_CXXALIAS_SYS (lstat, int,
+ (const char *restrict name, struct stat *restrict buf));
+# endif
+# if @HAVE_LSTAT@
+_GL_CXXALIASWARN (lstat);
+# endif
+#elif @GNULIB_OVERRIDES_STRUCT_STAT@
+# undef lstat
+# define lstat lstat_used_without_requesting_gnulib_module_lstat
+#elif defined GNULIB_POSIXCHECK
+# undef lstat
+# if HAVE_RAW_DECL_LSTAT
+_GL_WARN_ON_USE (lstat, "lstat is unportable - "
+ "use gnulib module lstat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MDA_UMASK@
+/* On native Windows, map 'umask' to '_umask', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::umask always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef umask
+# define umask _umask
+# endif
+/* Need to cast, because in mingw the last argument is 'int mode'. */
+_GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask));
+# else
+_GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask));
+# endif
+_GL_CXXALIASWARN (umask);
+#endif
+
+
+#if @GNULIB_UTIMENSAT@
+/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat
+ implementation relies on futimesat, which on Solaris 10 makes an invocation
+ to utimensat that is meant to invoke the libc's utimensat(), not gnulib's
+ utimensat(). */
+# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef utimensat
+# define utimensat rpl_utimensat
+# endif
+_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name,
+ struct timespec const times[2], int flag)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name,
+ struct timespec const times[2], int flag));
+# else
+# if !@HAVE_UTIMENSAT@
+_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,
+ struct timespec const times[2], int flag)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,
+ struct timespec const times[2], int flag));
+# endif
+# if __GLIBC__ >= 2 && @HAVE_UTIMENSAT@
+_GL_CXXALIASWARN (utimensat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef utimensat
+# if HAVE_RAW_DECL_UTIMENSAT
+_GL_WARN_ON_USE (utimensat, "utimensat is not portable - "
+ "use gnulib module utimensat for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
+#endif /* _@GUARD_PREFIX@_SYS_STAT_H */
+#endif
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
new file mode 100644
index 0000000..082a6c6
--- /dev/null
+++ b/lib/sys_types.in.h
@@ -0,0 +1,106 @@
+/* Provide a more complete sys/types.h.
+
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined _WIN32 && !defined __CYGWIN__ \
+ && (defined __need_off_t || defined __need___off64_t \
+ || defined __need_ssize_t || defined __need_time_t)
+
+/* Special invocation convention inside mingw header files. */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* The include_next requires a split double-inclusion guard. */
+# define _GL_INCLUDING_SYS_TYPES_H
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+# undef _GL_INCLUDING_SYS_TYPES_H
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+#define _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* Override off_t if Large File Support is requested on native Windows. */
+#if @WINDOWS_64_BIT_OFF_T@
+/* Same as int64_t in <stdint.h>. */
+# if defined _MSC_VER
+# define off_t __int64
+# else
+# define off_t long long int
+# endif
+/* Indicator, for gnulib internal purposes. */
+# define _GL_WINDOWS_64_BIT_OFF_T 1
+#endif
+
+/* Override dev_t and ino_t if distinguishable inodes support is requested
+ on native Windows. */
+#if @WINDOWS_STAT_INODES@
+
+# if @WINDOWS_STAT_INODES@ == 2
+/* Experimental, not useful in Windows 10. */
+
+/* Define dev_t to a 64-bit type. */
+# if !defined GNULIB_defined_dev_t
+typedef unsigned long long int rpl_dev_t;
+# undef dev_t
+# define dev_t rpl_dev_t
+# define GNULIB_defined_dev_t 1
+# endif
+
+/* Define ino_t to a 128-bit type. */
+# if !defined GNULIB_defined_ino_t
+/* MSVC does not have a 128-bit integer type.
+ GCC has a 128-bit integer type __int128, but only on 64-bit targets. */
+typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t;
+# undef ino_t
+# define ino_t rpl_ino_t
+# define GNULIB_defined_ino_t 1
+# endif
+
+# else /* @WINDOWS_STAT_INODES@ == 1 */
+
+/* Define ino_t to a 64-bit type. */
+# if !defined GNULIB_defined_ino_t
+typedef unsigned long long int rpl_ino_t;
+# undef ino_t
+# define ino_t rpl_ino_t
+# define GNULIB_defined_ino_t 1
+# endif
+
+# endif
+
+/* Indicator, for gnulib internal purposes. */
+# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@
+
+#endif
+
+/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__
+# include <stddef.h>
+#endif
+
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* __need_XXX */
diff --git a/lib/tempname.c b/lib/tempname.c
new file mode 100644
index 0000000..bf362db
--- /dev/null
+++ b/lib/tempname.c
@@ -0,0 +1,286 @@
+/* Copyright (C) 1991-2023 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#if !_LIBC
+# include <libc-config.h>
+# include "tempname.h"
+#endif
+
+#include <errno.h>
+
+#include <stdio.h>
+#ifndef TMP_MAX
+# define TMP_MAX 238328
+#endif
+#ifndef __GT_FILE
+# define __GT_FILE 0
+# define __GT_DIR 1
+# define __GT_NOCREATE 2
+#endif
+#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \
+ || GT_NOCREATE != __GT_NOCREATE)
+# error report this to bug-gnulib@gnu.org
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <fcntl.h>
+#include <stdint.h>
+#include <sys/random.h>
+#include <sys/stat.h>
+#include <time.h>
+
+#if _LIBC
+# define struct_stat64 struct __stat64_t64
+#else
+# define struct_stat64 struct stat
+# define __gen_tempname gen_tempname
+# define __mkdir mkdir
+# define __open open
+# define __lstat64_time64(file, buf) lstat (file, buf)
+# define __getrandom getrandom
+# define __clock_gettime64 clock_gettime
+# define __timespec64 timespec
+#endif
+
+/* Use getrandom if it works, falling back on a 64-bit linear
+ congruential generator that starts with Var's value
+ mixed in with a clock's low-order bits if available. */
+typedef uint_fast64_t random_value;
+#define RANDOM_VALUE_MAX UINT_FAST64_MAX
+#define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */
+#define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62)
+
+/* Return the result of mixing the entropy from R and S.
+ Assume that R and S are not particularly random,
+ and that the result should look randomish to an untrained eye. */
+
+static random_value
+mix_random_values (random_value r, random_value s)
+{
+ /* As this code is used only when high-quality randomness is neither
+ available nor necessary, there is no need for fancier polynomials
+ such as those in the Linux kernel's 'random' driver. */
+ return (2862933555777941757 * r + 3037000493) ^ s;
+}
+
+/* Set *R to a random value.
+ Return true if *R is set to high-quality value taken from getrandom.
+ Otherwise return false, falling back to a low-quality *R that might
+ depend on S.
+
+ This function returns false only when getrandom fails.
+ On GNU systems this should happen only early in the boot process,
+ when the fallback should be good enough for programs using tempname
+ because any attacker likely has root privileges already. */
+
+static bool
+random_bits (random_value *r, random_value s)
+{
+ /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */
+ if (__getrandom (r, sizeof *r, GRND_NONBLOCK) == sizeof *r)
+ return true;
+
+ /* If getrandom did not work, use ersatz entropy based on low-order
+ clock bits. On GNU systems getrandom should fail only
+ early in booting, when ersatz should be good enough.
+ Do not use ASLR-based entropy, as that would leak ASLR info into
+ the resulting file name which is typically public.
+
+ Of course we are in a state of sin here. */
+
+ random_value v = s;
+
+#if _LIBC || (defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME)
+ struct __timespec64 tv;
+ __clock_gettime64 (CLOCK_REALTIME, &tv);
+ v = mix_random_values (v, tv.tv_sec);
+ v = mix_random_values (v, tv.tv_nsec);
+#endif
+
+ *r = mix_random_values (v, clock ());
+ return false;
+}
+
+#if _LIBC
+static int try_tempname_len (char *, int, void *, int (*) (char *, void *),
+ size_t);
+#endif
+
+static int
+try_file (char *tmpl, void *flags)
+{
+ int *openflags = flags;
+ return __open (tmpl,
+ (*openflags & ~O_ACCMODE)
+ | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+}
+
+static int
+try_dir (char *tmpl, _GL_UNUSED void *flags)
+{
+ return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
+}
+
+static int
+try_nocreate (char *tmpl, _GL_UNUSED void *flags)
+{
+ struct_stat64 st;
+
+ if (__lstat64_time64 (tmpl, &st) == 0 || errno == EOVERFLOW)
+ __set_errno (EEXIST);
+ return errno == ENOENT ? 0 : -1;
+}
+
+/* These are the characters used in temporary file names. */
+static const char letters[] =
+"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+
+/* Generate a temporary file name based on TMPL. TMPL must match the
+ rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s,
+ possibly with a suffix).
+ The name constructed does not exist at the time of the call to
+ this function. TMPL is overwritten with the result.
+
+ KIND may be one of:
+ __GT_NOCREATE: simply verify that the name does not exist
+ at the time of the call.
+ __GT_FILE: create the file using open(O_CREAT|O_EXCL)
+ and return a read-write fd. The file is mode 0600.
+ __GT_DIR: create a directory, which will be mode 0700.
+
+ */
+#ifdef _LIBC
+static
+#endif
+int
+gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind,
+ size_t x_suffix_len)
+{
+ static int (*const tryfunc[]) (char *, void *) =
+ {
+ [__GT_FILE] = try_file,
+ [__GT_DIR] = try_dir,
+ [__GT_NOCREATE] = try_nocreate
+ };
+ return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind],
+ x_suffix_len);
+}
+
+#ifdef _LIBC
+static
+#endif
+int
+try_tempname_len (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *), size_t x_suffix_len)
+{
+ size_t len;
+ char *XXXXXX;
+ unsigned int count;
+ int fd = -1;
+ int save_errno = errno;
+
+ /* A lower bound on the number of temporary files to attempt to
+ generate. The maximum total number of temporary file names that
+ can exist for a given template is 62**6. It should never be
+ necessary to try all of these combinations. Instead if a reasonable
+ number of names is tried (we define reasonable as 62**3) fail to
+ give the system administrator the chance to remove the problems.
+ This value requires that X_SUFFIX_LEN be at least 3. */
+#define ATTEMPTS_MIN (62 * 62 * 62)
+
+ /* The number of times to attempt to generate a temporary file. To
+ conform to POSIX, this must be no smaller than TMP_MAX. */
+#if ATTEMPTS_MIN < TMP_MAX
+ unsigned int attempts = TMP_MAX;
+#else
+ unsigned int attempts = ATTEMPTS_MIN;
+#endif
+
+ /* A random variable. */
+ random_value v = 0;
+
+ /* A value derived from the random variable, and how many random
+ base-62 digits can currently be extracted from VDIGBUF. */
+ random_value vdigbuf;
+ int vdigits = 0;
+
+ /* Least biased value for V. If V is less than this, V can generate
+ BASE_62_DIGITS unbiased digits. Otherwise the digits are biased. */
+ random_value const biased_min
+ = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER;
+
+ len = strlen (tmpl);
+ if (len < x_suffix_len + suffixlen
+ || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ /* This is where the Xs start. */
+ XXXXXX = &tmpl[len - x_suffix_len - suffixlen];
+
+ for (count = 0; count < attempts; ++count)
+ {
+ for (size_t i = 0; i < x_suffix_len; i++)
+ {
+ if (vdigits == 0)
+ {
+ /* Worry about bias only if the bits are high quality. */
+ while (random_bits (&v, v) && biased_min <= v)
+ continue;
+
+ vdigbuf = v;
+ vdigits = BASE_62_DIGITS;
+ }
+
+ XXXXXX[i] = letters[vdigbuf % 62];
+ vdigbuf /= 62;
+ vdigits--;
+ }
+
+ fd = tryfunc (tmpl, args);
+ if (fd >= 0)
+ {
+ __set_errno (save_errno);
+ return fd;
+ }
+ else if (errno != EEXIST)
+ return -1;
+ }
+
+ /* We got out of the loop because we ran out of combinations to try. */
+ __set_errno (EEXIST);
+ return -1;
+}
+
+int
+__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+{
+ return gen_tempname_len (tmpl, suffixlen, flags, kind, 6);
+}
+
+#if !_LIBC
+int
+try_tempname (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *))
+{
+ return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6);
+}
+#endif
diff --git a/lib/tempname.h b/lib/tempname.h
new file mode 100644
index 0000000..36a5138
--- /dev/null
+++ b/lib/tempname.h
@@ -0,0 +1,72 @@
+/* Create a temporary file or directory.
+
+ Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* header written by Eric Blake */
+
+#ifndef GL_TEMPNAME_H
+# define GL_TEMPNAME_H
+
+# include <stdio.h>
+
+# ifdef __GT_FILE
+# define GT_FILE __GT_FILE
+# define GT_DIR __GT_DIR
+# define GT_NOCREATE __GT_NOCREATE
+# else
+# define GT_FILE 0
+# define GT_DIR 1
+# define GT_NOCREATE 2
+# endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Generate a temporary file name based on TMPL. TMPL must match the
+ rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
+ The name constructed does not exist at the time of the call to
+ gen_tempname. TMPL is overwritten with the result.
+
+ KIND may be one of:
+ GT_NOCREATE: simply verify that the name does not exist
+ at the time of the call.
+ GT_FILE: create a large file using open(O_CREAT|O_EXCL)
+ and return a read-write fd. The file is mode 0600.
+ GT_DIR: create a directory, which will be mode 0700.
+
+ */
+extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind);
+/* Similar, except X_SUFFIX_LEN gives the number of Xs. */
+extern int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind,
+ size_t x_suffix_len);
+
+/* Similar to gen_tempname, but TRYFUNC is called for each temporary
+ name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME
+ returns with this value. Otherwise, if errno is set to EEXIST, another
+ name is tried, or else TRY_GEN_TEMPNAME returns -1. */
+extern int try_tempname (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *));
+/* Similar, except X_SUFFIX_LEN gives the number of Xs. */
+extern int try_tempname_len (char *tmpl, int suffixlen, void *args,
+ int (*tryfunc) (char *, void *),
+ size_t x_suffix_len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GL_TEMPNAME_H */
diff --git a/lib/time.in.h b/lib/time.in.h
new file mode 100644
index 0000000..3f9af92
--- /dev/null
+++ b/lib/time.in.h
@@ -0,0 +1,485 @@
+/* A more-standard <time.h>.
+
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* Don't get in the way of glibc when it includes time.h merely to
+ declare a few standard symbols, rather than to declare all the
+ symbols. (However, skip this for MinGW as it treats __need_time_t
+ incompatibly.) Also, Solaris 8 <time.h> eventually includes itself
+ recursively; if that is happening, just include the system <time.h>
+ without adding our own declarations. */
+#if (((defined __need_time_t || defined __need_clock_t \
+ || defined __need_timespec) \
+ && !defined __MINGW32__) \
+ || defined _@GUARD_PREFIX@_TIME_H)
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+#else
+
+# define _@GUARD_PREFIX@_TIME_H
+
+/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r,
+ localtime_r only if <unistd.h> or <pthread.h> has been included before. */
+# if defined __MINGW32__
+# include <unistd.h>
+# endif
+
+# @INCLUDE_NEXT@ @NEXT_TIME_H@
+
+/* NetBSD 5.0 mis-defines NULL. */
+# include <stddef.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Some systems don't define struct timespec (e.g., AIX 4.1).
+ Or they define it with the wrong member names or define it in <sys/time.h>
+ (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it,
+ but the pthreads-win32 library defines it in <pthread.h>. */
+# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@
+# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+# include <sys/time.h>
+# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+# include <pthread.h>
+# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+# include <unistd.h>
+# else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if !GNULIB_defined_struct_timespec
+# undef timespec
+# define timespec rpl_timespec
+struct timespec
+{
+ time_t tv_sec;
+ long int tv_nsec;
+};
+# define GNULIB_defined_struct_timespec 1
+# endif
+
+# ifdef __cplusplus
+}
+# endif
+
+# endif
+# endif
+
+# if !GNULIB_defined_struct_time_t_must_be_integral
+/* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html
+ requires time_t to be an integer type, even though C99 permits floating
+ point. We don't know of any implementation that uses floating
+ point, and it is much easier to write code that doesn't have to
+ worry about that corner case, so we force the issue. */
+struct __time_t_must_be_integral {
+ unsigned int __floating_time_t_unsupported : (time_t) 1;
+};
+# define GNULIB_defined_struct_time_t_must_be_integral 1
+# endif
+
+/* Define TIME_UTC, a positive integer constant used for timespec_get(). */
+# if ! @TIME_H_DEFINES_TIME_UTC@
+# if !GNULIB_defined_TIME_UTC
+# define TIME_UTC 1
+# define GNULIB_defined_TIME_UTC 1
+# endif
+# endif
+
+/* Set *TS to the current time, and return BASE.
+ Upon failure, return 0. */
+# if @GNULIB_TIMESPEC_GET@
+# if @REPLACE_TIMESPEC_GET@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef timespec_get
+# define timespec_get rpl_timespec_get
+# endif
+_GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base));
+# else
+# if !@HAVE_TIMESPEC_GET@
+_GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (timespec_get);
+# endif
+# endif
+
+/* Set *TS to the current time resolution, and return BASE.
+ Upon failure, return 0. */
+# if @GNULIB_TIMESPEC_GETRES@
+# if ! @HAVE_TIMESPEC_GETRES@
+_GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base));
+_GL_CXXALIASWARN (timespec_getres);
+# endif
+
+/* Return the number of seconds that have elapsed since the Epoch. */
+# if @GNULIB_TIME@
+# if @REPLACE_TIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define time rpl_time
+# endif
+_GL_FUNCDECL_RPL (time, time_t, (time_t *__tp));
+_GL_CXXALIAS_RPL (time, time_t, (time_t *__tp));
+# else
+_GL_CXXALIAS_SYS (time, time_t, (time_t *__tp));
+# endif
+_GL_CXXALIASWARN (time);
+# endif
+
+/* Sleep for at least RQTP seconds unless interrupted, If interrupted,
+ return -1 and store the remaining time into RMTP. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */
+# if @GNULIB_NANOSLEEP@
+# if @REPLACE_NANOSLEEP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define nanosleep rpl_nanosleep
+# endif
+_GL_FUNCDECL_RPL (nanosleep, int,
+ (struct timespec const *__rqtp, struct timespec *__rmtp)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (nanosleep, int,
+ (struct timespec const *__rqtp, struct timespec *__rmtp));
+# else
+# if ! @HAVE_NANOSLEEP@
+_GL_FUNCDECL_SYS (nanosleep, int,
+ (struct timespec const *__rqtp, struct timespec *__rmtp)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (nanosleep, int,
+ (struct timespec const *__rqtp, struct timespec *__rmtp));
+# endif
+_GL_CXXALIASWARN (nanosleep);
+# endif
+
+/* Initialize time conversion information. */
+# if @GNULIB_TZSET@
+# if @REPLACE_TZSET@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef tzset
+# define tzset rpl_tzset
+# endif
+_GL_FUNCDECL_RPL (tzset, void, (void));
+_GL_CXXALIAS_RPL (tzset, void, (void));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef tzset
+# define tzset _tzset
+# endif
+_GL_CXXALIAS_MDA (tzset, void, (void));
+# else
+_GL_CXXALIAS_SYS (tzset, void, (void));
+# endif
+_GL_CXXALIASWARN (tzset);
+# elif @GNULIB_MDA_TZSET@
+/* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::tzset always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef tzset
+# define tzset _tzset
+# endif
+_GL_CXXALIAS_MDA (tzset, void, (void));
+# else
+_GL_CXXALIAS_SYS (tzset, void, (void));
+# endif
+_GL_CXXALIASWARN (tzset);
+# endif
+
+/* Return the 'time_t' representation of TP and normalize TP. */
+# if @GNULIB_MKTIME@
+# if @REPLACE_MKTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define mktime rpl_mktime
+# endif
+_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp));
+# else
+_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mktime);
+# endif
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */
+# if @GNULIB_TIME_R@
+# if @REPLACE_LOCALTIME_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef localtime_r
+# define localtime_r rpl_localtime_r
+# endif
+_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result));
+# else
+# if ! @HAVE_DECL_LOCALTIME_R@
+_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result));
+# endif
+# if @HAVE_DECL_LOCALTIME_R@
+_GL_CXXALIASWARN (localtime_r);
+# endif
+# if @REPLACE_LOCALTIME_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef gmtime_r
+# define gmtime_r rpl_gmtime_r
+# endif
+_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result));
+# else
+# if ! @HAVE_DECL_LOCALTIME_R@
+_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,
+ struct tm *restrict __result));
+# endif
+# if @HAVE_DECL_LOCALTIME_R@
+_GL_CXXALIASWARN (gmtime_r);
+# endif
+# endif
+
+/* Convert TIMER to RESULT, assuming local time and UTC respectively. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */
+# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@
+# if @REPLACE_LOCALTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef localtime
+# define localtime rpl_localtime
+# endif
+_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer));
+# else
+_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (localtime);
+# endif
+# endif
+
+# if 0 || @REPLACE_GMTIME@
+# if @REPLACE_GMTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef gmtime
+# define gmtime rpl_gmtime
+# endif
+_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer));
+# else
+_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer));
+# endif
+_GL_CXXALIASWARN (gmtime);
+# endif
+
+/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store
+ the resulting broken-down time into TM. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */
+# if @GNULIB_STRPTIME@
+# if ! @HAVE_STRPTIME@
+_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf,
+ char const *restrict __format,
+ struct tm *restrict __tm)
+ _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,
+ char const *restrict __format,
+ struct tm *restrict __tm));
+_GL_CXXALIASWARN (strptime);
+# endif
+
+/* Convert *TP to a date and time string. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */
+# if @GNULIB_CTIME@
+# if @REPLACE_CTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define ctime rpl_ctime
+# endif
+_GL_ATTRIBUTE_DEPRECATED
+_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp));
+# else
+_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (ctime);
+# endif
+# endif
+
+/* Convert *TP to a date and time string. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */
+# if @GNULIB_STRFTIME@
+# if @REPLACE_STRFTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define strftime rpl_strftime
+# endif
+_GL_FUNCDECL_RPL (strftime, size_t,
+ (char *restrict __buf, size_t __bufsize,
+ const char *restrict __fmt, const struct tm *restrict __tp)
+ _GL_ARG_NONNULL ((1, 3, 4)));
+_GL_CXXALIAS_RPL (strftime, size_t,
+ (char *restrict __buf, size_t __bufsize,
+ const char *restrict __fmt, const struct tm *restrict __tp));
+# else
+_GL_CXXALIAS_SYS (strftime, size_t,
+ (char *restrict __buf, size_t __bufsize,
+ const char *restrict __fmt, const struct tm *restrict __tp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (strftime);
+# endif
+# endif
+
+# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@
+/* Functions that use a first-class time zone data type, instead of
+ relying on an implicit global time zone.
+ Inspired by NetBSD. */
+
+/* Represents a time zone.
+ (timezone_t) NULL stands for UTC. */
+typedef struct tm_zone *timezone_t;
+
+/* tzalloc (name)
+ Returns a time zone object for the given time zone NAME. This object
+ represents the time zone that other functions would use it the TZ
+ environment variable was set to NAME.
+ If NAME is NULL, the result represents the time zone that other functions
+ would use it the TZ environment variable was unset.
+ May return NULL if NAME is invalid (this is platform dependent) or
+ upon memory allocation failure. */
+_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name));
+_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name));
+
+/* tzfree (tz)
+ Frees a time zone object.
+ The argument must have been returned by tzalloc(). */
+_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz));
+_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz));
+
+/* localtime_rz (tz, &t, &result)
+ Converts an absolute time T to a broken-down time RESULT, assuming the
+ time zone TZ.
+ This function is like 'localtime_r', but relies on the argument TZ instead
+ of an implicit global time zone. */
+_GL_FUNCDECL_SYS (localtime_rz, struct tm *,
+ (timezone_t __tz, time_t const *restrict __timer,
+ struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_SYS (localtime_rz, struct tm *,
+ (timezone_t __tz, time_t const *restrict __timer,
+ struct tm *restrict __result));
+
+/* mktime_z (tz, &tm)
+ Normalizes the broken-down time TM and converts it to an absolute time,
+ assuming the time zone TZ. Returns the absolute time.
+ This function is like 'mktime', but relies on the argument TZ instead
+ of an implicit global time zone. */
+_GL_FUNCDECL_SYS (mktime_z, time_t,
+ (timezone_t __tz, struct tm *restrict __tm)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_SYS (mktime_z, time_t,
+ (timezone_t __tz, struct tm *restrict __tm));
+
+/* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z'
+ in the 'tm_zone' member of 'struct tm') are valid as long as
+ - the 'struct tm' argument is not destroyed or overwritten,
+ and
+ - the 'timezone_t' argument is not freed through tzfree(). */
+
+# endif
+
+/* Convert TM to a time_t value, assuming UTC. */
+# if @GNULIB_TIMEGM@
+# if @REPLACE_TIMEGM@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef timegm
+# define timegm rpl_timegm
+# endif
+_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm));
+# else
+# if ! @HAVE_TIMEGM@
+_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (timegm);
+# endif
+# endif
+
+/* Encourage applications to avoid unsafe functions that can overrun
+ buffers when given outlandish struct tm values. Portable
+ applications should use strftime (or even sprintf) instead. */
+# if defined GNULIB_POSIXCHECK
+# undef asctime
+_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "
+ "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef asctime_r
+# if HAVE_RAW_DECL_ASCTIME_R
+_GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - "
+ "better use strftime (or even sprintf) instead");
+# endif
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef ctime
+_GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - "
+ "better use strftime (or even sprintf) instead");
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef ctime_r
+# if HAVE_RAW_DECL_CTIME_R
+_GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - "
+ "better use strftime (or even sprintf) instead");
+# endif
+# endif
+
+#endif
diff --git a/lib/unistd.c b/lib/unistd.c
new file mode 100644
index 0000000..be7a825
--- /dev/null
+++ b/lib/unistd.c
@@ -0,0 +1,22 @@
+/* Inline functions for <unistd.h>.
+
+ Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE
+#include "unistd.h"
+typedef int dummy;
diff --git a/lib/unistd.in.h b/lib/unistd.in.h
new file mode 100644
index 0000000..8ba9867
--- /dev/null
+++ b/lib/unistd.in.h
@@ -0,0 +1,2411 @@
+/* Substitute for and wrapper around <unistd.h>.
+ Copyright (C) 2003-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef _@GUARD_PREFIX@_UNISTD_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H
+/* Special invocation convention:
+ - On Mac OS X 10.3.9 we have a sequence of nested includes
+ <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h>
+ In this situation, the functions are not yet declared, therefore we cannot
+ provide the C++ aliases. */
+
+#@INCLUDE_NEXT@ @NEXT_UNISTD_H@
+
+#else
+/* Normal invocation convention. */
+
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_UNISTD_H@
+# define _GL_INCLUDING_UNISTD_H
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# undef _GL_INCLUDING_UNISTD_H
+#endif
+
+/* Avoid lseek bugs in FreeBSD, macOS <https://bugs.gnu.org/61386>.
+ This bug is fixed after FreeBSD 13; see <https://bugs.freebsd.org/256205>.
+ Use macOS "9999" to stand for a future fixed macOS version. */
+#if defined __FreeBSD__ && __FreeBSD__ < 14
+# undef SEEK_DATA
+# undef SEEK_HOLE
+#elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA
+# ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+# include <AvailabilityMacros.h>
+# endif
+# if (!defined MAC_OS_X_VERSION_MIN_REQUIRED \
+ || MAC_OS_X_VERSION_MIN_REQUIRED < 99990000)
+# include <sys/fcntl.h> /* It also defines the two macros. */
+# undef SEEK_DATA
+# undef SEEK_HOLE
+# endif
+#endif
+
+/* Get all possible declarations of gethostname(). */
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
+ && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+#define _@GUARD_PREFIX@_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL. Also get size_t. */
+/* But avoid namespace pollution on glibc systems. */
+#ifndef __GLIBC__
+# include <stddef.h>
+#endif
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */
+/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include
+ it before we #define unlink rpl_unlink. */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \
+ && (defined _WIN32 && ! defined __CYGWIN__)) \
+ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \
+ && defined __CYGWIN__)) \
+ && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in
+ <unistd.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \
+ && (defined __CYGWIN__ || defined __ANDROID__) \
+ && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>. */
+/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in
+ <unistd.h>. */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */
+/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is
+ included here. */
+/* But avoid namespace pollution on glibc systems. */
+#if !defined __GLIBC__ && !defined __osf__
+# define __need_system_stdlib_h
+# include <stdlib.h>
+# undef __need_system_stdlib_h
+#endif
+
+/* Native Windows platforms declare _chdir, _getcwd, _rmdir in
+ <io.h> and/or <direct.h>, not in <unistd.h>.
+ They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(),
+ _lseek(), _read(), _unlink(), _write() in <io.h>. */
+#if defined _WIN32 && !defined __CYGWIN__
+# include <io.h>
+# include <direct.h>
+#endif
+
+/* Native Windows platforms declare _execl*, _execv* in <process.h>. */
+#if defined _WIN32 && !defined __CYGWIN__
+# include <process.h>
+#endif
+
+/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>.
+ NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \
+ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \
+ && !defined __GLIBC__
+# include <netdb.h>
+#endif
+
+/* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in
+ <sys/random.h>, not in <unistd.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \
+ && ((defined __APPLE__ && defined __MACH__) || defined __sun \
+ || defined __ANDROID__) \
+ && @UNISTD_H_HAVE_SYS_RANDOM_H@ \
+ && !defined __GLIBC__
+# include <sys/random.h>
+#endif
+
+/* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */
+/* But avoid namespace pollution on glibc systems. */
+#if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
+ && !defined __GLIBC__
+# include <sys/stat.h>
+#endif
+
+/* MSVC defines off_t in <sys/types.h>.
+ May also define off_t to a 64-bit type on native Windows. */
+/* Get off_t, ssize_t, mode_t. */
+#include <sys/types.h>
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
+/* Get getopt(), optarg, optind, opterr, optopt. */
+#if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT
+# include <getopt-cdefs.h>
+# include <getopt-pfx-core.h>
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_UNISTD_INLINE
+# define _GL_UNISTD_INLINE _GL_INLINE
+#endif
+
+/* Hide some function declarations from <winsock2.h>. */
+
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
+# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef socket
+# define socket socket_used_without_including_sys_socket_h
+# undef connect
+# define connect connect_used_without_including_sys_socket_h
+# undef accept
+# define accept accept_used_without_including_sys_socket_h
+# undef bind
+# define bind bind_used_without_including_sys_socket_h
+# undef getpeername
+# define getpeername getpeername_used_without_including_sys_socket_h
+# undef getsockname
+# define getsockname getsockname_used_without_including_sys_socket_h
+# undef getsockopt
+# define getsockopt getsockopt_used_without_including_sys_socket_h
+# undef listen
+# define listen listen_used_without_including_sys_socket_h
+# undef recv
+# define recv recv_used_without_including_sys_socket_h
+# undef send
+# define send send_used_without_including_sys_socket_h
+# undef recvfrom
+# define recvfrom recvfrom_used_without_including_sys_socket_h
+# undef sendto
+# define sendto sendto_used_without_including_sys_socket_h
+# undef setsockopt
+# define setsockopt setsockopt_used_without_including_sys_socket_h
+# undef shutdown
+# define shutdown shutdown_used_without_including_sys_socket_h
+# else
+ _GL_WARN_ON_USE (socket,
+ "socket() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (connect,
+ "connect() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (accept,
+ "accept() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (bind,
+ "bind() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (getpeername,
+ "getpeername() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (getsockname,
+ "getsockname() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (getsockopt,
+ "getsockopt() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (listen,
+ "listen() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (recv,
+ "recv() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (send,
+ "send() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (recvfrom,
+ "recvfrom() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (sendto,
+ "sendto() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (setsockopt,
+ "setsockopt() used without including <sys/socket.h>");
+ _GL_WARN_ON_USE (shutdown,
+ "shutdown() used without including <sys/socket.h>");
+# endif
+# endif
+# if !defined _@GUARD_PREFIX@_SYS_SELECT_H
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef select
+# define select select_used_without_including_sys_select_h
+# else
+ _GL_WARN_ON_USE (select,
+ "select() used without including <sys/select.h>");
+# endif
+# endif
+#endif
+
+
+/* OS/2 EMX lacks these macros. */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist. */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions. */
+
+
+#if @GNULIB_ACCESS@
+# if @REPLACE_ACCESS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef access
+# define access rpl_access
+# endif
+_GL_FUNCDECL_RPL (access, int, (const char *file, int mode)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (access, int, (const char *file, int mode));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef access
+# define access _access
+# endif
+_GL_CXXALIAS_MDA (access, int, (const char *file, int mode));
+# else
+_GL_CXXALIAS_SYS (access, int, (const char *file, int mode));
+# endif
+_GL_CXXALIASWARN (access);
+#elif defined GNULIB_POSIXCHECK
+# undef access
+# if HAVE_RAW_DECL_ACCESS
+/* The access() function is a security risk. */
+_GL_WARN_ON_USE (access, "access does not always support X_OK - "
+ "use gnulib module access for portability; "
+ "also, this function is a security risk - "
+ "use the gnulib module faccessat instead");
+# endif
+#elif @GNULIB_MDA_ACCESS@
+/* On native Windows, map 'access' to '_access', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::access always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef access
+# define access _access
+# endif
+_GL_CXXALIAS_MDA (access, int, (const char *file, int mode));
+# else
+_GL_CXXALIAS_SYS (access, int, (const char *file, int mode));
+# endif
+_GL_CXXALIASWARN (access);
+#endif
+
+
+#if @GNULIB_CHDIR@
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chdir
+# define chdir _chdir
+# endif
+_GL_CXXALIAS_MDA (chdir, int, (const char *file));
+# else
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIASWARN (chdir);
+#elif defined GNULIB_POSIXCHECK
+# undef chdir
+# if HAVE_RAW_DECL_CHDIR
+_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - "
+ "use gnulib module chdir for portability");
+# endif
+#elif @GNULIB_MDA_CHDIR@
+/* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::chdir always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chdir
+# define chdir _chdir
+# endif
+_GL_CXXALIAS_MDA (chdir, int, (const char *file));
+# else
+_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIASWARN (chdir);
+#endif
+
+
+#if @GNULIB_CHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+ to GID (if GID is not -1). Follow symbolic links.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */
+# if @REPLACE_CHOWN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef chown
+# define chown rpl_chown
+# endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+# if !@HAVE_CHOWN@
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+ "doesn't treat a uid or gid of -1 on some systems - "
+ "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CLOSE@
+# if @REPLACE_CLOSE@
+/* Automatically included by modules that need a replacement for close. */
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef close
+# define close rpl_close
+# endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef close
+# define close _close
+# endif
+_GL_CXXALIAS_MDA (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared. */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+ "use gnulib module close for portability");
+#elif @GNULIB_MDA_CLOSE@
+/* On native Windows, map 'close' to '_close', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::close always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef close
+# define close _close
+# endif
+_GL_CXXALIAS_MDA (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#endif
+
+
+#if @GNULIB_COPY_FILE_RANGE@
+# if @REPLACE_COPY_FILE_RANGE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef copy_file_range
+# define copy_file_range rpl_copy_file_range
+# endif
+_GL_FUNCDECL_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+_GL_CXXALIAS_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+# else
+# if !@HAVE_COPY_FILE_RANGE@
+_GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+# endif
+_GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos,
+ int ofd, off_t *opos,
+ size_t len, unsigned flags));
+# endif
+_GL_CXXALIASWARN (copy_file_range);
+#elif defined GNULIB_POSIXCHECK
+# undef copy_file_range
+# if HAVE_RAW_DECL_COPY_FILE_RANGE
+_GL_WARN_ON_USE (copy_file_range,
+ "copy_file_range is unportable - "
+ "use gnulib module copy_file_range for portability");
+# endif
+#endif
+
+
+#if @GNULIB_DUP@
+# if @REPLACE_DUP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define dup rpl_dup
+# endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef dup
+# define dup _dup
+# endif
+_GL_CXXALIAS_MDA (dup, int, (int oldfd));
+# else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+# endif
+_GL_CXXALIASWARN (dup);
+#elif defined GNULIB_POSIXCHECK
+# undef dup
+# if HAVE_RAW_DECL_DUP
+_GL_WARN_ON_USE (dup, "dup is unportable - "
+ "use gnulib module dup for portability");
+# endif
+#elif @GNULIB_MDA_DUP@
+/* On native Windows, map 'dup' to '_dup', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::dup always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef dup
+# define dup _dup
+# endif
+_GL_CXXALIAS_MDA (dup, int, (int oldfd));
+# else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+# endif
+_GL_CXXALIASWARN (dup);
+#endif
+
+
+#if @GNULIB_DUP2@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
+ NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+ Return newfd if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */
+# if @REPLACE_DUP2@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define dup2 rpl_dup2
+# endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef dup2
+# define dup2 _dup2
+# endif
+_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd));
+# else
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+ "use gnulib module dup2 for portability");
+# endif
+#elif @GNULIB_MDA_DUP2@
+/* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::dup2 always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef dup2
+# define dup2 _dup2
+# endif
+_GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd));
+# else
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#endif
+
+
+#if @GNULIB_DUP3@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+ specified flags.
+ The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+ and O_TEXT, O_BINARY (defined in "binary-io.h").
+ Close NEWFD first if it is open.
+ Return newfd if successful, otherwise -1 and errno set.
+ See the Linux man page at
+ <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */
+# if @REPLACE_DUP3@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef dup3
+# define dup3 rpl_dup3
+# endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+# if !@HAVE_DUP3@
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (dup3);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+ "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ENVIRON@
+# if defined __CYGWIN__ && !defined __i386__
+/* The 'environ' variable is defined in a DLL. Therefore its declaration needs
+ the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it.
+ This leads to a link error on 64-bit Cygwin when the option
+ -Wl,--disable-auto-import is in use. */
+_GL_EXTERN_C __declspec(dllimport) char **environ;
+# endif
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values. An array of strings of the form
+ "VARIABLE=VALUE", terminated with a NULL. */
+# if defined __APPLE__ && defined __MACH__
+# include <TargetConditionals.h>
+# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
+# define _GL_USE_CRT_EXTERNS
+# endif
+# endif
+# ifdef _GL_USE_CRT_EXTERNS
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron ())
+# else
+# ifdef __cplusplus
+extern "C" {
+# endif
+extern char **environ;
+# ifdef __cplusplus
+}
+# endif
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+_GL_UNISTD_INLINE char ***
+_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - "
+ "use gnulib module environ for portability")
+rpl_environ (void)
+{
+ return &environ;
+}
+# undef environ
+# define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if @GNULIB_EUIDACCESS@
+/* Like access(), except that it uses the effective user id and group id of
+ the current process. */
+# if !@HAVE_EUIDACCESS@
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk. */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+ "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+ "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXECL@
+# if @REPLACE_EXECL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execl
+# define execl rpl_execl
+# endif
+_GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execl);
+#elif defined GNULIB_POSIXCHECK
+# undef execl
+# if HAVE_RAW_DECL_EXECL
+_GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - "
+ "use gnulib module execl for portability");
+# endif
+#elif @GNULIB_MDA_EXECL@
+/* On native Windows, map 'execl' to '_execl', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execl always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execl
+# define execl _execl
+# endif
+_GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execl);
+#endif
+
+#if @GNULIB_EXECLE@
+# if @REPLACE_EXECLE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execle
+# define execle rpl_execle
+# endif
+_GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execle);
+#elif defined GNULIB_POSIXCHECK
+# undef execle
+# if HAVE_RAW_DECL_EXECLE
+_GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - "
+ "use gnulib module execle for portability");
+# endif
+#elif @GNULIB_MDA_EXECLE@
+/* On native Windows, map 'execle' to '_execle', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execle always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execle
+# define execle _execle
+# endif
+_GL_CXXALIAS_MDA (execle, intptr_t,
+ (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execle);
+#endif
+
+#if @GNULIB_EXECLP@
+# if @REPLACE_EXECLP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execlp
+# define execlp rpl_execlp
+# endif
+_GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execlp);
+#elif defined GNULIB_POSIXCHECK
+# undef execlp
+# if HAVE_RAW_DECL_EXECLP
+_GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - "
+ "use gnulib module execlp for portability");
+# endif
+#elif @GNULIB_MDA_EXECLP@
+/* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execlp always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execlp
+# define execlp _execlp
+# endif
+_GL_CXXALIAS_MDA (execlp, intptr_t,
+ (const char *program, const char *arg, ...));
+# else
+_GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...));
+# endif
+_GL_CXXALIASWARN (execlp);
+#endif
+
+
+#if @GNULIB_EXECV@
+# if @REPLACE_EXECV@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execv
+# define execv rpl_execv
+# endif
+_GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv));
+# else
+_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv));
+# endif
+_GL_CXXALIASWARN (execv);
+#elif defined GNULIB_POSIXCHECK
+# undef execv
+# if HAVE_RAW_DECL_EXECV
+_GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - "
+ "use gnulib module execv for portability");
+# endif
+#elif @GNULIB_MDA_EXECV@
+/* On native Windows, map 'execv' to '_execv', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execv always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execv
+# define execv _execv
+# endif
+_GL_CXXALIAS_MDA_CAST (execv, intptr_t,
+ (const char *program, char * const *argv));
+# else
+_GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv));
+# endif
+_GL_CXXALIASWARN (execv);
+#endif
+
+#if @GNULIB_EXECVE@
+# if @REPLACE_EXECVE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execve
+# define execve rpl_execve
+# endif
+_GL_FUNCDECL_RPL (execve, int,
+ (const char *program, char * const *argv, char * const *env)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (execve, int,
+ (const char *program, char * const *argv, char * const *env));
+# else
+_GL_CXXALIAS_SYS (execve, int,
+ (const char *program, char * const *argv, char * const *env));
+# endif
+_GL_CXXALIASWARN (execve);
+#elif defined GNULIB_POSIXCHECK
+# undef execve
+# if HAVE_RAW_DECL_EXECVE
+_GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - "
+ "use gnulib module execve for portability");
+# endif
+#elif @GNULIB_MDA_EXECVE@
+/* On native Windows, map 'execve' to '_execve', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execve always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execve
+# define execve _execve
+# endif
+_GL_CXXALIAS_MDA_CAST (execve, intptr_t,
+ (const char *program, char * const *argv,
+ char * const *env));
+# else
+_GL_CXXALIAS_SYS (execve, int,
+ (const char *program, char * const *argv, char * const *env));
+# endif
+_GL_CXXALIASWARN (execve);
+#endif
+
+#if @GNULIB_EXECVP@
+# if @REPLACE_EXECVP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execvp
+# define execvp rpl_execvp
+# endif
+_GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv));
+# else
+_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv));
+# endif
+_GL_CXXALIASWARN (execvp);
+#elif defined GNULIB_POSIXCHECK
+# undef execvp
+# if HAVE_RAW_DECL_EXECVP
+_GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - "
+ "use gnulib module execvp for portability");
+# endif
+#elif @GNULIB_MDA_EXECVP@
+/* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execvp always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execvp
+# define execvp _execvp
+# endif
+_GL_CXXALIAS_MDA_CAST (execvp, intptr_t,
+ (const char *program, char * const *argv));
+# else
+_GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv));
+# endif
+_GL_CXXALIASWARN (execvp);
+#endif
+
+#if @GNULIB_EXECVPE@
+# if @REPLACE_EXECVPE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execvpe
+# define execvpe rpl_execvpe
+# endif
+_GL_FUNCDECL_RPL (execvpe, int,
+ (const char *program, char * const *argv, char * const *env)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (execvpe, int,
+ (const char *program, char * const *argv, char * const *env));
+# else
+# if !@HAVE_DECL_EXECVPE@
+_GL_FUNCDECL_SYS (execvpe, int,
+ (const char *program, char * const *argv, char * const *env)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (execvpe, int,
+ (const char *program, char * const *argv, char * const *env));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (execvpe);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef execvpe
+# if HAVE_RAW_DECL_EXECVPE
+_GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - "
+ "use gnulib module execvpe for portability");
+# endif
+#elif @GNULIB_MDA_EXECVPE@
+/* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have
+ it. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef execvpe
+# define execvpe _execvpe
+# endif
+_GL_CXXALIAS_MDA_CAST (execvpe, intptr_t,
+ (const char *program, char * const *argv,
+ char * const *env));
+# elif @HAVE_EXECVPE@
+# if !@HAVE_DECL_EXECVPE@
+_GL_FUNCDECL_SYS (execvpe, int,
+ (const char *program, char * const *argv, char * const *env)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (execvpe, int,
+ (const char *program, char * const *argv, char * const *env));
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_EXECVPE@
+_GL_CXXALIASWARN (execvpe);
+# endif
+#endif
+
+
+#if @GNULIB_FACCESSAT@
+# if @REPLACE_FACCESSAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef faccessat
+# define faccessat rpl_faccessat
+# endif
+_GL_FUNCDECL_RPL (faccessat, int,
+ (int fd, char const *name, int mode, int flag)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (faccessat, int,
+ (int fd, char const *name, int mode, int flag));
+# else
+# if !@HAVE_FACCESSAT@
+_GL_FUNCDECL_SYS (faccessat, int,
+ (int fd, char const *file, int mode, int flag)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+ (int fd, char const *file, int mode, int flag));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (faccessat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+ "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHDIR@
+/* Change the process' current working directory to the directory on which
+ the given file descriptor is open.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */
+# if ! @HAVE_FCHDIR@
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata. */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+ _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# else
+# if !@HAVE_DECL_FCHDIR@
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+# endif
+# endif
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+ "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHOWNAT@
+# if @REPLACE_FCHOWNAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fchownat
+# define fchownat rpl_fchownat
+# endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+ uid_t owner, gid_t group, int flag)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+ uid_t owner, gid_t group, int flag));
+# else
+# if !@HAVE_FCHOWNAT@
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+ uid_t owner, gid_t group, int flag)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+ uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+ "use gnulib module fchownat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FDATASYNC@
+/* Synchronize changes to a file.
+ Return 0 if successful, otherwise -1 and errno set.
+ See POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */
+# if @REPLACE_FDATASYNC@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef fdatasync
+# define fdatasync rpl_fdatasync
+# endif
+_GL_FUNCDECL_RPL (fdatasync, int, (int fd));
+_GL_CXXALIAS_RPL (fdatasync, int, (int fd));
+# else
+# if !@HAVE_FDATASYNC@|| !@HAVE_DECL_FDATASYNC@
+_GL_FUNCDECL_SYS (fdatasync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fdatasync, int, (int fd));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (fdatasync);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef fdatasync
+# if HAVE_RAW_DECL_FDATASYNC
+_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - "
+ "use gnulib module fdatasync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSYNC@
+/* Synchronize changes, including metadata, to a file.
+ Return 0 if successful, otherwise -1 and errno set.
+ See POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */
+# if !@HAVE_FSYNC@
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+ "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FTRUNCATE@
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */
+# if @REPLACE_FTRUNCATE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ftruncate
+# define ftruncate rpl_ftruncate
+# endif
+_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length));
+# else
+# if !@HAVE_FTRUNCATE@
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (ftruncate);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+ "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETCWD@
+/* Get the name of the current working directory, and put it in SIZE bytes
+ of BUF.
+ Return BUF if successful, or NULL if the directory couldn't be determined
+ or SIZE was too small.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>.
+ Additionally, the gnulib module 'getcwd' guarantees the following GNU
+ extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+ is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+ necessary. */
+# if @REPLACE_GETCWD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define getcwd rpl_getcwd
+# endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getcwd
+# define getcwd _getcwd
+# endif
+_GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size));
+# else
+/* Need to cast, because on mingw, the second parameter is
+ int size. */
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+ "use gnulib module getcwd for portability");
+# endif
+#elif @GNULIB_MDA_GETCWD@
+/* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::getcwd always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getcwd
+# define getcwd _getcwd
+# endif
+/* Need to cast, because on mingw, the second parameter is either
+ 'int size' or 'size_t size'. */
+_GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size));
+# else
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#endif
+
+
+#if @GNULIB_GETDOMAINNAME@
+/* Return the NIS domain name of the machine.
+ WARNING! The NIS domain name is unrelated to the fully qualified host name
+ of the machine. It is also unrelated to email addresses.
+ WARNING! The NIS domain name is usually the empty string or "(none)" when
+ not using NIS.
+
+ Put up to LEN bytes of the NIS domain name into NAME.
+ Null terminate it if the name is shorter than LEN.
+ If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+ Return 0 if successful, otherwise set errno and return -1. */
+# if @REPLACE_GETDOMAINNAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getdomainname
+# define getdomainname rpl_getdomainname
+# endif
+_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len));
+# else
+# if !@HAVE_DECL_GETDOMAINNAME@
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getdomainname);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+ "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDTABLESIZE@
+/* Return the maximum number of file descriptors in the current process.
+ In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
+# if @REPLACE_GETDTABLESIZE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getdtablesize
+# define getdtablesize rpl_getdtablesize
+# endif
+_GL_FUNCDECL_RPL (getdtablesize, int, (void));
+_GL_CXXALIAS_RPL (getdtablesize, int, (void));
+# else
+# if !@HAVE_GETDTABLESIZE@
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+/* Need to cast, because on AIX, the parameter list is
+ (...). */
+_GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void));
+# endif
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+ "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETENTROPY@
+/* Fill a buffer with random bytes. */
+# if @REPLACE_GETENTROPY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getentropy
+# define getentropy rpl_getentropy
+# endif
+_GL_FUNCDECL_RPL (getentropy, int, (void *buffer, size_t length));
+_GL_CXXALIAS_RPL (getentropy, int, (void *buffer, size_t length));
+# else
+# if !@HAVE_GETENTROPY@
+_GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length));
+# endif
+_GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getentropy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getentropy
+# if HAVE_RAW_DECL_GETENTROPY
+_GL_WARN_ON_USE (getentropy, "getentropy is unportable - "
+ "use gnulib module getentropy for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETGROUPS@
+/* Return the supplemental groups that the current process belongs to.
+ It is unspecified whether the effective group id is in the list.
+ If N is 0, return the group count; otherwise, N describes how many
+ entries are available in GROUPS. Return -1 and set errno if N is
+ not 0 and not large enough. Fails with ENOSYS on some systems. */
+# if @REPLACE_GETGROUPS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getgroups
+# define getgroups rpl_getgroups
+# endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+# if !@HAVE_GETGROUPS@
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+ "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETHOSTNAME@
+/* Return the standard host name of the machine.
+ WARNING! The host name may or may not be fully qualified.
+
+ Put up to LEN bytes of the host name into NAME.
+ Null terminate it if the name is shorter than LEN.
+ If the host name is longer than LEN, set errno = EINVAL and return -1.
+ Return 0 if successful, otherwise set errno and return -1. */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef gethostname
+# define gethostname rpl_gethostname
+# endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+# if !@HAVE_GETHOSTNAME@
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
+ parameter is
+ int len. */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif @UNISTD_H_HAVE_WINSOCK2_H@
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+ "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN@
+/* Returns the user's login name, or NULL if it cannot be found. Upon error,
+ returns NULL with errno set.
+
+ See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>.
+
+ Most programs don't need to use this function, because the information is
+ available through environment variables:
+ ${LOGNAME-$USER} on Unix platforms,
+ $USERNAME on native Windows platforms.
+ */
+# if !@HAVE_DECL_GETLOGIN@
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+ "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN_R@
+/* Copies the user's login name to NAME.
+ The array pointed to by NAME has room for SIZE bytes.
+
+ Returns 0 if successful. Upon error, an error number is returned, or -1 in
+ the case that the login name cannot be found but no specific error is
+ provided (this case is hopefully rare but is left open by the POSIX spec).
+
+ See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>.
+
+ Most programs don't need to use this function, because the information is
+ available through environment variables:
+ ${LOGNAME-$USER} on Unix platforms,
+ $USERNAME on native Windows platforms.
+ */
+# if @REPLACE_GETLOGIN_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define getlogin_r rpl_getlogin_r
+# endif
+_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size));
+# else
+# if !@HAVE_DECL_GETLOGIN_R@
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+ _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+ int size. */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (getlogin_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+ "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETPAGESIZE@
+# if @REPLACE_GETPAGESIZE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define getpagesize rpl_getpagesize
+# endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+/* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if
+ the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */
+# if defined __hpux
+_GL_FUNCDECL_SYS (getpagesize, int, (void));
+# endif
+# if !@HAVE_GETPAGESIZE@
+# if !defined getpagesize
+/* This is for POSIX systems. */
+# if !defined _gl_getpagesize && defined _SC_PAGESIZE
+# if ! (defined __VMS && __VMS_VER < 70000000)
+# define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+# endif
+# endif
+/* This is for older VMS. */
+# if !defined _gl_getpagesize && defined __VMS
+# ifdef __ALPHA
+# define _gl_getpagesize() 8192
+# else
+# define _gl_getpagesize() 512
+# endif
+# endif
+/* This is for BeOS. */
+# if !defined _gl_getpagesize && @HAVE_OS_H@
+# include <OS.h>
+# if defined B_PAGE_SIZE
+# define _gl_getpagesize() B_PAGE_SIZE
+# endif
+# endif
+/* This is for AmigaOS4.0. */
+# if !defined _gl_getpagesize && defined __amigaos4__
+# define _gl_getpagesize() 2048
+# endif
+/* This is for older Unix systems. */
+# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
+# include <sys/param.h>
+# ifdef EXEC_PAGESIZE
+# define _gl_getpagesize() EXEC_PAGESIZE
+# else
+# ifdef NBPG
+# ifndef CLSIZE
+# define CLSIZE 1
+# endif
+# define _gl_getpagesize() (NBPG * CLSIZE)
+# else
+# ifdef NBPC
+# define _gl_getpagesize() NBPC
+# endif
+# endif
+# endif
+# endif
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define getpagesize() _gl_getpagesize ()
+# else
+# if !GNULIB_defined_getpagesize_function
+_GL_UNISTD_INLINE int
+getpagesize ()
+{
+ return _gl_getpagesize ();
+}
+# define GNULIB_defined_getpagesize_function 1
+# endif
+# endif
+# endif
+# endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+# if @HAVE_DECL_GETPAGESIZE@
+_GL_CXXALIASWARN (getpagesize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+ "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETPASS@
+/* Function getpass() from module 'getpass':
+ Read a password from /dev/tty or stdin.
+ Function getpass() from module 'getpass-gnu':
+ Read a password of arbitrary length from /dev/tty or stdin. */
+# if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \
+ || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@)
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getpass
+# define getpass rpl_getpass
+# endif
+_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt));
+# else
+# if !@HAVE_GETPASS@
+_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt));
+# endif
+_GL_CXXALIASWARN (getpass);
+#elif defined GNULIB_POSIXCHECK
+# undef getpass
+# if HAVE_RAW_DECL_GETPASS
+_GL_WARN_ON_USE (getpass, "getpass is unportable - "
+ "use gnulib module getpass or getpass-gnu for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MDA_GETPID@
+/* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::getpid always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef getpid
+# define getpid _getpid
+# endif
+_GL_CXXALIAS_MDA (getpid, int, (void));
+# else
+_GL_CXXALIAS_SYS (getpid, pid_t, (void));
+# endif
+_GL_CXXALIASWARN (getpid);
+#endif
+
+
+#if @GNULIB_GETUSERSHELL@
+/* Return the next valid login shell on the system, or NULL when the end of
+ the list has been reached. */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+ "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Rewind to pointer that is advanced at each getusershell() call. */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+ "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Free the pointer that is advanced at each getusershell() call and
+ associated resources. */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+ "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GROUP_MEMBER@
+/* Determine whether group id is in calling user's group list. */
+# if !@HAVE_GROUP_MEMBER@
+_GL_FUNCDECL_SYS (group_member, int, (gid_t gid));
+# endif
+_GL_CXXALIAS_SYS (group_member, int, (gid_t gid));
+_GL_CXXALIASWARN (group_member);
+#elif defined GNULIB_POSIXCHECK
+# undef group_member
+# if HAVE_RAW_DECL_GROUP_MEMBER
+_GL_WARN_ON_USE (group_member, "group_member is unportable - "
+ "use gnulib module group-member for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ISATTY@
+# if @REPLACE_ISATTY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef isatty
+# define isatty rpl_isatty
+# endif
+# define GNULIB_defined_isatty 1
+_GL_FUNCDECL_RPL (isatty, int, (int fd));
+_GL_CXXALIAS_RPL (isatty, int, (int fd));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef isatty
+# define isatty _isatty
+# endif
+_GL_CXXALIAS_MDA (isatty, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (isatty, int, (int fd));
+# endif
+_GL_CXXALIASWARN (isatty);
+#elif defined GNULIB_POSIXCHECK
+# undef isatty
+# if HAVE_RAW_DECL_ISATTY
+_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - "
+ "use gnulib module isatty for portability");
+# endif
+#elif @GNULIB_MDA_ISATTY@
+/* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::isatty always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef isatty
+# define isatty _isatty
+# endif
+_GL_CXXALIAS_MDA (isatty, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (isatty, int, (int fd));
+# endif
+_GL_CXXALIASWARN (isatty);
+#endif
+
+
+#if @GNULIB_LCHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+ to GID (if GID is not -1). Do not follow symbolic links.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */
+# if @REPLACE_LCHOWN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef lchown
+# define lchown rpl_lchown
+# endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+# if !@HAVE_LCHOWN@
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+ "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINK@
+/* Create a new hard link for an existing file.
+ Return 0 if successful, otherwise -1 and errno set.
+ See POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */
+# if @REPLACE_LINK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define link rpl_link
+# endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+# if !@HAVE_LINK@
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+ "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINKAT@
+/* Create a new hard link for an existing file, relative to two
+ directories. FLAG controls whether symlinks are followed.
+ Return 0 if successful, otherwise -1 and errno set. */
+# if @REPLACE_LINKAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef linkat
+# define linkat rpl_linkat
+# endif
+_GL_FUNCDECL_RPL (linkat, int,
+ (int fd1, const char *path1, int fd2, const char *path2,
+ int flag)
+ _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+ (int fd1, const char *path1, int fd2, const char *path2,
+ int flag));
+# else
+# if !@HAVE_LINKAT@
+_GL_FUNCDECL_SYS (linkat, int,
+ (int fd1, const char *path1, int fd2, const char *path2,
+ int flag)
+ _GL_ARG_NONNULL ((2, 4)));
+# endif
+_GL_CXXALIAS_SYS (linkat, int,
+ (int fd1, const char *path1, int fd2, const char *path2,
+ int flag));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (linkat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+ "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSEEK@
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+ Return the new offset if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */
+# if @REPLACE_LSEEK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define lseek rpl_lseek
+# endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef lseek
+# define lseek _lseek
+# endif
+_GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+ "systems - use gnulib module lseek for portability");
+# endif
+#elif @GNULIB_MDA_LSEEK@
+/* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::lseek always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef lseek
+# define lseek _lseek
+# endif
+_GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#endif
+
+
+#if @GNULIB_PIPE@
+/* Create a pipe, defaulting to O_BINARY mode.
+ Store the read-end as fd[0] and the write-end as fd[1].
+ Return 0 upon success, or -1 with errno set upon failure. */
+# if !@HAVE_PIPE@
+_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pipe, int, (int fd[2]));
+_GL_CXXALIASWARN (pipe);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe
+# if HAVE_RAW_DECL_PIPE
+_GL_WARN_ON_USE (pipe, "pipe is unportable - "
+ "use gnulib module pipe-posix for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PIPE2@
+/* Create a pipe, applying the given flags when opening the read-end of the
+ pipe and the write-end of the pipe.
+ The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+ and O_TEXT, O_BINARY (defined in "binary-io.h").
+ Store the read-end as fd[0] and the write-end as fd[1].
+ Return 0 upon success, or -1 with errno set upon failure.
+ See also the Linux man page at
+ <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */
+# if @REPLACE_PIPE2@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef pipe2
+# define pipe2 rpl_pipe2
+# endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (pipe2);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+ "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PREAD@
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+ Return the number of bytes placed into BUF if successful, otherwise
+ set errno and return -1. 0 indicates EOF.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */
+# if @REPLACE_PREAD@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef pread
+# define pread rpl_pread
+# endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+ (int fd, void *buf, size_t bufsize, off_t offset)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+ (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+# if !@HAVE_PREAD@
+_GL_FUNCDECL_SYS (pread, ssize_t,
+ (int fd, void *buf, size_t bufsize, off_t offset)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+ (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (pread);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+ "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PWRITE@
+/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
+ Return the number of bytes written if successful, otherwise
+ set errno and return -1. 0 indicates nothing written. See the
+ POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */
+# if @REPLACE_PWRITE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef pwrite
+# define pwrite rpl_pwrite
+# endif
+_GL_FUNCDECL_RPL (pwrite, ssize_t,
+ (int fd, const void *buf, size_t bufsize, off_t offset)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pwrite, ssize_t,
+ (int fd, const void *buf, size_t bufsize, off_t offset));
+# else
+# if !@HAVE_PWRITE@
+_GL_FUNCDECL_SYS (pwrite, ssize_t,
+ (int fd, const void *buf, size_t bufsize, off_t offset)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (pwrite, ssize_t,
+ (int fd, const void *buf, size_t bufsize, off_t offset));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (pwrite);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef pwrite
+# if HAVE_RAW_DECL_PWRITE
+_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
+ "use gnulib module pwrite for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READ@
+/* Read up to COUNT bytes from file descriptor FD into the buffer starting
+ at BUF. See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */
+# if @REPLACE_READ@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef read
+# define read rpl_read
+# endif
+_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef read
+# define read _read
+# endif
+_GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count));
+# else
+_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (read);
+#elif @GNULIB_MDA_READ@
+/* On native Windows, map 'read' to '_read', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::read always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef read
+# define read _read
+# endif
+# ifdef __MINGW32__
+_GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count));
+# else
+_GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count));
+# endif
+# else
+_GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (read);
+#endif
+
+
+#if @GNULIB_READLINK@
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+ bytes of it into BUF. Return the number of bytes placed into BUF if
+ successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */
+# if @REPLACE_READLINK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define readlink rpl_readlink
+# endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+ (const char *restrict file,
+ char *restrict buf, size_t bufsize)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+ (const char *restrict file,
+ char *restrict buf, size_t bufsize));
+# else
+# if !@HAVE_READLINK@
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+ (const char *restrict file,
+ char *restrict buf, size_t bufsize)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+ (const char *restrict file,
+ char *restrict buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+ "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINKAT@
+# if @REPLACE_READLINKAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define readlinkat rpl_readlinkat
+# endif
+_GL_FUNCDECL_RPL (readlinkat, ssize_t,
+ (int fd, char const *restrict file,
+ char *restrict buf, size_t len)
+ _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (readlinkat, ssize_t,
+ (int fd, char const *restrict file,
+ char *restrict buf, size_t len));
+# else
+# if !@HAVE_READLINKAT@
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+ (int fd, char const *restrict file,
+ char *restrict buf, size_t len)
+ _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+ (int fd, char const *restrict file,
+ char *restrict buf, size_t len));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (readlinkat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+ "use gnulib module readlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RMDIR@
+/* Remove the directory DIR. */
+# if @REPLACE_RMDIR@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define rmdir rpl_rmdir
+# endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef rmdir
+# define rmdir _rmdir
+# endif
+_GL_CXXALIAS_MDA (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+ "use gnulib module rmdir for portability");
+# endif
+#elif @GNULIB_MDA_RMDIR@
+/* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::rmdir always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef rmdir
+# define rmdir _rmdir
+# endif
+_GL_CXXALIAS_MDA (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#endif
+
+
+#if @GNULIB_SETHOSTNAME@
+/* Set the host name of the machine.
+ The host name may or may not be fully qualified.
+
+ Put LEN bytes of NAME into the host name.
+ Return 0 if successful, otherwise, set errno and return -1.
+
+ Platforms with no ability to set the hostname return -1 and set
+ errno = ENOSYS. */
+# if @REPLACE_SETHOSTNAME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef sethostname
+# define sethostname rpl_sethostname
+# endif
+_GL_FUNCDECL_RPL (sethostname, int, (const char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (sethostname, int, (const char *name, size_t len));
+# else
+# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@
+_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len)
+ _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
+ and FreeBSD 6.4 the second parameter is int. On Solaris 11
+ 2011-10, the first parameter is not const. */
+_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (sethostname);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef sethostname
+# if HAVE_RAW_DECL_SETHOSTNAME
+_GL_WARN_ON_USE (sethostname, "sethostname is unportable - "
+ "use gnulib module sethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SLEEP@
+/* Pause the execution of the current thread for N seconds.
+ Returns the number of seconds left to sleep.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */
+# if @REPLACE_SLEEP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef sleep
+# define sleep rpl_sleep
+# endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+# if !@HAVE_SLEEP@
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+ "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MDA_SWAB@
+/* On native Windows, map 'swab' to '_swab', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::swab always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef swab
+# define swab _swab
+# endif
+/* Need to cast, because in old mingw the arguments are
+ (const char *from, char *to, size_t n). */
+_GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n));
+# else
+# if defined __hpux /* HP-UX */
+_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n));
+# elif defined __sun && (defined __SunOS_5_10 || defined __XOPEN_OR_POSIX) && !defined _XPG4 /* Solaris */
+_GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n));
+# else
+_GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n));
+# endif
+# endif
+_GL_CXXALIASWARN (swab);
+#endif
+
+
+#if @GNULIB_SYMLINK@
+# if @REPLACE_SYMLINK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef symlink
+# define symlink rpl_symlink
+# endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+ _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+# if !@HAVE_SYMLINK@
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+ _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+ "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINKAT@
+# if @REPLACE_SYMLINKAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef symlinkat
+# define symlinkat rpl_symlinkat
+# endif
+_GL_FUNCDECL_RPL (symlinkat, int,
+ (char const *contents, int fd, char const *file)
+ _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (symlinkat, int,
+ (char const *contents, int fd, char const *file));
+# else
+# if !@HAVE_SYMLINKAT@
+_GL_FUNCDECL_SYS (symlinkat, int,
+ (char const *contents, int fd, char const *file)
+ _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+ (char const *contents, int fd, char const *file));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (symlinkat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+ "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TRUNCATE@
+/* Change the size of the file designated by FILENAME to become equal to LENGTH.
+ Return 0 if successful, otherwise -1 and errno set.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */
+# if @REPLACE_TRUNCATE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef truncate
+# define truncate rpl_truncate
+# endif
+_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length)
+ _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length));
+# else
+# if !@HAVE_DECL_TRUNCATE@
+_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length)
+ _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (truncate);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef truncate
+# if HAVE_RAW_DECL_TRUNCATE
+_GL_WARN_ON_USE (truncate, "truncate is unportable - "
+ "use gnulib module truncate for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TTYNAME_R@
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+ open on in BUF. Return 0 on success, otherwise an error number. */
+# if @REPLACE_TTYNAME_R@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef ttyname_r
+# define ttyname_r rpl_ttyname_r
+# endif
+_GL_FUNCDECL_RPL (ttyname_r, int,
+ (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (ttyname_r, int,
+ (int fd, char *buf, size_t buflen));
+# else
+# if !@HAVE_DECL_TTYNAME_R@
+_GL_FUNCDECL_SYS (ttyname_r, int,
+ (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (ttyname_r, int,
+ (int fd, char *buf, size_t buflen));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (ttyname_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef ttyname_r
+# if HAVE_RAW_DECL_TTYNAME_R
+_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
+ "use gnulib module ttyname_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINK@
+# if @REPLACE_UNLINK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef unlink
+# define unlink rpl_unlink
+# endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef unlink
+# define unlink _unlink
+# endif
+_GL_CXXALIAS_MDA (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+ "use gnulib module unlink for portability");
+# endif
+#elif @GNULIB_MDA_UNLINK@
+/* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::unlink always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef unlink
+# define unlink _unlink
+# endif
+_GL_CXXALIAS_MDA (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#endif
+
+
+#if @GNULIB_UNLINKAT@
+# if @REPLACE_UNLINKAT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef unlinkat
+# define unlinkat rpl_unlinkat
+# endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+# if !@HAVE_UNLINKAT@
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+ "use gnulib module unlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_USLEEP@
+/* Pause the execution of the current thread for N microseconds.
+ Returns 0 on completion, or -1 on range error.
+ See the POSIX:2001 specification
+ <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */
+# if @REPLACE_USLEEP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef usleep
+# define usleep rpl_usleep
+# endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+# if !@HAVE_USLEEP@
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+# endif
+/* Need to cast, because on Haiku, the first parameter is
+ unsigned int n. */
+_GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+ "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_WRITE@
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+ See the POSIX:2008 specification
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */
+# if @REPLACE_WRITE@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef write
+# define write rpl_write
+# endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# elif defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef write
+# define write _write
+# endif
+_GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+_GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#elif @GNULIB_MDA_WRITE@
+/* On native Windows, map 'write' to '_write', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::write always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef write
+# define write _write
+# endif
+# ifdef __MINGW32__
+_GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count));
+# else
+_GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count));
+# endif
+# else
+_GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_UNISTD_H */
+#endif /* _GL_INCLUDING_UNISTD_H */
+#endif /* _@GUARD_PREFIX@_UNISTD_H */
diff --git a/lib/unlink.c b/lib/unlink.c
new file mode 100644
index 0000000..d77d262
--- /dev/null
+++ b/lib/unlink.c
@@ -0,0 +1,98 @@
+/* Work around unlink bugs.
+
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include "filename.h"
+
+#undef unlink
+#if defined _WIN32 && !defined __CYGWIN__
+# define unlink _unlink
+#endif
+
+/* Remove file NAME.
+ Return 0 if successful, -1 if not. */
+
+int
+rpl_unlink (char const *name)
+{
+ /* Work around Solaris 9 bug where unlink("file/") succeeds. */
+ size_t len = strlen (name);
+ int result = 0;
+ if (len && ISSLASH (name[len - 1]))
+ {
+ /* We can't unlink(2) something if it doesn't exist. If it does
+ exist, then it resolved to a directory, due to the trailing
+ slash, and POSIX requires that the unlink attempt to remove
+ that directory (which would leave the symlink dangling).
+ Unfortunately, Solaris 9 is one of the platforms where the
+ root user can unlink directories, and we don't want to
+ cripple this behavior on real directories, even if it is
+ seldom needed (at any rate, it's nicer to let coreutils'
+ unlink(1) give the correct errno for non-root users). But we
+ don't know whether name was an actual directory, or a symlink
+ to a directory; and due to the bug of ignoring trailing
+ slash, Solaris 9 would end up successfully unlinking the
+ symlink instead of the directory. Technically, we could use
+ realpath to find the canonical directory name to attempt
+ deletion on. But that is a lot of work for a corner case; so
+ we instead just use an lstat on the shortened name, and
+ reject symlinks with trailing slashes. The root user of
+ unlink(1) will just have to live with the rule that they
+ can't delete a directory via a symlink. */
+ struct stat st;
+ result = lstat (name, &st);
+ if (result == 0 || errno == EOVERFLOW)
+ {
+ /* Trailing NUL will overwrite the trailing slash. */
+ char *short_name = malloc (len);
+ if (!short_name)
+ return -1;
+ memcpy (short_name, name, len);
+ while (len && ISSLASH (short_name[len - 1]))
+ short_name[--len] = '\0';
+ if (len && (lstat (short_name, &st) || S_ISLNK (st.st_mode)))
+ {
+ free (short_name);
+ errno = EPERM;
+ return -1;
+ }
+ free (short_name);
+ result = 0;
+ }
+ }
+ if (!result)
+ {
+#if UNLINK_PARENT_BUG
+ if (len >= 2 && name[len - 1] == '.' && name[len - 2] == '.'
+ && (len == 2 || ISSLASH (name[len - 3])))
+ {
+ errno = EISDIR; /* could also use EPERM */
+ return -1;
+ }
+#endif
+ result = unlink (name);
+ }
+ return result;
+}
diff --git a/lib/usleep.c b/lib/usleep.c
new file mode 100644
index 0000000..08a2251
--- /dev/null
+++ b/lib/usleep.c
@@ -0,0 +1,76 @@
+/* Pausing execution of the current thread.
+ Copyright (C) 2009-2023 Free Software Foundation, Inc.
+ Written by Eric Blake <ebb9@byu.net>, 2009.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* This file is _intentionally_ light-weight. Rather than using
+ select or nanosleep, both of which drag in external libraries on
+ some platforms, this merely rounds up to the nearest second if
+ usleep() does not exist. If sub-second resolution is important,
+ then use a more powerful interface to begin with. */
+
+#include <config.h>
+
+/* Specification. */
+#include <unistd.h>
+
+#include <errno.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN /* avoid including junk */
+# include <windows.h>
+#endif
+
+#ifndef HAVE_USLEEP
+# define HAVE_USLEEP 0
+#endif
+
+/* Sleep for MICRO microseconds, which can be greater than 1 second.
+ Return -1 and set errno to EINVAL on range error (about 4295
+ seconds), or 0 on success. Interaction with SIGALARM is
+ unspecified. */
+
+int
+usleep (useconds_t micro)
+#undef usleep
+{
+#if defined _WIN32 && ! defined __CYGWIN__
+ unsigned int milliseconds = micro / 1000;
+ if (sizeof milliseconds < sizeof micro && micro / 1000 != milliseconds)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ if (micro % 1000)
+ milliseconds++;
+ Sleep (milliseconds);
+ return 0;
+#else
+ unsigned int seconds = micro / 1000000;
+ if (sizeof seconds < sizeof micro && micro / 1000000 != seconds)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ if (!HAVE_USLEEP && micro % 1000000)
+ seconds++;
+ while ((seconds = sleep (seconds)) != 0);
+
+# if !HAVE_USLEEP
+# define usleep(x) 0
+# endif
+ return usleep (micro % 1000000);
+#endif
+}
diff --git a/lib/verify.h b/lib/verify.h
new file mode 100644
index 0000000..c700243
--- /dev/null
+++ b/lib/verify.h
@@ -0,0 +1,369 @@
+/* Compile-time assert-like macros.
+
+ Copyright (C) 2005-2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */
+
+#ifndef _GL_VERIFY_H
+#define _GL_VERIFY_H
+
+
+/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC)
+ works as per C11. This is supported by GCC 4.6.0+ and by clang 4+.
+
+ Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as
+ per C23. This is supported by GCC 9.1+.
+
+ Support compilers claiming conformance to the relevant standard,
+ and also support GCC when not pedantic. If we were willing to slow
+ 'configure' down we could also use it with other compilers, but
+ since this affects only the quality of diagnostics, why bother? */
+#ifndef __cplusplus
+# if (201112 <= __STDC_VERSION__ \
+ || (!defined __STRICT_ANSI__ \
+ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__)))
+# define _GL_HAVE__STATIC_ASSERT 1
+# endif
+# if (202311 <= __STDC_VERSION__ \
+ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__))
+# define _GL_HAVE__STATIC_ASSERT1 1
+# endif
+#endif
+
+/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
+ system headers, defines a conflicting _Static_assert that is no
+ better than ours; override it. */
+#ifndef _GL_HAVE__STATIC_ASSERT
+# include <stddef.h>
+# undef _Static_assert
+#endif
+
+/* Each of these macros verifies that its argument R is nonzero. To
+ be portable, R should be an integer constant expression. Unlike
+ assert (R), there is no run-time overhead.
+
+ If _Static_assert works, verify (R) uses it directly. Similarly,
+ _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
+ that is an operand of sizeof.
+
+ The code below uses several ideas for C++ compilers, and for C
+ compilers that do not support _Static_assert:
+
+ * The first step is ((R) ? 1 : -1). Given an expression R, of
+ integral or boolean or floating-point type, this yields an
+ expression of integral type, whose value is later verified to be
+ constant and nonnegative.
+
+ * Next this expression W is wrapped in a type
+ struct _gl_verify_type {
+ unsigned int _gl_verify_error_if_negative: W;
+ }.
+ If W is negative, this yields a compile-time error. No compiler can
+ deal with a bit-field of negative size.
+
+ One might think that an array size check would have the same
+ effect, that is, that the type struct { unsigned int dummy[W]; }
+ would work as well. However, inside a function, some compilers
+ (such as C++ compilers and GNU C) allow local parameters and
+ variables inside array size expressions. With these compilers,
+ an array size check would not properly diagnose this misuse of
+ the verify macro:
+
+ void function (int n) { verify (n < 0); }
+
+ * For the verify macro, the struct _gl_verify_type will need to
+ somehow be embedded into a declaration. To be portable, this
+ declaration must declare an object, a constant, a function, or a
+ typedef name. If the declared entity uses the type directly,
+ such as in
+
+ struct dummy {...};
+ typedef struct {...} dummy;
+ extern struct {...} *dummy;
+ extern void dummy (struct {...} *);
+ extern struct {...} *dummy (void);
+
+ two uses of the verify macro would yield colliding declarations
+ if the entity names are not disambiguated. A workaround is to
+ attach the current line number to the entity name:
+
+ #define _GL_CONCAT0(x, y) x##y
+ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+ extern struct {...} * _GL_CONCAT (dummy, __LINE__);
+
+ But this has the problem that two invocations of verify from
+ within the same macro would collide, since the __LINE__ value
+ would be the same for both invocations. (The GCC __COUNTER__
+ macro solves this problem, but is not portable.)
+
+ A solution is to use the sizeof operator. It yields a number,
+ getting rid of the identity of the type. Declarations like
+
+ extern int dummy [sizeof (struct {...})];
+ extern void dummy (int [sizeof (struct {...})]);
+ extern int (*dummy (void)) [sizeof (struct {...})];
+
+ can be repeated.
+
+ * Should the implementation use a named struct or an unnamed struct?
+ Which of the following alternatives can be used?
+
+ extern int dummy [sizeof (struct {...})];
+ extern int dummy [sizeof (struct _gl_verify_type {...})];
+ extern void dummy (int [sizeof (struct {...})]);
+ extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
+ extern int (*dummy (void)) [sizeof (struct {...})];
+ extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
+
+ In the second and sixth case, the struct type is exported to the
+ outer scope; two such declarations therefore collide. GCC warns
+ about the first, third, and fourth cases. So the only remaining
+ possibility is the fifth case:
+
+ extern int (*dummy (void)) [sizeof (struct {...})];
+
+ * GCC warns about duplicate declarations of the dummy function if
+ -Wredundant-decls is used. GCC 4.3 and later have a builtin
+ __COUNTER__ macro that can let us generate unique identifiers for
+ each dummy function, to suppress this warning.
+
+ * This implementation exploits the fact that older versions of GCC,
+ which do not support _Static_assert, also do not warn about the
+ last declaration mentioned above.
+
+ * GCC warns if -Wnested-externs is enabled and 'verify' is used
+ within a function body; but inside a function, you can always
+ arrange to use verify_expr instead.
+
+ * In C++, any struct definition inside sizeof is invalid.
+ Use a template type to work around the problem. */
+
+/* Concatenate two preprocessor tokens. */
+#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+#define _GL_CONCAT0(x, y) x##y
+
+/* _GL_COUNTER is an integer, preferably one that changes each time we
+ use it. Use __COUNTER__ if it works, falling back on __LINE__
+ otherwise. __LINE__ isn't perfect, but it's better than a
+ constant. */
+#if defined __COUNTER__ && __COUNTER__ != __COUNTER__
+# define _GL_COUNTER __COUNTER__
+#else
+# define _GL_COUNTER __LINE__
+#endif
+
+/* Generate a symbol with the given prefix, making it unique if
+ possible. */
+#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
+
+/* Verify requirement R at compile-time, as an integer constant expression
+ that returns 1. If R is false, fail at compile-time, preferably
+ with a diagnostic that includes the string-literal DIAGNOSTIC. */
+
+#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
+ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
+
+#ifdef __cplusplus
+# if !GNULIB_defined_struct__gl_verify_type
+template <int w>
+ struct _gl_verify_type {
+ unsigned int _gl_verify_error_if_negative: w;
+ };
+# define GNULIB_defined_struct__gl_verify_type 1
+# endif
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+ _gl_verify_type<(R) ? 1 : -1>
+#elif defined _GL_HAVE__STATIC_ASSERT
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+ struct { \
+ _Static_assert (R, DIAGNOSTIC); \
+ int _gl_dummy; \
+ }
+#else
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
+#endif
+
+/* Verify requirement R at compile-time, as a declaration without a
+ trailing ';'. If R is false, fail at compile-time.
+
+ This macro requires three or more arguments but uses at most the first
+ two, so that the _Static_assert macro optionally defined below supports
+ both the C11 two-argument syntax and the C23 one-argument syntax.
+
+ Unfortunately, unlike C11, this implementation must appear as an
+ ordinary declaration, and cannot appear inside struct { ... }. */
+
+#if 202311 <= __STDC_VERSION__ || 200410 <= __cpp_static_assert
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC)
+#elif defined _GL_HAVE__STATIC_ASSERT
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
+#else
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) \
+ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
+ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+# if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
+# pragma GCC diagnostic ignored "-Wnested-externs"
+# endif
+#endif
+
+/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */
+#ifdef _GL_STATIC_ASSERT_H
+/* Define _Static_assert if needed. */
+/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts
+ 1 or 2 arguments. We better don't override it, because clang's standard
+ C++ library uses static_assert inside classes in several places, and our
+ replacement via _GL_VERIFY does not work in these contexts. */
+# if (defined __cplusplus && defined __clang__ \
+ && (4 <= __clang_major__ + (8 <= __clang_minor__)))
+# if 5 <= __clang_major__
+/* Avoid "warning: 'static_assert' with no message is a C++17 extension". */
+# pragma clang diagnostic ignored "-Wc++17-extensions"
+# else
+/* Avoid "warning: static_assert with no message is a C++1z extension". */
+# pragma clang diagnostic ignored "-Wc++1z-extensions"
+# endif
+# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
+# if !defined _MSC_VER || defined __clang__
+# define _Static_assert(...) \
+ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -)
+# else
+ /* Work around MSVC preprocessor incompatibility with ISO C; see
+ <https://stackoverflow.com/questions/5134523/>. */
+# define _Static_assert(R, ...) \
+ _GL_VERIFY ((R), "static assertion failed", -)
+# endif
+# endif
+/* Define static_assert if needed. */
+# if (!defined static_assert \
+ && __STDC_VERSION__ < 202311 \
+ && (!defined __cplusplus \
+ || (__cpp_static_assert < 201411 \
+ && __GNUG__ < 6 && __clang_major__ < 6)))
+# if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__
+/* MSVC 14 in C++ mode supports the two-arguments static_assert but not
+ the one-argument static_assert, and it does not support _Static_assert.
+ We have to play preprocessor tricks to distinguish the two cases.
+ Since the MSVC preprocessor is not ISO C compliant (see above),.
+ the solution is specific to MSVC. */
+# define _GL_EXPAND(x) x
+# define _GL_SA1(a1) static_assert ((a1), "static assertion failed")
+# define _GL_SA2 static_assert
+# define _GL_SA3 static_assert
+# define _GL_SA_PICK(x1,x2,x3,x4,...) x4
+# define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__)
+/* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */
+# define _ALLOW_KEYWORD_MACROS 1
+# else
+# define static_assert _Static_assert /* C11 requires this #define. */
+# endif
+# endif
+#endif
+
+/* @assert.h omit start@ */
+
+#if defined __clang_major__ && __clang_major__ < 5
+# define _GL_HAS_BUILTIN_TRAP 0
+#elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))
+# define _GL_HAS_BUILTIN_TRAP 1
+#elif defined __has_builtin
+# define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap)
+#else
+# define _GL_HAS_BUILTIN_TRAP 0
+#endif
+
+#ifndef _GL_HAS_BUILTIN_UNREACHABLE
+# if defined __clang_major__ && __clang_major__ < 5
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__)
+# define _GL_HAS_BUILTIN_UNREACHABLE 1
+# elif defined __has_builtin
+# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable)
+# else
+# define _GL_HAS_BUILTIN_UNREACHABLE 0
+# endif
+#endif
+
+/* Each of these macros verifies that its argument R is nonzero. To
+ be portable, R should be an integer constant expression. Unlike
+ assert (R), there is no run-time overhead.
+
+ There are two macros, since no single macro can be used in all
+ contexts in C. verify_expr (R, E) is for scalar contexts, including
+ integer constant expression contexts. verify (R) is for declaration
+ contexts, e.g., the top level. */
+
+/* Verify requirement R at compile-time. Return the value of the
+ expression E. */
+
+#define verify_expr(R, E) \
+ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
+
+/* Verify requirement R at compile-time, as a declaration without a
+ trailing ';'. verify (R) acts like static_assert (R) except that
+ it is portable to C11/C++14 and earlier, it can issue better
+ diagnostics, and its name is shorter and may be more convenient. */
+
+#ifdef __PGI
+/* PGI barfs if R is long. */
+# define verify(R) _GL_VERIFY (R, "verify (...)", -)
+#else
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")", -)
+#endif
+
+/* Assume that R always holds. Behavior is undefined if R is false,
+ fails to evaluate, or has side effects.
+
+ 'assume (R)' is a directive from the programmer telling the
+ compiler that R is true so the compiler needn't generate code to
+ test R. This is why 'assume' is in verify.h: it's related to
+ static checking (in this case, static checking done by the
+ programmer), not dynamic checking.
+
+ 'assume (R)' can affect compilation of all the code, not just code
+ that happens to be executed after the assume (R) is "executed".
+ For example, if the code mistakenly does 'assert (R); assume (R);'
+ the compiler is entitled to optimize away the 'assert (R)'.
+
+ Although assuming R can help a compiler generate better code or
+ diagnostics, performance can suffer if R uses hard-to-optimize
+ features such as function calls not inlined by the compiler.
+
+ Avoid Clang's __builtin_assume, as it breaks GNU Emacs master
+ as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see
+ <https://bugs.gnu.org/43152#71>. It's not known whether this breakage
+ is a Clang bug or an Emacs bug; play it safe for now. */
+
+#if _GL_HAS_BUILTIN_UNREACHABLE
+# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
+#elif 1200 <= _MSC_VER
+# define assume(R) __assume (R)
+#elif 202311 <= __STDC_VERSION__
+# include <stddef.h>
+# define assume(R) ((R) ? (void) 0 : unreachable ())
+#elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP
+ /* Doing it this way helps various packages when configured with
+ --enable-gcc-warnings, which compiles with -Dlint. It's nicer
+ if 'assume' silences warnings with GCC 3.4 through GCC 4.4.7 (2012). */
+# define assume(R) ((R) ? (void) 0 : __builtin_trap ())
+#else
+ /* Some older tools grok NOTREACHED, e.g., Oracle Studio 12.6 (2017). */
+# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0)
+#endif
+
+/* @assert.h omit end@ */
+
+#endif
diff --git a/lib/version-etc-fsf.c b/lib/version-etc-fsf.c
new file mode 100644
index 0000000..a34996d
--- /dev/null
+++ b/lib/version-etc-fsf.c
@@ -0,0 +1,30 @@
+/* Variable with FSF copyright information, for version-etc.
+ Copyright (C) 1999-2006, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification. */
+#include "version-etc.h"
+
+/* Default copyright goes to the FSF. */
+
+const char version_etc_copyright[] =
+ /* Do *not* mark this string for translation. %s is a copyright
+ symbol suitable for this locale, and %d is the copyright
+ year. */
+ "Copyright %s %d Free Software Foundation, Inc.";
diff --git a/lib/version-etc.c b/lib/version-etc.c
new file mode 100644
index 0000000..8e3b573
--- /dev/null
+++ b/lib/version-etc.c
@@ -0,0 +1,262 @@
+/* Print --version and bug-reporting information in a consistent format.
+ Copyright (C) 1999-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification. */
+#include "version-etc.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+/* If you use AM_INIT_AUTOMAKE's no-define option,
+ PACKAGE is not defined. Use PACKAGE_TARNAME instead. */
+#if ! defined PACKAGE && defined PACKAGE_TARNAME
+# define PACKAGE PACKAGE_TARNAME
+#endif
+
+enum { COPYRIGHT_YEAR = 2023 };
+
+/* The three functions below display the --version information the
+ standard way.
+
+ If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+ the program. The formats are therefore:
+
+ PACKAGE VERSION
+
+ or
+
+ COMMAND_NAME (PACKAGE) VERSION.
+
+ The functions differ in the way they are passed author names. */
+
+/* Display the --version information the standard way.
+
+ Author names are given in the array AUTHORS. N_AUTHORS is the
+ number of elements in the array. */
+void
+version_etc_arn (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version,
+ const char * const * authors, size_t n_authors)
+{
+ if (command_name)
+ fprintf (stream, "%s (%s) %s\n", command_name, package, version);
+ else
+ fprintf (stream, "%s %s\n", package, version);
+
+#ifdef PACKAGE_PACKAGER
+# ifdef PACKAGE_PACKAGER_VERSION
+ fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER,
+ PACKAGE_PACKAGER_VERSION);
+# else
+ fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER);
+# endif
+#endif
+
+ /* TRANSLATORS: Translate "(C)" to the copyright symbol
+ (C-in-a-circle), if this symbol is available in the user's
+ locale. Otherwise, do not translate "(C)"; leave it as-is. */
+ fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
+
+ fputs ("\n", stream);
+
+ /* TRANSLATORS: The %s placeholder is the web address of the GPL license. */
+ fprintf (stream, _("\
+License GPLv3+: GNU GPL version 3 or later <%s>.\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n\
+"),
+ "https://gnu.org/licenses/gpl.html");
+
+ fputs ("\n", stream);
+
+ switch (n_authors)
+ {
+ case 0:
+ /* No authors are given. The caller should output authorship
+ info after calling this function. */
+ break;
+ case 1:
+ /* TRANSLATORS: %s denotes an author name. */
+ fprintf (stream, _("Written by %s.\n"), authors[0]);
+ break;
+ case 2:
+ /* TRANSLATORS: Each %s denotes an author name. */
+ fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]);
+ break;
+ case 3:
+ /* TRANSLATORS: Each %s denotes an author name. */
+ fprintf (stream, _("Written by %s, %s, and %s.\n"),
+ authors[0], authors[1], authors[2]);
+ break;
+ case 4:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"),
+ authors[0], authors[1], authors[2], authors[3]);
+ break;
+ case 5:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4]);
+ break;
+ case 6:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4],
+ authors[5]);
+ break;
+ case 7:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4],
+ authors[5], authors[6]);
+ break;
+ case 8:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4],
+ authors[5], authors[6], authors[7]);
+ break;
+ case 9:
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4],
+ authors[5], authors[6], authors[7], authors[8]);
+ break;
+ default:
+ /* 10 or more authors. Use an abbreviation, since the human reader
+ will probably not want to read the entire list anyway. */
+ /* TRANSLATORS: Each %s denotes an author name.
+ You can use line breaks, estimating that each author name occupies
+ ca. 16 screen columns and that a screen line has ca. 80 columns. */
+ fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
+ authors[0], authors[1], authors[2], authors[3], authors[4],
+ authors[5], authors[6], authors[7], authors[8]);
+ break;
+ }
+}
+
+/* Display the --version information the standard way. See the initial
+ comment to this module, for more information.
+
+ Author names are given in the NULL-terminated array AUTHORS. */
+void
+version_etc_ar (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, const char * const * authors)
+{
+ size_t n_authors;
+
+ for (n_authors = 0; authors[n_authors]; n_authors++)
+ ;
+ version_etc_arn (stream, command_name, package, version, authors, n_authors);
+}
+
+/* Display the --version information the standard way. See the initial
+ comment to this module, for more information.
+
+ Author names are given in the NULL-terminated va_list AUTHORS. */
+void
+version_etc_va (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, va_list authors)
+{
+ size_t n_authors;
+ const char *authtab[10];
+
+ for (n_authors = 0;
+ n_authors < 10
+ && (authtab[n_authors] = va_arg (authors, const char *)) != NULL;
+ n_authors++)
+ ;
+ version_etc_arn (stream, command_name, package, version,
+ authtab, n_authors);
+}
+
+
+/* Display the --version information the standard way.
+
+ If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+ the program. The formats are therefore:
+
+ PACKAGE VERSION
+
+ or
+
+ COMMAND_NAME (PACKAGE) VERSION.
+
+ The authors names are passed as separate arguments, with an additional
+ NULL argument at the end. */
+void
+version_etc (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, /* const char *author1, ...*/ ...)
+{
+ va_list authors;
+
+ va_start (authors, version);
+ version_etc_va (stream, command_name, package, version, authors);
+ va_end (authors);
+}
+
+void
+emit_bug_reporting_address (void)
+{
+ fputs ("\n", stdout);
+ /* TRANSLATORS: The placeholder indicates the bug-reporting address
+ for this package. Please add _another line_ saying
+ "Report translation bugs to <...>\n" with the address for translation
+ bugs (typically your translation team's web or email address). */
+ printf (_("Report bugs to: %s\n"), PACKAGE_BUGREPORT);
+#ifdef PACKAGE_PACKAGER_BUG_REPORTS
+ printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER,
+ PACKAGE_PACKAGER_BUG_REPORTS);
+#endif
+#ifdef PACKAGE_URL
+ printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+#else
+ printf (_("%s home page: <%s>\n"),
+ PACKAGE_NAME, "https://www.gnu.org/software/" PACKAGE "/");
+#endif
+ printf (_("General help using GNU software: <%s>\n"),
+ "https://www.gnu.org/gethelp/");
+}
diff --git a/lib/version-etc.h b/lib/version-etc.h
new file mode 100644
index 0000000..58297fc
--- /dev/null
+++ b/lib/version-etc.h
@@ -0,0 +1,78 @@
+/* Print --version and bug-reporting information in a consistent format.
+ Copyright (C) 1999, 2003, 2005, 2009-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#ifndef VERSION_ETC_H
+# define VERSION_ETC_H 1
+
+# include <stdarg.h>
+# include <stdio.h>
+
+# ifdef __cplusplus
+extern "C"
+{
+# endif
+
+extern const char version_etc_copyright[];
+
+/* The three functions below display the --version information in the
+ standard way: command and package names, package version, followed
+ by a short GPLv3+ notice and a list of up to 10 author names.
+
+ If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+ the program. The formats are therefore:
+
+ PACKAGE VERSION
+
+ or
+
+ COMMAND_NAME (PACKAGE) VERSION.
+
+ The functions differ in the way they are passed author names: */
+
+/* N_AUTHORS names are supplied in array AUTHORS. */
+extern void version_etc_arn (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version,
+ const char * const * authors, size_t n_authors);
+
+/* Names are passed in the NULL-terminated array AUTHORS. */
+extern void version_etc_ar (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, const char * const * authors);
+
+/* Names are passed in the NULL-terminated va_list. */
+extern void version_etc_va (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version, va_list authors);
+
+/* Names are passed as separate arguments, with an additional
+ NULL argument at the end. */
+extern void version_etc (FILE *stream,
+ const char *command_name, const char *package,
+ const char *version,
+ /* const char *author1, ..., NULL */ ...)
+ _GL_ATTRIBUTE_SENTINEL ((0));
+
+/* Display the usual "Report bugs to" stanza. */
+extern void emit_bug_reporting_address (void);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif /* VERSION_ETC_H */
diff --git a/lib/warn-on-use.h b/lib/warn-on-use.h
new file mode 100644
index 0000000..3075603
--- /dev/null
+++ b/lib/warn-on-use.h
@@ -0,0 +1,149 @@
+/* A C macro for emitting warnings if a function is used.
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+ for FUNCTION which will then trigger a compiler warning containing
+ the text of "literal string" anywhere that function is called, if
+ supported by the compiler. If the compiler does not support this
+ feature, the macro expands to an unused extern declaration.
+
+ _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the
+ attribute used in _GL_WARN_ON_USE. If the compiler does not support
+ this feature, it expands to empty.
+
+ These macros are useful for marking a function as a potential
+ portability trap, with the intent that "literal string" include
+ instructions on the replacement function that should be used
+ instead.
+ _GL_WARN_ON_USE is for functions with 'extern' linkage.
+ _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'
+ linkage.
+
+ However, one of the reasons that a function is a portability trap is
+ if it has the wrong signature. Declaring FUNCTION with a different
+ signature in C is a compilation error, so this macro must use the
+ same type as any existing declaration so that programs that avoid
+ the problematic FUNCTION do not fail to compile merely because they
+ included a header that poisoned the function. But this implies that
+ _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already
+ have a declaration. Use of this macro implies that there must not
+ be any other macro hiding the declaration of FUNCTION; but
+ undefining FUNCTION first is part of the poisoning process anyway
+ (although for symbols that are provided only via a macro, the result
+ is a compilation error rather than a warning containing
+ "literal string"). Also note that in C++, it is only safe to use if
+ FUNCTION has no overloads.
+
+ For an example, it is possible to poison 'getline' by:
+ - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+ [getline]) in configure.ac, which potentially defines
+ HAVE_RAW_DECL_GETLINE
+ - adding this code to a header that wraps the system <stdio.h>:
+ #undef getline
+ #if HAVE_RAW_DECL_GETLINE
+ _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+ "not universally present; use the gnulib module getline");
+ #endif
+
+ It is not possible to directly poison global variables. But it is
+ possible to write a wrapper accessor function, and poison that
+ (less common usage, like &environ, will cause a compilation error
+ rather than issue the nice warning, but the end result of informing
+ the developer about their portability problem is still achieved):
+ #if HAVE_RAW_DECL_ENVIRON
+ static char ***
+ rpl_environ (void) { return &environ; }
+ _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+ # undef environ
+ # define environ (*rpl_environ ())
+ #endif
+ or better (avoiding contradictory use of 'static' and 'extern'):
+ #if HAVE_RAW_DECL_ENVIRON
+ static char ***
+ _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared")
+ rpl_environ (void) { return &environ; }
+ # undef environ
+ # define environ (*rpl_environ ())
+ #endif
+ */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+ __attribute__ ((__warning__ (message)))
+# elif __clang_major__ >= 4
+/* Another compiler attribute is available in clang. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function \
+ __attribute__ ((__diagnose_if__ (1, message, "warning")))
+# define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+ __attribute__ ((__diagnose_if__ (1, message, "warning")))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C __typeof__ (function) function
+# define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# else /* Unsupported. */
+# define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message")
+ is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the
+ function is declared with the given prototype, consisting of return type,
+ parameters, and attributes.
+ This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+ not work in this case. */
+#ifndef _GL_WARN_ON_USE_CXX
+# if !defined __cplusplus
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+ _GL_WARN_ON_USE (function, msg)
+# else
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_gcc function parameters_and_attributes \
+ __attribute__ ((__warning__ (msg)))
+# elif __clang_major__ >= 4
+/* Another compiler attribute is available in clang. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_clang function parameters_and_attributes \
+ __attribute__ ((__diagnose_if__ (1, msg, "warning")))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+extern rettype_gcc function parameters_and_attributes
+# else /* Unsupported. */
+# define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+ performs the declaration with C linkage. */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+# define _GL_WARN_EXTERN_C extern "C"
+# else
+# define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
new file mode 100644
index 0000000..2beddd7
--- /dev/null
+++ b/lib/wchar.in.h
@@ -0,0 +1,1382 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+ Copyright (C) 2007-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Eric Blake. */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if (((defined __need_mbstate_t || defined __need_wint_t) \
+ && !defined __MINGW32__) \
+ || (defined __hpux \
+ && ((defined _INTTYPES_INCLUDED \
+ && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \
+ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \
+ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \
+ || defined _GL_ALREADY_INCLUDING_WCHAR_H)
+/* Special invocation convention:
+ - Inside glibc and uClibc header files, but not MinGW.
+ - On HP-UX 11.00 we have a sequence of nested includes
+ <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+ once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+ and once directly. In both situations 'wint_t' is not yet defined,
+ therefore we cannot provide the function overrides; instead include only
+ the system's <wchar.h>.
+ - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of
+ <wchar.h> is actually processed, and that doesn't include 'mbstate_t'.
+ - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+ the latter includes <wchar.h>. But here, we have no way to detect whether
+ <wctype.h> is completely included or is still being included. */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if @HAVE_FEATURES_H@
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+ by <stddef.h>.
+ But avoid namespace pollution on glibc systems. */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+ Some builds of uClibc lack it. */
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+#define _@GUARD_PREFIX@_WCHAR_H
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if __GNUC__ >= 11
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# if defined __cplusplus && defined __GNUC__ && !defined __clang__
+/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
+# else
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC (free, 1)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if __GNUC__ >= 3 || defined __clang__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The attribute __pure__ was added in gcc 2.96. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE /* empty */
+# endif
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_ARG_NONNULL is copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+
+/* Define wint_t and WEOF. (Also done in wctype.in.h.) */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+# define WEOF -1
+# endif
+#else
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+ <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
+ wint_t must be "unchanged by default argument promotions". Override it. */
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
+# if !GNULIB_defined_wint_t
+# if @HAVE_CRTDEFS_H@
+# include <crtdefs.h>
+# else
+# include <stddef.h>
+# endif
+typedef unsigned int rpl_wint_t;
+# undef wint_t
+# define wint_t rpl_wint_t
+# define GNULIB_defined_wint_t 1
+# endif
+# endif
+# ifndef WEOF
+# define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+ On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+ implementing mbrtowc for encodings like UTF-8.
+ On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is
+ large enough and overriding it would cause problems in C++ mode. */
+#if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+# if !GNULIB_defined_mbstate_t
+# if !(defined _AIX || defined _MSC_VER)
+typedef int rpl_mbstate_t;
+# undef mbstate_t
+# define mbstate_t rpl_mbstate_t
+# endif
+# define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+/* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have
+ been included yet. */
+#if @GNULIB_FREE_POSIX@
+# if (@REPLACE_FREE@ && !defined free \
+ && !(defined __cplusplus && defined GNULIB_NAMESPACE))
+/* We can't do '#define free rpl_free' here. */
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void rpl_free (void *) throw ();
+# else
+_GL_EXTERN_C void rpl_free (void *);
+# endif
+# undef _GL_ATTRIBUTE_DEALLOC_FREE
+# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1)
+# else
+# if defined _MSC_VER && !defined free
+_GL_EXTERN_C
+# if defined _DLL
+ __declspec (dllimport)
+# endif
+ void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+# endif
+#else
+# if defined _MSC_VER && !defined free
+_GL_EXTERN_C
+# if defined _DLL
+ __declspec (dllimport)
+# endif
+ void __cdecl free (void *);
+# else
+# if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
+_GL_EXTERN_C void free (void *) throw ();
+# else
+_GL_EXTERN_C void free (void *);
+# endif
+# endif
+#endif
+
+/* Convert a single-byte character to a wide character. */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef btowc
+# define btowc rpl_btowc
+# endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+# if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+# endif
+/* Need to cast, because on mingw, the return type is 'unsigned short'. */
+_GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (btowc);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+ "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character. */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wctob
+# define wctob rpl_wctob
+# endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+# if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared. */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wctob);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+ "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state. */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbsinit
+# define mbsinit rpl_mbsinit
+# endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+# if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbsinit);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+ "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character. */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbrtowc
+# define mbrtowc rpl_mbrtowc
+# endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n,
+ mbstate_t *restrict ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n,
+ mbstate_t *restrict ps));
+# else
+# if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n,
+ mbstate_t *restrict ps));
+# endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+ (wchar_t *restrict pwc, const char *restrict s, size_t n,
+ mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbrtowc);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+ "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character. */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbrlen
+# define mbrlen rpl_mbrlen
+# endif
+_GL_FUNCDECL_RPL (mbrlen, size_t,
+ (const char *restrict s, size_t n, mbstate_t *restrict ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t,
+ (const char *restrict s, size_t n, mbstate_t *restrict ps));
+# else
+# if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t,
+ (const char *restrict s, size_t n, mbstate_t *restrict ps));
+# endif
+_GL_CXXALIAS_SYS (mbrlen, size_t,
+ (const char *restrict s, size_t n, mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbrlen);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+ "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string. */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbsrtowcs
+# define mbsrtowcs rpl_mbsrtowcs
+# endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t len,
+ mbstate_t *restrict ps));
+# else
+# if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t len,
+ mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbsrtowcs);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+ "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string. */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef mbsnrtowcs
+# define mbsnrtowcs rpl_mbsnrtowcs
+# endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t srclen, size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t srclen, size_t len,
+ mbstate_t *restrict ps));
+# else
+# if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t srclen, size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+ (wchar_t *restrict dest,
+ const char **restrict srcp, size_t srclen, size_t len,
+ mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (mbsnrtowcs);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+ "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character. */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcrtomb
+# define wcrtomb rpl_wcrtomb
+# endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t,
+ (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t,
+ (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
+# else
+# if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t,
+ (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
+# endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t,
+ (char *restrict s, wchar_t wc, mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcrtomb);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+ "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string. */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsrtombs
+# define wcsrtombs rpl_wcsrtombs
+# endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+ (char *restrict dest, const wchar_t **restrict srcp,
+ size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+ (char *restrict dest, const wchar_t **restrict srcp,
+ size_t len,
+ mbstate_t *restrict ps));
+# else
+# if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+ (char *restrict dest, const wchar_t **restrict srcp,
+ size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+ (char *restrict dest, const wchar_t **restrict srcp,
+ size_t len,
+ mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsrtombs);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+ "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string. */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsnrtombs
+# define wcsnrtombs rpl_wcsnrtombs
+# endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+ (char *restrict dest,
+ const wchar_t **restrict srcp, size_t srclen,
+ size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+ (char *restrict dest,
+ const wchar_t **restrict srcp, size_t srclen,
+ size_t len,
+ mbstate_t *restrict ps));
+# else
+# if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun)
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+ (char *restrict dest,
+ const wchar_t **restrict srcp, size_t srclen,
+ size_t len,
+ mbstate_t *restrict ps)
+ _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+ (char *restrict dest,
+ const wchar_t **restrict srcp, size_t srclen,
+ size_t len,
+ mbstate_t *restrict ps));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsnrtombs);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+ "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC. */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcwidth
+# define wcwidth rpl_wcwidth
+# endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+# if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared. */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcwidth);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+ "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C. */
+#if @GNULIB_WMEMCHR@
+# if !@HAVE_WMEMCHR@
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+ _GL_ATTRIBUTE_PURE);
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" {
+ const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+ wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+ } */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+ wchar_t *, (const wchar_t *, wchar_t, size_t),
+ const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+ (const wchar_t *s, wchar_t c, size_t n));
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+ "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2. */
+#if @GNULIB_WMEMCMP@
+# if !@HAVE_WMEMCMP@
+_GL_FUNCDECL_SYS (wmemcmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmemcmp);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+ "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST. */
+#if @GNULIB_WMEMCPY@
+# if !@HAVE_WMEMCPY@
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmemcpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+ "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+ overlapping memory areas. */
+#if @GNULIB_WMEMMOVE@
+# if !@HAVE_WMEMMOVE@
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+ (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+ (wchar_t *dest, const wchar_t *src, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmemmove);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+ "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.
+ Return pointer to wide characters after the last written wide character. */
+#if @GNULIB_WMEMPCPY@
+# if @REPLACE_WMEMPCPY@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wmempcpy
+# define wmempcpy rpl_wmempcpy
+# endif
+_GL_FUNCDECL_RPL (wmempcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+_GL_CXXALIAS_RPL (wmempcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# else
+# if !@HAVE_WMEMPCPY@
+_GL_FUNCDECL_SYS (wmempcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmempcpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmempcpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmempcpy
+# if HAVE_RAW_DECL_WMEMPCPY
+_GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - "
+ "use gnulib module wmempcpy for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C. */
+#if @GNULIB_WMEMSET@
+# if !@HAVE_WMEMSET@
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wmemset);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+ "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S. */
+#if @GNULIB_WCSLEN@
+# if !@HAVE_WCSLEN@
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcslen);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+ "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN. */
+#if @GNULIB_WCSNLEN@
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCSNLEN@ || (defined __sun && defined __cplusplus)
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+ "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST. */
+#if @GNULIB_WCSCPY@
+# if !@HAVE_WCSCPY@
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcscpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+ "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */
+#if @GNULIB_WCPCPY@
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCPCPY@ || (defined __sun && defined __cplusplus)
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+ "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST. */
+#if @GNULIB_WCSNCPY@
+# if !@HAVE_WCSNCPY@
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsncpy);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+ "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+ the last character written into DEST. */
+#if @GNULIB_WCPNCPY@
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCPNCPY@ || (defined __sun && defined __cplusplus)
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+ (wchar_t *restrict dest,
+ const wchar_t *restrict src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+ "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST. */
+#if @GNULIB_WCSCAT@
+# if !@HAVE_WCSCAT@
+_GL_FUNCDECL_SYS (wcscat, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcscat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+ "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST. */
+#if @GNULIB_WCSNCAT@
+# if !@HAVE_WCSNCAT@
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src,
+ size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+ (wchar_t *restrict dest, const wchar_t *restrict src,
+ size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsncat);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+ "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2. */
+#if @GNULIB_WCSCMP@
+# if !@HAVE_WCSCMP@
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcscmp);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+ "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2. */
+#if @GNULIB_WCSNCMP@
+# if !@HAVE_WCSNCMP@
+_GL_FUNCDECL_SYS (wcsncmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsncmp);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+ "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case. */
+#if @GNULIB_WCSCASECMP@
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCSCASECMP@ || (defined __sun && defined __cplusplus)
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+ "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case. */
+#if @GNULIB_WCSNCASECMP@
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCSNCASECMP@ || (defined __sun && defined __cplusplus)
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+ (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+ "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+ category of the current locale. */
+#if @GNULIB_WCSCOLL@
+# if !@HAVE_WCSCOLL@
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcscoll);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+ "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+ to two transformed strings the result is the as applying 'wcscoll' to the
+ original strings. */
+#if @GNULIB_WCSXFRM@
+# if !@HAVE_WCSXFRM@
+_GL_FUNCDECL_SYS (wcsxfrm, size_t,
+ (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t,
+ (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsxfrm);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+ "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string. */
+#if @GNULIB_WCSDUP@
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsdup
+# define wcsdup _wcsdup
+# endif
+_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
+# else
+/* On Solaris 11.3, the header files declare the function in the std::
+ namespace, not in the global namespace. So, force a declaration in
+ the global namespace. */
+# if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 11
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIASWARN (wcsdup);
+#else
+# if __GNUC__ >= 11 && !defined wcsdup
+/* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# endif
+# if defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+ "use gnulib module wcsdup for portability");
+# endif
+# elif @GNULIB_MDA_WCSDUP@
+/* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not
+ required. In C++ with GNULIB_NAMESPACE, avoid differences between
+ platforms by defining GNULIB_NAMESPACE::wcsdup always. */
+# if defined _WIN32 && !defined __CYGWIN__
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsdup
+# define wcsdup _wcsdup
+# endif
+_GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
+# else
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+ (const wchar_t *s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+# if @HAVE_DECL_WCSDUP@
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+# endif
+# if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@
+_GL_CXXALIASWARN (wcsdup);
+# endif
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS. */
+#if @GNULIB_WCSCHR@
+# if !@HAVE_WCSCHR@
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+ _GL_ATTRIBUTE_PURE);
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" {
+ const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+ wchar_t * std::wcschr (wchar_t *, wchar_t);
+ } */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+ wchar_t *, (const wchar_t *, wchar_t),
+ const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+ "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS. */
+#if @GNULIB_WCSRCHR@
+# if !@HAVE_WCSRCHR@
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+ _GL_ATTRIBUTE_PURE);
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" {
+ const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+ wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+ } */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+ wchar_t *, (const wchar_t *, wchar_t),
+ const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+ "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+ of wide characters not in REJECT. */
+#if @GNULIB_WCSCSPN@
+# if !@HAVE_WCSCSPN@
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcscspn);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+ "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+ of wide characters in ACCEPT. */
+#if @GNULIB_WCSSPN@
+# if !@HAVE_WCSSPN@
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsspn);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+ "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT. */
+#if @GNULIB_WCSPBRK@
+# if !@HAVE_WCSPBRK@
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+ (const wchar_t *wcs, const wchar_t *accept)
+ _GL_ATTRIBUTE_PURE);
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" {
+ const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+ wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+ } */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+ wchar_t *, (const wchar_t *, const wchar_t *),
+ const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+ (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+ (const wchar_t *wcs, const wchar_t *accept));
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+ "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK. */
+#if @GNULIB_WCSSTR@
+# if !@HAVE_WCSSTR@
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+ (const wchar_t *restrict haystack,
+ const wchar_t *restrict needle)
+ _GL_ATTRIBUTE_PURE);
+# endif
+ /* On some systems, this function is defined as an overloaded function:
+ extern "C++" {
+ const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+ wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+ } */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+ wchar_t *,
+ (const wchar_t *restrict, const wchar_t *restrict),
+ const wchar_t *,
+ (const wchar_t *restrict, const wchar_t *restrict));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+ (wchar_t *restrict haystack,
+ const wchar_t *restrict needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+ (const wchar_t *restrict haystack,
+ const wchar_t *restrict needle));
+# elif __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+ "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM. */
+#if @GNULIB_WCSTOK@
+# if @REPLACE_WCSTOK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcstok
+# define wcstok rpl_wcstok
+# endif
+_GL_FUNCDECL_RPL (wcstok, wchar_t *,
+ (wchar_t *restrict wcs, const wchar_t *restrict delim,
+ wchar_t **restrict ptr));
+_GL_CXXALIAS_RPL (wcstok, wchar_t *,
+ (wchar_t *restrict wcs, const wchar_t *restrict delim,
+ wchar_t **restrict ptr));
+# else
+# if !@HAVE_WCSTOK@
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+ (wchar_t *restrict wcs, const wchar_t *restrict delim,
+ wchar_t **restrict ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+ (wchar_t *restrict wcs, const wchar_t *restrict delim,
+ wchar_t **restrict ptr));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcstok);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+ "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+ characters (or fewer if S ends before this) in S. */
+#if @GNULIB_WCSWIDTH@
+# if @REPLACE_WCSWIDTH@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcswidth
+# define wcswidth rpl_wcswidth
+# endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+ _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+# if !@HAVE_WCSWIDTH@
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+ _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcswidth);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+ "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+/* Convert *TP to a date and time wide string. See
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */
+#if @GNULIB_WCSFTIME@
+# if @REPLACE_WCSFTIME@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef wcsftime
+# define wcsftime rpl_wcsftime
+# endif
+_GL_FUNCDECL_RPL (wcsftime, size_t,
+ (wchar_t *restrict __buf, size_t __bufsize,
+ const wchar_t *restrict __fmt,
+ const struct tm *restrict __tp)
+ _GL_ARG_NONNULL ((1, 3, 4)));
+_GL_CXXALIAS_RPL (wcsftime, size_t,
+ (wchar_t *restrict __buf, size_t __bufsize,
+ const wchar_t *restrict __fmt,
+ const struct tm *restrict __tp));
+# else
+# if !@HAVE_WCSFTIME@
+_GL_FUNCDECL_SYS (wcsftime, size_t,
+ (wchar_t *restrict __buf, size_t __bufsize,
+ const wchar_t *restrict __fmt,
+ const struct tm *restrict __tp)
+ _GL_ARG_NONNULL ((1, 3, 4)));
+# endif
+_GL_CXXALIAS_SYS (wcsftime, size_t,
+ (wchar_t *restrict __buf, size_t __bufsize,
+ const wchar_t *restrict __fmt,
+ const struct tm *restrict __tp));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wcsftime);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsftime
+# if HAVE_RAW_DECL_WCSFTIME
+_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
+ "use gnulib module wcsftime for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif
diff --git a/lib/wcrtomb.c b/lib/wcrtomb.c
new file mode 100644
index 0000000..48a6c8e
--- /dev/null
+++ b/lib/wcrtomb.c
@@ -0,0 +1,80 @@
+/* Convert wide character to multibyte character.
+ Copyright (C) 2008-2023 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2008.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+/* Specification. */
+#include <wchar.h>
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+size_t
+wcrtomb (char *s, wchar_t wc, mbstate_t *ps)
+#undef wcrtomb
+{
+ /* This implementation of wcrtomb supports only stateless encodings.
+ ps must be in the initial state. */
+ if (ps != NULL && !mbsinit (ps))
+ {
+ errno = EINVAL;
+ return (size_t)(-1);
+ }
+
+#if !HAVE_WCRTOMB /* IRIX 6.5 */ \
+ || WCRTOMB_RETVAL_BUG /* Solaris 11.3, MSVC */ \
+ || WCRTOMB_C_LOCALE_BUG /* Android */
+ if (s == NULL)
+ /* We know the NUL wide character corresponds to the NUL character. */
+ return 1;
+ else
+#endif
+ {
+#if HAVE_WCRTOMB
+# if WCRTOMB_C_LOCALE_BUG /* Android */
+ /* Implement consistently with mbrtowc(): through a 1:1 correspondence,
+ as in ISO-8859-1. */
+ if (wc >= 0 && wc <= 0xff)
+ {
+ *s = (unsigned char) wc;
+ return 1;
+ }
+ else
+ {
+ errno = EILSEQ;
+ return (size_t)(-1);
+ }
+# else
+ return wcrtomb (s, wc, ps);
+# endif
+#else /* IRIX 6.5 */
+ /* Fallback for platforms that don't have wcrtomb().
+ Implement on top of wctomb().
+ This code is not multithread-safe. */
+ int ret = wctomb (s, wc);
+
+ if (ret >= 0)
+ return ret;
+ else
+ {
+ errno = EILSEQ;
+ return (size_t)(-1);
+ }
+#endif
+ }
+}
diff --git a/lib/wctype-h.c b/lib/wctype-h.c
new file mode 100644
index 0000000..7d3e14a
--- /dev/null
+++ b/lib/wctype-h.c
@@ -0,0 +1,23 @@
+/* Inline functions for <wctype.h>.
+
+ Copyright (C) 2012-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Normally this would be wctype.c, but that name's already taken. */
+
+#include <config.h>
+
+#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
+#include "wctype.h"
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
new file mode 100644
index 0000000..f6e474d
--- /dev/null
+++ b/lib/wctype.in.h
@@ -0,0 +1,732 @@
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+ Copyright (C) 2006-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible and Paul Eggert. */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__)
+
+/* Special invocation convention:
+ - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of
+ <wctype.h> is being processed, which doesn't include the idempotency
+ guard. */
+
+#@INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+
+#else
+/* Normal invocation convention. */
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+
+#if @HAVE_WINT_T@
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
+# include <wchar.h>
+#endif
+
+/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and
+ isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include
+ <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the
+ declarations. */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <ctype.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+ BeOS 5 has the functions but no <wctype.h>. */
+/* The include_next requires a split double-inclusion guard. */
+#if @HAVE_WCTYPE_H@
+# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+#define _@GUARD_PREFIX@_WCTYPE_H
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_WCTYPE_INLINE
+# define _GL_WCTYPE_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
+
+/* The definition of _GL_WARN_ON_USE is copied here. */
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+ #defines a number of identifiers in the application namespace. Revert
+ these #defines. */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF. (Also done in wchar.in.h.) */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+# define WEOF -1
+# endif
+#else
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+ <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that
+ wint_t must be "unchanged by default argument promotions". Override it. */
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
+# if !GNULIB_defined_wint_t
+# if @HAVE_CRTDEFS_H@
+# include <crtdefs.h>
+# else
+# include <stddef.h>
+# endif
+typedef unsigned int rpl_wint_t;
+# undef wint_t
+# define wint_t rpl_wint_t
+# define GNULIB_defined_wint_t 1
+# endif
+# endif
+# ifndef WEOF
+# define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+ Linux libc5 has <wctype.h> and the functions but they are broken.
+ mingw and MSVC have <wctype.h> and the functions but they take a wchar_t
+ as argument, not an rpl_wint_t.
+ Assume all 11 functions (all isw* except iswblank) are implemented the
+ same way, or not at all. */
+# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
+
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */
+
+_GL_WCTYPE_INLINE int
+rpl_iswalnum (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswalpha (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswblank (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswcntrl (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswdigit (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswgraph (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswlower (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswprint (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswpunct (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswspace (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswupper (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0);
+}
+
+_GL_WCTYPE_INLINE int
+rpl_iswxdigit (wint_t wc)
+{
+ return ((wchar_t) wc == wc
+ ? (wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')
+ : 0);
+}
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+ return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc);
+}
+
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef iswalnum
+# undef iswalpha
+# undef iswblank
+# undef iswcntrl
+# undef iswdigit
+# undef iswgraph
+# undef iswlower
+# undef iswprint
+# undef iswpunct
+# undef iswspace
+# undef iswupper
+# undef iswxdigit
+# undef towlower
+# undef towupper
+# define iswalnum rpl_iswalnum
+# define iswalpha rpl_iswalpha
+# define iswblank rpl_iswblank
+# define iswcntrl rpl_iswcntrl
+# define iswdigit rpl_iswdigit
+# define iswgraph rpl_iswgraph
+# define iswlower rpl_iswlower
+# define iswprint rpl_iswprint
+# define iswpunct rpl_iswpunct
+# define iswspace rpl_iswspace
+# define iswupper rpl_iswupper
+# define iswxdigit rpl_iswxdigit
+# define towlower rpl_towlower
+# define towupper rpl_towupper
+# endif
+
+# else
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+ undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+ refer to system functions like _iswctype that are not in the
+ standard C library. Rather than try to get ancient buggy
+ implementations like this to work, just disable them. */
+# undef iswalnum
+# undef iswalpha
+# undef iswblank
+# undef iswcntrl
+# undef iswdigit
+# undef iswgraph
+# undef iswlower
+# undef iswprint
+# undef iswpunct
+# undef iswspace
+# undef iswupper
+# undef iswxdigit
+# undef towlower
+# undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken. */
+# if @REPLACE_ISWCNTRL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define iswalnum rpl_iswalnum
+# define iswalpha rpl_iswalpha
+# define iswblank rpl_iswblank
+# define iswcntrl rpl_iswcntrl
+# define iswdigit rpl_iswdigit
+# define iswgraph rpl_iswgraph
+# define iswlower rpl_iswlower
+# define iswprint rpl_iswprint
+# define iswpunct rpl_iswpunct
+# define iswspace rpl_iswspace
+# define iswupper rpl_iswupper
+# define iswxdigit rpl_iswxdigit
+# endif
+# endif
+# if @REPLACE_TOWLOWER@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define towlower rpl_towlower
+# define towupper rpl_towupper
+# endif
+# endif
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswalnum
+# else
+iswalnum
+# endif
+ (wint_t wc)
+{
+ return ((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswalpha
+# else
+iswalpha
+# endif
+ (wint_t wc)
+{
+ return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswblank
+# else
+iswblank
+# endif
+ (wint_t wc)
+{
+ return wc == ' ' || wc == '\t';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswcntrl
+# else
+iswcntrl
+# endif
+ (wint_t wc)
+{
+ return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWDIGIT@
+rpl_iswdigit
+# else
+iswdigit
+# endif
+ (wint_t wc)
+{
+ return wc >= '0' && wc <= '9';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswgraph
+# else
+iswgraph
+# endif
+ (wint_t wc)
+{
+ return wc >= '!' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswlower
+# else
+iswlower
+# endif
+ (wint_t wc)
+{
+ return wc >= 'a' && wc <= 'z';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswprint
+# else
+iswprint
+# endif
+ (wint_t wc)
+{
+ return wc >= ' ' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswpunct
+# else
+iswpunct
+# endif
+ (wint_t wc)
+{
+ return (wc >= '!' && wc <= '~'
+ && !((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswspace
+# else
+iswspace
+# endif
+ (wint_t wc)
+{
+ return (wc == ' ' || wc == '\t'
+ || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWCNTRL@
+rpl_iswupper
+# else
+iswupper
+# endif
+ (wint_t wc)
+{
+ return wc >= 'A' && wc <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+# if @REPLACE_ISWXDIGIT@
+rpl_iswxdigit
+# else
+iswxdigit
+# endif
+ (wint_t wc)
+{
+ return ((wc >= '0' && wc <= '9')
+ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+_GL_WCTYPE_INLINE wint_t
+# if @REPLACE_TOWLOWER@
+rpl_towlower
+# else
+towlower
+# endif
+ (wint_t wc)
+{
+ return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+# if @REPLACE_TOWLOWER@
+rpl_towupper
+# else
+towupper
+# endif
+ (wint_t wc)
+{
+ return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# endif
+
+# else
+/* Only some of the functions are missing or broken. */
+
+# if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
+/* Only the iswblank function is missing. */
+# if @REPLACE_ISWBLANK@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define iswblank rpl_iswblank
+# endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+# endif
+# endif
+
+# if @GNULIB_ISWDIGIT@
+# if @REPLACE_ISWDIGIT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef iswdigit
+# define iswdigit rpl_iswdigit
+# endif
+_GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc));
+# endif
+# endif
+
+# if @GNULIB_ISWXDIGIT@
+# if @REPLACE_ISWXDIGIT@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef iswxdigit
+# define iswxdigit rpl_iswxdigit
+# endif
+_GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc));
+# endif
+# endif
+
+# endif
+
+# if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+ The functions towlower and towupper are implemented in the MSVCRT library
+ to take a wchar_t argument and return a wchar_t result. mingw declares
+ these functions to take a wint_t argument and return a wint_t result.
+ This means that:
+ 1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+ function will look only at the lower 16 bits. This is allowed according
+ to POSIX.
+ 2. The return value is returned in the lower 16 bits of the result register.
+ The upper 16 bits are random: whatever happened to be in that part of the
+ result register. We need to fix this by adding a zero-extend from
+ wchar_t to wint_t after the call. */
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+ return (wint_t) (wchar_t) towlower (wc);
+}
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define towlower rpl_towlower
+# endif
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+ return (wint_t) (wchar_t) towupper (wc);
+}
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# define towupper rpl_towupper
+# endif
+
+# endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+#endif
+#if @GNULIB_ISWDIGIT@
+# if @REPLACE_ISWDIGIT@
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+# endif
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+#endif
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+#endif
+#if @GNULIB_ISWXDIGIT@
+# if @REPLACE_ISWXDIGIT@
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+# endif
+#endif
+#if __GLIBC__ >= 2
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+#endif
+
+#if @GNULIB_ISWBLANK@
+# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (iswblank);
+# endif
+#endif
+
+#if !@HAVE_WCTYPE_T@
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+# define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property. */
+#if @GNULIB_WCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wctype);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+ "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+ The argument WC must be either a wchar_t value or WEOF.
+ The argument DESC must have been returned by the wctype() function. */
+#if @GNULIB_ISWCTYPE@
+# if @GNULIBHEADERS_OVERRIDE_WINT_T@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+# undef iswctype
+# define iswctype rpl_iswctype
+# endif
+_GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc));
+# else
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (iswctype);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+ "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if @REPLACE_TOWLOWER@ || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+#if __GLIBC__ >= 2
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+#endif
+
+#if !@HAVE_WCTRANS_T@
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+# define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion. */
+#if @GNULIB_WCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (wctrans);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+ "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+ The argument WC must be either a wchar_t value or WEOF.
+ The argument DESC must have been returned by the wctrans() function. */
+#if @GNULIB_TOWCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# if __GLIBC__ >= 2
+_GL_CXXALIASWARN (towctrans);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+ "use gnulib module towctrans for portability");
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif
diff --git a/lib/windows-initguard.h b/lib/windows-initguard.h
new file mode 100644
index 0000000..9d36f53
--- /dev/null
+++ b/lib/windows-initguard.h
@@ -0,0 +1,35 @@
+/* Init guards, somewhat like spinlocks (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#ifndef _WINDOWS_INITGUARD_H
+#define _WINDOWS_INITGUARD_H
+
+#define WIN32_LEAN_AND_MEAN /* avoid including junk */
+#include <windows.h>
+
+typedef struct
+ {
+ volatile int done;
+ volatile LONG started;
+ }
+ glwthread_initguard_t;
+
+#define GLWTHREAD_INITGUARD_INIT { 0, -1 }
+
+#endif /* _WINDOWS_INITGUARD_H */
diff --git a/lib/windows-mutex.c b/lib/windows-mutex.c
new file mode 100644
index 0000000..ab7258c
--- /dev/null
+++ b/lib/windows-mutex.c
@@ -0,0 +1,95 @@
+/* Plain mutexes (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#include <config.h>
+
+/* Specification. */
+#include "windows-mutex.h"
+
+#include <errno.h>
+
+void
+glwthread_mutex_init (glwthread_mutex_t *mutex)
+{
+ InitializeCriticalSection (&mutex->lock);
+ mutex->guard.done = 1;
+}
+
+int
+glwthread_mutex_lock (glwthread_mutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ {
+ if (InterlockedIncrement (&mutex->guard.started) == 0)
+ /* This thread is the first one to need this mutex. Initialize it. */
+ glwthread_mutex_init (mutex);
+ else
+ {
+ /* Don't let mutex->guard.started grow and wrap around. */
+ InterlockedDecrement (&mutex->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this mutex. */
+ while (!mutex->guard.done)
+ Sleep (0);
+ }
+ }
+ EnterCriticalSection (&mutex->lock);
+ return 0;
+}
+
+int
+glwthread_mutex_trylock (glwthread_mutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ {
+ if (InterlockedIncrement (&mutex->guard.started) == 0)
+ /* This thread is the first one to need this mutex. Initialize it. */
+ glwthread_mutex_init (mutex);
+ else
+ {
+ /* Don't let mutex->guard.started grow and wrap around. */
+ InterlockedDecrement (&mutex->guard.started);
+ /* Let another thread finish initializing this mutex, and let it also
+ lock this mutex. */
+ return EBUSY;
+ }
+ }
+ if (!TryEnterCriticalSection (&mutex->lock))
+ return EBUSY;
+ return 0;
+}
+
+int
+glwthread_mutex_unlock (glwthread_mutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ return EINVAL;
+ LeaveCriticalSection (&mutex->lock);
+ return 0;
+}
+
+int
+glwthread_mutex_destroy (glwthread_mutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ return EINVAL;
+ DeleteCriticalSection (&mutex->lock);
+ mutex->guard.done = 0;
+ return 0;
+}
diff --git a/lib/windows-mutex.h b/lib/windows-mutex.h
new file mode 100644
index 0000000..039eb70
--- /dev/null
+++ b/lib/windows-mutex.h
@@ -0,0 +1,51 @@
+/* Plain mutexes (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#ifndef _WINDOWS_MUTEX_H
+#define _WINDOWS_MUTEX_H
+
+#define WIN32_LEAN_AND_MEAN /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+typedef struct
+ {
+ glwthread_initguard_t guard; /* protects the initialization */
+ CRITICAL_SECTION lock;
+ }
+ glwthread_mutex_t;
+
+#define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_mutex_init (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_lock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex);
+extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_MUTEX_H */
diff --git a/lib/windows-once.c b/lib/windows-once.c
new file mode 100644
index 0000000..0d28281
--- /dev/null
+++ b/lib/windows-once.c
@@ -0,0 +1,62 @@
+/* Once-only control (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#include <config.h>
+
+/* Specification. */
+#include "windows-once.h"
+
+#include <stdlib.h>
+
+void
+glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void))
+{
+ if (once_control->inited <= 0)
+ {
+ if (InterlockedIncrement (&once_control->started) == 0)
+ {
+ /* This thread is the first one to come to this once_control. */
+ InitializeCriticalSection (&once_control->lock);
+ EnterCriticalSection (&once_control->lock);
+ once_control->inited = 0;
+ initfunction ();
+ once_control->inited = 1;
+ LeaveCriticalSection (&once_control->lock);
+ }
+ else
+ {
+ /* Don't let once_control->started grow and wrap around. */
+ InterlockedDecrement (&once_control->started);
+ /* Some other thread has already started the initialization.
+ Yield the CPU while waiting for the other thread to finish
+ initializing and taking the lock. */
+ while (once_control->inited < 0)
+ Sleep (0);
+ if (once_control->inited <= 0)
+ {
+ /* Take the lock. This blocks until the other thread has
+ finished calling the initfunction. */
+ EnterCriticalSection (&once_control->lock);
+ LeaveCriticalSection (&once_control->lock);
+ if (!(once_control->inited > 0))
+ abort ();
+ }
+ }
+ }
+}
diff --git a/lib/windows-once.h b/lib/windows-once.h
new file mode 100644
index 0000000..5488568
--- /dev/null
+++ b/lib/windows-once.h
@@ -0,0 +1,47 @@
+/* Once-only control (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#ifndef _WINDOWS_ONCE_H
+#define _WINDOWS_ONCE_H
+
+#define WIN32_LEAN_AND_MEAN /* avoid including junk */
+#include <windows.h>
+
+typedef struct
+ {
+ volatile int inited;
+ volatile LONG started;
+ CRITICAL_SECTION lock;
+ }
+ glwthread_once_t;
+
+#define GLWTHREAD_ONCE_INIT { -1, -1 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_once (glwthread_once_t *once_control,
+ void (*initfunction) (void));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_ONCE_H */
diff --git a/lib/windows-recmutex.c b/lib/windows-recmutex.c
new file mode 100644
index 0000000..a8ce9a0
--- /dev/null
+++ b/lib/windows-recmutex.c
@@ -0,0 +1,127 @@
+/* Plain recursive mutexes (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#include <config.h>
+
+/* Specification. */
+#include "windows-recmutex.h"
+
+#include <errno.h>
+
+void
+glwthread_recmutex_init (glwthread_recmutex_t *mutex)
+{
+ mutex->owner = 0;
+ mutex->depth = 0;
+ InitializeCriticalSection (&mutex->lock);
+ mutex->guard.done = 1;
+}
+
+int
+glwthread_recmutex_lock (glwthread_recmutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ {
+ if (InterlockedIncrement (&mutex->guard.started) == 0)
+ /* This thread is the first one to need this mutex. Initialize it. */
+ glwthread_recmutex_init (mutex);
+ else
+ {
+ /* Don't let mutex->guard.started grow and wrap around. */
+ InterlockedDecrement (&mutex->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this mutex. */
+ while (!mutex->guard.done)
+ Sleep (0);
+ }
+ }
+ {
+ DWORD self = GetCurrentThreadId ();
+ if (mutex->owner != self)
+ {
+ EnterCriticalSection (&mutex->lock);
+ mutex->owner = self;
+ }
+ if (++(mutex->depth) == 0) /* wraparound? */
+ {
+ mutex->depth--;
+ return EAGAIN;
+ }
+ }
+ return 0;
+}
+
+int
+glwthread_recmutex_trylock (glwthread_recmutex_t *mutex)
+{
+ if (!mutex->guard.done)
+ {
+ if (InterlockedIncrement (&mutex->guard.started) == 0)
+ /* This thread is the first one to need this mutex. Initialize it. */
+ glwthread_recmutex_init (mutex);
+ else
+ {
+ /* Don't let mutex->guard.started grow and wrap around. */
+ InterlockedDecrement (&mutex->guard.started);
+ /* Let another thread finish initializing this mutex, and let it also
+ lock this mutex. */
+ return EBUSY;
+ }
+ }
+ {
+ DWORD self = GetCurrentThreadId ();
+ if (mutex->owner != self)
+ {
+ if (!TryEnterCriticalSection (&mutex->lock))
+ return EBUSY;
+ mutex->owner = self;
+ }
+ if (++(mutex->depth) == 0) /* wraparound? */
+ {
+ mutex->depth--;
+ return EAGAIN;
+ }
+ }
+ return 0;
+}
+
+int
+glwthread_recmutex_unlock (glwthread_recmutex_t *mutex)
+{
+ if (mutex->owner != GetCurrentThreadId ())
+ return EPERM;
+ if (mutex->depth == 0)
+ return EINVAL;
+ if (--(mutex->depth) == 0)
+ {
+ mutex->owner = 0;
+ LeaveCriticalSection (&mutex->lock);
+ }
+ return 0;
+}
+
+int
+glwthread_recmutex_destroy (glwthread_recmutex_t *mutex)
+{
+ if (mutex->owner != 0)
+ return EBUSY;
+ DeleteCriticalSection (&mutex->lock);
+ mutex->guard.done = 0;
+ return 0;
+}
diff --git a/lib/windows-recmutex.h b/lib/windows-recmutex.h
new file mode 100644
index 0000000..08ff459
--- /dev/null
+++ b/lib/windows-recmutex.h
@@ -0,0 +1,57 @@
+/* Plain recursive mutexes (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#ifndef _WINDOWS_RECMUTEX_H
+#define _WINDOWS_RECMUTEX_H
+
+#define WIN32_LEAN_AND_MEAN /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+/* The native Windows documentation says that CRITICAL_SECTION already
+ implements a recursive lock. But we need not rely on it: It's easy to
+ implement a recursive lock without this assumption. */
+
+typedef struct
+ {
+ glwthread_initguard_t guard; /* protects the initialization */
+ DWORD owner;
+ unsigned long depth;
+ CRITICAL_SECTION lock;
+ }
+ glwthread_recmutex_t;
+
+#define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex);
+extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_RECMUTEX_H */
diff --git a/lib/windows-rwlock.c b/lib/windows-rwlock.c
new file mode 100644
index 0000000..7cbd7bb
--- /dev/null
+++ b/lib/windows-rwlock.c
@@ -0,0 +1,377 @@
+/* Read-write locks (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#include <config.h>
+
+/* Specification. */
+#include "windows-rwlock.h"
+
+#include <errno.h>
+#include <stdlib.h>
+
+/* Don't assume that UNICODE is not defined. */
+#undef CreateEvent
+#define CreateEvent CreateEventA
+
+/* In this file, the waitqueues are implemented as circular arrays. */
+#define glwthread_waitqueue_t glwthread_carray_waitqueue_t
+
+static void
+glwthread_waitqueue_init (glwthread_waitqueue_t *wq)
+{
+ wq->array = NULL;
+ wq->count = 0;
+ wq->alloc = 0;
+ wq->offset = 0;
+}
+
+/* Enqueues the current thread, represented by an event, in a wait queue.
+ Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */
+static HANDLE
+glwthread_waitqueue_add (glwthread_waitqueue_t *wq)
+{
+ HANDLE event;
+ unsigned int index;
+
+ if (wq->count == wq->alloc)
+ {
+ unsigned int new_alloc = 2 * wq->alloc + 1;
+ HANDLE *new_array =
+ (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE));
+ if (new_array == NULL)
+ /* No more memory. */
+ return INVALID_HANDLE_VALUE;
+ /* Now is a good opportunity to rotate the array so that its contents
+ starts at offset 0. */
+ if (wq->offset > 0)
+ {
+ unsigned int old_count = wq->count;
+ unsigned int old_alloc = wq->alloc;
+ unsigned int old_offset = wq->offset;
+ unsigned int i;
+ if (old_offset + old_count > old_alloc)
+ {
+ unsigned int limit = old_offset + old_count - old_alloc;
+ for (i = 0; i < limit; i++)
+ new_array[old_alloc + i] = new_array[i];
+ }
+ for (i = 0; i < old_count; i++)
+ new_array[i] = new_array[old_offset + i];
+ wq->offset = 0;
+ }
+ wq->array = new_array;
+ wq->alloc = new_alloc;
+ }
+ /* Whether the created event is a manual-reset one or an auto-reset one,
+ does not matter, since we will wait on it only once. */
+ event = CreateEvent (NULL, TRUE, FALSE, NULL);
+ if (event == INVALID_HANDLE_VALUE)
+ /* No way to allocate an event. */
+ return INVALID_HANDLE_VALUE;
+ index = wq->offset + wq->count;
+ if (index >= wq->alloc)
+ index -= wq->alloc;
+ wq->array[index] = event;
+ wq->count++;
+ return event;
+}
+
+/* Notifies the first thread from a wait queue and dequeues it. */
+static void
+glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq)
+{
+ SetEvent (wq->array[wq->offset + 0]);
+ wq->offset++;
+ wq->count--;
+ if (wq->count == 0 || wq->offset == wq->alloc)
+ wq->offset = 0;
+}
+
+/* Notifies all threads from a wait queue and dequeues them all. */
+static void
+glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq)
+{
+ unsigned int i;
+
+ for (i = 0; i < wq->count; i++)
+ {
+ unsigned int index = wq->offset + i;
+ if (index >= wq->alloc)
+ index -= wq->alloc;
+ SetEvent (wq->array[index]);
+ }
+ wq->count = 0;
+ wq->offset = 0;
+}
+
+void
+glwthread_rwlock_init (glwthread_rwlock_t *lock)
+{
+ InitializeCriticalSection (&lock->lock);
+ glwthread_waitqueue_init (&lock->waiting_readers);
+ glwthread_waitqueue_init (&lock->waiting_writers);
+ lock->runcount = 0;
+ lock->guard.done = 1;
+}
+
+int
+glwthread_rwlock_rdlock (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ {
+ if (InterlockedIncrement (&lock->guard.started) == 0)
+ /* This thread is the first one to need this lock. Initialize it. */
+ glwthread_rwlock_init (lock);
+ else
+ {
+ /* Don't let lock->guard.started grow and wrap around. */
+ InterlockedDecrement (&lock->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this lock. */
+ while (!lock->guard.done)
+ Sleep (0);
+ }
+ }
+ EnterCriticalSection (&lock->lock);
+ /* Test whether only readers are currently running, and whether the runcount
+ field will not overflow, and whether no writer is waiting. The latter
+ condition is because POSIX recommends that "write locks shall take
+ precedence over read locks", to avoid "writer starvation". */
+ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_readers. */
+ HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers);
+ if (event != INVALID_HANDLE_VALUE)
+ {
+ DWORD result;
+ LeaveCriticalSection (&lock->lock);
+ /* Wait until another thread signals this event. */
+ result = WaitForSingleObject (event, INFINITE);
+ if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+ abort ();
+ CloseHandle (event);
+ /* The thread which signalled the event already did the bookkeeping:
+ removed us from the waiting_readers, incremented lock->runcount. */
+ if (!(lock->runcount > 0))
+ abort ();
+ return 0;
+ }
+ else
+ {
+ /* Allocation failure. Weird. */
+ do
+ {
+ LeaveCriticalSection (&lock->lock);
+ Sleep (1);
+ EnterCriticalSection (&lock->lock);
+ }
+ while (!(lock->runcount + 1 > 0));
+ }
+ }
+ lock->runcount++;
+ LeaveCriticalSection (&lock->lock);
+ return 0;
+}
+
+int
+glwthread_rwlock_wrlock (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ {
+ if (InterlockedIncrement (&lock->guard.started) == 0)
+ /* This thread is the first one to need this lock. Initialize it. */
+ glwthread_rwlock_init (lock);
+ else
+ {
+ /* Don't let lock->guard.started grow and wrap around. */
+ InterlockedDecrement (&lock->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this lock. */
+ while (!lock->guard.done)
+ Sleep (0);
+ }
+ }
+ EnterCriticalSection (&lock->lock);
+ /* Test whether no readers or writers are currently running. */
+ if (!(lock->runcount == 0))
+ {
+ /* This thread has to wait for a while. Enqueue it among the
+ waiting_writers. */
+ HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers);
+ if (event != INVALID_HANDLE_VALUE)
+ {
+ DWORD result;
+ LeaveCriticalSection (&lock->lock);
+ /* Wait until another thread signals this event. */
+ result = WaitForSingleObject (event, INFINITE);
+ if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+ abort ();
+ CloseHandle (event);
+ /* The thread which signalled the event already did the bookkeeping:
+ removed us from the waiting_writers, set lock->runcount = -1. */
+ if (!(lock->runcount == -1))
+ abort ();
+ return 0;
+ }
+ else
+ {
+ /* Allocation failure. Weird. */
+ do
+ {
+ LeaveCriticalSection (&lock->lock);
+ Sleep (1);
+ EnterCriticalSection (&lock->lock);
+ }
+ while (!(lock->runcount == 0));
+ }
+ }
+ lock->runcount--; /* runcount becomes -1 */
+ LeaveCriticalSection (&lock->lock);
+ return 0;
+}
+
+int
+glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ {
+ if (InterlockedIncrement (&lock->guard.started) == 0)
+ /* This thread is the first one to need this lock. Initialize it. */
+ glwthread_rwlock_init (lock);
+ else
+ {
+ /* Don't let lock->guard.started grow and wrap around. */
+ InterlockedDecrement (&lock->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this lock. */
+ while (!lock->guard.done)
+ Sleep (0);
+ }
+ }
+ /* It's OK to wait for this critical section, because it is never taken for a
+ long time. */
+ EnterCriticalSection (&lock->lock);
+ /* Test whether only readers are currently running, and whether the runcount
+ field will not overflow, and whether no writer is waiting. The latter
+ condition is because POSIX recommends that "write locks shall take
+ precedence over read locks", to avoid "writer starvation". */
+ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0))
+ {
+ /* This thread would have to wait for a while. Return instead. */
+ LeaveCriticalSection (&lock->lock);
+ return EBUSY;
+ }
+ lock->runcount++;
+ LeaveCriticalSection (&lock->lock);
+ return 0;
+}
+
+int
+glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ {
+ if (InterlockedIncrement (&lock->guard.started) == 0)
+ /* This thread is the first one to need this lock. Initialize it. */
+ glwthread_rwlock_init (lock);
+ else
+ {
+ /* Don't let lock->guard.started grow and wrap around. */
+ InterlockedDecrement (&lock->guard.started);
+ /* Yield the CPU while waiting for another thread to finish
+ initializing this lock. */
+ while (!lock->guard.done)
+ Sleep (0);
+ }
+ }
+ /* It's OK to wait for this critical section, because it is never taken for a
+ long time. */
+ EnterCriticalSection (&lock->lock);
+ /* Test whether no readers or writers are currently running. */
+ if (!(lock->runcount == 0))
+ {
+ /* This thread would have to wait for a while. Return instead. */
+ LeaveCriticalSection (&lock->lock);
+ return EBUSY;
+ }
+ lock->runcount--; /* runcount becomes -1 */
+ LeaveCriticalSection (&lock->lock);
+ return 0;
+}
+
+int
+glwthread_rwlock_unlock (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ return EINVAL;
+ EnterCriticalSection (&lock->lock);
+ if (lock->runcount < 0)
+ {
+ /* Drop a writer lock. */
+ if (!(lock->runcount == -1))
+ abort ();
+ lock->runcount = 0;
+ }
+ else
+ {
+ /* Drop a reader lock. */
+ if (!(lock->runcount > 0))
+ {
+ LeaveCriticalSection (&lock->lock);
+ return EPERM;
+ }
+ lock->runcount--;
+ }
+ if (lock->runcount == 0)
+ {
+ /* POSIX recommends that "write locks shall take precedence over read
+ locks", to avoid "writer starvation". */
+ if (lock->waiting_writers.count > 0)
+ {
+ /* Wake up one of the waiting writers. */
+ lock->runcount--;
+ glwthread_waitqueue_notify_first (&lock->waiting_writers);
+ }
+ else
+ {
+ /* Wake up all waiting readers. */
+ lock->runcount += lock->waiting_readers.count;
+ glwthread_waitqueue_notify_all (&lock->waiting_readers);
+ }
+ }
+ LeaveCriticalSection (&lock->lock);
+ return 0;
+}
+
+int
+glwthread_rwlock_destroy (glwthread_rwlock_t *lock)
+{
+ if (!lock->guard.done)
+ return EINVAL;
+ if (lock->runcount != 0)
+ return EBUSY;
+ DeleteCriticalSection (&lock->lock);
+ if (lock->waiting_readers.array != NULL)
+ free (lock->waiting_readers.array);
+ if (lock->waiting_writers.array != NULL)
+ free (lock->waiting_writers.array);
+ lock->guard.done = 0;
+ return 0;
+}
diff --git a/lib/windows-rwlock.h b/lib/windows-rwlock.h
new file mode 100644
index 0000000..fe8381e
--- /dev/null
+++ b/lib/windows-rwlock.h
@@ -0,0 +1,68 @@
+/* Read-write locks (native Windows implementation).
+ Copyright (C) 2005-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2005.
+ Based on GCC's gthr-win32.h. */
+
+#ifndef _WINDOWS_RWLOCK_H
+#define _WINDOWS_RWLOCK_H
+
+#define WIN32_LEAN_AND_MEAN /* avoid including junk */
+#include <windows.h>
+
+#include "windows-initguard.h"
+
+/* It is impossible to implement read-write locks using plain locks, without
+ introducing an extra thread dedicated to managing read-write locks.
+ Therefore here we need to use the low-level Event type. */
+
+typedef struct
+ {
+ HANDLE *array; /* array of waiting threads, each represented by an event */
+ unsigned int count; /* number of waiting threads */
+ unsigned int alloc; /* length of allocated array */
+ unsigned int offset; /* index of first waiting thread in array */
+ }
+ glwthread_carray_waitqueue_t;
+typedef struct
+ {
+ glwthread_initguard_t guard; /* protects the initialization */
+ CRITICAL_SECTION lock; /* protects the remaining fields */
+ glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */
+ glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */
+ int runcount; /* number of readers running, or -1 when a writer runs */
+ }
+ glwthread_rwlock_t;
+
+#define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT }
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void glwthread_rwlock_init (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock);
+extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS_RWLOCK_H */
diff --git a/lib/xalloc-die.c b/lib/xalloc-die.c
new file mode 100644
index 0000000..7605eee
--- /dev/null
+++ b/lib/xalloc-die.c
@@ -0,0 +1,41 @@
+/* Report a memory allocation failure and exit.
+
+ Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "xalloc.h"
+
+#include <stdlib.h>
+
+#include "error.h"
+#include "exitfail.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+void
+xalloc_die (void)
+{
+ error (exit_failure, 0, "%s", _("memory exhausted"));
+
+ /* _Noreturn cannot be given to error, since it may return if
+ its first argument is 0. To help compilers understand the
+ xalloc_die does not return, call abort. Also, the abort is a
+ safety feature if exit_failure is 0 (which shouldn't happen). */
+ abort ();
+}
diff --git a/lib/xalloc-oversized.h b/lib/xalloc-oversized.h
new file mode 100644
index 0000000..5dbdfb5
--- /dev/null
+++ b/lib/xalloc-oversized.h
@@ -0,0 +1,65 @@
+/* xalloc-oversized.h -- memory allocation size checking
+
+ Copyright (C) 1990-2000, 2003-2004, 2006-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation; either version 2.1 of the
+ License, or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef XALLOC_OVERSIZED_H_
+#define XALLOC_OVERSIZED_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+/* True if N * S does not fit into both ptrdiff_t and size_t.
+ N and S should be nonnegative and free of side effects.
+ This expands to a constant expression if N and S are both constants.
+ By gnulib convention, SIZE_MAX represents overflow in size_t
+ calculations, so the conservative size_t-based dividend to use here
+ is SIZE_MAX - 1. */
+#define __xalloc_oversized(n, s) \
+ ((s) != 0 \
+ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \
+ < (n)))
+
+/* Return 1 if and only if an array of N objects, each of size S,
+ cannot exist reliably because its total size in bytes would exceed
+ MIN (PTRDIFF_MAX, SIZE_MAX - 1).
+
+ N and S should be nonnegative and free of side effects.
+
+ Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can
+ misbehave if N and S are both narrower than ptrdiff_t and size_t,
+ and can be rewritten as (xalloc_oversized (N, S) ? NULL
+ : malloc (N * (size_t) S)).
+
+ This is a macro, not a function, so that it works even if an
+ argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */
+#if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX
+# define xalloc_oversized(n, s) \
+ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1)
+#elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \
+ && PTRDIFF_MAX < SIZE_MAX)
+# define xalloc_oversized(n, s) \
+ (__builtin_constant_p (n) && __builtin_constant_p (s) \
+ ? __xalloc_oversized (n, s) \
+ : ({ ptrdiff_t __xalloc_count; \
+ __builtin_mul_overflow (n, s, &__xalloc_count); }))
+
+/* Other compilers use integer division; this may be slower but is
+ more portable. */
+#else
+# define xalloc_oversized(n, s) __xalloc_oversized (n, s)
+#endif
+
+#endif /* !XALLOC_OVERSIZED_H_ */
diff --git a/lib/xalloc.h b/lib/xalloc.h
new file mode 100644
index 0000000..f373c2f
--- /dev/null
+++ b/lib/xalloc.h
@@ -0,0 +1,211 @@
+/* xalloc.h -- malloc with out-of-memory checking
+
+ Copyright (C) 1990-2000, 2003-2004, 2006-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef XALLOC_H_
+#define XALLOC_H_
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#if GNULIB_XALLOC
+# include "idx.h"
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef XALLOC_INLINE
+# define XALLOC_INLINE _GL_INLINE
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#if GNULIB_XALLOC_DIE
+
+/* This function is always triggered when memory is exhausted.
+ It must be defined by the application, either explicitly
+ or by using gnulib's xalloc-die module. This is the
+ function to call when one wants the program to die because of a
+ memory allocation failure. */
+/*extern*/ _Noreturn void xalloc_die (void);
+
+#endif /* GNULIB_XALLOC_DIE */
+
+#if GNULIB_XALLOC
+
+void *xmalloc (size_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *ximalloc (idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xinmalloc (idx_t n, idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xzalloc (size_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xizalloc (idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xcalloc (size_t n, size_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xicalloc (idx_t n, idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xrealloc (void *p, size_t s)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2));
+void *xirealloc (void *p, idx_t s)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xreallocarray (void *p, size_t n, size_t s)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3));
+void *xireallocarray (void *p, idx_t n, idx_t s)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s)
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *xmemdup (void const *p, size_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+void *ximemdup (void const *p, idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+char *ximemdup0 (void const *p, idx_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+char *xstrdup (char const *str)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+/* In the following macros, T must be an elementary or structure/union or
+ typedef'ed type, or a pointer to such a type. To apply one of the
+ following macros to a function pointer or array type, you need to typedef
+ it first and use the typedef name. */
+
+/* Allocate an object of type T dynamically, with error checking. */
+/* extern t *XMALLOC (typename t); */
+# define XMALLOC(t) ((t *) xmalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking. */
+/* extern t *XNMALLOC (size_t n, typename t); */
+# define XNMALLOC(n, t) \
+ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t))))
+
+/* Allocate an object of type T dynamically, with error checking,
+ and zero it. */
+/* extern t *XZALLOC (typename t); */
+# define XZALLOC(t) ((t *) xzalloc (sizeof (t)))
+
+/* Allocate memory for N elements of type T, with error checking,
+ and zero it. */
+/* extern t *XCALLOC (size_t n, typename t); */
+# define XCALLOC(n, t) \
+ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t))))
+
+
+/* Allocate an array of N objects, each with S bytes of memory,
+ dynamically, with error checking. S must be nonzero. */
+
+void *xnmalloc (size_t n, size_t s)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+/* FIXME: Deprecate this in favor of xreallocarray? */
+/* Change the size of an allocated block of memory P to an array of N
+ objects each of S bytes, with error checking. S must be nonzero. */
+
+XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s)
+ _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3));
+XALLOC_INLINE void *
+xnrealloc (void *p, size_t n, size_t s)
+{
+ return xreallocarray (p, n, s);
+}
+
+/* Return a pointer to a new buffer of N bytes. This is like xmalloc,
+ except it returns char *. */
+
+char *xcharalloc (size_t n)
+ _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE
+ _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL;
+
+#endif /* GNULIB_XALLOC */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#if GNULIB_XALLOC && defined __cplusplus
+
+/* C++ does not allow conversions from void * to other pointer types
+ without a cast. Use templates to work around the problem when
+ possible. */
+
+template <typename T> inline T *
+xrealloc (T *p, size_t s)
+{
+ return (T *) xrealloc ((void *) p, s);
+}
+
+template <typename T> inline T *
+xreallocarray (T *p, size_t n, size_t s)
+{
+ return (T *) xreallocarray ((void *) p, n, s);
+}
+
+/* FIXME: Deprecate this in favor of xreallocarray? */
+template <typename T> inline T *
+xnrealloc (T *p, size_t n, size_t s)
+{
+ return xreallocarray (p, n, s);
+}
+
+template <typename T> inline T *
+x2realloc (T *p, size_t *pn)
+{
+ return (T *) x2realloc ((void *) p, pn);
+}
+
+template <typename T> inline T *
+x2nrealloc (T *p, size_t *pn, size_t s)
+{
+ return (T *) x2nrealloc ((void *) p, pn, s);
+}
+
+template <typename T> inline T *
+xmemdup (T const *p, size_t s)
+{
+ return (T *) xmemdup ((void const *) p, s);
+}
+
+#endif /* GNULIB_XALLOC && C++ */
+
+
+_GL_INLINE_HEADER_END
+
+#endif /* !XALLOC_H_ */
diff --git a/lib/xmalloc.c b/lib/xmalloc.c
new file mode 100644
index 0000000..289cbd0
--- /dev/null
+++ b/lib/xmalloc.c
@@ -0,0 +1,340 @@
+/* xmalloc.c -- malloc with out of memory checking
+
+ Copyright (C) 1990-2000, 2002-2006, 2008-2023 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#define XALLOC_INLINE _GL_EXTERN_INLINE
+
+#include "xalloc.h"
+
+#include "ialloc.h"
+#include "minmax.h"
+
+#include <stdckdint.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+
+static void * _GL_ATTRIBUTE_PURE
+nonnull (void *p)
+{
+ if (!p)
+ xalloc_die ();
+ return p;
+}
+
+/* Allocate S bytes of memory dynamically, with error checking. */
+
+void *
+xmalloc (size_t s)
+{
+ return nonnull (malloc (s));
+}
+
+void *
+ximalloc (idx_t s)
+{
+ return nonnull (imalloc (s));
+}
+
+char *
+xcharalloc (size_t n)
+{
+ return XNMALLOC (n, char);
+}
+
+/* Change the size of an allocated block of memory P to S bytes,
+ with error checking. */
+
+void *
+xrealloc (void *p, size_t s)
+{
+ void *r = realloc (p, s);
+ if (!r && (!p || s))
+ xalloc_die ();
+ return r;
+}
+
+void *
+xirealloc (void *p, idx_t s)
+{
+ return nonnull (irealloc (p, s));
+}
+
+/* Change the size of an allocated block of memory P to an array of N
+ objects each of S bytes, with error checking. */
+
+void *
+xreallocarray (void *p, size_t n, size_t s)
+{
+ void *r = reallocarray (p, n, s);
+ if (!r && (!p || (n && s)))
+ xalloc_die ();
+ return r;
+}
+
+void *
+xireallocarray (void *p, idx_t n, idx_t s)
+{
+ return nonnull (ireallocarray (p, n, s));
+}
+
+/* Allocate an array of N objects, each with S bytes of memory,
+ dynamically, with error checking. S must be nonzero. */
+
+void *
+xnmalloc (size_t n, size_t s)
+{
+ return xreallocarray (NULL, n, s);
+}
+
+void *
+xinmalloc (idx_t n, idx_t s)
+{
+ return xireallocarray (NULL, n, s);
+}
+
+/* If P is null, allocate a block of at least *PS bytes; otherwise,
+ reallocate P so that it contains more than *PS bytes. *PS must be
+ nonzero unless P is null. Set *PS to the new block's size, and
+ return the pointer to the new block. *PS is never set to zero, and
+ the returned pointer is never null. */
+
+void *
+x2realloc (void *p, size_t *ps)
+{
+ return x2nrealloc (p, ps, 1);
+}
+
+/* If P is null, allocate a block of at least *PN such objects;
+ otherwise, reallocate P so that it contains more than *PN objects
+ each of S bytes. S must be nonzero. Set *PN to the new number of
+ objects, and return the pointer to the new block. *PN is never set
+ to zero, and the returned pointer is never null.
+
+ Repeated reallocations are guaranteed to make progress, either by
+ allocating an initial block with a nonzero size, or by allocating a
+ larger block.
+
+ In the following implementation, nonzero sizes are increased by a
+ factor of approximately 1.5 so that repeated reallocations have
+ O(N) overall cost rather than O(N**2) cost, but the
+ specification for this function does not guarantee that rate.
+
+ Here is an example of use:
+
+ int *p = NULL;
+ size_t used = 0;
+ size_t allocated = 0;
+
+ void
+ append_int (int value)
+ {
+ if (used == allocated)
+ p = x2nrealloc (p, &allocated, sizeof *p);
+ p[used++] = value;
+ }
+
+ This causes x2nrealloc to allocate a block of some nonzero size the
+ first time it is called.
+
+ To have finer-grained control over the initial size, set *PN to a
+ nonzero value before calling this function with P == NULL. For
+ example:
+
+ int *p = NULL;
+ size_t used = 0;
+ size_t allocated = 0;
+ size_t allocated1 = 1000;
+
+ void
+ append_int (int value)
+ {
+ if (used == allocated)
+ {
+ p = x2nrealloc (p, &allocated1, sizeof *p);
+ allocated = allocated1;
+ }
+ p[used++] = value;
+ }
+
+ */
+
+void *
+x2nrealloc (void *p, size_t *pn, size_t s)
+{
+ size_t n = *pn;
+
+ if (! p)
+ {
+ if (! n)
+ {
+ /* The approximate size to use for initial small allocation
+ requests, when the invoking code specifies an old size of
+ zero. This is the largest "small" request for the GNU C
+ library malloc. */
+ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
+
+ n = DEFAULT_MXFAST / s;
+ n += !n;
+ }
+ }
+ else
+ {
+ /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */
+ if (ckd_add (&n, n, (n >> 1) + 1))
+ xalloc_die ();
+ }
+
+ p = xreallocarray (p, n, s);
+ *pn = n;
+ return p;
+}
+
+/* Grow PA, which points to an array of *PN items, and return the
+ location of the reallocated array, updating *PN to reflect its
+ new size. The new array will contain at least N_INCR_MIN more
+ items, but will not contain more than N_MAX items total.
+ S is the size of each item, in bytes.
+
+ S and N_INCR_MIN must be positive. *PN must be
+ nonnegative. If N_MAX is -1, it is treated as if it were
+ infinity.
+
+ If PA is null, then allocate a new array instead of reallocating
+ the old one.
+
+ Thus, to grow an array A without saving its old contents, do
+ { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */
+
+void *
+xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s)
+{
+ idx_t n0 = *pn;
+
+ /* The approximate size to use for initial small allocation
+ requests. This is the largest "small" request for the GNU C
+ library malloc. */
+ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };
+
+ /* If the array is tiny, grow it to about (but no greater than)
+ DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%.
+ Adjust the growth according to three constraints: N_INCR_MIN,
+ N_MAX, and what the C language can represent safely. */
+
+ idx_t n;
+ if (ckd_add (&n, n0, n0 >> 1))
+ n = IDX_MAX;
+ if (0 <= n_max && n_max < n)
+ n = n_max;
+
+ /* NBYTES is of a type suitable for holding the count of bytes in an object.
+ This is typically idx_t, but it should be size_t on (theoretical?)
+ platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass
+ values greater than SIZE_MAX to xrealloc. */
+#if IDX_MAX <= SIZE_MAX
+ idx_t nbytes;
+#else
+ size_t nbytes;
+#endif
+ idx_t adjusted_nbytes
+ = (ckd_mul (&nbytes, n, s)
+ ? MIN (IDX_MAX, SIZE_MAX)
+ : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0);
+ if (adjusted_nbytes)
+ {
+ n = adjusted_nbytes / s;
+ nbytes = adjusted_nbytes - adjusted_nbytes % s;
+ }
+
+ if (! pa)
+ *pn = 0;
+ if (n - n0 < n_incr_min
+ && (ckd_add (&n, n0, n_incr_min)
+ || (0 <= n_max && n_max < n)
+ || ckd_mul (&nbytes, n, s)))
+ xalloc_die ();
+ pa = xrealloc (pa, nbytes);
+ *pn = n;
+ return pa;
+}
+
+/* Allocate S bytes of zeroed memory dynamically, with error checking.
+ There's no need for xnzalloc (N, S), since it would be equivalent
+ to xcalloc (N, S). */
+
+void *
+xzalloc (size_t s)
+{
+ return xcalloc (s, 1);
+}
+
+void *
+xizalloc (idx_t s)
+{
+ return xicalloc (s, 1);
+}
+
+/* Allocate zeroed memory for N elements of S bytes, with error
+ checking. S must be nonzero. */
+
+void *
+xcalloc (size_t n, size_t s)
+{
+ return nonnull (calloc (n, s));
+}
+
+void *
+xicalloc (idx_t n, idx_t s)
+{
+ return nonnull (icalloc (n, s));
+}
+
+/* Clone an object P of size S, with error checking. There's no need
+ for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any
+ need for an arithmetic overflow check. */
+
+void *
+xmemdup (void const *p, size_t s)
+{
+ return memcpy (xmalloc (s), p, s);
+}
+
+void *
+ximemdup (void const *p, idx_t s)
+{
+ return memcpy (ximalloc (s), p, s);
+}
+
+/* Clone an object P of size S, with error checking. Append
+ a terminating NUL byte. */
+
+char *
+ximemdup0 (void const *p, idx_t s)
+{
+ char *result = ximalloc (s + 1);
+ result[s] = 0;
+ return memcpy (result, p, s);
+}
+
+/* Clone STRING. */
+
+char *
+xstrdup (char const *string)
+{
+ return xmemdup (string, strlen (string) + 1);
+}
diff --git a/lib/xstrtol.c b/lib/xstrtol.c
new file mode 100644
index 0000000..9695b42
--- /dev/null
+++ b/lib/xstrtol.c
@@ -0,0 +1,246 @@
+/* A more useful interface to strtol.
+
+ Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+/* Written by Jim Meyering. */
+
+#ifndef __strtol
+# define __strtol strtol
+# define __strtol_t long int
+# define __xstrtol xstrtol
+# define STRTOL_T_MINIMUM LONG_MIN
+# define STRTOL_T_MAXIMUM LONG_MAX
+#endif
+
+#include <config.h>
+
+#include "xstrtol.h"
+
+/* Some pre-ANSI implementations (e.g. SunOS 4)
+ need stderr defined if assertion checking is enabled. */
+#include <stdio.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if XSTRTOL_INCLUDE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#include "assure.h"
+#include "intprops.h"
+
+static strtol_error
+bkm_scale (__strtol_t *x, int scale_factor)
+{
+ __strtol_t scaled;
+ if (INT_MULTIPLY_WRAPV (*x, scale_factor, &scaled))
+ {
+ *x = *x < 0 ? TYPE_MINIMUM (__strtol_t) : TYPE_MAXIMUM (__strtol_t);
+ return LONGINT_OVERFLOW;
+ }
+
+ *x = scaled;
+
+ return LONGINT_OK;
+}
+
+static strtol_error
+bkm_scale_by_power (__strtol_t *x, int base, int power)
+{
+ strtol_error err = LONGINT_OK;
+ while (power--)
+ err |= bkm_scale (x, base);
+ return err;
+}
+
+/* FIXME: comment. */
+
+strtol_error
+__xstrtol (const char *s, char **ptr, int strtol_base,
+ __strtol_t *val, const char *valid_suffixes)
+{
+ char *t_ptr;
+ char **p;
+ __strtol_t tmp;
+ strtol_error err = LONGINT_OK;
+
+ assure (0 <= strtol_base && strtol_base <= 36);
+
+ p = (ptr ? ptr : &t_ptr);
+
+ errno = 0;
+
+ if (! TYPE_SIGNED (__strtol_t))
+ {
+ const char *q = s;
+ unsigned char ch = *q;
+ while (isspace (ch))
+ ch = *++q;
+ if (ch == '-')
+ return LONGINT_INVALID;
+ }
+
+ tmp = __strtol (s, p, strtol_base);
+
+ if (*p == s)
+ {
+ /* If there is no number but there is a valid suffix, assume the
+ number is 1. The string is invalid otherwise. */
+ if (valid_suffixes && **p && strchr (valid_suffixes, **p))
+ tmp = 1;
+ else
+ return LONGINT_INVALID;
+ }
+ else if (errno != 0)
+ {
+ if (errno != ERANGE)
+ return LONGINT_INVALID;
+ err = LONGINT_OVERFLOW;
+ }
+
+ /* Let valid_suffixes == NULL mean "allow any suffix". */
+ /* FIXME: update all callers except the ones that allow suffixes
+ after the number, changing last parameter NULL to "". */
+ if (!valid_suffixes)
+ {
+ *val = tmp;
+ return err;
+ }
+
+ if (**p != '\0')
+ {
+ int base = 1024;
+ int suffixes = 1;
+ strtol_error overflow;
+
+ if (!strchr (valid_suffixes, **p))
+ {
+ *val = tmp;
+ return err | LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ switch (**p)
+ {
+ case 'E': case 'G': case 'g': case 'k': case 'K': case 'M': case 'm':
+ case 'P': case 'Q': case 'R': case 'T': case 't': case 'Y': case 'Z':
+
+ /* The "valid suffix" '0' is a special flag meaning that
+ an optional second suffix is allowed, which can change
+ the base. A suffix "B" (e.g. "100MB") stands for a power
+ of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for
+ a power of 1024. If no suffix (e.g. "100M"), assume
+ power-of-1024. */
+
+ if (strchr (valid_suffixes, '0'))
+ switch (p[0][1])
+ {
+ case 'i':
+ if (p[0][2] == 'B')
+ suffixes += 2;
+ break;
+
+ case 'B':
+ case 'D': /* 'D' is obsolescent */
+ base = 1000;
+ suffixes++;
+ break;
+ }
+ }
+
+ switch (**p)
+ {
+ case 'b':
+ overflow = bkm_scale (&tmp, 512);
+ break;
+
+ case 'B':
+ /* This obsolescent first suffix is distinct from the 'B'
+ second suffix above. E.g., 'tar -L 1000B' means change
+ the tape after writing 1000 KiB of data. */
+ overflow = bkm_scale (&tmp, 1024);
+ break;
+
+ case 'c':
+ overflow = LONGINT_OK;
+ break;
+
+ case 'E': /* exa or exbi */
+ overflow = bkm_scale_by_power (&tmp, base, 6);
+ break;
+
+ case 'G': /* giga or gibi */
+ case 'g': /* 'g' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 3);
+ break;
+
+ case 'k': /* kilo */
+ case 'K': /* kibi */
+ overflow = bkm_scale_by_power (&tmp, base, 1);
+ break;
+
+ case 'M': /* mega or mebi */
+ case 'm': /* 'm' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 2);
+ break;
+
+ case 'P': /* peta or pebi */
+ overflow = bkm_scale_by_power (&tmp, base, 5);
+ break;
+
+ case 'Q': /* quetta or 2**100 */
+ overflow = bkm_scale_by_power (&tmp, base, 10);
+ break;
+
+ case 'R': /* ronna or 2**90 */
+ overflow = bkm_scale_by_power (&tmp, base, 9);
+ break;
+
+ case 'T': /* tera or tebi */
+ case 't': /* 't' is undocumented; for compatibility only */
+ overflow = bkm_scale_by_power (&tmp, base, 4);
+ break;
+
+ case 'w':
+ overflow = bkm_scale (&tmp, 2);
+ break;
+
+ case 'Y': /* yotta or 2**80 */
+ overflow = bkm_scale_by_power (&tmp, base, 8);
+ break;
+
+ case 'Z': /* zetta or 2**70 */
+ overflow = bkm_scale_by_power (&tmp, base, 7);
+ break;
+
+ default:
+ *val = tmp;
+ return err | LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ err |= overflow;
+ *p += suffixes;
+ if (**p)
+ err |= LONGINT_INVALID_SUFFIX_CHAR;
+ }
+
+ *val = tmp;
+ return err;
+}
diff --git a/lib/xstrtol.h b/lib/xstrtol.h
new file mode 100644
index 0000000..f70119a
--- /dev/null
+++ b/lib/xstrtol.h
@@ -0,0 +1,51 @@
+/* A more useful interface to strtol.
+
+ Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#ifndef XSTRTOL_H_
+# define XSTRTOL_H_ 1
+
+/* Get intmax_t, uintmax_t. */
+# include <stdint.h>
+
+# ifndef _STRTOL_ERROR
+enum strtol_error
+ {
+ LONGINT_OK = 0,
+
+ /* These two values can be ORed together, to indicate that both
+ errors occurred. */
+ LONGINT_OVERFLOW = 1,
+ LONGINT_INVALID_SUFFIX_CHAR = 2,
+
+ LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW = (LONGINT_INVALID_SUFFIX_CHAR
+ | LONGINT_OVERFLOW),
+ LONGINT_INVALID = 4
+ };
+typedef enum strtol_error strtol_error;
+# endif
+
+# define _DECLARE_XSTRTOL(name, type) \
+ strtol_error name (const char *, char **, int, type *, const char *);
+_DECLARE_XSTRTOL (xstrtol, long int)
+_DECLARE_XSTRTOL (xstrtoul, unsigned long int)
+_DECLARE_XSTRTOL (xstrtoll, long long int)
+_DECLARE_XSTRTOL (xstrtoull, unsigned long long int)
+_DECLARE_XSTRTOL (xstrtoimax, intmax_t)
+_DECLARE_XSTRTOL (xstrtoumax, uintmax_t)
+
+#endif /* not XSTRTOL_H_ */
diff --git a/lib/xstrtoll.c b/lib/xstrtoll.c
new file mode 100644
index 0000000..2127c9d
--- /dev/null
+++ b/lib/xstrtoll.c
@@ -0,0 +1,23 @@
+/* Convert string to 'long long', with error checking.
+
+ Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define __strtol strtoll
+#define __strtol_t long long int
+#define __xstrtol xstrtoll
+#define STRTOL_T_MINIMUM LLONG_MIN
+#define STRTOL_T_MAXIMUM LLONG_MAX
+#include "xstrtol.c"
diff --git a/lib/xstrtoul.c b/lib/xstrtoul.c
new file mode 100644
index 0000000..33c38d4
--- /dev/null
+++ b/lib/xstrtoul.c
@@ -0,0 +1,23 @@
+/* Convert string to 'unsigned long', with error checking.
+
+ Copyright (C) 1994-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define __strtol strtoul
+#define __strtol_t unsigned long int
+#define __xstrtol xstrtoul
+#define STRTOL_T_MINIMUM 0
+#define STRTOL_T_MAXIMUM ULONG_MAX
+#include "xstrtol.c"
diff --git a/lib/xstrtoull.c b/lib/xstrtoull.c
new file mode 100644
index 0000000..543e30a
--- /dev/null
+++ b/lib/xstrtoull.c
@@ -0,0 +1,23 @@
+/* Convert string to 'unsigned long long', with error checking.
+
+ Copyright (C) 2010-2023 Free Software Foundation, Inc.
+
+ This file is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation, either version 3 of the License,
+ or (at your option) any later version.
+
+ This file is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
+
+#define __strtol strtoull
+#define __strtol_t unsigned long long int
+#define __xstrtol xstrtoull
+#define STRTOL_T_MINIMUM 0
+#define STRTOL_T_MAXIMUM ULLONG_MAX
+#include "xstrtol.c"
diff --git a/libparted-fs-resize.pc.in b/libparted-fs-resize.pc.in
new file mode 100644
index 0000000..ed9b3d6
--- /dev/null
+++ b/libparted-fs-resize.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libparted-fs-resize
+Description: The GNU Parted filesystem resize shared library
+Version: @VERSION@
+Libs: -L${libdir} -lparted-fs-resize
+Cflags: -I${includedir}
diff --git a/libparted.pc.in b/libparted.pc.in
new file mode 100644
index 0000000..3603926
--- /dev/null
+++ b/libparted.pc.in
@@ -0,0 +1,10 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libparted
+Description: The GNU Parted disk partitioning shared library
+Version: @VERSION@
+Libs: -L${libdir} -lparted
+Cflags: -I${includedir}
diff --git a/libparted/Makefile.am b/libparted/Makefile.am
new file mode 100644
index 0000000..db29a18
--- /dev/null
+++ b/libparted/Makefile.am
@@ -0,0 +1,65 @@
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+# Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+SUBDIRS_CHECK =
+if HAVE_CHECK
+SUBDIRS_CHECK += tests
+endif
+
+ARCH_SOURCE = arch/$(OS).c
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+
+SUBDIRS = labels fs . $(SUBDIRS_CHECK)
+
+
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+lib_LTLIBRARIES = libparted.la
+
+# Set the shared library version, per Libtool's guidelines.
+# For details, see the "Updating library version information" section of
+# "info libtool".
+CURRENT = 2
+REVISION = 5
+AGE = 0
+
+libparted_la_LDFLAGS = -version-info $(CURRENT):$(REVISION):$(AGE)
+
+libparted_la_SOURCES = debug.c \
+ architecture.c \
+ architecture.h \
+ device.c \
+ exception.c \
+ filesys.c \
+ libparted.c \
+ timer.c \
+ unit.c \
+ disk.c \
+ cs/geom.c \
+ cs/constraint.c \
+ cs/natmath.c \
+ $(ARCH_SOURCE)
+
+
+EXTRA_libparted_la_SOURCES = arch/linux.c \
+ arch/linux.h \
+ arch/gnu.c \
+ arch/beos.c
+
+libparted_la_LIBADD = \
+ fs/libfs.la \
+ labels/liblabels.la \
+ $(top_builddir)/lib/libgnulib.la \
+ $(OS_LIBS) \
+ $(DM_LIBS) \
+ $(LIB_BLKID) \
+ $(UUID_LIBS) \
+ $(INTLLIBS)
+
+EXTRA_DIST = mbr.s
+
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
diff --git a/libparted/Makefile.in b/libparted/Makefile.in
new file mode 100644
index 0000000..3708494
--- /dev/null
+++ b/libparted/Makefile.in
@@ -0,0 +1,2265 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+# Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+@HAVE_CHECK_TRUE@am__append_1 = tests
+subdir = libparted
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libparted_la_DEPENDENCIES = fs/libfs.la labels/liblabels.la \
+ $(top_builddir)/lib/libgnulib.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__dirstamp = $(am__leading_dot)dirstamp
+am__objects_1 = arch/$(OS).lo
+am_libparted_la_OBJECTS = debug.lo architecture.lo device.lo \
+ exception.lo filesys.lo libparted.lo timer.lo unit.lo disk.lo \
+ cs/geom.lo cs/constraint.lo cs/natmath.lo $(am__objects_1)
+libparted_la_OBJECTS = $(am_libparted_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libparted_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libparted_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/architecture.Plo \
+ ./$(DEPDIR)/debug.Plo ./$(DEPDIR)/device.Plo \
+ ./$(DEPDIR)/disk.Plo ./$(DEPDIR)/exception.Plo \
+ ./$(DEPDIR)/filesys.Plo ./$(DEPDIR)/libparted.Plo \
+ ./$(DEPDIR)/timer.Plo ./$(DEPDIR)/unit.Plo \
+ arch/$(DEPDIR)/$(OS).Plo arch/$(DEPDIR)/beos.Plo \
+ arch/$(DEPDIR)/gnu.Plo arch/$(DEPDIR)/linux.Plo \
+ cs/$(DEPDIR)/constraint.Plo cs/$(DEPDIR)/geom.Plo \
+ cs/$(DEPDIR)/natmath.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libparted_la_SOURCES) $(EXTRA_libparted_la_SOURCES)
+DIST_SOURCES = $(libparted_la_SOURCES) $(EXTRA_libparted_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ distdir distdir-am
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+DIST_SUBDIRS = labels fs . tests
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS_CHECK = $(am__append_1)
+ARCH_SOURCE = arch/$(OS).c
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+SUBDIRS = labels fs . $(SUBDIRS_CHECK)
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+
+lib_LTLIBRARIES = libparted.la
+
+# Set the shared library version, per Libtool's guidelines.
+# For details, see the "Updating library version information" section of
+# "info libtool".
+CURRENT = 2
+REVISION = 5
+AGE = 0
+libparted_la_LDFLAGS = -version-info $(CURRENT):$(REVISION):$(AGE)
+libparted_la_SOURCES = debug.c \
+ architecture.c \
+ architecture.h \
+ device.c \
+ exception.c \
+ filesys.c \
+ libparted.c \
+ timer.c \
+ unit.c \
+ disk.c \
+ cs/geom.c \
+ cs/constraint.c \
+ cs/natmath.c \
+ $(ARCH_SOURCE)
+
+EXTRA_libparted_la_SOURCES = arch/linux.c \
+ arch/linux.h \
+ arch/gnu.c \
+ arch/beos.c
+
+libparted_la_LIBADD = \
+ fs/libfs.la \
+ labels/liblabels.la \
+ $(top_builddir)/lib/libgnulib.la \
+ $(OS_LIBS) \
+ $(DM_LIBS) \
+ $(LIB_BLKID) \
+ $(UUID_LIBS) \
+ $(INTLLIBS)
+
+EXTRA_DIST = mbr.s
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libparted/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libparted/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+cs/$(am__dirstamp):
+ @$(MKDIR_P) cs
+ @: > cs/$(am__dirstamp)
+cs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) cs/$(DEPDIR)
+ @: > cs/$(DEPDIR)/$(am__dirstamp)
+cs/geom.lo: cs/$(am__dirstamp) cs/$(DEPDIR)/$(am__dirstamp)
+cs/constraint.lo: cs/$(am__dirstamp) cs/$(DEPDIR)/$(am__dirstamp)
+cs/natmath.lo: cs/$(am__dirstamp) cs/$(DEPDIR)/$(am__dirstamp)
+arch/$(am__dirstamp):
+ @$(MKDIR_P) arch
+ @: > arch/$(am__dirstamp)
+arch/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) arch/$(DEPDIR)
+ @: > arch/$(DEPDIR)/$(am__dirstamp)
+arch/$(OS).lo: arch/$(am__dirstamp) arch/$(DEPDIR)/$(am__dirstamp)
+arch/linux.lo: arch/$(am__dirstamp) arch/$(DEPDIR)/$(am__dirstamp)
+arch/gnu.lo: arch/$(am__dirstamp) arch/$(DEPDIR)/$(am__dirstamp)
+arch/beos.lo: arch/$(am__dirstamp) arch/$(DEPDIR)/$(am__dirstamp)
+
+libparted.la: $(libparted_la_OBJECTS) $(libparted_la_DEPENDENCIES) $(EXTRA_libparted_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libparted_la_LINK) -rpath $(libdir) $(libparted_la_OBJECTS) $(libparted_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f arch/*.$(OBJEXT)
+ -rm -f arch/*.lo
+ -rm -f cs/*.$(OBJEXT)
+ -rm -f cs/*.lo
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/architecture.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/device.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filesys.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libparted.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arch/$(DEPDIR)/$(OS).Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arch/$(DEPDIR)/beos.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arch/$(DEPDIR)/gnu.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@arch/$(DEPDIR)/linux.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@cs/$(DEPDIR)/constraint.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@cs/$(DEPDIR)/geom.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@cs/$(DEPDIR)/natmath.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+ -rm -rf arch/.libs arch/_libs
+ -rm -rf cs/.libs cs/_libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(libdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f arch/$(DEPDIR)/$(am__dirstamp)
+ -rm -f arch/$(am__dirstamp)
+ -rm -f cs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f cs/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f ./$(DEPDIR)/architecture.Plo
+ -rm -f ./$(DEPDIR)/debug.Plo
+ -rm -f ./$(DEPDIR)/device.Plo
+ -rm -f ./$(DEPDIR)/disk.Plo
+ -rm -f ./$(DEPDIR)/exception.Plo
+ -rm -f ./$(DEPDIR)/filesys.Plo
+ -rm -f ./$(DEPDIR)/libparted.Plo
+ -rm -f ./$(DEPDIR)/timer.Plo
+ -rm -f ./$(DEPDIR)/unit.Plo
+ -rm -f arch/$(DEPDIR)/$(OS).Plo
+ -rm -f arch/$(DEPDIR)/beos.Plo
+ -rm -f arch/$(DEPDIR)/gnu.Plo
+ -rm -f arch/$(DEPDIR)/linux.Plo
+ -rm -f cs/$(DEPDIR)/constraint.Plo
+ -rm -f cs/$(DEPDIR)/geom.Plo
+ -rm -f cs/$(DEPDIR)/natmath.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f ./$(DEPDIR)/architecture.Plo
+ -rm -f ./$(DEPDIR)/debug.Plo
+ -rm -f ./$(DEPDIR)/device.Plo
+ -rm -f ./$(DEPDIR)/disk.Plo
+ -rm -f ./$(DEPDIR)/exception.Plo
+ -rm -f ./$(DEPDIR)/filesys.Plo
+ -rm -f ./$(DEPDIR)/libparted.Plo
+ -rm -f ./$(DEPDIR)/timer.Plo
+ -rm -f ./$(DEPDIR)/unit.Plo
+ -rm -f arch/$(DEPDIR)/$(OS).Plo
+ -rm -f arch/$(DEPDIR)/beos.Plo
+ -rm -f arch/$(DEPDIR)/gnu.Plo
+ -rm -f arch/$(DEPDIR)/linux.Plo
+ -rm -f cs/$(DEPDIR)/constraint.Plo
+ -rm -f cs/$(DEPDIR)/geom.Plo
+ -rm -f cs/$(DEPDIR)/natmath.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--depfiles check check-am clean clean-generic \
+ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
+ ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-libLTLIBRARIES install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs installdirs-am \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
+ uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libparted/arch/beos.c b/libparted/arch/beos.c
new file mode 100644
index 0000000..df14b99
--- /dev/null
+++ b/libparted/arch/beos.c
@@ -0,0 +1,649 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2006-2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+/* POSIX headers */
+#include <sys/stat.h>
+#include <dirent.h>
+#include <limits.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/* BeOS APIs */
+#include <drivers/Drivers.h>
+
+/* ZETA R1+ APIs */
+#if B_ZETA_VERSION >= B_ZETA_VERSION_1_0_0
+# include <device/ata_info.h>
+#endif
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "../architecture.h"
+
+#define BEOS_SPECIFIC(dev) ((BEOSSpecific*) (dev)->arch_specific)
+
+typedef struct _BEOSSpecific BEOSSpecific;
+
+struct _BEOSSpecific {
+ int fd;
+};
+
+static void
+_scan_for_disks(const char* path)
+{
+ char subdir[PATH_MAX];
+ dirent_t* entp;
+ size_t pos;
+ DIR* dirp;
+
+ if ((dirp=opendir(path)) != NULL)
+ {
+ /* Build first part of path */
+ strcpy(subdir, path);
+ strcat(subdir, "/");
+ pos = strlen(subdir);
+
+ /* Check all directory entries.. */
+ while((entp=readdir(dirp)) != NULL)
+ {
+ /* If they start with '.' just skip */
+ if (entp->d_name[0] == '.')
+ continue;
+
+ strcpy(subdir+pos, entp->d_name);
+
+ /* /dev/disk/.../raw are the complete disks
+ we're interested in */
+ if (strcmp(entp->d_name, "raw") == 0)
+ _ped_device_probe(subdir);
+ else /* If not 'raw', it most often will
+ be another subdir */
+ _scan_for_disks(subdir);
+ }
+
+ closedir(dirp);
+ }
+}
+
+static void
+_flush_cache(PedDevice* dev)
+{
+ int fd;
+ if ((fd=open(dev->path, O_RDONLY)) < 0)
+ {
+ ioctl(fd, B_FLUSH_DRIVE_CACHE);
+ close(fd);
+ }
+}
+
+#if B_ZETA_VERSION >= B_ZETA_VERSION_1_0_0
+static int
+_device_init_ata(PedDevice* dev)
+{
+ ata_device_infoblock ide_info;
+ int maxlen, len, idx, fd;
+ char buf[256];
+
+ /* Try and get information about device from ATA(PI) driver */
+ if ((fd=open(dev->path, O_RDONLY)) < 0)
+ goto ata_error;
+
+ if (ioctl(fd, B_ATA_GET_DEVICE_INFO, &ide_info, sizeof(ide_info)) < 0)
+ goto ata_error_close;
+
+ close(fd);
+
+ /* Copy 'logical' dimensions */
+ dev->bios_geom.cylinders = ide_info.cylinders;
+ dev->bios_geom.heads = ide_info.heads;
+ dev->bios_geom.sectors = ide_info.sectors;
+
+ /* Copy used dimensions */
+ dev->hw_geom.cylinders = ide_info.current_cylinders;
+ dev->hw_geom.heads = ide_info.current_heads;
+ dev->hw_geom.sectors = ide_info.current_sectors;
+
+ /* Copy total number of sectors */
+ if (ide_info._48_bit_addresses_supported)
+ dev->length = ide_info.LBA48_total_sectors;
+ else if (ide_info.LBA_supported)
+ dev->length = ide_info.LBA_total_sectors;
+ else
+ dev->length = ide_info.cylinders *
+ ide_info.heads *
+ ide_info.sectors;
+
+ dev->sector_size =
+ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
+
+ /* Use sensible model */
+ maxlen=sizeof(ide_info.model_number);
+ strncpy(buf, ide_info.model_number, maxlen);
+ buf[maxlen] = '\0';
+
+ for (len=-1, idx=maxlen-1; idx > 0 && len < 0; idx--)
+ if (buf[idx] > 0x20)
+ len = idx;
+
+ buf[(len == -1) ? 0 : len+1] = '\0';
+
+ dev->model = strdup(buf);
+
+ return PED_DEVICE_IDE;
+
+ata_error_close:
+ close(fd);
+
+ata_error:
+ return 0;
+}
+#endif
+
+static int
+_device_init_generic_blkdev(PedDevice* dev)
+{
+ device_geometry bios, os;
+ int got_bios_info = 0;
+ int fd;
+
+ /* Try and get information about device from ATA(PI) driver */
+ if ((fd=open(dev->path, O_RDONLY)) < 0)
+ goto blkdev_error;
+
+ /* B_GET_GEOMETRY is mandatory */
+ if (ioctl(fd, B_GET_GEOMETRY, &os, sizeof(os)) < 0)
+ goto blkdev_error_close;
+
+ /* B_GET_BIOS_GEOMETRY is optional */
+ if (!ioctl(fd, B_GET_BIOS_GEOMETRY, &bios, sizeof(bios)))
+ got_bios_info = 1;
+
+ close(fd);
+
+ dev->hw_geom.cylinders = os.cylinder_count;
+ dev->hw_geom.heads = os.head_count;
+ dev->hw_geom.sectors = os.sectors_per_track;
+
+ dev->sector_size =
+ dev->phys_sector_size = os.bytes_per_sector;
+
+ if (got_bios_info)
+ {
+ dev->bios_geom.cylinders = bios.cylinder_count;
+ dev->bios_geom.heads = bios.head_count;
+ dev->bios_geom.sectors = bios.sectors_per_track;
+ }
+ else
+ dev->bios_geom = dev->hw_geom;
+
+ dev->model = strdup("");
+
+ return PED_DEVICE_IDE;
+
+blkdev_error_close:
+ close(fd);
+
+blkdev_error:
+ return 0;
+}
+
+static int
+_device_init_blkdev(PedDevice* dev)
+{
+ int type;
+
+#if B_ZETA_VERSION >= B_ZETA_VERSION_1_0_0
+ if (!(type=_device_init_ata(dev)))
+#endif
+ type = _device_init_generic_blkdev(dev);
+
+ return type;
+}
+
+static int
+_device_init_file(PedDevice* dev, struct stat* dev_statp)
+{
+ if (!dev_statp->st_size)
+ return 0;
+
+ dev->sector_size =
+ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
+
+ dev->length = dev_statp->st_size / PED_SECTOR_SIZE_DEFAULT;
+
+ dev->bios_geom.cylinders = dev->length / (4 * 32);
+ dev->bios_geom.heads = 4;
+ dev->bios_geom.sectors = 32;
+ dev->hw_geom = dev->bios_geom;
+
+ dev->model = strdup(_("Disk Image"));
+
+ return PED_DEVICE_FILE;
+}
+
+static int
+_device_init(PedDevice* dev)
+{
+ struct stat dev_stat;
+ int type = 0;
+
+ /* Check if we're a regular file */
+ if (stat(dev->path, &dev_stat) < 0)
+ goto done;
+
+ if (S_ISBLK(dev_stat.st_mode) || S_ISCHR(dev_stat.st_mode))
+ type = _device_init_blkdev(dev);
+ else if (S_ISREG(dev_stat.st_mode))
+ type = _device_init_file(dev,&dev_stat);
+
+done:
+ return type;
+}
+
+
+static PedDevice*
+beos_new (const char* path)
+{
+ struct stat stat_info;
+ PedDevice* dev;
+
+ PED_ASSERT(path != NULL);
+
+ dev = (PedDevice*) ped_malloc (sizeof (PedDevice));
+ if (!dev)
+ goto error;
+
+ dev->path = strdup(path);
+ if (!dev->path)
+ goto error_free_dev;
+
+ dev->arch_specific
+ = (BEOSSpecific*) ped_malloc(sizeof(BEOSSpecific));
+ if (dev->arch_specific == NULL)
+ goto error_free_path;
+
+ dev->open_count = 0;
+ dev->read_only = 0;
+ dev->external_mode = 0;
+ dev->dirty = 0;
+ dev->boot_dirty = 0;
+
+ if ((dev->type=_device_init(dev)) <= 0)
+ goto error_free_arch_specific;
+
+ /* All OK! */
+ return dev;
+
+error_free_arch_specific:
+ free (dev->arch_specific);
+
+error_free_path:
+ free (dev->path);
+
+error_free_dev:
+ free (dev);
+
+error:
+ return NULL;
+}
+
+static void
+beos_destroy (PedDevice* dev)
+{
+ free (dev->arch_specific);
+ free (dev->path);
+ free (dev->model);
+ free (dev);
+}
+
+static int
+beos_is_busy (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+beos_open (PedDevice* dev)
+{
+ BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
+
+retry:
+ arch_specific->fd = open(dev->path, O_RDWR);
+ if (arch_specific->fd == -1) {
+ char* rw_error_msg = strerror(errno);
+
+ arch_specific->fd = open (dev->path, O_RDONLY);
+ if (arch_specific->fd == -1) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Error opening %s: %s"),
+ dev->path, strerror (errno))
+ != PED_EXCEPTION_RETRY) {
+ return 0;
+ } else {
+ goto retry;
+ }
+ } else {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Unable to open %s read-write (%s). %s has "
+ "been opened read-only."),
+ dev->path, rw_error_msg, dev->path);
+ dev->read_only = 1;
+ }
+ } else {
+ dev->read_only = 0;
+ }
+
+ _flush_cache (dev);
+
+ return 1;
+}
+
+static int
+beos_refresh_open (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+beos_close (PedDevice* dev)
+{
+ BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
+
+ if (dev->dirty)
+ _flush_cache (dev);
+
+ close (arch_specific->fd);
+
+ return 1;
+}
+
+static int
+beos_refresh_close (PedDevice* dev)
+{
+ if (dev->dirty)
+ _flush_cache (dev);
+
+ return 1;
+}
+
+static int
+beos_read (const PedDevice* dev, void* buffer, PedSector start, PedSector count)
+{
+ BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
+ int status;
+ PedExceptionOption ex_status;
+ size_t read_length = count * dev->sector_size;
+
+ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ /* First, try to seek */
+ while(1)
+ {
+ if (lseek(arch_specific->fd, start * dev->sector_size, SEEK_SET)
+ == start * dev->sector_size)
+ break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during seek for read on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status)
+ {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+ case PED_EXCEPTION_RETRY:
+ break /* out of switch */;
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ /* If we seeked ok, now is the time to read */
+ while (1)
+ {
+ status = read(arch_specific->fd, buffer, read_length);
+ if (status == count * dev->sector_size)
+ break;
+
+ if (status > 0)
+ {
+ read_length -= status;
+ buffer += status;
+ continue;
+ }
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during read on %s"),
+ strerror (errno),
+ dev->path);
+
+ switch (ex_status)
+ {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+ case PED_EXCEPTION_RETRY:
+ break;
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+beos_write (PedDevice* dev, const void* buffer, PedSector start,
+ PedSector count)
+{
+ BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
+ int status;
+ PedExceptionOption ex_status;
+ size_t write_length = count * dev->sector_size;
+
+ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ if (dev->read_only)
+ {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't write to %s, because it is opened read-only."),
+ dev->path)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ else
+ return 1;
+ }
+
+ while(1)
+ {
+ if (lseek(arch_specific->fd,start * dev->sector_size,SEEK_SET)
+ == start * dev->sector_size)
+ break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during seek for write on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status)
+ {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+ case PED_EXCEPTION_RETRY:
+ break;
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+#ifdef READ_ONLY
+ printf ("ped_device_write (\"%s\", %p, %d, %d)\n",
+ dev->path, buffer, (int) start, (int) count);
+#else
+ dev->dirty = 1;
+ while(1)
+ {
+ status = write (arch_specific->fd, buffer, write_length);
+ if (status == count * dev->sector_size)
+ break;
+
+ if (status > 0)
+ {
+ write_length -= status;
+ buffer += status;
+ continue;
+ }
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status)
+ {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+ case PED_EXCEPTION_RETRY:
+ break;
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+#endif /* !READ_ONLY */
+
+ return 1;
+}
+
+static PedSector
+beos_check (PedDevice* dev, void* buffer, PedSector start, PedSector count)
+{
+ BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
+ PedSector done = 0;
+ int status;
+
+ PED_ASSERT(dev != NULL);
+
+ if (lseek(arch_specific->fd, start * dev->sector_size, SEEK_SET)
+ != start * dev->sector_size)
+ return 0;
+
+ for (done = 0; done < count; done += status / dev->sector_size)
+ {
+ status = read (arch_specific->fd, buffer,
+ (size_t) ((count-done) * dev->sector_size));
+ if (status < 0)
+ break;
+ }
+
+ return done;
+}
+
+static int
+beos_sync (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+beos_sync_fast (PedDevice* dev)
+{
+ return 1;
+}
+
+/* Probe for all available disks */
+static void
+beos_probe_all ()
+{
+ /* For BeOS/ZETA/Haiku, all disks are published under /dev/disk */
+ _scan_for_disks("/dev/disk");
+}
+
+static char*
+beos_partition_get_path (const PedPartition* part)
+{
+ return NULL;
+}
+
+static int
+beos_partition_is_busy (const PedPartition* part)
+{
+ return 0;
+}
+
+static int
+beos_disk_commit (PedDisk* disk)
+{
+ return 0;
+}
+
+static PedDeviceArchOps beos_dev_ops = {
+ _new: beos_new,
+ destroy: beos_destroy,
+ is_busy: beos_is_busy,
+ open: beos_open,
+ refresh_open: beos_refresh_open,
+ close: beos_close,
+ refresh_close: beos_refresh_close,
+ read: beos_read,
+ write: beos_write,
+ check: beos_check,
+ sync: beos_sync,
+ sync_fast: beos_sync_fast,
+ probe_all: beos_probe_all
+};
+
+static PedDiskArchOps beos_disk_ops = {
+ partition_get_path: beos_partition_get_path,
+ partition_is_busy: beos_partition_is_busy,
+ disk_commit: beos_disk_commit
+};
+
+PedArchitecture ped_beos_arch = {
+ dev_ops: &beos_dev_ops,
+ disk_ops: &beos_disk_ops
+};
diff --git a/libparted/arch/gnu.c b/libparted/arch/gnu.c
new file mode 100644
index 0000000..b2f0428
--- /dev/null
+++ b/libparted/arch/gnu.c
@@ -0,0 +1,930 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include <errno.h>
+#include <hurd.h>
+#include <hurd/fs.h>
+#include <hurd/store.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "../architecture.h"
+
+#define GNU_SPECIFIC(dev) ((GNUSpecific*) (dev)->arch_specific)
+
+typedef struct _GNUSpecific GNUSpecific;
+
+struct _GNUSpecific {
+ struct store* store;
+ int consume;
+};
+
+/* Initialize a PedDevice using SOURCE. The SOURCE will NOT be destroyed;
+ the caller created it, it is the caller's responsilbility to free it
+ after it calls ped_device_destory. SOURCE is not registered in Parted's
+ list of devices. */
+PedDevice* ped_device_new_from_store (struct store *source);
+
+static int
+_device_get_sector_size (PedDevice* dev)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+ size_t store_block_size = arch_specific->store->block_size;
+
+ return PED_SECTOR_SIZE_DEFAULT;
+}
+
+static PedSector
+_device_get_length (PedDevice* dev)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+ size_t store_blocks = arch_specific->store->blocks;
+ size_t store_block_size = arch_specific->store->block_size;
+
+ return ((long long) store_blocks * store_block_size) / PED_SECTOR_SIZE_DEFAULT;
+}
+
+static int
+_device_probe_geometry (PedDevice* dev)
+{
+ PedSector cyl_size;
+
+ dev->length = _device_get_length (dev);
+ if (!dev->length)
+ return 0;
+
+ dev->sector_size = _device_get_sector_size (dev);
+ if (!dev->sector_size)
+ return 0;
+
+ /* XXX: We have no way to get this! */
+ dev->bios_geom.sectors = 63;
+ dev->bios_geom.heads = 255;
+ cyl_size = dev->bios_geom.sectors * dev->bios_geom.heads;
+ dev->bios_geom.cylinders = dev->length / cyl_size
+ * (dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
+ dev->hw_geom = dev->bios_geom;
+
+ return 1;
+}
+
+static int
+init_file (PedDevice* dev)
+{
+ PedExceptionOption ex_status;
+
+retry_open:
+ if (!ped_device_open (dev)) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Unable to open %s."),
+ dev->path);
+ switch (ex_status) {
+ case PED_EXCEPTION_RETRY:
+ goto retry_open;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ goto error;
+ }
+
+ return 0;
+ }
+
+retry_probe:
+ if (!_device_probe_geometry (dev)) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Unable to probe store."));
+ switch (ex_status) {
+ case PED_EXCEPTION_RETRY:
+ goto retry_probe;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ goto error_close_dev;
+ }
+
+ return 0;
+ }
+
+ dev->model = "";
+
+ ped_device_close (dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (dev);
+error:
+ return 0;
+}
+
+static void
+_flush_cache (PedDevice* dev)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+
+ if (dev->read_only)
+ return;
+
+ /* Wait for a complete sync to finish. */
+ file_sync (arch_specific->store->source, 1, 0);
+}
+
+/* Initialize by allocating memory and filling in a few defaults, a
+ PedDevice structure. */
+static PedDevice*
+_init_device (const char *path)
+{
+ PedDevice *dev;
+ GNUSpecific* arch_specific;
+
+ dev = (PedDevice*) ped_malloc (sizeof (PedDevice));
+ if (!dev)
+ goto error;
+
+ dev->path = strdup (path);
+ if (!dev->path)
+ goto error_free_dev;
+
+ dev->arch_specific
+ = (GNUSpecific*) ped_malloc (sizeof (GNUSpecific));
+ if (!dev->arch_specific)
+ goto error_free_path;
+
+ dev->type = PED_DEVICE_UNKNOWN; /* It's deprecated anyway */
+ dev->open_count = 0;
+ dev->read_only = 0;
+ dev->external_mode = 0;
+ dev->dirty = 0;
+ dev->boot_dirty = 0;
+
+ return dev;
+
+error_free_arch_specific:
+ free (dev->arch_specific);
+error_free_path:
+ free (dev->path);
+error_free_dev:
+ free (dev);
+error:
+ return NULL;
+}
+
+/* Ask the kernel and translators to reload the partition table.
+ XXX: Will probably be replaced by some RPC to partfs when it's finished. In
+ the meantime, gnumach's glue layer will pass BLKRRPART to the Linux drivers.
+ */
+#define BLKRRPART 0x125F
+static int
+_reread_part_table (PedDevice* dev)
+{
+ struct store *store = GNU_SPECIFIC (dev)->store;
+ int retry_count = 9;
+ int len = strlen (dev->path);
+ char path[len + 3 + 1];
+ int i;
+ int done = 1;
+
+ sync ();
+
+ if(strcmp (store->class->name, "device") == 0) {
+ while (device_set_status (store->port, BLKRRPART, NULL, 0)) {
+ retry_count--;
+ sync ();
+ if (retry_count == 3)
+ sleep (1); /* Pause to allow system to settle */
+
+ if (!retry_count) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("WARNING: the kernel failed to re-read the "
+ "partition table on %s (%s). As a result, "
+ "it may not reflect all of your changes "
+ "until after reboot."),
+ dev->path, strerror (errno));
+ return 0;
+ }
+ }
+ }
+
+ i = 1;
+ while (1) {
+ file_t node;
+ error_t err;
+
+ /* Throw away all active parted-based translators */
+ snprintf (path, sizeof (path), "%ss%u", dev->path, i);
+ node = file_name_lookup (path, O_NOTRANS, 0666);
+ if (node == MACH_PORT_NULL) {
+ if (errno == ENOENT)
+ /* Finished looping over them */
+ break;
+
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("Warning: unable to open %s (%s). As a "
+ "result, it may not reflect all of your "
+ "changes until after reboot."),
+ path, strerror (errno));
+ done = 0;
+ }
+
+ err = file_set_translator (node, 0, FS_TRANS_SET,
+ 0, 0, 0, MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND);
+ if (err) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("Warning: failed to make translator go away "
+ "on %s (%s). As a result, it may not reflect "
+ "all of your changes until after reboot."),
+ dev->path, strerror (errno));
+ done = 0;
+ }
+ i++;
+ }
+
+ return done;
+}
+
+/* Free the memory associated with a PedDevice structure. */
+static void
+_done_device (PedDevice *dev)
+{
+ free (dev->arch_specific);
+ free (dev->path);
+ free (dev);
+}
+
+/* Release all resources that libparted owns in DEV. */
+static void
+gnu_destroy (PedDevice* dev)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+
+ if (arch_specific->consume)
+ store_free (arch_specific->store);
+
+ _done_device (dev);
+}
+
+static PedDevice*
+gnu_new (const char* path)
+{
+ PedDevice* dev;
+ GNUSpecific* arch_specific;
+ error_t ro_err, rw_err;
+ int ispath;
+
+ PED_ASSERT (path != NULL);
+
+ dev = _init_device (path);
+ if (!dev)
+ return NULL;
+
+ arch_specific = GNU_SPECIFIC (dev);
+ arch_specific->consume = 1;
+
+ retry_open:
+ /* Try read-write. */
+ if (strchr (dev->path, '/') != NULL) {
+ /* We set this to prevent having to use strchr more then once. */
+ ispath = 1;
+
+ rw_err = store_open (dev->path, 0, NULL, &arch_specific->store);
+ } else {
+ rw_err = store_typed_open (dev->path, 0, NULL, &arch_specific->store);
+ }
+
+ /* Try readonly. */
+ if (rw_err) {
+ if (ispath) {
+ ro_err = store_open (dev->path, STORE_READONLY, NULL,
+ &arch_specific->store);
+ } else {
+ ro_err = store_typed_open (dev->path, STORE_READONLY, NULL,
+ &arch_specific->store);
+ }
+
+ if (ro_err) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Error opening %s: %s"),
+ dev->path, strerror (ro_err))
+ != PED_EXCEPTION_RETRY) {
+ return NULL;
+ } else
+ goto retry_open;
+ } else {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Unable to open %s read-write (%s). %s has "
+ "been opened read-only."),
+ dev->path, strerror (rw_err), dev->path);
+ dev->read_only = 1;
+ }
+ } else {
+ dev->read_only = 0;
+ }
+
+ _flush_cache (dev);
+
+ if (!init_file (dev)) {
+ gnu_destroy(dev);
+ return NULL;
+ }
+
+ return dev;
+}
+
+PedDevice*
+ped_device_new_from_store (struct store *source)
+{
+ PedDevice* dev;
+ GNUSpecific* arch_specific;
+
+ PED_ASSERT (source != NULL);
+
+ dev = _init_device (source->name ?: "(unknown)");
+ if (!dev)
+ return NULL;
+
+ arch_specific = GNU_SPECIFIC (dev);
+ arch_specific->store = source;
+ arch_specific->consume = 0;
+
+ dev->read_only = source->flags & (STORE_READONLY|STORE_HARD_READONLY);
+
+ if (!init_file (dev)) {
+ _done_device (dev);
+ return NULL;
+ }
+
+ return dev;
+}
+
+static int
+gnu_is_busy (PedDevice* dev)
+{
+ return 0;
+}
+
+static int
+gnu_open (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+gnu_refresh_open (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+gnu_close (PedDevice* dev)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+
+ _flush_cache (dev);
+
+ if (dev->dirty && dev->type != PED_DEVICE_FILE) {
+ if (_reread_part_table (dev))
+ dev->dirty = 0;
+ }
+
+ return 1;
+}
+
+static int
+gnu_refresh_close (PedDevice* dev)
+{
+ _flush_cache (dev);
+ return 1;
+}
+
+static int
+gnu_read (const PedDevice* dev, void* user_buffer, PedSector device_start,
+ PedSector count)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+ error_t err;
+ PedExceptionOption ex_status;
+ size_t start;
+ size_t store_start_block;
+ /* In bytes. This can be larger than COUNT when store pages are
+ larger than PED_SECTOR_SIZE_DEFAULT. */
+ size_t store_read_length;
+ char local_buffer[PED_SECTOR_SIZE_DEFAULT];
+ void * store_read_buffer;
+ size_t have_read;
+ size_t read_offset;
+ size_t device_read_length = count * PED_SECTOR_SIZE_DEFAULT;
+
+ start = device_start * PED_SECTOR_SIZE_DEFAULT;
+ if (PED_SECTOR_SIZE_DEFAULT != arch_specific->store->block_size) {
+ store_start_block = start / arch_specific->store->block_size;
+ store_read_length = (device_read_length
+ + arch_specific->store->block_size - 1)
+ / arch_specific->store->block_size;
+ } else {
+ store_start_block = device_start;
+ store_read_length = device_read_length;
+ }
+
+ read_offset = start
+ - store_start_block * arch_specific->store->block_size;
+
+ if (store_read_length % arch_specific->store->block_size != 0)
+ store_read_length = store_read_length
+ + arch_specific->store->block_size
+ - store_read_length % arch_specific->store->block_size;
+
+retry:
+ have_read = 0;
+ while (1) {
+ size_t did_read;
+ size_t offset;
+
+ store_read_buffer = local_buffer;
+ did_read = sizeof (local_buffer);
+
+ err = store_read (arch_specific->store, store_start_block,
+ store_read_length - have_read,
+ &store_read_buffer, &did_read);
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during read on %s"),
+ strerror (err),
+ dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ goto retry;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ memcpy (user_buffer + have_read - read_offset,
+ store_read_buffer
+ + (have_read >= read_offset
+ ? 0 : read_offset - have_read),
+ have_read + did_read > device_read_length + read_offset
+ ? device_read_length + read_offset - have_read
+ : did_read);
+
+ if (store_read_buffer != local_buffer)
+ vm_deallocate (mach_task_self (),
+ (long) store_read_buffer, did_read);
+
+ have_read += did_read;
+ store_start_block += did_read
+ / arch_specific->store->block_size;
+
+ if (have_read >= device_read_length)
+ break;
+ }
+
+ return 1;
+}
+
+static int
+gnu_write (PedDevice* dev, const void* buffer, PedSector start, PedSector count)
+{
+ GNUSpecific* arch_specific = GNU_SPECIFIC (dev);
+ error_t err;
+ PedExceptionOption ex_status;
+ void * temp;
+ char local_buffer[PED_SECTOR_SIZE_DEFAULT];
+ size_t did_read;
+ size_t did_write;
+
+ /* Map a disk sector to a store sector. */
+ #define PED_TO_STORE(store, sector) (((sector) * PED_SECTOR_SIZE_DEFAULT) \
+ / (store)->block_size)
+
+ if (dev->read_only) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't write to %s, because it is opened read-only."),
+ dev->path)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ else
+ return 1;
+ }
+
+#ifdef READ_ONLY
+ printf ("ped_device_write (\"%s\", %p, %d, %d)\n",
+ dev->path, buffer, (int) start, (int) count);
+#else
+ dev->dirty = 1;
+
+ /* If the first ``device'' block (PedSector) is not aligned on a
+ store block, then we need to fetch the old block, copy in the
+ overlaping area and finally, write the modified data out to the
+ store. */
+ if ((PED_SECTOR_SIZE_DEFAULT * start) % arch_specific->store->block_size
+ != 0) {
+ size_t write_offset;
+ size_t flushing;
+
+doggy_first_block_read:
+ /* We do not bother looping as we are only reading a
+ single block. */
+ temp = local_buffer;
+ did_read = sizeof (local_buffer);
+ err = store_read (arch_specific->store,
+ PED_TO_STORE (arch_specific->store, start),
+ arch_specific->store->block_size, &temp,
+ &did_read);
+ if (! err && did_read != arch_specific->store->block_size)
+ err = EIO;
+
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during read on %s"),
+ strerror (err), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ case PED_EXCEPTION_RETRY:
+ goto doggy_first_block_read;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ write_offset = (start * PED_SECTOR_SIZE_DEFAULT)
+ % arch_specific->store->block_size;
+ flushing = arch_specific->store->block_size - write_offset;
+ if (flushing > count * PED_SECTOR_SIZE_DEFAULT)
+ flushing = count * PED_SECTOR_SIZE_DEFAULT;
+
+ memcpy (temp + write_offset, buffer, flushing);
+
+doggy_first_block_write:
+ err = store_write (arch_specific->store,
+ PED_TO_STORE (arch_specific->store, start),
+ temp, arch_specific->store->block_size,
+ &did_write);
+ if (! err && did_write != arch_specific->store->block_size)
+ err = EIO;
+
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (err), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ case PED_EXCEPTION_RETRY:
+ goto doggy_first_block_write;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ if (temp != local_buffer)
+ vm_deallocate (
+ mach_task_self (),
+ (long) temp,
+ did_read);
+ return 0;
+ }
+ }
+
+ start += flushing / PED_SECTOR_SIZE_DEFAULT;
+ count -= flushing / PED_SECTOR_SIZE_DEFAULT;
+ buffer += write_offset;
+
+ if (temp != local_buffer)
+ vm_deallocate (mach_task_self (), (long) temp,
+ did_read);
+
+ if (count == 0)
+ return 1;
+ }
+
+ while (count > 0
+ && count >= arch_specific->store->block_size / PED_SECTOR_SIZE_DEFAULT) {
+ err = store_write (arch_specific->store,
+ PED_TO_STORE (arch_specific->store, start),
+ buffer, count * PED_SECTOR_SIZE_DEFAULT,
+ &did_write);
+
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (err), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ case PED_EXCEPTION_RETRY:
+ continue;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ start += did_write / PED_SECTOR_SIZE_DEFAULT;
+ count -= did_write / PED_SECTOR_SIZE_DEFAULT;
+ buffer += did_write;
+ }
+
+ if (count == 0)
+ return 1;
+
+ /* We are now left with (strictly) less then a store block to write
+ to disk. Thus, we read the block, overlay the buffer and flush. */
+ PED_ASSERT (count * PED_SECTOR_SIZE_DEFAULT
+ < arch_specific->store->block_size);
+
+doggy_last_block_read:
+ /* We do not bother looping as we are only reading a
+ single block. */
+ temp = local_buffer;
+ did_read = sizeof (local_buffer);
+ err = store_read (arch_specific->store,
+ PED_TO_STORE (arch_specific->store, start),
+ arch_specific->store->block_size, &temp,
+ &did_read);
+ if (! err && did_read != arch_specific->store->block_size)
+ err = EIO;
+
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during read on %s"),
+ strerror (err), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ case PED_EXCEPTION_RETRY:
+ goto doggy_last_block_read;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ memcpy (temp, buffer, count * PED_SECTOR_SIZE_DEFAULT);
+
+doggy_last_block_write:
+ err = store_write (arch_specific->store,
+ PED_TO_STORE (arch_specific->store, start),
+ temp, arch_specific->store->block_size,
+ &did_write);
+ if (! err && did_write != arch_specific->store->block_size)
+ err = EIO;
+
+ if (err) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (err), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ case PED_EXCEPTION_RETRY:
+ goto doggy_last_block_write;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ if (temp != local_buffer)
+ vm_deallocate (mach_task_self (),
+ (long) temp,
+ did_read);
+ return 0;
+ }
+ }
+
+#endif /* !READ_ONLY */
+ return 1;
+}
+
+/* TODO: returns the number of sectors that are ok.
+ */
+static PedSector
+gnu_check (PedDevice* dev, void* buffer, PedSector start, PedSector count)
+{
+ int status;
+ int done = 0;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (buffer != NULL);
+
+ return count;
+}
+
+static int
+gnu_sync (PedDevice* dev)
+{
+ GNUSpecific* arch_specific;
+ error_t err;
+ PedExceptionOption ex_status;
+ static char *last_failure = NULL;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ arch_specific = GNU_SPECIFIC (dev);
+
+ if (dev->read_only || ! dev->dirty)
+ return 1;
+
+ while (1) {
+ err = file_sync (arch_specific->store->source, 1, 0);
+ if (! err || err == EOPNOTSUPP || err == EPERM
+ || (last_failure && strcmp (last_failure, dev->path) == 0))
+ break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s trying to sync %s to disk"),
+ strerror (errno), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ free (last_failure);
+ last_failure = strdup (dev->path);
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+probe_standard_devices ()
+{
+ _ped_device_probe ("/dev/sd0");
+ _ped_device_probe ("/dev/sd1");
+ _ped_device_probe ("/dev/sd2");
+ _ped_device_probe ("/dev/sd3");
+ _ped_device_probe ("/dev/sd4");
+ _ped_device_probe ("/dev/sd5");
+
+ _ped_device_probe ("/dev/hd0");
+ _ped_device_probe ("/dev/hd1");
+ _ped_device_probe ("/dev/hd2");
+ _ped_device_probe ("/dev/hd3");
+ _ped_device_probe ("/dev/hd4");
+ _ped_device_probe ("/dev/hd5");
+ _ped_device_probe ("/dev/hd6");
+ _ped_device_probe ("/dev/hd7");
+
+ _ped_device_probe ("/dev/wd0");
+ _ped_device_probe ("/dev/wd1");
+ _ped_device_probe ("/dev/wd2");
+ _ped_device_probe ("/dev/wd3");
+ _ped_device_probe ("/dev/wd4");
+ _ped_device_probe ("/dev/wd5");
+ _ped_device_probe ("/dev/wd6");
+ _ped_device_probe ("/dev/wd7");
+
+ return 1;
+}
+
+static void
+gnu_probe_all ()
+{
+ probe_standard_devices ();
+}
+
+static char*
+gnu_partition_get_path (const PedPartition* part)
+{
+ const char* dev_path = part->disk->dev->path;
+ int result_len = strlen (dev_path) + 16;
+ char* result;
+
+ result = (char*) ped_malloc (result_len);
+ if (!result)
+ return NULL;
+ snprintf (result, result_len, "%ss%d", dev_path, part->num);
+ return result;
+}
+
+static int
+gnu_partition_is_busy (const PedPartition* part)
+{
+ return 0;
+}
+
+static int
+gnu_disk_commit (PedDisk* disk)
+{
+ return _reread_part_table (disk->dev);
+}
+
+static PedDeviceArchOps gnu_dev_ops = {
+ _new: gnu_new,
+ destroy: gnu_destroy,
+ is_busy: gnu_is_busy,
+ open: gnu_open,
+ refresh_open: gnu_refresh_open,
+ close: gnu_close,
+ refresh_close: gnu_refresh_close,
+ read: gnu_read,
+ write: gnu_write,
+ check: gnu_check,
+ sync: gnu_sync,
+ sync_fast: gnu_sync,
+ probe_all: gnu_probe_all
+};
+
+static PedDiskArchOps gnu_disk_ops = {
+ partition_get_path: gnu_partition_get_path,
+ partition_is_busy: gnu_partition_is_busy,
+ disk_commit: gnu_disk_commit
+};
+
+PedArchitecture ped_gnu_arch = {
+ dev_ops: &gnu_dev_ops,
+ disk_ops: &gnu_disk_ops
+};
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
new file mode 100644
index 0000000..ccbba86
--- /dev/null
+++ b/libparted/arch/linux.c
@@ -0,0 +1,3413 @@
+/* libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#define PROC_DEVICES_BUFSIZ 16384
+
+#include <config.h>
+#include <arch/linux.h>
+#include <linux/blkpg.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#if defined __s390__ || defined __s390x__
+#include <parted/fdasd.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libgen.h>
+#include <stdio.h>
+#include <syscall.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <dirent.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/utsname.h> /* for uname() */
+#include <scsi/scsi.h>
+#include <assert.h>
+#include <sys/sysmacros.h>
+#ifdef ENABLE_DEVICE_MAPPER
+#include <libdevmapper.h>
+#endif
+
+#include "../architecture.h"
+#include "dirname.h"
+#include "xstrtol.h"
+#include "xalloc.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+ The __-protected variants of the attributes 'format' and 'printf' are
+ accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+#define STRPREFIX(a, b) (strncmp (a, b, strlen (b)) == 0)
+
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
+
+#ifndef __NR__llseek
+#define __NR__llseek 140
+#endif
+
+#ifndef SCSI_IOCTL_SEND_COMMAND
+#define SCSI_IOCTL_SEND_COMMAND 1
+#endif
+
+/* from <linux/hdreg.h> */
+#define HDIO_GETGEO 0x0301 /* get device geometry */
+#define HDIO_GET_IDENTITY 0x030d /* get IDE identification info */
+
+#define RD_MODE (O_RDONLY)
+#define WR_MODE (O_WRONLY)
+#define RW_MODE (O_RDWR)
+
+struct hd_geometry {
+ unsigned char heads;
+ unsigned char sectors;
+ unsigned short cylinders;
+ unsigned long start;
+};
+
+struct ata7_sectinfo {
+ int valid1:1;
+ int valid2:1;
+ int rsv:26;
+ int multiplier:4;
+};
+
+/* structure returned by HDIO_GET_IDENTITY, as per ANSI ATA2 rev.2f spec */
+struct hd_driveid {
+ unsigned short config; /* lots of obsolete bit flags */
+ unsigned short cyls; /* "physical" cyls */
+ unsigned short reserved2; /* reserved (word 2) */
+ unsigned short heads; /* "physical" heads */
+ unsigned short track_bytes; /* unformatted bytes per track */
+ unsigned short sector_bytes; /* unformatted bytes per sector */
+ unsigned short sectors; /* "physical" sectors per track */
+ unsigned short vendor0; /* vendor unique */
+ unsigned short vendor1; /* vendor unique */
+ unsigned short vendor2; /* vendor unique */
+ unsigned char serial_no[20]; /* 0 = not_specified */
+ unsigned short buf_type;
+ unsigned short buf_size; /* 512 byte increments;
+ 0 = not_specified */
+ unsigned short ecc_bytes; /* for r/w long cmds;
+ 0 = not_specified */
+ unsigned char fw_rev[8]; /* 0 = not_specified */
+ char model[40]; /* 0 = not_specified */
+ unsigned char max_multsect; /* 0=not_implemented */
+ unsigned char vendor3; /* vendor unique */
+ unsigned short dword_io; /* 0=not_implemented; 1=implemented */
+ unsigned char vendor4; /* vendor unique */
+ unsigned char capability; /* bits 0:DMA 1:LBA 2:IORDYsw
+ 3:IORDYsup*/
+ unsigned short reserved50; /* reserved (word 50) */
+ unsigned char vendor5; /* vendor unique */
+ unsigned char tPIO; /* 0=slow, 1=medium, 2=fast */
+ unsigned char vendor6; /* vendor unique */
+ unsigned char tDMA; /* 0=slow, 1=medium, 2=fast */
+ unsigned short field_valid; /* bits 0:cur_ok 1:eide_ok */
+ unsigned short cur_cyls; /* logical cylinders */
+ unsigned short cur_heads; /* logical heads */
+ unsigned short cur_sectors; /* logical sectors per track */
+ unsigned short cur_capacity0; /* logical total sectors on drive */
+ unsigned short cur_capacity1; /* (2 words, misaligned int) */
+ unsigned char multsect; /* current multiple sector count */
+ unsigned char multsect_valid; /* when (bit0==1) multsect is ok */
+ unsigned int lba_capacity; /* total number of sectors */
+ unsigned short dma_1word; /* single-word dma info */
+ unsigned short dma_mword; /* multiple-word dma info */
+ unsigned short eide_pio_modes; /* bits 0:mode3 1:mode4 */
+ unsigned short eide_dma_min; /* min mword dma cycle time (ns) */
+ unsigned short eide_dma_time; /* recommended mword dma cycle
+ time (ns) */
+ unsigned short eide_pio; /* min cycle time (ns), no IORDY */
+ unsigned short eide_pio_iordy; /* min cycle time (ns), with IORDY */
+ unsigned short words69_70[2]; /* reserved words 69-70 */
+ /* HDIO_GET_IDENTITY currently returns only words 0 through 70 */
+ unsigned short words71_74[4]; /* reserved words 71-74 */
+ unsigned short queue_depth; /* */
+ unsigned short words76_79[4]; /* reserved words 76-79 */
+ unsigned short major_rev_num; /* */
+ unsigned short minor_rev_num; /* */
+ unsigned short command_set_1; /* bits 0:Smart 1:Security 2:Removable
+ 3:PM */
+ unsigned short command_set_2; /* bits 14:Smart Enabled 13:0 zero */
+ unsigned short cfsse; /* command set-feature supported
+ extensions */
+ unsigned short cfs_enable_1; /* command set-feature enabled */
+ unsigned short cfs_enable_2; /* command set-feature enabled */
+ unsigned short csf_default; /* command set-feature default */
+ unsigned short dma_ultra; /* */
+ unsigned short word89; /* reserved (word 89) */
+ unsigned short word90; /* reserved (word 90) */
+ unsigned short CurAPMvalues; /* current APM values */
+ unsigned short word92; /* reserved (word 92) */
+ unsigned short hw_config; /* hardware config */
+ unsigned short words94_105[12];/* reserved words 94-105 */
+ struct ata7_sectinfo ata7_sectinfo; /* ATAPI/ATA7 physical and logical
+ sector size */
+ unsigned short words107_116[10];/* reserved words 107-116 */
+ unsigned int logical_sectsize;/* ATAPI/ATA7 logical sector size */
+ unsigned short words119_125[7];/* reserved words 119-125 */
+ unsigned short last_lun; /* reserved (word 126) */
+ unsigned short word127; /* reserved (word 127) */
+ unsigned short dlf; /* device lock function
+ * 15:9 reserved
+ * 8 security level 1:max 0:high
+ * 7:6 reserved
+ * 5 enhanced erase
+ * 4 expire
+ * 3 frozen
+ * 2 locked
+ * 1 en/disabled
+ * 0 capability
+ */
+ unsigned short csfo; /* current set features options
+ * 15:4 reserved
+ * 3 auto reassign
+ * 2 reverting
+ * 1 read-look-ahead
+ * 0 write cache
+ */
+ unsigned short words130_155[26];/* reserved vendor words 130-155 */
+ unsigned short word156;
+ unsigned short words157_159[3]; /* reserved vendor words 157-159 */
+ unsigned short words160_255[95];/* reserved words 160-255 */
+};
+
+/* from <linux/fs.h> */
+#define BLKRRPART _IO(0x12,95) /* re-read partition table */
+#define BLKGETSIZE _IO(0x12,96) /* return device size */
+#define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */
+#define BLKSSZGET _IO(0x12,104) /* get block device sector size */
+#define BLKGETLASTSECT _IO(0x12,108) /* get last sector of block device */
+#define BLKSETLASTSECT _IO(0x12,109) /* set last sector of block device */
+
+/* return device size in bytes (u64 *arg) */
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)
+
+struct blkdev_ioctl_param {
+ unsigned int block;
+ size_t content_length;
+ char * block_contents;
+};
+
+/* from <linux/major.h> */
+#define IDE0_MAJOR 3
+#define IDE1_MAJOR 22
+#define IDE2_MAJOR 33
+#define IDE3_MAJOR 34
+#define IDE4_MAJOR 56
+#define IDE5_MAJOR 57
+#define SCSI_CDROM_MAJOR 11
+#define SCSI_DISK0_MAJOR 8
+#define SCSI_DISK1_MAJOR 65
+#define SCSI_DISK2_MAJOR 66
+#define SCSI_DISK3_MAJOR 67
+#define SCSI_DISK4_MAJOR 68
+#define SCSI_DISK5_MAJOR 69
+#define SCSI_DISK6_MAJOR 70
+#define SCSI_DISK7_MAJOR 71
+#define SCSI_DISK8_MAJOR 128
+#define SCSI_DISK9_MAJOR 129
+#define SCSI_DISK10_MAJOR 130
+#define SCSI_DISK11_MAJOR 131
+#define SCSI_DISK12_MAJOR 132
+#define SCSI_DISK13_MAJOR 133
+#define SCSI_DISK14_MAJOR 134
+#define SCSI_DISK15_MAJOR 135
+#define COMPAQ_SMART2_MAJOR 72
+#define COMPAQ_SMART2_MAJOR1 73
+#define COMPAQ_SMART2_MAJOR2 74
+#define COMPAQ_SMART2_MAJOR3 75
+#define COMPAQ_SMART2_MAJOR4 76
+#define COMPAQ_SMART2_MAJOR5 77
+#define COMPAQ_SMART2_MAJOR6 78
+#define COMPAQ_SMART2_MAJOR7 79
+#define COMPAQ_SMART_MAJOR 104
+#define COMPAQ_SMART_MAJOR1 105
+#define COMPAQ_SMART_MAJOR2 106
+#define COMPAQ_SMART_MAJOR3 107
+#define COMPAQ_SMART_MAJOR4 108
+#define COMPAQ_SMART_MAJOR5 109
+#define COMPAQ_SMART_MAJOR6 110
+#define COMPAQ_SMART_MAJOR7 111
+#define DAC960_MAJOR 48
+#define ATARAID_MAJOR 114
+#define I2O_MAJOR1 80
+#define I2O_MAJOR2 81
+#define I2O_MAJOR3 82
+#define I2O_MAJOR4 83
+#define I2O_MAJOR5 84
+#define I2O_MAJOR6 85
+#define I2O_MAJOR7 86
+#define I2O_MAJOR8 87
+#define UBD_MAJOR 98
+#define DASD_MAJOR 94
+#define VIODASD_MAJOR 112
+#define AOE_MAJOR 152
+#define SX8_MAJOR1 160
+#define SX8_MAJOR2 161
+#define XVD_MAJOR 202
+#define SDMMC_MAJOR 179
+#define LOOP_MAJOR 7
+#define MD_MAJOR 9
+#define BLKEXT_MAJOR 259
+#define RAM_MAJOR 1
+
+#define SCSI_BLK_MAJOR(M) ( \
+ (M) == SCSI_DISK0_MAJOR \
+ || (M) == SCSI_CDROM_MAJOR \
+ || ((M) >= SCSI_DISK1_MAJOR && (M) <= SCSI_DISK7_MAJOR) \
+ || ((M) >= SCSI_DISK8_MAJOR && (M) <= SCSI_DISK15_MAJOR))
+
+/* Maximum number of partitions supported by linux. */
+#define MAX_NUM_PARTS 64
+
+static char* _device_get_part_path (PedDevice const *dev, int num);
+static int _partition_is_mounted_by_path (const char* path);
+static unsigned int _device_get_partition_range(PedDevice const* dev);
+static int _device_open (PedDevice* dev, int flags);
+static int _device_open_ro (PedDevice* dev);
+static int _device_close (PedDevice* dev);
+
+static int
+_read_fd (int fd, char **buf)
+{
+ char* p;
+ size_t size = PROC_DEVICES_BUFSIZ;
+ int s, filesize = 0;
+
+ *buf = malloc (size * sizeof (char));
+ if (*buf == 0) {
+ return -1;
+ }
+
+ do {
+ p = &(*buf) [filesize];
+ s = read (fd, p, PROC_DEVICES_BUFSIZ);
+ /* exit if there is an error or EOF is reached */
+ if (s <= 0)
+ break;
+ filesize += s;
+ size += s;
+ char *new_buf = realloc (*buf, size);
+ if (new_buf == NULL) {
+ int saved_errno = errno;
+ free (*buf);
+ errno = saved_errno;
+ return -1;
+ }
+ *buf = new_buf;
+ } while (1);
+
+ if (filesize == 0 && s < 0) {
+ free (*buf);
+ *buf = NULL;
+ return -1;
+ } else {
+ char *new_buf = realloc (*buf, filesize + 1);
+ if (new_buf == NULL) {
+ int saved_errno = errno;
+ free (*buf);
+ errno = saved_errno;
+ return -1;
+ }
+ *buf = new_buf;
+ (*buf)[filesize] = '\0';
+ }
+
+ return filesize;
+}
+
+static int
+_major_type_in_devices (int major, const char* type)
+{
+ int fd;
+ char* buf = NULL;
+ char* line;
+ char* end;
+ int bd = 0;
+ char c;
+
+ fd = open ("/proc/devices", O_RDONLY);
+ if (fd < 0)
+ return 0;
+
+ if (_read_fd(fd, &buf) < 0) {
+ close(fd);
+ return 0;
+ }
+
+ line = buf;
+ end = strchr(line, '\n');
+ while (end) {
+ char *name;
+ int maj;
+
+ c = *end;
+ *end = '\0';
+
+ if (!bd) {
+ if (!strncmp(line, "Block devices:", 14))
+ bd = 1;
+ goto next;
+ }
+
+ name = strrchr(line, ' ');
+ if (!name || strcmp(name+1, type))
+ goto next;
+
+ maj = strtol(line, &name, 10);
+ if (maj == major) {
+ free(buf);
+ close(fd);
+ return 1;
+ }
+
+next:
+ *end = c;
+ line = end+1;
+ end = strchr(line, '\n');
+ }
+ free(buf);
+ close(fd);
+ return 0;
+}
+
+static int
+_is_ide_major (int major)
+{
+ switch (major) {
+ case IDE0_MAJOR:
+ case IDE1_MAJOR:
+ case IDE2_MAJOR:
+ case IDE3_MAJOR:
+ case IDE4_MAJOR:
+ case IDE5_MAJOR:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static int
+_is_cpqarray_major (int major)
+{
+ return ((COMPAQ_SMART2_MAJOR <= major && major <= COMPAQ_SMART2_MAJOR7)
+ || (COMPAQ_SMART_MAJOR <= major && major <= COMPAQ_SMART_MAJOR7));
+}
+
+static int
+_is_i2o_major (int major)
+{
+ return (I2O_MAJOR1 <= major && major <= I2O_MAJOR8);
+}
+
+static int
+_is_sx8_major (int major)
+{
+ return (SX8_MAJOR1 <= major && major <= SX8_MAJOR2);
+}
+
+static int
+_is_virtblk_major (int major)
+{
+ return _major_type_in_devices (major, "virtblk");
+}
+
+static int
+_is_blkext_major (int major)
+{
+ return _major_type_in_devices (major, "blkext");
+}
+
+#ifdef ENABLE_DEVICE_MAPPER
+static int
+_dm_task_run_wait (struct dm_task *task, uint32_t cookie)
+{
+ int rc = 0;
+
+ rc = dm_task_run (task);
+ dm_udev_wait (cookie);
+
+ return rc;
+}
+
+static int
+_is_dm_major (int major)
+{
+ return _major_type_in_devices (major, "device-mapper");
+}
+
+static int
+_dm_maptype (PedDevice *dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ struct dm_task *dmt;
+ uint64_t start, length;
+ char *target_type = NULL;
+ char *params;
+ int r = -1;
+ const char* dev_dir = getenv ("DM_DEV_DIR");
+
+ if (dev_dir && *dev_dir && !dm_set_dev_dir(dev_dir))
+ return r;
+
+ if (!(dmt = dm_task_create(DM_DEVICE_TABLE)))
+ return r;
+
+ if (!dm_task_set_major_minor(dmt, arch_specific->major,
+ arch_specific->minor, 0))
+ goto bad;
+
+ dm_task_no_open_count(dmt);
+
+ if (!dm_task_run(dmt))
+ goto bad;
+
+ dm_get_next_target(dmt, NULL, &start, &length, &target_type, &params);
+
+ arch_specific->dmtype = strdup(target_type ? target_type : "NO-TARGET");
+ if (arch_specific->dmtype == NULL)
+ goto bad;
+ r = 0;
+bad:
+ dm_task_destroy(dmt);
+ return r;
+}
+
+/* Return nonzero if device-mapper device, DEVPATH, is part of a dmraid
+ array. Use the heuristic of checking for the string "DMRAID-" at the
+ start of its UUID. */
+static int
+_is_dmraid_device (const char *devpath)
+{
+ int rc = 0;
+
+ char const *dm_name = strrchr (devpath, '/');
+ char const *dm_basename = dm_name && *(++dm_name) ? dm_name : devpath;
+ struct dm_task *task = dm_task_create (DM_DEVICE_DEPS);
+ if (!task)
+ return 0;
+
+ dm_task_set_name (task, dm_basename);
+ if (!dm_task_run (task))
+ goto err;
+
+ const char *dmraid_uuid = dm_task_get_uuid (task);
+ if (STRPREFIX (dmraid_uuid, "DMRAID-"))
+ rc = 1;
+
+err:
+ dm_task_destroy (task);
+ return rc;
+}
+
+/* We consider a dm device that is a linear mapping with a *
+ * single target that also is a dm device to be a partition */
+
+static int
+_dm_is_part (const char *path)
+{
+ int rc = 0;
+ struct dm_task *task = dm_task_create (DM_DEVICE_DEPS);
+ if (!task)
+ return 0;
+
+ dm_task_set_name(task, path);
+ if (!dm_task_run(task))
+ goto err;
+
+ struct dm_info *info = alloca (sizeof *info);
+ memset(info, '\0', sizeof *info);
+ dm_task_get_info (task, info);
+ if (!info->exists)
+ goto err;
+
+ struct dm_deps *deps = dm_task_get_deps (task);
+ if (!deps)
+ goto err;
+
+ if (deps->count != 1)
+ goto err;
+ if (!_is_dm_major (major (deps->device[0])))
+ goto err;
+ dm_task_destroy (task);
+ if (!(task = dm_task_create (DM_DEVICE_TABLE)))
+ return 0;
+ dm_task_set_name (task, path);
+ if (!dm_task_run (task))
+ goto err;
+
+ char *target_type = NULL;
+ char *params = NULL;
+ uint64_t start, length;
+
+ dm_get_next_target (task, NULL, &start, &length, &target_type, &params);
+ if (strcmp (target_type, "linear"))
+ goto err;
+ rc = 1;
+
+err:
+ dm_task_destroy(task);
+ return rc;
+}
+
+static int
+_probe_dm_devices ()
+{
+ DIR* mapper_dir;
+ struct dirent* dent;
+ char buf [512]; /* readdir(3) claims d_name[256] */
+ struct stat st;
+
+ mapper_dir = opendir ("/dev/mapper");
+ if (!mapper_dir)
+ return 0;
+
+ /* Search the /dev/mapper directory for devices w/ the same major
+ * number that was returned from _probe_lvm_major().
+ */
+ while ((dent = readdir (mapper_dir))) {
+ if (strcmp (dent->d_name, ".") == 0 ||
+ strcmp (dent->d_name, "..") == 0)
+ continue;
+
+ snprintf (buf, sizeof (buf), "/dev/mapper/%s", dent->d_name);
+
+ if (stat (buf, &st) != 0)
+ continue;
+
+ if (_is_dm_major(major(st.st_rdev)) && _is_dmraid_device (buf)
+ && !_dm_is_part(buf))
+ _ped_device_probe (buf);
+ }
+ closedir (mapper_dir);
+
+ return 1;
+}
+#endif
+
+static int
+_device_stat (PedDevice* dev, struct stat * dev_stat)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ while (1) {
+ if (!stat (dev->path, dev_stat)) {
+ return 1;
+ } else {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Could not stat device %s - %s."),
+ dev->path,
+ strerror (errno))
+ != PED_EXCEPTION_RETRY)
+ return 0;
+ }
+ }
+}
+
+static int
+_device_probe_type (PedDevice* dev)
+{
+ struct stat dev_stat;
+ int dev_major;
+ int dev_minor;
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+
+ if (!_device_stat (dev, &dev_stat))
+ return 0;
+
+ if (!S_ISBLK(dev_stat.st_mode)) {
+ dev->type = PED_DEVICE_FILE;
+ return 1;
+ }
+
+ arch_specific->major = dev_major = major (dev_stat.st_rdev);
+ arch_specific->minor = dev_minor = minor (dev_stat.st_rdev);
+
+ if (SCSI_BLK_MAJOR (dev_major) && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_SCSI;
+ } else if (_is_ide_major (dev_major) && (dev_minor % 0x40 == 0)) {
+ dev->type = PED_DEVICE_IDE;
+ } else if (dev_major == DAC960_MAJOR && (dev_minor % 0x8 == 0)) {
+ dev->type = PED_DEVICE_DAC960;
+ } else if (dev_major == ATARAID_MAJOR && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_ATARAID;
+ } else if (dev_major == AOE_MAJOR && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_AOE;
+ } else if (dev_major == DASD_MAJOR && (dev_minor % 0x4 == 0)) {
+ dev->type = PED_DEVICE_DASD;
+ } else if (dev_major == VIODASD_MAJOR && (dev_minor % 0x8 == 0)) {
+ dev->type = PED_DEVICE_VIODASD;
+ } else if (_is_sx8_major(dev_major) && (dev_minor % 0x20 == 0)) {
+ dev->type = PED_DEVICE_SX8;
+ } else if (_is_i2o_major (dev_major) && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_I2O;
+ } else if (_is_cpqarray_major (dev_major) && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_CPQARRAY;
+ } else if (dev_major == UBD_MAJOR && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_UBD;
+#ifdef ENABLE_DEVICE_MAPPER
+ } else if (_is_dm_major(dev_major)) {
+ dev->type = PED_DEVICE_DM;
+ if (_dm_maptype(dev)) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to determine the dm type of %s."),
+ dev->path);
+ }
+#endif
+ } else if (dev_major == XVD_MAJOR && (dev_minor % 0x10 == 0)) {
+ dev->type = PED_DEVICE_XVD;
+ } else if (dev_major == SDMMC_MAJOR && (dev_minor % 0x08 == 0)) {
+ dev->type = PED_DEVICE_SDMMC;
+ } else if (_is_virtblk_major(dev_major)) {
+ dev->type = PED_DEVICE_VIRTBLK;
+ } else if (dev_major == LOOP_MAJOR) {
+ dev->type = PED_DEVICE_LOOP;
+ } else if (dev_major == MD_MAJOR) {
+ dev->type = PED_DEVICE_MD;
+ } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "nvme")) {
+ dev->type = PED_DEVICE_NVME;
+ } else if (dev_major == RAM_MAJOR) {
+ dev->type = PED_DEVICE_RAM;
+ } else if (_is_blkext_major(dev_major) && dev->path && strstr(dev->path, "pmem")) {
+ dev->type = PED_DEVICE_PMEM;
+ } else {
+ dev->type = PED_DEVICE_UNKNOWN;
+ }
+
+ return 1;
+}
+
+static int
+_get_linux_version ()
+{
+ static int kver = -1;
+
+ struct utsname uts;
+ unsigned int major = 0;
+ unsigned int minor = 0;
+ unsigned int teeny = 0;
+
+ if (kver != -1)
+ return kver;
+
+ if (uname (&uts))
+ return kver = 0;
+ int n = sscanf (uts.release, "%u.%u.%u", &major, &minor, &teeny);
+ assert (n == 2 || n == 3);
+ return kver = KERNEL_VERSION (major, minor, teeny);
+}
+
+#if USE_BLKID
+static void
+get_blkid_topology (LinuxSpecific *arch_specific)
+{
+ arch_specific->probe = blkid_new_probe ();
+ if (!arch_specific->probe)
+ return;
+
+ if (blkid_probe_set_device(arch_specific->probe,
+ arch_specific->fd, 0, 0))
+ return;
+
+ arch_specific->topology =
+ blkid_probe_get_topology(arch_specific->probe);
+}
+#endif
+
+static void
+_device_set_sector_size (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ int sector_size;
+
+ dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
+ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
+
+ PED_ASSERT (dev->open_count);
+
+ if (_get_linux_version() < KERNEL_VERSION (2,3,0)) {
+ dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
+ return;
+ }
+
+ if (ioctl (arch_specific->fd, BLKSSZGET, &sector_size)) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Could not determine sector size for %s: %s.\n"
+ "Using the default sector size (%lld)."),
+ dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT);
+ } else {
+ dev->sector_size = (long long)sector_size;
+ dev->phys_sector_size = dev->sector_size;
+ }
+
+#if USE_BLKID
+ get_blkid_topology(arch_specific);
+ if (!arch_specific->topology) {
+ dev->phys_sector_size = 0;
+ } else {
+ dev->phys_sector_size =
+ blkid_topology_get_physical_sector_size(
+ arch_specific->topology);
+ }
+ if (dev->phys_sector_size == 0) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Could not determine physical sector size for %s.\n"
+ "Using the logical sector size (%lld)."),
+ dev->path, dev->sector_size);
+ dev->phys_sector_size = dev->sector_size;
+ }
+#endif
+
+#if defined __s390__ || defined __s390x__
+ /* The real_sector_size is currently needed for DASD layouts,
+ * so we set it unconditionally. In the long run it should
+ * be considered to use the dev->phys_sector_size in label/dasd.c.
+ */
+ arch_specific->real_sector_size = dev->sector_size;
+ /* Return PED_SECTOR_SIZE_DEFAULT for DASDs. */
+ if (dev->type == PED_DEVICE_DASD) {
+ dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
+ }
+#endif
+}
+
+static int
+_kernel_has_blkgetsize64(void)
+{
+ int version = _get_linux_version();
+
+ if (version >= KERNEL_VERSION (2,5,4)) return 1;
+ if (version < KERNEL_VERSION (2,5,0) &&
+ version >= KERNEL_VERSION (2,4,18)) return 1;
+ return 0;
+}
+
+/* TODO: do a binary search if BLKGETSIZE doesn't work?! */
+static PedSector
+_device_get_length (PedDevice* dev)
+{
+ unsigned long size;
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ uint64_t bytes=0;
+ const char* test_str;
+ PedSector test_size;
+
+
+ PED_ASSERT (dev->open_count > 0);
+ PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ test_str = getenv ("PARTED_TEST_DEVICE_LENGTH");
+ if (test_str
+ && xstrtoll (test_str, NULL, 10, &test_size, NULL) == LONGINT_OK)
+ return test_size;
+
+ if (_kernel_has_blkgetsize64()) {
+ if (ioctl(arch_specific->fd, BLKGETSIZE64, &bytes) == 0) {
+ return bytes / dev->sector_size;
+ }
+ }
+
+ if (ioctl (arch_specific->fd, BLKGETSIZE, &size)) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to determine the size of %s (%s)."),
+ dev->path,
+ strerror (errno));
+ return 0;
+ }
+
+ return size;
+}
+
+static int
+_device_probe_geometry (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ struct stat dev_stat;
+ struct hd_geometry geometry;
+ int geometry_is_valid = 0;
+ int sector_size = 0;
+
+ if (!_device_stat (dev, &dev_stat))
+ return 0;
+ PED_ASSERT (S_ISBLK (dev_stat.st_mode));
+
+ _device_set_sector_size (dev);
+
+ dev->length = _device_get_length (dev);
+ if (!dev->length)
+ return 0;
+
+ /* initialize the bios_geom values to something */
+ dev->bios_geom.sectors = 0;
+ dev->bios_geom.heads = 0;
+ dev->bios_geom.cylinders = 0;
+
+ geometry_is_valid = !ioctl (arch_specific->fd, HDIO_GETGEO, &geometry)
+ && geometry.sectors && geometry.heads;
+
+#if defined __s390__ || defined __s390x__
+ if (geometry_is_valid) {
+#else
+ if (!ioctl (arch_specific->fd, BLKSSZGET, &sector_size)) {
+ /* get the sector count first */
+ dev->bios_geom.sectors = 1 + (sector_size / PED_SECTOR_SIZE_DEFAULT);
+ dev->bios_geom.heads = 255;
+ } else if (geometry_is_valid) {
+ /* if BLKSSZGET failed, use deprecated HDIO_GETGEO result */
+#endif
+ dev->bios_geom.sectors = geometry.sectors;
+ dev->bios_geom.heads = geometry.heads;
+ } else {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Could not determine sector size for %s: %s.\n"
+ "Using the default sector size (%lld)."),
+ dev->path, strerror (errno), PED_SECTOR_SIZE_DEFAULT);
+ dev->bios_geom.sectors = 2;
+ dev->bios_geom.heads = 255;
+ }
+
+ dev->bios_geom.cylinders
+ = dev->length / (dev->bios_geom.heads
+ * dev->bios_geom.sectors);
+ dev->hw_geom = dev->bios_geom;
+ return 1;
+}
+
+static char*
+strip_name(char* str)
+{
+ int i;
+ int end = 0;
+
+ for (i = 0; str[i] != 0; i++) {
+ if (!isspace (str[i])
+ || (isspace (str[i]) && !isspace (str[i+1]) && str[i+1])) {
+ str [end] = str[i];
+ end++;
+ }
+ }
+ str[end] = 0;
+ return strdup (str);
+}
+
+static int
+init_ide (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ struct stat dev_stat;
+ struct hd_driveid hdi;
+ PedExceptionOption ex_status;
+ char hdi_buf[41];
+ int sector_multiplier = 0;
+ int r;
+
+ if (!_device_stat (dev, &dev_stat))
+ goto error;
+
+ if (!_device_open_ro (dev))
+ goto error;
+
+ r = ioctl (arch_specific->fd, HDIO_GET_IDENTITY, &hdi);
+ if (r && errno == EINVAL) {
+ /* silently ignore unsupported ioctl */
+ dev->model = strdup(_("Generic IDE"));
+ } else if (r) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Could not get identity of device %s - %s"),
+ dev->path, strerror (errno));
+ switch (ex_status) {
+ case PED_EXCEPTION_CANCEL:
+ goto error_close_dev;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_IGNORE:
+ dev->model = strdup(_("Generic IDE"));
+ break;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ } else {
+ /* hdi.model is not guaranteed to be NULL terminated */
+ memcpy (hdi_buf, hdi.model, 40);
+ hdi_buf[40] = '\0';
+ dev->model = strip_name (hdi_buf);
+
+ if (!hdi.ata7_sectinfo.valid1 && hdi.ata7_sectinfo.valid2)
+ sector_multiplier = hdi.ata7_sectinfo.multiplier;
+ else
+ sector_multiplier = 1;
+
+ if (sector_multiplier != 1) {
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Device %s has multiple (%d) logical sectors "
+ "per physical sector.\n"
+ "GNU Parted supports this EXPERIMENTALLY for "
+ "some special disk label/file system "
+ "combinations, e.g. GPT and ext2/3.\n"
+ "Please consult the web site for up-to-date "
+ "information."),
+ dev->path, sector_multiplier);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_CANCEL:
+ goto error_close_dev;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_IGNORE:
+ break;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+
+ /* XXX sector_size has not been set yet! */
+ /* dev->phys_sector_size = dev->sector_size
+ * sector_multiplier;*/
+ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
+ }
+
+ if (!_device_probe_geometry (dev))
+ goto error_close_dev;
+
+ _device_close (dev);
+ return 1;
+
+error_close_dev:
+ _device_close (dev);
+error:
+ return 0;
+}
+
+/* This function reads the /sys entry named "file" for device "dev". */
+static char *
+read_device_sysfs_file (PedDevice *dev, const char *file)
+{
+ FILE *f;
+ char name_buf[128];
+ char buf[256];
+
+ snprintf (name_buf, 127, "/sys/block/%s/device/%s",
+ last_component (dev->path), file);
+
+ if ((f = fopen (name_buf, "r")) == NULL)
+ return NULL;
+
+ if (fgets (buf, 255, f) == NULL) {
+ fclose (f);
+ return NULL;
+ }
+
+ fclose (f);
+ return strip_name (buf);
+}
+
+/* This function sends a query to a SCSI device for vendor and product
+ * information. It uses the deprecated SCSI_IOCTL_SEND_COMMAND to
+ * issue this query.
+ */
+static int
+scsi_query_product_info (PedDevice* dev, char **vendor, char **product)
+{
+ /* The following are defined by the SCSI-2 specification. */
+ typedef struct _scsi_inquiry_cmd
+ {
+ uint8_t op;
+ uint8_t lun; /* bits 5-7 denote the LUN */
+ uint8_t page_code;
+ uint8_t reserved;
+ uint8_t alloc_length;
+ uint8_t control;
+ } __attribute__((packed)) scsi_inquiry_cmd_t;
+
+ typedef struct _scsi_inquiry_data
+ {
+ uint8_t peripheral_info;
+ uint8_t device_info;
+ uint8_t version_info;
+ uint8_t _field1;
+ uint8_t additional_length;
+ uint8_t _reserved1;
+ uint8_t _reserved2;
+ uint8_t _field2;
+ uint8_t vendor_id[8];
+ uint8_t product_id[16];
+ uint8_t product_revision[4];
+ uint8_t vendor_specific[20];
+ uint8_t _reserved3[40];
+ } __attribute__((packed)) scsi_inquiry_data_t;
+
+ struct scsi_arg
+ {
+ unsigned int inlen;
+ unsigned int outlen;
+
+ union arg_data
+ {
+ scsi_inquiry_data_t out;
+ scsi_inquiry_cmd_t in;
+ } data;
+ } arg;
+
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ char buf[32];
+
+ *vendor = NULL;
+ *product = NULL;
+
+ memset (&arg, 0x00, sizeof(struct scsi_arg));
+ arg.inlen = 0;
+ arg.outlen = sizeof(scsi_inquiry_data_t);
+ arg.data.in.op = INQUIRY;
+ arg.data.in.lun = dev->host << 5;
+ arg.data.in.alloc_length = sizeof(scsi_inquiry_data_t);
+ arg.data.in.page_code = 0;
+ arg.data.in.reserved = 0;
+ arg.data.in.control = 0;
+
+ if (ioctl (arch_specific->fd, SCSI_IOCTL_SEND_COMMAND, &arg) < 0)
+ return 0;
+
+ memcpy (buf, arg.data.out.vendor_id, 8);
+ buf[8] = '\0';
+ *vendor = strip_name (buf);
+
+ memcpy (buf, arg.data.out.product_id, 16);
+ buf[16] = '\0';
+ *product = strip_name (buf);
+
+ return 1;
+}
+
+/* This function provides the vendor and product name for a SCSI device.
+ * It supports both the modern /sys interface and direct queries
+ * via the deprecated ioctl, SCSI_IOCTL_SEND_COMMAND.
+ */
+static int
+scsi_get_product_info (PedDevice* dev, char **vendor, char **product)
+{
+ *vendor = read_device_sysfs_file (dev, "vendor");
+ *product = read_device_sysfs_file (dev, "model");
+ if (*vendor && *product)
+ return 1;
+
+ return scsi_query_product_info (dev, vendor, product);
+}
+
+static int
+init_scsi (PedDevice* dev)
+{
+ struct scsi_idlun
+ {
+ uint32_t dev_id;
+ uint32_t host_unique_id;
+ } idlun;
+
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ char* vendor;
+ char* product;
+
+ if (!_device_open_ro (dev))
+ goto error;
+
+ if (ioctl (arch_specific->fd, SCSI_IOCTL_GET_IDLUN, &idlun) < 0) {
+ dev->host = 0;
+ dev->did = 0;
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL,
+ _("Error initialising SCSI device %s - %s"),
+ dev->path, strerror (errno))
+ != PED_EXCEPTION_IGNORE)
+ goto error_close_dev;
+ if (!_device_probe_geometry (dev))
+ goto error_close_dev;
+ _device_close (dev);
+ return 1;
+ }
+
+ dev->host = idlun.host_unique_id;
+ dev->did = idlun.dev_id;
+
+ dev->model = (char*) ped_malloc (8 + 16 + 2);
+ if (!dev->model)
+ goto error_close_dev;
+
+ if (scsi_get_product_info (dev, &vendor, &product)) {
+ sprintf (dev->model, "%.8s %.16s", vendor, product);
+ free (vendor);
+ free (product);
+ } else {
+ strcpy (dev->model, "Generic SCSI");
+ }
+
+ if (!_device_probe_geometry (dev))
+ goto error_close_dev;
+
+ _device_close (dev);
+ return 1;
+
+error_close_dev:
+ _device_close (dev);
+error:
+ return 0;
+}
+
+static int
+init_file (PedDevice* dev)
+{
+ struct stat dev_stat;
+
+ if (!_device_stat (dev, &dev_stat))
+ goto error;
+ if (!_device_open_ro (dev))
+ goto error;
+
+ dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
+ char *p = getenv ("PARTED_SECTOR_SIZE");
+ if (p) {
+ int s = atoi (p);
+ if (0 < s && s % 512 == 0)
+ dev->sector_size = s;
+ }
+ dev->phys_sector_size = dev->sector_size;
+
+ if (S_ISBLK(dev_stat.st_mode))
+ dev->length = _device_get_length (dev);
+ else
+ dev->length = dev_stat.st_size / dev->sector_size;
+ if (dev->length <= 0) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The device %s is so small that it cannot possibly "
+ "store a file system or partition table. Perhaps "
+ "you selected the wrong device?"),
+ dev->path);
+ goto error_close_dev;
+ }
+
+ _device_close (dev);
+
+ dev->bios_geom.cylinders = dev->length / 4 / 32;
+ dev->bios_geom.heads = 4;
+ dev->bios_geom.sectors = 32;
+ dev->hw_geom = dev->bios_geom;
+ dev->model = strdup ("");
+
+ return 1;
+
+error_close_dev:
+ _device_close (dev);
+error:
+ return 0;
+}
+
+#if defined __s390__ || defined __s390x__
+static int
+init_dasd (PedDevice* dev, const char* model_name)
+{
+ struct stat dev_stat;
+ struct hd_geometry geo;
+ dasd_information_t dasd_info;
+
+ if (!_device_stat (dev, &dev_stat))
+ goto error;
+
+ if (!_device_open_ro (dev))
+ goto error;
+
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+
+ PED_ASSERT (S_ISBLK (dev_stat.st_mode));
+
+ _device_set_sector_size (dev);
+ if (!dev->sector_size)
+ goto error_close_dev;
+
+ dev->length = _device_get_length (dev);
+ if (!dev->length)
+ goto error_close_dev;
+
+ if (!ioctl (arch_specific->fd, HDIO_GETGEO, &geo)) {
+ dev->hw_geom.sectors = geo.sectors;
+ dev->hw_geom.heads = geo.heads;
+ dev->hw_geom.cylinders = dev->length
+ / (dev->hw_geom.heads * dev->hw_geom.sectors)
+ / (dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
+ dev->bios_geom = dev->hw_geom;
+ } else {
+ dev->bios_geom.sectors = 12;
+ dev->bios_geom.heads = 15;
+ dev->bios_geom.cylinders = dev->length
+ / (dev->hw_geom.heads * dev->hw_geom.sectors)
+ / (dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
+ dev->hw_geom = dev->bios_geom;
+ }
+
+ if (!ioctl(arch_specific->fd, BIODASDINFO, &dasd_info)) {
+ arch_specific->devno = dasd_info.devno;
+ } else {
+ arch_specific->devno = arch_specific->major * 256 +
+ arch_specific->minor;
+ }
+
+ dev->model = strdup (model_name);
+
+ _device_close (dev);
+ return 1;
+
+error_close_dev:
+ _device_close (dev);
+error:
+ return 0;
+}
+#endif
+
+static int
+init_generic (PedDevice* dev, const char* model_name)
+{
+ struct stat dev_stat;
+ PedExceptionOption ex_status;
+
+ if (!_device_stat (dev, &dev_stat))
+ goto error;
+
+ if (!_device_open_ro (dev))
+ goto error;
+
+ ped_exception_fetch_all ();
+ if (_device_probe_geometry (dev)) {
+ ped_exception_leave_all ();
+ } else {
+ if (!_device_get_length (dev)) {
+ ped_exception_catch ();
+ ped_exception_leave_all ();
+ goto error_close_dev;
+ }
+
+ /* hack to allow use of files, for testing */
+ ped_exception_catch ();
+ ped_exception_leave_all ();
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Unable to determine geometry of "
+ "file/device %s. You should not use Parted "
+ "unless you REALLY know what you're doing!"),
+ dev->path);
+ switch (ex_status) {
+ case PED_EXCEPTION_CANCEL:
+ goto error_close_dev;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_IGNORE:
+ break;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+
+ /* what should we stick in here? */
+ dev->length = dev_stat.st_size / PED_SECTOR_SIZE_DEFAULT;
+ dev->bios_geom.cylinders = dev->length / 4 / 32;
+ dev->bios_geom.heads = 4;
+ dev->bios_geom.sectors = 32;
+ dev->sector_size = PED_SECTOR_SIZE_DEFAULT;
+ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
+ }
+
+ dev->model = strdup (model_name);
+
+ _device_close (dev);
+ return 1;
+
+error_close_dev:
+ _device_close (dev);
+error:
+ return 0;
+}
+
+static int
+sdmmc_get_product_info (PedDevice* dev, char **type, char **name)
+{
+ *type = read_device_sysfs_file (dev, "type");
+ *name = read_device_sysfs_file (dev, "name");
+ if (*type && *name)
+ return 1;
+
+ return 0;
+}
+
+static int
+init_sdmmc (PedDevice* dev)
+{
+ char id[128];
+ char *type = NULL;
+ char *name = NULL;
+
+ if (sdmmc_get_product_info (dev, &type, &name)) {
+ snprintf (id, sizeof(id) - 1, "%s %s", type, name);
+ } else {
+ snprintf (id, sizeof(id) - 1, "%s",
+ _("Generic SD/MMC Storage Card"));
+ }
+ free (type);
+ free (name);
+ return init_generic(dev, id);
+}
+
+static int
+init_nvme (PedDevice* dev)
+{
+ int ret;
+ char *model = read_device_sysfs_file (dev, "model");
+
+ if (!model)
+ ret = init_generic (dev, _("NVMe Device"));
+ else {
+ ret = init_generic (dev, model);
+ free (model);
+ }
+
+ return ret;
+}
+
+static PedDevice*
+linux_new (const char* path)
+{
+ PedDevice* dev;
+ LinuxSpecific* arch_specific;
+
+ PED_ASSERT (path != NULL);
+
+ dev = (PedDevice*) ped_malloc (sizeof (PedDevice));
+ if (!dev)
+ goto error;
+
+ dev->path = strdup (path);
+ if (!dev->path)
+ goto error_free_dev;
+
+ dev->arch_specific
+ = (LinuxSpecific*) ped_malloc (sizeof (LinuxSpecific));
+ if (!dev->arch_specific)
+ goto error_free_path;
+ arch_specific = LINUX_SPECIFIC (dev);
+ arch_specific->dmtype = NULL;
+#if USE_BLKID
+ arch_specific->probe = NULL;
+ arch_specific->topology = NULL;
+#endif
+
+ dev->open_count = 0;
+ dev->read_only = 0;
+ dev->external_mode = 0;
+ dev->dirty = 0;
+ dev->boot_dirty = 0;
+
+#ifdef ENABLE_DEVICE_MAPPER
+ dm_udev_set_sync_support(1);
+#endif
+
+ if (!_device_probe_type (dev))
+ goto error_free_arch_specific;
+
+ switch (dev->type) {
+ case PED_DEVICE_IDE:
+ if (!init_ide (dev))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_SCSI:
+ if (!init_scsi (dev))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_DAC960:
+ if (!init_generic (dev, _("DAC960 RAID controller")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_SX8:
+ if (!init_generic (dev, _("Promise SX8 SATA Device")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_AOE:
+ if (!init_generic (dev, _("ATA over Ethernet Device")))
+ goto error_free_arch_specific;
+ break;
+
+#if defined __s390__ || defined __s390x__
+ case PED_DEVICE_DASD:
+ if (!init_dasd (dev, _("IBM S390 DASD drive")))
+ goto error_free_arch_specific;
+ break;
+#endif
+
+ case PED_DEVICE_VIODASD:
+ if (!init_generic (dev, _("IBM iSeries Virtual DASD")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_CPQARRAY:
+ if (!init_generic (dev, _("Compaq Smart Array")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_NVME:
+ if (!init_nvme (dev))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_PMEM:
+ if (!init_generic (dev, _("NVDIMM Device")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_ATARAID:
+ if (!init_generic (dev, _("ATARAID Controller")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_I2O:
+ if (!init_generic (dev, _("I2O Controller")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_UBD:
+ if (!init_generic (dev, _("User-Mode Linux UBD")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_FILE:
+ if (!init_file (dev))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_LOOP:
+ if (!init_generic (dev, _("Loopback device")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_DM:
+ {
+ char* type;
+ if (arch_specific->dmtype == NULL
+ || asprintf(&type, _("Linux device-mapper (%s)"),
+ arch_specific->dmtype) == -1)
+ goto error_free_arch_specific;
+ bool ok = init_generic (dev, type);
+ free (type);
+ if (!ok)
+ goto error_free_arch_specific;
+ break;
+ }
+
+ case PED_DEVICE_XVD:
+ if (!init_generic (dev, _("Xen Virtual Block Device")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_UNKNOWN:
+ if (!init_generic (dev, _("Unknown")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_SDMMC:
+ if (!init_sdmmc (dev))
+ goto error_free_arch_specific;
+ break;
+ case PED_DEVICE_VIRTBLK:
+ if (!init_generic(dev, _("Virtio Block Device")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_MD:
+ if (!init_generic(dev, _("Linux Software RAID Array")))
+ goto error_free_arch_specific;
+ break;
+
+ case PED_DEVICE_RAM:
+ if (!init_generic (dev, _("RAM Drive")))
+ goto error_free_arch_specific;
+ break;
+
+ default:
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("ped_device_new() Unsupported device type"));
+ goto error_free_arch_specific;
+ }
+ return dev;
+
+error_free_arch_specific:
+ free (dev->arch_specific);
+error_free_path:
+ free (dev->path);
+error_free_dev:
+ free (dev);
+error:
+ return NULL;
+}
+
+static void
+linux_destroy (PedDevice* dev)
+{
+ LinuxSpecific *arch_specific = LINUX_SPECIFIC(dev);
+ void *p = arch_specific->dmtype;
+
+#if USE_BLKID
+ if (arch_specific->probe)
+ blkid_free_probe(arch_specific->probe);
+#endif
+ free (p);
+ free (dev->arch_specific);
+ free (dev->path);
+ free (dev->model);
+ free (dev);
+}
+
+static int
+linux_is_busy (PedDevice* dev)
+{
+ int i;
+ char* part_name;
+
+ if (_partition_is_mounted_by_path (dev->path))
+ return 1;
+
+ for (i = 0; i < 32; i++) {
+ int status;
+
+ part_name = _device_get_part_path (dev, i);
+ if (!part_name)
+ return 1;
+ status = _partition_is_mounted_by_path (part_name);
+ free (part_name);
+
+ if (status)
+ return 1;
+ }
+
+ return 0;
+}
+
+/* we need to flush the master device, and all the partition devices,
+ * because there is no coherency between the caches.
+ * We should only flush unmounted partition devices, because:
+ * - there is never a need to flush them (we're not doing IO there)
+ * - flushing a device that is mounted causes unnecessary IO, and can
+ * even screw journaling & friends up. Even cause oopsen!
+ */
+static void
+_flush_cache (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ int i;
+ int lpn = _device_get_partition_range(dev);
+
+ if (dev->read_only || dev->type == PED_DEVICE_RAM)
+ return;
+ dev->dirty = 0;
+
+ ioctl (arch_specific->fd, BLKFLSBUF);
+
+ for (i = 1; i < lpn; i++) {
+ char* name;
+ int fd;
+
+ name = _device_get_part_path (dev, i);
+ if (!name)
+ break;
+ if (!_partition_is_mounted_by_path (name)) {
+ fd = open (name, WR_MODE, 0);
+ if (fd > -1) {
+ ioctl (fd, BLKFLSBUF);
+retry:
+ if (fsync (fd) < 0 || close (fd) < 0)
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_RETRY +
+ PED_EXCEPTION_IGNORE,
+ _("Error fsyncing/closing %s: %s"),
+ name, strerror (errno))
+ == PED_EXCEPTION_RETRY)
+ goto retry;
+ }
+ }
+ free (name);
+ }
+}
+
+static int
+_device_open_ro (PedDevice* dev)
+{
+ int rc = _device_open (dev, RD_MODE);
+ if (rc)
+ dev->open_count++;
+ return rc;
+}
+
+static int
+linux_open (PedDevice* dev)
+{
+ return _device_open (dev, RW_MODE);
+}
+
+static int
+_device_open (PedDevice* dev, int flags)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+
+retry:
+ arch_specific->fd = open (dev->path, flags);
+
+ if (arch_specific->fd == -1) {
+ char* rw_error_msg = strerror (errno);
+
+ arch_specific->fd = open (dev->path, RD_MODE);
+
+ if (arch_specific->fd == -1) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("Error opening %s: %s"),
+ dev->path, strerror (errno))
+ != PED_EXCEPTION_RETRY) {
+ return 0;
+ } else {
+ goto retry;
+ }
+ } else {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("Unable to open %s read-write (%s). %s has "
+ "been opened read-only."),
+ dev->path, rw_error_msg, dev->path);
+ dev->read_only = 1;
+ }
+ } else {
+ dev->read_only = 0;
+ }
+
+ _flush_cache (dev);
+
+ return 1;
+}
+
+static int
+linux_refresh_open (PedDevice* dev)
+{
+ return 1;
+}
+
+static int
+linux_close (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+
+ if (dev->dirty)
+ _flush_cache (dev);
+retry:
+ if (fsync (arch_specific->fd) < 0 || close (arch_specific->fd) < 0)
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_RETRY + PED_EXCEPTION_IGNORE,
+ _("Error fsyncing/closing %s: %s"),
+ dev->path, strerror (errno))
+ == PED_EXCEPTION_RETRY)
+ goto retry;
+ return 1;
+}
+
+static int
+linux_refresh_close (PedDevice* dev)
+{
+ if (dev->dirty)
+ _flush_cache (dev);
+ return 1;
+}
+
+static int
+_device_close (PedDevice* dev)
+{
+ int rc = linux_close (dev);
+ if (dev->open_count > 0)
+ dev->open_count--;
+ return rc;
+}
+
+#if SIZEOF_OFF_T < 8
+
+static _syscall5(int,_llseek,
+ unsigned int, fd,
+ unsigned long, offset_high,
+ unsigned long, offset_low,
+ loff_t*, result,
+ unsigned int, origin)
+
+loff_t
+llseek (unsigned int fd, loff_t offset, unsigned int whence)
+{
+ loff_t result;
+ int retval;
+
+ retval = _llseek(fd,
+ ((unsigned long long)offset) >> 32,
+ ((unsigned long long)offset) & 0xffffffff,
+ &result,
+ whence);
+ return (retval==-1 ? (loff_t) retval : result);
+}
+
+#endif /* SIZEOF_OFF_T < 8 */
+
+static int
+_device_seek (const PedDevice* dev, PedSector sector)
+{
+ LinuxSpecific* arch_specific;
+
+ PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ arch_specific = LINUX_SPECIFIC (dev);
+
+#if SIZEOF_OFF_T < 8
+ if (sizeof (off_t) < 8) {
+ loff_t pos = (loff_t)(sector * dev->sector_size);
+ return llseek (arch_specific->fd, pos, SEEK_SET) == pos;
+ } else
+#endif
+ {
+ off_t pos = sector * dev->sector_size;
+ return lseek (arch_specific->fd, pos, SEEK_SET) == pos;
+ }
+}
+
+static int
+_read_lastoddsector (const PedDevice* dev, void* buffer)
+{
+ LinuxSpecific* arch_specific;
+ struct blkdev_ioctl_param ioctl_param;
+
+ PED_ASSERT(dev != NULL);
+ PED_ASSERT(buffer != NULL);
+
+ arch_specific = LINUX_SPECIFIC (dev);
+
+retry:
+ ioctl_param.block = 0; /* read the last sector */
+ ioctl_param.content_length = dev->sector_size;
+ ioctl_param.block_contents = buffer;
+
+ if (ioctl(arch_specific->fd, BLKGETLASTSECT, &ioctl_param) == -1) {
+ PedExceptionOption opt;
+ opt = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during read on %s"),
+ strerror (errno), dev->path);
+
+ if (opt == PED_EXCEPTION_CANCEL)
+ return 0;
+ if (opt == PED_EXCEPTION_RETRY)
+ goto retry;
+ }
+
+ return 1;
+}
+
+static int
+linux_read (const PedDevice* dev, void* buffer, PedSector start,
+ PedSector count)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ PedExceptionOption ex_status;
+ void* diobuf = NULL;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ if (_get_linux_version() < KERNEL_VERSION (2,6,0)) {
+ /* Kludge. This is necessary to read/write the last
+ block of an odd-sized disk, until Linux 2.5.x kernel fixes.
+ */
+ if (dev->type != PED_DEVICE_FILE && (dev->length & 1)
+ && start + count - 1 == dev->length - 1)
+ return ped_device_read (dev, buffer, start, count - 1)
+ && _read_lastoddsector (
+ dev, (char *) buffer + (count-1) * 512);
+ }
+ while (1) {
+ if (_device_seek (dev, start))
+ break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during seek for read on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+
+ size_t read_length = count * dev->sector_size;
+ if (posix_memalign (&diobuf, dev->sector_size, read_length) != 0)
+ return 0;
+
+ while (1) {
+ ssize_t status = read (arch_specific->fd, diobuf, read_length);
+ if (status > 0)
+ memcpy(buffer, diobuf, status);
+ if (status == (ssize_t) read_length)
+ break;
+ if (status > 0) {
+ read_length -= status;
+ buffer = (char *) buffer + status;
+ continue;
+ }
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ (status == 0
+ ? _("%0.0send of file while reading %s")
+ : _("%s during read on %s")),
+ strerror (errno),
+ dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ free(diobuf);
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_CANCEL:
+ free(diobuf);
+ return 0;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+
+ free (diobuf);
+
+ return 1;
+}
+
+static int
+_write_lastoddsector (PedDevice* dev, const void* buffer)
+{
+ LinuxSpecific* arch_specific;
+ struct blkdev_ioctl_param ioctl_param;
+
+ PED_ASSERT(dev != NULL);
+ PED_ASSERT(buffer != NULL);
+
+ arch_specific = LINUX_SPECIFIC (dev);
+
+retry:
+ ioctl_param.block = 0; /* write the last sector */
+ ioctl_param.content_length = dev->sector_size;
+ ioctl_param.block_contents = (void*) buffer;
+
+ if (ioctl(arch_specific->fd, BLKSETLASTSECT, &ioctl_param) == -1) {
+ PedExceptionOption opt;
+ opt = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (errno), dev->path);
+
+ if (opt == PED_EXCEPTION_CANCEL)
+ return 0;
+ if (opt == PED_EXCEPTION_RETRY)
+ goto retry;
+ }
+
+ return 1;
+}
+
+static int
+linux_write (PedDevice* dev, const void* buffer, PedSector start,
+ PedSector count)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ PedExceptionOption ex_status;
+ void* diobuf;
+ void* diobuf_start;
+
+ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ if (dev->read_only) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't write to %s, because it is opened read-only."),
+ dev->path)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ else
+ return 1;
+ }
+
+ if (_get_linux_version() < KERNEL_VERSION (2,6,0)) {
+ /* Kludge. This is necessary to read/write the last
+ block of an odd-sized disk, until Linux 2.5.x kernel fixes.
+ */
+ if (dev->type != PED_DEVICE_FILE && (dev->length & 1)
+ && start + count - 1 == dev->length - 1)
+ return ped_device_write (dev, buffer, start, count - 1)
+ && _write_lastoddsector (
+ dev, ((char*) buffer
+ + (count-1) * dev->sector_size));
+ }
+ while (1) {
+ if (_device_seek (dev, start))
+ break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during seek for write on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+
+#ifdef READ_ONLY
+ printf ("ped_device_write (\"%s\", %p, %d, %d)\n",
+ dev->path, buffer, (int) start, (int) count);
+#else
+ size_t write_length = count * dev->sector_size;
+ dev->dirty = 1;
+ if (posix_memalign(&diobuf, dev->sector_size, write_length) != 0)
+ return 0;
+ memcpy(diobuf, buffer, write_length);
+ diobuf_start = diobuf;
+ while (1) {
+ ssize_t status = write (arch_specific->fd, diobuf, write_length);
+ if (status == write_length) break;
+ if (status > 0) {
+ write_length -= status;
+ diobuf = (char *) diobuf + status;
+ continue;
+ }
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ free(diobuf_start);
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_CANCEL:
+ free(diobuf_start);
+ return 0;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+ free(diobuf_start);
+#endif /* !READ_ONLY */
+ return 1;
+}
+
+/* returns the number of sectors that are ok.
+ */
+static PedSector
+linux_check (PedDevice* dev, void* buffer, PedSector start, PedSector count)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ PedSector done = 0;
+ int status;
+ void* diobuf;
+
+ PED_ASSERT(dev != NULL);
+
+ if (!_device_seek (dev, start))
+ return 0;
+
+ if (posix_memalign(&diobuf, PED_SECTOR_SIZE_DEFAULT,
+ count * PED_SECTOR_SIZE_DEFAULT) != 0)
+ return 0;
+
+ for (done = 0; done < count; done += status / dev->sector_size) {
+ status = read (arch_specific->fd, diobuf,
+ (size_t) ((count-done) * dev->sector_size));
+ if (status > 0)
+ memcpy(buffer, diobuf, status);
+ if (status < 0)
+ break;
+ }
+ free(diobuf);
+
+ return done;
+}
+
+static int
+_do_fsync (PedDevice* dev)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ int status;
+ PedExceptionOption ex_status;
+
+ while (1) {
+ status = fsync (arch_specific->fd);
+ if (status >= 0) break;
+
+ ex_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
+ _("%s during write on %s"),
+ strerror (errno), dev->path);
+
+ switch (ex_status) {
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+
+ case PED_EXCEPTION_RETRY:
+ break;
+
+ case PED_EXCEPTION_UNHANDLED:
+ ped_exception_catch ();
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+ return 1;
+}
+
+static int
+linux_sync (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ if (dev->read_only)
+ return 1;
+ if (!_do_fsync (dev))
+ return 0;
+ _flush_cache (dev);
+ return 1;
+}
+
+static int
+linux_sync_fast (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ if (dev->read_only)
+ return 1;
+ if (!_do_fsync (dev))
+ return 0;
+ /* no cache flush... */
+ return 1;
+}
+
+static inline int
+_compare_digit_state (char ch, int need_digit)
+{
+ return !!isdigit (ch) == need_digit;
+}
+
+/* matches the regexp "[^0-9]+[0-9]+[^0-9]+[0-9]+$".
+ * Motivation: accept devices looking like /dev/rd/c0d0, but
+ * not looking like /dev/hda1 and /dev/rd/c0d0p1
+ */
+static int _GL_ATTRIBUTE_PURE
+_match_rd_device (const char* name)
+{
+ const char* pos;
+ int state;
+
+ /* exclude directory names from test */
+ pos = strrchr(name, '/') ?: name;
+
+ /* states:
+ * 0 non-digits
+ * 1 digits
+ * 2 non-digits
+ * 3 digits
+ */
+ for (state = 0; state < 4; state++) {
+ int want_digits = (state % 2 == 1);
+ do {
+ if (!*pos)
+ return 0;
+ if (!_compare_digit_state (*pos, want_digits))
+ return 0;
+ pos++;
+ } while (_compare_digit_state (*pos, want_digits));
+ }
+
+ return *pos == 0;
+}
+
+static int
+_probe_proc_partitions ()
+{
+ FILE* proc_part_file;
+ int major, minor, size;
+ char buf [512];
+ char part_name [256];
+ char dev_name [256];
+ int ok = 0;
+
+ proc_part_file = fopen ("/proc/partitions", "r");
+ if (!proc_part_file)
+ return 0;
+
+ if (fgets (buf, 256, proc_part_file) == NULL)
+ goto done;
+
+ if (fgets (buf, 256, proc_part_file) == NULL)
+ goto done;
+
+ while (fgets (buf, 512, proc_part_file)
+ && sscanf (buf, "%d %d %d %255s", &major, &minor, &size,
+ part_name) == 4) {
+ /* Heuristic for telling partitions and devices apart
+ * Probably needs to be improved
+ */
+ if (!_match_rd_device (part_name)
+ && isdigit (part_name [strlen (part_name) - 1]))
+ continue;
+
+ strcpy (dev_name, "/dev/");
+ strcat (dev_name, part_name);
+ _ped_device_probe (dev_name);
+ }
+
+ ok = 1;
+ done:
+ fclose (proc_part_file);
+ return ok;
+}
+
+struct _entry {
+ const char *name;
+ size_t len;
+};
+
+static int _GL_ATTRIBUTE_PURE
+_skip_entry (const char *name)
+{
+ struct _entry *i;
+ static struct _entry entries[] = {
+ { ".", sizeof (".") - 1 },
+ { "..", sizeof ("..") - 1 },
+ { "dm-", sizeof ("dm-") - 1 },
+ { "loop", sizeof ("loop") - 1 },
+ { "ram", sizeof ("ram") - 1 },
+ { "fd", sizeof ("fd") - 1 },
+ { 0, 0 },
+ };
+
+ for (i = entries; i->name != 0; i++) {
+ if (strncmp (name, i->name, i->len) == 0)
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+_probe_sys_block ()
+{
+ DIR *blockdir;
+ struct dirent *dirent;
+ char dev_name [256];
+ char *ptr;
+
+ if (!(blockdir = opendir ("/sys/block")))
+ return 0;
+ while ((dirent = readdir (blockdir))) {
+ if (_skip_entry (dirent->d_name))
+ continue;
+
+ if (strlen (dirent->d_name) > sizeof (dev_name) - 6)
+ continue; /* device name too long! */
+
+ strcpy (dev_name, "/dev/");
+ strcat (dev_name, dirent->d_name);
+ /* in /sys/block, '/'s are replaced with '!' */
+ for (ptr = dev_name; *ptr != '\0'; ptr++) {
+ if (*ptr == '!')
+ *ptr = '/';
+ }
+ _ped_device_probe (dev_name);
+ }
+
+ closedir (blockdir);
+ return 1;
+}
+
+static int
+_probe_standard_devices ()
+{
+ _ped_device_probe ("/dev/hda");
+ _ped_device_probe ("/dev/hdb");
+ _ped_device_probe ("/dev/hdc");
+ _ped_device_probe ("/dev/hdd");
+ _ped_device_probe ("/dev/hde");
+ _ped_device_probe ("/dev/hdf");
+ _ped_device_probe ("/dev/hdg");
+ _ped_device_probe ("/dev/hdh");
+
+ _ped_device_probe ("/dev/sda");
+ _ped_device_probe ("/dev/sdb");
+ _ped_device_probe ("/dev/sdc");
+ _ped_device_probe ("/dev/sdd");
+ _ped_device_probe ("/dev/sde");
+ _ped_device_probe ("/dev/sdf");
+
+ return 1;
+}
+
+static void
+linux_probe_all ()
+{
+ /* we should probe the standard devs too, even with /proc/partitions,
+ * because /proc/partitions might return devfs stuff, and we might not
+ * have devfs available
+ */
+ _probe_standard_devices ();
+
+#ifdef ENABLE_DEVICE_MAPPER
+ /* device-mapper devices aren't listed in /proc/partitions; or, if
+ * they are, they're listed as dm-X. So, instead of relying on that,
+ * we do our own checks.
+ */
+ _probe_dm_devices ();
+#endif
+
+ /* /sys/block is more reliable and consistent; fall back to using
+ * /proc/partitions if the former is unavailable, however.
+ */
+ if (!_probe_sys_block ())
+ _probe_proc_partitions ();
+}
+
+static char * _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2))
+zasprintf (const char *format, ...)
+{
+ va_list args;
+ char *resultp;
+ va_start (args, format);
+ int r = vasprintf (&resultp, format, args);
+ va_end (args);
+ return r < 0 ? NULL : resultp;
+}
+
+#ifdef ENABLE_DEVICE_MAPPER
+static char *
+dm_canonical_path (PedDevice const *dev)
+{
+ LinuxSpecific const *arch_specific = LINUX_SPECIFIC (dev);
+
+ /* Get map name from devicemapper */
+ struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
+ if (!task)
+ goto err;
+ if (!dm_task_set_major_minor (task, arch_specific->major,
+ arch_specific->minor, 0))
+ goto err;
+ if (!dm_task_run(task))
+ goto err;
+ char *dev_name = zasprintf ("/dev/mapper/%s", dm_task_get_name (task));
+ if (dev_name == NULL)
+ goto err;
+ dm_task_destroy (task);
+ return dev_name;
+err:
+ return NULL;
+}
+#endif
+
+static char*
+_device_get_part_path (PedDevice const *dev, int num)
+{
+ char *devpath;
+ size_t path_len;
+ char *result;
+#ifdef ENABLE_DEVICE_MAPPER
+ devpath = (dev->type == PED_DEVICE_DM
+ ? dm_canonical_path (dev) : dev->path);
+#else
+ devpath = dev->path;
+#endif
+ if (!devpath)
+ return NULL;
+
+ path_len = strlen (devpath);
+ /* Check for devfs-style /disc => /partN transformation
+ unconditionally; the system might be using udev with devfs rules,
+ and if not the test is harmless. */
+ if (5 < path_len && !strcmp (devpath + path_len - 5, "/disc")) {
+ /* replace /disc with /part%d */
+ result = zasprintf ("%.*s/part%d",
+ (int) (path_len - 5), devpath, num);
+ } else {
+ char const *p = (dev->type == PED_DEVICE_DAC960
+ || dev->type == PED_DEVICE_CPQARRAY
+ || dev->type == PED_DEVICE_ATARAID
+ || isdigit (devpath[path_len - 1])
+ ? "p" : "");
+ result = zasprintf ("%s%s%d", devpath, p, num);
+ }
+#ifdef ENABLE_DEVICE_MAPPER
+ if (dev->type == PED_DEVICE_DM)
+ free (devpath);
+#endif
+ return result;
+}
+
+static char*
+linux_partition_get_path (const PedPartition* part)
+{
+ /* loop label means use the whole disk */
+ if (strcmp (part->disk->type->name, "loop") == 0)
+ return xstrdup (part->disk->dev->path);
+ return _device_get_part_path (part->disk->dev, part->num);
+}
+
+static int
+_mount_table_search (const char* file_name, dev_t dev)
+{
+ struct stat part_stat;
+ char line[512];
+ char part_name[512];
+ FILE* file;
+
+ file = fopen (file_name, "r");
+ if (!file)
+ return 0;
+ while (fgets (line, 512, file)) {
+ if (sscanf (line, "%s", part_name) == 1
+ && stat (part_name, &part_stat) == 0) {
+ if (part_stat.st_rdev == dev) {
+ fclose (file);
+ return 1;
+ }
+ }
+ }
+ fclose (file);
+ return 0;
+}
+
+static int
+_partition_is_mounted_by_dev (dev_t dev)
+{
+ return _mount_table_search( "/proc/mounts", dev)
+ || _mount_table_search( "/proc/swaps", dev)
+ || _mount_table_search( "/etc/mtab", dev);
+}
+
+static int
+_partition_is_mounted_by_path (const char *path)
+{
+ struct stat part_stat;
+ if (stat (path, &part_stat) != 0)
+ return 0;
+ if (!S_ISBLK(part_stat.st_mode))
+ return 0;
+ return _partition_is_mounted_by_dev (part_stat.st_rdev);
+}
+
+/* If partition PART is mounted, or if we encounter an out-of-memory error
+ while trying to determine its status, return 1. Otherwise, return 0. */
+static int
+_partition_is_mounted (const PedPartition *part)
+{
+ if (!ped_partition_is_active (part))
+ return 0;
+ char *part_name = _device_get_part_path (part->disk->dev, part->num);
+ if (!part_name)
+ return 1;
+ int status = _partition_is_mounted_by_path (part_name);
+ free (part_name);
+ return !!status;
+}
+
+static int
+linux_partition_is_busy (const PedPartition* part)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (part != NULL);
+
+ if (strcmp (part->disk->type->name, "loop") == 0)
+ return linux_is_busy (part->disk->dev);
+ if (_partition_is_mounted (part))
+ return 1;
+ if (part->type == PED_PARTITION_EXTENDED) {
+ for (walk = part->part_list; walk; walk = walk->next) {
+ if (linux_partition_is_busy (walk))
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static int
+_blkpg_part_command (PedDevice* dev, struct blkpg_partition* part, int op)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (dev);
+ struct blkpg_ioctl_arg ioctl_arg;
+
+ ioctl_arg.op = op;
+ ioctl_arg.flags = 0;
+ ioctl_arg.datalen = sizeof (struct blkpg_partition);
+ ioctl_arg.data = (void*) part;
+
+ return ioctl (arch_specific->fd, BLKPG, &ioctl_arg) == 0;
+}
+
+static int
+_blkpg_add_partition (PedDisk* disk, const PedPartition *part)
+{
+ struct blkpg_partition linux_part;
+ const char* vol_name;
+ char* dev_name;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ if (ped_disk_type_check_feature (disk->type,
+ PED_DISK_TYPE_PARTITION_NAME))
+ vol_name = ped_partition_get_name (part);
+ else
+ vol_name = NULL;
+
+ dev_name = _device_get_part_path (disk->dev, part->num);
+ if (!dev_name)
+ return 0;
+
+ memset (&linux_part, 0, sizeof (linux_part));
+ linux_part.start = part->geom.start * disk->dev->sector_size;
+ /* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */
+ if (part->type & PED_PARTITION_EXTENDED) {
+ linux_part.length = 1;
+ if (disk->dev->sector_size == 512) {
+ if (linux_part.length == 1)
+ linux_part.length = 2;
+ PedPartition *walk;
+ /* if the second sector is claimed by a logical partition,
+ then there's just no room for lilo, so don't try to use it */
+ for (walk = part->part_list; walk; walk = walk->next) {
+ if (walk->geom.start == part->geom.start+1)
+ linux_part.length = 1;
+ }
+ }
+ linux_part.length *= disk->dev->sector_size;
+ }
+ else {
+ linux_part.length = part->geom.length * disk->dev->sector_size;
+ }
+ linux_part.pno = part->num;
+ strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
+ linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
+ if (vol_name) {
+ strncpy (linux_part.volname, vol_name, BLKPG_VOLNAMELTH-1);
+ linux_part.volname[BLKPG_VOLNAMELTH-1] = '\0';
+ }
+
+ free (dev_name);
+
+ if (!_blkpg_part_command (disk->dev, &linux_part,
+ BLKPG_ADD_PARTITION)) {
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+_blkpg_remove_partition (PedDisk* disk, int n)
+{
+ struct blkpg_partition linux_part;
+
+ memset (&linux_part, 0, sizeof (linux_part));
+ linux_part.pno = n;
+ return _blkpg_part_command (disk->dev, &linux_part,
+ BLKPG_DEL_PARTITION);
+}
+
+#ifdef BLKPG_RESIZE_PARTITION
+static int _blkpg_resize_partition (PedDisk* disk, const PedPartition *part)
+{
+ struct blkpg_partition linux_part;
+ char* dev_name;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ dev_name = _device_get_part_path (disk->dev, part->num);
+ if (!dev_name)
+ return 0;
+ memset (&linux_part, 0, sizeof (linux_part));
+ linux_part.start = part->geom.start * disk->dev->sector_size;
+ /* see fs/partitions/msdos.c:msdos_partition(): "leave room for LILO" */
+ if (part->type & PED_PARTITION_EXTENDED) {
+ if (disk->dev->sector_size == 512) {
+ linux_part.length = 2;
+ PedPartition *walk;
+ /* if the second sector is claimed by a logical partition,
+ then there's just no room for lilo, so don't try to use it */
+ for (walk = part->part_list; walk; walk = walk->next) {
+ if (walk->geom.start == part->geom.start+1)
+ linux_part.length = 1;
+ }
+ } else {
+ linux_part.length = 1;
+ }
+ linux_part.length *= disk->dev->sector_size;
+ }
+ else
+ linux_part.length = part->geom.length * disk->dev->sector_size;
+ linux_part.pno = part->num;
+ strncpy (linux_part.devname, dev_name, BLKPG_DEVNAMELTH-1);
+ linux_part.devname[BLKPG_DEVNAMELTH-1] = '\0';
+
+ free (dev_name);
+
+ if (!_blkpg_part_command (disk->dev, &linux_part,
+ BLKPG_RESIZE_PARTITION)) {
+ return ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Error informing the kernel about modifications to "
+ "partition %s -- %s. This means Linux won't know "
+ "about any changes you made to %s until you reboot "
+ "-- so you shouldn't mount it or use it in any way "
+ "before rebooting."),
+ linux_part.devname,
+ strerror (errno),
+ linux_part.devname)
+ == PED_EXCEPTION_IGNORE;
+ }
+
+ return 1;
+}
+#endif
+
+/* Read the integer from /sys/block/DEV_BASE/ENTRY and set *VAL
+ to that value, where DEV_BASE is the last component of DEV->path.
+ Upon success, return true. Otherwise, return false. */
+static bool
+_sysfs_int_entry_from_dev(PedDevice const* dev, const char *entry, int *val)
+{
+ char path[128];
+ int r = snprintf(path, sizeof(path), "/sys/block/%s/%s",
+ last_component(dev->path), entry);
+ if (r < 0 || r >= sizeof(path))
+ return false;
+
+ FILE *fp = fopen(path, "r");
+ if (!fp)
+ return false;
+
+ bool ok = fscanf(fp, "%d", val) == 1;
+ fclose(fp);
+
+ return ok;
+}
+
+/* Read the unsigned long long from /sys/block/DEV_BASE/PART_BASE/ENTRY
+ and set *VAL to that value, where DEV_BASE is the last component of path to
+ block device corresponding to PART and PART_BASE is the sysfs name of PART.
+ Upon success, return true. Otherwise, return false. */
+static bool
+_sysfs_ull_entry_from_part(PedPartition const* part, const char *entry,
+ unsigned long long *val)
+{
+ char path[128];
+ char *part_name = _device_get_part_path (part->disk->dev, part->num);
+ if (!part_name)
+ return false;
+
+ int r = snprintf(path, sizeof(path), "/sys/block/%s/%s/%s",
+ last_component(part->disk->dev->path),
+ last_component(part_name), entry);
+ free(part_name);
+ if (r < 0 || r >= sizeof(path))
+ return false;
+
+ FILE *fp = fopen(path, "r");
+ if (!fp)
+ return false;
+
+ bool ok = fscanf(fp, "%llu", val) == 1;
+ fclose(fp);
+
+ return ok;
+}
+
+
+/* Get the starting sector and length of a partition PART within a block device
+ Use blkpg if available, then check sysfs and then use HDIO_GETGEO and
+ BLKGETSIZE64 ioctls as fallback. Upon success, return true. Otherwise,
+ return false. */
+static bool
+_kernel_get_partition_start_and_length(PedPartition const *part,
+ unsigned long long *start,
+ unsigned long long *length)
+{
+ PED_ASSERT(part);
+ PED_ASSERT(start);
+ PED_ASSERT(length);
+
+ char *dev_name = _device_get_part_path (part->disk->dev, part->num);
+ if (!dev_name)
+ return false;
+
+ int ok = _sysfs_ull_entry_from_part (part, "start", start);
+ if (!ok) {
+ struct hd_geometry geom;
+ int dev_fd = open (dev_name, O_RDONLY);
+ if (dev_fd != -1 && ioctl (dev_fd, HDIO_GETGEO, &geom)) {
+ *start = geom.start;
+ close (dev_fd);
+ ok = true;
+ } else {
+ if (dev_fd != -1)
+ close(dev_fd);
+ free (dev_name);
+ return false;
+ }
+ }
+ *start = (*start * 512) / part->disk->dev->sector_size;
+ ok = _sysfs_ull_entry_from_part (part, "size", length);
+
+ int fd;
+ if (!ok) {
+ fd = open (dev_name, O_RDONLY);
+ if (fd != -1 && ioctl (fd, BLKGETSIZE64, length))
+ ok = true;
+ } else {
+ fd = -1;
+ *length *= 512;
+ }
+ *length /= part->disk->dev->sector_size;
+ if (fd != -1)
+ close (fd);
+
+ if (!ok)
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to determine the start and length of %s."),
+ dev_name);
+ free (dev_name);
+ return ok;
+}
+
+
+/*
+ * The number of partitions that a device can have depends on the kernel.
+ * If we don't find this value in /sys/block/DEV/ext_range, we will use our own
+ * value.
+ */
+static unsigned int
+_device_get_partition_range(PedDevice const* dev)
+{
+ int range;
+ if (dev->type == PED_DEVICE_DM)
+ return MAX_NUM_PARTS;
+ bool ok = _sysfs_int_entry_from_dev(dev, "ext_range", &range);
+
+ if (!ok)
+ return MAX_NUM_PARTS;
+ /* both 0 and 1 mean no partitions */
+ return range > 1 ? range : 0;
+}
+
+#ifdef ENABLE_DEVICE_MAPPER
+static int
+_dm_remove_partition(PedDisk* disk, int partno)
+{
+ int rc = 0;
+ uint32_t cookie = 0;
+ char *part_name = _device_get_part_path (disk->dev, partno);
+
+ int fd = open (part_name, O_RDONLY | O_EXCL);
+ if (fd == -1) {
+ if (errno == ENOENT)
+ errno = ENXIO; /* nothing to remove, device already doesn't exist */
+ goto err;
+ }
+ close (fd);
+ struct dm_task *task = dm_task_create(DM_DEVICE_REMOVE);
+ if (!task)
+ goto err;
+ dm_task_set_name (task, part_name);
+ dm_task_retry_remove(task);
+ if (!dm_task_set_cookie (task, &cookie, 0))
+ goto err;
+ rc = _dm_task_run_wait (task, cookie);
+ dm_task_update_nodes();
+ dm_task_destroy(task);
+err:
+ free (part_name);
+ return rc;
+}
+
+static bool
+_dm_get_partition_start_and_length(PedPartition const *part,
+ unsigned long long *start,
+ unsigned long long *length)
+{
+ struct dm_task* task = NULL;
+ int rc = 0;
+
+ if (!(task = dm_task_create(DM_DEVICE_TABLE)))
+ return 0;
+ char *path = _device_get_part_path (part->disk->dev, part->num);
+ PED_ASSERT(path);
+ /* libdevmapper likes to complain on stderr instead of quietly
+ returning ENOENT or ENXIO, so try to stat first */
+ struct stat st;
+ if (stat(path, &st))
+ goto err;
+ dm_task_set_name(task, path);
+ if (!dm_task_run(task))
+ goto err;
+
+ int major, minor;
+ char *params;
+ char *target_type;
+ dm_get_next_target(task, NULL, (uint64_t *)start, (uint64_t *)length, &target_type, &params);
+ if (sscanf (params, "%d:%d %Lu", &major, &minor, start) != 3)
+ goto err;
+ rc = 1;
+
+ /* device-mapper uses 512b units, make sure we return length and start in terms of the device's
+ * sector size.
+ */
+ *start /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
+ *length /= (part->disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
+err:
+ free (path);
+ dm_task_destroy(task);
+ return rc;
+}
+
+
+static int
+_dm_add_partition (PedDisk* disk, const PedPartition* part)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
+ char* params = NULL;
+ char* vol_name = NULL;
+ const char* dev_name = NULL;
+ char* vol_uuid = NULL;
+ const char* dev_uuid = NULL;
+ uint32_t cookie = 0;
+
+ /* Get map name from devicemapper */
+ struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
+ if (!task)
+ goto err;
+
+ if (!dm_task_set_major_minor (task, arch_specific->major,
+ arch_specific->minor, 0))
+ goto err;
+
+ if (!dm_task_run(task))
+ goto err;
+
+ dev_name = dm_task_get_name (task);
+ size_t name_len = strlen (dev_name);
+ vol_name = zasprintf ("%s%s%d",
+ dev_name,
+ isdigit (dev_name[name_len - 1]) ? "p" : "",
+ part->num);
+ if (vol_name == NULL)
+ goto err;
+
+ dev_uuid = dm_task_get_uuid (task);
+ if (dev_uuid && (strlen(dev_uuid) > 0)
+ && !(vol_uuid = zasprintf ("part%d-%s", part->num, dev_uuid)))
+ goto err;
+
+ /* Caution: dm_task_destroy frees dev_name. */
+ dm_task_destroy (task);
+ task = NULL;
+ /* device-mapper uses 512b units, not the device's sector size */
+ if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major,
+ arch_specific->minor,
+ part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT))))
+ goto err;
+
+ task = dm_task_create (DM_DEVICE_CREATE);
+ if (!task)
+ goto err;
+
+ dm_task_set_name (task, vol_name);
+ if (vol_uuid)
+ dm_task_set_uuid (task, vol_uuid);
+ /* device-mapper uses 512b units, not the device's sector size */
+ dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT),
+ "linear", params);
+ if (!dm_task_set_cookie (task, &cookie, 0))
+ goto err;
+ if (_dm_task_run_wait (task, cookie)) {
+ dm_task_update_nodes ();
+ dm_task_destroy (task);
+ free (params);
+ free (vol_uuid);
+ free (vol_name);
+ return 1;
+ } else {
+ _dm_remove_partition (disk, part->num);
+ }
+err:
+ dm_task_update_nodes();
+ if (task)
+ dm_task_destroy (task);
+ free (params);
+ free (vol_uuid);
+ free (vol_name);
+ return 0;
+}
+
+static int
+_dm_resize_partition (PedDisk* disk, const PedPartition* part)
+{
+ LinuxSpecific* arch_specific = LINUX_SPECIFIC (disk->dev);
+ char* params = NULL;
+ char* vol_name = NULL;
+ const char* dev_name = NULL;
+ uint32_t cookie = 0;
+ int rc = 0;
+
+ /* Get map name from devicemapper */
+ struct dm_task *task = dm_task_create (DM_DEVICE_INFO);
+ if (!task)
+ goto err;
+
+ if (!dm_task_set_major_minor (task, arch_specific->major,
+ arch_specific->minor, 0))
+ goto err;
+
+ if (!dm_task_run(task))
+ goto err;
+
+ dev_name = dm_task_get_name (task);
+ size_t name_len = strlen (dev_name);
+ vol_name = zasprintf ("%s%s%d",
+ dev_name,
+ isdigit (dev_name[name_len - 1]) ? "p" : "",
+ part->num);
+ if (vol_name == NULL)
+ goto err;
+
+ /* Caution: dm_task_destroy frees dev_name. */
+ dm_task_destroy (task);
+ task = NULL;
+
+ /* device-mapper uses 512b units, not the device's sector size */
+ if ( ! (params = zasprintf ("%d:%d %lld", arch_specific->major,
+ arch_specific->minor,
+ part->geom.start * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT))))
+ goto err;
+
+ task = dm_task_create (DM_DEVICE_RELOAD);
+ if (!task)
+ goto err;
+
+ dm_task_set_name (task, vol_name);
+ /* device-mapper uses 512b units, not the device's sector size */
+ dm_task_add_target (task, 0, part->geom.length * (disk->dev->sector_size / PED_SECTOR_SIZE_DEFAULT),
+ "linear", params);
+ /* NOTE: DM_DEVICE_RELOAD doesn't generate udev events, so no cookie is needed (it will freeze).
+ * DM_DEVICE_RESUME does, so get a cookie and synchronize with udev.
+ */
+ if (dm_task_run (task)) {
+ dm_task_destroy (task);
+ task = dm_task_create (DM_DEVICE_RESUME);
+ if (!task)
+ goto err;
+ dm_task_set_name (task, vol_name);
+ if (!dm_task_set_cookie (task, &cookie, 0))
+ goto err;
+ if (_dm_task_run_wait (task, cookie)) {
+ rc = 1;
+ }
+ }
+err:
+ dm_task_update_nodes();
+ if (task)
+ dm_task_destroy (task);
+ free (params);
+ free (vol_name);
+ return rc;
+}
+
+#endif
+
+/*
+ * Sync the partition table in two step process:
+ * 1. Remove all of the partitions from the kernel's tables, but do not attempt
+ * removal of any partition for which the corresponding ioctl call fails.
+ * 2. Add all the partitions that we hold in disk, throwing a warning
+ * if we cannot because step 1 failed to remove it and it is not being
+ * added back with the same start and length.
+ *
+ * To achieve this two step process we must calculate the minimum number of
+ * maximum possible partitions between what linux supports and what the label
+ * type supports. EX:
+ *
+ * number=MIN(max_parts_supported_in_linux,max_parts_supported_in_msdos_tables)
+ */
+static int
+_disk_sync_part_table (PedDisk* disk)
+{
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+ int lpn, lpn2;
+ unsigned int part_range = _device_get_partition_range(disk->dev);
+ int (*add_partition)(PedDisk* disk, const PedPartition *part);
+ int (*resize_partition)(PedDisk* disk, const PedPartition *part);
+ int (*remove_partition)(PedDisk* disk, int partno);
+ bool (*get_partition_start_and_length)(PedPartition const *part,
+ unsigned long long *start,
+ unsigned long long *length);
+
+
+#ifdef ENABLE_DEVICE_MAPPER
+ if (disk->dev->type == PED_DEVICE_DM) {
+ add_partition = _dm_add_partition;
+ remove_partition = _dm_remove_partition;
+ resize_partition = _dm_resize_partition;
+ get_partition_start_and_length = _dm_get_partition_start_and_length;
+ } else
+#endif
+ {
+ add_partition = _blkpg_add_partition;
+ remove_partition = _blkpg_remove_partition;
+#ifdef BLKPG_RESIZE_PARTITION
+ resize_partition = _blkpg_resize_partition;
+#else
+ resize_partition = NULL;
+#endif
+ get_partition_start_and_length = _kernel_get_partition_start_and_length;
+ }
+
+ /* lpn = largest partition number.
+ * for remove pass, use greater of device or label limit */
+ if (ped_disk_get_max_supported_partition_count(disk, &lpn))
+ lpn = PED_MAX(lpn, part_range);
+ else
+ lpn = part_range;
+ /* for add pass, use lesser of device or label limit */
+ if (ped_disk_get_max_supported_partition_count(disk, &lpn2))
+ lpn2 = PED_MIN(lpn2, part_range);
+ else
+ lpn2 = part_range;
+ /* Its not possible to support largest_partnum < 0.
+ * largest_partnum == 0 would mean does not support partitions.
+ * */
+ if (lpn < 1)
+ return 0;
+ int ret = 0;
+ int *ok = calloc (lpn, sizeof *ok);
+ if (!ok)
+ return 0;
+ int *errnums = ped_malloc(sizeof(int) * lpn);
+ if (!errnums)
+ goto cleanup;
+
+ int i;
+ /* remove old partitions first */
+ for (i = 1; i <= lpn; i++) {
+ PedPartition *part = ped_disk_get_partition (disk, i);
+ if (part) {
+ unsigned long long length;
+ unsigned long long start;
+ /* get start and length of existing partition */
+ if (get_partition_start_and_length(part,
+ &start, &length)
+ && start == part->geom.start
+ && (length == part->geom.length
+ || (resize_partition && part->num < lpn2)))
+ {
+ /* partition is unchanged, or will be resized so nothing to do */
+ ok[i - 1] = 1;
+ continue;
+ }
+ }
+ /* Attempt to remove the partition, retrying for
+ up to max_sleep_seconds upon any failure due to EBUSY. */
+ unsigned int sleep_microseconds = 10000;
+ unsigned int max_sleep_seconds = 1;
+ unsigned int n_sleep = (max_sleep_seconds
+ * 1000000 / sleep_microseconds);
+ do {
+ ok[i - 1] = remove_partition (disk, i);
+ errnums[i - 1] = errno;
+ if (ok[i - 1] || errnums[i - 1] != EBUSY)
+ break;
+ usleep (sleep_microseconds);
+ } while (n_sleep--);
+ if (!ok[i - 1] && errnums[i - 1] == ENXIO)
+ ok[i - 1] = 1; /* it already doesn't exist */
+ }
+ lpn = lpn2;
+ /* don't actually add partitions for loop */
+ if (strcmp (disk->type->name, "loop") == 0)
+ lpn = 0;
+ for (i = 1; i <= lpn; i++) {
+ PedPartition *part = ped_disk_get_partition (disk, i);
+ if (!part)
+ continue;
+ unsigned long long length;
+ unsigned long long start;
+ /* get start and length of existing partition */
+ if (get_partition_start_and_length(part,
+ &start, &length)
+ && start == part->geom.start)
+ {
+ if (length == part->geom.length) {
+ ok[i - 1] = 1;
+ /* partition is unchanged, so nothing to do */
+ continue;
+ }
+ if (resize_partition
+ && start == part->geom.start)
+ {
+ /* try to resize */
+ if (resize_partition (disk, part)) {
+ ok[i - 1] = 1;
+ continue;
+ }
+ }
+ }
+ /* add the (possibly modified or new) partition */
+ if (!add_partition (disk, part)) {
+ ok[i - 1] = 0;
+ errnums[i - 1] = errno;
+ }
+ }
+
+ char *bad_part_list = NULL;
+ /* now warn about any errors */
+ for (i = 1; i <= lpn; i++) {
+ if (ok[i - 1] || errnums[i - 1] == ENXIO)
+ continue;
+ if (bad_part_list == NULL) {
+ bad_part_list = malloc (lpn * 5);
+ if (!bad_part_list)
+ goto cleanup;
+ bad_part_list[0] = 0;
+ }
+ sprintf (bad_part_list + strlen (bad_part_list), "%d, ", i);
+ }
+ if (bad_part_list == NULL)
+ ret = 1;
+ else {
+ bad_part_list[strlen (bad_part_list) - 2] = 0;
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Partition(s) %s on %s have been written, but we have "
+ "been unable to inform the kernel of the change, "
+ "probably because it/they are in use. As a result, "
+ "the old partition(s) will remain in use. You "
+ "should reboot now before making further changes."),
+ bad_part_list, disk->dev->path) == PED_EXCEPTION_IGNORE)
+ ret = 1;
+ free (bad_part_list);
+ }
+ cleanup:
+ free (errnums);
+ free (ok);
+ return ret;
+}
+
+static int
+_have_blkpg ()
+{
+ static int have_blkpg = -1;
+ int kver;
+
+ if (have_blkpg != -1)
+ return have_blkpg;
+
+ kver = _get_linux_version();
+ return have_blkpg = kver >= KERNEL_VERSION (2,4,0) ? 1 : 0;
+}
+
+/* Return nonzero upon success, 0 if something fails. */
+static int
+linux_disk_commit (PedDisk* disk)
+{
+ if (disk->dev->type != PED_DEVICE_FILE) {
+
+ /* We now require BLKPG support. If this assertion fails,
+ please write to the mailing list describing your system.
+ Assuming it's never triggered, ...
+ FIXME: remove this assertion in 2012. */
+ assert (_have_blkpg ());
+
+ if (!_disk_sync_part_table (disk))
+ return 0;
+ }
+
+ return 1;
+}
+
+#if USE_BLKID
+static PedAlignment*
+linux_get_minimum_alignment(const PedDevice *dev)
+{
+ blkid_topology tp = LINUX_SPECIFIC(dev)->topology;
+ if (!tp)
+ return NULL;
+
+ if (blkid_topology_get_minimum_io_size(tp) == 0)
+ return ped_alignment_new(
+ blkid_topology_get_alignment_offset(tp) /
+ dev->sector_size,
+ dev->phys_sector_size / dev->sector_size);
+
+ return ped_alignment_new(
+ blkid_topology_get_alignment_offset(tp) / dev->sector_size,
+ blkid_topology_get_minimum_io_size(tp) / dev->sector_size);
+}
+
+static PedAlignment*
+linux_get_optimum_alignment(const PedDevice *dev)
+{
+ blkid_topology tp = LINUX_SPECIFIC(dev)->topology;
+ if (!tp)
+ return NULL;
+
+ /* When PED_DEFAULT_ALIGNMENT is divisible by the *_io_size or
+ there are no *_io_size values, use the PED_DEFAULT_ALIGNMENT
+ If one or the other will not divide evenly, fall through to
+ previous logic. */
+ unsigned long optimal_io = blkid_topology_get_optimal_io_size(tp);
+ unsigned long minimum_io = blkid_topology_get_minimum_io_size(tp);
+ if (
+ (!optimal_io && !minimum_io)
+ || (optimal_io && PED_DEFAULT_ALIGNMENT % optimal_io == 0
+ && minimum_io && PED_DEFAULT_ALIGNMENT % minimum_io == 0)
+ || (!minimum_io && optimal_io
+ && PED_DEFAULT_ALIGNMENT % optimal_io == 0)
+ || (!optimal_io && minimum_io
+ && PED_DEFAULT_ALIGNMENT % minimum_io == 0)
+ )
+ return ped_alignment_new(
+ blkid_topology_get_alignment_offset(tp) / dev->sector_size,
+ PED_DEFAULT_ALIGNMENT / dev->sector_size);
+
+ /* If optimal_io_size is 0 and we don't meet the other criteria
+ for using the device.c default, return the minimum alignment. */
+ if (blkid_topology_get_optimal_io_size(tp) == 0)
+ return linux_get_minimum_alignment(dev);
+
+ return ped_alignment_new(
+ blkid_topology_get_alignment_offset(tp) / dev->sector_size,
+ blkid_topology_get_optimal_io_size(tp) / dev->sector_size);
+}
+#endif
+
+#if defined __s390__ || defined __s390x__
+/**
+ * Check whether this device could be a DASD
+ *
+ * The device probing yields PED_DEVICE_DASD for native DASD transport
+ * If the block device uses a different transport (e.g. virtio)
+ * a simplified heuristic (assuming a model 3390 with 4K sectors)
+ * is applied (only) on s390x systems for this check.
+ *
+ * \return 1 if the geometry indicates this could be a DASD
+ * and 0 otherwise
+ */
+static int
+_ped_device_like_dasd(const PedDevice *dev)
+{
+ return (dev->type == PED_DEVICE_DASD)
+ || (dev->hw_geom.heads == 15
+ && dev->hw_geom.sectors == 12
+ && (dev->hw_geom.cylinders
+ * dev->hw_geom.heads
+ * dev->hw_geom.sectors
+ * dev->phys_sector_size
+ == dev->length * dev->sector_size));
+}
+
+
+
+static PedAlignment*
+s390_get_minimum_alignment(const PedDevice *dev)
+{
+#if USE_BLKID
+ return linux_get_minimum_alignment(dev);
+#else
+ return ped_alignment_new(0,
+ dev->phys_sector_size
+ / dev->sector_size);
+#endif
+}
+
+static PedAlignment*
+s390_get_optimum_alignment(const PedDevice *dev)
+{
+ /* DASD needs to use minimum alignment */
+ if (_ped_device_like_dasd(dev))
+ return s390_get_minimum_alignment(dev);
+#if USE_BLKID
+ return linux_get_optimum_alignment(dev);
+#else
+ return NULL;
+#endif
+}
+#endif
+
+static PedDeviceArchOps linux_dev_ops = {
+ _new: linux_new,
+ destroy: linux_destroy,
+ is_busy: linux_is_busy,
+ open: linux_open,
+ refresh_open: linux_refresh_open,
+ close: linux_close,
+ refresh_close: linux_refresh_close,
+ read: linux_read,
+ write: linux_write,
+ check: linux_check,
+ sync: linux_sync,
+ sync_fast: linux_sync_fast,
+ probe_all: linux_probe_all,
+#if defined __s390__ || defined __s390x__
+ get_minimum_alignment: s390_get_minimum_alignment,
+ get_optimum_alignment: s390_get_optimum_alignment,
+#elif USE_BLKID
+ get_minimum_alignment: linux_get_minimum_alignment,
+ get_optimum_alignment: linux_get_optimum_alignment,
+#endif
+};
+
+PedDiskArchOps linux_disk_ops = {
+ partition_get_path: linux_partition_get_path,
+ partition_is_busy: linux_partition_is_busy,
+ disk_commit: linux_disk_commit
+};
+
+PedArchitecture ped_linux_arch = {
+ dev_ops: &linux_dev_ops,
+ disk_ops: &linux_disk_ops
+};
diff --git a/libparted/arch/linux.h b/libparted/arch/linux.h
new file mode 100644
index 0000000..3d4e5fa
--- /dev/null
+++ b/libparted/arch/linux.h
@@ -0,0 +1,44 @@
+/* libparted - a library for manipulating disk partitions
+ Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_ARCH_LINUX_H_INCLUDED
+#define PED_ARCH_LINUX_H_INCLUDED
+
+#if HAVE_BLKID_BLKID_H
+# include <blkid/blkid.h>
+#endif
+
+#define LINUX_SPECIFIC(dev) ((LinuxSpecific*) (dev)->arch_specific)
+
+typedef struct _LinuxSpecific LinuxSpecific;
+
+struct _LinuxSpecific {
+ int fd;
+ int major;
+ int minor;
+ char* dmtype; /**< device map target type */
+#if defined __s390__ || defined __s390x__
+ unsigned int real_sector_size;
+ unsigned int devno;
+#endif
+#if USE_BLKID
+ blkid_probe probe;
+ blkid_topology topology;
+#endif
+};
+
+#endif /* PED_ARCH_LINUX_H_INCLUDED */
diff --git a/libparted/architecture.c b/libparted/architecture.c
new file mode 100644
index 0000000..4020f98
--- /dev/null
+++ b/libparted/architecture.c
@@ -0,0 +1,43 @@
+ /*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "architecture.h"
+
+const PedArchitecture* ped_architecture;
+
+void
+ped_set_architecture ()
+{
+ /* Set just once */
+ if (ped_architecture)
+ return;
+
+#ifdef linux
+ extern PedArchitecture ped_linux_arch;
+ const PedArchitecture* arch = &ped_linux_arch;
+#elif defined(__BEOS__)
+ extern PedArchitecture ped_beos_arch;
+ const PedArchitecture* arch = &ped_beos_arch;
+#else
+ extern PedArchitecture ped_gnu_arch;
+ const PedArchitecture* arch = &ped_gnu_arch;
+#endif
+
+ ped_architecture = arch;
+}
diff --git a/libparted/architecture.h b/libparted/architecture.h
new file mode 100644
index 0000000..f058f74
--- /dev/null
+++ b/libparted/architecture.h
@@ -0,0 +1,38 @@
+ /*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * WARNING: This shouldn't be exported to the API
+ */
+
+#ifndef _LIBPARTED_ARCH_H_INCLUDED
+#define _LIBPARTED_ARCH_H_INCLUDED
+
+#include <parted/disk.h>
+
+struct _PedArchitecture {
+ PedDiskArchOps* disk_ops;
+ PedDeviceArchOps* dev_ops;
+};
+typedef struct _PedArchitecture PedArchitecture;
+
+extern const PedArchitecture* ped_architecture;
+
+extern void ped_set_architecture ();
+
+#endif /* _LIBPARTED_ARCH_H_INCLUDED */
diff --git a/libparted/cs/constraint.c b/libparted/cs/constraint.c
new file mode 100644
index 0000000..146c318
--- /dev/null
+++ b/libparted/cs/constraint.c
@@ -0,0 +1,538 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \addtogroup PedConstraint
+ *
+ * \brief Constraint solver interface.
+ *
+ * Constraints are used to communicate restrictions on operations Constraints
+ * are restrictions on the location and alignment of the start and end of a
+ * partition, and the minimum and maximum size.
+ *
+ * Constraints are closed under intersection (for the proof see the source
+ * code). For background information see the Chinese Remainder Theorem.
+ *
+ * This interface consists of construction constraints, finding the intersection
+ * of constraints, and finding solutions to constraints.
+ *
+ * The constraint solver allows you to specify constraints on where a partition
+ * or file system (or any PedGeometry) may be placed/resized/etc. For example,
+ * you might want to make sure that a file system is at least 10 Gb, or that it
+ * starts at the beginning of new cylinder.
+ *
+ * The constraint solver in this file unifies solver in geom.c (which allows you
+ * to specify constraints on ranges) and natmath.c (which allows you to specify
+ * alignment constraints).
+ *
+ * @{
+ */
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <assert.h>
+
+/**
+ * Initializes a pre-allocated piece of memory to contain a constraint
+ * with the supplied default values.
+ *
+ * \return \c 0 on failure.
+ */
+int
+ped_constraint_init (
+ PedConstraint* constraint,
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size)
+{
+ PED_ASSERT (constraint != NULL);
+ PED_ASSERT (start_range != NULL);
+ PED_ASSERT (end_range != NULL);
+ PED_ASSERT (min_size > 0);
+ PED_ASSERT (max_size > 0);
+
+ constraint->start_align = ped_alignment_duplicate (start_align);
+ constraint->end_align = ped_alignment_duplicate (end_align);
+ constraint->start_range = ped_geometry_duplicate (start_range);
+ constraint->end_range = ped_geometry_duplicate (end_range);
+ constraint->min_size = min_size;
+ constraint->max_size = max_size;
+
+ return 1;
+}
+
+/**
+ * Convenience wrapper for ped_constraint_init().
+ *
+ * Allocates a new piece of memory and initializes the constraint.
+ *
+ * \return \c NULL on failure.
+ */
+PedConstraint*
+ped_constraint_new (
+ const PedAlignment* start_align,
+ const PedAlignment* end_align,
+ const PedGeometry* start_range,
+ const PedGeometry* end_range,
+ PedSector min_size,
+ PedSector max_size)
+{
+ PedConstraint* constraint;
+
+ constraint = (PedConstraint*) ped_malloc (sizeof (PedConstraint));
+ if (!constraint)
+ goto error;
+ if (!ped_constraint_init (constraint, start_align, end_align,
+ start_range, end_range, min_size, max_size))
+ goto error_free_constraint;
+ return constraint;
+
+error_free_constraint:
+ free (constraint);
+error:
+ return NULL;
+}
+
+/**
+ * Return a constraint that requires a region to be entirely contained inside
+ * \p max, and to entirely contain \p min.
+ *
+ * \return \c NULL on failure.
+ */
+PedConstraint*
+ped_constraint_new_from_min_max (
+ const PedGeometry* min,
+ const PedGeometry* max)
+{
+ PedGeometry start_range;
+ PedGeometry end_range;
+
+ PED_ASSERT (min != NULL);
+ PED_ASSERT (max != NULL);
+ PED_ASSERT (ped_geometry_test_inside (max, min));
+
+ ped_geometry_init (&start_range, min->dev, max->start,
+ min->start - max->start + 1);
+ ped_geometry_init (&end_range, min->dev, min->end,
+ max->end - min->end + 1);
+
+ return ped_constraint_new (
+ ped_alignment_any, ped_alignment_any,
+ &start_range, &end_range,
+ min->length, max->length);
+}
+
+/**
+ * Return a constraint that requires a region to entirely contain \p min.
+ *
+ * \return \c NULL on failure.
+ */
+PedConstraint*
+ped_constraint_new_from_min (const PedGeometry* min)
+{
+ PedGeometry full_dev;
+
+ PED_ASSERT (min != NULL);
+
+ ped_geometry_init (&full_dev, min->dev, 0, min->dev->length);
+ return ped_constraint_new_from_min_max (min, &full_dev);
+}
+
+/**
+ * Return a constraint that requires a region to be entirely contained inside
+ * \p max.
+ *
+ * \return \c NULL on failure.
+ */
+PedConstraint*
+ped_constraint_new_from_max (const PedGeometry* max)
+{
+ PED_ASSERT (max != NULL);
+
+ return ped_constraint_new (
+ ped_alignment_any, ped_alignment_any,
+ max, max, 1, max->length);
+}
+
+/**
+ * Duplicate a constraint.
+ *
+ * \return \c NULL on failure.
+ */
+PedConstraint*
+ped_constraint_duplicate (const PedConstraint* constraint)
+{
+ PED_ASSERT (constraint != NULL);
+
+ return ped_constraint_new (
+ constraint->start_align,
+ constraint->end_align,
+ constraint->start_range,
+ constraint->end_range,
+ constraint->min_size,
+ constraint->max_size);
+}
+
+/**
+ * Return a constraint that requires a region to satisfy both \p a and \p b.
+ *
+ * Moreover, any region satisfying \p a and \p b will also satisfy the returned
+ * constraint.
+ *
+ * \return \c NULL if no solution could be found (note that \c NULL is a valid
+ * PedConstraint).
+ */
+PedConstraint*
+ped_constraint_intersect (const PedConstraint* a, const PedConstraint* b)
+{
+ PedAlignment* start_align;
+ PedAlignment* end_align;
+ PedGeometry* start_range;
+ PedGeometry* end_range;
+ PedSector min_size;
+ PedSector max_size;
+ PedConstraint* constraint;
+
+ if (!a || !b)
+ return NULL;
+
+ start_align = ped_alignment_intersect (a->start_align, b->start_align);
+ if (!start_align)
+ goto empty;
+ end_align = ped_alignment_intersect (a->end_align, b->end_align);
+ if (!end_align)
+ goto empty_destroy_start_align;
+ start_range = ped_geometry_intersect (a->start_range, b->start_range);
+ if (!start_range)
+ goto empty_destroy_end_align;
+ end_range = ped_geometry_intersect (a->end_range, b->end_range);
+ if (!end_range)
+ goto empty_destroy_start_range;
+ min_size = PED_MAX (a->min_size, b->min_size);
+ max_size = PED_MIN (a->max_size, b->max_size);
+
+ constraint = ped_constraint_new (
+ start_align, end_align, start_range, end_range,
+ min_size, max_size);
+ if (!constraint)
+ goto empty_destroy_end_range;
+
+ ped_alignment_destroy (start_align);
+ ped_alignment_destroy (end_align);
+ ped_geometry_destroy (start_range);
+ ped_geometry_destroy (end_range);
+ return constraint;
+
+empty_destroy_end_range:
+ ped_geometry_destroy (end_range);
+empty_destroy_start_range:
+ ped_geometry_destroy (start_range);
+empty_destroy_end_align:
+ ped_alignment_destroy (end_align);
+empty_destroy_start_align:
+ ped_alignment_destroy (start_align);
+empty:
+ return NULL;
+}
+
+/**
+ * Release the memory allocated for a PedConstraint constructed with
+ * ped_constraint_init().
+ */
+void
+ped_constraint_done (PedConstraint* constraint)
+{
+ PED_ASSERT (constraint != NULL);
+
+ ped_alignment_destroy (constraint->start_align);
+ ped_alignment_destroy (constraint->end_align);
+ ped_geometry_destroy (constraint->start_range);
+ ped_geometry_destroy (constraint->end_range);
+}
+
+/**
+ * Release the memory allocated for a PedConstraint constructed with
+ * ped_constraint_new().
+ */
+void
+ped_constraint_destroy (PedConstraint* constraint)
+{
+ if (constraint) {
+ ped_constraint_done (constraint);
+ free (constraint);
+ }
+}
+
+/*
+ * Return the region within which the start must lie
+ * in order to satisfy a constriant. It takes into account
+ * constraint->start_range, constraint->min_size and constraint->max_size.
+ * All sectors in this range that also satisfy alignment requirements have
+ * an end, such that the (start, end) satisfy the constraint.
+ */
+static PedGeometry*
+_constraint_get_canonical_start_range (const PedConstraint* constraint)
+{
+ PedSector first_end_soln;
+ PedSector last_end_soln;
+ PedSector min_start;
+ PedSector max_start;
+ PedGeometry start_min_max_range;
+
+ if (constraint->min_size > constraint->max_size)
+ return NULL;
+
+ first_end_soln = ped_alignment_align_down (
+ constraint->end_align, constraint->end_range,
+ constraint->end_range->start);
+ last_end_soln = ped_alignment_align_up (
+ constraint->end_align, constraint->end_range,
+ constraint->end_range->end);
+ if (first_end_soln == -1 || last_end_soln == -1
+ || first_end_soln > last_end_soln
+ || last_end_soln < constraint->min_size)
+ return NULL;
+
+ min_start = first_end_soln - constraint->max_size + 1;
+ if (min_start < 0)
+ min_start = 0;
+ max_start = last_end_soln - constraint->min_size + 1;
+ if (max_start < 0)
+ return NULL;
+
+ ped_geometry_init (
+ &start_min_max_range, constraint->start_range->dev,
+ min_start, max_start - min_start + 1);
+
+ return ped_geometry_intersect (&start_min_max_range,
+ constraint->start_range);
+}
+
+/*
+ * Return the nearest start that will have at least one other end that
+ * together satisfy the constraint.
+ */
+static PedSector
+_constraint_get_nearest_start_soln (const PedConstraint* constraint,
+ PedSector start)
+{
+ PedGeometry* start_range;
+ PedSector result;
+
+ start_range = _constraint_get_canonical_start_range (constraint);
+ if (!start_range)
+ return -1;
+ result = ped_alignment_align_nearest (
+ constraint->start_align, start_range, start);
+ ped_geometry_destroy (start_range);
+ return result;
+}
+
+/*
+ * Given a constraint and a start ("half of the solution"), find the
+ * range of all possible ends, such that all (start, end) are solutions
+ * to constraint (subject to additional alignment requirements).
+ */
+static PedGeometry*
+_constraint_get_end_range (const PedConstraint* constraint, PedSector start)
+{
+ PedDevice* dev = constraint->end_range->dev;
+ PedSector first_min_max_end;
+ PedSector last_min_max_end;
+ PedGeometry end_min_max_range;
+
+ if (start + constraint->min_size - 1 > dev->length - 1)
+ return NULL;
+
+ first_min_max_end = start + constraint->min_size - 1;
+ last_min_max_end = start + constraint->max_size - 1;
+ if (last_min_max_end > dev->length - 1)
+ last_min_max_end = dev->length - 1;
+
+ ped_geometry_init (&end_min_max_range, dev,
+ first_min_max_end,
+ last_min_max_end - first_min_max_end + 1);
+
+ return ped_geometry_intersect (&end_min_max_range,
+ constraint->end_range);
+}
+
+/*
+ * Given "constraint" and "start", find the end that is nearest to
+ * "end", such that ("start", the end) together form a solution to
+ * "constraint".
+ */
+static PedSector
+_constraint_get_nearest_end_soln (const PedConstraint* constraint,
+ PedSector start, PedSector end)
+{
+ PedGeometry* end_range;
+ PedSector result;
+
+ end_range = _constraint_get_end_range (constraint, start);
+ if (!end_range)
+ return -1;
+
+ result = ped_alignment_align_nearest (constraint->end_align, end_range,
+ end);
+ ped_geometry_destroy (end_range);
+ return result;
+}
+
+/**
+ * Return the nearest region to \p geom that satisfy a \p constraint.
+ *
+ * Note that "nearest" is somewhat ambiguous. This function makes
+ * no guarantees about how this ambiguity is resovled.
+ *
+ * \return PedGeometry, or NULL when a \p constrain cannot be satisfied
+ */
+PedGeometry*
+ped_constraint_solve_nearest (
+ const PedConstraint* constraint, const PedGeometry* geom)
+{
+ PedSector start;
+ PedSector end;
+ PedGeometry* result;
+
+ if (constraint == NULL)
+ return NULL;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (constraint->start_range->dev == geom->dev);
+
+ start = _constraint_get_nearest_start_soln (constraint, geom->start);
+ if (start == -1)
+ return NULL;
+ end = _constraint_get_nearest_end_soln (constraint, start, geom->end);
+ if (end == -1)
+ return NULL;
+
+ result = ped_geometry_new (geom->dev, start, end - start + 1);
+ if (!result)
+ return NULL;
+ PED_ASSERT (ped_constraint_is_solution (constraint, result));
+ return result;
+}
+
+/**
+ * Find the largest region that satisfies a constraint.
+ *
+ * There might be more than one solution. This function makes no
+ * guarantees about which solution it will choose in this case.
+ */
+PedGeometry*
+ped_constraint_solve_max (const PedConstraint* constraint)
+{
+ PedDevice* dev;
+ PedGeometry full_dev;
+
+ if (!constraint)
+ return NULL;
+ dev = constraint->start_range->dev;
+ ped_geometry_init (&full_dev, dev, 0, dev->length);
+ return ped_constraint_solve_nearest (constraint, &full_dev);
+}
+
+/**
+ * Check whether \p geom satisfies the given constraint.
+ *
+ * \return \c 1 if it does.
+ **/
+int
+ped_constraint_is_solution (const PedConstraint* constraint,
+ const PedGeometry* geom)
+{
+ PED_ASSERT (constraint != NULL);
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_alignment_is_aligned (constraint->start_align, NULL,
+ geom->start))
+ return 0;
+ if (!ped_alignment_is_aligned (constraint->end_align, NULL, geom->end))
+ return 0;
+ if (!ped_geometry_test_sector_inside (constraint->start_range,
+ geom->start))
+ return 0;
+ if (!ped_geometry_test_sector_inside (constraint->end_range, geom->end))
+ return 0;
+ if (geom->length < constraint->min_size)
+ return 0;
+ if (geom->length > constraint->max_size)
+ return 0;
+ return 1;
+}
+
+/**
+ * Return a constraint that any region on the given device will satisfy.
+ */
+PedConstraint*
+ped_constraint_any (const PedDevice* dev)
+{
+ PedGeometry full_dev;
+
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length))
+ return NULL;
+
+ return ped_constraint_new (
+ ped_alignment_any,
+ ped_alignment_any,
+ &full_dev,
+ &full_dev,
+ 1,
+ dev->length);
+}
+
+/**
+ * Return a constraint that only the given region will satisfy.
+ */
+PedConstraint*
+ped_constraint_exact (const PedGeometry* geom)
+{
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry start_sector;
+ PedGeometry end_sector;
+ int ok;
+
+ /* With grain size of 0, it always succeeds. */
+ ok = ped_alignment_init (&start_align, geom->start, 0);
+ assert (ok);
+ ok = ped_alignment_init (&end_align, geom->end, 0);
+ assert (ok);
+
+ ok = ped_geometry_init (&start_sector, geom->dev, geom->start, 1);
+ if (!ok)
+ return NULL;
+ ok = ped_geometry_init (&end_sector, geom->dev, geom->end, 1);
+ if (!ok)
+ return NULL;
+
+ return ped_constraint_new (&start_align, &end_align,
+ &start_sector, &end_sector, 1,
+ geom->dev->length);
+}
+
+/**
+ * @}
+ */
diff --git a/libparted/cs/geom.c b/libparted/cs/geom.c
new file mode 100644
index 0000000..99280ac
--- /dev/null
+++ b/libparted/cs/geom.c
@@ -0,0 +1,487 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file geom.c */
+
+
+/**
+ * \addtogroup PedGeometry
+ *
+ * \brief PedGeometry represents a continuous region on a device. All addressing
+ * through a PedGeometry object is in terms of the start of the continuous
+ * region.
+ *
+ * The following conditions are always true on a PedGeometry object manipulated
+ * with the GNU Parted API:
+ *
+ * - <tt>start + length - 1 == end</tt>
+ * - <tt>length > 0</tt>
+ * - <tt>start >= 0</tt>
+ * - <tt>end < dev->length</tt>
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+/**
+ * Initialize the previously allocated PedGeometry \p geom.
+ */
+int
+ped_geometry_init (PedGeometry* geom, const PedDevice* dev,
+ PedSector start, PedSector length)
+{
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (dev != NULL);
+
+ geom->dev = (PedDevice*) dev;
+ return ped_geometry_set (geom, start, length);
+}
+
+/**
+ * Create a new PedGeometry object on \p disk, starting at \p start with a
+ * size of \p length sectors.
+ *
+ * \return NULL on failure.
+ */
+PedGeometry*
+ped_geometry_new (const PedDevice* dev, PedSector start, PedSector length)
+{
+ PedGeometry* geom;
+
+ PED_ASSERT (dev != NULL);
+
+ geom = (PedGeometry*) ped_malloc (sizeof (PedGeometry));
+ if (!geom)
+ goto error;
+ if (!ped_geometry_init (geom, dev, start, length))
+ goto error_free_geom;
+ return geom;
+
+error_free_geom:
+ free (geom);
+error:
+ return NULL;
+}
+
+/**
+ * Duplicate a PedGeometry object.
+ *
+ * This function constructs a PedGeometry object that is an identical but
+ * independent copy of \p geom. Both the input, \p geom, and the output
+ * should be destroyed with ped_geometry_destroy() when they are no
+ * longer needed.
+ *
+ * \return NULL on failure.
+ */
+PedGeometry*
+ped_geometry_duplicate (const PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+ return ped_geometry_new (geom->dev, geom->start, geom->length);
+}
+
+/**
+ * Return a PedGeometry object that refers to the intersection of
+ * \p a and \p b.
+ *
+ * This function constructs a PedGeometry object that describes the
+ * region that is common to both a and b. If there is no such common
+ * region, it returns NULL. (This situation is not treated as an
+ * error by much of GNU Parted.)
+ */
+PedGeometry*
+ped_geometry_intersect (const PedGeometry* a, const PedGeometry* b)
+{
+ PedSector start;
+ PedSector end;
+
+ if (!a || !b || a->dev != b->dev)
+ return NULL;
+
+ start = PED_MAX (a->start, b->start);
+ end = PED_MIN (a->end, b->end);
+ if (start > end)
+ return NULL;
+
+ return ped_geometry_new (a->dev, start, end - start + 1);
+}
+
+/**
+ * Destroy a PedGeometry object.
+ */
+void
+ped_geometry_destroy (PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+
+ free (geom);
+}
+
+/**
+ * Assign a new \p start, \p end (implicitly) and \p length to \p geom.
+ *
+ * \p geom->end is calculated from \p start and \p length.
+ */
+int
+ped_geometry_set (PedGeometry* geom, PedSector start, PedSector length)
+{
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (geom->dev != NULL);
+ PED_ASSERT (start >= 0);
+
+ if (length < 1) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't have the end before the start!"
+ " (start sector=%jd length=%jd)"), start, length);
+ return 0;
+ }
+
+ geom->start = start;
+ geom->length = length;
+ geom->end = start + length - 1;
+
+ return 1;
+}
+
+/**
+ * Assign a new start to \p geom without changing \p geom->end.
+ *
+ * \p geom->length is updated accordingly.
+ */
+int
+ped_geometry_set_start (PedGeometry* geom, PedSector start)
+{
+ return ped_geometry_set (geom, start, geom->end - start + 1);
+}
+
+/**
+ * Assign a new end to \p geom without changing \p geom->start.
+ *
+ * \p geom->length is updated accordingly.
+ */
+int
+ped_geometry_set_end (PedGeometry* geom, PedSector end)
+{
+ return ped_geometry_set (geom, geom->start, end - geom->start + 1);
+}
+/**
+ * Test if \p a overlaps with \p b.
+ *
+ * That is, they lie on the same physical device, and they share
+ * the same physical region at least partially.
+ *
+ * \return 1 if \p a and \p b overlap.
+ */
+int
+ped_geometry_test_overlap (const PedGeometry* a, const PedGeometry* b)
+{
+ PED_ASSERT (a != NULL);
+ PED_ASSERT (b != NULL);
+
+ if (a->dev != b->dev)
+ return 0;
+
+ if (a->start < b->start)
+ return a->end >= b->start;
+ else
+ return b->end >= a->start;
+}
+
+/**
+ * Tests if \p b lies completely within \p a. That is, they lie on the same
+ * physical device, and all of the \p b's region is contained inside
+ * \p a's.
+ *
+ * \return 1 if the region \p b describes is contained entirely inside \p a
+*/
+int
+ped_geometry_test_inside (const PedGeometry* a, const PedGeometry* b)
+{
+ PED_ASSERT (a != NULL);
+ PED_ASSERT (b != NULL);
+
+ if (a->dev != b->dev)
+ return 0;
+
+ return b->start >= a->start && b->end <= a->end;
+}
+
+/**
+ * Tests if \a a and \p b refer to the same physical region.
+ *
+ * \return 1 if \p a and \p b describe the same regions
+ *
+ */
+int
+ped_geometry_test_equal (const PedGeometry* a, const PedGeometry* b)
+{
+ PED_ASSERT (a != NULL);
+ PED_ASSERT (b != NULL);
+
+ return a->dev == b->dev
+ && a->start == b->start
+ && a->end == b->end;
+}
+
+/**
+ * Tests if \p sector is inside \p geom.
+ *
+ * \return 1 if sector lies within the \p region that \p geom describes
+ */
+int
+ped_geometry_test_sector_inside (const PedGeometry* geom, PedSector sector)
+{
+ PED_ASSERT (geom != NULL);
+
+ return sector >= geom->start && sector <= geom->end;
+}
+
+/**
+ * Reads data from the region represented by \p geom. \p offset is the
+ * location from within the region, not from the start of the disk.
+ * \p count sectors are read into \p buffer.
+ * This is essentially equivalent to:
+ * \code
+ * ped_device_read (geom->disk->dev, buffer, geom->start + offset, count)
+ * \endcode
+ *
+ * \throws PED_EXCEPTION_ERROR when attempting to read sectors outside of
+ * partition
+ *
+ * \return 0 on failure
+ */
+int
+ped_geometry_read (const PedGeometry* geom, void* buffer, PedSector offset,
+ PedSector count)
+{
+ PedSector real_start;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (buffer != NULL);
+ PED_ASSERT (offset >= 0);
+ PED_ASSERT (count >= 0);
+
+ real_start = geom->start + offset;
+
+ if (real_start + count - 1 > geom->end)
+ return 0;
+
+ if (!ped_device_read (geom->dev, buffer, real_start, count))
+ return 0;
+ return 1;
+}
+
+/* Like ped_device_read, but read into malloc'd storage. */
+int
+ped_geometry_read_alloc (const PedGeometry* geom, void** buffer,
+ PedSector offset, PedSector count)
+{
+ char *buf = ped_malloc (count * geom->dev->sector_size);
+ if (buf == NULL)
+ return 0;
+ int ok = ped_geometry_read (geom, buf, offset, count);
+ if (!ok) {
+ free (buf);
+ buf = NULL;
+ }
+
+ *buffer = buf;
+ return ok;
+}
+
+/**
+ * Flushes the cache on \p geom.
+ *
+ * This function flushes all write-behind caches that might be holding
+ * writes made by ped_geometry_write() to \p geom. It is slow, because
+ * it guarantees cache coherency among all relevant caches.
+ *
+ * \return 0 on failure
+ */
+int
+ped_geometry_sync (PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+ return ped_device_sync (geom->dev);
+}
+
+/**
+ * Flushes the cache on \p geom.
+ *
+ * This function flushes all write-behind caches that might be holding writes
+ * made by ped_geometry_write() to \p geom. It does NOT ensure cache coherency
+ * with other caches that cache data in the region described by \p geom.
+ * If you need cache coherency, use ped_geometry_sync() instead.
+ *
+ * \return 0 on failure
+ */
+int
+ped_geometry_sync_fast (PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+ return ped_device_sync_fast (geom->dev);
+}
+
+/**
+ * Writes data into the region represented by \p geom. \p offset is the
+ * location from within the region, not from the start of the disk.
+ * \p count sectors are written.
+ *
+ * \return 0 on failure
+ */
+int
+ped_geometry_write (PedGeometry* geom, const void* buffer, PedSector offset,
+ PedSector count)
+{
+ int exception_status;
+ PedSector real_start;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (buffer != NULL);
+ PED_ASSERT (offset >= 0);
+ PED_ASSERT (count >= 0);
+
+ real_start = geom->start + offset;
+
+ if (real_start + count - 1 > geom->end) {
+ exception_status = ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Attempt to write sectors %ld-%ld outside of "
+ "partition on %s."),
+ (long) offset, (long) (offset + count - 1),
+ geom->dev->path);
+ return exception_status == PED_EXCEPTION_IGNORE;
+ }
+
+ if (!ped_device_write (geom->dev, buffer, real_start, count))
+ return 0;
+ return 1;
+}
+
+/**
+ * Checks for physical disk errors. \todo use ped_device_check()
+ *
+ * Checks a region for physical defects on \p geom. \p buffer is used
+ * for temporary storage for ped_geometry_check(), and has an undefined
+ * value. \p buffer is \p buffer_size sectors long.
+ * The region checked starts at \p offset sectors inside the
+ * region represented by \p geom, and is \p count sectors long.
+ * \p granularity specificies how sectors should be grouped
+ * together. The first bad sector to be returned will always be in
+ * the form:
+ * <tt>offset + n * granularity</tt>
+ *
+ * \return the first bad sector, or 0 if there were no physical errors
+ */
+PedSector
+ped_geometry_check (PedGeometry* geom, void* buffer, PedSector buffer_size,
+ PedSector offset, PedSector granularity, PedSector count,
+ PedTimer* timer)
+{
+ PedSector group;
+ PedSector i;
+ PedSector read_len;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (buffer != NULL);
+
+ ped_timer_reset (timer);
+ ped_timer_set_state_name (timer, _("checking for bad blocks"));
+
+retry:
+ ped_exception_fetch_all();
+ for (group = offset; group < offset + count; group += buffer_size) {
+ ped_timer_update (timer, 1.0 * (group - offset) / count);
+ read_len = PED_MIN (buffer_size, offset + count - group);
+ if (!ped_geometry_read (geom, buffer, group, read_len))
+ goto found_error;
+ }
+ ped_exception_leave_all();
+ ped_timer_update (timer, 1.0);
+ return 0;
+
+found_error:
+ ped_exception_catch();
+ for (i = group; i + granularity < group + count; i += granularity) {
+ if (!ped_geometry_read (geom, buffer, i, granularity)) {
+ ped_exception_catch();
+ ped_exception_leave_all();
+ return i;
+ }
+ }
+ ped_exception_leave_all();
+ goto retry; /* weird: failure on group read, but not individually */
+}
+
+/**
+ * This function takes a \p sector inside the region described by src, and
+ * returns that sector's address inside dst. This means that
+ *
+ * \code
+ * ped_geometry_read (dst, buf, ped_geometry_map(dst, src, sector), 1)
+ * \endcode
+ *
+ * does the same thing as
+ *
+ * \code
+ * ped_geometry_read (src, buf, sector, 1)
+ * \endcode
+ *
+ * Clearly, this will only work if \p src and \p dst overlap.
+ *
+ * \return -1 if \p sector is not within \p dst's space,
+ * or \p sector's address inside \p dst
+ *
+ */
+PedSector
+ped_geometry_map (const PedGeometry* dst, const PedGeometry* src,
+ PedSector sector)
+{
+ PedSector result;
+
+ PED_ASSERT (dst != NULL);
+ PED_ASSERT (src != NULL);
+
+ if (!ped_geometry_test_sector_inside (src, sector))
+ return -1;
+ if (dst->dev != src->dev)
+ return -1;
+
+ result = src->start + sector - dst->start;
+ if (result < 0 || result > dst->length)
+ return -1;
+
+ return result;
+}
+
+/** @} */
diff --git a/libparted/cs/natmath.c b/libparted/cs/natmath.c
new file mode 100644
index 0000000..ea53afc
--- /dev/null
+++ b/libparted/cs/natmath.c
@@ -0,0 +1,481 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * \file natmath.c
+ */
+
+/**
+ * \addtogroup PedAlignment
+ *
+ * \brief Alignment constraint model.
+ *
+ * This part of libparted models alignment constraints.
+ *
+ * @{
+ */
+
+#include <config.h>
+#include <stdlib.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/natmath.h>
+
+/* Arrrghhh! Why doesn't C have tuples? */
+typedef struct {
+ PedSector gcd; /* "converges" to the gcd */
+ PedSector x;
+ PedSector y;
+} EuclidTriple;
+
+static const PedAlignment _any = {
+ offset: 0,
+ grain_size: 1
+};
+
+const PedAlignment* ped_alignment_any = &_any;
+const PedAlignment* ped_alignment_none = NULL;
+
+/* This function returns "a mod b", the way C should have done it!
+ * Mathematicians prefer -3 mod 4 to be 3. Reason: division by N
+ * is all about adding or subtracting N, and we like our remainders
+ * to be between 0 and N - 1.
+ */
+static PedSector
+abs_mod (PedSector a, PedSector b)
+{
+ if (a < 0)
+ return a % b + b;
+ else
+ return a % b;
+}
+
+/* Rounds a number down to the closest number that is a multiple of
+ * grain_size.
+ */
+PedSector
+ped_round_down_to (PedSector sector, PedSector grain_size)
+{
+ return sector - abs_mod (sector, grain_size);
+}
+
+/* Rounds a number up to the closest number that is a multiple of
+ * grain_size.
+ */
+PedSector
+ped_round_up_to (PedSector sector, PedSector grain_size)
+{
+ if (sector % grain_size)
+ return ped_round_down_to (sector, grain_size) + grain_size;
+ else
+ return sector;
+}
+
+/* Rounds a number to the closest number that is a multiple of grain_size. */
+PedSector
+ped_round_to_nearest (PedSector sector, PedSector grain_size)
+{
+ if (sector % grain_size > grain_size/2)
+ return ped_round_up_to (sector, grain_size);
+ else
+ return ped_round_down_to (sector, grain_size);
+}
+
+/* This function returns the largest number that divides both a and b.
+ * It uses the ancient Euclidean algorithm.
+ */
+PedSector
+ped_greatest_common_divisor (PedSector a, PedSector b)
+{
+ PED_ASSERT (a >= 0);
+ PED_ASSERT (b >= 0);
+
+ /* Put the arguments in the "right" format. (Recursive calls made by
+ * this function are always in the right format.)
+ */
+ if (b > a)
+ return ped_greatest_common_divisor (b, a);
+
+ if (b)
+ return ped_greatest_common_divisor (b, a % b);
+ else
+ return a;
+}
+
+/**
+ * Initialize a preallocated piece of memory for an alignment object
+ * (used by PedConstraint).
+ *
+ * The object will represent all sectors \e s for which the equation
+ * <tt>s = offset + X * grain_size</tt> holds.
+ */
+int
+ped_alignment_init (PedAlignment* align, PedSector offset, PedSector grain_size)
+{
+ PED_ASSERT (align != NULL);
+
+ if (grain_size < 0)
+ return 0;
+
+ if (grain_size)
+ align->offset = abs_mod (offset, grain_size);
+ else
+ align->offset = offset;
+ align->grain_size = grain_size;
+
+ return 1;
+}
+
+/**
+ * Return an alignment object (used by PedConstraint), representing all
+ * PedSector's that are of the form <tt>offset + X * grain_size</tt>.
+ */
+PedAlignment*
+ped_alignment_new (PedSector offset, PedSector grain_size)
+{
+ PedAlignment* align;
+
+ align = (PedAlignment*) ped_malloc (sizeof (PedAlignment));
+ if (!align)
+ goto error;
+
+ if (!ped_alignment_init (align, offset, grain_size))
+ goto error_free_align;
+
+ return align;
+
+error_free_align:
+ free (align);
+error:
+ return NULL;
+}
+
+/**
+ * Free up memory associated with \p align.
+ */
+void
+ped_alignment_destroy (PedAlignment* align)
+{
+ free (align);
+}
+
+/**
+ * Return a duplicate of \p align.
+ */
+PedAlignment*
+ped_alignment_duplicate (const PedAlignment* align)
+{
+ if (!align)
+ return NULL;
+ return ped_alignment_new (align->offset, align->grain_size);
+}
+
+/* the extended Euclid algorithm.
+ *
+ * input:
+ * a and b, a > b
+ *
+ * output:
+ * gcd, x and y, such that:
+ *
+ * gcd = greatest common divisor of a and b
+ * gcd = x*a + y*b
+ */
+static EuclidTriple _GL_ATTRIBUTE_PURE
+extended_euclid (int a, int b)
+{
+ EuclidTriple result;
+ EuclidTriple tmp;
+
+ if (b == 0) {
+ result.gcd = a;
+ result.x = 1;
+ result.y = 0;
+ return result;
+ }
+
+ tmp = extended_euclid (b, a % b);
+ result.gcd = tmp.gcd;
+ result.x = tmp.y;
+ result.y = tmp.x - (a/b) * tmp.y;
+ return result;
+}
+
+/**
+ * This function computes a PedAlignment object that describes the
+ * intersection of two alignments. That is, a sector satisfies the
+ * new alignment object if and only if it satisfies both of the original
+ * ones. (See ped_alignment_is_aligned() for the meaning of "satisfies")
+ *
+ * Apart from the trivial cases (where one or both of the alignment objects
+ * constraints have no sectors that satisfy them), this is what we're trying to
+ * do:
+ * - two input constraints: \p a and \p b.
+ * - the new grain_size is going to be the lowest common multiple of
+ * \p a->grain_size and \p b->grain_size
+ * - hard part - solve the simultaneous equations, for offset, where offset,
+ * X and Y are variables. (Note: offset can be obtained from either X or Y,
+ * by substituing into either equation)
+ *
+ * \code
+ * offset = \p a->offset + X * \p a->grain_size (1)
+ * offset = \p b->offset + Y * \p b->grain_size (2)
+ * \endcode
+ *
+ * or, abbreviated:
+ *
+ * \code
+ * o = Ao + X*Ag (1)
+ * o = Bo + Y*Bg (2)
+ *
+ * => Ao + X*Ag = Bo + Y*Bg (1) = (2)
+ * X*Ag - Y*Bg = Bo - Ao (3)
+ * \endcode
+ *
+ * As it turns out, there only exists a solution if (Bo - Ao) is a multiple
+ * of the GCD of Ag and Bg. Reason: all linear combinations of Ag and Bg are
+ * multiples of the GCD.
+ *
+ * Proof:
+ *
+ * \code
+ * A * Ag + B * Bg
+ * = A * (\p a * gcd) + B * (\p b * gcd)
+ * = gcd * (A * \p a + B * \p b)
+ * \endcode
+ *
+ * gcd is a factor of the linear combination. QED
+ *
+ * Anyway, \p a * Ag + \p b * Bg = gcd can be solved (for \p a, \p b and gcd)
+ * with Euclid's extended algorithm. Then, we just multiply through by
+ * (Bo - Ao) / gcd to get (3).
+ *
+ * i.e.
+ * \code
+ * A * Ag + B * Bg = gcd
+ * A*(Bo-Ao)/gcd * Ag + B(Bo-Ao)/gcd * Bg = gcd * (Bo-Ao)/gcd
+ * X*Ag - Y*Bg = Bo - Ao (3)
+ *
+ * X = A*(Bo-Ao)/gcd
+ * Y = - B*(Bo-Ao)/gcd
+ * \endcode
+ *
+ * then:
+ * \code
+ * o = Ao + X*Ag (1)
+ * = Ao + A*(Bo-Ao)/gcd*Ag
+ * o = Bo + Y*Bg (2)
+ * = Bo - B*(Bo-Ao)/gcd*Ag
+ * \endcode
+ *
+ * Thanks go to Nathan Hurst (njh@hawthorn.csse.monash.edu.au) for figuring
+ * this algorithm out :-)
+ *
+ * \note Returned \c NULL is a valid PedAlignment object, and can be used
+ for ped_alignment_*() function.
+ *
+ * \return a PedAlignment on success, \c NULL on failure
+ */
+PedAlignment*
+ped_alignment_intersect (const PedAlignment* a, const PedAlignment* b)
+{
+ PedSector new_grain_size;
+ PedSector new_offset;
+ PedSector delta_on_gcd;
+ EuclidTriple gcd_factors;
+
+
+ if (!a || !b)
+ return NULL;
+
+ /*PED_DEBUG (0x10, "intersecting alignments (%d,%d) and (%d,%d)",
+ a->offset, a->grain_size, b->offset, b->grain_size);
+ */
+
+ if (a->grain_size < b->grain_size) {
+ const PedAlignment* tmp;
+ tmp = a; a = b; b = tmp;
+ }
+
+ /* weird/trivial case: where the solution space for "a" or "b" is
+ * either empty or contains exactly one solution
+ */
+ if (a->grain_size == 0 && b->grain_size == 0) {
+ if (a->offset == b->offset)
+ return ped_alignment_duplicate (a);
+ else
+ return NULL;
+ }
+
+ /* general case */
+ gcd_factors = extended_euclid (a->grain_size, b->grain_size);
+
+ delta_on_gcd = (b->offset - a->offset) / gcd_factors.gcd;
+ new_offset = a->offset + gcd_factors.x * delta_on_gcd * a->grain_size;
+ new_grain_size = a->grain_size * b->grain_size / gcd_factors.gcd;
+
+ /* inconsistency => no solution */
+ if (new_offset
+ != b->offset - gcd_factors.y * delta_on_gcd * b->grain_size)
+ return NULL;
+
+ return ped_alignment_new (new_offset, new_grain_size);
+}
+
+/* This function returns the sector closest to "sector" that lies inside
+ * geom and satisfies the alignment constraint.
+ */
+static PedSector _GL_ATTRIBUTE_PURE
+_closest_inside_geometry (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+{
+ PED_ASSERT (align != NULL);
+
+ if (!align->grain_size) {
+ if (ped_alignment_is_aligned (align, geom, sector)
+ && (!geom || ped_geometry_test_sector_inside (geom,
+ sector)))
+ return sector;
+ else
+ return -1;
+ }
+
+ if (sector < geom->start)
+ sector += ped_round_up_to (geom->start - sector,
+ align->grain_size);
+ if (sector > geom->end)
+ sector -= ped_round_up_to (sector - geom->end,
+ align->grain_size);
+
+ if (!ped_geometry_test_sector_inside (geom, sector))
+ return -1;
+ return sector;
+}
+
+/**
+ * This function returns the closest sector to \p sector that lies inside
+ * \p geom that satisfies the given alignment constraint \p align. It prefers
+ * sectors that are beyond \p sector (are not smaller than \p sector),
+ * but does not guarantee that this.
+ *
+ * \return a PedSector on success, \c -1 on failure
+ */
+PedSector
+ped_alignment_align_up (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+{
+ PedSector result;
+
+ PED_ASSERT (align != NULL);
+
+ if (!align->grain_size)
+ result = align->offset;
+ else
+ result = ped_round_up_to (sector - align->offset,
+ align->grain_size)
+ + align->offset;
+
+ if (geom)
+ result = _closest_inside_geometry (align, geom, result);
+ return result;
+}
+
+/**
+ * This function returns the closest sector to \p sector that lies inside
+ * \p geom that satisfies the given alignment constraint \p align. It prefers
+ * sectors that are before \p sector (are not larger than \p sector),
+ * but does not guarantee that this.
+ *
+ * \return a PedSector on success, \c -1 on failure
+ */
+PedSector
+ped_alignment_align_down (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+{
+ PedSector result;
+
+ PED_ASSERT (align != NULL);
+
+ if (!align->grain_size)
+ result = align->offset;
+ else
+ result = ped_round_down_to (sector - align->offset,
+ align->grain_size)
+ + align->offset;
+
+ if (geom)
+ result = _closest_inside_geometry (align, geom, result);
+ return result;
+}
+
+/* Returns either a or b, depending on which is closest to "sector". */
+static PedSector
+closest (PedSector sector, PedSector a, PedSector b)
+{
+ if (a == -1)
+ return b;
+ if (b == -1)
+ return a;
+
+ if (llabs (sector - a) < llabs (sector - b))
+ return a;
+ else
+ return b;
+}
+
+/**
+ * This function returns the sector that is closest to \p sector,
+ * satisfies the \p align constraint and lies inside \p geom.
+ *
+ * \return a PedSector on success, \c -1 on failure
+ */
+PedSector
+ped_alignment_align_nearest (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+{
+ PED_ASSERT (align != NULL);
+
+ return closest (sector, ped_alignment_align_up (align, geom, sector),
+ ped_alignment_align_down (align, geom, sector));
+}
+
+/**
+ * This function returns 1 if \p sector satisfies the alignment
+ * constraint \p align and lies inside \p geom.
+ *
+ * \return \c 1 on success, \c 0 on failure
+ */
+int
+ped_alignment_is_aligned (const PedAlignment* align, const PedGeometry* geom,
+ PedSector sector)
+{
+ if (!align)
+ return 0;
+
+ if (geom && !ped_geometry_test_sector_inside (geom, sector))
+ return 0;
+
+ if (align->grain_size)
+ return (sector - align->offset) % align->grain_size == 0;
+ else
+ return sector == align->offset;
+}
+
+/**
+ * @}
+ */
diff --git a/libparted/debug.c b/libparted/debug.c
new file mode 100644
index 0000000..9a348bd
--- /dev/null
+++ b/libparted/debug.c
@@ -0,0 +1,115 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#ifdef DEBUG
+
+#if HAVE_BACKTRACE
+#include <execinfo.h>
+#endif
+
+static void default_handler ( const int level, const char* file, int line,
+ const char* function, const char* msg );
+static PedDebugHandler* debug_handler = &default_handler;
+
+
+/**
+ * Default debug handler.
+ * Will print all information to stderr.
+ */
+static void default_handler ( const int level, const char* file, int line,
+ const char* function, const char* msg )
+{
+ fprintf ( stderr, "[%d] %s:%d (%s): %s\n",
+ level, file, line, function, msg );
+}
+
+/**
+ * Send a debug message.
+ * Do not call this directly -- use PED_DEBUG() instead.
+ *
+ * level log level, 0 ~= "print definitely"
+ */
+void ped_debug ( const int level, const char* file, int line,
+ const char* function, const char* msg, ... )
+{
+ va_list arg_list;
+ char* msg_concat = ped_malloc(8192);
+
+ va_start ( arg_list, msg );
+ vsnprintf ( msg_concat, 8192, msg, arg_list );
+ va_end ( arg_list );
+
+ debug_handler ( level, file, line, function, msg_concat );
+
+ free ( msg_concat );
+}
+
+/*
+ * handler debug handler; NULL for default handler
+ */
+void ped_debug_set_handler ( PedDebugHandler* handler )
+{
+ debug_handler = ( handler ? handler : default_handler );
+}
+
+/*
+ * Check an assertion.
+ * Do not call this directly -- use PED_ASSERT() instead.
+ */
+void ped_assert (const char* cond_text,
+ const char* file, int line, const char* function)
+{
+#if HAVE_BACKTRACE
+ /* Print backtrace stack */
+ void *stack[20];
+ char **strings, **string;
+ int size = backtrace(stack, 20);
+ strings = backtrace_symbols(stack, size);
+
+ if (strings) {
+ printf(_("Backtrace has %d calls on stack:\n"), size);
+
+ for (string = strings; size > 0; size--, string++)
+ printf(" %d: %s\n", size, *string);
+
+ free(strings);
+ }
+#endif
+
+ /* Throw the exception */
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Assertion (%s) at %s:%d in function %s() failed."),
+ cond_text, file, line, function);
+ abort ();
+}
+
+#endif /* DEBUG */
diff --git a/libparted/device.c b/libparted/device.c
new file mode 100644
index 0000000..36fecd2
--- /dev/null
+++ b/libparted/device.c
@@ -0,0 +1,562 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999 - 2001, 2005, 2007-2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file device.c */
+
+/**
+ * \addtogroup PedDevice
+ *
+ * \brief Device access.
+ *
+ * When ped_device_probe_all() is called, libparted attempts to detect all
+ * devices. It constructs a list which can be accessed with
+ * ped_device_get_next().
+ *
+ * If you want to use a device that isn't on the list, use
+ * ped_device_get(). Also, there may be OS-specific constructors, for creating
+ * devices from file descriptors, stores, etc. For example,
+ * ped_device_new_from_store().
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include <limits.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "architecture.h"
+
+static PedDevice* devices; /* legal advice says: initialized to NULL,
+ under section 6.7.8 part 10
+ of ISO/EIC 9899:1999 */
+
+static void
+_device_register (PedDevice* dev)
+{
+ PedDevice* walk;
+ for (walk = devices; walk && walk->next; walk = walk->next);
+ if (walk)
+ walk->next = dev;
+ else
+ devices = dev;
+ dev->next = NULL;
+}
+
+static void
+_device_unregister (PedDevice* dev)
+{
+ PedDevice* walk;
+ PedDevice* last = NULL;
+
+ for (walk = devices; walk != NULL; last = walk, walk = walk->next) {
+ if (walk == dev) break;
+ }
+
+ /* This function may be called twice for the same device if a
+ libparted user explictly removes the device from the cache using
+ ped_device_cache_remove(), we get called and it then becomes the
+ user's responsibility to free the PedDevice by calling
+ ped_device_destroy().
+ ped_device_destroy() will then call us a second time, so if the
+ device is not found in the list do nothing. */
+ if (walk == NULL)
+ return;
+
+ if (last)
+ last->next = dev->next;
+ else
+ devices = dev->next;
+}
+
+/**
+ * Returns the next device that was detected by ped_device_probe_all(), or
+ * calls to ped_device_get_next().
+ * If dev is NULL, returns the first device.
+ *
+ * \return NULL if dev is the last device.
+ */
+PedDevice*
+ped_device_get_next (const PedDevice* dev)
+{
+ if (dev)
+ return dev->next;
+ else
+ return devices;
+}
+
+void
+_ped_device_probe (const char* path)
+{
+ PedDevice* dev;
+
+ PED_ASSERT (path != NULL);
+
+ ped_exception_fetch_all ();
+ dev = ped_device_get (path);
+ if (!dev)
+ ped_exception_catch ();
+ ped_exception_leave_all ();
+}
+
+/**
+ * Attempts to detect all devices.
+ */
+void
+ped_device_probe_all ()
+{
+ ped_architecture->dev_ops->probe_all ();
+}
+
+/**
+ * Close/free all devices.
+ * Called by ped_done(), so you do not need to worry about it.
+ */
+void
+ped_device_free_all ()
+{
+ while (devices)
+ ped_device_destroy (devices);
+}
+
+/**
+ * Gets the device "name", where name is usually the block device, e.g.
+ * /dev/sdb. If the device wasn't detected with ped_device_probe_all(),
+ * an attempt will be made to detect it again. If it is found, it will
+ * be added to the list.
+ */
+PedDevice*
+ped_device_get (const char* path)
+{
+ PedDevice* walk;
+ char* normal_path = NULL;
+
+ PED_ASSERT (path != NULL);
+ /* Don't canonicalize /dev/mapper or /dev/md/ paths, see
+ tests/symlink.c
+ */
+ if (strncmp (path, "/dev/mapper/", 12) &&
+ strncmp (path, "/dev/md/", 8))
+ normal_path = canonicalize_file_name (path);
+ if (!normal_path)
+ /* Well, maybe it is just that the file does not exist.
+ * Try it anyway. */
+ normal_path = strdup (path);
+ if (!normal_path)
+ return NULL;
+
+ for (walk = devices; walk != NULL; walk = walk->next) {
+ if (!strcmp (walk->path, normal_path)) {
+ free (normal_path);
+ return walk;
+ }
+ }
+
+ walk = ped_architecture->dev_ops->_new (normal_path);
+ free (normal_path);
+ if (!walk)
+ return NULL;
+ _device_register (walk);
+ return walk;
+}
+
+/**
+ * Destroys a device and removes it from the device list, and frees
+ * all resources associated with the device (all resources allocated
+ * when the device was created).
+ */
+void
+ped_device_destroy (PedDevice* dev)
+{
+ _device_unregister (dev);
+
+ while (dev->open_count) {
+ if (!ped_device_close (dev))
+ break;
+ }
+
+ ped_architecture->dev_ops->destroy (dev);
+}
+
+void
+ped_device_cache_remove(PedDevice *dev)
+{
+ _device_unregister (dev);
+}
+
+int
+ped_device_is_busy (PedDevice* dev)
+{
+ return ped_architecture->dev_ops->is_busy (dev);
+}
+
+/**
+ * Attempt to open a device to allow use of read, write and sync functions.
+ *
+ * The meaning of "open" is architecture-dependent. Apart from requesting
+ * access to the device from the operating system, it does things like flushing
+ * caches.
+ * \note May allocate resources. Any resources allocated here will
+ * be freed by a final ped_device_close(). (ped_device_open() may be
+ * called multiple times -- it's a ref-count-like mechanism)
+ *
+ * \return zero on failure
+ */
+int
+ped_device_open (PedDevice* dev)
+{
+ int status;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ if (dev->open_count)
+ status = ped_architecture->dev_ops->refresh_open (dev);
+ else
+ status = ped_architecture->dev_ops->open (dev);
+ if (status)
+ dev->open_count++;
+ return status;
+}
+
+/**
+ * Close dev.
+ * If this is the final close, then resources allocated by
+ * ped_device_open() are freed.
+ *
+ * \return zero on failure
+ */
+int
+ped_device_close (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ if (--dev->open_count)
+ return ped_architecture->dev_ops->refresh_close (dev);
+ else
+ return ped_architecture->dev_ops->close (dev);
+}
+
+/**
+ * Begins external access mode. External access mode allows you to
+ * safely do IO on the device. If a PedDevice is open, then you should
+ * not do any IO on that device, e.g. by calling an external program
+ * like e2fsck, unless you put it in external access mode. You should
+ * not use any libparted commands that do IO to a device, e.g.
+ * ped_file_system_{open|resize|copy}, ped_disk_{read|write}), while
+ * a device is in external access mode.
+ * Also, you should not ped_device_close() a device, while it is
+ * in external access mode.
+ * Note: ped_device_begin_external_access_mode() does things like
+ * tell the kernel to flush its caches.
+ *
+ * Close a device while pretending it is still open.
+ * This is useful for temporarily suspending libparted access to the device
+ * in order for an external program to access it.
+ * (Running external programs while the device is open can cause cache
+ * coherency problems.)
+ *
+ * In particular, this function keeps track of dev->open_count, so that
+ * reference counting isn't screwed up.
+ *
+ * \return zero on failure.
+ */
+int
+ped_device_begin_external_access (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+
+ dev->external_mode = 1;
+ if (dev->open_count)
+ return ped_architecture->dev_ops->close (dev);
+ else
+ return 1;
+}
+
+/**
+ * \brief Complementary function to ped_device_begin_external_access.
+ *
+ * \note does things like tell the kernel to flush the device's cache.
+ *
+ * \return zero on failure.
+ */
+int
+ped_device_end_external_access (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (dev->external_mode);
+
+ dev->external_mode = 0;
+ if (dev->open_count)
+ return ped_architecture->dev_ops->open (dev);
+ else
+ return 1;
+}
+
+/**
+ * \internal Read count sectors from dev into buffer, beginning with sector
+ * start.
+ *
+ * \return zero on failure.
+ */
+int
+ped_device_read (const PedDevice* dev, void* buffer, PedSector start,
+ PedSector count)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (buffer != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ return (ped_architecture->dev_ops->read) (dev, buffer, start, count);
+}
+
+/**
+ * \internal Write count sectors from buffer to dev, starting at sector
+ * start.
+ *
+ * \return zero on failure.
+ *
+ * \sa PedDevice::sector_size
+ * \sa PedDevice::phys_sector_size
+ */
+int
+ped_device_write (PedDevice* dev, const void* buffer, PedSector start,
+ PedSector count)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (buffer != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ return (ped_architecture->dev_ops->write) (dev, buffer, start, count);
+}
+
+PedSector
+ped_device_check (PedDevice* dev, void* buffer, PedSector start,
+ PedSector count)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ return (ped_architecture->dev_ops->check) (dev, buffer, start, count);
+}
+
+/**
+ * \internal Flushes all write-behind caches that might be holding up
+ * writes.
+ * It is slow because it guarantees cache coherency among all relevant caches.
+ *
+ * \return zero on failure
+ */
+int
+ped_device_sync (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ return ped_architecture->dev_ops->sync (dev);
+}
+
+/**
+ * \internal Flushes all write-behind caches that might be holding writes.
+ * \warning Does NOT ensure cache coherency with other caches.
+ * If you need cache coherency, use ped_device_sync() instead.
+ *
+ * \return zero on failure
+ */
+int
+ped_device_sync_fast (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (!dev->external_mode);
+ PED_ASSERT (dev->open_count > 0);
+
+ return ped_architecture->dev_ops->sync_fast (dev);
+}
+
+/**
+ * Get a constraint that represents hardware requirements on geometry.
+ * This function will return a constraint representing the limits imposed
+ * by the size of the disk, it will *not* provide any alignment constraints.
+ *
+ * Alignment constraints may be desirable when using media that have a physical
+ * sector size that is a multiple of the logical sector size, as in this case
+ * proper partition alignment can benefit disk performance signigicantly.
+ * When you want a constraint with alignment info, use
+ * ped_device_get_minimal_aligned_constraint() or
+ * ped_device_get_optimal_aligned_constraint().
+ *
+ * \return NULL on error, otherwise a pointer to a dynamically allocated
+ * constraint.
+ */
+PedConstraint*
+ped_device_get_constraint (const PedDevice* dev)
+{
+ PedGeometry *s, *e;
+ PedConstraint* c = ped_constraint_new (
+ ped_alignment_any, ped_alignment_any,
+ s = ped_geometry_new (dev, 0, dev->length),
+ e = ped_geometry_new (dev, 0, dev->length),
+ 1, dev->length);
+
+ free (s);
+ free (e);
+ return c;
+}
+
+static PedConstraint*
+_ped_device_get_aligned_constraint(const PedDevice *dev,
+ PedAlignment* start_align)
+{
+ PedAlignment *end_align = NULL;
+ PedGeometry *whole_dev_geom = NULL;
+ PedConstraint *c = NULL;
+
+ if (start_align) {
+ end_align = ped_alignment_new(start_align->offset - 1,
+ start_align->grain_size);
+ if (!end_align)
+ goto free_start_align;
+ }
+
+ whole_dev_geom = ped_geometry_new (dev, 0, dev->length);
+
+ if (start_align)
+ c = ped_constraint_new (start_align, end_align,
+ whole_dev_geom, whole_dev_geom,
+ 1, dev->length);
+ else
+ c = ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ whole_dev_geom, whole_dev_geom,
+ 1, dev->length);
+
+ free (whole_dev_geom);
+ free (end_align);
+free_start_align:
+ free (start_align);
+ return c;
+}
+
+/**
+ * Get a constraint that represents hardware requirements on geometry and
+ * alignment.
+ *
+ * This function will return a constraint representing the limits imposed
+ * by the size of the disk and the minimal alignment requirements for proper
+ * performance of the disk.
+ *
+ * \return NULL on error, otherwise a pointer to a dynamically allocated
+ * constraint.
+ */
+PedConstraint*
+ped_device_get_minimal_aligned_constraint(const PedDevice *dev)
+{
+ return _ped_device_get_aligned_constraint(dev,
+ ped_device_get_minimum_alignment(dev));
+}
+
+/**
+ * Get a constraint that represents hardware requirements on geometry and
+ * alignment.
+ *
+ * This function will return a constraint representing the limits imposed
+ * by the size of the disk and the alignment requirements for optimal
+ * performance of the disk.
+ *
+ * \return NULL on error, otherwise a pointer to a dynamically allocated
+ * constraint.
+ */
+PedConstraint*
+ped_device_get_optimal_aligned_constraint(const PedDevice *dev)
+{
+ return _ped_device_get_aligned_constraint(dev,
+ ped_device_get_optimum_alignment(dev));
+}
+
+/**
+ * Get an alignment that represents minimum hardware requirements on alignment.
+ * When for example using media that has a physical sector size that is a
+ * multiple of the logical sector size, it is desirable to have disk accesses
+ * (and thus partitions) properly aligned. Having partitions not aligned to
+ * the minimum hardware requirements may lead to a performance penalty.
+ *
+ * The returned alignment describes the alignment for the start sector of the
+ * partition, the end sector should be aligned too, to get the end sector
+ * alignment decrease the returned alignment's offset by 1.
+ *
+ * \return the minimum alignment of partition start sectors, or NULL if this
+ * information is not available.
+ */
+PedAlignment*
+ped_device_get_minimum_alignment(const PedDevice *dev)
+{
+ PedAlignment *align = NULL;
+
+ if (ped_architecture->dev_ops->get_minimum_alignment)
+ align = ped_architecture->dev_ops->get_minimum_alignment(dev);
+
+ if (align == NULL)
+ align = ped_alignment_new(0,
+ dev->phys_sector_size / dev->sector_size);
+
+ return align;
+}
+
+/**
+ * Get an alignment that represents the hardware requirements for optimal
+ * performance.
+ *
+ * The returned alignment describes the alignment for the start sector of the
+ * partition, the end sector should be aligned too, to get the end sector
+ * alignment decrease the returned alignment's offset by 1.
+ *
+ * \return the optimal alignment of partition start sectors, or NULL if this
+ * information is not available.
+ */
+PedAlignment*
+ped_device_get_optimum_alignment(const PedDevice *dev)
+{
+ PedAlignment *align = NULL;
+
+ if (ped_architecture->dev_ops->get_optimum_alignment)
+ align = ped_architecture->dev_ops->get_optimum_alignment(dev);
+
+ /* If the arch specific code could not give as an alignment
+ return a default value based on the type of device. */
+ if (align == NULL) {
+ /* Align to a grain of 1MiB (like vista / win7) */
+ align = ped_alignment_new(0,
+ (PED_DEFAULT_ALIGNMENT
+ / dev->sector_size));
+ }
+
+ return align;
+}
+
+/** @} */
diff --git a/libparted/disk.c b/libparted/disk.c
new file mode 100644
index 0000000..0db7b5c
--- /dev/null
+++ b/libparted/disk.c
@@ -0,0 +1,2668 @@
+ /*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2003, 2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file disk.c */
+
+/**
+ * \addtogroup PedDisk
+ *
+ * \brief Disk label access.
+ *
+ * Most programs will need to use ped_disk_new() or ped_disk_new_fresh() to get
+ * anything done. A PedDisk is always associated with a device and has a
+ * partition table. There are different types of partition tables (or disk
+ * labels). These are represented by the PedDiskType enumeration.
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <stdbool.h>
+#include <limits.h>
+
+#include "architecture.h"
+#include "labels/pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+# define N_(String) (String)
+#else
+# define _(String) (String)
+# define N_(String) (String)
+#endif /* ENABLE_NLS */
+
+/* UPDATE MODE functions */
+#ifdef DEBUG
+static int _disk_check_sanity (PedDisk* disk);
+#endif
+static int _disk_push_update_mode (PedDisk* disk);
+static int _disk_pop_update_mode (PedDisk* disk);
+static int _disk_raw_insert_before (PedDisk* disk, PedPartition* loc,
+ PedPartition* part);
+static int _disk_raw_insert_after (PedDisk* disk, PedPartition* loc,
+ PedPartition* part);
+static int _disk_raw_remove (PedDisk* disk, PedPartition* part);
+static int _disk_raw_add (PedDisk* disk, PedPartition* part);
+
+static PedDiskType* disk_types = NULL;
+
+void
+ped_disk_type_register (PedDiskType* disk_type)
+{
+ PED_ASSERT (disk_type != NULL);
+ PED_ASSERT (disk_type->ops != NULL);
+ PED_ASSERT (disk_type->name != NULL);
+
+ disk_type->next = disk_types;
+ disk_types = disk_type;
+}
+
+void
+ped_disk_type_unregister (PedDiskType* disk_type)
+{
+ PedDiskType* walk;
+ PedDiskType* last = NULL;
+
+ PED_ASSERT (disk_types != NULL);
+ PED_ASSERT (disk_type != NULL);
+
+ for (walk = disk_types; walk && walk != disk_type;
+ last = walk, walk = walk->next);
+
+ PED_ASSERT (walk != NULL);
+ if (last)
+ ((struct _PedDiskType*) last)->next = disk_type->next;
+ else
+ disk_types = disk_type->next;
+}
+
+/**
+ * Return the next disk type registers, after "type". If "type" is
+ * NULL, returns the first disk type.
+ *
+ * \return Next disk; NULL if "type" is the last registered disk type.
+ */
+PedDiskType*
+ped_disk_type_get_next (PedDiskType const *type)
+{
+ if (type)
+ return type->next;
+ else
+ return disk_types;
+}
+
+/**
+ * Return the disk type with a name of "name".
+ *
+ * \return Disk type; NULL if no match.
+ */
+PedDiskType*
+ped_disk_type_get (const char* name)
+{
+ PedDiskType* walk = NULL;
+
+ PED_ASSERT (name != NULL);
+
+ for (walk = ped_disk_type_get_next (NULL); walk;
+ walk = ped_disk_type_get_next (walk))
+ if (strcasecmp (walk->name, name) == 0)
+ break;
+
+ return walk;
+}
+
+/**
+ * Return the type of partition table detected on "dev".
+ *
+ * \return Type; NULL if none was detected.
+ */
+PedDiskType*
+ped_disk_probe (PedDevice* dev)
+{
+ PedDiskType* walk = NULL;
+
+ PED_ASSERT (dev != NULL);
+
+ if (!ped_device_open (dev))
+ return NULL;
+
+ ped_exception_fetch_all ();
+ for (walk = ped_disk_type_get_next (NULL); walk;
+ walk = ped_disk_type_get_next (walk))
+ {
+ if (getenv ("PARTED_DEBUG")) {
+ fprintf (stderr, "probe label: %s\n",
+ walk->name);
+ fflush (stderr);
+ }
+ if (walk->ops->probe (dev))
+ break;
+ }
+
+ if (ped_exception)
+ ped_exception_catch ();
+ ped_exception_leave_all ();
+
+ ped_device_close (dev);
+ return walk;
+}
+
+/**
+ * Read the partition table off a device (if one is found).
+ *
+ * \warning May modify \p dev->cylinders, \p dev->heads and \p dev->sectors
+ * if the partition table indicates that the existing values
+ * are incorrect.
+ *
+ * \return A new \link _PedDisk PedDisk \endlink object;
+ * NULL on failure (e.g. partition table not detected).
+ */
+PedDisk*
+ped_disk_new (PedDevice* dev)
+{
+ PedDiskType* type;
+ PedDisk* disk;
+
+ PED_ASSERT (dev != NULL);
+
+ if (!ped_device_open (dev))
+ goto error;
+
+ type = ped_disk_probe (dev);
+ if (!type) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s: unrecognised disk label"),
+ dev->path);
+ goto error_close_dev;
+ }
+ disk = ped_disk_new_fresh (dev, type);
+ if (!disk)
+ goto error_close_dev;
+ if (!type->ops->read (disk))
+ goto error_destroy_disk;
+ disk->needs_clobber = 0;
+ ped_device_close (dev);
+ return disk;
+
+error_destroy_disk:
+ ped_disk_destroy (disk);
+error_close_dev:
+ ped_device_close (dev);
+error:
+ return NULL;
+}
+
+static int
+_add_duplicate_part (PedDisk* disk, PedPartition* old_part)
+{
+ PedPartition* new_part;
+ int ret;
+
+ new_part = disk->type->ops->partition_duplicate (old_part);
+ if (!new_part)
+ goto error;
+ new_part->disk = disk;
+
+ if (!_disk_push_update_mode (disk))
+ goto error_destroy_new_part;
+ ret = _disk_raw_add (disk, new_part);
+ if (!_disk_pop_update_mode (disk))
+ goto error_destroy_new_part;
+ if (!ret)
+ goto error_destroy_new_part;
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ goto error_destroy_new_part;
+#endif
+ return 1;
+
+error_destroy_new_part:
+ ped_partition_destroy (new_part);
+error:
+ return 0;
+}
+
+/**
+ * Clone a \link _PedDisk PedDisk \endlink object.
+ *
+ * \return Deep copy of \p old_disk, NULL on failure.
+ */
+PedDisk*
+ped_disk_duplicate (const PedDisk* old_disk)
+{
+ PedDisk* new_disk;
+ PedPartition* old_part;
+
+ PED_ASSERT (old_disk != NULL);
+ PED_ASSERT (!old_disk->update_mode);
+ PED_ASSERT (old_disk->type->ops->duplicate != NULL);
+ PED_ASSERT (old_disk->type->ops->partition_duplicate != NULL);
+
+ new_disk = old_disk->type->ops->duplicate (old_disk);
+ if (!new_disk)
+ goto error;
+
+ if (!_disk_push_update_mode (new_disk))
+ goto error_destroy_new_disk;
+ for (old_part = ped_disk_next_partition (old_disk, NULL); old_part;
+ old_part = ped_disk_next_partition (old_disk, old_part)) {
+ if (ped_partition_is_active (old_part)) {
+ if (!_add_duplicate_part (new_disk, old_part)){
+ _disk_pop_update_mode (new_disk);
+ goto error_destroy_new_disk;
+ }
+ }
+ }
+ if (!_disk_pop_update_mode (new_disk))
+ goto error_destroy_new_disk;
+
+ new_disk->needs_clobber = old_disk->needs_clobber;
+
+ return new_disk;
+
+error_destroy_new_disk:
+ ped_disk_destroy (new_disk);
+error:
+ return NULL;
+}
+
+/* Given a partition table type NAME, e.g., "gpt", return its PedDiskType
+ handle. If no known type has a name matching NAME, return NULL. */
+static PedDiskType const * _GL_ATTRIBUTE_PURE
+find_disk_type (char const *name)
+{
+ PedDiskType const *t;
+ for (t = ped_disk_type_get_next (NULL); t; t = ped_disk_type_get_next (t))
+ {
+ if (strcmp (t->name, name) == 0)
+ return t;
+ }
+ return NULL;
+}
+
+/**
+ * Remove all identifying signatures of a partition table,
+ *
+ * \return 0 on error, 1 otherwise.
+ *
+ * \sa ped_disk_clobber()
+ */
+int
+ped_disk_clobber (PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ if (!ped_device_open (dev))
+ goto error;
+
+ PedDiskType const *gpt = find_disk_type ("gpt");
+ PED_ASSERT (gpt != NULL);
+
+ /* If there is a GPT table, don't clobber the protective MBR. */
+ bool is_gpt = gpt->ops->probe (dev);
+ PedSector first_sector = (is_gpt ? 1 : 0);
+
+ /* How many sectors to zero out at each end.
+ This must be large enough to zero out the magic bytes
+ starting at offset 8KiB on a DASD partition table.
+ Doing the same from the end of the disk is probably
+ overkill, but at least on GPT, we do need to zero out
+ the final sector. */
+ const PedSector n_sectors = 9 * 1024 / dev->sector_size + 1;
+
+ /* Clear the first few. */
+ PedSector n = n_sectors;
+ if (dev->length < first_sector + n_sectors)
+ n = dev->length - first_sector;
+ if (!ptt_clear_sectors (dev, first_sector, n))
+ goto error_close_dev;
+
+ /* Clear the last few. */
+ PedSector t = (dev->length -
+ (n_sectors < dev->length ? n_sectors : 1));
+
+ /* Don't clobber the pMBR if we have a pathologically small disk. */
+ if (t < first_sector)
+ t = first_sector;
+ if (!ptt_clear_sectors (dev, t, dev->length - t))
+ goto error_close_dev;
+
+ ped_device_close (dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (dev);
+error:
+ return 0;
+}
+
+/**
+ * Create a new partition table on \p dev.
+ *
+ * This new partition table is only created in-memory, and nothing is written
+ * to disk until ped_disk_commit_to_dev() is called.
+ *
+ * \return The newly constructed \link _PedDisk PedDisk \endlink,
+ * NULL on failure.
+ */
+PedDisk*
+ped_disk_new_fresh (PedDevice* dev, const PedDiskType* type)
+{
+ PedDisk* disk;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (type != NULL);
+ PED_ASSERT (type->ops->alloc != NULL);
+ PedCHSGeometry* bios_geom = &dev->bios_geom;
+ PED_ASSERT (bios_geom->sectors != 0);
+ PED_ASSERT (bios_geom->heads != 0);
+
+ disk = type->ops->alloc (dev);
+ if (!disk)
+ goto error;
+ if (!_disk_pop_update_mode (disk))
+ goto error_destroy_disk;
+ PED_ASSERT (disk->update_mode == 0);
+
+ disk->needs_clobber = 1;
+ return disk;
+
+error_destroy_disk:
+ ped_disk_destroy (disk);
+error:
+ return NULL;
+}
+
+PedDisk*
+_ped_disk_alloc (const PedDevice* dev, const PedDiskType* disk_type)
+{
+ PedDisk* disk;
+
+ disk = (PedDisk*) ped_malloc (sizeof (PedDisk));
+ if (!disk)
+ goto error;
+
+ disk->dev = (PedDevice*)dev;
+ disk->type = disk_type;
+ disk->update_mode = 1;
+ disk->part_list = NULL;
+ disk->needs_clobber = 0;
+ return disk;
+
+error:
+ return NULL;
+}
+
+void
+_ped_disk_free (PedDisk* disk)
+{
+ _disk_push_update_mode (disk);
+ ped_disk_delete_all (disk);
+ free (disk);
+}
+
+/**
+ * Close \p disk.
+ *
+ * What this function does depends on the PedDiskType of \p disk,
+ * but you can generally assume that outstanding writes are flushed
+ * (this mainly means that _ped_disk_free is called).
+ */
+void
+ped_disk_destroy (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (!disk->update_mode);
+
+ disk->type->ops->free (disk);
+}
+
+/**
+ * Tell the operating system kernel about the partition table layout
+ * of \p disk.
+ *
+ * This is rather loosely defined: for example, on old versions of Linux,
+ * it simply calls the BLKRRPART ioctl, which tells the kernel to
+ * reread the partition table. On newer versions (2.4.x), it will
+ * use the new blkpg interface to tell Linux where each partition
+ * starts/ends, etc. In this case, Linux does not need to have support for
+ * a specific type of partition table.
+ *
+ * \return 0 on failure, 1 otherwise.
+ */
+int
+ped_disk_commit_to_os (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ if (!ped_device_open (disk->dev))
+ goto error;
+ if (!ped_architecture->disk_ops->disk_commit (disk))
+ goto error_close_dev;
+ ped_device_close (disk->dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (disk->dev);
+error:
+ return 0;
+}
+
+/**
+ * Write the changes made to the in-memory description
+ * of a partition table to the device.
+ *
+ * \return 0 on failure, 1 otherwise.
+ */
+int
+ped_disk_commit_to_dev (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (!disk->update_mode);
+
+ if (!disk->type->ops->write) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("This libparted doesn't have write support for "
+ "%s. Perhaps it was compiled read-only."),
+ disk->type->name);
+ goto error;
+ }
+
+ if (!ped_device_open (disk->dev))
+ goto error;
+
+ if (disk->needs_clobber) {
+ if (!ped_disk_clobber (disk->dev))
+ goto error_close_dev;
+ disk->needs_clobber = 0;
+ }
+ if (!disk->type->ops->write (disk))
+ goto error_close_dev;
+ ped_device_close (disk->dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (disk->dev);
+error:
+ return 0;
+}
+
+/*
+ * This function writes the in-memory changes to a partition table to
+ * disk and informs the operating system of the changes.
+ *
+ * \note Equivalent to calling first ped_disk_commit_to_dev(), then
+ * ped_disk_commit_to_os().
+ *
+ * \return 0 on failure, 1 otherwise.
+ */
+int
+ped_disk_commit (PedDisk* disk)
+{
+ /* Open the device here, so that the underlying fd is not closed
+ between commit_to_dev and commit_to_os (closing causes unwanted
+ udev events to be sent under Linux). */
+ if (!ped_device_open (disk->dev))
+ goto error;
+
+ if (!ped_disk_commit_to_dev (disk))
+ goto error_close_dev;
+
+ if (!ped_disk_commit_to_os (disk))
+ goto error_close_dev;
+
+ ped_device_close (disk->dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (disk->dev);
+error:
+ return 0;
+}
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+/**
+ * Check whether a partition is mounted or busy in some
+ * other way.
+ *
+ * \note An extended partition is busy if any logical partitions are mounted.
+ *
+ * \return \c 1 if busy.
+ */
+int
+ped_partition_is_busy (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ return ped_architecture->disk_ops->partition_is_busy (part);
+}
+
+/**
+ * Return a path that can be used to address the partition in the
+ * operating system.
+ */
+char*
+ped_partition_get_path (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ return ped_architecture->disk_ops->partition_get_path (part);
+}
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ *
+ * @{
+ */
+
+/**
+ * Perform a sanity check on a partition table.
+ *
+ * \note The check performed is generic (i.e. it does not depends on the label
+ * type of the disk.
+ *
+ * \throws PED_EXCEPTION_WARNING if a partition type ID does not match the file
+ * system on it.
+ *
+ * \return 0 if the check fails, 1 otherwise.
+ */
+int
+ped_disk_check (const PedDisk* disk)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ const PedFileSystemType* fs_type = walk->fs_type;
+ PedGeometry* geom;
+ PedSector length_error;
+ PedSector max_length_error;
+
+ if (!ped_partition_is_active (walk) || !fs_type)
+ continue;
+
+ geom = ped_file_system_probe_specific (fs_type, &walk->geom);
+ if (!geom)
+ continue;
+
+ length_error = llabs (walk->geom.length - geom->length);
+ max_length_error = PED_MAX (4096, walk->geom.length / 100);
+ bool ok = (ped_geometry_test_inside (&walk->geom, geom)
+ && length_error <= max_length_error);
+ char *fs_size = ped_unit_format (disk->dev, geom->length);
+ ped_geometry_destroy (geom);
+ if (!ok) {
+ char* part_size = ped_unit_format (disk->dev,
+ walk->geom.length);
+ PedExceptionOption choice;
+ choice = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Partition %d is %s, but the file system is "
+ "%s."),
+ walk->num, part_size, fs_size);
+
+ free (part_size);
+
+ free (fs_size);
+ fs_size = NULL;
+
+ if (choice != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+ free (fs_size);
+ }
+
+ return 1;
+}
+
+/**
+ * This function checks if a particular type of partition table supports
+ * a feature.
+ *
+ * \return 1 if \p disk_type supports \p feature, 0 otherwise.
+ */
+int
+ped_disk_type_check_feature (const PedDiskType* disk_type,
+ PedDiskTypeFeature feature)
+{
+ return (disk_type->features & feature) != 0;
+}
+
+/**
+ * Get the number of primary partitions.
+ */
+int
+ped_disk_get_primary_partition_count (const PedDisk* disk)
+{
+ PedPartition* walk;
+ int count = 0;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (ped_partition_is_active (walk)
+ && ! (walk->type & PED_PARTITION_LOGICAL))
+ count++;
+ }
+
+ return count;
+}
+
+/**
+ * Get the highest available partition number on \p disk.
+ */
+int
+ped_disk_get_last_partition_num (const PedDisk* disk)
+{
+ PedPartition* walk;
+ int highest = -1;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (walk->num > highest)
+ highest = walk->num;
+ }
+
+ return highest;
+}
+
+/**
+ * Get the highest supported partition number on \p disk.
+ *
+ * \return 0 if call fails. 1 otherwise.
+ */
+bool
+ped_disk_get_max_supported_partition_count(const PedDisk* disk, int* supported)
+{
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->type->ops->get_max_supported_partition_count != NULL);
+
+ return disk->type->ops->get_max_supported_partition_count(disk, supported);
+}
+
+/**
+ * Get the alignment needed for partition boundaries on this disk.
+ * The returned alignment describes the alignment for the start sector of the
+ * partition, for all disklabel types which require alignment, except Sun
+ * disklabels, the end sector must be aligned too. To get the end sector
+ * alignment decrease the PedAlignment offset by 1.
+ *
+ * \return NULL on error, otherwise a pointer to a dynamically allocated
+ * alignment.
+ */
+PedAlignment*
+ped_disk_get_partition_alignment(const PedDisk *disk)
+{
+ /* disklabel handlers which don't need alignment don't define this */
+ if (!disk->type->ops->get_partition_alignment)
+ return ped_alignment_duplicate(ped_alignment_any);
+
+ return disk->type->ops->get_partition_alignment(disk);
+}
+
+/**
+ * Get the maximum number of (primary) partitions the disk label supports.
+ *
+ * For example, MacIntosh partition maps can have different sizes,
+ * and accordingly support a different number of partitions.
+ */
+int
+ped_disk_get_max_primary_partition_count (const PedDisk* disk)
+{
+ PED_ASSERT (disk->type != NULL);
+ PED_ASSERT (disk->type->ops->get_max_primary_partition_count != NULL);
+
+ return disk->type->ops->get_max_primary_partition_count (disk);
+}
+
+/**
+ * Set the state (\c 1 or \c 0) of a flag on a disk.
+ *
+ * \note It is an error to call this on an unavailable flag -- use
+ * ped_disk_is_flag_available() to determine which flags are available
+ * for a given disk label.
+ *
+ * \throws PED_EXCEPTION_ERROR if the requested flag is not available for this
+ * label.
+ */
+int
+ped_disk_set_flag(PedDisk *disk, PedDiskFlag flag, int state)
+{
+ int ret;
+
+ PED_ASSERT (disk != NULL);
+
+ PedDiskOps *ops = disk->type->ops;
+
+ if (!_disk_push_update_mode(disk))
+ return 0;
+
+ if (!ped_disk_is_flag_available(disk, flag)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "The flag '%s' is not available for %s disk labels.",
+ ped_disk_flag_get_name(flag),
+ disk->type->name);
+ _disk_pop_update_mode(disk);
+ return 0;
+ }
+
+ ret = ops->disk_set_flag(disk, flag, state);
+
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+
+ return ret;
+}
+
+/**
+ * Get the state (\c 1 or \c 0) of a flag on a disk.
+ */
+int
+ped_disk_get_flag(const PedDisk *disk, PedDiskFlag flag)
+{
+ PED_ASSERT (disk != NULL);
+
+ PedDiskOps *ops = disk->type->ops;
+
+ if (!ped_disk_is_flag_available(disk, flag))
+ return 0;
+
+ return ops->disk_get_flag(disk, flag);
+}
+
+/**
+ * Check whether a given flag is available on a disk.
+ *
+ * \return \c 1 if the flag is available.
+ */
+int
+ped_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
+{
+ PED_ASSERT (disk != NULL);
+
+ PedDiskOps *ops = disk->type->ops;
+
+ if (!ops->disk_is_flag_available)
+ return 0;
+
+ return ops->disk_is_flag_available(disk, flag);
+}
+
+/**
+ * Returns a name for a \p flag, e.g. PED_DISK_CYLINDER_ALIGNMENT will return
+ * "cylinder_alignment".
+ *
+ * \note The returned string will be in English. However,
+ * translations are provided, so the caller can call
+ * dgettext("parted", RESULT) on the result.
+ */
+const char *
+ped_disk_flag_get_name(PedDiskFlag flag)
+{
+ switch (flag) {
+ case PED_DISK_CYLINDER_ALIGNMENT:
+ return N_("cylinder_alignment");
+ case PED_DISK_GPT_PMBR_BOOT:
+ return N_("pmbr_boot");
+ default:
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Unknown disk flag, %d."),
+ flag);
+ return NULL;
+ }
+}
+
+/**
+ * Returns the flag associated with \p name.
+ *
+ * \p name can be the English
+ * string, or the translation for the native language.
+ */
+PedDiskFlag
+ped_disk_flag_get_by_name(const char *name)
+{
+ PedDiskFlag flag;
+
+ for (flag = ped_disk_flag_next(0); flag;
+ flag = ped_disk_flag_next(flag)) {
+ const char *flag_name = ped_disk_flag_get_name(flag);
+ if (strcasecmp(name, flag_name) == 0
+ || strcasecmp(name, _(flag_name)) == 0)
+ return flag;
+ }
+
+ return 0;
+}
+
+/**
+ * Iterates through all disk flags.
+ *
+ * ped_disk_flag_next(0) returns the first flag
+ *
+ * \return the next flag, or 0 if there are no more flags
+ */
+PedDiskFlag
+ped_disk_flag_next(PedDiskFlag flag)
+{
+ return (flag + 1) % (PED_DISK_LAST_FLAG + 1);
+}
+
+static int
+_assert_disk_uuid_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_DISK_UUID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support disk uuids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * Get the uuid of the disk \p disk. This will only work if the disk label
+ * supports it.
+ */
+uint8_t*
+ped_disk_get_uuid (const PedDisk *disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ if (!_assert_disk_uuid_feature (disk->type))
+ return NULL;
+
+ PED_ASSERT (disk->type->ops->disk_get_uuid != NULL);
+ return disk->type->ops->disk_get_uuid (disk);
+}
+
+/**
+ * \internal We turned a really nasty bureaucracy problem into an elegant maths
+ * problem :-) Basically, there are some constraints to a partition's
+ * geometry:
+ *
+ * (1) it must start and end on a "disk" block, determined by the disk label
+ * (not the hardware). (constraint represented by a PedAlignment)
+ *
+ * (2) if we're resizing a partition, we MIGHT need to keep each block aligned.
+ * Eg: if an ext2 file system has 4k blocks, then we can only move the start
+ * by a multiple of 4k. (constraint represented by a PedAlignment)
+ *
+ * (3) we need to keep the start and end within the device's physical
+ * boundaries. (constraint represented by a PedGeometry)
+ *
+ * Satisfying (1) and (2) simultaneously required a bit of fancy maths ;-) See
+ * ped_alignment_intersect()
+ *
+ * The application of these constraints is in disk_*.c's *_partition_align()
+ * function.
+ */
+static int
+_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ const PedDiskType* disk_type;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->num != -1);
+ PED_ASSERT (part->disk != NULL);
+ disk_type = part->disk->type;
+ PED_ASSERT (disk_type != NULL);
+ PED_ASSERT (disk_type->ops->partition_align != NULL);
+ PED_ASSERT (part->disk->update_mode);
+
+ if (part->disk->needs_clobber)
+ return 1; /* do not attempt to align partitions while reading them */
+ return disk_type->ops->partition_align (part, constraint);
+}
+
+static int
+_partition_enumerate (PedPartition* part)
+{
+ const PedDiskType* disk_type;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ disk_type = part->disk->type;
+ PED_ASSERT (disk_type != NULL);
+ PED_ASSERT (disk_type->ops->partition_enumerate != NULL);
+
+ return disk_type->ops->partition_enumerate (part);
+}
+
+/**
+ * Gives all the (active) partitions a number. It should preserve the numbers
+ * and orders as much as possible.
+ */
+static int
+ped_disk_enumerate_partitions (PedDisk* disk)
+{
+ PedPartition* walk;
+ int i;
+ int end;
+
+ PED_ASSERT (disk != NULL);
+
+/* first "sort" already-numbered partitions. (e.g. if a logical partition
+ * is removed, then all logical partitions that were number higher MUST be
+ * renumbered)
+ */
+ end = ped_disk_get_last_partition_num (disk);
+ for (i=1; i<=end; i++) {
+ walk = ped_disk_get_partition (disk, i);
+ if (walk) {
+ if (!_partition_enumerate (walk))
+ return 0;
+ }
+ }
+
+/* now, number un-numbered partitions */
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (ped_partition_is_active (walk) && walk->num == -1) {
+ if (!_partition_enumerate (walk))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+_disk_remove_metadata (PedDisk* disk)
+{
+ PedPartition* walk = NULL;
+ PedPartition* next;
+
+ PED_ASSERT (disk != NULL);
+
+ next = ped_disk_next_partition (disk, walk);
+
+ while (next) {
+ walk = next;
+ while (1) {
+ next = ped_disk_next_partition (disk, next);
+ if (!next || next->type & PED_PARTITION_METADATA)
+ break;
+ }
+ if (walk->type & PED_PARTITION_METADATA)
+ ped_disk_delete_partition (disk, walk);
+ }
+ return 1;
+}
+
+static int
+_disk_alloc_metadata (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ if (!disk->update_mode)
+ _disk_remove_metadata (disk);
+
+ return disk->type->ops->alloc_metadata (disk);
+}
+
+static int
+_disk_remove_freespace (PedDisk* disk)
+{
+ PedPartition* walk;
+ PedPartition* next;
+
+ walk = ped_disk_next_partition (disk, NULL);
+ for (; walk; walk = next) {
+ next = ped_disk_next_partition (disk, walk);
+
+ if (walk->type & PED_PARTITION_FREESPACE) {
+ _disk_raw_remove (disk, walk);
+ ped_partition_destroy (walk);
+ }
+ }
+
+ return 1;
+}
+
+static int
+_alloc_extended_freespace (PedDisk* disk)
+{
+ PedSector last_end;
+ PedPartition* walk;
+ PedPartition* last;
+ PedPartition* free_space;
+ PedPartition* extended_part;
+
+ extended_part = ped_disk_extended_partition (disk);
+ if (!extended_part)
+ return 1;
+
+ last_end = extended_part->geom.start;
+ last = NULL;
+
+ for (walk = extended_part->part_list; walk; walk = walk->next) {
+ if (walk->geom.start > last_end + 1) {
+ free_space = ped_partition_new (
+ disk,
+ PED_PARTITION_FREESPACE
+ | PED_PARTITION_LOGICAL,
+ NULL,
+ last_end + 1, walk->geom.start - 1);
+ _disk_raw_insert_before (disk, walk, free_space);
+ }
+
+ last = walk;
+ last_end = last->geom.end;
+ }
+
+ if (last_end < extended_part->geom.end) {
+ free_space = ped_partition_new (
+ disk,
+ PED_PARTITION_FREESPACE | PED_PARTITION_LOGICAL,
+ NULL,
+ last_end + 1, extended_part->geom.end);
+
+ if (last)
+ return _disk_raw_insert_after (disk, last, free_space);
+ else
+ extended_part->part_list = free_space;
+ }
+
+ return 1;
+}
+
+static int
+_disk_alloc_freespace (PedDisk* disk)
+{
+ PedSector last_end;
+ PedPartition* walk;
+ PedPartition* last;
+ PedPartition* free_space;
+
+ if (!_disk_remove_freespace (disk))
+ return 0;
+ if (!_alloc_extended_freespace (disk))
+ return 0;
+
+ last = NULL;
+ last_end = -1;
+
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ if (walk->geom.start > last_end + 1) {
+ free_space = ped_partition_new (disk,
+ PED_PARTITION_FREESPACE, NULL,
+ last_end + 1, walk->geom.start - 1);
+ _disk_raw_insert_before (disk, walk, free_space);
+ }
+
+ last = walk;
+ last_end = last->geom.end;
+ }
+
+ if (last_end < disk->dev->length - 1) {
+ free_space = ped_partition_new (disk,
+ PED_PARTITION_FREESPACE, NULL,
+ last_end + 1, disk->dev->length - 1);
+ if (last)
+ return _disk_raw_insert_after (disk, last, free_space);
+ else
+ disk->part_list = free_space;
+ }
+
+ return 1;
+}
+
+/**
+ * Update mode: used when updating the internal representation of the partition
+ * table. In update mode, the metadata and freespace placeholder/virtual
+ * partitions are removed, making it much easier for various manipulation
+ * routines...
+ */
+static int
+_disk_push_update_mode (PedDisk* disk)
+{
+ if (!disk->update_mode) {
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ return 0;
+#endif
+
+ _disk_remove_freespace (disk);
+ disk->update_mode++;
+ _disk_remove_metadata (disk);
+
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ return 0;
+#endif
+ } else {
+ disk->update_mode++;
+ }
+ return 1;
+}
+
+static int
+_disk_pop_update_mode (PedDisk* disk)
+{
+ PED_ASSERT (disk->update_mode);
+
+ if (disk->update_mode == 1) {
+ /* re-allocate metadata BEFORE leaving update mode, to prevent infinite
+ * recursion (metadata allocation requires update mode)
+ */
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ return 0;
+#endif
+
+ _disk_alloc_metadata (disk);
+ disk->update_mode--;
+ _disk_alloc_freespace (disk);
+
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ return 0;
+#endif
+ } else {
+ disk->update_mode--;
+ }
+ return 1;
+}
+
+/** @} */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * \brief Partition access.
+ *
+ * @{
+ */
+
+PedPartition*
+_ped_partition_alloc (const PedDisk* disk, PedPartitionType type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+
+ PED_ASSERT (disk != NULL);
+
+ part = (PedPartition*) ped_malloc (sizeof (PedPartition));
+ if (!part)
+ goto error;
+
+ part->prev = NULL;
+ part->next = NULL;
+
+ part->disk = (PedDisk*) disk;
+ if (!ped_geometry_init (&part->geom, disk->dev, start, end - start + 1))
+ goto error_free_part;
+
+ part->num = -1;
+ part->type = type;
+ part->part_list = NULL;
+ part->fs_type = fs_type;
+
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return NULL;
+}
+
+void
+_ped_partition_free (PedPartition* part)
+{
+ free (part);
+}
+
+int
+_ped_partition_attempt_align (PedPartition* part,
+ const PedConstraint* external,
+ PedConstraint* internal)
+{
+ PedConstraint* intersection;
+ PedGeometry* solution;
+
+ intersection = ped_constraint_intersect (external, internal);
+ ped_constraint_destroy (internal);
+ if (!intersection)
+ goto fail;
+
+ solution = ped_constraint_solve_nearest (intersection, &part->geom);
+ if (!solution)
+ goto fail_free_intersection;
+ ped_geometry_set (&part->geom, solution->start, solution->length);
+ ped_geometry_destroy (solution);
+ ped_constraint_destroy (intersection);
+ return 1;
+
+fail_free_intersection:
+ ped_constraint_destroy (intersection);
+fail:
+ return 0;
+}
+
+/**
+ * Create a new \link _PedPartition PedPartition \endlink on \p disk.
+ *
+ * \param type One of \p PED_PARTITION_NORMAL, \p PED_PARTITION_EXTENDED,
+ * \p PED_PARTITION_LOGICAL.
+ *
+ * \note The constructed partition is not added to <tt>disk</tt>'s
+ * partition table. Use ped_disk_add_partition() to do this.
+ *
+ * \return A new \link _PedPartition PedPartition \endlink object,
+ * NULL on failure.
+ *
+ * \throws PED_EXCEPTION_ERROR if \p type is \p EXTENDED or \p LOGICAL but the
+ * label does not support this concept.
+ */
+PedPartition*
+ped_partition_new (const PedDisk* disk, PedPartitionType type,
+ const PedFileSystemType* fs_type, PedSector start,
+ PedSector end)
+{
+ int supports_extended;
+ PedPartition* part;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->type->ops->partition_new != NULL);
+
+ supports_extended = ped_disk_type_check_feature (disk->type,
+ PED_DISK_TYPE_EXTENDED);
+
+ if (!supports_extended
+ && (type == PED_PARTITION_EXTENDED
+ || type == PED_PARTITION_LOGICAL)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s disk labels do not support extended "
+ "partitions."),
+ disk->type->name);
+ goto error;
+ }
+
+ part = disk->type->ops->partition_new (disk, type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (fs_type || part->type == PED_PARTITION_EXTENDED) {
+ if (!ped_partition_set_system (part, fs_type))
+ goto error_destroy_part;
+ }
+ return part;
+
+error_destroy_part:
+ ped_partition_destroy (part);
+error:
+ return NULL;
+}
+
+/**
+ * Destroy a \link _PedPartition PedPartition \endlink object.
+ *
+ * \note Should not be called on a partition that is in a partition table.
+ * Use ped_disk_delete_partition() instead.
+ */
+void
+ped_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->type->ops->partition_new != NULL);
+
+ part->disk->type->ops->partition_destroy (part);
+}
+
+
+/**
+ * Return whether or not the partition is "active".
+ *
+ * A partition is active if \p part->type is neither \p PED_PARTITION_METADATA
+ * nor \p PED_PARTITION_FREE.
+ */
+int
+ped_partition_is_active (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ return !(part->type & PED_PARTITION_FREESPACE
+ || part->type & PED_PARTITION_METADATA);
+}
+
+/**
+ * Set the state (\c 1 or \c 0) of a flag on a partition.
+ *
+ * Flags are disk label specific, although they have a global
+ * "namespace": the flag PED_PARTITION_BOOT, for example, roughly means
+ * "this" partition is bootable". But this means different things on different
+ * disk labels (and may not be defined on some disk labels). For example,
+ * on MS-DOS disk labels, there can only be one boot partition, and this
+ * refers to the partition that will be booted from on startup. On PC98
+ * disk labels, the user can choose from any bootable partition on startup.
+ *
+ * \note It is an error to call this on an unavailable flag -- use
+ * ped_partition_is_flag_available() to determine which flags are available
+ * for a given disk label.
+ *
+ * \throws PED_EXCEPTION_ERROR if the requested flag is not available for this
+ * label.
+ */
+int
+ped_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ PedDiskOps* ops;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ ops = part->disk->type->ops;
+ PED_ASSERT (ops->partition_set_flag != NULL);
+ PED_ASSERT (ops->partition_is_flag_available != NULL);
+
+ if (!ops->partition_is_flag_available (part, flag)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "The flag '%s' is not available for %s disk labels.",
+ ped_partition_flag_get_name (flag),
+ part->disk->type->name);
+ return 0;
+ }
+
+ return ops->partition_set_flag (part, flag, state);
+}
+
+/**
+ * Get the state (\c 1 or \c 0) of a flag on a partition.
+ *
+ * See ped_partition_set_flag() for conditions that must hold.
+ *
+ * \todo Where's the check for flag availability?
+ */
+int
+ped_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->type->ops->partition_get_flag != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ return part->disk->type->ops->partition_get_flag (part, flag);
+}
+
+/**
+ * Check whether a given flag is available on a partition.
+ *
+ * \return \c 1 if the flag is available.
+ */
+int
+ped_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->type->ops->partition_is_flag_available != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ return part->disk->type->ops->partition_is_flag_available (part, flag);
+}
+
+/**
+ * Sets the system type on the partition to \p fs_type.
+ *
+ * \note The file system may be opened, to get more information about the
+ * file system, e.g. to determine if it's FAT16 or FAT32.
+ *
+ * \return \c 0 on failure.
+ */
+int
+ped_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ const PedDiskType* disk_type;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+ PED_ASSERT (part->disk != NULL);
+ disk_type = part->disk->type;
+ PED_ASSERT (disk_type != NULL);
+ PED_ASSERT (disk_type->ops != NULL);
+ PED_ASSERT (disk_type->ops->partition_set_system != NULL);
+
+ return disk_type->ops->partition_set_system (part, fs_type);
+}
+
+static int
+_assert_partition_name_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_PARTITION_NAME)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support partition names.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+static int
+_assert_partition_type_id_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_PARTITION_TYPE_ID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support partition type-ids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+static int
+_assert_partition_type_uuid_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_PARTITION_TYPE_UUID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support partition type-uuids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+static int
+_assert_partition_uuid_feature (const PedDiskType* disk_type)
+{
+ if (!ped_disk_type_check_feature (
+ disk_type, PED_DISK_TYPE_PARTITION_UUID)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "%s disk labels do not support partition uuids.",
+ disk_type->name);
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * Sets the name of a partition.
+ *
+ * \note This will only work if the disk label supports it.
+ * You can use
+ * \code
+ * ped_disk_type_check_feature (part->disk->type, PED_DISK_TYPE_PARTITION_NAME);
+ * \endcode
+ * to check whether this feature is enabled for a label.
+ *
+ * \note \p name will not be modified by libparted. It can be freed
+ * by the caller immediately after ped_partition_set_name() is called.
+ *
+ * \return \c 1 on success, \c 0 otherwise.
+ */
+int
+ped_partition_set_name (PedPartition* part, const char* name)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+ PED_ASSERT (name != NULL);
+
+ if (!_assert_partition_name_feature (part->disk->type))
+ return 0;
+
+ PED_ASSERT (part->disk->type->ops->partition_set_name != NULL);
+ part->disk->type->ops->partition_set_name (part, name);
+ return 1;
+}
+
+/**
+ * Returns the name of a partition \p part. This will only work if the disk
+ * label supports it.
+ *
+ * \note The returned string should not be modified. It should
+ * not be referenced after the partition is destroyed.
+ */
+const char*
+ped_partition_get_name (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_name_feature (part->disk->type))
+ return NULL;
+
+ PED_ASSERT (part->disk->type->ops->partition_get_name != NULL);
+ return part->disk->type->ops->partition_get_name (part);
+}
+
+/**
+ * Set the type-id of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+int
+ped_partition_set_type_id (PedPartition *part, uint8_t id)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_type_id_feature (part->disk->type))
+ return 0;
+
+ PED_ASSERT (part->disk->type->ops->partition_set_type_id != NULL);
+ return part->disk->type->ops->partition_set_type_id (part, id);
+}
+
+/**
+ * Get the type-id of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+uint8_t
+ped_partition_get_type_id (const PedPartition *part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_type_id_feature (part->disk->type))
+ return 0;
+
+ PED_ASSERT (part->disk->type->ops->partition_get_type_id != NULL);
+ return part->disk->type->ops->partition_get_type_id (part);
+}
+
+/**
+ * Set the type-uuid of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+int
+ped_partition_set_type_uuid (PedPartition *part, const uint8_t* uuid)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_type_uuid_feature (part->disk->type))
+ return 0;
+
+ PED_ASSERT (part->disk->type->ops->partition_set_type_uuid != NULL);
+ return part->disk->type->ops->partition_set_type_uuid (part, uuid);
+}
+
+/**
+ * Get the type-uuid of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+uint8_t*
+ped_partition_get_type_uuid (const PedPartition *part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_type_uuid_feature (part->disk->type))
+ return NULL;
+
+ PED_ASSERT (part->disk->type->ops->partition_get_type_uuid != NULL);
+ return part->disk->type->ops->partition_get_type_uuid (part);
+}
+
+/**
+ * Get the uuid of the partition \p part. This will only work if the disk label
+ * supports it.
+ */
+uint8_t*
+ped_partition_get_uuid (const PedPartition *part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (ped_partition_is_active (part));
+
+ if (!_assert_partition_uuid_feature (part->disk->type))
+ return NULL;
+
+ PED_ASSERT (part->disk->type->ops->partition_get_uuid != NULL);
+ return part->disk->type->ops->partition_get_uuid (part);
+}
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ *
+ * @{
+ */
+
+PedPartition*
+ped_disk_extended_partition (const PedDisk* disk)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ if (walk->type == PED_PARTITION_EXTENDED)
+ break;
+ }
+ return walk;
+}
+
+/**
+ * Return the next partition after \p part on \p disk. If \p part is \c NULL,
+ * return the first partition. If \p part is the last partition, returns
+ * \c NULL. If \p part is an extended partition, returns the first logical
+ * partition. If this is called repeatedly passing the return value as \p part,
+ * a depth-first traversal is executed.
+ *
+ * \return The next partition, \c NULL if no more partitions left.
+ */
+PedPartition*
+ped_disk_next_partition (const PedDisk* disk, const PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+
+ if (!part)
+ return disk->part_list;
+ if (part->type == PED_PARTITION_EXTENDED)
+ return part->part_list ? part->part_list : part->next;
+ if (part->next)
+ return part->next;
+ if (part->type & PED_PARTITION_LOGICAL) {
+ if (!ped_disk_extended_partition (disk))
+ return NULL;
+ return ped_disk_extended_partition (disk)->next;
+ }
+ return NULL;
+}
+
+/** @} */
+
+#ifdef DEBUG
+static int _GL_ATTRIBUTE_PURE
+_disk_check_sanity (PedDisk* disk)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ PED_ASSERT (!(walk->type & PED_PARTITION_LOGICAL));
+ PED_ASSERT (!walk->prev || walk->prev->next == walk);
+ }
+
+ if (!ped_disk_extended_partition (disk))
+ return 1;
+
+ for (walk = ped_disk_extended_partition (disk)->part_list; walk;
+ walk = walk->next) {
+ PED_ASSERT (walk->type & PED_PARTITION_LOGICAL);
+ if (walk->prev)
+ PED_ASSERT (walk->prev->next == walk);
+ }
+ return 1;
+}
+#endif
+
+/**
+ * Returns the partition numbered \p num.
+ *
+ * \return \c NULL if the specified partition does not exist.
+ */
+PedPartition*
+ped_disk_get_partition (const PedDisk* disk, int num)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (walk->num == num && !(walk->type & PED_PARTITION_FREESPACE))
+ return walk;
+ }
+
+ return NULL;
+}
+
+/**
+ * Returns the partition that contains sect. If sect lies within a logical
+ * partition, then the logical partition is returned (not the extended
+ * partition).
+ */
+PedPartition*
+ped_disk_get_partition_by_sector (const PedDisk* disk, PedSector sect)
+{
+ PedPartition* walk;
+
+ PED_ASSERT (disk != NULL);
+
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (ped_geometry_test_sector_inside (&walk->geom, sect)
+ && walk->type != PED_PARTITION_EXTENDED)
+ return walk;
+ }
+
+ /* should never get here, unless sect is outside of disk's useable
+ * part, or we're in "update mode", and the free space place-holders
+ * have been removed with _disk_remove_freespace()
+ */
+ return NULL;
+}
+
+/**
+ * Return the maximum representable length (in sectors) of a
+ * partition on disk \disk.
+ */
+PedSector
+ped_disk_max_partition_length (const PedDisk* disk)
+{
+ return disk->type->ops->max_length ();
+}
+
+/**
+ * Return the maximum representable start sector of a
+ * partition on disk \disk.
+ */
+PedSector
+ped_disk_max_partition_start_sector (const PedDisk* disk)
+{
+ return disk->type->ops->max_start_sector ();
+}
+
+/* I'm beginning to agree with Sedgewick :-/ */
+static int
+_disk_raw_insert_before (PedDisk* disk, PedPartition* loc, PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (loc != NULL);
+ PED_ASSERT (part != NULL);
+
+ part->prev = loc->prev;
+ part->next = loc;
+ if (part->prev) {
+ part->prev->next = part;
+ } else {
+ if (loc->type & PED_PARTITION_LOGICAL)
+ ped_disk_extended_partition (disk)->part_list = part;
+ else
+ disk->part_list = part;
+ }
+ loc->prev = part;
+
+ return 1;
+}
+
+static int
+_disk_raw_insert_after (PedDisk* disk, PedPartition* loc, PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (loc != NULL);
+ PED_ASSERT (part != NULL);
+
+ part->prev = loc;
+ part->next = loc->next;
+ if (loc->next)
+ loc->next->prev = part;
+ loc->next = part;
+
+ return 1;
+}
+
+static int
+_disk_raw_remove (PedDisk* disk, PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+
+ if (part->prev) {
+ part->prev->next = part->next;
+ if (part->next)
+ part->next->prev = part->prev;
+ } else {
+ if (part->type & PED_PARTITION_LOGICAL) {
+ ped_disk_extended_partition (disk)->part_list
+ = part->next;
+ } else {
+ disk->part_list = part->next;
+ }
+ if (part->next)
+ part->next->prev = NULL;
+ }
+
+ return 1;
+}
+
+/*
+ *UPDATE MODE ONLY
+ */
+static int
+_disk_raw_add (PedDisk* disk, PedPartition* part)
+{
+ PedPartition* walk;
+ PedPartition* last;
+ PedPartition* ext_part;
+
+ PED_ASSERT (disk->update_mode);
+
+ ext_part = ped_disk_extended_partition (disk);
+
+ last = NULL;
+ walk = (part->type & PED_PARTITION_LOGICAL) ?
+ ext_part->part_list : disk->part_list;
+
+ for (; walk; last = walk, walk = walk->next) {
+ if (walk->geom.start > part->geom.end)
+ break;
+ }
+
+ if (walk) {
+ return _disk_raw_insert_before (disk, walk, part);
+ } else {
+ if (last) {
+ return _disk_raw_insert_after (disk, last, part);
+ } else {
+ if (part->type & PED_PARTITION_LOGICAL)
+ ext_part->part_list = part;
+ else
+ disk->part_list = part;
+ }
+ }
+
+ return 1;
+}
+
+static PedConstraint*
+_partition_get_overlap_constraint (PedPartition* part, PedGeometry* geom)
+{
+ PedSector min_start;
+ PedSector max_end;
+ PedPartition* walk;
+ PedGeometry free_space;
+
+ PED_ASSERT (part->disk->update_mode);
+ PED_ASSERT (part->geom.dev == geom->dev);
+
+ if (part->type & PED_PARTITION_LOGICAL) {
+ PedPartition* ext_part;
+
+ ext_part = ped_disk_extended_partition (part->disk);
+ PED_ASSERT (ext_part != NULL);
+
+ min_start = ext_part->geom.start;
+ max_end = ext_part->geom.end;
+ walk = ext_part->part_list;
+ } else {
+ min_start = 0;
+ max_end = LLONG_MAX - 1;
+ walk = part->disk->part_list;
+ }
+
+ while (walk != NULL
+ && (walk->geom.start < geom->start
+ || min_start >= walk->geom.start)) {
+ if (walk != part)
+ min_start = walk->geom.end + 1;
+ walk = walk->next;
+ }
+
+ if (walk == part)
+ walk = walk->next;
+
+ if (walk)
+ max_end = walk->geom.start - 1;
+
+ if (min_start > max_end)
+ return NULL;
+
+ ped_geometry_init (&free_space, part->disk->dev,
+ min_start, max_end - min_start + 1);
+ return ped_constraint_new_from_max (&free_space);
+}
+
+static int
+_partition_check_basic_sanity (PedDisk* disk, PedPartition* part)
+{
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+
+ PED_ASSERT (part->disk == disk);
+
+ PED_ASSERT (part->geom.start >= 0);
+ PED_ASSERT (part->geom.start <= part->geom.end);
+
+ if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED)
+ && (part->type == PED_PARTITION_EXTENDED
+ || part->type == PED_PARTITION_LOGICAL)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s disk labels don't support logical or extended "
+ "partitions."),
+ disk->type->name);
+ return 0;
+ }
+
+ if (ped_partition_is_active (part)
+ && ! (part->type & PED_PARTITION_LOGICAL)) {
+ if (ped_disk_get_primary_partition_count (disk) + 1
+ > ped_disk_get_max_primary_partition_count (disk)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Too many primary partitions."));
+ return 0;
+ }
+ }
+
+ if ((part->type & PED_PARTITION_LOGICAL) && !ext_part) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't add a logical partition to %s, because "
+ "there is no extended partition."),
+ disk->dev->path);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+_check_extended_partition (PedDisk* disk, PedPartition* part)
+{
+ PedPartition* walk;
+ PedPartition* ext_part;
+
+ PED_ASSERT (disk != NULL);
+ ext_part = ped_disk_extended_partition (disk);
+ if (!ext_part) ext_part = part;
+ PED_ASSERT (ext_part != NULL);
+
+ if (part != ext_part) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't have more than one extended partition on %s."),
+ disk->dev->path);
+ return 0;
+ }
+
+ for (walk = ext_part->part_list; walk; walk = walk->next) {
+ if (!ped_geometry_test_inside (&ext_part->geom, &walk->geom)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't have logical partitions outside of "
+ "the extended partition."));
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+_check_partition (PedDisk* disk, PedPartition* part)
+{
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+
+ PED_ASSERT (part->geom.start <= part->geom.end);
+
+ if (part->type == PED_PARTITION_EXTENDED) {
+ if (!_check_extended_partition (disk, part))
+ return 0;
+ }
+
+ if (part->type & PED_PARTITION_LOGICAL
+ && !ped_geometry_test_inside (&ext_part->geom, &part->geom)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't have a logical partition outside of the "
+ "extended partition on %s."),
+ disk->dev->path) != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ if (! (part->type & PED_PARTITION_LOGICAL)
+ && ext_part && ext_part != part
+ && ped_geometry_test_inside (&ext_part->geom, &part->geom)) {
+ if (ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't have a primary partition inside an extended "
+ "partition.")) != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ if (part->geom.end >= disk->dev->length) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't have a partition outside the disk!"))
+ != PED_EXCEPTION_IGNORE )
+ return 0;
+ }
+
+ if (!(part->type & PED_PARTITION_METADATA))
+ if (!disk->type->ops->partition_check(part))
+ return 0;
+
+ return 1;
+}
+
+/**
+ * Adds PedPartition \p part to PedDisk \p disk.
+ *
+ * \warning The partition's geometry may be changed, subject to \p constraint.
+ * You could set \p constraint to <tt>ped_constraint_exact(&part->geom)</tt>,
+ * but many partition table schemes have special requirements on the start
+ * and end of partitions. Therefore, having an overly strict constraint
+ * will probably mean that this function will fail (in which
+ * case \p part will be left unmodified)
+ * \p part is assigned a number (\p part->num) in this process.
+ *
+ * \return \c 0 on failure.
+ */
+int
+ped_disk_add_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint)
+{
+ PedConstraint* overlap_constraint = NULL;
+ PedConstraint* constraints = NULL;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+
+ if (!_partition_check_basic_sanity (disk, part))
+ return 0;
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+
+ if (ped_partition_is_active (part)) {
+ overlap_constraint
+ = _partition_get_overlap_constraint (part, &part->geom);
+ constraints = ped_constraint_intersect (overlap_constraint,
+ constraint);
+
+ if (!constraints && constraint) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Can't have overlapping partitions.")) != PED_EXCEPTION_IGNORE)
+ goto error;
+ } else constraint = constraints;
+ if (!_partition_enumerate (part))
+ goto error;
+ if (!_partition_align (part, constraint))
+ goto error;
+ }
+ /* FIXME: when _check_partition fails, we end up leaking PART
+ at least for DVH partition tables. Simply calling
+ ped_partition_destroy(part) here fixes it for DVH, but
+ causes trouble for other partition types. Similarly,
+ reordering these two checks, putting _check_partition after
+ _disk_raw_add induces an infinite loop. */
+ if (!_check_partition (disk, part))
+ goto error;
+ if (!_disk_raw_add (disk, part))
+ goto error;
+
+ ped_constraint_destroy (overlap_constraint);
+ ped_constraint_destroy (constraints);
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+#ifdef DEBUG
+ if (!_disk_check_sanity (disk))
+ return 0;
+#endif
+ return 1;
+
+error:
+ ped_constraint_destroy (overlap_constraint);
+ ped_constraint_destroy (constraints);
+ _disk_pop_update_mode (disk);
+ return 0;
+}
+
+/**
+ * Removes PedPartition \p part from PedDisk \p disk.
+ *
+ * If \p part is an extended partition, it must not contain any logical
+ * partitions. \p part is *NOT* destroyed. The caller must call
+ * ped_partition_destroy(), or use ped_disk_delete_partition() instead.
+ *
+ * \return \c 0 on error.
+ */
+int
+ped_disk_remove_partition (PedDisk* disk, PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+ PED_ASSERT (part->part_list == NULL);
+ _disk_raw_remove (disk, part);
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+ ped_disk_enumerate_partitions (disk);
+ return 1;
+}
+
+static int
+ped_disk_delete_all_logical (PedDisk* disk);
+
+/**
+ * Removes \p part from \p disk, and destroys \p part.
+ *
+ * \return \c 0 on failure.
+ */
+int
+ped_disk_delete_partition (PedDisk* disk, PedPartition* part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+ if (part->type == PED_PARTITION_EXTENDED)
+ ped_disk_delete_all_logical (disk);
+ ped_disk_remove_partition (disk, part);
+ ped_partition_destroy (part);
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+
+ return 1;
+}
+
+static int
+ped_disk_delete_all_logical (PedDisk* disk)
+{
+ PedPartition* walk;
+ PedPartition* next;
+ PedPartition* ext_part;
+
+ PED_ASSERT (disk != NULL);
+ ext_part = ped_disk_extended_partition (disk);
+ PED_ASSERT (ext_part != NULL);
+
+ for (walk = ext_part->part_list; walk; walk = next) {
+ next = walk->next;
+
+ if (!ped_disk_delete_partition (disk, walk))
+ return 0;
+ }
+ return 1;
+}
+
+/**
+ * Removes and destroys all partitions on \p disk.
+ *
+ * \return \c 0 on failure.
+ */
+int
+ped_disk_delete_all (PedDisk* disk)
+{
+ PedPartition* walk;
+ PedPartition* next;
+
+ PED_ASSERT (disk != NULL);
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+
+ for (walk = disk->part_list; walk; walk = next) {
+ next = walk->next;
+
+ if (!ped_disk_delete_partition (disk, walk)) {
+ _disk_pop_update_mode(disk);
+ return 0;
+ }
+ }
+
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+
+ return 1;
+}
+
+/**
+ * Sets the geometry of \p part (i.e. change a partitions location). This can
+ * fail for many reasons, e.g. can't overlap with other partitions. If it
+ * does fail, \p part will remain unchanged. Returns \c 0 on failure. \p part's
+ * geometry may be set to something different from \p start and \p end subject
+ * to \p constraint.
+ *
+ * \warning The constraint warning from ped_disk_add_partition() applies.
+ *
+ * \note this function does not modify the contents of the partition. You need
+ * to call ped_file_system_resize() separately.
+ */
+int
+ped_disk_set_partition_geom (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint,
+ PedSector start, PedSector end)
+{
+ PedConstraint* overlap_constraint = NULL;
+ PedConstraint* constraints = NULL;
+ PedGeometry old_geom;
+ PedGeometry new_geom;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk == disk);
+
+ old_geom = part->geom;
+ if (!ped_geometry_init (&new_geom, part->geom.dev, start, end - start + 1))
+ return 0;
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+
+ overlap_constraint
+ = _partition_get_overlap_constraint (part, &new_geom);
+ constraints = ped_constraint_intersect (overlap_constraint, constraint);
+ if (!constraints && constraint) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't have overlapping partitions."));
+ goto error_pop_update_mode;
+ }
+
+ part->geom = new_geom;
+ if (!_partition_align (part, constraints))
+ goto error_pop_update_mode;
+ if (!_check_partition (disk, part))
+ goto error_pop_update_mode;
+
+ /* remove and add, to ensure the ordering gets updated if necessary */
+ _disk_raw_remove (disk, part);
+ _disk_raw_add (disk, part);
+
+ if (!_disk_pop_update_mode (disk))
+ goto error;
+
+ ped_constraint_destroy (overlap_constraint);
+ ped_constraint_destroy (constraints);
+ return 1;
+
+error_pop_update_mode:
+ _disk_pop_update_mode (disk);
+error:
+ ped_constraint_destroy (overlap_constraint);
+ ped_constraint_destroy (constraints);
+ part->geom = old_geom;
+ return 0;
+}
+
+/**
+ * Grow PedPartition \p part geometry to the maximum possible subject to
+ * \p constraint. The new geometry will be a superset of the old geometry.
+ *
+ * \return 0 on failure
+ */
+int
+ped_disk_maximize_partition (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint)
+{
+ PedGeometry old_geom;
+ PedSector global_min_start;
+ PedSector global_max_end;
+ PedSector new_start;
+ PedSector new_end;
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+ PedConstraint* constraint_any;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (part != NULL);
+
+ if (part->type & PED_PARTITION_LOGICAL) {
+ PED_ASSERT (ext_part != NULL);
+ global_min_start = ext_part->geom.start;
+ global_max_end = ext_part->geom.end;
+ } else {
+ global_min_start = 0;
+ global_max_end = disk->dev->length - 1;
+ }
+
+ old_geom = part->geom;
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+
+ if (part->prev)
+ new_start = part->prev->geom.end + 1;
+ else
+ new_start = global_min_start;
+
+ if (part->next)
+ new_end = part->next->geom.start - 1;
+ else
+ new_end = global_max_end;
+
+ if (!ped_disk_set_partition_geom (disk, part, constraint, new_start,
+ new_end))
+ goto error;
+
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+ return 1;
+
+error:
+ constraint_any = ped_constraint_any (disk->dev);
+ ped_disk_set_partition_geom (disk, part, constraint_any,
+ old_geom.start, old_geom.end);
+ ped_constraint_destroy (constraint_any);
+ _disk_pop_update_mode (disk);
+ return 0;
+}
+
+/**
+ * Get the maximum geometry \p part can be grown to, subject to
+ * \p constraint.
+ *
+ * \return \c NULL on failure.
+ */
+PedGeometry*
+ped_disk_get_max_partition_geometry (PedDisk* disk, PedPartition* part,
+ const PedConstraint* constraint)
+{
+ PedGeometry old_geom;
+ PedGeometry* max_geom;
+ PedConstraint* constraint_exact;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(part != NULL);
+ PED_ASSERT(ped_partition_is_active (part));
+
+ old_geom = part->geom;
+ if (!ped_disk_maximize_partition (disk, part, constraint))
+ return NULL;
+ max_geom = ped_geometry_duplicate (&part->geom);
+
+ constraint_exact = ped_constraint_exact (&old_geom);
+ ped_disk_set_partition_geom (disk, part, constraint_exact,
+ old_geom.start, old_geom.end);
+ ped_constraint_destroy (constraint_exact);
+
+ /* this assertion should never fail, because the old
+ * geometry was valid
+ */
+ PED_ASSERT (ped_geometry_test_equal (&part->geom, &old_geom));
+
+ return max_geom;
+}
+
+/**
+ * Reduce the size of the extended partition to a minimum while still wrapping
+ * its logical partitions. If there are no logical partitions, remove the
+ * extended partition.
+ *
+ * \return 0 on failure.
+ */
+int
+ped_disk_minimize_extended_partition (PedDisk* disk)
+{
+ PedPartition* first_logical;
+ PedPartition* last_logical;
+ PedPartition* walk;
+ PedPartition* ext_part;
+ PedConstraint* constraint;
+ int status;
+
+ PED_ASSERT (disk != NULL);
+
+ ext_part = ped_disk_extended_partition (disk);
+ if (!ext_part)
+ return 1;
+
+ if (!_disk_push_update_mode (disk))
+ return 0;
+
+ first_logical = ext_part->part_list;
+ if (!first_logical) {
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+ return ped_disk_delete_partition (disk, ext_part);
+ }
+
+ for (walk = first_logical; walk->next; walk = walk->next);
+ last_logical = walk;
+
+ constraint = ped_constraint_any (disk->dev);
+ status = ped_disk_set_partition_geom (disk, ext_part, constraint,
+ first_logical->geom.start,
+ last_logical->geom.end);
+ ped_constraint_destroy (constraint);
+
+ if (!_disk_pop_update_mode (disk))
+ return 0;
+ return status;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * \addtogroup PedPartition
+ *
+ * @{
+ */
+
+/**
+ * Returns a name that seems mildly appropriate for a partition type \p type.
+ *
+ * Eg, if you pass (PED_PARTITION_LOGICAL & PED_PARTITION_FREESPACE), it
+ * will return "free". This isn't to be taken too seriously - it's just
+ * useful for user interfaces, so you can show the user something ;-)
+ *
+ * \note The returned string will be in English. However,
+ * translations are provided, so the caller can call
+ * dgettext("parted", RESULT) on the result.
+ *
+ */
+const char*
+ped_partition_type_get_name (PedPartitionType type)
+{
+ if (type & PED_PARTITION_METADATA)
+ return N_("metadata");
+ else if (type & PED_PARTITION_FREESPACE)
+ return N_("free");
+ else if (type & PED_PARTITION_EXTENDED)
+ return N_("extended");
+ else if (type & PED_PARTITION_LOGICAL)
+ return N_("logical");
+ else
+ return N_("primary");
+}
+
+
+/**
+ * Returns a name for a \p flag, e.g. PED_PARTITION_BOOT will return "boot".
+ *
+ * \note The returned string will be in English. However,
+ * translations are provided, so the caller can call
+ * dgettext("parted", RESULT) on the result.
+ */
+const char*
+ped_partition_flag_get_name (PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return N_("boot");
+ case PED_PARTITION_BIOS_GRUB:
+ return N_("bios_grub");
+ case PED_PARTITION_ROOT:
+ return N_("root");
+ case PED_PARTITION_SWAP:
+ return N_("swap");
+ case PED_PARTITION_HIDDEN:
+ return N_("hidden");
+ case PED_PARTITION_RAID:
+ return N_("raid");
+ case PED_PARTITION_LVM:
+ return N_("lvm");
+ case PED_PARTITION_LBA:
+ return N_("lba");
+ case PED_PARTITION_HPSERVICE:
+ return N_("hp-service");
+ case PED_PARTITION_PALO:
+ return N_("palo");
+ case PED_PARTITION_PREP:
+ return N_("prep");
+ case PED_PARTITION_MSFT_RESERVED:
+ return N_("msftres");
+ case PED_PARTITION_MSFT_DATA:
+ return N_("msftdata");
+ case PED_PARTITION_APPLE_TV_RECOVERY:
+ return N_("atvrecv");
+ case PED_PARTITION_DIAG:
+ return N_("diag");
+ case PED_PARTITION_LEGACY_BOOT:
+ return N_("legacy_boot");
+ case PED_PARTITION_IRST:
+ return N_("irst");
+ case PED_PARTITION_ESP:
+ return N_("esp");
+ case PED_PARTITION_CHROMEOS_KERNEL:
+ return N_("chromeos_kernel");
+ case PED_PARTITION_BLS_BOOT:
+ return N_("bls_boot");
+ case PED_PARTITION_LINUX_HOME:
+ return N_("linux-home");
+ case PED_PARTITION_NO_AUTOMOUNT:
+ return N_("no_automount");
+
+ default:
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Unknown partition flag, %d."),
+ flag);
+ return NULL;
+ }
+}
+
+/**
+ * Iterates through all flags.
+ *
+ * ped_partition_flag_next(0) returns the first flag
+ *
+ * \return the next flag, or 0 if there are no more flags
+ */
+PedPartitionFlag
+ped_partition_flag_next (PedPartitionFlag flag)
+{
+ return (flag + 1) % (PED_PARTITION_LAST_FLAG + 1);
+}
+
+/**
+ * Returns the flag associated with \p name.
+ *
+ * \p name can be the English
+ * string, or the translation for the native language.
+ */
+PedPartitionFlag
+ped_partition_flag_get_by_name (const char* name)
+{
+ PedPartitionFlag flag;
+ const char* flag_name;
+
+ for (flag = ped_partition_flag_next (0); flag;
+ flag = ped_partition_flag_next (flag)) {
+ flag_name = ped_partition_flag_get_name (flag);
+ if (flag_name && (strcasecmp (name, flag_name) == 0
+ || strcasecmp (name, _(flag_name)) == 0))
+ return flag;
+ }
+
+ return 0;
+}
+
+static void
+ped_partition_print (const PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ printf (" %-10s %02d (%d->%d)\n",
+ ped_partition_type_get_name (part->type),
+ part->num,
+ (int) part->geom.start, (int) part->geom.end);
+}
+
+/** @} */
+
+/**
+ * \addtogroup PedDisk
+ *
+ * @{
+ */
+
+/**
+ * Prints a summary of disk's partitions. Useful for debugging.
+ */
+void
+ped_disk_print (const PedDisk* disk)
+{
+ PedPartition* part;
+
+ PED_ASSERT (disk != NULL);
+
+ for (part = disk->part_list; part;
+ part = ped_disk_next_partition (disk, part))
+ ped_partition_print (part);
+}
+
+/** @} */
diff --git a/libparted/exception.c b/libparted/exception.c
new file mode 100644
index 0000000..1d95853
--- /dev/null
+++ b/libparted/exception.c
@@ -0,0 +1,313 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file exception.c */
+
+/**
+ * \addtogroup PedException
+ *
+ * \brief Exception handling.
+ *
+ * There are a few types of exceptions: PED_EXCEPTION_INFORMATION,
+ * PED_EXCEPTION_WARNING, PED_EXCEPTION_ERROR, PED_EXCEPTION_FATAL,
+ * PED_EXCEPTION_BUG.
+ *
+ * They are "thrown" when one of the above events occur while executing
+ * a libparted function. For example, if ped_device_open() fails
+ * because the device doesn't exist, an exception will be thrown.
+ * Exceptions contain text describing what the event was. It will give
+ * at least one option for resolving the exception: PED_EXCEPTION_FIX,
+ * PED_EXCEPTION_YES, PED_EXCEPTION_NO, PED_EXCEPTION_OK, PED_EXCEPTION_RETRY,
+ * PED_EXCEPTION_IGNORE, PED_EXCEPTION_CANCEL. After an exception is thrown,
+ * there are two things that can happen:
+ *
+ * -# an exception handler is called, which selects how the exception should be
+ * resolved (usually by asking the user). Also note: an exception handler may
+ * choose to return PED_EXCEPTION_UNHANDLED. In this case, a default action
+ * will be taken by libparted (respectively the code that threw the
+ * exception). In general, a default action will be "safe".
+ * -# the exception is not handled, because the caller of the function wants to
+ * handle everything itself. In this case, PED_EXCEPTION_UNHANDLED is
+ * returned.
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/exception.h>
+
+#define N_(String) String
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+int ped_exception = 0;
+
+static PedExceptionOption default_handler (PedException* ex);
+
+static PedExceptionHandler* ex_handler = default_handler;
+static PedException* ex = NULL;
+static int ex_fetch_count = 0;
+
+static const char *const type_strings [] = {
+ N_("Information"),
+ N_("Warning"),
+ N_("Error"),
+ N_("Fatal"),
+ N_("Bug"),
+ N_("No Implementation")
+};
+
+static const char *const option_strings [] = {
+ N_("Fix"),
+ N_("Yes"),
+ N_("No"),
+ N_("OK"),
+ N_("Retry"),
+ N_("Ignore"),
+ N_("Cancel")
+};
+
+/**
+ * Return a string describing an exception type.
+ */
+char*
+ped_exception_get_type_string (PedExceptionType ex_type)
+{
+ return (char *) type_strings [ex_type - 1];
+}
+
+/* FIXME: move this out to the prospective math.c */
+/* FIXME: this can probably be done more efficiently */
+static int _GL_ATTRIBUTE_PURE
+ped_log2 (int n)
+{
+ int x;
+
+ PED_ASSERT (n > 0);
+
+ for (x=0; 1 << x <= n; x++);
+
+ return x - 1;
+}
+
+/**
+ * Return a string describing an exception option.
+ */
+char*
+ped_exception_get_option_string (PedExceptionOption ex_opt)
+{
+ return (char *) option_strings [ped_log2 (ex_opt)];
+}
+
+static PedExceptionOption
+default_handler (PedException* e)
+{
+ if (e->type == PED_EXCEPTION_BUG)
+ fprintf (stderr,
+ _("A bug has been detected in GNU Parted. "
+ "Refer to the web site of parted "
+ "http://www.gnu.org/software/parted/parted.html "
+ "for more information of what could be useful "
+ "for bug submitting! "
+ "Please email a bug report to "
+ "%s containing at least the "
+ "version (%s) and the following message: "),
+ PACKAGE_BUGREPORT, VERSION);
+ else
+ fprintf (stderr, "%s: ",
+ ped_exception_get_type_string (e->type));
+ fprintf (stderr, "%s\n", e->message);
+
+ switch (e->options) {
+ case PED_EXCEPTION_OK:
+ case PED_EXCEPTION_CANCEL:
+ case PED_EXCEPTION_IGNORE:
+ return e->options;
+
+ default:
+ return PED_EXCEPTION_UNHANDLED;
+ }
+}
+
+/**
+ * Set the exception handler.
+ *
+ * The exception handler should return ONE of the options set in ex->options,
+ * indicating the way the event should be resolved.
+ */
+void
+ped_exception_set_handler (PedExceptionHandler* handler)
+{
+ if (handler)
+ ex_handler = handler;
+ else
+ ex_handler = default_handler;
+}
+
+/**
+ * Get the current exception handler.
+ */
+PedExceptionHandler *
+ped_exception_get_handler (void)
+{
+ if (ex_handler)
+ return ex_handler;
+ return default_handler;
+}
+
+/**
+ * Assert that the current exception has been resolved.
+ */
+void
+ped_exception_catch ()
+{
+ if (ped_exception) {
+ ped_exception = 0;
+ free (ex->message);
+ free (ex);
+ ex = NULL;
+ }
+}
+
+static PedExceptionOption
+do_throw ()
+{
+ PedExceptionOption ex_opt;
+
+ ped_exception = 1;
+
+ if (ex_fetch_count) {
+ return PED_EXCEPTION_UNHANDLED;
+ } else {
+ ex_opt = ex_handler (ex);
+ ped_exception_catch ();
+ return ex_opt;
+ }
+}
+
+/**
+ * Throw an exception.
+ *
+ * You can also use this in a program using libparted.
+ * "message" is a printf-like format string, so you can do
+ *
+ * \code
+ * ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_CANCEL,
+ * "Can't open %s", file_name);
+ * \endcode
+ *
+ * Returns the option selected to resolve the exception. If the exception was
+ * unhandled, PED_EXCEPTION_UNHANDLED is returned.
+ */
+PedExceptionOption
+ped_exception_throw (PedExceptionType ex_type,
+ PedExceptionOption ex_opts, const char* message, ...)
+{
+ va_list arg_list;
+ int result;
+ static int size = 1000;
+
+ if (ex)
+ ped_exception_catch ();
+
+ ex = (PedException*) malloc (sizeof (PedException));
+ if (!ex)
+ goto no_memory;
+
+ ex->type = ex_type;
+ ex->options = ex_opts;
+
+ while (message) {
+ ex->message = (char*) malloc (size * sizeof (char));
+ if (!ex->message)
+ goto no_memory;
+
+ va_start (arg_list, message);
+ result = vsnprintf (ex->message, size, message, arg_list);
+ va_end (arg_list);
+
+ if (result > -1 && result < size)
+ break;
+
+ size += 10;
+ free (ex->message);
+ }
+
+ return do_throw ();
+
+no_memory:
+ fputs ("Out of memory in exception handler!\n", stderr);
+
+ va_start (arg_list, message);
+ vfprintf (stderr, message, arg_list);
+ va_end (arg_list);
+
+ return PED_EXCEPTION_UNHANDLED;
+}
+
+/**
+ * Rethrow an unhandled exception.
+ * This means repeating the last ped_exception_throw() statement.
+ */
+PedExceptionOption
+ped_exception_rethrow ()
+{
+ return do_throw ();
+}
+
+/**
+ * Indicates that exceptions should not go to the exception handler, but
+ * passed up to the calling function(s). All calls to
+ * ped_exception_throw() will return PED_EXCEPTION_UNHANDLED.
+ */
+void
+ped_exception_fetch_all ()
+{
+ ex_fetch_count++;
+}
+
+/**
+ * Indicates that the calling function does not want to accept any
+ * responsibility for exceptions any more.
+ *
+ * \note a caller of that function may still want responsibility, so
+ * ped_exception_throw() may not invoke the exception handler.
+ *
+ * \warning every call to this function must have a preceding
+ * ped_exception_fetch_all().
+ */
+void
+ped_exception_leave_all ()
+{
+ PED_ASSERT (ex_fetch_count > 0);
+ ex_fetch_count--;
+}
+
+/** @} */
diff --git a/libparted/filesys.c b/libparted/filesys.c
new file mode 100644
index 0000000..f67a4e8
--- /dev/null
+++ b/libparted/filesys.c
@@ -0,0 +1,295 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file filesys.c */
+
+/**
+ * \addtogroup PedFileSystem
+ *
+ * \note File systems exist on a PedGeometry - NOT a PedPartition.
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define BUFFER_SIZE 4096 /* in sectors */
+
+static PedFileSystemType* fs_types = NULL;
+static PedFileSystemAlias* fs_aliases = NULL;
+
+void
+ped_file_system_type_register (PedFileSystemType* fs_type)
+{
+ PED_ASSERT (fs_type != NULL);
+ PED_ASSERT (fs_type->ops != NULL);
+ PED_ASSERT (fs_type->name != NULL);
+
+ fs_type->next = fs_types;
+ fs_types = fs_type;
+}
+
+void
+ped_file_system_type_unregister (PedFileSystemType* fs_type)
+{
+ PedFileSystemType* walk;
+ PedFileSystemType* last = NULL;
+
+ PED_ASSERT (fs_types != NULL);
+ PED_ASSERT (fs_type != NULL);
+
+ for (walk = fs_types; walk && walk != fs_type;
+ last = walk, walk = walk->next);
+
+ PED_ASSERT (walk != NULL);
+ if (last)
+ ((struct _PedFileSystemType*) last)->next = fs_type->next;
+ else
+ fs_types = fs_type->next;
+}
+
+void
+ped_file_system_alias_register (PedFileSystemType* fs_type, const char* alias,
+ int deprecated)
+{
+ PedFileSystemAlias* fs_alias;
+
+ PED_ASSERT (fs_type != NULL);
+ PED_ASSERT (alias != NULL);
+
+ fs_alias = ped_malloc (sizeof *fs_alias);
+ if (!fs_alias)
+ return;
+
+ fs_alias->next = fs_aliases;
+ fs_alias->fs_type = fs_type;
+ fs_alias->alias = alias;
+ fs_alias->deprecated = deprecated;
+ fs_aliases = fs_alias;
+}
+
+void
+ped_file_system_alias_unregister (PedFileSystemType* fs_type,
+ const char* alias)
+{
+ PedFileSystemAlias* walk;
+ PedFileSystemAlias* last = NULL;
+
+ PED_ASSERT (fs_aliases != NULL);
+ PED_ASSERT (fs_type != NULL);
+ PED_ASSERT (alias != NULL);
+
+ for (walk = fs_aliases; walk; last = walk, walk = walk->next) {
+ if (walk->fs_type == fs_type && !strcmp (walk->alias, alias))
+ break;
+ }
+
+ PED_ASSERT (walk != NULL);
+ if (last)
+ last->next = walk->next;
+ else
+ fs_aliases = walk->next;
+ free (walk);
+}
+
+/**
+ * Get a PedFileSystemType by its @p name.
+ *
+ * @return @c NULL if none found.
+ */
+PedFileSystemType*
+ped_file_system_type_get (const char* name)
+{
+ PedFileSystemType* walk;
+ PedFileSystemAlias* alias_walk;
+
+ PED_ASSERT (name != NULL);
+
+ for (walk = fs_types; walk != NULL; walk = walk->next) {
+ if (!strcasecmp (walk->name, name))
+ break;
+ }
+ if (walk != NULL)
+ return walk;
+
+ for (alias_walk = fs_aliases; alias_walk != NULL;
+ alias_walk = alias_walk->next) {
+ if (!strcasecmp (alias_walk->alias, name))
+ break;
+ }
+ if (alias_walk != NULL) {
+ if (alias_walk->deprecated)
+ PED_DEBUG (0, "File system alias %s is deprecated",
+ name);
+ return alias_walk->fs_type;
+ }
+
+ return NULL;
+}
+
+/**
+ * Get the next PedFileSystemType after @p fs_type.
+ *
+ * @return @c NULL if @p fs_type is the last item in the list.
+ */
+PedFileSystemType*
+ped_file_system_type_get_next (const PedFileSystemType* fs_type)
+{
+ if (fs_type)
+ return fs_type->next;
+ else
+ return fs_types;
+}
+
+/**
+ * Get the next PedFileSystemAlias after @p fs_alias.
+ *
+ * @return @c NULL if @p fs_alias is the last item in the list.
+ */
+PedFileSystemAlias*
+ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias)
+{
+ if (fs_alias)
+ return fs_alias->next;
+ else
+ return fs_aliases;
+}
+
+/**
+ * Attempt to find a file system and return the region it occupies.
+ *
+ * @param fs_type The file system type to probe for.
+ * @param geom The region to be searched.
+ *
+ * @return @p NULL if @p fs_type file system wasn't detected
+ */
+PedGeometry*
+ped_file_system_probe_specific (
+ const PedFileSystemType* fs_type, PedGeometry* geom)
+{
+ PedGeometry* result;
+
+ PED_ASSERT (fs_type != NULL);
+ PED_ASSERT (fs_type->ops->probe != NULL);
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_device_open (geom->dev))
+ return 0;
+ result = fs_type->ops->probe (geom);
+ ped_device_close (geom->dev);
+ return result;
+}
+
+static int
+_geometry_error (const PedGeometry* a, const PedGeometry* b)
+{
+ PedSector start_delta = a->start - b->start;
+ PedSector end_delta = a->end - b->end;
+
+ return llabs (start_delta) + llabs (end_delta);
+}
+
+static PedFileSystemType*
+_best_match (const PedGeometry* geom, PedFileSystemType* detected [],
+ const int detected_error [], int detected_count)
+{
+ int best_match = 0;
+ int i;
+ PedSector min_error;
+
+ min_error = PED_MAX (4096, geom->length / 100);
+
+ for (i = 1; i < detected_count; i++) {
+ if (detected_error [i] < detected_error [best_match])
+ best_match = i;
+ }
+
+ /* make sure the best match is significantly better than all the
+ * other matches
+ */
+ for (i = 0; i < detected_count; i++) {
+ if (i == best_match)
+ continue;
+
+ if (abs (detected_error [best_match] - detected_error [i])
+ < min_error)
+ return NULL;
+ }
+
+ return detected [best_match];
+}
+
+
+/**
+ * Attempt to detect a file system in region \p geom.
+ * This function tries to be clever at dealing with ambiguous
+ * situations, such as when one file system was not completely erased before a
+ * new file system was created on top of it.
+ *
+ * \return a new PedFileSystem on success, \c NULL on failure
+ */
+PedFileSystemType*
+ped_file_system_probe (PedGeometry* geom)
+{
+ PedFileSystemType* detected[32];
+ int detected_error[32];
+ int detected_count = 0;
+ PedFileSystemType* walk = NULL;
+
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_device_open (geom->dev))
+ return NULL;
+
+ ped_exception_fetch_all ();
+ while ( (walk = ped_file_system_type_get_next (walk)) ) {
+ PedGeometry* probed;
+
+ probed = ped_file_system_probe_specific (walk, geom);
+ if (probed) {
+ detected [detected_count] = walk;
+ detected_error [detected_count]
+ = _geometry_error (geom, probed);
+ detected_count++;
+ ped_geometry_destroy (probed);
+ } else {
+ ped_exception_catch ();
+ }
+ }
+ ped_exception_leave_all ();
+
+ ped_device_close (geom->dev);
+
+ if (!detected_count)
+ return NULL;
+ walk = _best_match (geom, detected, detected_error, detected_count);
+ if (walk)
+ return walk;
+ return NULL;
+}
diff --git a/libparted/fs/Makefile.am b/libparted/fs/Makefile.am
new file mode 100644
index 0000000..41a60d9
--- /dev/null
+++ b/libparted/fs/Makefile.am
@@ -0,0 +1,123 @@
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+# Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+partedincludedir = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/lib
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+noinst_LTLIBRARIES = libfs.la
+
+libfs_la_LIBADD = $(UUID_LIBS) \
+ $(INTLLIBS) \
+ $(OS_LIBS)
+
+libfs_la_SOURCES = \
+ amiga/affs.c \
+ amiga/affs.h \
+ amiga/amiga.c \
+ amiga/amiga.h \
+ amiga/apfs.c \
+ amiga/apfs.h \
+ amiga/asfs.c \
+ amiga/asfs.h \
+ amiga/a-interface.c \
+ btrfs/btrfs.c \
+ ext2/ext2.h \
+ ext2/ext2_fs.h \
+ ext2/interface.c \
+ fat/bootsector.c \
+ fat/bootsector.h \
+ fat/count.h \
+ fat/fat.c \
+ fat/fat.h \
+ f2fs/f2fs.c \
+ f2fs/f2fs.h \
+ hfs/hfs.c \
+ hfs/hfs.h \
+ hfs/probe.c \
+ hfs/probe.h \
+ jfs/jfs.c \
+ jfs/jfs_superblock.h \
+ jfs/jfs_types.h \
+ linux_swap/linux_swap.c \
+ nilfs2/nilfs2.c \
+ ntfs/ntfs.c \
+ reiserfs/reiserfs.c \
+ reiserfs/reiserfs.h \
+ udf/udf.c \
+ ufs/ufs.c \
+ xfs/platform_defs.h \
+ xfs/xfs.c \
+ xfs/xfs_sb.h \
+ xfs/xfs_types.h
+
+lib_LTLIBRARIES = libparted-fs-resize.la
+
+EXTRA_DIST = \
+ hfs/DOC \
+ hfs/HISTORY \
+ hfs/TODO
+
+# Set the shared library version, per Libtool's guidelines.
+# For details, see the "Updating library version information" section of
+# "info libtool".
+CURRENT = 0
+REVISION = 5
+AGE = 0
+
+sym_file = $(srcdir)/fsresize.sym
+libparted_fs_resize_la_LDFLAGS = \
+ -Wl,--version-script=$(sym_file) \
+ -version-info $(CURRENT):$(REVISION):$(AGE)
+EXTRA_DIST += fsresize.sym
+libparted_fs_resize_la_DEPENDENCIES = $(sym_file)
+
+libparted_fs_resize_la_SOURCES = \
+ r/filesys.c \
+ r/fat/bootsector.c \
+ r/fat/bootsector.h \
+ r/fat/calc.c \
+ r/fat/calc.h \
+ r/fat/clstdup.c \
+ r/fat/clstdup.h \
+ r/fat/context.c \
+ r/fat/context.h \
+ r/fat/count.c \
+ r/fat/count.h \
+ r/fat/fat.c \
+ r/fat/fat.h \
+ r/fat/fatio.c \
+ r/fat/fatio.h \
+ r/fat/resize.c \
+ r/fat/table.c \
+ r/fat/table.h \
+ r/fat/traverse.c \
+ r/fat/traverse.h \
+ r/hfs/advfs.c \
+ r/hfs/advfs.h \
+ r/hfs/advfs_plus.c \
+ r/hfs/advfs_plus.h \
+ r/hfs/cache.c \
+ r/hfs/cache.h \
+ r/hfs/file.c \
+ r/hfs/file.h \
+ r/hfs/file_plus.c \
+ r/hfs/file_plus.h \
+ r/hfs/hfs.c \
+ r/hfs/hfs.h \
+ r/hfs/journal.c \
+ r/hfs/journal.h \
+ r/hfs/probe.c \
+ r/hfs/probe.h \
+ r/hfs/reloc.c \
+ r/hfs/reloc.h \
+ r/hfs/reloc_plus.c \
+ r/hfs/reloc_plus.h
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/libparted/labels \
+ $(partedincludedir) \
+ $(INTLINCS)
diff --git a/libparted/fs/Makefile.in b/libparted/fs/Makefile.in
new file mode 100644
index 0000000..3b552b8
--- /dev/null
+++ b/libparted/fs/Makefile.in
@@ -0,0 +1,2532 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+# Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libparted/fs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libfs_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am__dirstamp = $(am__leading_dot)dirstamp
+am_libfs_la_OBJECTS = amiga/affs.lo amiga/amiga.lo amiga/apfs.lo \
+ amiga/asfs.lo amiga/a-interface.lo btrfs/btrfs.lo \
+ ext2/interface.lo fat/bootsector.lo fat/fat.lo f2fs/f2fs.lo \
+ hfs/hfs.lo hfs/probe.lo jfs/jfs.lo linux_swap/linux_swap.lo \
+ nilfs2/nilfs2.lo ntfs/ntfs.lo reiserfs/reiserfs.lo udf/udf.lo \
+ ufs/ufs.lo xfs/xfs.lo
+libfs_la_OBJECTS = $(am_libfs_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+libparted_fs_resize_la_LIBADD =
+am_libparted_fs_resize_la_OBJECTS = r/filesys.lo r/fat/bootsector.lo \
+ r/fat/calc.lo r/fat/clstdup.lo r/fat/context.lo r/fat/count.lo \
+ r/fat/fat.lo r/fat/fatio.lo r/fat/resize.lo r/fat/table.lo \
+ r/fat/traverse.lo r/hfs/advfs.lo r/hfs/advfs_plus.lo \
+ r/hfs/cache.lo r/hfs/file.lo r/hfs/file_plus.lo r/hfs/hfs.lo \
+ r/hfs/journal.lo r/hfs/probe.lo r/hfs/reloc.lo \
+ r/hfs/reloc_plus.lo
+libparted_fs_resize_la_OBJECTS = $(am_libparted_fs_resize_la_OBJECTS)
+libparted_fs_resize_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(AM_CFLAGS) $(CFLAGS) $(libparted_fs_resize_la_LDFLAGS) \
+ $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = amiga/$(DEPDIR)/a-interface.Plo \
+ amiga/$(DEPDIR)/affs.Plo amiga/$(DEPDIR)/amiga.Plo \
+ amiga/$(DEPDIR)/apfs.Plo amiga/$(DEPDIR)/asfs.Plo \
+ btrfs/$(DEPDIR)/btrfs.Plo ext2/$(DEPDIR)/interface.Plo \
+ f2fs/$(DEPDIR)/f2fs.Plo fat/$(DEPDIR)/bootsector.Plo \
+ fat/$(DEPDIR)/fat.Plo hfs/$(DEPDIR)/hfs.Plo \
+ hfs/$(DEPDIR)/probe.Plo jfs/$(DEPDIR)/jfs.Plo \
+ linux_swap/$(DEPDIR)/linux_swap.Plo \
+ nilfs2/$(DEPDIR)/nilfs2.Plo ntfs/$(DEPDIR)/ntfs.Plo \
+ r/$(DEPDIR)/filesys.Plo r/fat/$(DEPDIR)/bootsector.Plo \
+ r/fat/$(DEPDIR)/calc.Plo r/fat/$(DEPDIR)/clstdup.Plo \
+ r/fat/$(DEPDIR)/context.Plo r/fat/$(DEPDIR)/count.Plo \
+ r/fat/$(DEPDIR)/fat.Plo r/fat/$(DEPDIR)/fatio.Plo \
+ r/fat/$(DEPDIR)/resize.Plo r/fat/$(DEPDIR)/table.Plo \
+ r/fat/$(DEPDIR)/traverse.Plo r/hfs/$(DEPDIR)/advfs.Plo \
+ r/hfs/$(DEPDIR)/advfs_plus.Plo r/hfs/$(DEPDIR)/cache.Plo \
+ r/hfs/$(DEPDIR)/file.Plo r/hfs/$(DEPDIR)/file_plus.Plo \
+ r/hfs/$(DEPDIR)/hfs.Plo r/hfs/$(DEPDIR)/journal.Plo \
+ r/hfs/$(DEPDIR)/probe.Plo r/hfs/$(DEPDIR)/reloc.Plo \
+ r/hfs/$(DEPDIR)/reloc_plus.Plo reiserfs/$(DEPDIR)/reiserfs.Plo \
+ udf/$(DEPDIR)/udf.Plo ufs/$(DEPDIR)/ufs.Plo \
+ xfs/$(DEPDIR)/xfs.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(libfs_la_SOURCES) $(libparted_fs_resize_la_SOURCES)
+DIST_SOURCES = $(libfs_la_SOURCES) $(libparted_fs_resize_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+partedincludedir = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir)/lib
+AM_CFLAGS = $(WARN_CFLAGS)
+noinst_LTLIBRARIES = libfs.la
+libfs_la_LIBADD = $(UUID_LIBS) \
+ $(INTLLIBS) \
+ $(OS_LIBS)
+
+libfs_la_SOURCES = \
+ amiga/affs.c \
+ amiga/affs.h \
+ amiga/amiga.c \
+ amiga/amiga.h \
+ amiga/apfs.c \
+ amiga/apfs.h \
+ amiga/asfs.c \
+ amiga/asfs.h \
+ amiga/a-interface.c \
+ btrfs/btrfs.c \
+ ext2/ext2.h \
+ ext2/ext2_fs.h \
+ ext2/interface.c \
+ fat/bootsector.c \
+ fat/bootsector.h \
+ fat/count.h \
+ fat/fat.c \
+ fat/fat.h \
+ f2fs/f2fs.c \
+ f2fs/f2fs.h \
+ hfs/hfs.c \
+ hfs/hfs.h \
+ hfs/probe.c \
+ hfs/probe.h \
+ jfs/jfs.c \
+ jfs/jfs_superblock.h \
+ jfs/jfs_types.h \
+ linux_swap/linux_swap.c \
+ nilfs2/nilfs2.c \
+ ntfs/ntfs.c \
+ reiserfs/reiserfs.c \
+ reiserfs/reiserfs.h \
+ udf/udf.c \
+ ufs/ufs.c \
+ xfs/platform_defs.h \
+ xfs/xfs.c \
+ xfs/xfs_sb.h \
+ xfs/xfs_types.h
+
+lib_LTLIBRARIES = libparted-fs-resize.la
+EXTRA_DIST = hfs/DOC hfs/HISTORY hfs/TODO fsresize.sym
+
+# Set the shared library version, per Libtool's guidelines.
+# For details, see the "Updating library version information" section of
+# "info libtool".
+CURRENT = 0
+REVISION = 5
+AGE = 0
+sym_file = $(srcdir)/fsresize.sym
+libparted_fs_resize_la_LDFLAGS = \
+ -Wl,--version-script=$(sym_file) \
+ -version-info $(CURRENT):$(REVISION):$(AGE)
+
+libparted_fs_resize_la_DEPENDENCIES = $(sym_file)
+libparted_fs_resize_la_SOURCES = \
+ r/filesys.c \
+ r/fat/bootsector.c \
+ r/fat/bootsector.h \
+ r/fat/calc.c \
+ r/fat/calc.h \
+ r/fat/clstdup.c \
+ r/fat/clstdup.h \
+ r/fat/context.c \
+ r/fat/context.h \
+ r/fat/count.c \
+ r/fat/count.h \
+ r/fat/fat.c \
+ r/fat/fat.h \
+ r/fat/fatio.c \
+ r/fat/fatio.h \
+ r/fat/resize.c \
+ r/fat/table.c \
+ r/fat/table.h \
+ r/fat/traverse.c \
+ r/fat/traverse.h \
+ r/hfs/advfs.c \
+ r/hfs/advfs.h \
+ r/hfs/advfs_plus.c \
+ r/hfs/advfs_plus.h \
+ r/hfs/cache.c \
+ r/hfs/cache.h \
+ r/hfs/file.c \
+ r/hfs/file.h \
+ r/hfs/file_plus.c \
+ r/hfs/file_plus.h \
+ r/hfs/hfs.c \
+ r/hfs/hfs.h \
+ r/hfs/journal.c \
+ r/hfs/journal.h \
+ r/hfs/probe.c \
+ r/hfs/probe.h \
+ r/hfs/reloc.c \
+ r/hfs/reloc.h \
+ r/hfs/reloc_plus.c \
+ r/hfs/reloc_plus.h
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/libparted/labels \
+ $(partedincludedir) \
+ $(INTLINCS)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libparted/fs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libparted/fs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+ }
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+amiga/$(am__dirstamp):
+ @$(MKDIR_P) amiga
+ @: > amiga/$(am__dirstamp)
+amiga/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) amiga/$(DEPDIR)
+ @: > amiga/$(DEPDIR)/$(am__dirstamp)
+amiga/affs.lo: amiga/$(am__dirstamp) amiga/$(DEPDIR)/$(am__dirstamp)
+amiga/amiga.lo: amiga/$(am__dirstamp) amiga/$(DEPDIR)/$(am__dirstamp)
+amiga/apfs.lo: amiga/$(am__dirstamp) amiga/$(DEPDIR)/$(am__dirstamp)
+amiga/asfs.lo: amiga/$(am__dirstamp) amiga/$(DEPDIR)/$(am__dirstamp)
+amiga/a-interface.lo: amiga/$(am__dirstamp) \
+ amiga/$(DEPDIR)/$(am__dirstamp)
+btrfs/$(am__dirstamp):
+ @$(MKDIR_P) btrfs
+ @: > btrfs/$(am__dirstamp)
+btrfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) btrfs/$(DEPDIR)
+ @: > btrfs/$(DEPDIR)/$(am__dirstamp)
+btrfs/btrfs.lo: btrfs/$(am__dirstamp) btrfs/$(DEPDIR)/$(am__dirstamp)
+ext2/$(am__dirstamp):
+ @$(MKDIR_P) ext2
+ @: > ext2/$(am__dirstamp)
+ext2/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ext2/$(DEPDIR)
+ @: > ext2/$(DEPDIR)/$(am__dirstamp)
+ext2/interface.lo: ext2/$(am__dirstamp) ext2/$(DEPDIR)/$(am__dirstamp)
+fat/$(am__dirstamp):
+ @$(MKDIR_P) fat
+ @: > fat/$(am__dirstamp)
+fat/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) fat/$(DEPDIR)
+ @: > fat/$(DEPDIR)/$(am__dirstamp)
+fat/bootsector.lo: fat/$(am__dirstamp) fat/$(DEPDIR)/$(am__dirstamp)
+fat/fat.lo: fat/$(am__dirstamp) fat/$(DEPDIR)/$(am__dirstamp)
+f2fs/$(am__dirstamp):
+ @$(MKDIR_P) f2fs
+ @: > f2fs/$(am__dirstamp)
+f2fs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) f2fs/$(DEPDIR)
+ @: > f2fs/$(DEPDIR)/$(am__dirstamp)
+f2fs/f2fs.lo: f2fs/$(am__dirstamp) f2fs/$(DEPDIR)/$(am__dirstamp)
+hfs/$(am__dirstamp):
+ @$(MKDIR_P) hfs
+ @: > hfs/$(am__dirstamp)
+hfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) hfs/$(DEPDIR)
+ @: > hfs/$(DEPDIR)/$(am__dirstamp)
+hfs/hfs.lo: hfs/$(am__dirstamp) hfs/$(DEPDIR)/$(am__dirstamp)
+hfs/probe.lo: hfs/$(am__dirstamp) hfs/$(DEPDIR)/$(am__dirstamp)
+jfs/$(am__dirstamp):
+ @$(MKDIR_P) jfs
+ @: > jfs/$(am__dirstamp)
+jfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) jfs/$(DEPDIR)
+ @: > jfs/$(DEPDIR)/$(am__dirstamp)
+jfs/jfs.lo: jfs/$(am__dirstamp) jfs/$(DEPDIR)/$(am__dirstamp)
+linux_swap/$(am__dirstamp):
+ @$(MKDIR_P) linux_swap
+ @: > linux_swap/$(am__dirstamp)
+linux_swap/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux_swap/$(DEPDIR)
+ @: > linux_swap/$(DEPDIR)/$(am__dirstamp)
+linux_swap/linux_swap.lo: linux_swap/$(am__dirstamp) \
+ linux_swap/$(DEPDIR)/$(am__dirstamp)
+nilfs2/$(am__dirstamp):
+ @$(MKDIR_P) nilfs2
+ @: > nilfs2/$(am__dirstamp)
+nilfs2/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) nilfs2/$(DEPDIR)
+ @: > nilfs2/$(DEPDIR)/$(am__dirstamp)
+nilfs2/nilfs2.lo: nilfs2/$(am__dirstamp) \
+ nilfs2/$(DEPDIR)/$(am__dirstamp)
+ntfs/$(am__dirstamp):
+ @$(MKDIR_P) ntfs
+ @: > ntfs/$(am__dirstamp)
+ntfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ntfs/$(DEPDIR)
+ @: > ntfs/$(DEPDIR)/$(am__dirstamp)
+ntfs/ntfs.lo: ntfs/$(am__dirstamp) ntfs/$(DEPDIR)/$(am__dirstamp)
+reiserfs/$(am__dirstamp):
+ @$(MKDIR_P) reiserfs
+ @: > reiserfs/$(am__dirstamp)
+reiserfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) reiserfs/$(DEPDIR)
+ @: > reiserfs/$(DEPDIR)/$(am__dirstamp)
+reiserfs/reiserfs.lo: reiserfs/$(am__dirstamp) \
+ reiserfs/$(DEPDIR)/$(am__dirstamp)
+udf/$(am__dirstamp):
+ @$(MKDIR_P) udf
+ @: > udf/$(am__dirstamp)
+udf/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) udf/$(DEPDIR)
+ @: > udf/$(DEPDIR)/$(am__dirstamp)
+udf/udf.lo: udf/$(am__dirstamp) udf/$(DEPDIR)/$(am__dirstamp)
+ufs/$(am__dirstamp):
+ @$(MKDIR_P) ufs
+ @: > ufs/$(am__dirstamp)
+ufs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ufs/$(DEPDIR)
+ @: > ufs/$(DEPDIR)/$(am__dirstamp)
+ufs/ufs.lo: ufs/$(am__dirstamp) ufs/$(DEPDIR)/$(am__dirstamp)
+xfs/$(am__dirstamp):
+ @$(MKDIR_P) xfs
+ @: > xfs/$(am__dirstamp)
+xfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) xfs/$(DEPDIR)
+ @: > xfs/$(DEPDIR)/$(am__dirstamp)
+xfs/xfs.lo: xfs/$(am__dirstamp) xfs/$(DEPDIR)/$(am__dirstamp)
+
+libfs.la: $(libfs_la_OBJECTS) $(libfs_la_DEPENDENCIES) $(EXTRA_libfs_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libfs_la_OBJECTS) $(libfs_la_LIBADD) $(LIBS)
+r/$(am__dirstamp):
+ @$(MKDIR_P) r
+ @: > r/$(am__dirstamp)
+r/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) r/$(DEPDIR)
+ @: > r/$(DEPDIR)/$(am__dirstamp)
+r/filesys.lo: r/$(am__dirstamp) r/$(DEPDIR)/$(am__dirstamp)
+r/fat/$(am__dirstamp):
+ @$(MKDIR_P) r/fat
+ @: > r/fat/$(am__dirstamp)
+r/fat/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) r/fat/$(DEPDIR)
+ @: > r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/bootsector.lo: r/fat/$(am__dirstamp) \
+ r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/calc.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/clstdup.lo: r/fat/$(am__dirstamp) \
+ r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/context.lo: r/fat/$(am__dirstamp) \
+ r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/count.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/fat.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/fatio.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/resize.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/table.lo: r/fat/$(am__dirstamp) r/fat/$(DEPDIR)/$(am__dirstamp)
+r/fat/traverse.lo: r/fat/$(am__dirstamp) \
+ r/fat/$(DEPDIR)/$(am__dirstamp)
+r/hfs/$(am__dirstamp):
+ @$(MKDIR_P) r/hfs
+ @: > r/hfs/$(am__dirstamp)
+r/hfs/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) r/hfs/$(DEPDIR)
+ @: > r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/advfs.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/advfs_plus.lo: r/hfs/$(am__dirstamp) \
+ r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/cache.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/file.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/file_plus.lo: r/hfs/$(am__dirstamp) \
+ r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/hfs.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/journal.lo: r/hfs/$(am__dirstamp) \
+ r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/probe.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/reloc.lo: r/hfs/$(am__dirstamp) r/hfs/$(DEPDIR)/$(am__dirstamp)
+r/hfs/reloc_plus.lo: r/hfs/$(am__dirstamp) \
+ r/hfs/$(DEPDIR)/$(am__dirstamp)
+
+libparted-fs-resize.la: $(libparted_fs_resize_la_OBJECTS) $(libparted_fs_resize_la_DEPENDENCIES) $(EXTRA_libparted_fs_resize_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libparted_fs_resize_la_LINK) -rpath $(libdir) $(libparted_fs_resize_la_OBJECTS) $(libparted_fs_resize_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f amiga/*.$(OBJEXT)
+ -rm -f amiga/*.lo
+ -rm -f btrfs/*.$(OBJEXT)
+ -rm -f btrfs/*.lo
+ -rm -f ext2/*.$(OBJEXT)
+ -rm -f ext2/*.lo
+ -rm -f f2fs/*.$(OBJEXT)
+ -rm -f f2fs/*.lo
+ -rm -f fat/*.$(OBJEXT)
+ -rm -f fat/*.lo
+ -rm -f hfs/*.$(OBJEXT)
+ -rm -f hfs/*.lo
+ -rm -f jfs/*.$(OBJEXT)
+ -rm -f jfs/*.lo
+ -rm -f linux_swap/*.$(OBJEXT)
+ -rm -f linux_swap/*.lo
+ -rm -f nilfs2/*.$(OBJEXT)
+ -rm -f nilfs2/*.lo
+ -rm -f ntfs/*.$(OBJEXT)
+ -rm -f ntfs/*.lo
+ -rm -f r/*.$(OBJEXT)
+ -rm -f r/*.lo
+ -rm -f r/fat/*.$(OBJEXT)
+ -rm -f r/fat/*.lo
+ -rm -f r/hfs/*.$(OBJEXT)
+ -rm -f r/hfs/*.lo
+ -rm -f reiserfs/*.$(OBJEXT)
+ -rm -f reiserfs/*.lo
+ -rm -f udf/*.$(OBJEXT)
+ -rm -f udf/*.lo
+ -rm -f ufs/*.$(OBJEXT)
+ -rm -f ufs/*.lo
+ -rm -f xfs/*.$(OBJEXT)
+ -rm -f xfs/*.lo
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@amiga/$(DEPDIR)/a-interface.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@amiga/$(DEPDIR)/affs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@amiga/$(DEPDIR)/amiga.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@amiga/$(DEPDIR)/apfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@amiga/$(DEPDIR)/asfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@btrfs/$(DEPDIR)/btrfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@ext2/$(DEPDIR)/interface.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@f2fs/$(DEPDIR)/f2fs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fat/$(DEPDIR)/bootsector.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@fat/$(DEPDIR)/fat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@hfs/$(DEPDIR)/hfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@hfs/$(DEPDIR)/probe.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@jfs/$(DEPDIR)/jfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@linux_swap/$(DEPDIR)/linux_swap.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@nilfs2/$(DEPDIR)/nilfs2.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@ntfs/$(DEPDIR)/ntfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/$(DEPDIR)/filesys.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/bootsector.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/calc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/clstdup.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/context.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/count.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/fat.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/fatio.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/resize.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/table.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/fat/$(DEPDIR)/traverse.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/advfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/advfs_plus.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/cache.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/file.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/file_plus.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/hfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/journal.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/probe.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/reloc.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@r/hfs/$(DEPDIR)/reloc_plus.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@reiserfs/$(DEPDIR)/reiserfs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@udf/$(DEPDIR)/udf.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@ufs/$(DEPDIR)/ufs.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@xfs/$(DEPDIR)/xfs.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+ -rm -rf amiga/.libs amiga/_libs
+ -rm -rf btrfs/.libs btrfs/_libs
+ -rm -rf ext2/.libs ext2/_libs
+ -rm -rf f2fs/.libs f2fs/_libs
+ -rm -rf fat/.libs fat/_libs
+ -rm -rf hfs/.libs hfs/_libs
+ -rm -rf jfs/.libs jfs/_libs
+ -rm -rf linux_swap/.libs linux_swap/_libs
+ -rm -rf nilfs2/.libs nilfs2/_libs
+ -rm -rf ntfs/.libs ntfs/_libs
+ -rm -rf r/.libs r/_libs
+ -rm -rf r/fat/.libs r/fat/_libs
+ -rm -rf r/hfs/.libs r/hfs/_libs
+ -rm -rf reiserfs/.libs reiserfs/_libs
+ -rm -rf udf/.libs udf/_libs
+ -rm -rf ufs/.libs ufs/_libs
+ -rm -rf xfs/.libs xfs/_libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+ for dir in "$(DESTDIR)$(libdir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f amiga/$(DEPDIR)/$(am__dirstamp)
+ -rm -f amiga/$(am__dirstamp)
+ -rm -f btrfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f btrfs/$(am__dirstamp)
+ -rm -f ext2/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ext2/$(am__dirstamp)
+ -rm -f f2fs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f f2fs/$(am__dirstamp)
+ -rm -f fat/$(DEPDIR)/$(am__dirstamp)
+ -rm -f fat/$(am__dirstamp)
+ -rm -f hfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f hfs/$(am__dirstamp)
+ -rm -f jfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f jfs/$(am__dirstamp)
+ -rm -f linux_swap/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux_swap/$(am__dirstamp)
+ -rm -f nilfs2/$(DEPDIR)/$(am__dirstamp)
+ -rm -f nilfs2/$(am__dirstamp)
+ -rm -f ntfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ntfs/$(am__dirstamp)
+ -rm -f r/$(DEPDIR)/$(am__dirstamp)
+ -rm -f r/$(am__dirstamp)
+ -rm -f r/fat/$(DEPDIR)/$(am__dirstamp)
+ -rm -f r/fat/$(am__dirstamp)
+ -rm -f r/hfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f r/hfs/$(am__dirstamp)
+ -rm -f reiserfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f reiserfs/$(am__dirstamp)
+ -rm -f udf/$(DEPDIR)/$(am__dirstamp)
+ -rm -f udf/$(am__dirstamp)
+ -rm -f ufs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ufs/$(am__dirstamp)
+ -rm -f xfs/$(DEPDIR)/$(am__dirstamp)
+ -rm -f xfs/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-am
+ -rm -f amiga/$(DEPDIR)/a-interface.Plo
+ -rm -f amiga/$(DEPDIR)/affs.Plo
+ -rm -f amiga/$(DEPDIR)/amiga.Plo
+ -rm -f amiga/$(DEPDIR)/apfs.Plo
+ -rm -f amiga/$(DEPDIR)/asfs.Plo
+ -rm -f btrfs/$(DEPDIR)/btrfs.Plo
+ -rm -f ext2/$(DEPDIR)/interface.Plo
+ -rm -f f2fs/$(DEPDIR)/f2fs.Plo
+ -rm -f fat/$(DEPDIR)/bootsector.Plo
+ -rm -f fat/$(DEPDIR)/fat.Plo
+ -rm -f hfs/$(DEPDIR)/hfs.Plo
+ -rm -f hfs/$(DEPDIR)/probe.Plo
+ -rm -f jfs/$(DEPDIR)/jfs.Plo
+ -rm -f linux_swap/$(DEPDIR)/linux_swap.Plo
+ -rm -f nilfs2/$(DEPDIR)/nilfs2.Plo
+ -rm -f ntfs/$(DEPDIR)/ntfs.Plo
+ -rm -f r/$(DEPDIR)/filesys.Plo
+ -rm -f r/fat/$(DEPDIR)/bootsector.Plo
+ -rm -f r/fat/$(DEPDIR)/calc.Plo
+ -rm -f r/fat/$(DEPDIR)/clstdup.Plo
+ -rm -f r/fat/$(DEPDIR)/context.Plo
+ -rm -f r/fat/$(DEPDIR)/count.Plo
+ -rm -f r/fat/$(DEPDIR)/fat.Plo
+ -rm -f r/fat/$(DEPDIR)/fatio.Plo
+ -rm -f r/fat/$(DEPDIR)/resize.Plo
+ -rm -f r/fat/$(DEPDIR)/table.Plo
+ -rm -f r/fat/$(DEPDIR)/traverse.Plo
+ -rm -f r/hfs/$(DEPDIR)/advfs.Plo
+ -rm -f r/hfs/$(DEPDIR)/advfs_plus.Plo
+ -rm -f r/hfs/$(DEPDIR)/cache.Plo
+ -rm -f r/hfs/$(DEPDIR)/file.Plo
+ -rm -f r/hfs/$(DEPDIR)/file_plus.Plo
+ -rm -f r/hfs/$(DEPDIR)/hfs.Plo
+ -rm -f r/hfs/$(DEPDIR)/journal.Plo
+ -rm -f r/hfs/$(DEPDIR)/probe.Plo
+ -rm -f r/hfs/$(DEPDIR)/reloc.Plo
+ -rm -f r/hfs/$(DEPDIR)/reloc_plus.Plo
+ -rm -f reiserfs/$(DEPDIR)/reiserfs.Plo
+ -rm -f udf/$(DEPDIR)/udf.Plo
+ -rm -f ufs/$(DEPDIR)/ufs.Plo
+ -rm -f xfs/$(DEPDIR)/xfs.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f amiga/$(DEPDIR)/a-interface.Plo
+ -rm -f amiga/$(DEPDIR)/affs.Plo
+ -rm -f amiga/$(DEPDIR)/amiga.Plo
+ -rm -f amiga/$(DEPDIR)/apfs.Plo
+ -rm -f amiga/$(DEPDIR)/asfs.Plo
+ -rm -f btrfs/$(DEPDIR)/btrfs.Plo
+ -rm -f ext2/$(DEPDIR)/interface.Plo
+ -rm -f f2fs/$(DEPDIR)/f2fs.Plo
+ -rm -f fat/$(DEPDIR)/bootsector.Plo
+ -rm -f fat/$(DEPDIR)/fat.Plo
+ -rm -f hfs/$(DEPDIR)/hfs.Plo
+ -rm -f hfs/$(DEPDIR)/probe.Plo
+ -rm -f jfs/$(DEPDIR)/jfs.Plo
+ -rm -f linux_swap/$(DEPDIR)/linux_swap.Plo
+ -rm -f nilfs2/$(DEPDIR)/nilfs2.Plo
+ -rm -f ntfs/$(DEPDIR)/ntfs.Plo
+ -rm -f r/$(DEPDIR)/filesys.Plo
+ -rm -f r/fat/$(DEPDIR)/bootsector.Plo
+ -rm -f r/fat/$(DEPDIR)/calc.Plo
+ -rm -f r/fat/$(DEPDIR)/clstdup.Plo
+ -rm -f r/fat/$(DEPDIR)/context.Plo
+ -rm -f r/fat/$(DEPDIR)/count.Plo
+ -rm -f r/fat/$(DEPDIR)/fat.Plo
+ -rm -f r/fat/$(DEPDIR)/fatio.Plo
+ -rm -f r/fat/$(DEPDIR)/resize.Plo
+ -rm -f r/fat/$(DEPDIR)/table.Plo
+ -rm -f r/fat/$(DEPDIR)/traverse.Plo
+ -rm -f r/hfs/$(DEPDIR)/advfs.Plo
+ -rm -f r/hfs/$(DEPDIR)/advfs_plus.Plo
+ -rm -f r/hfs/$(DEPDIR)/cache.Plo
+ -rm -f r/hfs/$(DEPDIR)/file.Plo
+ -rm -f r/hfs/$(DEPDIR)/file_plus.Plo
+ -rm -f r/hfs/$(DEPDIR)/hfs.Plo
+ -rm -f r/hfs/$(DEPDIR)/journal.Plo
+ -rm -f r/hfs/$(DEPDIR)/probe.Plo
+ -rm -f r/hfs/$(DEPDIR)/reloc.Plo
+ -rm -f r/hfs/$(DEPDIR)/reloc_plus.Plo
+ -rm -f reiserfs/$(DEPDIR)/reiserfs.Plo
+ -rm -f udf/$(DEPDIR)/udf.Plo
+ -rm -f ufs/$(DEPDIR)/ufs.Plo
+ -rm -f xfs/$(DEPDIR)/xfs.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libLTLIBRARIES clean-libtool \
+ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libparted/fs/amiga/a-interface.c b/libparted/fs/amiga/a-interface.c
new file mode 100644
index 0000000..0ae84dd
--- /dev/null
+++ b/libparted/fs/amiga/a-interface.c
@@ -0,0 +1,88 @@
+/*
+ interface.c -- parted support amiga file systems
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+extern PedFileSystemType _affs0_type;
+extern PedFileSystemType _affs1_type;
+extern PedFileSystemType _affs2_type;
+extern PedFileSystemType _affs3_type;
+extern PedFileSystemType _affs4_type;
+extern PedFileSystemType _affs5_type;
+extern PedFileSystemType _affs6_type;
+extern PedFileSystemType _affs7_type;
+extern PedFileSystemType _amufs_type;
+extern PedFileSystemType _amufs0_type;
+extern PedFileSystemType _amufs1_type;
+extern PedFileSystemType _amufs2_type;
+extern PedFileSystemType _amufs3_type;
+extern PedFileSystemType _amufs4_type;
+extern PedFileSystemType _amufs5_type;
+extern PedFileSystemType _asfs_type;
+extern PedFileSystemType _apfs1_type;
+extern PedFileSystemType _apfs2_type;
+
+void ped_file_system_amiga_init ()
+{
+ ped_file_system_type_register (&_affs0_type);
+ ped_file_system_type_register (&_affs1_type);
+ ped_file_system_type_register (&_affs2_type);
+ ped_file_system_type_register (&_affs3_type);
+ ped_file_system_type_register (&_affs4_type);
+ ped_file_system_type_register (&_affs5_type);
+ ped_file_system_type_register (&_affs6_type);
+ ped_file_system_type_register (&_affs7_type);
+ ped_file_system_type_register (&_amufs_type);
+ ped_file_system_type_register (&_amufs0_type);
+ ped_file_system_type_register (&_amufs1_type);
+ ped_file_system_type_register (&_amufs2_type);
+ ped_file_system_type_register (&_amufs3_type);
+ ped_file_system_type_register (&_amufs4_type);
+ ped_file_system_type_register (&_amufs5_type);
+ ped_file_system_type_register (&_asfs_type);
+ ped_file_system_type_register (&_apfs1_type);
+ ped_file_system_type_register (&_apfs2_type);
+}
+
+void ped_file_system_amiga_done ()
+{
+ ped_file_system_type_unregister (&_affs0_type);
+ ped_file_system_type_unregister (&_affs1_type);
+ ped_file_system_type_unregister (&_affs2_type);
+ ped_file_system_type_unregister (&_affs3_type);
+ ped_file_system_type_unregister (&_affs4_type);
+ ped_file_system_type_unregister (&_affs5_type);
+ ped_file_system_type_unregister (&_affs6_type);
+ ped_file_system_type_unregister (&_affs7_type);
+ ped_file_system_type_unregister (&_amufs_type);
+ ped_file_system_type_unregister (&_amufs0_type);
+ ped_file_system_type_unregister (&_amufs1_type);
+ ped_file_system_type_unregister (&_amufs2_type);
+ ped_file_system_type_unregister (&_amufs3_type);
+ ped_file_system_type_unregister (&_amufs4_type);
+ ped_file_system_type_unregister (&_amufs5_type);
+ ped_file_system_type_unregister (&_asfs_type);
+ ped_file_system_type_unregister (&_apfs1_type);
+ ped_file_system_type_unregister (&_apfs2_type);
+}
diff --git a/libparted/fs/amiga/affs.c b/libparted/fs/amiga/affs.c
new file mode 100644
index 0000000..750eab2
--- /dev/null
+++ b/libparted/fs/amiga/affs.c
@@ -0,0 +1,292 @@
+/*
+ affs.c -- parted support for affs file systems
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "amiga.h"
+#include "affs.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static int
+_affs_probe_root (uint32_t *block, int blocksize) {
+ int i;
+ uint32_t sum;
+
+ if (PED_BE32_TO_CPU (block[0]) != 2) return 0;
+ if (PED_BE32_TO_CPU (block[128*blocksize-1]) != 1) return 0;
+ for (i = 0, sum = 0; i < 128*blocksize; i++)
+ sum += PED_BE32_TO_CPU (block[i]);
+ if (sum) return 0;
+ return 1;
+}
+
+static PedGeometry*
+_generic_affs_probe (PedGeometry* geom, uint32_t kind)
+{
+ uint32_t *block;
+ PedSector root, len, pos;
+ struct PartitionBlock * part;
+ int blocksize = 1, reserved = 2;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (geom->dev != NULL);
+ if (geom->dev->sector_size != 512)
+ return NULL;
+ /* Finds the blocksize and reserved values of the partition block */
+ if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate partition block\n"), __func__);
+ goto error_part;
+ }
+ if (amiga_find_part(geom, part) != NULL) {
+ reserved = PED_BE32_TO_CPU (part->de_Reserved);
+ reserved = reserved == 0 ? 1 : reserved;
+ blocksize = PED_BE32_TO_CPU (part->de_SizeBlock)
+ * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128;
+ }
+ free (part);
+
+ /* Test boot block */
+ if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate block\n"), __func__);
+ goto error_block;
+ }
+ if (!ped_device_read (geom->dev, block, geom->start, blocksize)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read boot block %llu\n"), __func__, geom->start);
+ goto error;
+ }
+ if (PED_BE32_TO_CPU (block[0]) != kind) {
+ goto error;
+ }
+
+ /* Find and test the root block */
+ len = geom->length / blocksize - reserved;
+ pos = (len - 1) / 2;
+ root = geom->start + (pos + reserved) * blocksize;
+
+ if (!ped_device_read (geom->dev, block, root, blocksize)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read root block %llu\n"), __func__, root);
+ goto error;
+ }
+ if (_affs_probe_root(block, blocksize) == 1) {
+ free (block);
+ return ped_geometry_duplicate (geom);
+ }
+
+error:
+ free (block);
+error_block:
+error_part:
+ return NULL;
+}
+static PedGeometry*
+_affs0_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5300);
+}
+static PedGeometry*
+_affs1_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5301);
+}
+static PedGeometry*
+_affs2_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5302);
+}
+static PedGeometry*
+_affs3_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5303);
+}
+static PedGeometry*
+_affs4_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5304);
+}
+static PedGeometry*
+_affs5_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5305);
+}
+static PedGeometry*
+_affs6_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5306);
+}
+static PedGeometry*
+_affs7_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x444f5307);
+}
+static PedGeometry*
+_amufs_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754653);
+}
+static PedGeometry*
+_amufs0_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754600);
+}
+static PedGeometry*
+_amufs1_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754601);
+}
+static PedGeometry*
+_amufs2_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754602);
+}
+static PedGeometry*
+_amufs3_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754603);
+}
+static PedGeometry*
+_amufs4_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754604);
+}
+static PedGeometry*
+_amufs5_probe (PedGeometry* geom) {
+ return _generic_affs_probe (geom, 0x6d754605);
+}
+
+static PedFileSystemOps _affs0_ops = {
+ probe: _affs0_probe,
+};
+static PedFileSystemOps _affs1_ops = {
+ probe: _affs1_probe,
+};
+static PedFileSystemOps _affs2_ops = {
+ probe: _affs2_probe,
+};
+static PedFileSystemOps _affs3_ops = {
+ probe: _affs3_probe,
+};
+static PedFileSystemOps _affs4_ops = {
+ probe: _affs4_probe,
+};
+static PedFileSystemOps _affs5_ops = {
+ probe: _affs5_probe,
+};
+static PedFileSystemOps _affs6_ops = {
+ probe: _affs6_probe,
+};
+static PedFileSystemOps _affs7_ops = {
+ probe: _affs7_probe,
+};
+static PedFileSystemOps _amufs_ops = {
+ probe: _amufs_probe,
+};
+static PedFileSystemOps _amufs0_ops = {
+ probe: _amufs0_probe,
+};
+static PedFileSystemOps _amufs1_ops = {
+ probe: _amufs1_probe,
+};
+static PedFileSystemOps _amufs2_ops = {
+ probe: _amufs2_probe,
+};
+static PedFileSystemOps _amufs3_ops = {
+ probe: _amufs3_probe,
+};
+static PedFileSystemOps _amufs4_ops = {
+ probe: _amufs4_probe,
+};
+static PedFileSystemOps _amufs5_ops = {
+ probe: _amufs5_probe,
+};
+
+PedFileSystemType _affs0_type = {
+ next: NULL,
+ ops: &_affs0_ops,
+ name: "affs0",
+};
+PedFileSystemType _affs1_type = {
+ next: NULL,
+ ops: &_affs1_ops,
+ name: "affs1",
+};
+PedFileSystemType _affs2_type = {
+ next: NULL,
+ ops: &_affs2_ops,
+ name: "affs2",
+};
+PedFileSystemType _affs3_type = {
+ next: NULL,
+ ops: &_affs3_ops,
+ name: "affs3",
+};
+PedFileSystemType _affs4_type = {
+ next: NULL,
+ ops: &_affs4_ops,
+ name: "affs4",
+};
+PedFileSystemType _affs5_type = {
+ next: NULL,
+ ops: &_affs5_ops,
+ name: "affs5",
+};
+PedFileSystemType _affs6_type = {
+ next: NULL,
+ ops: &_affs6_ops,
+ name: "affs6",
+};
+PedFileSystemType _affs7_type = {
+ next: NULL,
+ ops: &_affs7_ops,
+ name: "affs7",
+};
+PedFileSystemType _amufs_type = {
+ next: NULL,
+ ops: &_amufs_ops,
+ name: "amufs",
+};
+PedFileSystemType _amufs0_type = {
+ next: NULL,
+ ops: &_amufs0_ops,
+ name: "amufs0",
+};
+PedFileSystemType _amufs1_type = {
+ next: NULL,
+ ops: &_amufs1_ops,
+ name: "amufs1",
+};
+PedFileSystemType _amufs2_type = {
+ next: NULL,
+ ops: &_amufs2_ops,
+ name: "amufs2",
+};
+PedFileSystemType _amufs3_type = {
+ next: NULL,
+ ops: &_amufs3_ops,
+ name: "amufs3",
+};
+PedFileSystemType _amufs4_type = {
+ next: NULL,
+ ops: &_amufs4_ops,
+ name: "amufs4",
+};
+PedFileSystemType _amufs5_type = {
+ next: NULL,
+ ops: &_amufs5_ops,
+ name: "amufs5",
+};
diff --git a/libparted/fs/amiga/affs.h b/libparted/fs/amiga/affs.h
new file mode 100644
index 0000000..d1650f2
--- /dev/null
+++ b/libparted/fs/amiga/affs.h
@@ -0,0 +1,19 @@
+
+/*
+ affs.h -- parted suppoer for affs filesystems header files
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
diff --git a/libparted/fs/amiga/amiga.c b/libparted/fs/amiga/amiga.c
new file mode 100644
index 0000000..1a909fc
--- /dev/null
+++ b/libparted/fs/amiga/amiga.c
@@ -0,0 +1,351 @@
+/*
+ libparted/fs_amiga - amiga file system support.
+ Copyright (C) 2000-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Sven Luther <luther@debian.org>
+*/
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "amiga.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define IDNAME_RIGIDDISK (uint32_t)0x5244534B /* 'RDSK' */
+#define IDNAME_BADBLOCK (uint32_t)0x42414442 /* 'BADB' */
+#define IDNAME_PARTITION (uint32_t)0x50415254 /* 'PART' */
+#define IDNAME_FILESYSHEADER (uint32_t)0x46534844 /* 'FSHD' */
+#define IDNAME_LOADSEG (uint32_t)0x4C534547 /* 'LSEG' */
+#define IDNAME_BOOT (uint32_t)0x424f4f54 /* 'BOOT' */
+#define IDNAME_FREE (uint32_t)0xffffffff
+
+static const char *
+_amiga_block_id (uint32_t id) {
+ switch (id) {
+ case IDNAME_RIGIDDISK :
+ return "RDSK";
+ case IDNAME_BADBLOCK :
+ return "BADB";
+ case IDNAME_PARTITION :
+ return "PART";
+ case IDNAME_FILESYSHEADER :
+ return "FSHD";
+ case IDNAME_LOADSEG :
+ return "LSEG";
+ case IDNAME_BOOT :
+ return "BOOT";
+ case IDNAME_FREE :
+ return "<free>";
+ default :
+ return "<unknown>";
+ }
+}
+
+struct AmigaIds *
+_amiga_add_id (uint32_t id, struct AmigaIds *ids) {
+ struct AmigaIds *newid;
+
+ if ((newid=ped_malloc(sizeof (struct AmigaIds)))==NULL) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate id list element\n"), __func__);
+ return 0;
+ }
+ newid->ID = id;
+ newid->next = ids;
+ return newid;
+}
+
+void
+_amiga_free_ids (struct AmigaIds *ids) {
+ struct AmigaIds *current, *next;
+
+ for (current = ids; current != NULL; current = next) {
+ next = current->next;
+ free (current);
+ }
+}
+int
+_amiga_id_in_list (uint32_t id, struct AmigaIds *ids) {
+ struct AmigaIds *current;
+
+ for (current = ids; current != NULL; current = current->next) {
+ if (id == current->ID)
+ return 1;
+ }
+ return 0;
+}
+
+#define AMIGA_RDB_NOT_FOUND ((uint32_t)0xffffffff)
+
+struct AmigaBlock {
+ uint32_t amiga_ID; /* Identifier 32 bit word */
+ uint32_t amiga_SummedLongss; /* Size of the structure for checksums */
+ int32_t amiga_ChkSum; /* Checksum of the structure */
+};
+#define AMIGA(pos) ((struct AmigaBlock *)(pos))
+
+struct RigidDiskBlock {
+ uint32_t rdb_ID; /* Identifier 32 bit word : 'RDSK' */
+ uint32_t rdb_SummedLongs; /* Size of the structure for checksums */
+ int32_t rdb_ChkSum; /* Checksum of the structure */
+ uint32_t rdb_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t rdb_BlockBytes; /* Size of disk blocks */
+ uint32_t rdb_Flags; /* RDB Flags */
+ /* block list heads */
+ uint32_t rdb_BadBlockList; /* Bad block list */
+ uint32_t rdb_PartitionList; /* Partition list */
+ uint32_t rdb_FileSysHeaderList; /* File system header list */
+ uint32_t rdb_DriveInit; /* Drive specific init code */
+ uint32_t rdb_BootBlockList; /* Amiga OS 4 Boot Blocks */
+ uint32_t rdb_Reserved1[5]; /* Unused word, need to be set to $ffffffff */
+ /* physical drive characteristics */
+ uint32_t rdb_Cylinders; /* Number of the cylinders of the drive */
+ uint32_t rdb_Sectors; /* Number of sectors of the drive */
+ uint32_t rdb_Heads; /* Number of heads of the drive */
+ uint32_t rdb_Interleave; /* Interleave */
+ uint32_t rdb_Park; /* Head parking cylinder */
+ uint32_t rdb_Reserved2[3]; /* Unused word, need to be set to $ffffffff */
+ uint32_t rdb_WritePreComp; /* Starting cylinder of write precompensation */
+ uint32_t rdb_ReducedWrite; /* Starting cylinder of reduced write current */
+ uint32_t rdb_StepRate; /* Step rate of the drive */
+ uint32_t rdb_Reserved3[5]; /* Unused word, need to be set to $ffffffff */
+ /* logical drive characteristics */
+ uint32_t rdb_RDBBlocksLo; /* low block of range reserved for hardblocks */
+ uint32_t rdb_RDBBlocksHi; /* high block of range for these hardblocks */
+ uint32_t rdb_LoCylinder; /* low cylinder of partitionable disk area */
+ uint32_t rdb_HiCylinder; /* high cylinder of partitionable data area */
+ uint32_t rdb_CylBlocks; /* number of blocks available per cylinder */
+ uint32_t rdb_AutoParkSeconds; /* zero for no auto park */
+ uint32_t rdb_HighRDSKBlock; /* highest block used by RDSK */
+ /* (not including replacement bad blocks) */
+ uint32_t rdb_Reserved4;
+ /* drive identification */
+ char rdb_DiskVendor[8];
+ char rdb_DiskProduct[16];
+ char rdb_DiskRevision[4];
+ char rdb_ControllerVendor[8];
+ char rdb_ControllerProduct[16];
+ char rdb_ControllerRevision[4];
+ uint32_t rdb_Reserved5[10];
+};
+
+#define AMIGA_MAX_PARTITIONS 128
+#define RDB_LOCATION_LIMIT 16
+#define RDSK(pos) ((struct RigidDiskBlock *)(pos))
+
+static int
+_amiga_checksum (struct AmigaBlock *blk) {
+ uint32_t *rdb = (uint32_t *) blk;
+ uint32_t sum;
+ int i, end;
+
+ sum = PED_BE32_TO_CPU (rdb[0]);
+ end = PED_BE32_TO_CPU (rdb[1]);
+
+ if (end > PED_SECTOR_SIZE_DEFAULT) end = PED_SECTOR_SIZE_DEFAULT;
+
+ for (i = 1; i < end; i++) sum += PED_BE32_TO_CPU (rdb[i]);
+
+ return sum;
+}
+
+static void
+_amiga_calculate_checksum (struct AmigaBlock *blk) {
+
+ blk->amiga_ChkSum = PED_CPU_TO_BE32(
+ PED_BE32_TO_CPU(blk->amiga_ChkSum) -
+ _amiga_checksum((struct AmigaBlock *) blk));
+ return;
+}
+
+
+static struct AmigaBlock *
+_amiga_read_block (PedDevice *dev, struct AmigaBlock *blk, PedSector block, struct AmigaIds *ids) {
+ if (!ped_device_read (dev, blk, block, 1)) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read block %llu\n"), __func__, block))
+ {
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return NULL;
+ }
+ }
+ if (ids && !_amiga_id_in_list(PED_BE32_TO_CPU(blk->amiga_ID), ids))
+ return NULL;
+ if (_amiga_checksum (blk) != 0) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL,
+ _("%s : Bad checksum on block %llu of type %s\n"),
+ __func__, block, _amiga_block_id(PED_BE32_TO_CPU(blk->amiga_ID))))
+ {
+ case PED_EXCEPTION_CANCEL :
+ return NULL;
+ case PED_EXCEPTION_FIX :
+ _amiga_calculate_checksum(AMIGA(blk));
+ if (!ped_device_write (dev, blk, block, 1)) {
+ switch (ped_exception_throw(PED_EXCEPTION_FATAL,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't write block %d\n"), __func__, block))
+ {
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return NULL;
+ }
+ }
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_IGNORE :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return blk;
+ }
+ }
+ return blk;
+}
+
+static uint32_t
+_amiga_find_rdb (PedDevice *dev, struct RigidDiskBlock *rdb) {
+ int i;
+ struct AmigaIds *ids;
+
+ ids = _amiga_add_id (IDNAME_RIGIDDISK, NULL);
+
+ for (i = 0; i<RDB_LOCATION_LIMIT; i++) {
+ if (!_amiga_read_block (dev, AMIGA(rdb), i, ids)) {
+ continue;
+ }
+ if (PED_BE32_TO_CPU (rdb->rdb_ID) == IDNAME_RIGIDDISK) {
+ _amiga_free_ids (ids);
+ return i;
+ }
+ }
+ _amiga_free_ids (ids);
+ return AMIGA_RDB_NOT_FOUND;
+}
+
+static int
+_amiga_loop_check (uint32_t block, uint32_t * blocklist, uint32_t max)
+{
+ uint32_t i;
+
+ for (i = 0; i < max; i++)
+ if (block == blocklist[i]) {
+ /* We are looping, let's stop. */
+ return 1;
+ }
+ blocklist[max] = block;
+ return 0;
+}
+
+/* We have already allocated a rdb, we are now reading it from the disk */
+struct PartitionBlock *
+amiga_find_part (PedGeometry *geom, struct PartitionBlock *part)
+{
+ struct RigidDiskBlock *rdb;
+ uint32_t partblock;
+ uint32_t partlist[AMIGA_MAX_PARTITIONS];
+ int i;
+
+ PED_ASSERT(geom!= NULL);
+ PED_ASSERT(geom->dev!= NULL);
+
+ if (!(rdb = ped_malloc (PED_SECTOR_SIZE_DEFAULT))) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate disk_specific rdb block\n"), __func__))
+ {
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return NULL;
+ }
+ }
+ if (_amiga_find_rdb (geom->dev, rdb) == AMIGA_RDB_NOT_FOUND) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Didn't find rdb block, should never happen\n"), __func__))
+ {
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ free(rdb);
+ return NULL;
+ }
+ }
+
+ /* We initialize the hardblock free list to detect loops */
+ for (i = 0; i < AMIGA_MAX_PARTITIONS; i++) partlist[i] = IDNAME_FREE;
+
+ for (i = 1, partblock = PED_BE32_TO_CPU(rdb->rdb_PartitionList);
+ i < AMIGA_MAX_PARTITIONS && partblock != IDNAME_FREE;
+ i++, partblock = PED_BE32_TO_CPU(part->pb_Next))
+ {
+ PedSector start, end;
+ PedSector cylblocks;
+
+ /* Let's look for loops in the partition table */
+ if (_amiga_loop_check(partblock, partlist, i)) {
+ free (rdb);
+ return NULL;
+ }
+ /* Let's read a partition block to get its geometry*/
+ if (!ped_device_read (geom->dev, part, (PedSector)partblock, 1)) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to read partition block %llu\n"),
+ __func__, (PedSector)partblock))
+ {
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ free(rdb);
+ return NULL;
+ }
+ }
+
+ /* Current block is not a Partition Block */
+ if (part->pb_ID != IDNAME_PARTITION) {
+ free (rdb);
+ return NULL;
+ }
+
+ /* Calculate the geometry of the partition */
+ cylblocks = ((PedSector) PED_BE32_TO_CPU (part->de_Surfaces)) *
+ ((PedSector) PED_BE32_TO_CPU (part->de_BlocksPerTrack));
+ start = ((PedSector) PED_BE32_TO_CPU (part->de_LowCyl)) * cylblocks;
+ end = ((((PedSector) PED_BE32_TO_CPU (part->de_HighCyl))+1) * (cylblocks))-1;
+
+ /* And check if it is the one we are searching for */
+ if (start == geom->start && end == geom->end) {
+ free (rdb);
+ return part;
+ }
+ }
+
+ free (rdb);
+ return NULL;
+}
diff --git a/libparted/fs/amiga/amiga.h b/libparted/fs/amiga/amiga.h
new file mode 100644
index 0000000..30f5b82
--- /dev/null
+++ b/libparted/fs/amiga/amiga.h
@@ -0,0 +1,70 @@
+/*
+ util.h -- amiga partition table headers.
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+struct PartitionBlock {
+ uint32_t pb_ID; /* Identifier 32 bit word : 'PART' */
+ uint32_t pb_SummedLongs; /* Size of the structure for checksums */
+ int32_t pb_ChkSum; /* Checksum of the structure */
+ uint32_t pb_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t pb_Next; /* Block number of the next PartitionBlock */
+ uint32_t pb_Flags; /* Part Flags (NOMOUNT and BOOTABLE) */
+ uint32_t pb_Reserved1[2];
+ uint32_t pb_DevFlags; /* Preferred flags for OpenDevice */
+ uint8_t pb_DriveName[32]; /* Preferred DOS device name: BSTR form */
+ uint32_t pb_Reserved2[15];
+ uint32_t de_TableSize; /* Size of Environment vector */
+ uint32_t de_SizeBlock; /* Size of the blocks in 32 bit words, usually 128 */
+ uint32_t de_SecOrg; /* Not used; must be 0 */
+ uint32_t de_Surfaces; /* Number of heads (surfaces) */
+ uint32_t de_SectorPerBlock; /* Disk sectors per block, used with SizeBlock, usually 1 */
+ uint32_t de_BlocksPerTrack; /* Blocks per track. drive specific */
+ uint32_t de_Reserved; /* DOS reserved blocks at start of partition. */
+ uint32_t de_PreAlloc; /* DOS reserved blocks at end of partition */
+ uint32_t de_Interleave; /* Not used, usually 0 */
+ uint32_t de_LowCyl; /* First cylinder of the partition */
+ uint32_t de_HighCyl; /* Last cylinder of the partition */
+ uint32_t de_NumBuffers; /* Initial # DOS of buffers. */
+ uint32_t de_BufMemType; /* Type of mem to allocate for buffers */
+ uint32_t de_MaxTransfer; /* Max number of bytes to transfer at a time */
+ uint32_t de_Mask; /* Address Mask to block out certain memory */
+ int32_t de_BootPri; /* Boot priority for autoboot */
+ uint32_t de_DosType; /* Dostype of the file system */
+ uint32_t de_Baud; /* Baud rate for serial handler */
+ uint32_t de_Control; /* Control word for handler/filesystem */
+ uint32_t de_BootBlocks; /* Number of blocks containing boot code */
+ uint32_t pb_EReserved[12];
+};
+
+#define PART(pos) ((struct PartitionBlock *)(pos))
+
+#define PBFB_BOOTABLE 0 /* this partition is intended to be bootable */
+#define PBFF_BOOTABLE 1L /* (expected directories and files exist) */
+#define PBFB_NOMOUNT 1 /* do not mount this partition (e.g. manually */
+#define PBFF_NOMOUNT 2L /* mounted, but space reserved here) */
+
+struct PartitionBlock * amiga_find_part (PedGeometry *geom, struct PartitionBlock *part);
+
+struct AmigaIds {
+ uint32_t ID;
+ struct AmigaIds *next;
+};
+
+struct AmigaIds * _amiga_add_id (uint32_t id, struct AmigaIds *ids);
+void _amiga_free_ids (struct AmigaIds *ids);
+int _amiga_id_in_list (uint32_t id, struct AmigaIds *ids) _GL_ATTRIBUTE_PURE;
diff --git a/libparted/fs/amiga/apfs.c b/libparted/fs/amiga/apfs.c
new file mode 100644
index 0000000..aeaa1f3
--- /dev/null
+++ b/libparted/fs/amiga/apfs.c
@@ -0,0 +1,128 @@
+/*
+ apfs.c -- parted support for apfs file systems
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "amiga.h"
+#include "apfs.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static int
+_apfs_probe_root (uint32_t *block, uint32_t blocksize, uint32_t kind) {
+ if (PED_BE32_TO_CPU (block[0]) != kind) return 0;
+ return 1;
+}
+
+static PedGeometry*
+_generic_apfs_probe (PedGeometry* geom, uint32_t kind)
+{
+ uint32_t *block;
+ PedSector root;
+ struct PartitionBlock * part;
+ uint32_t blocksize = 1, reserved = 2;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (geom->dev != NULL);
+ if (geom->dev->sector_size != 512)
+ return NULL;
+
+ /* Finds the blocksize and reserved values of the partition block */
+ if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate partition block\n"), __func__);
+ goto error_part;
+ }
+ if (amiga_find_part(geom, part) != NULL) {
+ reserved = PED_BE32_TO_CPU (part->de_Reserved);
+ blocksize = PED_BE32_TO_CPU (part->de_SizeBlock)
+ * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128;
+ }
+ free (part);
+
+ /* Test boot block */
+ if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate block\n"), __func__);
+ goto error_block;
+ }
+ if (!ped_device_read (geom->dev, block, geom->start, blocksize)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read boot block %llu\n"), __func__, geom->start);
+ goto error;
+ }
+ if (PED_BE32_TO_CPU (block[0]) != kind) {
+ goto error;
+ }
+
+ /* Find and test the root block */
+ root = geom->start+reserved*blocksize;
+ if (!ped_device_read (geom->dev, block, root, blocksize)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read root block %llu\n"), __func__, root);
+ goto error;
+ }
+ if (_apfs_probe_root(block, blocksize, kind) == 1) {
+ free(block);
+ return ped_geometry_duplicate (geom);
+ }
+
+error:
+ free (block);
+error_block:
+error_part:
+ return NULL;
+}
+
+static PedGeometry*
+_apfs1_probe (PedGeometry* geom) {
+ return _generic_apfs_probe (geom, 0x50463101);
+}
+
+static PedGeometry*
+_apfs2_probe (PedGeometry* geom) {
+ return _generic_apfs_probe (geom, 0x50463102);
+}
+
+static PedFileSystemOps _apfs1_ops = {
+ probe: _apfs1_probe,
+};
+static PedFileSystemOps _apfs2_ops = {
+ probe: _apfs2_probe,
+};
+
+PedFileSystemType _apfs1_type = {
+ next: NULL,
+ ops: &_apfs1_ops,
+ name: "apfs1",
+};
+PedFileSystemType _apfs2_type = {
+ next: NULL,
+ ops: &_apfs2_ops,
+ name: "apfs2",
+};
diff --git a/libparted/fs/amiga/apfs.h b/libparted/fs/amiga/apfs.h
new file mode 100644
index 0000000..972941b
--- /dev/null
+++ b/libparted/fs/amiga/apfs.h
@@ -0,0 +1,18 @@
+/*
+ apfs.h -- parted support for apfs file systems header files
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
diff --git a/libparted/fs/amiga/asfs.c b/libparted/fs/amiga/asfs.c
new file mode 100644
index 0000000..c4c65e5
--- /dev/null
+++ b/libparted/fs/amiga/asfs.c
@@ -0,0 +1,130 @@
+/*
+ asfs.c -- parted asfs filesystem support
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "amiga.h"
+#include "asfs.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static int
+_asfs_probe_root (PedGeometry *geom, uint32_t *block, int blocksize, PedSector root) {
+ int i, sum;
+ PedSector start, end;
+
+ if (PED_BE32_TO_CPU (block[0]) != 0x53465300) return 0;
+ for (i = 0, sum = 1; i < 128*blocksize; i++) sum += PED_BE32_TO_CPU (block[i]);
+ if (sum != 0) return 0;
+ if (PED_BE32_TO_CPU (block[2]) * blocksize + geom->start != root) {
+ return 0;
+ }
+ start = ((((PedSector) PED_BE32_TO_CPU (block[8])) << 32)
+ + (PedSector) PED_BE32_TO_CPU (block[9])) / 512;
+ end = (((((PedSector) PED_BE32_TO_CPU (block[10])) << 32)
+ + (PedSector) PED_BE32_TO_CPU (block[11])) / 512) - 1;
+ if (start != geom->start || end != geom->end) return 0;
+ return 1;
+}
+
+static PedGeometry*
+_asfs_probe (PedGeometry* geom)
+{
+ uint32_t *block;
+ struct PartitionBlock * part;
+ int blocksize = 1;
+ PedSector root;
+ int found = 0;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (geom->dev != NULL);
+ if (geom->dev->sector_size != 512)
+ return NULL;
+
+ /* Finds the blocksize of the partition block */
+ if (!(part = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate partition block\n"), __func__);
+ goto error_part;
+ }
+ if (amiga_find_part(geom, part) != NULL) {
+ blocksize = PED_BE32_TO_CPU (part->de_SizeBlock)
+ * PED_BE32_TO_CPU (part->de_SectorPerBlock) / 128;
+ }
+ free (part);
+
+ /* Test boot block */
+ if (!(block = ped_malloc (PED_SECTOR_SIZE_DEFAULT*blocksize))) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Failed to allocate block\n"), __func__);
+ goto error_block;
+ }
+ root = geom->start;
+ if (!ped_device_read (geom->dev, block, root, blocksize)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read root block %llu\n"), __func__, root);
+ goto error;
+ }
+ if (PED_BE32_TO_CPU (block[0]) != 0x53465300) {
+ goto error;
+ }
+
+ /* Find and test the root blocks */
+ if (_asfs_probe_root(geom, block, blocksize, root)) {
+ found++;
+ }
+ root = geom->end - blocksize - (geom->length % blocksize) + 1;
+ if (!ped_device_read (geom->dev, block, root, 1)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Couldn't read root block %llu\n"), __func__, root);
+ goto error;
+ }
+ if (_asfs_probe_root(geom, block, blocksize, root)) {
+ found++;
+ }
+ if (found != 0) {
+ free (block);
+ return ped_geometry_duplicate (geom);
+ }
+
+error:
+ free (block);
+error_block:
+error_part:
+ return NULL;
+}
+
+static PedFileSystemOps _asfs_ops = {
+ probe: _asfs_probe,
+};
+
+PedFileSystemType _asfs_type = {
+ next: NULL,
+ ops: &_asfs_ops,
+ name: "asfs",
+};
diff --git a/libparted/fs/amiga/asfs.h b/libparted/fs/amiga/asfs.h
new file mode 100644
index 0000000..2b70a94
--- /dev/null
+++ b/libparted/fs/amiga/asfs.h
@@ -0,0 +1,18 @@
+/*
+ asfs.h -- parted asfs filesystem support header files
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
diff --git a/libparted/fs/btrfs/btrfs.c b/libparted/fs/btrfs/btrfs.c
new file mode 100644
index 0000000..6eded8b
--- /dev/null
+++ b/libparted/fs/btrfs/btrfs.c
@@ -0,0 +1,77 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2013-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+/* Located 64k inside the partition (start of the first btrfs superblock) */
+#define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */
+#define BTRFS_CSUM_SIZE 32
+#define BTRFS_FSID_SIZE 16
+
+
+static PedGeometry*
+btrfs_probe (PedGeometry* geom)
+{
+ union {
+ struct {
+ /* Just enough of the btrfs_super_block to get the magic */
+ uint8_t csum[BTRFS_CSUM_SIZE];
+ uint8_t fsid[BTRFS_FSID_SIZE];
+ uint64_t bytenr;
+ uint64_t flags;
+ uint64_t magic;
+ } sb;
+ int8_t sector[8192];
+ } buf;
+ PedSector offset = (64*1024)/geom->dev->sector_size;
+
+ if (geom->length < offset+1)
+ return 0;
+ if (!ped_geometry_read (geom, &buf, offset, 1))
+ return 0;
+
+ if (PED_LE64_TO_CPU(buf.sb.magic) == BTRFS_MAGIC) {
+ return ped_geometry_new (geom->dev, geom->start, geom->length);
+ }
+ return NULL;
+}
+
+static PedFileSystemOps btrfs_ops = {
+ probe: btrfs_probe,
+};
+
+static PedFileSystemType btrfs_type = {
+ next: NULL,
+ ops: &btrfs_ops,
+ name: "btrfs",
+};
+
+void
+ped_file_system_btrfs_init ()
+{
+ ped_file_system_type_register (&btrfs_type);
+}
+
+void
+ped_file_system_btrfs_done ()
+{
+ ped_file_system_type_unregister (&btrfs_type);
+}
diff --git a/libparted/fs/ext2/ext2.h b/libparted/fs/ext2/ext2.h
new file mode 100644
index 0000000..d23f63e
--- /dev/null
+++ b/libparted/fs/ext2/ext2.h
@@ -0,0 +1,79 @@
+/*
+ ext2.h -- ext2 header
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _EXT2_H
+#define _EXT2_H
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <sys/types.h>
+
+#include <inttypes.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+typedef u_int32_t blk_t;
+
+#ifdef HAVE_LINUX_EXT2_FS_H__FAILS_TO_COMPILE
+#include <linux/ext2_fs.h>
+#else
+#include "ext2_fs.h"
+#endif
+
+struct ext2_fs
+{
+ struct ext2_dev_handle *devhandle;
+
+ struct ext2_super_block sb;
+ struct ext2_group_desc *gd;
+ struct ext2_buffer_cache *bc;
+ int metadirty; /* 0:all sb&gd copies clean
+ 1:all sb&gd copies dirty
+ 2:only first sb&gd copy clean */
+
+ int dynamic_version;
+ int sparse; /* sparse superblocks */
+ int has_journal; /* journal */
+ int has_internal_journal;
+
+ int blocksize;
+ int logsize;
+ blk_t adminblocks;
+ blk_t gdblocks;
+ blk_t itoffset;
+ blk_t inodeblocks;
+ int numgroups;
+ int r_frac; /* reserved % of blocks */
+
+ unsigned char *relocator_pool;
+ unsigned char *relocator_pool_end;
+
+ int opt_debug;
+ int opt_safe;
+ int opt_verbose;
+
+ void *journal;
+};
+
+#endif
diff --git a/libparted/fs/ext2/ext2_fs.h b/libparted/fs/ext2/ext2_fs.h
new file mode 100644
index 0000000..1eca7ab
--- /dev/null
+++ b/libparted/fs/ext2/ext2_fs.h
@@ -0,0 +1,329 @@
+/*
+ * linux/include/linux/ext2_fs.h
+ *
+ * Copyright (C) 1992, 1993, 1994, 1995
+ * Remy Card (card@masi.ibp.fr)
+ * Laboratoire MASI - Institut Blaise Pascal
+ * Universite Pierre et Marie Curie (Paris VI)
+ *
+ * from
+ *
+ * linux/include/linux/minix_fs.h
+ *
+ * Copyright (C) 1991, 1992 Linus Torvalds
+ */
+
+/*
+ * EXT2_*_*() convienience macros added by Andrew Clausen <clausen@gnu.org>
+ * Copyright (C) 2000, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+ */
+
+#ifndef _EXT2_FS_H
+#define _EXT2_FS_H
+
+#include <parted/endian.h>
+#include <stdint.h>
+
+/*
+ * The second extended file system constants/structures
+ */
+
+#define EXT2_SUPER_MAGIC_CONST 0xEF53
+#define EXT2_MIN_BLOCK_SIZE 1024
+#define EXT2_NDIR_BLOCKS 12
+#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
+#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
+#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
+#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
+#define EXT2_VALID_FS 0x0001
+#define EXT2_ERROR_FS 0x0002
+#define EXT2_RESERVED_INODE_COUNT 11
+
+/*
+ * Codes for operating systems
+ */
+#define EXT2_OS_LINUX 0
+#define EXT2_OS_HURD 1
+#define EXT2_OS_MASIX 2
+#define EXT2_OS_FREEBSD 3
+#define EXT2_OS_LITES 4
+
+/*
+ * Feature set definitions
+ */
+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
+#define EXT2_FEATURE_COMPAT_HAS_DIR_INDEX 0x0020
+
+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
+#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
+#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
+#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
+
+#define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002
+#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004
+#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040
+#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
+
+/*
+ * Special inodes numbers
+ */
+#define EXT2_BAD_INO 1 /* Bad blocks inode */
+#define EXT2_ROOT_INO 2 /* Root inode */
+#define EXT2_ACL_IDX_INO 3 /* ACL inode */
+#define EXT2_ACL_DATA_INO 4 /* ACL inode */
+#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */
+#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
+
+/*
+ * Ext2 directory file types. Only the low 3 bits are used. The
+ * other bits are reserved for now.
+ */
+#define EXT2_FT_UNKNOWN 0
+#define EXT2_FT_REG_FILE 1
+#define EXT2_FT_DIR 2
+#define EXT2_FT_CHRDEV 3
+#define EXT2_FT_BLKDEV 4
+#define EXT2_FT_FIFO 5
+#define EXT2_FT_SOCK 6
+#define EXT2_FT_SYMLINK 7
+
+/*
+ * Behaviour when detecting errors
+ */
+#define EXT2_ERRORS_CONTINUE 1 /* Continue execution */
+#define EXT2_ERRORS_RO 2 /* Remount fs read-only */
+#define EXT2_ERRORS_PANIC 3 /* Panic */
+#define EXT2_ERRORS_DEFAULT EXT2_ERRORS_CONTINUE
+
+struct ext2_dir_entry_2
+{
+ uint32_t inode;
+ uint16_t rec_len;
+ uint8_t name_len;
+ uint8_t file_type;
+ char name[255];
+};
+
+struct ext2_group_desc
+{
+ uint32_t bg_block_bitmap;
+ uint32_t bg_inode_bitmap;
+ uint32_t bg_inode_table;
+ uint16_t bg_free_blocks_count;
+ uint16_t bg_free_inodes_count;
+ uint16_t bg_used_dirs_count;
+ uint16_t bg_pad;
+ uint32_t bg_reserved[3];
+};
+
+struct ext2_inode
+{
+ uint16_t i_mode; /* File mode */
+ uint16_t i_uid; /* Owner Uid */
+ uint32_t i_size; /* Size in bytes */
+ uint32_t i_atime; /* Access time */
+ uint32_t i_ctime; /* Creation time */
+ uint32_t i_mtime; /* Modification time */
+ uint32_t i_dtime; /* Deletion Time */
+ uint16_t i_gid; /* Group Id */
+ uint16_t i_links_count; /* Links count */
+ uint32_t i_blocks; /* Blocks count */
+ uint32_t i_flags; /* File flags */
+ union {
+ struct {
+ uint32_t l_i_reserved1;
+ } linux1;
+ struct {
+ uint32_t h_i_translator;
+ } hurd1;
+ struct {
+ uint32_t m_i_reserved1;
+ } masix1;
+ } osd1; /* OS dependent 1 */
+ uint32_t i_block[EXT2_N_BLOCKS];/* Pointers to blocks */
+ uint32_t i_generation; /* File version (for NFS) */
+ uint32_t i_file_acl; /* File ACL */
+ uint32_t i_dir_acl; /* Directory ACL */
+ uint32_t i_faddr; /* Fragment address */
+ union {
+ struct {
+ uint8_t l_i_frag; /* Fragment number */
+ uint8_t l_i_fsize; /* Fragment size */
+ uint16_t i_pad1;
+ uint32_t l_i_reserved2[2];
+ } linux2;
+ struct {
+ uint8_t h_i_frag; /* Fragment number */
+ uint8_t h_i_fsize; /* Fragment size */
+ uint16_t h_i_mode_high;
+ uint16_t h_i_uid_high;
+ uint16_t h_i_gid_high;
+ uint32_t h_i_author;
+ } hurd2;
+ struct {
+ uint8_t m_i_frag; /* Fragment number */
+ uint8_t m_i_fsize; /* Fragment size */
+ uint16_t m_pad1;
+ uint32_t m_i_reserved2[2];
+ } masix2;
+ } osd2; /* OS dependent 2 */
+};
+
+#define i_size_high i_dir_acl
+
+struct __attribute__ ((packed)) ext2_super_block
+{
+ uint32_t s_inodes_count; /* Inodes count */
+ uint32_t s_blocks_count; /* Blocks count */
+ uint32_t s_r_blocks_count; /* Reserved blocks count */
+ uint32_t s_free_blocks_count; /* Free blocks count */
+ uint32_t s_free_inodes_count; /* Free inodes count */
+ uint32_t s_first_data_block; /* First Data Block */
+ uint32_t s_log_block_size; /* Block size */
+ int32_t s_log_frag_size; /* Fragment size */
+ uint32_t s_blocks_per_group; /* # Blocks per group */
+ uint32_t s_frags_per_group; /* # Fragments per group */
+ uint32_t s_inodes_per_group; /* # Inodes per group */
+ uint32_t s_mtime; /* Mount time */
+ uint32_t s_wtime; /* Write time */
+ uint16_t s_mnt_count; /* Mount count */
+ int16_t s_max_mnt_count; /* Maximal mount count */
+ uint16_t s_magic; /* Magic signature */
+ uint16_t s_state; /* File system state */
+ uint16_t s_errors; /* Behaviour when detecting errors */
+ uint16_t s_minor_rev_level; /* minor revision level */
+ uint32_t s_lastcheck; /* time of last check */
+ uint32_t s_checkinterval; /* max. time between checks */
+ uint32_t s_creator_os; /* OS */
+ uint32_t s_rev_level; /* Revision level */
+ uint16_t s_def_resuid; /* Default uid for reserved blocks */
+ uint16_t s_def_resgid; /* Default gid for reserved blocks */
+ /*
+ * These fields are for EXT2_DYNAMIC_REV superblocks only.
+ *
+ * Note: the difference between the compatible feature set and
+ * the incompatible feature set is that if there is a bit set
+ * in the incompatible feature set that the kernel doesn't
+ * know about, it should refuse to mount the file system.
+ *
+ * e2fsck's requirements are more strict; if it doesn't know
+ * about a feature in either the compatible or incompatible
+ * feature set, it must abort and not try to meddle with
+ * things it doesn't understand...
+ */
+ uint32_t s_first_ino; /* First non-reserved inode */
+ uint16_t s_inode_size; /* size of inode structure */
+ uint16_t s_block_group_nr; /* block group # of this superblock */
+ uint32_t s_feature_compat; /* compatible feature set */
+ uint32_t s_feature_incompat; /* incompatible feature set */
+ uint32_t s_feature_ro_compat; /* readonly-compatible feature set */
+ uint8_t s_uuid[16]; /* 128-bit uuid for volume */
+ char s_volume_name[16]; /* volume name */
+ char s_last_mounted[64]; /* directory where last mounted */
+ uint32_t s_algorithm_usage_bitmap; /* For compression */
+ /*
+ * Performance hints. Directory preallocation should only
+ * happen if the EXT2_COMPAT_PREALLOC flag is on.
+ */
+ uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
+ uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
+ uint16_t s_padding1;
+ /*
+ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
+ */
+ uint8_t s_journal_uuid[16]; /* uuid of journal superblock */
+ uint32_t s_journal_inum; /* inode number of journal file */
+ uint32_t s_journal_dev; /* device number of journal file */
+ uint32_t s_last_orphan; /* start of list of inodes to delete */
+
+ uint32_t s_reserved[197]; /* Padding to the end of the block */
+};
+
+#define EXT2_DIRENT_INODE(dir_ent) (PED_LE32_TO_CPU((dir_ent).inode))
+#define EXT2_DIRENT_REC_LEN(dir_ent) (PED_LE16_TO_CPU((dir_ent).rec_len))
+#define EXT2_DIRENT_NAME_LEN(dir_ent) ((dir_ent).name_len)
+#define EXT2_DIRENT_FILE_TYPE(dir_ent) ((dir_ent).file_type)
+
+#define EXT2_GROUP_BLOCK_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_block_bitmap))
+#define EXT2_GROUP_INODE_BITMAP(gd) (PED_LE32_TO_CPU((gd).bg_inode_bitmap))
+#define EXT2_GROUP_INODE_TABLE(gd) (PED_LE32_TO_CPU((gd).bg_inode_table))
+#define EXT2_GROUP_FREE_BLOCKS_COUNT(gd) \
+ (PED_LE16_TO_CPU((gd).bg_free_blocks_count))
+#define EXT2_GROUP_FREE_INODES_COUNT(gd) \
+ (PED_LE16_TO_CPU((gd).bg_free_inodes_count))
+#define EXT2_GROUP_USED_DIRS_COUNT(gd) \
+ (PED_LE16_TO_CPU((gd).bg_used_dirs_count))
+
+#define EXT2_INODE_MODE(inode) (PED_LE16_TO_CPU((inode).i_mode))
+#define EXT2_INODE_UID(inode) (PED_LE16_TO_CPU((inode).i_uid))
+#define EXT2_INODE_SIZE(inode) \
+ ((uint64_t) PED_LE32_TO_CPU((inode).i_size) \
+ + ((uint64_t) PED_LE32_TO_CPU((inode).i_size_high) << 32))
+#define EXT2_INODE_ATIME(inode) (PED_LE32_TO_CPU((inode).i_atime))
+#define EXT2_INODE_CTIME(inode) (PED_LE32_TO_CPU((inode).i_ctime))
+#define EXT2_INODE_MTIME(inode) (PED_LE32_TO_CPU((inode).i_mtime))
+#define EXT2_INODE_DTIME(inode) (PED_LE32_TO_CPU((inode).i_dtime))
+#define EXT2_INODE_GID(inode) (PED_LE16_TO_CPU((inode).i_gid))
+#define EXT2_INODE_LINKS_COUNT(inode) (PED_LE16_TO_CPU((inode).i_links_count))
+#define EXT2_INODE_BLOCKS(inode) (PED_LE32_TO_CPU((inode).i_blocks))
+#define EXT2_INODE_FLAGS(inode) (PED_LE32_TO_CPU((inode).i_flags))
+#define EXT2_INODE_TRANSLATOR(inode) (PED_LE32_TO_CPU((inode).osd1.hurd1.h_i_translator))
+#define EXT2_INODE_BLOCK(inode, blk) (PED_LE32_TO_CPU((inode).i_block[blk]))
+
+#define EXT2_SUPER_INODES_COUNT(sb) (PED_LE32_TO_CPU((sb).s_inodes_count))
+#define EXT2_SUPER_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_blocks_count))
+#define EXT2_SUPER_R_BLOCKS_COUNT(sb) (PED_LE32_TO_CPU((sb).s_r_blocks_count))
+#define EXT2_SUPER_FREE_BLOCKS_COUNT(sb) \
+ (PED_LE32_TO_CPU((sb).s_free_blocks_count))
+#define EXT2_SUPER_FREE_INODES_COUNT(sb) \
+ (PED_LE32_TO_CPU((sb).s_free_inodes_count))
+#define EXT2_SUPER_FIRST_DATA_BLOCK(sb) \
+ (PED_LE32_TO_CPU((sb).s_first_data_block))
+#define EXT2_SUPER_LOG_BLOCK_SIZE(sb) (PED_LE32_TO_CPU((sb).s_log_block_size))
+#define EXT2_SUPER_LOG_FRAG_SIZE(sb) \
+ ((int32_t) PED_LE32_TO_CPU((sb).s_log_frag_size))
+#define EXT2_SUPER_BLOCKS_PER_GROUP(sb) \
+ (PED_LE32_TO_CPU((sb).s_blocks_per_group))
+#define EXT2_SUPER_FRAGS_PER_GROUP(sb) \
+ (PED_LE32_TO_CPU((sb).s_frags_per_group))
+#define EXT2_SUPER_INODES_PER_GROUP(sb) \
+ (PED_LE32_TO_CPU((sb).s_inodes_per_group))
+#define EXT2_SUPER_MTIME(sb) (PED_LE32_TO_CPU((sb).s_mtime))
+#define EXT2_SUPER_WTIME(sb) (PED_LE32_TO_CPU((sb).s_wtime))
+#define EXT2_SUPER_MNT_COUNT(sb) (PED_LE16_TO_CPU((sb).s_mnt_count))
+#define EXT2_SUPER_MAX_MNT_COUNT(sb) \
+ ((int16_t) PED_LE16_TO_CPU((sb).s_max_mnt_count))
+#define EXT2_SUPER_MAGIC(sb) (PED_LE16_TO_CPU((sb).s_magic))
+#define EXT2_SUPER_STATE(sb) (PED_LE16_TO_CPU((sb).s_state))
+#define EXT2_SUPER_ERRORS(sb) (PED_LE16_TO_CPU((sb).s_errors))
+#define EXT2_SUPER_MINOR_REV_LEVEL(sb) \
+ (PED_LE16_TO_CPU((sb).s_minor_rev_level))
+#define EXT2_SUPER_LASTCHECK(sb) (PED_LE32_TO_CPU((sb).s_lastcheck))
+#define EXT2_SUPER_CHECKINTERVAL(sb) (PED_LE32_TO_CPU((sb).s_checkinterval))
+#define EXT2_SUPER_CREATOR_OS(sb) (PED_LE32_TO_CPU((sb).s_creator_os))
+#define EXT2_SUPER_REV_LEVEL(sb) (PED_LE32_TO_CPU((sb).s_rev_level))
+#define EXT2_SUPER_DEF_RESUID(sb) (PED_LE16_TO_CPU((sb).s_def_resuid))
+#define EXT2_SUPER_DEF_RESGID(sb) (PED_LE16_TO_CPU((sb).s_def_resgid))
+
+#define EXT2_SUPER_FIRST_INO(sb) (PED_LE32_TO_CPU((sb).s_first_ino))
+#define EXT2_SUPER_INODE_SIZE(sb) (PED_LE16_TO_CPU((sb).s_inode_size))
+#define EXT2_SUPER_BLOCK_GROUP_NR(sb) (PED_LE16_TO_CPU((sb).s_block_group_nr))
+#define EXT2_SUPER_FEATURE_COMPAT(sb) (PED_LE32_TO_CPU((sb).s_feature_compat))
+#define EXT2_SUPER_FEATURE_INCOMPAT(sb) \
+ (PED_LE32_TO_CPU((sb).s_feature_incompat))
+#define EXT2_SUPER_FEATURE_RO_COMPAT(sb) \
+ (PED_LE32_TO_CPU((sb).s_feature_ro_compat))
+#define EXT2_SUPER_UUID(sb) ((sb).s_uuid)
+#define EXT2_SUPER_VOLUME_NAME(sb) ((sb).s_volume_name)
+#define EXT2_SUPER_LAST_MOUNTED(sb) ((sb).s_last_mounted)
+#define EXT2_SUPER_ALGORITHM_USAGE_BITMAP(sb) \
+ (PED_LE32_TO_CPU((sb).s_algorithm_usage_bitmap))
+
+#define EXT2_SUPER_JOURNAL_UUID(sb) ((sb).s_journal_uuid)
+#define EXT2_SUPER_JOURNAL_INUM(sb) (PED_LE32_TO_CPU((sb).s_journal_inum))
+#define EXT2_SUPER_JOURNAL_DEV(sb) (PED_LE32_TO_CPU((sb).s_journal_dev))
+#define EXT2_SUPER_LAST_ORPHAN(sb) (PED_LE32_TO_CPU((sb).s_last_orphan))
+
+#endif
diff --git a/libparted/fs/ext2/interface.c b/libparted/fs/ext2/interface.c
new file mode 100644
index 0000000..7e0b197
--- /dev/null
+++ b/libparted/fs/ext2/interface.c
@@ -0,0 +1,163 @@
+/*
+ interface.c -- parted binding glue to libext2resize
+ Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* VERSION: libext2resize 1.1.6 (by Lennert)
+ * merged 1.1.11 changes (by Andrew)
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include "ext2.h"
+
+static PedFileSystemType _ext2_type;
+static PedFileSystemType _ext3_type;
+
+struct ext2_dev_handle* ext2_make_dev_handle_from_parted_geometry(PedGeometry* geom);
+
+static PedGeometry*
+_ext2_generic_probe (PedGeometry* geom, int expect_ext_ver)
+{
+ struct ext2_super_block *sb;
+ const int sectors = (4096 + geom->dev->sector_size - 1) /
+ geom->dev->sector_size;
+ uint8_t *buf = alloca (sectors * geom->dev->sector_size);
+ if (!ped_geometry_read(geom, buf, 0, sectors))
+ return NULL;
+ sb = (struct ext2_super_block *)(buf+1024);
+
+ if (EXT2_SUPER_MAGIC(*sb) == EXT2_SUPER_MAGIC_CONST) {
+ PedSector block_size = (EXT2_MIN_BLOCK_SIZE << (EXT2_SUPER_LOG_BLOCK_SIZE(*sb))) / geom->dev->sector_size;
+ PedSector block_count = EXT2_SUPER_BLOCKS_COUNT(*sb);
+ PedSector group_blocks = EXT2_SUPER_BLOCKS_PER_GROUP(*sb);
+ PedSector group_nr = EXT2_SUPER_BLOCK_GROUP_NR(*sb);
+ PedSector first_data_block = EXT2_SUPER_FIRST_DATA_BLOCK(*sb);
+ int version = EXT2_SUPER_REV_LEVEL(*sb);
+ int is_ext3 = 0;
+ int is_ext4 = 0;
+
+ is_ext3 = (EXT2_SUPER_FEATURE_COMPAT (*sb)
+ & EXT3_FEATURE_COMPAT_HAS_JOURNAL) != 0;
+ if (is_ext3) {
+ is_ext4 = ((EXT2_SUPER_FEATURE_RO_COMPAT (*sb)
+ & EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
+ || (EXT2_SUPER_FEATURE_RO_COMPAT (*sb)
+ & EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
+ || (EXT2_SUPER_FEATURE_RO_COMPAT (*sb)
+ & EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
+ || (EXT2_SUPER_FEATURE_INCOMPAT (*sb)
+ & EXT4_FEATURE_INCOMPAT_EXTENTS)
+ || (EXT2_SUPER_FEATURE_INCOMPAT (*sb)
+ & EXT4_FEATURE_INCOMPAT_64BIT)
+ || (EXT2_SUPER_FEATURE_INCOMPAT (*sb)
+ & EXT4_FEATURE_INCOMPAT_FLEX_BG));
+ if (is_ext4)
+ is_ext3 = 0;
+ }
+ if (expect_ext_ver == 2 && (is_ext3 || is_ext4))
+ return NULL;
+ if (expect_ext_ver == 3 && !is_ext3)
+ return NULL;
+ else if (expect_ext_ver == 4 && !is_ext4)
+ return NULL;
+
+ if (version > 0 && group_nr > 0) {
+ PedSector start;
+ PedGeometry probe_geom;
+
+ start = geom->start
+ - group_blocks * group_nr
+ - first_data_block;
+
+ if (start < 0)
+ return NULL;
+ ped_geometry_init (&probe_geom, geom->dev,
+ start, block_count * block_size);
+ return _ext2_generic_probe (&probe_geom,
+ expect_ext_ver);
+ } else {
+ return ped_geometry_new (geom->dev, geom->start,
+ block_count * block_size);
+ }
+ }
+
+ return NULL;
+}
+
+static PedGeometry*
+_ext2_probe (PedGeometry* geom)
+{
+ return _ext2_generic_probe (geom, 2);
+}
+
+static PedGeometry*
+_ext3_probe (PedGeometry* geom)
+{
+ return _ext2_generic_probe (geom, 3);
+}
+
+static PedGeometry*
+_ext4_probe (PedGeometry* geom)
+{
+ return _ext2_generic_probe (geom, 4);
+}
+
+static PedFileSystemOps _ext2_ops = {
+ probe: _ext2_probe,
+};
+
+static PedFileSystemOps _ext3_ops = {
+ probe: _ext3_probe,
+};
+
+static PedFileSystemOps _ext4_ops = {
+ probe: _ext4_probe,
+};
+
+static PedFileSystemType _ext2_type = {
+ next: NULL,
+ ops: &_ext2_ops,
+ name: "ext2",
+};
+
+static PedFileSystemType _ext3_type = {
+ next: NULL,
+ ops: &_ext3_ops,
+ name: "ext3",
+};
+
+static PedFileSystemType _ext4_type = {
+ next: NULL,
+ ops: &_ext4_ops,
+ name: "ext4",
+};
+
+void ped_file_system_ext2_init ()
+{
+ ped_file_system_type_register (&_ext2_type);
+ ped_file_system_type_register (&_ext3_type);
+ ped_file_system_type_register (&_ext4_type);
+}
+
+void ped_file_system_ext2_done ()
+{
+ ped_file_system_type_unregister (&_ext2_type);
+ ped_file_system_type_unregister (&_ext3_type);
+ ped_file_system_type_unregister (&_ext4_type);
+}
diff --git a/libparted/fs/f2fs/f2fs.c b/libparted/fs/f2fs/f2fs.c
new file mode 100644
index 0000000..68ed092
--- /dev/null
+++ b/libparted/fs/f2fs/f2fs.c
@@ -0,0 +1,60 @@
+/*
+ libparted/fs/f2fs - Flash-Friendly File System
+ Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+#include "f2fs.h"
+
+static PedGeometry*
+f2fs_probe (PedGeometry* geom)
+{
+ struct f2fs_super_block *sb = alloca(geom->dev->sector_size);
+
+ if (!ped_geometry_read (geom, sb, F2FS_SB_OFFSET, 1))
+ return NULL;
+
+ if (PED_LE32_TO_CPU(sb->magic) == F2FS_MAGIC)
+ return ped_geometry_new (geom->dev, geom->start, geom->length);
+
+ return NULL;
+}
+
+static PedFileSystemOps f2fs_ops = {
+ probe: f2fs_probe,
+};
+
+static PedFileSystemType f2fs_type = {
+ next: NULL,
+ ops: &f2fs_ops,
+ name: "f2fs",
+};
+
+void
+ped_file_system_f2fs_init ()
+{
+ ped_file_system_type_register (&f2fs_type);
+}
+
+void
+ped_file_system_f2fs_done ()
+{
+ ped_file_system_type_unregister (&f2fs_type);
+}
diff --git a/libparted/fs/f2fs/f2fs.h b/libparted/fs/f2fs/f2fs.h
new file mode 100644
index 0000000..9341337
--- /dev/null
+++ b/libparted/fs/f2fs/f2fs.h
@@ -0,0 +1,57 @@
+/*
+ libparted/fs/f2fs - Flash-Friendly File System
+ Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef _F2FS_H
+#define _F2FS_H
+
+#define F2FS_MAGIC 0xF2F52010
+#define F2FS_MAX_VOLUME_NAME 512
+#define F2FS_SB_OFFSET 0x02
+
+struct f2fs_super_block {
+ uint32_t magic; /* Magic Number */
+ uint16_t major_ver; /* Major Version */
+ uint16_t minor_ver; /* Minor Version */
+ uint32_t log_sectorsize; /* log2 sector size in bytes */
+ uint32_t log_sectors_per_block; /* log2 # of sectors per block */
+ uint32_t log_blocksize; /* log2 block size in bytes */
+ uint32_t log_blocks_per_seg; /* log2 # of blocks per segment */
+ uint32_t segs_per_sec; /* # of segments per section */
+ uint32_t secs_per_zone; /* # of sections per zone */
+ uint32_t checksum_offset; /* checksum offset inside super block */
+ uint64_t block_count; /* total # of user blocks */
+ uint32_t section_count; /* total # of sections */
+ uint32_t segment_count; /* total # of segments */
+ uint32_t segment_count_ckpt; /* # of segments for checkpoint */
+ uint32_t segment_count_sit; /* # of segments for SIT */
+ uint32_t segment_count_nat; /* # of segments for NAT */
+ uint32_t segment_count_ssa; /* # of segments for SSA */
+ uint32_t segment_count_main; /* # of segments for main area */
+ uint32_t segment0_blkaddr; /* start block address of segment 0 */
+ uint32_t cp_blkaddr; /* start block address of checkpoint */
+ uint32_t sit_blkaddr; /* start block address of SIT */
+ uint32_t nat_blkaddr; /* start block address of NAT */
+ uint32_t ssa_blkaddr; /* start block address of SSA */
+ uint32_t main_blkaddr; /* start block address of main area */
+ uint32_t root_ino; /* root inode number */
+ uint32_t node_ino; /* node inode number */
+ uint32_t meta_ino; /* meta inode number */
+ uint8_t uuid[16]; /* 128-bit uuid for volume */
+ uint16_t volume_name[F2FS_MAX_VOLUME_NAME]; /* volume name */
+} __attribute__((packed));
+
+#endif
diff --git a/libparted/fs/fat/bootsector.c b/libparted/fs/fat/bootsector.c
new file mode 100644
index 0000000..f02685b
--- /dev/null
+++ b/libparted/fs/fat/bootsector.c
@@ -0,0 +1,271 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2002, 2004, 2007, 2009-2014, 2019-2023 Free
+ Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/* Reads in the boot sector (superblock), and does a minimum of sanity
+ * checking. The goals are:
+ * - to detect fat file systems, even if they are damaged [i.e. not
+ * return an error / throw an exception]
+ * - to fail detection if there's not enough information for
+ * fat_boot_sector_probe_type() to work (or possibly crash on a divide-by-zero)
+ */
+int
+fat_boot_sector_read (FatBootSector** bsp, const PedGeometry *geom)
+{
+ PED_ASSERT (bsp != NULL);
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_geometry_read_alloc (geom, (void **)bsp, 0, 1))
+ return 0;
+ FatBootSector *bs = *bsp;
+
+ if (PED_LE16_TO_CPU (bs->boot_sign) != 0xAA55) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid signature for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->sector_size
+ || PED_LE16_TO_CPU (bs->sector_size) % PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid sector size for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->cluster_size) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid cluster size for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->reserved) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid number of reserved "
+ "sectors for a FAT file system."));
+ return 0;
+ }
+
+ if (bs->fats < 1 || bs->fats > 4) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid number of FATs."));
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+ Don't trust the FAT12, FAT16 or FAT32 label string.
+ */
+FatType _GL_ATTRIBUTE_PURE
+fat_boot_sector_probe_type (const FatBootSector* bs, const PedGeometry* geom)
+{
+ PedSector logical_sector_size;
+ PedSector first_cluster_sector;
+ FatCluster cluster_count;
+
+ if (!PED_LE16_TO_CPU (bs->dir_entries))
+ return FAT_TYPE_FAT32;
+
+ logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512;
+
+ first_cluster_sector
+ = PED_LE16_TO_CPU (bs->reserved) * logical_sector_size
+ + 2 * PED_LE16_TO_CPU (bs->fat_length) * logical_sector_size
+ + PED_LE16_TO_CPU (bs->dir_entries)
+ / (512 / sizeof (FatDirEntry));
+ cluster_count = (geom->length - first_cluster_sector)
+ / bs->cluster_size / logical_sector_size;
+ if (cluster_count > MAX_FAT12_CLUSTERS)
+ return FAT_TYPE_FAT16;
+ else
+ return FAT_TYPE_FAT12;
+}
+
+static int
+_fat_table_entry_size (FatType fat_type)
+{
+ switch (fat_type) {
+ case FAT_TYPE_FAT12:
+ return 2; /* FIXME: how? */
+
+ case FAT_TYPE_FAT16:
+ return 2;
+
+ case FAT_TYPE_FAT32:
+ return 4;
+ }
+
+ return 0;
+}
+
+/* Analyses the boot sector, and sticks appropriate numbers in
+ fs->type_specific.
+
+ Note: you need to subtract (2 * cluster_sectors) off cluster offset,
+ because the first cluster is number 2. (0 and 1 are not real clusters,
+ and referencing them is a bug)
+ */
+int
+fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int fat_entry_size;
+
+ PED_ASSERT (bs != NULL);
+
+ fs_info->logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512;
+
+ fs_info->sectors_per_track = PED_LE16_TO_CPU (bs->secs_track);
+ fs_info->heads = PED_LE16_TO_CPU (bs->heads);
+ if (fs_info->sectors_per_track < 1 || fs_info->sectors_per_track > 63
+ || fs_info->heads < 1 || fs_info->heads > 255) {
+ PedCHSGeometry* bios_geom = &fs->geom->dev->bios_geom;
+ int cyl_count = 0;
+
+ if (fs_info->heads > 0 && fs_info->sectors_per_track > 0)
+ cyl_count = fs->geom->dev->length / fs_info->heads
+ / fs_info->sectors_per_track;
+
+ switch (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The file system's CHS geometry is (%d, %d, %d), "
+ "which is invalid. The partition table's CHS "
+ "geometry is (%d, %d, %d)."),
+ cyl_count, fs_info->heads, fs_info->sectors_per_track,
+ bios_geom->cylinders, bios_geom->heads,
+ bios_geom->sectors)) {
+
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (bs->sectors)
+ fs_info->sector_count = PED_LE16_TO_CPU (bs->sectors)
+ * fs_info->logical_sector_size;
+ else
+ fs_info->sector_count = PED_LE32_TO_CPU (bs->sector_count)
+ * fs_info->logical_sector_size;
+
+ fs_info->fat_table_count = bs->fats;
+ fs_info->root_dir_entry_count = PED_LE16_TO_CPU (bs->dir_entries);
+ fs_info->fat_offset = PED_LE16_TO_CPU (bs->reserved)
+ * fs_info->logical_sector_size;
+ fs_info->cluster_sectors = bs->cluster_size
+ * fs_info->logical_sector_size;
+ fs_info->cluster_size = fs_info->cluster_sectors * 512;
+
+ if (fs_info->logical_sector_size == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says logical sector size is 0. "
+ "This is weird. "));
+ return 0;
+ }
+ if (fs_info->fat_table_count == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says there are no FAT tables. This "
+ "is weird. "));
+ return 0;
+ }
+ if (fs_info->cluster_sectors == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says clusters are 0 sectors. This "
+ "is weird. "));
+ return 0;
+ }
+
+ fs_info->fat_type = fat_boot_sector_probe_type (bs, fs->geom);
+ if (fs_info->fat_type == FAT_TYPE_FAT12) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("File system is FAT12, which is unsupported."));
+ return 0;
+ }
+ if (fs_info->fat_type == FAT_TYPE_FAT16) {
+ fs_info->fat_sectors = PED_LE16_TO_CPU (bs->fat_length)
+ * fs_info->logical_sector_size;
+ fs_info->serial_number
+ = PED_LE32_TO_CPU (bs->u.fat16.serial_number);
+ fs_info->root_cluster = 0;
+ fs_info->root_dir_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ fs_info->root_dir_sector_count
+ = fs_info->root_dir_entry_count * sizeof (FatDirEntry)
+ / (512 * fs_info->logical_sector_size);
+ fs_info->cluster_offset
+ = fs_info->root_dir_offset
+ + fs_info->root_dir_sector_count;
+ }
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ fs_info->fat_sectors = PED_LE32_TO_CPU (bs->u.fat32.fat_length)
+ * fs_info->logical_sector_size;
+ fs_info->serial_number
+ = PED_LE32_TO_CPU (bs->u.fat32.serial_number);
+ fs_info->info_sector_offset
+ = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.info_sector)
+ * fs_info->logical_sector_size;
+ fs_info->boot_sector_backup_offset
+ = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.backup_sector)
+ * fs_info->logical_sector_size;
+ fs_info->root_cluster
+ = PED_LE32_TO_CPU (bs->u.fat32.root_dir_cluster);
+ fs_info->root_dir_offset = 0;
+ fs_info->root_dir_sector_count = 0;
+ fs_info->cluster_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ }
+
+ fs_info->cluster_count
+ = (fs_info->sector_count - fs_info->cluster_offset)
+ / fs_info->cluster_sectors;
+
+ fat_entry_size = _fat_table_entry_size (fs_info->fat_type);
+ if (fs_info->cluster_count + 2
+ > fs_info->fat_sectors * 512 / fat_entry_size)
+ fs_info->cluster_count
+ = fs_info->fat_sectors * 512 / fat_entry_size - 2;
+
+ fs_info->dir_entries_per_cluster
+ = fs_info->cluster_size / sizeof (FatDirEntry);
+ return 1;
+}
diff --git a/libparted/fs/fat/bootsector.h b/libparted/fs/fat/bootsector.h
new file mode 100644
index 0000000..328ba2f
--- /dev/null
+++ b/libparted/fs/fat/bootsector.h
@@ -0,0 +1,126 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_BOOTSECTOR_H
+#define PED_FAT_BOOTSECTOR_H
+
+typedef struct _FatBootSector FatBootSector;
+typedef struct _FatInfoSector FatInfoSector;
+
+#include "fat.h"
+
+#define FAT32_INFO_MAGIC1 0x41615252
+#define FAT32_INFO_MAGIC2 0x61417272
+#define FAT32_INFO_MAGIC3 0xaa55
+
+/* stolen from mkdosfs, by Dave Hudson */
+
+#define FAT_BOOT_MESSAGE \
+"This partition does not have an operating system loader installed on it.\n\r"\
+"Press a key to reboot..."
+
+#define FAT_BOOT_JUMP "\xeb\x58\x90" /* jmp +5a */
+
+#define FAT_BOOT_CODE "\x0e" /* push cs */ \
+ "\x1f" /* pop ds */ \
+ "\xbe\x74\x7e" /* mov si, offset message */ \
+ /* write_msg_loop: */ \
+ "\xac" /* lodsb */ \
+ "\x22\xc0" /* and al, al */ \
+ "\x74\x06" /* jz done (+8) */ \
+ "\xb4\x0e" /* mov ah, 0x0e */ \
+ "\xcd\x10" /* int 0x10 */ \
+ "\xeb\xf5" /* jmp write_msg_loop */ \
+ /* done: */ \
+ "\xb4\x00" /* mov ah, 0x00 */ \
+ "\xcd\x16" /* int 0x16 */ \
+ "\xb4\x00" /* mov ah, 0x00 */ \
+ "\xcd\x19" /* int 0x19 */ \
+ "\xeb\xfe" /* jmp +0 - in case int 0x19 */ \
+ /* doesn't work */ \
+ /* message: */ \
+ FAT_BOOT_MESSAGE
+
+#define FAT_BOOT_CODE_LENGTH 128
+
+struct __attribute__ ((packed)) _FatBootSector {
+ uint8_t boot_jump[3]; /* 00: Boot strap short or near jump */
+ uint8_t system_id[8]; /* 03: system name */
+ uint16_t sector_size; /* 0b: bytes per logical sector */
+ uint8_t cluster_size; /* 0d: sectors/cluster */
+ uint16_t reserved; /* 0e: reserved sectors */
+ uint8_t fats; /* 10: number of FATs */
+ uint16_t dir_entries; /* 11: number of root directory entries */
+ uint16_t sectors; /* 13: if 0, total_sect supersedes */
+ uint8_t media; /* 15: media code */
+ uint16_t fat_length; /* 16: sectors/FAT for FAT12/16 */
+ uint16_t secs_track; /* 18: sectors per track */
+ uint16_t heads; /* 1a: number of heads */
+ uint32_t hidden; /* 1c: hidden sectors (partition start) */
+ uint32_t sector_count; /* 20: no. of sectors (if sectors == 0) */
+
+ union __attribute__ ((packed)) {
+ /* FAT16 fields */
+ struct __attribute__ ((packed)) {
+ uint8_t drive_num; /* 24: */
+ uint8_t empty_1; /* 25: */
+ uint8_t ext_signature; /* 26: always 0x29 */
+ uint32_t serial_number; /* 27: */
+ uint8_t volume_name [11]; /* 2b: */
+ uint8_t fat_name [8]; /* 36: */
+ uint8_t boot_code[448]; /* 3f: Boot code (or message) */
+ } fat16;
+ /* FAT32 fields */
+ struct __attribute__ ((packed)) {
+ uint32_t fat_length; /* 24: size of FAT in sectors */
+ uint16_t flags; /* 28: bit8: fat mirroring, low4: active fat */
+ uint16_t version; /* 2a: minor * 256 + major */
+ uint32_t root_dir_cluster; /* 2c: */
+ uint16_t info_sector; /* 30: */
+ uint16_t backup_sector; /* 32: */
+ uint8_t empty_1 [12]; /* 34: */
+ uint16_t drive_num; /* 40: */
+ uint8_t ext_signature; /* 42: always 0x29 */
+ uint32_t serial_number; /* 43: */
+ uint8_t volume_name [11]; /* 47: */
+ uint8_t fat_name [8]; /* 52: */
+ uint8_t boot_code[420]; /* 5a: Boot code (or message) */
+ } fat32;
+ } u;
+
+ uint16_t boot_sign; /* 1fe: always 0xAA55 */
+};
+
+struct __attribute__ ((packed)) _FatInfoSector {
+ uint32_t signature_1; /* should be 0x41615252 */
+ uint8_t unused [480];
+ uint32_t signature_2; /* should be 0x61417272 */
+ uint32_t free_clusters;
+ uint32_t next_cluster; /* most recently allocated cluster */
+ uint8_t unused2 [0xe];
+ uint16_t signature_3; /* should be 0xaa55 */
+};
+
+int fat_boot_sector_read (FatBootSector** bs, const PedGeometry* geom);
+FatType fat_boot_sector_probe_type (const FatBootSector* bs,
+ const PedGeometry* geom);
+int fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs);
+
+
+#endif /* PED_FAT_BOOTSECTOR_H */
diff --git a/libparted/fs/fat/count.h b/libparted/fs/fat/count.h
new file mode 100644
index 0000000..bb7d6af
--- /dev/null
+++ b/libparted/fs/fat/count.h
@@ -0,0 +1,46 @@
+/*
+ libparted
+ Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef COUNT_H_INCLUDED
+#define COUNT_H_INCLUDED
+
+typedef enum _FatClusterFlag FatClusterFlag;
+typedef struct _FatClusterInfo FatClusterInfo;
+
+enum _FatClusterFlag {
+ FAT_FLAG_FREE=0,
+ FAT_FLAG_FILE=1,
+ FAT_FLAG_DIRECTORY=2,
+ FAT_FLAG_BAD=3
+};
+
+struct __attribute__ ((packed)) _FatClusterInfo {
+ unsigned int units_used:6; /* 1 unit = cluster_size / 64 */
+ FatClusterFlag flag:2;
+};
+
+extern int fat_collect_cluster_info (PedFileSystem *fs);
+extern FatClusterFlag fat_get_cluster_flag (PedFileSystem* fs,
+ FatCluster cluster);
+extern PedSector fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster);
+extern FatClusterFlag fat_get_fragment_flag (PedFileSystem* fs,
+ FatFragment frag);
+extern int fat_is_fragment_active (PedFileSystem* fs, FatFragment frag);
+
+#endif /* COUNT_H_INCLUDED */
diff --git a/libparted/fs/fat/fat.c b/libparted/fs/fat/fat.c
new file mode 100644
index 0000000..c04f178
--- /dev/null
+++ b/libparted/fs/fat/fat.c
@@ -0,0 +1,162 @@
+/*
+ libparted
+ Copyright (C) 1998-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <string.h>
+#include <uuid/uuid.h>
+
+#include "fat.h"
+
+PedFileSystem*
+fat_alloc (const PedGeometry* geom)
+{
+ PedFileSystem* fs;
+
+ fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem));
+ if (!fs)
+ goto error;
+
+ fs->type_specific = (FatSpecific*) ped_malloc (sizeof (FatSpecific));
+ if (!fs->type_specific)
+ goto error_free_fs;
+ FatSpecific* fs_info = (FatSpecific*) fs->type_specific;
+ fs_info->boot_sector = NULL;
+ fs_info->info_sector = NULL;
+ fs->geom = ped_geometry_duplicate (geom);
+ if (!fs->geom)
+ goto error_free_type_specific;
+
+ fs->checked = 0;
+ return fs;
+
+error_free_type_specific:
+ free (fs->type_specific);
+error_free_fs:
+ free (fs);
+error:
+ return NULL;
+}
+
+void
+fat_free (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = (FatSpecific*) fs->type_specific;
+ free (fs_info->boot_sector);
+ ped_geometry_destroy (fs->geom);
+ free (fs->type_specific);
+ free (fs);
+}
+
+PedGeometry*
+fat_probe (PedGeometry* geom, FatType* fat_type)
+{
+ PedFileSystem* fs;
+ FatSpecific* fs_info;
+ PedGeometry* result;
+
+ fs = fat_alloc (geom);
+ if (!fs)
+ goto error;
+ fs_info = (FatSpecific*) fs->type_specific;
+
+ if (!fat_boot_sector_read (&fs_info->boot_sector, geom))
+ goto error_free_fs;
+ if (!fat_boot_sector_analyse (fs_info->boot_sector, fs))
+ goto error_free_fs;
+
+ *fat_type = fs_info->fat_type;
+ result = ped_geometry_new (geom->dev, geom->start,
+ fs_info->sector_count);
+
+ fat_free (fs);
+ return result;
+
+error_free_fs:
+ fat_free (fs);
+error:
+ return NULL;
+}
+
+PedGeometry*
+fat_probe_fat16 (PedGeometry* geom)
+{
+ FatType fat_type;
+ PedGeometry* probed_geom = fat_probe (geom, &fat_type);
+
+ if (probed_geom) {
+ if (fat_type == FAT_TYPE_FAT16)
+ return probed_geom;
+ ped_geometry_destroy (probed_geom);
+ }
+ return NULL;
+}
+
+PedGeometry*
+fat_probe_fat32 (PedGeometry* geom)
+{
+ FatType fat_type;
+ PedGeometry* probed_geom = fat_probe (geom, &fat_type);
+
+ if (probed_geom) {
+ if (fat_type == FAT_TYPE_FAT32)
+ return probed_geom;
+ ped_geometry_destroy (probed_geom);
+ }
+ return NULL;
+}
+
+static PedFileSystemOps fat16_ops = {
+ probe: fat_probe_fat16,
+};
+
+static PedFileSystemOps fat32_ops = {
+ probe: fat_probe_fat32,
+};
+
+PedFileSystemType fat16_type = {
+ next: NULL,
+ ops: &fat16_ops,
+ name: "fat16",
+};
+
+PedFileSystemType fat32_type = {
+ next: NULL,
+ ops: &fat32_ops,
+ name: "fat32",
+};
+
+void
+ped_file_system_fat_init ()
+{
+ if (sizeof (FatBootSector) != 512) {
+ ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL,
+ _("GNU Parted was miscompiled: the FAT boot sector "
+ "should be 512 bytes. FAT support will be disabled."));
+ } else {
+ ped_file_system_type_register (&fat16_type);
+ ped_file_system_type_register (&fat32_type);
+ }
+}
+
+void
+ped_file_system_fat_done ()
+{
+ ped_file_system_type_unregister (&fat16_type);
+ ped_file_system_type_unregister (&fat32_type);
+}
diff --git a/libparted/fs/fat/fat.h b/libparted/fs/fat/fat.h
new file mode 100644
index 0000000..f5302d9
--- /dev/null
+++ b/libparted/fs/fat/fat.h
@@ -0,0 +1,163 @@
+/*
+ libparted
+ Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef FAT_H_INCLUDED
+#define FAT_H_INCLUDED
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define BUFFER_SIZE 1024 /* buffer size in sectors (512 bytes) */
+
+typedef uint32_t FatCluster;
+typedef int32_t FatFragment;
+
+enum _FatType {
+ FAT_TYPE_FAT12,
+ FAT_TYPE_FAT16,
+ FAT_TYPE_FAT32
+};
+typedef enum _FatType FatType;
+
+typedef struct _FatSpecific FatSpecific;
+typedef struct _FatDirEntry FatDirEntry;
+
+#include "bootsector.h"
+#include "count.h"
+
+struct _FatTable {
+ void* table;
+ FatCluster size;
+ int raw_size;
+
+ FatType fat_type;
+ FatCluster cluster_count;
+ FatCluster free_cluster_count;
+ FatCluster bad_cluster_count;
+
+ FatCluster last_alloc;
+};
+typedef struct _FatTable FatTable;
+
+struct __attribute__ ((packed)) _FatDirEntry {
+ char name[8];
+ uint8_t extension[3];
+ uint8_t attributes;
+ uint8_t is_upper_case_name;
+ uint8_t creation_time_low; /* milliseconds */
+ uint16_t creation_time_high;
+ uint16_t creation_date;
+ uint16_t access_date;
+ uint16_t first_cluster_high; /* for FAT32 */
+ uint16_t time;
+ uint16_t date;
+ uint16_t first_cluster;
+ uint32_t length;
+};
+
+struct _FatSpecific {
+ FatBootSector *boot_sector; /* structure of boot sector */
+ FatInfoSector *info_sector; /* fat32-only information sector */
+
+ int logical_sector_size; /* illogical sector size :-) */
+ PedSector sector_count;
+
+ int sectors_per_track; /* BIOS CHS stuff (S) */
+ int heads; /* BIOS CHS stuff (H) */
+
+ int cluster_size;
+ PedSector cluster_sectors;
+ FatCluster cluster_count;
+ int dir_entries_per_cluster;
+
+ FatType fat_type;
+ int fat_table_count;
+ PedSector fat_sectors;
+
+ uint32_t serial_number;
+
+ PedSector info_sector_offset; /* FAT32 only */
+ PedSector fat_offset;
+ PedSector root_dir_offset; /* non-FAT32 */
+ PedSector cluster_offset;
+ PedSector boot_sector_backup_offset;
+
+ FatCluster root_cluster; /* FAT32 only */
+ int root_dir_entry_count; /* non-FAT32 */
+ PedSector root_dir_sector_count; /* non-FAT32 */
+ FatCluster total_dir_clusters;
+
+ FatTable* fat;
+ FatClusterInfo* cluster_info;
+
+ PedSector buffer_sectors;
+ char* buffer;
+
+ int frag_size;
+ PedSector frag_sectors;
+ FatFragment frag_count;
+ FatFragment buffer_frags;
+ FatFragment cluster_frags;
+};
+
+#define FAT_SPECIFIC(fs) ((FatSpecific*) fs->type_specific)
+
+#define FAT_ROOT 0
+
+#define DELETED_FLAG 0xe5
+
+#define READONLY_ATTR 0x01
+#define HIDDEN_ATTR 0x02
+#define SYSTEM_ATTR 0x04
+#define VOLUME_LABEL_ATTR 0x08
+#define VFAT_ATTR 0x0f
+#define DIRECTORY_ATTR 0x10
+#define ARCH_ATTR 0x20
+
+#define MAX_FAT12_CLUSTERS 4086
+#define MAX_FAT16_CLUSTERS 65526
+#define MAX_FAT32_CLUSTERS 2000000
+
+#define FAT_ROOT_DIR_ENTRY_COUNT 512
+
+extern PedFileSystemType fat16_type;
+extern PedFileSystemType fat32_type;
+
+extern void fat_print (const PedFileSystem* fs);
+
+extern PedFileSystem* fat_alloc (const PedGeometry* geom);
+extern void fat_free (PedFileSystem* fs);
+extern int fat_alloc_buffers (PedFileSystem* fs);
+
+extern int fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer);
+
+#endif /* FAT_H_INCLUDED */
diff --git a/libparted/fs/fsresize.sym b/libparted/fs/fsresize.sym
new file mode 100644
index 0000000..86829d1
--- /dev/null
+++ b/libparted/fs/fsresize.sym
@@ -0,0 +1,13 @@
+# This is an LD linker script.
+# Expose only the functions named below.
+
+LIBPARTED_FS_RESIZE_0.0.0 {
+ global:
+ ped_file_system_close;
+ ped_file_system_get_resize_constraint;
+ ped_file_system_open;
+ ped_file_system_resize;
+
+ local:
+ *;
+};
diff --git a/libparted/fs/hfs/DOC b/libparted/fs/hfs/DOC
new file mode 100644
index 0000000..9ee8b4d
--- /dev/null
+++ b/libparted/fs/hfs/DOC
@@ -0,0 +1,92 @@
+WARNING : Both HFS and HFS+ implementations of Linux 2.4 are buggy, at
+least when used before or after this implementation. Some workarounds
+are used in this implementation, but there can still be incompatibilities.
+Try Linux 2.6 if you want to play with HFS(+) resizing (though some bugs
+might also be there in 2.6, there is of course no warranty)
+
+---
+
+ Technical doc about Apple HFS and HFS+ file systems is available at :
+ * For HFS, section "Data Organization on Volumes",
+ "Chapter 2 - File Manager"
+ of the book "Inside Macintosh: Files"
+ http://developer.apple.com/documentation/mac/Files/Files-99.html
+ * For HFS+, "Technical Note TN1150", "HFS Plus Volume Format"
+ http://developer.apple.com/technotes/tn/tn1150.html
+
+ Some useful HFS precisions concerning alignement, bit ordering, and
+ order of fields for extent key comparaisons are only in the HFS+ TN
+
+ These Apple Creator Codes are reserved for us :
+ Shnk traP GP16 GnuP PH+x Xpnd Resz GP17 GP18 GP19 GP20
+
+---
+
+* Cache design *
+
+Versions before HFS Patch 15 were very slow when data relocation was needed,
+because every extent to relocate involved scanning the whole file system,
+looking for a reference to its physical position on the volume (this was a
+dummy algorithm, I know :)
+
+HFS Patch 16 introduced a cache that allows to efficiently retrieve the place
+of the reference in the file system given the physical position of an extent.
+The cache is designed for : - efficiency
+ - scaling
+ - simplicity
+ - avoiding memory allocation while resizing
+
+This cache involves quite big worst case memory consumption, but without it
+the time needed to complete the operation in the worst case would be huge
+anyway (maybe several years...) so this isn't really an issue. The cache size
+is nearly proportional to the number of files you have, or if you have very few
+files, to the size of your volume, so worst cases situations occure when you
+fill a drive with millions of < 4 ko files :p For this very special usage you
+will just need a very special amount of RAM (on typical systems about
+(FS size) / 256 )... On a more "normal" volume it's about
+(# of files) * 20 bytes. With very few files it's about (FS Size) / 1024 / 256.
+
+At the beginning of the resize process, the cache is filed by scanning the FS.
+The position of each extent is cut into 2 parts : high order is used as
+an index into a table of pointer to a linked list which contains :
+- the next ptr (sizeof struct *)
+- the extent start (4 bytes)
+- the extent size (4 bytes)
+- number of BTree block or 0 if in prim (4 bytes)
+- offset of the extent start reference
+ from the block beginning (2 bytes)
+- sectors by BTree block, or
+ 1 for VH/MDB (1 byte)
+- FS special file / primary structure
+ where the extent reference is stored (1 byte)
+ (3 bits for the extent index, 5 for
+ the actual ref)
+
+ 0 : dont exists --- reserved
+ 1 : mdb / vh : catalog ---
+ 2 : mdb / vh : extent ---
+ 3 : vh : attributes X+-
+ 4 : vh : allocation X+-
+ 5 : vh : startup X+-
+ 6 : catalog ---
+ 7 : attributes X+-
+ 8 : extent (nothing to update) ---
+ 9 : extent (update catalog) ---
+ 10 : extent (update extent !?!) --- should not exist
+ 11 : extent (update attributes) X+-
+ 12 : extent (update allocation) X+-
+ 13 : extent (update startup) X+- reserved
+ 14 : vh : journal info block X+J
+ 15 : jib: journal X+J
+ 16 - 31 : ---
+
+mdb : Master Directory Block
+vh : Volume Header
+X+ : HFSX or HFS+ only
+J : Journaled only
+
+Large amount of memory is allocated at once (first enough memory to fit
+every files if there isn't any fragmentation +6.25%, then this value / 4,
+if this wasn't enough). On a typical FS, the first allocation should be enough.
+
+---
diff --git a/libparted/fs/hfs/HISTORY b/libparted/fs/hfs/HISTORY
new file mode 100644
index 0000000..5e138a6
--- /dev/null
+++ b/libparted/fs/hfs/HISTORY
@@ -0,0 +1,115 @@
+## modifications dd-mm-yyyy
+---------------------- PATCH FOR PARTED 1.6.5 ----------------------------
+ 1 initial revision 07-04-2003
+ 2 one pass resizing, removal of debug info 08-04-2003
+ 3 safe abort if resize failed, code cleanups, timer, 10-04-2003
+ source file split, won't resize if not unmounted,
+ only relocate data if needed, minimize disk operations
+ 4 memory leaks removal, code cleanups, resize hfs+ code, 17-04-2003
+ more checks, minor hfs resize bugfix, probe code
+ returns real geometry
+ 5 hfs+ resize bugfixes : 19-04-2003
+ * fragmented fs could be corrupted
+ * VH wasn't written on error during alloc map writing
+ * attributes file could be corrupted
+ 6 Use PedSector to be able to use 2To+ HD 23-04-2003
+ Minor probe bugfix, Cleanups, HFS+ Timer tuning,
+ 7 80 columns indentation 23-04-2003
+ 8 Bugfix free blocks calculation in wrapper
+ (makes Mac OS boot !) 28-04-2003
+---------------------- PATCH FOR PARTED 1.6.6 ----------------------------
+ 9 Don't destroy the file being worked on in case of
+ interruption of Parted 28-10-2003
+---------------------- PATCH FOR PARTED 1.6.10 ---------------------------
+10 Regression tests, URL correction, In effect_move_extent :
+ corrected memory leak & corrected a bug in precondition checks
+ Added error messages, Check ped_alloc results
+ Use macro for test / set / clear in the allocation bitmap
+ Light probe correction, Check return value of get_empty_end
+ Moved dynamic memory allocation out of effect_move_extent
+ Check HFS+ version, Set implementation creator code
+ Check journal absence, Corrected a bug in HFS+ block number
+ calculation 24-04-2004
+--------------------- PATCH FOR PARTED 1.6.11 ----------------------------
+11-Some pointer dereference moved after non nul assertion
+ -Error messages for HFS(+) file IO
+ -Memory leak correction in hfs(plus)_read_bad_blocks
+ -Mark out of volume blocks as used
+ (improve compatibility with broken HFS+ Linux
+ implementation)
+ WARNING : this fix is not 100% tn1150 compatible :
+ "The allocation file may be larger than the minimum
+ number of bits required for the given volume size.
+ Any unused bits in the bitmap must be set to _zero_."
+ Anyway neither is the Linux implementation, nor was my
+ previous implementations
+ Maybe I should ask Apple to change the specifications
+ -HISTORY, DOC and TODO files 29-04-2004
+12 Corrected a bug in hfsplus_volume_resize : size of alloc
+ bitmap could be miscalculated 29-04-2004
+--------------------- PATCH FOR PARTED 1.6.12 ----------------------------
+13-Finally partial rewrite of *_search_move_*
+ Easier to maintain and prepare for extent search and
+ relocation algorithm changes for better ones.
+ -"An extent has not been relocated!" message now only when
+ relocation requested
+ -Slightly better and simpler relocation algorithm
+ -Update of Makefile.in and Makefile.am in fs_hfs
+ -Sign correction for some 8bits HFS integers
+ -Added the option --enable-hfs-extract-fs in 'configure'
+ -Added every ped_geometry_sync where needed
+ -Bugfix : "A root node does not need to exist
+ (if the tree is empty)."
+ - now handled correctly in btree_search
+ -Bugfix : failure wasn't detected in some cases
+ during 2 pass relocation (*_search_move_*)
+ -Bugfix : The extent key comparaison was done in a wrong order
+ and a pad field was used during the comparaison
+ -Bugfix : in hfs_file_find_sector and hfsplus_file_find_sector
+ the absolute position of a file sector could be
+ miscalculated in case of fragmentation, resulting
+ in potential data corruption, or various errors
+ -Bugfix : The end of the HFS bitmap compatibility block was
+ miscalculated ( (1<<16)/8 instead of (1<<16) )
+ in hfs_resize
+ 07-09-2004
+--------------------- PATCH FOR PARTED 1.6.14 ----------------------------
+14 Port of Patch 13 for Parted 1.6.14 (update timestamps)
+ 08-09-2004
+--------------------- PATCH FOR PARTED 1.6.15 ----------------------------
+15-hfsplus_open : added a warning message if the "attributes"
+ special file exists
+ -hfsplus_open : added a test to check if the "allocation"
+ special file has been correctly opened
+ -optimisation of hfs+ block access : don't recalculate
+ the address of each sector, and avoid checking the cache if
+ obviously not useful
+ ( hfsplus_file_read && hfsplus_file_write
+ && hfsplus_file_find_extent && hfs_file_find_sector)
+ -cut the "hfs.c" file in several parts
+ -Bugfix: in hfsplus_do_move_primary, hfs_effect_move_extent
+ was called instead of hfsplus_effect_move_extent !!!
+ This could not produce data corruption, because of a welcome
+ ASSERT in *_effect_move_extent that would detect the bug :)
+ -Bugfix: in hfs_effect_move_extent, do
+ PED_ASSERT(*ptr_to_fblock <= *ptr_fblock, return -1);
+ instead of
+ PED_ASSERT(*ptr_to_fblock < *ptr_fblock, return -1);
+ and added that assertion to hfsplus_effect_move_extent
+ -Bugfix: bugs introduced in rewrite of hfsplus_file_read
+ && hfsplus_file_write : last sector was incorrectly detected
+ as out of file.
+ -Cache the extent references (speed improvement ?)
+ 23-09-2004
+16-Bugfix: in hfsplus_do_move (reloc_plus.c), case CR_BTREE_EXT_ATTR
+ incorrectly updated the cached part of priv_data->catalog_file
+ instead of priv_data->attributes_file
+ -Bugfix: in hfs_read_bad_blocks && hfsplus_read_bad_blocks,
+ now generate an error if file_ID or type mismatch after the
+ first pass
+ Also check return value of ped_malloc
+ -Bugfix: in hfsplus_btree_search, check return value of ped_malloc
+ 29-09-2004
+---------------- INTEGRATION IN PARTED 1.6.22 (cvs) ----------------------
+Futur changes will be described in ../../ChangeLog
+ 02-02-2005
diff --git a/libparted/fs/hfs/TODO b/libparted/fs/hfs/TODO
new file mode 100644
index 0000000..6e408e3
--- /dev/null
+++ b/libparted/fs/hfs/TODO
@@ -0,0 +1,27 @@
+--- TODO ---
+
+ * Continue to write regressions tests and try on 2.6 kernel -- (high)
+ * Fix timer progression calculation, according to the new
+ caching code -- (high)
+ * write doc, website, ... -- (high)
+ * Check block allocation in linux 2.4 and remove
+ compatibility code if possible -- (high)
+
+ * In hfs(plus)_btree_search , use a static variable to detect
+ illegal recursion and abort in that case. (find the right
+ number of recursion before reporting bug) -- easy -- (medium)
+ * Finish the HFS Extractor -- (medium)
+ (add mdb & vh extraction, and maybe journal)
+
+ * Write code to allow enlarging and moving HFS[+x] -- (low)
+ * Use a bitmap to internaly store the bad blocks -- (low)
+ * Less bitmap saves ? -- (low)
+ * Continue to change the relocation algorithm
+ for a better one :) -- (low)
+
+--- NOT todo ---
+
+ * debug HFS(+) Linux implementation (block allocation for HFS+,
+ hard and sym links for HFS+, filename length for HFS, ...) -- (dont)
+ /// Linux 2.6 contains HFS(+) implementations with less bugs
+ /// Linux 2.4 should not be used anymore to access HFS(+)
diff --git a/libparted/fs/hfs/hfs.c b/libparted/fs/hfs/hfs.c
new file mode 100644
index 0000000..3684646
--- /dev/null
+++ b/libparted/fs/hfs/hfs.c
@@ -0,0 +1,92 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2003-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ Author : Guillaume Knispel <k_guillaume@libertysurf.fr>
+ Report bug to <bug-parted@gnu.org>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "probe.h"
+
+uint8_t* hfs_block = NULL;
+uint8_t* hfsp_block = NULL;
+unsigned hfs_block_count;
+unsigned hfsp_block_count;
+
+static PedFileSystemOps hfs_ops = {
+ probe: hfs_probe,
+};
+
+static PedFileSystemOps hfsplus_ops = {
+ probe: hfsplus_probe,
+};
+
+static PedFileSystemOps hfsx_ops = {
+ probe: hfsx_probe,
+};
+
+
+static PedFileSystemType hfs_type = {
+ next: NULL,
+ ops: &hfs_ops,
+ name: "hfs",
+};
+
+static PedFileSystemType hfsplus_type = {
+ next: NULL,
+ ops: &hfsplus_ops,
+ name: "hfs+",
+};
+
+static PedFileSystemType hfsx_type = {
+ next: NULL,
+ ops: &hfsx_ops,
+ name: "hfsx",
+};
+
+void
+ped_file_system_hfs_init ()
+{
+ ped_file_system_type_register (&hfs_type);
+ ped_file_system_type_register (&hfsplus_type);
+ ped_file_system_type_register (&hfsx_type);
+}
+
+void
+ped_file_system_hfs_done ()
+{
+ ped_file_system_type_unregister (&hfs_type);
+ ped_file_system_type_unregister (&hfsplus_type);
+ ped_file_system_type_unregister (&hfsx_type);
+}
diff --git a/libparted/fs/hfs/hfs.h b/libparted/fs/hfs/hfs.h
new file mode 100644
index 0000000..5b9138c
--- /dev/null
+++ b/libparted/fs/hfs/hfs.h
@@ -0,0 +1,648 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2003-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _HFS_H
+#define _HFS_H
+
+/* WARNING : bn is used 2 times in theses macro */
+/* so _never_ use side effect operators when using them */
+#define TST_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) & (1<<(7-((bn)&7))))
+#define SET_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) |= (1<<(7-((bn)&7))))
+#define CLR_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) &= ~(1<<(7-((bn)&7))))
+
+/* Maximum number of blocks for the copy buffers */
+#define BLOCK_MAX_BUFF 256
+/* Maximum size of the copy buffers, in bytes */
+#define BYTES_MAX_BUFF 8388608
+
+/* Apple Creator Codes follow */
+#define HFSP_IMPL_Shnk 0x53686e6b /* in use */
+#define HFSP_IMPL_Xpnd 0x58706e64 /* reserved */
+#define HFSP_IMPL_Resz 0x5265737a /* reserved */
+#define HFSP_IMPL_PHpx 0x50482b78 /* reserved */
+#define HFSP_IMPL_traP 0x74726150 /* reserved */
+#define HFSP_IMPL_GnuP 0x476e7550 /* reserved */
+
+#define HFS_SIGNATURE 0x4244 /* 'BD' */
+#define HFSP_SIGNATURE 0x482B /* 'H+' */
+#define HFSX_SIGNATURE 0x4858 /* 'HX' */
+
+#define HFSP_VERSION 4
+#define HFSX_VERSION 5
+
+#define HFS_HARD_LOCK 7
+#define HFS_UNMOUNTED 8
+#define HFS_BAD_SPARED 9
+#define HFS_SOFT_LOCK 15
+#define HFSP_NO_CACHE 10
+#define HFSP_INCONSISTENT 11
+#define HFSP_REUSE_CNID 12
+#define HFSP_JOURNALED 13
+
+#define HFS_IDX_NODE 0x00
+#define HFS_HDR_NODE 0x01
+#define HFS_MAP_NODE 0x02
+#define HFS_LEAF_NODE 0xFF
+
+#define HFS_FIRST_REC 0x0E
+#define HFS_NSD_HD_REC 0x78
+#define HFS_MAP_REC 0xF8
+
+#define HFS_DATA_FORK 0x00
+#define HFS_RES_FORK 0xFF
+
+#define HFS_CAT_DIR 0x01
+#define HFS_CAT_FILE 0x02
+#define HFS_CAT_DIR_TH 0x03
+#define HFS_CAT_FILE_TH 0x04
+
+#define HFSP_ATTR_INLINE 0x10
+#define HFSP_ATTR_FORK 0x20
+#define HFSP_ATTR_EXTENTS 0x30
+
+#define HFS_ROOT_PAR_ID 0x01
+#define HFS_ROOT_DIR_ID 0x02
+#define HFS_XTENT_ID 0x03
+#define HFS_CATALOG_ID 0x04
+#define HFS_BAD_BLOCK_ID 0x05
+#define HFSP_ALLOC_ID 0x06
+#define HFSP_STARTUP_ID 0x07
+#define HFSP_ATTRIB_ID 0x08
+#define HFSP_BOGUS_ID 0x0F
+#define HFSP_FIRST_AV_ID 0x10
+
+#define HFSJ_JOURN_IN_FS 0x00
+#define HFSJ_JOURN_OTHER_DEV 0x01
+#define HFSJ_JOURN_NEED_INIT 0x02
+
+#define HFSJ_HEADER_MAGIC 0x4a4e4c78
+#define HFSJ_ENDIAN_MAGIC 0x12345678
+
+#define HFSX_CASE_FOLDING 0xCF /* case insensitive HFSX */
+#define HFSX_BINARY_COMPARE 0xBC /* case sensitive HFSX */
+
+#define HFS_EXT_NB 3
+#define HFSP_EXT_NB 8
+
+/* Define the filenames used by the FS extractor */
+#ifdef HFS_EXTRACT_FS
+
+#define HFS_MDB_FILENAME "mdb.hfs"
+#define HFS_CATALOG_FILENAME "catalog.hfs"
+#define HFS_EXTENTS_FILENAME "extents.hfs"
+#define HFS_BITMAP_FILENAME "bitmap.hfs"
+
+#define HFSP_VH_FILENAME "vh.hfsplus"
+#define HFSP_CATALOG_FILENAME "catalog.hfsplus"
+#define HFSP_EXTENTS_FILENAME "extents.hfsplus"
+#define HFSP_BITMAP_FILENAME "bitmap.hfsplus"
+#define HFSP_ATTRIB_FILENAME "attributes.hfsplus"
+#define HFSP_STARTUP_FILENAME "startup.hfsplus"
+
+#endif /* HFS_EXTRACT_FS */
+
+
+
+/* ----------------------------------- */
+/* -- HFS DATA STRUCTURES -- */
+/* ----------------------------------- */
+
+/* Extent descriptor */
+struct __attribute__ ((packed)) _HfsExtDescriptor {
+ uint16_t start_block;
+ uint16_t block_count;
+};
+typedef struct _HfsExtDescriptor HfsExtDescriptor;
+typedef HfsExtDescriptor HfsExtDataRec[HFS_EXT_NB];
+
+/* Volume header */
+struct __attribute__ ((packed)) _HfsMasterDirectoryBlock {
+ uint16_t signature;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint16_t volume_attributes;
+ uint16_t files_in_root;
+ uint16_t volume_bitmap_block; /* in sectors */
+ uint16_t next_allocation;
+ uint16_t total_blocks;
+ uint32_t block_size; /* in bytes */
+ uint32_t def_clump_size; /* in bytes */
+ uint16_t start_block; /* in sectors */
+ uint32_t next_free_node;
+ uint16_t free_blocks;
+ uint8_t name_length;
+ char name[27];
+ uint32_t backup_date;
+ uint16_t backup_number;
+ uint32_t write_count;
+ uint32_t extents_clump;
+ uint32_t catalog_clump;
+ uint16_t dirs_in_root;
+ uint32_t file_count;
+ uint32_t dir_count;
+ uint32_t finder_info[8];
+ union __attribute__ ((packed)) {
+ struct __attribute__ ((packed)) {
+ uint16_t volume_cache_size; /* in blocks */
+ uint16_t bitmap_cache_size; /* in blocks */
+ uint16_t common_cache_size; /* in blocks */
+ } legacy;
+ struct __attribute__ ((packed)) {
+ uint16_t signature;
+ HfsExtDescriptor location;
+ } embedded;
+ } old_new;
+ uint32_t extents_file_size; /* in bytes, block size multiple */
+ HfsExtDataRec extents_file_rec;
+ uint32_t catalog_file_size; /* in bytes, block size multiple */
+ HfsExtDataRec catalog_file_rec;
+};
+typedef struct _HfsMasterDirectoryBlock HfsMasterDirectoryBlock;
+
+/* B*-Tree Node Descriptor */
+struct __attribute__ ((packed)) _HfsNodeDescriptor {
+ uint32_t next;
+ uint32_t previous;
+ int8_t type;
+ uint8_t height;
+ uint16_t rec_nb;
+ uint16_t reserved;
+};
+typedef struct _HfsNodeDescriptor HfsNodeDescriptor;
+
+/* Header record of a whole B*-Tree */
+struct __attribute__ ((packed)) _HfsHeaderRecord {
+ uint16_t depth;
+ uint32_t root_node;
+ uint32_t leaf_records;
+ uint32_t first_leaf_node;
+ uint32_t last_leaf_node;
+ uint16_t node_size;
+ uint16_t max_key_len;
+ uint32_t total_nodes;
+ uint32_t free_nodes;
+ int8_t reserved[76];
+};
+typedef struct _HfsHeaderRecord HfsHeaderRecord;
+
+/* Catalog key for B*-Tree lookup in the catalog file */
+struct __attribute__ ((packed)) _HfsCatalogKey {
+ uint8_t key_length; /* length of the key without key_length */
+ uint8_t reserved;
+ uint32_t parent_ID;
+ uint8_t name_length;
+ char name[31]; /* in fact physicaly 1 upto 31 */
+};
+typedef struct _HfsCatalogKey HfsCatalogKey;
+
+/* Extents overflow key for B*-Tree lookup */
+struct __attribute__ ((packed)) _HfsExtentKey {
+ uint8_t key_length; /* length of the key without key_length */
+ uint8_t type; /* data or ressource fork */
+ uint32_t file_ID;
+ uint16_t start;
+};
+typedef struct _HfsExtentKey HfsExtentKey;
+
+/* Catalog subdata case directory */
+struct __attribute__ ((packed)) _HfsDir {
+ uint16_t flags;
+ uint16_t valence; /* number of files in this directory */
+ uint32_t dir_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ int8_t DInfo[16]; /* used by Finder, handle as reserved */
+ int8_t DXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t reserved[4];
+};
+typedef struct _HfsDir HfsDir;
+
+/* Catalog subdata case file */
+struct __attribute__ ((packed)) _HfsFile {
+ int8_t flags;
+ int8_t type; /* should be 0 */
+ int8_t FInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t file_ID;
+ uint16_t data_start_block;
+ uint32_t data_sz_byte;
+ uint32_t data_sz_block;
+ uint16_t res_start_block;
+ uint32_t res_sz_byte;
+ uint32_t res_sz_block;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ int8_t FXInfo[16]; /* used by Finder, handle as reserved */
+ uint16_t clump_size;
+ HfsExtDataRec extents_data;
+ HfsExtDataRec extents_res;
+ uint32_t reserved;
+};
+typedef struct _HfsFile HfsFile;
+
+/* Catalog subdata case directory thread */
+struct __attribute__ ((packed)) _HfsDirTh {
+ uint32_t reserved[2];
+ uint32_t parent_ID;
+ int8_t name_length;
+ char name[31];
+};
+typedef struct _HfsDirTh HfsDirTh;
+
+/* Catalog subdata case file thread */
+typedef struct _HfsDirTh HfsFileTh; /* same as directory thread */
+
+/* Catalog data */
+struct __attribute__ ((packed)) _HfsCatalog {
+ int8_t type;
+ int8_t reserved;
+ union {
+ HfsDir dir;
+ HfsFile file;
+ HfsDirTh dir_th;
+ HfsFileTh file_th;
+ } sel;
+};
+typedef struct _HfsCatalog HfsCatalog;
+
+
+
+/* ------------------------------------ */
+/* -- HFS+ DATA STRUCTURES -- */
+/* ------------------------------------ */
+
+/* documented since 2004 in tn1150 */
+struct __attribute__ ((packed)) _HfsPPerms {
+ uint32_t owner_ID;
+ uint32_t group_ID;
+ uint32_t permissions;
+ uint32_t special_devices;
+};
+typedef struct _HfsPPerms HfsPPerms;
+
+/* HFS+ extent descriptor*/
+struct __attribute__ ((packed)) _HfsPExtDescriptor {
+ uint32_t start_block;
+ uint32_t block_count;
+};
+typedef struct _HfsPExtDescriptor HfsPExtDescriptor;
+typedef HfsPExtDescriptor HfsPExtDataRec[HFSP_EXT_NB];
+
+/* HFS+ fork data structure */
+struct __attribute__ ((packed)) _HfsPForkData {
+ uint64_t logical_size;
+ uint32_t clump_size;
+ uint32_t total_blocks;
+ HfsPExtDataRec extents;
+};
+typedef struct _HfsPForkData HfsPForkData;
+
+/* HFS+ catalog node ID */
+typedef uint32_t HfsPNodeID;
+
+/* HFS+ file names */
+typedef uint16_t unichar;
+struct __attribute__ ((packed)) _HfsPUniStr255 {
+ uint16_t length;
+ unichar unicode[255]; /* 1 upto 255 */
+};
+typedef struct _HfsPUniStr255 HfsPUniStr255;
+
+/* HFS+ volume header */
+struct __attribute__ ((packed)) _HfsPVolumeHeader {
+ uint16_t signature;
+ uint16_t version;
+ uint32_t attributes;
+ uint32_t last_mounted_version;
+ uint32_t journal_info_block;
+
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ uint32_t checked_date;
+
+ uint32_t file_count;
+ uint32_t dir_count;
+
+ uint32_t block_size;
+ uint32_t total_blocks;
+ uint32_t free_blocks;
+
+ uint32_t next_allocation;
+ uint32_t res_clump_size;
+ uint32_t data_clump_size;
+ HfsPNodeID next_catalog_ID;
+
+ uint32_t write_count;
+ uint64_t encodings_bitmap;
+
+ uint8_t finder_info[32];
+
+ HfsPForkData allocation_file;
+ HfsPForkData extents_file;
+ HfsPForkData catalog_file;
+ HfsPForkData attributes_file;
+ HfsPForkData startup_file;
+};
+typedef struct _HfsPVolumeHeader HfsPVolumeHeader;
+
+/* HFS+ B-Tree Node Descriptor. Same as HFS btree. */
+struct __attribute__ ((packed)) _HfsPNodeDescriptor {
+ uint32_t next;
+ uint32_t previous;
+ int8_t type;
+ uint8_t height;
+ uint16_t rec_nb;
+ uint16_t reserved;
+};
+typedef struct _HfsPNodeDescriptor HfsPNodeDescriptor;
+
+/* Header record of a whole HFS+ B-Tree. */
+struct __attribute__ ((packed)) _HfsPHeaderRecord {
+ uint16_t depth;
+ uint32_t root_node;
+ uint32_t leaf_records;
+ uint32_t first_leaf_node;
+ uint32_t last_leaf_node;
+ uint16_t node_size;
+ uint16_t max_key_len;
+ uint32_t total_nodes;
+ uint32_t free_nodes; /* same as hfs btree until here */
+ uint16_t reserved1;
+
+ uint32_t clump_size;
+ uint8_t btree_type; /* must be 0 for HFS+ B-Tree */
+ uint8_t key_compare_type; /* hfsx => 0xCF = case folding */
+ /* 0xBC = binary compare */
+ /* otherwise, reserved */
+ uint32_t attributes;
+ uint32_t reserved3[16];
+};
+typedef struct _HfsPHeaderRecord HfsPHeaderRecord;
+
+/* Catalog key for B-Tree lookup in the HFS+ catalog file */
+struct __attribute__ ((packed)) _HfsPCatalogKey {
+ uint16_t key_length;
+ HfsPNodeID parent_ID;
+ HfsPUniStr255 node_name;
+};
+typedef struct _HfsPCatalogKey HfsPCatalogKey;
+
+/* HFS+ catalog subdata case dir */
+struct __attribute__ ((packed)) _HfsPDir {
+ uint16_t flags;
+ uint32_t valence;
+ HfsPNodeID dir_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t attrib_mod_date;
+ uint32_t access_date;
+ uint32_t backup_date;
+ HfsPPerms permissions;
+ int8_t DInfo[16]; /* used by Finder, handle as reserved */
+ int8_t DXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t text_encoding;
+ uint32_t reserved;
+};
+typedef struct _HfsPDir HfsPDir;
+
+/* HFS+ catalog subdata case file */
+struct __attribute__ ((packed)) _HfsPFile {
+ uint16_t flags;
+ uint32_t reserved1;
+ HfsPNodeID file_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t attrib_mod_date;
+ uint32_t access_date;
+ uint32_t backup_date;
+ HfsPPerms permissions;
+ int8_t FInfo[16]; /* used by Finder, handle as reserved */
+ int8_t FXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t text_encoding;
+ uint32_t reserved2;
+
+ HfsPForkData data_fork;
+ HfsPForkData res_fork;
+};
+typedef struct _HfsPFile HfsPFile;
+
+/* HFS+ catalog subdata case thread */
+struct __attribute__ ((packed)) _HfsPThread {
+ int16_t reserved;
+ HfsPNodeID parent_ID;
+ HfsPUniStr255 node_name;
+};
+typedef struct _HfsPThread HfsPDirTh;
+typedef struct _HfsPThread HfsPFileTh;
+
+/* HFS+ Catalog leaf data */
+struct __attribute__ ((packed)) _HfsPCatalog {
+ int16_t type;
+ union {
+ HfsPDir dir;
+ HfsPFile file;
+ HfsPDirTh dir_th;
+ HfsPFileTh file_th;
+ } sel;
+};
+typedef struct _HfsPCatalog HfsPCatalog;
+
+/* HFS+ extents file key */
+struct __attribute__ ((packed)) _HfsPExtentKey {
+ uint16_t key_length;
+ uint8_t type;
+ uint8_t pad;
+ HfsPNodeID file_ID;
+ uint32_t start;
+};
+typedef struct _HfsPExtentKey HfsPExtentKey;
+
+/* extent file data is HfsPExtDataRec */
+
+/* Fork data attribute file */
+struct __attribute__ ((packed)) _HfsPForkDataAttr {
+ uint32_t record_type;
+ uint32_t reserved;
+ union __attribute__ ((packed)) {
+ HfsPForkData fork;
+ HfsPExtDataRec extents;
+ } fork_res;
+};
+typedef struct _HfsPForkDataAttr HfsPForkDataAttr;
+
+
+/* ----------- Journal data structures ----------- */
+
+/* Info block : stored in a block # defined in the VH */
+struct __attribute__ ((packed)) _HfsJJournalInfoBlock {
+ uint32_t flags;
+ uint32_t device_signature[8];
+ uint64_t offset;
+ uint64_t size;
+ uint32_t reserved[32];
+};
+typedef struct _HfsJJournalInfoBlock HfsJJournalInfoBlock;
+
+struct __attribute__ ((packed)) _HfsJJournalHeader {
+ uint32_t magic;
+ uint32_t endian;
+ uint64_t start;
+ uint64_t end;
+ uint64_t size;
+ uint32_t blhdr_size;
+ uint32_t checksum;
+ uint32_t jhdr_size;
+};
+typedef struct _HfsJJournalHeader HfsJJournalHeader;
+
+struct __attribute__ ((packed)) _HfsJBlockInfo {
+ uint64_t bnum; /* sector number */
+ uint32_t bsize; /* size in bytes */
+ uint32_t next;
+};
+typedef struct _HfsJBlockInfo HfsJBlockInfo;
+
+struct __attribute__ ((packed)) _HfsJBlockListHeader {
+ uint16_t max_blocks; /* reserved */
+ uint16_t num_blocks;
+ uint32_t bytes_used;
+ uint32_t checksum;
+ uint32_t pad;
+ HfsJBlockInfo binfo[];
+};
+typedef struct _HfsJBlockListHeader HfsJBlockListHeader;
+
+
+
+/* ---------------------------------------- */
+/* -- INTERNAL DATA STRUCTURES -- */
+/* ---------------------------------------- */
+
+/* Data of an opened HFS file */
+struct _HfsPrivateFile {
+ PedSector sect_nb;
+ PedFileSystem* fs;
+ uint32_t CNID; /* disk order (BE) */
+ HfsExtDataRec first; /* disk order (BE) */
+ HfsExtDataRec cache; /* disk order (BE) */
+ uint16_t start_cache; /* CPU order */
+};
+typedef struct _HfsPrivateFile HfsPrivateFile;
+
+/* To store bad block list */
+struct _HfsPrivateLinkExtent {
+ HfsExtDescriptor extent;
+ struct _HfsPrivateLinkExtent* next;
+};
+typedef struct _HfsPrivateLinkExtent HfsPrivateLinkExtent;
+
+/* HFS Filesystem specific data */
+struct _HfsPrivateFSData {
+ uint8_t alloc_map[(1<<16) / 8];
+ HfsMasterDirectoryBlock* mdb;
+ HfsPrivateFile* extent_file;
+ HfsPrivateFile* catalog_file;
+ HfsPrivateLinkExtent* bad_blocks_xtent_list;
+ unsigned int bad_blocks_xtent_nb;
+ char bad_blocks_loaded;
+};
+typedef struct _HfsPrivateFSData HfsPrivateFSData;
+
+/* Generic btree key */
+struct __attribute__ ((packed)) _HfsPrivateGenericKey {
+ uint8_t key_length;
+ uint8_t key_content[1]; /* we use 1 as a minimum size */
+};
+typedef struct _HfsPrivateGenericKey HfsPrivateGenericKey;
+
+/* ----- HFS+ ----- */
+
+/* Data of an opened HFS file */
+struct _HfsPPrivateFile {
+ PedSector sect_nb;
+ PedFileSystem* fs;
+ HfsPNodeID CNID; /* disk order (BE) */
+ HfsPExtDataRec first; /* disk order (BE) */
+ HfsPExtDataRec cache; /* disk order (BE) */
+ uint32_t start_cache; /* CPU order */
+};
+typedef struct _HfsPPrivateFile HfsPPrivateFile;
+
+struct _HfsPPrivateExtent {
+ PedSector start_sector;
+ PedSector sector_count;
+};
+typedef struct _HfsPPrivateExtent HfsPPrivateExtent;
+
+/* To store bad block list */
+struct _HfsPPrivateLinkExtent {
+ HfsPExtDescriptor extent;
+ struct _HfsPPrivateLinkExtent* next;
+};
+typedef struct _HfsPPrivateLinkExtent HfsPPrivateLinkExtent;
+
+/* HFS+ file system specific data */
+struct _HfsPPrivateFSData {
+ PedFileSystem* wrapper; /* NULL if hfs+ is not embedded */
+ PedGeometry* plus_geom; /* Geometry of HFS+ _volume_ */
+ uint8_t* alloc_map;
+ uint8_t* dirty_alloc_map;
+ HfsPVolumeHeader* vh;
+ HfsPPrivateFile* extents_file;
+ HfsPPrivateFile* catalog_file;
+ HfsPPrivateFile* attributes_file;
+ HfsPPrivateFile* allocation_file;
+ HfsPPrivateLinkExtent* bad_blocks_xtent_list;
+ uint32_t jib_start_block;
+ uint32_t jl_start_block;
+ unsigned int bad_blocks_xtent_nb;
+ char bad_blocks_loaded;
+ char free_geom; /* 1 = plus_geom must be freed */
+};
+typedef struct _HfsPPrivateFSData HfsPPrivateFSData;
+
+/* Generic + btree key */
+struct __attribute__ ((packed)) _HfsPPrivateGenericKey {
+ uint16_t key_length;
+ uint8_t key_content[1]; /* we use 1 as a minimum size */
+};
+typedef struct _HfsPPrivateGenericKey HfsPPrivateGenericKey;
+
+/* ---- common ---- */
+
+/* node and lead record reference for a BTree search */
+struct _HfsCPrivateLeafRec {
+ unsigned int node_size; /* in sectors */
+ unsigned int node_number;
+ unsigned int record_pos;
+ unsigned int record_number;
+};
+typedef struct _HfsCPrivateLeafRec HfsCPrivateLeafRec;
+
+extern uint8_t* hfs_block;
+extern uint8_t* hfsp_block;
+extern unsigned hfs_block_count;
+extern unsigned hfsp_block_count;
+
+#endif /* _HFS_H */
diff --git a/libparted/fs/hfs/probe.c b/libparted/fs/hfs/probe.c
new file mode 100644
index 0000000..d02ca28
--- /dev/null
+++ b/libparted/fs/hfs/probe.c
@@ -0,0 +1,238 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+
+#include "probe.h"
+
+int
+hfsc_can_use_geom (PedGeometry* geom)
+{
+ PedDevice* dev;
+
+ dev = geom->dev;
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Parted can't use HFS file systems on disks "
+ "with a sector size not equal to %d bytes."),
+ (int)PED_SECTOR_SIZE_DEFAULT );
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Probe an HFS volume, detecting it even if
+it is in fact a wrapper to an HFS+ volume */
+/* Used by hfsplus_probe and hfs_probe */
+PedGeometry*
+hfs_and_wrapper_probe (PedGeometry* geom)
+{
+ HfsMasterDirectoryBlock *mdb;
+ PedGeometry* geom_ret;
+ PedSector search, max;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (hfsc_can_use_geom (geom));
+
+ const int sectors = ((3 * 512) + geom->dev->sector_size - 1) /
+ geom->dev->sector_size;
+ char * buf = alloca (sectors * geom->dev->sector_size);
+
+ mdb = (HfsMasterDirectoryBlock *)(buf+1024);
+
+ /* is 5 an intelligent value ? */
+ if ((geom->length < 5)
+ || (!ped_geometry_read (geom, buf, 0, sectors))
+ || (mdb->signature != PED_CPU_TO_BE16 (HFS_SIGNATURE)) )
+ return NULL;
+
+ search = ((PedSector) PED_BE16_TO_CPU (mdb->start_block)
+ + ((PedSector) PED_BE16_TO_CPU (mdb->total_blocks)
+ * (PED_BE32_TO_CPU (mdb->block_size) / geom->dev->sector_size)));
+ max = search + (PED_BE32_TO_CPU (mdb->block_size) / geom->dev->sector_size);
+ if ((search < 0)
+ || !(geom_ret = ped_geometry_new (geom->dev, geom->start, search + 2)))
+ return NULL;
+
+ for (; search < max; search++) {
+ if (!ped_geometry_set (geom_ret, geom_ret->start, search + 2)
+ || !ped_geometry_read (geom_ret, buf, search, 1))
+ break;
+ if (mdb->signature == PED_CPU_TO_BE16 (HFS_SIGNATURE))
+ return geom_ret;
+ }
+
+ ped_geometry_destroy (geom_ret);
+ return NULL;
+}
+
+PedGeometry*
+hfsplus_probe (PedGeometry* geom)
+{
+ PedGeometry* geom_ret;
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+
+ PED_ASSERT (geom != NULL);
+
+ if (!hfsc_can_use_geom (geom))
+ return NULL;
+
+ if ((geom_ret = hfs_and_wrapper_probe(geom))) {
+ /* HFS+ is embedded in an HFS volume ? */
+ HfsMasterDirectoryBlock *mdb;
+ mdb = (HfsMasterDirectoryBlock *) buf;
+
+ if (!ped_geometry_read (geom, buf, 2, 1)
+ || (mdb->old_new.embedded.signature
+ != PED_CPU_TO_BE16 (HFSP_SIGNATURE))) {
+ ped_geometry_destroy (geom_ret);
+ return NULL;
+ } else
+ return geom_ret;
+ } else {
+ /* This is a standalone HFS+ volume ? */
+ PedSector search, max;
+ HfsPVolumeHeader *vh;
+ vh = (HfsPVolumeHeader *) buf;
+
+ if ((geom->length < 5)
+ || !ped_geometry_read (geom, buf, 2, 1)
+ || (vh->signature != PED_CPU_TO_BE16 (HFSP_SIGNATURE)))
+ return NULL;
+
+ /* Correct range is indeed [ blocks*sz-2;(blocs+1)*sz-2 ( */
+ /* But previous versions of my implementation used to */
+ /* assume range is [(blocks-1)*sz-1;(blocks*sz) ( */
+ /* (blocks-1)*sz-1 has to be scanned last, because */
+ /* it can belong to a regular file */
+ max = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) + 1)
+ * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT )
+ - 2;
+ search = max - 2 * ( PED_BE32_TO_CPU (vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT ) + 2;
+ if ((search < 0)
+ || !(geom_ret = ped_geometry_new (geom->dev, geom->start,
+ search + 2)))
+ return NULL;
+
+ for (; search < max; search++) {
+ if (!ped_geometry_set (geom_ret, geom_ret->start,
+ search + 2)
+ || !ped_geometry_read (geom_ret, buf, search, 1))
+ break;
+ if (vh->signature == PED_CPU_TO_BE16 (HFSP_SIGNATURE))
+ return geom_ret;
+ }
+ search = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) - 1)
+ * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT )
+ - 1;
+ if ((search < 0)
+ || !ped_geometry_set (geom_ret, geom_ret->start,
+ search + 2)
+ || !ped_geometry_read (geom_ret, buf, search, 1)
+ || vh->signature != PED_CPU_TO_BE16 (HFSP_SIGNATURE)) {
+ ped_geometry_destroy (geom_ret);
+ return NULL;
+ } else
+ return geom_ret;
+ }
+}
+
+PedGeometry*
+hfs_probe (PedGeometry* geom)
+{
+ PedGeometry* geom_base;
+ PedGeometry* geom_plus = NULL;
+
+ PED_ASSERT (geom != NULL);
+
+ if (!hfsc_can_use_geom (geom))
+ return NULL;
+
+ if ((geom_base = hfs_and_wrapper_probe(geom))
+ && (!(geom_plus = hfsplus_probe(geom_base))))
+ return geom_base;
+ else {
+ if (geom_base) ped_geometry_destroy (geom_base);
+ if (geom_plus) ped_geometry_destroy (geom_plus);
+ return NULL;
+ }
+}
+
+PedGeometry*
+hfsx_probe (PedGeometry* geom)
+{
+ PedGeometry* geom_ret;
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ PedSector search, max;
+ HfsPVolumeHeader *vh = (HfsPVolumeHeader *) buf;
+
+ PED_ASSERT (geom != NULL);
+
+ if (!hfsc_can_use_geom (geom))
+ return NULL;
+
+ if ((geom->length < 5)
+ || !ped_geometry_read (geom, buf, 2, 1)
+ || (vh->signature != PED_CPU_TO_BE16 (HFSX_SIGNATURE)))
+ return NULL;
+
+ /* unlike the hfs+ code, which should be kept compatible
+ with my old previous implementations, we only care here
+ about legal alternate VH positions, like TN1150 describes them */
+ max = ((PedSector) PED_BE32_TO_CPU (vh->total_blocks) + 1)
+ * ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT )
+ - 2;
+ search = max - ( PED_BE32_TO_CPU (vh->block_size) / PED_SECTOR_SIZE_DEFAULT );
+ if ((search < 0)
+ || !(geom_ret = ped_geometry_new (geom->dev, geom->start,
+ search + 2)))
+ return NULL;
+ for (; search < max; search++) {
+ if (!ped_geometry_set (geom_ret, geom_ret->start,
+ search + 2)
+ || !ped_geometry_read (geom_ret, buf, search, 1))
+ break;
+ if (vh->signature == PED_CPU_TO_BE16 (HFSX_SIGNATURE))
+ return geom_ret;
+ }
+
+ ped_geometry_destroy (geom_ret);
+ return NULL;
+}
diff --git a/libparted/fs/hfs/probe.h b/libparted/fs/hfs/probe.h
new file mode 100644
index 0000000..29ce880
--- /dev/null
+++ b/libparted/fs/hfs/probe.h
@@ -0,0 +1,44 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _PROBE_H
+#define _PROBE_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfsc_can_use_geom (PedGeometry* geom);
+
+PedGeometry*
+hfs_and_wrapper_probe (PedGeometry* geom);
+
+PedGeometry*
+hfsplus_probe (PedGeometry* geom);
+
+PedGeometry*
+hfs_probe (PedGeometry* geom);
+
+PedGeometry*
+hfsx_probe (PedGeometry* geom);
+
+#endif /* _PROBE_H */
diff --git a/libparted/fs/jfs/jfs.c b/libparted/fs/jfs/jfs.c
new file mode 100644
index 0000000..f00bd9f
--- /dev/null
+++ b/libparted/fs/jfs/jfs.c
@@ -0,0 +1,80 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+#define _JFS_UTILITY
+#include "jfs_types.h"
+#include "jfs_superblock.h"
+
+#define JFS_SUPER_OFFSET 32768
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static PedGeometry*
+jfs_probe (PedGeometry* geom)
+{
+ struct superblock *sb = alloca (geom->dev->sector_size);
+
+ if (geom->length * geom->dev->sector_size < JFS_SUPER_OFFSET)
+ return NULL;
+ if (!ped_geometry_read (geom, sb, JFS_SUPER_OFFSET / geom->dev->sector_size, 1))
+ return NULL;
+
+ if (strncmp (sb->s_magic, JFS_MAGIC, 4) == 0) {
+ PedSector block_size = PED_LE32_TO_CPU (sb->s_pbsize);
+ PedSector block_count = PED_LE64_TO_CPU (sb->s_size);
+ /* apparently jfs is retarded and always claims 512 byte
+ sectors, with the block count as a multiple of that */
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count / geom->dev->sector_size);
+ } else {
+ return NULL;
+ }
+}
+
+static PedFileSystemOps jfs_ops = {
+ probe: jfs_probe,
+};
+
+static PedFileSystemType jfs_type = {
+ next: NULL,
+ ops: &jfs_ops,
+ name: "jfs",
+};
+
+void
+ped_file_system_jfs_init ()
+{
+ ped_file_system_type_register (&jfs_type);
+}
+
+void
+ped_file_system_jfs_done ()
+{
+ ped_file_system_type_unregister (&jfs_type);
+}
diff --git a/libparted/fs/jfs/jfs_superblock.h b/libparted/fs/jfs/jfs_superblock.h
new file mode 100644
index 0000000..ea13dfb
--- /dev/null
+++ b/libparted/fs/jfs/jfs_superblock.h
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) International Business Machines Corp., 2000
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+#ifndef _H_JFS_SUPERBLOCK
+#define _H_JFS_SUPERBLOCK
+/*
+ * jfs_superblock.h
+ */
+
+/*
+ * make the magic number something a human could read
+ */
+#define JFS_MAGIC "JFS1" /* Magic word: Version 1 */
+
+#define JFS_VERSION 1 /* Version number: Version 1 */
+
+#define LV_NAME_SIZE 11 /* MUST BE 11 for OS/2 boot sector */
+
+/*
+ * aggregate superblock
+ *
+ * The name superblock is too close to super_block, so the name has been
+ * changed to jfs_superblock. The utilities are still using the old name.
+ */
+#ifdef _JFS_UTILITY
+struct superblock
+#else
+struct jfs_superblock
+#endif
+{
+ char s_magic[4]; /* 4: magic number */
+ u32 s_version; /* 4: version number */
+
+ s64 s_size; /* 8: aggregate size in hardware/LVM blocks;
+ * VFS: number of blocks
+ */
+ s32 s_bsize; /* 4: aggregate block size in bytes;
+ * VFS: fragment size
+ */
+ s16 s_l2bsize; /* 2: log2 of s_bsize */
+ s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */
+ s32 s_pbsize; /* 4: hardware/LVM block size in bytes */
+ s16 s_l2pbsize; /* 2: log2 of s_pbsize */
+ s16 pad; /* 2: padding necessary for alignment */
+
+ u32 s_agsize; /* 4: allocation group size in aggr. blocks */
+
+ u32 s_flag; /* 4: aggregate attributes:
+ * see jfs_filsys.h
+ */
+ u32 s_state; /* 4: mount/unmount/recovery state:
+ * see jfs_filsys.h
+ */
+ s32 s_compress; /* 4: > 0 if data compression */
+
+ pxd_t s_ait2; /* 8: first extent of secondary
+ * aggregate inode table
+ */
+
+ pxd_t s_aim2; /* 8: first extent of secondary
+ * aggregate inode map
+ */
+ u32 s_logdev; /* 4: device address of log */
+ s32 s_logserial; /* 4: log serial number at aggregate mount */
+ pxd_t s_logpxd; /* 8: inline log extent */
+
+ pxd_t s_fsckpxd; /* 8: inline fsck work space extent */
+
+ struct timestruc_t s_time; /* 8: time last updated */
+
+ s32 s_fsckloglen; /* 4: Number of file system blocks reserved for
+ * the fsck service log.
+ * N.B. These blocks are divided among the
+ * versions kept. This is not a per
+ * version size.
+ * N.B. These blocks are included in the
+ * length field of s_fsckpxd.
+ */
+ s8 s_fscklog; /* 1: which fsck service log is most recent
+ * 0 => no service log data yet
+ * 1 => the first one
+ * 2 => the 2nd one
+ */
+ char s_fpack[11]; /* 11: file system volume name
+ * N.B. This must be 11 bytes to
+ * conform with the OS/2 BootSector
+ * requirements
+ */
+
+ /* extendfs() parameter under s_state & FM_EXTENDFS */
+ s64 s_xsize; /* 8: extendfs s_size */
+ pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */
+ pxd_t s_xlogpxd; /* 8: extendfs logpxd */
+ /* - 128 byte boundary - */
+
+ /*
+ * DFS VFS support (preliminary)
+ */
+ char s_attach; /* 1: VFS: flag: set when aggregate is attached
+ */
+ u8 rsrvd4[7]; /* 7: reserved - set to 0 */
+
+ u64 totalUsable; /* 8: VFS: total of 1K blocks which are
+ * available to "normal" (non-root) users.
+ */
+ u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for
+ * exclusive use of root. This value can be 0,
+ * and if it is then totalUsable will be equal
+ * to # of blocks in aggregate. I believe this
+ * means that minFree + totalUsable = # blocks.
+ * In that case, we don't need to store both
+ * totalUsable and minFree since we can compute
+ * one from the other. I would guess minFree
+ * would be the one we should store, and
+ * totalUsable would be the one we should
+ * compute. (Just a guess...)
+ */
+
+ u64 realFree; /* 8: VFS: # of free 1K blocks can be used by
+ * "normal" users. It may be this is something
+ * we should compute when asked for instead of
+ * storing in the superblock. I don't know how
+ * often this information is needed.
+ */
+ /*
+ * graffiti area
+ */
+};
+
+#endif /*_H_JFS_SUPERBLOCK */
diff --git a/libparted/fs/jfs/jfs_types.h b/libparted/fs/jfs/jfs_types.h
new file mode 100644
index 0000000..0366ebd
--- /dev/null
+++ b/libparted/fs/jfs/jfs_types.h
@@ -0,0 +1,527 @@
+/*
+ * Copyright (c) International Business Machines Corp., 2000
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+ * the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _H_JFS_TYPES
+#define _H_JFS_TYPES
+
+/*
+ * jfs_types.h:
+ *
+ * basic type/utility definitions
+ *
+ * note: this header file must be the 1st include file
+ * of JFS include list in all JFS .c file.
+ */
+
+#ifdef _JFS_UTILITY
+/* this is defined in asm/byteorder.h for i386, but
+ * is NOT defined in asm/byteorder.h for ppc (non-kernel).
+ * Until that is changed, we'll define it here. */
+#define __BYTEORDER_HAS_U64__
+
+#include <sys/types.h>
+//#include <asm/byteorder.h>
+typedef unsigned short UniChar;
+#else
+#include <linux/types.h>
+#include <linux/jfs_fs.h>
+#include <linux/nls.h>
+
+#ifndef _ULS_UNICHAR_DEFINED
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,3,0))
+typedef wchar_t UniChar;
+#else
+typedef unsigned short UniChar;
+#endif
+#define _ULS_UNICHAR_DEFINED
+#endif
+#endif
+/* #include "endian24.h" */
+
+/*
+ * primitive types
+ */
+#ifdef _JFS_UTILITY
+typedef int8_t s8;
+typedef uint8_t u8;
+typedef int16_t s16;
+typedef uint16_t u16;
+typedef int32_t s32;
+typedef uint32_t u32;
+typedef int64_t s64;
+typedef uint64_t u64;
+
+#ifndef _UINT_TYPES
+ /* unicode includes also define these */
+typedef u16 uint16;
+typedef u32 uint32;
+#define _UINT_TYPES
+#endif
+
+typedef s8 int8;
+typedef u8 uint8;
+typedef s16 int16;
+typedef s32 int32;
+typedef s64 int64;
+typedef u64 uint64;
+
+#endif /* _JFS_UTILITY */
+/*
+ * Holdovers from OS/2. Try to get away from using these altogether.
+ */
+typedef unsigned long ULONG;
+typedef unsigned short USHORT;
+typedef unsigned char UCHAR;
+typedef void *PVOID;
+#define MAXPATHLEN 255
+
+
+/*
+ * Almost identical to Linux's timespec, but not quite
+ */
+struct timestruc_t {
+ u32 tv_sec;
+ u32 tv_nsec;
+};
+
+/*
+ * handy
+ */
+#undef MIN
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#undef MAX
+#define MAX(a,b) (((a)>(b))?(a):(b))
+#undef ROUNDUP
+#define ROUNDUP(x, y) ( ((x) + ((y) - 1)) & ~((y) - 1) )
+
+#define LEFTMOSTONE 0x80000000
+#define HIGHORDER 0x80000000u /* high order bit on */
+#define ONES 0xffffffffu /* all bit on */
+
+typedef int boolean_t;
+#define TRUE 1
+#define FALSE 0
+
+/*
+ * logical xd (lxd)
+ */
+typedef struct {
+ unsigned len:24;
+ unsigned off1:8;
+ u32 off2;
+} lxd_t;
+
+/* lxd_t field construction */
+#define LXDlength(lxd, length32) ( (lxd)->len = length32 )
+#define LXDoffset(lxd, offset64)\
+{\
+ (lxd)->off1 = ((s64)offset64) >> 32;\
+ (lxd)->off2 = (offset64) & 0xffffffff;\
+}
+
+/* lxd_t field extraction */
+#define lengthLXD(lxd) ( (lxd)->len )
+#define offsetLXD(lxd)\
+ ( ((s64)((lxd)->off1)) << 32 | (lxd)->off2 )
+
+/* lxd list */
+typedef struct {
+ s16 maxnlxd;
+ s16 nlxd;
+ lxd_t *lxd;
+} lxdlist_t;
+
+/*
+ * physical xd (pxd)
+ */
+typedef struct {
+ unsigned len:24;
+ unsigned addr1:8;
+ u32 addr2;
+} pxd_t;
+
+/* xd_t field construction */
+
+#define PXDlength(pxd, length32) ((pxd)->len = __cpu_to_le24(length32))
+#define PXDaddress(pxd, address64)\
+{\
+ (pxd)->addr1 = ((s64)address64) >> 32;\
+ (pxd)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\
+}
+
+/* xd_t field extraction */
+#define lengthPXD(pxd) __le24_to_cpu((pxd)->len)
+#define addressPXD(pxd)\
+ ( ((s64)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2))
+
+/* pxd list */
+typedef struct {
+ s16 maxnpxd;
+ s16 npxd;
+ pxd_t pxd[8];
+} pxdlist_t;
+
+
+/*
+ * data extent descriptor (dxd)
+ */
+typedef struct {
+ unsigned flag:8; /* 1: flags */
+ unsigned rsrvd:24; /* 3: */
+ u32 size; /* 4: size in byte */
+ unsigned len:24; /* 3: length in unit of fsblksize */
+ unsigned addr1:8; /* 1: address in unit of fsblksize */
+ u32 addr2; /* 4: address in unit of fsblksize */
+} dxd_t; /* - 16 - */
+
+/* dxd_t flags */
+#define DXD_INDEX 0x80 /* B+-tree index */
+#define DXD_INLINE 0x40 /* in-line data extent */
+#define DXD_EXTENT 0x20 /* out-of-line single extent */
+#define DXD_FILE 0x10 /* out-of-line file (inode) */
+#define DXD_CORRUPT 0x08 /* Inconsistency detected */
+
+/* dxd_t field construction
+ * Conveniently, the PXD macros work for DXD
+ */
+#define DXDlength PXDlength
+#define DXDaddress PXDaddress
+#define lengthDXD lengthPXD
+#define addressDXD addressPXD
+
+/*
+ * directory entry argument
+ */
+typedef struct component_name {
+ int namlen;
+ UniChar *name;
+} component_t;
+
+
+/*
+ * DASD limit information - stored in directory inode
+ */
+typedef struct dasd {
+ u8 thresh; /* Alert Threshold (in percent) */
+ u8 delta; /* Alert Threshold delta (in percent) */
+ u8 rsrvd1;
+ u8 limit_hi; /* DASD limit (in logical blocks) */
+ u32 limit_lo; /* DASD limit (in logical blocks) */
+ u8 rsrvd2[3];
+ u8 used_hi; /* DASD usage (in logical blocks) */
+ u32 used_lo; /* DASD usage (in logical blocks) */
+} dasd_t;
+
+#define DASDLIMIT(dasdp) \
+ (((u64)((dasdp)->limit_hi) << 32) + __le32_to_cpu((dasdp)->limit_lo))
+#define setDASDLIMIT(dasdp, limit)\
+{\
+ (dasdp)->limit_hi = ((u64)limit) >> 32;\
+ (dasdp)->limit_lo = __cpu_to_le32(limit);\
+}
+#define DASDUSED(dasdp) \
+ (((u64)((dasdp)->used_hi) << 32) + __le32_to_cpu((dasdp)->used_lo))
+#define setDASDUSED(dasdp, used)\
+{\
+ (dasdp)->used_hi = ((u64)used) >> 32;\
+ (dasdp)->used_lo = __cpu_to_le32(used);\
+}
+
+/*
+ * circular doubly-linked list (cdll)
+ *
+ * A circular doubly-linked list (cdll) is anchored by a pair of pointers,
+ * one to the head of the list and the other to the tail of the list.
+ * The elements are doubly linked so that an arbitrary element can be
+ * removed without a need to traverse the list.
+ * New elements can be added to the list before or after an existing element,
+ * at the head of the list, or at the tail of the list.
+ * A circle queue may be traversed in either direction.
+ *
+ * +----------+ +-------------------------------------+
+ * | | | |
+ * +->+-----+ | +->+-----+ +->+-----+ +->+-----+ |
+ * | | h +-+ | | h +--+ | n +----+ | n +--+
+ * | +-----+ | +-----+ | +-----+ | +-----+
+ * | | t +-+ +-----+ t | | | p +--+ | | p +--+
+ * | +-----+ | | | +-----+ | +-----+ | | +-----+ |
+ * +----------+ | +-----------------------+ | |
+ * | | | |
+ * | +-------------------------+
+ * | |
+ * +----------------------------+
+ */
+/*
+ * define header
+ *
+ * list header field definition in header element:
+ *
+ * type - type of list element struct embedding the link field
+ */
+#define CDLL_HEADER(type)\
+struct {\
+ struct type *head;\
+ struct type *tail;\
+}
+
+struct cdll_header {
+ struct cdll_header *head;
+ struct cdll_header *tail;
+};
+
+/*
+ * define link
+ *
+ * list link field definition in list element:
+ *
+ * type - type of parent list element struct embedding the link field
+ */
+#define CDLL_ENTRY(type)\
+struct {\
+ struct type *next;\
+ struct type *prev;\
+}
+
+struct cdll_entry {
+ struct cdll_entry *next;
+ struct cdll_entry *prev;
+};
+
+/*
+ * initialize header
+ *
+ * header - ptr to the header field in the header element
+ */
+#define CDLL_INIT(header) {\
+ (header)->head = (void *)(header);\
+ (header)->tail = (void *)(header);\
+}
+
+/*
+ * scan list
+ *
+ * header - ptr to the header field in the header element
+ * elm - ptr to the element to be inserted
+ * field - name of the link field in the list element
+ *
+ * struct header_container *container;
+ * struct header_type *header;
+ * struct element_type *elm;
+ *
+ * header = &container->header_field;
+ * for (elm = header->head; elm != (void *)header; elm = elm->field.next)
+ */
+
+/*
+ * insert <elm> at head of list anchored at <header>
+ *
+ * header - ptr to the header field in the header element
+ * elm - ptr to the list element to be inserted
+ * field - name of the link field in the list element
+ */
+#define CDLL_INSERT_HEAD(header, elm, field) {\
+ (elm)->field.next = (header)->head;\
+ (elm)->field.prev = (void *)(header);\
+ if ((header)->tail == (void *)(header))\
+ (header)->tail = (elm);\
+ else\
+ (header)->head->field.prev = (elm);\
+ (header)->head = (elm);\
+}
+
+/*
+ * insert <elm> at tail of list anchored at <header>
+ *
+ * header - ptr to the header field in the header element
+ * elm - ptr to the list element to be inserted
+ * field - name of the link field in the list element
+ */
+#define CDLL_INSERT_TAIL(header, elm, field) {\
+ (elm)->field.next = (void *)(header);\
+ (elm)->field.prev = (header)->tail;\
+ if ((header)->head == (void *)(header))\
+ (header)->head = (elm);\
+ else\
+ (header)->tail->field.next = (elm);\
+ (header)->tail = (elm);\
+}
+
+/*
+ * insert <elm> after <listelm> of list anchored at <header>
+ *
+ * header - ptr to the header field in the header element
+ * listelm - ptr to the list element at insertion point
+ * elm - ptr to the list element to be inserted
+ * field - name of the link field in the list element
+ */
+#define CDLL_INSERT_AFTER(header, listelm, elm, field) {\
+ (elm)->field.next = (listelm)->field.next;\
+ (elm)->field.prev = (listelm);\
+ if ((listelm)->field.next == (void *)(header))\
+ (header)->tail = (elm);\
+ else\
+ (listelm)->field.next->field.prev = (elm);\
+ (listelm)->field.next = (elm);\
+}
+
+/*
+ * insert <elm> before <listelm> of list anchored at <header>
+ *
+ * header - ptr to the header field in the header element
+ * listelm - ptr to list element at insertion point
+ * elm - ptr to the element to be inserted
+ * field - name of the link field in the list element
+ */
+#define CDLL_INSERT_BEFORE(header, listelm, elm, field) {\
+ (elm)->field.next = (listelm);\
+ (elm)->field.prev = (listelm)->field.prev;\
+ if ((listelm)->field.prev == (void *)(header))\
+ (header)->head = (elm);\
+ else\
+ (listelm)->field.prev->field.next = (elm);\
+ (listelm)->field.prev = (elm);\
+}
+
+/*
+ * remove <elm> from list anchored at <header>
+ *
+ * header - ptr to the header field in the header element
+ * elm - ptr to the list element to be removed
+ * field - name of the link field in the list element
+ */
+#define CDLL_REMOVE(header, elm, field) {\
+ if ((elm)->field.next == (void *)(header))\
+ (header)->tail = (elm)->field.prev;\
+ else\
+ (elm)->field.next->field.prev = (elm)->field.prev;\
+ if ((elm)->field.prev == (void *)(header))\
+ (header)->head = (elm)->field.next;\
+ else\
+ (elm)->field.prev->field.next = (elm)->field.next;\
+}
+
+#define CDLL_MOVE_TO_HEAD(header, elm, field) {\
+ if ((elm)->field.prev != (void *)(header))\
+ {\
+ if ((elm)->field.next == (void *)(header))\
+ (header)->tail = (elm)->field.prev;\
+ else\
+ (elm)->field.next->field.prev = (elm)->field.prev;\
+ (elm)->field.prev->field.next = (elm)->field.next;\
+ (elm)->field.next = (header)->head;\
+ (elm)->field.prev = (void *)(header);\
+ (header)->head->field.prev = (elm);\
+ (header)->head = (elm);\
+ }\
+}
+
+#define CDLL_MOVE_TO_TAIL(header, elm, field) {\
+ if ((elm)->field.next != (void *)(header))\
+ {\
+ (elm)->field.next->field.prev = (elm)->field.prev;\
+ if ((elm)->field.prev == (void *)(header))\
+ (header)->head = (elm)->field.next;\
+ else\
+ (elm)->field.prev->field.next = (elm)->field.next;\
+ (elm)->field.next = (void *)(header);\
+ (elm)->field.prev = (header)->tail;\
+ (header)->tail->field.next = (elm);\
+ (header)->tail = (elm);\
+ }\
+}
+
+/*
+ * orphan list element
+ */
+#define CDLL_SELF(elm, field)\
+ (elm)->field.next = (elm)->field.prev = (elm);
+
+
+/*
+ * single head doubly-linked list
+ *
+ * A list is headed by a single head pointer.
+ * The elements are doubly linked so that an arbitrary element can be
+ * removed without a need to traverse the list.
+ * New elements can be added to the list at the head of the list, or
+ * after an existing element (NO insert at tail).
+ * A list may only be traversed in the forward direction.
+ * (note: the list is NULL terminated in next field.)
+ *
+ * +-----+ +->+-----+ +->+-----+ +->+-----+
+ * | NULL| | | h +--+ | n +----+ | NULL|
+ * +-----+ | +-----+ | +-----+ +-----+
+ * | | | p +--+ | p +--+
+ * | | +-----+ | +-----+ |
+ * +-----------------------+ |
+ * | |
+ * +-------------------------+
+ */
+#define LIST_HEADER(type)\
+struct {\
+ struct type *head;\
+}
+
+#define LIST_ENTRY(type)\
+struct {\
+ struct type *next;\
+ struct type **prev;\
+}
+
+#define LIST_INIT(header) { (header)->head = NULL; }
+
+/*
+ * scan list
+ *
+ * header - ptr to the header (field in header element)
+ * elm - ptr to the element to be inserted
+ * field - name of the link field in list element
+ *
+ * struct header_container *container;
+ * struct header_type *header;
+ * struct element_type *elm;
+ *
+ * header = &container->header_field;
+ * for (elm = header->head; elm; elm = elm->field.next)
+ */
+
+#define LIST_INSERT_HEAD(header, elm, field) {\
+ if (((elm)->field.next = (header)->head) != NULL)\
+ (header)->head->field.prev = &(elm)->field.next;\
+ (header)->head = (elm);\
+ (elm)->field.prev = &(header)->head;\
+}
+
+#define LIST_INSERT_AFTER(listelm, elm, field) {\
+ if (((elm)->field.next = (listelm)->field.next) != NULL)\
+ (listelm)->field.next->field.prev = &(elm)->field.next;\
+ (listelm)->field.next = (elm);\
+ (elm)->field.prev = &(listelm)->field.next;\
+}
+
+#define LIST_REMOVE(elm, field) {\
+ if ((elm)->field.next != NULL)\
+ (elm)->field.next->field.prev = (elm)->field.prev;\
+ *(elm)->field.prev = (elm)->field.next;\
+}
+
+#define LIST_SELF(elm, field) {\
+ (elm)->field.next = NULL;\
+ (elm)->field.prev = &(elm)->field.next;\
+}
+
+#endif /* !_H_JFS_TYPES */
diff --git a/libparted/fs/linux_swap/linux_swap.c b/libparted/fs/linux_swap/linux_swap.c
new file mode 100644
index 0000000..60100b0
--- /dev/null
+++ b/libparted/fs/linux_swap/linux_swap.c
@@ -0,0 +1,396 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2002, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* It's a bit silly calling a swap partition a file system. Oh well... */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <unistd.h>
+#include <uuid/uuid.h>
+
+#define SWAP_SPECIFIC(fs) ((SwapSpecific*) (fs->type_specific))
+#define BUFFER_SIZE 128
+
+#define LINUXSWAP_BLOCK_SIZES ((int[2]){512, 0})
+
+typedef struct {
+ char page_map[1];
+} SwapOldHeader;
+
+/* ripped from mkswap */
+typedef struct {
+ char bootbits[1024]; /* Space for disklabel etc. */
+ uint32_t version;
+ uint32_t last_page;
+ uint32_t nr_badpages;
+ unsigned char sws_uuid[16];
+ unsigned char sws_volume[16];
+ uint32_t padding[117];
+ uint32_t badpages[1];
+} SwapNewHeader;
+
+typedef struct {
+ union {
+ SwapNewHeader new;
+ SwapOldHeader old;
+ }* header;
+
+ void* buffer;
+ int buffer_size;
+
+ PedSector page_sectors;
+ unsigned int page_count;
+ unsigned int version;
+ unsigned int max_bad_pages;
+} SwapSpecific;
+
+static PedFileSystemType _swap_v0_type;
+static PedFileSystemType _swap_v1_type;
+static PedFileSystemType _swap_swsusp_type;
+
+static PedFileSystem* _swap_v0_open (PedGeometry* geom);
+static PedFileSystem* _swap_v1_open (PedGeometry* geom);
+static PedFileSystem* _swap_swsusp_open (PedGeometry* geom);
+static int swap_close (PedFileSystem* fs);
+
+static PedGeometry*
+_generic_swap_probe (PedGeometry* geom, int kind)
+{
+ PedFileSystem* fs;
+ SwapSpecific* fs_info;
+ PedGeometry* probed_geom;
+ PedSector length;
+
+ switch (kind) {
+ /* Check for old style swap partitions. */
+ case 0:
+ fs = _swap_v0_open(geom);
+ break;
+ /* Check for new style swap partitions. */
+ case 1:
+ fs = _swap_v1_open(geom);
+ break;
+ /* Check for swap partitions containing swsusp data. */
+ case -1:
+ fs = _swap_swsusp_open(geom);
+ break;
+ /* Not reached. */
+ default:
+ goto error;
+ }
+
+ if (!fs)
+ goto error;
+ fs_info = SWAP_SPECIFIC (fs);
+
+ if (fs_info->version)
+ length = fs_info->page_sectors * fs_info->page_count;
+ else
+ length = geom->length;
+
+ probed_geom = ped_geometry_new (geom->dev, geom->start, length);
+ if (!probed_geom)
+ goto error_close_fs;
+ swap_close (fs);
+ return probed_geom;
+
+error_close_fs:
+ swap_close (fs);
+error:
+ return NULL;
+}
+
+
+static int
+swap_init (PedFileSystem* fs)
+{
+ SwapSpecific* fs_info = SWAP_SPECIFIC (fs);
+
+ fs_info->page_sectors = getpagesize () / fs->geom->dev->sector_size;
+ fs_info->page_count = fs->geom->length / fs_info->page_sectors;
+ fs_info->version = 1;
+ fs_info->max_bad_pages = (getpagesize()
+ - sizeof (SwapNewHeader)) / 4;
+
+ return ped_geometry_read (fs->geom, fs_info->header,
+ 0, fs_info->page_sectors);
+}
+
+
+static PedFileSystem*
+swap_alloc (PedGeometry* geom)
+{
+ PedFileSystem* fs;
+ SwapSpecific* fs_info;
+
+ fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem));
+ if (!fs)
+ goto error;
+
+ fs->type_specific = (SwapSpecific*) ped_malloc (sizeof (SwapSpecific));
+ if (!fs->type_specific)
+ goto error_free_fs;
+
+ fs_info = SWAP_SPECIFIC (fs);
+ fs_info->header = ped_malloc (PED_MAX(getpagesize(), geom->dev->sector_size));
+ if (!fs_info->header)
+ goto error_free_type_specific;
+
+ fs_info = SWAP_SPECIFIC (fs);
+ fs_info->buffer_size = getpagesize() * BUFFER_SIZE;
+ fs_info->buffer = ped_malloc (fs_info->buffer_size);
+ if (!fs_info->buffer)
+ goto error_free_header;
+
+ fs->geom = ped_geometry_duplicate (geom);
+ if (!fs->geom)
+ goto error_free_buffer;
+ fs->type = &_swap_v1_type;
+ return fs;
+
+error_free_buffer:
+ free (fs_info->buffer);
+error_free_header:
+ free (fs_info->header);
+error_free_type_specific:
+ free (fs->type_specific);
+error_free_fs:
+ free (fs);
+error:
+ return NULL;
+}
+
+static void
+swap_free (PedFileSystem* fs)
+{
+ SwapSpecific* fs_info = SWAP_SPECIFIC (fs);
+
+ free (fs_info->buffer);
+ free (fs_info->header);
+ free (fs->type_specific);
+
+ ped_geometry_destroy (fs->geom);
+ free (fs);
+}
+
+static PedFileSystem*
+_swap_v0_open (PedGeometry* geom)
+{
+ PedFileSystem* fs;
+ SwapSpecific* fs_info;
+ const char* sig;
+
+ fs = swap_alloc (geom);
+ if (!fs)
+ goto error;
+ swap_init (fs);
+
+ fs_info = SWAP_SPECIFIC (fs);
+ if (!ped_geometry_read (fs->geom, fs_info->header, 0,
+ fs_info->page_sectors))
+ goto error_free_fs;
+
+ sig = ((char*) fs_info->header) + getpagesize() - 10;
+ if (strncmp (sig, "SWAP-SPACE", 10) == 0) {
+ fs_info->version = 0;
+ fs_info->page_count
+ = PED_MIN (fs->geom->length / fs_info->page_sectors,
+ 8 * (getpagesize() - 10));
+ } else {
+ char _sig [11];
+
+ memcpy (_sig, sig, 10);
+ _sig [10] = 0;
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unrecognised old style linux swap signature '%10s'."), _sig);
+ goto error_free_fs;
+ }
+
+ fs->checked = 1;
+ return fs;
+
+error_free_fs:
+ swap_free (fs);
+error:
+ return NULL;
+}
+
+static PedFileSystem*
+_swap_v1_open (PedGeometry* geom)
+{
+ PedFileSystem* fs;
+ SwapSpecific* fs_info;
+ const char* sig;
+
+ fs = swap_alloc (geom);
+ if (!fs)
+ goto error;
+ if (!swap_init(fs))
+ goto error_free_fs;
+
+ fs_info = SWAP_SPECIFIC (fs);
+
+ sig = ((char*) fs_info->header) + getpagesize() - 10;
+ if (strncmp (sig, "SWAPSPACE2", 10) == 0) {
+ fs_info->version = 1;
+ fs_info->page_count = fs_info->header->new.last_page;
+ } else {
+ char _sig [11];
+
+ memcpy (_sig, sig, 10);
+ _sig [10] = 0;
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unrecognised new style linux swap signature '%10s'."), _sig);
+ goto error_free_fs;
+ }
+
+ fs->checked = 1;
+ return fs;
+
+error_free_fs:
+ swap_free (fs);
+error:
+ return NULL;
+}
+
+static PedFileSystem*
+_swap_swsusp_open (PedGeometry* geom)
+{
+ PedFileSystem* fs;
+ SwapSpecific* fs_info;
+ const char* sig;
+
+ fs = swap_alloc (geom);
+ if (!fs)
+ goto error;
+ fs->type = &_swap_swsusp_type;
+ swap_init (fs);
+
+ fs_info = SWAP_SPECIFIC (fs);
+ if (!ped_geometry_read (fs->geom, fs_info->header, 0,
+ fs_info->page_sectors))
+ goto error_free_fs;
+
+ sig = ((char*) fs_info->header) + getpagesize() - 10;
+ if (strncmp (sig, "S1SUSPEND", 9) == 0) {
+ fs_info->version = -1;
+ } else {
+ char _sig [10];
+
+ memcpy (_sig, sig, 9);
+ _sig [9] = 0;
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unrecognised swsusp linux swap signature '%9s'."), _sig);
+ goto error_free_fs;
+ }
+
+ fs->checked = 1;
+ return fs;
+
+error_free_fs:
+ swap_free (fs);
+error:
+ return NULL;
+}
+
+static int
+swap_close (PedFileSystem* fs)
+{
+ swap_free (fs);
+ return 1;
+}
+
+static PedGeometry*
+_swap_v0_probe (PedGeometry* geom) {
+ return _generic_swap_probe (geom, 0);
+}
+
+static PedGeometry*
+_swap_v1_probe (PedGeometry* geom) {
+ return _generic_swap_probe (geom, 1);
+}
+
+static PedGeometry*
+_swap_swsusp_probe (PedGeometry* geom) {
+ return _generic_swap_probe (geom, -1);
+}
+
+static PedFileSystemOps _swap_v0_ops = {
+ probe: _swap_v0_probe,
+};
+
+static PedFileSystemOps _swap_v1_ops = {
+ probe: _swap_v1_probe,
+};
+
+static PedFileSystemOps _swap_swsusp_ops = {
+ probe: _swap_swsusp_probe,
+};
+
+static PedFileSystemType _swap_v0_type = {
+ next: NULL,
+ ops: &_swap_v0_ops,
+ name: "linux-swap(v0)",
+};
+
+static PedFileSystemType _swap_v1_type = {
+ next: NULL,
+ ops: &_swap_v1_ops,
+ name: "linux-swap(v1)",
+};
+
+static PedFileSystemType _swap_swsusp_type = {
+ next: NULL,
+ ops: &_swap_swsusp_ops,
+ name: "swsusp",
+};
+
+void
+ped_file_system_linux_swap_init ()
+{
+ ped_file_system_type_register (&_swap_v0_type);
+ ped_file_system_type_register (&_swap_v1_type);
+ ped_file_system_type_register (&_swap_swsusp_type);
+
+ ped_file_system_alias_register (&_swap_v0_type, "linux-swap(old)", 1);
+ ped_file_system_alias_register (&_swap_v1_type, "linux-swap(new)", 1);
+ ped_file_system_alias_register (&_swap_v1_type, "linux-swap", 0);
+}
+
+void
+ped_file_system_linux_swap_done ()
+{
+ ped_file_system_alias_unregister (&_swap_v0_type, "linux-swap(old)");
+ ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap(new)");
+ ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap");
+
+ ped_file_system_type_unregister (&_swap_v0_type);
+ ped_file_system_type_unregister (&_swap_v1_type);
+ ped_file_system_type_unregister (&_swap_swsusp_type);
+}
diff --git a/libparted/fs/nilfs2/nilfs2.c b/libparted/fs/nilfs2/nilfs2.c
new file mode 100644
index 0000000..6204542
--- /dev/null
+++ b/libparted/fs/nilfs2/nilfs2.c
@@ -0,0 +1,155 @@
+/*
+ * nilfs2.c - New Implementation of Log filesystem
+ *
+ * Written by Jiro SEKIBA <jir@unicus.jp>
+ *
+ * Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/crc32.h>
+#include <parted/endian.h>
+
+/* Magic value for nilfs2 superblock. */
+#define NILFS2_SUPER_MAGIC 0x3434
+
+/* primariy superblock offset in 512bytes blocks. */
+#define NILFS_SB_OFFSET 2
+
+/* secondary superblock offset in 512byte blocks. */
+#define NILFS_SB2_OFFSET(devsize) ((((devsize)>>3) - 1) << 3)
+
+struct __attribute__ ((packed)) nilfs2_super_block {
+ uint32_t s_rev_level;
+ uint16_t s_minor_rev_level;
+ uint16_t s_magic;
+ uint16_t s_bytes;
+ uint16_t s_flags;
+ uint32_t s_crc_seed;
+ uint32_t s_sum;
+ uint32_t s_log_block_size;
+ uint64_t s_nsegments;
+ uint64_t s_dev_size;
+ uint64_t s_first_data_block;
+ uint32_t s_blocks_per_segment;
+ uint32_t s_r_segments_percentage;
+ uint64_t s_last_cno;
+ uint64_t s_last_pseg;
+ uint64_t s_last_seq;
+ uint64_t s_free_blocks_count;
+ uint64_t s_ctime;
+ uint64_t s_mtime;
+ uint64_t s_wtime;
+ uint16_t s_mnt_count;
+ uint16_t s_max_mnt_count;
+ uint16_t s_state;
+ uint16_t s_errors;
+ uint64_t s_lastcheck;
+ uint32_t s_checkinterval;
+ uint32_t s_creator_os;
+ uint16_t s_def_resuid;
+ uint16_t s_def_resgid;
+ uint32_t s_first_ino;
+ uint16_t s_inode_size;
+ uint16_t s_dat_entry_size;
+ uint16_t s_checkpoint_size;
+ uint16_t s_segment_usage_size;
+ uint8_t s_uuid[16];
+ char s_volume_name[80];
+ uint32_t s_c_interval;
+ uint32_t s_c_block_max;
+ uint32_t s_reserved[192];
+};
+
+static int
+is_valid_nilfs_sb(struct nilfs2_super_block *sb)
+{
+ static unsigned char sum[4];
+ const int sumoff = offsetof (struct nilfs2_super_block, s_sum);
+ size_t bytes;
+ uint32_t crc;
+
+ if (PED_LE16_TO_CPU(sb->s_magic) != NILFS2_SUPER_MAGIC)
+ return 0;
+
+ bytes = PED_LE16_TO_CPU(sb->s_bytes);
+ if (bytes > 1024 || bytes < sumoff - 4)
+ return 0;
+
+ crc = __efi_crc32(sb, sumoff, PED_LE32_TO_CPU(sb->s_crc_seed));
+ crc = __efi_crc32(sum, 4, crc);
+ crc = __efi_crc32((unsigned char *)sb + sumoff + 4,
+ bytes - sumoff - 4, crc);
+
+ return crc == PED_LE32_TO_CPU(sb->s_sum);
+}
+
+PedGeometry*
+nilfs2_probe (PedGeometry* geom)
+{
+ struct nilfs2_super_block *sb = NULL;
+ struct nilfs2_super_block *sb2 = NULL;
+ PedSector length = geom->length * (geom->dev->sector_size / 512);
+
+ PedSector sb2off = NILFS_SB2_OFFSET(length) / (geom->dev->sector_size / 512);
+ if (sb2off <= 2)
+ return NULL;
+ const int sectors = (4096 + geom->dev->sector_size - 1) /
+ geom->dev->sector_size;
+ uint8_t *buf = alloca (sectors * geom->dev->sector_size);
+ const int sectors2 = (1024 + geom->dev->sector_size -1 ) /
+ geom->dev->sector_size;
+ void *buff2 = alloca (sectors2 * geom->dev->sector_size);
+
+ if (ped_geometry_read(geom, buf, 0, sectors))
+ sb = (struct nilfs2_super_block*)(buf + 1024);
+ if (ped_geometry_read(geom, buff2, sb2off, sectors2))
+ sb2 = (struct nilfs2_super_block*)buff2;
+
+ if ((!sb || !is_valid_nilfs_sb(sb)) &&
+ (!sb2 || !is_valid_nilfs_sb(sb2)))
+ return NULL;
+
+ /* reserve 4k bytes for secondary superblock */
+ length = sb2off + ((4096 + geom->dev->sector_size - 1) /
+ geom->dev->sector_size);
+
+ return ped_geometry_new(geom->dev, geom->start, length);
+}
+
+static PedFileSystemOps nilfs2_ops = {
+ probe: nilfs2_probe,
+};
+
+static PedFileSystemType nilfs2_type = {
+ next: NULL,
+ ops: &nilfs2_ops,
+ name: "nilfs2",
+};
+
+void
+ped_file_system_nilfs2_init ()
+{
+ ped_file_system_type_register (&nilfs2_type);
+}
+
+void
+ped_file_system_nilfs2_done ()
+{
+ ped_file_system_type_unregister (&nilfs2_type);
+}
diff --git a/libparted/fs/ntfs/ntfs.c b/libparted/fs/ntfs/ntfs.c
new file mode 100644
index 0000000..9829f39
--- /dev/null
+++ b/libparted/fs/ntfs/ntfs.c
@@ -0,0 +1,73 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <unistd.h>
+
+#define NTFS_SIGNATURE "NTFS"
+
+PedGeometry*
+ntfs_probe (PedGeometry* geom)
+{
+ uint8_t *buf = alloca(geom->dev->sector_size);
+ PedGeometry *newg = NULL;
+
+ if (!ped_geometry_read(geom, buf, 0, 1))
+ return 0;
+
+ if (strncmp (NTFS_SIGNATURE, ((char *)buf + 3), strlen (NTFS_SIGNATURE)) == 0) {
+ uint64_t length;
+ memcpy(&length, buf + 0x28, sizeof(uint64_t));
+ newg = ped_geometry_new (geom->dev, geom->start, length);
+ }
+ return newg;
+}
+
+static PedFileSystemOps ntfs_ops = {
+ probe: ntfs_probe,
+};
+
+static PedFileSystemType ntfs_type = {
+ next: NULL,
+ ops: &ntfs_ops,
+ name: "ntfs",
+};
+
+void
+ped_file_system_ntfs_init ()
+{
+ ped_file_system_type_register (&ntfs_type);
+}
+
+void
+ped_file_system_ntfs_done ()
+{
+ ped_file_system_type_unregister (&ntfs_type);
+}
diff --git a/libparted/fs/r/fat/bootsector.c b/libparted/fs/r/fat/bootsector.c
new file mode 100644
index 0000000..85ccc0f
--- /dev/null
+++ b/libparted/fs/r/fat/bootsector.c
@@ -0,0 +1,441 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2002, 2004, 2007, 2009-2014, 2019-2023 Free
+ Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+/* Reads in the boot sector (superblock), and does a minimum of sanity
+ * checking. The goals are:
+ * - to detect fat file systems, even if they are damaged [i.e. not
+ * return an error / throw an exception]
+ * - to fail detection if there's not enough information for
+ * fat_boot_sector_probe_type() to work (or possibly crash on a divide-by-zero)
+ */
+int
+fat_boot_sector_read (FatBootSector** bsp, const PedGeometry *geom)
+{
+ PED_ASSERT (bsp != NULL);
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_geometry_read_alloc (geom, (void **)bsp, 0, 1))
+ return 0;
+ FatBootSector *bs = *bsp;
+ if (PED_LE16_TO_CPU (bs->boot_sign) != 0xAA55) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid signature for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->sector_size
+ || PED_LE16_TO_CPU (bs->sector_size) % PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid sector size for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->cluster_size) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid cluster size for a FAT "
+ "file system."));
+ return 0;
+ }
+
+ if (!bs->reserved) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid number of reserved "
+ "sectors for a FAT file system."));
+ return 0;
+ }
+
+ if (bs->fats < 1 || bs->fats > 4) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("File system has an invalid number of FATs."));
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+ Don't trust the FAT12, FAT16 or FAT32 label string.
+ */
+FatType _GL_ATTRIBUTE_PURE
+fat_boot_sector_probe_type (const FatBootSector* bs, const PedGeometry* geom)
+{
+ PedSector logical_sector_size;
+ PedSector first_cluster_sector;
+ FatCluster cluster_count;
+
+ if (!PED_LE16_TO_CPU (bs->dir_entries))
+ return FAT_TYPE_FAT32;
+
+ logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512;
+
+ first_cluster_sector
+ = PED_LE16_TO_CPU (bs->reserved) * logical_sector_size
+ + 2 * PED_LE16_TO_CPU (bs->fat_length) * logical_sector_size
+ + PED_LE16_TO_CPU (bs->dir_entries)
+ / (512 / sizeof (FatDirEntry));
+ cluster_count = (geom->length - first_cluster_sector)
+ / bs->cluster_size / logical_sector_size;
+ if (cluster_count > MAX_FAT12_CLUSTERS)
+ return FAT_TYPE_FAT16;
+ else
+ return FAT_TYPE_FAT12;
+}
+
+/* Analyses the boot sector, and sticks appropriate numbers in
+ fs->type_specific.
+
+ Note: you need to subtract (2 * cluster_sectors) off cluster offset,
+ because the first cluster is number 2. (0 and 1 are not real clusters,
+ and referencing them is a bug)
+ */
+int
+fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int fat_entry_size;
+
+ PED_ASSERT (bs != NULL);
+
+ fs_info->logical_sector_size = PED_LE16_TO_CPU (bs->sector_size) / 512;
+
+ fs_info->sectors_per_track = PED_LE16_TO_CPU (bs->secs_track);
+ fs_info->heads = PED_LE16_TO_CPU (bs->heads);
+ if (fs_info->sectors_per_track < 1 || fs_info->sectors_per_track > 63
+ || fs_info->heads < 1 || fs_info->heads > 255) {
+ PedCHSGeometry* bios_geom = &fs->geom->dev->bios_geom;
+ int cyl_count = 0;
+
+ if (fs_info->heads > 0 && fs_info->sectors_per_track > 0)
+ cyl_count = fs->geom->dev->length / fs_info->heads
+ / fs_info->sectors_per_track;
+
+ switch (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_FIX + PED_EXCEPTION_IGNORE
+ + PED_EXCEPTION_CANCEL,
+ _("The file system's CHS geometry is (%d, %d, %d), "
+ "which is invalid. The partition table's CHS "
+ "geometry is (%d, %d, %d). If you select Ignore, "
+ "the file system's CHS geometry will be left "
+ "unchanged. If you select Fix, the file system's "
+ "CHS geometry will be set to match the partition "
+ "table's CHS geometry."),
+ cyl_count, fs_info->heads, fs_info->sectors_per_track,
+ bios_geom->cylinders, bios_geom->heads,
+ bios_geom->sectors)) {
+
+ case PED_EXCEPTION_FIX:
+ fs_info->sectors_per_track = bios_geom->sectors;
+ fs_info->heads = bios_geom->heads;
+ bs->secs_track
+ = PED_CPU_TO_LE16 (fs_info->sectors_per_track);
+ bs->heads = PED_CPU_TO_LE16 (fs_info->heads);
+ if (!fat_boot_sector_write (bs, fs))
+ return 0;
+ break;
+
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+
+ case PED_EXCEPTION_IGNORE:
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ if (bs->sectors)
+ fs_info->sector_count = PED_LE16_TO_CPU (bs->sectors)
+ * fs_info->logical_sector_size;
+ else
+ fs_info->sector_count = PED_LE32_TO_CPU (bs->sector_count)
+ * fs_info->logical_sector_size;
+
+ fs_info->fat_table_count = bs->fats;
+ fs_info->root_dir_entry_count = PED_LE16_TO_CPU (bs->dir_entries);
+ fs_info->fat_offset = PED_LE16_TO_CPU (bs->reserved)
+ * fs_info->logical_sector_size;
+ fs_info->cluster_sectors = bs->cluster_size
+ * fs_info->logical_sector_size;
+ fs_info->cluster_size = fs_info->cluster_sectors * 512;
+
+ if (fs_info->logical_sector_size == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says logical sector size is 0. "
+ "This is weird. "));
+ return 0;
+ }
+ if (fs_info->fat_table_count == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says there are no FAT tables. This "
+ "is weird. "));
+ return 0;
+ }
+ if (fs_info->cluster_sectors == 0) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("FAT boot sector says clusters are 0 sectors. This "
+ "is weird. "));
+ return 0;
+ }
+
+ fs_info->fat_type = fat_boot_sector_probe_type (bs, fs->geom);
+ if (fs_info->fat_type == FAT_TYPE_FAT12) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("File system is FAT12, which is unsupported."));
+ return 0;
+ }
+ if (fs_info->fat_type == FAT_TYPE_FAT16) {
+ fs_info->fat_sectors = PED_LE16_TO_CPU (bs->fat_length)
+ * fs_info->logical_sector_size;
+ fs_info->serial_number
+ = PED_LE32_TO_CPU (bs->u.fat16.serial_number);
+ fs_info->root_cluster = 0;
+ fs_info->root_dir_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ fs_info->root_dir_sector_count
+ = fs_info->root_dir_entry_count * sizeof (FatDirEntry)
+ / (512 * fs_info->logical_sector_size);
+ fs_info->cluster_offset
+ = fs_info->root_dir_offset
+ + fs_info->root_dir_sector_count;
+ }
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ fs_info->fat_sectors = PED_LE32_TO_CPU (bs->u.fat32.fat_length)
+ * fs_info->logical_sector_size;
+ fs_info->serial_number
+ = PED_LE32_TO_CPU (bs->u.fat32.serial_number);
+ fs_info->info_sector_offset
+ = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.info_sector)
+ * fs_info->logical_sector_size;
+ fs_info->boot_sector_backup_offset
+ = PED_LE16_TO_CPU (fs_info->boot_sector->u.fat32.backup_sector)
+ * fs_info->logical_sector_size;
+ fs_info->root_cluster
+ = PED_LE32_TO_CPU (bs->u.fat32.root_dir_cluster);
+ fs_info->root_dir_offset = 0;
+ fs_info->root_dir_sector_count = 0;
+ fs_info->cluster_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ }
+
+ fs_info->cluster_count
+ = (fs_info->sector_count - fs_info->cluster_offset)
+ / fs_info->cluster_sectors;
+
+ fat_entry_size = fat_table_entry_size (fs_info->fat_type);
+ if (fs_info->cluster_count + 2
+ > fs_info->fat_sectors * 512 / fat_entry_size)
+ fs_info->cluster_count
+ = fs_info->fat_sectors * 512 / fat_entry_size - 2;
+
+ fs_info->dir_entries_per_cluster
+ = fs_info->cluster_size / sizeof (FatDirEntry);
+ return 1;
+}
+
+#ifndef DISCOVER_ONLY
+int
+fat_boot_sector_set_boot_code (FatBootSector** bsp, const PedFileSystem* fs)
+{
+ PED_ASSERT (bsp != NULL);
+ *bsp = ped_malloc (fs->geom->dev->sector_size);
+ FatBootSector *bs = *bsp;
+ PED_ASSERT (bs != NULL);
+
+ memset (bs, 0, 512);
+ memcpy (bs->boot_jump, FAT_BOOT_JUMP, 3);
+ PED_ASSERT (sizeof(FAT_BOOT_CODE) < sizeof(bs->u.fat32.boot_code));
+ strcpy (bs->u.fat32.boot_code, FAT_BOOT_CODE);
+ return 1;
+}
+
+int
+fat_boot_sector_generate (FatBootSector** bsp, const PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (bsp != NULL);
+ FatBootSector *bs = *bsp;
+ PED_ASSERT (bs != NULL);
+
+ memcpy (bs->system_id, "MSWIN4.1", 8);
+ bs->sector_size = PED_CPU_TO_LE16 (fs_info->logical_sector_size * 512);
+ bs->cluster_size = fs_info->cluster_sectors
+ / fs_info->logical_sector_size;
+ bs->reserved = PED_CPU_TO_LE16 (fs_info->fat_offset
+ / fs_info->logical_sector_size);
+ bs->fats = fs_info->fat_table_count;
+
+ bs->dir_entries = (fs_info->fat_type == FAT_TYPE_FAT16)
+ ? PED_CPU_TO_LE16 (fs_info->root_dir_entry_count)
+ : 0;
+
+ if (fs_info->sector_count / fs_info->logical_sector_size > 0xffff
+ || fs_info->fat_type == FAT_TYPE_FAT32) {
+ bs->sectors = 0;
+ bs->sector_count = PED_CPU_TO_LE32 (fs_info->sector_count
+ / fs_info->logical_sector_size);
+ } else {
+ bs->sectors = PED_CPU_TO_LE16 (fs_info->sector_count
+ / fs_info->logical_sector_size);
+ bs->sector_count = 0;
+ }
+
+ bs->media = 0xf8;
+
+ bs->secs_track = PED_CPU_TO_LE16 (fs_info->sectors_per_track);
+ bs->heads = PED_CPU_TO_LE16 (fs_info->heads);
+ bs->hidden = PED_CPU_TO_LE32 (fs->geom->start);
+
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ bs->fat_length = 0;
+ bs->u.fat32.fat_length = PED_CPU_TO_LE32 (fs_info->fat_sectors
+ / fs_info->logical_sector_size);
+ bs->u.fat32.flags = 0; /* FIXME: what the hell are these? */
+ bs->u.fat32.version = 0; /* must be 0, for Win98 bootstrap */
+ bs->u.fat32.root_dir_cluster
+ = PED_CPU_TO_LE32 (fs_info->root_cluster);
+ bs->u.fat32.info_sector
+ = PED_CPU_TO_LE16 (fs_info->info_sector_offset
+ / fs_info->logical_sector_size);
+ bs->u.fat32.backup_sector
+ = PED_CPU_TO_LE16 (fs_info->boot_sector_backup_offset
+ / fs_info->logical_sector_size);
+
+ bs->u.fat32.drive_num = 0x80; /* _ALWAYS_ 0x80. silly DOS */
+
+ memset (bs->u.fat32.empty_1, 0, 12);
+
+ bs->u.fat32.ext_signature = 0x29;
+ bs->u.fat32.serial_number
+ = PED_CPU_TO_LE32 (fs_info->serial_number);
+ memcpy (bs->u.fat32.volume_name, "NO NAME ", 11);
+ memcpy (bs->u.fat32.fat_name, "FAT32 ", 8);
+ } else {
+ bs->fat_length
+ = PED_CPU_TO_LE16 (fs_info->fat_sectors
+ / fs_info->logical_sector_size);
+
+ bs->u.fat16.drive_num = 0x80; /* _ALWAYS_ 0x80. silly DOS */
+
+ bs->u.fat16.ext_signature = 0x29;
+ bs->u.fat16.serial_number
+ = PED_CPU_TO_LE32 (fs_info->serial_number);
+ memcpy (bs->u.fat16.volume_name, "NO NAME ", 11);
+ memcpy (bs->u.fat16.fat_name, "FAT16 ", 8);
+ }
+
+ bs->boot_sign = PED_CPU_TO_LE16 (0xaa55);
+
+ return 1;
+}
+
+int
+fat_boot_sector_write (const FatBootSector* bs, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (bs != NULL);
+
+ if (!ped_geometry_write (fs->geom, bs, 0, 1))
+ return 0;
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!ped_geometry_write (fs->geom, bs,
+ fs_info->boot_sector_backup_offset, 1))
+ return 0;
+ }
+ return ped_geometry_sync (fs->geom);
+}
+
+int
+fat_info_sector_read (FatInfoSector** isp, const PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int status;
+
+ PED_ASSERT (isp != NULL);
+
+ if (!ped_geometry_read_alloc (fs->geom, (void **)isp, fs_info->info_sector_offset, 1))
+ return 0;
+ FatInfoSector *is = *isp;
+ if (PED_LE32_TO_CPU (is->signature_2) != FAT32_INFO_MAGIC2) {
+ status = ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The information sector has the wrong "
+ "signature (%x). Select cancel for now, "
+ "and send in a bug report. If you're "
+ "desperate, it's probably safe to ignore."),
+ PED_LE32_TO_CPU (is->signature_2));
+ if (status == PED_EXCEPTION_CANCEL) return 0;
+ }
+ return 1;
+}
+
+int
+fat_info_sector_generate (FatInfoSector** isp, const PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (isp != NULL);
+ *isp = ped_malloc (fs->geom->dev->sector_size);
+ FatInfoSector *is = *isp;
+
+ fat_table_count_stats (fs_info->fat);
+
+ memset (is, 0, 512);
+
+ is->signature_1 = PED_CPU_TO_LE32 (FAT32_INFO_MAGIC1);
+ is->signature_2 = PED_CPU_TO_LE32 (FAT32_INFO_MAGIC2);
+ is->free_clusters = PED_CPU_TO_LE32 (fs_info->fat->free_cluster_count);
+ is->next_cluster = PED_CPU_TO_LE32 (fs_info->fat->last_alloc);
+ is->signature_3 = PED_CPU_TO_LE16 (FAT32_INFO_MAGIC3);
+
+ return 1;
+}
+
+int
+fat_info_sector_write (const FatInfoSector* is, PedFileSystem *fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (is != NULL);
+
+ if (!ped_geometry_write (fs->geom, is, fs_info->info_sector_offset, 1))
+ return 0;
+ return ped_geometry_sync (fs->geom);
+}
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/bootsector.h b/libparted/fs/r/fat/bootsector.h
new file mode 100644
index 0000000..699d6cf
--- /dev/null
+++ b/libparted/fs/r/fat/bootsector.h
@@ -0,0 +1,130 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_BOOTSECTOR_H
+#define PED_FAT_BOOTSECTOR_H
+
+typedef struct _FatBootSector FatBootSector;
+typedef struct _FatInfoSector FatInfoSector;
+
+#include "fat.h"
+
+#define FAT32_INFO_MAGIC1 0x41615252
+#define FAT32_INFO_MAGIC2 0x61417272
+#define FAT32_INFO_MAGIC3 0xaa55
+
+/* stolen from mkdosfs, by Dave Hudson */
+
+#define FAT_BOOT_MESSAGE \
+"This partition does not have an operating system loader installed on it.\n\r"\
+"Press a key to reboot..."
+
+#define FAT_BOOT_JUMP "\xeb\x58\x90" /* jmp +5a */
+
+#define FAT_BOOT_CODE "\x0e" /* push cs */ \
+ "\x1f" /* pop ds */ \
+ "\xbe\x74\x7e" /* mov si, offset message */ \
+ /* write_msg_loop: */ \
+ "\xac" /* lodsb */ \
+ "\x22\xc0" /* and al, al */ \
+ "\x74\x06" /* jz done (+8) */ \
+ "\xb4\x0e" /* mov ah, 0x0e */ \
+ "\xcd\x10" /* int 0x10 */ \
+ "\xeb\xf5" /* jmp write_msg_loop */ \
+ /* done: */ \
+ "\xb4\x00" /* mov ah, 0x00 */ \
+ "\xcd\x16" /* int 0x16 */ \
+ "\xb4\x00" /* mov ah, 0x00 */ \
+ "\xcd\x19" /* int 0x19 */ \
+ "\xeb\xfe" /* jmp +0 - in case int 0x19 */ \
+ /* doesn't work */ \
+ /* message: */ \
+ FAT_BOOT_MESSAGE
+
+struct __attribute__ ((packed)) _FatBootSector {
+ uint8_t boot_jump[3]; /* 00: Boot strap short or near jump */
+ uint8_t system_id[8]; /* 03: system name */
+ uint16_t sector_size; /* 0b: bytes per logical sector */
+ uint8_t cluster_size; /* 0d: sectors/cluster */
+ uint16_t reserved; /* 0e: reserved sectors */
+ uint8_t fats; /* 10: number of FATs */
+ uint16_t dir_entries; /* 11: number of root directory entries */
+ uint16_t sectors; /* 13: if 0, total_sect supersedes */
+ uint8_t media; /* 15: media code */
+ uint16_t fat_length; /* 16: sectors/FAT for FAT12/16 */
+ uint16_t secs_track; /* 18: sectors per track */
+ uint16_t heads; /* 1a: number of heads */
+ uint32_t hidden; /* 1c: hidden sectors (partition start) */
+ uint32_t sector_count; /* 20: no. of sectors (if sectors == 0) */
+
+ union __attribute__ ((packed)) {
+ /* FAT16 fields */
+ struct __attribute__ ((packed)) {
+ uint8_t drive_num; /* 24: */
+ uint8_t empty_1; /* 25: */
+ uint8_t ext_signature; /* 26: always 0x29 */
+ uint32_t serial_number; /* 27: */
+ uint8_t volume_name [11]; /* 2b: */
+ uint8_t fat_name [8]; /* 36: */
+ uint8_t boot_code[448]; /* 3f: Boot code (or message) */
+ } fat16;
+ /* FAT32 fields */
+ struct __attribute__ ((packed)) {
+ uint32_t fat_length; /* 24: size of FAT in sectors */
+ uint16_t flags; /* 28: bit8: fat mirroring, low4: active fat */
+ uint16_t version; /* 2a: minor * 256 + major */
+ uint32_t root_dir_cluster; /* 2c: */
+ uint16_t info_sector; /* 30: */
+ uint16_t backup_sector; /* 32: */
+ uint8_t empty_1 [12]; /* 34: */
+ uint16_t drive_num; /* 40: */
+ uint8_t ext_signature; /* 42: always 0x29 */
+ uint32_t serial_number; /* 43: */
+ uint8_t volume_name [11]; /* 47: */
+ uint8_t fat_name [8]; /* 52: */
+ uint8_t boot_code[420]; /* 5a: Boot code (or message) */
+ } fat32;
+ } u;
+
+ uint16_t boot_sign; /* 1fe: always 0xAA55 */
+};
+
+struct __attribute__ ((packed)) _FatInfoSector {
+ uint32_t signature_1; /* should be 0x41615252 */
+ uint8_t unused [480];
+ uint32_t signature_2; /* should be 0x61417272 */
+ uint32_t free_clusters;
+ uint32_t next_cluster; /* most recently allocated cluster */
+ uint8_t unused2 [0xe];
+ uint16_t signature_3; /* should be 0xaa55 */
+};
+
+int fat_boot_sector_read (FatBootSector** bs, const PedGeometry* geom);
+FatType fat_boot_sector_probe_type (const FatBootSector* bs,
+ const PedGeometry* geom);
+int fat_boot_sector_analyse (FatBootSector* bs, PedFileSystem* fs);
+int fat_boot_sector_set_boot_code (FatBootSector** bs, const PedFileSystem* fs);
+int fat_boot_sector_generate (FatBootSector** bs, const PedFileSystem* fs);
+int fat_boot_sector_write (const FatBootSector* bs, PedFileSystem* fs);
+
+int fat_info_sector_read (FatInfoSector** is, const PedFileSystem* fs);
+int fat_info_sector_generate (FatInfoSector** is, const PedFileSystem* fs);
+int fat_info_sector_write (const FatInfoSector* is, PedFileSystem* fs);
+
+#endif /* PED_FAT_BOOTSECTOR_H */
diff --git a/libparted/fs/r/fat/calc.c b/libparted/fs/r/fat/calc.c
new file mode 100644
index 0000000..4ba1030
--- /dev/null
+++ b/libparted/fs/r/fat/calc.c
@@ -0,0 +1,433 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+
+#ifndef DISCOVER_ONLY
+
+/* returns the minimum size of clusters for a given file system type */
+PedSector _GL_ATTRIBUTE_CONST
+fat_min_cluster_size (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12: return 1;
+ case FAT_TYPE_FAT16: return 1024/512;
+ case FAT_TYPE_FAT32: return 4096/512;
+ }
+ return 0;
+}
+
+static PedSector _GL_ATTRIBUTE_CONST
+_smallest_power2_over (PedSector ceiling)
+{
+ PedSector result = 1;
+
+ while (result < ceiling)
+ result *= 2;
+
+ return result;
+}
+
+/* returns the minimum size of clusters for a given file system type */
+PedSector _GL_ATTRIBUTE_CONST
+fat_recommend_min_cluster_size (FatType fat_type, PedSector size) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12: return 1;
+ case FAT_TYPE_FAT16: return fat_min_cluster_size(fat_type);
+ case FAT_TYPE_FAT32:
+ return PED_MAX(_smallest_power2_over(size
+ / MAX_FAT32_CLUSTERS),
+ fat_min_cluster_size (fat_type));
+ }
+ return 0;
+}
+
+/* returns the maxmimum size of clusters for a given file system type */
+PedSector _GL_ATTRIBUTE_CONST
+fat_max_cluster_size (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12: return 1; /* dunno... who cares? */
+ case FAT_TYPE_FAT16: return 65536/512;
+ case FAT_TYPE_FAT32: return 65536/512;
+ }
+ return 0;
+}
+
+/* returns the minimum number of clusters for a given file system type */
+FatCluster _GL_ATTRIBUTE_CONST
+fat_min_cluster_count (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12:
+ case FAT_TYPE_FAT16:
+ return fat_max_cluster_count (fat_type) / 2;
+
+ case FAT_TYPE_FAT32: return 0xfff0;
+ }
+ return 0;
+}
+
+/* returns the maximum number of clusters for a given file system type */
+FatCluster _GL_ATTRIBUTE_CONST
+fat_max_cluster_count (FatType fat_type) {
+ switch (fat_type) {
+ case FAT_TYPE_FAT12: return 0xff0;
+ case FAT_TYPE_FAT16: return 0xfff0;
+ case FAT_TYPE_FAT32: return 0x0ffffff0;
+ }
+ return 0;
+}
+
+/* what is this supposed to be? What drugs are M$ on? (Can I have some? :-) */
+PedSector _GL_ATTRIBUTE_CONST
+fat_min_reserved_sector_count (FatType fat_type)
+{
+ return (fat_type == FAT_TYPE_FAT32) ? 32 : 1;
+}
+
+int
+fat_check_resize_geometry (const PedFileSystem* fs,
+ const PedGeometry* geom,
+ PedSector new_cluster_sectors,
+ FatCluster new_cluster_count)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector free_space;
+ PedSector min_free_space;
+ PedSector total_space;
+ PedSector new_total_space;
+ PedSector dir_space;
+
+ PED_ASSERT (geom != NULL);
+
+ dir_space = fs_info->total_dir_clusters * fs_info->cluster_sectors;
+ free_space = fs_info->fat->free_cluster_count
+ * fs_info->cluster_sectors;
+ total_space = fs_info->fat->cluster_count * fs_info->cluster_sectors;
+ new_total_space = new_cluster_count * new_cluster_sectors;
+ min_free_space = total_space - new_total_space + dir_space;
+
+ PED_ASSERT (new_cluster_count
+ <= fat_max_cluster_count (FAT_TYPE_FAT32));
+
+ if (free_space < min_free_space) {
+ char* needed = ped_unit_format (geom->dev, min_free_space);
+ char* have = ped_unit_format (geom->dev, free_space);
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("You need %s of free disk space to shrink this "
+ "partition to this size. Currently, only %s is "
+ "free."),
+ needed, have);
+ free (needed);
+ free (have);
+ return 0;
+ }
+
+ return 1;
+}
+
+
+/******************************************************************************/
+
+/* DO NOT EDIT THIS ALGORITHM!
+ * As far as I can tell, this is the same algorithm used by Microsoft to
+ * calculate the size of the file allocaion tables, and the number of clusters.
+ * I have not verified this by dissassembling Microsoft code - I came to this
+ * conclusion by empirical analysis (i.e. trial and error - this was HORRIBLE).
+ *
+ * If you think this code makes no sense, then you are right. I will restrain
+ * the urge to inflict serious bodily harm on Microsoft people.
+ */
+
+static int
+entries_per_sector (FatType fat_type)
+{
+ switch (fat_type) {
+ case FAT_TYPE_FAT12:
+ return 512 * 3 / 2;
+ case FAT_TYPE_FAT16:
+ return 512 / 2;
+ case FAT_TYPE_FAT32:
+ return 512 / 4;
+ }
+ return 0;
+}
+
+static int
+calc_sizes (PedSector size, PedSector align, FatType fat_type,
+ PedSector root_dir_sectors, PedSector cluster_sectors,
+ FatCluster* out_cluster_count, PedSector* out_fat_size)
+{
+ PedSector data_fat_space; /* space available to clusters + FAT */
+ PedSector fat_space; /* space taken by each FAT */
+ PedSector cluster_space; /* space taken by clusters */
+ FatCluster cluster_count;
+ int i;
+
+ PED_ASSERT (out_cluster_count != NULL);
+ PED_ASSERT (out_fat_size != NULL);
+
+ data_fat_space = size - fat_min_reserved_sector_count (fat_type)
+ - align;
+ if (fat_type == FAT_TYPE_FAT16)
+ data_fat_space -= root_dir_sectors;
+
+ fat_space = 0;
+ for (i = 0; i < 2; i++) {
+ if (fat_type == FAT_TYPE_FAT32)
+ cluster_space = data_fat_space - fat_space;
+ else
+ cluster_space = data_fat_space - 2 * fat_space;
+
+ cluster_count = cluster_space / cluster_sectors;
+ fat_space = ped_div_round_up (cluster_count + 2,
+ entries_per_sector (fat_type));
+ }
+
+ cluster_space = data_fat_space - 2 * fat_space;
+ cluster_count = cluster_space / cluster_sectors;
+
+ /* looks like this should be part of the loop condition?
+ * Need to build the Big Table TM again to check
+ */
+ if (fat_space < ped_div_round_up (cluster_count + 2,
+ entries_per_sector (fat_type))) {
+ fat_space = ped_div_round_up (cluster_count + 2,
+ entries_per_sector (fat_type));
+ }
+
+ if (cluster_count > fat_max_cluster_count (fat_type)
+ || cluster_count < fat_min_cluster_count (fat_type))
+ return 0;
+
+ *out_cluster_count = cluster_count;
+ *out_fat_size = fat_space;
+
+ return 1;
+}
+
+/****************************************************************************/
+
+int
+fat_calc_sizes (PedSector size, PedSector align, FatType fat_type,
+ PedSector root_dir_sectors,
+ PedSector* out_cluster_sectors, FatCluster* out_cluster_count,
+ PedSector* out_fat_size)
+{
+ PedSector cluster_sectors;
+
+ PED_ASSERT (out_cluster_sectors != NULL);
+ PED_ASSERT (out_cluster_count != NULL);
+ PED_ASSERT (out_fat_size != NULL);
+
+ for (cluster_sectors = fat_recommend_min_cluster_size (fat_type, size);
+ cluster_sectors <= fat_max_cluster_size (fat_type);
+ cluster_sectors *= 2) {
+ if (calc_sizes (size, align, fat_type, root_dir_sectors,
+ cluster_sectors,
+ out_cluster_count, out_fat_size)) {
+ *out_cluster_sectors = cluster_sectors;
+ return 1;
+ }
+ }
+
+ for (cluster_sectors = fat_recommend_min_cluster_size (fat_type, size);
+ cluster_sectors >= fat_min_cluster_size (fat_type);
+ cluster_sectors /= 2) {
+ if (calc_sizes (size, align, fat_type, root_dir_sectors,
+ cluster_sectors,
+ out_cluster_count, out_fat_size)) {
+ *out_cluster_sectors = cluster_sectors;
+ return 1;
+ }
+ }
+
+ /* only make the cluster size really small (<4k) if a bigger one is
+ * isn't possible. Windows never makes FS's like this, but it
+ * seems to work... (do more tests!)
+ */
+ for (cluster_sectors = 4; cluster_sectors > 0; cluster_sectors /= 2) {
+ if (calc_sizes (size, align, fat_type, root_dir_sectors,
+ cluster_sectors,
+ out_cluster_count, out_fat_size)) {
+ *out_cluster_sectors = cluster_sectors;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+/* Same as fat_calc_sizes, except it only attempts to match a particular
+ * cluster size. This is useful, because the FAT resizer can only shrink the
+ * cluster size.
+ */
+int
+fat_calc_resize_sizes (
+ const PedGeometry* geom,
+ PedSector align,
+ FatType fat_type,
+ PedSector root_dir_sectors,
+ PedSector cluster_sectors,
+ PedSector* out_cluster_sectors,
+ FatCluster* out_cluster_count,
+ PedSector* out_fat_size)
+{
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (out_cluster_sectors != NULL);
+ PED_ASSERT (out_cluster_count != NULL);
+ PED_ASSERT (out_fat_size != NULL);
+
+/* libparted can only reduce the cluster size at this point */
+ for (*out_cluster_sectors = cluster_sectors;
+ *out_cluster_sectors >= fat_min_cluster_size (fat_type);
+ *out_cluster_sectors /= 2) {
+ if (calc_sizes (geom->length, align, fat_type, root_dir_sectors,
+ *out_cluster_sectors,
+ out_cluster_count, out_fat_size))
+ return 1;
+ }
+ return 0;
+}
+
+/* Calculates the number of sectors needed to be added to cluster_offset,
+ to make the cluster on the new file system match up with the ones
+ on the old file system.
+ However, some space is reserved by fat_calc_resize_sizes() and
+ friends, to allow room for this space. If too much of this space is left
+ over, everyone will complain, so we have to be greedy, and use it all up...
+ */
+PedSector _GL_ATTRIBUTE_PURE
+fat_calc_align_sectors (const PedFileSystem* new_fs,
+ const PedFileSystem* old_fs)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs);
+ PedSector raw_old_meta_data_end;
+ PedSector new_meta_data_size;
+ PedSector min_new_meta_data_end;
+ PedSector new_data_size;
+ PedSector new_clusters_size;
+ PedSector align;
+
+ new_meta_data_size
+ = fat_min_reserved_sector_count (new_fs_info->fat_type)
+ + new_fs_info->fat_sectors * 2;
+
+ if (new_fs_info->fat_type == FAT_TYPE_FAT16)
+ new_meta_data_size += new_fs_info->root_dir_sector_count;
+
+ raw_old_meta_data_end = old_fs->geom->start
+ + old_fs_info->cluster_offset;
+
+ min_new_meta_data_end = new_fs->geom->start + new_meta_data_size;
+
+ if (raw_old_meta_data_end > min_new_meta_data_end)
+ align = (raw_old_meta_data_end - min_new_meta_data_end)
+ % new_fs_info->cluster_sectors;
+ else
+ align = (new_fs_info->cluster_sectors
+ - ( (min_new_meta_data_end - raw_old_meta_data_end)
+ % new_fs_info->cluster_sectors ))
+ % new_fs_info->cluster_sectors;
+
+ new_data_size = new_fs->geom->length - new_meta_data_size;
+ new_clusters_size = new_fs_info->cluster_count
+ * new_fs_info->cluster_sectors;
+
+ while (new_clusters_size + align + new_fs_info->cluster_sectors
+ <= new_data_size)
+ align += new_fs_info->cluster_sectors;
+
+ return align;
+}
+
+int _GL_ATTRIBUTE_PURE
+fat_is_sector_in_clusters (const PedFileSystem* fs, PedSector sector)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ return sector >= fs_info->cluster_offset
+ && sector < fs_info->cluster_offset
+ + fs_info->cluster_sectors * fs_info->cluster_count;
+}
+
+FatFragment _GL_ATTRIBUTE_PURE
+fat_cluster_to_frag (const PedFileSystem* fs, FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2);
+
+ return (cluster - 2) * fs_info->cluster_frags;
+}
+
+FatCluster _GL_ATTRIBUTE_PURE
+fat_frag_to_cluster (const PedFileSystem* fs, FatFragment frag)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (frag >= 0 && frag < fs_info->frag_count);
+
+ return frag / fs_info->cluster_frags + 2;
+}
+
+PedSector _GL_ATTRIBUTE_PURE
+fat_frag_to_sector (const PedFileSystem* fs, FatFragment frag)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (frag >= 0 && frag < fs_info->frag_count);
+
+ return frag * fs_info->frag_sectors + fs_info->cluster_offset;
+}
+
+FatFragment _GL_ATTRIBUTE_PURE
+fat_sector_to_frag (const PedFileSystem* fs, PedSector sector)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (sector >= fs_info->cluster_offset);
+
+ return (sector - fs_info->cluster_offset) / fs_info->frag_sectors;
+}
+
+PedSector _GL_ATTRIBUTE_PURE
+fat_cluster_to_sector (const PedFileSystem* fs, FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2);
+
+ return (cluster - 2) * fs_info->cluster_sectors
+ + fs_info->cluster_offset;
+}
+
+FatCluster _GL_ATTRIBUTE_PURE
+fat_sector_to_cluster (const PedFileSystem* fs, PedSector sector)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (sector >= fs_info->cluster_offset);
+
+ return (sector - fs_info->cluster_offset) / fs_info->cluster_sectors
+ + 2;
+}
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/calc.h b/libparted/fs/r/fat/calc.h
new file mode 100644
index 0000000..d4884c1
--- /dev/null
+++ b/libparted/fs/r/fat/calc.h
@@ -0,0 +1,77 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_CALC_H
+#define PED_FAT_CALC_H
+
+extern PedSector fat_min_cluster_size (FatType fat_type);
+extern PedSector fat_max_cluster_size (FatType fat_type);
+extern FatCluster fat_min_cluster_count (FatType fat_type);
+extern FatCluster fat_max_cluster_count (FatType fat_type);
+
+extern PedSector fat_min_reserved_sector_count (FatType fat_type);
+
+extern int fat_check_resize_geometry (const PedFileSystem* fs,
+ const PedGeometry* geom,
+ PedSector new_cluster_sectors,
+ FatCluster new_cluster_count);
+
+extern int fat_calc_sizes (PedSector size,
+ PedSector align,
+ FatType fat_type,
+ PedSector root_dir_sectors,
+ PedSector* out_cluster_sectors,
+ FatCluster* out_cluster_count,
+ PedSector* out_fat_size);
+
+extern int fat_calc_resize_sizes (const PedGeometry* geom,
+ PedSector align,
+ FatType fat_type,
+ PedSector root_dir_sectors,
+ PedSector cluster_sectors,
+ PedSector* out_cluster_sectors,
+ FatCluster* out_cluster_count,
+ PedSector* out_fat_size);
+
+extern PedSector
+fat_calc_align_sectors (const PedFileSystem* new_fs,
+ const PedFileSystem* old_fs);
+
+extern int
+fat_is_sector_in_clusters (const PedFileSystem* fs, PedSector sector);
+
+extern FatFragment
+fat_cluster_to_frag (const PedFileSystem* fs, FatCluster cluster);
+
+extern FatCluster
+fat_frag_to_cluster (const PedFileSystem* fs, FatFragment frag);
+
+extern PedSector
+fat_frag_to_sector (const PedFileSystem* fs, FatFragment frag);
+
+extern FatFragment
+fat_sector_to_frag (const PedFileSystem* fs, PedSector sector);
+
+extern PedSector
+fat_cluster_to_sector (const PedFileSystem* fs, FatCluster cluster);
+
+extern FatCluster
+fat_sector_to_cluster (const PedFileSystem* fs, PedSector sector);
+
+#endif /* PED_FAT_CALC_H */
diff --git a/libparted/fs/r/fat/clstdup.c b/libparted/fs/r/fat/clstdup.c
new file mode 100644
index 0000000..6a3054f
--- /dev/null
+++ b/libparted/fs/r/fat/clstdup.c
@@ -0,0 +1,423 @@
+/*
+ libparted
+ Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <string.h>
+
+#include "fat.h"
+
+#ifndef DISCOVER_ONLY
+
+static int
+needs_duplicating (const FatOpContext* ctx, FatFragment frag)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatCluster cluster = fat_frag_to_cluster (ctx->old_fs, frag);
+ FatClusterFlag flag;
+
+ PED_ASSERT (cluster >= 2 && cluster < old_fs_info->cluster_count + 2);
+
+ flag = fat_get_fragment_flag (ctx->old_fs, frag);
+ switch (flag) {
+ case FAT_FLAG_FREE:
+ return 0;
+
+ case FAT_FLAG_DIRECTORY:
+ return 1;
+
+ case FAT_FLAG_FILE:
+ return fat_op_context_map_static_fragment (ctx, frag) == -1;
+
+ case FAT_FLAG_BAD:
+ return 0;
+ }
+
+ return 0;
+}
+
+static int
+search_next_fragment (FatOpContext* ctx)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs);
+
+ for (; ctx->buffer_offset < fs_info->frag_count; ctx->buffer_offset++) {
+ if (needs_duplicating (ctx, ctx->buffer_offset))
+ return 1;
+ }
+ return 0; /* all done! */
+}
+
+static int
+read_marked_fragments (FatOpContext* ctx, FatFragment length)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs);
+ int status;
+ FatFragment i;
+
+ ped_exception_fetch_all ();
+ status = fat_read_fragments (ctx->old_fs, fs_info->buffer,
+ ctx->buffer_offset, length);
+ ped_exception_leave_all ();
+ if (status)
+ return 1;
+
+ ped_exception_catch ();
+
+/* something bad happened, so read fragments one by one. (The error may
+ have occurred on an unused fragment: who cares) */
+ for (i = 0; i < length; i++) {
+ if (ctx->buffer_map [i]) {
+ if (!fat_read_fragment (ctx->old_fs,
+ fs_info->buffer + i * fs_info->frag_size,
+ ctx->buffer_offset + i))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+fetch_fragments (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatFragment fetch_length = 0;
+ FatFragment frag;
+
+ for (frag = 0; frag < ctx->buffer_frags; frag++)
+ ctx->buffer_map [frag] = -1;
+
+ for (frag = 0;
+ frag < ctx->buffer_frags
+ && ctx->buffer_offset + frag < old_fs_info->frag_count;
+ frag++) {
+ if (needs_duplicating (ctx, ctx->buffer_offset + frag)) {
+ ctx->buffer_map [frag] = 1;
+ fetch_length = frag + 1;
+ }
+ }
+
+ if (!read_marked_fragments (ctx, fetch_length))
+ return 0;
+
+ return 1;
+}
+
+/*****************************************************************************
+ * here starts the write code. All assumes that ctx->buffer_map [first] and
+ * ctx->buffer_map [last] are occupied by fragments that need to be duplicated.
+ *****************************************************************************/
+
+/* finds the first fragment that is not going to get overwritten (that needs to
+ get read in) */
+static FatFragment _GL_ATTRIBUTE_PURE
+get_first_underlay (const FatOpContext* ctx, int first, int last)
+{
+ int old;
+ FatFragment new;
+
+ PED_ASSERT (first <= last);
+
+ new = ctx->buffer_map [first];
+ for (old = first + 1; old <= last; old++) {
+ if (ctx->buffer_map [old] == -1)
+ continue;
+ new++;
+ if (ctx->buffer_map [old] != new)
+ return new;
+ }
+ return -1;
+}
+
+/* finds the last fragment that is not going to get overwritten (that needs to
+ get read in) */
+static FatFragment _GL_ATTRIBUTE_PURE
+get_last_underlay (const FatOpContext* ctx, int first, int last)
+{
+ int old;
+ FatFragment new;
+
+ PED_ASSERT (first <= last);
+
+ new = ctx->buffer_map [last];
+ for (old = last - 1; old >= first; old--) {
+ if (ctx->buffer_map [old] == -1)
+ continue;
+ new--;
+ if (ctx->buffer_map [old] != new)
+ return new;
+ }
+ return -1;
+}
+
+/* "underlay" refers to the "static" fragments, that remain unchanged.
+ * when writing large chunks at a time, we don't want to clobber these,
+ * so we read them in, and write them back again. MUCH quicker that way.
+ */
+static int
+quick_group_write_read_underlay (FatOpContext* ctx, int first, int last)
+{
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatFragment first_underlay;
+ FatFragment last_underlay;
+ FatFragment underlay_length;
+
+ PED_ASSERT (first <= last);
+
+ first_underlay = get_first_underlay (ctx, first, last);
+ if (first_underlay == -1)
+ return 1;
+ last_underlay = get_last_underlay (ctx, first, last);
+
+ PED_ASSERT (first_underlay <= last_underlay);
+
+ underlay_length = last_underlay - first_underlay + 1;
+ if (!fat_read_fragments (ctx->new_fs,
+ new_fs_info->buffer
+ + (first_underlay - ctx->buffer_map [first])
+ * new_fs_info->frag_size,
+ first_underlay,
+ underlay_length))
+ return 0;
+ return 1;
+}
+
+/* quick_group_write() makes no attempt to recover from errors - just
+ * does things fast. If there is an error, slow_group_write() is
+ * called.
+ * Note: we do syncing writes, to make sure there isn't any
+ * error writing out. It's rather difficult recovering from errors
+ * further on.
+ */
+static int
+quick_group_write (FatOpContext* ctx, int first, int last)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ int active_length;
+ int i;
+ int offset;
+
+ PED_ASSERT (first <= last);
+
+ ped_exception_fetch_all ();
+ if (!quick_group_write_read_underlay (ctx, first, last))
+ goto error;
+
+ for (i = first; i <= last; i++) {
+ if (ctx->buffer_map [i] == -1)
+ continue;
+
+ offset = ctx->buffer_map [i] - ctx->buffer_map [first];
+ memcpy (new_fs_info->buffer + offset * new_fs_info->frag_size,
+ old_fs_info->buffer + i * new_fs_info->frag_size,
+ new_fs_info->frag_size);
+ }
+
+ active_length = ctx->buffer_map [last] - ctx->buffer_map [first] + 1;
+ if (!fat_write_sync_fragments (ctx->new_fs, new_fs_info->buffer,
+ ctx->buffer_map [first], active_length))
+ goto error;
+
+ ped_exception_leave_all ();
+ return 1;
+
+error:
+ ped_exception_catch ();
+ ped_exception_leave_all ();
+ return 0;
+}
+
+/* Writes fragments out, one at a time, avoiding errors on redundant writes
+ * on damaged parts of the disk we already know about. If there's an error
+ * on one of the required fragments, it gets marked as bad, and a replacement
+ * is found.
+ */
+static int
+slow_group_write (FatOpContext* ctx, int first, int last)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ int i;
+
+ PED_ASSERT (first <= last);
+
+ for (i = first; i <= last; i++) {
+ if (ctx->buffer_map [i] == -1)
+ continue;
+
+ while (!fat_write_sync_fragment (ctx->new_fs,
+ old_fs_info->buffer + i * old_fs_info->frag_size,
+ ctx->buffer_map [i])) {
+ fat_table_set_bad (new_fs_info->fat,
+ ctx->buffer_map [i]);
+ ctx->buffer_map [i] = fat_table_alloc_cluster
+ (new_fs_info->fat);
+ if (ctx->buffer_map [i] == 0)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+update_remap (FatOpContext* ctx, int first, int last)
+{
+ int i;
+
+ PED_ASSERT (first <= last);
+
+ for (i = first; i <= last; i++) {
+ if (ctx->buffer_map [i] == -1)
+ continue;
+ ctx->remap [ctx->buffer_offset + i] = ctx->buffer_map [i];
+ }
+
+ return 1;
+}
+
+static int
+group_write (FatOpContext* ctx, int first, int last)
+{
+ PED_ASSERT (first <= last);
+
+ if (!quick_group_write (ctx, first, last)) {
+ if (!slow_group_write (ctx, first, last))
+ return 0;
+ }
+ if (!update_remap (ctx, first, last))
+ return 0;
+ return 1;
+}
+
+/* assumes fragment size and new_fs's cluster size are equal */
+static int
+write_fragments (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ int group_start;
+ int group_end = -1; /* shut gcc up! */
+ FatFragment mapped_length;
+ FatFragment i;
+ FatCluster new_cluster;
+
+ PED_ASSERT (ctx->buffer_offset < old_fs_info->frag_count);
+
+ group_start = -1;
+ for (i = 0; i < ctx->buffer_frags; i++) {
+ if (ctx->buffer_map [i] == -1)
+ continue;
+
+ ctx->frags_duped++;
+
+ new_cluster = fat_table_alloc_cluster (new_fs_info->fat);
+ if (!new_cluster)
+ return 0;
+ fat_table_set_eof (new_fs_info->fat, new_cluster);
+ ctx->buffer_map [i] = fat_cluster_to_frag (ctx->new_fs,
+ new_cluster);
+
+ if (group_start == -1)
+ group_start = group_end = i;
+
+ PED_ASSERT (ctx->buffer_map [i]
+ >= ctx->buffer_map [group_start]);
+
+ mapped_length = ctx->buffer_map [i]
+ - ctx->buffer_map [group_start] + 1;
+ if (mapped_length <= ctx->buffer_frags) {
+ group_end = i;
+ } else {
+ /* ran out of room in the buffer, so write this group,
+ * and start a new one...
+ */
+ if (!group_write (ctx, group_start, group_end))
+ return 0;
+ group_start = group_end = i;
+ }
+ }
+
+ PED_ASSERT (group_start != -1);
+
+ if (!group_write (ctx, group_start, group_end))
+ return 0;
+ return 1;
+}
+
+/* default all fragments to unmoved
+ */
+static void
+init_remap (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatFragment i;
+
+ for (i = 0; i < old_fs_info->frag_count; i++)
+ ctx->remap[i] = fat_op_context_map_static_fragment (ctx, i);
+}
+
+static FatFragment
+count_frags_to_dup (FatOpContext* ctx)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatFragment i;
+ FatFragment total;
+
+ total = 0;
+
+ for (i = 0; i < fs_info->frag_count; i++) {
+ if (needs_duplicating (ctx, i))
+ total++;
+ }
+
+ return total;
+}
+
+/* duplicates unreachable file clusters, and all directory clusters
+ */
+int
+fat_duplicate_clusters (FatOpContext* ctx, PedTimer* timer)
+{
+ FatFragment total_frags_to_dup;
+
+ init_remap (ctx);
+ total_frags_to_dup = count_frags_to_dup (ctx);
+
+ ped_timer_reset (timer);
+ ped_timer_set_state_name (timer, "moving data");
+
+ ctx->buffer_offset = 0;
+ ctx->frags_duped = 0;
+ while (search_next_fragment (ctx)) {
+ ped_timer_update (
+ timer, 1.0 * ctx->frags_duped / total_frags_to_dup);
+
+ if (!fetch_fragments (ctx))
+ return 0;
+ if (!write_fragments (ctx))
+ return 0;
+ ctx->buffer_offset += ctx->buffer_frags;
+ }
+
+ ped_timer_update (timer, 1.0);
+ return 1;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/clstdup.h b/libparted/fs/r/fat/clstdup.h
new file mode 100644
index 0000000..23e51b4
--- /dev/null
+++ b/libparted/fs/r/fat/clstdup.h
@@ -0,0 +1,28 @@
+/*
+ libparted
+ Copyright (C) 1999, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_CLSTDUP_H_INCLUDED
+#define PED_FAT_CLSTDUP_H_INCLUDED
+
+#include "context.h"
+
+/* the big important one :-) */
+extern int fat_duplicate_clusters (FatOpContext* ctx, PedTimer* timer);
+
+#endif /* PED_FAT_CLSTDUP_H_INCLUDED */
diff --git a/libparted/fs/r/fat/context.c b/libparted/fs/r/fat/context.c
new file mode 100644
index 0000000..c782323
--- /dev/null
+++ b/libparted/fs/r/fat/context.c
@@ -0,0 +1,261 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <string.h>
+
+#include "fat.h"
+
+#ifndef DISCOVER_ONLY
+
+/* Note: this deals with file system start and end sectors, even if the physical
+ * devices are different (eg for fat_copy()) Perhaps this is a hack, but it
+ * works ;-)
+ */
+static int
+calc_deltas (FatOpContext* ctx)
+{
+ PedFileSystem* old_fs = ctx->old_fs;
+ PedFileSystem* new_fs = ctx->new_fs;
+ FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs);
+ PedSector old_cluster_ofs;
+ PedSector new_cluster_ofs;
+ PedSector sector_delta;
+
+ old_cluster_ofs = old_fs->geom->start + old_fs_info->cluster_offset;
+ new_cluster_ofs = new_fs->geom->start + new_fs_info->cluster_offset;
+
+ if (new_cluster_ofs > old_cluster_ofs) {
+ ctx->start_move_dir = FAT_DIR_FORWARD;
+ sector_delta = new_cluster_ofs - old_cluster_ofs;
+ } else {
+ ctx->start_move_dir = FAT_DIR_BACKWARD;
+ sector_delta = old_cluster_ofs - new_cluster_ofs;
+ }
+
+ if (sector_delta % new_fs_info->cluster_sectors) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL,
+ _("Cluster start delta = %d, which is not a multiple "
+ "of the cluster size %d."),
+ (int) sector_delta,
+ (int) new_fs_info->cluster_sectors);
+ return 0;
+ }
+
+ ctx->start_move_delta = sector_delta / ctx->frag_sectors;
+
+#ifdef PED_VERBOSE
+ printf ("Start move delta is: %d %s.\n",
+ (int) ctx->start_move_delta,
+ (ctx->start_move_dir == FAT_DIR_FORWARD)?
+ "forwards" : "backwards");
+#endif
+
+ return 1;
+}
+
+FatOpContext*
+fat_op_context_new (PedFileSystem* new_fs, PedFileSystem* old_fs)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (new_fs);
+ FatOpContext* ctx;
+
+ ctx = (FatOpContext*) ped_malloc (sizeof (FatOpContext));
+ if (!ctx)
+ goto error;
+
+ ctx->frag_sectors = PED_MIN (old_fs_info->cluster_sectors,
+ new_fs_info->cluster_sectors);
+ if (!fat_set_frag_sectors (new_fs, ctx->frag_sectors))
+ goto error;
+ if (!fat_set_frag_sectors (old_fs, ctx->frag_sectors))
+ goto error;
+
+ ctx->buffer_frags = old_fs_info->buffer_sectors / ctx->frag_sectors;
+ ctx->buffer_map = (FatFragment*) ped_malloc (sizeof (FatFragment)
+ * ctx->buffer_frags);
+ if (!ctx->buffer_map)
+ goto error_free_ctx;
+
+ ctx->remap = (FatFragment*) ped_malloc (sizeof (FatFragment)
+ * old_fs_info->frag_count);
+ if (!ctx->remap)
+ goto error_free_buffer_map;
+
+ ctx->new_fs = new_fs;
+ ctx->old_fs = old_fs;
+ if (!calc_deltas (ctx))
+ goto error_free_buffer_map;
+
+ return ctx;
+
+error_free_buffer_map:
+ free (ctx->buffer_map);
+error_free_ctx:
+ free (ctx);
+error:
+ return NULL;
+}
+
+void
+fat_op_context_destroy (FatOpContext* ctx)
+{
+ free (ctx->buffer_map);
+ free (ctx->remap);
+ free (ctx);
+}
+
+FatFragment _GL_ATTRIBUTE_PURE
+fat_op_context_map_static_fragment (const FatOpContext* ctx, FatFragment frag)
+{
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatFragment result;
+
+ if (ctx->new_fs->geom->dev != ctx->old_fs->geom->dev)
+ return -1;
+
+ if (ctx->start_move_dir == FAT_DIR_FORWARD) {
+ if (frag < ctx->start_move_delta)
+ return -1;
+ result = frag - ctx->start_move_delta;
+ } else {
+ result = frag + ctx->start_move_delta;
+ }
+
+ if (result >= new_fs_info->frag_count)
+ return -1;
+
+ return result;
+}
+
+FatCluster
+fat_op_context_map_static_cluster (const FatOpContext* ctx, FatCluster clst)
+{
+ FatFragment mapped_frag;
+
+ mapped_frag = fat_op_context_map_static_fragment (ctx,
+ fat_cluster_to_frag (ctx->old_fs, clst));
+ if (mapped_frag != -1)
+ return fat_frag_to_cluster (ctx->new_fs, mapped_frag);
+ else
+ return 0;
+}
+
+FatFragment _GL_ATTRIBUTE_PURE
+fat_op_context_map_fragment (const FatOpContext* ctx, FatFragment frag)
+{
+ return ctx->remap [frag];
+}
+
+FatCluster
+fat_op_context_map_cluster (const FatOpContext* ctx, FatCluster clst)
+{
+ FatFragment mapped_frag;
+
+ mapped_frag = fat_op_context_map_fragment (ctx,
+ fat_cluster_to_frag (ctx->old_fs, clst));
+ if (mapped_frag != -1)
+ return fat_frag_to_cluster (ctx->new_fs, mapped_frag);
+ else
+ return 0;
+}
+
+/* This function sets the initial fat for the new resized file system.
+ This is in *NO WAY* a proper FAT table - all it does is:
+ a) mark bad clusters as bad.
+ b) mark used clusters (that is, clusters from the original FS that are
+ reachable from the resized one). Marks as EOF (i.e. used, end of
+ file chain).
+ c) mark original file system metadata as EOF (i.e. used), to prevent
+ it from being clobbered. This will leave the original file system
+ intact, until the partition table is modified, if the start of
+ the partition is moved.
+
+ The FATs are rebuilt *properly* after cluster relocation. This here is
+ only to mark clusters as used, so when cluster relocation occurs, clusters
+ aren't relocated on top of ones marked in a, b or c.
+*/
+int
+fat_op_context_create_initial_fat (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatCluster clst;
+ FatCluster new_clst;
+ PedSector sect;
+ PedSector new_sect;
+ FatFragment frag;
+ FatFragment new_frag;
+ FatClusterFlag frag_flag;
+
+ new_fs_info->fat = fat_table_new (
+ new_fs_info->fat_type,
+ new_fs_info->fat_sectors * 512
+ / fat_table_entry_size (new_fs_info->fat_type));
+ if (!new_fs_info->fat)
+ return 0;
+
+ if (!fat_table_set_cluster_count (new_fs_info->fat,
+ new_fs_info->cluster_count))
+ return 0;
+
+/* mark bad and used clusters */
+ for (frag = 0; frag < old_fs_info->frag_count; frag++) {
+ frag_flag = fat_get_fragment_flag (ctx->old_fs, frag);
+ if (frag_flag == FAT_FLAG_FREE)
+ continue;
+
+ new_frag = fat_op_context_map_static_fragment (ctx, frag);
+ if (new_frag == -1)
+ continue;
+
+ new_clst = fat_frag_to_cluster (ctx->new_fs, new_frag);
+ PED_ASSERT (new_clst != 0);
+
+ if (frag_flag == FAT_FLAG_BAD) {
+ if (!fat_table_set_bad (new_fs_info->fat, new_clst))
+ return 0;
+ } else {
+ if (!fat_table_set_eof (new_fs_info->fat, new_clst))
+ return 0;
+ }
+ }
+
+/* mark metadata regions that map to clusters on the new FS */
+ for (sect = 0; sect < old_fs_info->cluster_offset; sect++) {
+ new_sect = ped_geometry_map (ctx->new_fs->geom,
+ ctx->old_fs->geom, sect);
+ if (new_sect == -1
+ || !fat_is_sector_in_clusters (ctx->new_fs, new_sect))
+ continue;
+
+ clst = fat_sector_to_cluster (ctx->new_fs, new_sect);
+ PED_ASSERT (clst != 0);
+
+ if (!fat_table_set_eof (new_fs_info->fat, clst))
+ return 0;
+ }
+
+ return 1;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/context.h b/libparted/fs/r/fat/context.h
new file mode 100644
index 0000000..9a76a47
--- /dev/null
+++ b/libparted/fs/r/fat/context.h
@@ -0,0 +1,70 @@
+/*
+ libparted
+ Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_CONTEXT_H_INCLUDED
+#define PED_FAT_CONTEXT_H_INCLUDED
+
+#include "count.h"
+
+enum _FatDirection {
+ FAT_DIR_FORWARD,
+ FAT_DIR_BACKWARD
+};
+typedef enum _FatDirection FatDirection;
+
+struct _FatOpContext {
+ PedFileSystem* old_fs;
+ PedFileSystem* new_fs;
+
+ PedSector frag_sectors; /* should equal old_fs and
+ new_fs's frag_sectors */
+
+ FatDirection start_move_dir;
+ FatFragment start_move_delta;
+
+ FatFragment buffer_offset;
+ FatFragment buffer_frags;
+ FatFragment* buffer_map;
+
+ FatFragment frags_duped;
+
+ FatFragment* remap;
+
+ FatCluster new_root_dir [32];
+};
+typedef struct _FatOpContext FatOpContext;
+
+extern FatOpContext* fat_op_context_new (PedFileSystem* new_fs,
+ PedFileSystem* old_fs);
+
+extern void fat_op_context_destroy (FatOpContext* ctx);
+
+extern FatFragment fat_op_context_map_static_fragment (const FatOpContext* ctx,
+ FatFragment frag);
+extern FatCluster fat_op_context_map_static_cluster (const FatOpContext* ctx,
+ FatCluster clst);
+
+extern FatFragment fat_op_context_map_fragment (const FatOpContext* ctx,
+ FatFragment frag);
+extern FatCluster fat_op_context_map_cluster (const FatOpContext* ctx,
+ FatCluster clst);
+
+extern int fat_op_context_create_initial_fat (FatOpContext* ctx);
+
+#endif /* PED_FAT_CONTEXT_H_INCLUDED */
diff --git a/libparted/fs/r/fat/count.c b/libparted/fs/r/fat/count.c
new file mode 100644
index 0000000..e23404b
--- /dev/null
+++ b/libparted/fs/r/fat/count.c
@@ -0,0 +1,319 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+#include "traverse.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DISCOVER_ONLY
+
+/*
+ prints out the sequence of clusters for a given file chain, beginning
+ at start_cluster.
+*/
+#ifdef PED_VERBOSE
+static void
+print_chain (PedFileSystem* fs, FatCluster start)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster clst;
+ int this_row;
+
+ this_row = 0;
+ for (clst = start; !fat_table_is_eof (fs_info->fat, clst);
+ clst = fat_table_get (fs_info->fat, clst)) {
+ printf (" %d", (int) clst);
+ if (++this_row == 7) {
+ putchar ('\n');
+ this_row = 0;
+ }
+ }
+ putchar ('\n');
+}
+#endif /* PED_VERBOSE */
+
+static PedSector
+remainder_round_up (PedSector a, PedSector b)
+{
+ PedSector result;
+
+ result = a % b;
+ if (!result)
+ result = b;
+ return result;
+}
+
+/*
+ traverse the FAT for a file/directory, marking each entry's flag
+ to "flag".
+*/
+static int
+flag_traverse_fat (PedFileSystem* fs, const char* chain_name, FatCluster start,
+ FatClusterFlag flag, PedSector size)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster clst;
+ FatCluster prev_clst;
+ int last_cluster_usage;
+ FatCluster chain_length = 0;
+
+ if (fat_table_is_eof (fs_info->fat, start)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Bad directory entry for %s: first cluster is the "
+ "end of file marker."),
+ chain_name)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ for (prev_clst = clst = start; !fat_table_is_eof (fs_info->fat, clst);
+ prev_clst = clst, clst = fat_table_get (fs_info->fat, clst)) {
+ chain_length++;
+ if (!clst) {
+ ped_exception_throw (PED_EXCEPTION_FATAL,
+ PED_EXCEPTION_CANCEL,
+ _("Bad FAT: unterminated chain for %s. You "
+ "should run dosfsck or scandisk."),
+ chain_name);
+ return 0;
+ }
+
+ if (clst >= fs_info->fat->cluster_count + 2) {
+ ped_exception_throw (PED_EXCEPTION_FATAL,
+ PED_EXCEPTION_CANCEL,
+ _("Bad FAT: cluster %d outside file system "
+ "in chain for %s. You should run dosfsck "
+ "or scandisk."),
+ (int) clst, chain_name);
+ return 0;
+ }
+
+ if (fs_info->cluster_info [clst].flag != FAT_FLAG_FREE ) {
+ ped_exception_throw (PED_EXCEPTION_FATAL,
+ PED_EXCEPTION_CANCEL,
+ _("Bad FAT: cluster %d is cross-linked for "
+ "%s. You should run dosfsck or scandisk."),
+ (int) clst, chain_name);
+ return 0;
+ }
+
+ if (flag == FAT_FLAG_DIRECTORY)
+ fs_info->total_dir_clusters++;
+
+ fs_info->cluster_info [clst].flag = flag;
+ fs_info->cluster_info [clst].units_used = 0; /* 0 == 64 */
+ }
+
+ if (size
+ && chain_length
+ != ped_div_round_up (size, fs_info->cluster_sectors)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("%s is %dk, but it has %d clusters (%dk)."),
+ chain_name,
+ (int) size / 2,
+ (int) chain_length,
+ (int) chain_length * fs_info->cluster_sectors / 2)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ last_cluster_usage
+ = ped_div_round_up (64 * remainder_round_up (size,
+ fs_info->cluster_sectors),
+ fs_info->cluster_sectors);
+
+ fs_info->cluster_info [prev_clst].units_used = last_cluster_usage;
+
+ return 1;
+}
+
+/*
+ recursively traverses a directory, flagging all clusters in the process.
+ It frees the traverse_info structure before returning.
+*/
+static int
+flag_traverse_dir (FatTraverseInfo* trav_info) {
+ PedFileSystem* fs = trav_info->fs;
+ FatDirEntry* this_entry;
+ FatTraverseInfo* subdir_trav_info;
+ char file_name [4096];
+ char* file_name_start;
+ FatCluster first_cluster;
+ PedSector size;
+
+ PED_ASSERT (trav_info != NULL);
+
+ strcpy (file_name, trav_info->dir_name);
+ file_name_start = file_name + strlen (file_name);
+
+ while ( (this_entry = fat_traverse_next_dir_entry (trav_info)) ) {
+ if (fat_dir_entry_is_null_term (this_entry))
+ break;
+ if (!fat_dir_entry_has_first_cluster (this_entry, fs))
+ continue;
+ if (this_entry->name [0] == '.')
+ continue; /* skip . and .. entries */
+
+ fat_dir_entry_get_name (this_entry, file_name_start);
+ first_cluster = fat_dir_entry_get_first_cluster(this_entry, fs);
+ size = ped_div_round_up (fat_dir_entry_get_length (this_entry),
+ 512);
+
+#ifdef PED_VERBOSE
+ printf ("%s: ", file_name);
+ print_chain (fs, first_cluster);
+#endif
+
+ if (fat_dir_entry_is_directory (this_entry)) {
+ if (!flag_traverse_fat (fs, file_name, first_cluster,
+ FAT_FLAG_DIRECTORY, size))
+ return 0;
+
+ subdir_trav_info = fat_traverse_directory (trav_info,
+ this_entry);
+ if (!subdir_trav_info)
+ return 0;
+ if (!flag_traverse_dir (subdir_trav_info))
+ return 0;
+ } else if (fat_dir_entry_is_file (this_entry)) {
+ if (!flag_traverse_fat (fs, file_name, first_cluster,
+ FAT_FLAG_FILE, size))
+ return 0;
+ }
+ }
+
+ fat_traverse_complete (trav_info);
+ return 1;
+}
+
+static void
+_mark_bad_clusters (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster cluster;
+
+ for (cluster = 2; cluster < fs_info->cluster_count + 2; cluster++) {
+ if (fat_table_is_bad (fs_info->fat, cluster))
+ fs_info->cluster_info [cluster].flag = FAT_FLAG_BAD;
+ }
+}
+
+/*
+ fills in cluster_info. Each FAT entry (= cluster) is flagged as either
+ FAT_FLAG_FREE, FAT_FLAG_FILE or FAT_FLAG_DIRECTORY.
+
+ Also, the fraction of each cluster (x/64) is recorded
+*/
+int
+fat_collect_cluster_info (PedFileSystem* fs) {
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatTraverseInfo* trav_info;
+
+ /* set all clusters to unused as a default */
+ memset (fs_info->cluster_info, 0, fs_info->fat->cluster_count + 2);
+ fs_info->total_dir_clusters = 0;
+
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ trav_info = fat_traverse_begin (fs, fs_info->root_cluster,
+ "\\");
+ if (!flag_traverse_dir (trav_info))
+ return 0;
+ if (!flag_traverse_fat (fs, "\\", fs_info->root_cluster,
+ FAT_FLAG_DIRECTORY, 0))
+ return 0;
+ } else {
+ trav_info = fat_traverse_begin (fs, FAT_ROOT, "\\");
+ if (!flag_traverse_dir (trav_info))
+ return 0;
+ }
+
+ _mark_bad_clusters (fs);
+ return 1;
+}
+
+FatClusterFlag _GL_ATTRIBUTE_PURE
+fat_get_cluster_flag (PedFileSystem* fs, FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ return fs_info->cluster_info [cluster].flag;
+}
+
+PedSector _GL_ATTRIBUTE_PURE
+fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int fraction;
+
+ if (fs_info->cluster_info [cluster].flag == FAT_FLAG_FREE)
+ return 0;
+
+ fraction = fs_info->cluster_info [cluster].units_used;
+ if (fraction == 0)
+ fraction = 64;
+
+ return fraction * fs_info->cluster_sectors / 64;
+}
+
+FatClusterFlag
+fat_get_fragment_flag (PedFileSystem* fs, FatFragment frag)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster cluster = fat_frag_to_cluster (fs, frag);
+ FatFragment offset = frag % fs_info->cluster_frags;
+ FatFragment last_frag_used;
+ FatClusterFlag flag;
+
+ PED_ASSERT (cluster >= 2 && cluster < fs_info->cluster_count + 2);
+
+ flag = fat_get_cluster_flag (fs, cluster);
+ if (flag != FAT_FLAG_FILE && flag != FAT_FLAG_DIRECTORY)
+ return flag;
+ last_frag_used = (fat_get_cluster_usage (fs, cluster) - 1)
+ / fs_info->frag_sectors;
+ if (offset > last_frag_used)
+ return FAT_FLAG_FREE;
+ else
+ return flag;
+}
+
+int
+fat_is_fragment_active (PedFileSystem* fs, FatFragment frag)
+{
+ switch (fat_get_fragment_flag (fs, frag)) {
+ case FAT_FLAG_FREE:
+ case FAT_FLAG_BAD:
+ return 0;
+
+ case FAT_FLAG_FILE:
+ case FAT_FLAG_DIRECTORY:
+ return 1;
+ }
+ return 0;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/count.h b/libparted/fs/r/fat/count.h
new file mode 100644
index 0000000..bb7d6af
--- /dev/null
+++ b/libparted/fs/r/fat/count.h
@@ -0,0 +1,46 @@
+/*
+ libparted
+ Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef COUNT_H_INCLUDED
+#define COUNT_H_INCLUDED
+
+typedef enum _FatClusterFlag FatClusterFlag;
+typedef struct _FatClusterInfo FatClusterInfo;
+
+enum _FatClusterFlag {
+ FAT_FLAG_FREE=0,
+ FAT_FLAG_FILE=1,
+ FAT_FLAG_DIRECTORY=2,
+ FAT_FLAG_BAD=3
+};
+
+struct __attribute__ ((packed)) _FatClusterInfo {
+ unsigned int units_used:6; /* 1 unit = cluster_size / 64 */
+ FatClusterFlag flag:2;
+};
+
+extern int fat_collect_cluster_info (PedFileSystem *fs);
+extern FatClusterFlag fat_get_cluster_flag (PedFileSystem* fs,
+ FatCluster cluster);
+extern PedSector fat_get_cluster_usage (PedFileSystem* fs, FatCluster cluster);
+extern FatClusterFlag fat_get_fragment_flag (PedFileSystem* fs,
+ FatFragment frag);
+extern int fat_is_fragment_active (PedFileSystem* fs, FatFragment frag);
+
+#endif /* COUNT_H_INCLUDED */
diff --git a/libparted/fs/r/fat/fat.c b/libparted/fs/r/fat/fat.c
new file mode 100644
index 0000000..6583b5b
--- /dev/null
+++ b/libparted/fs/r/fat/fat.c
@@ -0,0 +1,652 @@
+/*
+ libparted
+ Copyright (C) 1998-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <string.h>
+
+#include "fat.h"
+#include "calc.h"
+#include "../../../labels/misc.h"
+
+PedFileSystem*
+fat_alloc (const PedGeometry* geom)
+{
+ PedFileSystem* fs;
+
+ fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem));
+ if (!fs)
+ goto error;
+
+ fs->type_specific = (FatSpecific*) ped_malloc (sizeof (FatSpecific));
+ if (!fs->type_specific)
+ goto error_free_fs;
+ FatSpecific* fs_info = (FatSpecific*) fs->type_specific;
+ fs_info->boot_sector = NULL;
+ fs_info->info_sector = NULL;
+ fs->geom = ped_geometry_duplicate (geom);
+ if (!fs->geom)
+ goto error_free_type_specific;
+
+ fs->checked = 0;
+ return fs;
+
+error_free_type_specific:
+ free (fs->type_specific);
+error_free_fs:
+ free (fs);
+error:
+ return NULL;
+}
+
+/* Requires the boot sector to be analysed */
+int
+fat_alloc_buffers (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ fs_info->buffer_sectors = BUFFER_SIZE;
+ fs_info->buffer = ped_malloc (fs_info->buffer_sectors * 512);
+ if (!fs_info->buffer)
+ goto error;
+
+ fs_info->cluster_info = ped_malloc (fs_info->cluster_count + 2);
+ if (!fs_info->cluster_info)
+ goto error_free_buffer;
+
+ return 1;
+
+error_free_buffer:
+ free (fs_info->buffer);
+error:
+ return 0;
+};
+
+void
+fat_free_buffers (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ free (fs_info->cluster_info);
+ free (fs_info->buffer);
+}
+
+void
+fat_free (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = (FatSpecific*) fs->type_specific;
+ free (fs_info->boot_sector);
+ ped_geometry_destroy (fs->geom);
+ free (fs->type_specific);
+ free (fs);
+}
+
+int
+fat_set_frag_sectors (PedFileSystem* fs, PedSector frag_sectors)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (fs_info->cluster_sectors % frag_sectors == 0
+ && frag_sectors <= fs_info->cluster_sectors);
+
+ fs_info->frag_size = frag_sectors * 512;
+ fs_info->frag_sectors = frag_sectors;
+ fs_info->buffer_frags = fs_info->buffer_sectors / frag_sectors;
+ fs_info->cluster_frags = fs_info->cluster_sectors / frag_sectors;
+ fs_info->frag_count = fs_info->cluster_count * fs_info->cluster_frags;
+
+ return 1;
+}
+
+#ifndef DISCOVER_ONLY
+int
+fat_clobber (PedGeometry* geom)
+{
+ FatBootSector *boot_sector;
+ int ok;
+
+ if (!fat_boot_sector_read (&boot_sector, geom))
+ return 1;
+
+ boot_sector->system_id[0] = 0;
+ boot_sector->boot_sign = 0;
+ if (boot_sector->u.fat16.fat_name[0] == 'F')
+ boot_sector->u.fat16.fat_name[0] = 0;
+ if (boot_sector->u.fat32.fat_name[0] == 'F')
+ boot_sector->u.fat32.fat_name[0] = 0;
+
+ ok = ped_geometry_write (geom, boot_sector, 0, 1);
+ free (boot_sector);
+ return ok;
+}
+
+static int
+_init_fats (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster table_size;
+
+ table_size = fs_info->fat_sectors * 512
+ / fat_table_entry_size (fs_info->fat_type);
+ fs_info->fat = fat_table_new (fs_info->fat_type, table_size);
+ if (!fs_info->fat)
+ goto error;
+
+ if (!fat_table_read (fs_info->fat, fs, 0))
+ goto error_free_fat;
+
+ return 1;
+
+error_free_fat:
+ fat_table_destroy (fs_info->fat);
+error:
+ return 0;
+}
+
+PedFileSystem*
+fat_open (PedGeometry* geom)
+{
+ PedFileSystem* fs;
+ FatSpecific* fs_info;
+
+ fs = fat_alloc (geom);
+ if (!fs)
+ goto error;
+ fs_info = (FatSpecific*) fs->type_specific;
+
+ if (!fat_boot_sector_read (&fs_info->boot_sector, geom))
+ goto error_free_fs;
+ if (!fat_boot_sector_analyse (fs_info->boot_sector, fs))
+ goto error_free_fs;
+ fs->type = (fs_info->fat_type == FAT_TYPE_FAT16)
+ ? &fat16_type
+ : &fat32_type;
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!fat_info_sector_read (&fs_info->info_sector, fs))
+ goto error_free_fs;
+ }
+
+ if (!_init_fats (fs))
+ goto error_free_fs;
+ if (!fat_alloc_buffers (fs))
+ goto error_free_fat_table;
+ if (!fat_collect_cluster_info (fs))
+ goto error_free_buffers;
+
+ return fs;
+
+error_free_buffers:
+ fat_free_buffers (fs);
+error_free_fat_table:
+ fat_table_destroy (fs_info->fat);
+error_free_fs:
+ fat_free (fs);
+error:
+ return NULL;
+}
+
+static int
+fat_root_dir_clear (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ memset (fs_info->buffer, 0, 512 * fs_info->root_dir_sector_count);
+ return ped_geometry_write (fs->geom, fs_info->buffer,
+ fs_info->root_dir_offset,
+ fs_info->root_dir_sector_count);
+}
+
+PedFileSystem*
+fat_create (PedGeometry* geom, FatType fat_type, PedTimer* timer)
+{
+ PedFileSystem* fs;
+ FatSpecific* fs_info;
+ FatCluster table_size;
+
+ fs = fat_alloc (geom);
+ if (!fs)
+ goto error;
+ fs_info = (FatSpecific*) fs->type_specific;
+
+ fs_info->logical_sector_size = 1;
+ fs_info->sectors_per_track = geom->dev->bios_geom.sectors;
+ fs_info->heads = geom->dev->bios_geom.heads;
+ fs_info->sector_count = fs->geom->length;
+ fs_info->fat_table_count = 2;
+/* some initial values, to be changed later */
+ fs_info->root_dir_sector_count = FAT_ROOT_DIR_ENTRY_COUNT
+ / (512 / sizeof (FatDirEntry));
+ fs_info->root_dir_entry_count = FAT_ROOT_DIR_ENTRY_COUNT;
+
+ fs_info->fat_type = fat_type;
+ if (!fat_calc_sizes (fs->geom->length, 0,
+ fs_info->fat_type,
+ fs_info->root_dir_sector_count,
+ &fs_info->cluster_sectors,
+ &fs_info->cluster_count,
+ &fs_info->fat_sectors)) {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Partition too big/small for a %s file system."),
+ (fat_type == FAT_TYPE_FAT16)
+ ? fat16_type.name
+ : fat32_type.name);
+ goto error_free_fs;
+ }
+
+ fs_info->cluster_size = fs_info->cluster_sectors * 512;
+
+ fs_info->fat_offset = fat_min_reserved_sector_count (fs_info->fat_type);
+ fs_info->dir_entries_per_cluster
+ = fs_info->cluster_size / sizeof (FatDirEntry);
+
+ if (fs_info->fat_type == FAT_TYPE_FAT16) {
+ /* FAT16 */
+ fs->type = &fat16_type;
+
+ if (fs_info->cluster_count
+ > fat_max_cluster_count (fs_info->fat_type)) {
+ fs_info->cluster_count
+ = fat_max_cluster_count (fs_info->fat_type);
+ }
+
+ fs_info->root_dir_sector_count
+ = FAT_ROOT_DIR_ENTRY_COUNT
+ / (512 / sizeof (FatDirEntry));
+ fs_info->root_dir_entry_count = FAT_ROOT_DIR_ENTRY_COUNT;
+ fs_info->root_dir_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ fs_info->cluster_offset
+ = fs_info->root_dir_offset
+ + fs_info->root_dir_sector_count;
+ } else {
+ /* FAT32 */
+ fs->type = &fat32_type;
+
+ fs_info->info_sector_offset = 1;
+ fs_info->boot_sector_backup_offset = 6;
+
+ fs_info->root_dir_sector_count = 0;
+ fs_info->root_dir_entry_count = 0;
+ fs_info->root_dir_offset = 0;
+
+ fs_info->cluster_offset
+ = fs_info->fat_offset
+ + fs_info->fat_sectors * fs_info->fat_table_count;
+ }
+
+ table_size = fs_info->fat_sectors * 512
+ / fat_table_entry_size (fs_info->fat_type);
+ fs_info->fat = fat_table_new (fs_info->fat_type, table_size);
+ if (!fs_info->fat)
+ goto error_free_fs;
+ fat_table_set_cluster_count (fs_info->fat, fs_info->cluster_count);
+ if (!fat_alloc_buffers (fs))
+ goto error_free_fat_table;
+
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ fs_info->root_cluster
+ = fat_table_alloc_cluster (fs_info->fat);
+ fat_table_set_eof (fs_info->fat, fs_info->root_cluster);
+ memset (fs_info->buffer, 0, fs_info->cluster_size);
+ if (!fat_write_cluster (fs, fs_info->buffer,
+ fs_info->root_cluster))
+ goto error_free_buffers;
+ }
+
+ fs_info->serial_number = generate_random_uint32 ();
+
+ if (!fat_boot_sector_set_boot_code (&fs_info->boot_sector, fs))
+ goto error_free_buffers;
+ if (!fat_boot_sector_generate (&fs_info->boot_sector, fs))
+ goto error_free_buffers;
+ if (!fat_boot_sector_write (fs_info->boot_sector, fs))
+ goto error_free_buffers;
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!fat_info_sector_generate (&fs_info->info_sector, fs))
+ goto error_free_buffers;
+ if (!fat_info_sector_write (fs_info->info_sector, fs))
+ goto error_free_buffers;
+ }
+
+ if (!fat_table_write_all (fs_info->fat, fs))
+ goto error_free_buffers;
+
+ if (fs_info->fat_type == FAT_TYPE_FAT16) {
+ if (!fat_root_dir_clear (fs))
+ goto error_free_buffers;
+ }
+
+ return fs;
+
+error_free_buffers:
+ fat_free_buffers (fs);
+error_free_fat_table:
+ fat_table_destroy (fs_info->fat);
+error_free_fs:
+ fat_free (fs);
+error:
+ return NULL;
+}
+
+PedFileSystem*
+fat_create_fat16 (PedGeometry* geom, PedTimer* timer)
+{
+ return fat_create (geom, FAT_TYPE_FAT16, timer);
+}
+
+PedFileSystem*
+fat_create_fat32 (PedGeometry* geom, PedTimer* timer)
+{
+ return fat_create (geom, FAT_TYPE_FAT32, timer);
+}
+
+int
+fat_close (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ fat_free_buffers (fs);
+ fat_table_destroy (fs_info->fat);
+ fat_free (fs);
+ return 1;
+}
+
+/* Hack: just resize the file system outside of its boundaries! */
+PedFileSystem*
+fat_copy (const PedFileSystem* fs, PedGeometry* geom, PedTimer* timer)
+{
+ PedFileSystem* new_fs;
+
+ new_fs = ped_file_system_open (fs->geom);
+ if (!new_fs)
+ goto error;
+ if (!ped_file_system_resize (new_fs, geom, timer))
+ goto error_close_new_fs;
+ return new_fs;
+
+error_close_new_fs:
+ ped_file_system_close (new_fs);
+error:
+ return 0;
+}
+
+static int
+_compare_fats (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatTable* table_copy;
+ FatCluster table_size;
+ int i;
+
+ table_size = fs_info->fat_sectors * 512
+ / fat_table_entry_size (fs_info->fat_type);
+
+ table_copy = fat_table_new (fs_info->fat_type, table_size);
+ if (!table_copy)
+ goto error;
+
+ for (i = 1; i < fs_info->fat_table_count; i++) {
+ if (!fat_table_read (table_copy, fs, i))
+ goto error_free_table_copy;
+ if (!fat_table_compare (fs_info->fat, table_copy)) {
+ if (ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The FATs don't match. If you don't know "
+ "what this means, then select cancel, run "
+ "scandisk on the file system, and then come "
+ "back."))
+ != PED_EXCEPTION_IGNORE)
+ goto error_free_table_copy;
+ }
+ }
+
+ fat_table_destroy (table_copy);
+ return 1;
+
+error_free_table_copy:
+ fat_table_destroy (table_copy);
+error:
+ return 0;
+}
+
+int
+fat_check (PedFileSystem* fs, PedTimer* timer)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector cluster_sectors;
+ FatCluster cluster_count;
+ PedSector fat_sectors;
+ PedSector align_sectors;
+ FatCluster info_free_clusters;
+
+ align_sectors = fs_info->fat_offset
+ - fat_min_reserved_sector_count (fs_info->fat_type);
+
+ if (!fat_calc_sizes (fs->geom->length,
+ align_sectors,
+ fs_info->fat_type,
+ fs_info->root_dir_sector_count,
+ &cluster_sectors,
+ &cluster_count,
+ &fat_sectors)) {
+ if (ped_exception_throw (PED_EXCEPTION_BUG,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("There are no possible configurations for this FAT "
+ "type."))
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+ }
+
+ if (fs_info->fat_type == FAT_TYPE_FAT16) {
+ if (cluster_sectors != fs_info->cluster_sectors
+ || cluster_count != fs_info->cluster_count
+ || fat_sectors != fs_info->fat_sectors) {
+ if (ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("File system doesn't have expected sizes for "
+ "Windows to like it. "
+ "Cluster size is %dk (%dk expected); "
+ "number of clusters is %d (%d expected); "
+ "size of FATs is %d sectors (%d expected)."),
+ (int) fs_info->cluster_sectors / 2,
+ (int) cluster_sectors / 2,
+ (int) fs_info->cluster_count,
+ (int) cluster_count,
+ (int) fs_info->fat_sectors,
+ (int) fat_sectors)
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+ }
+ }
+
+ if (fs_info->fat_type == FAT_TYPE_FAT32) {
+ info_free_clusters
+ = PED_LE32_TO_CPU (fs_info->info_sector->free_clusters);
+ if (info_free_clusters != (FatCluster) -1
+ && info_free_clusters != fs_info->fat->free_cluster_count) {
+ if (ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("File system is reporting the free space as "
+ "%d clusters, not %d clusters."),
+ info_free_clusters,
+ fs_info->fat->free_cluster_count)
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+ }
+ }
+
+ if (!_compare_fats (fs))
+ goto error;
+
+ fs->checked = 1;
+ return 1; /* existence of fs implies consistency ;-) */
+
+error:
+ return 0;
+}
+
+/* Calculates how much space there will be in clusters in:
+ * old_fs intersect the-new-fs
+ */
+static PedSector
+_calc_resize_data_size (
+ const PedFileSystem* old_fs,
+ PedSector new_cluster_sectors,
+ FatCluster new_cluster_count,
+ PedSector new_fat_size)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (old_fs);
+ PedSector fat_size_delta;
+
+ fat_size_delta = old_fs_info->fat_sectors - new_fat_size;
+ return new_cluster_sectors * new_cluster_count - fat_size_delta * 2;
+}
+
+static int
+_test_resize_size (const PedFileSystem* fs,
+ PedSector length, PedSector min_data_size)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedGeometry geom;
+ PedSector _cluster_sectors;
+ FatCluster _cluster_count;
+ PedSector _fat_size;
+
+ ped_geometry_init (&geom, fs->geom->dev, fs->geom->start, length);
+
+ if (fat_calc_resize_sizes (
+ &geom,
+ fs_info->cluster_sectors,
+ FAT_TYPE_FAT16,
+ fs_info->root_dir_sector_count,
+ fs_info->cluster_sectors,
+ &_cluster_sectors,
+ &_cluster_count,
+ &_fat_size)
+ && _calc_resize_data_size (fs, _cluster_sectors, _cluster_count,
+ _fat_size)
+ >= min_data_size)
+ return 1;
+
+ if (fat_calc_resize_sizes (
+ &geom,
+ fs_info->cluster_sectors,
+ FAT_TYPE_FAT32,
+ 0,
+ fs_info->cluster_sectors,
+ &_cluster_sectors,
+ &_cluster_count,
+ &_fat_size)
+ && _calc_resize_data_size (fs, _cluster_sectors, _cluster_count,
+ _fat_size)
+ >= min_data_size)
+ return 1;
+
+ return 0;
+}
+
+/* does a binary search (!) for the mininum size. Too hard to compute directly
+ * (see calc_sizes() for why!)
+ */
+static PedSector
+_get_min_resize_size (const PedFileSystem* fs, PedSector min_data_size)
+{
+ PedSector min_length = 0;
+ PedSector max_length = fs->geom->length;
+ PedSector length;
+
+ while (min_length < max_length - 1) {
+ length = (min_length + max_length) / 2;
+ if (_test_resize_size (fs, length, min_data_size))
+ max_length = length;
+ else
+ min_length = length;
+ }
+
+/* adds a bit of leeway (64 sectors), for resolving extra issues, like root
+ * directory allocation, that aren't covered here.
+ */
+ return max_length + 64;
+}
+
+PedConstraint*
+fat_get_copy_constraint (const PedFileSystem* fs, const PedDevice* dev)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedGeometry full_dev;
+ PedSector min_cluster_count;
+ FatCluster used_clusters;
+ PedSector min_data_size;
+
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1))
+ return NULL;
+
+ used_clusters = fs_info->fat->cluster_count
+ - fs_info->fat->free_cluster_count;
+ min_cluster_count = used_clusters + fs_info->total_dir_clusters;
+ min_data_size = min_cluster_count * fs_info->cluster_sectors;
+
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ &full_dev, &full_dev,
+ _get_min_resize_size (fs, min_data_size),
+ dev->length);
+}
+
+PedConstraint*
+fat_get_resize_constraint (const PedFileSystem* fs)
+{
+ return fat_get_copy_constraint (fs, fs->geom->dev);
+}
+
+PedConstraint*
+fat_get_create_constraint_fat16 (const PedDevice* dev)
+{
+ PedGeometry full_dev;
+ PedSector min_size;
+ PedSector max_size;
+
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1))
+ return NULL;
+
+ min_size = 65794;
+ max_size = 2097153;
+
+ return ped_constraint_new (
+ ped_alignment_any, ped_alignment_any,
+ &full_dev, &full_dev,
+ min_size, max_size);
+}
+
+PedConstraint*
+fat_get_create_constraint_fat32 (const PedDevice* dev)
+{
+ PedGeometry full_dev;
+ PedSector min_size;
+
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1))
+ return NULL;
+
+ min_size = 525224;
+
+ return ped_constraint_new (
+ ped_alignment_any, ped_alignment_any,
+ &full_dev, &full_dev,
+ min_size, dev->length);
+}
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/fat.h b/libparted/fs/r/fat/fat.h
new file mode 100644
index 0000000..54f0669
--- /dev/null
+++ b/libparted/fs/r/fat/fat.h
@@ -0,0 +1,159 @@
+/*
+ libparted
+ Copyright (C) 1998-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef FAT_H_INCLUDED
+#define FAT_H_INCLUDED
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#define BUFFER_SIZE 1024 /* buffer size in sectors (512 bytes) */
+
+typedef uint32_t FatCluster;
+typedef int32_t FatFragment;
+
+enum _FatType {
+ FAT_TYPE_FAT12,
+ FAT_TYPE_FAT16,
+ FAT_TYPE_FAT32
+};
+typedef enum _FatType FatType;
+
+typedef struct _FatSpecific FatSpecific;
+typedef struct _FatDirEntry FatDirEntry;
+
+/* FIXME: YUCKY */
+#include "table.h"
+#include "bootsector.h"
+#include "context.h"
+#include "fatio.h"
+#include "traverse.h"
+#include "calc.h"
+#include "count.h"
+#include "clstdup.h"
+
+struct __attribute__ ((packed)) _FatDirEntry {
+ char name[8];
+ uint8_t extension[3];
+ uint8_t attributes;
+ uint8_t is_upper_case_name;
+ uint8_t creation_time_low; /* milliseconds */
+ uint16_t creation_time_high;
+ uint16_t creation_date;
+ uint16_t access_date;
+ uint16_t first_cluster_high; /* for FAT32 */
+ uint16_t time;
+ uint16_t date;
+ uint16_t first_cluster;
+ uint32_t length;
+};
+
+struct _FatSpecific {
+ FatBootSector *boot_sector; /* structure of boot sector */
+ FatInfoSector *info_sector; /* fat32-only information sector */
+
+ int logical_sector_size; /* illogical sector size :-) */
+ PedSector sector_count;
+
+ int sectors_per_track; /* BIOS CHS stuff (S) */
+ int heads; /* BIOS CHS stuff (H) */
+
+ int cluster_size;
+ PedSector cluster_sectors;
+ FatCluster cluster_count;
+ int dir_entries_per_cluster;
+
+ FatType fat_type;
+ int fat_table_count;
+ PedSector fat_sectors;
+
+ uint32_t serial_number;
+
+ PedSector info_sector_offset; /* FAT32 only */
+ PedSector fat_offset;
+ PedSector root_dir_offset; /* non-FAT32 */
+ PedSector cluster_offset;
+ PedSector boot_sector_backup_offset;
+
+ FatCluster root_cluster; /* FAT32 only */
+ int root_dir_entry_count; /* non-FAT32 */
+ PedSector root_dir_sector_count; /* non-FAT32 */
+ FatCluster total_dir_clusters;
+
+ FatTable* fat;
+ FatClusterInfo* cluster_info;
+
+ PedSector buffer_sectors;
+ char* buffer;
+
+ int frag_size;
+ PedSector frag_sectors;
+ FatFragment frag_count;
+ FatFragment buffer_frags;
+ FatFragment cluster_frags;
+};
+
+#define FAT_SPECIFIC(fs) ((FatSpecific*) fs->type_specific)
+
+#define FAT_ROOT 0
+
+#define DELETED_FLAG 0xe5
+
+#define READONLY_ATTR 0x01
+#define HIDDEN_ATTR 0x02
+#define SYSTEM_ATTR 0x04
+#define VOLUME_LABEL_ATTR 0x08
+#define VFAT_ATTR 0x0f
+#define DIRECTORY_ATTR 0x10
+#define ARCH_ATTR 0x20
+
+#define MAX_FAT12_CLUSTERS 4086
+#define MAX_FAT16_CLUSTERS 65526
+#define MAX_FAT32_CLUSTERS 2000000
+
+#define FAT_ROOT_DIR_ENTRY_COUNT 512
+
+extern PedFileSystemType fat16_type;
+extern PedFileSystemType fat32_type;
+
+extern void fat_print (const PedFileSystem* fs);
+
+extern PedFileSystem* fat_alloc (const PedGeometry* geom);
+extern void fat_free (PedFileSystem* fs);
+extern int fat_alloc_buffers (PedFileSystem* fs);
+extern void fat_free_buffers (PedFileSystem* fs);
+
+extern int fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer);
+
+extern int fat_set_frag_sectors (PedFileSystem* fs, PedSector frag_sectors);
+
+#endif /* FAT_H_INCLUDED */
diff --git a/libparted/fs/r/fat/fatio.c b/libparted/fs/r/fat/fatio.c
new file mode 100644
index 0000000..3a947ff
--- /dev/null
+++ b/libparted/fs/r/fat/fatio.c
@@ -0,0 +1,150 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+#include "fatio.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+
+#ifndef DISCOVER_ONLY
+
+int
+fat_read_fragments (PedFileSystem* fs, char* buf, FatFragment frag,
+ FatFragment count)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector sector = fat_frag_to_sector (fs, frag);
+ PedSector sector_count = count * fs_info->frag_sectors;
+
+ PED_ASSERT (frag >= 0 && frag < fs_info->frag_count);
+
+ return ped_geometry_read (fs->geom, buf, sector, sector_count);
+}
+
+int
+fat_read_fragment (PedFileSystem* fs, char* buf, FatFragment frag)
+{
+ return fat_read_fragments (fs, buf, frag, 1);
+}
+
+int
+fat_write_fragments (PedFileSystem* fs, char* buf, FatFragment frag,
+ FatFragment count)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector sector = fat_frag_to_sector (fs, frag);
+ PedSector sector_count = count * fs_info->frag_sectors;
+
+ PED_ASSERT (frag >= 0 && frag < fs_info->frag_count);
+
+ return ped_geometry_write (fs->geom, buf, sector, sector_count);
+}
+
+int
+fat_write_fragment (PedFileSystem* fs, char* buf, FatFragment frag)
+{
+ return fat_write_fragments (fs, buf, frag, 1);
+}
+
+int
+fat_write_sync_fragments (PedFileSystem* fs, char* buf, FatFragment frag,
+ FatFragment count)
+{
+ if (!fat_write_fragments (fs, buf, frag, count))
+ return 0;
+ if (!ped_geometry_sync (fs->geom))
+ return 0;
+ return 1;
+}
+
+int
+fat_write_sync_fragment (PedFileSystem* fs, char* buf, FatFragment frag)
+{
+ return fat_write_sync_fragments (fs, buf, frag, 1);
+}
+
+int
+fat_read_clusters (PedFileSystem* fs, char *buf, FatCluster cluster,
+ FatCluster count)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector sector = fat_cluster_to_sector (fs, cluster);
+ PedSector sector_count = count * fs_info->cluster_sectors;
+
+ PED_ASSERT (cluster >= 2
+ && cluster + count - 1 < fs_info->cluster_count + 2);
+
+ return ped_geometry_read (fs->geom, buf, sector, sector_count);
+}
+
+int
+fat_read_cluster (PedFileSystem* fs, char *buf, FatCluster cluster)
+{
+ return fat_read_clusters (fs, buf, cluster, 1);
+}
+
+int
+fat_write_clusters (PedFileSystem* fs, char *buf, FatCluster cluster,
+ FatCluster count)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector sector = fat_cluster_to_sector (fs, cluster);
+ PedSector sector_count = count * fs_info->cluster_sectors;
+
+ PED_ASSERT (cluster >= 2
+ && cluster + count - 1 < fs_info->cluster_count + 2);
+
+ return ped_geometry_write (fs->geom, buf, sector, sector_count);
+}
+
+int
+fat_write_cluster (PedFileSystem* fs, char *buf, FatCluster cluster)
+{
+ return fat_write_clusters (fs, buf, cluster, 1);
+}
+
+int
+fat_write_sync_clusters (PedFileSystem* fs, char *buf, FatCluster cluster,
+ FatCluster count)
+{
+ if (!fat_write_clusters (fs, buf, cluster, count))
+ return 0;
+ if (!ped_geometry_sync (fs->geom))
+ return 0;
+ return 1;
+}
+
+int
+fat_write_sync_cluster (PedFileSystem* fs, char *buf, FatCluster cluster)
+{
+ if (!fat_write_cluster (fs, buf, cluster))
+ return 0;
+ if (!ped_geometry_sync (fs->geom))
+ return 0;
+ return 1;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/fatio.h b/libparted/fs/r/fat/fatio.h
new file mode 100644
index 0000000..53ebed7
--- /dev/null
+++ b/libparted/fs/r/fat/fatio.h
@@ -0,0 +1,49 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef FATIO_H_INCLUDED
+#define FATIO_H_INCLUDED
+
+#include "fat.h"
+
+extern int fat_read_fragments (PedFileSystem* fs, char* buf, FatFragment frag,
+ FatFragment count);
+extern int fat_write_fragments (PedFileSystem* fs, char* buf, FatFragment frag,
+ FatFragment count);
+extern int fat_write_sync_fragments (PedFileSystem* fs, char* buf,
+ FatFragment frag, FatFragment count);
+
+extern int fat_read_fragment (PedFileSystem* fs, char* buf, FatFragment frag);
+extern int fat_write_fragment (PedFileSystem* fs, char* buf, FatFragment frag);
+extern int fat_write_sync_fragment (PedFileSystem* fs, char* buf,
+ FatFragment frag);
+
+extern int fat_read_clusters (PedFileSystem* fs, char* buf, FatCluster cluster,
+ FatCluster count);
+extern int fat_write_clusters (PedFileSystem* fs, char* buf, FatCluster cluster,
+ FatCluster count);
+extern int fat_write_sync_clusters (PedFileSystem* fs, char* buf,
+ FatCluster cluster, FatCluster count);
+
+extern int fat_read_cluster (PedFileSystem* fs, char *buf, FatCluster cluster);
+extern int fat_write_cluster (PedFileSystem* fs, char *buf, FatCluster cluster);
+extern int fat_write_sync_cluster (PedFileSystem* fs, char *buf,
+ FatCluster cluster);
+
+#endif /* FATIO_H_INCLUDED */
diff --git a/libparted/fs/r/fat/resize.c b/libparted/fs/r/fat/resize.c
new file mode 100644
index 0000000..78dede4
--- /dev/null
+++ b/libparted/fs/r/fat/resize.c
@@ -0,0 +1,876 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+#include "traverse.h"
+#include "count.h"
+#include "fatio.h"
+#include "calc.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <string.h>
+
+#ifndef DISCOVER_ONLY
+
+/* Recursively builds (i.e. makes consistent) the duplicated directory tree
+ * (leaving the original directory tree in tact)
+ */
+static int
+fat_construct_directory (FatOpContext* ctx, FatTraverseInfo* trav_info)
+{
+ FatTraverseInfo* sub_dir_info;
+ FatDirEntry* dir_entry;
+ FatCluster old_first_cluster;
+
+ while ( (dir_entry = fat_traverse_next_dir_entry (trav_info)) ) {
+ if (fat_dir_entry_is_null_term (dir_entry))
+ break;
+ if (!fat_dir_entry_has_first_cluster (dir_entry, ctx->old_fs))
+ continue;
+
+ fat_traverse_mark_dirty (trav_info);
+
+ old_first_cluster = fat_dir_entry_get_first_cluster (dir_entry,
+ ctx->old_fs);
+ fat_dir_entry_set_first_cluster (dir_entry, ctx->new_fs,
+ fat_op_context_map_cluster (ctx, old_first_cluster));
+
+ if (fat_dir_entry_is_directory (dir_entry)
+ && dir_entry->name [0] != '.') {
+ sub_dir_info
+ = fat_traverse_directory (trav_info, dir_entry);
+ if (!sub_dir_info)
+ return 0;
+ if (!fat_construct_directory (ctx, sub_dir_info))
+ return 0;
+ }
+ }
+ /* remove "stale" entries at the end */
+ while ((dir_entry = fat_traverse_next_dir_entry (trav_info))) {
+ memset (dir_entry, 0, sizeof (FatDirEntry));
+ fat_traverse_mark_dirty (trav_info);
+ }
+ fat_traverse_complete (trav_info);
+ return 1;
+}
+
+static int
+duplicate_legacy_root_dir (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+
+ PED_ASSERT (old_fs_info->root_dir_sector_count
+ == new_fs_info->root_dir_sector_count);
+
+ if (!ped_geometry_read (ctx->old_fs->geom, old_fs_info->buffer,
+ old_fs_info->root_dir_offset,
+ old_fs_info->root_dir_sector_count))
+ return 0;
+
+ if (!ped_geometry_write (ctx->new_fs->geom, old_fs_info->buffer,
+ new_fs_info->root_dir_offset,
+ new_fs_info->root_dir_sector_count))
+ return 0;
+
+ return 1;
+}
+
+/*
+ Constructs the new directory tree for legacy (FAT16) file systems.
+*/
+static int
+fat_construct_legacy_root (FatOpContext* ctx)
+{
+ FatTraverseInfo* trav_info;
+
+ if (!duplicate_legacy_root_dir (ctx))
+ return 0;
+ trav_info = fat_traverse_begin (ctx->new_fs, FAT_ROOT, "\\");
+ return fat_construct_directory (ctx, trav_info);
+}
+
+/*
+ Constructs the new directory tree for new (FAT32) file systems.
+*/
+static int
+fat_construct_root (FatOpContext* ctx)
+{
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatTraverseInfo* trav_info;
+
+ trav_info = fat_traverse_begin (ctx->new_fs, new_fs_info->root_cluster,
+ "\\");
+ fat_construct_directory (ctx, trav_info);
+ return 1;
+}
+
+/* Converts the root directory between FAT16 and FAT32. NOTE: this code
+ * can also do no conversion. I'm leaving fat_construct_directory(), because
+ * it's really pretty :-) It also leaves a higher chance of deleted file
+ * recovery, because it doesn't remove redundant entries. (We do this here,
+ * because brain-damaged FAT16 has an arbitary limit on root directory entries,
+ * so we save room)
+ */
+static int
+fat_convert_directory (FatOpContext* ctx, FatTraverseInfo* old_trav,
+ FatTraverseInfo* new_trav)
+{
+ FatTraverseInfo* sub_old_dir_trav;
+ FatTraverseInfo* sub_new_dir_trav;
+ FatDirEntry* new_dir_entry;
+ FatDirEntry* old_dir_entry;
+ FatCluster old_first_cluster;
+
+ while ( (old_dir_entry = fat_traverse_next_dir_entry (old_trav)) ) {
+ if (fat_dir_entry_is_null_term (old_dir_entry))
+ break;
+ if (!fat_dir_entry_is_active (old_dir_entry))
+ continue;
+
+ new_dir_entry = fat_traverse_next_dir_entry (new_trav);
+ if (!new_dir_entry) {
+ return ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("There's not enough room in the root "
+ "directory for all of the files. Either "
+ "cancel, or ignore to lose the files."))
+ == PED_EXCEPTION_IGNORE;
+ }
+
+ *new_dir_entry = *old_dir_entry;
+ fat_traverse_mark_dirty (new_trav);
+
+ if (!fat_dir_entry_has_first_cluster (old_dir_entry,
+ ctx->old_fs))
+ continue;
+
+ old_first_cluster = fat_dir_entry_get_first_cluster (
+ old_dir_entry, ctx->old_fs);
+ fat_dir_entry_set_first_cluster (new_dir_entry, ctx->new_fs,
+ fat_op_context_map_cluster (ctx, old_first_cluster));
+
+ if (fat_dir_entry_is_directory (old_dir_entry)
+ && old_dir_entry->name [0] != '.') {
+ sub_old_dir_trav
+ = fat_traverse_directory (old_trav, old_dir_entry);
+ if (!sub_old_dir_trav) return 0;
+ sub_new_dir_trav
+ = fat_traverse_directory (new_trav, new_dir_entry);
+ if (!sub_new_dir_trav) {
+ fat_traverse_complete (sub_old_dir_trav);
+ return 0;
+ }
+
+ if (!fat_convert_directory (ctx, sub_old_dir_trav,
+ sub_new_dir_trav))
+ return 0;
+ }
+ }
+
+ /* remove "stale" entries at the end, just in case there is some
+ * overlap
+ */
+ while ((new_dir_entry = fat_traverse_next_dir_entry (new_trav))) {
+ memset (new_dir_entry, 0, sizeof (FatDirEntry));
+ fat_traverse_mark_dirty (new_trav);
+ }
+
+ fat_traverse_complete (old_trav);
+ fat_traverse_complete (new_trav);
+ return 1;
+}
+
+static void
+clear_cluster (PedFileSystem* fs, FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ memset (fs_info->buffer, 0, fs_info->cluster_size);
+ fat_write_cluster (fs, fs_info->buffer, cluster);
+}
+
+/* This MUST be called BEFORE the fat_construct_new_fat(), because cluster
+ * allocation depend on the old FAT. The reason is, old clusters may
+ * still be needed during the resize, (particularly clusters in the directory
+ * tree) even if they will be discarded later.
+ */
+static int
+alloc_root_dir (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatCluster i;
+ FatCluster cluster;
+ FatCluster cluster_count;
+
+ PED_ASSERT (new_fs_info->fat_type == FAT_TYPE_FAT32);
+
+ cluster_count = ped_div_round_up (
+ PED_MAX (16, old_fs_info->root_dir_sector_count),
+ new_fs_info->cluster_sectors);
+
+ for (i = 0; i < cluster_count; i++) {
+ cluster = fat_table_alloc_check_cluster (new_fs_info->fat,
+ ctx->new_fs);
+ if (!cluster)
+ return 0;
+ ctx->new_root_dir [i] = cluster;
+ clear_cluster (ctx->new_fs, cluster);
+ }
+ ctx->new_root_dir [i] = 0;
+ new_fs_info->root_cluster = ctx->new_root_dir [0];
+ return 1;
+}
+
+/* when converting FAT32 -> FAT16
+ * fat_duplicate clusters() duplicated the root directory unnecessarily.
+ * Let's free it.
+ *
+ * This must be called AFTER fat_construct_new_fat(). (otherwise, our
+ * changes just get overwritten)
+ */
+static int
+free_root_dir (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatCluster old_cluster;
+ FatFragment i;
+
+ PED_ASSERT (old_fs_info->fat_type == FAT_TYPE_FAT32);
+ PED_ASSERT (new_fs_info->fat_type == FAT_TYPE_FAT16);
+
+ for (old_cluster = old_fs_info->root_cluster;
+ !fat_table_is_eof (old_fs_info->fat, old_cluster);
+ old_cluster = fat_table_get (old_fs_info->fat, old_cluster)) {
+ FatFragment old_frag;
+ old_frag = fat_cluster_to_frag (ctx->old_fs, old_cluster);
+ for (i = 0; i < new_fs_info->cluster_frags; i++) {
+ FatFragment new_frag;
+ FatCluster new_clst;
+ new_frag = fat_op_context_map_fragment (ctx,
+ old_frag + i);
+ new_clst = fat_frag_to_cluster (ctx->old_fs, new_frag);
+ if (!fat_table_set_avail (new_fs_info->fat, new_clst))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+fat_clear_root_dir (PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int i;
+
+ PED_ASSERT (fs_info->fat_type == FAT_TYPE_FAT16);
+ PED_ASSERT (fs_info->root_dir_sector_count);
+
+ memset (fs_info->buffer, 0, 512);
+
+ for (i = 0; i < fs_info->root_dir_sector_count; i++) {
+ if (!ped_geometry_write (fs->geom, fs_info->buffer,
+ fs_info->root_dir_offset + i, 1)) {
+ if (ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Error writing to the root directory."))
+ == PED_EXCEPTION_CANCEL)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+fat_construct_converted_tree (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatTraverseInfo* old_trav_info;
+ FatTraverseInfo* new_trav_info;
+
+ if (new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ new_trav_info = fat_traverse_begin (ctx->new_fs,
+ new_fs_info->root_cluster, "\\");
+ if (!new_trav_info) return 0;
+ old_trav_info = fat_traverse_begin (ctx->old_fs, FAT_ROOT,
+ "\\");
+ } else {
+ fat_clear_root_dir (ctx->new_fs);
+ new_trav_info = fat_traverse_begin (ctx->new_fs, FAT_ROOT,
+ "\\");
+ if (!new_trav_info) return 0;
+ old_trav_info = fat_traverse_begin (ctx->old_fs,
+ old_fs_info->root_cluster, "\\");
+ }
+ if (!old_trav_info) {
+ fat_traverse_complete (new_trav_info);
+ return 0;
+ }
+ if (!fat_convert_directory (ctx, old_trav_info, new_trav_info))
+ return 0;
+ return 1;
+}
+
+/*
+ Constructs the new directory tree to match the new file locations.
+*/
+static int
+fat_construct_dir_tree (FatOpContext* ctx)
+{
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+
+ if (new_fs_info->fat_type == old_fs_info->fat_type) {
+ switch (old_fs_info->fat_type) {
+ case FAT_TYPE_FAT12:
+ PED_ASSERT (0);
+ break;
+
+ case FAT_TYPE_FAT16:
+ return fat_construct_legacy_root (ctx);
+
+ case FAT_TYPE_FAT32:
+ return fat_construct_root (ctx);
+ }
+ } else {
+ return fat_construct_converted_tree (ctx);
+ }
+
+ return 0;
+}
+
+static FatFragment
+_get_next_old_frag (FatOpContext* ctx, FatFragment frag)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatCluster cluster;
+ FatCluster next_cluster;
+
+ if ((frag + 1) % old_fs_info->cluster_frags != 0) {
+ if (fat_is_fragment_active (ctx->old_fs, frag + 1))
+ return frag + 1;
+ else
+ return -1;
+ } else {
+ cluster = fat_frag_to_cluster (ctx->old_fs, frag);
+ next_cluster = fat_table_get (old_fs_info->fat, cluster);
+
+ if (fat_table_is_eof (old_fs_info->fat, next_cluster))
+ return -1;
+ else
+ return fat_cluster_to_frag (ctx->old_fs, next_cluster);
+ }
+}
+
+/*
+ Constructs the new fat for the resized file system.
+*/
+static int
+fat_construct_new_fat (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ FatFragment old_frag;
+ FatCluster new_cluster;
+ FatFragment new_frag;
+ FatFragment old_next_frag;
+ FatFragment new_next_frag;
+ FatCluster new_next_cluster;
+ FatClusterFlag flag;
+ int i;
+
+ fat_table_clear (new_fs_info->fat);
+ if (!fat_table_set_cluster_count (new_fs_info->fat,
+ new_fs_info->cluster_count))
+ return 0;
+
+ for (old_frag = 0; old_frag < old_fs_info->frag_count; old_frag++) {
+ flag = fat_get_fragment_flag (ctx->old_fs, old_frag);
+ if (flag == FAT_FLAG_FREE)
+ continue;
+ if (flag == FAT_FLAG_BAD) {
+ new_frag = fat_op_context_map_static_fragment (
+ ctx, old_frag);
+ if (new_frag == -1)
+ continue;
+ new_cluster = fat_frag_to_cluster (ctx->new_fs,
+ new_frag);
+ fat_table_set_bad (new_fs_info->fat, new_cluster);
+ continue;
+ }
+
+ new_frag = fat_op_context_map_fragment (ctx, old_frag);
+ new_cluster = fat_frag_to_cluster (ctx->new_fs, new_frag);
+
+ old_next_frag = _get_next_old_frag (ctx, old_frag);
+ if (old_next_frag == -1) {
+ fat_table_set_eof (new_fs_info->fat, new_cluster);
+ continue;
+ }
+
+ new_next_frag = fat_op_context_map_fragment (ctx,
+ old_next_frag);
+ PED_ASSERT (new_next_frag != -1);
+
+ new_next_cluster = fat_frag_to_cluster (ctx->new_fs,
+ new_next_frag);
+ PED_ASSERT (new_next_cluster != new_cluster);
+
+ fat_table_set (new_fs_info->fat, new_cluster, new_next_cluster);
+ }
+
+ if (old_fs_info->fat_type == FAT_TYPE_FAT32
+ && new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ new_fs_info->root_cluster
+ = fat_op_context_map_cluster (ctx,
+ old_fs_info->root_cluster);
+ }
+
+ if (old_fs_info->fat_type == FAT_TYPE_FAT16
+ && new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ for (i=0; ctx->new_root_dir[i+1]; i++) {
+ fat_table_set (new_fs_info->fat,
+ ctx->new_root_dir[i],
+ ctx->new_root_dir[i+1]);
+ }
+ fat_table_set_eof (new_fs_info->fat, ctx->new_root_dir[i]);
+ }
+
+ return 1;
+}
+
+static int
+ask_type (PedFileSystem* fs, int fat16_ok, int fat32_ok, FatType* out_fat_type)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedExceptionOption status;
+ const char* fat16_msg;
+ const char* fat32_msg;
+
+ if (fs_info->fat_type == FAT_TYPE_FAT16)
+ fat16_msg = _("If you leave your file system as FAT16, "
+ "then you will have no problems.");
+ else
+ fat16_msg = _("If you convert to FAT16, and MS Windows "
+ "is installed on this partition, then "
+ "you must re-install the MS Windows boot "
+ "loader. If you want to do this, you "
+ "should consult the Parted manual (or "
+ "your distribution's manual).");
+
+ if (fs_info->fat_type == FAT_TYPE_FAT32)
+ fat32_msg = _("If you leave your file system as FAT32, "
+ "then you will not introduce any new "
+ "problems.");
+ else
+ fat32_msg = _("If you convert to FAT32, and MS Windows "
+ "is installed on this partition, then "
+ "you must re-install the MS Windows boot "
+ "loader. If you want to do this, you "
+ "should consult the Parted manual (or "
+ "your distribution's manual). Also, "
+ "converting to FAT32 will make the file "
+ "system unreadable by MS DOS, MS Windows "
+ "95a, and MS Windows NT.");
+
+ if (fat16_ok && fat32_ok) {
+ status = ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_YES_NO_CANCEL,
+ _("%s %s %s"),
+ _("Would you like to use FAT32?"),
+ fat16_msg,
+ fat32_msg);
+
+ switch (status) {
+ case PED_EXCEPTION_YES:
+ *out_fat_type = FAT_TYPE_FAT32;
+ return 1;
+
+ case PED_EXCEPTION_NO:
+ *out_fat_type = FAT_TYPE_FAT16;
+ return 1;
+
+ case PED_EXCEPTION_UNHANDLED:
+ *out_fat_type = fs_info->fat_type;
+ return 1;
+
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+
+ default:
+ PED_ASSERT (0);
+ break;
+ }
+ }
+
+ if (fat16_ok) {
+ if (fs_info->fat_type != FAT_TYPE_FAT16) {
+ status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK_CANCEL,
+ _("%s %s"),
+ _("The file system can only be resized to this "
+ "size by converting to FAT16."),
+ fat16_msg);
+ if (status == PED_EXCEPTION_CANCEL)
+ return 0;
+ }
+ *out_fat_type = FAT_TYPE_FAT16;
+ return 1;
+ }
+
+ if (fat32_ok) {
+ if (fs_info->fat_type != FAT_TYPE_FAT32) {
+ status = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK_CANCEL,
+ _("%s %s"),
+ _("The file system can only be resized to this "
+ "size by converting to FAT32."),
+ fat32_msg);
+ if (status == PED_EXCEPTION_CANCEL)
+ return 0;
+ }
+ *out_fat_type = FAT_TYPE_FAT32;
+ return 1;
+ }
+
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("GNU Parted cannot resize this partition to this size. "
+ "We're working on it!"));
+
+ return 0;
+}
+
+/* For resize operations: determine if the file system must be FAT16 or FAT32,
+ * or either. If the new file system must be FAT32, then query for
+ * confirmation. If either file system can be used, query for which one.
+ */
+static int
+get_fat_type (PedFileSystem* fs, const PedGeometry* new_geom,
+ FatType* out_fat_type)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ PedSector fat16_cluster_sectors;
+ PedSector fat32_cluster_sectors;
+ FatCluster dummy_cluster_count;
+ PedSector dummy_fat_sectors;
+ int fat16_ok;
+ int fat32_ok;
+
+ fat16_ok = fat_calc_resize_sizes (
+ new_geom,
+ fs_info->cluster_sectors,
+ FAT_TYPE_FAT16,
+ fs_info->root_dir_sector_count,
+ fs_info->cluster_sectors,
+ &fat16_cluster_sectors,
+ &dummy_cluster_count,
+ &dummy_fat_sectors);
+
+ fat32_ok = fat_calc_resize_sizes (
+ new_geom,
+ fs_info->cluster_sectors,
+ FAT_TYPE_FAT32,
+ fs_info->root_dir_sector_count,
+ fs_info->cluster_sectors,
+ &fat32_cluster_sectors,
+ &dummy_cluster_count,
+ &dummy_fat_sectors);
+
+ return ask_type (fs, fat16_ok, fat32_ok, out_fat_type);
+}
+
+/* Creates the PedFileSystem struct for the new resized file system, and
+ sticks it in a FatOpContext. At the end of the process, the original
+ (ctx->old_fs) is destroyed, and replaced with the new one (ctx->new_fs).
+ */
+static FatOpContext*
+create_resize_context (PedFileSystem* fs, const PedGeometry* new_geom)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatSpecific* new_fs_info;
+ PedFileSystem* new_fs;
+ PedSector new_cluster_sectors;
+ FatCluster new_cluster_count;
+ PedSector new_fat_sectors;
+ FatType new_fat_type;
+ PedSector root_dir_sector_count;
+ FatOpContext* context;
+
+ /* hypothetical number of root dir sectors, if we end up using
+ * FAT16
+ */
+ if (fs_info->root_dir_sector_count)
+ root_dir_sector_count = fs_info->root_dir_sector_count;
+ else
+ root_dir_sector_count = FAT_ROOT_DIR_ENTRY_COUNT
+ * sizeof (FatDirEntry) / 512;
+
+ if (!get_fat_type (fs, new_geom, &new_fat_type))
+ return 0;
+
+ fat_calc_resize_sizes (new_geom, fs_info->cluster_sectors, new_fat_type,
+ root_dir_sector_count, fs_info->cluster_sectors,
+ &new_cluster_sectors, &new_cluster_count, &new_fat_sectors);
+
+ if (!fat_check_resize_geometry (fs, new_geom, new_cluster_sectors,
+ new_cluster_count))
+ goto error;
+
+ new_fs = fat_alloc (new_geom);
+ if (!new_fs)
+ goto error;
+
+ new_fs_info = FAT_SPECIFIC (new_fs);
+ if (!new_fs_info)
+ goto error_free_new_fs;
+
+/* preserve boot code, etc. */
+ new_fs_info->boot_sector = ped_malloc (new_geom->dev->sector_size);
+ memcpy (new_fs_info->boot_sector, fs_info->boot_sector,
+ new_geom->dev->sector_size);
+ new_fs_info->info_sector = NULL;
+ if (fs_info->fat_type == FAT_TYPE_FAT32)
+ {
+ PED_ASSERT (fs_info->info_sector != NULL);
+ new_fs_info->info_sector =
+ ped_malloc (new_geom->dev->sector_size);
+ memcpy (new_fs_info->info_sector, fs_info->info_sector,
+ new_geom->dev->sector_size);
+ }
+
+ new_fs_info->logical_sector_size = fs_info->logical_sector_size;
+ new_fs_info->sector_count = new_geom->length;
+
+ new_fs_info->sectors_per_track = fs_info->sectors_per_track;
+ new_fs_info->heads = fs_info->heads;
+
+ new_fs_info->cluster_size = new_cluster_sectors * 512;
+ new_fs_info->cluster_sectors = new_cluster_sectors;
+ new_fs_info->cluster_count = new_cluster_count;
+ new_fs_info->dir_entries_per_cluster = fs_info->dir_entries_per_cluster;
+
+ new_fs_info->fat_type = new_fat_type;
+ new_fs_info->fat_table_count = 2;
+ new_fs_info->fat_sectors = new_fat_sectors;
+
+ /* what about copying? */
+ new_fs_info->serial_number = fs_info->serial_number;
+
+ if (new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ new_fs_info->info_sector_offset = 1;
+ new_fs_info->boot_sector_backup_offset = 6;
+
+ new_fs_info->root_dir_offset = 0;
+ new_fs_info->root_dir_entry_count = 0;
+ new_fs_info->root_dir_sector_count = 0;
+
+ /* we add calc_align_sectors to push the cluster_offset
+ forward, to keep the clusters aligned between the new
+ and old file systems
+ */
+ new_fs_info->fat_offset
+ = fat_min_reserved_sector_count (FAT_TYPE_FAT32)
+ + fat_calc_align_sectors (new_fs, fs);
+
+ new_fs_info->cluster_offset
+ = new_fs_info->fat_offset
+ + 2 * new_fs_info->fat_sectors;
+ } else {
+ new_fs_info->root_dir_sector_count = root_dir_sector_count;
+ new_fs_info->root_dir_entry_count
+ = root_dir_sector_count * 512 / sizeof (FatDirEntry);
+
+ new_fs_info->fat_offset
+ = fat_min_reserved_sector_count (FAT_TYPE_FAT16)
+ + fat_calc_align_sectors (new_fs, fs);
+
+ new_fs_info->root_dir_offset = new_fs_info->fat_offset
+ + 2 * new_fs_info->fat_sectors;
+
+ new_fs_info->cluster_offset = new_fs_info->root_dir_offset
+ + new_fs_info->root_dir_sector_count;
+ }
+
+ new_fs_info->total_dir_clusters = fs_info->total_dir_clusters;
+
+ context = fat_op_context_new (new_fs, fs);
+ if (!context)
+ goto error_free_new_fs_info;
+
+ if (!fat_op_context_create_initial_fat (context))
+ goto error_free_context;
+
+ if (!fat_alloc_buffers (new_fs))
+ goto error_free_fat;
+
+ return context;
+
+error_free_fat:
+ fat_table_destroy (new_fs_info->fat);
+error_free_context:
+ free (context);
+error_free_new_fs_info:
+ free (new_fs_info);
+error_free_new_fs:
+ free (new_fs);
+error:
+ return NULL;
+}
+
+static int
+resize_context_assimilate (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+
+ fat_free_buffers (ctx->old_fs);
+ fat_table_destroy (old_fs_info->fat);
+ free (old_fs_info);
+ ped_geometry_destroy (ctx->old_fs->geom);
+
+ ctx->old_fs->type_specific = ctx->new_fs->type_specific;
+ ctx->old_fs->geom = ctx->new_fs->geom;
+ ctx->old_fs->type = (new_fs_info->fat_type == FAT_TYPE_FAT16)
+ ? &fat16_type
+ : &fat32_type;
+
+ free (ctx->new_fs);
+
+ fat_op_context_destroy (ctx);
+
+ return 1;
+}
+
+static int
+resize_context_abort (FatOpContext* ctx)
+{
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+
+ fat_free_buffers (ctx->new_fs);
+ fat_table_destroy (new_fs_info->fat);
+ free (new_fs_info);
+ ped_geometry_destroy (ctx->new_fs->geom);
+ free (ctx->new_fs);
+
+ fat_op_context_destroy (ctx);
+
+ return 1;
+}
+
+/* copies the "hidden" sectors, between the boot sector and the FAT. Required,
+ * for the Windows 98 FAT32 boot loader
+ */
+int
+_copy_hidden_sectors (FatOpContext* ctx)
+{
+ FatSpecific* old_fs_info = FAT_SPECIFIC (ctx->old_fs);
+ FatSpecific* new_fs_info = FAT_SPECIFIC (ctx->new_fs);
+ PedSector first = 1;
+ PedSector last;
+ PedSector count;
+
+ /* nothing to copy for FAT16 */
+ if (old_fs_info->fat_type == FAT_TYPE_FAT16
+ || new_fs_info->fat_type == FAT_TYPE_FAT16)
+ return 1;
+
+ last = PED_MIN (old_fs_info->fat_offset, new_fs_info->fat_offset) - 1;
+ count = last - first + 1;
+
+ PED_ASSERT (count < BUFFER_SIZE);
+
+ if (!ped_geometry_read (ctx->old_fs->geom, old_fs_info->buffer,
+ first, count))
+ return 0;
+ if (!ped_geometry_write (ctx->new_fs->geom, old_fs_info->buffer,
+ first, count))
+ return 0;
+ return 1;
+}
+
+int
+fat_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatSpecific* new_fs_info;
+ FatOpContext* ctx;
+ PedFileSystem* new_fs;
+
+ ctx = create_resize_context (fs, geom);
+ if (!ctx)
+ goto error;
+ new_fs = ctx->new_fs;
+ new_fs_info = FAT_SPECIFIC (new_fs);
+
+ if (!fat_duplicate_clusters (ctx, timer))
+ goto error_abort_ctx;
+ if (fs_info->fat_type == FAT_TYPE_FAT16
+ && new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ if (!alloc_root_dir (ctx))
+ goto error_abort_ctx;
+ }
+ if (!fat_construct_new_fat (ctx))
+ goto error_abort_ctx;
+ if (fs_info->fat_type == FAT_TYPE_FAT32
+ && new_fs_info->fat_type == FAT_TYPE_FAT16) {
+ if (!free_root_dir (ctx))
+ goto error_abort_ctx;
+ }
+ if (!fat_construct_dir_tree (ctx))
+ goto error_abort_ctx;
+ if (!fat_table_write_all (new_fs_info->fat, new_fs))
+ goto error_abort_ctx;
+
+ _copy_hidden_sectors (ctx);
+ fat_boot_sector_generate (&new_fs_info->boot_sector, new_fs);
+ fat_boot_sector_write (new_fs_info->boot_sector, new_fs);
+ if (new_fs_info->fat_type == FAT_TYPE_FAT32) {
+ fat_info_sector_generate (&new_fs_info->info_sector, new_fs);
+ fat_info_sector_write (new_fs_info->info_sector, new_fs);
+ }
+
+ if (!resize_context_assimilate (ctx))
+ goto error;
+
+ return 1;
+
+error_abort_ctx:
+ resize_context_abort (ctx);
+error:
+ return 0;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/table.c b/libparted/fs/r/fat/table.c
new file mode 100644
index 0000000..ec0907f
--- /dev/null
+++ b/libparted/fs/r/fat/table.c
@@ -0,0 +1,481 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <parted/endian.h>
+#include "fat.h"
+
+#ifndef DISCOVER_ONLY
+
+FatTable*
+fat_table_new (FatType fat_type, FatCluster size)
+{
+ FatTable* ft;
+ int entry_size = fat_table_entry_size (fat_type);
+
+ ft = (FatTable*) ped_malloc (sizeof (FatTable));
+ if (!ft) return NULL;
+
+ ft->cluster_count = ft->free_cluster_count = size - 2;
+
+/* ensure there's some free room on the end, to finish off the sector */
+ ft->size = ped_div_round_up (size * entry_size, 512) * 512 / entry_size;
+ ft->fat_type = fat_type;
+ ft->raw_size = ft->size * entry_size;
+
+ ft->table = ped_malloc (ft->raw_size);
+ if (!ft->table) {
+ free (ft);
+ return NULL;
+ }
+
+ fat_table_clear (ft);
+ return ft;
+}
+
+void
+fat_table_destroy (FatTable* ft)
+{
+ free (ft->table);
+ free (ft);
+}
+
+FatTable*
+fat_table_duplicate (const FatTable* ft)
+{
+ FatTable* dup_ft;
+
+ dup_ft = fat_table_new (ft->fat_type, ft->size);
+ if (!dup_ft) return NULL;
+
+ dup_ft->cluster_count = ft->cluster_count;
+ dup_ft->free_cluster_count = ft->free_cluster_count;
+ dup_ft->bad_cluster_count = ft->bad_cluster_count;
+ dup_ft->last_alloc = ft->last_alloc;
+
+ memcpy (dup_ft->table, ft->table, ft->raw_size);
+
+ return dup_ft;
+}
+
+void
+fat_table_clear (FatTable* ft)
+{
+ memset (ft->table, 0, ft->raw_size);
+
+ fat_table_set (ft, 0, 0x0ffffff8);
+ fat_table_set (ft, 1, 0x0fffffff);
+
+ ft->free_cluster_count = ft->cluster_count;
+ ft->bad_cluster_count = 0;
+ ft->last_alloc = 1;
+}
+
+int
+fat_table_set_cluster_count (FatTable* ft, FatCluster new_cluster_count)
+{
+ PED_ASSERT (new_cluster_count + 2 <= ft->size);
+
+ ft->cluster_count = new_cluster_count;
+ return fat_table_count_stats (ft);
+}
+
+int
+fat_table_count_stats (FatTable* ft)
+{
+ FatCluster i;
+
+ PED_ASSERT (ft->cluster_count + 2 <= ft->size);
+
+ ft->free_cluster_count = 0;
+ ft->bad_cluster_count = 0;
+
+ for (i=2; i < ft->cluster_count + 2; i++) {
+ if (fat_table_is_available (ft, i))
+ ft->free_cluster_count++;
+ if (fat_table_is_bad (ft, i))
+ ft->bad_cluster_count++;
+ }
+ return 1;
+}
+
+int
+fat_table_read (FatTable* ft, const PedFileSystem* fs, int table_num)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (ft->raw_size >= fs_info->fat_sectors * 512);
+
+ memset (ft->table, 0, ft->raw_size);
+
+ if (!ped_geometry_read (fs->geom, (void *) ft->table,
+ fs_info->fat_offset
+ + table_num * fs_info->fat_sectors,
+ fs_info->fat_sectors))
+ return 0;
+
+ if ( *((unsigned char*) ft->table) != fs_info->boot_sector->media) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("FAT %d media %x doesn't match the boot sector's "
+ "media %x. You should probably run scandisk."),
+ (int) table_num + 1,
+ (int) *((unsigned char*) ft->table),
+ (int) fs_info->boot_sector->media)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ ft->cluster_count = fs_info->cluster_count;
+
+ fat_table_count_stats (ft);
+
+ return 1;
+}
+
+int
+fat_table_write (const FatTable* ft, PedFileSystem* fs, int table_num)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ PED_ASSERT (ft->raw_size >= fs_info->fat_sectors * 512);
+
+ if (!ped_geometry_write (fs->geom, (void *) ft->table,
+ fs_info->fat_offset
+ + table_num * fs_info->fat_sectors,
+ fs_info->fat_sectors))
+ return 0;
+ if (!ped_geometry_sync (fs->geom))
+ return 0;
+
+ return 1;
+}
+
+int
+fat_table_write_all (const FatTable* ft, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ int i;
+
+ for (i = 0; i < fs_info->fat_table_count; i++) {
+ if (!fat_table_write (ft, fs, i))
+ return 0;
+ }
+
+ return 1;
+}
+
+int
+fat_table_compare (const FatTable* a, const FatTable* b)
+{
+ FatCluster i;
+
+ if (a->cluster_count != b->cluster_count)
+ return 0;
+
+ for (i = 0; i < a->cluster_count + 2; i++) {
+ if (fat_table_get (a, i) != fat_table_get (b, i))
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+_test_code_available (const FatTable* ft, FatCluster code)
+{
+ return code == 0;
+}
+
+static int
+_test_code_bad (const FatTable* ft, FatCluster code)
+{
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ if (code == 0xff7) return 1;
+ break;
+
+ case FAT_TYPE_FAT16:
+ if (code == 0xfff7) return 1;
+ break;
+
+ case FAT_TYPE_FAT32:
+ if (code == 0x0ffffff7) return 1;
+ break;
+ }
+ return 0;
+}
+
+static int
+_test_code_eof (const FatTable* ft, FatCluster code)
+{
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ if (code >= 0xff7) return 1;
+ break;
+
+ case FAT_TYPE_FAT16:
+ if (code >= 0xfff7) return 1;
+ break;
+
+ case FAT_TYPE_FAT32:
+ if (code >= 0x0ffffff7) return 1;
+ break;
+ }
+ return 0;
+}
+
+void
+_update_stats (FatTable* ft, FatCluster cluster, FatCluster value)
+{
+ if (_test_code_available (ft, value)
+ && !fat_table_is_available (ft, cluster)) {
+ ft->free_cluster_count++;
+ if (fat_table_is_bad (ft, cluster))
+ ft->bad_cluster_count--;
+ }
+
+ if (!_test_code_available (ft, value)
+ && fat_table_is_available (ft, cluster)) {
+ ft->free_cluster_count--;
+ if (_test_code_bad (ft, cluster))
+ ft->bad_cluster_count--;
+ }
+}
+
+int
+fat_table_set (FatTable* ft, FatCluster cluster, FatCluster value)
+{
+ if (cluster >= ft->cluster_count + 2) {
+ ped_exception_throw (PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("fat_table_set: cluster %ld outside "
+ "file system"),
+ (long) cluster);
+ return 0;
+ }
+
+ _update_stats (ft, cluster, value);
+
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ PED_ASSERT (0);
+ break;
+
+ case FAT_TYPE_FAT16:
+ ((unsigned short *) ft->table) [cluster]
+ = PED_CPU_TO_LE16 (value);
+ break;
+
+ case FAT_TYPE_FAT32:
+ ((unsigned int *) ft->table) [cluster]
+ = PED_CPU_TO_LE32 (value);
+ break;
+ }
+ return 1;
+}
+
+FatCluster
+fat_table_get (const FatTable* ft, FatCluster cluster)
+{
+ if (cluster >= ft->cluster_count + 2) {
+ ped_exception_throw (PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("fat_table_get: cluster %ld outside "
+ "file system"),
+ (long) cluster);
+ exit (EXIT_FAILURE); /* FIXME */
+ }
+
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ PED_ASSERT (0);
+ break;
+
+ case FAT_TYPE_FAT16:
+ return PED_LE16_TO_CPU
+ (((unsigned short *) ft->table) [cluster]);
+
+ case FAT_TYPE_FAT32:
+ return PED_LE32_TO_CPU
+ (((unsigned int *) ft->table) [cluster]);
+ }
+
+ return 0;
+}
+
+FatCluster
+fat_table_alloc_cluster (FatTable* ft)
+{
+ FatCluster i;
+ FatCluster cluster;
+
+/* hack: assumes the first two FAT entries are marked as used (which they
+ * always should be)
+ */
+ for (i=1; i < ft->cluster_count + 1; i++) {
+ cluster = (i + ft->last_alloc) % ft->cluster_count;
+ if (fat_table_is_available (ft, cluster)) {
+ ft->last_alloc = cluster;
+ return cluster;
+ }
+ }
+
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("fat_table_alloc_cluster: no free clusters"));
+ return 0;
+}
+
+FatCluster
+fat_table_alloc_check_cluster (FatTable* ft, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster result;
+
+ while (1) {
+ result = fat_table_alloc_cluster (ft);
+ if (!result)
+ return 0;
+ if (fat_read_cluster (fs, fs_info->buffer, result))
+ return result;
+ fat_table_set_bad (ft, result);
+ }
+}
+
+/*
+ returns true if <cluster> is marked as bad
+*/
+int
+fat_table_is_bad (const FatTable* ft, FatCluster cluster)
+{
+ return _test_code_bad (ft, fat_table_get (ft, cluster));
+}
+
+/*
+ returns true if <cluster> represents an EOF marker
+*/
+int _GL_ATTRIBUTE_PURE
+fat_table_is_eof (const FatTable* ft, FatCluster cluster)
+{
+ return _test_code_eof (ft, cluster);
+}
+
+/*
+ returns true if <cluster> is available.
+*/
+int
+fat_table_is_available (const FatTable* ft, FatCluster cluster)
+{
+ return _test_code_available (ft, fat_table_get (ft, cluster));
+}
+
+/*
+ returns true if <cluster> is empty. Note that this includes bad clusters.
+*/
+int
+fat_table_is_empty (const FatTable* ft, FatCluster cluster)
+{
+ return fat_table_is_available (ft, cluster)
+ || fat_table_is_bad (ft, cluster);
+}
+
+/*
+ returns true if <cluster> is being used for something constructive.
+*/
+int
+fat_table_is_active (const FatTable* ft, FatCluster cluster)
+{
+ return !fat_table_is_bad (ft, cluster)
+ && !fat_table_is_available (ft, cluster);
+}
+
+/*
+ marks <cluster> as the last cluster in the chain
+*/
+int
+fat_table_set_eof (FatTable* ft, FatCluster cluster)
+{
+
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ PED_ASSERT (0);
+ break;
+
+ case FAT_TYPE_FAT16:
+ return fat_table_set (ft, cluster, 0xfff8);
+
+ case FAT_TYPE_FAT32:
+ return fat_table_set (ft, cluster, 0x0fffffff);
+ }
+
+ return 0;
+}
+
+/*
+ Marks a clusters as unusable, due to physical disk damage.
+*/
+int
+fat_table_set_bad (FatTable* ft, FatCluster cluster)
+{
+ if (!fat_table_is_bad (ft, cluster))
+ ft->bad_cluster_count++;
+
+ switch (ft->fat_type) {
+ case FAT_TYPE_FAT12:
+ return fat_table_set (ft, cluster, 0xff7);
+
+ case FAT_TYPE_FAT16:
+ return fat_table_set (ft, cluster, 0xfff7);
+
+ case FAT_TYPE_FAT32:
+ return fat_table_set (ft, cluster, 0x0ffffff7);
+ }
+
+ return 0;
+}
+
+/*
+ marks <cluster> as unused/free/available
+*/
+int
+fat_table_set_avail (FatTable* ft, FatCluster cluster)
+{
+ return fat_table_set (ft, cluster, 0);
+}
+
+#endif /* !DISCOVER_ONLY */
+
+int _GL_ATTRIBUTE_CONST
+fat_table_entry_size (FatType fat_type)
+{
+ switch (fat_type) {
+ case FAT_TYPE_FAT12:
+ return 2; /* FIXME: how? */
+
+ case FAT_TYPE_FAT16:
+ return 2;
+
+ case FAT_TYPE_FAT32:
+ return 4;
+ }
+
+ return 0;
+}
diff --git a/libparted/fs/r/fat/table.h b/libparted/fs/r/fat/table.h
new file mode 100644
index 0000000..a70241b
--- /dev/null
+++ b/libparted/fs/r/fat/table.h
@@ -0,0 +1,74 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PED_FAT_TABLE_H_INCLUDED
+#define PED_FAT_TABLE_H_INCLUDED
+
+typedef struct _FatTable FatTable;
+
+#include "fat.h"
+
+struct _FatTable {
+ void* table;
+ FatCluster size;
+ int raw_size;
+
+ FatType fat_type;
+ FatCluster cluster_count;
+ FatCluster free_cluster_count;
+ FatCluster bad_cluster_count;
+
+ FatCluster last_alloc;
+};
+
+extern FatTable* fat_table_new (FatType fat_type, FatCluster size);
+extern FatTable* fat_table_duplicate (const FatTable* ft);
+extern void fat_table_destroy (FatTable* ft);
+extern void fat_table_clear (FatTable* ft);
+extern int fat_table_set_cluster_count (FatTable* ft,
+ FatCluster new_cluster_count);
+
+extern int fat_table_read (FatTable* ft, const PedFileSystem* fs,
+ int table_num);
+extern int fat_table_write (const FatTable* ft, PedFileSystem* fs,
+ int table_num);
+extern int fat_table_write_all (const FatTable* ft, PedFileSystem* fs);
+extern int fat_table_compare (const FatTable* a, const FatTable* b);
+extern int fat_table_count_stats (FatTable* ft);
+
+extern FatCluster fat_table_get (const FatTable* ft, FatCluster cluster);
+extern int fat_table_set (FatTable* ft, FatCluster cluster, FatCluster value);
+
+extern FatCluster fat_table_alloc_cluster (FatTable* ft);
+extern FatCluster fat_table_alloc_check_cluster (FatTable* ft,
+ PedFileSystem* fs);
+
+extern int fat_table_is_bad (const FatTable* ft, FatCluster cluster);
+extern int fat_table_is_eof (const FatTable* ft, FatCluster cluster);
+extern int fat_table_is_empty (const FatTable* ft, FatCluster cluster);
+extern int fat_table_is_available (const FatTable* ft, FatCluster cluster);
+extern int fat_table_is_active (const FatTable* ft, FatCluster cluster);
+
+extern int fat_table_set_eof (FatTable* ft, FatCluster cluster);
+extern int fat_table_set_avail (FatTable* ft, FatCluster cluster);
+extern int fat_table_set_bad (FatTable* ft, FatCluster cluster);
+
+extern int fat_table_entry_size (FatType fat_type);
+
+#endif /* PED_FAT_TABLE_H_INCLUDED */
diff --git a/libparted/fs/r/fat/traverse.c b/libparted/fs/r/fat/traverse.c
new file mode 100644
index 0000000..42eeff9
--- /dev/null
+++ b/libparted/fs/r/fat/traverse.c
@@ -0,0 +1,368 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "fat.h"
+#include "traverse.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DISCOVER_ONLY
+
+#define NO_CLUSTER -1
+
+static char tmp_buffer [4096];
+
+int _GL_ATTRIBUTE_PURE
+fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info)
+{
+ return trav_info->buffer_size / sizeof (FatDirEntry);
+}
+
+/* returns 1 if there are no more directory entries in the directory being
+ * traversed, 0 otherwise.
+ */
+static int
+is_last_buffer (FatTraverseInfo* trav_info) {
+ FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
+
+ if (trav_info->is_legacy_root_dir)
+ return 1;
+ else
+ return fat_table_is_eof (fs_info->fat, trav_info->next_buffer);
+}
+
+static int
+write_root_dir (FatTraverseInfo* trav_info)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
+
+ if (!ped_geometry_write (trav_info->fs->geom, trav_info->dir_entries,
+ fs_info->root_dir_offset,
+ fs_info->root_dir_sector_count))
+ return 0;
+ if (!ped_geometry_sync (trav_info->fs->geom))
+ return 0;
+ trav_info->dirty = 0;
+ return 1;
+}
+
+static int
+write_dir_cluster (FatTraverseInfo* trav_info)
+{
+ if (!fat_write_sync_cluster (trav_info->fs,
+ (void*) trav_info->dir_entries,
+ trav_info->this_buffer))
+ return 0;
+ trav_info->dirty = 0;
+ return 1;
+}
+
+static int
+write_dir_buffer (FatTraverseInfo* trav_info)
+{
+ if (trav_info->is_legacy_root_dir)
+ return write_root_dir (trav_info);
+ else
+ return write_dir_cluster (trav_info);
+}
+
+static int
+read_next_dir_buffer (FatTraverseInfo* trav_info)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (trav_info->fs);
+
+ PED_ASSERT (!trav_info->is_legacy_root_dir);
+
+ trav_info->this_buffer = trav_info->next_buffer;
+
+ if (trav_info->this_buffer < 2
+ || trav_info->this_buffer >= fs_info->cluster_count + 2) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ "Cluster %ld in directory %s is outside file system!",
+ (long) trav_info->this_buffer,
+ trav_info->dir_name);
+ return 0;
+ }
+
+ trav_info->next_buffer
+ = fat_table_get (fs_info->fat, trav_info->this_buffer);
+
+ return fat_read_cluster (trav_info->fs, (void *) trav_info->dir_entries,
+ trav_info->this_buffer);
+}
+
+/* FIXME: put into fat_dir_entry_* operations */
+void
+fat_traverse_mark_dirty (FatTraverseInfo* trav_info)
+{
+ trav_info->dirty = 1;
+}
+
+FatTraverseInfo*
+fat_traverse_begin (PedFileSystem* fs, FatCluster start_cluster,
+ const char* dir_name)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatTraverseInfo* trav_info;
+
+ trav_info = (FatTraverseInfo*) ped_malloc (sizeof (FatTraverseInfo));
+ if (!trav_info)
+ goto error;
+
+ trav_info->dir_name = strdup (dir_name);
+ if (!trav_info->dir_name)
+ goto error_free_trav_info;
+
+ trav_info->fs = fs;
+ trav_info->is_legacy_root_dir
+ = (fs_info->fat_type == FAT_TYPE_FAT16) && (start_cluster == 0);
+ trav_info->dirty = 0;
+ trav_info->eof = 0;
+ trav_info->current_entry = -1;
+
+ if (trav_info->is_legacy_root_dir) {
+ trav_info->buffer_size = 512 * fs_info->root_dir_sector_count;
+ } else {
+ trav_info->next_buffer = start_cluster;
+ trav_info->buffer_size = fs_info->cluster_size;
+ }
+
+ trav_info->dir_entries
+ = (FatDirEntry*) ped_malloc (trav_info->buffer_size);
+ if (!trav_info->dir_entries)
+ goto error_free_dir_name;
+
+ if (trav_info->is_legacy_root_dir) {
+ if (!ped_geometry_read (fs->geom, trav_info->dir_entries,
+ fs_info->root_dir_offset,
+ fs_info->root_dir_sector_count))
+ goto error_free_dir_entries;
+ } else {
+ if (!read_next_dir_buffer (trav_info))
+ goto error_free_dir_entries;
+ }
+
+ return trav_info;
+
+error_free_dir_entries:
+ free (trav_info->dir_entries);
+error_free_dir_name:
+ free (trav_info->dir_name);
+error_free_trav_info:
+ free (trav_info);
+error:
+ return NULL;
+}
+
+int
+fat_traverse_complete (FatTraverseInfo* trav_info)
+{
+ if (trav_info->dirty) {
+ if (!write_dir_buffer (trav_info))
+ return 0;
+ }
+ free (trav_info->dir_entries);
+ free (trav_info->dir_name);
+ free (trav_info);
+ return 1;
+}
+
+FatTraverseInfo*
+fat_traverse_directory (FatTraverseInfo *trav_info, FatDirEntry* parent)
+{
+ strcpy (tmp_buffer, trav_info->dir_name);
+ fat_dir_entry_get_name (parent,
+ tmp_buffer + strlen (trav_info->dir_name));
+ strcat (tmp_buffer, "\\");
+
+ return fat_traverse_begin (trav_info->fs,
+ fat_dir_entry_get_first_cluster (parent, trav_info->fs),
+ tmp_buffer);
+}
+
+FatDirEntry*
+fat_traverse_next_dir_entry (FatTraverseInfo *trav_info)
+{
+ if (trav_info->eof)
+ return NULL;
+
+ trav_info->current_entry++;
+ if (trav_info->current_entry
+ >= fat_traverse_entries_per_buffer (trav_info)) {
+ if (trav_info->dirty) {
+ if (!write_dir_buffer (trav_info))
+ return NULL;
+ }
+
+ trav_info->current_entry = 0;
+ if (is_last_buffer (trav_info)) {
+ trav_info->eof = 1;
+ return NULL;
+ }
+ if (!read_next_dir_buffer (trav_info))
+ return NULL;
+ }
+ return trav_info->dir_entries + trav_info->current_entry;
+}
+
+FatCluster _GL_ATTRIBUTE_PURE
+fat_dir_entry_get_first_cluster (FatDirEntry* dir_entry, PedFileSystem *fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ switch (fs_info->fat_type) {
+ case FAT_TYPE_FAT12:
+ case FAT_TYPE_FAT16:
+ return PED_LE16_TO_CPU (dir_entry->first_cluster);
+
+ case FAT_TYPE_FAT32:
+ return PED_LE16_TO_CPU (dir_entry->first_cluster_high)
+ * 65536L
+ + PED_LE16_TO_CPU (dir_entry->first_cluster);
+ }
+
+ return 0;
+}
+
+void
+fat_dir_entry_set_first_cluster (FatDirEntry* dir_entry, PedFileSystem* fs,
+ FatCluster cluster)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+
+ switch (fs_info->fat_type) {
+ case FAT_TYPE_FAT12:
+ PED_ASSERT (0);
+ break;
+
+ case FAT_TYPE_FAT16:
+ dir_entry->first_cluster = PED_CPU_TO_LE16 (cluster);
+ break;
+
+ case FAT_TYPE_FAT32:
+ dir_entry->first_cluster
+ = PED_CPU_TO_LE16 (cluster & 0xffff);
+ dir_entry->first_cluster_high
+ = PED_CPU_TO_LE16 (cluster / 0x10000);
+ break;
+ }
+}
+
+uint32_t _GL_ATTRIBUTE_PURE
+fat_dir_entry_get_length (FatDirEntry* dir_entry)
+{
+ return PED_LE32_TO_CPU (dir_entry->length);
+}
+
+int
+fat_dir_entry_is_null_term (const FatDirEntry* dir_entry)
+{
+ FatDirEntry null_entry;
+
+ memset (&null_entry, 0, sizeof (null_entry));
+ return memcmp (&null_entry, dir_entry, sizeof (null_entry)) == 0;
+}
+
+int _GL_ATTRIBUTE_PURE
+fat_dir_entry_is_active (FatDirEntry* dir_entry)
+{
+ if ((unsigned char) dir_entry->name[0] == DELETED_FLAG) return 0;
+ if ((unsigned char) dir_entry->name[0] == 0) return 0;
+ if ((unsigned char) dir_entry->name[0] == 0xF6) return 0;
+ return 1;
+}
+
+int _GL_ATTRIBUTE_PURE
+fat_dir_entry_is_file (FatDirEntry* dir_entry) {
+ if (dir_entry->attributes == VFAT_ATTR) return 0;
+ if (dir_entry->attributes & VOLUME_LABEL_ATTR) return 0;
+ if (!fat_dir_entry_is_active (dir_entry)) return 0;
+ if ((dir_entry->attributes & DIRECTORY_ATTR) == DIRECTORY_ATTR) return 0;
+ return 1;
+}
+
+int _GL_ATTRIBUTE_PURE
+fat_dir_entry_is_system_file (FatDirEntry* dir_entry)
+{
+ if (!fat_dir_entry_is_file (dir_entry)) return 0;
+ return (dir_entry->attributes & SYSTEM_ATTR)
+ || (dir_entry->attributes & HIDDEN_ATTR);
+}
+
+int _GL_ATTRIBUTE_PURE
+fat_dir_entry_is_directory (FatDirEntry* dir_entry)
+{
+ if (dir_entry->attributes == VFAT_ATTR) return 0;
+ if (dir_entry->attributes & VOLUME_LABEL_ATTR) return 0;
+ if (!fat_dir_entry_is_active (dir_entry)) return 0;
+ return (dir_entry->attributes & DIRECTORY_ATTR) == DIRECTORY_ATTR;
+}
+
+int
+fat_dir_entry_has_first_cluster (FatDirEntry* dir_entry, PedFileSystem* fs)
+{
+ FatSpecific* fs_info = FAT_SPECIFIC (fs);
+ FatCluster first_cluster;
+
+ if (!fat_dir_entry_is_file (dir_entry)
+ && !fat_dir_entry_is_directory (dir_entry))
+ return 0;
+
+ first_cluster = fat_dir_entry_get_first_cluster (dir_entry, fs);
+ if (first_cluster == 0
+ || fat_table_is_eof (fs_info->fat, first_cluster))
+ return 0;
+
+ return 1;
+}
+
+/*
+ decrypts silly DOS names to FILENAME.EXT
+*/
+void
+fat_dir_entry_get_name (const FatDirEntry *dir_entry, char *result) {
+ size_t i;
+ const char *src;
+ const char *ext;
+
+ src = dir_entry->name;
+
+ for (i=0; i < sizeof dir_entry->name; i++) {
+ if (src[i] == ' ' || src[i] == 0) break;
+ *result++ = src[i];
+ }
+
+ ext = (const char *) dir_entry->extension;
+ if (ext[0] != ' ' && ext[0] != 0) {
+ *result++ = '.';
+ for (i=0; i < sizeof dir_entry->extension; i++) {
+ if (ext[i] == ' ' || ext[i] == 0) break;
+ *result++ = ext[i];
+ }
+ }
+
+ *result = 0;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/fat/traverse.h b/libparted/fs/r/fat/traverse.h
new file mode 100644
index 0000000..02318ba
--- /dev/null
+++ b/libparted/fs/r/fat/traverse.h
@@ -0,0 +1,75 @@
+/*
+ libparted
+ Copyright (C) 1998-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef TRAVERSE_H_INCLUDED
+#define TRAVERSE_H_INCLUDED
+
+#include "fatio.h"
+
+typedef struct _FatTraverseInfo FatTraverseInfo;
+
+struct _FatTraverseInfo {
+ PedFileSystem* fs;
+ char* dir_name;
+
+ int is_legacy_root_dir;
+ int dirty;
+ int eof;
+
+ FatDirEntry* dir_entries;
+ int current_entry;
+ FatCluster this_buffer, next_buffer;
+ int buffer_size;
+};
+
+extern int fat_traverse_entries_per_buffer (FatTraverseInfo* trav_info);
+
+/* starts traversal at an arbitary cluster. if start_cluster==0, then uses
+ root directory */
+extern FatTraverseInfo* fat_traverse_begin (PedFileSystem* fs,
+ FatCluster start_cluster,
+ const char* dir_name);
+
+extern int fat_traverse_complete (FatTraverseInfo* trav_info);
+
+extern FatTraverseInfo* fat_traverse_directory (FatTraverseInfo* trav_info,
+ FatDirEntry* parent);
+
+extern void fat_traverse_mark_dirty (FatTraverseInfo* trav_info);
+
+extern FatDirEntry* fat_traverse_next_dir_entry (FatTraverseInfo* trav_info);
+
+extern FatCluster fat_dir_entry_get_first_cluster (FatDirEntry* dir_entry,
+ PedFileSystem* fs);
+
+extern void fat_dir_entry_set_first_cluster (FatDirEntry* dir_entry,
+ PedFileSystem* fs, FatCluster cluster);
+
+extern uint32_t fat_dir_entry_get_length (FatDirEntry* dir_entry);
+
+extern int fat_dir_entry_is_null_term (const FatDirEntry* dir_entry);
+extern int fat_dir_entry_is_file (FatDirEntry* dir_entry);
+extern int fat_dir_entry_is_system_file (FatDirEntry* dir_entry);
+extern int fat_dir_entry_is_directory (FatDirEntry* dir_entry);
+extern void fat_dir_entry_get_name (const FatDirEntry* dir_entry, char* result);
+extern int fat_dir_entry_is_active (FatDirEntry* dir_entry);
+extern int fat_dir_entry_has_first_cluster (FatDirEntry* dir_entry,
+ PedFileSystem* fs);
+
+#endif /* TRAVERSE_H_INCLUDED */
diff --git a/libparted/fs/r/filesys.c b/libparted/fs/r/filesys.c
new file mode 100644
index 0000000..856238c
--- /dev/null
+++ b/libparted/fs/r/filesys.c
@@ -0,0 +1,320 @@
+/* libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file filesys.c */
+
+/**
+ * \addtogroup PedFileSystem
+ *
+ * \note File systems exist on a PedGeometry - NOT a PedPartition.
+ *
+ * @{
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+#ifndef MIN
+# define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
+typedef PedFileSystem * (*open_fn_t) (PedGeometry *);
+extern PedFileSystem *hfsplus_open (PedGeometry *);
+extern PedFileSystem *hfs_open (PedGeometry *);
+extern PedFileSystem *fat_open (PedGeometry *);
+
+typedef int (*close_fn_t) (PedFileSystem *);
+extern int hfsplus_close (PedFileSystem *);
+extern int hfs_close (PedFileSystem *);
+extern int fat_close (PedFileSystem *);
+
+typedef int (*resize_fn_t) (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+extern int hfsplus_resize (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+extern int hfs_resize (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+extern int fat_resize (PedFileSystem *fs, PedGeometry *geom,
+ PedTimer *timer);
+
+typedef PedConstraint * (*resize_constraint_fn_t) (PedFileSystem const *fs);
+extern PedConstraint *hfsplus_get_resize_constraint (PedFileSystem const *fs);
+extern PedConstraint *hfs_get_resize_constraint (PedFileSystem const *fs);
+extern PedConstraint *fat_get_resize_constraint (PedFileSystem const *fs);
+
+static bool
+is_hfs_plus (char const *fs_type_name)
+{
+ return STREQ (fs_type_name, "hfsx") || STREQ (fs_type_name, "hfs+");
+}
+
+static open_fn_t
+open_fn (char const *fs_type_name)
+{
+ if (is_hfs_plus (fs_type_name))
+ return hfsplus_open;
+ if (STREQ (fs_type_name, "hfs"))
+ return hfs_open;
+ if (strncmp (fs_type_name, "fat", 3) == 0)
+ return fat_open;
+ return NULL;
+}
+
+static close_fn_t
+close_fn (char const *fs_type_name)
+{
+ if (is_hfs_plus (fs_type_name))
+ return hfsplus_close;
+ if (STREQ (fs_type_name, "hfs"))
+ return hfs_close;
+ if (strncmp (fs_type_name, "fat", 3) == 0)
+ return fat_close;
+ return NULL;
+}
+
+static resize_fn_t
+resize_fn (char const *fs_type_name)
+{
+ if (is_hfs_plus (fs_type_name))
+ return hfsplus_resize;
+ if (STREQ (fs_type_name, "hfs"))
+ return hfs_resize;
+ if (strncmp (fs_type_name, "fat", 3) == 0)
+ return fat_resize;
+ return NULL;
+}
+
+static resize_constraint_fn_t
+resize_constraint_fn (char const *fs_type_name)
+{
+ if (is_hfs_plus (fs_type_name))
+ return hfsplus_get_resize_constraint;
+ if (STREQ (fs_type_name, "hfs"))
+ return hfs_get_resize_constraint;
+ if (strncmp (fs_type_name, "fat", 3) == 0)
+ return fat_get_resize_constraint;
+ return NULL;
+}
+
+/**
+ * This function opens the file system stored on \p geom, if it
+ * can find one.
+ * It is often called in the following manner:
+ * \code
+ * fs = ped_file_system_open (&part.geom)
+ * \endcode
+ *
+ * \throws PED_EXCEPTION_ERROR if file system could not be detected
+ * \throws PED_EXCEPTION_ERROR if the file system is bigger than its volume
+ * \throws PED_EXCEPTION_NO_FEATURE if opening of a file system stored on
+ * \p geom is not implemented
+ *
+ * \return a PedFileSystem on success, \c NULL on failure.
+ */
+PedFileSystem *
+ped_file_system_open (PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_device_open (geom->dev))
+ goto error;
+
+ PedFileSystemType *type = ped_file_system_probe (geom);
+ if (!type) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Could not detect file system."));
+ goto error_close_dev;
+ }
+
+ open_fn_t open_f = open_fn (type->name);
+ if (open_f == NULL) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("resizing %s file systems is not supported"),
+ type->name);
+ goto error_close_dev;
+ }
+
+ PedGeometry *probed_geom = ped_file_system_probe_specific (type, geom);
+ if (!probed_geom)
+ goto error_close_dev;
+ if (!ped_geometry_test_inside (geom, probed_geom)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The file system is bigger than its volume!"))
+ != PED_EXCEPTION_IGNORE)
+ goto error_destroy_probed_geom;
+ }
+
+ PedFileSystem *fs = (*open_f) (probed_geom);
+ if (!fs)
+ goto error_destroy_probed_geom;
+ ped_geometry_destroy (probed_geom);
+ fs->type = type;
+ return fs;
+
+error_destroy_probed_geom:
+ ped_geometry_destroy (probed_geom);
+error_close_dev:
+ ped_device_close (geom->dev);
+error:
+ return NULL;
+}
+
+/**
+ * Close file system \p fs.
+ *
+ * \return \c 1 on success, \c 0 on failure
+ */
+int
+ped_file_system_close (PedFileSystem* fs)
+{
+ PED_ASSERT (fs != NULL);
+ PedDevice *dev = fs->geom->dev;
+ close_fn_t fn = close_fn (fs->type->name);
+
+ if (!fn || !(fn (fs)))
+ goto error_close_dev;
+ ped_device_close (dev);
+ return 1;
+
+error_close_dev:
+ ped_device_close (dev);
+ return 0;
+}
+
+/**
+ * This function erases all file system signatures that indicate that a
+ * file system occupies a given region described by \p geom.
+ * After this operation ped_file_system_probe() won't detect any file system.
+ *
+ * \return \c 1 on success, \c 0 on failure
+ */
+static int
+ped_file_system_clobber (PedGeometry* geom)
+{
+ PED_ASSERT (geom != NULL);
+
+ if (!ped_device_open (geom->dev))
+ return 0;
+
+ /* Clear the first three and the last two sectors, albeit fewer
+ when GEOM is too small. */
+ PedSector len = MIN (geom->length, geom->dev->length);
+
+ int ok = (len <= 5
+ ? ptt_geom_clear_sectors (geom, 0, len)
+ : (ptt_geom_clear_sectors (geom, 0, 3)
+ && ptt_geom_clear_sectors (geom, geom->dev->length - 2, 2)));
+
+ ped_device_close (geom->dev);
+ return !!ok;
+}
+
+/* This function erases all signatures that indicate the presence of
+ * a file system in a particular region, without erasing any data
+ * contained inside the "exclude" region.
+ */
+static int
+ped_file_system_clobber_exclude (PedGeometry* geom,
+ const PedGeometry* exclude)
+{
+ PedGeometry* clobber_geom;
+ int status;
+
+ if (ped_geometry_test_sector_inside (exclude, geom->start))
+ return 1;
+
+ clobber_geom = ped_geometry_duplicate (geom);
+ if (ped_geometry_test_overlap (clobber_geom, exclude))
+ ped_geometry_set_end (clobber_geom, exclude->start - 1);
+
+ status = ped_file_system_clobber (clobber_geom);
+ ped_geometry_destroy (clobber_geom);
+ return status;
+}
+
+/**
+ * Resize \p fs to new geometry \p geom.
+ *
+ * \p geom should satisfy the ped_file_system_get_resize_constraint().
+ * (This isn't asserted, so it's not a bug not to... just it's likely
+ * to fail ;) If \p timer is non-NULL, it is used as the progress meter.
+ *
+ * \throws PED_EXCEPTION_NO_FEATURE if resizing of file system \p fs
+ * is not implemented yet
+ *
+ * \return \c 0 on failure
+ */
+int
+ped_file_system_resize (PedFileSystem *fs, PedGeometry *geom, PedTimer *timer)
+{
+ PED_ASSERT (fs != NULL);
+ PED_ASSERT (geom != NULL);
+
+ resize_fn_t resize_f = resize_fn (fs->type->name);
+ if (resize_f == NULL) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("resizing %s file systems is not supported"),
+ fs->type->name);
+ return 0;
+ }
+
+ if (!ped_file_system_clobber_exclude (geom, fs->geom))
+ return 0;
+
+ return resize_f (fs, geom, timer);
+}
+
+/**
+ * Return a constraint that represents all of the possible ways the
+ * file system \p fs can be resized with ped_file_system_resize().
+ * This takes into account the amount of used space on
+ * the filesystem \p fs and the capabilities of the resize algorithm.
+ * Hints:
+ * -# if constraint->start_align->grain_size == 0, or
+ * constraint->start_geom->length == 1, then the start cannot be moved
+ * -# constraint->min_size is the minimum size you can resize the partition
+ * to. You might want to tell the user this ;-).
+ *
+ * \return a PedConstraint on success, \c NULL on failure
+ */
+PedConstraint *
+ped_file_system_get_resize_constraint (const PedFileSystem *fs)
+{
+ PED_ASSERT (fs != NULL);
+
+ resize_constraint_fn_t resize_constraint_f =
+ resize_constraint_fn (fs->type->name);
+ if (resize_constraint_f == NULL)
+ return NULL;
+
+ return resize_constraint_f (fs);
+}
diff --git a/libparted/fs/r/hfs/advfs.c b/libparted/fs/r/hfs/advfs.c
new file mode 100644
index 0000000..cb66e9e
--- /dev/null
+++ b/libparted/fs/r/hfs/advfs.c
@@ -0,0 +1,332 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "file.h"
+
+#include "advfs.h"
+
+/* - if a < b, 0 if a == b, + if a > b */
+/* Comparaison is done in the following order : */
+/* CNID, then fork type, then start block */
+/* Note that HFS implementation in linux has a bug */
+/* in this function */
+static int
+hfs_extent_key_cmp(HfsPrivateGenericKey* a, HfsPrivateGenericKey* b)
+{
+ HfsExtentKey* key1 = (HfsExtentKey*) a;
+ HfsExtentKey* key2 = (HfsExtentKey*) b;
+
+ /* do NOT use a substraction, because */
+ /* 0xFFFFFFFF - 1 = 0xFFFFFFFE so this */
+ /* would return -2, despite the fact */
+ /* 0xFFFFFFFF > 1 !!! (this is the 2.4 bug) */
+ if (key1->file_ID != key2->file_ID)
+ return PED_BE32_TO_CPU(key1->file_ID) <
+ PED_BE32_TO_CPU(key2->file_ID) ?
+ -1 : +1;
+
+ if (key1->type != key2->type)
+ return (int)(key1->type - key2->type);
+
+ if (key1->start == key2->start)
+ return 0;
+ /* the whole thing wont work with 16 bits ints */
+ /* anyway */
+ return (int)( PED_BE16_TO_CPU(key1->start) -
+ PED_BE16_TO_CPU(key2->start) );
+}
+
+/* do a B-Tree lookup */
+/* read the first record immediatly inferior or egal to the given key */
+/* return 0 on error */
+/* record_out _must_ be large enough to receive record_size bytes */
+/* WARNING : the compare function called only handle Extents BTree */
+/* so modify this function if you want to do lookup in */
+/* other BTrees has well */
+int
+hfs_btree_search (HfsPrivateFile* b_tree_file, HfsPrivateGenericKey* key,
+ void *record_out, unsigned int record_size,
+ HfsCPrivateLeafRec* record_ref)
+{
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+ HfsHeaderRecord* header;
+ HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node;
+ HfsPrivateGenericKey* record_key = NULL;
+ unsigned int node_number, record_number;
+ int i;
+ uint16_t record_pos;
+
+ /* Read the header node */
+ if (!hfs_file_read_sector(b_tree_file, node, 0))
+ return 0;
+ uint16_t offset;
+ memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t));
+ header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset));
+
+ /* Get the node number of the root */
+ node_number = PED_BE32_TO_CPU(header->root_node);
+ if (!node_number)
+ return 0;
+
+ /* Read the root node */
+ if (!hfs_file_read_sector(b_tree_file, node, node_number))
+ return 0;
+
+ /* Follow the white rabbit */
+ while (1) {
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = record_number; i; i--) {
+ uint16_t value;
+ memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t));
+ record_pos = PED_BE16_TO_CPU(value);
+ record_key = (HfsPrivateGenericKey*) (node + record_pos);
+ /* check for obvious error in FS */
+ if ((record_pos< HFS_FIRST_REC)
+ || (record_pos>= PED_SECTOR_SIZE_DEFAULT
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ return 0;
+ }
+ if (hfs_extent_key_cmp(record_key, key) <= 0)
+ break;
+ }
+ if (!i) return 0;
+ if (desc->type == HFS_IDX_NODE) {
+ unsigned int skip;
+
+ skip = (1 + record_key->key_length + 1) & ~1;
+ uint32_t value;
+ memcpy(&value, node+record_pos+skip, sizeof(uint32_t));
+ node_number = PED_BE32_TO_CPU(value);
+ if (!hfs_file_read_sector(b_tree_file, node,
+ node_number))
+ return 0;
+ } else
+ break;
+ }
+
+ /* copy the result if needed */
+ if (record_size)
+ memcpy (record_out, record_key, record_size);
+
+ /* send record reference if needed */
+ if (record_ref) {
+ record_ref->node_size = 1; /* in sectors */
+ record_ref->node_number = node_number;
+ record_ref->record_pos = record_pos;
+ record_ref->record_number = i;
+ }
+
+ /* success */
+ return 1;
+}
+
+/* free the bad blocks linked list */
+void
+hfs_free_bad_blocks_list(HfsPrivateLinkExtent* first)
+{
+ HfsPrivateLinkExtent* next;
+
+ while (first) {
+ next = first->next;
+ free (first);
+ first = next;
+ }
+}
+
+/* This function reads bad blocks extents in the extents file
+ and store it in f.s. specific data of fs */
+int
+hfs_read_bad_blocks (const PedFileSystem *fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+
+ if (priv_data->bad_blocks_loaded)
+ return 1;
+
+ {
+ uint8_t record[sizeof (HfsExtentKey)
+ + sizeof (HfsExtDataRec)];
+ HfsExtentKey search;
+ HfsExtentKey* ret_key = (HfsExtentKey*) record;
+ HfsExtDescriptor* ret_cache = (HfsExtDescriptor*)
+ (record + sizeof (HfsExtentKey));
+ unsigned int block, last_start, first_pass = 1;
+
+ search.key_length = sizeof (HfsExtentKey) - 1;
+ search.type = HFS_DATA_FORK;
+ search.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID);
+
+ last_start = -1; block = 0;
+ while (1) {
+ int i;
+
+ search.start = PED_CPU_TO_BE16 (block);
+ if (!hfs_btree_search (priv_data->extent_file,
+ (HfsPrivateGenericKey*) &search,
+ record, sizeof (record), NULL)
+ || ret_key->file_ID != search.file_ID
+ || ret_key->type != search.type) {
+ if (first_pass)
+ break;
+ else
+ goto errbb;
+ }
+ if (PED_BE16_TO_CPU (ret_key->start) == last_start)
+ break;
+
+ last_start = PED_BE16_TO_CPU (ret_key->start);
+ for (i = 0; i < HFS_EXT_NB; i++) {
+ if (ret_cache[i].block_count) {
+ HfsPrivateLinkExtent* new_xt =
+ (HfsPrivateLinkExtent*) ped_malloc (
+ sizeof (HfsPrivateLinkExtent));
+ if (!new_xt)
+ goto errbb;
+ new_xt->next = priv_data->bad_blocks_xtent_list;
+ memcpy(&(new_xt->extent), ret_cache+i,
+ sizeof (HfsExtDescriptor));
+ priv_data->bad_blocks_xtent_list = new_xt;
+ priv_data->bad_blocks_xtent_nb++;
+ block += PED_BE16_TO_CPU (
+ ret_cache[i].block_count);
+ }
+ }
+ first_pass = 0;
+ }
+
+ priv_data->bad_blocks_loaded = 1;
+ return 1;}
+
+errbb: hfs_free_bad_blocks_list(priv_data->bad_blocks_xtent_list);
+ priv_data->bad_blocks_xtent_list=NULL;
+ priv_data->bad_blocks_xtent_nb=0;
+ return 0;
+}
+
+/* This function check if fblock is a bad block */
+int _GL_ATTRIBUTE_PURE
+hfs_is_bad_block (const PedFileSystem *fs, unsigned int fblock)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsPrivateLinkExtent* walk;
+
+ for (walk = priv_data->bad_blocks_xtent_list; walk; walk = walk->next) {
+ /* Won't compile without the strange cast ! gcc bug ? */
+ /* or maybe C subtilties... */
+ if ((fblock >= PED_BE16_TO_CPU (walk->extent.start_block)) &&
+ (fblock < (unsigned int) (PED_BE16_TO_CPU (
+ walk->extent.start_block)
+ + PED_BE16_TO_CPU (
+ walk->extent.block_count))))
+ return 1;
+ }
+
+ return 0;
+}
+
+/* This function returns the first sector of the last free block of an
+ HFS volume we can get after a hfs_pack_free_space_from_block call */
+/* On error this function returns 0 */
+PedSector
+hfs_get_empty_end (const PedFileSystem *fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsMasterDirectoryBlock* mdb = priv_data->mdb;
+ unsigned int block, last_bad, end_free_blocks;
+
+ /* find the next block to the last bad block of the volume */
+ if (!hfs_read_bad_blocks (fs))
+ return 0;
+
+ HfsPrivateLinkExtent* l;
+ last_bad = 0;
+ for (l = priv_data->bad_blocks_xtent_list; l; l = l->next) {
+ if ((unsigned int) PED_BE16_TO_CPU (l->extent.start_block)
+ + PED_BE16_TO_CPU (l->extent.block_count) > last_bad)
+ last_bad = PED_BE16_TO_CPU (l->extent.start_block)
+ + PED_BE16_TO_CPU (l->extent.block_count);
+ }
+
+ /* Count the free blocks from last_bad to the end of the volume */
+ end_free_blocks = 0;
+ for (block = last_bad;
+ block < PED_BE16_TO_CPU (mdb->total_blocks);
+ block++) {
+ if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ end_free_blocks++;
+ }
+
+ /* Calculate the block that will by the first free at the
+ end of the volume */
+ block = PED_BE16_TO_CPU (mdb->total_blocks) - end_free_blocks;
+
+ return (PedSector) PED_BE16_TO_CPU (mdb->start_block)
+ + (PedSector) block * (PED_BE32_TO_CPU (mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+}
+
+/* return the block which should be used to pack data to have at
+ least free fblock blocks at the end of the volume */
+unsigned int _GL_ATTRIBUTE_PURE
+hfs_find_start_pack (const PedFileSystem *fs, unsigned int fblock)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ unsigned int block;
+
+ for (block = PED_BE16_TO_CPU (priv_data->mdb->total_blocks) - 1;
+ block && fblock;
+ block--) {
+ if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ fblock--;
+ }
+
+ while (block && !TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ block--;
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ block++;
+
+ return block;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/advfs.h b/libparted/fs/r/hfs/advfs.h
new file mode 100644
index 0000000..094298e
--- /dev/null
+++ b/libparted/fs/r/hfs/advfs.h
@@ -0,0 +1,49 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _ADVFS_H
+#define _ADVFS_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfs_btree_search (HfsPrivateFile* b_tree_file, HfsPrivateGenericKey* key,
+ void *record_out, unsigned int record_size,
+ HfsCPrivateLeafRec* record_ref);
+
+void
+hfs_free_bad_blocks_list(HfsPrivateLinkExtent* first);
+
+int
+hfs_read_bad_blocks (const PedFileSystem *fs);
+
+int
+hfs_is_bad_block (const PedFileSystem *fs, unsigned int fblock);
+
+PedSector
+hfs_get_empty_end (const PedFileSystem *fs);
+
+unsigned int
+hfs_find_start_pack (const PedFileSystem *fs, unsigned int fblock);
+
+#endif /* _ADVFS_H */
diff --git a/libparted/fs/r/hfs/advfs_plus.c b/libparted/fs/r/hfs/advfs_plus.c
new file mode 100644
index 0000000..6104460
--- /dev/null
+++ b/libparted/fs/r/hfs/advfs_plus.c
@@ -0,0 +1,385 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "advfs.h"
+#include "file_plus.h"
+
+#include "advfs_plus.h"
+
+/* - if a < b, 0 if a == b, + if a > b */
+/* Comparaison is done in the following order : */
+/* CNID, then fork type, then start block */
+static int
+hfsplus_extent_key_cmp(HfsPPrivateGenericKey* a, HfsPPrivateGenericKey* b)
+{
+ HfsPExtentKey* key1 = (HfsPExtentKey*) a;
+ HfsPExtentKey* key2 = (HfsPExtentKey*) b;
+
+ if (key1->file_ID != key2->file_ID)
+ return PED_BE32_TO_CPU(key1->file_ID) <
+ PED_BE32_TO_CPU(key2->file_ID) ?
+ -1 : +1;
+
+ if (key1->type != key2->type)
+ return (int)(key1->type - key2->type);
+
+ if (key1->start == key2->start)
+ return 0;
+ return PED_BE32_TO_CPU(key1->start) <
+ PED_BE32_TO_CPU(key2->start) ?
+ -1 : +1;
+}
+
+/* do a B-Tree lookup */
+/* read the first record immediatly inferior or egal to the given key */
+/* return 0 on error */
+/* record_out _must_ be large enough to receive the whole record (key + data) */
+/* WARNING : the search function called only handle Extents BTree */
+/* so modify this function if you want to do lookup in */
+/* other BTrees has well */
+int
+hfsplus_btree_search (HfsPPrivateFile* b_tree_file, HfsPPrivateGenericKey* key,
+ void *record_out, unsigned int record_size,
+ HfsCPrivateLeafRec* record_ref)
+{
+ uint8_t node_1[PED_SECTOR_SIZE_DEFAULT];
+ uint8_t* node;
+ HfsPHeaderRecord* header;
+ HfsPPrivateGenericKey* record_key = NULL;
+ unsigned int node_number, record_number, size, bsize;
+ int i;
+ uint16_t record_pos;
+
+ /* Read the header node */
+ if (!hfsplus_file_read_sector(b_tree_file, node_1, 0))
+ return 0;
+ header = (HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC);
+
+ /* Get the node number of the root */
+ node_number = PED_BE32_TO_CPU (header->root_node);
+ if (!node_number)
+ return 0;
+
+ /* Get the size of a node in sectors and allocate buffer */
+ size = (bsize = PED_BE16_TO_CPU (header->node_size)) / PED_SECTOR_SIZE_DEFAULT;
+ node = ped_malloc (bsize);
+ if (!node)
+ return 0;
+ HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node;
+
+ /* Read the root node */
+ if (!hfsplus_file_read (b_tree_file, node,
+ (PedSector) node_number * size, size))
+ return 0;
+
+ /* Follow the white rabbit */
+ while (1) {
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = record_number; i; i--) {
+ uint16_t value;
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
+ record_pos = PED_BE16_TO_CPU(value);
+ record_key = (HfsPPrivateGenericKey*) (node + record_pos);
+ /* check for obvious error in FS */
+ if ((record_pos < HFS_FIRST_REC)
+ || (record_pos >= (signed)bsize
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ free (node);
+ return 0;
+ }
+ if (hfsplus_extent_key_cmp(record_key, key) <= 0)
+ break;
+ }
+ if (!i) { free (node); return 0; }
+ if (desc->type == HFS_IDX_NODE) {
+ unsigned int skip;
+
+ skip = ( 2 + PED_BE16_TO_CPU (record_key->key_length)
+ + 1 ) & ~1;
+ uint32_t value;
+ memcpy(&value, node+record_pos+skip, sizeof(uint32_t));
+ node_number = PED_BE32_TO_CPU(value);
+ if (!hfsplus_file_read(b_tree_file, node,
+ (PedSector) node_number * size,
+ size)) {
+ free (node);
+ return 0;
+ }
+ } else
+ break;
+ }
+
+ /* copy the result if needed */
+ if (record_size)
+ memcpy (record_out, record_key, record_size);
+
+ /* send record reference if needed */
+ if (record_ref) {
+ record_ref->node_size = size; /* in sectors */
+ record_ref->node_number = node_number;
+ record_ref->record_pos = record_pos;
+ record_ref->record_number = i;
+ }
+
+ /* success */
+ free (node);
+ return 1;
+}
+
+/* free the bad blocks linked list */
+void
+hfsplus_free_bad_blocks_list(HfsPPrivateLinkExtent* first)
+{
+ HfsPPrivateLinkExtent* next;
+
+ while (first) {
+ next = first->next;
+ free (first);
+ first = next;
+ }
+}
+
+/* This function reads bad blocks extents in the extents file
+ and store it in f.s. specific data of fs */
+int
+hfsplus_read_bad_blocks (const PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+
+ if (priv_data->bad_blocks_loaded)
+ return 1;
+
+ {
+ uint8_t record[sizeof (HfsPExtentKey)
+ + sizeof (HfsPExtDataRec)];
+ HfsPExtentKey search;
+ HfsPExtentKey* ret_key = (HfsPExtentKey*) record;
+ HfsPExtDescriptor* ret_cache = (HfsPExtDescriptor*)
+ (record + sizeof (HfsPExtentKey));
+ int block, first_pass = 1;
+ unsigned int last_start;
+
+ search.key_length = sizeof (HfsExtentKey) - 2;
+ search.type = HFS_DATA_FORK;
+ search.pad = 0;
+ search.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID);
+
+ last_start = -1; block = 0;
+ while (1) {
+ int i;
+
+ search.start = PED_CPU_TO_BE32 (block);
+ if (!hfsplus_btree_search (priv_data->extents_file,
+ (HfsPPrivateGenericKey*) &search,
+ record, sizeof (record), NULL)
+ || ret_key->file_ID != search.file_ID
+ || ret_key->type != search.type) {
+ if (first_pass)
+ break;
+ else
+ goto errbbp;
+ }
+ if (PED_BE32_TO_CPU (ret_key->start) == last_start)
+ break;
+
+ last_start = PED_BE32_TO_CPU (ret_key->start);
+ for (i = 0; i < HFSP_EXT_NB; i++) {
+ if (ret_cache[i].block_count) {
+ HfsPPrivateLinkExtent* new_xt =
+ (HfsPPrivateLinkExtent*) ped_malloc (
+ sizeof (HfsPPrivateLinkExtent));
+ if (!new_xt)
+ goto errbbp;
+ new_xt->next = priv_data->bad_blocks_xtent_list;
+ memcpy (&(new_xt->extent), ret_cache+i,
+ sizeof (HfsPExtDescriptor));
+ priv_data->bad_blocks_xtent_list = new_xt;
+ priv_data->bad_blocks_xtent_nb++;
+ block += PED_BE32_TO_CPU (
+ ret_cache[i].block_count);
+ }
+ }
+ first_pass = 0;
+ }
+
+ priv_data->bad_blocks_loaded = 1;
+ return 1;}
+
+errbbp: hfsplus_free_bad_blocks_list(priv_data->bad_blocks_xtent_list);
+ priv_data->bad_blocks_xtent_list=NULL;
+ priv_data->bad_blocks_xtent_nb=0;
+ return 0;
+}
+
+/* This function check if fblock is a bad block */
+int _GL_ATTRIBUTE_PURE
+hfsplus_is_bad_block (const PedFileSystem *fs, unsigned int fblock)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPPrivateLinkExtent* walk;
+
+ for (walk = priv_data->bad_blocks_xtent_list; walk; walk = walk->next) {
+ /* Won't compile without the strange cast ! gcc bug ? */
+ /* or maybe C subtilties... */
+ if ((fblock >= PED_BE32_TO_CPU (walk->extent.start_block)) &&
+ (fblock < (unsigned int)(PED_BE32_TO_CPU (
+ walk->extent.start_block)
+ + PED_BE32_TO_CPU (walk->extent.block_count))))
+ return 1;
+ }
+
+ return 0;
+}
+
+/* This function returns the first sector of the last free block of
+ an HFS+ volume we can get after a hfsplus_pack_free_space_from_block call */
+PedSector
+hfsplus_get_empty_end (const PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPVolumeHeader* vh = priv_data->vh;
+ unsigned int block, last_bad, end_free_blocks;
+
+ /* find the next block to the last bad block of the volume */
+ if (!hfsplus_read_bad_blocks (fs)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Bad blocks could not be read."));
+ return 0;
+ }
+
+ HfsPPrivateLinkExtent* l;
+ last_bad = 0;
+ for (l = priv_data->bad_blocks_xtent_list; l; l = l->next) {
+ if ((unsigned int) PED_BE32_TO_CPU (l->extent.start_block)
+ + PED_BE32_TO_CPU (l->extent.block_count) > last_bad)
+ last_bad = PED_BE32_TO_CPU (l->extent.start_block)
+ + PED_BE32_TO_CPU (l->extent.block_count);
+ }
+
+ /* Count the free blocks from last_bad to the end of the volume */
+ end_free_blocks = 0;
+ for (block = last_bad;
+ block < PED_BE32_TO_CPU (vh->total_blocks);
+ block++) {
+ if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ end_free_blocks++;
+ }
+
+ /* Calculate the block that will by the first free at
+ the end of the volume */
+ block = PED_BE32_TO_CPU (vh->total_blocks) - end_free_blocks;
+
+ return (PedSector) block * ( PED_BE32_TO_CPU (vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT );
+}
+
+/* On error, returns 0 */
+PedSector
+hfsplus_get_min_size (const PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ PedSector min_size;
+
+ /* don't need to add anything because every sector
+ can be part of allocation blocks in HFS+, and
+ the last block _must_ be reserved */
+ min_size = hfsplus_get_empty_end(fs);
+ if (!min_size) return 0;
+
+ if (priv_data->wrapper) {
+ HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*)
+ priv_data->wrapper->type_specific;
+ unsigned int hfs_sect_block;
+ PedSector hgee;
+ hfs_sect_block =
+ PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+ /*
+ * if hfs+ is embedded in an hfs wrapper then the new size is :
+ * the new size of the hfs+ volume rounded up to the size
+ * of hfs blocks
+ * + the minimum size of the hfs wrapper without any hfs+
+ * modification
+ * - the current size of the hfs+ volume in the hfs wrapper
+ */
+ hgee = hfs_get_empty_end(priv_data->wrapper);
+ if (!hgee) return 0;
+ min_size = ((min_size + hfs_sect_block - 1) / hfs_sect_block)
+ * hfs_sect_block
+ + hgee + 2
+ - (PedSector) PED_BE16_TO_CPU ( hfs_priv_data->mdb
+ ->old_new.embedded
+ .location.block_count )
+ * hfs_sect_block;
+ }
+
+ return min_size;
+}
+
+/* return the block which should be used to pack data to have
+ at least free fblock blocks at the end of the volume */
+unsigned int _GL_ATTRIBUTE_PURE
+hfsplus_find_start_pack (const PedFileSystem *fs, unsigned int fblock)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ unsigned int block;
+
+ for (block = PED_BE32_TO_CPU (priv_data->vh->total_blocks) - 1;
+ block && fblock;
+ block--) {
+ if (!TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ fblock--;
+ }
+
+ while (block && !TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ block--;
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block))
+ block++;
+
+ return block;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/advfs_plus.h b/libparted/fs/r/hfs/advfs_plus.h
new file mode 100644
index 0000000..61972c2
--- /dev/null
+++ b/libparted/fs/r/hfs/advfs_plus.h
@@ -0,0 +1,52 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _ADVFS_PLUS_H
+#define _ADVFS_PLUS_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfsplus_btree_search (HfsPPrivateFile* b_tree_file, HfsPPrivateGenericKey* key,
+ void *record_out, unsigned int record_size,
+ HfsCPrivateLeafRec* record_ref);
+
+void
+hfsplus_free_bad_blocks_list(HfsPPrivateLinkExtent* first);
+
+int
+hfsplus_read_bad_blocks (const PedFileSystem *fs);
+
+int
+hfsplus_is_bad_block (const PedFileSystem *fs, unsigned int fblock);
+
+PedSector
+hfsplus_get_empty_end (const PedFileSystem *fs);
+
+PedSector
+hfsplus_get_min_size (const PedFileSystem *fs);
+
+unsigned int
+hfsplus_find_start_pack (const PedFileSystem *fs, unsigned int fblock);
+
+#endif /* _ADVFS_PLUS_H */
diff --git a/libparted/fs/r/hfs/cache.c b/libparted/fs/r/hfs/cache.c
new file mode 100644
index 0000000..255f1fd
--- /dev/null
+++ b/libparted/fs/r/hfs/cache.c
@@ -0,0 +1,239 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+
+#include "cache.h"
+
+static HfsCPrivateCacheTable*
+hfsc_new_cachetable(unsigned int size)
+{
+ HfsCPrivateCacheTable* ret;
+
+ ret = (HfsCPrivateCacheTable*) ped_malloc(sizeof(*ret));
+ if (!ret) return NULL;
+
+ ret->next_cache = NULL;
+ ret->table_size = size;
+ ret->table_first_free = 0;
+
+ ret->table = ped_malloc(sizeof(*ret->table)*size);
+ if (!ret->table) { free(ret); return NULL; }
+ memset(ret->table, 0, sizeof(*ret->table)*size);
+
+ return ret;
+}
+
+HfsCPrivateCache*
+hfsc_new_cache(unsigned int block_number, unsigned int file_number)
+{
+ unsigned int cachetable_size, i;
+ HfsCPrivateCache* ret;
+
+ ret = (HfsCPrivateCache*) ped_malloc(sizeof(*ret));
+ if (!ret) return NULL;
+ ret->block_number = block_number;
+ /* following code avoid integer overflow */
+ ret->linked_ref_size = block_number > block_number + ((1<<CR_SHIFT)-1) ?
+ ( block_number >> CR_SHIFT ) + 1 :
+ ( block_number + ((1<<CR_SHIFT)-1) ) >> CR_SHIFT
+ ;
+
+ ret->linked_ref = (HfsCPrivateExtent**)
+ ped_malloc( sizeof(*ret->linked_ref)
+ * ret->linked_ref_size );
+ if (!ret->linked_ref) { free(ret); return NULL; }
+
+ cachetable_size = file_number + file_number / CR_OVER_DIV + CR_ADD_CST;
+ if (cachetable_size < file_number) cachetable_size = (unsigned) -1;
+ ret->first_cachetable_size = cachetable_size;
+ ret->table_list = hfsc_new_cachetable(cachetable_size);
+ if (!ret->table_list) {
+ free(ret->linked_ref);
+ free(ret);
+ return NULL;
+ }
+ ret->last_table = ret->table_list;
+
+ for (i = 0; i < ret->linked_ref_size; ++i)
+ ret->linked_ref[i] = NULL;
+
+ ret->needed_alloc_size = 0;
+
+ return ret;
+}
+
+static void
+hfsc_delete_cachetable(HfsCPrivateCacheTable* list)
+{
+ HfsCPrivateCacheTable* next;
+
+ while (list) {
+ free (list->table);
+ next = list->next_cache;
+ free (list);
+ list = next;
+ }
+}
+
+void
+hfsc_delete_cache(HfsCPrivateCache* cache)
+{
+ hfsc_delete_cachetable(cache->table_list);
+ free(cache->linked_ref);
+ free(cache);
+}
+
+HfsCPrivateExtent*
+hfsc_cache_add_extent(HfsCPrivateCache* cache, uint32_t start, uint32_t length,
+ uint32_t block, uint16_t offset, uint8_t sbb,
+ uint8_t where, uint8_t ref_index)
+{
+ HfsCPrivateExtent* ext;
+ unsigned int idx = start >> CR_SHIFT;
+
+ PED_ASSERT(idx < cache->linked_ref_size);
+
+ for (ext = cache->linked_ref[idx];
+ ext && start != ext->ext_start;
+ ext = ext->next);
+
+ if (ext) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to register an extent starting at block "
+ "0x%X, but another one already exists at this "
+ "position. You should check the file system!"),
+ start);
+ return NULL;
+ }
+
+ if ( cache->last_table->table_first_free
+ == cache->last_table->table_size ) {
+ cache->last_table->next_cache =
+ hfsc_new_cachetable( ( cache->first_cachetable_size
+ / CR_NEW_ALLOC_DIV )
+ + CR_ADD_CST );
+ if (!cache->last_table->next_cache)
+ return NULL;
+ cache->last_table = cache->last_table->next_cache;
+ }
+
+ ext = cache->last_table->table+(cache->last_table->table_first_free++);
+
+ ext->ext_start = start;
+ ext->ext_length = length;
+ ext->ref_block = block;
+ ext->ref_offset = offset;
+ ext->sect_by_block = sbb;
+ ext->where = where;
+ ext->ref_index = ref_index;
+
+ ext->next = cache->linked_ref[idx];
+ cache->linked_ref[idx] = ext;
+
+ cache->needed_alloc_size = cache->needed_alloc_size >
+ (unsigned) PED_SECTOR_SIZE_DEFAULT * sbb ?
+ cache->needed_alloc_size :
+ (unsigned) PED_SECTOR_SIZE_DEFAULT * sbb;
+
+ return ext;
+}
+
+HfsCPrivateExtent* _GL_ATTRIBUTE_PURE
+hfsc_cache_search_extent(HfsCPrivateCache* cache, uint32_t start)
+{
+ HfsCPrivateExtent* ret;
+ unsigned int idx = start >> CR_SHIFT;
+
+ PED_ASSERT(idx < cache->linked_ref_size);
+
+ for (ret = cache->linked_ref[idx];
+ ret && start != ret->ext_start;
+ ret = ret->next);
+
+ return ret;
+}
+
+/* Can't fail if extent begining at old_start exists */
+/* Returns 0 if no such extent, or on error */
+HfsCPrivateExtent*
+hfsc_cache_move_extent(HfsCPrivateCache* cache, uint32_t old_start,
+ uint32_t new_start)
+{
+ HfsCPrivateExtent** ppext;
+ HfsCPrivateExtent* pext;
+
+ unsigned int idx1 = old_start >> CR_SHIFT;
+ unsigned int idx2 = new_start >> CR_SHIFT;
+
+ PED_ASSERT(idx1 < cache->linked_ref_size);
+ PED_ASSERT(idx2 < cache->linked_ref_size);
+
+ for (pext = cache->linked_ref[idx2];
+ pext && new_start != pext->ext_start;
+ pext = pext->next);
+
+ if (pext) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to move an extent from block 0x%X to block "
+ "0x%X, but another one already exists at this "
+ "position. This should not happen!"),
+ old_start, new_start);
+ return NULL;
+ }
+
+ for (ppext = &(cache->linked_ref[idx1]);
+ (*ppext) && old_start != (*ppext)->ext_start;
+ ppext = &((*ppext)->next));
+
+ if (!(*ppext)) return NULL;
+
+ /* removing the extent from the cache */
+ pext = *ppext;
+ (*ppext) = pext->next;
+
+ /* change ext_start and insert the extent again */
+ pext->ext_start = new_start;
+ pext->next = cache->linked_ref[idx2];
+ cache->linked_ref[idx2] = pext;
+
+ return pext;
+}
+
+#endif /* DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/cache.h b/libparted/fs/r/hfs/cache.h
new file mode 100644
index 0000000..d009fd9
--- /dev/null
+++ b/libparted/fs/r/hfs/cache.h
@@ -0,0 +1,118 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _CACHE_H
+#define _CACHE_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+/* CR => CACHE REF */
+#define CR_NULL 0 /* reserved */
+#define CR_PRIM_CAT 1
+#define CR_PRIM_EXT 2
+#define CR_PRIM_ATTR 3
+#define CR_PRIM_ALLOC 4
+#define CR_PRIM_START 5
+#define CR_BTREE_CAT 6
+#define CR_BTREE_ATTR 7
+#define CR_BTREE_EXT_0 8
+#define CR_BTREE_EXT_CAT 9
+#define CR_BTREE_EXT_EXT 10 /* should not happen ! */
+#define CR_BTREE_EXT_ATTR 11
+#define CR_BTREE_EXT_ALLOC 12
+#define CR_BTREE_EXT_START 13 /* unneeded in current code */
+#define CR_BTREE_CAT_JIB 14 /* journal info block */
+#define CR_BTREE_CAT_JL 15 /* journal */
+/* 16 -> 31 || high order bit */ /* reserved */
+
+/* tuning */
+#define CR_SHIFT 8 /* number of bits to shift start_block by */
+ /* to get the index of the linked list */
+#define CR_OVER_DIV 16 /* alloc a table for (1+1/CR_OVER_DIV) *
+ file_number + CR_ADD_CST */
+#define CR_ADD_CST 16
+#define CR_NEW_ALLOC_DIV 4 /* divide the size of the first alloc table
+ by this value to allocate next tables */
+
+/* See DOC for an explaination of this structure */
+/* Access read only from outside cache.c */
+struct _HfsCPrivateExtent {
+ struct _HfsCPrivateExtent* next;
+ uint32_t ext_start;
+ uint32_t ext_length;
+ uint32_t ref_block;
+ uint16_t ref_offset;
+ uint8_t sect_by_block;
+ unsigned where : 5;
+ unsigned ref_index : 3; /* 0 -> 7 */
+};
+typedef struct _HfsCPrivateExtent HfsCPrivateExtent;
+
+/* Internaly used by cache.c for custom memory managment only */
+struct _HfsCPrivateCacheTable {
+ struct _HfsCPrivateCacheTable* next_cache;
+ HfsCPrivateExtent* table;
+ unsigned int table_size;
+ unsigned int table_first_free;
+ /* first_elemt ? */
+};
+typedef struct _HfsCPrivateCacheTable HfsCPrivateCacheTable;
+
+/* Internaly used by cache.c for custom memory managment
+ and cache handling only */
+struct _HfsCPrivateCache {
+ HfsCPrivateCacheTable* table_list;
+ HfsCPrivateCacheTable* last_table;
+ HfsCPrivateExtent** linked_ref;
+ unsigned int linked_ref_size;
+ unsigned int block_number;
+ unsigned int first_cachetable_size;
+ unsigned int needed_alloc_size;
+};
+typedef struct _HfsCPrivateCache HfsCPrivateCache;
+
+HfsCPrivateCache*
+hfsc_new_cache(unsigned int block_number, unsigned int file_number);
+
+void
+hfsc_delete_cache(HfsCPrivateCache* cache);
+
+HfsCPrivateExtent*
+hfsc_cache_add_extent(HfsCPrivateCache* cache, uint32_t start, uint32_t length,
+ uint32_t block, uint16_t offset, uint8_t sbb,
+ uint8_t where, uint8_t index);
+
+HfsCPrivateExtent*
+hfsc_cache_search_extent(HfsCPrivateCache* cache, uint32_t start);
+
+HfsCPrivateExtent*
+hfsc_cache_move_extent(HfsCPrivateCache* cache, uint32_t old_start,
+ uint32_t new_start);
+
+static __inline__ unsigned int
+hfsc_cache_needed_buffer(HfsCPrivateCache* cache)
+{
+ return cache->needed_alloc_size;
+}
+
+#endif /* _CACHE_H */
diff --git a/libparted/fs/r/hfs/file.c b/libparted/fs/r/hfs/file.c
new file mode 100644
index 0000000..6024d84
--- /dev/null
+++ b/libparted/fs/r/hfs/file.c
@@ -0,0 +1,229 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "advfs.h"
+
+#include "file.h"
+
+/* Open the data fork of a file with its first three extents and its CNID */
+HfsPrivateFile*
+hfs_file_open (PedFileSystem *fs, uint32_t CNID,
+ HfsExtDataRec ext_desc, PedSector sect_nb)
+{
+ HfsPrivateFile* file;
+
+ file = (HfsPrivateFile*) ped_malloc (sizeof (HfsPrivateFile));
+ if (!file) return NULL;
+
+ file->fs = fs;
+ file->sect_nb = sect_nb;
+ file->CNID = CNID;
+ memcpy(file->first, ext_desc, sizeof (HfsExtDataRec));
+ file->start_cache = 0;
+
+ return file;
+}
+
+/* Close an HFS file */
+void
+hfs_file_close (HfsPrivateFile* file)
+{
+ free (file);
+}
+
+/* warning : only works on data forks */
+static int
+hfs_get_extent_containing (HfsPrivateFile* file, unsigned int block,
+ HfsExtDataRec cache, uint16_t* ptr_start_cache)
+{
+ uint8_t record[sizeof (HfsExtentKey)
+ + sizeof (HfsExtDataRec)];
+ HfsExtentKey search;
+ HfsExtentKey* ret_key = (HfsExtentKey*) record;
+ HfsExtDescriptor* ret_cache = (HfsExtDescriptor*)
+ (record + sizeof (HfsExtentKey));
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ file->fs->type_specific;
+
+ search.key_length = sizeof (HfsExtentKey) - 1;
+ search.type = HFS_DATA_FORK;
+ search.file_ID = file->CNID;
+ search.start = PED_CPU_TO_BE16 (block);
+
+ if (!hfs_btree_search (priv_data->extent_file,
+ (HfsPrivateGenericKey*) &search,
+ record, sizeof (record), NULL))
+ return 0;
+
+ if (ret_key->file_ID != search.file_ID || ret_key->type != search.type)
+ return 0;
+
+ memcpy (cache, ret_cache, sizeof(HfsExtDataRec));
+ *ptr_start_cache = PED_BE16_TO_CPU (ret_key->start);
+
+ return 1;
+}
+
+/* find and return the nth sector of a file */
+/* return 0 on error */
+static PedSector
+hfs_file_find_sector (HfsPrivateFile* file, PedSector sector)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ file->fs->type_specific;
+ unsigned int sect_by_block = PED_BE32_TO_CPU (
+ priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+ unsigned int i, s, vol_block;
+ unsigned int block = sector / sect_by_block;
+ unsigned int offset = sector % sect_by_block;
+
+ /* in the three first extent */
+ for (s = 0, i = 0; i < HFS_EXT_NB; i++) {
+ if ((block >= s) && ( block < s + PED_BE16_TO_CPU (
+ file->first[i].block_count))) {
+ vol_block = (block - s) + PED_BE16_TO_CPU (
+ file->first[i].start_block);
+ goto sector_found;
+ }
+ s += PED_BE16_TO_CPU (file->first[i].block_count);
+ }
+
+ /* in the three cached extent */
+ if (file->start_cache && block >= file->start_cache)
+ for (s = file->start_cache, i = 0; i < HFS_EXT_NB; i++) {
+ if ((block >= s) && (block < s + PED_BE16_TO_CPU (
+ file->cache[i].block_count))) {
+ vol_block = (block - s) + PED_BE16_TO_CPU (
+ file->cache[i].start_block);
+ goto sector_found;
+ }
+ s += PED_BE16_TO_CPU (file->cache[i].block_count);
+ }
+
+ /* update cache */
+ if (!hfs_get_extent_containing (file, block, file->cache,
+ &(file->start_cache))) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_CANCEL,
+ _("Could not update the extent cache for HFS file with "
+ "CNID %X."),
+ PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ /* in the three cached extent */
+ PED_ASSERT(file->start_cache && block >= file->start_cache);
+ for (s = file->start_cache, i = 0; i < HFS_EXT_NB; i++) {
+ if ((block >= s) && (block < s + PED_BE16_TO_CPU (
+ file->cache[i].block_count))) {
+ vol_block = (block - s) + PED_BE16_TO_CPU (
+ file->cache[i].start_block);
+ goto sector_found;
+ }
+ s += PED_BE16_TO_CPU (file->cache[i].block_count);
+ }
+
+ return 0;
+
+ sector_found:
+ return (PedSector) PED_BE16_TO_CPU (priv_data->mdb->start_block)
+ + (PedSector) vol_block * sect_by_block
+ + offset;
+}
+
+/* Read the nth sector of a file */
+/* return 0 on error */
+int
+hfs_file_read_sector (HfsPrivateFile* file, void *buf, PedSector sector)
+{
+ PedSector abs_sector;
+
+ if (sector >= file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to read HFS file with CNID %X behind EOF."),
+ PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ abs_sector = hfs_file_find_sector (file, sector);
+ if (!abs_sector) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not find sector %lli of HFS file with "
+ "CNID %X."),
+ sector, PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ return ped_geometry_read (file->fs->geom, buf, abs_sector, 1);
+}
+
+/* Write the nth sector of a file */
+/* return 0 on error */
+int
+hfs_file_write_sector (HfsPrivateFile* file, void *buf, PedSector sector)
+{
+ PedSector abs_sector;
+
+ if (sector >= file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to write HFS file with CNID %X behind EOF."),
+ PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ abs_sector = hfs_file_find_sector (file, sector);
+ if (!abs_sector) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not find sector %lli of HFS file with "
+ "CNID %X."),
+ sector, PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ return ped_geometry_write (file->fs->geom, buf, abs_sector, 1);
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/file.h b/libparted/fs/r/hfs/file.h
new file mode 100644
index 0000000..f8cb485
--- /dev/null
+++ b/libparted/fs/r/hfs/file.h
@@ -0,0 +1,42 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _FILE_H
+#define _FILE_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+HfsPrivateFile*
+hfs_file_open (PedFileSystem *fs, uint32_t CNID,
+ HfsExtDataRec ext_desc, PedSector sect_nb);
+
+void
+hfs_file_close (HfsPrivateFile* file);
+
+int
+hfs_file_read_sector (HfsPrivateFile* file, void *buf, PedSector sector);
+
+int
+hfs_file_write_sector (HfsPrivateFile* file, void *buf, PedSector sector);
+
+#endif /* _FILE_H */
diff --git a/libparted/fs/r/hfs/file_plus.c b/libparted/fs/r/hfs/file_plus.c
new file mode 100644
index 0000000..aeff5ee
--- /dev/null
+++ b/libparted/fs/r/hfs/file_plus.c
@@ -0,0 +1,274 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "advfs_plus.h"
+
+#include "file_plus.h"
+
+/* Open the data fork of a file with its first eight extents and its CNID */
+/* CNID and ext_desc must be in disc order, sect_nb in CPU order */
+/* return null on failure */
+HfsPPrivateFile*
+hfsplus_file_open (PedFileSystem *fs, HfsPNodeID CNID,
+ HfsPExtDataRec ext_desc, PedSector sect_nb)
+{
+ HfsPPrivateFile* file;
+
+ file = (HfsPPrivateFile*) ped_malloc (sizeof (HfsPPrivateFile));
+ if (!file) return NULL;
+
+ file->fs = fs;
+ file->sect_nb = sect_nb;
+ file->CNID = CNID;
+ memcpy(file->first, ext_desc, sizeof (HfsPExtDataRec));
+ file->start_cache = 0;
+
+ return file;
+}
+
+/* Close an HFS+ file */
+void
+hfsplus_file_close (HfsPPrivateFile* file)
+{
+ free (file);
+}
+
+/* warning : only works on data forks */
+static int
+hfsplus_get_extent_containing (HfsPPrivateFile* file, unsigned int block,
+ HfsPExtDataRec cache, uint32_t* ptr_start_cache)
+{
+ uint8_t record[sizeof (HfsPExtentKey)
+ + sizeof (HfsPExtDataRec)];
+ HfsPExtentKey search;
+ HfsPExtentKey* ret_key = (HfsPExtentKey*) record;
+ HfsPExtDescriptor* ret_cache = (HfsPExtDescriptor*)
+ (record + sizeof (HfsPExtentKey));
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ file->fs->type_specific;
+
+ search.key_length = PED_CPU_TO_BE16 (sizeof (HfsPExtentKey) - 2);
+ search.type = HFS_DATA_FORK;
+ search.pad = 0;
+ search.file_ID = file->CNID;
+ search.start = PED_CPU_TO_BE32 (block);
+
+ if (!hfsplus_btree_search (priv_data->extents_file,
+ (HfsPPrivateGenericKey*) &search,
+ record, sizeof (record), NULL))
+ return 0;
+
+ if (ret_key->file_ID != search.file_ID || ret_key->type != search.type)
+ return 0;
+
+ memcpy (cache, ret_cache, sizeof(HfsPExtDataRec));
+ *ptr_start_cache = PED_BE32_TO_CPU (ret_key->start);
+
+ return 1;
+}
+
+/* find a sub extent contained in the desired area */
+/* and with the same starting point */
+/* return 0 in sector_count on error, or the physical area */
+/* on the volume corresponding to the logical area in the file */
+static HfsPPrivateExtent
+hfsplus_file_find_extent (HfsPPrivateFile* file, PedSector sector,
+ unsigned int nb)
+{
+ HfsPPrivateExtent ret = {0,0};
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ file->fs->type_specific;
+ unsigned int sect_by_block = PED_BE32_TO_CPU (
+ priv_data->vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+ unsigned int i, s, vol_block, size;
+ PedSector sect_size;
+ unsigned int block = sector / sect_by_block;
+ unsigned int offset = sector % sect_by_block;
+
+ /* in the 8 first extent */
+ for (s = 0, i = 0; i < HFSP_EXT_NB; i++) {
+ if ((block >= s) && (block < s + PED_BE32_TO_CPU (
+ file->first[i].block_count))) {
+ vol_block = (block - s)
+ + PED_BE32_TO_CPU (file->first[i]
+ .start_block);
+ size = PED_BE32_TO_CPU (file->first[i].block_count)
+ + s - block;
+ goto plus_sector_found;
+ }
+ s += PED_BE32_TO_CPU (file->first[i].block_count);
+ }
+
+ /* in the 8 cached extent */
+ if (file->start_cache && block >= file->start_cache)
+ for (s = file->start_cache, i = 0; i < HFSP_EXT_NB; i++) {
+ if ((block >= s) && (block < s + PED_BE32_TO_CPU (
+ file->cache[i].block_count))) {
+ vol_block = (block - s)
+ + PED_BE32_TO_CPU (file->cache[i]
+ .start_block);
+ size = PED_BE32_TO_CPU (file->cache[i].block_count)
+ + s - block;
+ goto plus_sector_found;
+ }
+ s += PED_BE32_TO_CPU (file->cache[i].block_count);
+ }
+
+ /* update cache */
+ if (!hfsplus_get_extent_containing (file, block, file->cache,
+ &(file->start_cache))) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_CANCEL,
+ _("Could not update the extent cache for HFS+ file "
+ "with CNID %X."),
+ PED_BE32_TO_CPU(file->CNID));
+ return ret; /* ret == {0,0} */
+ }
+
+ /* ret == {0,0} */
+ PED_ASSERT(file->start_cache && block >= file->start_cache);
+
+ for (s = file->start_cache, i = 0; i < HFSP_EXT_NB; i++) {
+ if ((block >= s) && (block < s + PED_BE32_TO_CPU (
+ file->cache[i].block_count))) {
+ vol_block = (block - s)
+ + PED_BE32_TO_CPU (file->cache[i]
+ .start_block);
+ size = PED_BE32_TO_CPU (file->cache[i].block_count)
+ + s - block;
+ goto plus_sector_found;
+ }
+ s += PED_BE32_TO_CPU (file->cache[i].block_count);
+ }
+
+ return ret;
+
+plus_sector_found:
+ sect_size = (PedSector) size * sect_by_block - offset;
+ ret.start_sector = vol_block * sect_by_block + offset;
+ ret.sector_count = (sect_size < nb) ? sect_size : nb;
+ return ret;
+}
+
+int
+hfsplus_file_read(HfsPPrivateFile* file, void *buf, PedSector sector,
+ unsigned int nb)
+{
+ HfsPPrivateExtent phy_area;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ file->fs->type_specific;
+ char *b = buf;
+
+ if (sector+nb < sector /* detect overflow */
+ || sector+nb > file->sect_nb) /* out of file */ {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to read HFS+ file with CNID %X behind EOF."),
+ PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ while (nb) {
+ phy_area = hfsplus_file_find_extent(file, sector, nb);
+ if (phy_area.sector_count == 0) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not find sector %lli of HFS+ file "
+ "with CNID %X."),
+ sector, PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+ if (!ped_geometry_read(priv_data->plus_geom, b,
+ phy_area.start_sector,
+ phy_area.sector_count))
+ return 0;
+
+ nb -= phy_area.sector_count; /* < nb anyway ... */
+ sector += phy_area.sector_count;
+ b += phy_area.sector_count * PED_SECTOR_SIZE_DEFAULT;
+ }
+
+ return 1;
+}
+
+int
+hfsplus_file_write(HfsPPrivateFile* file, void *buf, PedSector sector,
+ unsigned int nb)
+{
+ HfsPPrivateExtent phy_area;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ file->fs->type_specific;
+ char *b = buf;
+
+ if (sector+nb < sector /* detect overflow */
+ || sector+nb > file->sect_nb) /* out of file */ {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Trying to write HFS+ file with CNID %X behind EOF."),
+ PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+
+ while (nb) {
+ phy_area = hfsplus_file_find_extent(file, sector, nb);
+ if (phy_area.sector_count == 0) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not find sector %lli of HFS+ file "
+ "with CNID %X."),
+ sector, PED_BE32_TO_CPU(file->CNID));
+ return 0;
+ }
+ if (!ped_geometry_write(priv_data->plus_geom, b,
+ phy_area.start_sector,
+ phy_area.sector_count))
+ return 0;
+
+ nb -= phy_area.sector_count; /* < nb anyway ... */
+ sector += phy_area.sector_count;
+ b += phy_area.sector_count * PED_SECTOR_SIZE_DEFAULT;
+ }
+
+ return 1;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/file_plus.h b/libparted/fs/r/hfs/file_plus.h
new file mode 100644
index 0000000..cd54f3f
--- /dev/null
+++ b/libparted/fs/r/hfs/file_plus.h
@@ -0,0 +1,61 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _FILE_PLUS_H
+#define _FILE_PLUS_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+HfsPPrivateFile*
+hfsplus_file_open (PedFileSystem *fs, HfsPNodeID CNID,
+ HfsPExtDataRec ext_desc, PedSector sect_nb);
+
+void
+hfsplus_file_close (HfsPPrivateFile* file);
+
+int
+hfsplus_file_read(HfsPPrivateFile* file, void *buf,
+ PedSector sector, unsigned int nb);
+
+int
+hfsplus_file_write(HfsPPrivateFile* file, void *buf,
+ PedSector sector, unsigned int nb);
+
+/* Read the nth sector of a file */
+/* return 0 on error */
+static __inline__ int
+hfsplus_file_read_sector (HfsPPrivateFile* file, void *buf, PedSector sector)
+{
+ return hfsplus_file_read(file, buf, sector, 1);
+}
+
+/* Write the nth sector of a file */
+/* return 0 on error */
+static __inline__ int
+hfsplus_file_write_sector (HfsPPrivateFile* file, void *buf, PedSector sector)
+{
+ return hfsplus_file_write(file, buf, sector, 1);
+}
+
+
+#endif /* _FILE_PLUS_H */
diff --git a/libparted/fs/r/hfs/hfs.c b/libparted/fs/r/hfs/hfs.c
new file mode 100644
index 0000000..8959b47
--- /dev/null
+++ b/libparted/fs/r/hfs/hfs.c
@@ -0,0 +1,1166 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2003-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ Author : Guillaume Knispel <k_guillaume@libertysurf.fr>
+ Report bug to <bug-parted@gnu.org>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "probe.h"
+
+uint8_t* hfs_block = NULL;
+uint8_t* hfsp_block = NULL;
+unsigned hfs_block_count;
+unsigned hfsp_block_count;
+
+#define HFS_BLOCK_SIZES ((int[2]){512, 0})
+#define HFSP_BLOCK_SIZES ((int[2]){512, 0})
+#define HFSX_BLOCK_SIZES ((int[2]){512, 0})
+
+#ifndef DISCOVER_ONLY
+#include "file.h"
+#include "reloc.h"
+#include "advfs.h"
+
+static PedFileSystemType hfs_type;
+static PedFileSystemType hfsplus_type;
+
+
+/* ----- HFS ----- */
+
+PedFileSystem *
+hfs_open (PedGeometry* geom)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ PedFileSystem* fs;
+ HfsMasterDirectoryBlock* mdb;
+ HfsPrivateFSData* priv_data;
+
+ if (!hfsc_can_use_geom (geom))
+ return NULL;
+
+ /* Read MDB */
+ if (!ped_geometry_read (geom, buf, 2, 1))
+ return NULL;
+
+ /* Allocate memory */
+ fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem));
+ if (!fs) goto ho;
+ mdb = (HfsMasterDirectoryBlock*)
+ ped_malloc (sizeof (HfsMasterDirectoryBlock));
+ if (!mdb) goto ho_fs;
+ priv_data = (HfsPrivateFSData*)
+ ped_malloc (sizeof (HfsPrivateFSData));
+ if (!priv_data) goto ho_mdb;
+
+ memcpy (mdb, buf, sizeof (HfsMasterDirectoryBlock));
+
+ /* init structures */
+ priv_data->mdb = mdb;
+ priv_data->bad_blocks_loaded = 0;
+ priv_data->bad_blocks_xtent_nb = 0;
+ priv_data->bad_blocks_xtent_list = NULL;
+ priv_data->extent_file =
+ hfs_file_open (fs, PED_CPU_TO_BE32 (HFS_XTENT_ID),
+ mdb->extents_file_rec,
+ PED_CPU_TO_BE32 (mdb->extents_file_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->extent_file) goto ho_pd;
+ priv_data->catalog_file =
+ hfs_file_open (fs, PED_CPU_TO_BE32 (HFS_CATALOG_ID),
+ mdb->catalog_file_rec,
+ PED_CPU_TO_BE32 (mdb->catalog_file_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->catalog_file) goto ho_ce;
+ /* Read allocation blocks */
+ if (!ped_geometry_read(geom, priv_data->alloc_map,
+ PED_BE16_TO_CPU (mdb->volume_bitmap_block),
+ ( PED_BE16_TO_CPU (mdb->total_blocks)
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8) ) )
+ goto ho_cf;
+
+ fs->type = &hfs_type;
+ fs->geom = ped_geometry_duplicate (geom);
+ if (!fs->geom) goto ho_cf;
+ fs->type_specific = (void*) priv_data;
+ fs->checked = ( PED_BE16_TO_CPU (mdb->volume_attributes)
+ >> HFS_UNMOUNTED ) & 1;
+
+ return fs;
+
+/*--- clean error handling ---*/
+ho_cf: hfs_file_close(priv_data->catalog_file);
+ho_ce: hfs_file_close(priv_data->extent_file);
+ho_pd: free(priv_data);
+ho_mdb: free(mdb);
+ho_fs: free(fs);
+ho: return NULL;
+}
+
+int
+hfs_close (PedFileSystem *fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*) fs->type_specific;
+
+ hfs_file_close (priv_data->extent_file);
+ hfs_file_close (priv_data->catalog_file);
+ if (priv_data->bad_blocks_loaded)
+ hfs_free_bad_blocks_list (priv_data->bad_blocks_xtent_list);
+ free (priv_data->mdb);
+ free (priv_data);
+ ped_geometry_destroy (fs->geom);
+ free (fs);
+
+ return 1;
+}
+
+PedConstraint *
+hfs_get_resize_constraint (const PedFileSystem *fs)
+{
+ PedDevice* dev = fs->geom->dev;
+ PedAlignment start_align;
+ PedGeometry start_sector;
+ PedGeometry full_dev;
+ PedSector min_size;
+
+ if (!ped_alignment_init (&start_align, fs->geom->start, 0))
+ return NULL;
+ if (!ped_geometry_init (&start_sector, dev, fs->geom->start, 1))
+ return NULL;
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1))
+ return NULL;
+ /* 2 = last two sectors (alternate MDB and unused sector) */
+ min_size = hfs_get_empty_end(fs) + 2;
+ if (min_size == 2) return NULL;
+
+ return ped_constraint_new (&start_align, ped_alignment_any,
+ &start_sector, &full_dev, min_size,
+ fs->geom->length);
+}
+
+int
+hfs_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ unsigned int nblock, nfree;
+ unsigned int block, to_free;
+ HfsPrivateFSData* priv_data;
+ HfsMasterDirectoryBlock* mdb;
+ int resize = 1;
+ unsigned int hfs_sect_block;
+ PedSector hgee;
+
+ /* check preconditions */
+ PED_ASSERT (fs != NULL);
+ PED_ASSERT (fs->geom != NULL);
+ PED_ASSERT (geom != NULL);
+#ifdef DEBUG
+ PED_ASSERT ((hgee = hfs_get_empty_end(fs)) != 0);
+#else
+ if ((hgee = hfs_get_empty_end(fs)) == 0)
+ return 0;
+#endif
+
+ PED_ASSERT ((hgee = hfs_get_empty_end(fs)) != 0);
+
+ if (ped_geometry_test_equal(fs->geom, geom))
+ return 1;
+
+ priv_data = (HfsPrivateFSData*) fs->type_specific;
+ mdb = priv_data->mdb;
+ hfs_sect_block = PED_BE32_TO_CPU (mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+
+ if (fs->geom->start != geom->start
+ || geom->length > fs->geom->length
+ || geom->length < hgee + 2) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Sorry, HFS cannot be resized that way yet."));
+ return 0;
+ }
+
+ /* Flush caches */
+ if (!ped_geometry_sync(fs->geom))
+ return 0;
+
+ /* Clear the unmounted bit */
+ mdb->volume_attributes &= PED_CPU_TO_BE16 (~( 1 << HFS_UNMOUNTED ));
+ if (!ped_geometry_read (fs->geom, buf, 2, 1))
+ return 0;
+ memcpy (buf, mdb, sizeof (HfsMasterDirectoryBlock));
+ if ( !ped_geometry_write (fs->geom, buf, 2, 1)
+ || !ped_geometry_sync (fs->geom))
+ return 0;
+
+ ped_timer_reset (timer);
+ ped_timer_set_state_name(timer, _("shrinking"));
+ ped_timer_update(timer, 0.0);
+ /* relocate data */
+ to_free = ( fs->geom->length - geom->length
+ + hfs_sect_block - 1 )
+ / hfs_sect_block ;
+ block = hfs_find_start_pack (fs, to_free);
+ if (!hfs_pack_free_space_from_block (fs, block, timer, to_free)) {
+ resize = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Data relocation has failed."));
+ goto write_MDB;
+ }
+
+ /* Calculate new block number and other MDB field */
+ nblock = ( geom->length - (PED_BE16_TO_CPU (mdb->start_block) + 2) )
+ / hfs_sect_block;
+ nfree = PED_BE16_TO_CPU (mdb->free_blocks)
+ - ( PED_BE16_TO_CPU (mdb->total_blocks) - nblock );
+
+ /* Check that all block after future end are really free */
+ for (block = nblock;
+ block < PED_BE16_TO_CPU (mdb->total_blocks);
+ block++) {
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) {
+ resize = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Data relocation left some data in the end "
+ "of the volume."));
+ goto write_MDB;
+ }
+ }
+
+ /* Mark out of volume blocks as used
+ (broken implementations compatibility) */
+ for ( block = nblock; block < (1 << 16); ++block)
+ SET_BLOC_OCCUPATION(priv_data->alloc_map,block);
+
+ /* save the allocation map
+ I do not write until start of allocation blocks
+ but only until pre-resize end of bitmap blocks
+ because the specifications do _not_ assert that everything
+ until allocation blocks is boot, mdb and alloc */
+ ped_geometry_write(fs->geom, priv_data->alloc_map,
+ PED_BE16_TO_CPU (priv_data->mdb->volume_bitmap_block),
+ ( PED_BE16_TO_CPU (priv_data->mdb->total_blocks)
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1)
+ / (PED_SECTOR_SIZE_DEFAULT * 8));
+
+ /* Update geometry */
+ if (resize) {
+ /* update in fs structure */
+ if (PED_BE16_TO_CPU (mdb->next_allocation) >= nblock)
+ mdb->next_allocation = PED_CPU_TO_BE16 (0);
+ mdb->total_blocks = PED_CPU_TO_BE16 (nblock);
+ mdb->free_blocks = PED_CPU_TO_BE16 (nfree);
+ /* update parted structure */
+ fs->geom->length = geom->length;
+ fs->geom->end = fs->geom->start + geom->length - 1;
+ }
+
+ /* Set the unmounted bit */
+ mdb->volume_attributes |= PED_CPU_TO_BE16 ( 1 << HFS_UNMOUNTED );
+
+ /* Effective write */
+ write_MDB:
+ ped_timer_set_state_name(timer,_("writing HFS Master Directory Block"));
+
+ if (!hfs_update_mdb(fs)) {
+ ped_geometry_sync(geom);
+ return 0;
+ }
+
+ if (!ped_geometry_sync(geom))
+ return 0;
+
+ ped_timer_update(timer, 1.0);
+
+ return (resize);
+}
+
+/* ----- HFS+ ----- */
+
+#include "file_plus.h"
+#include "advfs_plus.h"
+#include "reloc_plus.h"
+#include "journal.h"
+
+int
+hfsplus_close (PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+
+ if (priv_data->bad_blocks_loaded)
+ hfsplus_free_bad_blocks_list(priv_data->bad_blocks_xtent_list);
+ free(priv_data->alloc_map);
+ free(priv_data->dirty_alloc_map);
+ hfsplus_file_close (priv_data->allocation_file);
+ hfsplus_file_close (priv_data->attributes_file);
+ hfsplus_file_close (priv_data->catalog_file);
+ hfsplus_file_close (priv_data->extents_file);
+ if (priv_data->free_geom) ped_geometry_destroy (priv_data->plus_geom);
+ if (priv_data->wrapper) hfs_close(priv_data->wrapper);
+ ped_geometry_destroy (fs->geom);
+ free(priv_data->vh);
+ free(priv_data);
+ free(fs);
+
+ return 1;
+}
+
+PedFileSystem*
+hfsplus_open (PedGeometry* geom)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ PedFileSystem* fs;
+ HfsPVolumeHeader* vh;
+ HfsPPrivateFSData* priv_data;
+ PedGeometry* wrapper_geom;
+ unsigned int map_sectors;
+
+ if (!hfsc_can_use_geom (geom))
+ return NULL;
+
+ fs = (PedFileSystem*) ped_malloc (sizeof (PedFileSystem));
+ if (!fs) goto hpo;
+ vh = (HfsPVolumeHeader*) ped_malloc (sizeof (HfsPVolumeHeader));
+ if (!vh) goto hpo_fs;
+ priv_data = (HfsPPrivateFSData*)ped_malloc (sizeof (HfsPPrivateFSData));
+ if (!priv_data) goto hpo_vh;
+
+ fs->geom = ped_geometry_duplicate (geom);
+ if (!fs->geom) goto hpo_pd;
+ fs->type_specific = (void*) priv_data;
+
+ if ((wrapper_geom = hfs_and_wrapper_probe (geom))) {
+ HfsPrivateFSData* hfs_priv_data;
+ PedSector abs_sect, length;
+ unsigned int bs;
+
+ ped_geometry_destroy (wrapper_geom);
+ priv_data->wrapper = hfs_open(geom);
+ if (!priv_data->wrapper) goto hpo_gm;
+ hfs_priv_data = (HfsPrivateFSData*)
+ priv_data->wrapper->type_specific;
+ bs = PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+ abs_sect = (PedSector) geom->start
+ + (PedSector) PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->start_block)
+ + (PedSector) PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->old_new
+ .embedded.location.start_block )
+ * bs;
+ length = (PedSector) PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->old_new
+ .embedded.location.block_count)
+ * bs;
+ priv_data->plus_geom = ped_geometry_new (geom->dev, abs_sect,
+ length);
+ if (!priv_data->plus_geom) goto hpo_wr;
+ priv_data->free_geom = 1;
+ } else {
+ priv_data->wrapper = NULL;
+ priv_data->plus_geom = fs->geom;
+ priv_data->free_geom = 0;
+ }
+
+ if (!ped_geometry_read (priv_data->plus_geom, buf, 2, 1)) goto hpo_pg;
+ memcpy (vh, buf, sizeof (HfsPVolumeHeader));
+ priv_data->vh = vh;
+
+ if (vh->signature != PED_CPU_TO_BE16(HFSP_SIGNATURE)
+ && vh->signature != PED_CPU_TO_BE16(HFSX_SIGNATURE)) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("No valid HFS[+X] signature has been found while "
+ "opening."));
+ goto hpo_pg;
+ }
+
+ if (vh->signature == PED_CPU_TO_BE16(HFSP_SIGNATURE)
+ && vh->version != PED_CPU_TO_BE16(HFSP_VERSION)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Version %d of HFS+ isn't supported."),
+ PED_BE16_TO_CPU(vh->version))
+ != PED_EXCEPTION_IGNORE)
+ goto hpo_pg;
+ }
+
+ if (vh->signature == PED_CPU_TO_BE16(HFSX_SIGNATURE)
+ && vh->version != PED_CPU_TO_BE16(HFSX_VERSION)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Version %d of HFSX isn't supported."),
+ PED_BE16_TO_CPU(vh->version))
+ != PED_EXCEPTION_IGNORE)
+ goto hpo_pg;
+ }
+
+ priv_data->jib_start_block = 0;
+ priv_data->jl_start_block = 0;
+ if (vh->attributes & PED_CPU_TO_BE32(1<<HFSP_JOURNALED)) {
+ if (!hfsj_replay_journal(fs))
+ goto hpo_pg;
+ }
+
+ priv_data->bad_blocks_loaded = 0;
+ priv_data->bad_blocks_xtent_nb = 0;
+ priv_data->bad_blocks_xtent_list = NULL;
+ priv_data->extents_file =
+ hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFS_XTENT_ID),
+ vh->extents_file.extents,
+ PED_BE64_TO_CPU (
+ vh->extents_file.logical_size )
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->extents_file) goto hpo_pg;
+ priv_data->catalog_file =
+ hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFS_CATALOG_ID),
+ vh->catalog_file.extents,
+ PED_BE64_TO_CPU (
+ vh->catalog_file.logical_size )
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->catalog_file) goto hpo_ce;
+ priv_data->attributes_file =
+ hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFSP_ATTRIB_ID),
+ vh->attributes_file.extents,
+ PED_BE64_TO_CPU (
+ vh->attributes_file.logical_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->attributes_file) goto hpo_cc;
+
+ map_sectors = ( PED_BE32_TO_CPU (vh->total_blocks)
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8);
+ priv_data->dirty_alloc_map = (uint8_t*)
+ ped_malloc ((map_sectors + 7) / 8);
+ if (!priv_data->dirty_alloc_map) goto hpo_cl;
+ memset(priv_data->dirty_alloc_map, 0, (map_sectors + 7) / 8);
+ priv_data->alloc_map = (uint8_t*)
+ ped_malloc (map_sectors * PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->alloc_map) goto hpo_dm;
+
+ priv_data->allocation_file =
+ hfsplus_file_open (fs, PED_CPU_TO_BE32 (HFSP_ALLOC_ID),
+ vh->allocation_file.extents,
+ PED_BE64_TO_CPU (
+ vh->allocation_file.logical_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (!priv_data->allocation_file) goto hpo_am;
+ if (!hfsplus_file_read (priv_data->allocation_file,
+ priv_data->alloc_map, 0, map_sectors)) {
+ hfsplus_close(fs);
+ return NULL;
+ }
+
+ fs->type = &hfsplus_type;
+ fs->checked = ((PED_BE32_TO_CPU (vh->attributes) >> HFS_UNMOUNTED) & 1)
+ && !((PED_BE32_TO_CPU (vh->attributes) >> HFSP_INCONSISTENT) & 1);
+
+ return fs;
+
+/*--- clean error handling ---*/
+hpo_am: free(priv_data->alloc_map);
+hpo_dm: free(priv_data->dirty_alloc_map);
+hpo_cl: hfsplus_file_close (priv_data->attributes_file);
+hpo_cc: hfsplus_file_close (priv_data->catalog_file);
+hpo_ce: hfsplus_file_close (priv_data->extents_file);
+hpo_pg: if (priv_data->free_geom) ped_geometry_destroy (priv_data->plus_geom);
+hpo_wr: if (priv_data->wrapper) hfs_close(priv_data->wrapper);
+hpo_gm: ped_geometry_destroy (fs->geom);
+hpo_pd: free(priv_data);
+hpo_vh: free(vh);
+hpo_fs: free(fs);
+hpo: return NULL;
+}
+
+PedConstraint *
+hfsplus_get_resize_constraint (const PedFileSystem *fs)
+{
+ PedDevice* dev = fs->geom->dev;
+ PedAlignment start_align;
+ PedGeometry start_sector;
+ PedGeometry full_dev;
+ PedSector min_size;
+
+ if (!ped_alignment_init (&start_align, fs->geom->start, 0))
+ return NULL;
+ if (!ped_geometry_init (&start_sector, dev, fs->geom->start, 1))
+ return NULL;
+ if (!ped_geometry_init (&full_dev, dev, 0, dev->length - 1))
+ return NULL;
+
+ min_size = hfsplus_get_min_size (fs);
+ if (!min_size) return NULL;
+
+ return ped_constraint_new (&start_align, ped_alignment_any,
+ &start_sector, &full_dev, min_size,
+ fs->geom->length);
+}
+
+static int
+hfsplus_volume_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ unsigned int nblock, nfree, mblock;
+ unsigned int block, to_free, old_blocks;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPVolumeHeader* vh = priv_data->vh;
+ int resize = 1;
+ unsigned int hfsp_sect_block =
+ ( PED_BE32_TO_CPU (vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT );
+ unsigned int map_sectors;
+
+ old_blocks = PED_BE32_TO_CPU (vh->total_blocks);
+
+ /* Flush caches */
+ if (!ped_geometry_sync(priv_data->plus_geom))
+ return 0;
+
+ /* Clear the unmounted bit */
+ /* and set the implementation code (Apple Creator Code) */
+ vh->attributes &= PED_CPU_TO_BE32 (~( 1 << HFS_UNMOUNTED ));
+ vh->last_mounted_version = PED_CPU_TO_BE32(HFSP_IMPL_Shnk);
+ if (!ped_geometry_read (priv_data->plus_geom, buf, 2, 1))
+ return 0;
+ memcpy (buf, vh, sizeof (HfsPVolumeHeader));
+ if ( !ped_geometry_write (priv_data->plus_geom, buf, 2, 1)
+ || !ped_geometry_sync (priv_data->plus_geom))
+ return 0;
+
+ ped_timer_reset (timer);
+ ped_timer_set_state_name(timer, _("shrinking"));
+ ped_timer_update(timer, 0.0);
+ /* relocate data */
+ to_free = ( priv_data->plus_geom->length
+ - geom->length + hfsp_sect_block
+ - 1 ) / hfsp_sect_block;
+ block = hfsplus_find_start_pack (fs, to_free);
+ if (!hfsplus_pack_free_space_from_block (fs, block, timer, to_free)) {
+ resize = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Data relocation has failed."));
+ goto write_VH;
+ }
+
+ /* Calculate new block number and other VH field */
+ /* nblock must be rounded _down_ */
+ nblock = geom->length / hfsp_sect_block;
+ nfree = PED_BE32_TO_CPU (vh->free_blocks)
+ - (old_blocks - nblock);
+ /* free block readjustement is only needed when incorrect nblock
+ was used by my previous implementation, so detect the case */
+ if (priv_data->plus_geom->length < old_blocks
+ * ( PED_BE32_TO_CPU (vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT) ) {
+ if (priv_data->plus_geom->length % hfsp_sect_block == 1)
+ nfree++;
+ }
+
+ /* Check that all block after future end are really free */
+ mblock = ( priv_data->plus_geom->length - 2 )
+ / hfsp_sect_block;
+ if (mblock > old_blocks - 1)
+ mblock = old_blocks - 1;
+ for ( block = nblock;
+ block < mblock;
+ block++ ) {
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,block)) {
+ resize = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Data relocation left some data at the end "
+ "of the volume."));
+ goto write_VH;
+ }
+ }
+
+ /* Mark out of volume blocks as used */
+ map_sectors = ( ( old_blocks + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8) )
+ * (PED_SECTOR_SIZE_DEFAULT * 8);
+ for ( block = nblock; block < map_sectors; ++block)
+ SET_BLOC_OCCUPATION(priv_data->alloc_map, block);
+
+ /* Update geometry */
+ if (resize) {
+ /* update in fs structure */
+ if (PED_BE32_TO_CPU (vh->next_allocation) >= nblock)
+ vh->next_allocation = PED_CPU_TO_BE32 (0);
+ vh->total_blocks = PED_CPU_TO_BE32 (nblock);
+ vh->free_blocks = PED_CPU_TO_BE32 (nfree);
+ /* update parted structure */
+ priv_data->plus_geom->length = geom->length;
+ priv_data->plus_geom->end = priv_data->plus_geom->start
+ + geom->length - 1;
+ }
+
+ /* Effective write */
+ write_VH:
+ /* lasts two sectors are allocated by the alternate VH
+ and a reserved sector, and last block is always reserved */
+ block = (priv_data->plus_geom->length - 1) / hfsp_sect_block;
+ if (block < PED_BE32_TO_CPU (vh->total_blocks))
+ SET_BLOC_OCCUPATION(priv_data->alloc_map, block);
+ block = (priv_data->plus_geom->length - 2) / hfsp_sect_block;
+ if (block < PED_BE32_TO_CPU (vh->total_blocks))
+ SET_BLOC_OCCUPATION(priv_data->alloc_map, block);
+ SET_BLOC_OCCUPATION(priv_data->alloc_map,
+ PED_BE32_TO_CPU (vh->total_blocks) - 1);
+
+ /* Write the _old_ area to set out of volume blocks as used */
+ map_sectors = ( old_blocks + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8);
+ if (!hfsplus_file_write (priv_data->allocation_file,
+ priv_data->alloc_map, 0, map_sectors)) {
+ resize = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Error while writing the allocation file."));
+ } else {
+ /* Write remaining part of allocation bitmap */
+ /* This is necessary to handle pre patch-11 and third party */
+ /* implementations */
+ memset(buf, 0xFF, PED_SECTOR_SIZE_DEFAULT);
+ for (block = map_sectors;
+ block < priv_data->allocation_file->sect_nb;
+ ++block) {
+ if (!hfsplus_file_write_sector (
+ priv_data->allocation_file,
+ buf, block)) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("Error while writing the "
+ "compatibility part of the "
+ "allocation file."));
+ break;
+ }
+ }
+ }
+ ped_geometry_sync (priv_data->plus_geom);
+
+ if (resize) {
+ /* Set the unmounted bit and clear the inconsistent bit */
+ vh->attributes |= PED_CPU_TO_BE32 ( 1 << HFS_UNMOUNTED );
+ vh->attributes &= ~ PED_CPU_TO_BE32 ( 1 << HFSP_INCONSISTENT );
+ }
+
+ ped_timer_set_state_name(timer, _("writing HFS+ Volume Header"));
+ if (!hfsplus_update_vh(fs)) {
+ ped_geometry_sync(priv_data->plus_geom);
+ return 0;
+ }
+
+ if (!ped_geometry_sync(priv_data->plus_geom))
+ return 0;
+
+ ped_timer_update(timer, 1.0);
+
+ return (resize);
+}
+
+/* Update the HFS wrapper mdb and bad blocks file to reflect
+ the new geometry of the embedded HFS+ volume */
+static int
+hfsplus_wrapper_update (PedFileSystem* fs)
+{
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+ HfsCPrivateLeafRec ref;
+ HfsExtentKey key;
+ HfsNodeDescriptor* node_desc = (HfsNodeDescriptor*) node;
+ HfsExtentKey* ret_key;
+ HfsExtDescriptor* ret_data;
+ unsigned int i;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*)
+ priv_data->wrapper->type_specific;
+ unsigned int hfs_sect_block =
+ PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT ;
+ PedSector hfsplus_sect = (PedSector)
+ PED_BE32_TO_CPU (priv_data->vh->total_blocks)
+ * ( PED_BE32_TO_CPU (priv_data->vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT );
+ unsigned int hfs_blocks_embedded =
+ (hfsplus_sect + hfs_sect_block - 1)
+ / hfs_sect_block;
+ unsigned int hfs_blocks_embedded_old;
+
+ /* update HFS wrapper MDB */
+ hfs_blocks_embedded_old = PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->old_new
+ .embedded.location.block_count );
+ hfs_priv_data->mdb->old_new.embedded.location.block_count =
+ PED_CPU_TO_BE16 (hfs_blocks_embedded);
+ /* maybe macOS will boot with this */
+ /* update : yes it does \o/ :) */
+ hfs_priv_data->mdb->free_blocks =
+ PED_CPU_TO_BE16 ( PED_BE16_TO_CPU (hfs_priv_data->mdb->free_blocks)
+ + hfs_blocks_embedded_old
+ - hfs_blocks_embedded );
+
+ if (!hfs_update_mdb(priv_data->wrapper))
+ return 0;
+
+ /* force reload bad block list */
+ if (hfs_priv_data->bad_blocks_loaded) {
+ hfs_free_bad_blocks_list (hfs_priv_data->bad_blocks_xtent_list);
+ hfs_priv_data->bad_blocks_xtent_list = NULL;
+ hfs_priv_data->bad_blocks_xtent_nb = 0;
+ hfs_priv_data->bad_blocks_loaded = 0;
+ }
+
+ /* clean HFS wrapper allocation map */
+ for (i = PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->old_new.embedded
+ .location.start_block )
+ + hfs_blocks_embedded;
+ i < PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->old_new.embedded
+ .location.start_block )
+ + hfs_blocks_embedded_old;
+ i++ ) {
+ CLR_BLOC_OCCUPATION(hfs_priv_data->alloc_map, i);
+ }
+ /* and save it */
+ if (!ped_geometry_write (fs->geom, hfs_priv_data->alloc_map,
+ PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->volume_bitmap_block ),
+ ( PED_BE16_TO_CPU (
+ hfs_priv_data->mdb->total_blocks )
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8)))
+ return 0;
+ if (!ped_geometry_sync (fs->geom))
+ return 0;
+
+ /* search and update the bad blocks file */
+ key.key_length = sizeof(key) - 1;
+ key.type = HFS_DATA_FORK;
+ key.file_ID = PED_CPU_TO_BE32 (HFS_BAD_BLOCK_ID);
+ key.start = 0;
+ if (!hfs_btree_search (hfs_priv_data->extent_file,
+ (HfsPrivateGenericKey*) &key, NULL, 0, &ref)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("An error occurred while looking for the mandatory "
+ "bad blocks file."));
+ return 0;
+ }
+ if (!hfs_file_read_sector (hfs_priv_data->extent_file, node,
+ ref.node_number))
+ return 0;
+ ret_key = (HfsExtentKey*) (node + ref.record_pos);
+ ret_data = (HfsExtDescriptor*) ( node + ref.record_pos
+ + sizeof (HfsExtentKey) );
+
+ while (ret_key->type == key.type && ret_key->file_ID == key.file_ID) {
+ for (i = 0; i < HFS_EXT_NB; i++) {
+ if ( ret_data[i].start_block
+ == hfs_priv_data->mdb->old_new
+ .embedded.location.start_block) {
+ ret_data[i].block_count =
+ hfs_priv_data->mdb->old_new
+ .embedded.location.block_count;
+ /* found ! : update */
+ if (!hfs_file_write_sector (
+ hfs_priv_data->extent_file,
+ node, ref.node_number)
+ || !ped_geometry_sync(fs->geom))
+ return 0;
+ return 1;
+ }
+ }
+
+ if (ref.record_number < PED_BE16_TO_CPU (node_desc->rec_nb)) {
+ ref.record_number++;
+ } else {
+ ref.node_number = PED_BE32_TO_CPU (node_desc->next);
+ if (!ref.node_number
+ || !hfs_file_read_sector(hfs_priv_data->extent_file,
+ node, ref.node_number))
+ goto bb_not_found;
+ ref.record_number = 1;
+ }
+
+ uint16_t value;
+ memcpy(&value, node+PED_SECTOR_SIZE_DEFAULT - (2*ref.record_number), sizeof(uint16_t));
+ ref.record_pos = PED_BE16_TO_CPU(value);
+ ret_key = (HfsExtentKey*) (node + ref.record_pos);
+ ret_data = (HfsExtDescriptor*) (node + ref.record_pos
+ + sizeof (HfsExtentKey) );
+ }
+
+bb_not_found:
+ /* not found : not a valid hfs+ wrapper : failure */
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("It seems there is an error in the HFS wrapper: the bad "
+ "blocks file doesn't contain the embedded HFS+ volume."));
+ return 0;
+}
+
+int
+hfsplus_resize (PedFileSystem* fs, PedGeometry* geom, PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data;
+ PedTimer* timer_plus;
+ PedGeometry* embedded_geom;
+ PedSector hgms;
+
+ /* check preconditions */
+ PED_ASSERT (fs != NULL);
+ PED_ASSERT (fs->geom != NULL);
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (fs->geom->dev == geom->dev);
+#ifdef DEBUG
+ PED_ASSERT ((hgms = hfsplus_get_min_size (fs)) != 0);
+#else
+ if ((hgms = hfsplus_get_min_size (fs)) == 0)
+ return 0;
+#endif
+
+ if (ped_geometry_test_equal(fs->geom, geom))
+ return 1;
+
+ priv_data = (HfsPPrivateFSData*) fs->type_specific;
+
+ if (fs->geom->start != geom->start
+ || geom->length > fs->geom->length
+ || geom->length < hgms) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Sorry, HFS+ cannot be resized that way yet."));
+ return 0;
+ }
+
+ if (priv_data->wrapper) {
+ PedSector red, hgee;
+ HfsPrivateFSData* hfs_priv_data = (HfsPrivateFSData*)
+ priv_data->wrapper->type_specific;
+ unsigned int hfs_sect_block =
+ PED_BE32_TO_CPU (hfs_priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT;
+
+ /* There is a wrapper so we must calculate the new geometry
+ of the embedded HFS+ volume */
+ red = ( (fs->geom->length - geom->length + hfs_sect_block - 1)
+ / hfs_sect_block ) * hfs_sect_block;
+ /* Can't we shrink the hfs+ volume by the desired size ? */
+ hgee = hfsplus_get_empty_end (fs);
+ if (!hgee) return 0;
+ if (red > priv_data->plus_geom->length - hgee) {
+ /* No, shrink hfs+ by the greatest possible value */
+ hgee = ((hgee + hfs_sect_block - 1) / hfs_sect_block)
+ * hfs_sect_block;
+ red = priv_data->plus_geom->length - hgee;
+ }
+ embedded_geom = ped_geometry_new (geom->dev,
+ priv_data->plus_geom->start,
+ priv_data->plus_geom->length
+ - red);
+
+ /* There is a wrapper so the resize process is a two stages
+ process (embedded resizing then wrapper resizing) :
+ we create a sub timer */
+ ped_timer_reset (timer);
+ ped_timer_set_state_name (timer,
+ _("shrinking embedded HFS+ volume"));
+ ped_timer_update(timer, 0.0);
+ timer_plus = ped_timer_new_nested (timer, 0.98);
+ } else {
+ /* No wrapper : the desired geometry is the desired
+ HFS+ volume geometry */
+ embedded_geom = geom;
+ timer_plus = timer;
+ }
+
+ /* Resize the HFS+ volume */
+ if (!hfsplus_volume_resize (fs, embedded_geom, timer_plus)) {
+ if (timer_plus != timer) ped_timer_destroy_nested (timer_plus);
+ if (priv_data->wrapper) ped_geometry_destroy (embedded_geom);
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Resizing the HFS+ volume has failed."));
+ return 0;
+ }
+
+ if (priv_data->wrapper) {
+ ped_geometry_destroy (embedded_geom);
+ ped_timer_destroy_nested (timer_plus);
+ ped_timer_set_state_name(timer, _("shrinking HFS wrapper"));
+ timer_plus = ped_timer_new_nested (timer, 0.02);
+ /* There's a wrapper : second stage = resizing it */
+ if (!hfsplus_wrapper_update (fs)
+ || !hfs_resize (priv_data->wrapper, geom, timer_plus)) {
+ ped_timer_destroy_nested (timer_plus);
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Updating the HFS wrapper has failed."));
+ return 0;
+ }
+ ped_timer_destroy_nested (timer_plus);
+ }
+ ped_timer_update(timer, 1.0);
+
+ return 1;
+}
+
+#ifdef HFS_EXTRACT_FS
+/* The following is for debugging purpose only, NOT for packaging */
+
+#include <stdio.h>
+
+uint8_t* extract_buffer = NULL;
+
+static int
+hfs_extract_file(const char* filename, HfsPrivateFile* hfs_file)
+{
+ FILE* fout;
+ PedSector sect;
+
+ fout = fopen(filename, "w");
+ if (!fout) return 0;
+
+ for (sect = 0; sect < hfs_file->sect_nb; ++sect) {
+ if (!hfs_file_read_sector(hfs_file, extract_buffer, sect))
+ goto err_close;
+ if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout))
+ goto err_close;
+ }
+
+ return (fclose(fout) == 0 ? 1 : 0);
+
+err_close:
+ fclose(fout);
+ return 0;
+}
+
+static int
+hfs_extract_bitmap(const char* filename, PedFileSystem* fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsMasterDirectoryBlock* mdb = priv_data->mdb;
+ unsigned int count;
+ FILE* fout;
+ PedSector sect;
+
+ fout = fopen(filename, "w");
+ if (!fout) return 0;
+
+ for (sect = PED_BE16_TO_CPU(mdb->volume_bitmap_block);
+ sect < PED_BE16_TO_CPU(mdb->start_block);
+ sect += count) {
+ uint16_t st_block = PED_BE16_TO_CPU(mdb->start_block);
+ count = (st_block-sect) < BLOCK_MAX_BUFF ?
+ (st_block-sect) : BLOCK_MAX_BUFF;
+ if (!ped_geometry_read(fs->geom, extract_buffer, sect, count))
+ goto err_close;
+ if (!fwrite (extract_buffer, count * PED_SECTOR_SIZE_DEFAULT,
+ 1, fout))
+ goto err_close;
+ }
+
+ return (fclose(fout) == 0 ? 1 : 0);
+
+err_close:
+ fclose(fout);
+ return 0;
+}
+
+static int
+hfs_extract_mdb (const char* filename, PedFileSystem* fs)
+{
+ FILE* fout;
+
+ fout = fopen(filename, "w");
+ if (!fout) return 0;
+
+ if (!ped_geometry_read(fs->geom, extract_buffer, 2, 1))
+ goto err_close;
+ if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout))
+ goto err_close;
+
+ return (fclose(fout) == 0 ? 1 : 0);
+
+err_close:
+ fclose(fout);
+ return 0;
+}
+
+static int
+hfs_extract (PedFileSystem* fs, PedTimer* timer)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This is not a real %s check. This is going to extract "
+ "special low level files for debugging purposes."),
+ "HFS");
+
+ extract_buffer = ped_malloc(BLOCK_MAX_BUFF * PED_SECTOR_SIZE_DEFAULT);
+ if (!extract_buffer) return 0;
+
+ hfs_extract_mdb(HFS_MDB_FILENAME, fs);
+ hfs_extract_file(HFS_CATALOG_FILENAME, priv_data->catalog_file);
+ hfs_extract_file(HFS_EXTENTS_FILENAME, priv_data->extent_file);
+ hfs_extract_bitmap(HFS_BITMAP_FILENAME, fs);
+
+ free(extract_buffer); extract_buffer = NULL;
+ return 0; /* nothing has been fixed by us ! */
+}
+
+static int
+hfsplus_extract_file(const char* filename, HfsPPrivateFile* hfsp_file)
+{
+ FILE* fout;
+ unsigned int cp_sect;
+ PedSector rem_sect;
+
+ fout = fopen(filename, "w");
+ if (!fout) return 0;
+
+ for (rem_sect = hfsp_file->sect_nb; rem_sect; rem_sect -= cp_sect) {
+ cp_sect = rem_sect < BLOCK_MAX_BUFF ? rem_sect : BLOCK_MAX_BUFF;
+ if (!hfsplus_file_read(hfsp_file, extract_buffer,
+ hfsp_file->sect_nb - rem_sect, cp_sect))
+ goto err_close;
+ if (!fwrite (extract_buffer, cp_sect * PED_SECTOR_SIZE_DEFAULT,
+ 1, fout))
+ goto err_close;
+ }
+
+ return (fclose(fout) == 0 ? 1 : 0);
+
+err_close:
+ fclose(fout);
+ return 0;
+}
+
+static int
+hfsplus_extract_vh (const char* filename, PedFileSystem* fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ FILE* fout;
+ PedGeometry* geom = priv_data->plus_geom;
+
+
+ fout = fopen(filename, "w");
+ if (!fout) return 0;
+
+ if (!ped_geometry_read(geom, extract_buffer, 2, 1))
+ goto err_close;
+ if (!fwrite(extract_buffer, PED_SECTOR_SIZE_DEFAULT, 1, fout))
+ goto err_close;
+
+ return (fclose(fout) == 0 ? 1 : 0);
+
+err_close:
+ fclose(fout);
+ return 0;
+}
+
+/* TODO : use the timer to report what is happening */
+/* TODO : use exceptions to report errors */
+static int
+hfsplus_extract (PedFileSystem* fs, PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPVolumeHeader* vh = priv_data->vh;
+ HfsPPrivateFile* startup_file;
+
+ if (priv_data->wrapper) {
+ /* TODO : create nested timer */
+ hfs_extract (priv_data->wrapper, timer);
+ }
+
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This is not a real %s check. This is going to extract "
+ "special low level files for debugging purposes."),
+ "HFS+");
+
+ extract_buffer = ped_malloc(BLOCK_MAX_BUFF * PED_SECTOR_SIZE_DEFAULT);
+ if (!extract_buffer) return 0;
+
+ hfsplus_extract_vh(HFSP_VH_FILENAME, fs);
+ hfsplus_extract_file(HFSP_CATALOG_FILENAME, priv_data->catalog_file);
+ hfsplus_extract_file(HFSP_EXTENTS_FILENAME, priv_data->extents_file);
+ hfsplus_extract_file(HFSP_ATTRIB_FILENAME, priv_data->attributes_file);
+ hfsplus_extract_file(HFSP_BITMAP_FILENAME, priv_data->allocation_file);
+
+ startup_file = hfsplus_file_open(fs, PED_CPU_TO_BE32(HFSP_STARTUP_ID),
+ vh->startup_file.extents,
+ PED_BE64_TO_CPU (
+ vh->startup_file.logical_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+ if (startup_file) {
+ hfsplus_extract_file(HFSP_STARTUP_FILENAME, startup_file);
+ hfsplus_file_close(startup_file); startup_file = NULL;
+ }
+
+ free(extract_buffer); extract_buffer = NULL;
+ return 0; /* nothing has been fixed by us ! */
+}
+#endif /* HFS_EXTRACT_FS */
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/hfs.h b/libparted/fs/r/hfs/hfs.h
new file mode 100644
index 0000000..5b9138c
--- /dev/null
+++ b/libparted/fs/r/hfs/hfs.h
@@ -0,0 +1,648 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2003-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _HFS_H
+#define _HFS_H
+
+/* WARNING : bn is used 2 times in theses macro */
+/* so _never_ use side effect operators when using them */
+#define TST_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) & (1<<(7-((bn)&7))))
+#define SET_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) |= (1<<(7-((bn)&7))))
+#define CLR_BLOC_OCCUPATION(tab,bn) \
+ (((tab)[(bn)/8]) &= ~(1<<(7-((bn)&7))))
+
+/* Maximum number of blocks for the copy buffers */
+#define BLOCK_MAX_BUFF 256
+/* Maximum size of the copy buffers, in bytes */
+#define BYTES_MAX_BUFF 8388608
+
+/* Apple Creator Codes follow */
+#define HFSP_IMPL_Shnk 0x53686e6b /* in use */
+#define HFSP_IMPL_Xpnd 0x58706e64 /* reserved */
+#define HFSP_IMPL_Resz 0x5265737a /* reserved */
+#define HFSP_IMPL_PHpx 0x50482b78 /* reserved */
+#define HFSP_IMPL_traP 0x74726150 /* reserved */
+#define HFSP_IMPL_GnuP 0x476e7550 /* reserved */
+
+#define HFS_SIGNATURE 0x4244 /* 'BD' */
+#define HFSP_SIGNATURE 0x482B /* 'H+' */
+#define HFSX_SIGNATURE 0x4858 /* 'HX' */
+
+#define HFSP_VERSION 4
+#define HFSX_VERSION 5
+
+#define HFS_HARD_LOCK 7
+#define HFS_UNMOUNTED 8
+#define HFS_BAD_SPARED 9
+#define HFS_SOFT_LOCK 15
+#define HFSP_NO_CACHE 10
+#define HFSP_INCONSISTENT 11
+#define HFSP_REUSE_CNID 12
+#define HFSP_JOURNALED 13
+
+#define HFS_IDX_NODE 0x00
+#define HFS_HDR_NODE 0x01
+#define HFS_MAP_NODE 0x02
+#define HFS_LEAF_NODE 0xFF
+
+#define HFS_FIRST_REC 0x0E
+#define HFS_NSD_HD_REC 0x78
+#define HFS_MAP_REC 0xF8
+
+#define HFS_DATA_FORK 0x00
+#define HFS_RES_FORK 0xFF
+
+#define HFS_CAT_DIR 0x01
+#define HFS_CAT_FILE 0x02
+#define HFS_CAT_DIR_TH 0x03
+#define HFS_CAT_FILE_TH 0x04
+
+#define HFSP_ATTR_INLINE 0x10
+#define HFSP_ATTR_FORK 0x20
+#define HFSP_ATTR_EXTENTS 0x30
+
+#define HFS_ROOT_PAR_ID 0x01
+#define HFS_ROOT_DIR_ID 0x02
+#define HFS_XTENT_ID 0x03
+#define HFS_CATALOG_ID 0x04
+#define HFS_BAD_BLOCK_ID 0x05
+#define HFSP_ALLOC_ID 0x06
+#define HFSP_STARTUP_ID 0x07
+#define HFSP_ATTRIB_ID 0x08
+#define HFSP_BOGUS_ID 0x0F
+#define HFSP_FIRST_AV_ID 0x10
+
+#define HFSJ_JOURN_IN_FS 0x00
+#define HFSJ_JOURN_OTHER_DEV 0x01
+#define HFSJ_JOURN_NEED_INIT 0x02
+
+#define HFSJ_HEADER_MAGIC 0x4a4e4c78
+#define HFSJ_ENDIAN_MAGIC 0x12345678
+
+#define HFSX_CASE_FOLDING 0xCF /* case insensitive HFSX */
+#define HFSX_BINARY_COMPARE 0xBC /* case sensitive HFSX */
+
+#define HFS_EXT_NB 3
+#define HFSP_EXT_NB 8
+
+/* Define the filenames used by the FS extractor */
+#ifdef HFS_EXTRACT_FS
+
+#define HFS_MDB_FILENAME "mdb.hfs"
+#define HFS_CATALOG_FILENAME "catalog.hfs"
+#define HFS_EXTENTS_FILENAME "extents.hfs"
+#define HFS_BITMAP_FILENAME "bitmap.hfs"
+
+#define HFSP_VH_FILENAME "vh.hfsplus"
+#define HFSP_CATALOG_FILENAME "catalog.hfsplus"
+#define HFSP_EXTENTS_FILENAME "extents.hfsplus"
+#define HFSP_BITMAP_FILENAME "bitmap.hfsplus"
+#define HFSP_ATTRIB_FILENAME "attributes.hfsplus"
+#define HFSP_STARTUP_FILENAME "startup.hfsplus"
+
+#endif /* HFS_EXTRACT_FS */
+
+
+
+/* ----------------------------------- */
+/* -- HFS DATA STRUCTURES -- */
+/* ----------------------------------- */
+
+/* Extent descriptor */
+struct __attribute__ ((packed)) _HfsExtDescriptor {
+ uint16_t start_block;
+ uint16_t block_count;
+};
+typedef struct _HfsExtDescriptor HfsExtDescriptor;
+typedef HfsExtDescriptor HfsExtDataRec[HFS_EXT_NB];
+
+/* Volume header */
+struct __attribute__ ((packed)) _HfsMasterDirectoryBlock {
+ uint16_t signature;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint16_t volume_attributes;
+ uint16_t files_in_root;
+ uint16_t volume_bitmap_block; /* in sectors */
+ uint16_t next_allocation;
+ uint16_t total_blocks;
+ uint32_t block_size; /* in bytes */
+ uint32_t def_clump_size; /* in bytes */
+ uint16_t start_block; /* in sectors */
+ uint32_t next_free_node;
+ uint16_t free_blocks;
+ uint8_t name_length;
+ char name[27];
+ uint32_t backup_date;
+ uint16_t backup_number;
+ uint32_t write_count;
+ uint32_t extents_clump;
+ uint32_t catalog_clump;
+ uint16_t dirs_in_root;
+ uint32_t file_count;
+ uint32_t dir_count;
+ uint32_t finder_info[8];
+ union __attribute__ ((packed)) {
+ struct __attribute__ ((packed)) {
+ uint16_t volume_cache_size; /* in blocks */
+ uint16_t bitmap_cache_size; /* in blocks */
+ uint16_t common_cache_size; /* in blocks */
+ } legacy;
+ struct __attribute__ ((packed)) {
+ uint16_t signature;
+ HfsExtDescriptor location;
+ } embedded;
+ } old_new;
+ uint32_t extents_file_size; /* in bytes, block size multiple */
+ HfsExtDataRec extents_file_rec;
+ uint32_t catalog_file_size; /* in bytes, block size multiple */
+ HfsExtDataRec catalog_file_rec;
+};
+typedef struct _HfsMasterDirectoryBlock HfsMasterDirectoryBlock;
+
+/* B*-Tree Node Descriptor */
+struct __attribute__ ((packed)) _HfsNodeDescriptor {
+ uint32_t next;
+ uint32_t previous;
+ int8_t type;
+ uint8_t height;
+ uint16_t rec_nb;
+ uint16_t reserved;
+};
+typedef struct _HfsNodeDescriptor HfsNodeDescriptor;
+
+/* Header record of a whole B*-Tree */
+struct __attribute__ ((packed)) _HfsHeaderRecord {
+ uint16_t depth;
+ uint32_t root_node;
+ uint32_t leaf_records;
+ uint32_t first_leaf_node;
+ uint32_t last_leaf_node;
+ uint16_t node_size;
+ uint16_t max_key_len;
+ uint32_t total_nodes;
+ uint32_t free_nodes;
+ int8_t reserved[76];
+};
+typedef struct _HfsHeaderRecord HfsHeaderRecord;
+
+/* Catalog key for B*-Tree lookup in the catalog file */
+struct __attribute__ ((packed)) _HfsCatalogKey {
+ uint8_t key_length; /* length of the key without key_length */
+ uint8_t reserved;
+ uint32_t parent_ID;
+ uint8_t name_length;
+ char name[31]; /* in fact physicaly 1 upto 31 */
+};
+typedef struct _HfsCatalogKey HfsCatalogKey;
+
+/* Extents overflow key for B*-Tree lookup */
+struct __attribute__ ((packed)) _HfsExtentKey {
+ uint8_t key_length; /* length of the key without key_length */
+ uint8_t type; /* data or ressource fork */
+ uint32_t file_ID;
+ uint16_t start;
+};
+typedef struct _HfsExtentKey HfsExtentKey;
+
+/* Catalog subdata case directory */
+struct __attribute__ ((packed)) _HfsDir {
+ uint16_t flags;
+ uint16_t valence; /* number of files in this directory */
+ uint32_t dir_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ int8_t DInfo[16]; /* used by Finder, handle as reserved */
+ int8_t DXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t reserved[4];
+};
+typedef struct _HfsDir HfsDir;
+
+/* Catalog subdata case file */
+struct __attribute__ ((packed)) _HfsFile {
+ int8_t flags;
+ int8_t type; /* should be 0 */
+ int8_t FInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t file_ID;
+ uint16_t data_start_block;
+ uint32_t data_sz_byte;
+ uint32_t data_sz_block;
+ uint16_t res_start_block;
+ uint32_t res_sz_byte;
+ uint32_t res_sz_block;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ int8_t FXInfo[16]; /* used by Finder, handle as reserved */
+ uint16_t clump_size;
+ HfsExtDataRec extents_data;
+ HfsExtDataRec extents_res;
+ uint32_t reserved;
+};
+typedef struct _HfsFile HfsFile;
+
+/* Catalog subdata case directory thread */
+struct __attribute__ ((packed)) _HfsDirTh {
+ uint32_t reserved[2];
+ uint32_t parent_ID;
+ int8_t name_length;
+ char name[31];
+};
+typedef struct _HfsDirTh HfsDirTh;
+
+/* Catalog subdata case file thread */
+typedef struct _HfsDirTh HfsFileTh; /* same as directory thread */
+
+/* Catalog data */
+struct __attribute__ ((packed)) _HfsCatalog {
+ int8_t type;
+ int8_t reserved;
+ union {
+ HfsDir dir;
+ HfsFile file;
+ HfsDirTh dir_th;
+ HfsFileTh file_th;
+ } sel;
+};
+typedef struct _HfsCatalog HfsCatalog;
+
+
+
+/* ------------------------------------ */
+/* -- HFS+ DATA STRUCTURES -- */
+/* ------------------------------------ */
+
+/* documented since 2004 in tn1150 */
+struct __attribute__ ((packed)) _HfsPPerms {
+ uint32_t owner_ID;
+ uint32_t group_ID;
+ uint32_t permissions;
+ uint32_t special_devices;
+};
+typedef struct _HfsPPerms HfsPPerms;
+
+/* HFS+ extent descriptor*/
+struct __attribute__ ((packed)) _HfsPExtDescriptor {
+ uint32_t start_block;
+ uint32_t block_count;
+};
+typedef struct _HfsPExtDescriptor HfsPExtDescriptor;
+typedef HfsPExtDescriptor HfsPExtDataRec[HFSP_EXT_NB];
+
+/* HFS+ fork data structure */
+struct __attribute__ ((packed)) _HfsPForkData {
+ uint64_t logical_size;
+ uint32_t clump_size;
+ uint32_t total_blocks;
+ HfsPExtDataRec extents;
+};
+typedef struct _HfsPForkData HfsPForkData;
+
+/* HFS+ catalog node ID */
+typedef uint32_t HfsPNodeID;
+
+/* HFS+ file names */
+typedef uint16_t unichar;
+struct __attribute__ ((packed)) _HfsPUniStr255 {
+ uint16_t length;
+ unichar unicode[255]; /* 1 upto 255 */
+};
+typedef struct _HfsPUniStr255 HfsPUniStr255;
+
+/* HFS+ volume header */
+struct __attribute__ ((packed)) _HfsPVolumeHeader {
+ uint16_t signature;
+ uint16_t version;
+ uint32_t attributes;
+ uint32_t last_mounted_version;
+ uint32_t journal_info_block;
+
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t backup_date;
+ uint32_t checked_date;
+
+ uint32_t file_count;
+ uint32_t dir_count;
+
+ uint32_t block_size;
+ uint32_t total_blocks;
+ uint32_t free_blocks;
+
+ uint32_t next_allocation;
+ uint32_t res_clump_size;
+ uint32_t data_clump_size;
+ HfsPNodeID next_catalog_ID;
+
+ uint32_t write_count;
+ uint64_t encodings_bitmap;
+
+ uint8_t finder_info[32];
+
+ HfsPForkData allocation_file;
+ HfsPForkData extents_file;
+ HfsPForkData catalog_file;
+ HfsPForkData attributes_file;
+ HfsPForkData startup_file;
+};
+typedef struct _HfsPVolumeHeader HfsPVolumeHeader;
+
+/* HFS+ B-Tree Node Descriptor. Same as HFS btree. */
+struct __attribute__ ((packed)) _HfsPNodeDescriptor {
+ uint32_t next;
+ uint32_t previous;
+ int8_t type;
+ uint8_t height;
+ uint16_t rec_nb;
+ uint16_t reserved;
+};
+typedef struct _HfsPNodeDescriptor HfsPNodeDescriptor;
+
+/* Header record of a whole HFS+ B-Tree. */
+struct __attribute__ ((packed)) _HfsPHeaderRecord {
+ uint16_t depth;
+ uint32_t root_node;
+ uint32_t leaf_records;
+ uint32_t first_leaf_node;
+ uint32_t last_leaf_node;
+ uint16_t node_size;
+ uint16_t max_key_len;
+ uint32_t total_nodes;
+ uint32_t free_nodes; /* same as hfs btree until here */
+ uint16_t reserved1;
+
+ uint32_t clump_size;
+ uint8_t btree_type; /* must be 0 for HFS+ B-Tree */
+ uint8_t key_compare_type; /* hfsx => 0xCF = case folding */
+ /* 0xBC = binary compare */
+ /* otherwise, reserved */
+ uint32_t attributes;
+ uint32_t reserved3[16];
+};
+typedef struct _HfsPHeaderRecord HfsPHeaderRecord;
+
+/* Catalog key for B-Tree lookup in the HFS+ catalog file */
+struct __attribute__ ((packed)) _HfsPCatalogKey {
+ uint16_t key_length;
+ HfsPNodeID parent_ID;
+ HfsPUniStr255 node_name;
+};
+typedef struct _HfsPCatalogKey HfsPCatalogKey;
+
+/* HFS+ catalog subdata case dir */
+struct __attribute__ ((packed)) _HfsPDir {
+ uint16_t flags;
+ uint32_t valence;
+ HfsPNodeID dir_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t attrib_mod_date;
+ uint32_t access_date;
+ uint32_t backup_date;
+ HfsPPerms permissions;
+ int8_t DInfo[16]; /* used by Finder, handle as reserved */
+ int8_t DXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t text_encoding;
+ uint32_t reserved;
+};
+typedef struct _HfsPDir HfsPDir;
+
+/* HFS+ catalog subdata case file */
+struct __attribute__ ((packed)) _HfsPFile {
+ uint16_t flags;
+ uint32_t reserved1;
+ HfsPNodeID file_ID;
+ uint32_t create_date;
+ uint32_t modify_date;
+ uint32_t attrib_mod_date;
+ uint32_t access_date;
+ uint32_t backup_date;
+ HfsPPerms permissions;
+ int8_t FInfo[16]; /* used by Finder, handle as reserved */
+ int8_t FXInfo[16]; /* used by Finder, handle as reserved */
+ uint32_t text_encoding;
+ uint32_t reserved2;
+
+ HfsPForkData data_fork;
+ HfsPForkData res_fork;
+};
+typedef struct _HfsPFile HfsPFile;
+
+/* HFS+ catalog subdata case thread */
+struct __attribute__ ((packed)) _HfsPThread {
+ int16_t reserved;
+ HfsPNodeID parent_ID;
+ HfsPUniStr255 node_name;
+};
+typedef struct _HfsPThread HfsPDirTh;
+typedef struct _HfsPThread HfsPFileTh;
+
+/* HFS+ Catalog leaf data */
+struct __attribute__ ((packed)) _HfsPCatalog {
+ int16_t type;
+ union {
+ HfsPDir dir;
+ HfsPFile file;
+ HfsPDirTh dir_th;
+ HfsPFileTh file_th;
+ } sel;
+};
+typedef struct _HfsPCatalog HfsPCatalog;
+
+/* HFS+ extents file key */
+struct __attribute__ ((packed)) _HfsPExtentKey {
+ uint16_t key_length;
+ uint8_t type;
+ uint8_t pad;
+ HfsPNodeID file_ID;
+ uint32_t start;
+};
+typedef struct _HfsPExtentKey HfsPExtentKey;
+
+/* extent file data is HfsPExtDataRec */
+
+/* Fork data attribute file */
+struct __attribute__ ((packed)) _HfsPForkDataAttr {
+ uint32_t record_type;
+ uint32_t reserved;
+ union __attribute__ ((packed)) {
+ HfsPForkData fork;
+ HfsPExtDataRec extents;
+ } fork_res;
+};
+typedef struct _HfsPForkDataAttr HfsPForkDataAttr;
+
+
+/* ----------- Journal data structures ----------- */
+
+/* Info block : stored in a block # defined in the VH */
+struct __attribute__ ((packed)) _HfsJJournalInfoBlock {
+ uint32_t flags;
+ uint32_t device_signature[8];
+ uint64_t offset;
+ uint64_t size;
+ uint32_t reserved[32];
+};
+typedef struct _HfsJJournalInfoBlock HfsJJournalInfoBlock;
+
+struct __attribute__ ((packed)) _HfsJJournalHeader {
+ uint32_t magic;
+ uint32_t endian;
+ uint64_t start;
+ uint64_t end;
+ uint64_t size;
+ uint32_t blhdr_size;
+ uint32_t checksum;
+ uint32_t jhdr_size;
+};
+typedef struct _HfsJJournalHeader HfsJJournalHeader;
+
+struct __attribute__ ((packed)) _HfsJBlockInfo {
+ uint64_t bnum; /* sector number */
+ uint32_t bsize; /* size in bytes */
+ uint32_t next;
+};
+typedef struct _HfsJBlockInfo HfsJBlockInfo;
+
+struct __attribute__ ((packed)) _HfsJBlockListHeader {
+ uint16_t max_blocks; /* reserved */
+ uint16_t num_blocks;
+ uint32_t bytes_used;
+ uint32_t checksum;
+ uint32_t pad;
+ HfsJBlockInfo binfo[];
+};
+typedef struct _HfsJBlockListHeader HfsJBlockListHeader;
+
+
+
+/* ---------------------------------------- */
+/* -- INTERNAL DATA STRUCTURES -- */
+/* ---------------------------------------- */
+
+/* Data of an opened HFS file */
+struct _HfsPrivateFile {
+ PedSector sect_nb;
+ PedFileSystem* fs;
+ uint32_t CNID; /* disk order (BE) */
+ HfsExtDataRec first; /* disk order (BE) */
+ HfsExtDataRec cache; /* disk order (BE) */
+ uint16_t start_cache; /* CPU order */
+};
+typedef struct _HfsPrivateFile HfsPrivateFile;
+
+/* To store bad block list */
+struct _HfsPrivateLinkExtent {
+ HfsExtDescriptor extent;
+ struct _HfsPrivateLinkExtent* next;
+};
+typedef struct _HfsPrivateLinkExtent HfsPrivateLinkExtent;
+
+/* HFS Filesystem specific data */
+struct _HfsPrivateFSData {
+ uint8_t alloc_map[(1<<16) / 8];
+ HfsMasterDirectoryBlock* mdb;
+ HfsPrivateFile* extent_file;
+ HfsPrivateFile* catalog_file;
+ HfsPrivateLinkExtent* bad_blocks_xtent_list;
+ unsigned int bad_blocks_xtent_nb;
+ char bad_blocks_loaded;
+};
+typedef struct _HfsPrivateFSData HfsPrivateFSData;
+
+/* Generic btree key */
+struct __attribute__ ((packed)) _HfsPrivateGenericKey {
+ uint8_t key_length;
+ uint8_t key_content[1]; /* we use 1 as a minimum size */
+};
+typedef struct _HfsPrivateGenericKey HfsPrivateGenericKey;
+
+/* ----- HFS+ ----- */
+
+/* Data of an opened HFS file */
+struct _HfsPPrivateFile {
+ PedSector sect_nb;
+ PedFileSystem* fs;
+ HfsPNodeID CNID; /* disk order (BE) */
+ HfsPExtDataRec first; /* disk order (BE) */
+ HfsPExtDataRec cache; /* disk order (BE) */
+ uint32_t start_cache; /* CPU order */
+};
+typedef struct _HfsPPrivateFile HfsPPrivateFile;
+
+struct _HfsPPrivateExtent {
+ PedSector start_sector;
+ PedSector sector_count;
+};
+typedef struct _HfsPPrivateExtent HfsPPrivateExtent;
+
+/* To store bad block list */
+struct _HfsPPrivateLinkExtent {
+ HfsPExtDescriptor extent;
+ struct _HfsPPrivateLinkExtent* next;
+};
+typedef struct _HfsPPrivateLinkExtent HfsPPrivateLinkExtent;
+
+/* HFS+ file system specific data */
+struct _HfsPPrivateFSData {
+ PedFileSystem* wrapper; /* NULL if hfs+ is not embedded */
+ PedGeometry* plus_geom; /* Geometry of HFS+ _volume_ */
+ uint8_t* alloc_map;
+ uint8_t* dirty_alloc_map;
+ HfsPVolumeHeader* vh;
+ HfsPPrivateFile* extents_file;
+ HfsPPrivateFile* catalog_file;
+ HfsPPrivateFile* attributes_file;
+ HfsPPrivateFile* allocation_file;
+ HfsPPrivateLinkExtent* bad_blocks_xtent_list;
+ uint32_t jib_start_block;
+ uint32_t jl_start_block;
+ unsigned int bad_blocks_xtent_nb;
+ char bad_blocks_loaded;
+ char free_geom; /* 1 = plus_geom must be freed */
+};
+typedef struct _HfsPPrivateFSData HfsPPrivateFSData;
+
+/* Generic + btree key */
+struct __attribute__ ((packed)) _HfsPPrivateGenericKey {
+ uint16_t key_length;
+ uint8_t key_content[1]; /* we use 1 as a minimum size */
+};
+typedef struct _HfsPPrivateGenericKey HfsPPrivateGenericKey;
+
+/* ---- common ---- */
+
+/* node and lead record reference for a BTree search */
+struct _HfsCPrivateLeafRec {
+ unsigned int node_size; /* in sectors */
+ unsigned int node_number;
+ unsigned int record_pos;
+ unsigned int record_number;
+};
+typedef struct _HfsCPrivateLeafRec HfsCPrivateLeafRec;
+
+extern uint8_t* hfs_block;
+extern uint8_t* hfsp_block;
+extern unsigned hfs_block_count;
+extern unsigned hfsp_block_count;
+
+#endif /* _HFS_H */
diff --git a/libparted/fs/r/hfs/journal.c b/libparted/fs/r/hfs/journal.c
new file mode 100644
index 0000000..7a2a8dc
--- /dev/null
+++ b/libparted/fs/r/hfs/journal.c
@@ -0,0 +1,392 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "reloc_plus.h"
+
+#include "journal.h"
+
+static int hfsj_vh_replayed = 0;
+static int is_le = 0;
+
+static uint32_t
+hfsj_calc_checksum(uint8_t *ptr, int len)
+{
+ int i;
+ uint32_t cksum=0;
+
+ for (i=0; i < len; i++, ptr++) {
+ cksum = (cksum << 8) ^ (cksum + *ptr);
+ }
+
+ return (~cksum);
+}
+
+int
+hfsj_update_jib(PedFileSystem* fs, uint32_t block)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+
+ priv_data->vh->journal_info_block = PED_CPU_TO_BE32(block);
+
+ if (!hfsplus_update_vh (fs))
+ return 0;
+
+ priv_data->jib_start_block = block;
+ return 1;
+}
+
+int
+hfsj_update_jl(PedFileSystem* fs, uint32_t block)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ PedSector sector;
+ uint64_t offset;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsJJournalInfoBlock* jib;
+ int binsect;
+
+ binsect = HFS_32_TO_CPU(priv_data->vh->block_size, is_le) / PED_SECTOR_SIZE_DEFAULT;
+ sector = (PedSector) priv_data->jib_start_block * binsect;
+ if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1))
+ return 0;
+ jib = (HfsJJournalInfoBlock*) buf;
+
+ offset = (uint64_t)block * PED_SECTOR_SIZE_DEFAULT * binsect;
+ jib->offset = HFS_CPU_TO_64(offset, is_le);
+
+ if (!ped_geometry_write(priv_data->plus_geom, buf, sector, 1)
+ || !ped_geometry_sync(priv_data->plus_geom))
+ return 0;
+
+ priv_data->jl_start_block = block;
+ return 1;
+}
+
+/* Return the sector in the journal that is after the area read */
+/* or 0 on error */
+static PedSector
+hfsj_journal_read(PedGeometry* geom, HfsJJournalHeader* jh,
+ PedSector journ_sect, PedSector journ_length,
+ PedSector read_sect, unsigned int nb_sect,
+ void* buf)
+{
+ int r;
+
+ while (nb_sect--) {
+ r = ped_geometry_read(geom, buf, journ_sect + read_sect, 1);
+ if (!r) return 0;
+
+ buf = ((uint8_t*)buf) + PED_SECTOR_SIZE_DEFAULT;
+ read_sect++;
+ if (read_sect == journ_length)
+ read_sect = 1; /* skip journal header
+ which is asserted to be
+ 1 sector long */
+ }
+
+ return read_sect;
+}
+
+static int
+hfsj_replay_transaction(PedFileSystem* fs, HfsJJournalHeader* jh,
+ PedSector jsector, PedSector jlength)
+{
+ PedSector start, sector;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsJBlockListHeader* blhdr;
+ uint8_t* block;
+ unsigned int blhdr_nbsect;
+ int i, r;
+ uint32_t cksum, size;
+
+ blhdr_nbsect = HFS_32_TO_CPU(jh->blhdr_size, is_le) / PED_SECTOR_SIZE_DEFAULT;
+ blhdr = (HfsJBlockListHeader*)
+ ped_malloc (blhdr_nbsect * PED_SECTOR_SIZE_DEFAULT);
+ if (!blhdr) return 0;
+
+ start = HFS_64_TO_CPU(jh->start, is_le) / PED_SECTOR_SIZE_DEFAULT;
+ do {
+ start = hfsj_journal_read(priv_data->plus_geom, jh, jsector,
+ jlength, start, blhdr_nbsect, blhdr);
+ if (!start) goto err_replay;
+
+ cksum = HFS_32_TO_CPU(blhdr->checksum, is_le);
+ blhdr->checksum = 0;
+ if (cksum!=hfsj_calc_checksum((uint8_t*)blhdr, sizeof(*blhdr))){
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Bad block list header checksum."));
+ goto err_replay;
+ }
+ blhdr->checksum = HFS_CPU_TO_32(cksum, is_le);
+
+ for (i=1; i < HFS_16_TO_CPU(blhdr->num_blocks, is_le); ++i) {
+ size = HFS_32_TO_CPU(blhdr->binfo[i].bsize, is_le);
+ sector = HFS_64_TO_CPU(blhdr->binfo[i].bnum, is_le);
+ if (!size) continue;
+ if (size % PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw(
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Invalid size of a transaction "
+ "block while replaying the journal "
+ "(%i bytes)."),
+ size);
+ goto err_replay;
+ }
+ block = (uint8_t*) ped_malloc(size);
+ if (!block) goto err_replay;
+ start = hfsj_journal_read(priv_data->plus_geom, jh,
+ jsector, jlength, start,
+ size / PED_SECTOR_SIZE_DEFAULT,
+ block);
+ if (!start) {
+ free (block);
+ goto err_replay;
+ }
+ /* the sector stored in the journal seems to be
+ relative to the begin of the block device which
+ contains the hfs+ journaled volume */
+ if (sector != ~0LL)
+ r = ped_geometry_write (fs->geom, block, sector,
+ size / PED_SECTOR_SIZE_DEFAULT);
+ else
+ r = 1;
+ free (block);
+ /* check if wrapper mdb or vh with no wrapper has
+ changed */
+ if ( (sector != ~0LL)
+ && (2 >= sector)
+ && (2 < sector + size / PED_SECTOR_SIZE_DEFAULT) )
+ hfsj_vh_replayed = 1;
+ /* check if vh of embedded hfs+ has changed */
+ if ( (sector != ~0LL)
+ && (priv_data->plus_geom != fs->geom)
+ && (sector
+ + fs->geom->start
+ - priv_data->plus_geom->start <= 2)
+ && (sector
+ + size / PED_SECTOR_SIZE_DEFAULT
+ + fs->geom->start
+ - priv_data->plus_geom->start > 2) )
+ hfsj_vh_replayed = 1;
+ if (!r) goto err_replay;
+ }
+ } while (blhdr->binfo[0].next);
+
+ jh->start = HFS_CPU_TO_64(start * PED_SECTOR_SIZE_DEFAULT, is_le);
+
+ free (blhdr);
+ return (ped_geometry_sync (fs->geom));
+
+err_replay:
+ free (blhdr);
+ return 0;
+}
+
+/* 0 => Failure, don't continue to open ! */
+/* 1 => Success, the journal has been completly replayed, or don't need to */
+int
+hfsj_replay_journal(PedFileSystem* fs)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ PedSector sector, length;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsJJournalInfoBlock* jib;
+ HfsJJournalHeader* jh;
+ int binsect;
+ uint32_t cksum;
+
+ binsect = PED_BE32_TO_CPU(priv_data->vh->block_size) / PED_SECTOR_SIZE_DEFAULT;
+ priv_data->jib_start_block =
+ PED_BE32_TO_CPU(priv_data->vh->journal_info_block);
+ sector = (PedSector) priv_data->jib_start_block * binsect;
+ if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1))
+ return 0;
+ jib = (HfsJJournalInfoBlock*) buf;
+
+ if ( (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_IN_FS))
+ && !(jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_OTHER_DEV)) ) {
+ priv_data->jl_start_block = HFS_64_TO_CPU(jib->offset, is_le)
+ / ( PED_SECTOR_SIZE_DEFAULT * binsect );
+ }
+
+ if (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_NEED_INIT))
+ return 1;
+
+ if ( !(jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_IN_FS))
+ || (jib->flags & PED_CPU_TO_BE32(1 << HFSJ_JOURN_OTHER_DEV)) ) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Journal stored outside of the volume are "
+ "not supported. Try to deactivate the "
+ "journal and run Parted again."));
+ return 0;
+ }
+
+ if ( (PED_BE64_TO_CPU(jib->offset) % PED_SECTOR_SIZE_DEFAULT)
+ || (PED_BE64_TO_CPU(jib->size) % PED_SECTOR_SIZE_DEFAULT) ) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Journal offset or size is not multiple of "
+ "the sector size."));
+ return 0;
+ }
+
+ sector = PED_BE64_TO_CPU(jib->offset) / PED_SECTOR_SIZE_DEFAULT;
+ length = PED_BE64_TO_CPU(jib->size) / PED_SECTOR_SIZE_DEFAULT;
+
+ jib = NULL;
+ if (!ped_geometry_read(priv_data->plus_geom, buf, sector, 1))
+ return 0;
+ jh = (HfsJJournalHeader*) buf;
+
+ if (jh->endian == PED_LE32_TO_CPU(HFSJ_ENDIAN_MAGIC))
+ is_le = 1;
+
+ if ( (jh->magic != HFS_32_TO_CPU(HFSJ_HEADER_MAGIC, is_le))
+ || (jh->endian != HFS_32_TO_CPU(HFSJ_ENDIAN_MAGIC, is_le)) ) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Incorrect magic values in the journal header."));
+ return 0;
+ }
+
+ if ( (HFS_64_TO_CPU(jh->size, is_le)%PED_SECTOR_SIZE_DEFAULT)
+ || (HFS_64_TO_CPU(jh->size, is_le)/PED_SECTOR_SIZE_DEFAULT
+ != (uint64_t)length) ) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Journal size mismatch between journal info block "
+ "and journal header."));
+ return 0;
+ }
+
+ if ( (HFS_64_TO_CPU(jh->start, is_le) % PED_SECTOR_SIZE_DEFAULT)
+ || (HFS_64_TO_CPU(jh->end, is_le) % PED_SECTOR_SIZE_DEFAULT)
+ || (HFS_32_TO_CPU(jh->blhdr_size, is_le) % PED_SECTOR_SIZE_DEFAULT)
+ || (HFS_32_TO_CPU(jh->jhdr_size, is_le) % PED_SECTOR_SIZE_DEFAULT) ) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Some header fields are not multiple of the sector "
+ "size."));
+ return 0;
+ }
+
+ if (HFS_32_TO_CPU(jh->jhdr_size, is_le) != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The sector size stored in the journal is not 512 "
+ "bytes. Parted only supports 512 bytes length "
+ "sectors."));
+ return 0;
+ }
+
+ cksum = HFS_32_TO_CPU(jh->checksum, is_le);
+ jh->checksum = 0;
+ if (cksum != hfsj_calc_checksum((uint8_t*)jh, sizeof(*jh))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Bad journal checksum."));
+ return 0;
+ }
+ jh->checksum = HFS_CPU_TO_32(cksum, is_le);
+
+ /* https://github.com/apple-opensource/hfs/blob/master/core/hfs_journal.c#L1167
+ * indicates that this is:
+ * wrap the start ptr if it points to the very end of the journal
+ */
+ if (jh->start == jh->size)
+ jh->start = HFS_CPU_TO_64(PED_SECTOR_SIZE_DEFAULT, is_le);
+ if (jh->end == jh->size)
+ jh->end = HFS_CPU_TO_64(PED_SECTOR_SIZE_DEFAULT, is_le);
+
+ if (jh->start == jh->end)
+ return 1;
+
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_CANCEL,
+ _("The journal is not empty. Parted must replay the "
+ "transactions before opening the file system. This will "
+ "modify the file system."))
+ != PED_EXCEPTION_FIX)
+ return 0;
+
+ while (jh->start != jh->end) {
+ /* Replay one complete transaction */
+ if (!hfsj_replay_transaction(fs, jh, sector, length))
+ return 0;
+
+ /* Recalculate cksum of the journal header */
+ jh->checksum = 0; /* need to be 0 while calculating the cksum */
+ cksum = hfsj_calc_checksum((uint8_t*)jh, sizeof(*jh));
+ jh->checksum = HFS_CPU_TO_32(cksum, is_le);
+
+ /* Update the Journal Header */
+ if (!ped_geometry_write(priv_data->plus_geom, buf, sector, 1)
+ || !ped_geometry_sync(priv_data->plus_geom))
+ return 0;
+ }
+
+ if (hfsj_vh_replayed) {
+ /* probe could have reported incorrect info ! */
+ /* is there a way to ask parted to quit ? */
+ ped_exception_throw(
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("The volume header or the master directory block has "
+ "changed while replaying the journal. You should "
+ "restart Parted."));
+ return 0;
+ }
+
+ return 1;
+}
+
+#endif /* DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/journal.h b/libparted/fs/r/hfs/journal.h
new file mode 100644
index 0000000..66eb2b1
--- /dev/null
+++ b/libparted/fs/r/hfs/journal.h
@@ -0,0 +1,45 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _JOURNAL_H
+#define _JOURNAL_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfsj_replay_journal(PedFileSystem* fs);
+
+int
+hfsj_update_jib(PedFileSystem* fs, uint32_t block);
+
+int
+hfsj_update_jl(PedFileSystem* fs, uint32_t block);
+
+#define HFS_16_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint16_t)PED_LE16_TO_CPU(x) : (uint16_t)PED_BE16_TO_CPU(x))
+#define HFS_32_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint32_t)PED_LE32_TO_CPU(x) : (uint32_t)PED_BE32_TO_CPU(x))
+#define HFS_64_TO_CPU(x, is_little_endian) ((is_little_endian) ? (uint64_t)PED_LE64_TO_CPU(x) : (uint64_t)PED_BE64_TO_CPU(x))
+#define HFS_CPU_TO_16(x, is_little_endian) ((is_little_endian) ? (uint16_t)PED_CPU_TO_LE16(x) : (uint16_t)PED_CPU_TO_BE16(x))
+#define HFS_CPU_TO_32(x, is_little_endian) ((is_little_endian) ? (uint32_t)PED_CPU_TO_LE32(x) : (uint32_t)PED_CPU_TO_BE32(x))
+#define HFS_CPU_TO_64(x, is_little_endian) ((is_little_endian) ? (uint64_t)PED_CPU_TO_LE64(x) : (uint64_t)PED_CPU_TO_BE64(x))
+
+#endif /* _JOURNAL_H */
diff --git a/libparted/fs/r/hfs/probe.c b/libparted/fs/r/hfs/probe.c
new file mode 100644
index 0000000..ee4ae31
--- /dev/null
+++ b/libparted/fs/r/hfs/probe.c
@@ -0,0 +1,99 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+
+#include "probe.h"
+
+int
+hfsc_can_use_geom (PedGeometry* geom)
+{
+ PedDevice* dev;
+
+ dev = geom->dev;
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Parted can't use HFS file systems on disks "
+ "with a sector size not equal to %d bytes."),
+ (int)PED_SECTOR_SIZE_DEFAULT );
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Probe an HFS volume, detecting it even if
+it is in fact a wrapper to an HFS+ volume */
+/* Used by hfsplus_probe and hfs_probe */
+PedGeometry*
+hfs_and_wrapper_probe (PedGeometry* geom)
+{
+ uint8_t buf[PED_SECTOR_SIZE_DEFAULT];
+ HfsMasterDirectoryBlock *mdb;
+ PedGeometry* geom_ret;
+ PedSector search, max;
+
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (hfsc_can_use_geom (geom));
+
+ mdb = (HfsMasterDirectoryBlock *) buf;
+
+ /* is 5 an intelligent value ? */
+ if ((geom->length < 5)
+ || (!ped_geometry_read (geom, buf, 2, 1))
+ || (mdb->signature != PED_CPU_TO_BE16 (HFS_SIGNATURE)) )
+ return NULL;
+
+ search = ((PedSector) PED_BE16_TO_CPU (mdb->start_block)
+ + ((PedSector) PED_BE16_TO_CPU (mdb->total_blocks)
+ * (PED_BE32_TO_CPU (mdb->block_size) / PED_SECTOR_SIZE_DEFAULT )));
+ max = search + (PED_BE32_TO_CPU (mdb->block_size) / PED_SECTOR_SIZE_DEFAULT);
+ if (!(geom_ret = ped_geometry_new (geom->dev, geom->start, search + 2)))
+ return NULL;
+
+ for (; search < max; search++) {
+ if (!ped_geometry_set (geom_ret, geom_ret->start, search + 2)
+ || !ped_geometry_read (geom_ret, buf, search, 1))
+ break;
+ if (mdb->signature == PED_CPU_TO_BE16 (HFS_SIGNATURE))
+ return geom_ret;
+ }
+
+ ped_geometry_destroy (geom_ret);
+ return NULL;
+}
diff --git a/libparted/fs/r/hfs/probe.h b/libparted/fs/r/hfs/probe.h
new file mode 100644
index 0000000..21be916
--- /dev/null
+++ b/libparted/fs/r/hfs/probe.h
@@ -0,0 +1,35 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _PROBE_H
+#define _PROBE_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfsc_can_use_geom (PedGeometry* geom);
+
+PedGeometry*
+hfs_and_wrapper_probe (PedGeometry* geom);
+
+#endif /* _PROBE_H */
diff --git a/libparted/fs/r/hfs/reloc.c b/libparted/fs/r/hfs/reloc.c
new file mode 100644
index 0000000..05ec76a
--- /dev/null
+++ b/libparted/fs/r/hfs/reloc.c
@@ -0,0 +1,676 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "file.h"
+#include "advfs.h"
+#include "cache.h"
+
+#include "reloc.h"
+
+/* This function moves data of size blocks starting
+ at block *ptr_fblock to block *ptr_to_fblock */
+/* return new start or -1 on failure */
+static int
+hfs_effect_move_extent (PedFileSystem *fs, unsigned int *ptr_fblock,
+ unsigned int *ptr_to_fblock, unsigned int size)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ unsigned int i, ok = 0;
+ unsigned int next_to_fblock;
+ unsigned int start, stop;
+
+ PED_ASSERT (hfs_block != NULL);
+ PED_ASSERT (*ptr_to_fblock <= *ptr_fblock);
+ /* quiet gcc */
+ start = stop = 0;
+
+/*
+ Try to fit the extent AT or _BEFORE_ the wanted place,
+ or then in the gap between dest and source.
+ If failed try to fit the extent after source, for 2 pass relocation
+ The extent is always copied in a non overlapping way
+*/
+
+ /* Backward search */
+ /* 1 pass relocation AT or BEFORE *ptr_to_fblock */
+ if (*ptr_to_fblock != *ptr_fblock) {
+ start = stop = *ptr_fblock < *ptr_to_fblock+size ?
+ *ptr_fblock : *ptr_to_fblock+size;
+ while (start && stop-start != size) {
+ --start;
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,start))
+ stop = start;
+ }
+ ok = (stop-start == size);
+ }
+
+ /* Forward search */
+ /* 1 pass relocation in the gap merged with 2 pass reloc after source */
+ if (!ok && *ptr_to_fblock != *ptr_fblock) {
+ start = stop = *ptr_to_fblock+1;
+ while (stop < PED_BE16_TO_CPU(priv_data->mdb->total_blocks)
+ && stop-start != size) {
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,stop))
+ start = stop + 1;
+ ++stop;
+ }
+ ok = (stop-start == size);
+ }
+
+ /* new non overlapping room has been found ? */
+ if (ok) {
+ /* enough room */
+ unsigned int j;
+ unsigned int start_block =
+ PED_BE16_TO_CPU (priv_data->mdb->start_block );
+ unsigned int block_sz =
+ (PED_BE32_TO_CPU (priv_data->mdb->block_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+
+ if (stop > *ptr_to_fblock && stop <= *ptr_fblock)
+ /* Fit in the gap */
+ next_to_fblock = stop;
+ else
+ /* Before or after the gap */
+ next_to_fblock = *ptr_to_fblock;
+
+ /* move blocks */
+ for (i = 0; i < size; /*i+=j*/) {
+ PedSector abs_sector;
+ unsigned int ai;
+
+ j = size - i; j = (j < hfs_block_count) ?
+ j : hfs_block_count ;
+
+ abs_sector = start_block
+ + (PedSector) (*ptr_fblock + i) * block_sz;
+ if (!ped_geometry_read (fs->geom, hfs_block, abs_sector,
+ block_sz * j))
+ return -1;
+
+ abs_sector = start_block
+ + (PedSector) (start + i) * block_sz;
+ if (!ped_geometry_write (fs->geom,hfs_block,abs_sector,
+ block_sz * j))
+ return -1;
+
+ for (ai = i+j; i < ai; i++) {
+ /* free source block */
+ CLR_BLOC_OCCUPATION(priv_data->alloc_map,
+ *ptr_fblock + i);
+
+ /* set dest block */
+ SET_BLOC_OCCUPATION(priv_data->alloc_map,
+ start + i);
+ }
+ }
+ if (!ped_geometry_sync_fast (fs->geom))
+ return -1;
+
+ *ptr_fblock += size;
+ *ptr_to_fblock = next_to_fblock;
+ } else {
+ if (*ptr_fblock != *ptr_to_fblock)
+ /* not enough room, but try to continue */
+ ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("An extent has not been relocated."));
+ start = *ptr_fblock;
+ *ptr_fblock = *ptr_to_fblock = start + size;
+ }
+
+ return start;
+}
+
+/* Update MDB */
+/* Return 0 if an error occurred */
+/* Return 1 if everything ok */
+int
+hfs_update_mdb (PedFileSystem *fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+
+ if (!ped_geometry_read (fs->geom, node, 2, 1))
+ return 0;
+ memcpy (node, priv_data->mdb, sizeof (HfsMasterDirectoryBlock));
+ if ( !ped_geometry_write (fs->geom, node, 2, 1)
+ || !ped_geometry_write (fs->geom, node, fs->geom->length - 2, 1)
+ || !ped_geometry_sync_fast (fs->geom))
+ return 0;
+ return 1;
+}
+
+/* Generic relocator */
+/* replace previous hfs_do_move_* */
+static int
+hfs_do_move (PedFileSystem* fs, unsigned int *ptr_src,
+ unsigned int *ptr_dest, HfsCPrivateCache* cache,
+ HfsCPrivateExtent* ref)
+{
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsPrivateFile* file;
+ HfsExtDescriptor* extent;
+ HfsCPrivateExtent* move;
+ int new_start;
+
+ new_start = hfs_effect_move_extent (fs, ptr_src, ptr_dest,
+ ref->ext_length);
+ if (new_start == -1) return -1;
+
+ if (ref->ext_start != (unsigned) new_start) {
+ /* Load, modify & save */
+ switch (ref->where) {
+ /******** MDB *********/
+ case CR_PRIM_CAT :
+ priv_data->catalog_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE16(new_start);
+ goto CR_PRIM;
+ case CR_PRIM_EXT :
+ priv_data->extent_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE16(new_start);
+ CR_PRIM :
+ extent = ( HfsExtDescriptor* )
+ ( (uint8_t*)priv_data->mdb + ref->ref_offset );
+ extent[ref->ref_index].start_block =
+ PED_CPU_TO_BE16(new_start);
+ if (!hfs_update_mdb(fs)) return -1;
+ break;
+
+ /********* BTREE *******/
+ case CR_BTREE_EXT_CAT :
+ if (priv_data->catalog_file
+ ->cache[ref->ref_index].start_block
+ == PED_CPU_TO_BE16(ref->ext_start))
+ priv_data->catalog_file
+ ->cache[ref->ref_index].start_block =
+ PED_CPU_TO_BE16(new_start);
+ /* FALLTHROUGH */
+ case CR_BTREE_EXT_0 :
+ file = priv_data->extent_file;
+ goto CR_BTREE;
+ case CR_BTREE_CAT :
+ file = priv_data->catalog_file;
+ CR_BTREE:
+ PED_ASSERT(ref->sect_by_block == 1
+ && ref->ref_offset < PED_SECTOR_SIZE_DEFAULT);
+ if (!hfs_file_read_sector(file, node, ref->ref_block))
+ return -1;
+ extent = ( HfsExtDescriptor* ) (node + ref->ref_offset);
+ extent[ref->ref_index].start_block =
+ PED_CPU_TO_BE16(new_start);
+ if (!hfs_file_write_sector(file, node, ref->ref_block)
+ || !ped_geometry_sync_fast (fs->geom))
+ return -1;
+ break;
+
+ /********** BUG ********/
+ default :
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("A reference to an extent comes from a place "
+ "it should not. You should check the file "
+ "system!"));
+ return -1;
+ break;
+ }
+
+ /* Update the cache */
+ move = hfsc_cache_move_extent(cache, ref->ext_start, new_start);
+ if (!move) return -1; /* "cleanly" fail */
+ PED_ASSERT(move == ref); /* generate a bug */
+ }
+
+ return new_start;
+}
+
+/* 0 error, 1 ok */
+static int
+hfs_save_allocation(PedFileSystem* fs)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ unsigned int map_sectors;
+
+ map_sectors = ( PED_BE16_TO_CPU (priv_data->mdb->total_blocks)
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1 )
+ / (PED_SECTOR_SIZE_DEFAULT * 8);
+ return ( ped_geometry_write (fs->geom, priv_data->alloc_map,
+ PED_BE16_TO_CPU (priv_data->mdb->volume_bitmap_block),
+ map_sectors) );
+}
+
+/* This function moves an extent starting at block fblock to block to_fblock
+ if there's enough room */
+/* Return 1 if everything was fine */
+/* Return -1 if an error occurred */
+/* Return 0 if no extent was found */
+/* Generic search thanks to the file system cache */
+static int
+hfs_move_extent_starting_at (PedFileSystem *fs, unsigned int *ptr_fblock,
+ unsigned int *ptr_to_fblock,
+ HfsCPrivateCache* cache)
+{
+ HfsCPrivateExtent* ref;
+ unsigned int old_start, new_start;
+
+ /* Reference search powered by the cache... */
+ /* This is the optimisation secret :) */
+ ref = hfsc_cache_search_extent(cache, *ptr_fblock);
+ if (!ref) return 0; /* not found */
+
+ old_start = *ptr_fblock;
+ new_start = hfs_do_move(fs, ptr_fblock, ptr_to_fblock, cache, ref);
+ if (new_start == (unsigned int) -1) return -1;
+ if (new_start > old_start) { /* detect 2 pass reloc */
+ new_start = hfs_do_move(fs,&new_start,ptr_to_fblock,cache,ref);
+ if (new_start == (unsigned int) -1 || new_start > old_start)
+ return -1;
+ }
+
+ /* allocation bitmap save is not atomic with data relocation */
+ /* so we only do it a few times, and without syncing */
+ /* The unmounted bit protect us anyway */
+ hfs_save_allocation(fs);
+ return 1;
+}
+
+static int
+hfs_cache_from_mdb(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsExtDescriptor* extent;
+ unsigned int j;
+
+ extent = priv_data->mdb->extents_file_rec;
+ for (j = 0; j < HFS_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE16_TO_CPU(extent[j].start_block),
+ PED_BE16_TO_CPU(extent[j].block_count),
+ 0, /* unused for mdb */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->mdb),
+ 1, /* load/save only 1 sector */
+ CR_PRIM_EXT,
+ j )
+ )
+ return 0;
+ }
+
+ extent = priv_data->mdb->catalog_file_rec;
+ for (j = 0; j < HFS_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE16_TO_CPU(extent[j].start_block),
+ PED_BE16_TO_CPU(extent[j].block_count),
+ 0,
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->mdb),
+ 1,
+ CR_PRIM_CAT,
+ j )
+ )
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+hfs_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+ HfsHeaderRecord* header;
+ HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node;
+ HfsCatalogKey* catalog_key;
+ HfsCatalog* catalog_data;
+ HfsExtDescriptor* extent;
+ unsigned int leaf_node, record_number;
+ unsigned int i, j;
+ uint16_t catalog_pos;
+
+ if (!priv_data->catalog_file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This HFS volume has no catalog file. "
+ "This is very unusual!"));
+ return 1;
+ }
+
+ if (!hfs_file_read_sector (priv_data->catalog_file, node, 0))
+ return 0;
+ uint16_t offset;
+ memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t));
+ header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset));
+
+ for (leaf_node = PED_BE32_TO_CPU (header->first_leaf_node);
+ leaf_node;
+ leaf_node = PED_BE32_TO_CPU (desc->next)) {
+ if (!hfs_file_read_sector (priv_data->catalog_file,
+ node, leaf_node))
+ return 0;
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = 1; i <= record_number; ++i) {
+ /* undocumented alignement */
+ uint16_t value;
+ memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t));
+ catalog_pos = PED_BE16_TO_CPU(value);
+ catalog_key = (HfsCatalogKey*) (node + catalog_pos);
+ unsigned int skip;
+ skip = (1 + catalog_key->key_length + 1) & ~1;
+ catalog_data = (HfsCatalog*)(node+catalog_pos+skip);
+ /* check for obvious error in FS */
+ if ((catalog_pos < HFS_FIRST_REC)
+ || ((uint8_t*)catalog_data - node
+ >= PED_SECTOR_SIZE_DEFAULT
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ return 0;
+ }
+
+ if (catalog_data->type != HFS_CAT_FILE) continue;
+
+ extent = catalog_data->sel.file.extents_data;
+ for (j = 0; j < HFS_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE16_TO_CPU(extent[j].start_block),
+ PED_BE16_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ 1, /* hfs => btree block = 512 b */
+ CR_BTREE_CAT,
+ j )
+ )
+ return 0;
+ }
+
+ extent = catalog_data->sel.file.extents_res;
+ for (j = 0; j < HFS_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE16_TO_CPU(extent[j].start_block),
+ PED_BE16_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ 1, /* hfs => btree block = 512 b */
+ CR_BTREE_CAT,
+ j )
+ )
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+static int
+hfs_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+ HfsHeaderRecord* header;
+ HfsNodeDescriptor* desc = (HfsNodeDescriptor*) node;
+ HfsExtentKey* extent_key;
+ HfsExtDescriptor* extent;
+ unsigned int leaf_node, record_number;
+ unsigned int i, j;
+ uint16_t extent_pos;
+
+ if (!priv_data->extent_file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This HFS volume has no extents overflow "
+ "file. This is quite unusual!"));
+ return 1;
+ }
+
+ if (!hfs_file_read_sector (priv_data->extent_file, node, 0))
+ return 0;
+ uint16_t offset;
+ memcpy(&offset, node+(PED_SECTOR_SIZE_DEFAULT-2), sizeof(uint16_t));
+ header = (HfsHeaderRecord*) (node + PED_BE16_TO_CPU(offset));
+
+ for (leaf_node = PED_BE32_TO_CPU (header->first_leaf_node);
+ leaf_node;
+ leaf_node = PED_BE32_TO_CPU (desc->next)) {
+ if (!hfs_file_read_sector (priv_data->extent_file, node,
+ leaf_node))
+ return 0;
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = 1; i <= record_number; i++) {
+ uint8_t where;
+ uint16_t value;
+ memcpy(&value, node+(PED_SECTOR_SIZE_DEFAULT - (2*i)), sizeof(uint16_t));
+ extent_pos = PED_BE16_TO_CPU(value);
+ extent_key = (HfsExtentKey*)(node + extent_pos);
+ /* size is cst */
+ extent = (HfsExtDescriptor*)(node+extent_pos+sizeof(HfsExtentKey));
+ /* check for obvious error in FS */
+ if ((extent_pos < HFS_FIRST_REC)
+ || ((uint8_t*)extent - node
+ >= PED_SECTOR_SIZE_DEFAULT
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ return 0;
+ }
+
+ switch (extent_key->file_ID) {
+ case PED_CPU_TO_BE32 (HFS_XTENT_ID) :
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The extents overflow file should not"
+ " contain its own extents! You "
+ "should check the file system."))
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ where = CR_BTREE_EXT_EXT;
+ break;
+ case PED_CPU_TO_BE32 (HFS_CATALOG_ID) :
+ where = CR_BTREE_EXT_CAT;
+ break;
+ default :
+ where = CR_BTREE_EXT_0;
+ break;
+ }
+
+ for (j = 0; j < HFS_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE16_TO_CPU(extent[j].start_block),
+ PED_BE16_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ 1, /* hfs => btree block = 512 b */
+ where,
+ j )
+ )
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+}
+
+/* This function cache every extents start and length stored in any
+ fs structure into the adt defined in cache.[ch]
+ Returns NULL on failure */
+static HfsCPrivateCache*
+hfs_cache_extents(PedFileSystem *fs, PedTimer* timer)
+{
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsCPrivateCache* ret;
+ unsigned int file_number, block_number;
+
+ file_number = PED_BE32_TO_CPU(priv_data->mdb->file_count);
+ block_number = PED_BE16_TO_CPU(priv_data->mdb->total_blocks);
+ ret = hfsc_new_cache(block_number, file_number);
+ if (!ret) return NULL;
+
+ if (!hfs_cache_from_mdb(ret, fs, timer) ||
+ !hfs_cache_from_catalog(ret, fs, timer) ||
+ !hfs_cache_from_extent(ret, fs, timer)) {
+ ped_exception_throw(
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not cache the file system in memory."));
+ hfsc_delete_cache(ret);
+ return NULL;
+ }
+
+ return ret;
+}
+
+/* This function moves file's data to compact used and free space,
+ starting at fblock block */
+/* return 0 on error */
+int
+hfs_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock,
+ PedTimer* timer, unsigned int to_free)
+{
+ PedSector bytes_buff;
+ HfsPrivateFSData* priv_data = (HfsPrivateFSData*)
+ fs->type_specific;
+ HfsMasterDirectoryBlock* mdb = priv_data->mdb;
+ HfsCPrivateCache* cache;
+ unsigned int to_fblock = fblock;
+ unsigned int start = fblock;
+ unsigned int divisor = PED_BE16_TO_CPU (mdb->total_blocks)
+ + 1 - start - to_free;
+ int ret;
+
+ PED_ASSERT (!hfs_block);
+
+ cache = hfs_cache_extents (fs, timer);
+ if (!cache)
+ return 0;
+
+ /* Calculate the size of the copy buffer :
+ * Takes BLOCK_MAX_BUFF HFS blocks, but if > BYTES_MAX_BUFF
+ * takes the maximum number of HFS blocks so that the buffer
+ * will remain smaller than or equal to BYTES_MAX_BUFF, with
+ * a minimum of 1 HFS block */
+ bytes_buff = PED_BE32_TO_CPU (priv_data->mdb->block_size)
+ * (PedSector) BLOCK_MAX_BUFF;
+ if (bytes_buff > BYTES_MAX_BUFF) {
+ hfs_block_count = BYTES_MAX_BUFF
+ / PED_BE32_TO_CPU (priv_data->mdb->block_size);
+ if (!hfs_block_count)
+ hfs_block_count = 1;
+ bytes_buff = (PedSector) hfs_block_count
+ * PED_BE32_TO_CPU (priv_data->mdb->block_size);
+ } else
+ hfs_block_count = BLOCK_MAX_BUFF;
+
+ /* If the cache code requests more space, give it to him */
+ if (bytes_buff < hfsc_cache_needed_buffer (cache))
+ bytes_buff = hfsc_cache_needed_buffer (cache);
+
+ hfs_block = (uint8_t*) ped_malloc (bytes_buff);
+ if (!hfs_block)
+ goto error_cache;
+
+ if (!hfs_read_bad_blocks (fs)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Bad blocks list could not be loaded."));
+ goto error_alloc;
+ }
+
+ while (fblock < PED_BE16_TO_CPU (mdb->total_blocks)) {
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,fblock)
+ && (!hfs_is_bad_block (fs, fblock))) {
+ if (!(ret = hfs_move_extent_starting_at (fs, &fblock,
+ &to_fblock, cache)))
+ to_fblock = ++fblock;
+ else if (ret == -1) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("An error occurred during extent "
+ "relocation."));
+ goto error_alloc;
+ }
+ } else {
+ fblock++;
+ }
+
+ ped_timer_update(timer, (float)(to_fblock - start)/divisor);
+ }
+
+ free (hfs_block); hfs_block = NULL; hfs_block_count = 0;
+ hfsc_delete_cache (cache);
+ return 1;
+
+error_alloc:
+ free (hfs_block); hfs_block = NULL; hfs_block_count = 0;
+error_cache:
+ hfsc_delete_cache (cache);
+ return 0;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/reloc.h b/libparted/fs/r/hfs/reloc.h
new file mode 100644
index 0000000..d8b1e6d
--- /dev/null
+++ b/libparted/fs/r/hfs/reloc.h
@@ -0,0 +1,36 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _RELOC_H
+#define _RELOC_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfs_update_mdb (PedFileSystem *fs);
+
+int
+hfs_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock,
+ PedTimer* timer, unsigned int to_free);
+
+#endif /* _RELOC_H */
diff --git a/libparted/fs/r/hfs/reloc_plus.c b/libparted/fs/r/hfs/reloc_plus.c
new file mode 100644
index 0000000..904929c
--- /dev/null
+++ b/libparted/fs/r/hfs/reloc_plus.c
@@ -0,0 +1,948 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004-2005, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef DISCOVER_ONLY
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+#include <stdint.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "hfs.h"
+#include "file_plus.h"
+#include "advfs_plus.h"
+#include "cache.h"
+#include "journal.h"
+
+#include "reloc_plus.h"
+
+/* This function moves data of size blocks starting at block *ptr_fblock
+ to block *ptr_to_fblock */
+/* return new start or -1 on failure */
+/* -1 is ok because there can only be 2^32-1 blocks, so the max possible
+ last one is 2^32-2 (and anyway it contains Alternate VH), so
+ -1 (== 2^32-1[2^32]) never represent a valid block */
+static int
+hfsplus_effect_move_extent (PedFileSystem *fs, unsigned int *ptr_fblock,
+ unsigned int *ptr_to_fblock, unsigned int size)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ unsigned int i, ok = 0;
+ unsigned int next_to_fblock;
+ unsigned int start, stop;
+
+ PED_ASSERT (hfsp_block != NULL);
+ PED_ASSERT (*ptr_to_fblock <= *ptr_fblock);
+ /* quiet GCC */
+ start = stop = 0;
+
+/*
+ Try to fit the extent AT or _BEFORE_ the wanted place,
+ or then in the gap between dest and source.
+ If failed try to fit the extent after source, for 2 pass relocation
+ The extent is always copied in a non overlapping way
+*/
+
+ /* Backward search */
+ /* 1 pass relocation AT or BEFORE *ptr_to_fblock */
+ if (*ptr_to_fblock != *ptr_fblock) {
+ start = stop = *ptr_fblock < *ptr_to_fblock+size ?
+ *ptr_fblock : *ptr_to_fblock+size;
+ while (start && stop-start != size) {
+ --start;
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,start))
+ stop = start;
+ }
+ ok = (stop-start == size);
+ }
+
+ /* Forward search */
+ /* 1 pass relocation in the gap merged with 2 pass reloc after source */
+ if (!ok && *ptr_to_fblock != *ptr_fblock) {
+ start = stop = *ptr_to_fblock+1;
+ while (stop < PED_BE32_TO_CPU(priv_data->vh->total_blocks)
+ && stop-start != size) {
+ if (TST_BLOC_OCCUPATION(priv_data->alloc_map,stop))
+ start = stop + 1;
+ ++stop;
+ }
+ ok = (stop-start == size);
+ }
+
+ /* new non overlapping room has been found ? */
+ if (ok) {
+ /* enough room */
+ PedSector abs_sector;
+ unsigned int ai, j, block;
+ unsigned int block_sz = (PED_BE32_TO_CPU (
+ priv_data->vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT);
+
+ if (stop > *ptr_to_fblock && stop <= *ptr_fblock)
+ /* Fit in the gap */
+ next_to_fblock = stop;
+ else
+ /* Before or after the gap */
+ next_to_fblock = *ptr_to_fblock;
+
+ /* move blocks */
+ for (i = 0; i < size; /*i++*/) {
+ j = size - i; j = (j < hfsp_block_count) ?
+ j : hfsp_block_count ;
+
+ abs_sector = (PedSector) (*ptr_fblock + i) * block_sz;
+ if (!ped_geometry_read (priv_data->plus_geom,
+ hfsp_block, abs_sector,
+ block_sz * j))
+ return -1;
+
+ abs_sector = (PedSector) (start + i) * block_sz;
+ if (!ped_geometry_write (priv_data->plus_geom,
+ hfsp_block, abs_sector,
+ block_sz * j))
+ return -1;
+
+ for (ai = i+j; i < ai; i++) {
+ /* free source block */
+ block = *ptr_fblock + i;
+ CLR_BLOC_OCCUPATION(priv_data->alloc_map,block);
+ SET_BLOC_OCCUPATION(priv_data->dirty_alloc_map,
+ block/(PED_SECTOR_SIZE_DEFAULT*8));
+
+ /* set dest block */
+ block = start + i;
+ SET_BLOC_OCCUPATION(priv_data->alloc_map,block);
+ SET_BLOC_OCCUPATION(priv_data->dirty_alloc_map,
+ block/(PED_SECTOR_SIZE_DEFAULT*8));
+ }
+ }
+ if (!ped_geometry_sync_fast (priv_data->plus_geom))
+ return -1;
+
+ *ptr_fblock += size;
+ *ptr_to_fblock = next_to_fblock;
+ } else {
+ if (*ptr_fblock != *ptr_to_fblock)
+ /* not enough room */
+ ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("An extent has not been relocated."));
+ start = *ptr_fblock;
+ *ptr_fblock = *ptr_to_fblock = start + size;
+ }
+
+ return start;
+}
+
+/* Returns 0 on error */
+/* 1 on succes */
+int
+hfsplus_update_vh (PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ uint8_t node[PED_SECTOR_SIZE_DEFAULT];
+
+ if (!ped_geometry_read (priv_data->plus_geom, node, 2, 1))
+ return 0;
+ memcpy (node, priv_data->vh, sizeof (HfsPVolumeHeader));
+ if (!ped_geometry_write (priv_data->plus_geom, node, 2, 1)
+ || !ped_geometry_write (priv_data->plus_geom, node,
+ priv_data->plus_geom->length - 2, 1)
+ || !ped_geometry_sync_fast (priv_data->plus_geom))
+ return 0;
+ return 1;
+}
+
+static int
+hfsplus_do_move (PedFileSystem* fs, unsigned int *ptr_src,
+ unsigned int *ptr_dest, HfsCPrivateCache* cache,
+ HfsCPrivateExtent* ref)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPPrivateFile* file;
+ HfsPExtDescriptor* extent;
+ HfsCPrivateExtent* move;
+ int new_start;
+
+ new_start = hfsplus_effect_move_extent (fs, ptr_src, ptr_dest,
+ ref->ext_length);
+
+ if (new_start == -1) return -1;
+
+ if (ref->ext_start != (unsigned) new_start) {
+ switch (ref->where) {
+ /************ VH ************/
+ case CR_PRIM_CAT :
+ priv_data->catalog_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_PRIM;
+ case CR_PRIM_EXT :
+ priv_data->extents_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_PRIM;
+ case CR_PRIM_ATTR :
+ priv_data->attributes_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_PRIM;
+ case CR_PRIM_ALLOC :
+ priv_data->allocation_file
+ ->first[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_PRIM;
+ case CR_PRIM_START :
+ /* No startup file opened */
+ CR_PRIM :
+ extent = ( HfsPExtDescriptor* )
+ ( (uint8_t*)priv_data->vh + ref->ref_offset );
+ extent[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ if (!hfsplus_update_vh(fs))
+ return -1;
+ break;
+
+ /************** BTREE *************/
+ case CR_BTREE_CAT_JIB :
+ if (!hfsj_update_jib(fs, new_start))
+ return -1;
+ goto BTREE_CAT;
+
+ case CR_BTREE_CAT_JL :
+ if (!hfsj_update_jl(fs, new_start))
+ return -1;
+ goto BTREE_CAT;
+
+ BTREE_CAT:
+ case CR_BTREE_CAT :
+ file = priv_data->catalog_file;
+ goto CR_BTREE;
+
+ case CR_BTREE_ATTR :
+ file = priv_data->attributes_file;
+ goto CR_BTREE;
+
+ case CR_BTREE_EXT_ATTR :
+ if (priv_data->attributes_file
+ ->cache[ref->ref_index].start_block
+ == PED_CPU_TO_BE32(ref->ext_start))
+ priv_data->attributes_file
+ ->cache[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_BTREE_EXT;
+ case CR_BTREE_EXT_CAT :
+ if (priv_data->catalog_file
+ ->cache[ref->ref_index].start_block
+ == PED_CPU_TO_BE32(ref->ext_start))
+ priv_data->catalog_file
+ ->cache[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_BTREE_EXT;
+ case CR_BTREE_EXT_ALLOC :
+ if (priv_data->allocation_file
+ ->cache[ref->ref_index].start_block
+ == PED_CPU_TO_BE32(ref->ext_start))
+ priv_data->allocation_file
+ ->cache[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ goto CR_BTREE_EXT;
+ case CR_BTREE_EXT_START :
+ /* No startup file opened */
+ CR_BTREE_EXT :
+ case CR_BTREE_EXT_0 :
+ file = priv_data->extents_file;
+
+ CR_BTREE :
+ PED_ASSERT(PED_SECTOR_SIZE_DEFAULT * ref->sect_by_block
+ > ref->ref_offset);
+ if (!hfsplus_file_read(file, hfsp_block,
+ (PedSector)ref->ref_block * ref->sect_by_block,
+ ref->sect_by_block))
+ return -1;
+ extent = ( HfsPExtDescriptor* )
+ ( hfsp_block + ref->ref_offset );
+ extent[ref->ref_index].start_block =
+ PED_CPU_TO_BE32(new_start);
+ if (!hfsplus_file_write(file, hfsp_block,
+ (PedSector)ref->ref_block * ref->sect_by_block,
+ ref->sect_by_block)
+ || !ped_geometry_sync_fast (priv_data->plus_geom))
+ return -1;
+ break;
+
+ /********** BUG *********/
+ default :
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("A reference to an extent comes from a place "
+ "it should not. You should check the file "
+ "system!"));
+ return -1;
+ break;
+ }
+
+ move = hfsc_cache_move_extent(cache, ref->ext_start, new_start);
+ if (!move) return -1;
+ PED_ASSERT(move == ref);
+ }
+
+ return new_start;
+}
+
+/* save any dirty sector of the allocation bitmap file */
+static int
+hfsplus_save_allocation(PedFileSystem *fs)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ unsigned int map_sectors, i, j;
+ int ret = 1;
+
+ map_sectors = ( PED_BE32_TO_CPU (priv_data->vh->total_blocks)
+ + PED_SECTOR_SIZE_DEFAULT * 8 - 1 ) / (PED_SECTOR_SIZE_DEFAULT * 8);
+
+ for (i = 0; i < map_sectors;) {
+ for (j = i;
+ (TST_BLOC_OCCUPATION(priv_data->dirty_alloc_map,j));
+ ++j)
+ CLR_BLOC_OCCUPATION(priv_data->dirty_alloc_map,j);
+ if (j-i) {
+ ret = hfsplus_file_write(priv_data->allocation_file,
+ priv_data->alloc_map + i * PED_SECTOR_SIZE_DEFAULT,
+ i, j-i) && ret;
+ i = j;
+ } else
+ ++i;
+ }
+
+ return ret;
+}
+
+/* This function moves an extent starting at block fblock
+ to block to_fblock if there's enough room */
+/* Return 1 if everything was fine */
+/* Return -1 if an error occurred */
+/* Return 0 if no extent was found */
+static int
+hfsplus_move_extent_starting_at (PedFileSystem *fs, unsigned int *ptr_fblock,
+ unsigned int *ptr_to_fblock,
+ HfsCPrivateCache* cache)
+{
+ HfsCPrivateExtent* ref;
+ unsigned int old_start, new_start;
+
+ ref = hfsc_cache_search_extent(cache, *ptr_fblock);
+ if (!ref) return 0;
+
+ old_start = *ptr_fblock;
+ new_start = hfsplus_do_move(fs, ptr_fblock, ptr_to_fblock, cache, ref);
+ if (new_start == (unsigned)-1) return -1;
+ if (new_start > old_start) {
+ new_start = hfsplus_do_move(fs, &new_start, ptr_to_fblock,
+ cache, ref);
+ if (new_start == (unsigned)-1 || new_start > old_start)
+ return -1;
+ }
+
+ hfsplus_save_allocation(fs);
+ return 1;
+}
+
+static int
+hfsplus_cache_from_vh(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPExtDescriptor* extent;
+ unsigned int j;
+
+ extent = priv_data->vh->allocation_file.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ 0, /* unused for vh */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->vh),
+ 1, /* load / save 1 sector */
+ CR_PRIM_ALLOC,
+ j )
+ )
+ return 0;
+ }
+
+ extent = priv_data->vh->extents_file.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ 0, /* unused for vh */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->vh),
+ 1, /* load / save 1 sector */
+ CR_PRIM_EXT,
+ j )
+ )
+ return 0;
+ }
+
+ extent = priv_data->vh->catalog_file.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ 0, /* unused for vh */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->vh),
+ 1, /* load / save 1 sector */
+ CR_PRIM_CAT,
+ j )
+ )
+ return 0;
+ }
+
+ extent = priv_data->vh->attributes_file.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ 0, /* unused for vh */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->vh),
+ 1, /* load / save 1 sector */
+ CR_PRIM_ATTR,
+ j )
+ )
+ return 0;
+ }
+
+ extent = priv_data->vh->startup_file.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ 0, /* unused for vh */
+ ((uint8_t*)extent) - ((uint8_t*)priv_data->vh),
+ 1, /* load / save 1 sector */
+ CR_PRIM_START,
+ j )
+ )
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+hfsplus_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ uint8_t node_1[PED_SECTOR_SIZE_DEFAULT];
+ uint8_t* node;
+ HfsPHeaderRecord* header;
+ HfsPCatalogKey* catalog_key;
+ HfsPCatalog* catalog_data;
+ HfsPExtDescriptor* extent;
+ unsigned int leaf_node, record_number;
+ unsigned int i, j, size, bsize;
+ uint32_t jib = priv_data->jib_start_block,
+ jl = priv_data->jl_start_block;
+ uint16_t catalog_pos;
+
+ if (!priv_data->catalog_file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This HFS+ volume has no catalog file. "
+ "This is very unusual!"));
+ return 1;
+ }
+
+ /* Search the extent starting at *ptr_block in the catalog file */
+ if (!hfsplus_file_read_sector (priv_data->catalog_file, node_1, 0))
+ return 0;
+ header = (HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC);
+ leaf_node = PED_BE32_TO_CPU (header->first_leaf_node);
+ bsize = PED_BE16_TO_CPU (header->node_size);
+ size = bsize / PED_SECTOR_SIZE_DEFAULT;
+ PED_ASSERT(size < 256);
+
+ node = (uint8_t*) ped_malloc(bsize);
+ if (!node) return 0;
+ HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node;
+
+ for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) {
+ if (!hfsplus_file_read (priv_data->catalog_file, node,
+ (PedSector) leaf_node * size, size)) {
+ free (node);
+ return 0;
+ }
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = 1; i <= record_number; i++) {
+ unsigned int skip;
+ uint8_t where;
+
+ uint16_t value;
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
+ catalog_pos = PED_BE16_TO_CPU(value);
+ catalog_key = (HfsPCatalogKey*)(node + catalog_pos);
+ skip = ( 2 + PED_BE16_TO_CPU (catalog_key->key_length)
+ + 1) & ~1;
+ catalog_data = (HfsPCatalog*)
+ (((uint8_t*)catalog_key) + skip);
+ /* check for obvious error in FS */
+ if ((catalog_pos < HFS_FIRST_REC)
+ || ((uint8_t*)catalog_data - node
+ >= (signed) bsize
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ free (node);
+ return 0;
+ }
+
+ if (PED_BE16_TO_CPU(catalog_data->type)!=HFS_CAT_FILE)
+ continue;
+
+ extent = catalog_data->sel.file.data_fork.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ where = CR_BTREE_CAT;
+ if ( PED_BE32_TO_CPU(extent[j].start_block)
+ == jib ) {
+ jib = 0;
+ where = CR_BTREE_CAT_JIB;
+ } else
+ if ( PED_BE32_TO_CPU(extent[j].start_block)
+ == jl ) {
+ jl = 0;
+ where = CR_BTREE_CAT_JL;
+ }
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ size,
+ where,
+ j )
+ ) {
+ free (node);
+ return 0;
+ }
+ }
+
+ extent = catalog_data->sel.file.res_fork.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ size,
+ CR_BTREE_CAT,
+ j )
+ ) {
+ free (node);
+ return 0;
+ }
+ }
+ }
+ }
+
+ free (node);
+ return 1;
+}
+
+static int
+hfsplus_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ uint8_t node_1[PED_SECTOR_SIZE_DEFAULT];
+ uint8_t* node;
+ HfsPHeaderRecord* header;
+ HfsPExtentKey* extent_key;
+ HfsPExtDescriptor* extent;
+ unsigned int leaf_node, record_number;
+ unsigned int i, j, size, bsize;
+ uint16_t extent_pos;
+
+ if (!priv_data->extents_file->sect_nb) {
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_OK,
+ _("This HFS+ volume has no extents overflow "
+ "file. This is quite unusual!"));
+ return 1;
+ }
+
+ if (!hfsplus_file_read_sector (priv_data->extents_file, node_1, 0))
+ return 0;
+ header = ((HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC));
+ leaf_node = PED_BE32_TO_CPU (header->first_leaf_node);
+ bsize = PED_BE16_TO_CPU (header->node_size);
+ size = bsize / PED_SECTOR_SIZE_DEFAULT;
+ PED_ASSERT(size < 256);
+
+ node = (uint8_t*) ped_malloc (bsize);
+ if (!node) return -1;
+ HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node;
+
+ for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) {
+ if (!hfsplus_file_read (priv_data->extents_file, node,
+ (PedSector) leaf_node * size, size)) {
+ free (node);
+ return 0;
+ }
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = 1; i <= record_number; i++) {
+ uint8_t where;
+ uint16_t value;
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
+ extent_pos = PED_BE16_TO_CPU(value);
+ extent_key = (HfsPExtentKey*)(node + extent_pos);
+ extent = (HfsPExtDescriptor*)
+ (((uint8_t*)extent_key) + sizeof (HfsPExtentKey));
+ /* check for obvious error in FS */
+ if ((extent_pos < HFS_FIRST_REC)
+ || ((uint8_t*)extent - node
+ >= (signed)bsize
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ free (node);
+ return -1;
+ }
+
+ switch (extent_key->file_ID) {
+ case PED_CPU_TO_BE32 (HFS_XTENT_ID) :
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The extents overflow file should not"
+ " contain its own extents! You should "
+ "check the file system."))
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ where = CR_BTREE_EXT_EXT;
+ break;
+ case PED_CPU_TO_BE32 (HFS_CATALOG_ID) :
+ where = CR_BTREE_EXT_CAT;
+ break;
+ case PED_CPU_TO_BE32 (HFSP_ALLOC_ID) :
+ where = CR_BTREE_EXT_ALLOC;
+ break;
+ case PED_CPU_TO_BE32 (HFSP_STARTUP_ID) :
+ where = CR_BTREE_EXT_START;
+ break;
+ case PED_CPU_TO_BE32 (HFSP_ATTRIB_ID) :
+ where = CR_BTREE_EXT_ATTR;
+ break;
+ default :
+ where = CR_BTREE_EXT_0;
+ break;
+ }
+
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU(extent[j].start_block),
+ PED_BE32_TO_CPU(extent[j].block_count),
+ leaf_node,
+ (uint8_t*)extent - node,
+ size,
+ where,
+ j )
+ ) {
+ free (node);
+ return 0;
+ }
+ }
+ }
+ }
+
+ free (node);
+ return 1;
+}
+
+static int
+hfsplus_cache_from_attributes(HfsCPrivateCache* cache, PedFileSystem* fs,
+ PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ uint8_t node_1[PED_SECTOR_SIZE_DEFAULT];
+ uint8_t* node;
+ HfsPHeaderRecord* header;
+ HfsPPrivateGenericKey* generic_key;
+ HfsPForkDataAttr* fork_ext_data;
+ HfsPExtDescriptor* extent;
+ unsigned int leaf_node, record_number;
+ unsigned int i, j, size, bsize;
+ uint16_t generic_pos;
+
+ /* attributes file is facultative */
+ if (!priv_data->attributes_file->sect_nb)
+ return 1;
+
+ /* Search the extent starting at *ptr_block in the catalog file */
+ if (!hfsplus_file_read_sector (priv_data->attributes_file, node_1, 0))
+ return 0;
+ header = ((HfsPHeaderRecord*) (node_1 + HFS_FIRST_REC));
+ leaf_node = PED_BE32_TO_CPU (header->first_leaf_node);
+ bsize = PED_BE16_TO_CPU (header->node_size);
+ size = bsize / PED_SECTOR_SIZE_DEFAULT;
+ PED_ASSERT(size < 256);
+
+ node = (uint8_t*) ped_malloc(bsize);
+ if (!node) return 0;
+ HfsPNodeDescriptor *desc = (HfsPNodeDescriptor*) node;
+
+ for (; leaf_node; leaf_node = PED_BE32_TO_CPU (desc->next)) {
+ if (!hfsplus_file_read (priv_data->attributes_file, node,
+ (PedSector) leaf_node * size, size)) {
+ free (node);
+ return 0;
+ }
+ record_number = PED_BE16_TO_CPU (desc->rec_nb);
+ for (i = 1; i <= record_number; i++) {
+ unsigned int skip;
+ uint16_t value;
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
+ generic_pos = PED_BE16_TO_CPU(value);
+ generic_key = (HfsPPrivateGenericKey*)(node + generic_pos);
+ skip = ( 2 + PED_BE16_TO_CPU (generic_key->key_length)
+ + 1 ) & ~1;
+ fork_ext_data = (HfsPForkDataAttr*)(node+generic_pos+skip);
+ /* check for obvious error in FS */
+ if ((generic_pos < HFS_FIRST_REC)
+ || ((uint8_t*)fork_ext_data - node
+ >= (signed) bsize
+ - 2 * (signed)(record_number+1))) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The file system contains errors."));
+ free (node);
+ return 0;
+ }
+
+ if (fork_ext_data->record_type
+ == PED_CPU_TO_BE32 ( HFSP_ATTR_FORK ) ) {
+ extent = fork_ext_data->fork_res.fork.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU (
+ extent[j].start_block ),
+ PED_BE32_TO_CPU (
+ extent[j].block_count ),
+ leaf_node,
+ (uint8_t*)extent-node,
+ size,
+ CR_BTREE_ATTR,
+ j )
+ ) {
+ free(node);
+ return 0;
+ }
+ }
+ } else if (fork_ext_data->record_type
+ == PED_CPU_TO_BE32 ( HFSP_ATTR_EXTENTS ) ) {
+ extent = fork_ext_data->fork_res.extents;
+ for (j = 0; j < HFSP_EXT_NB; ++j) {
+ if (!extent[j].block_count) break;
+ if (!hfsc_cache_add_extent(
+ cache,
+ PED_BE32_TO_CPU (
+ extent[j].start_block ),
+ PED_BE32_TO_CPU (
+ extent[j].block_count ),
+ leaf_node,
+ (uint8_t*)extent-node,
+ size,
+ CR_BTREE_ATTR,
+ j )
+ ) {
+ free(node);
+ return 0;
+ }
+ }
+ } else continue;
+ }
+ }
+
+ free (node);
+ return 1;
+}
+
+static HfsCPrivateCache*
+hfsplus_cache_extents(PedFileSystem* fs, PedTimer* timer)
+{
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsCPrivateCache* ret;
+ unsigned int file_number, block_number;
+
+ file_number = PED_BE32_TO_CPU(priv_data->vh->file_count);
+ block_number = PED_BE32_TO_CPU(priv_data->vh->total_blocks);
+ ret = hfsc_new_cache(block_number, file_number);
+ if (!ret) return NULL;
+
+ if (!hfsplus_cache_from_vh(ret, fs, timer) ||
+ !hfsplus_cache_from_catalog(ret, fs, timer) ||
+ !hfsplus_cache_from_extent(ret, fs, timer) ||
+ !hfsplus_cache_from_attributes(ret, fs, timer)) {
+ ped_exception_throw(
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Could not cache the file system in memory."));
+ hfsc_delete_cache(ret);
+ return NULL;
+ }
+
+ return ret;
+}
+
+/* This function moves file's data to compact used and free space,
+ starting at fblock block */
+/* return 0 on error */
+int
+hfsplus_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock,
+ PedTimer* timer, unsigned int to_free)
+{
+ PedSector bytes_buff;
+ HfsPPrivateFSData* priv_data = (HfsPPrivateFSData*)
+ fs->type_specific;
+ HfsPVolumeHeader* vh = priv_data->vh;
+ HfsCPrivateCache* cache;
+ unsigned int to_fblock = fblock;
+ unsigned int start = fblock;
+ unsigned int divisor = PED_BE32_TO_CPU (vh->total_blocks)
+ + 1 - start - to_free;
+ int ret;
+
+ PED_ASSERT (!hfsp_block);
+
+ cache = hfsplus_cache_extents (fs, timer);
+ if (!cache)
+ return 0;
+
+ /* Calculate the size of the copy buffer :
+ * Takes BLOCK_MAX_BUFF HFS blocks, but if > BYTES_MAX_BUFF
+ * takes the maximum number of HFS blocks so that the buffer
+ * will remain smaller than or equal to BYTES_MAX_BUFF, with
+ * a minimum of 1 HFS block */
+ bytes_buff = PED_BE32_TO_CPU (priv_data->vh->block_size)
+ * (PedSector) BLOCK_MAX_BUFF;
+ if (bytes_buff > BYTES_MAX_BUFF) {
+ hfsp_block_count = BYTES_MAX_BUFF
+ / PED_BE32_TO_CPU (priv_data->vh->block_size);
+ if (!hfsp_block_count)
+ hfsp_block_count = 1;
+ bytes_buff = (PedSector) hfsp_block_count
+ * PED_BE32_TO_CPU (priv_data->vh->block_size);
+ } else
+ hfsp_block_count = BLOCK_MAX_BUFF;
+
+ /* If the cache code requests more space, give it to him */
+ if (bytes_buff < hfsc_cache_needed_buffer (cache))
+ bytes_buff = hfsc_cache_needed_buffer (cache);
+
+ hfsp_block = (uint8_t*) ped_malloc (bytes_buff);
+ if (!hfsp_block)
+ goto error_cache;
+
+ if (!hfsplus_read_bad_blocks (fs)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Bad blocks list could not be loaded."));
+ goto error_alloc;
+ }
+
+ while ( fblock < ( priv_data->plus_geom->length - 2 )
+ / ( PED_BE32_TO_CPU (vh->block_size)
+ / PED_SECTOR_SIZE_DEFAULT ) ) {
+ if (TST_BLOC_OCCUPATION (priv_data->alloc_map, fblock)
+ && (!hfsplus_is_bad_block (fs, fblock))) {
+ if (!(ret = hfsplus_move_extent_starting_at (fs,
+ &fblock, &to_fblock, cache)))
+ to_fblock = ++fblock;
+ else if (ret == -1) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("An error occurred during extent "
+ "relocation."));
+ goto error_alloc;
+ }
+ } else {
+ fblock++;
+ }
+
+ ped_timer_update(timer, (float)(to_fblock - start) / divisor);
+ }
+
+ free (hfsp_block); hfsp_block = NULL; hfsp_block_count = 0;
+ hfsc_delete_cache (cache);
+ return 1;
+
+error_alloc:
+ free (hfsp_block); hfsp_block = NULL; hfsp_block_count = 0;
+error_cache:
+ hfsc_delete_cache (cache);
+ return 0;
+}
+
+#endif /* !DISCOVER_ONLY */
diff --git a/libparted/fs/r/hfs/reloc_plus.h b/libparted/fs/r/hfs/reloc_plus.h
new file mode 100644
index 0000000..8c5998a
--- /dev/null
+++ b/libparted/fs/r/hfs/reloc_plus.h
@@ -0,0 +1,37 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2004, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _RELOC_PLUS_H
+#define _RELOC_PLUS_H
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include "hfs.h"
+
+int
+hfsplus_update_vh (PedFileSystem *fs);
+
+int
+hfsplus_pack_free_space_from_block (PedFileSystem *fs, unsigned int fblock,
+ PedTimer* timer, unsigned int to_free);
+
+
+#endif /* _RELOC_PLUS_H */
diff --git a/libparted/fs/reiserfs/reiserfs.c b/libparted/fs/reiserfs/reiserfs.c
new file mode 100644
index 0000000..0638f3e
--- /dev/null
+++ b/libparted/fs/reiserfs/reiserfs.c
@@ -0,0 +1,94 @@
+/*
+ reiserfs.c -- ReiserFS detection
+ Copyright (C) 2001-2002, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <uuid/uuid.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif
+
+#include "reiserfs.h"
+
+static PedSector reiserfs_super_offset[] = { 128, 16, -1 };
+static PedFileSystemType* reiserfs_type;
+
+static PedGeometry *reiserfs_probe(PedGeometry *geom)
+{
+ int i;
+
+ PED_ASSERT(geom != NULL);
+ reiserfs_super_block_t *sb = alloca (geom->dev->sector_size);
+
+ for (i = 0; reiserfs_super_offset[i] != -1; i++) {
+ if (reiserfs_super_offset[i] >= geom->length)
+ continue;
+ if (!ped_geometry_read (geom, sb, reiserfs_super_offset[i], 1))
+ continue;
+
+ if (strncmp(REISERFS_SIGNATURE, sb->s_magic,
+ strlen(REISERFS_SIGNATURE)) == 0
+ || strncmp(REISER2FS_SIGNATURE, sb->s_magic,
+ strlen(REISER2FS_SIGNATURE)) == 0
+ || strncmp(REISER3FS_SIGNATURE, sb->s_magic,
+ strlen(REISER3FS_SIGNATURE)) == 0) {
+ PedSector block_size;
+ PedSector block_count;
+
+ block_size = PED_LE16_TO_CPU(sb->s_blocksize)
+ / geom->dev->sector_size;
+ block_count = PED_LE32_TO_CPU(sb->s_block_count);
+ return ped_geometry_new(geom->dev, geom->start,
+ block_size * block_count);
+ }
+ }
+ return NULL;
+}
+
+
+static PedFileSystemOps reiserfs_simple_ops = {
+ probe: reiserfs_probe,
+};
+
+static PedFileSystemType reiserfs_simple_type = {
+ next: NULL,
+ ops: &reiserfs_simple_ops,
+ name: "reiserfs",
+};
+
+void ped_file_system_reiserfs_init()
+{
+ reiserfs_type = &reiserfs_simple_type;
+ ped_file_system_type_register(reiserfs_type);
+}
+
+void ped_file_system_reiserfs_done()
+{
+ ped_file_system_type_unregister(reiserfs_type);
+}
diff --git a/libparted/fs/reiserfs/reiserfs.h b/libparted/fs/reiserfs/reiserfs.h
new file mode 100644
index 0000000..ee92b62
--- /dev/null
+++ b/libparted/fs/reiserfs/reiserfs.h
@@ -0,0 +1,109 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef REISERFS_H
+#define REISERFS_H
+
+#define REISERFS_API_VERSION 0
+
+#define REISERFS_SIGNATURE "ReIsErFs"
+#define REISER2FS_SIGNATURE "ReIsEr2Fs"
+#define REISER3FS_SIGNATURE "ReIsEr3Fs"
+
+#define DEFAULT_BLOCK_SIZE 4096
+
+struct reiserfs_super_block {
+ uint32_t s_block_count;
+ uint32_t s_free_blocks;
+ uint32_t s_root_block;
+ uint32_t s_journal_block;
+ uint32_t s_journal_dev;
+ uint32_t s_orig_journal_size;
+ uint32_t s_journal_trans_max;
+ uint32_t s_journal_block_count;
+ uint32_t s_journal_max_batch;
+ uint32_t s_journal_max_commit_age;
+ uint32_t s_journal_max_trans_age;
+ uint16_t s_blocksize;
+ uint16_t s_oid_maxsize;
+ uint16_t s_oid_cursize;
+ uint16_t s_state;
+ char s_magic[10];
+ uint16_t s_fsck_state;
+ uint32_t s_hash_function_code;
+ uint16_t s_tree_height;
+ uint16_t s_bmap_nr;
+ uint16_t s_version;
+ char padding[438];
+};
+
+typedef struct reiserfs_super_block reiserfs_super_block_t;
+
+enum reiserfs_exception_type {
+ EXCEPTION_INFORMATION = 1,
+ EXCEPTION_WARNING = 2,
+ EXCEPTION_ERROR = 3,
+ EXCEPTION_FATAL = 4,
+ EXCEPTION_BUG = 5,
+ EXCEPTION_NO_FEATURE = 6
+};
+
+typedef enum reiserfs_exception_type reiserfs_exception_type_t;
+
+enum reiserfs_exception_option {
+ EXCEPTION_UNHANDLED = 1 << 0,
+ EXCEPTION_FIX = 1 << 1,
+ EXCEPTION_YES = 1 << 2,
+ EXCEPTION_NO = 1 << 3,
+ EXCEPTION_OK = 1 << 4,
+ EXCEPTION_RETRY = 1 << 5,
+ EXCEPTION_IGNORE = 1 << 6,
+ EXCEPTION_CANCEL = 1 << 7
+};
+
+typedef enum reiserfs_exception_option reiserfs_exception_option_t;
+
+typedef void (reiserfs_gauge_handler_t)(const char *, unsigned int, void *, int, int, int);
+
+typedef void * reiserfs_exception_t;
+typedef void * reiserfs_gauge_t;
+typedef void * reiserfs_fs_t;
+
+#define FS_FORMAT_3_5 0
+#define FS_FORMAT_3_6 2
+
+#define SUPER_OFFSET_IN_BYTES 64*1024
+
+#define DEFAULT_JOURNAL_SIZE 8192
+
+#define JOURNAL_MIN_SIZE 512
+#define JOURNAL_MIN_TRANS 256
+#define JOURNAL_MAX_TRANS 1024
+
+#define JOURNAL_DEF_RATIO 8
+#define JOURNAL_MIN_RATIO 2
+#define JOURNAL_MAX_BATCH 900
+#define JOURNAL_MAX_COMMIT_AGE 30
+#define JOURNAL_MAX_TRANS_AGE 30
+
+#define TEA_HASH 1
+#define YURA_HASH 2
+#define R5_HASH 3
+
+#endif
diff --git a/libparted/fs/udf/udf.c b/libparted/fs/udf/udf.c
new file mode 100644
index 0000000..a48a42e
--- /dev/null
+++ b/libparted/fs/udf/udf.c
@@ -0,0 +1,175 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+
+/* Read bytes using ped_geometry_read() function */
+static int read_bytes (const PedGeometry* geom, void* buffer, PedSector offset, PedSector count)
+{
+ char* sector_buffer;
+ PedSector sector_offset, sector_count, buffer_offset;
+
+ sector_offset = offset / geom->dev->sector_size;
+ sector_count = (offset + count + geom->dev->sector_size - 1) / geom->dev->sector_size - sector_offset;
+ buffer_offset = offset - sector_offset * geom->dev->sector_size;
+
+ sector_buffer = alloca (sector_count * geom->dev->sector_size);
+
+ if (!ped_geometry_read (geom, sector_buffer, sector_offset, sector_count))
+ return 0;
+
+ memcpy (buffer, sector_buffer + buffer_offset, count);
+ return 1;
+}
+
+/* Scan VSR and check for UDF VSD */
+static int check_vrs (const PedGeometry* geom, unsigned int vsdsize)
+{
+ PedSector block;
+ PedSector offset;
+ unsigned char ident[5];
+
+ /* Check only first 64 blocks, but theoretically standard does not define upper limit */
+ for (block = 0; block < 64; block++) {
+ /* VRS starts at fixed offset 32kB, it is independent of block size or vsd size */
+ offset = 32768 + block * vsdsize;
+
+ /* Read VSD identifier, it is at offset 1 */
+ if (!read_bytes (geom, ident, offset + 1, 5))
+ return 0;
+
+ /* Check for UDF identifier */
+ if (memcmp (ident, "NSR02", 5) == 0 ||
+ memcmp (ident, "NSR03", 5) == 0)
+ return 1;
+
+ /* Unknown VSD identifier means end of VRS */
+ if (memcmp (ident, "BEA01", 5) != 0 &&
+ memcmp (ident, "TEA01", 5) != 0 &&
+ memcmp (ident, "BOOT2", 5) != 0 &&
+ memcmp (ident, "CD001", 5) != 0 &&
+ memcmp (ident, "CDW02", 5) != 0)
+ break;
+ }
+
+ return 0;
+}
+
+/* Check for UDF AVDP */
+static int check_anchor (const PedGeometry* geom, unsigned int blocksize, int rel_block)
+{
+ PedSector block;
+ unsigned char tag[16];
+
+ /* Negative block means relative to the end of device */
+ if (rel_block < 0) {
+ block = geom->length * geom->dev->sector_size / blocksize;
+ if (block <= (PedSector)(-rel_block))
+ return 0;
+ block -= (PedSector)(-rel_block);
+ if (block < 257)
+ return 0;
+ } else {
+ block = rel_block;
+ }
+
+ if (!read_bytes (geom, tag, block * blocksize, 16))
+ return 0;
+
+ /* Check for AVDP type (0x0002) */
+ if (((unsigned short)tag[0] | ((unsigned short)tag[1] << 8)) != 0x0002)
+ return 0;
+
+ /* Check that location stored in AVDP matches */
+ if (((unsigned long)tag[12] | ((unsigned long)tag[13] << 8) | ((unsigned long)tag[14] << 16) | ((unsigned long)tag[15] << 24)) != block)
+ return 0;
+
+ return 1;
+}
+
+/* Detect presence of UDF AVDP */
+static int detect_anchor(const PedGeometry* geom, unsigned int blocksize)
+{
+ /* All possible AVDP locations in preferred order */
+ static int anchors[] = { 256, -257, -1, 512 };
+ size_t i;
+
+ for (i = 0; i < sizeof (anchors)/sizeof (*anchors); i++) {
+ if (check_anchor (geom, blocksize, anchors[i]))
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Detect UDF filesystem, it must have VRS and AVDP */
+static int detect_udf (const PedGeometry* geom)
+{
+ unsigned int blocksize;
+
+ /* VSD size is min(2048, UDF block size), check for block sizes <= 2048 */
+ if (check_vrs (geom, 2048)) {
+ for (blocksize = 512; blocksize <= 2048; blocksize *= 2) {
+ if (detect_anchor (geom, blocksize))
+ return 1;
+ }
+ }
+
+ /* Check for block sizes larger then 2048, maximal theoretical block size is 32kB */
+ for (blocksize = 4096; blocksize <= 32768; blocksize *= 2) {
+ if (!check_vrs (geom, blocksize))
+ continue;
+ if (detect_anchor (geom, blocksize))
+ return 1;
+ }
+
+ return 0;
+}
+
+PedGeometry*
+udf_probe (PedGeometry* geom)
+{
+ if (!detect_udf (geom))
+ return NULL;
+
+ return ped_geometry_duplicate (geom);
+}
+
+static PedFileSystemOps udf_ops = {
+ probe: udf_probe,
+};
+
+static PedFileSystemType udf_type = {
+ next: NULL,
+ ops: &udf_ops,
+ name: "udf",
+};
+
+void
+ped_file_system_udf_init ()
+{
+ ped_file_system_type_register (&udf_type);
+}
+
+void
+ped_file_system_udf_done ()
+{
+ ped_file_system_type_unregister (&udf_type);
+}
diff --git a/libparted/fs/ufs/ufs.c b/libparted/fs/ufs/ufs.c
new file mode 100644
index 0000000..d2bf421
--- /dev/null
+++ b/libparted/fs/ufs/ufs.c
@@ -0,0 +1,281 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Ben Collins <bcollins@debian.org>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <unistd.h>
+#include <string.h>
+
+/* taken from ufs_fs.h in Linux */
+#define UFS_MAXNAMLEN 255
+#define UFS_MAXMNTLEN 512
+#define UFS_MAXCSBUFS 31
+#define UFS_LINK_MAX 32000
+
+#define UFS_MAGIC 0x00011954
+#define UFS_MAGIC_LFN 0x00095014
+#define UFS_MAGIC_FEA 0x00195612
+#define UFS_MAGIC_4GB 0x05231994
+
+struct __attribute__ ((packed)) ufs_csum {
+ uint32_t cs_ndir; /* number of directories */
+ uint32_t cs_nbfree; /* number of free blocks */
+ uint32_t cs_nifree; /* number of free inodes */
+ uint32_t cs_nffree; /* number of free frags */
+};
+
+struct __attribute__ ((packed)) ufs_super_block {
+ uint32_t fs_link; /* UNUSED */
+ uint32_t fs_rlink; /* UNUSED */
+ uint32_t fs_sblkno; /* addr of super-block in filesys */
+ uint32_t fs_cblkno; /* offset of cyl-block in filesys */
+ uint32_t fs_iblkno; /* offset of inode-blocks in filesys */
+ uint32_t fs_dblkno; /* offset of first data after cg */
+ uint32_t fs_cgoffset; /* cylinder group offset in cylinder */
+ uint32_t fs_cgmask; /* used to calc mod fs_ntrak */
+ uint32_t fs_time; /* last time written -- time_t */
+ uint32_t fs_size; /* number of blocks in fs */
+ uint32_t fs_dsize; /* number of data blocks in fs */
+ uint32_t fs_ncg; /* number of cylinder groups */
+ uint32_t fs_bsize; /* size of basic blocks in fs */
+ uint32_t fs_fsize; /* size of frag blocks in fs */
+ uint32_t fs_frag; /* number of frags in a block in fs */
+/* these are configuration parameters */
+ uint32_t fs_minfree; /* minimum percentage of free blocks */
+ uint32_t fs_rotdelay; /* num of ms for optimal next block */
+ uint32_t fs_rps; /* disk revolutions per second */
+/* these fields can be computed from the others */
+ uint32_t fs_bmask; /* ``blkoff'' calc of blk offsets */
+ uint32_t fs_fmask; /* ``fragoff'' calc of frag offsets */
+ uint32_t fs_bshift; /* ``lblkno'' calc of logical blkno */
+ uint32_t fs_fshift; /* ``numfrags'' calc number of frags */
+/* these are configuration parameters */
+ uint32_t fs_maxcontig; /* max number of contiguous blks */
+ uint32_t fs_maxbpg; /* max number of blks per cyl group */
+/* these fields can be computed from the others */
+ uint32_t fs_fragshift; /* block to frag shift */
+ uint32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */
+ uint32_t fs_sbsize; /* actual size of super block */
+ uint32_t fs_csmask; /* csum block offset */
+ uint32_t fs_csshift; /* csum block number */
+ uint32_t fs_nindir; /* value of NINDIR */
+ uint32_t fs_inopb; /* value of INOPB */
+ uint32_t fs_nspf; /* value of NSPF */
+/* yet another configuration parameter */
+ uint32_t fs_optim; /* optimization preference, see below */
+/* these fields are derived from the hardware */
+ union {
+ struct {
+ uint32_t fs_npsect; /* # sectors/track including spares */
+ } fs_sun;
+ struct {
+ int32_t fs_state; /* file system state timestamp */
+ } fs_sunx86;
+ } fs_u1;
+ uint32_t fs_interleave; /* hardware sector interleave */
+ uint32_t fs_trackskew; /* sector 0 skew, per track */
+/* a unique id for this file system (currently unused and unmaintained) */
+/* In 4.3 Tahoe this space is used by fs_headswitch and fs_trkseek */
+/* Neither of those fields is used in the Tahoe code right now but */
+/* there could be problems if they are. */
+ uint32_t fs_id[2]; /* file system id */
+/* sizes determined by number of cylinder groups and their sizes */
+ uint32_t fs_csaddr; /* blk addr of cyl grp summary area */
+ uint32_t fs_cssize; /* size of cyl grp summary area */
+ uint32_t fs_cgsize; /* cylinder group size */
+/* these fields are derived from the hardware */
+ uint32_t fs_ntrak; /* tracks per cylinder */
+ uint32_t fs_nsect; /* sectors per track */
+ uint32_t fs_spc; /* sectors per cylinder */
+/* this comes from the disk driver partitioning */
+ uint32_t fs_ncyl; /* cylinders in file system */
+/* these fields can be computed from the others */
+ uint32_t fs_cpg; /* cylinders per group */
+ uint32_t fs_ipg; /* inodes per group */
+ uint32_t fs_fpg; /* blocks per group * fs_frag */
+/* this data must be re-computed after crashes */
+ struct ufs_csum fs_cstotal; /* cylinder summary information */
+/* these fields are cleared at mount time */
+ int8_t fs_fmod; /* super block modified flag */
+ int8_t fs_clean; /* file system is clean flag */
+ int8_t fs_ronly; /* mounted read-only flag */
+ int8_t fs_flags; /* currently unused flag */
+ int8_t fs_fsmnt[UFS_MAXMNTLEN]; /* name mounted on */
+/* these fields retain the current block allocation info */
+ uint32_t fs_cgrotor; /* last cg searched */
+ uint32_t fs_csp[UFS_MAXCSBUFS]; /* list of fs_cs info buffers */
+ uint32_t fs_maxcluster;
+ uint32_t fs_cpc; /* cyl per cycle in postbl */
+ uint16_t fs_opostbl[16][8]; /* old rotation block list head */
+ union {
+ struct {
+ int32_t fs_sparecon[53];/* reserved for future constants */
+ int32_t fs_reclaim;
+ int32_t fs_sparecon2[1];
+ int32_t fs_state; /* file system state timestamp */
+ uint32_t fs_qbmask[2]; /* ~usb_bmask */
+ uint32_t fs_qfmask[2]; /* ~usb_fmask */
+ } fs_sun;
+ struct {
+ int32_t fs_sparecon[53];/* reserved for future constants */
+ int32_t fs_reclaim;
+ int32_t fs_sparecon2[1];
+ uint32_t fs_npsect; /* # sectors/track including spares */
+ uint32_t fs_qbmask[2]; /* ~usb_bmask */
+ uint32_t fs_qfmask[2]; /* ~usb_fmask */
+ } fs_sunx86;
+ struct {
+ int32_t fs_sparecon[50];/* reserved for future constants */
+ int32_t fs_contigsumsize;/* size of cluster summary array */
+ int32_t fs_maxsymlinklen;/* max length of an internal symlink */
+ int32_t fs_inodefmt; /* format of on-disk inodes */
+ uint32_t fs_maxfilesize[2]; /* max representable file size */
+ uint32_t fs_qbmask[2]; /* ~usb_bmask */
+ uint32_t fs_qfmask[2]; /* ~usb_fmask */
+ int32_t fs_state; /* file system state timestamp */
+ } fs_44;
+ } fs_u2;
+ int32_t fs_postblformat; /* format of positional layout tables */
+ int32_t fs_nrpos; /* number of rotational positions */
+ int32_t fs_postbloff; /* (__s16) rotation block list head */
+ int32_t fs_rotbloff; /* (uint8_t) blocks for each rotation */
+ int32_t fs_magic; /* magic number */
+ uint8_t fs_space[4]; /* list of blocks for each rotation */
+};
+
+static PedGeometry*
+ufs_probe_sun (PedGeometry* geom)
+{
+ const int sectors = ((3 * 512) + geom->dev->sector_size - 1) /
+ geom->dev->sector_size;
+ uint8_t* buf = alloca (sectors * geom->dev->sector_size);
+ struct ufs_super_block *sb;
+
+ if (geom->length < 5)
+ return 0;
+ if (!ped_geometry_read (geom, buf, 16 * 512 / geom->dev->sector_size, sectors))
+ return 0;
+
+ sb = (struct ufs_super_block *)buf;
+
+ if (PED_BE32_TO_CPU(sb->fs_magic) == UFS_MAGIC) {
+ PedSector block_size = PED_BE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size;
+ PedSector block_count = PED_BE32_TO_CPU(sb->fs_size);
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ }
+ if (PED_LE32_TO_CPU(sb->fs_magic) == UFS_MAGIC) {
+ PedSector block_size = PED_LE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size;
+ PedSector block_count = PED_LE32_TO_CPU(sb->fs_size);
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ }
+ return NULL;
+}
+
+static PedGeometry*
+ufs_probe_hp (PedGeometry* geom)
+{
+ struct ufs_super_block *sb;
+ PedSector block_size;
+ PedSector block_count;
+
+ if (geom->length < 5)
+ return 0;
+ const int sectors = ((3 * 512) + geom->dev->sector_size - 1) /
+ geom->dev->sector_size;
+ uint8_t* buf = alloca (sectors * geom->dev->sector_size);
+
+ if (!ped_geometry_read (geom, buf, 16 * 512 / geom->dev->sector_size, sectors))
+ return 0;
+
+ sb = (struct ufs_super_block *)buf;
+
+ /* Try sane bytesex */
+ switch (PED_BE32_TO_CPU(sb->fs_magic)) {
+ case UFS_MAGIC_LFN:
+ case UFS_MAGIC_FEA:
+ case UFS_MAGIC_4GB:
+ block_size = PED_BE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size;
+ block_count = PED_BE32_TO_CPU(sb->fs_size);
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ }
+
+ /* Try perverted bytesex */
+ switch (PED_LE32_TO_CPU(sb->fs_magic)) {
+ case UFS_MAGIC_LFN:
+ case UFS_MAGIC_FEA:
+ case UFS_MAGIC_4GB:
+ block_size = PED_LE32_TO_CPU(sb->fs_bsize) / geom->dev->sector_size;
+ block_count = PED_LE32_TO_CPU(sb->fs_size);
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ }
+ return NULL;
+}
+
+static PedFileSystemOps ufs_ops_sun = {
+ probe: ufs_probe_sun,
+};
+
+static PedFileSystemOps ufs_ops_hp = {
+ probe: ufs_probe_hp,
+};
+
+static PedFileSystemType ufs_type_sun = {
+ next: NULL,
+ ops: &ufs_ops_sun,
+ name: "sun-ufs",
+};
+
+static PedFileSystemType ufs_type_hp = {
+ next: NULL,
+ ops: &ufs_ops_hp,
+ name: "hp-ufs",
+};
+
+void
+ped_file_system_ufs_init ()
+{
+ PED_ASSERT (sizeof (struct ufs_super_block) == 1380);
+
+ ped_file_system_type_register (&ufs_type_sun);
+ ped_file_system_type_register (&ufs_type_hp);
+}
+
+void
+ped_file_system_ufs_done ()
+{
+ ped_file_system_type_unregister (&ufs_type_hp);
+ ped_file_system_type_unregister (&ufs_type_sun);
+}
diff --git a/libparted/fs/xfs/platform_defs.h b/libparted/fs/xfs/platform_defs.h
new file mode 100644
index 0000000..a6ec8fb
--- /dev/null
+++ b/libparted/fs/xfs/platform_defs.h
@@ -0,0 +1,109 @@
+/* include/platform_defs.h. Generated automatically by configure. */
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 3 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like. Any license provided herein, whether implied or
+ * otherwise, applies only to this software file. Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA 94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ *
+ * @configure_input@
+ */
+#ifndef __XFS_PLATFORM_DEFS_H__
+#define __XFS_PLATFORM_DEFS_H__
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <endian.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/types.h>
+
+#if (__GLIBC__ <= 2) && (__GLIBC_MINOR__ <= 1)
+# define constpp const char * const *
+#else
+# define constpp char * const *
+#endif
+
+typedef loff_t xfs_off_t;
+typedef uint64_t xfs_ino_t;
+typedef uint32_t xfs_dev_t;
+typedef int64_t xfs_daddr_t;
+typedef char* xfs_caddr_t;
+
+/* long and pointer must be either 32 bit or 64 bit */
+/* #undef HAVE_64BIT_LONG */
+#define HAVE_32BIT_LONG 1
+#define HAVE_32BIT_PTR 1
+/* #undef HAVE_64BIT_PTR */
+
+/* Check if __psint_t is set to something meaningful */
+/* #undef HAVE___PSINT_T */
+#ifndef HAVE___PSINT_T
+# ifdef HAVE_32BIT_PTR
+typedef int __psint_t;
+# elif defined HAVE_64BIT_PTR
+# ifdef HAVE_64BIT_LONG
+typedef long __psint_t;
+# else
+/* This is a very strange architecture, which has 64 bit pointers but
+ * not 64 bit longs. So, I'd just punt here and assume long long is Ok */
+typedef long long __psint_t;
+# endif
+# else
+# error Unknown pointer size
+# endif
+#endif
+
+/* Check if __psunsigned_t is set to something meaningful */
+/* #undef HAVE___PSUNSIGNED_T */
+#ifndef HAVE___PSUNSIGNED_T
+# ifdef HAVE_32BIT_PTR
+typedef unsigned int __psunsigned_t;
+# elif defined HAVE_64BIT_PTR
+# ifdef HAVE_64BIT_LONG
+typedef long __psunsigned_t;
+# else
+/* This is a very strange architecture, which has 64 bit pointers but
+ * not 64 bit longs. So, I'd just punt here and assume long long is Ok */
+typedef unsigned long long __psunsigned_t;
+# endif
+# else
+# error Unknown pointer size
+# endif
+#endif
+
+#ifdef DEBUG
+# define ASSERT assert
+#else
+# define ASSERT(EX) ((void) 0)
+#endif
+
+#endif /* __XFS_PLATFORM_DEFS_H__ */
diff --git a/libparted/fs/xfs/xfs.c b/libparted/fs/xfs/xfs.c
new file mode 100644
index 0000000..f5cf96a
--- /dev/null
+++ b/libparted/fs/xfs/xfs.c
@@ -0,0 +1,87 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/endian.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <uuid/uuid.h>
+#include "platform_defs.h"
+#include "xfs_types.h"
+#include "xfs_sb.h"
+
+static PedGeometry*
+xfs_probe (PedGeometry* geom)
+{
+ PedSector block_size;
+ PedSector block_count;
+ struct xfs_sb *sb = alloca (geom->dev->sector_size);
+
+ if (geom->length < XFS_SB_DADDR + 1)
+ return NULL;
+ if (!ped_geometry_read (geom, sb, XFS_SB_DADDR, 1))
+ return NULL;
+
+ if (PED_LE32_TO_CPU (sb->sb_magicnum) == XFS_SB_MAGIC) {
+ block_size = PED_LE32_TO_CPU (sb->sb_blocksize) / geom->dev->sector_size;
+ block_count = PED_LE64_TO_CPU (sb->sb_dblocks);
+
+ return ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ }
+
+ if (PED_BE32_TO_CPU (sb->sb_magicnum) == XFS_SB_MAGIC) {
+ block_size = PED_BE32_TO_CPU (sb->sb_blocksize) / geom->dev->sector_size;
+ block_count = PED_BE64_TO_CPU (sb->sb_dblocks);
+
+ geom = ped_geometry_new (geom->dev, geom->start,
+ block_size * block_count);
+ return geom;
+ }
+ return NULL;
+}
+
+static PedFileSystemOps xfs_ops = {
+ probe: xfs_probe,
+};
+
+static PedFileSystemType xfs_type = {
+ next: NULL,
+ ops: &xfs_ops,
+ name: "xfs",
+};
+
+void
+ped_file_system_xfs_init ()
+{
+ ped_file_system_type_register (&xfs_type);
+}
+
+void
+ped_file_system_xfs_done ()
+{
+ ped_file_system_type_unregister (&xfs_type);
+}
diff --git a/libparted/fs/xfs/xfs_sb.h b/libparted/fs/xfs/xfs_sb.h
new file mode 100644
index 0000000..3484145
--- /dev/null
+++ b/libparted/fs/xfs/xfs_sb.h
@@ -0,0 +1,489 @@
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 3 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like. Any license provided herein, whether implied or
+ * otherwise, applies only to this software file. Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA 94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ */
+#ifndef __XFS_SB_H__
+#define __XFS_SB_H__
+
+/*
+ * Super block
+ * Fits into a 512-byte buffer at daddr_t 0 of each allocation group.
+ * Only the first of these is ever updated except during growfs.
+ */
+
+struct xfs_buf;
+struct xfs_mount;
+
+#define XFS_SB_MAGIC 0x58465342 /* 'XFSB' */
+#define XFS_SB_VERSION_1 1 /* 5.3, 6.0.1, 6.1 */
+#define XFS_SB_VERSION_2 2 /* 6.2 - attributes */
+#define XFS_SB_VERSION_3 3 /* 6.2 - new inode version */
+#define XFS_SB_VERSION_4 4 /* 6.2+ - bitmask version */
+#define XFS_SB_VERSION_NUMBITS 0x000f
+#define XFS_SB_VERSION_ALLFBITS 0xfff0
+#define XFS_SB_VERSION_SASHFBITS 0xf000
+#define XFS_SB_VERSION_REALFBITS 0x0ff0
+#define XFS_SB_VERSION_ATTRBIT 0x0010
+#define XFS_SB_VERSION_NLINKBIT 0x0020
+#define XFS_SB_VERSION_QUOTABIT 0x0040
+#define XFS_SB_VERSION_ALIGNBIT 0x0080
+#define XFS_SB_VERSION_DALIGNBIT 0x0100
+#define XFS_SB_VERSION_SHAREDBIT 0x0200
+#define XFS_SB_VERSION_EXTFLGBIT 0x1000
+#define XFS_SB_VERSION_DIRV2BIT 0x2000
+#define XFS_SB_VERSION_OKSASHFBITS \
+ (XFS_SB_VERSION_EXTFLGBIT | \
+ XFS_SB_VERSION_DIRV2BIT)
+#define XFS_SB_VERSION_OKREALFBITS \
+ (XFS_SB_VERSION_ATTRBIT | \
+ XFS_SB_VERSION_NLINKBIT | \
+ XFS_SB_VERSION_QUOTABIT | \
+ XFS_SB_VERSION_ALIGNBIT | \
+ XFS_SB_VERSION_DALIGNBIT | \
+ XFS_SB_VERSION_SHAREDBIT)
+#define XFS_SB_VERSION_OKSASHBITS \
+ (XFS_SB_VERSION_NUMBITS | \
+ XFS_SB_VERSION_REALFBITS | \
+ XFS_SB_VERSION_OKSASHFBITS)
+#define XFS_SB_VERSION_OKREALBITS \
+ (XFS_SB_VERSION_NUMBITS | \
+ XFS_SB_VERSION_OKREALFBITS | \
+ XFS_SB_VERSION_OKSASHFBITS)
+#define XFS_SB_VERSION_MKFS(ia,dia,extflag,dirv2) \
+ (((ia) || (dia) || (extflag) || (dirv2)) ? \
+ (XFS_SB_VERSION_4 | \
+ ((ia) ? XFS_SB_VERSION_ALIGNBIT : 0) | \
+ ((dia) ? XFS_SB_VERSION_DALIGNBIT : 0) | \
+ ((extflag) ? XFS_SB_VERSION_EXTFLGBIT : 0) | \
+ ((dirv2) ? XFS_SB_VERSION_DIRV2BIT : 0)) : \
+ XFS_SB_VERSION_1)
+
+typedef struct xfs_sb
+{
+ uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */
+ uint32_t sb_blocksize; /* logical block size, bytes */
+ xfs_drfsbno_t sb_dblocks; /* number of data blocks */
+ xfs_drfsbno_t sb_rblocks; /* number of realtime blocks */
+ xfs_drtbno_t sb_rextents; /* number of realtime extents */
+ uuid_t sb_uuid; /* file system unique id */
+ xfs_dfsbno_t sb_logstart; /* starting block of log if internal */
+ xfs_ino_t sb_rootino; /* root inode number */
+ xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */
+ xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */
+ xfs_agblock_t sb_rextsize; /* realtime extent size, blocks */
+ xfs_agblock_t sb_agblocks; /* size of an allocation group */
+ xfs_agnumber_t sb_agcount; /* number of allocation groups */
+ xfs_extlen_t sb_rbmblocks; /* number of rt bitmap blocks */
+ xfs_extlen_t sb_logblocks; /* number of log blocks */
+ uint16_t sb_versionnum; /* header version == XFS_SB_VERSION */
+ uint16_t sb_sectsize; /* volume sector size, bytes */
+ uint16_t sb_inodesize; /* inode size, bytes */
+ uint16_t sb_inopblock; /* inodes per block */
+ char sb_fname[12]; /* file system name */
+ uint8_t sb_blocklog; /* log2 of sb_blocksize */
+ uint8_t sb_sectlog; /* log2 of sb_sectsize */
+ uint8_t sb_inodelog; /* log2 of sb_inodesize */
+ uint8_t sb_inopblog; /* log2 of sb_inopblock */
+ uint8_t sb_agblklog; /* log2 of sb_agblocks (rounded up) */
+ uint8_t sb_rextslog; /* log2 of sb_rextents */
+ uint8_t sb_inprogress; /* mkfs is in progress, don't mount */
+ uint8_t sb_imax_pct; /* max % of fs for inode space */
+ /* statistics */
+ /*
+ * These fields must remain contiguous. If you really
+ * want to change their layout, make sure you fix the
+ * code in xfs_trans_apply_sb_deltas().
+ */
+ uint64_t sb_icount; /* allocated inodes */
+ uint64_t sb_ifree; /* free inodes */
+ uint64_t sb_fdblocks; /* free data blocks */
+ uint64_t sb_frextents; /* free realtime extents */
+ /*
+ * End contiguous fields.
+ */
+ xfs_ino_t sb_uquotino; /* user quota inode */
+ xfs_ino_t sb_gquotino; /* group quota inode */
+ uint16_t sb_qflags; /* quota flags */
+ uint8_t sb_flags; /* misc. flags */
+ uint8_t sb_shared_vn; /* shared version number */
+ xfs_extlen_t sb_inoalignmt; /* inode chunk alignment, fsblocks */
+ uint32_t sb_unit; /* stripe or raid unit */
+ uint32_t sb_width; /* stripe or raid width */
+ uint8_t sb_dirblklog; /* log2 of dir block size (fsbs) */
+ uint8_t sb_dummy[7]; /* padding */
+} xfs_sb_t;
+
+/*
+ * Sequence number values for the fields.
+ */
+typedef enum {
+ XFS_SBS_MAGICNUM, XFS_SBS_BLOCKSIZE, XFS_SBS_DBLOCKS, XFS_SBS_RBLOCKS,
+ XFS_SBS_REXTENTS, XFS_SBS_UUID, XFS_SBS_LOGSTART, XFS_SBS_ROOTINO,
+ XFS_SBS_RBMINO, XFS_SBS_RSUMINO, XFS_SBS_REXTSIZE, XFS_SBS_AGBLOCKS,
+ XFS_SBS_AGCOUNT, XFS_SBS_RBMBLOCKS, XFS_SBS_LOGBLOCKS,
+ XFS_SBS_VERSIONNUM, XFS_SBS_SECTSIZE, XFS_SBS_INODESIZE,
+ XFS_SBS_INOPBLOCK, XFS_SBS_FNAME, XFS_SBS_BLOCKLOG,
+ XFS_SBS_SECTLOG, XFS_SBS_INODELOG, XFS_SBS_INOPBLOG, XFS_SBS_AGBLKLOG,
+ XFS_SBS_REXTSLOG, XFS_SBS_INPROGRESS, XFS_SBS_IMAX_PCT, XFS_SBS_ICOUNT,
+ XFS_SBS_IFREE, XFS_SBS_FDBLOCKS, XFS_SBS_FREXTENTS, XFS_SBS_UQUOTINO,
+ XFS_SBS_GQUOTINO, XFS_SBS_QFLAGS, XFS_SBS_FLAGS, XFS_SBS_SHARED_VN,
+ XFS_SBS_INOALIGNMT, XFS_SBS_UNIT, XFS_SBS_WIDTH, XFS_SBS_DIRBLKLOG,
+ XFS_SBS_DUMMY,
+ XFS_SBS_FIELDCOUNT
+} xfs_sb_field_t;
+
+/*
+ * Mask values, defined based on the xfs_sb_field_t values.
+ * Only define the ones we're using.
+ */
+#define XFS_SB_MVAL(x) (1LL << XFS_SBS_ ## x)
+#define XFS_SB_UUID XFS_SB_MVAL(UUID)
+#define XFS_SB_FNAME XFS_SB_MVAL(FNAME)
+#define XFS_SB_ROOTINO XFS_SB_MVAL(ROOTINO)
+#define XFS_SB_RBMINO XFS_SB_MVAL(RBMINO)
+#define XFS_SB_RSUMINO XFS_SB_MVAL(RSUMINO)
+#define XFS_SB_VERSIONNUM XFS_SB_MVAL(VERSIONNUM)
+#define XFS_SB_UQUOTINO XFS_SB_MVAL(UQUOTINO)
+#define XFS_SB_GQUOTINO XFS_SB_MVAL(GQUOTINO)
+#define XFS_SB_QFLAGS XFS_SB_MVAL(QFLAGS)
+#define XFS_SB_SHARED_VN XFS_SB_MVAL(SHARED_VN)
+#define XFS_SB_UNIT XFS_SB_MVAL(UNIT)
+#define XFS_SB_WIDTH XFS_SB_MVAL(WIDTH)
+#define XFS_SB_NUM_BITS ((int)XFS_SBS_FIELDCOUNT)
+#define XFS_SB_ALL_BITS ((1LL << XFS_SB_NUM_BITS) - 1)
+#define XFS_SB_MOD_BITS \
+ (XFS_SB_UUID | XFS_SB_ROOTINO | XFS_SB_RBMINO | XFS_SB_RSUMINO | \
+ XFS_SB_VERSIONNUM | XFS_SB_UQUOTINO | XFS_SB_GQUOTINO | \
+ XFS_SB_QFLAGS | XFS_SB_SHARED_VN | XFS_SB_UNIT | XFS_SB_WIDTH)
+
+/*
+ * Misc. Flags - warning - these will be cleared by xfs_repair unless
+ * a feature bit is set when the flag is used.
+ */
+#define XFS_SBF_NOFLAGS 0x00 /* no flags set */
+#define XFS_SBF_READONLY 0x01 /* only read-only mounts allowed */
+
+/*
+ * define max. shared version we can interoperate with
+ */
+#define XFS_SB_MAX_SHARED_VN 0
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_NUM)
+int xfs_sb_version_num(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_NUM(sbp) xfs_sb_version_num(sbp)
+#else
+#define XFS_SB_VERSION_NUM(sbp) ((sbp)->sb_versionnum & XFS_SB_VERSION_NUMBITS)
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_GOOD_VERSION)
+int xfs_sb_good_version(xfs_sb_t *sbp);
+#define XFS_SB_GOOD_VERSION(sbp) xfs_sb_good_version(sbp)
+#else
+#define XFS_SB_GOOD_VERSION_INT(sbp) \
+ ((((sbp)->sb_versionnum >= XFS_SB_VERSION_1) && \
+ ((sbp)->sb_versionnum <= XFS_SB_VERSION_3)) || \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ !((sbp)->sb_versionnum & ~XFS_SB_VERSION_OKREALBITS)
+#ifdef __KERNEL__
+#define XFS_SB_GOOD_VERSION(sbp) \
+ (XFS_SB_GOOD_VERSION_INT(sbp) && \
+ (sbp)->sb_shared_vn <= XFS_SB_MAX_SHARED_VN) ))
+#else
+/*
+ * extra 2 paren's here (( to unconfuse paren-matching editors
+ * like vi because XFS_SB_GOOD_VERSION_INT is a partial expression
+ * and the two XFS_SB_GOOD_VERSION's each 2 more close paren's to
+ * complete the expression.
+ */
+#define XFS_SB_GOOD_VERSION(sbp) \
+ (XFS_SB_GOOD_VERSION_INT(sbp) && \
+ (!((sbp)->sb_versionnum & XFS_SB_VERSION_SHAREDBIT) || \
+ (sbp)->sb_shared_vn <= XFS_SB_MAX_SHARED_VN)) ))
+#endif /* __KERNEL__ */
+#endif
+
+#define XFS_SB_GOOD_SASH_VERSION(sbp) \
+ ((((sbp)->sb_versionnum >= XFS_SB_VERSION_1) && \
+ ((sbp)->sb_versionnum <= XFS_SB_VERSION_3)) || \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ !((sbp)->sb_versionnum & ~XFS_SB_VERSION_OKSASHBITS)))
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_TONEW)
+unsigned xfs_sb_version_tonew(unsigned v);
+#define XFS_SB_VERSION_TONEW(v) xfs_sb_version_tonew(v)
+#else
+#define XFS_SB_VERSION_TONEW(v) \
+ ((((v) == XFS_SB_VERSION_1) ? \
+ 0 : \
+ (((v) == XFS_SB_VERSION_2) ? \
+ XFS_SB_VERSION_ATTRBIT : \
+ (XFS_SB_VERSION_ATTRBIT | XFS_SB_VERSION_NLINKBIT))) | \
+ XFS_SB_VERSION_4)
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_TOOLD)
+unsigned xfs_sb_version_toold(unsigned v);
+#define XFS_SB_VERSION_TOOLD(v) xfs_sb_version_toold(v)
+#else
+#define XFS_SB_VERSION_TOOLD(v) \
+ (((v) & (XFS_SB_VERSION_QUOTABIT | XFS_SB_VERSION_ALIGNBIT)) ? \
+ 0 : \
+ (((v) & XFS_SB_VERSION_NLINKBIT) ? \
+ XFS_SB_VERSION_3 : \
+ (((v) & XFS_SB_VERSION_ATTRBIT) ? \
+ XFS_SB_VERSION_2 : \
+ XFS_SB_VERSION_1)))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASATTR)
+int xfs_sb_version_hasattr(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASATTR(sbp) xfs_sb_version_hasattr(sbp)
+#else
+#define XFS_SB_VERSION_HASATTR(sbp) \
+ (((sbp)->sb_versionnum == XFS_SB_VERSION_2) || \
+ ((sbp)->sb_versionnum == XFS_SB_VERSION_3) || \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_ATTRBIT)))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDATTR)
+void xfs_sb_version_addattr(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDATTR(sbp) xfs_sb_version_addattr(sbp)
+#else
+#define XFS_SB_VERSION_ADDATTR(sbp) \
+ ((sbp)->sb_versionnum = \
+ (((sbp)->sb_versionnum == XFS_SB_VERSION_1) ? \
+ XFS_SB_VERSION_2 : \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) ? \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_ATTRBIT) : \
+ (XFS_SB_VERSION_4 | XFS_SB_VERSION_ATTRBIT))))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASNLINK)
+int xfs_sb_version_hasnlink(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASNLINK(sbp) xfs_sb_version_hasnlink(sbp)
+#else
+#define XFS_SB_VERSION_HASNLINK(sbp) \
+ (((sbp)->sb_versionnum == XFS_SB_VERSION_3) || \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_NLINKBIT)))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDNLINK)
+void xfs_sb_version_addnlink(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDNLINK(sbp) xfs_sb_version_addnlink(sbp)
+#else
+#define XFS_SB_VERSION_ADDNLINK(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum <= XFS_SB_VERSION_2 ? \
+ XFS_SB_VERSION_3 : \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_NLINKBIT)))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASQUOTA)
+int xfs_sb_version_hasquota(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASQUOTA(sbp) xfs_sb_version_hasquota(sbp)
+#else
+#define XFS_SB_VERSION_HASQUOTA(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_QUOTABIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDQUOTA)
+void xfs_sb_version_addquota(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDQUOTA(sbp) xfs_sb_version_addquota(sbp)
+#else
+#define XFS_SB_VERSION_ADDQUOTA(sbp) \
+ ((sbp)->sb_versionnum = \
+ (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 ? \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_QUOTABIT) : \
+ (XFS_SB_VERSION_TONEW((sbp)->sb_versionnum) | \
+ XFS_SB_VERSION_QUOTABIT)))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASALIGN)
+int xfs_sb_version_hasalign(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASALIGN(sbp) xfs_sb_version_hasalign(sbp)
+#else
+#define XFS_SB_VERSION_HASALIGN(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_ALIGNBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBALIGN)
+void xfs_sb_version_subalign(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_SUBALIGN(sbp) xfs_sb_version_subalign(sbp)
+#else
+#define XFS_SB_VERSION_SUBALIGN(sbp) \
+ ((sbp)->sb_versionnum = \
+ XFS_SB_VERSION_TOOLD((sbp)->sb_versionnum & ~XFS_SB_VERSION_ALIGNBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASDALIGN)
+int xfs_sb_version_hasdalign(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASDALIGN(sbp) xfs_sb_version_hasdalign(sbp)
+#else
+#define XFS_SB_VERSION_HASDALIGN(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_DALIGNBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDDALIGN)
+int xfs_sb_version_adddalign(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDDALIGN(sbp) xfs_sb_version_adddalign(sbp)
+#else
+#define XFS_SB_VERSION_ADDDALIGN(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_DALIGNBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASSHARED)
+int xfs_sb_version_hasshared(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASSHARED(sbp) xfs_sb_version_hasshared(sbp)
+#else
+#define XFS_SB_VERSION_HASSHARED(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_SHAREDBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDSHARED)
+int xfs_sb_version_addshared(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDSHARED(sbp) xfs_sb_version_addshared(sbp)
+#else
+#define XFS_SB_VERSION_ADDSHARED(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_SHAREDBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBSHARED)
+int xfs_sb_version_subshared(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_SUBSHARED(sbp) xfs_sb_version_subshared(sbp)
+#else
+#define XFS_SB_VERSION_SUBSHARED(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum & ~XFS_SB_VERSION_SHAREDBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASDIRV2)
+int xfs_sb_version_hasdirv2(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASDIRV2(sbp) xfs_sb_version_hasdirv2(sbp)
+#else
+#define XFS_SB_VERSION_HASDIRV2(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_DIRV2BIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_HASEXTFLGBIT)
+int xfs_sb_version_hasextflgbit(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_HASEXTFLGBIT(sbp) xfs_sb_version_hasextflgbit(sbp)
+#else
+#define XFS_SB_VERSION_HASEXTFLGBIT(sbp) \
+ ((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4) && \
+ ((sbp)->sb_versionnum & XFS_SB_VERSION_EXTFLGBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_ADDEXTFLGBIT)
+int xfs_sb_version_addextflgbit(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_ADDEXTFLGBIT(sbp) xfs_sb_version_addextflgbit(sbp)
+#else
+#define XFS_SB_VERSION_ADDEXTFLGBIT(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum | XFS_SB_VERSION_EXTFLGBIT))
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_VERSION_SUBEXTFLGBIT)
+int xfs_sb_version_subextflgbit(xfs_sb_t *sbp);
+#define XFS_SB_VERSION_SUBEXTFLGBIT(sbp) xfs_sb_version_subextflgbit(sbp)
+#else
+#define XFS_SB_VERSION_SUBEXTFLGBIT(sbp) \
+ ((sbp)->sb_versionnum = \
+ ((sbp)->sb_versionnum & ~XFS_SB_VERSION_EXTFLGBIT))
+#endif
+
+/*
+ * end of superblock version macros
+ */
+
+#define XFS_SB_DADDR ((xfs_daddr_t)0) /* daddr in file system/ag */
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_SB_BLOCK)
+xfs_agblock_t xfs_sb_block(struct xfs_mount *mp);
+#define XFS_SB_BLOCK(mp) xfs_sb_block(mp)
+#else
+#define XFS_SB_BLOCK(mp) XFS_HDR_BLOCK(mp, XFS_SB_DADDR)
+#endif
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_HDR_BLOCK)
+xfs_agblock_t xfs_hdr_block(struct xfs_mount *mp, xfs_daddr_t d);
+#define XFS_HDR_BLOCK(mp,d) xfs_hdr_block(mp,d)
+#else
+#define XFS_HDR_BLOCK(mp,d) ((xfs_agblock_t)(XFS_BB_TO_FSBT(mp,d)))
+#endif
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DADDR_TO_FSB)
+xfs_fsblock_t xfs_daddr_to_fsb(struct xfs_mount *mp, xfs_daddr_t d);
+#define XFS_DADDR_TO_FSB(mp,d) xfs_daddr_to_fsb(mp,d)
+#else
+#define XFS_DADDR_TO_FSB(mp,d) \
+ XFS_AGB_TO_FSB(mp, XFS_DADDR_TO_AGNO(mp,d), XFS_DADDR_TO_AGBNO(mp,d))
+#endif
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_FSB_TO_DADDR)
+xfs_daddr_t xfs_fsb_to_daddr(struct xfs_mount *mp, xfs_fsblock_t fsbno);
+#define XFS_FSB_TO_DADDR(mp,fsbno) xfs_fsb_to_daddr(mp,fsbno)
+#else
+#define XFS_FSB_TO_DADDR(mp,fsbno) \
+ XFS_AGB_TO_DADDR(mp, XFS_FSB_TO_AGNO(mp,fsbno), \
+ XFS_FSB_TO_AGBNO(mp,fsbno))
+#endif
+
+/*
+ * File system block to basic block conversions.
+ */
+#define XFS_FSB_TO_BB(mp,fsbno) ((fsbno) << (mp)->m_blkbb_log)
+#define XFS_BB_TO_FSB(mp,bb) \
+ (((bb) + (XFS_FSB_TO_BB(mp,1) - 1)) >> (mp)->m_blkbb_log)
+#define XFS_BB_TO_FSBT(mp,bb) ((bb) >> (mp)->m_blkbb_log)
+#define XFS_BB_FSB_OFFSET(mp,bb) ((bb) & ((mp)->m_bsize - 1))
+
+/*
+ * File system block to byte conversions.
+ */
+#define XFS_FSB_TO_B(mp,fsbno) ((xfs_fsize_t)(fsbno) << \
+ (mp)->m_sb.sb_blocklog)
+#define XFS_B_TO_FSB(mp,b) \
+ ((((uint64_t)(b)) + (mp)->m_blockmask) >> (mp)->m_sb.sb_blocklog)
+#define XFS_B_TO_FSBT(mp,b) (((uint64_t)(b)) >> (mp)->m_sb.sb_blocklog)
+#define XFS_B_FSB_OFFSET(mp,b) ((b) & (mp)->m_blockmask)
+
+#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BUF_TO_SBP)
+xfs_sb_t *xfs_buf_to_sbp(struct xfs_buf *bp);
+#define XFS_BUF_TO_SBP(bp) xfs_buf_to_sbp(bp)
+#else
+#define XFS_BUF_TO_SBP(bp) ((xfs_sb_t *)XFS_BUF_PTR(bp))
+#endif
+
+#endif /* __XFS_SB_H__ */
diff --git a/libparted/fs/xfs/xfs_types.h b/libparted/fs/xfs/xfs_types.h
new file mode 100644
index 0000000..89a0d61
--- /dev/null
+++ b/libparted/fs/xfs/xfs_types.h
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 3 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * Further, this software is distributed without any warranty that it is
+ * free of the rightful claim of any third person regarding infringement
+ * or the like. Any license provided herein, whether implied or
+ * otherwise, applies only to this software file. Patent licenses, if
+ * any, provided herein do not apply to combinations of this program with
+ * other software, or any other product whatsoever.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
+ * Mountain View, CA 94043, or:
+ *
+ * http://www.sgi.com
+ *
+ * For further information regarding this notice, see:
+ *
+ * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ */
+#ifndef __XFS_TYPES_H__
+#define __XFS_TYPES_H__
+
+/*
+ * Some types are conditional based on the selected configuration.
+ * Set XFS_BIG_FILES=1 or 0 and XFS_BIG_FILESYSTEMS=1 or 0 depending
+ * on the desired configuration.
+ * XFS_BIG_FILES needs pgno_t to be 64 bits (64-bit kernels).
+ * XFS_BIG_FILESYSTEMS needs daddr_t to be 64 bits (N32 and 64-bit kernels).
+ *
+ * Expect these to be set from klocaldefs, or from the machine-type
+ * defs files for the normal case.
+ */
+
+#define XFS_BIG_FILES 1
+#define XFS_BIG_FILESYSTEMS 1
+
+typedef uint32_t xfs_agblock_t; /* blockno in alloc. group */
+typedef uint32_t xfs_extlen_t; /* extent length in blocks */
+typedef uint32_t xfs_agnumber_t; /* allocation group number */
+typedef int32_t xfs_extnum_t; /* # of extents in a file */
+typedef int16_t xfs_aextnum_t; /* # extents in an attribute fork */
+typedef int64_t xfs_fsize_t; /* bytes in a file */
+typedef uint64_t xfs_ufsize_t; /* unsigned bytes in a file */
+
+typedef int32_t xfs_suminfo_t; /* type of bitmap summary info */
+typedef int32_t xfs_rtword_t; /* word type for bitmap manipulations */
+
+typedef int64_t xfs_lsn_t; /* log sequence number */
+typedef int32_t xfs_tid_t; /* transaction identifier */
+
+typedef uint32_t xfs_dablk_t; /* dir/attr block number (in file) */
+typedef uint32_t xfs_dahash_t; /* dir/attr hash value */
+
+typedef uint16_t xfs_prid_t; /* prid_t truncated to 16bits in XFS */
+
+/*
+ * These types are 64 bits on disk but are either 32 or 64 bits in memory.
+ * Disk based types:
+ */
+typedef uint64_t xfs_dfsbno_t; /* blockno in filesystem (agno|agbno) */
+typedef uint64_t xfs_drfsbno_t; /* blockno in filesystem (raw) */
+typedef uint64_t xfs_drtbno_t; /* extent (block) in realtime area */
+typedef uint64_t xfs_dfiloff_t; /* block number in a file */
+typedef uint64_t xfs_dfilblks_t; /* number of blocks in a file */
+
+/*
+ * Memory based types are conditional.
+ */
+#if XFS_BIG_FILESYSTEMS
+typedef uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */
+typedef uint64_t xfs_rfsblock_t; /* blockno in filesystem (raw) */
+typedef uint64_t xfs_rtblock_t; /* extent (block) in realtime area */
+typedef int64_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */
+#else
+typedef uint32_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */
+typedef uint32_t xfs_rfsblock_t; /* blockno in filesystem (raw) */
+typedef uint32_t xfs_rtblock_t; /* extent (block) in realtime area */
+typedef int32_t xfs_srtblock_t; /* signed version of xfs_rtblock_t */
+#endif
+#if XFS_BIG_FILES
+typedef uint64_t xfs_fileoff_t; /* block number in a file */
+typedef int64_t xfs_sfiloff_t; /* signed block number in a file */
+typedef uint64_t xfs_filblks_t; /* number of blocks in a file */
+#else
+typedef uint32_t xfs_fileoff_t; /* block number in a file */
+typedef int32_t xfs_sfiloff_t; /* signed block number in a file */
+typedef uint32_t xfs_filblks_t; /* number of blocks in a file */
+#endif
+
+typedef uint8_t xfs_arch_t; /* architecutre of an xfs fs */
+
+/*
+ * Null values for the types.
+ */
+#define NULLDFSBNO ((xfs_dfsbno_t)-1)
+#define NULLDRFSBNO ((xfs_drfsbno_t)-1)
+#define NULLDRTBNO ((xfs_drtbno_t)-1)
+#define NULLDFILOFF ((xfs_dfiloff_t)-1)
+
+#define NULLFSBLOCK ((xfs_fsblock_t)-1)
+#define NULLRFSBLOCK ((xfs_rfsblock_t)-1)
+#define NULLRTBLOCK ((xfs_rtblock_t)-1)
+#define NULLFILEOFF ((xfs_fileoff_t)-1)
+
+#define NULLAGBLOCK ((xfs_agblock_t)-1)
+#define NULLAGNUMBER ((xfs_agnumber_t)-1)
+#define NULLEXTNUM ((xfs_extnum_t)-1)
+
+#define NULLCOMMITLSN ((xfs_lsn_t)-1)
+
+/*
+ * Max values for extlen, extnum, aextnum.
+ */
+#define MAXEXTLEN ((xfs_extlen_t)0x001fffff) /* 21 bits */
+#define MAXEXTNUM ((xfs_extnum_t)0x7fffffff) /* signed int */
+#define MAXAEXTNUM ((xfs_aextnum_t)0x7fff) /* signed short */
+
+/*
+ * MAXNAMELEN is the length (including the terminating null) of
+ * the longest permissible file (component) name.
+ */
+#define MAXNAMELEN 256
+
+typedef enum {
+ XFS_LOOKUP_EQi, XFS_LOOKUP_LEi, XFS_LOOKUP_GEi
+} xfs_lookup_t;
+
+typedef enum {
+ XFS_BTNUM_BNOi, XFS_BTNUM_CNTi, XFS_BTNUM_BMAPi, XFS_BTNUM_INOi,
+ XFS_BTNUM_MAX
+} xfs_btnum_t;
+
+
+#ifdef CONFIG_PROC_FS
+/*
+ * XFS global statistics
+ */
+struct xfsstats {
+# define XFSSTAT_END_EXTENT_ALLOC 4
+ uint32_t xs_allocx;
+ uint32_t xs_allocb;
+ uint32_t xs_freex;
+ uint32_t xs_freeb;
+# define XFSSTAT_END_ALLOC_BTREE (XFSSTAT_END_EXTENT_ALLOC+4)
+ uint32_t xs_abt_lookup;
+ uint32_t xs_abt_compare;
+ uint32_t xs_abt_insrec;
+ uint32_t xs_abt_delrec;
+# define XFSSTAT_END_BLOCK_MAPPING (XFSSTAT_END_ALLOC_BTREE+7)
+ uint32_t xs_blk_mapr;
+ uint32_t xs_blk_mapw;
+ uint32_t xs_blk_unmap;
+ uint32_t xs_add_exlist;
+ uint32_t xs_del_exlist;
+ uint32_t xs_look_exlist;
+ uint32_t xs_cmp_exlist;
+# define XFSSTAT_END_BLOCK_MAP_BTREE (XFSSTAT_END_BLOCK_MAPPING+4)
+ uint32_t xs_bmbt_lookup;
+ uint32_t xs_bmbt_compare;
+ uint32_t xs_bmbt_insrec;
+ uint32_t xs_bmbt_delrec;
+# define XFSSTAT_END_DIRECTORY_OPS (XFSSTAT_END_BLOCK_MAP_BTREE+4)
+ uint32_t xs_dir_lookup;
+ uint32_t xs_dir_create;
+ uint32_t xs_dir_remove;
+ uint32_t xs_dir_getdents;
+# define XFSSTAT_END_TRANSACTIONS (XFSSTAT_END_DIRECTORY_OPS+3)
+ uint32_t xs_trans_sync;
+ uint32_t xs_trans_async;
+ uint32_t xs_trans_empty;
+# define XFSSTAT_END_INODE_OPS (XFSSTAT_END_TRANSACTIONS+7)
+ uint32_t xs_ig_attempts;
+ uint32_t xs_ig_found;
+ uint32_t xs_ig_frecycle;
+ uint32_t xs_ig_missed;
+ uint32_t xs_ig_dup;
+ uint32_t xs_ig_reclaims;
+ uint32_t xs_ig_attrchg;
+# define XFSSTAT_END_LOG_OPS (XFSSTAT_END_INODE_OPS+5)
+ uint32_t xs_log_writes;
+ uint32_t xs_log_blocks;
+ uint32_t xs_log_noiclogs;
+ uint32_t xs_log_force;
+ uint32_t xs_log_force_sleep;
+# define XFSSTAT_END_TAIL_PUSHING (XFSSTAT_END_LOG_OPS+10)
+ uint32_t xs_try_logspace;
+ uint32_t xs_sleep_logspace;
+ uint32_t xs_push_ail;
+ uint32_t xs_push_ail_success;
+ uint32_t xs_push_ail_pushbuf;
+ uint32_t xs_push_ail_pinned;
+ uint32_t xs_push_ail_locked;
+ uint32_t xs_push_ail_flushing;
+ uint32_t xs_push_ail_restarts;
+ uint32_t xs_push_ail_flush;
+# define XFSSTAT_END_WRITE_CONVERT (XFSSTAT_END_TAIL_PUSHING+2)
+ uint32_t xs_xstrat_quick;
+ uint32_t xs_xstrat_split;
+# define XFSSTAT_END_READ_WRITE_OPS (XFSSTAT_END_WRITE_CONVERT+2)
+ uint32_t xs_write_calls;
+ uint32_t xs_read_calls;
+# define XFSSTAT_END_ATTRIBUTE_OPS (XFSSTAT_END_READ_WRITE_OPS+4)
+ uint32_t xs_attr_get;
+ uint32_t xs_attr_set;
+ uint32_t xs_attr_remove;
+ uint32_t xs_attr_list;
+# define XFSSTAT_END_QUOTA_OPS (XFSSTAT_END_ATTRIBUTE_OPS+8)
+ uint32_t xs_qm_dqreclaims;
+ uint32_t xs_qm_dqreclaim_misses;
+ uint32_t xs_qm_dquot_dups;
+ uint32_t xs_qm_dqcachemisses;
+ uint32_t xs_qm_dqcachehits;
+ uint32_t xs_qm_dqwants;
+ uint32_t xs_qm_dqshake_reclaims;
+ uint32_t xs_qm_dqinact_reclaims;
+# define XFSSTAT_END_INODE_CLUSTER (XFSSTAT_END_QUOTA_OPS+3)
+ uint32_t xs_iflush_count;
+ uint32_t xs_icluster_flushcnt;
+ uint32_t xs_icluster_flushinode;
+# define XFSSTAT_END_VNODE_OPS (XFSSTAT_END_INODE_CLUSTER+8)
+ uint32_t vn_active; /* # vnodes not on free lists */
+ uint32_t vn_alloc; /* # times vn_alloc called */
+ uint32_t vn_get; /* # times vn_get called */
+ uint32_t vn_hold; /* # times vn_hold called */
+ uint32_t vn_rele; /* # times vn_rele called */
+ uint32_t vn_reclaim; /* # times vn_reclaim called */
+ uint32_t vn_remove; /* # times vn_remove called */
+ uint32_t vn_free; /* # times vn_free called */
+ struct xfsstats_xpc {
+ uint64_t xs_xstrat_bytes;
+ uint64_t xs_write_bytes;
+ uint64_t xs_read_bytes;
+ } xpc;
+} xfsstats;
+
+# define XFS_STATS_INC(count) ( xfsstats.##count ++ )
+# define XFS_STATS_DEC(count) ( xfsstats.##count -- )
+# define XFS_STATS_ADD(count, inc) ( xfsstats.##count += (inc) )
+# define XFS_STATS64_INC(count) ( xfsstats.xpc.##count ++ )
+# define XFS_STATS64_ADD(count, inc) ( xfsstats.xpc.##count += (inc) )
+#else /* !CONFIG_PROC_FS */
+# define XFS_STATS_INC(count)
+# define XFS_STATS_DEC(count)
+# define XFS_STATS_ADD(count, inc)
+# define XFS_STATS64_INC(count)
+# define XFS_STATS64_ADD(count, inc)
+#endif /* !CONFIG_PROC_FS */
+
+
+#ifdef __KERNEL__
+
+/* juggle IRIX device numbers - still used in ondisk structures */
+
+#define IRIX_DEV_BITSMAJOR 14
+#define IRIX_DEV_BITSMINOR 18
+#define IRIX_DEV_MAXMAJ 0x1ff
+#define IRIX_DEV_MAXMIN 0x3ffff
+#define IRIX_DEV_MAJOR(dev) ((int)(((unsigned)(dev)>>IRIX_DEV_BITSMINOR) \
+ & IRIX_DEV_MAXMAJ))
+#define IRIX_DEV_MINOR(dev) ((int)((dev)&IRIX_DEV_MAXMIN))
+#define IRIX_MKDEV(major,minor) ((xfs_dev_t)(((major)<<IRIX_DEV_BITSMINOR) \
+ | (minor&IRIX_DEV_MAXMIN)))
+
+#define IRIX_DEV_TO_KDEVT(dev) MKDEV(IRIX_DEV_MAJOR(dev),IRIX_DEV_MINOR(dev))
+#define IRIX_DEV_TO_DEVT(dev) ((IRIX_DEV_MAJOR(dev)<<8)|IRIX_DEV_MINOR(dev))
+
+/* __psint_t is the same size as a pointer */
+#if (BITS_PER_LONG == 32)
+typedef int32_t __psint_t;
+typedef uint32_t __psunsigned_t;
+#elif (BITS_PER_LONG == 64)
+typedef int64_t __psint_t;
+typedef uint64_t __psunsigned_t;
+#else
+#error BITS_PER_LONG must be 32 or 64
+#endif
+
+
+/*
+ * struct for passing owner/requestor id
+ */
+typedef struct flid {
+#ifdef CELL_CAPABLE
+ pid_t fl_pid;
+ sysid_t fl_sysid;
+#endif
+} flid_t;
+
+#endif /* __KERNEL__ */
+
+#endif /* !__XFS_TYPES_H */
diff --git a/libparted/labels/Makefile.am b/libparted/labels/Makefile.am
new file mode 100644
index 0000000..edc3860
--- /dev/null
+++ b/libparted/labels/Makefile.am
@@ -0,0 +1,60 @@
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+if COMPILE_FOR_S390
+S390_SRCS = dasd.c fdasd.c vtoc.c
+else
+S390_SRCS =
+endif
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libparted
+noinst_LTLIBRARIES = liblabels.la
+
+liblabels_la_SOURCES = \
+ $(S390_SRCS) \
+ aix.c \
+ atari.c \
+ bsd.c \
+ dos.c \
+ dvh.c \
+ dvh.h \
+ efi_crc32.c \
+ gpt.c \
+ loop.c \
+ mac.c \
+ misc.h \
+ pc98.c \
+ pt-common.h \
+ pt-tools.c \
+ pt-tools.h \
+ rdb.c \
+ sun.c
+
+liblabels_la_LIBADD = $(OS_LIBS) $(INTLLIBS) $(LIBICONV)
+
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+
+# Included by 'pt-tools.c', so needs to be built early.
+BUILT_SOURCES = pt-limit.c
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+# DOn't add this to '_SOURCES', because it's not to be compiled!
+EXTRA_DIST= pt-limit.c
+
+GPERF = gperf
+GPERF_OPTIONS = \
+ -C -N pt_limit_lookup -n -t -s 6 -k '*' --language=ANSI-C
+
+pt-limit.c: pt-limit.gperf
+ rm -f $@ $@-tmp
+ $(GPERF) $(GPERF_OPTIONS) $< \
+ | perl -ne '/__GNUC_STDC_INLINE__/ and print "static\n"; print' \
+ > $@-tmp
+ chmod a-w $@-tmp
+ mv $@-tmp $@
+EXTRA_DIST += pt-limit.gperf
diff --git a/libparted/labels/Makefile.in b/libparted/labels/Makefile.in
new file mode 100644
index 0000000..cbf6ef4
--- /dev/null
+++ b/libparted/labels/Makefile.in
@@ -0,0 +1,2063 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libparted/labels
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+liblabels_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__liblabels_la_SOURCES_DIST = dasd.c fdasd.c vtoc.c aix.c atari.c \
+ bsd.c dos.c dvh.c dvh.h efi_crc32.c gpt.c loop.c mac.c misc.h \
+ pc98.c pt-common.h pt-tools.c pt-tools.h rdb.c sun.c
+@COMPILE_FOR_S390_TRUE@am__objects_1 = dasd.lo fdasd.lo vtoc.lo
+am_liblabels_la_OBJECTS = $(am__objects_1) aix.lo atari.lo bsd.lo \
+ dos.lo dvh.lo efi_crc32.lo gpt.lo loop.lo mac.lo pc98.lo \
+ pt-tools.lo rdb.lo sun.lo
+liblabels_la_OBJECTS = $(am_liblabels_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/aix.Plo ./$(DEPDIR)/atari.Plo \
+ ./$(DEPDIR)/bsd.Plo ./$(DEPDIR)/dasd.Plo ./$(DEPDIR)/dos.Plo \
+ ./$(DEPDIR)/dvh.Plo ./$(DEPDIR)/efi_crc32.Plo \
+ ./$(DEPDIR)/fdasd.Plo ./$(DEPDIR)/gpt.Plo ./$(DEPDIR)/loop.Plo \
+ ./$(DEPDIR)/mac.Plo ./$(DEPDIR)/pc98.Plo \
+ ./$(DEPDIR)/pt-tools.Plo ./$(DEPDIR)/rdb.Plo \
+ ./$(DEPDIR)/sun.Plo ./$(DEPDIR)/vtoc.Plo
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(liblabels_la_SOURCES)
+DIST_SOURCES = $(am__liblabels_la_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+@COMPILE_FOR_S390_FALSE@S390_SRCS =
+@COMPILE_FOR_S390_TRUE@S390_SRCS = dasd.c fdasd.c vtoc.c
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include \
+ -I$(top_srcdir)/libparted
+
+noinst_LTLIBRARIES = liblabels.la
+liblabels_la_SOURCES = \
+ $(S390_SRCS) \
+ aix.c \
+ atari.c \
+ bsd.c \
+ dos.c \
+ dvh.c \
+ dvh.h \
+ efi_crc32.c \
+ gpt.c \
+ loop.c \
+ mac.c \
+ misc.h \
+ pc98.c \
+ pt-common.h \
+ pt-tools.c \
+ pt-tools.h \
+ rdb.c \
+ sun.c
+
+liblabels_la_LIBADD = $(OS_LIBS) $(INTLLIBS) $(LIBICONV)
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+
+# Included by 'pt-tools.c', so needs to be built early.
+BUILT_SOURCES = pt-limit.c
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+# DOn't add this to '_SOURCES', because it's not to be compiled!
+EXTRA_DIST = pt-limit.c pt-limit.gperf
+GPERF = gperf
+GPERF_OPTIONS = \
+ -C -N pt_limit_lookup -n -t -s 6 -k '*' --language=ANSI-C
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libparted/labels/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libparted/labels/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
+
+liblabels.la: $(liblabels_la_OBJECTS) $(liblabels_la_DEPENDENCIES) $(EXTRA_liblabels_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(liblabels_la_OBJECTS) $(liblabels_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atari.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dasd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dos.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvh.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/efi_crc32.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdasd.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpt.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mac.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pc98.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pt-tools.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdb.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sun.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vtoc.Plo@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/aix.Plo
+ -rm -f ./$(DEPDIR)/atari.Plo
+ -rm -f ./$(DEPDIR)/bsd.Plo
+ -rm -f ./$(DEPDIR)/dasd.Plo
+ -rm -f ./$(DEPDIR)/dos.Plo
+ -rm -f ./$(DEPDIR)/dvh.Plo
+ -rm -f ./$(DEPDIR)/efi_crc32.Plo
+ -rm -f ./$(DEPDIR)/fdasd.Plo
+ -rm -f ./$(DEPDIR)/gpt.Plo
+ -rm -f ./$(DEPDIR)/loop.Plo
+ -rm -f ./$(DEPDIR)/mac.Plo
+ -rm -f ./$(DEPDIR)/pc98.Plo
+ -rm -f ./$(DEPDIR)/pt-tools.Plo
+ -rm -f ./$(DEPDIR)/rdb.Plo
+ -rm -f ./$(DEPDIR)/sun.Plo
+ -rm -f ./$(DEPDIR)/vtoc.Plo
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/aix.Plo
+ -rm -f ./$(DEPDIR)/atari.Plo
+ -rm -f ./$(DEPDIR)/bsd.Plo
+ -rm -f ./$(DEPDIR)/dasd.Plo
+ -rm -f ./$(DEPDIR)/dos.Plo
+ -rm -f ./$(DEPDIR)/dvh.Plo
+ -rm -f ./$(DEPDIR)/efi_crc32.Plo
+ -rm -f ./$(DEPDIR)/fdasd.Plo
+ -rm -f ./$(DEPDIR)/gpt.Plo
+ -rm -f ./$(DEPDIR)/loop.Plo
+ -rm -f ./$(DEPDIR)/mac.Plo
+ -rm -f ./$(DEPDIR)/pc98.Plo
+ -rm -f ./$(DEPDIR)/pt-tools.Plo
+ -rm -f ./$(DEPDIR)/rdb.Plo
+ -rm -f ./$(DEPDIR)/sun.Plo
+ -rm -f ./$(DEPDIR)/vtoc.Plo
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLTLIBRARIES \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+pt-limit.c: pt-limit.gperf
+ rm -f $@ $@-tmp
+ $(GPERF) $(GPERF_OPTIONS) $< \
+ | perl -ne '/__GNUC_STDC_INLINE__/ and print "static\n"; print' \
+ > $@-tmp
+ chmod a-w $@-tmp
+ mv $@-tmp $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libparted/labels/aix.c b/libparted/labels/aix.c
new file mode 100644
index 0000000..8adb4db
--- /dev/null
+++ b/libparted/labels/aix.c
@@ -0,0 +1,237 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Matt Wilson <msw@redhat.com>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define AIX_LABEL_MAGIC (0xc9c2d4c1UL)
+#define MAX_TOTAL_PART 16
+
+static PedDiskType aix_disk_type;
+
+static int
+aix_probe (const PedDevice *dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+ bool found = PED_BE32_TO_CPU(*(uint32_t *)label) == AIX_LABEL_MAGIC;
+ free (label);
+ return found;
+}
+
+static PedDisk*
+aix_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+
+ disk = _ped_disk_alloc (dev, &aix_disk_type);
+ if (!disk)
+ return NULL;
+
+ return disk;
+}
+
+static PedDisk*
+aix_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &aix_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ return new_disk;
+}
+
+static void
+aix_free (PedDisk *disk)
+{
+ _ped_disk_free (disk);
+}
+
+static int
+aix_read (PedDisk* disk)
+{
+ ped_disk_delete_all (disk);
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for reading AIX disk labels is "
+ "is not implemented yet."));
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+static int
+aix_write (const PedDisk* disk)
+{
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for writing AIX disk labels is "
+ "is not implemented yet."));
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+aix_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for adding partitions to AIX disk "
+ "labels is not implemented yet."));
+ return NULL;
+}
+
+static PedPartition*
+aix_partition_duplicate (const PedPartition* part)
+{
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for duplicating partitions in AIX "
+ "disk labels is not implemented yet."));
+ return NULL;
+}
+
+static void
+aix_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ _ped_partition_free (part);
+}
+
+static int
+aix_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for setting system type of partitions "
+ "in AIX disk labels is not implemented yet."));
+ return 0;
+}
+
+static int
+aix_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ ped_exception_throw (PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Support for setting flags "
+ "in AIX disk labels is not implemented yet."));
+ return 0;
+}
+
+static int _GL_ATTRIBUTE_CONST
+aix_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ return 0;
+}
+
+
+static int
+aix_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ return 0;
+}
+
+
+static int
+aix_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return 4;
+}
+
+static bool
+aix_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = MAX_TOTAL_PART;
+ return true;
+}
+
+static int _GL_ATTRIBUTE_PURE
+aix_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+aix_partition_enumerate (PedPartition* part)
+{
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+aix_alloc_metadata (PedDisk* disk)
+{
+ return 1;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (aix)
+
+static PedDiskOps aix_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (aix_write),
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+
+ PT_op_function_initializers (aix)
+};
+
+static PedDiskType aix_disk_type = {
+ next: NULL,
+ name: "aix",
+ ops: &aix_disk_ops,
+ features: 0
+};
+
+void
+ped_disk_aix_init ()
+{
+ ped_disk_type_register (&aix_disk_type);
+}
+
+void
+ped_disk_aix_done ()
+{
+ ped_disk_type_unregister (&aix_disk_type);
+}
diff --git a/libparted/labels/atari.c b/libparted/labels/atari.c
new file mode 100644
index 0000000..8ab3720
--- /dev/null
+++ b/libparted/labels/atari.c
@@ -0,0 +1,1975 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ atari.c - libparted module to manipulate Atari partition tables.
+ Copyright (C) 2000-2001, 2004, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Guillaume Knispel <k_guillaume@libertysurf.fr>
+ John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
+*/
+
+/*
+ Documentation :
+ README file of atari-fdisk
+ atari-fdisk source code
+ Linux atari partitions parser source code
+ ( fs/partitions/atari.[ch] )
+*/
+
+#include <config.h>
+
+#include <string.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <string.h>
+#include <locale.h>
+#include <stdint.h>
+#include <ctype.h>
+#include <stddef.h>
+
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+
+/********************** Atari data and structure stuff **********************/
+
+#define BOOTABLE_CKSUM 0x1234
+#define NONBOOT_CKSUM 0x4321
+
+#define GEM_MAX ((32*1024*1024)/PED_SECTOR_SIZE_DEFAULT)
+
+#define PART_FLAG_USED 0x01
+#define PART_FLAG_BOOT_GEM 0x80 /* GEMDOS */
+#define PART_FLAG_BOOT_ASV 0x40 /* Atari System V */
+#define PART_FLAG_BOOT_BSD 0x20 /* Net(?)BSD */
+#define PART_FLAG_BOOT_LNX 0x10 /* Linux */
+#define PART_FLAG_BOOT_UNK 0x08 /* unknown / other */
+
+#define N_AHDI 4
+#define N_ICD 8
+
+#define MAXIMUM_PARTS 64
+
+/* what we put instead of id, start and size in empty */
+/* partition tables, to be able to detect it */
+#define SIGNATURE_EMPTY_TABLE "PARTEDATARI"
+#define SIGNATURE_EMPTY_SIZE 11
+
+/* to be compared to the last two bytes of 1st sector (Big Endian) */
+static const uint16_t atr_forbidden_sign[] = {
+ 0x55AA,
+ 0
+};
+
+static const char *atr_known_icd_pid[] = {
+ "BGM", "GEM", "LNX", "SWP", "RAW", NULL
+};
+
+/* static const char *atr_known_pid[] = { */
+/* "BGM", "GEM", "LNX", "MAC", "MIX", "MNX", "RAW", "SWP", "UNX", */
+/* "F32", "SV4", NULL */
+/* }; */
+
+struct _AtariPartID2BootFlag {
+ const char pid[4];
+ uint8_t flag;
+};
+typedef struct _AtariPartID2BootFlag AtariPartID2BootFlag;
+
+static AtariPartID2BootFlag atr_pid2bf[] = {
+ { "GEM", PART_FLAG_BOOT_GEM },
+ { "BGM", PART_FLAG_BOOT_GEM },
+ { "UNX", PART_FLAG_BOOT_ASV },
+ { "LNX", PART_FLAG_BOOT_LNX },
+ { "", PART_FLAG_BOOT_UNK },
+};
+
+struct _AtariFS2PartId {
+ const char* fs;
+ const char pid[4];
+ PedSector max_sectors;
+};
+typedef struct _AtariFS2PartId AtariFS2PartId;
+
+static AtariFS2PartId atr_fs2pid[] = {
+/* Other ID are available : MIX MNX <= minix
+ UNX <= Atari SysV Unix
+ SV4 <= Univ System 4 */
+ { "ext2", "LNX", INT32_MAX },
+ { "ext3", "LNX", INT32_MAX },
+ { "fat16", "GEM", GEM_MAX }, /* small partitions */
+ { "fat16", "BGM", INT32_MAX }, /* big partitions */
+ { "fat32", "F32", INT32_MAX },
+ { "hfs", "MAC", INT32_MAX },
+ { "hfs+", "MAC", INT32_MAX },
+ { "hfsx", "MAC", INT32_MAX },
+ { "jfs", "LNX", INT32_MAX },
+ { "linux-swap", "SWP", INT32_MAX },
+ { "reiserfs", "LNX", INT32_MAX },
+ { "hp-ufs", "LNX", INT32_MAX },
+ { "sun-ufs", "LNX", INT32_MAX },
+ { "xfs", "LNX", INT32_MAX },
+ { "ntfs", "RAW", INT32_MAX },
+ { "", "RAW", INT32_MAX }, /* default entry */
+ { NULL, "" , 0 } /* end of list */
+};
+
+struct __attribute__ ((packed)) _AtariRawPartition {
+ uint8_t flag; /* bit 0: active; bit 7: bootable */
+ union {
+ uint8_t empty[11]; /* Empty table */
+ struct __attribute__ ((packed)) {
+ uint8_t id[3]; /* "GEM", "BGM", "XGM", ... */
+ uint32_t start; /* start of partition */
+ uint32_t size; /* length of partition */
+ };
+ };
+};
+typedef struct _AtariRawPartition AtariRawPartition;
+
+struct __attribute__ ((packed,aligned(2))) _AtariRawTable {
+ uint8_t boot_code[0x156]; /* room for boot code */
+ AtariRawPartition icd_part[N_ICD]; /* info for ICD-partitions 5..12 */
+ uint8_t unused[0xc];
+ uint32_t hd_size; /* size of disk in blocks */
+ AtariRawPartition part[N_AHDI]; /* the four primary partitions */
+ uint32_t bsl_start; /* start of bad sector list */
+ uint32_t bsl_count; /* length of bad sector list */
+ uint16_t checksum; /* checksum for bootable disks */
+};
+typedef struct _AtariRawTable AtariRawTable;
+
+typedef enum {
+ FMT_AHDI = 0, /* AHDI v1 compatible, no ICD and no XGM */
+ FMT_XGM = 1, /* AHDI v3 with XGM / this disable ICD */
+ FMT_ICD = 2 /* ICD detected / requested because more than 4 prim */
+ /* no XGM allowed */
+} AtrFmt;
+
+struct _AtariDisk {
+ AtrFmt format;
+ int has_been_read; /* actually means has been read or written... */
+ uint32_t bsl_start; /* first sector of the Bad Sectors List */
+ uint32_t bsl_count; /* number of sectors of the BSL */
+ uint8_t HDX_comp; /* if set to one, atari_write will initialize */
+ /* the bsl area */
+};
+typedef struct _AtariDisk AtariDisk;
+
+struct _AtariPart {
+ char part_id[4]; /* ASCIIZ */
+ char icd_id[4]; /* Linux only parse a limited set of ID */
+ /* in ICD (why???), so everything else */
+ /* is translated to RAW. */
+ uint8_t flag; /* without bit 0 (entry used) */
+};
+typedef struct _AtariPart AtariPart;
+
+/* set by initialisation code to C locale */
+static locale_t atr_c_locale;
+
+static PedDiskType atari_disk_type;
+
+
+
+/******************************** Atari Code ********************************/
+
+#define ATARI_DISK(disk) ((AtariDisk*)((disk)->disk_specific))
+#define ATARI_PART(part) ((AtariPart*)((part)->disk_specific))
+
+#define atr_pid_eq(a,b) (!memcmp( (a), (b), 3 ))
+
+#define atr_pid_assign(a, b) (memcpy ( (a), (b), 3 ))
+
+#define atr_part_used(part) (((part)->flag) & PART_FLAG_USED)
+
+static int
+atr_start_size_correct (uint32_t start, uint32_t size, uint32_t hd_size)
+{
+ uint32_t end = start + size;
+
+ return end >= start
+ && 0 < start && start <= hd_size
+ && 0 < size && size <= hd_size
+ && 0 < end && end <= hd_size;
+}
+
+static int
+atr_part_correct (AtariRawPartition* part, uint32_t hd_size)
+{
+ uint32_t start, size;
+
+ start = PED_BE32_TO_CPU (part->start);
+ size = PED_BE32_TO_CPU (part->size);
+
+ return isalnum_l(part->id[0], atr_c_locale)
+ && isalnum_l(part->id[1], atr_c_locale)
+ && isalnum_l(part->id[2], atr_c_locale)
+ && atr_start_size_correct (start, size, hd_size);
+}
+
+static int _GL_ATTRIBUTE_PURE
+atr_pid_known (const char* pid, const char** pid_list)
+{
+ for (; *pid_list; pid_list++) {
+ if (atr_pid_eq(pid, *pid_list))
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Recognize Parted signature in an AHDI entry, used to
+ * identify empty Atari partition tables */
+static int
+atr_is_signature_entry (AtariRawPartition* part)
+{
+ return part->flag == 0
+ && !memcmp (part->empty, SIGNATURE_EMPTY_TABLE,
+ SIGNATURE_EMPTY_SIZE );
+}
+
+/* Set Parted signature in an AHDI entry */
+static void
+atr_put_signature_entry (AtariRawPartition* part)
+{
+ part->flag = 0;
+ memcpy (part->empty, SIGNATURE_EMPTY_TABLE, SIGNATURE_EMPTY_SIZE);
+}
+
+#define atr_part_known(part, pid_list) (atr_pid_known ((part)->id, pid_list))
+
+#define atr_part_valid(part, sz) (atr_part_used(part)\
+ && atr_part_correct((part), (sz)))
+#define atr_part_trash(part, sz) (atr_part_used(part)\
+ && !atr_part_correct((part), (sz)))
+
+/* Check if this device can be used with an Atari label */
+static int
+atr_can_use_dev (const PedDevice *dev)
+{
+ /* i really don't know how atari behave with non 512 bytes */
+ /* sectors... */
+ if (dev->sector_size != PED_SECTOR_SIZE_DEFAULT) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't use Atari partition tables on disks with a "
+ "sector size not equal to %d bytes."),
+ (int)PED_SECTOR_SIZE_DEFAULT );
+ return 0;
+ }
+
+ /* the format isn't well defined enough to support > 0x7FFFFFFF */
+ /* sectors */
+ if (dev->length > INT32_MAX) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't use Atari partition tables on disks with more "
+ "than %d sectors."),
+ INT32_MAX );
+ return 0;
+ }
+
+ return 1;
+}
+
+/*
+ * The Atari disk label doesn't have any magic id
+ * so we must completely parse the layout to be sure
+ * we are really dealing with it.
+ */
+static int
+atari_probe (const PedDevice *dev)
+{
+ AtariRawTable table;
+ uint32_t rs_hd_size, parts, exts;
+ int valid_count, xgm_part, xgm_num, i;
+ int num_sign, total_count = 0;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (sizeof(table) == 512);
+
+ /* Device Spec ok for Atari label? */
+ if (!atr_can_use_dev (dev))
+ return 0;
+
+ /* read the root sector */
+ if (!ped_device_read (dev, &table, 0, 1))
+ return 0;
+
+ /* number of sectors stored in the root sector > device length ? */
+ /* => just reject the Atari disk label */
+ rs_hd_size = PED_BE32_TO_CPU (table.hd_size);
+ if (rs_hd_size > dev->length
+ || rs_hd_size < 2)
+ return 0;
+
+ /* check the BSL fields */
+ if ((table.bsl_start || table.bsl_count)
+ && !atr_start_size_correct (PED_BE32_TO_CPU (table.bsl_start),
+ PED_BE32_TO_CPU (table.bsl_count),
+ rs_hd_size ) )
+ return 0;
+
+ /* scan the main AHDI fields */
+ num_sign = 0; xgm_num = 0;
+ valid_count = 0; xgm_part = 0;
+ for (i = 0; i < N_AHDI; i++) {
+ if (atr_part_valid (&table.part[i], rs_hd_size)) {
+ valid_count++;
+ total_count++;
+ if (atr_pid_eq(table.part[i].id, "XGM")) {
+ xgm_part++;
+ xgm_num = i;
+ }
+ } else if (atr_part_trash (&table.part[i], rs_hd_size)) {
+ return 0;
+ }
+ if (atr_is_signature_entry (&table.part[i]))
+ num_sign++;
+ }
+
+ /* no way to reliably detect empty Atari disk labels if
+ * they aren't using parted signature in 4 prim fields
+ * && reject multi XGM labels because Parted can't handle
+ * multiple extended partitions
+ * && reject if xgm partition in slot 0 because not allowed */
+ if ((!valid_count && num_sign != N_AHDI)
+ || xgm_part > 1
+ || (xgm_part == 1 && xgm_num == 0) )
+ return 0;
+
+ /* check coherency of each logical partitions and ARS */
+ if (xgm_part) { /* ! WARNING ! reuses "table" */
+ /* we must allow empty ext partition even if they're */
+ /* not valid because parted write the layout to the HD */
+ /* at each operation, and we can't create ext and log */
+ /* at the same time */
+ int empty_ars_allowed = 1;
+
+ parts = exts = PED_BE32_TO_CPU (table.part[xgm_num].start);
+ while (1) {
+ if (!ped_device_read (dev, &table, parts, 1))
+ return 0;
+
+ for (i = 0; i < N_AHDI-1; ++i) {
+ if (atr_part_used (&table.part[i]))
+ break;
+ }
+
+ /* we allow the ext part to be empty (see above) */
+ if (i == N_AHDI-1 && empty_ars_allowed)
+ break;
+
+ /* data partition must be in slot 0, 1 or 2 */
+ if (i == N_AHDI-1
+ || !atr_part_correct (&table.part[i], rs_hd_size
+ - parts )
+ || atr_pid_eq (table.part[i].id, "XGM"))
+ return 0;
+
+ /* If there is at least one logical partition */
+ /* then next ARS should not be empty */
+ empty_ars_allowed = 0;
+
+ total_count++;
+ if (total_count > MAXIMUM_PARTS) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Too many Atari partitions detected. "
+ " Maybe there is a loop in the XGM "
+ "linked list. Aborting.") );
+ return 0;
+ }
+
+ /* end of logical partitions? */
+ if (!atr_part_used (&table.part[i+1]))
+ break;
+
+ /* is this really the descriptor of the next ARS? */
+ if (!atr_part_correct (&table.part[i+1], rs_hd_size
+ - exts )
+ || !atr_pid_eq (table.part[i+1].id, "XGM"))
+ return 0;
+
+ parts = exts + PED_BE32_TO_CPU (table.part[i+1].start);
+ }
+ } /* no XGM so try ICD */
+ else if (atr_part_valid (&table.icd_part[0], rs_hd_size)
+ && atr_part_known (&table.icd_part[0], atr_known_icd_pid)) {
+ for (i = 1; i < N_ICD; i++) {
+ if (atr_part_trash (&table.icd_part[i], rs_hd_size))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static void
+atr_disk_reset (AtariDisk* atr_disk)
+{
+ /* Empty partition table => only AHDI needed right now */
+ atr_disk->format = FMT_AHDI;
+ /* The disk is not in sync with the actual content of the label */
+ atr_disk->has_been_read = 0;
+ /* Create an empty BSL for HDX compatibility */
+ atr_disk->bsl_start = 1;
+ atr_disk->bsl_count = 1;
+ atr_disk->HDX_comp = 1;
+}
+
+/*
+ * Must set up the PedDisk and the associated AtariDisk as if
+ * the user is doing mklabel, since in this case atari_alloc
+ * is called alone whereas when reading an existing partition
+ * table atari_read is called after atari_alloc and can overwrite
+ * the settings.
+ */
+static PedDisk*
+atari_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ AtariDisk* atr_disk;
+
+ PED_ASSERT (dev != NULL);
+
+ if (!atr_can_use_dev (dev)
+ || !(disk = _ped_disk_alloc (dev, &atari_disk_type)))
+ return NULL;
+
+ if (!(disk->disk_specific = atr_disk = ped_malloc (sizeof (AtariDisk))))
+ goto error_free_disk;
+
+ atr_disk_reset (atr_disk);
+
+ return disk;
+
+error_free_disk:
+ free (disk);
+ return NULL;
+}
+
+static PedDisk*
+atari_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ AtariDisk* old_atr_dsk;
+ AtariDisk* new_atr_dsk;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+
+ old_atr_dsk = ATARI_DISK (disk);
+ if (!(new_disk = ped_disk_new_fresh (disk->dev, &atari_disk_type)))
+ return NULL;
+ new_atr_dsk = ATARI_DISK (new_disk);
+
+ memcpy (new_atr_dsk, old_atr_dsk, sizeof(*old_atr_dsk));
+
+ return new_disk;
+}
+
+static void
+atari_free (PedDisk* disk)
+{
+ AtariDisk* atr_disk;
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ atr_disk = ATARI_DISK (disk);
+
+ _ped_disk_free (disk);
+ free (atr_disk);
+}
+
+/* Warning : ID not ASCIIZ but 3 chars long */
+static void
+atr_part_sysraw (PedPartition* part, const char* id, uint8_t flag)
+{
+ AtariPart* atr_part = ATARI_PART (part);
+
+ atr_part->flag = flag & ~PART_FLAG_USED;
+
+ atr_pid_assign (atr_part->part_id, id);
+ atr_part->part_id[3] = 0;
+
+ if (atr_pid_known (id, atr_known_icd_pid)) {
+ atr_pid_assign (atr_part->icd_id, id);
+ atr_part->icd_id[3] = 0;
+ } else {
+ atr_pid_assign (atr_part->icd_id, "RAW");
+ atr_part->icd_id[3] = 0;
+ }
+}
+
+static int
+atr_parse_add_rawpart (PedDisk* disk, PedPartitionType type, PedSector st_off,
+ int num, const AtariRawPartition* rawpart )
+{
+ PedSector start, end;
+ PedPartition* part;
+ PedConstraint* const_exact;
+ int added;
+
+ start = st_off + PED_BE32_TO_CPU (rawpart->start);
+ end = start + PED_BE32_TO_CPU (rawpart->size) - 1;
+
+ part = ped_partition_new (disk, type, NULL, start, end);
+ if (!part)
+ return 0;
+
+ /*part->num = num;*/ /* Enumeration will take care of that */
+ part->num = -1; /* Indeed we can't enumerate here
+ * because the enumerate function uses
+ * -1 do detect new partition being
+ * inserted and update the atrdisk->format */
+ if (type != PED_PARTITION_EXTENDED)
+ part->fs_type = ped_file_system_probe (&part->geom);
+ else
+ part->fs_type = NULL;
+ atr_part_sysraw (part, rawpart->id, rawpart->flag);
+
+ const_exact = ped_constraint_exact (&part->geom);
+ added = ped_disk_add_partition (disk, part, const_exact);
+ ped_constraint_destroy (const_exact);
+ if (!added) {
+ ped_partition_destroy (part);
+ return 0;
+ }
+
+ PED_ASSERT (part->num == num);
+ return 1;
+}
+
+/*
+ * Read the chained list of logical partitions.
+ * exts points to the first Auxiliary Root Sector, at the start
+ * of the extended partition.
+ * In each ARS one partition entry describes to the logical partition
+ * (start relative to the ARS position) and the next entry with ID "XGM"
+ * points to the next ARS (start relative to exts).
+ */
+static int
+atr_read_logicals (PedDisk* disk, PedSector exts, int* pnum)
+{
+ AtariRawTable table;
+ PedSector parts = exts;
+ int i, empty_ars_allowed = 1;
+
+ while (1) {
+ if (!ped_device_read (disk->dev, &table, parts, 1))
+ return 0;
+
+ for (i = 0; i < N_AHDI-1; ++i)
+ if (atr_part_used (&table.part[i]))
+ break;
+
+ if (i == N_AHDI-1 && empty_ars_allowed)
+ break;
+
+ /* data partition must be in slot 0, 1 or 2 */
+ if (i == N_AHDI-1
+ || atr_pid_eq (table.part[i].id, "XGM")) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No data partition found in the ARS at "
+ "sector %lli."), parts );
+ return 0;
+ }
+
+ empty_ars_allowed = 0;
+
+ if (!atr_parse_add_rawpart (disk, PED_PARTITION_LOGICAL,
+ parts, *pnum, &table.part[i] ) )
+ return 0;
+
+ (*pnum)++;
+
+ /* end of logical partitions? */
+ if (!atr_part_used (&table.part[i+1]))
+ break;
+
+ if (!atr_pid_eq (table.part[i+1].id, "XGM")) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The entry of the next logical ARS is not of "
+ "type XGM in ARS at sector %lli."), parts );
+ return 0;
+ }
+
+ parts = exts + PED_BE32_TO_CPU (table.part[i+1].start);
+ }
+
+ return 1;
+}
+
+static int
+atari_read (PedDisk* disk)
+{
+ AtariRawTable table;
+ AtariDisk* atr_disk;
+ uint32_t rs_hd_size;
+ int i, pnum, xgm, pcount;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ atr_disk = ATARI_DISK (disk);
+
+ ped_disk_delete_all (disk);
+ atr_disk_reset (atr_disk);
+
+ if (!atari_probe (disk->dev)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("There doesn't seem to be an Atari partition table "
+ "on this disk (%s), or it is corrupted."),
+ disk->dev->path )
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+
+ if (!ped_device_read (disk->dev, (void*) &table, 0, 1))
+ goto error;
+
+ /* We are sure that the layout looks coherent so we
+ don't need to check too much */
+
+ rs_hd_size = PED_BE32_TO_CPU (table.hd_size);
+ atr_disk->bsl_start = PED_BE32_TO_CPU (table.bsl_start);
+ atr_disk->bsl_count = PED_BE32_TO_CPU (table.bsl_count);
+ atr_disk->HDX_comp = 0;
+
+ /* AHDI primary partitions */
+ pnum = 1; xgm = 0; pcount = 0;
+ for (i = 0; i < N_AHDI; i++) {
+ if (!atr_part_used (&table.part[i]))
+ continue;
+
+ pcount++;
+
+ if (atr_pid_eq (table.part[i].id, "XGM")) {
+
+ atr_disk->format = FMT_XGM;
+ xgm = 1;
+ if (!atr_parse_add_rawpart(disk, PED_PARTITION_EXTENDED,
+ 0, 0, &table.part[i] )
+ || !atr_read_logicals (
+ disk,
+ PED_BE32_TO_CPU (table.part[i].start),
+ &pnum ) )
+ goto error;
+
+ } else {
+
+ if (!atr_parse_add_rawpart (disk, PED_PARTITION_NORMAL,
+ 0, pnum, &table.part[i] ) )
+ goto error;
+ pnum++;
+ }
+ }
+
+ /* If no XGM partition has been found, the AHDI table is not empty, */
+ /* the first entry is valid and its ID ok for ICD, then we parse the */
+ /* ICD table. */
+ if (!xgm && pcount != 0
+ && atr_part_valid (&table.icd_part[0], rs_hd_size)
+ && atr_part_known (&table.icd_part[0], atr_known_icd_pid))
+ for (i = 0; i < N_ICD; i++) {
+
+ if (!atr_part_known (&table.icd_part[i], atr_known_icd_pid)
+ || !atr_part_used (&table.icd_part[i]))
+ continue;
+ atr_disk->format = FMT_ICD;
+
+ if (!atr_parse_add_rawpart (disk, PED_PARTITION_NORMAL,
+ 0, pnum, &table.icd_part[i] ) )
+ goto error;
+ pnum++;
+ }
+
+ atr_disk->has_been_read = 1;
+ return 1;
+
+error:
+ ped_disk_delete_all (disk);
+ atr_disk_reset (atr_disk);
+ return 0;
+}
+
+/* Returns the number of the first logical partition or -1 if not found */
+static int
+atr_find_first_log (const PedDisk* disk)
+{
+ PedPartition* part;
+ int first_log, last;
+
+ last = ped_disk_get_last_partition_num (disk);
+
+ for (first_log = 1; first_log <= last; first_log++) {
+ if ((part = ped_disk_get_partition (disk, first_log))
+ && (part->type & PED_PARTITION_LOGICAL))
+ break;
+ }
+
+ return first_log > last ? -1 : first_log;
+}
+
+#ifndef DISCOVER_ONLY
+static int
+atari_clobber (PedDevice* dev)
+{
+ AtariRawTable table;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (atari_probe (dev));
+
+ if (!ped_device_read (dev, &table, 0, 1))
+ return 0;
+
+ /* clear anything but the boot code and the optional ICD table */
+ memset (table.boot_code + offsetof (AtariRawTable, hd_size),
+ 0,
+ PED_SECTOR_SIZE_DEFAULT - offsetof (AtariRawTable, hd_size));
+
+ return ped_device_write (dev, &table, 0, 1);
+}
+
+/* Computes the checksum of the root sector */
+static uint16_t
+atr_calc_rs_sum (const AtariRawTable* table)
+{
+ const uint16_t* word = (uint16_t*)(table);
+ const uint16_t* end = (uint16_t*)(table + 1);
+ uint16_t sum;
+
+ for (sum = 0; word < end; word++)
+ sum += PED_BE16_TO_CPU(*word);
+
+ return sum;
+}
+
+/* Returns 1 if the root sector is bootable, else returns 0 */
+static int
+atr_is_boot_table (const AtariRawTable* table)
+{
+ return atr_calc_rs_sum (table) == BOOTABLE_CKSUM;
+}
+
+/*
+ * Returns 1 if sign belongs to a set of `forbidden' signatures.
+ * (e.g.: 55AA which is the MSDOS siganture...)
+ * Only used for non bootable root sector since the signature of
+ * a bootable one is unique.
+ */
+static int _GL_ATTRIBUTE_PURE
+atr_sign_is_forbidden (uint16_t sign)
+{
+ const uint16_t* forbidden;
+
+ for (forbidden = atr_forbidden_sign; *forbidden; forbidden++) {
+ if (sign == *forbidden)
+ return 1;
+ }
+
+ return 0;
+}
+
+/* Updates table->checksum so the RS will be considered bootable (or not) */
+static void
+atr_table_set_boot (AtariRawTable* table, int boot)
+{
+ uint16_t boot_cksum, noboot_cksum;
+ uint16_t sum;
+
+ table->checksum = 0;
+ sum = atr_calc_rs_sum (table);
+ boot_cksum = BOOTABLE_CKSUM - sum;
+
+ if (boot) {
+ table->checksum = PED_CPU_TO_BE16 (boot_cksum);
+ return;
+ }
+
+ noboot_cksum = NONBOOT_CKSUM - sum;
+
+ while (atr_sign_is_forbidden (noboot_cksum)
+ || noboot_cksum == boot_cksum)
+ noboot_cksum++;
+
+ table->checksum = PED_CPU_TO_BE16 (noboot_cksum);
+}
+
+/* Fill an used partition entry */
+static void
+atr_fill_raw_entry (AtariRawPartition* rawpart, uint8_t flag, const char* id,
+ uint32_t start, uint32_t size )
+{
+ rawpart->flag = PART_FLAG_USED | flag;
+ atr_pid_assign (rawpart->id, id);
+ rawpart->start = PED_CPU_TO_BE32 (start);
+ rawpart->size = PED_CPU_TO_BE32 (size);
+}
+
+static int
+atr_write_logicals (const PedDisk* disk)
+{
+ AtariRawTable table;
+ PedPartition* log_curr;
+ PedPartition* log_next;
+ PedPartition* ext;
+ PedPartition* part;
+ PedSector exts;
+ PedSector parts;
+ AtariPart* atr_part;
+ int first_log, pnum, i;
+
+ PED_ASSERT (disk != NULL);
+
+ ext = ped_disk_extended_partition (disk);
+ exts = parts = ext->geom.start;
+
+ pnum = first_log = atr_find_first_log (disk);
+
+ while (1) {
+ if (pnum != -1) {
+ log_curr = ped_disk_get_partition (disk, pnum);
+ log_next = ped_disk_get_partition (disk, pnum + 1);
+ } else {
+ log_curr = log_next = NULL;
+ }
+
+ if (log_curr && !(log_curr->type & PED_PARTITION_LOGICAL))
+ log_curr = NULL;
+ if (log_next && !(log_next->type & PED_PARTITION_LOGICAL))
+ log_next = NULL;
+
+ PED_ASSERT (pnum == first_log || log_curr);
+
+ part = ped_disk_get_partition_by_sector (disk, parts);
+ if (part && ped_partition_is_active (part)) {
+ if (log_curr)
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No room at sector %lli to store ARS "
+ "of logical partition %d."),
+ parts, pnum );
+ else
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No room at sector %lli to store ARS."),
+ parts );
+ return 0;
+ }
+
+ if (!ped_device_read (disk->dev, &table, parts, 1))
+ return 0;
+
+ if (!log_curr) {
+ PED_ASSERT (!log_next);
+
+ for (i = 0; i < N_AHDI; i++)
+ table.part[i].flag &= ~PART_FLAG_USED;
+ } else {
+ atr_part = ATARI_PART (log_curr);
+ atr_fill_raw_entry (&table.part[0], atr_part->flag,
+ atr_part->part_id,
+ log_curr->geom.start - parts,
+ log_curr->geom.length );
+
+ for (i = 1; i < N_AHDI; i++)
+ table.part[i].flag &= ~PART_FLAG_USED;
+
+ if (log_next) {
+ atr_fill_raw_entry (&table.part[1], 0, "XGM",
+ log_next->geom.start - 1 - exts,
+ log_next->geom.length + 1 );
+ }
+ }
+
+ /* TODO: check if we can set that bootable, and when */
+ atr_table_set_boot (&table, 0);
+
+ if (!ped_device_write (disk->dev, &table, parts, 1))
+ return 0;
+
+ if (!log_next)
+ break;
+
+ parts = log_next->geom.start - 1;
+ pnum++;
+ }
+
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+_disk_logical_partition_count (const PedDisk* disk)
+{
+ PedPartition* walk;
+
+ int count = 0;
+
+ PED_ASSERT (disk != NULL);
+ for (walk = disk->part_list; walk;
+ walk = ped_disk_next_partition (disk, walk)) {
+ if (ped_partition_is_active (walk)
+ && (walk->type & PED_PARTITION_LOGICAL))
+ count++;
+ }
+
+ return count;
+}
+
+/* Load the HD size from the table and ask to fix it if != device size. */
+static int
+atr_load_fix_hdsize (const PedDisk* disk, uint32_t* rs_hd_size, AtariRawTable* table)
+{
+ AtariDisk* atr_disk = ATARI_DISK (disk);
+ int result = PED_EXCEPTION_UNHANDLED;
+
+ *rs_hd_size = PED_BE32_TO_CPU (table->hd_size);
+ if (*rs_hd_size != disk->dev->length) {
+ if (atr_disk->has_been_read) {
+ result = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE_CANCEL,
+ _("The sector count that is stored in the "
+ "partition table does not correspond "
+ "to the size of your device. Do you "
+ "want to fix the partition table?") );
+ if (result == PED_EXCEPTION_CANCEL)
+ return 0;
+ }
+
+ if (result == PED_EXCEPTION_UNHANDLED)
+ result = PED_EXCEPTION_FIX;
+
+ if (result == PED_EXCEPTION_FIX) {
+ *rs_hd_size = disk->dev->length;
+ table->hd_size = PED_CPU_TO_BE32(*rs_hd_size);
+ }
+ }
+ return 1;
+}
+
+/* Try to init the HDX compatibility Bad Sectors List. */
+static int
+atr_empty_init_bsl (const PedDisk* disk)
+{
+ uint8_t zeros[PED_SECTOR_SIZE_DEFAULT];
+ PedSector sec;
+ PedPartition* part;
+ AtariDisk* atr_disk = ATARI_DISK (disk);
+
+ memset (zeros, 0, PED_SECTOR_SIZE_DEFAULT);
+ for (sec = atr_disk->bsl_start;
+ sec < atr_disk->bsl_start + atr_disk->bsl_count;
+ sec++ ) {
+ if (sec == atr_disk->bsl_start)
+ zeros[3] = 0xA5;
+ else
+ zeros[3] = 0;
+ part = ped_disk_get_partition_by_sector (disk, sec);
+ if (part && ped_partition_is_active (part)) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No room at sector %lli to store BSL."),
+ sec );
+ return 0;
+ }
+ ped_device_write (disk->dev, zeros, sec, 1);
+ }
+ atr_disk->HDX_comp = 0;
+ return 1;
+}
+
+static int
+atari_write (const PedDisk* disk)
+{
+ AtariRawTable table;
+ AtariDisk* atr_disk;
+ AtariPart* atr_part;
+ PedPartition* log;
+ PedPartition* ext_part;
+ PedPartition* part = NULL;
+ uint32_t rs_hd_size;
+ int i, xgm_begin, pnum, append_ext;
+ int put_sign, boot, prim_count, last_num;
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ atr_disk = ATARI_DISK (disk);
+ PED_ASSERT (atr_disk != NULL);
+
+ prim_count = ped_disk_get_primary_partition_count (disk);
+ last_num = ped_disk_get_last_partition_num (disk);
+ ext_part = ped_disk_extended_partition (disk);
+
+ /* WARNING: similar/related code in atari_enumerate */
+ xgm_begin = ((log = ped_disk_get_partition (disk, 1))
+ && (log->type & PED_PARTITION_LOGICAL));
+ PED_ASSERT (atr_disk->format != FMT_ICD || ext_part == NULL);
+ PED_ASSERT (atr_disk->format != FMT_XGM || prim_count + xgm_begin <= N_AHDI);
+ PED_ASSERT (atr_disk->format != FMT_AHDI || (ext_part == NULL && prim_count + xgm_begin <= N_AHDI));
+
+ /* Device Spec ok for Atari label? */
+ if (!atr_can_use_dev (disk->dev))
+ goto error;
+
+ if (!ped_device_read (disk->dev, (void*) &table, 0, 1))
+ goto error;
+
+ boot = atr_is_boot_table (&table);
+
+ table.bsl_start = PED_CPU_TO_BE32 (atr_disk->bsl_start);
+ table.bsl_count = PED_CPU_TO_BE32 (atr_disk->bsl_count);
+
+ /* Before anything else check the sector count and */
+ /* fix it if necessary */
+ if (!atr_load_fix_hdsize (disk, &rs_hd_size, &table))
+ goto error;
+
+ append_ext = (ext_part != NULL)
+ && (_disk_logical_partition_count (disk) == 0);
+
+ /* Fill the AHDI table */
+ put_sign = (prim_count == 0);
+ pnum = 1;
+ for (i = 0; i < N_AHDI; i++) {
+ if (pnum > last_num)
+ part = NULL;
+ else while (pnum <= last_num
+ && !(part = ped_disk_get_partition (disk, pnum)))
+ pnum++;
+
+ if (put_sign) {
+ atr_put_signature_entry (&table.part[i]);
+ continue;
+ }
+
+ if (!part && i != 0 && append_ext) {
+ part = ext_part;
+ append_ext = 0;
+ }
+
+ if (!part || (i == 0 && xgm_begin)) {
+ table.part[i].flag &= ~PART_FLAG_USED;
+ continue;
+ }
+
+ if (part->type & PED_PARTITION_LOGICAL)
+ part = ext_part;
+
+ PED_ASSERT (part != NULL);
+
+ atr_part = ATARI_PART (part);
+ atr_fill_raw_entry (&table.part[i], atr_part->flag,
+ atr_part->part_id, part->geom.start,
+ part->geom.length );
+
+ if (part->type & PED_PARTITION_EXTENDED) {
+ while (pnum <= last_num) {
+ part = ped_disk_get_partition (disk, pnum);
+ if (part &&
+ !(part->type & PED_PARTITION_LOGICAL))
+ break;
+ pnum++;
+ }
+ } else
+ pnum++;
+ }
+
+ if ((ext_part != NULL || atr_disk->format == FMT_AHDI)
+ && pnum <= last_num) {
+ ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL,
+ _("There were remaining partitions after filling "
+ "the main AHDI table.") );
+ goto error;
+ }
+
+ /* Leave XGM or ICD mode if uneeded */
+ if (pnum > last_num
+ && (atr_disk->format == FMT_ICD || ext_part == NULL))
+ atr_disk->format = FMT_AHDI;
+
+ /* If AHDI mode, check that no ICD will be detected */
+ /* and propose to fix */
+ if (atr_disk->format == FMT_AHDI
+ && atr_part_valid (&table.icd_part[0], rs_hd_size)
+ && atr_part_known (&table.icd_part[0], atr_known_icd_pid)) {
+ int result = PED_EXCEPTION_UNHANDLED;
+ result = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_YES_NO_CANCEL,
+ _("The main AHDI table has been filled with all "
+ "partitions but the ICD table is not empty "
+ "so more partitions of unknown size and position "
+ "will be detected by ICD compatible software. Do "
+ "you want to invalidate the ICD table?") );
+ if (result == PED_EXCEPTION_YES
+ || result == PED_EXCEPTION_UNHANDLED)
+ table.icd_part[0].flag &= ~PART_FLAG_USED;
+ else if (result == PED_EXCEPTION_CANCEL)
+ goto error;
+ }
+
+ if (put_sign)
+ goto write_to_dev;
+
+ /* Fill the ICD table */
+ if (atr_disk->format == FMT_ICD)
+ for (i = 0; i < N_ICD; i++) {
+ if (pnum > last_num)
+ part = NULL;
+ else while (pnum <= last_num
+ && !(part = ped_disk_get_partition (disk, pnum)))
+ pnum++;
+
+ if (!part) {
+ table.icd_part[i].flag &= ~PART_FLAG_USED;
+ continue;
+ }
+
+ if (part->type & PED_PARTITION_EXTENDED
+ || part->type & PED_PARTITION_LOGICAL) {
+ ped_exception_throw (
+ PED_EXCEPTION_BUG,
+ PED_EXCEPTION_CANCEL,
+ _("ICD entries can't contain extended or "
+ "logical partitions.") );
+ goto error;
+ }
+
+ atr_part = ATARI_PART (part);
+ atr_fill_raw_entry (&table.icd_part[i], atr_part->flag,
+ atr_part->icd_id, part->geom.start,
+ part->geom.length );
+
+ pnum++;
+ }
+
+ /* Write the chained list of logical partitions */
+ if (atr_disk->format == FMT_XGM) {
+ if (!atr_write_logicals (disk))
+ goto error;
+ }
+
+write_to_dev:
+ if (pnum <= last_num) {
+ ped_exception_throw (PED_EXCEPTION_BUG, PED_EXCEPTION_CANCEL,
+ _("There were remaining partitions after filling "
+ "the tables.") );
+ goto error;
+ }
+
+ /* Do we need to do that in case of failure too??? */
+ atr_table_set_boot (&table, boot);
+
+ /* Commit the root sector... */
+ if (!ped_device_write (disk->dev, (void*) &table, 0, 1)
+ || !ped_device_sync (disk->dev))
+ goto error;
+
+ /* Try to init the HDX compatibility Bad Sectors List if needed. */
+ if (atr_disk->HDX_comp && !atr_empty_init_bsl (disk))
+ goto error;
+
+ atr_disk->has_been_read = 1;
+ return ped_device_sync (disk->dev);
+
+error:
+ atr_disk->has_been_read = 0;
+ return 0;
+}
+#endif
+
+/* If extended partition in ICD mode, generate an error and returns 1 */
+/* else returns 0 */
+static int
+atr_xgm_in_icd (const PedDisk* disk, PedPartitionType part_type)
+{
+ AtariDisk* atrdisk;
+
+ PED_ASSERT (disk != NULL);
+
+ if (part_type & PED_PARTITION_EXTENDED) {
+ atrdisk = ATARI_DISK (disk);
+ if (atrdisk->format == FMT_ICD) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("You can't use an extended XGM partition in "
+ "ICD mode (more than %d primary partitions, if "
+ "XGM is the first one it counts for two)."),
+ N_AHDI );
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+static PedPartition*
+atari_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+ AtariPart* atrpart;
+
+ if (atr_xgm_in_icd(disk, part_type))
+ return 0;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+ if (ped_partition_is_active (part)) {
+ part->disk_specific = atrpart = ped_malloc (sizeof (AtariPart));
+ if (!atrpart)
+ goto error_free_part;
+ memset (atrpart, 0, sizeof (AtariPart));
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+
+error_free_part:
+ _ped_partition_free (part);
+error:
+ return NULL;
+}
+
+static PedPartition*
+atari_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+ if (ped_partition_is_active (part))
+ memcpy (new_part->disk_specific, part->disk_specific,
+ sizeof (AtariPart));
+
+ return new_part;
+}
+
+static void
+atari_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part)) {
+ PED_ASSERT (part->disk_specific != NULL);
+ free (part->disk_specific);
+ }
+ _ped_partition_free (part);
+}
+
+/* Note: fs_type is NULL for extended partitions */
+static int
+atari_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type)
+{
+ AtariPart* atrpart;
+ AtariFS2PartId* fs2id;
+ PED_ASSERT (part != NULL);
+ atrpart = ATARI_PART (part);
+ PED_ASSERT (atrpart != NULL);
+
+ part->fs_type = fs_type;
+
+ if (atr_xgm_in_icd(part->disk, part->type))
+ return 0;
+
+ if (part->type & PED_PARTITION_EXTENDED) {
+ strcpy (atrpart->part_id, "XGM");
+ strcpy (atrpart->icd_id, "XGM");
+ return 1;
+ }
+
+ if (!fs_type) {
+ strcpy (atrpart->part_id, "RAW");
+ strcpy (atrpart->icd_id, "RAW");
+ return 1;
+ }
+
+ for (fs2id = atr_fs2pid; fs2id->fs; fs2id++) {
+ if (!*fs2id->fs /* default entry */
+ || ((!strcmp (fs_type->name, fs2id->fs)
+ && part->geom.length < fs2id->max_sectors))) {
+
+ strcpy (atrpart->part_id, fs2id->pid);
+ if (atr_pid_known (fs2id->pid, atr_known_icd_pid))
+ strcpy (atrpart->icd_id, fs2id->pid);
+ else
+ strcpy (atrpart->icd_id, "RAW");
+
+ break;
+ }
+ }
+ PED_ASSERT (fs2id->fs != NULL);
+
+ return 1;
+}
+
+static int
+atari_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ AtariPart* atr_part;
+ AtariPartID2BootFlag* bf;
+
+ PED_ASSERT (part != NULL);
+ atr_part = ATARI_PART (part);
+ PED_ASSERT (atr_part != NULL);
+
+ if (flag != PED_PARTITION_BOOT)
+ return 0;
+
+ if (state == 0) {
+ atr_part->flag = 0;
+ } else {
+ for (bf = atr_pid2bf; *bf->pid; bf++) {
+ if (atr_pid_eq (bf->pid, atr_part->part_id))
+ break;
+ }
+ atr_part->flag = bf->flag;
+ }
+
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+atari_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ AtariPart* atr_part;
+
+ PED_ASSERT (part != NULL);
+ atr_part = ATARI_PART (part);
+ PED_ASSERT (atr_part != NULL);
+
+ if (flag != PED_PARTITION_BOOT)
+ return 0;
+
+ return (atr_part->flag != 0);
+}
+
+static int
+atari_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ if (flag == PED_PARTITION_BOOT)
+ return 1;
+
+ return 0;
+}
+
+/* Adapted from disk_dos */
+static PedConstraint*
+atr_log_constraint (const PedPartition* part)
+{
+ const PedGeometry* geom = &part->geom;
+ PedGeometry safe_space;
+ PedSector min_start;
+ PedSector max_end;
+ PedDisk* disk;
+ PedDevice* dev;
+ PedPartition* ext_part;
+ PedPartition* walk;
+ int first_log, not_first;
+
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->dev != NULL);
+ ext_part = ped_disk_extended_partition (part->disk);
+ PED_ASSERT (ext_part != NULL);
+
+ dev = (disk = part->disk) -> dev;
+
+ first_log = atr_find_first_log (disk);
+ if (first_log == -1)
+ first_log = part->num;
+
+ not_first = (part->num != first_log);
+
+ walk = ext_part->part_list;
+
+ min_start = ext_part->geom.start + 1 + not_first;
+ max_end = ext_part->geom.end;
+
+ while (walk != NULL
+ && ( walk->geom.start - (walk->num != first_log)
+ < geom->start - not_first
+ || walk->geom.start - (walk->num != first_log)
+ < min_start ) ) {
+ if (walk != part && ped_partition_is_active (walk))
+ min_start = walk->geom.end + 1 + not_first;
+ walk = walk->next;
+ }
+
+ while (walk && (walk == part || !ped_partition_is_active (walk)))
+ walk = walk->next;
+
+ if (walk)
+ max_end = walk->geom.start - 1 - (walk->num != first_log);
+
+ if (min_start >= max_end)
+ return NULL;
+
+ ped_geometry_init (&safe_space, dev, min_start,
+ max_end - min_start + 1);
+ return ped_constraint_new_from_max (&safe_space);
+}
+
+/* Adapted from disk_dos */
+static PedGeometry*
+art_min_extended_geom (const PedPartition* ext_part)
+{
+ PedDisk* disk = ext_part->disk;
+ PedPartition* walk;
+ PedGeometry* min_geom;
+ int first_log;
+
+ first_log = atr_find_first_log (disk);
+ if (first_log == -1)
+ return NULL;
+
+ walk = ped_disk_get_partition (disk, first_log);
+ PED_ASSERT (walk->type & PED_PARTITION_LOGICAL);
+ min_geom = ped_geometry_duplicate (&walk->geom);
+ if (!min_geom)
+ return NULL;
+ ped_geometry_set_start (min_geom, walk->geom.start - 1);
+
+ for (walk = ext_part->part_list; walk; walk = walk->next) {
+ if (!ped_partition_is_active (walk) || walk->num == first_log)
+ continue;
+ if (walk->geom.start < min_geom->start)
+ ped_geometry_set_start (min_geom, walk->geom.start - 2);
+ if (walk->geom.end > min_geom->end)
+ ped_geometry_set_end (min_geom, walk->geom.end);
+ }
+
+ return min_geom;
+}
+
+/* Adapted from disk_dos */
+static PedConstraint*
+atr_ext_constraint (const PedPartition* part)
+{
+ PedGeometry start_range;
+ PedGeometry end_range;
+ PedConstraint* constraint;
+ PedDevice* dev;
+ PedDisk* disk;
+ PedGeometry* min;
+
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->dev != NULL);
+
+ dev = (disk = part->disk) -> dev;
+ min = art_min_extended_geom (part);
+
+ if (min) {
+ ped_geometry_init (&start_range, dev, 1, min->start);
+ ped_geometry_init (&end_range, dev, min->end,
+ dev->length - min->end);
+ ped_geometry_destroy (min);
+ } else {
+ ped_geometry_init (&start_range, dev, 1, dev->length - 1);
+ ped_geometry_init (&end_range, dev, 1, dev->length - 1);
+ }
+
+ constraint = ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ &start_range, &end_range, 1, dev->length);
+ return constraint;
+}
+
+static PedConstraint*
+atr_prim_constraint (const PedPartition* part)
+{
+ PedDevice* dev;
+ PedGeometry max;
+
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->dev != NULL);
+
+ dev = part->disk->dev;
+
+ ped_geometry_init (&max, dev, 1, dev->length - 1);
+ return ped_constraint_new_from_max (&max);
+}
+
+/* inspiration from disk_dos */
+static PedGeometry*
+_best_solution (PedGeometry* a, PedGeometry* b)
+{
+ if (!a)
+ return b;
+ if (!b)
+ return a;
+
+ if (a->length < b->length)
+ goto choose_b;
+
+ ped_geometry_destroy (b);
+ return a;
+
+choose_b:
+ ped_geometry_destroy (a);
+ return b;
+}
+
+/* copied from disk_dos */
+static PedGeometry*
+_try_constraint (const PedPartition* part, const PedConstraint* external,
+ PedConstraint* internal)
+{
+ PedConstraint* intersection;
+ PedGeometry* solution;
+
+ intersection = ped_constraint_intersect (external, internal);
+ ped_constraint_destroy (internal);
+ if (!intersection)
+ return NULL;
+
+ solution = ped_constraint_solve_nearest (intersection, &part->geom);
+ ped_constraint_destroy (intersection);
+ return solution;
+}
+
+/*
+ * internal is either the primary or extented constraint.
+ * If there's no BSL, the is the only internal constraint considered.
+ * If there's a BSL, try to fit the partition before or after (and
+ * choose the best fit, the one which results in the greatest size...)
+ */
+static int
+atr_prim_align (PedPartition* part, const PedConstraint* constraint,
+ PedConstraint* internal)
+{
+ PedDevice* dev;
+ AtariDisk* atr_disk;
+ PedConstraint* cut;
+ PedGeometry* solution = NULL;
+ PedGeometry max;
+ PedSector bsl_end;
+
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->dev != NULL);
+ dev = part->disk->dev;
+ atr_disk = ATARI_DISK (part->disk);
+ PED_ASSERT (atr_disk != NULL);
+
+ /* No BSL */
+ if (!atr_disk->bsl_start && !atr_disk->bsl_count) {
+ /* Note: _ped_partition_attempt_align will destroy internal */
+ return _ped_partition_attempt_align(part, constraint, internal);
+ }
+
+ /* BSL, try to fit before */
+ if (atr_disk->bsl_start > 1) {
+ ped_geometry_init (&max, dev, 1, atr_disk->bsl_start - 1);
+ cut = ped_constraint_new_from_max (&max);
+ solution = _best_solution (solution,
+ _try_constraint (part, constraint,
+ ped_constraint_intersect (internal, cut)));
+ ped_constraint_destroy (cut);
+ }
+
+ /* BSL, try to fit after, take the best solution */
+ bsl_end = atr_disk->bsl_start + atr_disk->bsl_count;
+ if (bsl_end < dev->length) {
+ ped_geometry_init (&max, dev, bsl_end, dev->length - bsl_end);
+ cut = ped_constraint_new_from_max (&max);
+ solution = _best_solution (solution,
+ _try_constraint (part, constraint,
+ ped_constraint_intersect (internal, cut)));
+ ped_constraint_destroy (cut);
+ }
+
+ ped_constraint_destroy (internal);
+
+ if (solution) {
+ ped_geometry_set (&part->geom, solution->start,
+ solution->length);
+ ped_geometry_destroy (solution);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+atari_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ switch (part->type) {
+ case PED_PARTITION_LOGICAL:
+ if (_ped_partition_attempt_align (part, constraint,
+ atr_log_constraint (part) ) )
+ return 1;
+ break;
+ case PED_PARTITION_EXTENDED:
+ if (atr_prim_align (part, constraint,
+ atr_ext_constraint (part) ) )
+ return 1;
+ break;
+ default:
+ if (atr_prim_align (part, constraint,
+ atr_prim_constraint (part) ) )
+ return 1;
+ break;
+ }
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+/* increment numbers of any non logical partition found after the last */
+/* logical one, to make room for a new logical partition */
+static int
+art_room_for_logic (PedDisk* disk)
+{
+ PedPartition* part;
+ int num, last_logic, last;
+
+ /* too many partitions ? */
+ last = ped_disk_get_last_partition_num (disk);
+ if (last >= MAXIMUM_PARTS)
+ return 0;
+
+ /* find the last logical partition */
+ last_logic = 0;
+ for (num = 1; num <= last; num++) {
+ part = ped_disk_get_partition (disk, num);
+ if (part && ped_partition_is_active (part)
+ && (part->type & PED_PARTITION_LOGICAL))
+ last_logic = num;
+ }
+
+ if (!last_logic)
+ return 1;
+
+ /* increment */
+ for (num = last; num > last_logic; num--) {
+ part = ped_disk_get_partition (disk, num);
+ if (part && ped_partition_is_active (part)
+ && !(part->type & ( PED_PARTITION_LOGICAL
+ | PED_PARTITION_EXTENDED))
+ && part->num > 0 )
+ part->num++;
+ }
+
+ return 1;
+}
+
+static int
+atari_partition_enumerate (PedPartition* part)
+{
+ AtariDisk* atrdisk;
+ PedPartition* ext_part;
+ PedPartition* log;
+ int i, want_icd, want_xgm, num_max, xgm_begin, prim_count;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ atrdisk = ATARI_DISK (part->disk);
+ PED_ASSERT (atrdisk != NULL);
+
+ /* WARNING: some similar/related code in atari_write */
+ /* This is quite a <hack> : this function is probably the only way */
+ /* to know something has been / is going to be modified in the table.*/
+ /* So we detect the current operation mode (AHDI/XGM/ICD) and report */
+ /* errors (in which case we refuse to operate...) */
+
+ prim_count = ped_disk_get_primary_partition_count (part->disk);
+ ext_part = ped_disk_extended_partition (part->disk);
+
+ /* <hack in the hack> : we can't reorder (yet) , so if we begin with */
+ /* XGM the first slot must be empty */
+ xgm_begin = ((log = ped_disk_get_partition (part->disk, 1))
+ && (log->type & PED_PARTITION_LOGICAL))
+ || ((part->num == -1)
+ && (part->type & PED_PARTITION_LOGICAL)
+ && !ped_disk_get_partition (part->disk, 1));
+ /* </hack in the hack> */
+
+ PED_ASSERT (atrdisk->format != FMT_ICD || ext_part == NULL);
+ PED_ASSERT (atrdisk->format != FMT_XGM
+ || prim_count + xgm_begin <= N_AHDI);
+ PED_ASSERT (atrdisk->format != FMT_AHDI
+ || (ext_part == NULL && prim_count + xgm_begin <= N_AHDI));
+
+ want_icd = ( ( prim_count
+ + xgm_begin
+ + ( (part->num == -1)
+ && !(part->type & PED_PARTITION_LOGICAL) ) )
+ > N_AHDI );
+ want_xgm = ( (part->type & PED_PARTITION_EXTENDED)
+ || ext_part != NULL );
+
+ if (!want_xgm && !want_icd)
+ atrdisk->format = FMT_AHDI;
+ else if (want_xgm && !want_icd)
+ atrdisk->format = FMT_XGM;
+ else if (!want_xgm && want_icd)
+ atrdisk->format = FMT_ICD;
+ else {
+ if (atr_xgm_in_icd (part->disk, PED_PARTITION_EXTENDED))
+ return 0;
+ else {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("You can't use more than %d primary partitions "
+ "(ICD mode) if you use an extended XGM "
+ "partition. If XGM is the first partition "
+ "it counts for two."),
+ N_AHDI );
+ return 0;
+ }
+ }
+ /* End of </hack> */
+
+
+ /* Ext will be numbered 0 and will stay 0... */
+ if (part->num == 0)
+ return 1;
+
+ if (part->num == -1) {
+
+ /* Linux don't show the ext part itself for Atari disk labels */
+ /* so we use number 0 (could use a big number too, but that */
+ /* would be less cute ;) */
+ if (part->type & PED_PARTITION_EXTENDED) {
+ part->num = 0;
+ return 1;
+ }
+
+ switch (atrdisk->format) {
+ case FMT_AHDI:
+ case FMT_ICD:
+ num_max = N_ICD + N_AHDI;
+ break;
+ case FMT_XGM:
+ num_max = MAXIMUM_PARTS;
+ break;
+ default:
+ num_max = 0;
+ PED_ASSERT (0);
+ }
+
+ /* make room for logical partitions */
+ if (part->type & PED_PARTITION_LOGICAL) {
+ if (!art_room_for_logic (part->disk))
+ goto error_alloc_failed;
+ }
+
+ /* find an unused number */
+ for (i = 1; i <= num_max; i++) {
+ if (!ped_disk_get_partition (part->disk, i)) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+ } else {
+ /* find an unused number before or don't re-number */
+ for (i = 1; i < part->num; i++) {
+ if (!ped_disk_get_partition (part->disk, i)) {
+ part->num = i;
+ }
+ }
+ return 1;
+ }
+
+ /* failed to allocate a number */
+error_alloc_failed:
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unable to allocate a partition number."));
+#endif
+ return 0;
+}
+
+static int
+atr_creat_add_metadata (PedDisk* disk, PedSector start, PedSector end,
+ PedPartitionType type )
+{
+ PedPartition* new_part;
+ PedConstraint* const_exact;
+ int added;
+
+ type |= PED_PARTITION_METADATA;
+ new_part = ped_partition_new (disk, type, NULL, start, end);
+ if (!new_part)
+ goto error;
+
+ const_exact = ped_constraint_exact (&new_part->geom);
+ added = ped_disk_add_partition (disk, new_part, const_exact);
+ ped_constraint_destroy (const_exact);
+ if (!added)
+ goto error_destroy_part;
+
+ return 1;
+
+error_destroy_part:
+ ped_partition_destroy (new_part);
+error:
+ return 0;
+}
+
+static int
+atari_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* ext;
+ PedPartition* log;
+ AtariDisk* atr_disk;
+ int i;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ atr_disk = ATARI_DISK (disk);
+ PED_ASSERT (atr_disk != NULL);
+
+ /* allocate 1 sector for the disk label at the start */
+ if (!atr_creat_add_metadata (disk, 0, 0, 0))
+ return 0;
+
+ /* allocate the sectors containing the BSL */
+ if (atr_disk->bsl_start || atr_disk->bsl_count) {
+ if (!atr_creat_add_metadata (disk, atr_disk->bsl_start,
+ atr_disk->bsl_start
+ + atr_disk->bsl_count - 1, 0 ) )
+ return 0;
+ }
+
+ ext = ped_disk_extended_partition (disk);
+ if (ext) {
+ if (!atr_creat_add_metadata (disk, ext->geom.start,
+ ext->geom.start,
+ PED_PARTITION_LOGICAL ) )
+ return 0;
+
+ /* Find the first logical part */
+ for (i = 1; i <= ped_disk_get_last_partition_num (disk); i++)
+ if ((log = ped_disk_get_partition (disk, i))
+ && (log->type & PED_PARTITION_LOGICAL))
+ break;
+
+ for (log = ext->part_list; log; log = log->next) {
+ if ((log->type & ( PED_PARTITION_METADATA
+ | PED_PARTITION_FREESPACE))
+ || log->num == i)
+ continue;
+
+ if (!atr_creat_add_metadata (disk, log->geom.start-1,
+ log->geom.start-1,
+ PED_PARTITION_LOGICAL ) )
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+atari_get_max_primary_partition_count (const PedDisk* disk)
+{
+ AtariDisk* atr_disk;
+
+ PED_ASSERT (disk != NULL);
+ atr_disk = ATARI_DISK (disk);
+ PED_ASSERT (atr_disk != NULL);
+
+ return atr_disk->format == FMT_XGM ? N_AHDI : N_AHDI + N_ICD;
+}
+
+static bool
+atari_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ AtariDisk* atr_disk;
+
+ PED_ASSERT (disk != NULL);
+ atr_disk = ATARI_DISK (disk);
+ PED_ASSERT (atr_disk != NULL);
+
+ *max_n = atr_disk->format == FMT_XGM ? N_AHDI : N_AHDI + N_ICD;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions(atari)
+
+static PedDiskOps atari_disk_ops = {
+ clobber: NULL_IF_DISCOVER_ONLY (atari_clobber),
+ write: NULL_IF_DISCOVER_ONLY (atari_write),
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+
+ PT_op_function_initializers (atari)
+};
+
+static PedDiskType atari_disk_type = {
+ next: NULL,
+ name: "atari",
+ ops: &atari_disk_ops,
+ features: PED_DISK_TYPE_EXTENDED
+};
+
+void
+ped_disk_atari_init ()
+{
+ PED_ASSERT (sizeof (AtariRawPartition) == 12);
+ PED_ASSERT (sizeof (AtariRawTable) == 512);
+ /* GNU Libc doesn't support NULL instead of the locale name */
+ PED_ASSERT ((atr_c_locale = newlocale(LC_ALL_MASK, "C", NULL)) != NULL);
+
+ ped_disk_type_register (&atari_disk_type);
+}
+
+void
+ped_disk_atari_done ()
+{
+ ped_disk_type_unregister (&atari_disk_type);
+ freelocale(atr_c_locale);
+}
diff --git a/libparted/labels/bsd.c b/libparted/labels/bsd.c
new file mode 100644
index 0000000..38bc64c
--- /dev/null
+++ b/libparted/labels/bsd.c
@@ -0,0 +1,654 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Matt Wilson <msw@redhat.com>
+*/
+
+#include <config.h>
+
+#include <stdbool.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+#include "pt-tools.h"
+
+/* struct's & #define's stolen from libfdisk, which probably came from
+ * Linux...
+ */
+
+#define BSD_DISKMAGIC (0x82564557UL) /* The disk magic number */
+#define BSD_MAXPARTITIONS 8
+#define BSD_FS_UNUSED 0 /* disklabel unused partition entry ID */
+
+#define BSD_DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */
+#define BSD_DTYPE_MSCP 2 /* MSCP */
+#define BSD_DTYPE_DEC 3 /* other DEC (rk, rl) */
+#define BSD_DTYPE_SCSI 4 /* SCSI */
+#define BSD_DTYPE_ESDI 5 /* ESDI interface */
+#define BSD_DTYPE_ST506 6 /* ST506 etc. */
+#define BSD_DTYPE_HPIB 7 /* CS/80 on HP-IB */
+#define BSD_DTYPE_HPFL 8 /* HP Fiber-link */
+#define BSD_DTYPE_FLOPPY 10 /* floppy */
+
+#define BSD_BBSIZE 8192 /* size of boot area, with label */
+#define BSD_SBSIZE 8192 /* max size of fs superblock */
+
+typedef struct _BSDRawPartition BSDRawPartition;
+typedef struct _BSDRawLabel BSDRawLabel;
+typedef struct _BSDDiskData BSDDiskData;
+
+struct _BSDRawPartition { /* the partition table */
+ uint32_t p_size; /* number of sectors in partition */
+ uint32_t p_offset; /* starting sector */
+ uint32_t p_fsize; /* file system basic fragment size */
+ uint8_t p_fstype; /* file system type, see below */
+ uint8_t p_frag; /* file system fragments per block */
+ uint16_t p_cpg; /* file system cylinders per group */
+} __attribute__((packed));
+
+struct _BSDRawLabel {
+ uint32_t d_magic; /* the magic number */
+ int16_t d_type; /* drive type */
+ int16_t d_subtype; /* controller/d_type specific */
+ int8_t d_typename[16]; /* type name, e.g. "eagle" */
+ int8_t d_packname[16]; /* pack identifier */
+ uint32_t d_secsize; /* # of bytes per sector */
+ uint32_t d_nsectors; /* # of data sectors per track */
+ uint32_t d_ntracks; /* # of tracks per cylinder */
+ uint32_t d_ncylinders; /* # of data cylinders per unit */
+ uint32_t d_secpercyl; /* # of data sectors per cylinder */
+ uint32_t d_secperunit; /* # of data sectors per unit */
+ uint16_t d_sparespertrack; /* # of spare sectors per track */
+ uint16_t d_sparespercyl; /* # of spare sectors per cylinder */
+ uint32_t d_acylinders; /* # of alt. cylinders per unit */
+ uint16_t d_rpm; /* rotational speed */
+ uint16_t d_interleave; /* hardware sector interleave */
+ uint16_t d_trackskew; /* sector 0 skew, per track */
+ uint16_t d_cylskew; /* sector 0 skew, per cylinder */
+ uint32_t d_headswitch; /* head switch time, usec */
+ uint32_t d_trkseek; /* track-to-track seek, usec */
+ uint32_t d_flags; /* generic flags */
+#define NDDATA 5
+ uint32_t d_drivedata[NDDATA]; /* drive-type specific information */
+#define NSPARE 5
+ uint32_t d_spare[NSPARE]; /* reserved for future use */
+ uint32_t d_magic2; /* the magic number (again) */
+ uint16_t d_checksum; /* xor of data incl. partitions */
+
+ /* file system and partition information: */
+ uint16_t d_npartitions; /* number of partitions in following */
+ uint32_t d_bbsize; /* size of boot area at sn0, bytes */
+ uint32_t d_sbsize; /* max size of fs superblock, bytes */
+#define D_PARTITIONS_WORDS 59
+ BSDRawPartition d_partitions[BSD_MAXPARTITIONS]; /* actually may be more */
+} __attribute__((packed, aligned(2)));
+
+struct _BSDDiskData {
+ char boot_code[64];
+ BSDRawLabel label; /* label is offset by 64 bytes */
+ char unused[172]; /* May contain more partitions */
+} __attribute__((packed, aligned(2)));
+
+typedef struct {
+ uint8_t type;
+ int boot;
+ int raid;
+ int lvm;
+} BSDPartitionData;
+
+static PedDiskType bsd_disk_type;
+
+/* XXX fixme: endian? */
+static unsigned short
+xbsd_dkcksum (BSDRawLabel *lp) {
+ const u_short* word = (u_short*)(lp);
+ const u_short* end = word + D_PARTITIONS_WORDS + PED_LE16_TO_CPU(lp->d_npartitions);
+ u_short sum;
+
+ lp->d_checksum = 0;
+ for(sum=0; word < end; word++)
+ sum ^= PED_LE16_TO_CPU(*word);
+ return sum;
+}
+
+/* XXX fixme: endian? */
+static void
+alpha_bootblock_checksum (void *boot) {
+ uint64_t* dp = (uint64_t *)boot;
+ uint64_t sum=0;
+ int i;
+
+ for (i = 0; i < 63; i++)
+ sum += dp[i];
+ dp[63] = sum;
+}
+
+static int
+bsd_probe (const PedDevice *dev)
+{
+ BSDRawLabel *label;
+
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size < 512)
+ return 0;
+
+ void *s0;
+ if (!ptt_read_sector (dev, 0, &s0))
+ return 0;
+
+ label = &((BSDDiskData*) s0)->label;
+
+ /* check magic */
+ bool found = PED_LE32_TO_CPU (label->d_magic) == BSD_DISKMAGIC;
+ free (s0);
+ return found;
+}
+
+static PedDisk*
+bsd_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ BSDDiskData* bsd_specific;
+ BSDRawLabel *label;
+
+ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ disk = _ped_disk_alloc ((PedDevice*)dev, &bsd_disk_type);
+ if (!disk)
+ goto error;
+ disk->disk_specific = bsd_specific = ped_calloc (sizeof (BSDDiskData));
+ if (!bsd_specific)
+ goto error_free_disk;
+
+ /* Initialize the disk label's default values */
+ label = &bsd_specific->label;
+ label->d_magic = PED_CPU_TO_LE32 (BSD_DISKMAGIC);
+ label->d_type = PED_CPU_TO_LE16 (BSD_DTYPE_SCSI);
+ label->d_flags = 0;
+ label->d_secsize = PED_CPU_TO_LE16 (dev->sector_size);
+ label->d_nsectors = PED_CPU_TO_LE32 (dev->bios_geom.sectors);
+ label->d_ntracks = PED_CPU_TO_LE32 (dev->bios_geom.heads);
+ label->d_ncylinders = PED_CPU_TO_LE32 (dev->bios_geom.cylinders);
+ label->d_secpercyl = PED_CPU_TO_LE32 (dev->bios_geom.sectors
+ * dev->bios_geom.heads);
+ label->d_secperunit
+ = PED_CPU_TO_LE32 (dev->bios_geom.sectors
+ * dev->bios_geom.heads
+ * dev->bios_geom.cylinders);
+
+ label->d_rpm = PED_CPU_TO_LE16 (3600);
+ label->d_interleave = PED_CPU_TO_LE16 (1);
+ label->d_trackskew = 0;
+ label->d_cylskew = 0;
+ label->d_headswitch = 0;
+ label->d_trkseek = 0;
+
+ label->d_magic2 = PED_CPU_TO_LE32 (BSD_DISKMAGIC);
+ label->d_bbsize = PED_CPU_TO_LE32 (BSD_BBSIZE);
+ label->d_sbsize = PED_CPU_TO_LE32 (BSD_SBSIZE);
+
+ label->d_npartitions = 0;
+ label->d_checksum = xbsd_dkcksum (label);
+
+ return disk;
+
+error_free_disk:
+ free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk*
+bsd_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ BSDDiskData* new_bsd_data;
+ BSDDiskData* old_bsd_data = (BSDDiskData*) disk->disk_specific;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &bsd_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ new_bsd_data = (BSDDiskData*) new_disk->disk_specific;
+ memcpy (new_bsd_data, old_bsd_data, sizeof(BSDDiskData));
+ return new_disk;
+}
+
+static void
+bsd_free (PedDisk* disk)
+{
+ free (disk->disk_specific);
+ _ped_disk_free (disk);
+}
+
+static int
+bsd_read (PedDisk* disk)
+{
+ BSDDiskData* bsd_specific = (BSDDiskData*) disk->disk_specific;
+ BSDRawLabel* label;
+ int i;
+
+ ped_disk_delete_all (disk);
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ return 0;
+
+ memcpy (bsd_specific, s0, sizeof (BSDDiskData));
+ free (s0);
+
+ label = &bsd_specific->label;
+
+ for (i = 1; i <= BSD_MAXPARTITIONS; i++) {
+ PedPartition* part;
+ BSDPartitionData* bsd_part_data;
+ PedSector start;
+ PedSector end;
+
+ if (!label->d_partitions[i - 1].p_size
+ || !label->d_partitions[i - 1].p_fstype)
+ continue;
+ start = PED_LE32_TO_CPU(label->d_partitions[i - 1].p_offset);
+ end = PED_LE32_TO_CPU(label->d_partitions[i - 1].p_offset)
+ + PED_LE32_TO_CPU(label->d_partitions[i - 1].p_size) - 1;
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ NULL, start, end);
+ if (!part)
+ goto error;
+ bsd_part_data = part->disk_specific;
+ bsd_part_data->type = label->d_partitions[i - 1].p_fstype;
+ part->num = i;
+ part->fs_type = ped_file_system_probe (&part->geom);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ if (constraint_exact == NULL)
+ goto error;
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok)
+ goto error;
+ }
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static void
+_probe_and_add_boot_code (const PedDisk* disk)
+{
+ BSDDiskData *old_data;
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ return;
+ old_data = (BSDDiskData*) s0;
+ if (old_data->boot_code [0]
+ && old_data->label.d_magic == PED_CPU_TO_LE32 (BSD_DISKMAGIC)) {
+ BSDDiskData *bsd_specific = (BSDDiskData*) disk->disk_specific;
+ memcpy (bsd_specific, old_data, sizeof (BSDDiskData));
+ }
+ free (s0);
+}
+
+#ifndef DISCOVER_ONLY
+static int
+bsd_write (const PedDisk* disk)
+{
+ BSDDiskData* bsd_specific;
+ BSDRawLabel* label;
+ BSDPartitionData* bsd_data;
+ PedPartition* part;
+ int i;
+ int max_part = 0;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ bsd_specific = (BSDDiskData*) disk->disk_specific;
+ label = &bsd_specific->label;
+
+ if (!bsd_specific->boot_code[0])
+ _probe_and_add_boot_code (disk);
+
+ memset (label->d_partitions, 0,
+ sizeof (BSDRawPartition) * BSD_MAXPARTITIONS);
+
+ for (i = 1; i <= BSD_MAXPARTITIONS; i++) {
+ part = ped_disk_get_partition (disk, i);
+ if (!part)
+ continue;
+ bsd_data = part->disk_specific;
+ label->d_partitions[i - 1].p_fstype = bsd_data->type;
+ label->d_partitions[i - 1].p_offset
+ = PED_CPU_TO_LE32 (part->geom.start);
+ label->d_partitions[i - 1].p_size
+ = PED_CPU_TO_LE32 (part->geom.length);
+ max_part = i;
+ }
+
+ label->d_npartitions = PED_CPU_TO_LE16 (max_part + 1);
+ label->d_checksum = xbsd_dkcksum (label);
+
+ alpha_bootblock_checksum (bsd_specific);
+
+ if (!ptt_write_sector (disk, bsd_specific,
+ sizeof (BSDDiskData)))
+ goto error;
+ return ped_device_sync (disk->dev);
+
+error:
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+bsd_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+ BSDPartitionData* bsd_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (ped_partition_is_active (part)) {
+ part->disk_specific
+ = bsd_data = ped_malloc (sizeof (BSDPartitionData));
+ if (!bsd_data)
+ goto error_free_part;
+ bsd_data->type = 0;
+ bsd_data->boot = 0;
+ bsd_data->raid = 0;
+ bsd_data->lvm = 0;
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return 0;
+}
+
+static PedPartition*
+bsd_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+ BSDPartitionData* new_bsd_data;
+ BSDPartitionData* old_bsd_data;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ old_bsd_data = (BSDPartitionData*) part->disk_specific;
+ new_bsd_data = (BSDPartitionData*) new_part->disk_specific;
+ new_bsd_data->type = old_bsd_data->type;
+ new_bsd_data->boot = old_bsd_data->boot;
+ new_bsd_data->raid = old_bsd_data->raid;
+ new_bsd_data->lvm = old_bsd_data->lvm;
+ return new_part;
+}
+
+static void
+bsd_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part))
+ free (part->disk_specific);
+ _ped_partition_free (part);
+}
+
+static int
+bsd_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ BSDPartitionData* bsd_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ if (!fs_type)
+ bsd_data->type = 0x8;
+ else if (is_linux_swap (fs_type->name))
+ bsd_data->type = 0x1;
+ else
+ bsd_data->type = 0x8;
+
+ return 1;
+}
+
+static int
+bsd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ BSDPartitionData* bsd_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ bsd_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ bsd_data->boot = state;
+ return 1;
+ case PED_PARTITION_RAID:
+ if (state) {
+ bsd_data->lvm = 0;
+ }
+ bsd_data->raid = state;
+ return 1;
+ case PED_PARTITION_LVM:
+ if (state) {
+ bsd_data->raid = 0;
+ }
+ bsd_data->lvm = state;
+ return 1;
+ default:
+ ;
+ }
+ return 0;
+}
+
+static int _GL_ATTRIBUTE_PURE
+bsd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ BSDPartitionData* bsd_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ bsd_data = part->disk_specific;
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return bsd_data->boot;
+
+ case PED_PARTITION_RAID:
+ return bsd_data->raid;
+
+ case PED_PARTITION_LVM:
+ return bsd_data->lvm;
+
+ default:
+ ;
+ }
+ return 0;
+}
+
+static int
+bsd_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ case PED_PARTITION_RAID:
+ case PED_PARTITION_LVM:
+ return 1;
+ default:
+ ;
+ }
+ return 0;
+}
+
+
+static int
+bsd_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return BSD_MAXPARTITIONS;
+}
+
+static bool
+bsd_get_max_supported_partition_count(const PedDisk* disk, int *max_n)
+{
+ *max_n = BSD_MAXPARTITIONS;
+ return true;
+}
+
+static PedConstraint*
+_get_constraint (const PedDevice* dev)
+{
+ PedGeometry max;
+
+ ped_geometry_init (&max, dev, 1, dev->length - 1);
+ return ped_constraint_new_from_max (&max);
+}
+
+static int
+bsd_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ if (_ped_partition_attempt_align (part, constraint,
+ _get_constraint (part->disk->dev)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+bsd_partition_enumerate (PedPartition* part)
+{
+ int i;
+ PedPartition* p;
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+ for (i = 1; i <= BSD_MAXPARTITIONS; i++) {
+ p = ped_disk_get_partition (part->disk, i);
+ if (!p) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+ /* failed to allocate a number */
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unable to allocate a bsd disklabel slot."));
+#endif
+ return 0;
+}
+
+static int
+bsd_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* new_part;
+ PedConstraint* constraint_any = NULL;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ /* allocate 1 sector for the disk label at the start */
+ new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL, 0, 0);
+ if (!new_part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any)) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (bsd)
+
+static PedDiskOps bsd_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (bsd_write),
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+
+ PT_op_function_initializers (bsd)
+};
+
+static PedDiskType bsd_disk_type = {
+ next: NULL,
+ name: "bsd",
+ ops: &bsd_disk_ops,
+ features: 0
+};
+
+void
+ped_disk_bsd_init ()
+{
+ PED_ASSERT (sizeof (BSDRawPartition) == 16);
+ PED_ASSERT (sizeof (BSDRawLabel) == 276);
+
+ ped_disk_type_register (&bsd_disk_type);
+}
+
+void
+ped_disk_bsd_done ()
+{
+ ped_disk_type_unregister (&bsd_disk_type);
+}
diff --git a/libparted/labels/dasd.c b/libparted/labels/dasd.c
new file mode 100644
index 0000000..1d99458
--- /dev/null
+++ b/libparted/labels/dasd.c
@@ -0,0 +1,1032 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Phil Knirsch <phil@redhat.de>
+ Harald Hoyer <harald@redhat.de>
+*/
+
+#include <config.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <time.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <parted/parted.h>
+#include <parted/endian.h>
+#include <parted/debug.h>
+
+#include <parted/vtoc.h>
+#include <parted/fdasd.h>
+#include <arch/linux.h>
+
+#include <libintl.h>
+#if ENABLE_NLS
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+#include "pt-tools.h"
+
+#define PARTITION_LINUX_SWAP 0x82
+#define PARTITION_LINUX 0x83
+#define PARTITION_LINUX_LVM 0x8e
+#define PARTITION_LINUX_RAID 0xfd
+
+extern void ped_disk_dasd_init ();
+extern void ped_disk_dasd_done ();
+
+#define DASD_NAME "dasd"
+
+typedef struct {
+ int type;
+ int system;
+} DasdPartitionData;
+
+typedef struct {
+ unsigned int format_type;
+ unsigned int label_block;
+ volume_label_t vlabel;
+} DasdDiskSpecific;
+
+static int dasd_probe (const PedDevice *dev);
+static int dasd_read (PedDisk* disk);
+static int dasd_write (const PedDisk* disk);
+
+static PedPartition* dasd_partition_new (const PedDisk* disk,
+ PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start,
+ PedSector end);
+static PedPartition* dasd_partition_duplicate (const PedPartition *part);
+static void dasd_partition_destroy (PedPartition* part);
+static int dasd_partition_set_flag (PedPartition* part,
+ PedPartitionFlag flag,
+ int state);
+static int dasd_partition_get_flag (const PedPartition* part,
+ PedPartitionFlag flag);
+static int dasd_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag);
+static int dasd_partition_align (PedPartition* part,
+ const PedConstraint* constraint);
+static int dasd_partition_enumerate (PedPartition* part);
+static int dasd_get_max_primary_partition_count (const PedDisk* disk);
+static bool dasd_get_max_supported_partition_count (const PedDisk* disk, int *max_n);
+static PedAlignment *dasd_get_partition_alignment(const PedDisk *disk);
+
+static PedDisk* dasd_alloc (const PedDevice* dev);
+static PedDisk* dasd_duplicate (const PedDisk* disk);
+static void dasd_free (PedDisk* disk);
+static int dasd_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type);
+static int dasd_alloc_metadata (PedDisk* disk);
+
+#include "pt-common.h"
+PT_define_limit_functions (dasd)
+
+static PedDiskOps dasd_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (dasd_write),
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+ partition_set_type_id: NULL,
+ partition_get_type_id: NULL,
+ partition_set_type_uuid: NULL,
+ partition_get_type_uuid: NULL,
+
+ get_partition_alignment: dasd_get_partition_alignment,
+
+ PT_op_function_initializers (dasd)
+};
+
+static PedDiskType dasd_disk_type = {
+ next: NULL,
+ name: "dasd",
+ ops: &dasd_disk_ops,
+ features: 0
+};
+
+struct flag_id_mapping_t
+{
+ enum _PedPartitionFlag flag;
+ int type_id;
+};
+
+static const struct flag_id_mapping_t flag_id_mapping[] =
+{
+ { PED_PARTITION_LVM, PARTITION_LINUX_LVM },
+ { PED_PARTITION_RAID, PARTITION_LINUX_RAID },
+ { PED_PARTITION_SWAP, PARTITION_LINUX_SWAP },
+};
+
+static const struct flag_id_mapping_t* _GL_ATTRIBUTE_CONST
+dasd_find_flag_id_mapping (PedPartitionFlag flag)
+{
+ int n = sizeof(flag_id_mapping) / sizeof(flag_id_mapping[0]);
+
+ for (int i = 0; i < n; ++i)
+ if (flag_id_mapping[i].flag == flag)
+ return &flag_id_mapping[i];
+
+ return NULL;
+}
+
+static PedDisk*
+dasd_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific *disk_specific;
+ char volser[7];
+
+ PED_ASSERT (dev != NULL);
+
+ arch_specific = LINUX_SPECIFIC (dev);
+ disk = _ped_disk_alloc (dev, &dasd_disk_type);
+ if (!disk)
+ return NULL;
+
+ disk->disk_specific = disk_specific = ped_malloc(sizeof(DasdDiskSpecific));
+ if (!disk->disk_specific) {
+ free (disk);
+ return NULL;
+ }
+
+ /* CDL format, newer */
+ disk_specific->format_type = 2;
+ disk_specific->label_block = 2;
+
+ /* Setup volume label (for fresh disks) */
+ snprintf(volser, sizeof(volser), "0X%04X", arch_specific->devno);
+ vtoc_volume_label_init(&disk_specific->vlabel);
+ vtoc_volume_label_set_key(&disk_specific->vlabel, "VOL1");
+ vtoc_volume_label_set_label(&disk_specific->vlabel, "VOL1");
+ vtoc_volume_label_set_volser(&disk_specific->vlabel, volser);
+ vtoc_set_cchhb(&disk_specific->vlabel.vtoc,
+ VTOC_START_CC, VTOC_START_HH, 0x01);
+
+ return disk;
+}
+
+static PedDisk*
+dasd_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+
+ new_disk = ped_disk_new_fresh(disk->dev, &dasd_disk_type);
+
+ if (!new_disk)
+ return NULL;
+
+ memcpy(new_disk->disk_specific, disk->disk_specific,
+ sizeof(DasdDiskSpecific));
+
+ return new_disk;
+}
+
+static void
+dasd_free (PedDisk* disk)
+{
+ PED_ASSERT(disk != NULL);
+ /* Don't free disk->disk_specific first, in case _ped_disk_free
+ or one of its eventual callees ever accesses it. */
+ void *p = disk->disk_specific;
+ _ped_disk_free(disk);
+ free(p);
+}
+
+
+void
+ped_disk_dasd_init ()
+{
+ ped_disk_type_register(&dasd_disk_type);
+}
+
+void
+ped_disk_dasd_done ()
+{
+ ped_disk_type_unregister(&dasd_disk_type);
+}
+
+static int
+dasd_probe (const PedDevice *dev)
+{
+ LinuxSpecific* arch_specific;
+ struct fdasd_anchor anchor;
+
+ PED_ASSERT(dev != NULL);
+
+ arch_specific = LINUX_SPECIFIC(dev);
+
+ /* add partition test here */
+ fdasd_initialize_anchor(&anchor);
+
+ if (fdasd_get_geometry(dev, &anchor, arch_specific->fd) == 0)
+ goto error_cleanup;
+
+ /* Labels are required on CDL formatted DASDs. */
+ if (fdasd_check_volume(&anchor, arch_specific->fd) &&
+ anchor.FBA_layout == 0)
+ goto error_cleanup;
+
+ fdasd_cleanup(&anchor);
+
+ return 1;
+
+ error_cleanup:
+ fdasd_cleanup(&anchor);
+ ped_exception_throw(PED_EXCEPTION_ERROR,PED_EXCEPTION_IGNORE_CANCEL,
+ "Error while probing device %s.", dev->path);
+
+ return 0;
+}
+
+static int
+dasd_read (PedDisk* disk)
+{
+ int i;
+ char str[20];
+ PedDevice* dev;
+ PedPartition* part;
+ PedFileSystemType *fs;
+ PedSector start, end;
+ PedConstraint* constraint_exact;
+ partition_info_t *p;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific* disk_specific;
+ struct fdasd_anchor anchor;
+
+ PDEBUG;
+
+ PED_ASSERT (disk != NULL);
+ PDEBUG;
+ PED_ASSERT (disk->dev != NULL);
+ PDEBUG;
+
+ dev = disk->dev;
+
+ arch_specific = LINUX_SPECIFIC(dev);
+ disk_specific = disk->disk_specific;
+
+ PDEBUG;
+
+ fdasd_initialize_anchor(&anchor);
+
+ if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0)
+ goto error_close_dev;
+
+ disk_specific->label_block = anchor.label_block;
+
+ if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE)
+ anchor.big_disk++;
+
+ /* check dasd for labels and vtoc */
+ if (fdasd_check_volume(&anchor, arch_specific->fd)) {
+ DasdPartitionData* dasd_data;
+
+ /* Kernel partitioning code will report 'implicit' partitions
+ * for non-CDL format DASDs even when there is no
+ * label/VTOC. */
+ if (anchor.FBA_layout == 0)
+ goto error_close_dev;
+
+ disk_specific->format_type = 1;
+
+ /* Register implicit partition */
+ ped_disk_delete_all (disk);
+
+ start = (PedSector) arch_specific->real_sector_size /
+ (PedSector) disk->dev->sector_size *
+ (PedSector) (anchor.label_block + 1);
+ end = disk->dev->length - 1;
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
+ start, end);
+ if (!part)
+ goto error_close_dev;
+
+ part->num = 1;
+ part->fs_type = ped_file_system_probe (&part->geom);
+ dasd_data = part->disk_specific;
+ dasd_data->type = 0;
+
+ if (!ped_disk_add_partition (disk, part, NULL))
+ goto error_close_dev;
+
+ fdasd_cleanup(&anchor);
+
+ return 1;
+ }
+
+ /* Save volume label (read by fdasd_check_volume) for writing */
+ memcpy(&disk_specific->vlabel, anchor.vlabel, sizeof(volume_label_t));
+
+ ped_disk_delete_all (disk);
+
+ bool is_ldl = strncmp(anchor.vlabel->volkey,
+ vtoc_ebcdic_enc("LNX1", str, 4), 4) == 0;
+ bool is_cms = strncmp(anchor.vlabel->volkey,
+ vtoc_ebcdic_enc("CMS1", str, 4), 4) == 0;
+ if (is_ldl || is_cms) {
+ DasdPartitionData* dasd_data;
+
+ union vollabel {
+ volume_label_t ldl;
+ cms_volume_label_t cms;
+ };
+ union vollabel *cms_ptr1 = (union vollabel *) anchor.vlabel;
+ cms_volume_label_t *cms_ptr = &cms_ptr1->cms;
+ volume_label_t *ldl_ptr = &cms_ptr1->ldl;
+ int partition_start_block;
+
+ disk_specific->format_type = 1;
+
+ if (is_cms && cms_ptr->usable_count >= cms_ptr->block_count)
+ partition_start_block = 2; /* FBA DASD */
+ else
+ partition_start_block = 3; /* CKD DASD */
+
+ if (is_ldl)
+ start = (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size
+ * (long long) partition_start_block;
+ else if (cms_ptr->disk_offset == 0)
+ start = (long long) cms_ptr->block_size
+ / (long long) disk->dev->sector_size
+ * (long long) partition_start_block;
+ else
+ start = (long long) cms_ptr->block_size
+ / (long long) disk->dev->sector_size
+ * (long long) cms_ptr->disk_offset;
+
+ if (is_ldl)
+ if (ldl_ptr->ldl_version >= 0xf2)
+ end = (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size
+ * (long long) ldl_ptr->formatted_blocks - 1;
+ else
+ end = disk->dev->length - 1;
+ else
+ if (cms_ptr->disk_offset == 0)
+ end = (long long) cms_ptr->block_size
+ / (long long) disk->dev->sector_size
+ * (long long) cms_ptr->block_count - 1;
+ else
+ /*
+ Frankly, I do not understand why the last block
+ of the CMS reserved file is not included in the
+ partition; but this is the algorithm used by the
+ Linux kernel. See fs/partitions/ibm.c in the
+ Linux kernel source code.
+ */
+ end = (long long) cms_ptr->block_size
+ / (long long) disk->dev->sector_size
+ * (long long) (cms_ptr->block_count - 1) - 1;
+
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL, start, end);
+ if (!part)
+ goto error_close_dev;
+
+ part->num = 1;
+ part->fs_type = ped_file_system_probe (&part->geom);
+ dasd_data = part->disk_specific;
+ dasd_data->type = 0;
+
+ if (!ped_disk_add_partition (disk, part, NULL))
+ goto error_close_dev;
+
+ fdasd_cleanup(&anchor);
+
+ return 1;
+ }
+
+ /* CDL format, newer */
+ disk_specific->format_type = 2;
+
+ p = anchor.first;
+ PDEBUG;
+
+ for (i = 1 ; i <= USABLE_PARTITIONS; i++) {
+ char *ch = p->f1->DS1DSNAM;
+ DasdPartitionData* dasd_data;
+
+
+ if (p->used != 0x01)
+ continue;
+
+ PDEBUG;
+
+ start = (long long)(long long) p->start_trk
+ * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size;
+ end = (long long)((long long) p->end_trk + 1)
+ * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size - 1;
+ part = ped_partition_new(disk, PED_PARTITION_NORMAL, NULL,
+ start, end);
+ PDEBUG;
+
+ if (!part)
+ goto error_close_dev;
+
+ PDEBUG;
+
+ part->num = i;
+ part->fs_type = ped_file_system_probe(&part->geom);
+
+ vtoc_ebcdic_dec(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+ ch = strstr(p->f1->DS1DSNAM, "PART");
+
+ if (ch != NULL) {
+ strncpy(str, ch+9, 6);
+ str[6] = '\0';
+ }
+
+ dasd_data = part->disk_specific;
+
+ if (strncmp(PART_TYPE_RAID, str, 6) == 0)
+ dasd_data->system = PARTITION_LINUX_RAID;
+ else if (strncmp(PART_TYPE_LVM, str, 6) == 0)
+ dasd_data->system = PARTITION_LINUX_LVM;
+ else if (strncmp(PART_TYPE_SWAP, str, 6) == 0)
+ dasd_data->system = PARTITION_LINUX_SWAP;
+
+ vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+
+ dasd_data->type = 0;
+
+ constraint_exact = ped_constraint_exact (&part->geom);
+ if (!constraint_exact)
+ goto error_close_dev;
+ if (!ped_disk_add_partition(disk, part, constraint_exact)) {
+ ped_constraint_destroy(constraint_exact);
+ goto error_close_dev;
+ }
+ ped_constraint_destroy(constraint_exact);
+
+ if (p->fspace_trk > 0) {
+ start = (long long)((long long) p->end_trk + 1)
+ * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size;
+ end = (long long)((long long) p->end_trk + 1 + p->fspace_trk)
+ * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size - 1;
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ NULL, start, end);
+
+ if (!part)
+ goto error_close_dev;
+
+ part->type = PED_PARTITION_FREESPACE;
+ constraint_exact = ped_constraint_exact(&part->geom);
+
+ if (!constraint_exact)
+ goto error_close_dev;
+ if (!ped_disk_add_partition(disk, part, constraint_exact)) {
+ ped_constraint_destroy(constraint_exact);
+ goto error_close_dev;
+ }
+
+ ped_constraint_destroy (constraint_exact);
+ }
+
+ p = p->next;
+ }
+
+ PDEBUG;
+ fdasd_cleanup(&anchor);
+ return 1;
+
+error_close_dev:
+ PDEBUG;
+ fdasd_cleanup(&anchor);
+ return 0;
+}
+
+static int
+dasd_update_type (const PedDisk* disk, struct fdasd_anchor *anchor,
+ partition_info_t *part_info[USABLE_PARTITIONS])
+{
+ PedPartition* part;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific* disk_specific;
+
+ arch_specific = LINUX_SPECIFIC(disk->dev);
+ disk_specific = disk->disk_specific;
+
+ PDEBUG;
+
+ unsigned int i;
+ for (i = 1; i <= USABLE_PARTITIONS; i++) {
+ partition_info_t *p;
+ char *ch = NULL;
+ DasdPartitionData* dasd_data;
+
+ PDEBUG;
+
+ part = ped_disk_get_partition(disk, i);
+ if (!part)
+ continue;
+
+ PDEBUG;
+
+ dasd_data = part->disk_specific;
+ p = part_info[i - 1];
+
+ if (!p ) {
+ PDEBUG;
+ continue;
+ }
+
+ vtoc_ebcdic_dec(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+ ch = strstr(p->f1->DS1DSNAM, "PART");
+
+ PDEBUG;
+ if (ch == NULL) {
+ vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+ PDEBUG;
+ continue;
+ }
+
+ ch += 9;
+
+ switch (dasd_data->system) {
+ case PARTITION_LINUX_LVM:
+ PDEBUG;
+ strncpy(ch, PART_TYPE_LVM, 6);
+ break;
+ case PARTITION_LINUX_RAID:
+ PDEBUG;
+ strncpy(ch, PART_TYPE_RAID, 6);
+ break;
+ case PARTITION_LINUX:
+ PDEBUG;
+ strncpy(ch, PART_TYPE_NATIVE, 6);
+ break;
+ case PARTITION_LINUX_SWAP:
+ PDEBUG;
+ strncpy(ch, PART_TYPE_SWAP, 6);
+ break;
+ default:
+ PDEBUG;
+ strncpy(ch, PART_TYPE_NATIVE, 6);
+ break;
+ }
+
+ anchor->vtoc_changed++;
+ vtoc_ebcdic_enc(p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+ }
+
+ return 1;
+}
+
+static int
+dasd_write (const PedDisk* disk)
+{
+ DasdPartitionData* dasd_data;
+ PedPartition* part;
+ int i;
+ partition_info_t *p;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific* disk_specific;
+ struct fdasd_anchor anchor;
+ partition_info_t *part_info[USABLE_PARTITIONS];
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+
+ arch_specific = LINUX_SPECIFIC (disk->dev);
+ disk_specific = disk->disk_specific;
+
+ PDEBUG;
+
+ /* If not formated in CDL, don't write anything. */
+ if (disk_specific->format_type == 1) {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The partition table of DASD-LDL device cannot be changed.\n"));
+ return 1;
+ }
+
+ /* initialize the anchor */
+ fdasd_initialize_anchor(&anchor);
+ if (fdasd_get_geometry(disk->dev, &anchor, arch_specific->fd) == 0)
+ goto error;
+
+ fdasd_check_volume(&anchor, arch_specific->fd);
+ memcpy(anchor.vlabel, &disk_specific->vlabel, sizeof(volume_label_t));
+ anchor.vlabel_changed++;
+
+ if ((anchor.geo.cylinders * anchor.geo.heads) > BIG_DISK_SIZE)
+ anchor.big_disk++;
+
+ fdasd_recreate_vtoc(&anchor);
+
+ for (i = 1; i <= USABLE_PARTITIONS; i++) {
+ unsigned int start, stop;
+
+ PDEBUG;
+ part = ped_disk_get_partition(disk, i);
+ if (!part)
+ continue;
+
+ PDEBUG;
+
+ start = part->geom.start * disk->dev->sector_size
+ / arch_specific->real_sector_size / disk->dev->hw_geom.sectors;
+ stop = (part->geom.end + 1)
+ * disk->dev->sector_size / arch_specific->real_sector_size
+ / disk->dev->hw_geom.sectors - 1;
+
+ PDEBUG;
+ dasd_data = part->disk_specific;
+
+ p = fdasd_add_partition(&anchor, start, stop);
+ if (!p) {
+ PDEBUG;
+ goto error;
+ }
+ part_info[i - 1] = p;
+ p->type = dasd_data->system;
+ }
+
+ PDEBUG;
+
+ if (!fdasd_prepare_labels(&anchor, arch_specific->fd))
+ goto error;
+
+ dasd_update_type(disk, &anchor, part_info);
+ PDEBUG;
+
+ if (!fdasd_write_labels(&anchor, arch_specific->fd))
+ goto error;
+
+ fdasd_cleanup(&anchor);
+ return 1;
+
+error:
+ PDEBUG;
+ fdasd_cleanup(&anchor);
+ return 0;
+}
+
+static PedPartition*
+dasd_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+
+ part = _ped_partition_alloc(disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ part->disk_specific = ped_calloc (sizeof (DasdPartitionData));
+ return part;
+
+error:
+ return 0;
+}
+
+static PedPartition*
+dasd_partition_duplicate (const PedPartition *part)
+{
+ PedPartition *new_part;
+
+ new_part = ped_partition_new (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ memcpy(new_part->disk_specific, part->disk_specific,
+ sizeof(DasdPartitionData));
+
+ return new_part;
+}
+
+static void
+dasd_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT(part != NULL);
+
+ if (ped_partition_is_active(part))
+ free(part->disk_specific);
+ free(part);
+}
+
+static int
+dasd_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ DasdPartitionData* dasd_data;
+
+ PED_ASSERT(part != NULL);
+ PED_ASSERT(part->disk_specific != NULL);
+ dasd_data = part->disk_specific;
+
+ const struct flag_id_mapping_t* p = dasd_find_flag_id_mapping (flag);
+ if (p)
+ {
+ if (state)
+ dasd_data->system = p->type_id;
+ else if (dasd_data->system == p->type_id)
+ return dasd_partition_set_system (part, part->fs_type);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+dasd_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ DasdPartitionData* dasd_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ dasd_data = part->disk_specific;
+
+ const struct flag_id_mapping_t* p = dasd_find_flag_id_mapping (flag);
+ if (p)
+ return dasd_data->system == p->type_id;
+
+ return 0;
+}
+
+/*
+ * The DASD-LDL does not support flags now.
+ * So just return 0.
+*/
+static int
+dasd_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ DasdDiskSpecific* disk_specific;
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->disk_specific != NULL);
+
+ disk_specific = part->disk->disk_specific;
+
+ if (disk_specific->format_type == 1)
+ return 0;
+
+ if (dasd_find_flag_id_mapping (flag))
+ return 1;
+
+ return 0;
+}
+
+
+static int
+dasd_get_max_primary_partition_count (const PedDisk* disk)
+{
+ DasdDiskSpecific* disk_specific;
+
+ disk_specific = disk->disk_specific;
+ /* If formated in LDL, maximum partition number is 1 */
+ if (disk_specific->format_type == 1)
+ return 1;
+
+ return USABLE_PARTITIONS;
+}
+
+static bool
+dasd_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = dasd_get_max_primary_partition_count(disk);
+ return true;
+}
+
+static PedAlignment*
+dasd_get_partition_alignment(const PedDisk *disk)
+{
+ LinuxSpecific *arch_specific = LINUX_SPECIFIC(disk->dev);
+ PedSector sector_size =
+ arch_specific->real_sector_size / disk->dev->sector_size;
+
+ return ped_alignment_new(0, disk->dev->hw_geom.sectors * sector_size);
+}
+
+static PedConstraint*
+_primary_constraint (PedDisk* disk)
+{
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry max_geom;
+ PedSector sector_size;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific* disk_specific;
+ PedSector start;
+
+ PDEBUG;
+
+ arch_specific = LINUX_SPECIFIC (disk->dev);
+ disk_specific = disk->disk_specific;
+ sector_size = arch_specific->real_sector_size / disk->dev->sector_size;
+
+ if (!ped_alignment_init (&start_align, 0,
+ disk->dev->hw_geom.sectors * sector_size))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1,
+ disk->dev->hw_geom.sectors * sector_size))
+ return NULL;
+
+ start = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size);
+
+ if (!ped_geometry_init (&max_geom, disk->dev, start, disk->dev->length))
+ return NULL;
+
+ return ped_constraint_new(&start_align, &end_align, &max_geom,
+ &max_geom, 1, disk->dev->length);
+}
+
+static int
+dasd_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ DasdDiskSpecific* disk_specific;
+
+ PED_ASSERT (part != NULL);
+
+ disk_specific = part->disk->disk_specific;
+ /* If formated in LDL, ignore metadata partition */
+ if (disk_specific->format_type == 1)
+ return 1;
+
+ if (_ped_partition_attempt_align(part, constraint,
+ _primary_constraint(part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+
+ return 0;
+}
+
+static int
+dasd_partition_enumerate (PedPartition* part)
+{
+ int i;
+ PedPartition* p;
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+
+ for (i = 1; i <= USABLE_PARTITIONS; i++) {
+ p = ped_disk_get_partition (part->disk, i);
+ if (!p) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+ /* failed to allocate a number */
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unable to allocate a dasd disklabel slot"));
+ return 0;
+}
+
+static int
+dasd_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type)
+{
+ DasdPartitionData* dasd_data = part->disk_specific;
+ PedSector cyl_size;
+
+ cyl_size=part->disk->dev->hw_geom.sectors * part->disk->dev->hw_geom.heads;
+ PDEBUG;
+
+ part->fs_type = fs_type;
+
+ if (!fs_type) {
+ dasd_data->system = PARTITION_LINUX;
+ PDEBUG;
+ } else if (is_linux_swap (fs_type->name)) {
+ dasd_data->system = PARTITION_LINUX_SWAP;
+ PDEBUG;
+ } else {
+ dasd_data->system = PARTITION_LINUX;
+ PDEBUG;
+ }
+
+ return 1;
+}
+
+static int
+dasd_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* new_part;
+ PedConstraint* constraint_any = NULL;
+ PedSector vtoc_end;
+ LinuxSpecific* arch_specific;
+ DasdDiskSpecific* disk_specific;
+ PedPartition* part = NULL; /* initialize solely to placate gcc */
+ PedPartition* new_part2;
+ PedSector trailing_meta_start, trailing_meta_end;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ arch_specific = LINUX_SPECIFIC (disk->dev);
+ disk_specific = disk->disk_specific;
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ /* For LDL or CMS, the leading metadata ends at the sector before
+ the start of the first partition */
+ if (disk_specific->format_type == 1) {
+ part = ped_disk_get_partition(disk, 1);
+ if (part)
+ vtoc_end = part->geom.start - 1;
+ else
+ vtoc_end = (PedSector) arch_specific->real_sector_size /
+ (PedSector) disk->dev->sector_size *
+ (PedSector) disk_specific->label_block;
+ }
+ else {
+ if (disk->dev->type == PED_DEVICE_FILE)
+ arch_specific->real_sector_size = disk->dev->sector_size;
+ /* Mark the start of the disk as metadata. */
+ vtoc_end = (FIRST_USABLE_TRK * (long long) disk->dev->hw_geom.sectors
+ * (long long) arch_specific->real_sector_size
+ / (long long) disk->dev->sector_size) - 1;
+ }
+
+ new_part = ped_partition_new (disk,PED_PARTITION_METADATA,NULL,0,vtoc_end);
+ if (!new_part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any)) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+
+ if (disk_specific->format_type == 1 && part) {
+ /*
+ For LDL or CMS there may be trailing metadata as well.
+ For example: the last block of a CMS reserved file,
+ the "recomp" area of a CMS minidisk that has been
+ formatted and then formatted again with the RECOMP
+ option specifying fewer than the maximum number of
+ cylinders, a disk that was formatted at one size,
+ backed up, then restored to a larger size disk, etc.
+ */
+ trailing_meta_start = part->geom.end + 1;
+ trailing_meta_end = (long long) disk->dev->length - 1;
+ if (trailing_meta_end >= trailing_meta_start) {
+ new_part2 = ped_partition_new (disk,PED_PARTITION_METADATA,
+ NULL, trailing_meta_start, trailing_meta_end);
+ if (!new_part2) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+ if (!ped_disk_add_partition (disk, new_part2,
+ constraint_any)) {
+ ped_partition_destroy (new_part2);
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+ }
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c
new file mode 100644
index 0000000..e6a0105
--- /dev/null
+++ b/libparted/labels/dos.c
@@ -0,0 +1,2612 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2004-2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <sys/time.h>
+#include <stdbool.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+#include "pt-tools.h"
+
+/* this MBR boot code is loaded into 0000:7c00 by the BIOS. See mbr.s for
+ * the source, and how to build it
+ */
+
+static const char MBR_BOOT_CODE[] = {
+ 0xfa, 0xb8, 0x00, 0x10, 0x8e, 0xd0, 0xbc, 0x00,
+ 0xb0, 0xb8, 0x00, 0x00, 0x8e, 0xd8, 0x8e, 0xc0,
+ 0xfb, 0xbe, 0x00, 0x7c, 0xbf, 0x00, 0x06, 0xb9,
+ 0x00, 0x02, 0xf3, 0xa4, 0xea, 0x21, 0x06, 0x00,
+ 0x00, 0xbe, 0xbe, 0x07, 0x38, 0x04, 0x75, 0x0b,
+ 0x83, 0xc6, 0x10, 0x81, 0xfe, 0xfe, 0x07, 0x75,
+ 0xf3, 0xeb, 0x16, 0xb4, 0x02, 0xb0, 0x01, 0xbb,
+ 0x00, 0x7c, 0xb2, 0x80, 0x8a, 0x74, 0x01, 0x8b,
+ 0x4c, 0x02, 0xcd, 0x13, 0xea, 0x00, 0x7c, 0x00,
+ 0x00, 0xeb, 0xfe
+};
+
+#define MSDOS_MAGIC 0xAA55
+#define PARTITION_MAGIC_MAGIC 0xf6f6
+
+/* The maximum number of DOS primary partitions. */
+#define DOS_N_PRI_PARTITIONS 4
+
+#define PARTITION_EMPTY 0x00
+#define PARTITION_FAT12 0x01
+#define PARTITION_FAT16_SM 0x04
+#define PARTITION_DOS_EXT 0x05
+#define PARTITION_FAT16 0x06
+#define PARTITION_NTFS 0x07
+#define PARTITION_HPFS 0x07
+#define PARTITION_UDF 0x07
+#define PARTITION_FAT32 0x0b
+#define PARTITION_FAT32_LBA 0x0c
+#define PARTITION_FAT16_LBA 0x0e
+#define PARTITION_EXT_LBA 0x0f
+
+#define PART_FLAG_HIDDEN 0x10 /* Valid for FAT/NTFS only */
+#define PARTITION_FAT12_H (PARTITION_FAT12 | PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_SM_H (PARTITION_FAT16_SM | PART_FLAG_HIDDEN)
+#define PARTITION_DOS_EXT_H (PARTITION_DOS_EXT | PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_H (PARTITION_FAT16 | PART_FLAG_HIDDEN)
+#define PARTITION_NTFS_H (PARTITION_NTFS | PART_FLAG_HIDDEN)
+#define PARTITION_FAT32_H (PARTITION_FAT32 | PART_FLAG_HIDDEN)
+#define PARTITION_FAT32_LBA_H (PARTITION_FAT32_LBA | PART_FLAG_HIDDEN)
+#define PARTITION_FAT16_LBA_H (PARTITION_FAT16_LBA | PART_FLAG_HIDDEN)
+
+#define PARTITION_COMPAQ_DIAG 0x12
+#define PARTITION_MSFT_RECOVERY 0x27
+#define PARTITION_LDM 0x42
+#define PARTITION_LINUX_SWAP 0x82
+#define PARTITION_LINUX 0x83
+#define PARTITION_IRST 0x84
+#define PARTITION_LINUX_EXT 0x85
+#define PARTITION_LINUX_LVM 0x8e
+#define PARTITION_HFS 0xaf
+#define PARTITION_SUN_UFS 0xbf
+#define PARTITION_DELL_DIAG 0xde
+#define PARTITION_BLS_BOOT 0xea
+#define PARTITION_GPT 0xee
+#define PARTITION_ESP 0xef
+#define PARTITION_PALO 0xf0
+#define PARTITION_PREP 0x41
+#define PARTITION_LINUX_RAID 0xfd
+#define PARTITION_LINUX_LVM_OLD 0xfe
+
+struct flag_id_mapping_t
+{
+ enum _PedPartitionFlag flag;
+ unsigned char type_id;
+ unsigned char alt_type_id;
+};
+
+static const struct flag_id_mapping_t flag_id_mapping[] =
+{
+ { PED_PARTITION_BLS_BOOT, PARTITION_BLS_BOOT },
+ { PED_PARTITION_DIAG, PARTITION_COMPAQ_DIAG, PARTITION_DELL_DIAG },
+ { PED_PARTITION_ESP, PARTITION_ESP },
+ { PED_PARTITION_IRST, PARTITION_IRST },
+ { PED_PARTITION_LVM, PARTITION_LINUX_LVM, PARTITION_LINUX_LVM_OLD },
+ { PED_PARTITION_MSFT_RESERVED, PARTITION_MSFT_RECOVERY },
+ { PED_PARTITION_PALO, PARTITION_PALO },
+ { PED_PARTITION_PREP, PARTITION_PREP },
+ { PED_PARTITION_RAID, PARTITION_LINUX_RAID },
+ { PED_PARTITION_SWAP, PARTITION_LINUX_SWAP },
+};
+
+static const unsigned char skip_set_system_types[] =
+{
+ PARTITION_EXT_LBA,
+ PARTITION_DOS_EXT,
+ PARTITION_COMPAQ_DIAG,
+ PARTITION_MSFT_RECOVERY,
+ PARTITION_LINUX_LVM,
+ PARTITION_LINUX_SWAP,
+ PARTITION_LINUX_RAID,
+ PARTITION_PALO,
+ PARTITION_PREP,
+ PARTITION_IRST,
+ PARTITION_ESP,
+ PARTITION_BLS_BOOT
+};
+
+static const struct flag_id_mapping_t* _GL_ATTRIBUTE_CONST
+dos_find_flag_id_mapping (PedPartitionFlag flag)
+{
+ int n = sizeof(flag_id_mapping) / sizeof(flag_id_mapping[0]);
+
+ for (int i = 0; i < n; ++i)
+ if (flag_id_mapping[i].flag == flag)
+ return &flag_id_mapping[i];
+
+ return NULL;
+}
+
+/**
+ * Check whether the type_id supports the hidden flag. Returns true for both hidden and
+ * non-hidden id.
+ */
+static bool
+dos_type_id_supports_hidden(unsigned char type_id)
+{
+ switch (type_id)
+ {
+ case PARTITION_DOS_EXT:
+ case PARTITION_DOS_EXT_H:
+ case PARTITION_FAT12:
+ case PARTITION_FAT12_H:
+ case PARTITION_FAT16:
+ case PARTITION_FAT16_H:
+ case PARTITION_FAT16_LBA:
+ case PARTITION_FAT16_LBA_H:
+ case PARTITION_FAT16_SM:
+ case PARTITION_FAT16_SM_H:
+ case PARTITION_FAT32:
+ case PARTITION_FAT32_H:
+ case PARTITION_FAT32_LBA:
+ case PARTITION_FAT32_LBA_H:
+ case PARTITION_NTFS:
+ case PARTITION_NTFS_H:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+/**
+ * Check whether the type_id has the hidden flag set.
+ */
+static bool
+dos_type_id_is_hidden(unsigned char type_id)
+{
+ switch (type_id)
+ {
+ case PARTITION_DOS_EXT_H:
+ case PARTITION_FAT12_H:
+ case PARTITION_FAT16_H:
+ case PARTITION_FAT16_LBA_H:
+ case PARTITION_FAT16_SM_H:
+ case PARTITION_FAT32_H:
+ case PARTITION_FAT32_LBA_H:
+ case PARTITION_NTFS_H:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+/**
+ * Sets the hidden flag on type_id.
+ */
+static bool
+dos_type_id_set_hidden(unsigned char* type_id, bool state)
+{
+ PED_ASSERT (type_id);
+
+ if (!dos_type_id_supports_hidden(*type_id))
+ return false;
+
+ if (state)
+ *type_id |= PART_FLAG_HIDDEN;
+ else
+ *type_id &= ~PART_FLAG_HIDDEN;
+
+ return 1;
+}
+
+/**
+ * Check whether the type_id supports the lba flag. Returns true for both lba and non-lba
+ * id.
+ */
+static bool
+dos_type_id_supports_lba(unsigned char type_id)
+{
+ switch (type_id)
+ {
+ case PARTITION_FAT16:
+ case PARTITION_FAT16_H:
+ case PARTITION_FAT16_LBA:
+ case PARTITION_FAT16_LBA_H:
+ case PARTITION_FAT32:
+ case PARTITION_FAT32_H:
+ case PARTITION_FAT32_LBA:
+ case PARTITION_FAT32_LBA_H:
+ case PARTITION_DOS_EXT:
+ case PARTITION_EXT_LBA:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+/**
+ * Check whether the type_id has the lba flag set.
+ */
+static bool
+dos_type_id_is_lba(unsigned char type_id)
+{
+ switch (type_id)
+ {
+ case PARTITION_FAT16_LBA:
+ case PARTITION_FAT16_LBA_H:
+ case PARTITION_FAT32_LBA:
+ case PARTITION_FAT32_LBA_H:
+ case PARTITION_EXT_LBA:
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+/**
+ * Sets the lba flag on type_id.
+ */
+static bool
+dos_type_id_set_lba(unsigned char* type_id, bool state)
+{
+ PED_ASSERT (type_id);
+
+ if (!dos_type_id_supports_lba(*type_id))
+ return false;
+
+ if (state)
+ {
+ switch (*type_id)
+ {
+ case PARTITION_FAT16:
+ *type_id = PARTITION_FAT16_LBA;
+ break;
+
+ case PARTITION_FAT32:
+ *type_id = PARTITION_FAT32_LBA;
+ break;
+
+ case PARTITION_DOS_EXT:
+ *type_id = PARTITION_EXT_LBA;
+ break;
+ }
+ }
+ else
+ {
+ switch (*type_id)
+ {
+ case PARTITION_FAT16_LBA:
+ *type_id = PARTITION_FAT16;
+ break;
+
+ case PARTITION_FAT32_LBA:
+ *type_id = PARTITION_FAT32;
+ break;
+
+ case PARTITION_EXT_LBA:
+ *type_id = PARTITION_DOS_EXT;
+ break;
+ }
+ }
+
+ return true;
+}
+
+
+/* This constant contains the maximum cylinder number that can be represented
+ * in (C,H,S) notation. Higher cylinder numbers are reserved for
+ * "too big" indicators (in which case only LBA addressing can be used).
+ * Some partition tables in the wild indicate this number is 1021.
+ * (i.e. 1022 is sometimes used to indicate "use LBA").
+ */
+#define MAX_CHS_CYLINDER 1021
+#define MAX_TOTAL_PART 64
+
+typedef struct _DosRawPartition DosRawPartition;
+typedef struct _DosRawTable DosRawTable;
+
+/* note: lots of bit-bashing here, thus, you shouldn't look inside it.
+ * Use chs_to_sector() and sector_to_chs() instead.
+ */
+typedef struct {
+ uint8_t head;
+ uint8_t sector;
+ uint8_t cylinder;
+} __attribute__((packed)) RawCHS;
+
+/* ripped from Linux source */
+struct _DosRawPartition {
+ uint8_t boot_ind; /* 00: 0x80 - active */
+ RawCHS chs_start; /* 01: */
+ uint8_t type; /* 04: partition type */
+ RawCHS chs_end; /* 05: */
+ uint32_t start; /* 08: starting sector counting from 0 */
+ uint32_t length; /* 0c: nr of sectors in partition */
+} __attribute__((packed));
+
+struct _DosRawTable {
+ char boot_code [440];
+ uint32_t mbr_signature; /* really a unique ID */
+ uint16_t Unknown;
+ DosRawPartition partitions [DOS_N_PRI_PARTITIONS];
+ uint16_t magic;
+} __attribute__((packed));
+
+/* OrigState is information we want to preserve about the partition for
+ * dealing with CHS issues
+ */
+typedef struct {
+ PedGeometry geom;
+ DosRawPartition raw_part;
+ PedSector lba_offset; /* needed for computing start/end for
+ * logical partitions */
+} OrigState;
+
+typedef struct {
+ int cylinder_alignment;
+} DosDiskData;
+
+typedef struct {
+ unsigned char system;
+ int boot;
+ OrigState* orig; /* used for CHS stuff */
+} DosPartitionData;
+
+static PedDiskType msdos_disk_type;
+
+#if 0
+From http://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html
+
+The 2-byte numbers are stored little endian (low order byte first).
+
+Here the FAT12 version, that is also the common part of the FAT12, FAT16 and FAT32 boot sectors. See further below.
+
+Bytes Content
+0-2 Jump to bootstrap (E.g. eb 3c 90; on i86: JMP 003E NOP.
+ One finds either eb xx 90, or e9 xx xx.
+ The position of the bootstrap varies.)
+3-10 OEM name/version (E.g. "IBM 3.3", "IBM 20.0", "MSDOS5.0", "MSWIN4.0".
+ Various format utilities leave their own name, like "CH-FOR18".
+ Sometimes just garbage. Microsoft recommends "MSWIN4.1".)
+ /* BIOS Parameter Block starts here */
+11-12 Number of bytes per sector (512)
+ Must be one of 512, 1024, 2048, 4096.
+13 Number of sectors per cluster (1)
+ Must be one of 1, 2, 4, 8, 16, 32, 64, 128.
+ A cluster should have at most 32768 bytes. In rare cases 65536 is OK.
+14-15 Number of reserved sectors (1)
+ FAT12 and FAT16 use 1. FAT32 uses 32.
+16 Number of FAT copies (2)
+17-18 Number of root directory entries (224)
+ 0 for FAT32. 512 is recommended for FAT16.
+19-20 Total number of sectors in the filesystem (2880)
+ (in case the partition is not FAT32 and smaller than 32 MB)
+21 Media descriptor type (f0: 1.4 MB floppy, f8: hard disk; see below)
+22-23 Number of sectors per FAT (9)
+ 0 for FAT32.
+24-25 Number of sectors per track (12)
+26-27 Number of heads (2, for a double-sided diskette)
+28-29 Number of hidden sectors (0)
+ Hidden sectors are sectors preceding the partition.
+ /* BIOS Parameter Block ends here */
+30-509 Bootstrap
+510-511 Signature 55 aa
+#endif
+
+/* There is a significant risk of misclassifying (as msdos)
+ a disk that is composed solely of a single FAT partition.
+ Return false if sector S could not be a valid FAT boot sector.
+ Otherwise, return true. */
+static bool
+maybe_FAT (unsigned char const *s)
+{
+ if (! (s[0] == 0xeb || s[0] == 0xe9))
+ return false;
+
+ uint16_t sector_size = (s[12] << 8) | s[11];
+ switch (sector_size)
+ {
+ case 512:
+ case 1024:
+ case 2048:
+ case 4096:
+ break;
+ default:
+ return false;
+ }
+
+ if (! (s[21] == 0xf0 || s[21] == 0xf8))
+ return false;
+
+ return true;
+}
+
+PedGeometry*
+fat_probe_fat16 (PedGeometry* geom);
+
+PedGeometry*
+fat_probe_fat32 (PedGeometry* geom);
+
+PedGeometry*
+ntfs_probe (PedGeometry* geom);
+
+static int
+msdos_probe (const PedDevice *dev)
+{
+ PedDiskType* disk_type;
+ DosRawTable* part_table;
+ int i;
+ PedGeometry *geom = NULL;
+ PedGeometry *fsgeom = NULL;
+
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size < sizeof *part_table)
+ return 0;
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ part_table = (DosRawTable *) label;
+
+ /* check magic */
+ if (PED_LE16_TO_CPU (part_table->magic) != MSDOS_MAGIC)
+ goto probe_fail;
+
+ geom = ped_geometry_new (dev, 0, dev->length);
+ PED_ASSERT (geom);
+ fsgeom = fat_probe_fat16 (geom);
+ if (fsgeom)
+ goto probe_fail; /* fat fs looks like dos mbr */
+ fsgeom = fat_probe_fat32 (geom);
+ if (fsgeom)
+ goto probe_fail; /* fat fs looks like dos mbr */
+ fsgeom = ntfs_probe (geom);
+ if (fsgeom)
+ goto probe_fail; /* ntfs fs looks like dos mbr */
+ ped_geometry_destroy (geom);
+ geom = NULL;
+
+ /* If this is a FAT fs, fail here. Checking for the FAT signature
+ * has some false positives; instead, do what the Linux kernel does
+ * and ensure that each partition has a boot indicator that is
+ * either 0 or 0x80.
+ */
+ unsigned int n_active = 0;
+ for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) {
+ if (part_table->partitions[i].boot_ind == 0x80)
+ ++n_active;
+ if (part_table->partitions[i].boot_ind != 0
+ && part_table->partitions[i].boot_ind != 0x80)
+ goto probe_fail;
+ }
+
+ /* If there are no active partitions and this is probably
+ a FAT file system, do not classify it as msdos. */
+ if (n_active == 0 && maybe_FAT (label))
+ goto probe_fail;
+
+ /* If this is a GPT disk, fail here */
+ for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) {
+ if (part_table->partitions[i].type == PARTITION_GPT)
+ goto probe_fail;
+ }
+
+ /* If this is an AIX Physical Volume, fail here. IBMA in EBCDIC */
+ if (part_table->boot_code[0] == (char) 0xc9 &&
+ part_table->boot_code[1] == (char) 0xc2 &&
+ part_table->boot_code[2] == (char) 0xd4 &&
+ part_table->boot_code[3] == (char) 0xc1)
+ goto probe_fail;
+
+#ifdef ENABLE_PC98
+ /* HACK: it's impossible to tell PC98 and msdos disk labels apart.
+ * Someone made the signatures the same (very clever). Since
+ * PC98 has some idiosyncracies with it's boot-loader, it's detection
+ * is more reliable */
+ disk_type = ped_disk_type_get ("pc98");
+ if (disk_type && disk_type->ops->probe (dev))
+ goto probe_fail;
+#endif /* ENABLE_PC98 */
+
+ free (label);
+ return 1;
+
+ probe_fail:
+ if (geom)
+ ped_geometry_destroy (geom);
+ if (fsgeom)
+ ped_geometry_destroy (fsgeom);
+ free (label);
+ return 0;
+}
+
+static PedDisk*
+msdos_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ PED_ASSERT (dev != NULL);
+
+ disk = _ped_disk_alloc ((PedDevice*)dev, &msdos_disk_type);
+ if (disk) {
+ DosDiskData *disk_specific = ped_malloc(sizeof *disk_specific);
+ if (!disk_specific) {
+ free (disk);
+ return NULL;
+ }
+ disk_specific->cylinder_alignment = 1;
+ disk->disk_specific = disk_specific;
+ }
+
+ return disk;
+}
+
+static PedDisk*
+msdos_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &msdos_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ memcpy(new_disk->disk_specific, disk->disk_specific,
+ sizeof(DosDiskData));
+
+ return new_disk;
+}
+
+static void
+msdos_free (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ DosDiskData *disk_specific = disk->disk_specific;
+ _ped_disk_free (disk);
+ free(disk_specific);
+}
+
+static int
+msdos_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
+{
+ DosDiskData *disk_specific = disk->disk_specific;
+ switch (flag) {
+ case PED_DISK_CYLINDER_ALIGNMENT:
+ disk_specific->cylinder_alignment = !!state;
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+msdos_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
+{
+ DosDiskData *disk_specific = disk->disk_specific;
+ switch (flag) {
+ case PED_DISK_CYLINDER_ALIGNMENT:
+ return disk_specific->cylinder_alignment;
+ default:
+ return 0;
+ }
+}
+
+static int
+msdos_disk_is_flag_available (const PedDisk *disk, PedDiskFlag flag)
+{
+ switch (flag) {
+ case PED_DISK_CYLINDER_ALIGNMENT:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+chs_get_cylinder (const RawCHS* chs)
+{
+ return chs->cylinder + ((chs->sector >> 6) << 8);
+}
+
+static int
+chs_get_head (const RawCHS* chs)
+{
+ return chs->head;
+}
+
+/* counts from 0 */
+static int
+chs_get_sector (const RawCHS* chs)
+{
+ return (chs->sector & 0x3f) - 1;
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+chs_to_sector (const PedDevice* dev, const PedCHSGeometry *bios_geom,
+ const RawCHS* chs)
+{
+ PedSector c; /* not measured in sectors, but need */
+ PedSector h; /* lots of bits */
+ PedSector s;
+
+ PED_ASSERT (bios_geom != NULL);
+ PED_ASSERT (chs != NULL);
+
+ c = chs_get_cylinder (chs);
+ h = chs_get_head (chs);
+ s = chs_get_sector (chs);
+
+ if (c > MAX_CHS_CYLINDER) /* MAGIC: C/H/S is irrelevant */
+ return 0;
+ if (s < 0)
+ return 0;
+ return (c * bios_geom->heads + h) * bios_geom->sectors + s;
+}
+
+static void
+sector_to_chs (const PedDevice* dev, const PedCHSGeometry* bios_geom,
+ PedSector sector, RawCHS* chs)
+{
+ PedSector real_c, real_h, real_s;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (chs != NULL);
+
+ if (!bios_geom)
+ bios_geom = &dev->bios_geom;
+
+ real_c = sector / (bios_geom->heads * bios_geom->sectors);
+ real_h = (sector / bios_geom->sectors) % bios_geom->heads;
+ real_s = sector % bios_geom->sectors;
+
+ if (real_c > MAX_CHS_CYLINDER) {
+ real_c = 1023;
+ real_h = bios_geom->heads - 1;
+ real_s = bios_geom->sectors - 1;
+ }
+
+ chs->cylinder = real_c % 0x100;
+ chs->head = real_h;
+ chs->sector = real_s + 1 + (real_c >> 8 << 6);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+legacy_start (const PedDisk* disk, const PedCHSGeometry* bios_geom,
+ const DosRawPartition* raw_part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ return chs_to_sector (disk->dev, bios_geom, &raw_part->chs_start);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+legacy_end (const PedDisk* disk, const PedCHSGeometry* bios_geom,
+ const DosRawPartition* raw_part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ return chs_to_sector (disk->dev, bios_geom, &raw_part->chs_end);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+linear_start (const PedDisk* disk, const DosRawPartition* raw_part,
+ PedSector offset)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ return offset + PED_LE32_TO_CPU (raw_part->start);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+linear_end (const PedDisk* disk, const DosRawPartition* raw_part,
+ PedSector offset)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ return (linear_start (disk, raw_part, offset)
+ + (PED_LE32_TO_CPU (raw_part->length) - 1));
+}
+
+#ifndef DISCOVER_ONLY
+static int _GL_ATTRIBUTE_PURE
+partition_check_bios_geometry (PedPartition* part, PedCHSGeometry* bios_geom)
+{
+ PedSector leg_start, leg_end;
+ DosPartitionData* dos_data;
+ PedDisk* disk;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ dos_data = part->disk_specific;
+
+ if (!dos_data->orig)
+ return 1;
+
+ disk = part->disk;
+ leg_start = legacy_start (disk, bios_geom, &dos_data->orig->raw_part);
+ leg_end = legacy_end (disk, bios_geom, &dos_data->orig->raw_part);
+
+ if (leg_start && leg_start != dos_data->orig->geom.start)
+ return 0;
+ if (leg_end && leg_end != dos_data->orig->geom.end)
+ return 0;
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+disk_check_bios_geometry (const PedDisk* disk, PedCHSGeometry* bios_geom)
+{
+ PedPartition* part = NULL;
+
+ PED_ASSERT (disk != NULL);
+
+ while ((part = ped_disk_next_partition (disk, part))) {
+ if (ped_partition_is_active (part)) {
+ if (!partition_check_bios_geometry (part, bios_geom))
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static int
+probe_filesystem_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom)
+{
+ const char* ms_types[] = {"ntfs", "fat16", "fat32", NULL};
+ int i;
+ int found;
+ unsigned char* buf;
+ int sectors;
+ int heads;
+ int res = 0;
+
+ PED_ASSERT (bios_geom != NULL);
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (part->disk->dev != NULL);
+ PED_ASSERT (part->disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+
+ buf = ped_malloc (part->disk->dev->sector_size);
+
+ if (!buf)
+ return 0;
+
+ if (!part->fs_type)
+ goto end;
+
+ found = 0;
+ for (i = 0; ms_types[i]; i++) {
+ if (!strcmp(ms_types[i], part->fs_type->name))
+ found = 1;
+ }
+ if (!found)
+ goto end;
+
+ if (!ped_geometry_read(&part->geom, buf, 0, 1))
+ goto end;
+
+ /* shared by the start of all Microsoft file systems */
+ sectors = buf[0x18] + (buf[0x19] << 8);
+ heads = buf[0x1a] + (buf[0x1b] << 8);
+
+ if (sectors < 1 || sectors > 63)
+ goto end;
+ if (heads > 255 || heads < 1)
+ goto end;
+
+ bios_geom->sectors = sectors;
+ bios_geom->heads = heads;
+ bios_geom->cylinders = part->disk->dev->length / (sectors * heads);
+ res = 1;
+end:
+ free(buf);
+ return res;
+}
+
+/* This function attempts to infer the BIOS CHS geometry of the hard disk
+ * from the CHS + LBA information contained in the partition table from
+ * a single partition's entry.
+ *
+ * This involves some maths. Let (c,h,s,a) be the starting cylinder,
+ * starting head, starting sector and LBA start address of the partition.
+ * Likewise, (C,H,S,A) the end addresses. Using both of these pieces
+ * of information, we want to deduce cyl_sectors and head_sectors which
+ * are the sizes of a single cylinder and a single head, respectively.
+ *
+ * The relationships are:
+ * c*cyl_sectors + h * head_sectors + s = a
+ * C*cyl_sectors + H * head_sectors + S = A
+ *
+ * We can rewrite this in matrix form:
+ *
+ * [ c h ] [ cyl_sectors ] = [ s - a ] = [ a_ ]
+ * [ C H ] [ head_sectors ] [ S - A ] [ A_ ].
+ *
+ * (s - a is abbreviated to a_to simplify the notation.)
+ *
+ * This can be abbreviated into augmented matrix form:
+ *
+ * [ c h | a_ ]
+ * [ C H | A_ ].
+ *
+ * Solving these equations requires following the row reduction algorithm. We
+ * need to be careful about a few things though:
+ * - the equations might be linearly dependent, in which case there
+ * are many solutions.
+ * - the equations might be inconsistent, in which case there
+ * are no solutions. (Inconsistent partition table entry!)
+ * - there might be zeros, so we need to be careful about applying
+ * the algorithm. We know, however, that C > 0.
+ */
+static int
+probe_partition_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom)
+{
+ DosPartitionData* dos_data;
+ RawCHS* start_chs;
+ RawCHS* end_chs;
+ PedSector c, h, s, a, a_; /* start */
+ PedSector C, H, S, A, A_; /* end */
+ PedSector dont_overflow, denum;
+ PedSector cyl_size, head_size;
+ PedSector cylinders, heads, sectors;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ PED_ASSERT (bios_geom != NULL);
+
+ dos_data = part->disk_specific;
+
+ if (!dos_data->orig)
+ return 0;
+
+ start_chs = &dos_data->orig->raw_part.chs_start;
+ c = chs_get_cylinder (start_chs);
+ h = chs_get_head (start_chs);
+ s = chs_get_sector (start_chs);
+ a = dos_data->orig->geom.start;
+ a_ = a - s;
+
+ end_chs = &dos_data->orig->raw_part.chs_end;
+ C = chs_get_cylinder (end_chs);
+ H = chs_get_head (end_chs);
+ S = chs_get_sector (end_chs);
+ A = dos_data->orig->geom.end;
+ A_ = A - S;
+
+ if (h < 0 || H < 0 || h > 254 || H > 254)
+ return 0;
+ if (c > C)
+ return 0;
+
+ /* If no geometry is feasible, then don't even bother.
+ * Useful for eliminating assertions for broken partition
+ * tables generated by Norton Ghost et al.
+ */
+ if (A > (C+1) * 255 * 63)
+ return 0;
+
+ /* Not enough information. In theory, we can do better. Should we? */
+ if (C > MAX_CHS_CYLINDER)
+ return 0;
+ if (C == 0)
+ return 0;
+
+ /* Calculate the maximum number that can be multiplied by
+ * any head count without overflowing a PedSector
+ * 2^8 = 256, 8 bits + 1(sign bit) = 9
+ */
+ dont_overflow = 1;
+ dont_overflow <<= (8*sizeof(dont_overflow)) - 9;
+ dont_overflow--;
+
+ if (a_ > dont_overflow || A_ > dont_overflow)
+ return 0;
+
+ /* The matrix is solved by :
+ *
+ * [ c h | a_] R1
+ * [ C H | A_] R2
+ *
+ * (cH - Ch) cyl_size = a_H - A_h H R1 - h R2
+ * => (if cH - Ch != 0) cyl_size = (a_H - A_h) / (cH - Ch)
+ *
+ * (Hc - hC) head_size = A_c - a_C c R2 - C R1
+ * => (if cH - Ch != 0) head_size = (A_c - a_C) / (cH - Ch)
+ *
+ * But this calculation of head_size would need
+ * not overflowing A_c or a_C
+ * So substitution is use instead, to minimize dimension
+ * of temporary results :
+ *
+ * If h != 0 : head_size = ( a_ - c cyl_size ) / h
+ * If H != 0 : head_size = ( A_ - C cyl_size ) / H
+ *
+ */
+ denum = c * H - C * h;
+ if (denum == 0)
+ return 0;
+
+ cyl_size = (a_*H - A_*h) / denum;
+ /* Check for non integer result */
+ if (cyl_size * denum != a_*H - A_*h)
+ return 0;
+
+ if (!(cyl_size > 0))
+ return 0;
+ if (!(cyl_size <= 255 * 63))
+ return 0;
+
+ if (h > 0)
+ head_size = ( a_ - c * cyl_size ) / h;
+ else if (H > 0)
+ head_size = ( A_ - C * cyl_size ) / H;
+ else {
+ /* should not happen because denum != 0 */
+ PED_ASSERT (0);
+ }
+
+ if (!(head_size > 0))
+ return 0;
+ if (!(head_size <= 63))
+ return 0;
+
+ cylinders = part->disk->dev->length / cyl_size;
+ heads = cyl_size / head_size;
+ sectors = head_size;
+
+ if (!(heads > 0))
+ return 0;
+ if (!(heads < 256))
+ return 0;
+
+ if (!(sectors > 0))
+ return 0;
+ if (!(sectors <= 63))
+ return 0;
+
+ /* Some broken OEM partitioning program(s) seem to have an out-by-one
+ * error on the end of partitions. We should offer to fix the
+ * partition table...
+ */
+ if (((C + 1) * heads + H) * sectors + S == A)
+ C++;
+
+ if (!((c * heads + h) * sectors + s == a))
+ return 0;
+ if (!((C * heads + H) * sectors + S == A))
+ return 0;
+
+ bios_geom->cylinders = cylinders;
+ bios_geom->heads = heads;
+ bios_geom->sectors = sectors;
+
+ return 1;
+}
+
+static void
+partition_probe_bios_geometry (const PedPartition* part,
+ PedCHSGeometry* bios_geom)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+ PED_ASSERT (bios_geom != NULL);
+
+ if (ped_partition_is_active (part)) {
+ if (probe_partition_for_geom (part, bios_geom))
+ return;
+ if (part->type & PED_PARTITION_EXTENDED) {
+ if (probe_filesystem_for_geom (part, bios_geom))
+ return;
+ }
+ }
+ if (part->type & PED_PARTITION_LOGICAL) {
+ PedPartition* ext_part;
+ ext_part = ped_disk_extended_partition (part->disk);
+ PED_ASSERT (ext_part != NULL);
+ partition_probe_bios_geometry (ext_part, bios_geom);
+ } else {
+ *bios_geom = part->disk->dev->bios_geom;
+ }
+}
+
+static void
+disk_probe_bios_geometry (const PedDisk* disk, PedCHSGeometry* bios_geom)
+{
+ PedPartition* part;
+
+ /* first look at the boot partition */
+ part = NULL;
+ while ((part = ped_disk_next_partition (disk, part))) {
+ if (!ped_partition_is_active (part))
+ continue;
+ if (ped_partition_get_flag (part, PED_PARTITION_BOOT)) {
+ if (probe_filesystem_for_geom (part, bios_geom))
+ return;
+ if (probe_partition_for_geom (part, bios_geom))
+ return;
+ }
+ }
+
+ /* that didn't work... try all partition table entries */
+ part = NULL;
+ while ((part = ped_disk_next_partition (disk, part))) {
+ if (ped_partition_is_active (part)) {
+ if (probe_partition_for_geom (part, bios_geom))
+ return;
+ }
+ }
+
+ /* that didn't work... look at all file systems */
+ part = NULL;
+ while ((part = ped_disk_next_partition (disk, part))) {
+ if (ped_partition_is_active (part)) {
+ if (probe_filesystem_for_geom (part, bios_geom))
+ return;
+ }
+ }
+}
+#endif /* !DISCOVER_ONLY */
+
+static int _GL_ATTRIBUTE_PURE
+raw_part_is_extended (const DosRawPartition* raw_part)
+{
+ PED_ASSERT (raw_part != NULL);
+
+ switch (raw_part->type) {
+ case PARTITION_DOS_EXT:
+ case PARTITION_EXT_LBA:
+ case PARTITION_LINUX_EXT:
+ return 1;
+
+ default:
+ return 0;
+ }
+
+ return 0;
+}
+
+static PedPartition*
+raw_part_parse (const PedDisk* disk, const DosRawPartition* raw_part,
+ PedSector lba_offset, PedPartitionType type)
+{
+ PedPartition* part;
+ DosPartitionData* dos_data;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ part = ped_partition_new (
+ disk, type, NULL,
+ linear_start (disk, raw_part, lba_offset),
+ linear_end (disk, raw_part, lba_offset));
+ if (!part)
+ return NULL;
+ dos_data = part->disk_specific;
+ dos_data->system = raw_part->type;
+ dos_data->boot = raw_part->boot_ind != 0;
+ dos_data->orig = ped_malloc (sizeof (OrigState));
+ if (!dos_data->orig) {
+ ped_partition_destroy (part);
+ return NULL;
+ }
+ dos_data->orig->geom = part->geom;
+ dos_data->orig->raw_part = *raw_part;
+ dos_data->orig->lba_offset = lba_offset;
+ return part;
+}
+
+static int
+read_table (PedDisk* disk, PedSector sector, int is_extended_table)
+{
+ int i;
+ DosRawTable* table;
+ DosRawPartition* raw_part;
+ PedPartition* part;
+ PedPartitionType type;
+ PedSector lba_offset;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ void *label = NULL;
+ if (!ptt_read_sector (disk->dev, sector, &label))
+ goto error;
+
+ table = (DosRawTable *) label;
+
+ /* weird: empty extended partitions are filled with 0xf6 by PM */
+ if (is_extended_table
+ && PED_LE16_TO_CPU (table->magic) == PARTITION_MAGIC_MAGIC)
+ goto read_ok;
+
+#ifndef DISCOVER_ONLY
+ if (PED_LE16_TO_CPU (table->magic) != MSDOS_MAGIC) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL,
+ _("Invalid partition table on %s "
+ "-- wrong signature %x."),
+ disk->dev->path,
+ PED_LE16_TO_CPU (table->magic))
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+ goto read_ok;
+ }
+#endif
+
+ /* parse the partitions from this table */
+ for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) {
+ raw_part = &table->partitions [i];
+ if (raw_part->type == PARTITION_EMPTY || !raw_part->length)
+ continue;
+
+ /* process nested extended partitions after normal logical
+ * partitions, to make sure we get the order right.
+ */
+ if (is_extended_table && raw_part_is_extended (raw_part))
+ continue;
+
+ lba_offset = is_extended_table ? sector : 0;
+
+ if (linear_start (disk, raw_part, lba_offset) == sector) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Invalid partition table - recursive "
+ "partition on %s."),
+ disk->dev->path)
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+ continue; /* avoid infinite recursion */
+ }
+
+ if (is_extended_table)
+ type = PED_PARTITION_LOGICAL;
+ else if (raw_part_is_extended (raw_part))
+ type = PED_PARTITION_EXTENDED;
+ else
+ type = PED_PARTITION_NORMAL;
+
+ part = raw_part_parse (disk, raw_part, lba_offset, type);
+ if (!part)
+ goto error;
+ if (!is_extended_table)
+ part->num = i + 1;
+ if (type != PED_PARTITION_EXTENDED)
+ part->fs_type = ped_file_system_probe (&part->geom);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok)
+ goto error;
+
+ /* non-nested extended partition */
+ if (part->type == PED_PARTITION_EXTENDED) {
+ if (!read_table (disk, part->geom.start, 1))
+ goto error;
+ }
+ }
+
+ if (is_extended_table) {
+ /* process the nested extended partitions */
+ for (i = 0; i < DOS_N_PRI_PARTITIONS; i++) {
+ PedSector part_start;
+
+ raw_part = &table->partitions [i];
+ if (!raw_part_is_extended (raw_part))
+ continue;
+
+ lba_offset = ped_disk_extended_partition
+ (disk)->geom.start;
+ part_start = linear_start (disk, raw_part, lba_offset);
+ if (part_start == sector) {
+ /* recursive table - already threw an
+ * exception above.
+ */
+ continue;
+ }
+ if (!read_table (disk, part_start, 1))
+ goto error;
+ }
+ }
+
+read_ok:
+ free (label);
+ return 1;
+
+error:
+ free (label);
+ ped_disk_delete_all (disk);
+ return 0;
+}
+
+static int
+msdos_read (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ ped_disk_delete_all (disk);
+ if (!read_table (disk, 0, 0))
+ return 0;
+
+#ifndef DISCOVER_ONLY
+ /* try to figure out the correct BIOS CHS values */
+ if (!disk_check_bios_geometry (disk, &disk->dev->bios_geom)) {
+ PedCHSGeometry bios_geom = disk->dev->bios_geom;
+ disk_probe_bios_geometry (disk, &bios_geom);
+
+ /* if the geometry was wrong, then we should reread, to
+ * make sure the metadata is allocated in the right places.
+ */
+ if (disk->dev->bios_geom.cylinders != bios_geom.cylinders
+ || disk->dev->bios_geom.heads != bios_geom.heads
+ || disk->dev->bios_geom.sectors != bios_geom.sectors) {
+ disk->dev->bios_geom = bios_geom;
+ return msdos_read (disk);
+ }
+ }
+#endif
+
+ return 1;
+}
+
+#ifndef DISCOVER_ONLY
+static int
+fill_raw_part (DosRawPartition* raw_part,
+ const PedPartition* part, PedSector offset)
+{
+ DosPartitionData* dos_data;
+ PedCHSGeometry bios_geom;
+
+ PED_ASSERT (raw_part != NULL);
+ PED_ASSERT (part != NULL);
+
+ partition_probe_bios_geometry (part, &bios_geom);
+
+ dos_data = part->disk_specific;
+
+ raw_part->boot_ind = 0x80 * dos_data->boot;
+ raw_part->type = dos_data->system;
+ raw_part->start = PED_CPU_TO_LE32 (part->geom.start - offset);
+ raw_part->length = PED_CPU_TO_LE32 (part->geom.length);
+
+ sector_to_chs (part->disk->dev, &bios_geom, part->geom.start,
+ &raw_part->chs_start);
+ sector_to_chs (part->disk->dev, &bios_geom, part->geom.end,
+ &raw_part->chs_end);
+
+ if (dos_data->orig) {
+ DosRawPartition* orig_raw_part = &dos_data->orig->raw_part;
+ if (dos_data->orig->geom.start == part->geom.start)
+ raw_part->chs_start = orig_raw_part->chs_start;
+ if (dos_data->orig->geom.end == part->geom.end)
+ raw_part->chs_end = orig_raw_part->chs_end;
+ }
+
+ return 1;
+}
+
+static int
+fill_ext_raw_part_geom (DosRawPartition* raw_part,
+ const PedCHSGeometry* bios_geom,
+ const PedGeometry* geom, PedSector offset)
+{
+ PED_ASSERT (raw_part != NULL);
+ PED_ASSERT (geom != NULL);
+ PED_ASSERT (geom->dev != NULL);
+
+ raw_part->boot_ind = 0;
+ raw_part->type = PARTITION_DOS_EXT;
+ raw_part->start = PED_CPU_TO_LE32 (geom->start - offset);
+ raw_part->length = PED_CPU_TO_LE32 (geom->length);
+
+ sector_to_chs (geom->dev, bios_geom, geom->start, &raw_part->chs_start);
+ sector_to_chs (geom->dev, bios_geom, geom->start + geom->length - 1,
+ &raw_part->chs_end);
+
+ return 1;
+}
+
+static int
+write_ext_table (const PedDisk* disk,
+ PedSector sector, const PedPartition* logical)
+{
+ PedPartition* part;
+ PedSector lba_offset;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (ped_disk_extended_partition (disk) != NULL);
+ PED_ASSERT (logical != NULL);
+
+ lba_offset = ped_disk_extended_partition (disk)->geom.start;
+
+ void* s;
+ if (!ptt_read_sector (disk->dev, sector, &s))
+ return 0;
+
+ DosRawTable *table = s;
+ memset(&(table->partitions), 0, sizeof (table->partitions));
+ table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
+
+ int ok = 0;
+ if (!fill_raw_part (&table->partitions[0], logical, sector))
+ goto cleanup;
+
+ part = ped_disk_get_partition (disk, logical->num + 1);
+ if (part) {
+ PedGeometry* geom;
+ PedCHSGeometry bios_geom;
+
+ geom = ped_geometry_new (disk->dev, part->prev->geom.start,
+ part->geom.end - part->prev->geom.start + 1);
+ if (!geom)
+ goto cleanup;
+ partition_probe_bios_geometry (part, &bios_geom);
+ fill_ext_raw_part_geom (&table->partitions[1], &bios_geom,
+ geom, lba_offset);
+ ped_geometry_destroy (geom);
+
+ if (!write_ext_table (disk, part->prev->geom.start, part))
+ goto cleanup;
+ }
+
+ ok = ped_device_write (disk->dev, table, sector, 1);
+ cleanup:
+ free (s);
+ return ok;
+}
+
+static int
+write_empty_table (const PedDisk* disk, PedSector sector)
+{
+ DosRawTable table;
+ void* table_sector;
+
+ PED_ASSERT (disk != NULL);
+
+ if (ptt_read_sector (disk->dev, sector, &table_sector)) {
+ memcpy (&table, table_sector, sizeof (table));
+ free(table_sector);
+ }
+ memset (&(table.partitions), 0, sizeof (table.partitions));
+ table.magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
+
+ return ped_device_write (disk->dev, (void*) &table, sector, 1);
+}
+
+/* Find the first logical partition, and write the partition table for it.
+ */
+static int
+write_extended_partitions (const PedDisk* disk)
+{
+ PedPartition* ext_part;
+ PedPartition* part;
+ PedCHSGeometry bios_geom;
+
+ PED_ASSERT (disk != NULL);
+
+ ext_part = ped_disk_extended_partition (disk);
+ partition_probe_bios_geometry (ext_part, &bios_geom);
+ part = ped_disk_get_partition (disk, 5);
+ if (part)
+ return write_ext_table (disk, ext_part->geom.start, part);
+ else
+ return write_empty_table (disk, ext_part->geom.start);
+}
+
+static int
+msdos_write (const PedDisk* disk)
+{
+ PedPartition* part;
+ int i;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ return 0;
+ DosRawTable *table = (DosRawTable *) s0;
+
+ if (!table->boot_code[0]) {
+ memset (table, 0, 512);
+ memcpy (table->boot_code, MBR_BOOT_CODE, sizeof (MBR_BOOT_CODE));
+ }
+
+ /* If there is no unique identifier, generate a random one */
+ if (!table->mbr_signature)
+ table->mbr_signature = generate_random_uint32 ();
+
+ memset (table->partitions, 0, sizeof (table->partitions));
+ table->magic = PED_CPU_TO_LE16 (MSDOS_MAGIC);
+
+ for (i=1; i<=DOS_N_PRI_PARTITIONS; i++) {
+ part = ped_disk_get_partition (disk, i);
+ if (!part)
+ continue;
+
+ if (!fill_raw_part (&table->partitions [i - 1], part, 0))
+ goto write_fail;
+
+ if (part->type == PED_PARTITION_EXTENDED) {
+ if (!write_extended_partitions (disk))
+ goto write_fail;
+ }
+ }
+
+ int write_ok = ped_device_write (disk->dev, (void*) table, 0, 1);
+ free (s0);
+ if (!write_ok)
+ return 0;
+ return ped_device_sync (disk->dev);
+
+ write_fail:
+ free (s0);
+ return 0;
+
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+msdos_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+ DosPartitionData* dos_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (ped_partition_is_active (part)) {
+ part->disk_specific
+ = dos_data = ped_calloc (sizeof (DosPartitionData));
+ if (!dos_data)
+ goto error_free_part;
+ dos_data->system = PARTITION_LINUX;
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return 0;
+}
+
+static PedPartition*
+msdos_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+ DosPartitionData* new_dos_data;
+ DosPartitionData* old_dos_data;
+
+ new_part = ped_partition_new (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ old_dos_data = (DosPartitionData*) part->disk_specific;
+ new_dos_data = (DosPartitionData*) new_part->disk_specific;
+ new_dos_data->system = old_dos_data->system;
+ new_dos_data->boot = old_dos_data->boot;
+
+ if (old_dos_data->orig) {
+ new_dos_data->orig = ped_malloc (sizeof (OrigState));
+ if (!new_dos_data->orig) {
+ ped_partition_destroy (new_part);
+ return NULL;
+ }
+ new_dos_data->orig->geom = old_dos_data->orig->geom;
+ new_dos_data->orig->raw_part = old_dos_data->orig->raw_part;
+ new_dos_data->orig->lba_offset = old_dos_data->orig->lba_offset;
+ }
+ return new_part;
+}
+
+static void
+msdos_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part)) {
+ DosPartitionData* dos_data;
+ dos_data = (DosPartitionData*) part->disk_specific;
+ free (dos_data->orig);
+ free (part->disk_specific);
+ }
+ free (part);
+}
+
+/* is_skip_type checks the type against the list of types that should not be
+ * overridden by set_system. It returns a 1 if it is in the list.
+*/
+static bool
+is_skip_type(unsigned char type_id) {
+ int n = sizeof(skip_set_system_types) / sizeof(skip_set_system_types[0]);
+ for (int i = 0; i < n; ++i) {
+ if (type_id == skip_set_system_types[i]) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static int
+msdos_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type)
+{
+ DosPartitionData* dos_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ // Is this a type that should skip fs_type checking?
+ if (is_skip_type(dos_data->system)) {
+ return 1;
+ }
+
+ if (part->type & PED_PARTITION_EXTENDED) {
+ dos_data->system = PARTITION_EXT_LBA;
+ return 1;
+ }
+
+ if (!fs_type)
+ dos_data->system = PARTITION_LINUX;
+ else if (!strcmp (fs_type->name, "fat16"))
+ dos_data->system = PARTITION_FAT16;
+ else if (!strcmp (fs_type->name, "fat32"))
+ dos_data->system = PARTITION_FAT32;
+ else if (!strcmp (fs_type->name, "ntfs")
+ || !strcmp (fs_type->name, "hpfs"))
+ dos_data->system = PARTITION_NTFS;
+ else if (!strcmp (fs_type->name, "hfs")
+ || !strcmp (fs_type->name, "hfs+"))
+ dos_data->system = PARTITION_HFS;
+ else if (!strcmp (fs_type->name, "udf"))
+ dos_data->system = PARTITION_UDF;
+ else if (!strcmp (fs_type->name, "sun-ufs"))
+ dos_data->system = PARTITION_SUN_UFS;
+ else if (is_linux_swap (fs_type->name))
+ dos_data->system = PARTITION_LINUX_SWAP;
+ else
+ dos_data->system = PARTITION_LINUX;
+
+ return 1;
+}
+
+static int
+msdos_partition_set_flag (PedPartition* part,
+ PedPartitionFlag flag, int state)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ DosPartitionData* dos_data = part->disk_specific;
+
+ const struct flag_id_mapping_t* p = dos_find_flag_id_mapping (flag);
+ if (p)
+ {
+ if (part->type & PED_PARTITION_EXTENDED)
+ return 0;
+
+ if (state) {
+ dos_data->system = p->type_id;
+ } else if (dos_data->system == p->type_id || dos_data->system == p->alt_type_id) {
+ // Clear the type so that fs_type will be used to return it to the default
+ dos_data->system = PARTITION_LINUX;
+ return ped_partition_set_system (part, part->fs_type);
+ }
+ return 1;
+ }
+
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ {
+ return dos_type_id_set_hidden(&dos_data->system, state);
+ }
+
+ case PED_PARTITION_LBA:
+ {
+ return dos_type_id_set_lba(&dos_data->system, state);
+ }
+
+ case PED_PARTITION_BOOT:
+ {
+ dos_data->boot = state;
+
+ if (state)
+ {
+ PedDisk* disk = part->disk;
+ PedPartition* walk = ped_disk_next_partition (disk, NULL);
+ for (; walk; walk = ped_disk_next_partition (disk, walk)) {
+ if (walk == part || !ped_partition_is_active (walk))
+ continue;
+ msdos_partition_set_flag (walk, PED_PARTITION_BOOT, 0);
+ }
+ }
+
+ return 1;
+ }
+
+ default:
+ return 0;
+ }
+}
+
+static int _GL_ATTRIBUTE_PURE
+msdos_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ DosPartitionData* dos_data = part->disk_specific;
+
+ const struct flag_id_mapping_t* p = dos_find_flag_id_mapping (flag);
+ if (p)
+ return dos_data->system == p->type_id || dos_data->system == p->alt_type_id;
+
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ return dos_type_id_is_hidden(dos_data->system);
+
+ case PED_PARTITION_LBA:
+ return dos_type_id_is_lba(dos_data->system);
+
+ case PED_PARTITION_BOOT:
+ return dos_data->boot;
+
+ default:
+ return 0;
+ }
+}
+
+static int
+msdos_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ if (dos_find_flag_id_mapping (flag))
+ return part->type != PED_PARTITION_EXTENDED;
+
+ DosPartitionData* dos_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ return dos_type_id_supports_hidden(dos_data->system);
+
+ case PED_PARTITION_LBA:
+ return dos_type_id_supports_lba(dos_data->system);
+
+ case PED_PARTITION_BOOT:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+
+int
+msdos_partition_set_type_id (PedPartition* part, uint8_t id)
+{
+ DosPartitionData* dos_data = part->disk_specific;
+
+ dos_data->system = id;
+
+ return 1;
+}
+
+
+uint8_t _GL_ATTRIBUTE_PURE
+msdos_partition_get_type_id (const PedPartition* part)
+{
+ const DosPartitionData* dos_data = part->disk_specific;
+
+ return dos_data->system;
+}
+
+
+static PedGeometry*
+_try_constraint (const PedPartition* part, const PedConstraint* external,
+ PedConstraint* internal)
+{
+ PedConstraint* intersection;
+ PedGeometry* solution;
+
+ intersection = ped_constraint_intersect (external, internal);
+ ped_constraint_destroy (internal);
+ if (!intersection)
+ return NULL;
+
+ solution = ped_constraint_solve_nearest (intersection, &part->geom);
+ ped_constraint_destroy (intersection);
+ return solution;
+}
+
+static PedGeometry*
+_best_solution (const PedPartition* part, const PedCHSGeometry* bios_geom,
+ PedGeometry* a, PedGeometry* b)
+{
+ PedSector cyl_size = bios_geom->heads * bios_geom->sectors;
+ int a_cylinder;
+ int b_cylinder;
+
+ if (!a)
+ return b;
+ if (!b)
+ return a;
+
+ a_cylinder = a->start / cyl_size;
+ b_cylinder = b->start / cyl_size;
+
+ if (a_cylinder == b_cylinder) {
+ if ( (a->start / bios_geom->sectors) % bios_geom->heads
+ < (b->start / bios_geom->sectors) % bios_geom->heads)
+ goto choose_a;
+ else
+ goto choose_b;
+ } else {
+ PedSector a_delta;
+ PedSector b_delta;
+
+ a_delta = llabs (part->geom.start - a->start);
+ b_delta = llabs (part->geom.start - b->start);
+
+ if (a_delta < b_delta)
+ goto choose_a;
+ else
+ goto choose_b;
+ }
+
+ return NULL; /* never get here! */
+
+choose_a:
+ ped_geometry_destroy (b);
+ return a;
+
+choose_b:
+ ped_geometry_destroy (a);
+ return b;
+}
+
+/* This constraint is for "normal" primary partitions, that start at the
+ * beginning of a cylinder, and end at the end of a cylinder.
+ * Note: you can't start a partition at the beginning of the 1st
+ * cylinder, because that's where the partition table is! There are different
+ * rules for that - see the _primary_start_constraint.
+ */
+static PedConstraint*
+_primary_constraint (const PedDisk* disk, const PedCHSGeometry* bios_geom,
+ PedGeometry* min_geom)
+{
+ PedDevice* dev = disk->dev;
+ PedSector cylinder_size = bios_geom->sectors * bios_geom->heads;
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry start_geom;
+ PedGeometry end_geom;
+
+ if (!ped_alignment_init (&start_align, 0, cylinder_size))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, cylinder_size))
+ return NULL;
+
+ if (min_geom) {
+ if (min_geom->start < cylinder_size)
+ return NULL;
+ if (!ped_geometry_init (&start_geom, dev, cylinder_size,
+ min_geom->start + 1 - cylinder_size))
+ return NULL;
+ if (!ped_geometry_init (&end_geom, dev, min_geom->end,
+ dev->length - min_geom->end))
+ return NULL;
+ } else {
+ /* Use cylinder_size as the starting sector number
+ when the device is large enough to accommodate that.
+ Otherwise, use sector 1. */
+ PedSector start = (cylinder_size < dev->length
+ ? cylinder_size : 1);
+ if (!ped_geometry_init (&start_geom, dev, start,
+ dev->length - start))
+ return NULL;
+ if (!ped_geometry_init (&end_geom, dev, 0, dev->length))
+ return NULL;
+ }
+
+ return ped_constraint_new (&start_align, &end_align, &start_geom,
+ &end_geom, 1, dev->length);
+}
+
+/* This constraint is for partitions starting on the first cylinder. They
+ * must start on the 2nd head of the 1st cylinder.
+ *
+ * NOTE: We don't always start on the 2nd head of the 1st cylinder. Windows
+ * Vista aligns starting partitions at sector 2048 (0x800) by default. See:
+ * http://support.microsoft.com/kb/923332
+ */
+static PedConstraint*
+_primary_start_constraint (const PedDisk* disk,
+ const PedPartition *part,
+ const PedCHSGeometry* bios_geom,
+ const PedGeometry* min_geom)
+{
+ PedDevice* dev = disk->dev;
+ PedSector cylinder_size = bios_geom->sectors * bios_geom->heads;
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry start_geom;
+ PedGeometry end_geom;
+ PedSector start_pos;
+
+ if (part->geom.start == 2048)
+ /* check for known Windows Vista (NTFS >= 3.1) alignments */
+ /* sector 0x800 == 2048 */
+ start_pos = 2048;
+ else
+ /* all other primary partitions on a DOS label align to */
+ /* the 2nd head of the first cylinder (0x3F == 63) */
+ start_pos = bios_geom->sectors;
+
+ if (!ped_alignment_init (&start_align, start_pos, 0))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, cylinder_size))
+ return NULL;
+ if (min_geom) {
+ if (!ped_geometry_init (&start_geom, dev, start_pos, 1))
+ return NULL;
+ if (!ped_geometry_init (&end_geom, dev, min_geom->end,
+ dev->length - min_geom->end))
+ return NULL;
+ } else {
+ if (!ped_geometry_init (&start_geom, dev, start_pos,
+ dev->length - start_pos))
+ return NULL;
+ if (!ped_geometry_init (&end_geom, dev, 0, dev->length))
+ return NULL;
+ }
+
+ return ped_constraint_new (&start_align, &end_align, &start_geom,
+ &end_geom, 1, dev->length);
+}
+
+/* constraints for logical partitions:
+ * - start_offset is the offset in the start alignment. "normally",
+ * this is bios_geom->sectors. exceptions: MINOR > 5 at the beginning of the
+ * extended partition, or MINOR == 5 in the middle of the extended partition
+ * - is_start_part == 1 if the constraint is for the first cylinder of
+ * the extended partition, or == 0 if the constraint is for the second cylinder
+ * onwards of the extended partition.
+ */
+static PedConstraint*
+_logical_constraint (const PedDisk* disk, const PedCHSGeometry* bios_geom,
+ PedSector start_offset, int is_start_part)
+{
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+ PedDevice* dev = disk->dev;
+ PedSector cylinder_size = bios_geom->sectors * bios_geom->heads;
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry max_geom;
+
+ PED_ASSERT (ext_part != NULL);
+
+ if (!ped_alignment_init (&start_align, start_offset, cylinder_size))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, cylinder_size))
+ return NULL;
+ if (is_start_part) {
+ if (!ped_geometry_init (&max_geom, dev,
+ ext_part->geom.start,
+ ext_part->geom.length))
+ return NULL;
+ } else {
+ PedSector min_start;
+ PedSector max_length;
+
+ min_start = ped_round_up_to (ext_part->geom.start + 1,
+ cylinder_size);
+ max_length = ext_part->geom.end - min_start + 1;
+ if (min_start >= ext_part->geom.end)
+ return NULL;
+
+ if (!ped_geometry_init (&max_geom, dev, min_start, max_length))
+ return NULL;
+ }
+
+ return ped_constraint_new (&start_align, &end_align, &max_geom,
+ &max_geom, 1, dev->length);
+}
+
+/* returns the minimum geometry for the extended partition, given that the
+ * extended partition must contain:
+ * * all logical partitions
+ * * all partition tables for all logical partitions (except the first)
+ * * the extended partition table
+ */
+static PedGeometry*
+_get_min_extended_part_geom (const PedPartition* ext_part,
+ const PedCHSGeometry* bios_geom)
+{
+ PedDisk* disk = ext_part->disk;
+ PedSector head_size = bios_geom ? bios_geom->sectors : 1;
+ PedPartition* walk;
+ PedGeometry* min_geom;
+
+ walk = ped_disk_get_partition (disk, 5);
+ if (!walk)
+ return NULL;
+
+ min_geom = ped_geometry_duplicate (&walk->geom);
+ if (!min_geom)
+ return NULL;
+ /* We must always allow at least two sectors at the start, to leave
+ * room for LILO. See linux/fs/partitions/msdos.c.
+ */
+ ped_geometry_set_start (min_geom,
+ walk->geom.start - PED_MAX (1 * head_size, 2));
+
+ for (walk = ext_part->part_list; walk; walk = walk->next) {
+ if (!ped_partition_is_active (walk) || walk->num == 5)
+ continue;
+ if (walk->geom.start < min_geom->start)
+ ped_geometry_set_start (min_geom,
+ walk->geom.start - 2 * head_size);
+ if (walk->geom.end > min_geom->end)
+ ped_geometry_set_end (min_geom, walk->geom.end);
+ }
+
+ return min_geom;
+}
+
+static int
+_align_primary (PedPartition* part, const PedCHSGeometry* bios_geom,
+ const PedConstraint* constraint)
+{
+ PedDisk* disk = part->disk;
+ PedGeometry* min_geom = NULL;
+ PedGeometry* solution = NULL;
+
+ if (part->type == PED_PARTITION_EXTENDED)
+ min_geom = _get_min_extended_part_geom (part, bios_geom);
+
+ solution = _best_solution (part, bios_geom, solution,
+ _try_constraint (part, constraint,
+ _primary_start_constraint (disk, part,
+ bios_geom, min_geom)));
+
+ solution = _best_solution (part, bios_geom, solution,
+ _try_constraint (part, constraint,
+ _primary_constraint (disk, bios_geom,
+ min_geom)));
+
+ if (min_geom)
+ ped_geometry_destroy (min_geom);
+
+ if (solution) {
+ ped_geometry_set (&part->geom, solution->start,
+ solution->length);
+ ped_geometry_destroy (solution);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+_logical_min_start_head (const PedPartition* part,
+ const PedCHSGeometry* bios_geom,
+ const PedPartition* ext_part,
+ int is_start_ext_part)
+{
+ PedSector cylinder_size = bios_geom->sectors * bios_geom->heads;
+ PedSector base_head;
+
+ if (is_start_ext_part)
+ base_head = 1 + (ext_part->geom.start % cylinder_size)
+ / bios_geom->sectors;
+ else
+ base_head = 0;
+
+ if (part->num == 5)
+ return base_head + 0;
+ else
+ return base_head + 1;
+}
+
+/* Shamelessly copied and adapted from _partition_get_overlap_constraint
+ * (in disk.c)
+ * This should get rid of the infamous Assertion (metadata_length > 0) failed
+ * bug for extended msdos disklabels generated by Parted.
+ * 1) There always is a partition table at the start of ext_part, so we leave
+ * a one sector gap there.
+ * 2)*The partition table of part5 is always at the beginning of the ext_part
+ * so there is no need to leave a one sector gap before part5.
+ * *There always is a partition table at the beginning of each partition != 5.
+ * We don't need to worry to much about consistency with
+ * _partition_get_overlap_constraint because missing it means we are in edge
+ * cases anyway, and we don't lose anything by just refusing to do the job in
+ * those cases.
+ */
+static PedConstraint*
+_log_meta_overlap_constraint (PedPartition* part, const PedGeometry* geom)
+{
+ PedGeometry safe_space;
+ PedSector min_start;
+ PedSector max_end;
+ PedPartition* ext_part = ped_disk_extended_partition (part->disk);
+ PedPartition* walk;
+ int not_5 = (part->num != 5);
+
+ PED_ASSERT (ext_part != NULL);
+
+ walk = ext_part->part_list;
+
+ /* 1) 2) */
+ min_start = ext_part->geom.start + 1 + not_5;
+ max_end = ext_part->geom.end;
+
+ while (walk != NULL /* 2) 2) */
+ && ( walk->geom.start - (walk->num != 5) < geom->start - not_5
+ || walk->geom.start - (walk->num != 5) <= min_start )) {
+ if (walk != part && ped_partition_is_active (walk))
+ min_start = walk->geom.end + 1 + not_5; /* 2) */
+ walk = walk->next;
+ }
+
+ while (walk && (walk == part || !ped_partition_is_active (walk)))
+ walk = walk->next;
+
+ if (walk)
+ max_end = walk->geom.start - 1 - (walk->num != 5); /* 2) */
+
+ if (min_start >= max_end)
+ return NULL;
+
+ ped_geometry_init (&safe_space, part->disk->dev,
+ min_start, max_end - min_start + 1);
+ return ped_constraint_new_from_max (&safe_space);
+}
+
+static int
+_align_logical (PedPartition* part, const PedCHSGeometry* bios_geom,
+ const PedConstraint* constraint)
+{
+ PedDisk* disk = part->disk;
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+ PedSector cyl_size = bios_geom->sectors * bios_geom->heads;
+ PedSector start_base;
+ int head;
+ PedGeometry* solution = NULL;
+ PedConstraint *intersect, *log_meta_overlap;
+
+ PED_ASSERT (ext_part != NULL);
+
+ log_meta_overlap = _log_meta_overlap_constraint(part, &part->geom);
+ intersect = ped_constraint_intersect (constraint, log_meta_overlap);
+ ped_constraint_destroy (log_meta_overlap);
+ if (!intersect)
+ return 0;
+
+ start_base = ped_round_down_to (part->geom.start, cyl_size);
+
+ for (head = _logical_min_start_head (part, bios_geom, ext_part, 0);
+ head < PED_MIN (5, bios_geom->heads); head++) {
+ PedConstraint* disk_constraint;
+ PedSector start = start_base + head * bios_geom->sectors;
+
+ if (head >= _logical_min_start_head (part, bios_geom,
+ ext_part, 1))
+ disk_constraint =
+ _logical_constraint (disk, bios_geom, start, 1);
+ else
+ disk_constraint =
+ _logical_constraint (disk, bios_geom, start, 0);
+
+ solution = _best_solution (part, bios_geom, solution,
+ _try_constraint (part, intersect,
+ disk_constraint));
+ }
+
+ ped_constraint_destroy (intersect);
+
+ if (solution) {
+ ped_geometry_set (&part->geom, solution->start,
+ solution->length);
+ ped_geometry_destroy (solution);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+_align (PedPartition* part, const PedCHSGeometry* bios_geom,
+ const PedConstraint* constraint)
+{
+ if (part->type == PED_PARTITION_LOGICAL)
+ return _align_logical (part, bios_geom, constraint);
+ else
+ return _align_primary (part, bios_geom, constraint);
+}
+
+static PedConstraint*
+_no_geom_constraint (const PedDisk* disk, PedSector start, PedSector end)
+{
+ PedGeometry max;
+
+ ped_geometry_init (&max, disk->dev, start, end - start + 1);
+ return ped_constraint_new_from_max (&max);
+}
+
+static PedConstraint*
+_no_geom_extended_constraint (const PedPartition* part)
+{
+ PedDevice* dev = part->disk->dev;
+ PedGeometry* min = _get_min_extended_part_geom (part, NULL);
+ PedGeometry start_range;
+ PedGeometry end_range;
+ PedConstraint* constraint;
+
+ if (min) {
+ ped_geometry_init (&start_range, dev, 1, min->start);
+ ped_geometry_init (&end_range, dev, min->end,
+ dev->length - min->end);
+ ped_geometry_destroy (min);
+ } else {
+ ped_geometry_init (&start_range, dev, 1, dev->length - 1);
+ ped_geometry_init (&end_range, dev, 1, dev->length - 1);
+ }
+ constraint = ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ &start_range, &end_range, 1, dev->length);
+ return constraint;
+}
+
+static int
+_align_primary_no_geom (PedPartition* part, const PedConstraint* constraint)
+{
+ PedDisk* disk = part->disk;
+ PedGeometry* solution;
+
+ if (part->type == PED_PARTITION_EXTENDED) {
+ solution = _try_constraint (part, constraint,
+ _no_geom_extended_constraint (part));
+ } else {
+ solution = _try_constraint (part, constraint,
+ _no_geom_constraint (disk, 1,
+ disk->dev->length - 1));
+ }
+
+ if (solution) {
+ ped_geometry_set (&part->geom, solution->start,
+ solution->length);
+ ped_geometry_destroy (solution);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+_align_logical_no_geom (PedPartition* part, const PedConstraint* constraint)
+{
+ PedGeometry* solution;
+
+ solution = _try_constraint (part, constraint,
+ _log_meta_overlap_constraint (part, &part->geom));
+
+ if (solution) {
+ ped_geometry_set (&part->geom, solution->start,
+ solution->length);
+ ped_geometry_destroy (solution);
+ return 1;
+ }
+ return 0;
+}
+
+static int
+_align_no_geom (PedPartition* part, const PedConstraint* constraint)
+{
+ if (part->type == PED_PARTITION_LOGICAL)
+ return _align_logical_no_geom (part, constraint);
+ else
+ return _align_primary_no_geom (part, constraint);
+}
+
+static int
+msdos_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PedCHSGeometry bios_geom;
+ DosPartitionData* dos_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ dos_data = part->disk_specific;
+
+ if (dos_data->system == PARTITION_LDM && dos_data->orig) {
+ PedGeometry *orig_geom = &dos_data->orig->geom;
+
+ if (ped_geometry_test_equal (&part->geom, orig_geom)
+ && ped_constraint_is_solution (constraint, &part->geom))
+ return 1;
+
+ ped_geometry_set (&part->geom, orig_geom->start,
+ orig_geom->length);
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Parted can't resize partitions managed by "
+ "Windows Dynamic Disk."));
+ return 0;
+ }
+
+ partition_probe_bios_geometry (part, &bios_geom);
+
+ DosDiskData *disk_specific = part->disk->disk_specific;
+ if (disk_specific->cylinder_alignment
+ && _align(part, &bios_geom, constraint))
+ return 1;
+ if (_align_no_geom (part, constraint))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+add_metadata_part (PedDisk* disk, PedPartitionType type, PedSector start,
+ PedSector end)
+{
+ PedPartition* new_part;
+
+ PED_ASSERT (disk != NULL);
+
+ new_part = ped_partition_new (disk, type | PED_PARTITION_METADATA, NULL,
+ start, end);
+ if (!new_part)
+ goto error;
+ if (!ped_disk_add_partition (disk, new_part, NULL))
+ goto error_destroy_new_part;
+
+ return 1;
+
+error_destroy_new_part:
+ ped_partition_destroy (new_part);
+error:
+ return 0;
+}
+
+/* There are a few objectives here:
+ * - avoid having lots of "free space" partitions lying around, to confuse
+ * the front end.
+ * - ensure that there's enough room to put in the extended partition
+ * tables, etc.
+ */
+static int
+add_logical_part_metadata (PedDisk* disk, const PedPartition* log_part)
+{
+ PedPartition* ext_part = ped_disk_extended_partition (disk);
+ PedPartition* prev = log_part->prev;
+ PedCHSGeometry bios_geom;
+ PedSector cyl_size;
+ PedSector metadata_start;
+ PedSector metadata_end;
+ PedSector metadata_length;
+
+ partition_probe_bios_geometry (ext_part, &bios_geom);
+ cyl_size = bios_geom.sectors * bios_geom.heads;
+
+ /* if there's metadata shortly before the partition (on the same
+ * cylinder), then make this new metadata partition touch the end of
+ * the other. No point having 63 bytes (or whatever) of free space
+ * partition - just confuses front-ends, etc.
+ * Otherwise, start the metadata at the start of the cylinder
+ */
+
+ metadata_end = log_part->geom.start - 1;
+ metadata_start = ped_round_down_to (metadata_end, cyl_size);
+ if (prev)
+ metadata_start = PED_MAX (metadata_start, prev->geom.end + 1);
+ else
+ metadata_start = PED_MAX (metadata_start,
+ ext_part->geom.start + 1);
+ metadata_length = metadata_end - metadata_start + 1;
+
+ /* partition 5 doesn't need to have any metadata */
+ if (log_part->num == 5 && metadata_length < bios_geom.sectors)
+ return 1;
+
+ PED_ASSERT (metadata_length > 0);
+
+ return add_metadata_part (disk, PED_PARTITION_LOGICAL,
+ metadata_start, metadata_end);
+}
+
+/*
+ * Find the starting sector number of the first non-free partition,
+ * set *SECTOR to that value, and return 1.
+ * If there is no non-free partition, don't modify *SECTOR and return 0.
+ */
+static int
+get_start_first_nonfree_part (const PedDisk* disk, PedSector *sector)
+{
+ PedPartition* walk;
+
+ // disk->part_list is the first partition on the disk.
+ if (!disk->part_list)
+ return 0;
+
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ if (walk->type == PED_PARTITION_NORMAL ||
+ walk->type == PED_PARTITION_EXTENDED) {
+ *sector = walk->geom.start;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/*
+ * Find the ending sector number of the last non-free partition,
+ * set *SECTOR to that value, and return 1.
+ * If there is no non-free partition, don't modify *SECTOR and return 0.
+ */
+static int
+get_end_last_nonfree_part (const PedDisk* disk, PedSector *sector)
+{
+ PedPartition* last_part = NULL;
+ PedPartition* walk;
+
+ // disk->part_list is the first partition on the disk.
+ if (!disk->part_list)
+ return 0;
+
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ if (walk->type == PED_PARTITION_NORMAL ||
+ walk->type == PED_PARTITION_EXTENDED) {
+ last_part = walk;
+ }
+ }
+
+ if (!last_part)
+ return 0;
+ else {
+ *sector = last_part->geom.end;
+ return 1;
+ }
+}
+
+/* Adds metadata placeholder partitions to cover the partition table (and
+ * "free" space after it that often has bootloader stuff), and the last
+ * incomplete cylinder at the end of the disk.
+ * Parted has to be mindful of the uncertainty of dev->bios_geom.
+ * It therefore makes sure this metadata doesn't overlap with partitions.
+ */
+static int
+add_startend_metadata (PedDisk* disk)
+{
+ PedDevice* dev = disk->dev;
+ PedSector cyl_size = dev->bios_geom.sectors * dev->bios_geom.heads;
+ PedSector init_start, init_end, final_start, final_end;
+
+ // Ranges for the initial and final metadata partition.
+ init_start = 0;
+ if (!get_start_first_nonfree_part(disk, &init_end))
+ init_end = dev->bios_geom.sectors - 1;
+ else
+ init_end = PED_MIN (dev->bios_geom.sectors - 1, init_end - 1);
+
+ DosDiskData *disk_specific = disk->disk_specific;
+ if (!disk_specific->cylinder_alignment)
+ final_start = dev->length - 1;
+ else if (!get_end_last_nonfree_part(disk, &final_start))
+ final_start = ped_round_down_to (dev->length, cyl_size);
+ else
+ final_start = PED_MAX (final_start + 1,
+ ped_round_down_to (dev->length, cyl_size));
+ final_end = dev->length - 1;
+
+ // Create the metadata partitions.
+ // init_end <= dev->length for devices that are _real_ small.
+ if (init_start < init_end &&
+ init_end <= dev->length &&
+ !add_metadata_part (disk, PED_PARTITION_NORMAL,
+ init_start, init_end))
+ return 0;
+
+ // init_end < final_start so they dont overlap. For very small devs.
+ if (final_start < final_end &&
+ init_end < final_start &&
+ final_end <= dev->length &&
+ !add_metadata_part (disk, PED_PARTITION_NORMAL,
+ final_start, final_end))
+ return 0;
+
+ return 1;
+}
+
+static int
+msdos_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* ext_part;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ if (!add_startend_metadata (disk))
+ return 0;
+
+ ext_part = ped_disk_extended_partition (disk);
+ if (ext_part) {
+ int i;
+ PedSector start, end;
+ PedCHSGeometry bios_geom;
+
+ for (i=5; 1; i++) {
+ PedPartition* log_part;
+ log_part = ped_disk_get_partition (disk, i);
+ if (!log_part)
+ break;
+ if (!add_logical_part_metadata (disk, log_part))
+ return 0;
+ }
+
+ partition_probe_bios_geometry (ext_part, &bios_geom);
+ start = ext_part->geom.start;
+ end = start + bios_geom.sectors - 1;
+ if (ext_part->part_list)
+ end = PED_MIN (end,
+ ext_part->part_list->geom.start - 1);
+ if (!add_metadata_part (disk, PED_PARTITION_LOGICAL,
+ start, end))
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+next_primary (const PedDisk* disk)
+{
+ int i;
+ for (i=1; i<=DOS_N_PRI_PARTITIONS; i++) {
+ if (!ped_disk_get_partition (disk, i))
+ return i;
+ }
+ return -1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+next_logical (const PedDisk* disk)
+{
+ int i;
+ for (i=5; i<=MAX_TOTAL_PART; i++) {
+ if (!ped_disk_get_partition (disk, i))
+ return i;
+ }
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("cannot create any more partitions"),
+ disk->dev->path);
+ return -1;
+}
+
+static int
+msdos_partition_enumerate (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ /* don't re-number a primary partition */
+ if (part->num != -1 && part->num <= DOS_N_PRI_PARTITIONS)
+ return 1;
+
+ part->num = -1;
+
+ if (part->type & PED_PARTITION_LOGICAL)
+ part->num = next_logical (part->disk);
+ else
+ part->num = next_primary (part->disk);
+ if (part->num == -1)
+ return 0;
+ return 1;
+}
+
+static int
+msdos_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return DOS_N_PRI_PARTITIONS;
+}
+
+static bool
+msdos_get_max_supported_partition_count(const PedDisk* disk, int *max_n)
+{
+ *max_n = MAX_TOTAL_PART;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (msdos)
+
+static PedDiskOps msdos_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (msdos_write),
+
+ disk_set_flag: msdos_disk_set_flag,
+ disk_get_flag: msdos_disk_get_flag,
+ disk_is_flag_available: msdos_disk_is_flag_available,
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+ partition_set_type_id: msdos_partition_set_type_id,
+ partition_get_type_id: msdos_partition_get_type_id,
+ partition_set_type_uuid: NULL,
+ partition_get_type_uuid: NULL,
+
+ PT_op_function_initializers (msdos)
+};
+
+static PedDiskType msdos_disk_type = {
+ next: NULL,
+ name: "msdos",
+ ops: &msdos_disk_ops,
+ features: PED_DISK_TYPE_EXTENDED | PED_DISK_TYPE_PARTITION_TYPE_ID
+};
+
+void
+ped_disk_msdos_init ()
+{
+ PED_ASSERT (sizeof (DosRawPartition) == 16);
+ PED_ASSERT (sizeof (DosRawTable) == 512);
+
+ ped_disk_type_register (&msdos_disk_type);
+}
+
+void
+ped_disk_msdos_done ()
+{
+ ped_disk_type_unregister (&msdos_disk_type);
+}
diff --git a/libparted/labels/dvh.c b/libparted/labels/dvh.c
new file mode 100644
index 0000000..0f9124d
--- /dev/null
+++ b/libparted/labels/dvh.c
@@ -0,0 +1,896 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001-2002, 2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+
+#include "dvh.h"
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+/* Default size for volhdr part, same val as IRIX's fx uses */
+#define PTYPE_VOLHDR_DFLTSZ 4096
+
+/* Partition numbers that seem to be strongly held convention */
+#define PNUM_VOLHDR 8
+#define PNUM_VOLUME 10
+
+/* Other notes of interest:
+ * PED_PARTITION_EXTENDED is used for volume headers
+ * PED_PARTITION_LOGICAL is used for bootfiles
+ * PED_PARTITION_NORMAL is used for all else
+ */
+
+typedef struct _DVHDiskData {
+ struct device_parameters dev_params;
+ int swap; /* part num of swap, 0=none */
+ int root; /* part num of root, 0=none */
+ int boot; /* part num of boot, 0=none */
+} DVHDiskData;
+
+typedef struct _DVHPartData {
+ int type;
+ char name[VDNAMESIZE + 1]; /* boot volumes only */
+ int real_file_size; /* boot volumes only */
+} DVHPartData;
+
+static PedDiskType dvh_disk_type;
+
+static int
+dvh_probe (const PedDevice *dev)
+{
+ struct volume_header *vh;
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ vh = (struct volume_header *) label;
+
+ bool found = PED_BE32_TO_CPU (vh->vh_magic) == VHMAGIC;
+ free (label);
+ return found;
+}
+
+static PedDisk*
+dvh_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ DVHDiskData* dvh_disk_data;
+ PedPartition* volume_part;
+ PedConstraint* constraint_any;
+
+ disk = _ped_disk_alloc (dev, &dvh_disk_type);
+ if (!disk)
+ goto error;
+
+ disk->disk_specific = dvh_disk_data
+ = ped_malloc (sizeof (DVHDiskData));
+ if (!dvh_disk_data)
+ goto error_free_disk;
+
+ memset (&dvh_disk_data->dev_params, 0,
+ sizeof (struct device_parameters));
+ dvh_disk_data->swap = 0;
+ dvh_disk_data->root = 0;
+ dvh_disk_data->boot = 0;
+
+ volume_part = ped_partition_new (disk, PED_PARTITION_EXTENDED, NULL,
+ 0, PTYPE_VOLHDR_DFLTSZ - 1);
+ if (!volume_part)
+ goto error_free_disk_specific;
+ volume_part->num = PNUM_VOLHDR + 1;
+ constraint_any = ped_constraint_any (dev);
+ if (!ped_disk_add_partition (disk, volume_part, constraint_any))
+ goto error_destroy_constraint_any;
+ ped_constraint_destroy (constraint_any);
+ return disk;
+
+error_destroy_constraint_any:
+ ped_constraint_destroy (constraint_any);
+ ped_partition_destroy (volume_part);
+error_free_disk_specific:
+ free (disk->disk_specific);
+error_free_disk:
+ free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk*
+dvh_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ DVHDiskData* new_dvh_disk_data;
+ DVHDiskData* old_dvh_disk_data = disk->disk_specific;
+
+ PED_ASSERT (old_dvh_disk_data != NULL);
+
+ new_disk = ped_disk_new_fresh (disk->dev, &dvh_disk_type);
+ if (!new_disk)
+ goto error;
+
+ new_disk->disk_specific = new_dvh_disk_data
+ = ped_malloc (sizeof (DVHDiskData));
+ if (!new_dvh_disk_data)
+ goto error_free_new_disk;
+
+ new_dvh_disk_data->dev_params = old_dvh_disk_data->dev_params;
+ return new_disk;
+
+error_free_new_disk:
+ free (new_disk);
+error:
+ return NULL;
+}
+
+static void
+dvh_free (PedDisk* disk)
+{
+ free (disk->disk_specific);
+ _ped_disk_free (disk);
+}
+
+/* two's complement 32-bit checksum */
+static uint32_t _GL_ATTRIBUTE_PURE
+_checksum (const uint32_t* base, size_t size)
+{
+ uint32_t sum = 0;
+ size_t i;
+
+ for (i = 0; i < size / sizeof (uint32_t); i++)
+ sum = sum - PED_BE32_TO_CPU (base[i]);
+
+ return sum;
+}
+
+/* try to make a reasonable volume header partition... */
+static PedExceptionOption
+_handle_no_volume_header (PedDisk* disk)
+{
+ PedExceptionOption ret;
+ PedPartition* part;
+ PedConstraint* constraint;
+
+ switch (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_FIX + PED_EXCEPTION_CANCEL,
+ _("%s has no extended partition (volume header partition)."),
+ disk->dev->path)) {
+ case PED_EXCEPTION_UNHANDLED:
+ case PED_EXCEPTION_FIX:
+ default:
+ part = ped_partition_new (
+ disk, PED_PARTITION_EXTENDED, NULL,
+ 0, PTYPE_VOLHDR_DFLTSZ - 1);
+ if (!part)
+ goto error;
+ part->num = PNUM_VOLHDR + 1;
+ constraint = ped_constraint_any (part->disk->dev);
+ if (!constraint)
+ goto error_destroy_part;
+ if (!ped_disk_add_partition (disk, part, constraint))
+ goto error_destroy_constraint;
+ ped_constraint_destroy (constraint);
+ ret = PED_EXCEPTION_FIX;
+ break;
+
+ case PED_EXCEPTION_CANCEL:
+ goto error;
+ }
+ return ret;
+
+error_destroy_constraint:
+ ped_constraint_destroy (constraint);
+error_destroy_part:
+ ped_partition_destroy (part);
+error:
+ return PED_EXCEPTION_CANCEL;
+}
+
+static PedPartition*
+_parse_partition (PedDisk* disk, struct partition_table* pt)
+{
+ PedPartition* part;
+ DVHPartData* dvh_part_data;
+ PedSector start = PED_BE32_TO_CPU (pt->pt_firstlbn);
+ PedSector length = PED_BE32_TO_CPU (pt->pt_nblks);
+
+ part = ped_partition_new (disk,
+ pt->pt_type ? 0 : PED_PARTITION_EXTENDED,
+ NULL,
+ start, start + length - 1);
+ if (!part)
+ return NULL;
+
+ dvh_part_data = part->disk_specific;
+ dvh_part_data->type = PED_BE32_TO_CPU (pt->pt_type);
+ strcpy (dvh_part_data->name, "");
+
+ return part;
+}
+
+static PedPartition*
+_parse_boot_file (PedDisk* disk, struct volume_directory* vd)
+{
+ PedPartition* part;
+ DVHPartData* dvh_part_data;
+ PedSector start = PED_BE32_TO_CPU (vd->vd_lbn);
+ int length = PED_BE32_TO_CPU (vd->vd_nbytes);
+
+ part = ped_partition_new (disk, PED_PARTITION_LOGICAL, NULL,
+ start, start + length/512 - 1);
+ if (!part)
+ return NULL;
+
+ dvh_part_data = part->disk_specific;
+ dvh_part_data->real_file_size = length;
+
+ memcpy (dvh_part_data->name, vd->vd_name, VDNAMESIZE);
+ dvh_part_data->name[VDNAMESIZE] = 0;
+ return part;
+}
+
+static int dvh_write (const PedDisk* disk);
+
+/* YUCK
+ *
+ * If you remove a boot/root/swap partition, the disk->disk_specific
+ * thing isn't updated. (Probably reflects a design bug somewhere...)
+ * Anyway, the workaround is: flush stale flags whenever we allocate
+ * new partition numbers, and before we write to disk.
+ */
+static void
+_flush_stale_flags (const PedDisk* disk)
+{
+ DVHDiskData* dvh_disk_data = disk->disk_specific;
+
+ if (dvh_disk_data->root
+ && !ped_disk_get_partition (disk, dvh_disk_data->root))
+ dvh_disk_data->root = 0;
+ if (dvh_disk_data->swap
+ && !ped_disk_get_partition (disk, dvh_disk_data->swap))
+ dvh_disk_data->swap = 0;
+ if (dvh_disk_data->boot
+ && !ped_disk_get_partition (disk, dvh_disk_data->boot))
+ dvh_disk_data->boot = 0;
+}
+
+static int
+dvh_read (PedDisk* disk)
+{
+ DVHDiskData* dvh_disk_data = disk->disk_specific;
+ int i;
+ struct volume_header vh;
+ char boot_name [BFNAMESIZE + 1];
+#ifndef DISCOVER_ONLY
+ int write_back = 0;
+#endif
+
+ PED_ASSERT (dvh_disk_data != NULL);
+
+ ped_disk_delete_all (disk);
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ return 0;
+ memcpy (&vh, s0, sizeof vh);
+ free (s0);
+
+ if (_checksum ((uint32_t*) &vh, sizeof (struct volume_header))) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Checksum is wrong, indicating the partition "
+ "table is corrupt."))
+ == PED_EXCEPTION_CANCEL)
+ return 0;
+ }
+
+ PED_ASSERT (PED_BE32_TO_CPU (vh.vh_magic) == VHMAGIC);
+
+ dvh_disk_data->dev_params = vh.vh_dp;
+ boot_name[BFNAMESIZE] = 0;
+ strncpy (boot_name, vh.vh_bootfile, BFNAMESIZE);
+
+ /* normal partitions */
+ for (i = 0; i < NPARTAB; i++) {
+ PedPartition* part;
+
+ if (!vh.vh_pt[i].pt_nblks)
+ continue;
+ /* Skip the whole-disk partition, parted disklikes overlap */
+ if (PED_BE32_TO_CPU (vh.vh_pt[i].pt_type) == PTYPE_VOLUME)
+ continue;
+
+ part = _parse_partition (disk, &vh.vh_pt[i]);
+ if (!part)
+ goto error_delete_all;
+
+ part->fs_type = ped_file_system_probe (&part->geom);
+ part->num = i + 1;
+
+ if (PED_BE16_TO_CPU (vh.vh_rootpt) == i)
+ ped_partition_set_flag (part, PED_PARTITION_ROOT, 1);
+ if (PED_BE16_TO_CPU (vh.vh_swappt) == i)
+ ped_partition_set_flag (part, PED_PARTITION_SWAP, 1);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok) {
+ ped_partition_destroy (part);
+ goto error_delete_all;
+ }
+ }
+
+ if (!ped_disk_extended_partition (disk)) {
+#ifdef DISCOVER_ONLY
+ return 1;
+#else
+ switch (_handle_no_volume_header (disk)) {
+ case PED_EXCEPTION_CANCEL:
+ return 0;
+ case PED_EXCEPTION_IGNORE:
+ return 1;
+ case PED_EXCEPTION_FIX:
+ write_back = 1;
+ break;
+ default:
+ break;
+ }
+#endif
+ }
+
+ /* boot partitions */
+ for (i = 0; i < NVDIR; i++) {
+ PedPartition* part;
+
+ if (!vh.vh_vd[i].vd_nbytes)
+ continue;
+
+ part = _parse_boot_file (disk, &vh.vh_vd[i]);
+ if (!part)
+ goto error_delete_all;
+
+ part->fs_type = ped_file_system_probe (&part->geom);
+ part->num = NPARTAB + i + 1;
+
+ if (!strcmp (boot_name, ped_partition_get_name (part)))
+ ped_partition_set_flag (part, PED_PARTITION_BOOT, 1);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok) {
+ ped_partition_destroy (part);
+ goto error_delete_all;
+ }
+ }
+#ifndef DISCOVER_ONLY
+ if (write_back)
+ dvh_write (disk);
+#endif
+ return 1;
+
+error_delete_all:
+ ped_disk_delete_all (disk);
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+static void
+_generate_partition (PedPartition* part, struct partition_table* pt)
+{
+ DVHPartData* dvh_part_data = part->disk_specific;
+
+ /* Assert not a bootfile */
+ PED_ASSERT ((part->type & PED_PARTITION_LOGICAL) == 0);
+
+ pt->pt_nblks = PED_CPU_TO_BE32 (part->geom.length);
+ pt->pt_firstlbn = PED_CPU_TO_BE32 (part->geom.start);
+ pt->pt_type = PED_CPU_TO_BE32 (dvh_part_data->type);
+}
+
+static void
+_generate_boot_file (PedPartition* part, struct volume_directory* vd)
+{
+ DVHPartData* dvh_part_data = part->disk_specific;
+
+ /* Assert it's a bootfile */
+ PED_ASSERT ((part->type & PED_PARTITION_LOGICAL) != 0);
+
+ vd->vd_nbytes = PED_CPU_TO_BE32 (dvh_part_data->real_file_size);
+ vd->vd_lbn = PED_CPU_TO_BE32 (part->geom.start);
+
+ memset (vd->vd_name, 0, VDNAMESIZE);
+ memcpy (vd->vd_name, dvh_part_data->name, VDNAMESIZE);
+}
+
+static int
+dvh_write (const PedDisk* disk)
+{
+ DVHDiskData* dvh_disk_data = disk->disk_specific;
+ struct volume_header vh;
+ int i;
+
+ PED_ASSERT (dvh_disk_data != NULL);
+
+ _flush_stale_flags (disk);
+
+ memset (&vh, 0, sizeof (struct volume_header));
+
+ vh.vh_magic = PED_CPU_TO_BE32 (VHMAGIC);
+ vh.vh_rootpt = PED_CPU_TO_BE16 (dvh_disk_data->root - 1);
+ vh.vh_swappt = PED_CPU_TO_BE16 (dvh_disk_data->swap - 1);
+
+ if (dvh_disk_data->boot) {
+ PedPartition* boot_part;
+ boot_part = ped_disk_get_partition (disk, dvh_disk_data->boot);
+ strcpy (vh.vh_bootfile, ped_partition_get_name (boot_part));
+ }
+
+ vh.vh_dp = dvh_disk_data->dev_params;
+ /* Set up rudimentary device geometry */
+ vh.vh_dp.dp_cyls
+ = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.cylinders);
+ vh.vh_dp.dp_trks0 = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.heads);
+ vh.vh_dp.dp_secs
+ = PED_CPU_TO_BE16 ((short)disk->dev->bios_geom.sectors);
+ vh.vh_dp.dp_secbytes = PED_CPU_TO_BE16 ((short)disk->dev->sector_size);
+
+ for (i = 0; i < NPARTAB; i++) {
+ PedPartition* part = ped_disk_get_partition (disk, i + 1);
+ if (part)
+ _generate_partition (part, &vh.vh_pt[i]);
+ }
+
+ /* whole disk partition
+ * This is only ever written here, and never modified
+ * (or even shown) as it must contain the entire disk,
+ * and parted does not like overlapping partitions
+ */
+ vh.vh_pt[PNUM_VOLUME].pt_nblks = PED_CPU_TO_BE32 (disk->dev->length);
+ vh.vh_pt[PNUM_VOLUME].pt_firstlbn = PED_CPU_TO_BE32 (0);
+ vh.vh_pt[PNUM_VOLUME].pt_type = PED_CPU_TO_BE32 (PTYPE_VOLUME);
+
+ for (i = 0; i < NVDIR; i++) {
+ PedPartition* part = ped_disk_get_partition (disk,
+ i + 1 + NPARTAB);
+ if (part)
+ _generate_boot_file (part, &vh.vh_vd[i]);
+ }
+
+ vh.vh_csum = 0;
+ vh.vh_csum = PED_CPU_TO_BE32 (_checksum ((uint32_t*) &vh,
+ sizeof (struct volume_header)));
+
+ return (ptt_write_sector (disk, &vh, sizeof vh)
+ && ped_device_sync (disk->dev));
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+dvh_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+ DVHPartData* dvh_part_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (!ped_partition_is_active (part)) {
+ part->disk_specific = NULL;
+ return part;
+ }
+
+ dvh_part_data = part->disk_specific =
+ ped_malloc (sizeof (DVHPartData));
+ if (!dvh_part_data)
+ goto error_free_part;
+
+ dvh_part_data->type = (part_type == PED_PARTITION_EXTENDED)
+ ? PTYPE_VOLHDR
+ : PTYPE_RAW;
+ strcpy (dvh_part_data->name, "");
+ dvh_part_data->real_file_size = part->geom.length * 512;
+ return part;
+
+error_free_part:
+ _ped_partition_free (part);
+error:
+ return NULL;
+}
+
+static PedPartition*
+dvh_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* result;
+ DVHPartData* part_data = part->disk_specific;
+ DVHPartData* result_data;
+
+ result = _ped_partition_alloc (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (!result)
+ goto error;
+ result->num = part->num;
+
+ if (!ped_partition_is_active (part)) {
+ result->disk_specific = NULL;
+ return result;
+ }
+
+ result_data = result->disk_specific =
+ ped_malloc (sizeof (DVHPartData));
+ if (!result_data)
+ goto error_free_part;
+
+ result_data->type = part_data->type;
+ strcpy (result_data->name, part_data->name);
+ result_data->real_file_size = part_data->real_file_size;
+ return result;
+
+error_free_part:
+ _ped_partition_free (result);
+error:
+ return NULL;
+}
+
+static void
+dvh_partition_destroy (PedPartition* part)
+{
+ if (ped_partition_is_active (part)) {
+ PED_ASSERT (part->disk_specific != NULL);
+ free (part->disk_specific);
+ }
+ _ped_partition_free (part);
+}
+
+static int
+dvh_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ DVHPartData* dvh_part_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ if (part->type == PED_PARTITION_EXTENDED) {
+ dvh_part_data->type = PTYPE_VOLHDR;
+ return 1;
+ }
+
+ /* Is this a bootfile? */
+ if (part->type == PED_PARTITION_LOGICAL)
+ return 1;
+
+ if (fs_type && !strcmp (fs_type->name, "xfs"))
+ dvh_part_data->type = PTYPE_XFS;
+ else
+ dvh_part_data->type = PTYPE_RAW;
+ return 1;
+}
+
+static int
+dvh_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ DVHDiskData* dvh_disk_data = part->disk->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_ROOT:
+ if (part->type != 0 && state) {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Only primary partitions can be root "
+ "partitions."));
+#endif
+ return 0;
+ }
+ dvh_disk_data->root = state ? part->num : 0;
+ break;
+
+ case PED_PARTITION_SWAP:
+ if (part->type != 0 && state) {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Only primary partitions can be swap "
+ "partitions."));
+ return 0;
+#endif
+ }
+ dvh_disk_data->swap = state ? part->num : 0;
+ break;
+
+ case PED_PARTITION_BOOT:
+ if (part->type != PED_PARTITION_LOGICAL && state) {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Only logical partitions can be a boot "
+ "file."));
+#endif
+ return 0;
+ }
+ dvh_disk_data->boot = state ? part->num : 0;
+ break;
+
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_LBA:
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_RAID:
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+dvh_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ DVHDiskData* dvh_disk_data = part->disk->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_ROOT:
+ return dvh_disk_data->root == part->num;
+
+ case PED_PARTITION_SWAP:
+ return dvh_disk_data->swap == part->num;
+
+ case PED_PARTITION_BOOT:
+ return dvh_disk_data->boot == part->num;
+
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_LBA:
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_RAID:
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int
+dvh_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_ROOT:
+ case PED_PARTITION_SWAP:
+ case PED_PARTITION_BOOT:
+ return 1;
+
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_LBA:
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_RAID:
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static void
+dvh_partition_set_name (PedPartition* part, const char* name)
+{
+ DVHPartData* dvh_part_data = part->disk_specific;
+
+ if (part->type == PED_PARTITION_LOGICAL) {
+ /* Bootfile */
+ memcpy (dvh_part_data->name, name, VDNAMESIZE);
+ dvh_part_data->name[VDNAMESIZE] = 0;
+ } else {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("failed to set dvh partition name to %s:\n"
+ "Only logical partitions (boot files) have a name."),
+ name);
+#endif
+ }
+}
+
+static const char*
+dvh_partition_get_name (const PedPartition* part)
+{
+ DVHPartData* dvh_part_data = part->disk_specific;
+ return dvh_part_data->name;
+}
+
+/* The constraint for the volume header partition is different, because it must
+ * contain the first sector of the disk.
+ */
+static PedConstraint*
+_get_extended_constraint (PedDisk* disk)
+{
+ PedGeometry min_geom;
+ if (!ped_geometry_init (&min_geom, disk->dev, 0, 1))
+ return NULL;
+ return ped_constraint_new_from_min (&min_geom);
+}
+
+static PedConstraint*
+_get_primary_constraint (PedDisk* disk)
+{
+ PedGeometry max_geom;
+ if (!ped_geometry_init (&max_geom, disk->dev, 1, disk->dev->length - 1))
+ return NULL;
+ return ped_constraint_new_from_max (&max_geom);
+}
+
+static int
+dvh_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ if (_ped_partition_attempt_align (
+ part, constraint,
+ (part->type == PED_PARTITION_EXTENDED)
+ ? _get_extended_constraint (part->disk)
+ : _get_primary_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+dvh_partition_enumerate (PedPartition* part)
+{
+ int i;
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+
+ _flush_stale_flags (part->disk);
+
+ if (part->type & PED_PARTITION_LOGICAL) {
+ /* Bootfile */
+ for (i = 1 + NPARTAB; i <= NPARTAB + NVDIR; i++) {
+ if (!ped_disk_get_partition (part->disk, i)) {
+ part->num = i;
+ return 1;
+ }
+ }
+ PED_ASSERT (0);
+ } else if (part->type & PED_PARTITION_EXTENDED) {
+ /* Volheader */
+ part->num = PNUM_VOLHDR + 1;
+ } else {
+ for (i = 1; i <= NPARTAB; i++) {
+ /* reserved for full volume partition */
+ if (i == PNUM_VOLUME + 1)
+ continue;
+
+ if (!ped_disk_get_partition (part->disk, i)) {
+ part->num = i;
+ return 1;
+ }
+ }
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Too many primary partitions"));
+ }
+
+ return 0;
+}
+
+static int
+dvh_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return NPARTAB;
+}
+
+static bool
+dvh_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = NPARTAB;
+ return true;
+}
+
+
+static int
+dvh_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* part;
+ PedPartition* extended_part;
+ PedPartitionType metadata_type;
+ PED_ASSERT(disk != NULL);
+
+ /* We don't need to "protect" the start of the disk from the volume
+ * header.
+ */
+ extended_part = ped_disk_extended_partition (disk);
+ if (extended_part && extended_part->geom.start == 0)
+ metadata_type = PED_PARTITION_METADATA | PED_PARTITION_LOGICAL;
+ else
+ metadata_type = PED_PARTITION_METADATA;
+
+ part = ped_partition_new (disk, metadata_type, NULL, 0, 0);
+ if (!part)
+ goto error;
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (ok)
+ return 1;
+
+ ped_partition_destroy (part);
+error:
+ return 0;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (dvh)
+
+static PedDiskOps dvh_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (dvh_write),
+
+ partition_set_name: dvh_partition_set_name,
+ partition_get_name: dvh_partition_get_name,
+ PT_op_function_initializers (dvh)
+};
+
+static PedDiskType dvh_disk_type = {
+ next: NULL,
+ name: "dvh",
+ ops: &dvh_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_EXTENDED
+};
+
+void
+ped_disk_dvh_init ()
+{
+ PED_ASSERT (sizeof (struct volume_header) == 512);
+
+ ped_disk_type_register (&dvh_disk_type);
+}
+
+void
+ped_disk_dvh_done ()
+{
+ ped_disk_type_unregister (&dvh_disk_type);
+}
diff --git a/libparted/labels/dvh.h b/libparted/labels/dvh.h
new file mode 100644
index 0000000..7e7fae7
--- /dev/null
+++ b/libparted/labels/dvh.h
@@ -0,0 +1,178 @@
+/*
+ Copyright (C) 1985 MIPS Computer Systems, Inc.
+ Copyright (C) 2000 Silicon Graphics Computer Systems, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _SYS_DVH_H
+#define _SYS_DVH_H
+
+/*
+ * Format for volume header information
+ *
+ * The volume header is a block located at the beginning of all disk
+ * media (sector 0). It contains information pertaining to physical
+ * device parameters and logical partition information.
+ *
+ * The volume header is manipulated by disk formatters/verifiers,
+ * partition builders (e.g. fx, dvhtool, and mkfs), and disk drivers.
+ *
+ * Previous versions of IRIX wrote a copy of the volume header is
+ * located at sector 0 of each track of cylinder 0. These copies were
+ * never used, and reduced the capacity of the volume header to hold large
+ * files, so this practice was discontinued.
+ * The volume header is constrained to be less than or equal to 512
+ * bytes long. A particular copy is assumed valid if no drive errors
+ * are detected, the magic number is correct, and the 32 bit 2's complement
+ * of the volume header is correct. The checksum is calculated by initially
+ * zeroing vh_csum, summing the entire structure and then storing the
+ * 2's complement of the sum. Thus a checksum to verify the volume header
+ * should be 0.
+ *
+ * The error summary table, bad sector replacement table, and boot blocks are
+ * located by searching the volume directory within the volume header.
+ *
+ * Tables are sized simply by the integral number of table records that
+ * will fit in the space indicated by the directory entry.
+ *
+ * The amount of space allocated to the volume header, replacement blocks,
+ * and other tables is user defined when the device is formatted.
+ */
+
+/*
+ * device parameters are in the volume header to determine mapping
+ * from logical block numbers to physical device addresses
+ *
+ * Linux doesn't care ...
+ */
+struct device_parameters {
+ unsigned char dp_skew; /* spiral addressing skew */
+ unsigned char dp_gap1; /* words of 0 before header */
+ unsigned char dp_gap2; /* words of 0 between hdr and data */
+ unsigned char dp_spares_cyl; /* This is for drives (such as SCSI
+ that support zone oriented sparing, where the zone is larger
+ than one track. It gets subracteded from the cylinder size
+ ( dp_trks0 * dp_sec) when doing partition size calculations */
+ unsigned short dp_cyls; /* number of usable cylinders (i.e.,
+ doesn't include cylinders reserved by the drive for badblocks,
+ etc.). For drives with variable geometry, this number may be
+ decreased so that:
+ dp_cyls * ((dp_heads * dp_trks0) - dp_spares_cyl) <= actualcapacity
+ This happens on SCSI drives such as the Wren IV and Toshiba 156
+ Also see dp_cylshi below */
+ unsigned short dp_shd0; /* starting head vol 0 */
+ unsigned short dp_trks0; /* number of tracks / cylinder vol 0*/
+ unsigned char dp_ctq_depth; /* Depth of CTQ queue */
+ unsigned char dp_cylshi; /* high byte of 24 bits of cylinder count */
+ unsigned short dp_unused; /* not used */
+ unsigned short dp_secs; /* number of sectors/track */
+ unsigned short dp_secbytes; /* length of sector in bytes */
+ unsigned short dp_interleave; /* sector interleave */
+ int dp_flags; /* controller characteristics */
+ int dp_datarate; /* bytes/sec for kernel stats */
+ int dp_nretries; /* max num retries on data error */
+ int dp_mspw; /* ms per word to xfer, for iostat */
+ unsigned short dp_xgap1; /* Gap 1 for xylogics controllers */
+ unsigned short dp_xsync; /* sync delay for xylogics controllers */
+ unsigned short dp_xrdly; /* read delay for xylogics controllers */
+ unsigned short dp_xgap2; /* gap 2 for xylogics controllers */
+ unsigned short dp_xrgate; /* read gate for xylogics controllers */
+ unsigned short dp_xwcont; /* write continuation for xylogics */
+};
+
+/*
+ * Device characterization flags
+ * (dp_flags)
+ */
+#define DP_SECTSLIP 0x00000001 /* sector slip to spare sector */
+#define DP_SECTFWD 0x00000002 /* forward to replacement sector */
+#define DP_TRKFWD 0x00000004 /* forward to replacement track */
+#define DP_MULTIVOL 0x00000008 /* multiple volumes per spindle */
+#define DP_IGNOREERRORS 0x00000010 /* transfer data regardless of errors */
+#define DP_RESEEK 0x00000020 /* recalibrate as last resort */
+#define DP_CTQ_EN 0x00000040 /* enable command tag queueing */
+
+/*
+ * Boot blocks, bad sector tables, and the error summary table, are located
+ * via the volume_directory.
+ */
+#define VDNAMESIZE 8
+
+struct volume_directory {
+ char vd_name[VDNAMESIZE]; /* name */
+ unsigned int vd_lbn; /* logical block number */
+ unsigned int vd_nbytes; /* file length in bytes */
+};
+
+/*
+ * partition table describes logical device partitions
+ * (device drivers examine this to determine mapping from logical units
+ * to cylinder groups, device formatters/verifiers examine this to determine
+ * location of replacement tracks/sectors, etc)
+ *
+ * NOTE: pt_firstlbn SHOULD BE CYLINDER ALIGNED
+ */
+struct partition_table { /* one per logical partition */
+ unsigned int pt_nblks; /* # of logical blks in partition */
+ unsigned int pt_firstlbn; /* first lbn of partition */
+ int pt_type; /* use of partition */
+};
+
+#define PTYPE_VOLHDR 0 /* partition is volume header */
+#define PTYPE_TRKREPL 1 /* partition is used for repl trks */
+#define PTYPE_SECREPL 2 /* partition is used for repl secs */
+#define PTYPE_RAW 3 /* partition is used for data */
+#define PTYPE_BSD42 4 /* partition is 4.2BSD file system */
+#define PTYPE_BSD 4 /* partition is 4.2BSD file system */
+#define PTYPE_SYSV 5 /* partition is SysV file system */
+#define PTYPE_VOLUME 6 /* partition is entire volume */
+#define PTYPE_EFS 7 /* partition is sgi EFS */
+#define PTYPE_LVOL 8 /* partition is part of a logical vol */
+#define PTYPE_RLVOL 9 /* part of a "raw" logical vol */
+#define PTYPE_XFS 10 /* partition is sgi XFS */
+#define PTYPE_XFSLOG 11 /* partition is sgi XFS log */
+#define PTYPE_XLV 12 /* partition is part of an XLV vol */
+#define PTYPE_XVM 13 /* partition is sgi XVM */
+#define NPTYPES 16
+
+#define VHMAGIC 0xbe5a941 /* randomly chosen value */
+#define NPARTAB 16 /* 16 unix partitions */
+#define NVDIR 15 /* max of 15 directory entries */
+#define BFNAMESIZE 16 /* max 16 chars in boot file name */
+
+/* Partition types for ARCS */
+#define NOT_USED 0 /* Not used */
+#define FAT_SHORT 1 /* FAT file system, 12-bit FAT entries */
+#define FAT_LONG 4 /* FAT file system, 16-bit FAT entries */
+#define EXTENDED 5 /* extended partition */
+#define HUGE 6 /* huge partition- MS/DOS 4.0 and later */
+
+/* Active flags for ARCS */
+#define BOOTABLE 0x00;
+#define NOT_BOOTABLE 0x80;
+
+struct volume_header {
+ int vh_magic; /* identifies volume header */
+ short vh_rootpt; /* root partition number */
+ short vh_swappt; /* swap partition number */
+ char vh_bootfile[BFNAMESIZE]; /* name of file to boot */
+ struct device_parameters vh_dp; /* device parameters */
+ struct volume_directory vh_vd[NVDIR]; /* other vol hdr contents */
+ struct partition_table vh_pt[NPARTAB]; /* device partition layout */
+ int vh_csum; /* volume header checksum */
+ int vh_fill; /* fill out to 512 bytes */
+};
+
+#endif /* _SYS_DVH_H */
diff --git a/libparted/labels/efi_crc32.c b/libparted/labels/efi_crc32.c
new file mode 100644
index 0000000..c25409f
--- /dev/null
+++ b/libparted/labels/efi_crc32.c
@@ -0,0 +1,126 @@
+/*
+ * Dec 5, 2000 Matt Domsch <Matt_Domsch@dell.com>
+ * - Copied crc32.c from the linux/drivers/net/cipe directory.
+ * - Now pass seed as an arg
+ * - changed unsigned long to uint32_t, added #include<stdint.h>
+ * - changed len to be an unsigned long
+ * - changed crc32val to be a register
+ * - License remains unchanged! It's still GPL-compatable!
+ */
+
+ /* ============================================================= */
+ /* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or */
+ /* code or tables extracted from it, as desired without restriction. */
+ /* */
+ /* First, the polynomial itself and its table of feedback terms. The */
+ /* polynomial is */
+ /* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */
+ /* */
+ /* Note that we take it "backwards" and put the highest-order term in */
+ /* the lowest-order bit. The X^32 term is "implied"; the LSB is the */
+ /* X^31 term, etc. The X^0 term (usually shown as "+1") results in */
+ /* the MSB being 1. */
+ /* */
+ /* Note that the usual hardware shift register implementation, which */
+ /* is what we're using (we're merely optimizing it by doing eight-bit */
+ /* chunks at a time) shifts bits into the lowest-order term. In our */
+ /* implementation, that means shifting towards the right. Why do we */
+ /* do it this way? Because the calculated CRC must be transmitted in */
+ /* order from highest-order term to lowest-order term. UARTs transmit */
+ /* characters in order from LSB to MSB. By storing the CRC this way, */
+ /* we hand it to the UART in the order low-byte to high-byte; the UART */
+ /* sends each low-bit to hight-bit; and the result is transmission bit */
+ /* by bit from highest- to lowest-order term without requiring any bit */
+ /* shuffling on our part. Reception works similarly. */
+ /* */
+ /* The feedback terms table consists of 256, 32-bit entries. Notes: */
+ /* */
+ /* The table can be generated at runtime if desired; code to do so */
+ /* is shown later. It might not be obvious, but the feedback */
+ /* terms simply represent the results of eight shift/xor opera- */
+ /* tions for all combinations of data and CRC register values. */
+ /* */
+ /* The values must be right-shifted by eight bits by the "updcrc" */
+ /* logic; the shift must be unsigned (bring in zeroes). On some */
+ /* hardware you could probably optimize the shift in assembler by */
+ /* using byte-swap instructions. */
+ /* polynomial $edb88320 */
+ /* */
+ /* -------------------------------------------------------------------- */
+
+#include <config.h>
+#include <stdint.h>
+
+static const uint32_t crc32_tab[] = {
+ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
+ 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
+ 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
+ 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
+ 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
+ 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
+ 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
+ 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
+ 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
+ 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
+ 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
+ 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
+ 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
+ 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
+ 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
+ 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
+ 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
+ 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
+ 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
+ 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
+ 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
+ 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
+ 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
+ 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
+ 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
+ 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
+ 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
+ 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
+ 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
+ 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
+ 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
+ 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
+ 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
+ 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
+ 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
+ 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
+ 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
+ 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
+ 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
+ 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
+ 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
+ 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
+ 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
+ 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
+ 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
+ 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
+ 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
+ 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
+ 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
+ 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
+ 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
+ 0x2d02ef8dL
+ };
+
+/* Return a 32-bit CRC of the contents of the buffer. */
+
+uint32_t _GL_ATTRIBUTE_PURE
+__efi_crc32(const void *buf, unsigned long len, uint32_t seed)
+{
+ unsigned long i;
+ register uint32_t crc32val;
+ const unsigned char *s = buf;
+
+ crc32val = seed;
+ for (i = 0; i < len; i ++)
+ {
+ crc32val =
+ crc32_tab[(crc32val ^ s[i]) & 0xff] ^
+ (crc32val >> 8);
+ }
+ return crc32val;
+}
diff --git a/libparted/labels/fdasd.c b/libparted/labels/fdasd.c
new file mode 100644
index 0000000..cee4d46
--- /dev/null
+++ b/libparted/labels/fdasd.c
@@ -0,0 +1,1442 @@
+/*
+ * File...........: arch/s390/tools/fdasd.c
+ * Author(s)......: Volker Sameske <sameske@de.ibm.com>
+ * Bugreports.to..: <Linux390@de.ibm.com>
+ * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2001
+ *
+ * History of changes (starts March 2001)
+ * 2001-04-11 possibility to change volume serial added
+ * possibility to change partition type added
+ * some changes to DS4HPCHR and DS4DSREC
+ * 2001-05-03 check for invalid partition numbers added
+ * wrong free_space calculation bug fixed
+ * 2001-06-26 '-a' option added, it is now possible to add a single
+ * partition in non-interactive mode
+ * 2001-06-26 long parameter support added
+ *
+ */
+
+#include <config.h>
+#include <arch/linux.h>
+#include <parted/vtoc.h>
+#include <parted/device.h>
+#include <parted/fdasd.h>
+
+#include <parted/parted.h>
+
+#include <libintl.h>
+#if ENABLE_NLS
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static int
+getpos (fdasd_anchor_t *anc, int dsn)
+{
+ PDEBUG
+ return anc->partno[dsn];
+}
+
+static int
+getdsn (fdasd_anchor_t *anc, int pos)
+{
+ PDEBUG
+ int i;
+
+ for (i=0; i<USABLE_PARTITIONS; i++) {
+ if (anc->partno[i] == pos)
+ return i;
+ }
+
+ return -1;
+}
+
+static void
+setpos (fdasd_anchor_t *anc, int dsn, int pos)
+{
+ PDEBUG
+ anc->partno[dsn] = pos;
+}
+
+static u_int32_t
+get_usable_cylinders (fdasd_anchor_t *anc)
+{
+ u_int32_t cyl;
+
+ /* large volume */
+ if (anc->f4->DS4DEVCT.DS4DSCYL == LV_COMPAT_CYL &&
+ anc->f4->DS4DCYL > anc->f4->DS4DEVCT.DS4DSCYL)
+ return anc->f4->DS4DCYL;
+ /* normal volume */
+ if (anc->f4->DS4DEVCT.DS4DEVFG & ALTERNATE_CYLINDERS_USED)
+ cyl = anc->f4->DS4DEVCT.DS4DSCYL -
+ (u_int16_t) anc->f4->DS4DEVAC;
+ else
+ cyl = anc->f4->DS4DEVCT.DS4DSCYL;
+ return cyl;
+}
+
+static void
+get_addr_of_highest_f1_f8_label (fdasd_anchor_t *anc, cchhb_t *addr)
+{
+
+ u_int8_t record;
+ /* We have to count the follwing labels:
+ * one format 4
+ * one format 5
+ * format 7 only if we have moren then BIG_DISK_SIZE tracks
+ * one for each format 1 or format 8 label == one for each partition
+ * one for each format 9 label before the last format 8
+ * We assume that all partitions use format 8 labels when
+ * anc->formatted_cylinders > LV_COMPAT_CYL
+ * Note: Record zero is special, so block 0 on our disk is record 1!
+ */
+
+ record = anc->used_partitions + 2;
+ if (anc->big_disk)
+ record++;
+ if (anc->formatted_cylinders > LV_COMPAT_CYL)
+ record += anc->used_partitions - 1;
+ vtoc_set_cchhb(addr, VTOC_START_CC, VTOC_START_HH, record);
+}
+
+void
+fdasd_cleanup (fdasd_anchor_t *anchor)
+{
+ PDEBUG
+ int i;
+ partition_info_t *part_info, *next;
+
+ if (anchor == NULL)
+ return;
+
+ free(anchor->f4);
+ free(anchor->f5);
+ free(anchor->f7);
+ free(anchor->vlabel);
+
+ part_info = anchor->first;
+ for (i = 1; i <= USABLE_PARTITIONS && part_info != NULL; i++) {
+ next = part_info->next;
+ free(part_info->f1);
+ free(part_info);
+ part_info = next;
+ }
+}
+
+static void
+fdasd_error (fdasd_anchor_t *anc, enum fdasd_failure why, char const *str)
+{
+ PDEBUG
+ char error[2*LINE_LENGTH], *message = error;
+
+ switch (why) {
+ case unable_to_open_disk:
+ sprintf(error, "fdasd: %s -- %s\n", _("open error"), str);
+ break;
+ case unable_to_seek_disk:
+ sprintf(error, "fdasd: %s -- %s\n", _("seek error"), str);
+ break;
+ case unable_to_read_disk:
+ sprintf(error, "fdasd: %s -- %s\n", _("read error"), str);
+ break;
+ case read_only_disk:
+ sprintf(error, "fdasd: %s -- %s\n", _("write error"), str);
+ break;
+ case unable_to_ioctl:
+ sprintf(error, "fdasd: %s -- %s\n", _("ioctl() error"), str);
+ break;
+ case api_version_mismatch:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("API version mismatch"), str);
+ break;
+ case wrong_disk_type:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Unsupported disk type"), str);
+ break;
+ case wrong_disk_format:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Unsupported disk format"), str);
+ break;
+ case disk_in_use:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Disk is in use"), str);
+ break;
+ case config_syntax_error:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Syntax error in config file"), str);
+ break;
+ case vlabel_corrupted:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Volume label is corrupted"), str);
+ break;
+ case dsname_corrupted:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("A data set name is corrupted"), str);
+ break;
+ case malloc_failed:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Memory allocation failed"), str);
+ break;
+ case device_verification_failed:
+ sprintf(error, "fdasd: %s -- %s\n",
+ _("Device verification failed"),
+ _("The specified device is not a valid DASD device"));
+ break;
+ case volser_not_found:
+ sprintf(error, "fdasd: %s -- %s\n", _("VOLSER not found on device"), str);
+ break;
+ default:
+ sprintf(error, "fdasd: %s: %s\n", _("Fatal error"), str);
+ }
+
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, message);
+}
+
+/*
+ * initializes the anchor structure and allocates some
+ * memory for the labels
+ */
+void
+fdasd_initialize_anchor (fdasd_anchor_t * anc)
+{
+ PDEBUG
+ int i;
+ volume_label_t *v;
+ partition_info_t *p = NULL;
+ partition_info_t *q = NULL;
+
+ bzero(anc, sizeof(fdasd_anchor_t));
+
+ for (i=0; i<USABLE_PARTITIONS; i++)
+ setpos(anc, i, -1);
+
+ bzero(anc->confdata, sizeof(config_data_t));
+
+ anc->f4 = malloc(sizeof(format4_label_t));
+ if (anc->f4 == NULL)
+ fdasd_error(anc, malloc_failed, "FMT4 DSCB.");
+
+ anc->f5 = malloc(sizeof(format5_label_t));
+ if (anc->f5 == NULL)
+ fdasd_error(anc, malloc_failed, "FMT5 DSCB.");
+
+ anc->f7 = malloc(sizeof(format7_label_t));
+ if (anc->f7 == NULL)
+ fdasd_error(anc, malloc_failed, "FMT7 DSCB.");
+
+ /* template for all format 9 labels */
+ anc->f9 = malloc(sizeof(format9_label_t));
+ if (anc->f9 == NULL)
+ fdasd_error(anc, malloc_failed, "FMT9 DSCB.");
+
+ bzero(anc->f4, sizeof(format4_label_t));
+ bzero(anc->f5, sizeof(format5_label_t));
+ bzero(anc->f7, sizeof(format7_label_t));
+ bzero(anc->f9, sizeof(format9_label_t));
+ vtoc_init_format9_label(anc->f9);
+
+ v = malloc(sizeof(volume_label_t));
+ if (v == NULL)
+ fdasd_error(anc, malloc_failed,
+ _("No room for volume label."));
+ bzero(v, sizeof(volume_label_t));
+ anc->vlabel = v;
+
+ for (i=1; i<=USABLE_PARTITIONS; i++) {
+ p = malloc(sizeof(partition_info_t));
+ if (p == NULL)
+ fdasd_error(anc, malloc_failed,
+ _("No room for partition info."));
+ bzero(p, sizeof(partition_info_t));
+
+ /* add p to double pointered list */
+ if (i == 1) {
+ anc->first = p;
+ } else if (i == USABLE_PARTITIONS) {
+ anc->last = p;
+ p->prev = q;
+ q->next = p;
+ } else {
+ p->prev = q;
+ q->next = p;
+ }
+
+ p->f1 = malloc(sizeof(format1_label_t));
+ if (p->f1 == NULL)
+ fdasd_error(anc, malloc_failed, "FMT1 DSCB.");
+ bzero(p->f1, sizeof(format1_label_t));
+
+ q = p;
+ }
+ anc->hw_cylinders = 0;
+ anc->formatted_cylinders = 0;
+ anc->is_file = 0;
+}
+
+/*
+ * writes all changes to dasd
+ */
+static void
+fdasd_write_vtoc_labels (fdasd_anchor_t * anc, int fd)
+{
+ PDEBUG
+ partition_info_t *p;
+ unsigned long b, maxblk;
+ char dsno[6], s1[VOLSER_LENGTH + 1], s2[45], *c1, *c2, *ch;
+ int i = 0, k = 0;
+ cchhb_t f9addr;
+ format1_label_t emptyf1;
+
+ b = (cchhb2blk (&anc->vlabel->vtoc, &anc->geo) - 1) * anc->blksize;
+ if (b <= 0)
+ fdasd_error (anc, vlabel_corrupted, "");
+ maxblk = b + anc->blksize * 9; /* f4+f5+f7+3*f8+3*f9 */
+
+ /* write FMT4 DSCB */
+ vtoc_write_label (fd, b, NULL, anc->f4, NULL, NULL, NULL);
+ b += anc->blksize;
+
+ /* write FMT5 DSCB */
+ vtoc_write_label (fd, b, NULL, NULL, anc->f5, NULL, NULL);
+ b += anc->blksize;
+
+ /* write FMT7 DSCB */
+ if (anc->big_disk) {
+ vtoc_write_label (fd, b, NULL, NULL, NULL, anc->f7, NULL);
+ b += anc->blksize;
+ }
+
+ /* loop over all partitions (format 1 or format 8 DCB) */
+ for (p = anc->first; p != NULL; p = p->next) {
+
+ if (p->used != 0x01) {
+ continue;
+ }
+
+ i++;
+ strncpy (p->f1->DS1DSSN, anc->vlabel->volid, 6);
+
+ ch = p->f1->DS1DSNAM;
+ vtoc_ebcdic_dec (ch, ch, 44);
+ c1 = ch + 7;
+
+ if (getdsn (anc, i-1) > -1) {
+ /* re-use the existing data set name */
+ c2 = strchr (c1, '.');
+ if (c2 != NULL)
+ strncpy (s2, c2, 31);
+ else
+ fdasd_error (anc, dsname_corrupted, "");
+
+ strncpy (s1, anc->vlabel->volid, 6);
+ vtoc_ebcdic_dec (s1, s1, 6);
+ s1[6] = ' ';
+ strncpy (c1, s1, 7);
+ c1 = strchr (ch, ' ');
+ strncpy (c1, s2, 31);
+ } else {
+ /* create a new data set name */
+ while (getpos (anc, k) > -1)
+ k++;
+
+ setpos (anc, k, i-1);
+
+ strncpy (ch, "LINUX.V " " ", 44);
+
+ strncpy (s1, anc->vlabel->volid, 6);
+ vtoc_ebcdic_dec (s1, s1, 6);
+ strncpy (c1, s1, 6);
+
+ c1 = strchr (ch, ' ');
+ strncpy (c1, ".PART", 5);
+ c1 += 5;
+
+ sprintf (dsno, "%04d.", k + 1);
+ strncpy (c1, dsno, 5);
+
+ c1 += 5;
+ switch(p->type) {
+ case PARTITION_LINUX_LVM:
+ strncpy(c1, PART_TYPE_LVM, 6);
+ break;
+ case PARTITION_LINUX_RAID:
+ strncpy(c1, PART_TYPE_RAID, 6);
+ break;
+ case PARTITION_LINUX:
+ strncpy(c1, PART_TYPE_NATIVE, 6);
+ break;
+ case PARTITION_LINUX_SWAP:
+ strncpy(c1, PART_TYPE_SWAP, 6);
+ break;
+ default:
+ strncpy(c1, PART_TYPE_NATIVE, 6);
+ break;
+ }
+ }
+
+ vtoc_ebcdic_enc (ch, ch, 44);
+
+ if (p->f1->DS1FMTID == 0xf8 ) {
+ /* Now as we know where which label will be written, we
+ * can add the address of the format 9 label to the
+ * format 8 label. The f9 record will be written to the
+ * block after the current blk. Remember: records are of
+ * by one, so we have to add 2 and not just one.
+ */
+ vtoc_set_cchhb(&f9addr, VTOC_START_CC, VTOC_START_HH,
+ ((b / anc->blksize) % anc->geo.sectors) + 2);
+ vtoc_update_format8_label(&f9addr, p->f1);
+ vtoc_write_label(fd, b, p->f1, NULL, NULL, NULL, NULL);
+ b += anc->blksize;
+ vtoc_write_label(fd, b, NULL, NULL, NULL, NULL,
+ anc->f9);
+ b += anc->blksize;
+ } else {
+ vtoc_write_label(fd, b, p->f1, NULL, NULL, NULL, NULL);
+ b += anc->blksize;
+ }
+ }
+
+ /* write empty labels to the rest of the blocks */
+ bzero(&emptyf1, sizeof(emptyf1));
+ while (b < maxblk) {
+ vtoc_write_label(fd, b, &emptyf1, NULL, NULL, NULL, NULL);
+ b += anc->blksize;
+ }
+}
+
+/*
+ * writes all changes to dasd
+ */
+int
+fdasd_write_labels (fdasd_anchor_t * anc, int fd)
+{
+ PDEBUG
+ if (anc->vlabel_changed)
+ vtoc_write_volume_label (fd, anc->label_pos, anc->vlabel);
+
+ if (anc->vtoc_changed)
+ fdasd_write_vtoc_labels (anc, fd);
+
+ return 1;
+}
+
+/*
+ * writes all changes to dasd
+ */
+int
+fdasd_prepare_labels (fdasd_anchor_t *anc, int fd)
+{
+ PDEBUG
+ partition_info_t *p;
+ char dsno[6], s1[7], s2[45], *c1, *c2, *ch;
+ int i = 0, k = 0;
+
+ /* loop over all partitions (format 1 or format 8 DCB) */
+ for (p = anc->first; p != NULL; p = p->next) {
+
+ if (p->used != 0x01) {
+ continue;
+ }
+
+ i++;
+ strncpy (p->f1->DS1DSSN, anc->vlabel->volid, 6);
+
+ ch = p->f1->DS1DSNAM;
+ vtoc_ebcdic_dec (ch, ch, 44);
+ c1 = ch + 7;
+
+ if (getdsn (anc, i-1) > -1) {
+ /* re-use the existing data set name */
+ c2 = strchr (c1, '.');
+ if (c2 != NULL)
+ strncpy (s2, c2, 31);
+ else
+ fdasd_error (anc, dsname_corrupted, "");
+
+ strncpy (s1, anc->vlabel->volid, 6);
+ vtoc_ebcdic_dec (s1, s1, 6);
+ s1[6] = ' ';
+ strncpy (c1, s1, 7);
+ c1 = strchr (ch, ' ');
+ strncpy (c1, s2, 31);
+ } else {
+ /* create a new data set name */
+ while (getpos (anc, k) > -1)
+ k++;
+
+ setpos (anc, k, i-1);
+
+ strncpy (ch, "LINUX.V " " ", 44);
+
+ strncpy (s1, anc->vlabel->volid, 6);
+ vtoc_ebcdic_dec (s1, s1, 6);
+ strncpy (c1, s1, 6);
+
+ c1 = strchr (ch, ' ');
+ strncpy (c1, ".PART", 5);
+ c1 += 5;
+
+ sprintf (dsno, "%04d.", k + 1);
+ strncpy (c1, dsno, 5);
+
+ c1 += 5;
+ switch(p->type) {
+ case PARTITION_LINUX_LVM:
+ strncpy(c1, PART_TYPE_LVM, 6);
+ break;
+ case PARTITION_LINUX_RAID:
+ strncpy(c1, PART_TYPE_RAID, 6);
+ break;
+ case PARTITION_LINUX:
+ strncpy(c1, PART_TYPE_NATIVE, 6);
+ break;
+ case PARTITION_LINUX_SWAP:
+ strncpy(c1, PART_TYPE_SWAP, 6);
+ break;
+ default:
+ strncpy(c1, PART_TYPE_NATIVE, 6);
+ break;
+ }
+ }
+
+ vtoc_ebcdic_enc (ch, ch, 44);
+ }
+
+ return 1;
+}
+
+void
+fdasd_recreate_vtoc (fdasd_anchor_t *anc)
+{
+ PDEBUG
+ partition_info_t *p = anc->first;
+ int i;
+
+ vtoc_init_format4_label(anc->f4,
+ anc->geo.cylinders,
+ anc->formatted_cylinders,
+ anc->geo.heads,
+ anc->geo.sectors,
+ anc->blksize,
+ anc->dev_type);
+
+ vtoc_init_format5_label(anc->f5);
+ vtoc_init_format7_label(anc->f7);
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7,
+ '+', anc->verbose,
+ FIRST_USABLE_TRK,
+ anc->formatted_cylinders * anc->geo.heads - 1,
+ anc->formatted_cylinders, anc->geo.heads);
+
+ for (i = 0; i < USABLE_PARTITIONS; i++) {
+ bzero(p->f1, sizeof(format1_label_t));
+ p->used = 0x00;
+ p->start_trk = 0;
+ p->end_trk = 0;
+ p->len_trk = 0;
+ p->fspace_trk = 0;
+ p->type = 0;
+ p = p->next;
+ }
+
+ anc->used_partitions = 0;
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads -
+ FIRST_USABLE_TRK;
+
+ for (i=0; i<USABLE_PARTITIONS; i++)
+ setpos(anc, i, -1);
+
+ anc->vtoc_changed++;
+}
+
+ /*
+ * initialize the VOL1 volume label
+ */
+static void
+fdasd_init_volume_label(fdasd_anchor_t *anc, int fd)
+{
+ volume_label_t *vlabel = anc->vlabel;
+
+ vtoc_volume_label_init(vlabel);
+ vtoc_volume_label_set_key(vlabel, "VOL1");
+ vtoc_volume_label_set_label(vlabel, "VOL1");
+
+ vtoc_set_cchhb(&vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
+}
+
+
+/*
+ * sets some important partition data
+ * (like used, start_trk, end_trk, len_trk)
+ * by calculating these values with the
+ * information provided in the labels
+ */
+static void
+fdasd_update_partition_info (fdasd_anchor_t *anc)
+{
+ PDEBUG
+ partition_info_t *q = NULL, *p = anc->first;
+ unsigned long max = anc->formatted_cylinders * anc->geo.heads - 1;
+ int i;
+ char *ch;
+
+ anc->used_partitions = anc->geo.sectors - 2 - anc->f4->DS4DSREC;
+
+ for (i = 1; i <= USABLE_PARTITIONS; i++) {
+ if (p->f1->DS1FMTID != 0xf1 &&
+ p->f1->DS1FMTID != 0xf8) {
+ if (i == 1)
+ /* there is no partition at all */
+ anc->fspace_trk = max - FIRST_USABLE_TRK + 1;
+ else
+ /* previous partition was the last one */
+ q->fspace_trk = max - q->end_trk;
+ break;
+ }
+
+ /* this is a valid format 1 label */
+ p->used = 0x01;
+ p->start_trk = cchh2trk(&p->f1->DS1EXT1.llimit, &anc->geo);
+ p->end_trk = cchh2trk(&p->f1->DS1EXT1.ulimit, &anc->geo);
+ p->len_trk = p->end_trk - p->start_trk + 1;
+
+ if (i == 1) {
+ /* first partition, there is at least one */
+ anc->fspace_trk = p->start_trk - FIRST_USABLE_TRK;
+ } else {
+ if (i == USABLE_PARTITIONS)
+ /* last possible partition */
+ p->fspace_trk = max - p->end_trk;
+
+ /* set free space values of previous partition */
+ q->fspace_trk = p->start_trk - q->end_trk - 1;
+ }
+
+ ch = p->f1->DS1DSNAM;
+ vtoc_ebcdic_dec (ch, ch, 44);
+ if (strstr(ch, PART_TYPE_LVM))
+ p->type = PARTITION_LINUX_LVM;
+ else if (strstr(ch, PART_TYPE_RAID))
+ p->type = PARTITION_LINUX_RAID;
+ else if (strstr(ch, PART_TYPE_NATIVE))
+ p->type = PARTITION_LINUX;
+ else if (strstr(ch, PART_TYPE_SWAP))
+ p->type = PARTITION_LINUX_SWAP;
+ else
+ p->type = PARTITION_LINUX;
+ vtoc_ebcdic_enc (ch, ch, 44);
+
+ q = p;
+ p = p->next;
+ }
+}
+
+/*
+ * reorganizes all FMT1s, after that all used FMT1s should be right in
+ * front of all unused FMT1s
+ */
+static void
+fdasd_reorganize_FMT1s (fdasd_anchor_t *anc)
+{
+ PDEBUG
+ int i, j;
+ format1_label_t *ltmp;
+ partition_info_t *ptmp;
+
+ for (i=1; i<=USABLE_PARTITIONS - 1; i++) {
+ ptmp = anc->first;
+
+ for (j=1; j<=USABLE_PARTITIONS - i; j++) {
+ if (ptmp->f1->DS1FMTID < ptmp->next->f1->DS1FMTID) {
+ ltmp = ptmp->f1;
+ ptmp->f1 = ptmp->next->f1;
+ ptmp->next->f1 = ltmp;
+ }
+
+ ptmp=ptmp->next;
+ }
+ }
+}
+
+static void
+fdasd_process_valid_vtoc (fdasd_anchor_t * anc, unsigned long b, int fd)
+{
+ PDEBUG
+ int f5_counter = 0, f7_counter = 0, f1_counter = 0, oldfmt = 0;
+ int i, n, f1size = sizeof (format1_label_t);
+ partition_info_t *p = anc->first;
+ format1_label_t q;
+ char s[5], *ch;
+
+ if (anc->f4->DS4DEVCT.DS4DSCYL == LV_COMPAT_CYL &&
+ anc->f4->DS4DCYL > anc->f4->DS4DEVCT.DS4DSCYL)
+ anc->formatted_cylinders = anc->f4->DS4DCYL;
+ else
+ anc->formatted_cylinders = anc->f4->DS4DEVCT.DS4DSCYL;
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads -
+ FIRST_USABLE_TRK;
+ b += anc->blksize;
+
+ for (i = 1; i < anc->geo.sectors; i++) {
+ bzero (&q, f1size);
+ vtoc_read_label (fd, b, &q, NULL, NULL, NULL);
+
+ switch (q.DS1FMTID) {
+ case 0xf1:
+ case 0xf8:
+ if (p == NULL)
+ break;
+ memcpy (p->f1, &q, f1size);
+
+ n = -1;
+ vtoc_ebcdic_dec (p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+ ch = strstr (p->f1->DS1DSNAM, "PART");
+ if (ch != NULL) {
+ strncpy (s, ch + 4, 4);
+ s[4] = '\0';
+ n = atoi (s) - 1;
+ }
+
+ vtoc_ebcdic_enc (p->f1->DS1DSNAM, p->f1->DS1DSNAM, 44);
+
+ /* this dasd has data set names 0000-0002
+ but we use now 0001-0003 */
+ if (n == -1)
+ oldfmt++;
+
+ if (((oldfmt == 0) && (n < 0)) || (n >= USABLE_PARTITIONS)) {
+ /* no op */
+ } else {
+ if (oldfmt) {
+ /* correct +1 */
+ setpos (anc, n + 1, f1_counter);
+ } else {
+ setpos (anc, n, f1_counter);
+ }
+ }
+
+ p = p->next;
+ f1_counter++;
+ break;
+ case 0xf5:
+ memcpy (anc->f5, &q, f1size);
+ f5_counter++;
+ break;
+ case 0xf7:
+ if (f7_counter == 0)
+ memcpy (anc->f7, &q, f1size);
+ f7_counter++;
+ break;
+ case 0xf9:
+ /* each format 8 lable has an associated
+ * format 9 lable, but they are of no further
+ * use to us.
+ */
+ break;
+ }
+
+ b += anc->blksize;
+ }
+
+ if (oldfmt > 0) {
+ /* this is the old format PART0000 - PART0002 */
+ anc->vtoc_changed++;
+ }
+
+ if ((f5_counter == 0) || (anc->big_disk))
+ vtoc_init_format5_label (anc->f5);
+
+ if (f7_counter == 0)
+ vtoc_init_format7_label (anc->f7);
+
+ fdasd_reorganize_FMT1s (anc);
+ fdasd_update_partition_info (anc);
+}
+
+static void
+fdasd_invalid_vtoc_pointer(fdasd_anchor_t *anc)
+{
+ PDEBUG
+ anc->formatted_cylinders = anc->hw_cylinders;
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
+ - FIRST_USABLE_TRK;
+ vtoc_init_format4_label(anc->f4,
+ anc->geo.cylinders, anc->formatted_cylinders,
+ anc->geo.heads, anc->geo.sectors,
+ anc->blksize, anc->dev_type);
+
+ vtoc_init_format5_label(anc->f5);
+ vtoc_init_format7_label(anc->f7);
+
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose,
+ FIRST_USABLE_TRK,
+ anc->formatted_cylinders * anc->geo.heads - 1,
+ anc->formatted_cylinders, anc->geo.heads);
+
+ vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
+ anc->vtoc_changed++;
+ anc->vlabel_changed++;
+}
+
+/*
+ * we have a invalid FMT4 DSCB and therefore we will re-create the VTOC
+ */
+static void
+fdasd_process_invalid_vtoc(fdasd_anchor_t *anc)
+{
+ anc->formatted_cylinders = anc->hw_cylinders;
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
+ - FIRST_USABLE_TRK;
+ vtoc_init_format4_label(anc->f4,
+ anc->geo.cylinders, anc->formatted_cylinders,
+ anc->geo.heads, anc->geo.sectors,
+ anc->blksize, anc->dev_type);
+
+ vtoc_init_format5_label(anc->f5);
+ vtoc_init_format7_label(anc->f7);
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+', anc->verbose,
+ FIRST_USABLE_TRK,
+ anc->formatted_cylinders * anc->geo.heads - 1,
+ anc->formatted_cylinders, anc->geo.heads);
+
+ anc->vtoc_changed++;
+}
+
+
+static int
+fdasd_valid_vtoc_pointer(fdasd_anchor_t *anc, unsigned long b, int fd)
+{
+ PDEBUG
+ char str[LINE_LENGTH];
+
+ /* VOL1 label contains valid VTOC pointer */
+ vtoc_read_label (fd, b, NULL, anc->f4, NULL, NULL);
+
+ if (anc->f4->DS4IDFMT == 0xf4) {
+ fdasd_process_valid_vtoc (anc, b, fd);
+ return 0;
+ } else {
+ fdasd_process_invalid_vtoc(anc);
+ }
+ if (strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("LNX1",str,4),4) == 0 ||
+ strncmp(anc->vlabel->volkey, vtoc_ebcdic_enc("CMS1",str,4),4) == 0)
+ return 0;
+
+ fdasd_error(anc, wrong_disk_format, _("Invalid VTOC."));
+ return 1;
+}
+
+/*
+ * check the dasd for a volume label
+ */
+int
+fdasd_check_volume (fdasd_anchor_t *anc, int fd)
+{
+ PDEBUG
+ volume_label_t *v = anc->vlabel;
+ long long b = -1;
+ char str[LINE_LENGTH];
+
+ memset(v, 0, sizeof(volume_label_t));
+ vtoc_read_volume_label (fd, anc->label_pos, v);
+
+ if (strncmp(v->vollbl, vtoc_ebcdic_enc ("VOL1", str, 4), 4) == 0) {
+ if (anc->FBA_layout != 1 ) {
+ /* found VOL1 volume label */
+ b = (cchhb2blk (&v->vtoc, &anc->geo) - 1) * anc->blksize;
+
+ if (b > 0) {
+ int rc;
+ rc = fdasd_valid_vtoc_pointer (anc, b, fd);
+
+ if (rc < 0)
+ return 1;
+ else
+ return 0;
+ } else {
+ fdasd_invalid_vtoc_pointer(anc);
+ }
+ }
+ } else if (strncmp (v->volkey, vtoc_ebcdic_enc ("LNX1", str, 4), 4) == 0 ||
+ strncmp (v->volkey, vtoc_ebcdic_enc ("CMS1", str, 4), 4) == 0) {
+ return 0;
+ } else if (anc->FBA_layout == 1) {
+ /* Some times LDL formatted disks does not
+ contain any volume label */
+ return 1;
+ } else if (! anc->is_file) {
+ /* didn't find VOL1 volume label */
+ anc->formatted_cylinders = anc->hw_cylinders;
+ anc->fspace_trk = anc->formatted_cylinders * anc->geo.heads
+ - FIRST_USABLE_TRK;
+
+ fdasd_init_volume_label(anc, fd);
+
+ vtoc_init_format4_label(anc->f4,
+ anc->geo.cylinders, anc->formatted_cylinders,
+ anc->geo.heads, anc->geo.sectors,
+ anc->blksize, anc->dev_type);
+
+ vtoc_init_format5_label(anc->f5);
+ vtoc_init_format7_label(anc->f7);
+
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '+',
+ anc->verbose, FIRST_USABLE_TRK,
+ anc->formatted_cylinders * anc->geo.heads - 1,
+ anc->formatted_cylinders, anc->geo.heads);
+ return 0;
+ }
+ return 1;
+}
+
+/*
+ * checks the current API version with the API version of the dasd driver
+ */
+void
+fdasd_check_api_version (fdasd_anchor_t *anc, int f)
+{
+ PDEBUG
+ int api;
+ char s[2*LINE_LENGTH];
+
+ struct stat st;
+ if (fstat (f, &st) == 0 && S_ISREG (st.st_mode)) {
+ /* skip these tests when F is a regular file. */
+ }
+ else {
+ if (ioctl(f, DASDAPIVER, &api) != 0)
+ fdasd_error(anc, unable_to_ioctl,
+ _("Could not retrieve API version."));
+
+ if (api != DASD_MIN_API_VERSION) {
+ sprintf(s, _("The current API version '%d' doesn't " \
+ "match dasd driver API version " \
+ "'%d'!"), api, DASD_MIN_API_VERSION);
+ fdasd_error(anc, api_version_mismatch, s);
+ }
+ }
+}
+
+/*
+ * The following two functions match those in the DASD ECKD device driver.
+ * They are used to compute how many records of a given size can be stored
+ * in one track.
+ */
+static unsigned int ceil_quot(unsigned int d1, unsigned int d2)
+{
+ return (d1 + (d2 - 1)) / d2;
+}
+
+/* kl: key length, dl: data length */
+static unsigned int recs_per_track(unsigned short dev_type, unsigned int kl,
+ unsigned int dl)
+{
+ unsigned int dn, kn;
+
+ switch (dev_type) {
+ case DASD_3380_TYPE:
+ if (kl)
+ return 1499 / (15 + 7 + ceil_quot(kl + 12, 32) +
+ ceil_quot(dl + 12, 32));
+ else
+ return 1499 / (15 + ceil_quot(dl + 12, 32));
+ case DASD_3390_TYPE:
+ dn = ceil_quot(dl + 6, 232) + 1;
+ if (kl) {
+ kn = ceil_quot(kl + 6, 232) + 1;
+ return 1729 / (10 + 9 + ceil_quot(kl + 6 * kn, 34) +
+ 9 + ceil_quot(dl + 6 * dn, 34));
+ } else
+ return 1729 / (10 + 9 + ceil_quot(dl + 6 * dn, 34));
+ case DASD_9345_TYPE:
+ dn = ceil_quot(dl + 6, 232) + 1;
+ if (kl) {
+ kn = ceil_quot(kl + 6, 232) + 1;
+ return 1420 / (18 + 7 + ceil_quot(kl + 6 * kn, 34) +
+ ceil_quot(dl + 6 * dn, 34));
+ } else
+ return 1420 / (18 + 7 + ceil_quot(dl + 6 * dn, 34));
+ }
+ return 0;
+}
+
+/*
+ * Verify that number of tracks (heads) per cylinder and number of
+ * sectors per track match the expected values for a given device type
+ * and block size.
+ * Returns 1 for a valid match and 0 otherwise.
+ */
+static int fdasd_verify_geometry(unsigned short dev_type, int blksize,
+ struct fdasd_hd_geometry *geometry)
+{
+ unsigned int expected_sectors;
+ if (geometry->heads != 15)
+ return 0;
+ expected_sectors = recs_per_track(dev_type, 0, blksize);
+ if (geometry->sectors == expected_sectors)
+ return 1;
+ return 0;
+}
+
+/*
+ * reads dasd geometry data
+ */
+int
+fdasd_get_geometry (const PedDevice *dev, fdasd_anchor_t *anc, int f)
+{
+ PDEBUG
+ int blksize = 0;
+ dasd_information_t dasd_info;
+ struct dasd_eckd_characteristics *characteristics;
+ unsigned long long size_in_bytes;
+
+ /* We can't get geometry from a regular file,
+ so simulate something usable, for the sake of testing. */
+ struct stat st;
+ if (fstat (f, &st) == 0 && S_ISREG (st.st_mode)) {
+ PedSector n_sectors = st.st_size / dev->sector_size;
+ anc->geo.heads = 15;
+ anc->geo.sectors = 12;
+ anc->geo.cylinders
+ = (n_sectors / (anc->geo.heads * anc->geo.sectors
+ * (dev->sector_size / dev->phys_sector_size)));
+ anc->geo.start = 0;
+ blksize = 4096;
+ memcpy (dasd_info.type, "ECKD", 4);
+ dasd_info.dev_type = 13200;
+ dasd_info.label_block = 2;
+ dasd_info.devno = 513;
+ dasd_info.label_block = 2;
+ dasd_info.FBA_layout = 0;
+ anc->hw_cylinders = ((st.st_size / blksize) / anc->geo.sectors) /
+ anc->geo.heads;
+ anc->is_file = 1;
+ } else {
+ if (ioctl(f, BLKGETSIZE64, &size_in_bytes) != 0) {
+ fdasd_error(anc, unable_to_ioctl,
+ _("Could not retrieve disk size."));
+ goto error;
+ }
+
+ if (ioctl(f, HDIO_GETGEO, &anc->geo) != 0 ||
+ anc->geo.heads == 0 ||
+ anc->geo.sectors == 0 ||
+ anc->geo.cylinders == 0 ) {
+ fdasd_error(anc, unable_to_ioctl,
+ _("Could not retrieve disk geometry information."));
+ goto error;
+ }
+
+ if (ioctl(f, BLKSSZGET, &blksize) != 0) {
+ fdasd_error(anc, unable_to_ioctl,
+ _("Could not retrieve blocksize information."));
+ goto error;
+ }
+
+ /* get disk type */
+ if (ioctl(f, BIODASDINFO, &dasd_info) != 0) {
+ /* verify that the geometry matches a 3390 DASD */
+ if (!fdasd_verify_geometry(DASD_3390_TYPE, blksize,
+ &anc->geo)) {
+ fdasd_error(anc, wrong_disk_type,
+ _("Disk geometry does not match a " \
+ "DASD device of type 3390."));
+ goto error;
+ }
+ anc->dev_type = DASD_3390_TYPE;
+ anc->hw_cylinders =
+ size_in_bytes / (blksize * anc->geo.heads * anc->geo.sectors);
+ /* The VOL1 label on a CDL formatted ECKD DASD is in block 2
+ * It will be verified later, if this position actually holds a
+ * valid label record.
+ */
+ anc->label_pos = 2 * blksize;
+ /* A devno 0 is actually a valid devno, which could exist
+ * in the system. Since we use this number only to create
+ * a default volume serial, there is no serious conflict.
+ */
+ anc->devno = 0;
+ } else {
+ characteristics = (struct dasd_eckd_characteristics *)
+ &dasd_info.characteristics;
+ if (characteristics->no_cyl == LV_COMPAT_CYL &&
+ characteristics->long_no_cyl)
+ anc->hw_cylinders = characteristics->long_no_cyl;
+ else
+ anc->hw_cylinders = characteristics->no_cyl;
+ anc->dev_type = dasd_info.dev_type;
+ anc->label_pos = dasd_info.label_block * blksize;
+ anc->devno = dasd_info.devno;
+ anc->label_block = dasd_info.label_block;
+ anc->FBA_layout = dasd_info.FBA_layout;
+ }
+
+ anc->is_file = 0;
+ }
+
+ anc->blksize = blksize;
+ return 1;
+
+ error:
+ return 0;
+}
+
+/*
+ * returns unused partition info pointer if there
+ * is a free partition, otherwise NULL
+ */
+static partition_info_t *
+fdasd_get_empty_f1_label (fdasd_anchor_t * anc)
+{
+ PDEBUG
+ if (anc->used_partitions < USABLE_PARTITIONS)
+ return anc->last;
+ else
+ return NULL;
+}
+
+/*
+ * asks for and sets some important partition data
+ */
+static int
+fdasd_get_partition_data (fdasd_anchor_t *anc, extent_t *part_extent,
+ partition_info_t *p, unsigned int *start_ptr,
+ unsigned int *stop_ptr)
+{
+ PDEBUG
+ unsigned int limit;
+ u_int32_t cc, c;
+ u_int16_t hh, h;
+ cchh_t llimit, ulimit;
+ partition_info_t *q;
+ u_int8_t b1, b2;
+ unsigned int start = *start_ptr, stop = *stop_ptr;
+ int i;
+ char *ch;
+
+ c = get_usable_cylinders(anc);
+ h = anc->f4->DS4DEVCT.DS4DSTRK;
+ limit = (h * c - 1);
+
+ /* check start value from user */
+ q = anc->first;
+ for (i = 0; i < USABLE_PARTITIONS; i++) {
+ if ( q->next == NULL )
+ break;
+
+ if (start >= q->start_trk && start <= q->end_trk) {
+ /* start is within another partition */
+ start = q->end_trk + 1;
+
+ if (start > limit) {
+ start = FIRST_USABLE_TRK;
+ q = anc->first;
+ }
+ }
+
+ if (start < q->start_trk) {
+ limit = q->start_trk - 1;
+ break;
+ }
+
+ q = q->next;
+ }
+
+ if (start == limit)
+ stop = start;
+
+ /* update partition info */
+ p->len_trk = stop - start + 1;
+ p->start_trk = start;
+ p->end_trk = stop;
+
+ cc = start / anc->geo.heads;
+ hh = start - (cc * anc->geo.heads);
+ vtoc_set_cchh(&llimit, cc, hh);
+
+ /* check for cylinder boundary */
+ if (hh == 0)
+ b1 = 0x81;
+ else
+ b1 = 0x01;
+
+ cc = stop / anc->geo.heads;
+ hh = stop - cc * anc->geo.heads;
+ vtoc_set_cchh(&ulimit, cc, hh);
+
+ /* it is always the 1st extent */
+ b2 = 0x00;
+
+ vtoc_set_extent(part_extent, b1, b2, &llimit, &ulimit);
+
+ *start_ptr = start;
+ *stop_ptr = stop;
+
+ ch = p->f1->DS1DSNAM;
+ vtoc_ebcdic_dec (ch, ch, 44);
+
+ if (strstr(ch, PART_TYPE_LVM))
+ p->type = PARTITION_LINUX_LVM;
+ else if (strstr(ch, PART_TYPE_RAID))
+ p->type = PARTITION_LINUX_RAID;
+ else if (strstr(ch, PART_TYPE_NATIVE))
+ p->type = PARTITION_LINUX;
+ else if (strstr(ch, PART_TYPE_SWAP))
+ p->type = PARTITION_LINUX_SWAP;
+ else
+ p->type = PARTITION_LINUX;
+
+ vtoc_ebcdic_enc (ch, ch, 44);
+
+ return 0;
+}
+
+static void
+fdasd_enqueue_new_partition (fdasd_anchor_t *anc)
+{
+ PDEBUG
+ partition_info_t *q = anc->first, *p = anc->last;
+ int i, k=0;
+
+ for (i=1; i<USABLE_PARTITIONS; i++) {
+ if ((q->end_trk == 0) || (p->start_trk < q->start_trk)) {
+ break;
+ } else {
+ q = q->next;
+ k++;
+ }
+ }
+
+ if (anc->first == q)
+ anc->first = p;
+
+ if (p != q) {
+ anc->last->prev->next = NULL;
+ anc->last = anc->last->prev;
+
+ p->next = q;
+ p->prev = q->prev;
+ q->prev = p;
+
+ if (p->prev != NULL)
+ p->prev->next = p;
+ }
+
+ p->used = 0x01;
+ p->type = PARTITION_LINUX;
+
+ for (i=0; i<USABLE_PARTITIONS; i++) {
+ int j = getpos(anc, i);
+ if (j >= k)
+ setpos(anc, i, j + 1);
+ }
+
+ /* update free-space counters */
+ if (anc->first == p) {
+ /* partition is the first used partition */
+ if (p->start_trk == FIRST_USABLE_TRK) {
+ /* partition starts right behind VTOC */
+ p->fspace_trk = anc->fspace_trk - p->len_trk;
+ anc->fspace_trk = 0;
+ } else {
+ /* there is some space between VTOC and partition */
+ p->fspace_trk = anc->fspace_trk - p->len_trk - p->start_trk
+ + FIRST_USABLE_TRK;
+ anc->fspace_trk = p->start_trk - FIRST_USABLE_TRK;
+ }
+ } else {
+ /* there are partitions in front of the new one */
+ if (p->start_trk == p->prev->end_trk + 1) {
+ /* new partition is right behind the previous one */
+ p->fspace_trk = p->prev->fspace_trk - p->len_trk;
+ p->prev->fspace_trk = 0;
+ } else {
+ /* there is some space between new and prev. part. */
+ p->fspace_trk = p->prev->fspace_trk - p->len_trk
+ - p->start_trk + p->prev->end_trk + 1;
+ p->prev->fspace_trk = p->start_trk - p->prev->end_trk - 1;
+ }
+ }
+}
+
+/*
+ * adds a new partition to the 'partition table'
+ */
+partition_info_t *
+fdasd_add_partition (fdasd_anchor_t *anc, unsigned int start,
+ unsigned int stop)
+{
+ PDEBUG
+ cchhb_t hf1;
+ partition_info_t *p;
+ extent_t ext;
+
+ PDEBUG;
+
+ if ((p = fdasd_get_empty_f1_label(anc)) == NULL) {
+ PDEBUG;
+ return 0;
+ }
+
+ PDEBUG;
+ if (fdasd_get_partition_data(anc, &ext, p, &start, &stop) != 0)
+ return 0;
+
+ if (anc->formatted_cylinders > LV_COMPAT_CYL) {
+ vtoc_init_format8_label(anc->blksize, &ext, p->f1);
+ } else {
+ PDEBUG;
+ vtoc_init_format1_label(anc->blksize, &ext, p->f1);
+ }
+
+ PDEBUG;
+ fdasd_enqueue_new_partition(anc);
+
+ PDEBUG;
+ anc->used_partitions += 1;
+
+ get_addr_of_highest_f1_f8_label(anc, &hf1);
+ vtoc_update_format4_label(anc->f4, &hf1, anc->f4->DS4DSREC - 1);
+
+ PDEBUG;
+
+ start = cchh2trk(&ext.llimit, &anc->geo);
+ stop = cchh2trk(&ext.ulimit, &anc->geo);
+
+ PDEBUG;
+ vtoc_set_freespace(anc->f4, anc->f5, anc->f7, '-', anc->verbose,
+ start, stop, anc->formatted_cylinders, anc->geo.heads);
+
+ anc->vtoc_changed++;
+
+ PDEBUG;
+ return p;
+}
+
+/*
+ * Check for valid volume serial characters (max. 6) - remove invalid.
+ * If volser is empty, fill with default volser.
+ */
+void fdasd_check_volser (char *volser, int devno)
+{
+ int from, to;
+
+ for (from = 0, to = 0; volser[from] && from < VOLSER_LENGTH; from++) {
+
+ if ((volser[from] >= 0x23 &&
+ volser[from] <= 0x25) ||
+ (volser[from] >= 0x30 &&
+ volser[from] <= 0x39) ||
+ (volser[from] >= 0x40 &&
+ volser[from] <= 0x5a) ||
+ (volser[from] >= 0x61 &&
+ volser[from] <= 0x7a))
+ volser[to++] = toupper(volser[from]);
+ }
+
+ volser[to] = 0x00;
+
+ if (volser[0] == 0x00)
+ sprintf(volser, "0X%04x", devno);
+}
+
+/*
+ * get volser from vtoc
+ */
+int fdasd_get_volser (fdasd_anchor_t *anc, char *volser, int fd)
+{
+ volume_label_t vlabel;
+
+ vtoc_read_volume_label(fd, anc->label_pos, &vlabel);
+ vtoc_volume_label_get_volser(&vlabel, volser);
+ return 0;
+}
+
+/* Changes the volume serial (menu option)
+ *
+ */
+void fdasd_change_volser (fdasd_anchor_t *anc, char *str)
+{
+ fdasd_check_volser(str, anc->devno);
+ vtoc_volume_label_set_volser(anc->vlabel, str);
+
+ vtoc_set_cchhb(&anc->vlabel->vtoc, VTOC_START_CC, VTOC_START_HH, 0x01);
+ anc->vlabel_changed++;
+ anc->vtoc_changed++;
+}
+
+/*
+ * re-create all VTOC labels, but use the partition information
+ * from existing VTOC
+ */
+void fdasd_reuse_vtoc (fdasd_anchor_t *anc)
+{
+ partition_info_t *part_info = anc->first;
+ struct fdasd_hd_geometry geo = anc->geo;
+ format1_label_t f1;
+ format4_label_t f4;
+ format5_label_t f5;
+ format7_label_t f7;
+
+ vtoc_init_format4_label(&f4, geo.cylinders, anc->formatted_cylinders,
+ geo.heads, geo.sectors,
+ anc->blksize, anc->dev_type);
+
+ /* reuse some FMT4 values */
+ f4.DS4HPCHR = anc->f4->DS4HPCHR;
+ f4.DS4DSREC = anc->f4->DS4DSREC;
+
+ /* re-initialize both free-space labels */
+ vtoc_init_format5_label(&f5);
+ vtoc_init_format7_label(&f7);
+
+ if (anc->fspace_trk > 0)
+ vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose,
+ FIRST_USABLE_TRK,
+ FIRST_USABLE_TRK + anc->fspace_trk - 1,
+ anc->formatted_cylinders, geo.heads);
+
+ while (part_info != NULL) {
+ if (part_info->used != 0x01) {
+ part_info = part_info->next;
+ continue;
+ }
+
+ if (anc->formatted_cylinders > LV_COMPAT_CYL)
+ vtoc_init_format8_label(anc->blksize,
+ &part_info->f1->DS1EXT1, &f1);
+ else
+ vtoc_init_format1_label(anc->blksize,
+ &part_info->f1->DS1EXT1, &f1);
+
+
+ strncpy(f1.DS1DSNAM, part_info->f1->DS1DSNAM, 44);
+ strncpy((char *)f1.DS1DSSN, (char *)part_info->f1->DS1DSSN, 6);
+ f1.DS1CREDT = part_info->f1->DS1CREDT;
+
+ memcpy(part_info->f1, &f1, sizeof(format1_label_t));
+
+ if (part_info->fspace_trk > 0)
+ vtoc_set_freespace(&f4, &f5, &f7, '+', anc->verbose,
+ part_info->end_trk + 1,
+ part_info->end_trk +
+ part_info->fspace_trk,
+ anc->formatted_cylinders, geo.heads);
+
+ part_info = part_info->next;
+ }
+
+ /* over-write old labels with new ones */
+ memcpy(anc->f4, &f4, sizeof(format4_label_t));
+ memcpy(anc->f5, &f5, sizeof(format5_label_t));
+ memcpy(anc->f7, &f7, sizeof(format7_label_t));
+
+ anc->vtoc_changed++;
+
+ return;
+}
+
+/* vim:set tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/libparted/labels/gpt.c b/libparted/labels/gpt.c
new file mode 100644
index 0000000..780fb70
--- /dev/null
+++ b/libparted/labels/gpt.c
@@ -0,0 +1,1941 @@
+/*
+ libparted - a library for manipulating disk partitions
+
+ original version by Matt Domsch <Matt_Domsch@dell.com>
+ Disclaimed into the Public Domain
+
+ Portions Copyright (C) 2001-2003, 2005-2012 Free Software Foundation, Inc.
+
+ EFI GUID Partition Table handling
+ Per Intel EFI Specification v1.02
+ http://developer.intel.com/technology/efi/efi.htm
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <parted/crc32.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <uuid/uuid.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <iconv.h>
+#include <langinfo.h>
+#include "xalloc.h"
+#include "xalloc-oversized.h"
+#include "verify.h"
+
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) gettext (String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define EFI_PMBR_OSTYPE_EFI 0xEE
+#define MSDOS_MBR_SIGNATURE 0xaa55
+
+#define GPT_HEADER_SIGNATURE 0x5452415020494645LL
+
+/* NOTE: the document that describes revision 1.00 is labelled "version 1.02",
+ * so some implementors got confused...
+ */
+#define GPT_HEADER_REVISION_V1_02 0x00010200
+#define GPT_HEADER_REVISION_V1_00 0x00010000
+#define GPT_HEADER_REVISION_V0_99 0x00009900
+
+typedef uint16_t efi_char16_t; /* UNICODE character */
+typedef struct _GuidPartitionTableHeader_t GuidPartitionTableHeader_t;
+typedef struct _GuidPartitionEntryAttributes_t GuidPartitionEntryAttributes_t;
+typedef struct _GuidPartitionEntry_t GuidPartitionEntry_t;
+typedef struct _PartitionRecord_t PartitionRecord_t;
+typedef struct _LegacyMBR_t LegacyMBR_t;
+typedef struct _GPTDiskData GPTDiskData;
+
+
+typedef struct
+{
+ uint32_t time_low;
+ uint16_t time_mid;
+ uint16_t time_hi_and_version;
+ uint8_t clock_seq_hi_and_reserved;
+ uint8_t clock_seq_low;
+ uint8_t node[6];
+} /* __attribute__ ((packed)) */ efi_guid_t;
+/* commented out "__attribute__ ((packed))" to work around gcc bug (fixed
+ * in gcc3.1): __attribute__ ((packed)) breaks addressing on initialized
+ * data. It turns out we don't need it in this case, so it doesn't break
+ * anything :)
+ */
+
+#define UNUSED_ENTRY_GUID \
+ ((efi_guid_t) { 0x00000000, 0x0000, 0x0000, 0x00, 0x00, \
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }})
+#define PARTITION_SYSTEM_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xC12A7328), PED_CPU_TO_LE16 (0xF81F), \
+ PED_CPU_TO_LE16 (0x11d2), 0xBA, 0x4B, \
+ { 0x00, 0xA0, 0xC9, 0x3E, 0xC9, 0x3B }})
+#define PARTITION_BIOS_GRUB_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x21686148), PED_CPU_TO_LE16 (0x6449), \
+ PED_CPU_TO_LE16 (0x6E6f), 0x74, 0x4E, \
+ { 0x65, 0x65, 0x64, 0x45, 0x46, 0x49 }})
+#define LEGACY_MBR_PARTITION_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x024DEE41), PED_CPU_TO_LE16 (0x33E7), \
+ PED_CPU_TO_LE16 (0x11d3, 0x9D, 0x69, \
+ { 0x00, 0x08, 0xC7, 0x81, 0xF3, 0x9F }})
+#define PARTITION_MSFT_RESERVED_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xE3C9E316), PED_CPU_TO_LE16 (0x0B5C), \
+ PED_CPU_TO_LE16 (0x4DB8), 0x81, 0x7D, \
+ { 0xF9, 0x2D, 0xF0, 0x02, 0x15, 0xAE }})
+#define PARTITION_MSFT_RECOVERY \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xDE94BBA4), PED_CPU_TO_LE16 (0x06D1), \
+ PED_CPU_TO_LE16 (0x4D40), 0xA1, 0x6A, \
+ { 0xBF, 0xD5, 0x01, 0x79, 0xD6, 0xAC }})
+#define PARTITION_BASIC_DATA_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xEBD0A0A2), PED_CPU_TO_LE16 (0xB9E5), \
+ PED_CPU_TO_LE16 (0x4433), 0x87, 0xC0, \
+ { 0x68, 0xB6, 0xB7, 0x26, 0x99, 0xC7 }})
+#define PARTITION_RAID_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xa19d880f), PED_CPU_TO_LE16 (0x05fc), \
+ PED_CPU_TO_LE16 (0x4d3b), 0xa0, 0x06, \
+ { 0x74, 0x3f, 0x0f, 0x84, 0x91, 0x1e }})
+#define PARTITION_SWAP_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x0657fd6d), PED_CPU_TO_LE16 (0xa4ab), \
+ PED_CPU_TO_LE16 (0x43c4), 0x84, 0xe5, \
+ { 0x09, 0x33, 0xc8, 0x4b, 0x4f, 0x4f }})
+#define PARTITION_LINUX_DATA_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x0FC63DAF), PED_CPU_TO_LE16 (0x8483), \
+ PED_CPU_TO_LE16 (0x4772), 0x8E, 0x79, \
+ { 0x3D, 0x69, 0xD8, 0x47, 0x7D, 0xE4 }})
+#define PARTITION_LVM_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xe6d6d379), PED_CPU_TO_LE16 (0xf507), \
+ PED_CPU_TO_LE16 (0x44c2), 0xa2, 0x3c, \
+ { 0x23, 0x8f, 0x2a, 0x3d, 0xf9, 0x28 }})
+#define PARTITION_RESERVED_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x8da63339), PED_CPU_TO_LE16 (0x0007), \
+ PED_CPU_TO_LE16 (0x60c0), 0xc4, 0x36, \
+ { 0x08, 0x3a, 0xc8, 0x23, 0x09, 0x08 }})
+#define PARTITION_HPSERVICE_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xe2a1e728), PED_CPU_TO_LE16 (0x32e3), \
+ PED_CPU_TO_LE16 (0x11d6), 0xa6, 0x82, \
+ { 0x7b, 0x03, 0xa0, 0x00, 0x00, 0x00 }})
+#define PARTITION_APPLE_HFS_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x48465300), PED_CPU_TO_LE16 (0x0000), \
+ PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
+ { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }})
+#define PARTITION_APPLE_TV_RECOVERY_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x5265636F), PED_CPU_TO_LE16 (0x7665), \
+ PED_CPU_TO_LE16 (0x11AA), 0xaa, 0x11, \
+ { 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC }})
+#define PARTITION_PREP_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x9e1a2d38), PED_CPU_TO_LE16 (0xc612), \
+ PED_CPU_TO_LE16 (0x4316), 0xaa, 0x26, \
+ { 0x8b, 0x49, 0x52, 0x1e, 0x5a, 0x8b }})
+#define PARTITION_IRST_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xD3BFE2DE), PED_CPU_TO_LE16 (0x3DAF), \
+ PED_CPU_TO_LE16 (0x11DF), 0xba, 0x40, \
+ { 0xE3, 0xA5, 0x56, 0xD8, 0x95, 0x93 }})
+#define PARTITION_CHROMEOS_KERNEL_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xfe3a2a5d), PED_CPU_TO_LE16 (0x4f32), \
+ PED_CPU_TO_LE16 (0x41a7), 0xb7, 0x25, \
+ { 0xac, 0xcc, 0x32, 0x85, 0xa3, 0x09 }})
+#define PARTITION_BLS_BOOT_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0xbc13c2ff), PED_CPU_TO_LE16 (0x59e6), \
+ PED_CPU_TO_LE16 (0x4262), 0xa3, 0x52, \
+ { 0xb2, 0x75, 0xfd, 0x6f, 0x71, 0x72 }})
+#define PARTITION_LINUX_HOME_GUID \
+ ((efi_guid_t) { PED_CPU_TO_LE32 (0x933ac7e1), PED_CPU_TO_LE16 (0x2eb4), \
+ PED_CPU_TO_LE16 (0x4f13), 0xb8, 0x44, \
+ { 0x0e, 0x14, 0xe2, 0xae, 0xf9, 0x15 }})
+
+struct flag_uuid_mapping_t
+{
+ enum _PedPartitionFlag flag;
+ efi_guid_t type_uuid;
+};
+
+static const struct flag_uuid_mapping_t flag_uuid_mapping[] =
+{
+ { PED_PARTITION_APPLE_TV_RECOVERY, PARTITION_APPLE_TV_RECOVERY_GUID },
+ { PED_PARTITION_BIOS_GRUB, PARTITION_BIOS_GRUB_GUID },
+ { PED_PARTITION_BLS_BOOT, PARTITION_BLS_BOOT_GUID },
+ { PED_PARTITION_BOOT, PARTITION_SYSTEM_GUID },
+ { PED_PARTITION_CHROMEOS_KERNEL, PARTITION_CHROMEOS_KERNEL_GUID },
+ { PED_PARTITION_DIAG, PARTITION_MSFT_RECOVERY },
+ { PED_PARTITION_ESP, PARTITION_SYSTEM_GUID },
+ { PED_PARTITION_HPSERVICE, PARTITION_HPSERVICE_GUID },
+ { PED_PARTITION_IRST, PARTITION_IRST_GUID },
+ { PED_PARTITION_LINUX_HOME, PARTITION_LINUX_HOME_GUID },
+ { PED_PARTITION_LVM, PARTITION_LVM_GUID },
+ { PED_PARTITION_MSFT_DATA, PARTITION_BASIC_DATA_GUID },
+ { PED_PARTITION_MSFT_RESERVED, PARTITION_MSFT_RESERVED_GUID },
+ { PED_PARTITION_PREP, PARTITION_PREP_GUID },
+ { PED_PARTITION_RAID, PARTITION_RAID_GUID },
+ { PED_PARTITION_SWAP, PARTITION_SWAP_GUID },
+};
+
+static const efi_guid_t skip_set_system_guids[] =
+{
+ PARTITION_LVM_GUID,
+ PARTITION_SWAP_GUID,
+ PARTITION_RAID_GUID,
+ PARTITION_PREP_GUID,
+ PARTITION_SYSTEM_GUID,
+ PARTITION_BIOS_GRUB_GUID,
+ PARTITION_HPSERVICE_GUID,
+ PARTITION_MSFT_RESERVED_GUID,
+ PARTITION_BASIC_DATA_GUID,
+ PARTITION_MSFT_RECOVERY,
+ PARTITION_APPLE_TV_RECOVERY_GUID,
+ PARTITION_IRST_GUID,
+ PARTITION_CHROMEOS_KERNEL_GUID,
+ PARTITION_BLS_BOOT_GUID,
+};
+
+static const struct flag_uuid_mapping_t* _GL_ATTRIBUTE_CONST
+gpt_find_flag_uuid_mapping (PedPartitionFlag flag)
+{
+ int n = sizeof(flag_uuid_mapping) / sizeof(flag_uuid_mapping[0]);
+
+ for (int i = 0; i < n; ++i)
+ if (flag_uuid_mapping[i].flag == flag)
+ return &flag_uuid_mapping[i];
+
+ return NULL;
+}
+
+struct __attribute__ ((packed)) _GuidPartitionTableHeader_t
+{
+ uint64_t Signature;
+ uint32_t Revision;
+ uint32_t HeaderSize;
+ uint32_t HeaderCRC32;
+ uint32_t Reserved1;
+ uint64_t MyLBA;
+ uint64_t AlternateLBA;
+ uint64_t FirstUsableLBA;
+ uint64_t LastUsableLBA;
+ efi_guid_t DiskGUID;
+ uint64_t PartitionEntryLBA;
+ uint32_t NumberOfPartitionEntries;
+ uint32_t SizeOfPartitionEntry;
+ uint32_t PartitionEntryArrayCRC32;
+ uint8_t *Reserved2;
+};
+
+struct __attribute__ ((packed)) _GuidPartitionEntryAttributes_t
+{
+#ifdef __GNUC__ /* XXX narrow this down to !TinyCC */
+ uint64_t RequiredToFunction:1;
+ uint64_t NoBlockIOProtocol:1;
+ uint64_t LegacyBIOSBootable:1;
+ uint64_t Reserved:45;
+ uint64_t GuidSpecific:15;
+ uint64_t NoAutomount:1;
+#else
+# warning "Using crippled partition entry type"
+ uint32_t RequiredToFunction:1;
+ uint32_t NoBlockIOProtocol:1;
+ uint32_t LegacyBIOSBootable:1;
+ uint32_t Reserved:30;
+ uint32_t LOST:5;
+ uint32_t GuidSpecific:15;
+ uint32_t NoAutomount:1;
+#endif
+};
+
+struct __attribute__ ((packed)) _GuidPartitionEntry_t
+{
+ efi_guid_t PartitionTypeGuid;
+ efi_guid_t UniquePartitionGuid;
+ uint64_t StartingLBA;
+ uint64_t EndingLBA;
+ GuidPartitionEntryAttributes_t Attributes;
+ efi_char16_t PartitionName[36];
+};
+
+#define GPT_PMBR_LBA 0
+#define GPT_PMBR_SECTORS 1
+#define GPT_PRIMARY_HEADER_LBA 1
+#define GPT_HEADER_SECTORS 1
+#define GPT_PRIMARY_PART_TABLE_LBA 2
+
+/*
+ These values are only defaults. The actual on-disk structures
+ may define different sizes, so use those unless creating a new GPT disk!
+*/
+
+#define GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE 16384
+
+/* Number of actual partition entries should be calculated as: */
+#define GPT_DEFAULT_PARTITION_ENTRIES \
+ (GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / \
+ sizeof(GuidPartitionEntry_t))
+
+struct __attribute__ ((packed)) _PartitionRecord_t
+{
+ /* Not used by EFI firmware. Set to 0x80 to indicate that this
+ is the bootable legacy partition. */
+ uint8_t BootIndicator;
+
+ /* Start of partition in CHS address, not used by EFI firmware. */
+ uint8_t StartHead;
+
+ /* Start of partition in CHS address, not used by EFI firmware. */
+ uint8_t StartSector;
+
+ /* Start of partition in CHS address, not used by EFI firmware. */
+ uint8_t StartTrack;
+
+ /* OS type. A value of 0xEF defines an EFI system partition.
+ Other values are reserved for legacy operating systems, and
+ allocated independently of the EFI specification. */
+ uint8_t OSType;
+
+ /* End of partition in CHS address, not used by EFI firmware. */
+ uint8_t EndHead;
+
+ /* End of partition in CHS address, not used by EFI firmware. */
+ uint8_t EndSector;
+
+ /* End of partition in CHS address, not used by EFI firmware. */
+ uint8_t EndTrack;
+
+ /* Starting LBA address of the partition on the disk. Used by
+ EFI firmware to define the start of the partition. */
+ uint32_t StartingLBA;
+
+ /* Size of partition in LBA. Used by EFI firmware to determine
+ the size of the partition. */
+ uint32_t SizeInLBA;
+};
+
+/* Protected Master Boot Record & Legacy MBR share same structure */
+/* Needs to be packed because the u16s force misalignment. */
+struct __attribute__ ((packed)) _LegacyMBR_t
+{
+ uint8_t BootCode[440];
+ uint32_t UniqueMBRSignature;
+ uint16_t Unknown;
+ PartitionRecord_t PartitionRecord[4];
+ uint16_t Signature;
+};
+
+/* uses libparted's disk_specific field in PedDisk, to store our info */
+struct __attribute__ ((packed, aligned(8))) _GPTDiskData
+{
+ PedGeometry data_area;
+ int entry_count;
+ efi_guid_t uuid;
+ int pmbr_boot;
+ PedSector AlternateLBA;
+};
+
+/* uses libparted's disk_specific field in PedPartition, to store our info */
+typedef struct _GPTPartitionData
+{
+ efi_guid_t type;
+ efi_guid_t uuid;
+ efi_char16_t name[37];
+ char *translated_name;
+ GuidPartitionEntryAttributes_t attributes;
+} GPTPartitionData;
+
+static PedDiskType gpt_disk_type;
+
+static inline uint32_t
+pth_get_size (const PedDevice *dev)
+{
+ return GPT_HEADER_SECTORS * dev->sector_size;
+}
+
+static inline uint32_t
+pth_get_size_static (const PedDevice *dev)
+{
+ return sizeof (GuidPartitionTableHeader_t) - sizeof (uint8_t *);
+}
+
+static inline uint32_t
+pth_get_size_rsv2 (const PedDevice *dev)
+{
+ return pth_get_size (dev) - pth_get_size_static (dev);
+}
+
+static GuidPartitionTableHeader_t *
+pth_new (const PedDevice *dev)
+{
+ GuidPartitionTableHeader_t *pth =
+ ped_malloc (sizeof (GuidPartitionTableHeader_t) + sizeof (uint8_t));
+
+ pth->Reserved2 = ped_malloc (pth_get_size_rsv2 (dev));
+
+ return pth;
+}
+
+static GuidPartitionTableHeader_t *
+pth_new_zeroed (const PedDevice *dev)
+{
+ GuidPartitionTableHeader_t *pth = pth_new (dev);
+
+ memset (pth, 0, pth_get_size_static (dev));
+ memset (pth->Reserved2, 0, pth_get_size_rsv2 (dev));
+
+ return (pth);
+}
+
+static GuidPartitionTableHeader_t *
+pth_new_from_raw (const PedDevice *dev, const uint8_t *pth_raw)
+{
+ GuidPartitionTableHeader_t *pth = pth_new (dev);
+
+ PED_ASSERT (pth_raw != NULL);
+
+ memcpy (pth, pth_raw, pth_get_size_static (dev));
+ memcpy (pth->Reserved2, pth_raw + pth_get_size_static (dev),
+ pth_get_size_rsv2 (dev));
+
+ return pth;
+}
+
+static void
+pth_free (GuidPartitionTableHeader_t *pth)
+{
+ if (pth == NULL)
+ return;
+ PED_ASSERT (pth->Reserved2 != NULL);
+
+ free (pth->Reserved2);
+ free (pth);
+}
+
+static uint8_t *
+pth_get_raw (const PedDevice *dev, const GuidPartitionTableHeader_t *pth)
+{
+ PED_ASSERT (pth != NULL);
+ PED_ASSERT (pth->Reserved2 != NULL);
+
+ int size_static = pth_get_size_static (dev);
+ uint8_t *pth_raw = ped_malloc (pth_get_size (dev));
+ if (pth_raw == NULL)
+ return NULL;
+
+ memcpy (pth_raw, pth, size_static);
+ memcpy (pth_raw + size_static, pth->Reserved2, pth_get_size_rsv2 (dev));
+
+ return pth_raw;
+}
+
+/**
+ * swap_uuid_and_efi_guid() - converts between uuid formats
+ * @uuid - uuid_t in either format (converts it to the other)
+ *
+ * There are two different representations for Globally Unique Identifiers
+ * (GUIDs or UUIDs).
+ *
+ * The RFC specifies a UUID as a string of 16 bytes, essentially
+ * a big-endian array of char.
+ * Intel, in their EFI Specification, references the same RFC, but
+ * then defines a GUID as a structure of little-endian fields.
+ * Coincidentally, both structures have the same format when unparsed.
+ *
+ * When read from disk, EFI GUIDs are in struct of little endian format,
+ * and need to be converted to be treated as uuid_t in memory.
+ *
+ * When writing to disk, uuid_ts need to be converted into EFI GUIDs.
+ *
+ * Blame Intel.
+ */
+static void
+swap_uuid_and_efi_guid (efi_guid_t *guid)
+{
+ PED_ASSERT (guid != NULL);
+ guid->time_low = PED_SWAP32 (guid->time_low);
+ guid->time_mid = PED_SWAP16 (guid->time_mid);
+ guid->time_hi_and_version = PED_SWAP16 (guid->time_hi_and_version);
+}
+
+/* returns the EFI-style CRC32 value for buf
+ * This function uses the crc32 function by Gary S. Brown,
+ * but seeds the function with ~0, and xor's with ~0 at the end.
+ */
+static inline uint32_t
+efi_crc32 (const void *buf, unsigned long len)
+{
+ return (__efi_crc32 (buf, len, ~0L) ^ ~0L);
+}
+
+/* Compute the crc32 checksum of the partition table header
+ and store it in *CRC32. Return 0 upon success. Return 1
+ upon failure to allocate space. */
+static int
+pth_crc32 (const PedDevice *dev, const GuidPartitionTableHeader_t *pth,
+ uint32_t *crc32)
+{
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (pth != NULL);
+
+ uint8_t *pth_raw = pth_get_raw (dev, pth);
+ if (pth_raw == NULL)
+ return 1;
+
+ *crc32 = efi_crc32 (pth_raw, PED_LE32_TO_CPU (pth->HeaderSize));
+ free (pth_raw);
+
+ return 0;
+}
+
+static inline int
+guid_cmp (efi_guid_t left, efi_guid_t right)
+{
+ return memcmp (&left, &right, sizeof (efi_guid_t));
+}
+
+/* checks if 'mbr' is a protective MBR partition table */
+static inline int _GL_ATTRIBUTE_PURE
+_pmbr_is_valid (const LegacyMBR_t *mbr)
+{
+ int i;
+
+ PED_ASSERT (mbr != NULL);
+
+ if (mbr->Signature != PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE))
+ return 0;
+ for (i = 0; i < 4; i++)
+ {
+ if (mbr->PartitionRecord[i].OSType == EFI_PMBR_OSTYPE_EFI)
+ return 1;
+ }
+ return 0;
+}
+
+static int
+gpt_probe (const PedDevice *dev)
+{
+ int gpt_sig_found = 0;
+
+ PED_ASSERT (dev != NULL);
+
+ if (dev->length <= 1)
+ return 0;
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ if (!_pmbr_is_valid (label))
+ {
+ free (label);
+ return 0;
+ }
+ free (label);
+
+ void *pth_raw = ped_malloc (pth_get_size (dev));
+ if (ped_device_read (dev, pth_raw, 1, GPT_HEADER_SECTORS)
+ || ped_device_read (dev, pth_raw, dev->length - 1, GPT_HEADER_SECTORS))
+ {
+ GuidPartitionTableHeader_t *gpt = pth_new_from_raw (dev, pth_raw);
+ if (gpt->Signature == PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE))
+ gpt_sig_found = 1;
+ pth_free (gpt);
+ }
+ free (pth_raw);
+
+ return gpt_sig_found;
+}
+
+static PedDisk *
+gpt_alloc (const PedDevice *dev)
+{
+ PedDisk *disk;
+ GPTDiskData *gpt_disk_data;
+ PedSector data_start, data_end;
+
+ disk = _ped_disk_alloc ((PedDevice *) dev, &gpt_disk_type);
+ if (!disk)
+ goto error;
+
+ data_start = 2 + GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+ data_end = dev->length - 2
+ - GPT_DEFAULT_PARTITION_ENTRY_ARRAY_SIZE / dev->sector_size;
+
+ /* If the device is too small to accommodate GPT headers and one data
+ sector, reject it. */
+ if (data_end < data_start)
+ {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_OK,
+ _("device is too small for GPT"));
+ goto error_free_disk;
+ }
+
+ disk->disk_specific = gpt_disk_data = ped_malloc (sizeof (GPTDiskData));
+ if (!disk->disk_specific)
+ goto error_free_disk;
+
+ gpt_disk_data->AlternateLBA = dev->length - 1;
+ ped_geometry_init (&gpt_disk_data->data_area, dev, data_start,
+ data_end - data_start + 1);
+ gpt_disk_data->entry_count = GPT_DEFAULT_PARTITION_ENTRIES;
+ uuid_generate ((unsigned char *) &gpt_disk_data->uuid);
+ swap_uuid_and_efi_guid (&gpt_disk_data->uuid);
+ gpt_disk_data->pmbr_boot = 0;
+ return disk;
+
+error_free_disk:
+ free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk *
+gpt_duplicate (const PedDisk *disk)
+{
+ PedDisk *new_disk;
+ GPTDiskData *new_disk_data;
+ GPTDiskData *old_disk_data;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &gpt_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ old_disk_data = disk->disk_specific;
+ new_disk_data = new_disk->disk_specific;
+
+ ped_geometry_init (&new_disk_data->data_area, disk->dev,
+ old_disk_data->data_area.start,
+ old_disk_data->data_area.length);
+ new_disk_data->entry_count = old_disk_data->entry_count;
+ new_disk_data->uuid = old_disk_data->uuid;
+ new_disk_data->pmbr_boot = old_disk_data->pmbr_boot;
+ return new_disk;
+}
+
+static void
+gpt_free (PedDisk *disk)
+{
+ ped_disk_delete_all (disk);
+ free (disk->disk_specific);
+ _ped_disk_free (disk);
+}
+
+/* Given GUID Partition table header, GPT, read its partition array
+ entries from DISK into malloc'd storage. Set *PTES_BYTES to the
+ number of bytes required. Upon success, return a pointer to the
+ resulting buffer. Otherwise, set errno and return NULL. */
+static void *
+gpt_read_PE_array (PedDisk const *disk, GuidPartitionTableHeader_t const *gpt,
+ size_t *ptes_bytes)
+{
+ uint32_t p_ent_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry);
+ *ptes_bytes = p_ent_size * PED_LE32_TO_CPU(gpt->NumberOfPartitionEntries);
+ size_t ptes_sectors = ped_div_round_up (*ptes_bytes,
+ disk->dev->sector_size);
+
+ if (xalloc_oversized (ptes_sectors, disk->dev->sector_size))
+ {
+ errno = ENOMEM;
+ return NULL;
+ }
+ void *ptes = ped_malloc (ptes_sectors * disk->dev->sector_size);
+ if (ptes == NULL)
+ return NULL;
+
+ if (!ped_device_read (disk->dev, ptes,
+ PED_LE64_TO_CPU (gpt->PartitionEntryLBA), ptes_sectors))
+ {
+ int saved_errno = errno;
+ free (ptes);
+ errno = saved_errno;
+ return NULL;
+ }
+
+ return ptes;
+}
+
+static int
+check_PE_array_CRC (PedDisk const *disk,
+ GuidPartitionTableHeader_t const *gpt, bool *valid)
+{
+ size_t ptes_bytes;
+ void *ptes = gpt_read_PE_array (disk, gpt, &ptes_bytes);
+ if (ptes == NULL)
+ return 1;
+
+ uint32_t ptes_crc = efi_crc32 (ptes, ptes_bytes);
+ *valid = (ptes_crc == PED_LE32_TO_CPU (gpt->PartitionEntryArrayCRC32));
+ free (ptes);
+ return 0;
+}
+
+static int
+_header_is_valid (PedDisk const *disk, GuidPartitionTableHeader_t *gpt,
+ PedSector my_lba)
+{
+ uint32_t crc, origcrc;
+ PedDevice const *dev = disk->dev;
+
+ if (PED_LE64_TO_CPU (gpt->Signature) != GPT_HEADER_SIGNATURE)
+ return 0;
+ /*
+ * "While the GUID Partition Table Header's size may increase
+ * in the future it cannot span more than one block on the
+ * device." EFI Specification, version 1.10, 11.2.2.1
+ */
+ if (PED_LE32_TO_CPU (gpt->HeaderSize) < pth_get_size_static (dev)
+ || PED_LE32_TO_CPU (gpt->HeaderSize) > dev->sector_size)
+ return 0;
+
+ /* The SizeOfPartitionEntry must be a multiple of 8 and
+ no smaller than the size of the PartitionEntry structure.
+ We also require that it be no larger than 1/16th of UINT32_MAX,
+ as an additional sanity check. */
+ uint32_t pe_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry);
+ if (pe_size % 8 != 0
+ || ! (sizeof (GuidPartitionEntry_t) <= pe_size
+ && pe_size <= (UINT32_MAX >> 4)))
+ return 0;
+
+ if (PED_LE64_TO_CPU (gpt->MyLBA) != my_lba)
+ return 0;
+
+ PedSector alt_lba = PED_LE64_TO_CPU (gpt->AlternateLBA);
+ /* The backup table's AlternateLBA must be 1. */
+ if (my_lba != 1 && alt_lba != 1)
+ return 0;
+
+ /* The alt_lba must never be the same as my_lba. */
+ if (alt_lba == my_lba)
+ return 0;
+
+ bool crc_match;
+ if (check_PE_array_CRC (disk, gpt, &crc_match) != 0 || !crc_match)
+ return 0;
+
+ PedSector first_usable = PED_LE64_TO_CPU (gpt->FirstUsableLBA);
+ if (first_usable < 3)
+ return 0;
+
+ PedSector last_usable = PED_LE64_TO_CPU (gpt->LastUsableLBA);
+ if (last_usable < first_usable)
+ return 0;
+
+ origcrc = gpt->HeaderCRC32;
+ gpt->HeaderCRC32 = 0;
+ if (pth_crc32 (dev, gpt, &crc) != 0)
+ return 0;
+ gpt->HeaderCRC32 = origcrc;
+
+ return crc == PED_LE32_TO_CPU (origcrc);
+}
+
+/* Return the number of sectors that should be used by the
+ * partition entry table.
+ */
+static PedSector
+_ptes_sectors(PedDisk const *disk, GuidPartitionTableHeader_t const *gpt)
+{
+ size_t ptes_bytes = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry) *
+ PED_LE32_TO_CPU (gpt->NumberOfPartitionEntries);
+ /* Minimum amount of space reserved is 128 128 byte entries */
+ if (ptes_bytes < 128*128)
+ ptes_bytes = 128*128;
+ return ped_div_round_up (ptes_bytes, disk->dev->sector_size);
+}
+
+/* Return the header's idea of the last sector of the disk
+ * based on LastUsableLBA and the Partition Entry table.
+ */
+static PedSector
+_hdr_disk_end(PedDisk const *disk, GuidPartitionTableHeader_t const *gpt)
+{
+ return PED_LE64_TO_CPU (gpt->LastUsableLBA) + 1 + _ptes_sectors(disk, gpt);
+}
+
+static int
+_parse_header (PedDisk *disk, const GuidPartitionTableHeader_t *gpt,
+ int *update_needed)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ PedSector first_usable;
+ PedSector last_usable;
+ PedSector last_usable_if_grown;
+
+#ifndef DISCOVER_ONLY
+ if (PED_LE32_TO_CPU (gpt->Revision) > GPT_HEADER_REVISION_V1_02)
+ {
+ if (ped_exception_throw
+ (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The format of the GPT partition table is version "
+ "%x, which is newer than what Parted can "
+ "recognise. Please report this!"),
+ PED_LE32_TO_CPU (gpt->Revision)) != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+#endif
+
+ first_usable = PED_LE64_TO_CPU (gpt->FirstUsableLBA);
+ last_usable = PED_LE64_TO_CPU (gpt->LastUsableLBA);
+
+ /* Need to check whether the volume has grown, the LastUsableLBA is
+ normally set to disk->dev->length - 2 - ptes_size (at least for parted
+ created volumes), where ptes_size is the number of entries *
+ size of each entry / sector size or 16k / sector size, whatever the greater.
+ If the volume has grown, offer the user the chance to use the new
+ space or continue with the current usable area. Only ask once per
+ parted invocation. */
+
+ last_usable_if_grown = disk->dev->length - 2 - _ptes_sectors(disk, gpt);
+
+ if (last_usable <= first_usable
+ || disk->dev->length < last_usable)
+ return 0;
+
+ if (last_usable_if_grown <= first_usable
+ || disk->dev->length < last_usable_if_grown)
+ return 0;
+
+ if (last_usable < last_usable_if_grown)
+ {
+ PedExceptionOption q;
+
+ q = ped_exception_throw
+ (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE,
+ _("Not all of the space available to %s appears "
+ "to be used, you can fix the GPT to use all of the "
+ "space (an extra %llu blocks) or continue with the "
+ "current setting? "), disk->dev->path,
+ (uint64_t) (last_usable_if_grown - last_usable));
+
+ if (q == PED_EXCEPTION_FIX)
+ {
+ last_usable = last_usable_if_grown;
+ /* clear the old backup gpt header */
+ ptt_clear_sectors (disk->dev,
+ gpt_disk_data->AlternateLBA, 1);
+ gpt_disk_data->AlternateLBA = disk->dev->length - 1;
+ *update_needed = 1;
+ }
+ }
+
+ ped_geometry_init (&gpt_disk_data->data_area, disk->dev,
+ first_usable, last_usable - first_usable + 1);
+
+ gpt_disk_data->entry_count
+ = PED_LE32_TO_CPU (gpt->NumberOfPartitionEntries);
+ PED_ASSERT (gpt_disk_data->entry_count > 0);
+ PED_ASSERT (gpt_disk_data->entry_count <= 8192);
+
+ gpt_disk_data->uuid = gpt->DiskGUID;
+
+ return 1;
+}
+
+static PedPartition *
+_parse_part_entry (PedDisk *disk, GuidPartitionEntry_t *pte)
+{
+ PedPartition *part;
+ GPTPartitionData *gpt_part_data;
+ unsigned int i;
+
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
+ PED_LE64_TO_CPU (pte->StartingLBA),
+ PED_LE64_TO_CPU (pte->EndingLBA));
+ if (!part)
+ return NULL;
+
+ gpt_part_data = part->disk_specific;
+ gpt_part_data->type = pte->PartitionTypeGuid;
+ gpt_part_data->uuid = pte->UniquePartitionGuid;
+ for (i = 0; i < 36; i++)
+ gpt_part_data->name[i] = (efi_char16_t) pte->PartitionName[i];
+ gpt_part_data->name[i] = 0;
+ gpt_part_data->translated_name = 0;
+ gpt_part_data->attributes = pte->Attributes;
+
+ return part;
+}
+
+/* Read the primary GPT at sector 1 of DEV.
+ Verify its CRC and that of its partition entry array.
+ If they are valid, read the backup GPT specified by AlternateLBA.
+ If not, read the backup GPT in the last sector of the disk.
+ Return 1 if any read fails.
+ Upon successful verification of the primary GPT, set *PRIMARY_GPT, else NULL.
+ Upon successful verification of the backup GPT, set *BACKUP_GPT, else NULL.
+ If we've set *BACKUP_GPT to non-NULL, set *BACKUP_SECTOR_NUM_P to the sector
+ number in which it was found. */
+static int
+gpt_read_headers (PedDisk const *disk,
+ GuidPartitionTableHeader_t **primary_gpt,
+ GuidPartitionTableHeader_t **backup_gpt,
+ PedSector *backup_sector_num_p)
+{
+ *primary_gpt = NULL;
+ *backup_gpt = NULL;
+ PedDevice const *dev = disk->dev;
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ LegacyMBR_t *mbr;
+
+ if (!ptt_read_sector (dev, 0, (void *)&mbr))
+ return 1;
+
+ if (mbr->PartitionRecord[0].BootIndicator == 0x80)
+ gpt_disk_data->pmbr_boot = 1;
+ free (mbr);
+
+ void *s1;
+ if (!ptt_read_sector (dev, 1, &s1))
+ return 1;
+
+ GuidPartitionTableHeader_t *t = pth_new_from_raw (dev, s1);
+ free (s1);
+ if (t == NULL)
+ return 1;
+ GuidPartitionTableHeader_t *pri = t;
+
+ bool valid_primary = _header_is_valid (disk, pri, 1);
+ if (valid_primary)
+ *primary_gpt = pri;
+ else
+ pth_free (pri);
+
+ gpt_disk_data->AlternateLBA =
+ (valid_primary
+ ? PED_LE64_TO_CPU (pri->AlternateLBA)
+ : dev->length - 1);
+
+ void *s_bak;
+ if (!ptt_read_sector (dev, gpt_disk_data->AlternateLBA ,&s_bak))
+ return 1;
+ t = pth_new_from_raw (dev, s_bak);
+ free (s_bak);
+ if (t == NULL)
+ return 1;
+
+ GuidPartitionTableHeader_t *bak = t;
+ if (_header_is_valid (disk, bak, gpt_disk_data->AlternateLBA))
+ {
+ *backup_gpt = bak;
+ *backup_sector_num_p = gpt_disk_data->AlternateLBA;
+ }
+ else
+ pth_free (bak);
+
+ return 0;
+}
+
+/************************************************************
+ * Intel is changing the EFI Spec. (after v1.02) to say that a
+ * disk is considered to have a GPT label only if the GPT
+ * structures are correct, and the MBR is actually a Protective
+ * MBR (has one 0xEE type partition).
+ * Problem occurs when a GPT-partitioned disk is then
+ * edited with a legacy (non-GPT-aware) application, such as
+ * fdisk (which doesn't generally erase the PGPT or AGPT).
+ * How should such a disk get handled? As a GPT disk (throwing
+ * away the fdisk changes), or as an MSDOS disk (throwing away
+ * the GPT information). Previously, I've taken the GPT-is-right,
+ * MBR is wrong, approach, to stay consistent with the EFI Spec.
+ * Intel disagrees, saying the disk should then be treated
+ * as having a msdos label, not a GPT label. If this is true,
+ * then what's the point of having an AGPT, since if the PGPT
+ * is screwed up, likely the PMBR is too, and the PMBR becomes
+ * a single point of failure.
+ * So, in the Linux kernel, I'm going to test for PMBR, and
+ * warn if it's not there, and treat the disk as MSDOS, with a note
+ * for users to use Parted to "fix up" their disk if they
+ * really want it to be considered GPT.
+ ************************************************************/
+static int
+gpt_read (PedDisk *disk)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ int i;
+#ifndef DISCOVER_ONLY
+ int write_back = 0;
+#endif
+
+ ped_disk_delete_all (disk);
+
+ /* motivation: let the user decide about the pmbr... during
+ ped_disk_probe(), they probably didn't get a choice... */
+ if (!gpt_probe (disk->dev))
+ goto error;
+
+ GuidPartitionTableHeader_t *gpt = NULL;
+ GuidPartitionTableHeader_t *primary_gpt;
+ GuidPartitionTableHeader_t *backup_gpt;
+ PedSector backup_sector_num;
+ int read_failure = gpt_read_headers (disk, &primary_gpt, &backup_gpt,
+ &backup_sector_num);
+ if (read_failure)
+ {
+ /* This includes the case in which there used to be a GPT partition
+ table here, with an alternate LBA that extended beyond the current
+ end-of-device. It's treated as a non-match. */
+
+ /* Another possibility:
+ The primary header is ok, but backup is corrupt.
+ In the UEFI spec, this means the primary GUID table
+ is officially invalid. */
+ pth_free (backup_gpt);
+ pth_free (primary_gpt);
+ return 0;
+ }
+
+ if (primary_gpt && backup_gpt)
+ {
+ /* Both are valid. */
+#ifndef DISCOVER_ONLY
+ /* The backup header must be at the end of the disk, or at what the primary
+ * header thinks is the end of the disk.
+ */
+ gpt_disk_data->AlternateLBA = PED_LE64_TO_CPU (primary_gpt->AlternateLBA);
+ PedSector pri_disk_end = _hdr_disk_end(disk, primary_gpt);
+
+ if (gpt_disk_data->AlternateLBA != disk->dev->length -1 &&
+ gpt_disk_data->AlternateLBA != pri_disk_end)
+ {
+ if (ped_exception_throw
+ (PED_EXCEPTION_ERROR,
+ (PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE),
+ _("The backup GPT table is not at the end of the disk, as it "
+ "should be. Fix, by moving the backup to the end "
+ "(and removing the old backup)?")) == PED_EXCEPTION_FIX)
+ {
+ ptt_clear_sectors (disk->dev,
+ PED_LE64_TO_CPU (primary_gpt->AlternateLBA), 1);
+ gpt_disk_data->AlternateLBA = disk->dev->length -1;
+ write_back = 1;
+ }
+ }
+#endif /* !DISCOVER_ONLY */
+ pth_free (backup_gpt);
+ gpt = primary_gpt;
+ }
+ else if (!primary_gpt && !backup_gpt)
+ {
+ /* Both are corrupt. */
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Both the primary and backup GPT tables "
+ "are corrupt. Try making a fresh table, "
+ "and using Parted's rescue feature to "
+ "recover partitions."));
+ goto error;
+ }
+ else if (primary_gpt && !backup_gpt)
+ {
+ /* The primary header is ok, but backup is corrupt. */
+ if (ped_exception_throw
+ (PED_EXCEPTION_ERROR, PED_EXCEPTION_OK_CANCEL,
+ _("The backup GPT table is corrupt, but the "
+ "primary appears OK, so that will be used."))
+ == PED_EXCEPTION_CANCEL)
+ goto error_free_gpt;
+
+ gpt = primary_gpt;
+ }
+ else /* !primary_gpt && backup_gpt */
+ {
+ /* primary GPT corrupt, backup is ok. */
+ if (ped_exception_throw
+ (PED_EXCEPTION_ERROR, PED_EXCEPTION_OK_CANCEL,
+ _("The primary GPT table is corrupt, but the "
+ "backup appears OK, so that will be used."))
+ == PED_EXCEPTION_CANCEL)
+ goto error_free_gpt;
+
+ gpt = backup_gpt;
+ }
+ backup_gpt = NULL;
+ primary_gpt = NULL;
+
+ if (!_parse_header (disk, gpt, &write_back))
+ goto error_free_gpt;
+
+ size_t ptes_bytes;
+ void *ptes = gpt_read_PE_array (disk, gpt, &ptes_bytes);
+ if (ptes == NULL)
+ goto error_free_gpt;
+
+ uint32_t ptes_crc = efi_crc32 (ptes, ptes_bytes);
+ if (ptes_crc != PED_LE32_TO_CPU (gpt->PartitionEntryArrayCRC32))
+ {
+ ped_exception_throw
+ (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("primary partition table array CRC mismatch"));
+ goto error_free_ptes;
+ }
+
+ uint32_t p_ent_size = PED_LE32_TO_CPU (gpt->SizeOfPartitionEntry);
+ for (i = 0; i < gpt_disk_data->entry_count; i++)
+ {
+ GuidPartitionEntry_t *pte
+ = (GuidPartitionEntry_t *) ((char *) ptes + i * p_ent_size);
+ PedPartition *part;
+
+ if (!guid_cmp (pte->PartitionTypeGuid, UNUSED_ENTRY_GUID))
+ continue;
+
+ part = _parse_part_entry (disk, pte);
+ if (!part)
+ goto error_delete_all;
+
+ part->fs_type = ped_file_system_probe (&part->geom);
+ part->num = i + 1;
+
+ PedConstraint *constraint_exact = ped_constraint_exact (&part->geom);
+ if (!ped_disk_add_partition (disk, part, constraint_exact))
+ {
+ ped_constraint_destroy (constraint_exact);
+ ped_partition_destroy (part);
+ goto error_delete_all;
+ }
+ ped_constraint_destroy (constraint_exact);
+ }
+ free (ptes);
+
+#ifndef DISCOVER_ONLY
+ if (write_back)
+ ped_disk_commit_to_dev (disk);
+#endif
+
+ pth_free (gpt);
+ return 1;
+
+error_delete_all:
+ ped_disk_delete_all (disk);
+error_free_ptes:
+ free (ptes);
+error_free_gpt:
+ pth_free (primary_gpt);
+ pth_free (backup_gpt);
+ pth_free (gpt);
+error:
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+/* Write the protective MBR (to keep DOS happy) */
+static int
+_write_pmbr (PedDevice *dev, bool pmbr_boot)
+{
+ /* The UEFI spec is not clear about what to do with the following
+ elements of the Protective MBR (pmbr): BootCode (0-440B),
+ UniqueMBRSignature (440B-444B) and Unknown (444B-446B).
+ With this in mind, we try not to modify these elements. */
+ void *s0;
+ if (!ptt_read_sector (dev, 0, &s0))
+ return 0;
+ LegacyMBR_t *pmbr = s0;
+
+ /* Zero out the legacy partitions. */
+ memset (pmbr->PartitionRecord, 0, sizeof pmbr->PartitionRecord);
+
+ pmbr->Signature = PED_CPU_TO_LE16 (MSDOS_MBR_SIGNATURE);
+ pmbr->PartitionRecord[0].OSType = EFI_PMBR_OSTYPE_EFI;
+ pmbr->PartitionRecord[0].StartSector = 2;
+ pmbr->PartitionRecord[0].EndHead = 0xFF;
+ pmbr->PartitionRecord[0].EndSector = 0xFF;
+ pmbr->PartitionRecord[0].EndTrack = 0xFF;
+ pmbr->PartitionRecord[0].StartingLBA = PED_CPU_TO_LE32 (1);
+ if ((dev->length - 1ULL) > 0xFFFFFFFFULL)
+ pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (0xFFFFFFFF);
+ else
+ pmbr->PartitionRecord[0].SizeInLBA = PED_CPU_TO_LE32 (dev->length - 1UL);
+ if (pmbr_boot)
+ pmbr->PartitionRecord[0].BootIndicator = 0x80;
+
+ int write_ok = ped_device_write (dev, pmbr, GPT_PMBR_LBA,
+ GPT_PMBR_SECTORS);
+ free (s0);
+ return write_ok;
+}
+
+static int
+_generate_header (const PedDisk *disk, int alternate, uint32_t ptes_crc,
+ GuidPartitionTableHeader_t **gpt_p)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ GuidPartitionTableHeader_t *gpt;
+
+ *gpt_p = pth_new_zeroed (disk->dev);
+
+ gpt = *gpt_p;
+
+ gpt->Signature = PED_CPU_TO_LE64 (GPT_HEADER_SIGNATURE);
+ gpt->Revision = PED_CPU_TO_LE32 (GPT_HEADER_REVISION_V1_00);
+
+ /* per 1.00 spec */
+ gpt->HeaderSize = PED_CPU_TO_LE32 (pth_get_size_static (disk->dev));
+ gpt->HeaderCRC32 = 0;
+ gpt->Reserved1 = 0;
+
+ if (alternate)
+ {
+ size_t ss = disk->dev->sector_size;
+ PedSector ptes_bytes = (gpt_disk_data->entry_count
+ * sizeof (GuidPartitionEntry_t));
+ PedSector ptes_sectors = (ptes_bytes + ss - 1) / ss;
+
+ gpt->MyLBA = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA);
+ gpt->AlternateLBA = PED_CPU_TO_LE64 (1);
+ gpt->PartitionEntryLBA
+ = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA - ptes_sectors);
+ }
+ else
+ {
+ gpt->MyLBA = PED_CPU_TO_LE64 (1);
+ gpt->AlternateLBA = PED_CPU_TO_LE64 (gpt_disk_data->AlternateLBA);
+ gpt->PartitionEntryLBA = PED_CPU_TO_LE64 (2);
+ }
+
+ gpt->FirstUsableLBA = PED_CPU_TO_LE64 (gpt_disk_data->data_area.start);
+ gpt->LastUsableLBA = PED_CPU_TO_LE64 (gpt_disk_data->data_area.end);
+ gpt->DiskGUID = gpt_disk_data->uuid;
+ gpt->NumberOfPartitionEntries
+ = PED_CPU_TO_LE32 (gpt_disk_data->entry_count);
+ gpt->SizeOfPartitionEntry = PED_CPU_TO_LE32 (sizeof (GuidPartitionEntry_t));
+ gpt->PartitionEntryArrayCRC32 = PED_CPU_TO_LE32 (ptes_crc);
+
+ uint32_t crc;
+ if (pth_crc32 (disk->dev, gpt, &crc) != 0)
+ return 1;
+
+ gpt->HeaderCRC32 = PED_CPU_TO_LE32 (crc);
+ return 0;
+}
+
+static void
+_partition_generate_part_entry (PedPartition *part, GuidPartitionEntry_t *pte)
+{
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+ unsigned int i;
+
+ PED_ASSERT (gpt_part_data != NULL);
+
+ pte->PartitionTypeGuid = gpt_part_data->type;
+ pte->UniquePartitionGuid = gpt_part_data->uuid;
+ pte->StartingLBA = PED_CPU_TO_LE64 (part->geom.start);
+ pte->EndingLBA = PED_CPU_TO_LE64 (part->geom.end);
+ pte->Attributes = gpt_part_data->attributes;
+
+ for (i = 0; i < 36; i++)
+ pte->PartitionName[i] = gpt_part_data->name[i];
+}
+
+static int
+gpt_write (const PedDisk *disk)
+{
+ GPTDiskData *gpt_disk_data;
+ uint32_t ptes_crc;
+ uint8_t *pth_raw;
+ GuidPartitionTableHeader_t *gpt;
+ PedPartition *part;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+
+ gpt_disk_data = disk->disk_specific;
+
+ size_t ptes_bytes = (gpt_disk_data->entry_count
+ * sizeof (GuidPartitionEntry_t));
+ size_t ss = disk->dev->sector_size;
+ PedSector ptes_sectors = (ptes_bytes + ss - 1) / ss;
+ /* Note that we allocate a little more than ptes_bytes,
+ when that number is not a multiple of sector size. */
+ GuidPartitionEntry_t *ptes = calloc (ptes_sectors, ss);
+ if (!ptes)
+ goto error;
+ for (part = ped_disk_next_partition (disk, NULL); part;
+ part = ped_disk_next_partition (disk, part))
+ {
+ if (part->type != 0)
+ continue;
+ _partition_generate_part_entry (part, &ptes[part->num - 1]);
+ }
+
+ ptes_crc = efi_crc32 (ptes, ptes_bytes);
+
+ /* Write protective MBR */
+ if (!_write_pmbr (disk->dev, gpt_disk_data->pmbr_boot))
+ goto error_free_ptes;
+
+ /* Write PTH and PTEs */
+ /* FIXME: Caution: this code is nearly identical to what's just below. */
+ if (_generate_header (disk, 0, ptes_crc, &gpt) != 0) {
+ pth_free(gpt);
+ goto error_free_ptes;
+ }
+ pth_raw = pth_get_raw (disk->dev, gpt);
+ pth_free (gpt);
+ if (pth_raw == NULL)
+ goto error_free_ptes;
+ int write_ok = ped_device_write (disk->dev, pth_raw, 1, 1);
+ free (pth_raw);
+ if (!write_ok)
+ goto error_free_ptes;
+ if (!ped_device_write (disk->dev, ptes, 2, ptes_sectors))
+ goto error_free_ptes;
+
+ /* Write Alternate PTH & PTEs */
+ /* FIXME: Caution: this code is nearly identical to what's just above. */
+ if (_generate_header (disk, 1, ptes_crc, &gpt) != 0) {
+ pth_free(gpt);
+ goto error_free_ptes;
+ }
+ pth_raw = pth_get_raw (disk->dev, gpt);
+ pth_free (gpt);
+ if (pth_raw == NULL)
+ goto error_free_ptes;
+ write_ok = ped_device_write (disk->dev, pth_raw, gpt_disk_data->AlternateLBA, 1);
+ free (pth_raw);
+ if (!write_ok)
+ goto error_free_ptes;
+ if (!ped_device_write (disk->dev, ptes,
+ gpt_disk_data->AlternateLBA - ptes_sectors, ptes_sectors))
+ goto error_free_ptes;
+
+ free (ptes);
+ return ped_device_sync (disk->dev);
+
+error_free_ptes:
+ free (ptes);
+error:
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static int
+add_metadata_part (PedDisk *disk, PedSector start, PedSector length)
+{
+ PedPartition *part;
+ PedConstraint *constraint_exact;
+ PED_ASSERT (disk != NULL);
+
+ part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL,
+ start, start + length - 1);
+ if (!part)
+ goto error;
+
+ constraint_exact = ped_constraint_exact (&part->geom);
+ if (!ped_disk_add_partition (disk, part, constraint_exact))
+ goto error_destroy_constraint;
+ ped_constraint_destroy (constraint_exact);
+ return 1;
+
+error_destroy_constraint:
+ ped_constraint_destroy (constraint_exact);
+ ped_partition_destroy (part);
+error:
+ return 0;
+}
+
+static PedPartition *
+gpt_partition_new (const PedDisk *disk,
+ PedPartitionType part_type,
+ const PedFileSystemType *fs_type, PedSector start,
+ PedSector end)
+{
+ PedPartition *part;
+ GPTPartitionData *gpt_part_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (part_type != 0)
+ return part;
+
+ gpt_part_data = part->disk_specific =
+ ped_malloc (sizeof (GPTPartitionData));
+ if (!gpt_part_data)
+ goto error_free_part;
+
+ gpt_part_data->type = PARTITION_LINUX_DATA_GUID;
+ gpt_part_data->translated_name = 0;
+ uuid_generate ((unsigned char *) &gpt_part_data->uuid);
+ swap_uuid_and_efi_guid (&gpt_part_data->uuid);
+ memset (gpt_part_data->name, 0, sizeof gpt_part_data->name);
+ memset (&gpt_part_data->attributes, 0, sizeof gpt_part_data->attributes);
+ return part;
+
+error_free_part:
+ _ped_partition_free (part);
+error:
+ return NULL;
+}
+
+static PedPartition *
+gpt_partition_duplicate (const PedPartition *part)
+{
+ PedPartition *result;
+ GPTPartitionData *part_data = part->disk_specific;
+ GPTPartitionData *result_data;
+
+ result = _ped_partition_alloc (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (!result)
+ goto error;
+ result->num = part->num;
+
+ if (result->type != 0)
+ return result;
+
+ result_data = result->disk_specific =
+ ped_malloc (sizeof (GPTPartitionData));
+ if (!result_data)
+ goto error_free_part;
+
+ *result_data = *part_data;
+ if (part_data->translated_name) {
+ result_data->translated_name = xstrdup (part_data->translated_name);
+ } else {
+ result_data->translated_name = 0;
+ }
+ return result;
+
+error_free_part:
+ _ped_partition_free (result);
+error:
+ return NULL;
+}
+
+static void
+gpt_partition_destroy (PedPartition *part)
+{
+ if (part->type == 0)
+ {
+ PED_ASSERT (part->disk_specific != NULL);
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+ free (gpt_part_data->translated_name);
+ free (part->disk_specific);
+ }
+
+ _ped_partition_free (part);
+}
+
+/* is_skip_guid checks the guid against the list of guids that should not be
+ * overridden by set_system. It returns a 1 if it is in the list.
+*/
+static bool
+is_skip_guid(efi_guid_t guid) {
+ int n = sizeof(skip_set_system_guids) / sizeof(skip_set_system_guids[0]);
+ for (int i = 0; i < n; ++i) {
+ if (guid_cmp(guid, skip_set_system_guids[i]) == 0) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static int
+gpt_partition_set_system (PedPartition *part,
+ const PedFileSystemType *fs_type)
+{
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ PED_ASSERT (gpt_part_data != NULL);
+
+ part->fs_type = fs_type;
+
+ // Is this a GUID that should skip fs_type checking?
+ if (is_skip_guid(gpt_part_data->type)) {
+ return 1;
+ }
+
+ if (fs_type)
+ {
+ if (strncmp (fs_type->name, "fat", 3) == 0
+ || strcmp (fs_type->name, "udf") == 0
+ || strcmp (fs_type->name, "ntfs") == 0)
+ {
+ gpt_part_data->type = PARTITION_BASIC_DATA_GUID;
+ return 1;
+ }
+ if (strncmp (fs_type->name, "hfs", 3) == 0)
+ {
+ gpt_part_data->type = PARTITION_APPLE_HFS_GUID;
+ return 1;
+ }
+ if (strstr (fs_type->name, "swap"))
+ {
+ gpt_part_data->type = PARTITION_SWAP_GUID;
+ return 1;
+ }
+ }
+
+ gpt_part_data->type = PARTITION_LINUX_DATA_GUID;
+ return 1;
+}
+
+/* Allocate metadata partitions for the GPTH and PTES */
+static int
+gpt_alloc_metadata (PedDisk *disk)
+{
+ PedSector gptlength, pteslength = 0;
+ GPTDiskData *gpt_disk_data;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ gpt_disk_data = disk->disk_specific;
+
+ gptlength = ped_div_round_up (sizeof (GuidPartitionTableHeader_t),
+ disk->dev->sector_size);
+ pteslength = ped_div_round_up (gpt_disk_data->entry_count
+ * sizeof (GuidPartitionEntry_t),
+ disk->dev->sector_size);
+
+ /* metadata at the start of the disk includes the MBR */
+ if (!add_metadata_part (disk, GPT_PMBR_LBA,
+ GPT_PMBR_SECTORS + gptlength + pteslength))
+ return 0;
+
+ /* metadata at the end of the disk */
+ if (!add_metadata_part (disk, disk->dev->length - gptlength - pteslength,
+ gptlength + pteslength))
+ return 0;
+
+ return 1;
+}
+
+/* Does nothing, as the read/new/destroy functions maintain part->num */
+static int
+gpt_partition_enumerate (PedPartition *part)
+{
+ GPTDiskData *gpt_disk_data = part->disk->disk_specific;
+ int i;
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+
+ for (i = 1; i <= gpt_disk_data->entry_count; i++)
+ {
+ if (!ped_disk_get_partition (part->disk, i))
+ {
+ part->num = i;
+ return 1;
+ }
+ }
+
+ PED_ASSERT (0);
+
+ return 0; /* used if debug is disabled */
+}
+
+static int
+gpt_disk_set_flag (PedDisk *disk, PedDiskFlag flag, int state)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ switch (flag)
+ {
+ case PED_DISK_GPT_PMBR_BOOT:
+ gpt_disk_data->pmbr_boot = state;
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int
+gpt_disk_is_flag_available(const PedDisk *disk, PedDiskFlag flag)
+{
+ switch (flag)
+ {
+ case PED_DISK_GPT_PMBR_BOOT:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static uint8_t*
+gpt_disk_get_uuid (const PedDisk *disk)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+
+ efi_guid_t uuid = gpt_disk_data->uuid;
+
+ /* uuid is always LE, while uint8_t is always kind of BE */
+
+ uuid.time_low = PED_SWAP32(uuid.time_low);
+ uuid.time_mid = PED_SWAP16(uuid.time_mid);
+ uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version);
+
+ uint8_t *buf = ped_malloc(sizeof (uuid_t));
+ memcpy(buf, &uuid, sizeof (uuid_t));
+ return buf;
+}
+
+static int
+gpt_disk_get_flag (const PedDisk *disk, PedDiskFlag flag)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+ switch (flag)
+ {
+ case PED_DISK_GPT_PMBR_BOOT:
+ return gpt_disk_data->pmbr_boot;
+ break;
+ default:
+ return 0;
+ }
+}
+
+static int
+gpt_partition_set_flag (PedPartition *part, PedPartitionFlag flag, int state)
+{
+ GPTPartitionData *gpt_part_data;
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ gpt_part_data = part->disk_specific;
+
+ const struct flag_uuid_mapping_t* p = gpt_find_flag_uuid_mapping (flag);
+ if (p)
+ {
+ if (state) {
+ gpt_part_data->type = p->type_uuid;
+ } else if (guid_cmp (gpt_part_data->type, p->type_uuid) == 0) {
+ // Clear the GUID so that fs_type will be used to return it to the default
+ gpt_part_data->type = PARTITION_LINUX_DATA_GUID;
+ return gpt_partition_set_system (part, part->fs_type);
+ }
+ return 1;
+ }
+
+ switch (flag)
+ {
+ case PED_PARTITION_HIDDEN:
+ gpt_part_data->attributes.RequiredToFunction = state;
+ return 1;
+ case PED_PARTITION_LEGACY_BOOT:
+ gpt_part_data->attributes.LegacyBIOSBootable = state;
+ return 1;
+ case PED_PARTITION_NO_AUTOMOUNT:
+ gpt_part_data->attributes.NoAutomount = state;
+ return 1;
+ case PED_PARTITION_ROOT:
+ case PED_PARTITION_LBA:
+ default:
+ return 0;
+ }
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+gpt_partition_get_flag (const PedPartition *part, PedPartitionFlag flag)
+{
+ GPTPartitionData *gpt_part_data;
+ PED_ASSERT (part->disk_specific != NULL);
+ gpt_part_data = part->disk_specific;
+
+ const struct flag_uuid_mapping_t* p = gpt_find_flag_uuid_mapping (flag);
+ if (p)
+ return guid_cmp (gpt_part_data->type, p->type_uuid) == 0;
+
+ switch (flag)
+ {
+ case PED_PARTITION_HIDDEN:
+ return gpt_part_data->attributes.RequiredToFunction;
+ case PED_PARTITION_LEGACY_BOOT:
+ return gpt_part_data->attributes.LegacyBIOSBootable;
+ case PED_PARTITION_NO_AUTOMOUNT:
+ return gpt_part_data->attributes.NoAutomount;
+ case PED_PARTITION_LBA:
+ case PED_PARTITION_ROOT:
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+static int
+gpt_partition_is_flag_available (const PedPartition *part,
+ PedPartitionFlag flag)
+{
+ if (gpt_find_flag_uuid_mapping (flag))
+ return 1;
+
+ switch (flag)
+ {
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_LEGACY_BOOT:
+ case PED_PARTITION_NO_AUTOMOUNT:
+ return 1;
+ case PED_PARTITION_ROOT:
+ case PED_PARTITION_LBA:
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+static void
+gpt_partition_set_name (PedPartition *part, const char *name)
+{
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ free(gpt_part_data->translated_name);
+ gpt_part_data->translated_name = xstrdup(name);
+ iconv_t conv = iconv_open ("UCS-2LE", nl_langinfo (CODESET));
+ if (conv == (iconv_t)-1)
+ goto err;
+ char *inbuff = gpt_part_data->translated_name;
+ char *outbuff = (char *)&gpt_part_data->name;
+ size_t inbuffsize = strlen (inbuff) + 1;
+ size_t outbuffsize = 72;
+ if (iconv (conv, &inbuff, &inbuffsize, &outbuff, &outbuffsize) == -1)
+ goto err;
+ iconv_close (conv);
+ return;
+ err:
+ ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("failed to translate partition name"));
+ iconv_close (conv);
+}
+
+static const char *
+gpt_partition_get_name (const PedPartition *part)
+{
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+ if (gpt_part_data->translated_name == NULL)
+ {
+ char buffer[200];
+ iconv_t conv = iconv_open (nl_langinfo (CODESET), "UCS-2LE");
+ if (conv == (iconv_t)-1)
+ goto err;
+ char *inbuff = (char *)&gpt_part_data->name;
+ char *outbuff = buffer;
+ size_t inbuffsize = 72;
+ size_t outbuffsize = sizeof(buffer);
+ if (iconv (conv, &inbuff, &inbuffsize, &outbuff, &outbuffsize) == -1)
+ goto err;
+ iconv_close (conv);
+ *outbuff = 0;
+ gpt_part_data->translated_name = xstrdup (buffer);
+ return gpt_part_data->translated_name;
+ err:
+ ped_exception_throw (PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("failed to translate partition name"));
+ iconv_close (conv);
+ return "";
+ }
+ return gpt_part_data->translated_name;
+}
+
+
+static int
+gpt_partition_set_type_uuid (PedPartition *part, const uint8_t *uuid)
+{
+ GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ efi_guid_t* type_uuid = &gpt_part_data->type;
+ memcpy(type_uuid, uuid, sizeof (efi_guid_t));
+
+ /* type_uuid is always LE, while uint8_t is always kind of BE */
+
+ type_uuid->time_low = PED_SWAP32(type_uuid->time_low);
+ type_uuid->time_mid = PED_SWAP16(type_uuid->time_mid);
+ type_uuid->time_hi_and_version = PED_SWAP16(type_uuid->time_hi_and_version);
+
+ return 1;
+}
+
+
+static uint8_t*
+gpt_partition_get_type_uuid (const PedPartition *part)
+{
+ const GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ efi_guid_t type_uuid = gpt_part_data->type;
+
+ /* type_uuid is always LE, while uint8_t is always kind of BE */
+
+ type_uuid.time_low = PED_SWAP32(type_uuid.time_low);
+ type_uuid.time_mid = PED_SWAP16(type_uuid.time_mid);
+ type_uuid.time_hi_and_version = PED_SWAP16(type_uuid.time_hi_and_version);
+
+ uint8_t *buf = ped_malloc(sizeof (uuid_t));
+ memcpy(buf, &type_uuid, sizeof (uuid_t));
+ return buf;
+}
+
+static uint8_t*
+gpt_partition_get_uuid (const PedPartition *part)
+{
+ const GPTPartitionData *gpt_part_data = part->disk_specific;
+
+ efi_guid_t uuid = gpt_part_data->uuid;
+
+ /* uuid is always LE, while uint8_t is always kind of BE */
+
+ uuid.time_low = PED_SWAP32(uuid.time_low);
+ uuid.time_mid = PED_SWAP16(uuid.time_mid);
+ uuid.time_hi_and_version = PED_SWAP16(uuid.time_hi_and_version);
+
+ uint8_t *buf = ped_malloc(sizeof (uuid_t));
+ memcpy(buf, &uuid, sizeof (uuid_t));
+ return buf;
+}
+
+static int
+gpt_get_max_primary_partition_count (const PedDisk *disk)
+{
+ const GPTDiskData *gpt_disk_data = disk->disk_specific;
+ return gpt_disk_data->entry_count;
+}
+
+/*
+ * From (http://developer.apple.com/technotes/tn2006/tn2166.html Chapter 5).
+ * According to the specs the first LBA (LBA0) is not relevant (it exists
+ * to maintain compatibility). on the second LBA(LBA1) gpt places the
+ * header. The header is as big as the block size. After the header we
+ * find the Entry array. Each element of said array, describes each
+ * partition. One can have as much elements as can fit between the end of
+ * the second LBA (where the header ends) and the FirstUsableLBA.
+ * FirstUsableLBA is the first logical block that is used for contents
+ * and is defined in header.
+ *
+ * /---------------------------------------------------\
+ * | BLOCK0 | HEADER | Entry Array | First Usable LBA |
+ * | | BLOCK1 | | |
+ * \---------------------------------------------------/
+ * / \
+ * /----------/ \----------\
+ * /-----------------------------------------\
+ * | E1 | E2 | E3 |...............| EN |
+ * \-----------------------------------------/
+ *
+ * The number of possible partitions or supported partitions is:
+ * SP = FirstUsableLBA*Blocksize - 2*Blocksize / SizeOfPartitionEntry
+ * SP = Blocksize(FirstusableLBA - 2) / SizeOfPartitoinEntry
+ */
+static bool
+gpt_get_max_supported_partition_count (const PedDisk *disk, int *max_n)
+{
+ GuidPartitionTableHeader_t *pth = NULL;
+ uint8_t *pth_raw = ped_malloc (pth_get_size (disk->dev));
+
+ if (ped_device_read (disk->dev, pth_raw, 1, GPT_HEADER_SECTORS)
+ || ped_device_read (disk->dev, pth_raw,
+ disk->dev->length, GPT_HEADER_SECTORS))
+ pth = pth_new_from_raw (disk->dev, pth_raw);
+ free (pth_raw);
+
+ if (pth == NULL)
+ return false;
+
+ if (!_header_is_valid (disk, pth, 1))
+ {
+ pth->FirstUsableLBA = PED_CPU_TO_LE64 (34);
+ pth->SizeOfPartitionEntry
+ = PED_CPU_TO_LE32 (sizeof (GuidPartitionEntry_t));
+ }
+
+ *max_n = (disk->dev->sector_size * (PED_LE64_TO_CPU (pth->FirstUsableLBA) - 2)
+ / PED_LE32_TO_CPU (pth->SizeOfPartitionEntry));
+ pth_free (pth);
+ return true;
+}
+
+static PedConstraint *
+_non_metadata_constraint (const PedDisk *disk)
+{
+ GPTDiskData *gpt_disk_data = disk->disk_specific;
+
+ return ped_constraint_new_from_max (&gpt_disk_data->data_area);
+}
+
+static int
+gpt_partition_align (PedPartition *part, const PedConstraint *constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ if (_ped_partition_attempt_align (part, constraint,
+ _non_metadata_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (gpt)
+
+static PedDiskOps gpt_disk_ops =
+{
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (gpt_write),
+
+ partition_set_name: gpt_partition_set_name,
+ partition_get_name: gpt_partition_get_name,
+ partition_set_type_id: NULL,
+ partition_get_type_id: NULL,
+ partition_set_type_uuid: gpt_partition_set_type_uuid,
+ partition_get_type_uuid: gpt_partition_get_type_uuid,
+ partition_get_uuid: gpt_partition_get_uuid,
+ disk_set_flag: gpt_disk_set_flag,
+ disk_get_flag: gpt_disk_get_flag,
+ disk_is_flag_available: gpt_disk_is_flag_available,
+ disk_get_uuid: gpt_disk_get_uuid,
+
+ PT_op_function_initializers (gpt)
+};
+
+static PedDiskType gpt_disk_type =
+{
+ next: NULL,
+ name: "gpt",
+ ops: &gpt_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_PARTITION_TYPE_UUID |
+ PED_DISK_TYPE_DISK_UUID | PED_DISK_TYPE_PARTITION_UUID
+};
+
+void
+ped_disk_gpt_init ()
+{
+ ped_disk_type_register (&gpt_disk_type);
+}
+
+void
+ped_disk_gpt_done ()
+{
+ ped_disk_type_unregister (&gpt_disk_type);
+}
+
+verify (sizeof (GuidPartitionEntryAttributes_t) == 8);
+verify (sizeof (GuidPartitionEntry_t) == 128);
diff --git a/libparted/labels/loop.c b/libparted/labels/loop.c
new file mode 100644
index 0000000..45d169d
--- /dev/null
+++ b/libparted/labels/loop.c
@@ -0,0 +1,316 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2000, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#define LOOP_SIGNATURE "GNU Parted Loopback 0"
+
+static PedDiskType loop_disk_type;
+
+static PedDisk* loop_alloc (const PedDevice* dev);
+static void loop_free (PedDisk* disk);
+
+static int
+loop_probe (const PedDevice* dev)
+{
+ PedDisk *disk = loop_alloc (dev);
+ if (!disk)
+ goto error;
+
+ void *buf;
+ if (!ptt_read_sector (dev, 0, &buf))
+ goto error_destroy_disk;
+ int found_sig = !strncmp (buf, LOOP_SIGNATURE, strlen (LOOP_SIGNATURE));
+ free (buf);
+
+ int result;
+ if (found_sig) {
+ result = 1;
+ } else {
+ PedGeometry* geom;
+
+ geom = ped_geometry_new (dev, 0, disk->dev->length);
+ if (!geom)
+ goto error_destroy_disk;
+ result = ped_file_system_probe (geom) != NULL;
+ ped_geometry_destroy (geom);
+ }
+ loop_free (disk);
+ return result;
+
+error_destroy_disk:
+ loop_free (disk);
+error:
+ return 0;
+}
+
+static PedDisk*
+loop_alloc (const PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ if (dev->length < 256)
+ return NULL;
+ PedDisk *disk = _ped_disk_alloc ((PedDevice*)dev, &loop_disk_type);
+ PED_ASSERT (disk != NULL);
+ PedGeometry *geom = ped_geometry_new (dev, 0, dev->length);
+ PED_ASSERT (geom != NULL);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ NULL, geom->start, geom->end);
+ PED_ASSERT (part != NULL);
+ ped_geometry_destroy (geom);
+ PedConstraint *constraint_any = ped_constraint_any (dev);
+ if (!ped_disk_add_partition (disk, part, constraint_any))
+ goto error;
+ ped_constraint_destroy (constraint_any);
+ return disk;
+ error:
+ ped_constraint_destroy (constraint_any);
+ ped_disk_destroy (disk);
+ return NULL;
+}
+
+static PedDisk*
+loop_duplicate (const PedDisk* disk)
+{
+ return ped_disk_new_fresh (disk->dev, &loop_disk_type);
+}
+
+static void
+loop_free (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ _ped_disk_free (disk);
+}
+
+static int
+loop_read (PedDisk* disk)
+{
+ PedDevice* dev = NULL;
+ PedGeometry* geom;
+ PedFileSystemType* fs_type;
+ PedPartition* part;
+ PedConstraint* constraint_any;
+
+ PED_ASSERT (disk != NULL);
+ dev = disk->dev;
+ constraint_any = ped_constraint_any (dev);
+
+ ped_disk_delete_all (disk);
+
+ void *buf;
+ if (!ptt_read_sector (dev, 0, &buf))
+ goto error;
+
+ int found_sig = !strncmp (buf, LOOP_SIGNATURE, strlen (LOOP_SIGNATURE));
+ free (buf);
+ geom = ped_geometry_new (dev, 0, dev->length);
+ if (!geom)
+ goto error;
+
+ fs_type = ped_file_system_probe (geom);
+ if (!fs_type && !found_sig)
+ goto error_free_geom;
+
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ fs_type, geom->start, geom->end);
+ ped_geometry_destroy (geom);
+ if (!part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, part, constraint_any))
+ goto error;
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error_free_geom:
+ ped_geometry_destroy (geom);
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+static int
+loop_write (const PedDisk* disk)
+{
+ size_t buflen = disk->dev->sector_size;
+ char *buf = alloca (buflen);
+ PedPartition *part = ped_disk_get_partition (disk, 1);
+ /* if there is already a filesystem on the disk, we don't need to write the signature */
+ if (part && part->fs_type)
+ return 1;
+ if (!ped_device_read (disk->dev, buf, 0, 1))
+ return 0;
+ strcpy (buf, LOOP_SIGNATURE);
+
+ return ped_device_write (disk->dev, buf, 0, 1);
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+loop_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ return NULL;
+ part->disk_specific = NULL;
+ return part;
+}
+
+static PedPartition*
+loop_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* result;
+
+ result = ped_partition_new (part->disk, part->type, part->fs_type,
+ part->geom.start, part->geom.end);
+ if (result == NULL)
+ return NULL;
+ result->num = part->num;
+ return result;
+}
+
+static void
+loop_partition_destroy (PedPartition* part)
+{
+ free (part);
+}
+
+static int
+loop_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ part->fs_type = fs_type;
+ return 1;
+}
+
+static int
+loop_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ return 0;
+}
+
+static int
+loop_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ return 0;
+}
+
+static int
+loop_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PedGeometry* new_geom;
+
+ new_geom = ped_constraint_solve_nearest (constraint, &part->geom);
+ if (!new_geom) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the "
+ "partition."));
+ return 0;
+ }
+ ped_geometry_set (&part->geom, new_geom->start, new_geom->length);
+ ped_geometry_destroy (new_geom);
+ return 1;
+}
+
+static int
+loop_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ return 0;
+}
+
+static int
+loop_partition_enumerate (PedPartition* part)
+{
+ part->num = 1;
+ return 1;
+}
+
+static int
+loop_alloc_metadata (PedDisk* disk)
+{
+ return 1;
+}
+
+static int
+loop_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return 1;
+}
+
+static bool
+loop_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = 1;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (loop)
+
+static PedDiskOps loop_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (loop_write),
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+
+ PT_op_function_initializers (loop)
+};
+
+static PedDiskType loop_disk_type = {
+ next: NULL,
+ name: "loop",
+ ops: &loop_disk_ops,
+ features: 0
+};
+
+void
+ped_disk_loop_init ()
+{
+ ped_disk_type_register (&loop_disk_type);
+}
+
+void
+ped_disk_loop_done ()
+{
+ ped_disk_type_unregister (&loop_disk_type);
+}
diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
new file mode 100644
index 0000000..6711d87
--- /dev/null
+++ b/libparted/labels/mac.c
@@ -0,0 +1,1604 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000, 2002, 2004, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+#include "pt-tools.h"
+
+/* struct's hacked from Linux source: fs/partitions/mac.h
+ * I believe it was originally written by Paul Mackerras (from comments in
+ * Quik source)
+ *
+ * See also:
+ * http://developer.apple.com/documentation/mac/Devices/Devices-126.html
+ * http://developer.apple.com/documentation/mac/Devices/Devices-121.html
+ * http://devworld.apple.com/technotes/tn/tn1189.html
+ *
+ * Partition types:
+ * Apple_Bootstrap new-world (HFS) boot partition
+ * Apple_partition_map partition map (table)
+ * Apple_Driver device driver
+ * Apple_Driver43 SCSI Manager 4.3 device driver
+ * Apple_MFS original Macintosh File System
+ * Apple_HFS Hierarchical File System (and +)
+ * Apple_HFSX HFS+ with case sensitivity and more
+ * Apple_UNIX_SVR2 UNIX file system (UFS?)
+ * Apple_PRODOS ProDOS file system
+ * Apple_Free unused space
+ * Apple_Scratch empty
+ * Apple_Void padding for iso9660
+ * Apple_Extra an unused partition map entry
+ *
+ * Quick explanation:
+ * ------------------
+ * Terminology:
+ *
+ * Parted Apple
+ * ------ -----
+ * device disk/device
+ * disk no equivalent.
+ * partition volume or partition
+ * sector block
+ *
+ * * All space must be accounted for, except block 0 (driver block) and
+ * block 1-X (the partition map: i.e. lots of MacRawPartitions)
+ *
+ * * It's really hard to grow/shrink the number of MacRawPartition
+ * entries in the partition map, because the first partition starts
+ * immediately after the partition map. When we can move the start of
+ * HFS and ext2 partitions, this problem will disappear ;-)
+ */
+
+#define MAC_PARTITION_MAGIC_1 0x5453 /* old */
+#define MAC_PARTITION_MAGIC_2 0x504d
+#define MAC_DISK_MAGIC 0x4552
+
+#define MAC_STATUS_BOOTABLE 8 /* partition is bootable */
+
+typedef struct _MacRawPartition MacRawPartition;
+typedef struct _MacRawDisk MacRawDisk;
+typedef struct _MacDeviceDriver MacDeviceDriver;
+typedef struct _MacPartitionData MacPartitionData;
+typedef struct _MacDiskData MacDiskData;
+
+struct __attribute__ ((packed)) _MacRawPartition {
+ uint16_t signature; /* expected to be MAC_PARTITION_MAGIC */
+ uint16_t res1;
+ uint32_t map_count; /* # blocks in partition map */
+ uint32_t start_block; /* absolute starting block # of partition */
+ uint32_t block_count; /* number of blocks in partition */
+ char name[32]; /* partition name */
+ char type[32]; /* string type description */
+ uint32_t data_start; /* rel block # of first data block */
+ uint32_t data_count; /* number of data blocks */
+ uint32_t status; /* partition status bits */
+ uint32_t boot_start;
+ uint32_t boot_count;
+ uint32_t boot_load;
+ uint32_t boot_load2;
+ uint32_t boot_entry;
+ uint32_t boot_entry2;
+ uint32_t boot_cksum;
+ char processor[16]; /* Contains 680x0, x=0,2,3,4; or empty */
+ uint32_t driver_sig;
+ char _padding[372];
+};
+
+/* Driver descriptor structure, in block 0 */
+struct __attribute__ ((packed)) _MacRawDisk {
+ uint16_t signature; /* expected to be MAC_DRIVER_MAGIC */
+ uint16_t block_size; /* physical sector size */
+ uint32_t block_count; /* size of device in blocks */
+ uint16_t dev_type; /* reserved */
+ uint16_t dev_id; /* reserved */
+ uint32_t data; /* reserved */
+ uint16_t driver_count; /* # of driver descriptor entries */
+ uint8_t driverlist[488];/* info about available drivers */
+ uint16_t padding[3]; /* pad to 512 bytes */
+};
+
+struct __attribute__ ((packed)) _MacDeviceDriver {
+ uint32_t block; /* startblock in MacRawDisk->block_size units */
+ uint16_t size; /* size in 512 byte units */
+ uint16_t type; /* operating system type (MacOS = 1) */
+};
+
+struct _MacPartitionData {
+ char volume_name[33]; /* eg: "Games" */
+ char system_name[33]; /* eg: "Apple_Unix_SVR2" */
+ char processor_name[17];
+
+ int is_boot;
+ int is_driver;
+ int has_driver;
+ int is_root;
+ int is_swap;
+ int is_lvm;
+ int is_raid;
+
+ PedSector data_region_length;
+ PedSector boot_region_length;
+
+ uint32_t boot_base_address;
+ uint32_t boot_entry_address;
+ uint32_t boot_checksum;
+
+ uint32_t status;
+ uint32_t driver_sig;
+};
+
+struct _MacDiskData {
+ int ghost_size; /* sectors per "driver" block */
+ int part_map_entry_count; /* # entries (incl. ghost) */
+ int part_map_entry_num; /* partition map location */
+
+ int active_part_entry_count; /* # real partitions */
+ int free_part_entry_count; /* # free space */
+ int last_part_entry_num; /* last entry number */
+
+ uint16_t block_size; /* physical sector size */
+ uint16_t driver_count;
+ MacDeviceDriver driverlist[1 + 60]; /* 488 bytes */
+};
+
+static PedDiskType mac_disk_type;
+
+static int
+_check_signature (MacRawDisk const *raw_disk)
+{
+ if (PED_BE16_TO_CPU (raw_disk->signature) != MAC_DISK_MAGIC) {
+#ifdef DISCOVER_ONLY
+ return 0;
+#else
+ return ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Invalid signature %x for Mac disk labels."),
+ (int) PED_BE16_TO_CPU (raw_disk->signature))
+ == PED_EXCEPTION_IGNORE;
+#endif
+ }
+
+ return 1;
+}
+
+static int
+_rawpart_check_signature (MacRawPartition* raw_part)
+{
+ int sig = (int) PED_BE16_TO_CPU (raw_part->signature);
+ return sig == MAC_PARTITION_MAGIC_1 || sig == MAC_PARTITION_MAGIC_2;
+}
+
+static int
+mac_probe (const PedDevice * dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size < sizeof (MacRawDisk))
+ return 0;
+
+ void *label;
+ if (!ptt_read_sector (dev, 0, &label))
+ return 0;
+
+ int valid = _check_signature (label);
+
+ free (label);
+ return valid;
+}
+
+static int
+_disk_add_part_map_entry (PedDisk* disk, int warn)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ PedPartition* new_part;
+ MacPartitionData* mac_part_data;
+ PedSector part_map_size;
+ PedConstraint* constraint_any = ped_constraint_any (disk->dev);
+
+#ifndef DISCOVER_ONLY
+ if (warn && ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_CANCEL,
+ _("Partition map has no partition map entry!"))
+ != PED_EXCEPTION_FIX)
+ goto error;
+#endif /* !DISCOVER_ONLY */
+
+ part_map_size
+ = ped_round_up_to (mac_disk_data->last_part_entry_num, 64);
+ if (part_map_size == 0)
+ part_map_size = 64;
+
+ new_part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
+ 1, part_map_size - 1);
+ if (!new_part)
+ goto error;
+
+ mac_part_data = new_part->disk_specific;
+ strcpy (mac_part_data->volume_name, "Apple");
+ strcpy (mac_part_data->system_name, "Apple_partition_map");
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any))
+ goto error_destroy_new_part;
+
+ mac_disk_data->part_map_entry_num = new_part->num;
+ mac_disk_data->part_map_entry_count
+ = new_part->geom.end - mac_disk_data->ghost_size;
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error_destroy_new_part:
+ ped_partition_destroy (new_part);
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+static PedDisk*
+mac_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ MacDiskData* mac_disk_data;
+
+ PED_ASSERT (dev != NULL);
+
+#ifndef DISCOVER_ONLY
+ if (dev->length < 256) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s is too small for a Mac disk label!"),
+ dev->path);
+ goto error;
+ }
+#endif
+
+ disk = _ped_disk_alloc (dev, &mac_disk_type);
+ if (!disk)
+ goto error;
+
+ mac_disk_data = (MacDiskData*) ped_malloc (sizeof (MacDiskData));
+ if (!mac_disk_data)
+ goto error_free_disk;
+ disk->disk_specific = mac_disk_data;
+ mac_disk_data->ghost_size = 1;
+ mac_disk_data->active_part_entry_count = 0;
+ mac_disk_data->free_part_entry_count = 1;
+ mac_disk_data->last_part_entry_num = 1;
+ mac_disk_data->block_size = 0;
+ mac_disk_data->driver_count = 0;
+ memset(&mac_disk_data->driverlist[0], 0, sizeof(mac_disk_data->driverlist));
+
+ if (!_disk_add_part_map_entry (disk, 0))
+ goto error_free_disk;
+ return disk;
+
+error_free_disk:
+ _ped_disk_free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk*
+mac_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ MacDiskData* new_mac_data;
+ MacDiskData* old_mac_data = (MacDiskData*) disk->disk_specific;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &mac_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ new_mac_data = (MacDiskData*) new_disk->disk_specific;
+
+ /* remove the partition map partition - it will be duplicated
+ * later.
+ */
+ PedSector first_part_map_sector = old_mac_data->ghost_size;
+ PedPartition *partition_map
+ = ped_disk_get_partition_by_sector (new_disk, first_part_map_sector);
+ PED_ASSERT (partition_map != NULL);
+
+ /* ped_disk_remove_partition may be used only to delete a "normal"
+ partition. Trying to delete at least "freespace" or "metadata"
+ partitions leads to a violation of assumptions in
+ ped_disk_remove_partition, since it calls _disk_push_update_mode,
+ which destroys all "freespace" and "metadata" partitions, and
+ depends on that destruction not freeing its PART parameter. */
+ PED_ASSERT (partition_map->type == PED_PARTITION_NORMAL);
+ ped_disk_remove_partition (new_disk, partition_map);
+
+ /* ugly, but C is ugly :p */
+ memcpy (new_mac_data, old_mac_data, sizeof (MacDiskData));
+ return new_disk;
+}
+
+static void
+mac_free (PedDisk* disk)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+
+ _ped_disk_free (disk);
+ free (mac_disk_data);
+}
+
+static int
+_rawpart_cmp_type (const MacRawPartition* raw_part, const char* type)
+{
+ return strncasecmp (raw_part->type, type, 32) == 0;
+}
+
+static int
+_rawpart_cmp_name (const MacRawPartition* raw_part, const char* name)
+{
+ return strncasecmp (raw_part->name, name, 32) == 0;
+}
+
+static int
+_rawpart_is_partition_map (const MacRawPartition* raw_part)
+{
+ return _rawpart_cmp_type (raw_part, "Apple_partition_map");
+}
+
+static int
+strncasestr (const char* haystack, const char* needle, int n)
+{
+ int needle_size = strlen (needle);
+ int i;
+
+ for (i = 0; haystack[i] && i < n - needle_size; i++) {
+ if (strncasecmp (haystack + i, needle, needle_size) == 0)
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+_rawpart_is_boot (const MacRawPartition* raw_part)
+{
+ if (!strcasecmp(raw_part->type, "Apple_Bootstrap"))
+ return 1;
+
+ if (!strcasecmp(raw_part->type, "Apple_Boot"))
+ return 1;
+
+ return 0;
+}
+
+static int
+_rawpart_is_driver (const MacRawPartition* raw_part)
+{
+ if (strncmp (raw_part->type, "Apple_", 6) != 0)
+ return 0;
+ if (!strncasestr (raw_part->type, "driver", 32))
+ return 0;
+ return 1;
+}
+
+static int _GL_ATTRIBUTE_PURE
+_rawpart_has_driver (const MacRawPartition* raw_part, MacDiskData* mac_disk_data)
+{
+ MacDeviceDriver *driverlist;
+ uint16_t i;
+ uint32_t start_block, block_count;
+
+ start_block = PED_BE32_TO_CPU(raw_part->start_block);
+ block_count = PED_BE32_TO_CPU(raw_part->block_count);
+ driverlist = &mac_disk_data->driverlist[0];
+ for (i = 0; i < mac_disk_data->driver_count; i++) {
+ if (start_block == PED_BE32_TO_CPU(driverlist->block) &&
+ block_count == PED_BE16_TO_CPU(driverlist->size))
+ return 1;
+ driverlist++;
+ }
+ return 0;
+}
+
+static int
+_rawpart_is_root (MacRawPartition* raw_part)
+{
+ if (!_rawpart_cmp_type (raw_part, "Apple_UNIX_SVR2"))
+ return 0;
+ if (strcmp (raw_part->name, "root") != 0)
+ return 0;
+ return 1;
+}
+
+static int
+_rawpart_is_swap (MacRawPartition* raw_part)
+{
+ if (!_rawpart_cmp_type (raw_part, "Apple_UNIX_SVR2"))
+ return 0;
+ if (strcmp (raw_part->name, "swap") != 0)
+ return 0;
+ return 1;
+}
+
+static int
+_rawpart_is_lvm (MacRawPartition* raw_part)
+{
+ if (strcmp (raw_part->type, "Linux_LVM") != 0)
+ return 0;
+ return 1;
+}
+
+static int
+_rawpart_is_raid (MacRawPartition* raw_part)
+{
+ if (strcmp (raw_part->type, "Linux_RAID") != 0)
+ return 0;
+ return 1;
+}
+
+static int
+_rawpart_is_void (MacRawPartition* raw_part)
+{
+ return _rawpart_cmp_type (raw_part, "Apple_Void");
+}
+
+/* returns 1 if the raw_part represents a partition that is "unused space", or
+ * doesn't represent a partition at all. NOTE: some people make Apple_Free
+ * partitions with MacOS, because they can't select another type. So, if the
+ * name is anything other than "Extra" or "", it is treated as a "real"
+ * partition.
+ */
+static int
+_rawpart_is_active (MacRawPartition* raw_part)
+{
+ if (_rawpart_cmp_type (raw_part, "Apple_Free")
+ && (_rawpart_cmp_name (raw_part, "Extra")
+ || _rawpart_cmp_name (raw_part, "")))
+ return 0;
+ if (_rawpart_cmp_type (raw_part, "Apple_Void"))
+ return 0;
+ if (_rawpart_cmp_type (raw_part, "Apple_Scratch"))
+ return 0;
+ if (_rawpart_cmp_type (raw_part, "Apple_Extra"))
+ return 0;
+
+ return 1;
+}
+
+static PedPartition*
+_rawpart_analyse (MacRawPartition* raw_part, PedDisk* disk, int num)
+{
+ MacDiskData* mac_disk_data;
+ PedPartition* part;
+ MacPartitionData* mac_part_data;
+ PedSector start, length;
+
+ if (!_rawpart_check_signature (raw_part)) {
+#ifndef DISCOVER_ONLY
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Partition %d has an invalid signature %x."),
+ num,
+ (int) PED_BE16_TO_CPU (raw_part->signature))
+ != PED_EXCEPTION_IGNORE)
+#endif
+ goto error;
+ }
+
+ mac_disk_data = (MacDiskData*) disk->disk_specific;
+
+ start = PED_BE32_TO_CPU (raw_part->start_block);
+ length = PED_BE32_TO_CPU (raw_part->block_count);
+ if (length == 0) {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Partition %d has an invalid length of 0 bytes!"),
+ num);
+#endif
+ return NULL;
+ }
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
+ start, start + length - 1);
+ if (!part)
+ goto error;
+
+ mac_part_data = part->disk_specific;
+
+ strncpy (mac_part_data->volume_name, raw_part->name, 32);
+ strncpy (mac_part_data->system_name, raw_part->type, 32);
+ strncpy (mac_part_data->processor_name, raw_part->processor, 16);
+
+ mac_part_data->is_boot = _rawpart_is_boot (raw_part);
+ mac_part_data->is_driver = _rawpart_is_driver (raw_part);
+ if (mac_part_data->is_driver)
+ mac_part_data->has_driver = _rawpart_has_driver(raw_part, mac_disk_data);
+ mac_part_data->is_root = _rawpart_is_root (raw_part);
+ mac_part_data->is_swap = _rawpart_is_swap (raw_part);
+ mac_part_data->is_lvm = _rawpart_is_lvm (raw_part);
+ mac_part_data->is_raid = _rawpart_is_raid (raw_part);
+
+ /* "data" region */
+#ifndef DISCOVER_ONLY
+ if (raw_part->data_start) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The data region doesn't start at the start "
+ "of the partition."));
+ goto error_destroy_part;
+ }
+#endif /* !DISCOVER_ONLY */
+ mac_part_data->data_region_length
+ = PED_BE32_TO_CPU (raw_part->data_count);
+
+ mac_part_data->boot_region_length
+ = PED_BE32_TO_CPU (raw_part->boot_count);
+
+#ifndef DISCOVER_ONLY
+ if (mac_part_data->has_driver) {
+ if (mac_part_data->boot_region_length < part->geom.length) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The partition's boot region doesn't occupy "
+ "the entire partition."))
+ != PED_EXCEPTION_IGNORE)
+ goto error_destroy_part;
+ }
+ } else {
+ if (mac_part_data->data_region_length < part->geom.length &&
+ !mac_part_data->is_boot) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The partition's data region doesn't occupy "
+ "the entire partition."))
+ != PED_EXCEPTION_IGNORE)
+ goto error_destroy_part;
+ }
+ }
+#endif /* !DISCOVER_ONLY */
+
+ mac_part_data->boot_base_address
+ = PED_BE32_TO_CPU (raw_part->boot_load);
+ mac_part_data->boot_entry_address
+ = PED_BE32_TO_CPU (raw_part->boot_entry);
+ mac_part_data->boot_checksum
+ = PED_BE32_TO_CPU (raw_part->boot_cksum);
+
+ mac_part_data->status = PED_BE32_TO_CPU (raw_part->status);
+ mac_part_data->driver_sig = PED_BE32_TO_CPU (raw_part->driver_sig);
+
+ return part;
+
+error_destroy_part:
+ ped_partition_destroy (part);
+error:
+ return NULL;
+}
+
+/* looks at the partition map size field in a mac raw partition, and calculates
+ * what the size of the partition map should be, from it
+ */
+static int
+_rawpart_get_partmap_size (MacRawPartition* raw_part, PedDisk* disk)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ PedSector part_map_start;
+ PedSector part_map_end;
+
+ part_map_start = mac_disk_data->ghost_size;
+ part_map_end = PED_BE32_TO_CPU (raw_part->map_count);
+
+ return part_map_end - part_map_start + 1;
+}
+
+static int
+_disk_analyse_block_size (PedDisk* disk, MacRawDisk* raw_disk)
+{
+ PedSector block_size;
+
+ if (PED_BE16_TO_CPU (raw_disk->block_size) % 512) {
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Weird block size on device descriptor: %d bytes is "
+ "not divisible by 512."),
+ (int) PED_BE16_TO_CPU (raw_disk->block_size));
+#endif
+ goto error;
+ }
+
+ block_size = PED_BE16_TO_CPU (raw_disk->block_size) / 512;
+ if (block_size != disk->dev->sector_size / 512) {
+#ifndef DISCOVER_ONLY
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The driver descriptor says the physical block size "
+ "is %d bytes, but Linux says it is %d bytes."),
+ (int) block_size * 512,
+ (int) disk->dev->sector_size)
+ != PED_EXCEPTION_IGNORE)
+ goto error;
+#endif
+ disk->dev->sector_size = block_size * 512;
+ }
+
+ return 1;
+
+error:
+ return 0;
+}
+
+/* Tries to figure out the block size used by the drivers, for the ghost
+ * partitioning scheme. Ghost partitioning works like this: the OpenFirmware
+ * (OF) sees 512 byte blocks, but some drivers use 2048 byte blocks (and,
+ * perhaps, some other number?). To remain compatible, the partition map
+ * only has "real" partition map entries on ghost-aligned block numbers (and
+ * the others are padded with Apple_Void partitions). This function tries
+ * to figure out what the "ghost-aligned" size is... (which, believe-it-or-not,
+ * doesn't always equal 2048!!!)
+ */
+static int
+_disk_analyse_ghost_size (PedDisk* disk)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+
+ void *buf = ped_malloc (disk->dev->sector_size);
+ if (!buf)
+ return 0;
+
+ int i;
+ int found = 0;
+ for (i = 1; i < 64; i *= 2) {
+ if (!ped_device_read (disk->dev, buf, i, 1))
+ break;
+ if (_rawpart_check_signature (buf)
+ && !_rawpart_is_void (buf)) {
+ mac_disk_data->ghost_size = i;
+ found = (i <= disk->dev->sector_size / 512);
+ break;
+ }
+ }
+ free (buf);
+
+#ifndef DISCOVER_ONLY
+ if (!found)
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("No valid partition map found."));
+#endif
+ return found;
+}
+
+static int
+mac_read (PedDisk* disk)
+{
+ MacDiskData* mac_disk_data;
+ PedPartition* part;
+ int num;
+ PedSector ghost_size;
+ int last_part_entry_num = 0;
+
+ PED_ASSERT (disk != NULL);
+
+ mac_disk_data = disk->disk_specific;
+ mac_disk_data->part_map_entry_num = 0; /* 0 == none */
+
+ void *buf;
+ if (!ptt_read_sector (disk->dev, 0, &buf))
+ return 0;
+
+ MacRawDisk *raw_disk = buf;
+
+ if (!_check_signature (raw_disk))
+ goto error;
+
+ /* Record the original sector size; this function may change it. */
+ PedSector ss0 = disk->dev->sector_size;
+ if (!_disk_analyse_block_size (disk, raw_disk))
+ goto error;
+
+ if (!_disk_analyse_ghost_size (disk))
+ goto error;
+ ghost_size = mac_disk_data->ghost_size;
+
+ if (!ped_disk_delete_all (disk))
+ goto error;
+
+ if (PED_BE16_TO_CPU(raw_disk->driver_count) &&
+ PED_BE16_TO_CPU(raw_disk->driver_count) < 62) {
+ memcpy(&mac_disk_data->driverlist[0], &raw_disk->driverlist[0],
+ sizeof(mac_disk_data->driverlist));
+ mac_disk_data->driver_count = PED_BE16_TO_CPU(raw_disk->driver_count);
+ mac_disk_data->block_size = PED_BE16_TO_CPU(raw_disk->block_size);
+ }
+
+ /* If _disk_analyse_block_size has increased the sector_size,
+ reallocate this buffer, so we can still read a sector into it. */
+ if (ss0 < disk->dev->sector_size) {
+ free (buf);
+ buf = ped_malloc (disk->dev->sector_size);
+ if (buf == NULL)
+ goto error;
+ }
+
+ for (num=1; num==1 || num <= last_part_entry_num; num++) {
+ void *raw_part = buf;
+ if (!ped_device_read (disk->dev, raw_part,
+ num * ghost_size, 1))
+ goto error_delete_all;
+
+ if (!_rawpart_check_signature (raw_part))
+ continue;
+
+ if (num == 1)
+ last_part_entry_num
+ = _rawpart_get_partmap_size (raw_part, disk);
+ if (_rawpart_get_partmap_size (raw_part, disk)
+ != last_part_entry_num) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Conflicting partition map entry sizes! "
+ "Entry 1 says it is %d, but entry %d says "
+ "it is %d!"),
+ last_part_entry_num,
+ _rawpart_get_partmap_size (raw_part, disk))
+ != PED_EXCEPTION_IGNORE)
+ goto error_delete_all;
+ }
+
+ if (!_rawpart_is_active (raw_part))
+ continue;
+
+ part = _rawpart_analyse (raw_part, disk, num);
+ if (!part)
+ goto error_delete_all;
+ part->num = num;
+ part->fs_type = ped_file_system_probe (&part->geom);
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ if (constraint_exact == NULL)
+ goto error_delete_all;
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok)
+ goto error_delete_all;
+
+ if (_rawpart_is_partition_map (raw_part)) {
+ if (mac_disk_data->part_map_entry_num
+ && ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Weird! There are 2 partitions "
+ "map entries!"))
+ != PED_EXCEPTION_IGNORE)
+ goto error_delete_all;
+
+ mac_disk_data->part_map_entry_num = num;
+ mac_disk_data->part_map_entry_count
+ = part->geom.end - ghost_size + 1;
+ }
+ }
+
+ if (!mac_disk_data->part_map_entry_num) {
+ if (!_disk_add_part_map_entry (disk, 1))
+ goto error_delete_all;
+ ped_disk_commit_to_dev (disk);
+ }
+ free (buf);
+ return 1;
+
+error_delete_all:
+ ped_disk_delete_all (disk);
+error:
+ free (buf);
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+/* The Ghost partition: is a blank entry, used to pad out each block (where
+ * there physical block size > 512 bytes). This is because OpenFirmware uses
+ * 512 byte blocks, but device drivers Think Different TM, with a different
+ * lbock size, so we need to do this to avoid a clash (!)
+ */
+static int
+_pad_raw_part (PedDisk* disk, int num, MacRawPartition* part_map)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ int i;
+
+ size_t ss = disk->dev->sector_size;
+ void *buf = ped_calloc (ss);
+ if (!buf)
+ return 0;
+
+ MacRawPartition *ghost_entry = buf;
+ ghost_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2);
+ strcpy (ghost_entry->type, "Apple_Void");
+ ghost_entry->map_count
+ = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
+
+ for (i=0; i < mac_disk_data->ghost_size - 1; i++) {
+ PedSector idx = i + (num - 1) * mac_disk_data->ghost_size;
+ memcpy ((char*)part_map + idx * ss, ghost_entry, ss);
+ }
+
+ free (buf);
+ return 1;
+}
+
+static void
+_update_driver_count (MacRawPartition* part_map_entry,
+ MacDiskData *mac_driverdata, const MacDiskData* mac_disk_data)
+{
+ uint16_t i;
+ uint32_t start_block, block_count;
+
+ start_block = PED_BE32_TO_CPU(part_map_entry->start_block);
+ block_count = PED_BE32_TO_CPU(part_map_entry->block_count);
+
+ for (i = 0; i < mac_disk_data->driver_count; i++) {
+ if (start_block == PED_BE32_TO_CPU(mac_disk_data->driverlist[i].block) &&
+ block_count == PED_BE16_TO_CPU(mac_disk_data->driverlist[i].size)) {
+ uint16_t count_cur = mac_driverdata->driver_count;
+ mac_driverdata->driverlist[count_cur].block
+ = mac_disk_data->driverlist[i].block;
+ mac_driverdata->driverlist[count_cur].size
+ = mac_disk_data->driverlist[i].size;
+ mac_driverdata->driverlist[count_cur].type
+ = mac_disk_data->driverlist[i].type;
+ mac_driverdata->driver_count++;
+ break;
+ }
+ }
+}
+
+static MacRawPartition *
+get_pme (MacRawPartition const *part_map, PedSector i, PedDisk const *disk)
+{
+ MacDiskData const *mac_disk_data = disk->disk_specific;
+ PedSector idx = i * mac_disk_data->ghost_size - 1;
+ return (MacRawPartition *) ((char*)part_map
+ + idx * disk->dev->sector_size);
+}
+
+/* Initialize the disk->dev->sector_size bytes of part_map[part->num]. */
+static int
+_generate_raw_part (PedDisk* disk, PedPartition* part,
+ MacRawPartition* part_map, MacDiskData *mac_driverdata)
+{
+ MacDiskData* mac_disk_data;
+ MacPartitionData* mac_part_data;
+
+ PED_ASSERT (part->num > 0);
+
+ mac_disk_data = disk->disk_specific;
+ mac_part_data = part->disk_specific;
+
+ MacRawPartition *part_map_entry = get_pme (part_map, part->num, disk);
+ memset (part_map_entry, 0, disk->dev->sector_size);
+
+ part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2);
+ part_map_entry->map_count
+ = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
+ part_map_entry->start_block = PED_CPU_TO_BE32 (part->geom.start);
+ part_map_entry->block_count = PED_CPU_TO_BE32 (part->geom.length);
+ strncpy (part_map_entry->name, mac_part_data->volume_name, 31);
+ part_map_entry->name[31] = '\0';
+ strncpy (part_map_entry->type, mac_part_data->system_name, 31);
+ part_map_entry->type[31] = '\0';
+
+ if (mac_part_data->is_driver) {
+ if (mac_part_data->has_driver)
+ _update_driver_count(part_map_entry, mac_driverdata,
+ mac_disk_data);
+ } else
+ mac_part_data->data_region_length = part->geom.length;
+ part_map_entry->data_count = PED_CPU_TO_BE32 (
+ mac_part_data->data_region_length);
+ part_map_entry->boot_count = PED_CPU_TO_BE32 (
+ mac_part_data->boot_region_length);
+ part_map_entry->status = PED_CPU_TO_BE32 (mac_part_data->status);
+ part_map_entry->driver_sig
+ = PED_CPU_TO_BE32 (mac_part_data->driver_sig);
+
+ part_map_entry->boot_load =
+ PED_CPU_TO_BE32 (mac_part_data->boot_base_address);
+ part_map_entry->boot_entry =
+ PED_CPU_TO_BE32 (mac_part_data->boot_entry_address);
+ part_map_entry->boot_cksum =
+ PED_CPU_TO_BE32 (mac_part_data->boot_checksum);
+
+ strncpy (part_map_entry->processor, mac_part_data->processor_name, 15);
+ part_map_entry->processor[15] = '\0';
+
+ if (!_pad_raw_part (disk, part->num, part_map))
+ goto error;
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+_generate_raw_freespace_part (PedDisk* disk, PedGeometry* geom, int num,
+ MacRawPartition* part_map)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+
+ PED_ASSERT (num > 0);
+
+ MacRawPartition *part_map_entry = get_pme (part_map, num, disk);
+
+ part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2);
+ part_map_entry->map_count
+ = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
+ part_map_entry->start_block = PED_CPU_TO_BE32 (geom->start);
+ part_map_entry->block_count = PED_CPU_TO_BE32 (geom->length);
+ strcpy (part_map_entry->name, "Extra");
+ strcpy (part_map_entry->type, "Apple_Free");
+
+ part_map_entry->data_count = PED_CPU_TO_BE32 (geom->length);
+ part_map_entry->status = 0;
+ part_map_entry->driver_sig = 0;
+
+ if (!_pad_raw_part (disk, num, part_map))
+ goto error;
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+_generate_empty_part (PedDisk* disk, int num, MacRawPartition* part_map)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+
+ PED_ASSERT (num > 0);
+
+ MacRawPartition *part_map_entry = get_pme (part_map, num, disk);
+ part_map_entry->signature = PED_CPU_TO_BE16 (MAC_PARTITION_MAGIC_2);
+ part_map_entry->map_count
+ = PED_CPU_TO_BE32 (mac_disk_data->last_part_entry_num);
+ strcpy (part_map_entry->type, "Apple_Void");
+
+ return _pad_raw_part (disk, num, part_map);
+}
+
+/* returns the first empty entry in the partition map */
+static int _GL_ATTRIBUTE_PURE
+_get_first_empty_part_entry (PedDisk* disk, MacRawPartition* part_map)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ int i;
+
+ for (i=1; i <= mac_disk_data->last_part_entry_num; i++) {
+ MacRawPartition *part_map_entry = get_pme (part_map, i, disk);
+ if (!part_map_entry->signature)
+ return i;
+ }
+
+ return 0;
+}
+
+static int
+write_block_zero (PedDisk* disk, MacDiskData* mac_driverdata)
+{
+ PedDevice* dev = disk->dev;
+ void *s0;
+ if (!ptt_read_sector (dev, 0, &s0))
+ return 0;
+ MacRawDisk *raw_disk = (MacRawDisk *) s0;
+
+ raw_disk->signature = PED_CPU_TO_BE16 (MAC_DISK_MAGIC);
+ raw_disk->block_size = PED_CPU_TO_BE16 (dev->sector_size);
+ raw_disk->block_count = PED_CPU_TO_BE32 (dev->length);
+
+ raw_disk->driver_count = PED_CPU_TO_BE16(mac_driverdata->driver_count);
+ memcpy(&raw_disk->driverlist[0], &mac_driverdata->driverlist[0],
+ sizeof(raw_disk->driverlist));
+
+ int write_ok = ped_device_write (dev, raw_disk, 0, 1);
+ free (s0);
+ return write_ok;
+}
+
+static int
+mac_write (PedDisk* disk)
+{
+ MacRawPartition* part_map;
+ MacDiskData* mac_disk_data;
+ MacDiskData* mac_driverdata; /* updated driver list */
+ PedPartition* part;
+ int num;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (!disk->update_mode);
+
+ mac_disk_data = disk->disk_specific;
+
+ if (!ped_disk_get_partition (disk, mac_disk_data->part_map_entry_num)) {
+ if (!_disk_add_part_map_entry (disk, 1))
+ goto error;
+ }
+
+ mac_driverdata = ped_malloc(sizeof(MacDiskData));
+ if (!mac_driverdata)
+ goto error;
+ memset (mac_driverdata, 0, sizeof(MacDiskData));
+
+ size_t pmap_bytes = (mac_disk_data->part_map_entry_count
+ * mac_disk_data->ghost_size
+ * disk->dev->sector_size);
+ part_map = (MacRawPartition*) ped_calloc (pmap_bytes);
+ if (!part_map)
+ goto error_free_driverdata;
+
+/* write (to memory) the "real" partitions */
+ for (part = ped_disk_next_partition (disk, NULL); part;
+ part = ped_disk_next_partition (disk, part)) {
+ if (!ped_partition_is_active (part))
+ continue;
+ if (!_generate_raw_part (disk, part, part_map, mac_driverdata))
+ goto error_free_part_map;
+ }
+
+/* write the "free space" partitions */
+ for (part = ped_disk_next_partition (disk, NULL); part;
+ part = ped_disk_next_partition (disk, part)) {
+ if (part->type != PED_PARTITION_FREESPACE)
+ continue;
+ num = _get_first_empty_part_entry (disk, part_map);
+ if (!_generate_raw_freespace_part (disk, &part->geom, num,
+ part_map))
+ goto error_free_part_map;
+ }
+
+/* write the "void" (empty) partitions */
+ for (num = _get_first_empty_part_entry (disk, part_map); num;
+ num = _get_first_empty_part_entry (disk, part_map))
+ _generate_empty_part (disk, num, part_map);
+
+/* write to disk */
+ if (!ped_device_write (disk->dev, part_map, 1,
+ mac_disk_data->part_map_entry_count))
+ goto error_free_part_map;
+ free (part_map);
+ int write_ok = write_block_zero (disk, mac_driverdata);
+ free (mac_driverdata);
+ return write_ok;
+
+error_free_part_map:
+ free (part_map);
+error_free_driverdata:
+ free (mac_driverdata);
+error:
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+mac_partition_new (
+ const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type, PedSector start, PedSector end)
+{
+ PedPartition* part;
+ MacPartitionData* mac_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (ped_partition_is_active (part)) {
+ part->disk_specific
+ = mac_data = ped_malloc (sizeof (MacPartitionData));
+ if (!mac_data)
+ goto error_free_part;
+
+ memset (mac_data, 0, sizeof (MacPartitionData));
+ strcpy (mac_data->volume_name, "untitled");
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return NULL;
+}
+
+static PedPartition*
+mac_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+ MacPartitionData* new_mac_data;
+ MacPartitionData* old_mac_data;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ old_mac_data = (MacPartitionData*) part->disk_specific;
+ new_mac_data = (MacPartitionData*) new_part->disk_specific;
+
+ /* ugly, but C is ugly :p */
+ memcpy (new_mac_data, old_mac_data, sizeof (MacPartitionData));
+ return new_part;
+}
+
+static void
+mac_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part))
+ free (part->disk_specific);
+ free (part);
+}
+
+static int
+mac_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ MacPartitionData* mac_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ if (fs_type && is_linux_swap (fs_type->name))
+ ped_partition_set_flag (part, PED_PARTITION_SWAP, 1);
+
+ if (mac_data->is_boot) {
+ strcpy (mac_data->system_name, "Apple_Bootstrap");
+ mac_data->status = 0x33;
+ return 1;
+ }
+
+ if (fs_type && (!strcmp (fs_type->name, "hfs")
+ || !strcmp (fs_type->name, "hfs+"))) {
+ strcpy (mac_data->system_name, "Apple_HFS");
+ mac_data->status |= 0x7f;
+ } else if (fs_type && !strcmp (fs_type->name, "hfsx")) {
+ strcpy (mac_data->system_name, "Apple_HFSX");
+ mac_data->status |= 0x7f;
+ } else {
+ strcpy (mac_data->system_name, "Apple_UNIX_SVR2");
+ mac_data->status = 0x33;
+ }
+
+ return 1;
+}
+
+static int
+mac_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ MacPartitionData* mac_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ mac_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ mac_data->is_boot = state;
+
+ if (part->fs_type)
+ return mac_partition_set_system (part, part->fs_type);
+
+ if (state) {
+ strcpy (mac_data->system_name, "Apple_Bootstrap");
+ mac_data->status = 0x33;
+ }
+ return 1;
+
+ case PED_PARTITION_ROOT:
+ if (state) {
+ strcpy (mac_data->volume_name, "root");
+ mac_data->is_swap = 0;
+ } else {
+ if (mac_data->is_root)
+ strcpy (mac_data->volume_name, "untitled");
+ }
+ mac_data->is_root = state;
+ return 1;
+
+ case PED_PARTITION_SWAP:
+ if (state) {
+ strcpy (mac_data->volume_name, "swap");
+ mac_data->is_root = 0;
+ } else {
+ if (mac_data->is_swap)
+ strcpy (mac_data->volume_name, "untitled");
+ }
+ mac_data->is_swap = state;
+ return 1;
+
+ case PED_PARTITION_LVM:
+ if (state) {
+ strcpy (mac_data->system_name, "Linux_LVM");
+ mac_data->is_lvm = state;
+ } else {
+ if (mac_data->is_lvm)
+ mac_partition_set_system (part, part->fs_type);
+ }
+ return 1;
+
+ case PED_PARTITION_RAID:
+ if (state) {
+ strcpy (mac_data->system_name, "Linux_RAID");
+ mac_data->is_raid = state;
+ } else {
+ if (mac_data->is_raid)
+ mac_partition_set_system (part, part->fs_type);
+ }
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static int _GL_ATTRIBUTE_PURE
+mac_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ MacPartitionData* mac_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ mac_data = part->disk_specific;
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return mac_data->is_boot;
+
+ case PED_PARTITION_ROOT:
+ return mac_data->is_root;
+
+ case PED_PARTITION_SWAP:
+ return mac_data->is_swap;
+
+ case PED_PARTITION_LVM:
+ return mac_data->is_lvm;
+
+ case PED_PARTITION_RAID:
+ return mac_data->is_raid;
+
+ default:
+ return 0;
+ }
+}
+
+static int
+mac_partition_is_flag_available (
+ const PedPartition* part, PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ case PED_PARTITION_ROOT:
+ case PED_PARTITION_SWAP:
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_RAID:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static void
+mac_partition_set_name (PedPartition* part, const char* name)
+{
+ MacPartitionData* mac_data;
+ int i;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ mac_data = part->disk_specific;
+
+#ifndef DISCOVER_ONLY
+ if (mac_data->is_root || mac_data->is_swap) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Changing the name of a root or swap partition "
+ "will prevent Linux from recognising it as such."))
+ != PED_EXCEPTION_IGNORE)
+ return;
+ mac_data->is_root = mac_data->is_swap = 0;
+ }
+#endif
+
+ strncpy (mac_data->volume_name, name, 32);
+ mac_data->volume_name [32] = 0;
+ for (i = strlen (mac_data->volume_name) - 1;
+ mac_data->volume_name[i] == ' '; i--)
+ mac_data->volume_name [i] = 0;
+}
+
+static const char* _GL_ATTRIBUTE_PURE
+mac_partition_get_name (const PedPartition* part)
+{
+ MacPartitionData* mac_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ mac_data = part->disk_specific;
+
+ return mac_data->volume_name;
+}
+
+static PedAlignment*
+mac_get_partition_alignment(const PedDisk *disk)
+{
+ return ped_alignment_new(0, 1);
+}
+
+static PedConstraint*
+_primary_constraint (PedDisk* disk)
+{
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry max_geom;
+
+ if (!ped_alignment_init (&start_align, 0, 1))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, 1))
+ return NULL;
+ if (!ped_geometry_init (&max_geom, disk->dev, 1, disk->dev->length - 1))
+ return NULL;
+
+ return ped_constraint_new (&start_align, &end_align, &max_geom,
+ &max_geom, 1, disk->dev->length);
+}
+
+static int
+mac_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ if (_ped_partition_attempt_align (part, constraint,
+ _primary_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+mac_partition_enumerate (PedPartition* part)
+{
+ PedDisk* disk;
+ MacDiskData* mac_disk_data;
+ int i;
+ int max_part_count;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ disk = part->disk;
+ mac_disk_data = (MacDiskData*) disk->disk_specific;
+
+ max_part_count = ped_disk_get_max_primary_partition_count (disk);
+
+ if (part->num > 0 && part->num <= mac_disk_data->part_map_entry_count)
+ return 1;
+
+ for (i = 1; i <= max_part_count; i++) {
+ if (!ped_disk_get_partition (disk, i)) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't add another partition -- the partition map is too "
+ "small!"));
+#endif
+
+ return 0;
+}
+
+static int
+_disk_count_partitions (PedDisk* disk)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ PedPartition* part = NULL;
+ PedPartition* last = NULL;
+
+ PED_ASSERT (disk->update_mode);
+
+ mac_disk_data->active_part_entry_count = 0;
+ mac_disk_data->free_part_entry_count = 0;
+ mac_disk_data->last_part_entry_num = 0;
+
+ /* subtle: we only care about free space after the partition map.
+ * the partition map is an "active" partition, BTW... */
+ for (part = ped_disk_next_partition (disk, part); part;
+ part = ped_disk_next_partition (disk, part)) {
+ if (!ped_partition_is_active (part))
+ continue;
+
+ mac_disk_data->active_part_entry_count++;
+ if (last && last->geom.end + 1 < part->geom.start)
+ mac_disk_data->free_part_entry_count++;
+ mac_disk_data->last_part_entry_num
+ = PED_MAX (mac_disk_data->last_part_entry_num,
+ part->num);
+
+ last = part;
+ }
+
+ if (last && last->geom.end < disk->dev->length - 1)
+ mac_disk_data->free_part_entry_count++;
+
+ mac_disk_data->last_part_entry_num
+ = PED_MAX (mac_disk_data->last_part_entry_num,
+ mac_disk_data->active_part_entry_count
+ + mac_disk_data->free_part_entry_count);
+ return 1;
+}
+
+static int
+add_metadata_part (PedDisk* disk, PedSector start, PedSector end)
+{
+ PedPartition* new_part;
+ PedConstraint* constraint_any = ped_constraint_any (disk->dev);
+
+ PED_ASSERT (disk != NULL);
+
+ new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL,
+ start, end);
+ if (!new_part)
+ goto error;
+ if (!ped_disk_add_partition (disk, new_part, constraint_any))
+ goto error_destroy_new_part;
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error_destroy_new_part:
+ ped_partition_destroy (new_part);
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+static int
+mac_alloc_metadata (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ if (!add_metadata_part (disk, 0, 0))
+ return 0;
+
+ /* hack: this seems to be a good place, to update the partition map
+ * entry count, since mac_alloc_metadata() gets called during
+ * _disk_pop_update_mode()
+ */
+ return _disk_count_partitions (disk);
+}
+
+static int
+mac_get_max_primary_partition_count (const PedDisk* disk)
+{
+ MacDiskData* mac_disk_data = disk->disk_specific;
+ PedPartition* part_map_partition;
+
+ part_map_partition = ped_disk_get_partition (disk,
+ mac_disk_data->part_map_entry_num);
+
+ /* HACK: if we haven't found the partition map partition (yet),
+ * we return this.
+ */
+ if (!part_map_partition) {
+ mac_disk_data->part_map_entry_num = 0;
+ return 65536;
+ }
+
+ /* HACK: since Mac labels need an entry for free-space regions, we
+ * must allow half plus 1 entries for free-space partitions. I hate
+ * this, but things get REALLY complicated, otherwise.
+ * (I'm prepared to complicate things later, but I want to get
+ * everything working, first)
+ */
+ return mac_disk_data->part_map_entry_count / mac_disk_data->ghost_size
+ - mac_disk_data->free_part_entry_count + 1;
+}
+
+static bool
+mac_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = 65536;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (mac)
+
+static PedDiskOps mac_disk_ops = {
+ clobber: NULL,
+ /* FIXME: remove this cast, once mac_write is fixed not to
+ modify its *DISK parameter. */
+ write: NULL_IF_DISCOVER_ONLY ((int (*) (const PedDisk*)) mac_write),
+
+ partition_set_name: mac_partition_set_name,
+ partition_get_name: mac_partition_get_name,
+
+ get_partition_alignment: mac_get_partition_alignment,
+
+ PT_op_function_initializers (mac)
+};
+
+static PedDiskType mac_disk_type = {
+ next: NULL,
+ name: "mac",
+ ops: &mac_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME
+};
+
+void
+ped_disk_mac_init ()
+{
+ PED_ASSERT (sizeof (MacRawPartition) == 512);
+ PED_ASSERT (sizeof (MacRawDisk) == 512);
+
+ ped_disk_type_register (&mac_disk_type);
+}
+
+void
+ped_disk_mac_done ()
+{
+ ped_disk_type_unregister (&mac_disk_type);
+}
diff --git a/libparted/labels/misc.h b/libparted/labels/misc.h
new file mode 100644
index 0000000..7c11388
--- /dev/null
+++ b/libparted/labels/misc.h
@@ -0,0 +1,48 @@
+/* -*- Mode: c; indent-tabs-mode: nil -*-
+
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <inttypes.h>
+#include <uuid/uuid.h>
+
+/* hack: use the ext2 uuid library to generate a reasonably random (hopefully
+ * with /dev/random) number. Unfortunately, we can only use 4 bytes of it.
+ * We make sure to avoid returning zero which may be interpreted as no FAT
+ * serial number or no MBR signature.
+ */
+static inline uint32_t
+generate_random_uint32 (void)
+{
+ union {
+ uuid_t uuid;
+ uint32_t i;
+ } uu32;
+
+ uuid_generate (uu32.uuid);
+
+ return uu32.i > 0 ? uu32.i : 0xffffffff;
+}
+
+/* Return nonzero if FS_TYPE_NAME starts with "linux-swap".
+ This must match the NUL-terminated "linux-swap" as well
+ as "linux-swap(v0)" and "linux-swap(v1)". */
+static inline int
+is_linux_swap (char const *fs_type_name)
+{
+ char const *prefix = "linux-swap";
+ return strncmp (fs_type_name, prefix, strlen (prefix)) == 0;
+}
diff --git a/libparted/labels/pc98.c b/libparted/labels/pc98.c
new file mode 100644
index 0000000..cfa3ba4
--- /dev/null
+++ b/libparted/labels/pc98.c
@@ -0,0 +1,813 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+/* hacked from Linux/98 source: fs/partitions/nec98.h
+ *
+ * See also:
+ * http://people.FreeBSD.org/~kato/pc98.html
+ * http://www.kmc.kyoto-u.ac.jp/proj/linux98/index-english.html
+ *
+ * Partition types:
+ *
+ * id0(mid):
+ * bit 7: 1=bootable, 0=not bootable
+ * # Linux uses this flag to make a distinction between ext2 and swap.
+ * bit 6--0:
+ * 00H : N88-BASIC(data)?, PC-UX(data)?
+ * 04H : PC-UX(data)
+ * 06H : N88-BASIC
+ * 10H : N88-BASIC
+ * 14H : *BSD, PC-UX
+ * 20H : DOS(data), Windows95/98/NT, Linux
+ * 21H..2FH : DOS(system#1 .. system#15)
+ * 40H : Minix
+ *
+ * id1(sid):
+ * bit 7: 1=active, 0=sleep(hidden)
+ * # PC-UX uses this flag to make a distinction between its file system
+ * # and its swap.
+ * bit 6--0:
+ * 01H: FAT12
+ * 11H: FAT16, <32MB [accessible to DOS 3.3]
+ * 21H: FAT16, >=32MB [Large Partition]
+ * 31H: NTFS
+ * 28H: Windows NT (Volume/Stripe Set?)
+ * 41H: Windows NT (Volume/Stripe Set?)
+ * 48H: Windows NT (Volume/Stripe Set?)
+ * 61H: FAT32
+ * 04H: PC-UX
+ * 06H: N88-BASIC
+ * 44H: *BSD
+ * 62H: ext2, linux-swap
+ */
+
+#define MAX_PART_COUNT 16
+#define PC9800_EXTFMT_MAGIC 0xAA55
+
+#define BIT(x) (1 << (x))
+#define GET_BIT(n,bit) (((n) & BIT(bit)) != 0)
+#define SET_BIT(n,bit,val) n = (val)? (n | BIT(bit)) : (n & ~BIT(bit))
+
+typedef struct _PC98RawPartition PC98RawPartition;
+typedef struct _PC98RawTable PC98RawTable;
+
+/* ripped from Linux/98 source */
+struct _PC98RawPartition {
+ uint8_t mid; /* 0x80 - boot */
+ uint8_t sid; /* 0x80 - active */
+ uint8_t dum1; /* dummy for padding */
+ uint8_t dum2; /* dummy for padding */
+ uint8_t ipl_sect; /* IPL sector */
+ uint8_t ipl_head; /* IPL head */
+ uint16_t ipl_cyl; /* IPL cylinder */
+ uint8_t sector; /* starting sector */
+ uint8_t head; /* starting head */
+ uint16_t cyl; /* starting cylinder */
+ uint8_t end_sector; /* end sector */
+ uint8_t end_head; /* end head */
+ uint16_t end_cyl; /* end cylinder */
+ char name[16];
+} __attribute__((packed));
+
+struct _PC98RawTable {
+ uint8_t boot_code [510];
+ uint16_t magic;
+ PC98RawPartition partitions [MAX_PART_COUNT];
+} __attribute__((packed));
+
+typedef struct {
+ PedSector ipl_sector;
+ int system;
+ int boot;
+ int hidden;
+ char name [17];
+} PC98PartitionData;
+
+/* this MBR boot code is dummy */
+static const char MBR_BOOT_CODE[] = {
+ 0xcb, /* retf */
+ 0x00, 0x00, 0x00, /* */
+ 0x49, 0x50, 0x4c, 0x31 /* "IPL1" */
+};
+
+static PedDiskType pc98_disk_type;
+
+static PedSector chs_to_sector (const PedDevice* dev, int c, int h, int s);
+static void sector_to_chs (const PedDevice* dev, PedSector sector,
+ int* c, int* h, int* s);
+
+/* magic(?) check */
+static int
+pc98_check_magic (const PC98RawTable *part_table)
+{
+ /* check "extended-format" (have partition table?) */
+ if (PED_LE16_TO_CPU(part_table->magic) != PC9800_EXTFMT_MAGIC)
+ return 0;
+
+ return 1;
+}
+
+static int
+pc98_check_ipl_signature (const PC98RawTable *part_table)
+{
+ if (memcmp (part_table->boot_code + 4, "IPL1", 4) == 0)
+ return 1;
+ else if (memcmp (part_table->boot_code + 4, "Linux 98", 8) == 0)
+ return 1;
+ else if (memcmp (part_table->boot_code + 4, "GRUB/98 ", 8) == 0)
+ return 1;
+ else
+ return 0;
+}
+
+static int
+pc98_probe (const PedDevice *dev)
+{
+ PC98RawTable part_table;
+
+ PED_ASSERT (dev != NULL);
+
+ if (dev->sector_size != 512)
+ return 0;
+
+ if (!ped_device_read (dev, &part_table, 0, 2))
+ return 0;
+
+ /* check magic */
+ if (!pc98_check_magic (&part_table))
+ return 0;
+
+ /* check for boot loader signatures */
+ return pc98_check_ipl_signature (&part_table);
+}
+
+static PedDisk*
+pc98_alloc (const PedDevice* dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ return _ped_disk_alloc (dev, &pc98_disk_type);
+}
+
+static PedDisk*
+pc98_duplicate (const PedDisk* disk)
+{
+ return ped_disk_new_fresh (disk->dev, &pc98_disk_type);
+}
+
+static void
+pc98_free (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+
+ _ped_disk_free (disk);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+chs_to_sector (const PedDevice* dev, int c, int h, int s)
+{
+ PED_ASSERT (dev != NULL);
+ return (c * dev->hw_geom.heads + h) * dev->hw_geom.sectors + s;
+}
+
+static void
+sector_to_chs (const PedDevice* dev, PedSector sector, int* c, int* h, int* s)
+{
+ PedSector cyl_size;
+
+ PED_ASSERT (dev != NULL);
+ PED_ASSERT (c != NULL);
+ PED_ASSERT (h != NULL);
+ PED_ASSERT (s != NULL);
+
+ cyl_size = dev->hw_geom.heads * dev->hw_geom.sectors;
+
+ *c = sector / cyl_size;
+ *h = (sector) % cyl_size / dev->hw_geom.sectors;
+ *s = (sector) % cyl_size % dev->hw_geom.sectors;
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+legacy_start (const PedDisk* disk, const PC98RawPartition* raw_part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ return chs_to_sector (disk->dev, PED_LE16_TO_CPU(raw_part->cyl),
+ raw_part->head, raw_part->sector);
+}
+
+static PedSector _GL_ATTRIBUTE_PURE
+legacy_end (const PedDisk* disk, const PC98RawPartition* raw_part)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (raw_part != NULL);
+
+ if (raw_part->end_head == 0 && raw_part->end_sector == 0) {
+ return chs_to_sector (disk->dev,
+ PED_LE16_TO_CPU(raw_part->end_cyl),
+ disk->dev->hw_geom.heads - 1,
+ disk->dev->hw_geom.sectors - 1);
+ } else {
+ return chs_to_sector (disk->dev,
+ PED_LE16_TO_CPU(raw_part->end_cyl),
+ raw_part->end_head,
+ raw_part->end_sector);
+ }
+}
+
+static int
+is_unused_partition(const PC98RawPartition* raw_part)
+{
+ if (raw_part->mid || raw_part->sid
+ || raw_part->ipl_sect
+ || raw_part->ipl_head
+ || PED_LE16_TO_CPU(raw_part->ipl_cyl)
+ || raw_part->sector
+ || raw_part->head
+ || PED_LE16_TO_CPU(raw_part->cyl)
+ || raw_part->end_sector
+ || raw_part->end_head
+ || PED_LE16_TO_CPU(raw_part->end_cyl))
+ return 0;
+ return 1;
+}
+
+static int
+read_table (PedDisk* disk)
+{
+ int i;
+ PC98RawTable table;
+ PedConstraint* constraint_any;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ if (!ped_device_read (disk->dev, (void*) &table, 0, 2))
+ goto error;
+
+ if (!pc98_check_magic(&table)) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_IGNORE_CANCEL,
+ _("Invalid partition table on %s."),
+ disk->dev->path))
+ goto error;
+ }
+
+ for (i = 0; i < MAX_PART_COUNT; i++) {
+ PC98RawPartition* raw_part;
+ PedPartition* part;
+ PC98PartitionData* pc98_data;
+ PedSector part_start;
+ PedSector part_end;
+
+ raw_part = &table.partitions [i];
+
+ if (is_unused_partition(raw_part))
+ continue;
+
+ part_start = legacy_start (disk, raw_part);
+ part_end = legacy_end (disk, raw_part);
+
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ NULL, part_start, part_end);
+ if (!part)
+ goto error;
+ pc98_data = part->disk_specific;
+ PED_ASSERT (pc98_data != NULL);
+
+ pc98_data->system = (raw_part->mid << 8) | raw_part->sid;
+ pc98_data->boot = GET_BIT(raw_part->mid, 7);
+ pc98_data->hidden = !GET_BIT(raw_part->sid, 7);
+
+ ped_partition_set_name (part, raw_part->name);
+
+ pc98_data->ipl_sector = chs_to_sector (
+ disk->dev,
+ PED_LE16_TO_CPU(raw_part->ipl_cyl),
+ raw_part->ipl_head,
+ raw_part->ipl_sect);
+
+ /* hack */
+ if (pc98_data->ipl_sector == part->geom.start)
+ pc98_data->ipl_sector = 0;
+
+ part->num = i + 1;
+
+ if (!ped_disk_add_partition (disk, part, constraint_any))
+ goto error;
+
+ if (part->geom.start != part_start
+ || part->geom.end != part_end) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Partition %d isn't aligned to cylinder "
+ "boundaries. This is still unsupported."),
+ part->num);
+ goto error;
+ }
+
+ part->fs_type = ped_file_system_probe (&part->geom);
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error:
+ ped_disk_delete_all (disk);
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+static int
+pc98_read (PedDisk* disk)
+{
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ ped_disk_delete_all (disk);
+ return read_table (disk);
+}
+
+#ifndef DISCOVER_ONLY
+static int
+fill_raw_part (PC98RawPartition* raw_part, const PedPartition* part)
+{
+ PC98PartitionData* pc98_data;
+ int c, h, s;
+ const char* name;
+
+ PED_ASSERT (raw_part != NULL);
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ pc98_data = part->disk_specific;
+ raw_part->mid = (pc98_data->system >> 8) & 0xFF;
+ raw_part->sid = pc98_data->system & 0xFF;
+
+ SET_BIT(raw_part->mid, 7, pc98_data->boot);
+ SET_BIT(raw_part->sid, 7, !pc98_data->hidden);
+
+ memset (raw_part->name, ' ', sizeof(raw_part->name));
+ name = ped_partition_get_name (part);
+ PED_ASSERT (name != NULL);
+ PED_ASSERT (strlen (name) <= 16);
+ if (!strlen (name) && part->fs_type)
+ name = part->fs_type->name;
+ memcpy (raw_part->name, name, strlen (name));
+
+ sector_to_chs (part->disk->dev, part->geom.start, &c, &h, &s);
+ raw_part->cyl = PED_CPU_TO_LE16(c);
+ raw_part->head = h;
+ raw_part->sector = s;
+
+ if (pc98_data->ipl_sector) {
+ sector_to_chs (part->disk->dev, pc98_data->ipl_sector,
+ &c, &h, &s);
+ raw_part->ipl_cyl = PED_CPU_TO_LE16(c);
+ raw_part->ipl_head = h;
+ raw_part->ipl_sect = s;
+ } else {
+ raw_part->ipl_cyl = raw_part->cyl;
+ raw_part->ipl_head = raw_part->head;
+ raw_part->ipl_sect = raw_part->sector;
+ }
+
+ sector_to_chs (part->disk->dev, part->geom.end, &c, &h, &s);
+ if (h != part->disk->dev->hw_geom.heads - 1
+ || s != part->disk->dev->hw_geom.sectors - 1) {
+ ped_exception_throw (
+ PED_EXCEPTION_NO_FEATURE,
+ PED_EXCEPTION_CANCEL,
+ _("Partition %d isn't aligned to cylinder "
+ "boundaries. This is still unsupported."),
+ part->num);
+ return 0;
+ }
+ raw_part->end_cyl = PED_CPU_TO_LE16(c);
+ raw_part->end_head = 0;
+ raw_part->end_sector = 0;
+
+ return 1;
+}
+
+static int
+pc98_write (const PedDisk* disk)
+{
+ PedPartition* part;
+ int i;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ void *s0;
+ if (!ptt_read_sectors (disk->dev, 0, 2, &s0))
+ return 0;
+ PC98RawTable *table = s0;
+
+ if (!pc98_check_ipl_signature (table)) {
+ memset (table->boot_code, 0, sizeof(table->boot_code));
+ memcpy (table->boot_code, MBR_BOOT_CODE, sizeof(MBR_BOOT_CODE));
+ }
+
+ memset (table->partitions, 0, sizeof (table->partitions));
+ table->magic = PED_CPU_TO_LE16(PC9800_EXTFMT_MAGIC);
+
+ for (i = 1; i <= MAX_PART_COUNT; i++) {
+ part = ped_disk_get_partition (disk, i);
+ if (!part)
+ continue;
+
+ if (!fill_raw_part (&table->partitions [i - 1], part))
+ return 0;
+ }
+
+ int write_ok = ped_device_write (disk->dev, table, 0, 2);
+ free (s0);
+ if (!write_ok)
+ return 0;
+ return ped_device_sync (disk->dev);
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+pc98_partition_new (
+ const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type, PedSector start, PedSector end)
+{
+ PedPartition* part;
+ PC98PartitionData* pc98_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (ped_partition_is_active (part)) {
+ part->disk_specific
+ = pc98_data = ped_malloc (sizeof (PC98PartitionData));
+ if (!pc98_data)
+ goto error_free_part;
+ pc98_data->ipl_sector = 0;
+ pc98_data->hidden = 0;
+ pc98_data->boot = 0;
+ strcpy (pc98_data->name, "");
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return 0;
+}
+
+static PedPartition*
+pc98_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+ PC98PartitionData* new_pc98_data;
+ PC98PartitionData* old_pc98_data;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ old_pc98_data = (PC98PartitionData*) part->disk_specific;
+ new_pc98_data = (PC98PartitionData*) new_part->disk_specific;
+
+ /* ugly, but C is ugly :p */
+ memcpy (new_pc98_data, old_pc98_data, sizeof (PC98PartitionData));
+ return new_part;
+}
+
+static void
+pc98_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part))
+ free (part->disk_specific);
+ free (part);
+}
+
+static int
+pc98_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ PC98PartitionData* pc98_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ pc98_data->system = 0x2062;
+ if (fs_type) {
+ if (!strcmp (fs_type->name, "fat16")) {
+ if (part->geom.length * 512 >= 32 * 1024 * 1024)
+ pc98_data->system = 0x2021;
+ else
+ pc98_data->system = 0x2011;
+ } else if (!strcmp (fs_type->name, "fat32")) {
+ pc98_data->system = 0x2061;
+ } else if (!strcmp (fs_type->name, "ntfs")) {
+ pc98_data->system = 0x2031;
+ } else if (!strncmp (fs_type->name, "ufs", 3)) {
+ pc98_data->system = 0x2044;
+ } else { /* ext2, reiser, xfs, etc. */
+ /* ext2 partitions must be marked boot */
+ pc98_data->boot = 1;
+ pc98_data->system = 0xa062;
+ }
+ }
+
+ if (pc98_data->boot)
+ pc98_data->system |= 0x8000;
+ if (!pc98_data->hidden)
+ pc98_data->system |= 0x0080;
+ return 1;
+}
+
+static int
+pc98_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ PC98PartitionData* pc98_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ pc98_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ pc98_data->hidden = state;
+ return ped_partition_set_system (part, part->fs_type);
+
+ case PED_PARTITION_BOOT:
+ pc98_data->boot = state;
+ return ped_partition_set_system (part, part->fs_type);
+
+ default:
+ return 0;
+ }
+}
+
+static int _GL_ATTRIBUTE_PURE
+pc98_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ PC98PartitionData* pc98_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ pc98_data = part->disk_specific;
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ return pc98_data->hidden;
+
+ case PED_PARTITION_BOOT:
+ return pc98_data->boot;
+
+ default:
+ return 0;
+ }
+}
+
+static int
+pc98_partition_is_flag_available (
+ const PedPartition* part, PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_BOOT:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static void
+pc98_partition_set_name (PedPartition* part, const char* name)
+{
+ PC98PartitionData* pc98_data;
+ int i;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ pc98_data = part->disk_specific;
+
+ strncpy (pc98_data->name, name, 16);
+ pc98_data->name [16] = 0;
+ for (i = strlen (pc98_data->name) - 1; pc98_data->name[i] == ' '; i--)
+ pc98_data->name [i] = 0;
+}
+
+static const char* _GL_ATTRIBUTE_PURE
+pc98_partition_get_name (const PedPartition* part)
+{
+ PC98PartitionData* pc98_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ pc98_data = part->disk_specific;
+
+ return pc98_data->name;
+}
+
+static PedAlignment*
+pc98_get_partition_alignment(const PedDisk *disk)
+{
+ PedSector cylinder_size =
+ disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads;
+
+ return ped_alignment_new(0, cylinder_size);
+}
+
+static PedConstraint*
+_primary_constraint (PedDisk* disk)
+{
+ PedDevice* dev = disk->dev;
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry max_geom;
+ PedSector cylinder_size;
+
+ cylinder_size = dev->hw_geom.sectors * dev->hw_geom.heads;
+
+ if (!ped_alignment_init (&start_align, 0, cylinder_size))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, cylinder_size))
+ return NULL;
+ if (!ped_geometry_init (&max_geom, dev, cylinder_size,
+ dev->length - cylinder_size))
+ return NULL;
+
+ return ped_constraint_new (&start_align, &end_align, &max_geom,
+ &max_geom, 1, dev->length);
+}
+
+static int
+pc98_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ if (_ped_partition_attempt_align (part, constraint,
+ _primary_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+next_primary (PedDisk* disk)
+{
+ int i;
+ for (i=1; i<=MAX_PART_COUNT; i++) {
+ if (!ped_disk_get_partition (disk, i))
+ return i;
+ }
+ return 0;
+}
+
+static int
+pc98_partition_enumerate (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ /* don't re-number a partition */
+ if (part->num != -1)
+ return 1;
+
+ PED_ASSERT (ped_partition_is_active (part));
+
+ part->num = next_primary (part->disk);
+ if (!part->num) {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Can't add another partition."));
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+pc98_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* new_part;
+ PedConstraint* constraint_any = NULL;
+ PedSector cyl_size;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ cyl_size = disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads;
+ new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL,
+ 0, cyl_size - 1);
+ if (!new_part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any)) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+static int
+pc98_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return MAX_PART_COUNT;
+}
+
+static bool
+pc98_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = MAX_PART_COUNT;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (pc98)
+
+static PedDiskOps pc98_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (pc98_write),
+
+ partition_set_name: pc98_partition_set_name,
+ partition_get_name: pc98_partition_get_name,
+
+ get_partition_alignment: pc98_get_partition_alignment,
+
+ PT_op_function_initializers (pc98)
+};
+
+static PedDiskType pc98_disk_type = {
+ next: NULL,
+ name: "pc98",
+ ops: &pc98_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME
+};
+
+void
+ped_disk_pc98_init ()
+{
+ PED_ASSERT (sizeof (PC98RawTable) == 512 * 2);
+ ped_disk_type_register (&pc98_disk_type);
+}
+
+void
+ped_disk_pc98_done ()
+{
+ ped_disk_type_unregister (&pc98_disk_type);
+}
diff --git a/libparted/labels/pt-common.h b/libparted/labels/pt-common.h
new file mode 100644
index 0000000..76f06e3
--- /dev/null
+++ b/libparted/labels/pt-common.h
@@ -0,0 +1,55 @@
+/* Factor some of the duplication out of *.c. */
+
+#ifdef DISCOVER_ONLY
+# define NULL_IF_DISCOVER_ONLY(val) NULL
+#else
+# define NULL_IF_DISCOVER_ONLY(val) val
+#endif
+
+#define PT_define_limit_functions(PT_type) \
+ \
+static bool \
+PT_type##_partition_check (const PedPartition *part) \
+{ \
+ return ptt_partition_max_start_len (#PT_type, part); \
+} \
+ \
+static PedSector \
+PT_type##_partition_max_start_sector (void) \
+{ \
+ PedSector max; \
+ int err = ptt_partition_max_start_sector (#PT_type, &max); \
+ PED_ASSERT (err == 0); \
+ return max; \
+} \
+ \
+static PedSector \
+PT_type##_partition_max_length (void) \
+{ \
+ PedSector max; \
+ int err = ptt_partition_max_length (#PT_type, &max); \
+ PED_ASSERT (err == 0); \
+ return max; \
+}
+
+#define PT_op_function_initializers(PT_type) \
+probe: PT_type##_probe, \
+alloc: PT_type##_alloc, \
+duplicate: PT_type##_duplicate, \
+free: PT_type##_free, \
+read: PT_type##_read, \
+partition_new: PT_type##_partition_new, \
+partition_duplicate: PT_type##_partition_duplicate, \
+partition_set_flag: PT_type##_partition_set_flag, \
+partition_get_flag: PT_type##_partition_get_flag, \
+partition_set_system: PT_type##_partition_set_system, \
+partition_is_flag_available: PT_type##_partition_is_flag_available, \
+partition_align: PT_type##_partition_align, \
+partition_destroy: PT_type##_partition_destroy, \
+partition_enumerate: PT_type##_partition_enumerate, \
+alloc_metadata: PT_type##_alloc_metadata, \
+get_max_primary_partition_count: PT_type##_get_max_primary_partition_count, \
+get_max_supported_partition_count:PT_type##_get_max_supported_partition_count,\
+partition_check: PT_type##_partition_check, \
+max_length: PT_type##_partition_max_length, \
+max_start_sector: PT_type##_partition_max_start_sector
diff --git a/libparted/labels/pt-limit.c b/libparted/labels/pt-limit.c
new file mode 100644
index 0000000..f1c7a09
--- /dev/null
+++ b/libparted/labels/pt-limit.c
@@ -0,0 +1,161 @@
+/* ANSI-C code produced by gperf version 3.1 */
+/* Command-line: gperf -C -N pt_limit_lookup -n -t -s 6 -k '*' --language=ANSI-C pt-limit.gperf */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646. */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
+#endif
+
+#line 1 "pt-limit.gperf"
+struct partition_limit
+{
+ char const *name;
+ uint64_t max_start_sector;
+ uint64_t max_length;
+};
+
+#define TOTAL_KEYWORDS 11
+#define MIN_WORD_LENGTH 3
+#define MAX_WORD_LENGTH 5
+#define MIN_HASH_VALUE 5
+#define MAX_HASH_VALUE 55
+/* maximum key range = 51, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+hash (register const char *str, register size_t len)
+{
+ static const unsigned char asso_values[] =
+ {
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 10, 5, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 5, 40, 40,
+ 5, 56, 56, 5, 20, 0, 56, 56, 15, 0,
+ 15, 10, 0, 56, 0, 5, 0, 10, 15, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 56
+ };
+ register unsigned int hval = 0;
+
+ switch (len)
+ {
+ default:
+ hval += asso_values[(unsigned char)str[4]];
+ /*FALLTHROUGH*/
+ case 4:
+ hval += asso_values[(unsigned char)str[3]];
+ /*FALLTHROUGH*/
+ case 3:
+ hval += asso_values[(unsigned char)str[2]];
+ /*FALLTHROUGH*/
+ case 2:
+ hval += asso_values[(unsigned char)str[1]];
+ /*FALLTHROUGH*/
+ case 1:
+ hval += asso_values[(unsigned char)str[0]];
+ break;
+ }
+ return hval;
+}
+
+const struct partition_limit *
+pt_limit_lookup (register const char *str, register size_t len)
+{
+ static const struct partition_limit wordlist[] =
+ {
+ {""}, {""}, {""}, {""}, {""},
+#line 10 "pt-limit.gperf"
+ {"gpt",UINT64_MAX,UINT64_MAX},
+ {""}, {""}, {""}, {""},
+#line 28 "pt-limit.gperf"
+ {"atari",INT32_MAX,INT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 27 "pt-limit.gperf"
+ {"amiga",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 8 "pt-limit.gperf"
+ {"dasd",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 12 "pt-limit.gperf"
+ {"msdos",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 18 "pt-limit.gperf"
+ {"sun",128ULL*UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 23 "pt-limit.gperf"
+ {"loop",UINT64_MAX,UINT64_MAX},
+ {""}, {""}, {""}, {""},
+#line 9 "pt-limit.gperf"
+ {"dvh",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 11 "pt-limit.gperf"
+ {"mac",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 20 "pt-limit.gperf"
+ {"bsd",UINT32_MAX,UINT32_MAX},
+ {""}, {""}, {""}, {""},
+#line 24 "pt-limit.gperf"
+ {"pc98",UINT32_MAX,UINT32_MAX}
+ };
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register unsigned int key = hash (str, len);
+
+ if (key <= MAX_HASH_VALUE)
+ {
+ register const char *s = wordlist[key].name;
+
+ if (*str == *s && !strcmp (str + 1, s + 1))
+ return &wordlist[key];
+ }
+ }
+ return 0;
+}
diff --git a/libparted/labels/pt-limit.gperf b/libparted/labels/pt-limit.gperf
new file mode 100644
index 0000000..d5a580d
--- /dev/null
+++ b/libparted/labels/pt-limit.gperf
@@ -0,0 +1,28 @@
+struct partition_limit
+{
+ char const *name;
+ uint64_t max_start_sector;
+ uint64_t max_length;
+};
+%%
+dasd,UINT32_MAX,UINT32_MAX
+dvh,UINT32_MAX,UINT32_MAX
+gpt,UINT64_MAX,UINT64_MAX
+mac,UINT32_MAX,UINT32_MAX
+msdos,UINT32_MAX,UINT32_MAX
+#
+# Sun partitions are cylinder-aligned, and it looks like there are 128 sectors
+# in a cylinder. FIXME verify. Possibly compute sectors-per-cylinder, given
+# u_int16_t ntrks; /* Tracks per cylinder */
+# u_int16_t nsect; /* Sectors per track */
+sun,128ULL*UINT32_MAX,UINT32_MAX
+#
+bsd,UINT32_MAX,UINT32_MAX
+# aix,UINT32_MAX,UINT32_MAX
+# In reality, loop labels have no particular limit.
+loop,UINT64_MAX,UINT64_MAX
+pc98,UINT32_MAX,UINT32_MAX
+#
+# FIXME: not verified. looks like these are cylinder aligned, too
+amiga,UINT32_MAX,UINT32_MAX
+atari,INT32_MAX,INT32_MAX
diff --git a/libparted/labels/pt-tools.c b/libparted/labels/pt-tools.c
new file mode 100644
index 0000000..add4c45
--- /dev/null
+++ b/libparted/labels/pt-tools.c
@@ -0,0 +1,186 @@
+/* partition table tools
+ Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include "pt-tools.h"
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static char zero[16 * 1024];
+
+/* Write a single sector to DISK, filling the first BUFLEN
+ bytes of that sector with data from BUF, and NUL-filling
+ any remaining bytes. Return nonzero to indicate success,
+ zero otherwise. */
+int
+ptt_write_sector (PedDisk const *disk, void const *buf, size_t buflen)
+{
+ PED_ASSERT (buflen <= disk->dev->sector_size);
+ /* Allocate a big enough buffer for ped_device_write. */
+ char *s0 = ped_malloc (disk->dev->sector_size);
+ if (s0 == NULL)
+ return 0;
+ /* Copy boot_code into the first part. */
+ memcpy (s0, buf, buflen);
+ char *p = s0 + buflen;
+ /* Fill the rest with zeros. */
+ memset (p, 0, disk->dev->sector_size - buflen);
+ int write_ok = ped_device_write (disk->dev, s0, 0, 1);
+ free (s0);
+
+ return write_ok;
+}
+
+/* Read N sectors, starting with sector SECTOR_NUM (which has length
+ DEV->sector_size) into malloc'd storage. If the read fails, free
+ the memory and return zero without modifying *BUF. Otherwise, set
+ *BUF to the new buffer and return 1. */
+int
+ptt_read_sectors (PedDevice const *dev, PedSector start_sector,
+ PedSector n_sectors, void **buf)
+{
+ char *b = ped_malloc (n_sectors * dev->sector_size);
+ PED_ASSERT (b != NULL);
+ if (!ped_device_read (dev, b, start_sector, n_sectors)) {
+ free (b);
+ return 0;
+ }
+ *buf = b;
+ return 1;
+}
+
+/* Read sector, SECTOR_NUM (which has length DEV->sector_size) into malloc'd
+ storage. If the read fails, free the memory and return zero without
+ modifying *BUF. Otherwise, set *BUF to the new buffer and return 1. */
+int
+ptt_read_sector (PedDevice const *dev, PedSector sector_num, void **buf)
+{
+ return ptt_read_sectors (dev, sector_num, 1, buf);
+}
+
+/* Zero N sectors of DEV, starting with START.
+ Return nonzero to indicate success, zero otherwise. */
+int
+ptt_clear_sectors (PedDevice *dev, PedSector start, PedSector n)
+{
+ PED_ASSERT (dev->sector_size <= sizeof zero);
+ PedSector n_z_sectors = sizeof zero / dev->sector_size;
+ PedSector n_full = n / n_z_sectors;
+ PedSector i;
+ for (i = 0; i < n_full; i++)
+ {
+ if (!ped_device_write (dev, zero, start + n_z_sectors * i, n_z_sectors))
+ return 0;
+ }
+
+ PedSector rem = n - n_z_sectors * i;
+ return (rem == 0
+ ? 1 : ped_device_write (dev, zero, start + n_z_sectors * i, rem));
+}
+
+/* Zero N sectors of GEOM->dev, starting with GEOM->start + START.
+ Return nonzero to indicate success, zero otherwise. */
+int
+ptt_geom_clear_sectors (PedGeometry *geom, PedSector start, PedSector n)
+{
+ return ptt_clear_sectors (geom->dev, geom->start + start, n);
+}
+
+#define pt_limit_lookup _GL_ATTRIBUTE_PURE __pt_limit_lookup
+#include "pt-limit.c"
+
+/* Throw an exception and return 0 if PART's starting sector number or
+ its length is greater than the maximum allowed value for LABEL_TYPE.
+ Otherwise, return 1. */
+int
+ptt_partition_max_start_len (char const *pt_type, const PedPartition *part)
+{
+ struct partition_limit const *pt_lim
+ = __pt_limit_lookup (pt_type, strlen (pt_type));
+
+ /* If we don't have info on the type, return "true". */
+ if (pt_lim == NULL)
+ return 1;
+
+ /* If the length in sectors exceeds the limit, you lose. */
+ if (part->geom.length > pt_lim->max_length)
+ {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("partition length of %jd sectors exceeds"
+ " the %s-partition-table-imposed maximum"
+ " of %jd"),
+ part->geom.length,
+ pt_type,
+ pt_lim->max_length);
+ return 0;
+ }
+
+ /* If the starting sector exceeds the limit, you lose. */
+ if (part->geom.start > pt_lim->max_start_sector) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("starting sector number, %jd exceeds"
+ " the %s-partition-table-imposed maximum"
+ " of %jd"),
+ part->geom.start,
+ pt_type,
+ pt_lim->max_start_sector);
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Set *MAX to the largest representation-imposed starting sector number
+ of a partition of type PT_TYPE and return 0. If PT_TYPE is not
+ recognized, return -1. */
+int
+ptt_partition_max_start_sector (char const *pt_type, PedSector *max)
+{
+ struct partition_limit const *pt_lim
+ = __pt_limit_lookup (pt_type, strlen (pt_type));
+ if (pt_lim == NULL)
+ return -1;
+
+ *max = pt_lim->max_start_sector;
+ return 0;
+}
+
+/* Set *MAX to the maximum representable length of a partition of type
+ PT_TYPE and return 0. If PT_TYPE is not recognized, return -1. */
+int
+ptt_partition_max_length (char const *pt_type, PedSector *max)
+{
+ struct partition_limit const *pt_lim
+ = __pt_limit_lookup (pt_type, strlen (pt_type));
+ if (pt_lim == NULL)
+ return -1;
+
+ *max = pt_lim->max_length;
+ return 0;
+}
diff --git a/libparted/labels/pt-tools.h b/libparted/labels/pt-tools.h
new file mode 100644
index 0000000..34562f7
--- /dev/null
+++ b/libparted/labels/pt-tools.h
@@ -0,0 +1,31 @@
+/* libparted - a library for manipulating disk partitions
+ Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stddef.h>
+#include <parted/disk.h>
+
+int ptt_write_sector (PedDisk const *disk, void const *buf, size_t buflen);
+int ptt_read_sector (PedDevice const *dev, PedSector sector_num, void **buf);
+int ptt_read_sectors (PedDevice const *dev, PedSector start_sector,
+ PedSector n_sectors, void **buf);
+int ptt_clear_sectors (PedDevice *dev, PedSector start, PedSector count);
+int ptt_geom_clear_sectors (PedGeometry *geom, PedSector start,
+ PedSector count);
+int ptt_partition_max_start_len (char const *label_type,
+ const PedPartition *part);
+
+int ptt_partition_max_start_sector (char const *pt_type, PedSector *max);
+int ptt_partition_max_length (char const *pt_type, PedSector *max);
diff --git a/libparted/labels/rdb.c b/libparted/labels/rdb.c
new file mode 100644
index 0000000..499d385
--- /dev/null
+++ b/libparted/labels/rdb.c
@@ -0,0 +1,1167 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ disk_amiga.c - libparted module to manipulate amiga RDB partition tables.
+ Copyright (C) 2000-2001, 2004, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Sven Luther <luther@debian.org>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+
+#include "pt-tools.h"
+
+#ifndef MAX
+# define MAX(a,b) ((a) < (b) ? (b) : (a))
+#endif
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+
+/* String manipulation */
+static void _amiga_set_bstr (const char *cstr, char *bstr, int maxsize) {
+ int size = strlen (cstr);
+ int i;
+
+ if (size >= maxsize) return;
+ bstr[0] = size;
+ for (i = 0; i<size; i++) bstr[i+1] = cstr[i];
+}
+static const char * _amiga_get_bstr (char * bstr) {
+ char * cstr = bstr + 1;
+ int size = bstr[0];
+
+ cstr[size] = '\0';
+ return cstr;
+}
+
+#define IDNAME_RIGIDDISK (uint32_t)0x5244534B /* 'RDSK' */
+#define IDNAME_BADBLOCK (uint32_t)0x42414442 /* 'BADB' */
+#define IDNAME_PARTITION (uint32_t)0x50415254 /* 'PART' */
+#define IDNAME_FILESYSHEADER (uint32_t)0x46534844 /* 'FSHD' */
+#define IDNAME_LOADSEG (uint32_t)0x4C534547 /* 'LSEG' */
+#define IDNAME_BOOT (uint32_t)0x424f4f54 /* 'BOOT' */
+#define IDNAME_FREE (uint32_t)0xffffffff
+
+static const char *
+_amiga_block_id (uint32_t id) {
+ switch (id) {
+ case IDNAME_RIGIDDISK :
+ return "RDSK";
+ case IDNAME_BADBLOCK :
+ return "BADB";
+ case IDNAME_PARTITION :
+ return "PART";
+ case IDNAME_FILESYSHEADER :
+ return "FSHD";
+ case IDNAME_LOADSEG :
+ return "LSEG";
+ case IDNAME_BOOT :
+ return "BOOT";
+ case IDNAME_FREE :
+ return "<free>";
+ default :
+ return "<unknown>";
+ }
+}
+
+struct AmigaIds {
+ uint32_t ID;
+ struct AmigaIds *next;
+};
+
+static struct AmigaIds *
+_amiga_add_id (uint32_t id, struct AmigaIds *ids) {
+ struct AmigaIds *newid;
+
+ if ((newid=ped_malloc(sizeof (struct AmigaIds)))==NULL)
+ return 0;
+ newid->ID = id;
+ newid->next = ids;
+ return newid;
+}
+
+static void
+_amiga_free_ids (struct AmigaIds *ids) {
+ struct AmigaIds *current, *next;
+
+ for (current = ids; current != NULL; current = next) {
+ next = current->next;
+ free (current);
+ }
+}
+static int _GL_ATTRIBUTE_PURE
+_amiga_id_in_list (uint32_t id, struct AmigaIds *ids) {
+ struct AmigaIds *current;
+
+ for (current = ids; current != NULL; current = current->next) {
+ if (id == current->ID)
+ return 1;
+ }
+ return 0;
+}
+
+struct AmigaBlock {
+ uint32_t amiga_ID; /* Identifier 32 bit word */
+ uint32_t amiga_SummedLongss; /* Size of the structure for checksums */
+ int32_t amiga_ChkSum; /* Checksum of the structure */
+};
+#define AMIGA(pos) ((struct AmigaBlock *)(pos))
+
+static int
+_amiga_checksum (struct AmigaBlock *blk) {
+ uint32_t *rdb = (uint32_t *) blk;
+ uint32_t sum;
+ int i, end;
+
+ sum = PED_BE32_TO_CPU (rdb[0]);
+ end = PED_BE32_TO_CPU (rdb[1]);
+
+ if (end > PED_SECTOR_SIZE_DEFAULT) end = PED_SECTOR_SIZE_DEFAULT;
+
+ for (i = 1; i < end; i++) sum += PED_BE32_TO_CPU (rdb[i]);
+
+ return sum;
+}
+
+static void
+_amiga_calculate_checksum (struct AmigaBlock *blk) {
+ blk->amiga_ChkSum = PED_CPU_TO_BE32(
+ PED_BE32_TO_CPU(blk->amiga_ChkSum) -
+ _amiga_checksum((struct AmigaBlock *) blk));
+ return;
+}
+
+static struct AmigaBlock *
+_amiga_read_block (const PedDevice *dev, struct AmigaBlock *blk,
+ PedSector block, struct AmigaIds *ids)
+{
+ if (!ped_device_read (dev, blk, block, 1))
+ return NULL;
+ if (ids && !_amiga_id_in_list(PED_BE32_TO_CPU(blk->amiga_ID), ids))
+ return NULL;
+ if (_amiga_checksum (blk) != 0) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL,
+ _("%s : Bad checksum on block %llu of type %s."),
+ __func__, block, _amiga_block_id(PED_BE32_TO_CPU(blk->amiga_ID))))
+ {
+ case PED_EXCEPTION_CANCEL :
+ return NULL;
+ case PED_EXCEPTION_FIX :
+ _amiga_calculate_checksum(AMIGA(blk));
+ if (!ped_device_write ((PedDevice*)dev, blk, block, 1))
+ return NULL;
+ /* FALLTHROUGH */
+ case PED_EXCEPTION_IGNORE :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return blk;
+ }
+ }
+ return blk;
+}
+
+struct RigidDiskBlock {
+ uint32_t rdb_ID; /* Identifier 32 bit word : 'RDSK' */
+ uint32_t rdb_SummedLongs; /* Size of the structure for checksums */
+ int32_t rdb_ChkSum; /* Checksum of the structure */
+ uint32_t rdb_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t rdb_BlockBytes; /* Size of disk blocks */
+ uint32_t rdb_Flags; /* RDB Flags */
+ /* block list heads */
+ uint32_t rdb_BadBlockList; /* Bad block list */
+ uint32_t rdb_PartitionList; /* Partition list */
+ uint32_t rdb_FileSysHeaderList; /* File system header list */
+ uint32_t rdb_DriveInit; /* Drive specific init code */
+ uint32_t rdb_BootBlockList; /* Amiga OS 4 Boot Blocks */
+ uint32_t rdb_Reserved1[5]; /* Unused word, need to be set to $ffffffff */
+ /* physical drive characteristics */
+ uint32_t rdb_Cylinders; /* Number of the cylinders of the drive */
+ uint32_t rdb_Sectors; /* Number of sectors of the drive */
+ uint32_t rdb_Heads; /* Number of heads of the drive */
+ uint32_t rdb_Interleave; /* Interleave */
+ uint32_t rdb_Park; /* Head parking cylinder */
+ uint32_t rdb_Reserved2[3]; /* Unused word, need to be set to $ffffffff */
+ uint32_t rdb_WritePreComp; /* Starting cylinder of write precompensation */
+ uint32_t rdb_ReducedWrite; /* Starting cylinder of reduced write current */
+ uint32_t rdb_StepRate; /* Step rate of the drive */
+ uint32_t rdb_Reserved3[5]; /* Unused word, need to be set to $ffffffff */
+ /* logical drive characteristics */
+ uint32_t rdb_RDBBlocksLo; /* low block of range reserved for hardblocks */
+ uint32_t rdb_RDBBlocksHi; /* high block of range for these hardblocks */
+ uint32_t rdb_LoCylinder; /* low cylinder of partitionable disk area */
+ uint32_t rdb_HiCylinder; /* high cylinder of partitionable data area */
+ uint32_t rdb_CylBlocks; /* number of blocks available per cylinder */
+ uint32_t rdb_AutoParkSeconds; /* zero for no auto park */
+ uint32_t rdb_HighRDSKBlock; /* highest block used by RDSK */
+ /* (not including replacement bad blocks) */
+ uint32_t rdb_Reserved4;
+ /* drive identification */
+ char rdb_DiskVendor[8];
+ char rdb_DiskProduct[16];
+ char rdb_DiskRevision[4];
+ char rdb_ControllerVendor[8];
+ char rdb_ControllerProduct[16];
+ char rdb_ControllerRevision[4];
+ uint32_t rdb_Reserved5[10];
+};
+
+#define RDSK(pos) ((struct RigidDiskBlock *)(pos))
+
+#define AMIGA_RDB_NOT_FOUND ((uint32_t)0xffffffff)
+#define RDB_LOCATION_LIMIT 16
+#define AMIGA_MAX_PARTITIONS 128
+#define MAX_RDB_BLOCK (RDB_LOCATION_LIMIT + 2 * AMIGA_MAX_PARTITIONS + 2)
+
+static uint32_t
+_amiga_find_rdb (const PedDevice *dev, struct RigidDiskBlock *rdb) {
+ int i;
+ struct AmigaIds *ids;
+
+ ids = _amiga_add_id (IDNAME_RIGIDDISK, NULL);
+
+ for (i = 0; i<RDB_LOCATION_LIMIT; i++) {
+ if (!_amiga_read_block (dev, AMIGA(rdb), i, ids)) {
+ continue;
+ }
+ if (PED_BE32_TO_CPU (rdb->rdb_ID) == IDNAME_RIGIDDISK) {
+ _amiga_free_ids (ids);
+ return i;
+ }
+ }
+ _amiga_free_ids (ids);
+ return AMIGA_RDB_NOT_FOUND;
+}
+
+struct PartitionBlock {
+ uint32_t pb_ID; /* Identifier 32 bit word : 'PART' */
+ uint32_t pb_SummedLongs; /* Size of the structure for checksums */
+ int32_t pb_ChkSum; /* Checksum of the structure */
+ uint32_t pb_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t pb_Next; /* Block number of the next PartitionBlock */
+ uint32_t pb_Flags; /* Part Flags (NOMOUNT and BOOTABLE) */
+ uint32_t pb_Reserved1[2];
+ uint32_t pb_DevFlags; /* Preferred flags for OpenDevice */
+ char pb_DriveName[32]; /* Preferred DOS device name: BSTR form */
+ uint32_t pb_Reserved2[15];
+ uint32_t de_TableSize; /* Size of Environment vector */
+ /* Size of the blocks in 32 bit words, usually 128 */
+ uint32_t de_SizeBlock;
+ uint32_t de_SecOrg; /* Not used; must be 0 */
+ uint32_t de_Surfaces; /* Number of heads (surfaces) */
+ /* Disk sectors per block, used with SizeBlock, usually 1 */
+ uint32_t de_SectorPerBlock;
+ uint32_t de_BlocksPerTrack; /* Blocks per track. drive specific */
+ uint32_t de_Reserved; /* DOS reserved blocks at start of partition. */
+ uint32_t de_PreAlloc; /* DOS reserved blocks at end of partition */
+ uint32_t de_Interleave; /* Not used, usually 0 */
+ uint32_t de_LowCyl; /* First cylinder of the partition */
+ uint32_t de_HighCyl; /* Last cylinder of the partition */
+ uint32_t de_NumBuffers; /* Initial # DOS of buffers. */
+ uint32_t de_BufMemType; /* Type of mem to allocate for buffers */
+ uint32_t de_MaxTransfer; /* Max number of bytes to transfer at a time */
+ uint32_t de_Mask; /* Address Mask to block out certain memory */
+ int32_t de_BootPri; /* Boot priority for autoboot */
+ uint32_t de_DosType; /* Dostype of the file system */
+ uint32_t de_Baud; /* Baud rate for serial handler */
+ uint32_t de_Control; /* Control word for handler/filesystem */
+ uint32_t de_BootBlocks; /* Number of blocks containing boot code */
+ uint32_t pb_EReserved[12];
+};
+
+#define PART(pos) ((struct PartitionBlock *)(pos))
+
+#define PBFB_BOOTABLE 0 /* this partition is intended to be bootable */
+#define PBFF_BOOTABLE 1L /* (expected directories and files exist) */
+#define PBFB_NOMOUNT 1 /* do not mount this partition (e.g. manually */
+#define PBFF_NOMOUNT 2L /* mounted, but space reserved here) */
+#define PBFB_RAID 2 /* this partition is intended to be part of */
+#define PBFF_RAID 4L /* a RAID array */
+#define PBFB_LVM 3 /* this partition is intended to be part of */
+#define PBFF_LVM 8L /* a LVM volume group */
+
+
+struct LinkedBlock {
+ uint32_t lk_ID; /* Identifier 32 bit word */
+ uint32_t lk_SummedLongs; /* Size of the structure for checksums */
+ int32_t lk_ChkSum; /* Checksum of the structure */
+ uint32_t pb_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t lk_Next; /* Block number of the next PartitionBlock */
+};
+struct Linked2Block {
+ uint32_t lk2_ID; /* Identifier 32 bit word */
+ uint32_t lk2_SummedLongs; /* Size of the structure for checksums */
+ int32_t lk2_ChkSum; /* Checksum of the structure */
+ uint32_t lk2_HostID; /* SCSI Target ID of host, not really used */
+ uint32_t lk2_Next; /* Block number of the next PartitionBlock */
+ uint32_t lk2_Reverved[13];
+ uint32_t lk2_Linked; /* Secondary linked list */
+};
+#define LINK_END (uint32_t)0xffffffff
+#define LNK(pos) ((struct LinkedBlock *)(pos))
+#define LNK2(pos) ((struct Linked2Block *)(pos))
+
+
+static PedDiskType amiga_disk_type;
+
+static int
+amiga_probe (const PedDevice *dev)
+{
+ struct RigidDiskBlock *rdb;
+ uint32_t found;
+ PED_ASSERT(dev != NULL);
+
+ if ((rdb=RDSK(ped_malloc(dev->sector_size)))==NULL)
+ return 0;
+ found = _amiga_find_rdb (dev, rdb);
+ free (rdb);
+
+ return (found == AMIGA_RDB_NOT_FOUND ? 0 : 1);
+}
+
+static PedDisk*
+amiga_alloc (const PedDevice* dev)
+{
+ PedDisk *disk;
+ struct RigidDiskBlock *rdb;
+ PedSector cyl_size;
+ int highest_cylinder, highest_block;
+
+ PED_ASSERT(dev != NULL);
+ cyl_size = dev->hw_geom.sectors * dev->hw_geom.heads;
+
+ if (!(disk = _ped_disk_alloc (dev, &amiga_disk_type)))
+ return NULL;
+
+ if (!(disk->disk_specific = ped_malloc (disk->dev->sector_size))) {
+ free (disk);
+ return NULL;
+ }
+ rdb = disk->disk_specific;
+
+ /* Upon failed assertion this does leak. That's fine, because
+ if the assertion fails, you have bigger problems than this leak. */
+ PED_ASSERT(sizeof(*rdb) <= disk->dev->sector_size);
+
+ memset(rdb, 0, disk->dev->sector_size);
+
+ rdb->rdb_ID = PED_CPU_TO_BE32 (IDNAME_RIGIDDISK);
+ rdb->rdb_SummedLongs = PED_CPU_TO_BE32 (64);
+ rdb->rdb_HostID = PED_CPU_TO_BE32 (0);
+ rdb->rdb_BlockBytes = PED_CPU_TO_BE32 (disk->dev->sector_size);
+ rdb->rdb_Flags = PED_CPU_TO_BE32 (0);
+
+ /* Block lists */
+ rdb->rdb_BadBlockList = PED_CPU_TO_BE32 (LINK_END);
+ rdb->rdb_PartitionList = PED_CPU_TO_BE32 (LINK_END);
+ rdb->rdb_FileSysHeaderList = PED_CPU_TO_BE32 (LINK_END);
+ rdb->rdb_DriveInit = PED_CPU_TO_BE32 (LINK_END);
+ rdb->rdb_BootBlockList = PED_CPU_TO_BE32 (LINK_END);
+
+ /* Physical drive characteristics */
+ rdb->rdb_Cylinders = PED_CPU_TO_BE32 (dev->hw_geom.cylinders);
+ rdb->rdb_Sectors = PED_CPU_TO_BE32 (dev->hw_geom.sectors);
+ rdb->rdb_Heads = PED_CPU_TO_BE32 (dev->hw_geom.heads);
+ rdb->rdb_Interleave = PED_CPU_TO_BE32 (0);
+ rdb->rdb_Park = PED_CPU_TO_BE32 (dev->hw_geom.cylinders);
+ rdb->rdb_WritePreComp = PED_CPU_TO_BE32 (dev->hw_geom.cylinders);
+ rdb->rdb_ReducedWrite = PED_CPU_TO_BE32 (dev->hw_geom.cylinders);
+ rdb->rdb_StepRate = PED_CPU_TO_BE32 (0);
+
+ highest_cylinder = 1 + MAX_RDB_BLOCK / cyl_size;
+ highest_block = highest_cylinder * cyl_size - 1;
+
+ /* Logical driver characteristics */
+ rdb->rdb_RDBBlocksLo = PED_CPU_TO_BE32 (0);
+ rdb->rdb_RDBBlocksHi = PED_CPU_TO_BE32 (highest_block);
+ rdb->rdb_LoCylinder = PED_CPU_TO_BE32 (highest_cylinder);
+ rdb->rdb_HiCylinder = PED_CPU_TO_BE32 (dev->hw_geom.cylinders -1);
+ rdb->rdb_CylBlocks = PED_CPU_TO_BE32 (cyl_size);
+ rdb->rdb_AutoParkSeconds = PED_CPU_TO_BE32 (0);
+ /* rdb_HighRDSKBlock will only be set when writing */
+ rdb->rdb_HighRDSKBlock = PED_CPU_TO_BE32 (0);
+
+ /* Driver identification */
+ _amiga_set_bstr("", rdb->rdb_DiskVendor, 8);
+ _amiga_set_bstr(dev->model, rdb->rdb_DiskProduct, 16);
+ _amiga_set_bstr("", rdb->rdb_DiskRevision, 4);
+ _amiga_set_bstr("", rdb->rdb_ControllerVendor, 8);
+ _amiga_set_bstr("", rdb->rdb_ControllerProduct, 16);
+ _amiga_set_bstr("", rdb->rdb_ControllerRevision, 4);
+
+ /* And calculate the checksum */
+ _amiga_calculate_checksum ((struct AmigaBlock *) rdb);
+
+ return disk;
+}
+
+static PedDisk*
+amiga_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ struct RigidDiskBlock * new_rdb;
+ struct RigidDiskBlock * old_rdb;
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+ PED_ASSERT(disk->disk_specific != NULL);
+
+ old_rdb = (struct RigidDiskBlock *) disk->disk_specific;
+
+ if (!(new_disk = ped_disk_new_fresh (disk->dev, &amiga_disk_type)))
+ return NULL;
+
+ new_rdb = (struct RigidDiskBlock *) new_disk->disk_specific;
+ memcpy (new_rdb, old_rdb, 256);
+ return new_disk;
+}
+
+static void
+amiga_free (PedDisk* disk)
+{
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->disk_specific != NULL);
+
+ free (disk->disk_specific);
+ _ped_disk_free (disk);
+}
+
+static int
+_amiga_loop_check (uint32_t block, uint32_t * blocklist, uint32_t max)
+{
+ uint32_t i;
+
+ for (i = 0; i < max; i++)
+ if (block == blocklist[i]) {
+ /* We are looping, let's stop. */
+ return 1;
+ }
+ blocklist[max] = block;
+ return 0;
+}
+
+/* We have already allocated a rdb, we are now reading it from the disk */
+static int
+amiga_read (PedDisk* disk)
+{
+ struct RigidDiskBlock *rdb;
+ struct PartitionBlock *partition;
+ uint32_t partblock;
+ uint32_t partlist[AMIGA_MAX_PARTITIONS];
+ PedSector cylblocks;
+ int i;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+ PED_ASSERT(disk->dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
+ PED_ASSERT(disk->disk_specific != NULL);
+ rdb = RDSK(disk->disk_specific);
+
+ if (_amiga_find_rdb (disk->dev, rdb) == AMIGA_RDB_NOT_FOUND) {
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s : Didn't find rdb block, should never happen."), __func__);
+ return 0;
+ }
+
+ /* Let's copy the rdb read geometry to the dev */
+ /* FIXME: should this go into disk->dev->bios_geom instead? */
+ disk->dev->hw_geom.cylinders = PED_BE32_TO_CPU (rdb->rdb_Cylinders);
+ disk->dev->hw_geom.heads = PED_BE32_TO_CPU (rdb->rdb_Heads);
+ disk->dev->hw_geom.sectors = PED_BE32_TO_CPU (rdb->rdb_Sectors);
+ cylblocks = (PedSector) PED_BE32_TO_CPU (rdb->rdb_Heads) *
+ (PedSector) PED_BE32_TO_CPU (rdb->rdb_Sectors);
+
+ /* Remove all partitions in the former in memory table */
+ ped_disk_delete_all (disk);
+
+ /* Let's allocate a partition block */
+ if (!(partition = ped_malloc (disk->dev->sector_size)))
+ return 0;
+
+ /* We initialize the hardblock free list to detect loops */
+ for (i = 0; i < AMIGA_MAX_PARTITIONS; i++) partlist[i] = LINK_END;
+
+ for (i = 1, partblock = PED_BE32_TO_CPU(rdb->rdb_PartitionList);
+ i < AMIGA_MAX_PARTITIONS && partblock != LINK_END;
+ i++, partblock = PED_BE32_TO_CPU(partition->pb_Next))
+ {
+ PedPartition *part;
+ PedSector start, end;
+
+ /* Let's look for loops in the partition table */
+ if (_amiga_loop_check(partblock, partlist, i)) {
+ break;
+ }
+
+ /* Let's allocate and read a partition block to get its geometry*/
+ if (!_amiga_read_block (disk->dev, AMIGA(partition),
+ (PedSector)partblock, NULL)) {
+ free(partition);
+ return 0;
+ }
+
+ start = ((PedSector) PED_BE32_TO_CPU (partition->de_LowCyl))
+ * cylblocks;
+ end = (((PedSector) PED_BE32_TO_CPU (partition->de_HighCyl))
+ + 1) * cylblocks - 1;
+
+ /* We can now construct a new partition */
+ if (!(part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ NULL, start, end))) {
+ free(partition);
+ return 0;
+ }
+ /* And copy over the partition block */
+ memcpy(part->disk_specific, partition, 256);
+
+ part->num = i;
+ part->type = 0;
+ /* Let's probe what file system is present on the disk */
+ part->fs_type = ped_file_system_probe (&part->geom);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ if (constraint_exact == NULL)
+ return 0;
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok) {
+ ped_partition_destroy(part);
+ free(partition);
+ return 0;
+ }
+ }
+ free(partition);
+ return 1;
+}
+
+static int
+_amiga_find_free_blocks(const PedDisk *disk, uint32_t *table,
+ struct LinkedBlock *block, uint32_t first, uint32_t type)
+{
+ PedSector next;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+
+ for (next = first; next != LINK_END; next = PED_BE32_TO_CPU(block->lk_Next)) {
+ if (table[next] != IDNAME_FREE) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_FIX | PED_EXCEPTION_IGNORE | PED_EXCEPTION_CANCEL,
+ _("%s : Loop detected at block %d."), __func__, next))
+ {
+ case PED_EXCEPTION_CANCEL :
+ return 0;
+ case PED_EXCEPTION_FIX :
+ /* TODO : Need to add fixing code */
+ case PED_EXCEPTION_IGNORE :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return 1;
+ }
+ }
+
+ if (!_amiga_read_block (disk->dev, AMIGA(block), next, NULL)) {
+ return 0;
+ }
+ if (PED_BE32_TO_CPU(block->lk_ID) != type) {
+ switch (ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : The %s list seems bad at block %s."),
+ __func__, _amiga_block_id(PED_BE32_TO_CPU(block->lk_ID)), next))
+ {
+ /* TODO : to more subtile things here */
+ case PED_EXCEPTION_CANCEL :
+ case PED_EXCEPTION_UNHANDLED :
+ default :
+ return 0;
+ }
+ }
+ table[next] = type;
+ if (PED_BE32_TO_CPU(block->lk_ID) == IDNAME_FILESYSHEADER) {
+ if (_amiga_find_free_blocks(disk, table, block,
+ PED_BE32_TO_CPU(LNK2(block)->lk2_Linked),
+ IDNAME_LOADSEG) == 0) return 0;
+ }
+ }
+ return 1;
+}
+static uint32_t _GL_ATTRIBUTE_PURE
+_amiga_next_free_block(uint32_t *table, uint32_t start, uint32_t type) {
+ int i;
+
+ for (i = start; table[i] != type && table[i] != IDNAME_FREE; i++);
+ return i;
+}
+static PedPartition * _GL_ATTRIBUTE_PURE
+_amiga_next_real_partition(const PedDisk *disk, PedPartition *part) {
+ PedPartition *next;
+
+ for (next = ped_disk_next_partition (disk, part);
+ next != NULL && !ped_partition_is_active (next);
+ next = ped_disk_next_partition (disk, next));
+ return next;
+}
+#ifndef DISCOVER_ONLY
+static int
+amiga_write (const PedDisk* disk)
+{
+ struct RigidDiskBlock *rdb;
+ struct LinkedBlock *block;
+ struct PartitionBlock *partition;
+ PedPartition *part, *next_part;
+ PedSector cylblocks, first_hb, last_hb;
+ uint32_t * table;
+ uint32_t i;
+ uint32_t rdb_num, part_num, block_num, next_num;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+
+ if (!(rdb = ped_malloc (disk->dev->sector_size)))
+ return 0;
+
+ /* Let's read the rdb */
+ if ((rdb_num = _amiga_find_rdb (disk->dev, rdb)) == AMIGA_RDB_NOT_FOUND) {
+ rdb_num = 2;
+ size_t pb_size = sizeof (struct PartitionBlock);
+ /* Initialize only the part that won't be copied over
+ with a partition block in amiga_read. */
+ memset ((char *)(RDSK(disk->disk_specific)) + pb_size,
+ 0, PED_SECTOR_SIZE_DEFAULT - pb_size);
+ } else {
+ memcpy (RDSK(disk->disk_specific), rdb, disk->dev->sector_size);
+ }
+ free (rdb);
+ rdb = RDSK(disk->disk_specific);
+
+ cylblocks = (PedSector) PED_BE32_TO_CPU (rdb->rdb_Heads) *
+ (PedSector) PED_BE32_TO_CPU (rdb->rdb_Sectors);
+ first_hb = (PedSector) PED_BE32_TO_CPU (rdb->rdb_RDBBlocksLo);
+ last_hb = (PedSector) PED_BE32_TO_CPU (rdb->rdb_RDBBlocksHi);
+
+ /* Allocate a free block table and initialize it.
+ There must be room for at least RDB_NUM + 2 entries, since
+ the first RDB_NUM+1 entries get IDNAME_RIGIDDISK, and the
+ following one must have LINK_END to serve as sentinel. */
+ size_t tab_size = 2 + MAX (last_hb - first_hb, rdb_num);
+ if (!(table = ped_malloc (tab_size * sizeof *table)))
+ return 0;
+
+ for (i = 0; i <= rdb_num; i++)
+ table[i] = IDNAME_RIGIDDISK;
+ for ( ; i < tab_size; i++)
+ table[i] = LINK_END;
+
+ /* Let's allocate a partition block */
+ if (!(block = ped_malloc (disk->dev->sector_size))) {
+ free (table);
+ return 0;
+ }
+
+ /* And fill the free block table */
+ if (_amiga_find_free_blocks(disk, table, block,
+ PED_BE32_TO_CPU (rdb->rdb_BadBlockList), IDNAME_BADBLOCK) == 0)
+ {
+ ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to list bad blocks."), __func__);
+ goto error_free_table;
+ }
+ if (_amiga_find_free_blocks(disk, table, block,
+ PED_BE32_TO_CPU (rdb->rdb_PartitionList), IDNAME_PARTITION) == 0)
+ {
+ ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to list partition blocks."), __func__);
+ goto error_free_table;
+ }
+ if (_amiga_find_free_blocks(disk, table, block,
+ PED_BE32_TO_CPU (rdb->rdb_FileSysHeaderList), IDNAME_FILESYSHEADER) == 0)
+ {
+ ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to list file system blocks."), __func__);
+ goto error_free_table;
+ }
+ if (_amiga_find_free_blocks(disk, table, block,
+ PED_BE32_TO_CPU (rdb->rdb_BootBlockList), IDNAME_BOOT) == 0)
+ {
+ ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("%s : Failed to list boot blocks."), __func__);
+ goto error_free_table;
+ }
+
+ block_num = part_num = _amiga_next_free_block(table, rdb_num+1,
+ IDNAME_PARTITION);
+ part = _amiga_next_real_partition(disk, NULL);
+ rdb->rdb_PartitionList = PED_CPU_TO_BE32(part ? part_num : LINK_END);
+ for (; part != NULL; part = next_part, block_num = next_num) {
+ PED_ASSERT(part->disk_specific != NULL);
+ PED_ASSERT(part->geom.start % cylblocks == 0);
+ PED_ASSERT((part->geom.end + 1) % cylblocks == 0);
+
+ next_part = _amiga_next_real_partition(disk, part);
+ next_num = _amiga_next_free_block(table, block_num+1, IDNAME_PARTITION);
+
+ partition = PART(part->disk_specific);
+ if (next_part == NULL)
+ partition->pb_Next = PED_CPU_TO_BE32(LINK_END);
+ else
+ partition->pb_Next = PED_CPU_TO_BE32(next_num);
+ partition->de_LowCyl = PED_CPU_TO_BE32(part->geom.start/cylblocks);
+ partition->de_HighCyl = PED_CPU_TO_BE32((part->geom.end+1)/cylblocks-1);
+ _amiga_calculate_checksum(AMIGA(partition));
+ if (!ped_device_write (disk->dev, (void*) partition, block_num, 1)) {
+ ped_exception_throw(PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Failed to write partition block at %d."),
+ block_num);
+ goto error_free_table;
+ /* WARNING : If we fail here, we stop everything,
+ * and the partition table is lost. A better
+ * solution should be found, using the second
+ * half of the hardblocks to not overwrite the
+ * old partition table. It becomes problematic
+ * if we use more than half of the hardblocks. */
+ }
+ }
+
+ if (block_num > PED_BE32_TO_CPU (rdb->rdb_HighRDSKBlock))
+ rdb->rdb_HighRDSKBlock = PED_CPU_TO_BE32(block_num);
+
+ _amiga_calculate_checksum(AMIGA(rdb));
+ if (!ped_device_write (disk->dev, (void*) disk->disk_specific, rdb_num, 1))
+ goto error_free_table;
+
+ free (table);
+ free (block);
+ return ped_device_sync (disk->dev);
+
+error_free_table:
+ free (table);
+ free (block);
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+amiga_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition *part;
+ PedDevice *dev;
+ PedSector cyl;
+ struct PartitionBlock *partition;
+ struct RigidDiskBlock *rdb;
+
+ PED_ASSERT(disk != NULL);
+ PED_ASSERT(disk->dev != NULL);
+ PED_ASSERT(disk->disk_specific != NULL);
+ dev = disk->dev;
+ cyl = (PedSector) (dev->hw_geom.sectors * dev->hw_geom.heads);
+ rdb = RDSK(disk->disk_specific);
+
+ if (!(part = _ped_partition_alloc (disk, part_type, fs_type, start, end)))
+ return NULL;
+
+ if (ped_partition_is_active (part)) {
+ if (!(part->disk_specific = ped_malloc (disk->dev->sector_size))) {
+ free (part);
+ return NULL;
+ }
+ partition = PART(part->disk_specific);
+ memset(partition, 0, sizeof(struct PartitionBlock));
+
+ partition->pb_ID = PED_CPU_TO_BE32(IDNAME_PARTITION);
+ partition->pb_SummedLongs = PED_CPU_TO_BE32(64);
+ partition->pb_HostID = rdb->rdb_HostID;
+ partition->pb_Flags = PED_CPU_TO_BE32(0);
+ /* TODO : use a scheme including the device name and the
+ * partition number, if it is possible */
+ _amiga_set_bstr("dhx", partition->pb_DriveName, 32);
+
+ partition->de_TableSize = PED_CPU_TO_BE32(19);
+ partition->de_SizeBlock = PED_CPU_TO_BE32(128);
+ partition->de_SecOrg = PED_CPU_TO_BE32(0);
+ partition->de_Surfaces = PED_CPU_TO_BE32(dev->hw_geom.heads);
+ partition->de_SectorPerBlock = PED_CPU_TO_BE32(1);
+ partition->de_BlocksPerTrack
+ = PED_CPU_TO_BE32(dev->hw_geom.sectors);
+ partition->de_Reserved = PED_CPU_TO_BE32(2);
+ partition->de_PreAlloc = PED_CPU_TO_BE32(0);
+ partition->de_Interleave = PED_CPU_TO_BE32(0);
+ partition->de_LowCyl = PED_CPU_TO_BE32(start/cyl);
+ partition->de_HighCyl = PED_CPU_TO_BE32((end+1)/cyl-1);
+ partition->de_NumBuffers = PED_CPU_TO_BE32(30);
+ partition->de_BufMemType = PED_CPU_TO_BE32(0);
+ partition->de_MaxTransfer = PED_CPU_TO_BE32(0x7fffffff);
+ partition->de_Mask = PED_CPU_TO_BE32(0xffffffff);
+ partition->de_BootPri = PED_CPU_TO_BE32(0);
+ partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800);
+ partition->de_Baud = PED_CPU_TO_BE32(0);
+ partition->de_Control = PED_CPU_TO_BE32(0);
+ partition->de_BootBlocks = PED_CPU_TO_BE32(0);
+
+ } else {
+ part->disk_specific = NULL;
+ }
+ return part;
+}
+
+static PedPartition*
+amiga_partition_duplicate (const PedPartition* part)
+{
+ PedPartition *new_part;
+ struct PartitionBlock *new_amiga_part;
+ struct PartitionBlock *old_amiga_part;
+
+ PED_ASSERT(part != NULL);
+ PED_ASSERT(part->disk != NULL);
+ PED_ASSERT(part->disk_specific != NULL);
+ old_amiga_part = (struct PartitionBlock *) part->disk_specific;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+
+ new_amiga_part = (struct PartitionBlock *) new_part->disk_specific;
+ memcpy (new_amiga_part, old_amiga_part, 256);
+
+ return new_part;
+}
+
+static void
+amiga_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part)) {
+ PED_ASSERT (part->disk_specific != NULL);
+ free (part->disk_specific);
+ }
+ _ped_partition_free (part);
+}
+
+static int
+amiga_partition_set_system (PedPartition* part,
+ const PedFileSystemType* fs_type)
+{
+ struct PartitionBlock *partition;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ partition = PART(part->disk_specific);
+
+ part->fs_type = fs_type;
+
+ if (!fs_type)
+ partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800); /* 'LNX\0' */
+ else if (!strcmp (fs_type->name, "ext2"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x4c4e5800); /* 'LNX\0' */
+ else if (!strcmp (fs_type->name, "ext3"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x45585403); /* 'EXT\3' */
+ else if (is_linux_swap (fs_type->name))
+ partition->de_DosType = PED_CPU_TO_BE32(0x53575000); /* 'SWP\0' */
+ else if (!strcmp (fs_type->name, "fat16"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x46415400); /* 'FAT\0' */
+ else if (!strcmp (fs_type->name, "fat32"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x46415401); /* 'FAT\1'*/
+ else if (!strcmp (fs_type->name, "hfs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x48465300); /* 'HFS\0' */
+ else if (!strcmp (fs_type->name, "jfs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x4a465300); /* 'JFS\0' */
+ else if (!strcmp (fs_type->name, "ntfs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x4e544653); /* 'NTFS' */
+ else if (!strcmp (fs_type->name, "reiserfs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x52465300); /* 'RFS\0' */
+ else if (!strcmp (fs_type->name, "sun-ufs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x53554653); /* 'SUFS' */
+ else if (!strcmp (fs_type->name, "hp-ufs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x48554653); /* 'HUFS' */
+ else if (!strcmp (fs_type->name, "xfs"))
+ partition->de_DosType = PED_CPU_TO_BE32(0x58465300); /* 'XFS\0' */
+ else
+ partition->de_DosType = PED_CPU_TO_BE32(0x00000000); /* unknown */
+ return 1;
+}
+
+static int
+amiga_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ struct PartitionBlock *partition;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ partition = PART(part->disk_specific);
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_BOOTABLE);
+ else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_BOOTABLE));
+ return 1;
+ case PED_PARTITION_HIDDEN:
+ if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_NOMOUNT);
+ else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_NOMOUNT));
+ return 1;
+ case PED_PARTITION_RAID:
+ if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_RAID);
+ else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_RAID));
+ return 1;
+ case PED_PARTITION_LVM:
+ if (state) partition->pb_Flags |= PED_CPU_TO_BE32(PBFF_LVM);
+ else partition->pb_Flags &= ~(PED_CPU_TO_BE32(PBFF_LVM));
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static int _GL_ATTRIBUTE_PURE
+amiga_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ struct PartitionBlock *partition;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ partition = PART(part->disk_specific);
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_BOOTABLE));
+ case PED_PARTITION_HIDDEN:
+ return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_NOMOUNT));
+ case PED_PARTITION_RAID:
+ return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_RAID));
+ case PED_PARTITION_LVM:
+ return (partition->pb_Flags & PED_CPU_TO_BE32(PBFF_LVM));
+ default:
+ return 0;
+ }
+}
+
+static int
+amiga_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ case PED_PARTITION_HIDDEN:
+ case PED_PARTITION_RAID:
+ case PED_PARTITION_LVM:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+static void
+amiga_partition_set_name (PedPartition* part, const char* name)
+{
+ struct PartitionBlock *partition;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ partition = PART(part->disk_specific);
+ _amiga_set_bstr(name, partition->pb_DriveName, 32);
+}
+static const char*
+amiga_partition_get_name (const PedPartition* part)
+{
+ struct PartitionBlock *partition;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ partition = PART(part->disk_specific);
+
+ return _amiga_get_bstr(partition->pb_DriveName);
+}
+
+static PedAlignment*
+amiga_get_partition_alignment(const PedDisk *disk)
+{
+ PedSector cylinder_size =
+ disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads;
+
+ return ped_alignment_new(0, cylinder_size);
+}
+
+static PedConstraint*
+_amiga_get_constraint (const PedDisk *disk)
+{
+ PedDevice *dev = disk->dev;
+ PedAlignment start_align, end_align;
+ PedGeometry max_geom;
+ PedSector cyl_size = dev->hw_geom.sectors * dev->hw_geom.heads;
+
+ if (!ped_alignment_init(&start_align, 0, cyl_size))
+ return NULL;
+ if (!ped_alignment_init(&end_align, -1, cyl_size))
+ return NULL;
+ if (!ped_geometry_init(&max_geom, dev, MAX_RDB_BLOCK + 1,
+ dev->length - MAX_RDB_BLOCK - 1))
+ return NULL;
+
+ return ped_constraint_new (&start_align, &end_align,
+ &max_geom, &max_geom, 1, dev->length);
+}
+
+static int
+amiga_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ if (_ped_partition_attempt_align (part, constraint,
+ _amiga_get_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+amiga_partition_enumerate (PedPartition* part)
+{
+ int i;
+ PedPartition* p;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk != NULL);
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+ for (i = 1; i <= AMIGA_MAX_PARTITIONS; i++) {
+ p = ped_disk_get_partition (part->disk, i);
+ if (!p) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+ /* failed to allocate a number */
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unable to allocate a partition number."));
+#endif
+ return 0;
+}
+
+static int
+amiga_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* new_part;
+ PedConstraint* constraint_any = NULL;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ /* Allocate space for the RDB */
+ new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL,
+ 0, MAX_RDB_BLOCK);
+ if (!new_part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any)) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+static int
+amiga_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return AMIGA_MAX_PARTITIONS;
+}
+
+static bool
+amiga_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = AMIGA_MAX_PARTITIONS;
+ return true;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (amiga)
+
+static PedDiskOps amiga_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (amiga_write),
+
+ partition_set_name: amiga_partition_set_name,
+ partition_get_name: amiga_partition_get_name,
+
+ get_partition_alignment: amiga_get_partition_alignment,
+
+ PT_op_function_initializers (amiga)
+};
+
+static PedDiskType amiga_disk_type = {
+ next: NULL,
+ name: "amiga",
+ ops: &amiga_disk_ops,
+ features: PED_DISK_TYPE_PARTITION_NAME
+};
+
+void
+ped_disk_amiga_init ()
+{
+ PED_ASSERT (sizeof (struct AmigaBlock) != 3);
+ PED_ASSERT (sizeof (struct RigidDiskBlock) != 64);
+ PED_ASSERT (sizeof (struct PartitionBlock) != 64);
+ PED_ASSERT (sizeof (struct LinkedBlock) != 5);
+ PED_ASSERT (sizeof (struct Linked2Block) != 18);
+
+ ped_disk_type_register (&amiga_disk_type);
+}
+
+void
+ped_disk_amiga_done ()
+{
+ ped_disk_type_unregister (&amiga_disk_type);
+}
diff --git a/libparted/labels/sun.c b/libparted/labels/sun.c
new file mode 100644
index 0000000..5ed2886
--- /dev/null
+++ b/libparted/labels/sun.c
@@ -0,0 +1,910 @@
+/* -*- Mode: c; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2000-2001, 2005, 2007-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ Contributor: Ben Collins <bcollins@debian.org>
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/endian.h>
+#include <stdbool.h>
+
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include "misc.h"
+#include "pt-tools.h"
+#include "verify.h"
+
+/* Most of this came from util-linux's sun support, which was mostly done
+ by Jakub Jelinek. */
+
+#define SUN_DISK_MAGIC 0xDABE /* Disk magic number */
+#define SUN_DISK_MAXPARTITIONS 8
+
+#define SUN_VTOC_VERSION 1
+#define SUN_VTOC_SANITY 0x600DDEEE
+
+#define WHOLE_DISK_ID 0x05
+#define WHOLE_DISK_PART 2 /* as in 0, 1, 2 (3rd partition) */
+#define LINUX_SWAP_ID 0x82
+
+typedef struct _SunRawPartition SunRawPartition;
+typedef struct _SunPartitionInfo SunPartitionInfo;
+typedef struct _SunRawLabel SunRawLabel;
+typedef struct _SunPartitionData SunPartitionData;
+typedef struct _SunDiskData SunDiskData;
+
+struct __attribute__ ((packed)) _SunRawPartition {
+ u_int32_t start_cylinder; /* where the part starts... */
+ u_int32_t num_sectors; /* ...and it's length */
+};
+
+struct __attribute__ ((packed)) _SunPartitionInfo {
+ u_int8_t spare1;
+ u_int8_t id; /* Partition type */
+ u_int8_t spare2;
+ u_int8_t flags; /* Partition flags */
+};
+
+struct __attribute__ ((packed, aligned(2))) _SunRawLabel {
+ char info[128]; /* Informative text string */
+ u_int32_t version; /* Layout version */
+ u_int8_t volume[8]; /* Volume name */
+ u_int16_t nparts; /* Number of partitions */
+ SunPartitionInfo infos[SUN_DISK_MAXPARTITIONS];
+ u_int16_t padding; /* Alignment padding */
+ u_int32_t bootinfo[3]; /* Info needed by mboot */
+ u_int32_t sanity; /* To verify vtoc sanity */
+ u_int32_t reserved[10]; /* Free space */
+ u_int32_t timestamp[8]; /* Partition timestamp */
+ u_int32_t write_reinstruct; /* sectors to skip, writes */
+ u_int32_t read_reinstruct; /* sectors to skip, reads */
+ u_int8_t spare1[148]; /* Padding */
+ u_int16_t rspeed; /* Disk rotational speed */
+ u_int16_t pcylcount; /* Physical cylinder count */
+ u_int16_t sparecyl; /* extra sects per cylinder */
+ u_int8_t spare2[4]; /* More magic... */
+ u_int16_t ilfact; /* Interleave factor */
+ u_int16_t ncyl; /* Data cylinder count */
+ u_int16_t nacyl; /* Alt. cylinder count */
+ u_int16_t ntrks; /* Tracks per cylinder */
+ u_int16_t nsect; /* Sectors per track */
+ u_int8_t spare3[4]; /* Even more magic... */
+ SunRawPartition partitions[SUN_DISK_MAXPARTITIONS];
+ u_int16_t magic; /* Magic number */
+ u_int16_t csum; /* Label xor'd checksum */
+};
+
+struct _SunPartitionData {
+ u_int8_t type;
+ int is_boot;
+ int is_root;
+ int is_lvm;
+ int is_raid;
+};
+
+struct _SunDiskData {
+ PedSector length; /* This is based on cyl - alt-cyl */
+ SunRawLabel raw_label;
+};
+
+static PedDiskType sun_disk_type;
+
+/* Checksum computation */
+static void
+sun_compute_checksum (SunRawLabel *label)
+{
+ u_int16_t *ush = (u_int16_t *)label;
+ u_int16_t csum = 0;
+
+ while(ush < (u_int16_t *)(&label->csum))
+ csum ^= *ush++;
+ label->csum = csum;
+}
+
+/* Checksum Verification */
+static int
+sun_verify_checksum (SunRawLabel const *label)
+{
+ u_int16_t *ush = ((u_int16_t *)(label + 1)) - 1;
+ u_int16_t csum = 0;
+
+ while (ush >= (u_int16_t *)label)
+ csum ^= *ush--;
+
+ return !csum;
+}
+
+static int
+sun_probe (const PedDevice *dev)
+{
+ PED_ASSERT (dev != NULL);
+
+ void *s0;
+ if (!ptt_read_sector (dev, 0, &s0))
+ return 0;
+ SunRawLabel const *label = (void const *) s0;
+
+ int ok = 1;
+ /* check magic */
+ if (PED_BE16_TO_CPU (label->magic) != SUN_DISK_MAGIC) {
+ ok = 0;
+ } else {
+#ifndef DISCOVER_ONLY
+ if (!sun_verify_checksum(label)) {
+ ok = 0;
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Corrupted Sun disk label detected."));
+ }
+ }
+#endif
+
+ free (s0);
+ return ok;
+}
+
+static PedDisk*
+sun_alloc (const PedDevice* dev)
+{
+ PedDisk* disk;
+ SunRawLabel* label;
+ SunDiskData* sun_specific;
+ const PedCHSGeometry* bios_geom = &dev->bios_geom;
+ PedSector cyl_size = bios_geom->sectors * bios_geom->heads;
+ PED_ASSERT (cyl_size != 0);
+
+ disk = _ped_disk_alloc (dev, &sun_disk_type);
+ if (!disk)
+ goto error;
+
+ disk->disk_specific = (SunDiskData*) ped_malloc (sizeof (SunDiskData));
+ if (!disk->disk_specific)
+ goto error_free_disk;
+ sun_specific = (SunDiskData*) disk->disk_specific;
+
+ PED_ASSERT (bios_geom->cylinders == (PedSector) (dev->length / cyl_size));
+ sun_specific->length = ped_round_down_to (dev->length, cyl_size);
+
+ label = &sun_specific->raw_label;
+ memset(label, 0, sizeof(SunRawLabel));
+
+ /* #gentoo-sparc people agree that nacyl = 0 is the best option */
+ label->magic = PED_CPU_TO_BE16 (SUN_DISK_MAGIC);
+ label->nacyl = 0;
+ label->pcylcount = PED_CPU_TO_BE16 (bios_geom->cylinders);
+ label->rspeed = PED_CPU_TO_BE16 (5400);
+ label->ilfact = PED_CPU_TO_BE16 (1);
+ label->sparecyl = 0;
+ label->ntrks = PED_CPU_TO_BE16 (bios_geom->heads);
+ label->nsect = PED_CPU_TO_BE16 (bios_geom->sectors);
+ label->ncyl = PED_CPU_TO_BE16 (dev->length / cyl_size);
+
+ label->sanity = PED_CPU_TO_BE32 (SUN_VTOC_SANITY);
+ label->version = PED_CPU_TO_BE32 (SUN_VTOC_VERSION);
+ label->nparts = PED_CPU_TO_BE16 (SUN_DISK_MAXPARTITIONS);
+
+ /* Add a whole disk partition at a minimum */
+ label->infos[WHOLE_DISK_PART].id = WHOLE_DISK_ID;
+ label->partitions[WHOLE_DISK_PART].start_cylinder = 0;
+ label->partitions[WHOLE_DISK_PART].num_sectors =
+ PED_CPU_TO_BE32(sun_specific->length);
+
+ /* Now a neato string to describe this label */
+ snprintf(label->info, sizeof(label->info) - 1,
+ "GNU Parted Custom cyl %d alt %d hd %d sec %d",
+ PED_BE16_TO_CPU(label->ncyl),
+ PED_BE16_TO_CPU(label->nacyl),
+ PED_BE16_TO_CPU(label->ntrks),
+ PED_BE16_TO_CPU(label->nsect));
+
+ sun_compute_checksum(label);
+ return disk;
+
+error_free_disk:
+ _ped_disk_free (disk);
+error:
+ return NULL;
+}
+
+static PedDisk*
+sun_duplicate (const PedDisk* disk)
+{
+ PedDisk* new_disk;
+ SunDiskData* new_sun_data;
+ SunDiskData* old_sun_data = (SunDiskData*) disk->disk_specific;
+
+ new_disk = ped_disk_new_fresh (disk->dev, &sun_disk_type);
+ if (!new_disk)
+ return NULL;
+
+ new_sun_data = (SunDiskData*) new_disk->disk_specific;
+ memcpy (new_sun_data, old_sun_data, sizeof (SunDiskData));
+ return new_disk;
+}
+
+static void
+sun_free (PedDisk *disk)
+{
+ free (disk->disk_specific);
+ _ped_disk_free (disk);
+}
+
+static int
+_check_geometry_sanity (PedDisk* disk, SunRawLabel* label)
+{
+ PedDevice* dev = disk->dev;
+
+ if (PED_BE16_TO_CPU(label->nsect) == dev->hw_geom.sectors &&
+ PED_BE16_TO_CPU(label->ntrks) == dev->hw_geom.heads)
+ dev->bios_geom = dev->hw_geom;
+
+ if (!!PED_BE16_TO_CPU(label->pcylcount)
+ * !!PED_BE16_TO_CPU(label->ntrks)
+ * !!PED_BE16_TO_CPU(label->nsect) == 0)
+ return 0;
+
+ if (PED_BE16_TO_CPU(label->nsect) != dev->bios_geom.sectors ||
+ PED_BE16_TO_CPU(label->ntrks) != dev->bios_geom.heads) {
+#ifndef DISCOVER_ONLY
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The disk CHS geometry (%d,%d,%d) reported "
+ "by the operating system does not match "
+ "the geometry stored on the disk label "
+ "(%d,%d,%d)."),
+ dev->bios_geom.cylinders,
+ dev->bios_geom.heads,
+ dev->bios_geom.sectors,
+ PED_BE16_TO_CPU(label->pcylcount),
+ PED_BE16_TO_CPU(label->ntrks),
+ PED_BE16_TO_CPU(label->nsect))
+ == PED_EXCEPTION_CANCEL)
+ return 0;
+#endif
+ dev->bios_geom.sectors = PED_BE16_TO_CPU(label->nsect);
+ dev->bios_geom.heads = PED_BE16_TO_CPU(label->ntrks);
+ dev->bios_geom.cylinders = PED_BE16_TO_CPU(label->pcylcount);
+
+ if (dev->bios_geom.sectors * dev->bios_geom.heads
+ * dev->bios_geom.cylinders > dev->length) {
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The disk label describes a disk bigger than "
+ "%s."),
+ dev->path)
+ != PED_EXCEPTION_IGNORE)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+static int
+sun_read (PedDisk* disk)
+{
+ SunPartitionData* sun_data;
+ SunDiskData* disk_data;
+ int i;
+ PedPartition* part;
+ PedSector end, start, block;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+
+ disk_data = (SunDiskData*) disk->disk_specific;
+
+ ped_disk_delete_all (disk);
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ goto error;
+
+ SunRawLabel *label = &disk_data->raw_label;
+ verify (sizeof (*label) == 512);
+ memcpy (label, s0, sizeof (*label));
+ free (s0);
+
+ if (!_check_geometry_sanity (disk, label))
+ goto error;
+
+ block = disk->dev->bios_geom.sectors * disk->dev->bios_geom.heads;
+ disk_data->length = block * disk->dev->bios_geom.cylinders;
+
+ for (i = 0; i < SUN_DISK_MAXPARTITIONS; i++) {
+ if (!PED_BE32_TO_CPU(label->partitions[i].num_sectors))
+ continue;
+ if (!label->infos[i].id)
+ continue;
+ if (label->infos[i].id == WHOLE_DISK_ID)
+ continue;
+
+ start = PED_BE32_TO_CPU(label->partitions[i].start_cylinder)
+ * block;
+ end = start
+ + PED_BE32_TO_CPU(label->partitions[i].num_sectors) - 1;
+
+ part = ped_partition_new (disk, PED_PARTITION_NORMAL, NULL,
+ start, end);
+ if (!part)
+ goto error;
+
+ sun_data = part->disk_specific;
+ sun_data->type = label->infos[i].id;
+ sun_data->is_boot = sun_data->type == 0x1;
+ sun_data->is_root = sun_data->type == 0x2;
+ sun_data->is_lvm = sun_data->type == 0x8e;
+ sun_data->is_raid = sun_data->type == 0xfd;
+
+ part->num = i + 1;
+ part->fs_type = ped_file_system_probe (&part->geom);
+
+ PedConstraint *constraint_exact
+ = ped_constraint_exact (&part->geom);
+ if (constraint_exact == NULL)
+ goto error;
+ bool ok = ped_disk_add_partition (disk, part, constraint_exact);
+ ped_constraint_destroy (constraint_exact);
+ if (!ok)
+ goto error;
+ }
+
+ return 1;
+
+ error:
+ return 0;
+}
+
+#ifndef DISCOVER_ONLY
+static int
+_use_old_info (const PedDisk* disk, const void *sector_0)
+{
+ SunRawLabel const *old_label = sector_0;
+
+ if (old_label->info[0]
+ && PED_BE16_TO_CPU (old_label->magic) == SUN_DISK_MAGIC) {
+ SunDiskData *sun_specific = disk->disk_specific;
+ memcpy (&sun_specific->raw_label, sector_0,
+ sizeof (sun_specific->raw_label));
+ verify (sizeof (sun_specific->raw_label) == 512);
+ }
+
+ return 1;
+}
+
+static int
+sun_write (const PedDisk* disk)
+{
+ SunRawLabel* label;
+ SunPartitionData* sun_data;
+ SunDiskData* disk_data;
+ PedPartition* part;
+ int i;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ void *s0;
+ if (!ptt_read_sector (disk->dev, 0, &s0))
+ return 0;
+
+ /* Calling _use_old_info here in sun_write
+ above seems wrong, because it modifies *DISK.
+ FIXME: maybe later. */
+ if (!_use_old_info (disk, s0)) {
+ free (s0);
+ return 0;
+ }
+
+ disk_data = (SunDiskData*) disk->disk_specific;
+ label = &disk_data->raw_label;
+
+ memset (label->partitions, 0,
+ sizeof (SunRawPartition) * SUN_DISK_MAXPARTITIONS);
+ memset (label->infos, 0,
+ sizeof (SunPartitionInfo) * SUN_DISK_MAXPARTITIONS);
+
+ for (i = 0; i < SUN_DISK_MAXPARTITIONS; i++) {
+ part = ped_disk_get_partition (disk, i + 1);
+
+ if (!part && i == WHOLE_DISK_PART) {
+ /* Ok, nothing explicitly in the whole disk
+ partition, so let's put it there for safety
+ sake. */
+
+ label->infos[i].id = WHOLE_DISK_ID;
+ label->partitions[i].start_cylinder = 0;
+ label->partitions[i].num_sectors =
+ PED_CPU_TO_BE32(disk_data->length);
+ continue;
+ }
+ if (!part)
+ continue;
+
+ sun_data = part->disk_specific;
+ label->infos[i].id = sun_data->type;
+ label->partitions[i].start_cylinder
+ = PED_CPU_TO_BE32 (part->geom.start
+ / (disk->dev->bios_geom.sectors
+ * disk->dev->bios_geom.heads));
+ label->partitions[i].num_sectors
+ = PED_CPU_TO_BE32 (part->geom.end
+ - part->geom.start + 1);
+ }
+
+ /* We assume the harddrive is always right, and that the label may
+ be wrong. I don't think this will cause any problems, since the
+ cylinder count is always enforced by our alignment, and we
+ sanity checked the sectors/heads when we detected the device. The
+ worst that could happen here is that the drive seems bigger or
+ smaller than it really is, but we'll have that problem even if we
+ don't do this. */
+
+ if (disk->dev->bios_geom.cylinders > 65536) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE,
+ _("The disk has %d cylinders, which is greater than "
+ "the maximum of 65536."),
+ disk->dev->bios_geom.cylinders);
+ }
+
+ label->pcylcount = PED_CPU_TO_BE16 (disk->dev->bios_geom.cylinders);
+ label->ncyl = PED_CPU_TO_BE16 (disk->dev->bios_geom.cylinders
+ - PED_BE16_TO_CPU (label->nacyl));
+
+ sun_compute_checksum (label);
+
+ verify (sizeof *label == 512);
+ memcpy (s0, label, sizeof *label);
+ int write_ok = ped_device_write (disk->dev, s0, 0, 1);
+ free (s0);
+
+ if (write_ok)
+ return ped_device_sync (disk->dev);
+
+ return 0;
+}
+#endif /* !DISCOVER_ONLY */
+
+static PedPartition*
+sun_partition_new (const PedDisk* disk, PedPartitionType part_type,
+ const PedFileSystemType* fs_type,
+ PedSector start, PedSector end)
+{
+ PedPartition* part;
+ SunPartitionData* sun_data;
+
+ part = _ped_partition_alloc (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ if (ped_partition_is_active (part)) {
+ part->disk_specific
+ = sun_data = ped_malloc (sizeof (SunPartitionData));
+ if (!sun_data)
+ goto error_free_part;
+ sun_data->type = 0;
+ sun_data->is_boot = 0;
+ sun_data->is_root = 0;
+ sun_data->is_lvm = 0;
+ sun_data->is_raid = 0;
+ } else {
+ part->disk_specific = NULL;
+ }
+
+ return part;
+
+error_free_part:
+ free (part);
+error:
+ return NULL;
+}
+
+static PedPartition*
+sun_partition_duplicate (const PedPartition* part)
+{
+ PedPartition* new_part;
+ SunPartitionData* new_sun_data;
+ SunPartitionData* old_sun_data;
+
+ new_part = ped_partition_new (part->disk, part->type,
+ part->fs_type, part->geom.start,
+ part->geom.end);
+ if (!new_part)
+ return NULL;
+ new_part->num = part->num;
+
+ old_sun_data = (SunPartitionData*) part->disk_specific;
+ new_sun_data = (SunPartitionData*) new_part->disk_specific;
+ new_sun_data->type = old_sun_data->type;
+ new_sun_data->is_boot = old_sun_data->is_boot;
+ new_sun_data->is_root = old_sun_data->is_root;
+ new_sun_data->is_lvm = old_sun_data->is_lvm;
+ new_sun_data->is_raid = old_sun_data->is_raid;
+ return new_part;
+}
+
+static void
+sun_partition_destroy (PedPartition* part)
+{
+ PED_ASSERT (part != NULL);
+
+ if (ped_partition_is_active (part))
+ free (part->disk_specific);
+ free (part);
+}
+
+static int
+sun_partition_set_system (PedPartition* part, const PedFileSystemType* fs_type)
+{
+ SunPartitionData* sun_data = part->disk_specific;
+
+ part->fs_type = fs_type;
+
+ if (sun_data->is_boot) {
+ sun_data->type = 0x1;
+ return 1;
+ }
+ if (sun_data->is_root) {
+ sun_data->type = 0x2;
+ return 1;
+ }
+ if (sun_data->is_lvm) {
+ sun_data->type = 0x8e;
+ return 1;
+ }
+ if (sun_data->is_raid) {
+ sun_data->type = 0xfd;
+ return 1;
+ }
+
+ sun_data->type = 0x83;
+ if (fs_type) {
+ if (is_linux_swap (fs_type->name))
+ sun_data->type = 0x82;
+ else if (!strcmp (fs_type->name, "ufs"))
+ sun_data->type = 0x6;
+ }
+
+ return 1;
+}
+
+static int
+sun_partition_set_flag (PedPartition* part, PedPartitionFlag flag, int state)
+{
+ SunPartitionData* sun_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+ PED_ASSERT (ped_partition_is_flag_available (part, flag));
+
+ sun_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ sun_data->is_boot = state;
+ if (state) {
+ sun_data->is_lvm = 0;
+ sun_data->is_raid = 0;
+ sun_data->is_root = 0;
+ }
+ return ped_partition_set_system (part, part->fs_type);
+
+ case PED_PARTITION_ROOT:
+ sun_data->is_root = state;
+ if (state) {
+ sun_data->is_boot = 0;
+ sun_data->is_lvm = 0;
+ sun_data->is_raid = 0;
+ }
+ return ped_partition_set_system (part, part->fs_type);
+
+ case PED_PARTITION_LVM:
+ sun_data->is_lvm = state;
+ if (state) {
+ sun_data->is_boot = 0;
+ sun_data->is_raid = 0;
+ sun_data->is_root = 0;
+ }
+ return ped_partition_set_system (part, part->fs_type);
+
+ case PED_PARTITION_RAID:
+ sun_data->is_raid = state;
+ if (state) {
+ sun_data->is_boot = 0;
+ sun_data->is_lvm = 0;
+ sun_data->is_root = 0;
+ }
+ return ped_partition_set_system (part, part->fs_type);
+
+ default:
+ return 0;
+ }
+}
+
+
+static int _GL_ATTRIBUTE_PURE
+sun_partition_get_flag (const PedPartition* part, PedPartitionFlag flag)
+{
+ SunPartitionData* sun_data;
+
+ PED_ASSERT (part != NULL);
+ PED_ASSERT (part->disk_specific != NULL);
+
+ sun_data = part->disk_specific;
+
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ return sun_data->is_boot;
+ case PED_PARTITION_ROOT:
+ return sun_data->is_root;
+ case PED_PARTITION_LVM:
+ return sun_data->is_lvm;
+ case PED_PARTITION_RAID:
+ return sun_data->is_raid;
+
+ default:
+ return 0;
+ }
+}
+
+
+static int
+sun_partition_is_flag_available (const PedPartition* part,
+ PedPartitionFlag flag)
+{
+ switch (flag) {
+ case PED_PARTITION_BOOT:
+ case PED_PARTITION_ROOT:
+ case PED_PARTITION_LVM:
+ case PED_PARTITION_RAID:
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+static bool
+sun_get_max_supported_partition_count (const PedDisk* disk, int *max_n)
+{
+ *max_n = SUN_DISK_MAXPARTITIONS;
+ return true;
+}
+
+static int
+sun_get_max_primary_partition_count (const PedDisk* disk)
+{
+ return SUN_DISK_MAXPARTITIONS;
+}
+
+static PedAlignment*
+sun_get_partition_alignment(const PedDisk *disk)
+{
+ PedSector block =
+ disk->dev->hw_geom.sectors * disk->dev->hw_geom.heads;
+
+ return ped_alignment_new(0, block);
+}
+
+static PedConstraint*
+_get_strict_constraint (PedDisk* disk)
+{
+ PedDevice* dev = disk->dev;
+ PedAlignment start_align;
+ PedAlignment end_align;
+ PedGeometry max_geom;
+ SunDiskData* disk_data = disk->disk_specific;
+ PedSector block = dev->bios_geom.sectors * dev->bios_geom.heads;
+
+ if (!ped_alignment_init (&start_align, 0, block))
+ return NULL;
+ if (!ped_alignment_init (&end_align, -1, block))
+ return NULL;
+ if (!ped_geometry_init (&max_geom, dev, 0, disk_data->length))
+ return NULL;
+
+ return ped_constraint_new (&start_align, &end_align, &max_geom,
+ &max_geom, 1, dev->length);
+}
+
+static PedConstraint*
+_get_lax_constraint (PedDisk* disk)
+{
+ PedDevice* dev = disk->dev;
+ PedAlignment start_align;
+ PedGeometry max_geom;
+ SunDiskData* disk_data = disk->disk_specific;
+ PedSector block = dev->bios_geom.sectors * dev->bios_geom.heads;
+
+ if (!ped_alignment_init (&start_align, 0, block))
+ return NULL;
+ if (!ped_geometry_init (&max_geom, dev, 0, disk_data->length))
+ return NULL;
+
+ return ped_constraint_new (&start_align, ped_alignment_any, &max_geom,
+ &max_geom, 1, dev->length);
+}
+
+/* _get_strict_constraint() will align the partition to the end of the cylinder.
+ * This isn't required, but since partitions must start at the start of the
+ * cylinder, space between the end of a partition and the end of a cylinder
+ * is unusable, so there's no point wasting space!
+ * However, if they really insist (via constraint)... which they will
+ * if they're reading a weird table of the disk... then we allow the end to
+ * be anywhere, with _get_lax_constraint()
+ */
+static int
+sun_partition_align (PedPartition* part, const PedConstraint* constraint)
+{
+ PED_ASSERT (part != NULL);
+
+ if (_ped_partition_attempt_align (part, constraint,
+ _get_strict_constraint (part->disk)))
+ return 1;
+ if (_ped_partition_attempt_align (part, constraint,
+ _get_lax_constraint (part->disk)))
+ return 1;
+
+#ifndef DISCOVER_ONLY
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Unable to satisfy all constraints on the partition."));
+#endif
+ return 0;
+}
+
+static int
+sun_partition_enumerate (PedPartition* part)
+{
+ int i;
+ PedPartition* p;
+
+ /* never change the partition numbers */
+ if (part->num != -1)
+ return 1;
+ for (i = 1; i <= SUN_DISK_MAXPARTITIONS; i++) {
+ /* skip the Whole Disk partition for now */
+ if (i == WHOLE_DISK_PART + 1)
+ continue;
+ p = ped_disk_get_partition (part->disk, i);
+ if (!p) {
+ part->num = i;
+ return 1;
+ }
+ }
+
+#ifndef DISCOVER_ONLY
+ /* Ok, now allocate the Whole disk if it isn't already */
+ p = ped_disk_get_partition (part->disk, WHOLE_DISK_PART + 1);
+ if (!p) {
+ int j = ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("The Whole Disk partition is the only "
+ "available one left. Generally, it is not a "
+ "good idea to overwrite this partition with "
+ "a real one. Solaris may not be able to "
+ "boot without it, and SILO (the sparc boot "
+ "loader) appreciates it as well."));
+ if (j == PED_EXCEPTION_IGNORE) {
+ /* bad bad bad...you will suffer your own fate */
+ part->num = WHOLE_DISK_PART + 1;
+ return 1;
+ }
+ }
+
+ /* failed to allocate a number, this means we are full */
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Sun disk label is full."));
+#endif
+ return 0;
+}
+
+static int
+sun_alloc_metadata (PedDisk* disk)
+{
+ PedPartition* new_part;
+ SunDiskData* disk_data;
+ PedConstraint* constraint_any;
+
+ PED_ASSERT (disk != NULL);
+ PED_ASSERT (disk->disk_specific != NULL);
+ PED_ASSERT (disk->dev != NULL);
+
+ constraint_any = ped_constraint_any (disk->dev);
+
+ /* Sun disk label does not need to allocate a sector. The disk
+ label is contained within the first 512 bytes, which should not
+ be overwritten by any boot loader or superblock. It is safe for
+ most partitions to start at sector 0. We do however, allocate
+ the space used by alt-cyl's, since we cannot use those. Put them
+ at the end of the disk. */
+
+ disk_data = disk->disk_specific;
+
+ if (disk->dev->length <= 0 ||
+ disk_data->length <= 0 ||
+ disk->dev->length == disk_data->length)
+ goto error;
+
+ new_part = ped_partition_new (disk, PED_PARTITION_METADATA, NULL,
+ disk_data->length, disk->dev->length - 1);
+ if (!new_part)
+ goto error;
+
+ if (!ped_disk_add_partition (disk, new_part, constraint_any)) {
+ ped_partition_destroy (new_part);
+ goto error;
+ }
+
+ ped_constraint_destroy (constraint_any);
+ return 1;
+error:
+ ped_constraint_destroy (constraint_any);
+ return 0;
+}
+
+#include "pt-common.h"
+PT_define_limit_functions (sun)
+
+static PedDiskOps sun_disk_ops = {
+ clobber: NULL,
+ write: NULL_IF_DISCOVER_ONLY (sun_write),
+
+ get_partition_alignment: sun_get_partition_alignment,
+
+ partition_set_name: NULL,
+ partition_get_name: NULL,
+
+ PT_op_function_initializers (sun)
+};
+
+static PedDiskType sun_disk_type = {
+ next: NULL,
+ name: "sun",
+ ops: &sun_disk_ops,
+ features: 0
+};
+
+void
+ped_disk_sun_init ()
+{
+ PED_ASSERT (sizeof (SunRawLabel) == 512);
+ ped_disk_type_register (&sun_disk_type);
+}
+
+void
+ped_disk_sun_done ()
+{
+ ped_disk_type_unregister (&sun_disk_type);
+}
diff --git a/libparted/labels/vtoc.c b/libparted/labels/vtoc.c
new file mode 100644
index 0000000..d467164
--- /dev/null
+++ b/libparted/labels/vtoc.c
@@ -0,0 +1,1329 @@
+#include <config.h>
+#include <parted/vtoc.h>
+
+#ifdef DEBUG_DASD
+#define PDEBUG fprintf(stderr, "%s:%d:%s\n", \
+ __FILE__, \
+ __LINE__, \
+ __PRETTY_FUNCTION__);
+#else
+#define PDEBUG
+#endif
+
+#include <parted/parted.h>
+
+#include <libintl.h>
+#if ENABLE_NLS
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+static const unsigned char EBCtoASC[256] =
+{
+/* 0x00 NUL SOH STX ETX *SEL HT *RNL DEL */
+ 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F,
+/* 0x08 -GE -SPS -RPT VT FF CR SO SI */
+ 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+/* 0x10 DLE DC1 DC2 DC3 -RES -NL BS -POC
+ -ENP ->LF */
+ 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07,
+/* 0x18 CAN EM -UBS -CU1 -IFS -IGS -IRS -ITB
+ -IUS */
+ 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+/* 0x20 -DS -SOS FS -WUS -BYP LF ETB ESC
+ -INP */
+ 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B,
+/* 0x28 -SA -SFE -SM -CSP -MFA ENQ ACK BEL
+ -SW */
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07,
+/* 0x30 ---- ---- SYN -IR -PP -TRN -NBS EOT */
+ 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04,
+/* 0x38 -SBS -IT -RFF -CU3 DC4 NAK ---- SUB */
+ 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A,
+/* 0x40 SP RSP ä ---- */
+ 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86,
+/* 0x48 . < ( + | */
+ 0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
+/* 0x50 & ---- */
+ 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07,
+/* 0x58 ß ! $ * ) ; */
+ 0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA,
+/* 0x60 - / ---- Ä ---- ---- ---- */
+ 0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F,
+/* 0x68 ---- , % _ > ? */
+ 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
+/* 0x70 --- ---- ---- ---- ---- ---- ---- */
+ 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+/* 0x78 * ` : # @ ' = " */
+ 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
+/* 0x80 * a b c d e f g */
+ 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+/* 0x88 h i ---- ---- ---- */
+ 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1,
+/* 0x90 ° j k l m n o p */
+ 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
+/* 0x98 q r ---- ---- */
+ 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07,
+/* 0xA0 ~ s t u v w x */
+ 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+/* 0xA8 y z ---- ---- ---- ---- */
+ 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07,
+/* 0xB0 ^ ---- § ---- */
+ 0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC,
+/* 0xB8 ---- [ ] ---- ---- ---- ---- */
+ 0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07,
+/* 0xC0 { A B C D E F G */
+ 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+/* 0xC8 H I ---- ö ---- */
+ 0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07,
+/* 0xD0 } J K L M N O P */
+ 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
+/* 0xD8 Q R ---- ü */
+ 0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98,
+/* 0xE0 \ S T U V W X */
+ 0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
+/* 0xE8 Y Z ---- Ö ---- ---- ---- */
+ 0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07,
+/* 0xF0 0 1 2 3 4 5 6 7 */
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+/* 0xF8 8 9 ---- ---- Ü ---- ---- ---- */
+ 0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07
+};
+
+static const unsigned char ASCtoEBC[256] =
+{
+ /*00 NL SH SX EX ET NQ AK BL */
+ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
+ /*08 BS HT LF VT FF CR SO SI */
+ 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
+ /*10 DL D1 D2 D3 D4 NK SN EB */
+ 0x10, 0x11, 0x12, 0x13, 0x3C, 0x15, 0x32, 0x26,
+ /*18 CN EM SB EC FS GS RS US */
+ 0x18, 0x19, 0x3F, 0x27, 0x1C, 0x1D, 0x1E, 0x1F,
+ /*20 SP ! " # $ % & ' */
+ 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
+ /*28 ( ) * + , - . / */
+ 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
+ /*30 0 1 2 3 4 5 6 7 */
+ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
+ /*38 8 9 : ; < = > ? */
+ 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
+ /*40 @ A B C D E F G */
+ 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
+ /*48 H I J K L M N O */
+ 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
+ /*50 P Q R S T U V W */
+ 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
+ /*58 X Y Z [ \ ] ^ _ */
+ 0xE7, 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
+ /*60 ` a b c d e f g */
+ 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ /*68 h i j k l m n o */
+ 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
+ /*70 p q r s t u v w */
+ 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
+ /*78 x y z { | } ~ DL */
+ 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0xFF
+};
+
+enum failure {
+ unable_to_open,
+ unable_to_seek,
+ unable_to_write,
+ unable_to_read
+};
+
+static char buffer[93];
+
+static void
+vtoc_error (enum failure why, char const *s1, char const *s2)
+{
+ PDEBUG
+ char error[8192];
+
+ switch (why) {
+ case unable_to_open:
+ sprintf(error, "VTOC: %s -- %s\n%s\n",
+ _("opening of device failed"), s1, s2);
+ break;
+ case unable_to_seek:
+ sprintf(error, "VTOC: %s -- %s\n%s\n",
+ _("seeking on device failed"), s1, s2);
+ break;
+ case unable_to_write:
+ sprintf(error, "VTOC: %s -- %s\n%s\n",
+ _("writing to device failed"), s1, s2);
+ break;
+ case unable_to_read:
+ sprintf(error, "VTOC: %s -- %s\n%s\n",
+ _("reading from device failed"), s1, s2);
+ break;
+ default:
+ sprintf(error, "VTOC: %s\n", _("Fatal error"));
+ }
+
+ ped_exception_throw(PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL, error);
+}
+
+char *
+vtoc_ebcdic_enc (char const *source, char *target, int l)
+{
+ PDEBUG
+ int i;
+
+ for (i = 0; i < l; i++)
+ target[i]=ASCtoEBC[(unsigned char)(source[i])];
+
+ return target;
+}
+
+char *
+vtoc_ebcdic_dec (char const *source, char *target, int l)
+{
+ PDEBUG
+ int i;
+
+ for (i = 0; i < l; i++)
+ target[i]=EBCtoASC[(unsigned char)(source[i])];
+
+ return target;
+}
+
+void
+vtoc_set_extent (extent_t *ext, u_int8_t typeind, u_int8_t seqno,
+ cchh_t *lower, cchh_t *upper)
+{
+ PDEBUG
+ ext->typeind = typeind;
+ ext->seqno = seqno;
+ memcpy(&ext->llimit,lower,sizeof(cchh_t));
+ memcpy(&ext->ulimit,upper,sizeof(cchh_t));
+}
+
+void
+vtoc_set_cchh (cchh_t *addr, u_int32_t cc, u_int16_t hh)
+{
+ PDEBUG
+ addr->cc = (u_int16_t) cc;
+ addr->hh = cc >> 16;
+ addr->hh <<= 4;
+ addr->hh |= hh;
+}
+
+u_int32_t
+vtoc_get_cyl_from_cchh (cchh_t *addr)
+{
+ u_int32_t cyl;
+
+ /*decode cylinder for large volumes */
+ cyl = addr->hh & 0xFFF0;
+ cyl <<= 12;
+ cyl |= addr->cc;
+ return cyl;
+}
+
+u_int16_t
+vtoc_get_head_from_cchh (cchh_t *addr)
+{
+ /* decode heads for large volumes */
+ return addr->hh & 0x000F;
+}
+
+static void
+vtoc_set_ttr (ttr_t *addr, u_int16_t tt, u_int8_t r)
+{
+ PDEBUG
+ addr->tt = tt;
+ addr->r = r;
+}
+
+void
+vtoc_set_cchhb (cchhb_t *addr, u_int32_t cc, u_int16_t hh, u_int8_t b)
+{
+ PDEBUG
+ addr->cc = (u_int16_t) cc;
+ addr->hh = cc >> 16;
+ addr->hh <<= 4;
+ addr->hh |= hh;
+ addr->b = b;
+}
+
+u_int32_t
+vtoc_get_cyl_from_cchhb(cchhb_t *addr)
+{
+ u_int32_t cyl;
+
+ /* decode cylinder for large volumes */
+ cyl = addr->hh & 0xFFF0;
+ cyl <<= 12;
+ cyl |= addr->cc;
+ return cyl;
+}
+
+u_int16_t
+vtoc_get_head_from_cchhb(cchhb_t *addr)
+{
+ /* decode heads for large volumes */
+ return addr->hh & 0x000F;
+}
+
+/*
+ * some functions to convert cyl-cyl-head-head addresses to
+ * block or track numbers
+ * Note: Record zero is special, so first block on a track is
+ * in record 1!
+ */
+u_int64_t
+cchhb2blk (cchhb_t *p, struct fdasd_hd_geometry *geo)
+{
+ return (u_int64_t) vtoc_get_cyl_from_cchhb(p) *
+ geo->heads * geo->sectors +
+ vtoc_get_head_from_cchhb(p) * geo->sectors +
+ p->b;
+}
+
+u_int64_t
+cchh2blk (cchh_t *p, struct fdasd_hd_geometry *geo)
+{
+ return (u_int64_t) vtoc_get_cyl_from_cchh(p) *
+ geo->heads * geo->sectors +
+ vtoc_get_head_from_cchh(p) * geo->sectors;
+}
+
+u_int32_t
+cchh2trk (cchh_t *p, struct fdasd_hd_geometry *geo)
+{
+ return vtoc_get_cyl_from_cchh(p) * geo->heads +
+ vtoc_get_head_from_cchh(p);
+}
+
+void
+vtoc_set_date (labeldate_t * d, u_int8_t year, u_int16_t day)
+{
+ PDEBUG
+ d->year = year;
+ d->day = day;
+}
+
+/*
+ * initializes the volume label with EBCDIC spaces
+ */
+void
+vtoc_volume_label_init (volume_label_t *vlabel)
+{
+ PDEBUG
+ sprintf(buffer, "%92s", " ");
+ vtoc_ebcdic_enc(buffer, buffer, sizeof *vlabel);
+ memcpy(vlabel, buffer, sizeof *vlabel);
+}
+
+/*
+ * reads the volume label from dasd
+ */
+int
+vtoc_read_volume_label (int f, unsigned long vlabel_start,
+ volume_label_t *vlabel)
+{
+
+ char str[5];
+ unsigned long block_zero;
+ typedef struct bogus_label bogus_label_t;
+ typedef union vollabel vollabel_t;
+
+ union __attribute__((packed)) vollabel {
+ /* cdl and ldl have the same data struct */
+ volume_label_t cdl;
+ cms_volume_label_t cms;
+ };
+
+ struct __attribute__((packed)) bogus_label {
+ char overhead[512];
+ vollabel_t actual_label;
+ };
+
+ bogus_label_t mybogus;
+ bogus_label_t *bogus_ptr = &mybogus;
+ vollabel_t *union_ptr = &bogus_ptr->actual_label;
+ volume_label_t *cdl_ptr = &union_ptr->cdl;
+
+ PDEBUG
+ int rc;
+
+ if (lseek(f, vlabel_start, SEEK_SET) == -1) {
+ vtoc_error(unable_to_seek, "vtoc_read_volume_label",
+ _("Could not read volume label."));
+ return 1;
+ }
+
+ rc = read(f, vlabel, sizeof(volume_label_t));
+ if (rc != sizeof(volume_label_t)) {
+ vtoc_error(unable_to_read, "vtoc_read_volume_label",
+ _("Could not read volume label."));
+ return 1;
+ }
+
+ if (strncmp(vlabel->volkey, vtoc_ebcdic_enc("VOL1", str, 4), 4) == 0
+ || strncmp(vlabel->volkey, vtoc_ebcdic_enc("LNX1", str, 4), 4) == 0
+ || strncmp(vlabel->volkey, vtoc_ebcdic_enc("CMS1", str, 4), 4) == 0)
+ return 0;
+
+ /*
+ If we didn't find a valid volume label, there is a special case
+ we must try before we give up. For a CMS-formatted disk on FBA
+ DASD using the DIAG driver and a block size greater than 512, we
+ must read the block at offset 0, then look for a label within
+ that block at offset 512.
+ */
+
+ block_zero = 0;
+
+ if (lseek(f, block_zero, SEEK_SET) == -1) {
+ vtoc_error(unable_to_seek, "vtoc_read_volume_label",
+ _("Could not read volume label."));
+ return 1;
+ }
+
+ rc = read(f, bogus_ptr, sizeof(bogus_label_t));
+ if (rc != sizeof(bogus_label_t)) {
+ vtoc_error(unable_to_read, "vtoc_read_volume_label",
+ _("Could not read volume label."));
+ return 1;
+ }
+
+ memcpy(vlabel, cdl_ptr, sizeof *vlabel);
+ return 0;
+}
+
+/*
+ * writes the volume label to dasd
+ */
+int
+vtoc_write_volume_label (int f, unsigned long vlabel_start,
+ volume_label_t const *vlabel)
+{
+ PDEBUG
+ int rc;
+
+ if (lseek(f, vlabel_start, SEEK_SET) == -1)
+ vtoc_error(unable_to_seek, "vtoc_write_volume_label",
+ _("Could not write volume label."));
+
+ rc = write(f, vlabel, sizeof(volume_label_t));
+ if (rc != sizeof(volume_label_t))
+ vtoc_error(unable_to_write, "vtoc_write_volume_label",
+ _("Could not write volume label."));
+
+ return 0;
+}
+
+/*
+ * takes a string as input, converts it to uppercase, translates
+ * it to EBCDIC and fills it up with spaces before it copies it
+ * as volume serial to the volume label
+ */
+void
+vtoc_volume_label_set_volser (volume_label_t *vlabel, char const *volser)
+{
+ PDEBUG
+ int j, i = strlen(volser);
+ char s[VOLSER_LENGTH + 1];
+
+ strcpy(s, " ");
+ vtoc_ebcdic_enc(s, s, VOLSER_LENGTH);
+ strncpy(vlabel->volid, s, VOLSER_LENGTH);
+
+ if (i > VOLSER_LENGTH)
+ i = VOLSER_LENGTH;
+
+ strncpy(s, volser, i);
+ for (j=0; j<i; j++)
+ s[j] = toupper(s[j]);
+
+ s[VOLSER_LENGTH] = 0x00;
+ vtoc_ebcdic_enc(s, s, i);
+ strncpy(vlabel->volid, s, i);
+
+ return;
+}
+
+/*
+ * returns the volume serial number right after it is translated
+ * to ASCII
+ */
+char *
+vtoc_volume_label_get_volser (volume_label_t *vlabel, char *volser)
+{
+ PDEBUG
+ vtoc_ebcdic_dec(vlabel->volid, volser, VOLSER_LENGTH);
+
+ return volser;
+}
+
+/*
+ * sets the volume label key right after
+ * it has been translated to EBCDIC
+ */
+void
+vtoc_volume_label_set_key (volume_label_t *vlabel, char const *key)
+{
+ PDEBUG
+ char s[4];
+
+ vtoc_ebcdic_enc(key, s, 4);
+ strncpy(vlabel->volkey, s, 4);
+
+ return;
+}
+
+/*
+ * sets the volume label identifier right
+ * after it has been translated to EBCDIC
+ */
+void
+vtoc_volume_label_set_label (volume_label_t *vlabel, char const *lbl)
+{
+ PDEBUG
+ char s[4];
+
+ vtoc_ebcdic_enc(lbl, s, 4);
+ strncpy(vlabel->vollbl, s, 4);
+
+ return;
+}
+
+/*
+ * returns the volume label key = the label identifier
+ * right after it has been translated to ASCII
+ */
+char *
+vtoc_volume_label_get_label (volume_label_t *vlabel, char *lbl)
+{
+ PDEBUG
+ vtoc_ebcdic_dec(vlabel->vollbl, lbl, 4);
+
+ return lbl;
+}
+
+/*
+ * reads either a format4 label or a format1 label
+ * from the specified position
+ */
+void
+vtoc_read_label (int f, unsigned long position, format1_label_t *f1,
+ format4_label_t *f4, format5_label_t *f5, format7_label_t *f7)
+{
+ PDEBUG
+ int t;
+
+ if (lseek(f, position, SEEK_SET) == -1)
+ vtoc_error(unable_to_seek, "vtoc_read_label",
+ _("Could not read VTOC labels."));
+
+ if (f1 != NULL) {
+ t = sizeof(format1_label_t);
+ if (read(f, f1, t) != t)
+ vtoc_error(unable_to_read, "vtoc_read_label",
+ _("Could not read VTOC FMT1 DSCB."));
+ }
+
+ if (f4 != NULL) {
+ t = sizeof(format4_label_t);
+ if (read(f, f4, t) != t)
+ vtoc_error(unable_to_read, "vtoc_read_label",
+ _("Could not read VTOC FMT4 DSCB."));
+ }
+
+ if (f5 != NULL) {
+ t = sizeof(format5_label_t);
+ if (read(f, f5, t) != t)
+ vtoc_error(unable_to_read, "vtoc_read_label",
+ _("Could not read VTOC FMT5 DSCB."));
+ }
+
+ if (f7 != NULL) {
+ t = sizeof(format7_label_t);
+ if (read(f, f7, t) != t)
+ vtoc_error(unable_to_read, "vtoc_read_label",
+ _("Could not read VTOC FMT7 DSCB."));
+ }
+}
+
+/*
+ * writes either a FMT1, FMT4 or FMT5 label
+ * to the specified position
+ */
+void
+vtoc_write_label (int f, unsigned long position,
+ format1_label_t const *f1,
+ format4_label_t const *f4,
+ format5_label_t const *f5,
+ format7_label_t const *f7,
+ format9_label_t const *f9)
+{
+ PDEBUG
+ int t;
+
+ if (lseek(f, position, SEEK_SET) == -1)
+ vtoc_error(unable_to_seek, "vtoc_write_label",
+ _("Could not write VTOC labels."));
+
+ if (f1 != NULL) {
+ t = sizeof(format1_label_t);
+ if (write(f, f1, t) != t)
+ vtoc_error(unable_to_write, "vtoc_write_label",
+ _("Could not write VTOC FMT1 DSCB."));
+ }
+
+ if (f4 != NULL) {
+ t = sizeof(format4_label_t);
+ if (write(f, f4, t) != t)
+ vtoc_error(unable_to_write, "vtoc_write_label",
+ _("Could not write VTOC FMT4 DSCB."));
+ }
+
+ if (f5 != NULL) {
+ t = sizeof(format5_label_t);
+ if (write(f, f5, t) != t)
+ vtoc_error(unable_to_write, "vtoc_write_label",
+ _("Could not write VTOC FMT5 DSCB."));
+ }
+
+ if (f7 != NULL) {
+ t = sizeof(format7_label_t);
+ if (write(f, f7, t) != t)
+ vtoc_error(unable_to_write, "vtoc_write_label",
+ _("Could not write VTOC FMT7 DSCB."));
+ }
+
+ if (f9 != NULL)
+ {
+ t = sizeof(format9_label_t);
+ if (write(f, f9, t) != t)
+ {
+ close(f);
+ vtoc_error(unable_to_write, "vtoc_write_label",
+ _("Could not write VTOC FMT9 DSCB."));
+ }
+ }
+}
+
+/*
+ * initializes a format4 label
+ */
+void
+vtoc_init_format4_label (format4_label_t *f4,
+ unsigned int compat_cylinders,
+ unsigned int real_cylinders, unsigned int tracks,
+ unsigned int blocks, unsigned int blksize,
+ u_int16_t dev_type)
+{
+ PDEBUG
+ int i;
+
+ cchh_t lower = {VTOC_START_CC, VTOC_START_HH};
+ cchh_t upper = {VTOC_START_CC, VTOC_START_HH};
+
+ for (i=0; i<44; i++) f4->DS4KEYCD[i] = 0x04;
+ f4->DS4IDFMT = 0xf4;
+
+ vtoc_set_cchhb(&f4->DS4HPCHR, 0x0000, 0x0000, 0x00);
+ f4->DS4DSREC = blocks - 2;
+ /* free space starts right behind VTOC
+ vtoc_set_cchh(&f4->DS4HCCHH, VTOC_START_CC, VTOC_START_HH + 1);*/
+ vtoc_set_cchh(&f4->DS4HCCHH, 0x0000, 0x0000);
+ f4->DS4NOATK = 0x0000;
+ f4->DS4VTOCI = 0x00;
+ f4->DS4NOEXT = 0x01;
+ f4->DS4SMSFG = 0x00;
+ f4->DS4DEVAC = 0x00;
+
+ /* -- begin f4->DS4DEVCT -- */
+ f4->DS4DEVCT.DS4DSCYL = compat_cylinders;
+ f4->DS4DEVCT.DS4DSTRK = tracks;
+
+ switch (dev_type) {
+ case DASD_3380_TYPE:
+ f4->DS4DEVCT.DS4DEVTK = DASD_3380_VALUE;
+ break;
+ case DASD_3390_TYPE:
+ f4->DS4DEVCT.DS4DEVTK = DASD_3390_VALUE;
+ break;
+ case DASD_9345_TYPE:
+ f4->DS4DEVCT.DS4DEVTK = DASD_9345_VALUE;
+ break;
+ default:
+ f4->DS4DEVCT.DS4DEVTK = blocks * blksize;
+ }
+
+ f4->DS4DEVCT.DS4DEVI = 0x00;
+ f4->DS4DEVCT.DS4DEVL = 0x00;
+ f4->DS4DEVCT.DS4DEVK = 0x00;
+ f4->DS4DEVCT.DS4DEVFG = 0x30;
+ f4->DS4DEVCT.DS4DEVTL = 0x0000;
+ f4->DS4DEVCT.DS4DEVDT = blocks;
+ f4->DS4DEVCT.DS4DEVDB = 0x00;
+ /* -- end f4->DS4DEVCT -- */
+
+ bzero(f4->DS4AMTIM, sizeof(f4->DS4AMTIM));
+ bzero(f4->DS4AMCAT, sizeof(f4->DS4AMCAT));
+ bzero(f4->DS4R2TIM, sizeof(f4->DS4R2TIM));
+ bzero(f4->res1, sizeof(f4->res1));
+ bzero(f4->DS4F6PTR, sizeof(f4->DS4F6PTR));
+
+ /* -- begin f4lbl->DS4VTOCE -- */
+ vtoc_set_extent(&f4->DS4VTOCE, 0x01, 0x00, &lower, &upper);
+ /* -- end f4lbl->DS4VTOCE -- */
+
+ bzero(f4->res2, sizeof(f4->res2));
+ f4->DS4EFLVL = 0x00;
+ bzero(&f4->DS4EFPTR, sizeof(f4->DS4EFPTR));
+ bzero(&f4->res3, sizeof(f4->res3));
+ f4->DS4DCYL = real_cylinders;
+ bzero(f4->res4, sizeof(f4->res4));
+ f4->DS4DEVF2 = 0x40; /* allow format 8 and 9 labels */
+ bzero(&f4->res5, sizeof(f4->res5));
+}
+
+/*
+ * initializes a format5 label
+ */
+void
+vtoc_init_format5_label (format5_label_t *f5)
+{
+ PDEBUG
+ int i;
+
+ bzero(f5, sizeof(format5_label_t));
+ for (i=0; i<4; i++)
+ f5->DS5KEYID[i] = 0x05;
+ f5->DS5FMTID = 0xf5;
+}
+
+/*
+ * initializes a format7 label
+ */
+void
+vtoc_init_format7_label (format7_label_t *f7)
+{
+ PDEBUG
+ int i;
+
+ bzero(f7, sizeof(format7_label_t));
+ for (i=0; i<4; i++)
+ f7->DS7KEYID[i] = 0x07;
+ f7->DS7FMTID = 0xf7;
+}
+
+/*
+ * helper function that initializes a most parts of a
+ * format1 or format 8 label, all but the field DS1FMTID
+ */
+void
+vtoc_init_format_1_8_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1)
+{
+ PDEBUG
+ struct tm * creatime;
+ time_t t;
+ char str[80];
+
+ /* get actual date */
+ t = time(NULL);
+ creatime = gmtime(&t);
+
+ bzero(f1->DS1DSNAM, sizeof(f1->DS1DSNAM));
+ sprintf(str, "PART .NEW ");
+ vtoc_ebcdic_enc(str, str, 44);
+ strncpy(f1->DS1DSNAM, str, 44);
+ strncpy(f1->DS1DSSN, " ", 6);
+ f1->DS1VOLSQ = 0x0001;
+
+ vtoc_set_date(&f1->DS1CREDT, (u_int8_t) creatime->tm_year,
+ (u_int16_t) creatime->tm_yday);
+ /* expires never - 99 365 */
+ vtoc_set_date(&f1->DS1EXPDT, 0x63, 0x016D);
+ f1->DS1NOEPV = 0x01;
+ f1->DS1NOBDB = 0x00;
+ f1->DS1FLAG1 = 0x00;
+ vtoc_ebcdic_enc("IBM LINUX ", str, 13);
+ strncpy(f1->DS1SYSCD, str, 13);
+ vtoc_set_date(&f1->DS1REFD, (u_int8_t) creatime->tm_year,
+ (u_int16_t) creatime->tm_yday);
+ f1->DS1SMSFG = 0x00;
+ f1->DS1SCXTF = 0x00;
+ f1->DS1SCXTV = 0x0000;
+ f1->DS1DSRG1 = 0x00;
+ f1->DS1DSRG2 = 0x00;
+ f1->DS1RECFM = 0x88;
+ f1->DS1OPTCD = 0x00;
+ f1->DS1BLKL = blksize;
+ f1->DS1LRECL = blksize;
+ f1->DS1KEYL = 0x00;
+ f1->DS1RKP = 0x0000;
+ f1->DS1DSIND = 0x80; /* last volume for this dataset */
+ f1->DS1SCAL1 = 0x80;
+ bzero(&f1->DS1SCAL3, sizeof(f1->DS1SCAL3));
+ vtoc_set_ttr(&f1->DS1LSTAR, 0x0000, 0x00);
+ f1->DS1TRBAL = 0x00;
+ bzero(&f1->res1, sizeof(f1->res1));
+ memcpy(&f1->DS1EXT1, part_extent, sizeof(extent_t));
+ bzero(&f1->DS1EXT2, sizeof(extent_t));
+ bzero(&f1->DS1EXT3, sizeof(extent_t));
+ vtoc_set_cchhb(&f1->DS1PTRDS, 0x0000, 0x0000, 0x00);
+}
+
+void
+vtoc_init_format1_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f1)
+{
+ vtoc_init_format_1_8_label(blksize, part_extent, f1);
+ f1->DS1FMTID = 0xf1;
+}
+
+void
+vtoc_init_format8_label (unsigned int blksize,
+ extent_t *part_extent, format1_label_t *f8)
+{
+ vtoc_init_format_1_8_label(blksize, part_extent, f8);
+ f8->DS1FMTID = 0xf8;
+}
+
+void
+vtoc_update_format8_label (cchhb_t *associated_f9, format1_label_t *f8)
+{
+ memcpy(&f8->DS1PTRDS, associated_f9, sizeof(*associated_f9));
+}
+
+void
+vtoc_init_format9_label (format9_label_t *f9)
+{
+ f9->DS9KEYID = 0x09;
+ f9->DS9SUBTY = 0x01;
+ f9->DS9NUMF9 = 1;
+ f9->DS9FMTID = 0xf9;
+}
+
+/*
+ * do some updates to the VTOC format4 label
+ */
+void
+vtoc_update_format4_label (format4_label_t *f4, cchhb_t *highest_f1,
+ u_int16_t unused_update)
+{
+ PDEBUG
+ /* update highest address of a format 1 label */
+ memcpy(&f4->DS4HPCHR, highest_f1, sizeof(cchhb_t));
+
+ /* update unused DSCB count */
+ f4->DS4DSREC = unused_update;
+}
+
+/*
+ * reorganizes all extents within a FMT5 label
+ */
+static void
+vtoc_reorganize_FMT5_extents (format5_label_t *f5)
+{
+ PDEBUG
+ ds5ext_t *ext, *last, tmp;
+ int i, j;
+
+ for (i=0; i<26; i++) {
+ if (i==0)
+ last = &f5->DS5AVEXT;
+ else if ((i > 0) && (i < 8))
+ last = &f5->DS5EXTAV[i-1];
+ else
+ last = &f5->DS5MAVET[i-8];
+
+ for (j=i; j<26; j++) {
+ if (j==0)
+ ext = &f5->DS5AVEXT;
+ else if ((j > 0) && (j < 8))
+ ext = &f5->DS5EXTAV[j-1];
+ else
+ ext = &f5->DS5MAVET[j-8];
+
+ if (((ext->t > 0) && (last->t == 0)) ||
+ ((ext->t > 0) && (ext->t < last->t)))
+ {
+ tmp.t = last->t;
+ tmp.fc = last->fc;
+ tmp.ft = last->ft;
+ last->t = ext->t;
+ last->fc = ext->fc;
+ last->ft = ext->ft;
+ ext->t = tmp.t;
+ ext->fc = tmp.fc;
+ ext->ft = tmp.ft;
+ }
+ }
+ }
+}
+
+/*
+ * add a free space extent description to the VTOC FMT5 DSCB
+ */
+void
+vtoc_update_format5_label_add (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b, u_int8_t c)
+{
+ PDEBUG
+ ds5ext_t *ext = NULL, *tmp = NULL;
+ int i;
+
+ for (i=0; i<26; i++) {
+ if (i==0)
+ ext = &f5->DS5AVEXT;
+ else if ((i > 0) && (i < 8))
+ ext = &f5->DS5EXTAV[i-1];
+ else
+ ext = &f5->DS5MAVET[i-8];
+
+ if (((a < ext->t) && (a + b*trk + c > ext->t)) ||
+ ((a > ext->t) && (ext->t + ext->fc*trk + ext->ft > a)))
+ {
+ puts ("BUG: overlapping free space extents "
+ "in FMT5 DSCB!\nexiting...");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((ext->t + ext->fc + ext->ft) == 0x0000) {
+ ext->t = a;
+ ext->fc = b;
+ ext->ft = c;
+ tmp = ext;
+ if (verbose)
+ puts ("FMT5 add extent: add new extent");
+ break;
+ }
+ }
+
+ if (tmp == NULL) {
+ /* BUG: no free extent found */
+ puts ("BUG: no free FMT5 DSCB extent found!\nexiting...");
+ exit(EXIT_FAILURE);
+ }
+
+ for (i=0; i<26; i++) {
+ if (i==0)
+ ext = &f5->DS5AVEXT;
+ else if ((i > 0) && (i < 8))
+ ext = &f5->DS5EXTAV[i-1];
+ else
+ ext = &f5->DS5MAVET[i-8];
+
+ if ((ext->t + ext->fc + ext->ft) == 0x0000)
+ continue;
+
+ if ((ext->t + ext->fc*trk + ext->ft) == tmp->t) {
+ /* this extent precedes the new one */
+ ext->fc += (tmp->fc + (tmp->ft + ext->ft)/trk);
+ ext->ft = (tmp->ft + ext->ft) % trk;
+ bzero(tmp, sizeof(ds5ext_t));
+ tmp = ext;
+
+ if (verbose)
+ puts ("FMT5 add extent: "
+ "merge with predecessor");
+
+ i = -1;
+ continue;
+ }
+
+ if ((tmp->t + tmp->fc*trk + tmp->ft) == ext->t) {
+ /* this extent succeeds the new one */
+ ext->t = tmp->t;
+ ext->fc += (tmp->fc + (tmp->ft + ext->ft)/trk);
+ ext->ft = (tmp->ft + ext->ft) % trk;
+ bzero(tmp, sizeof(ds5ext_t));
+ tmp = ext;
+
+ if (verbose)
+ puts ("FMT5 add extent: "
+ "merge with successor");
+
+ i = -1;
+ continue;
+ }
+ }
+}
+
+/*
+ * remove a free space extent description from the VTOC FMT5 DSCB
+ */
+void
+vtoc_update_format5_label_del (format5_label_t *f5, int verbose,
+ int trk, u_int16_t a, u_int16_t b, u_int8_t c)
+{
+ PDEBUG
+ ds5ext_t *ext;
+ int i, counter=0;
+
+ for (i=0; i<26; i++) {
+ if (i==0)
+ ext = &f5->DS5AVEXT;
+ else if ((i > 0) && (i < 8))
+ ext = &f5->DS5EXTAV[i-1];
+ else
+ ext = &f5->DS5MAVET[i-8];
+
+ if ((a == ext->t) && (b == ext->fc) && (c == ext->ft)) {
+ /* fills up whole free space gap */
+ bzero(ext, sizeof(ds5ext_t));
+
+ if (verbose)
+ puts ("FMT5 del extent: fills whole gap");
+
+ counter++;
+ break;
+ }
+
+ if ((a == ext->t) && ((b < ext->fc) || (c < ext->ft))) {
+ /* left-bounded in free space gap */
+ ext->t = ext->t + b*trk + c;
+
+ if (c > ext->ft) {
+ ext->fc -= (b + 1);
+ ext->ft -= (c - trk);
+ } else {
+ ext->fc -= b;
+ ext->ft -= c;
+ }
+
+ if (verbose)
+ puts ("FMT5 del extent: left bounded");
+
+ counter++;
+ break;
+ }
+
+ if ((ext->t < a)
+ && ((ext->t + ext->fc*trk + ext->ft) == (a + b*trk + c)))
+ {
+ /* right-bounded in free space gap */
+ if (c > ext->ft) {
+ ext->fc -= (b + 1);
+ ext->ft -= (c - trk);
+ } else {
+ ext->fc -= b;
+ ext->ft -= c;
+ }
+
+ if (verbose)
+ puts ("FMT5 del extent: right bounded");
+
+ counter++;
+ break;
+ }
+
+ if ((a > ext->t)
+ && ((ext->t + ext->fc*trk + ext->ft) > (a + b*trk + c)))
+ {
+ /* partition devides free space into 2 pieces */
+ u_int16_t x = a + b*trk + c;
+ u_int16_t w,y;
+ u_int8_t z;
+
+ w = (ext->t + ext->fc*trk + ext->ft) - (a + b*trk + c);
+ y = w / trk;
+ z = w % trk;
+
+ ext->fc = (a - ext->t) / trk;
+ ext->ft = (a - ext->t) % trk;
+
+ vtoc_update_format5_label_add(f5, verbose,
+ trk, x, y, z);
+
+ if (verbose)
+ puts ("FMT5 del extent: 2 pieces");
+
+ counter++;
+ break;
+ }
+
+ if ((a < ext->t) && (a + b*trk + c > ext->t)
+ && (a + b*trk + c < ext->t + ext->fc*trk + ext->ft))
+ {
+ puts ("BUG: corresponding free space extent "
+ "doesn't match free space currently shown "
+ "in FMT5 DSCB!\nexiting...");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((a > ext->t) && (a < ext->t + ext->fc*trk + ext->ft)
+ && (a + b*trk + c > ext->t + ext->fc*trk + ext->ft))
+ {
+ puts ("BUG: specified free space extent for "
+ "deleting doesn't match free space "
+ "currently shown in FMT5 DSCB!\n"
+ "exiting...");
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (counter > 0)
+ return;
+
+ puts ("BUG: specified free space extent for "
+ "deleting not found in FMT5 DSCB!\n"
+ "exiting...");
+ exit(EXIT_FAILURE);
+}
+
+/*
+ * reorganizes all extents within a FMT7 label
+ */
+static void
+vtoc_reorganize_FMT7_extents (format7_label_t *f7)
+{
+ PDEBUG
+ ds7ext_t *ext, *last, tmp;
+ int i, j;
+
+ for (i=0; i<16; i++) {
+ if (i<5)
+ last = &f7->DS7EXTNT[i];
+ else
+ last = &f7->DS7ADEXT[i-5];
+
+ for (j=i; j<16; j++) {
+ if (j<5)
+ ext = &f7->DS7EXTNT[j];
+ else
+ ext = &f7->DS7ADEXT[j-5];
+
+ if (((ext->a > 0) && (last->a == 0))
+ || ((ext->a > 0) && (ext->a < last->a)))
+ {
+ tmp.a = last->a;
+ tmp.b = last->b;
+ last->a = ext->a;
+ last->b = ext->b;
+ ext->a = tmp.a;
+ ext->b = tmp.b;
+ }
+ }
+ }
+}
+
+/*
+ * add a free space extent description to the VTOC FMT7 DSCB
+ */
+void
+vtoc_update_format7_label_add (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b)
+{
+ PDEBUG
+ ds7ext_t *ext = NULL, *tmp = NULL;
+ int i;
+
+ for (i=0; i<16; i++) {
+ if (i<5)
+ ext = &f7->DS7EXTNT[i];
+ else
+ ext = &f7->DS7ADEXT[i-5];
+
+ if (((a < ext->a) && (b > ext->a) && (b < ext->b))
+ || ((a > ext->a) && (a < ext->b) && (b > ext->b)))
+ {
+ puts ("BUG: overlapping free space extents "
+ "in FMT7 DSCB!\nexiting...");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((ext->a + ext->b) == 0x00000000) {
+ ext->a = a;
+ ext->b = b;
+ tmp = ext;
+
+ if (verbose)
+ puts ("FMT7 add extent: add new extent");
+
+ break;
+ }
+ }
+
+ if (tmp == NULL) {
+ /* BUG: no free extent found */
+ puts ("BUG: no free FMT7 DSCB extent found!\nexiting...");
+ exit(EXIT_FAILURE);
+ }
+
+ for (i=0; i<16; i++) {
+ if (i<5)
+ ext = &f7->DS7EXTNT[i];
+ else
+ ext = &f7->DS7ADEXT[i-5];
+
+ if ((ext->a + ext->b) == 0x00000000)
+ continue;
+
+ if (ext->b == tmp->a) {
+ /* this extent precedes the new one */
+ ext->b = tmp->b;
+ bzero(tmp, sizeof(ds7ext_t));
+ tmp = ext;
+
+ if (verbose)
+ puts ("FMT7 add extent: "
+ "merge with predecessor");
+
+ i = -1;
+ continue;
+ }
+
+ if (ext->a == tmp->b) {
+ /* this extent succeeds the new one */
+ ext->a = tmp->a;
+ bzero(tmp, sizeof(ds7ext_t));
+ tmp = ext;
+
+ if (verbose)
+ puts ("FMT7 add extent: merge with successor");
+
+ i = -1;
+ continue;
+ }
+ }
+}
+
+/*
+ * remove a free space extent description from the VTOC FMT7 DSCB
+ */
+void
+vtoc_update_format7_label_del (format7_label_t *f7, int verbose,
+ u_int32_t a, u_int32_t b)
+{
+ PDEBUG
+ ds7ext_t *ext;
+ int i, counter=0;
+
+ for (i=0; i<16; i++) {
+ if (i<5)
+ ext = &f7->DS7EXTNT[i];
+ else
+ ext = &f7->DS7ADEXT[i-5];
+
+ if ((a == ext->a) && (b == ext->b)) {
+ /* fills up whole free space gap */
+ bzero(ext, sizeof(ds7ext_t));
+
+ if (verbose)
+ puts ("FMT7 del extent: fills whole gap");
+
+ counter++;
+ break;
+ }
+
+ if ((a == ext->a) && (b < ext->b)) {
+ /* left-bounded in free space gap */
+ ext->a = b;
+
+ if (verbose)
+ puts ("FMT7 add extent: left-bounded");
+
+ counter++;
+ break;
+ }
+
+ if ((a > ext->a) && (b == ext->b)) {
+ /* right-bounded in free space gap */
+ ext->b = a;
+
+ if (verbose)
+ puts ("FMT7 add extent: right-bounded");
+
+ counter++;
+ break;
+ }
+
+ if ((a > ext->a) && (b < ext->b)) {
+ /* partition devides free space into 2 pieces */
+ vtoc_update_format7_label_add(f7, verbose, b, ext->b);
+ ext->b = a;
+
+ if (verbose)
+ puts ("FMT7 add extent: 2 pieces");
+
+ counter++;
+ break;
+ }
+
+ if (((a < ext->a) && (b > ext->a)) || ((a < ext->b) && (b > ext->b))) {
+ puts ("BUG: specified free space extent for deleting "
+ "doesn't match free space currently shown in "
+ "FMT7 DSCB!\nexiting...");
+ printf ("%d %d %d %d\n", a, b, ext->a, ext->b);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (counter > 0)
+ return;
+
+ puts ("BUG: specified free space extent for "
+ "deleting not found in FMT7 DSCB!\n"
+ "exiting...");
+ exit(EXIT_FAILURE);
+}
+
+void
+vtoc_set_freespace(format4_label_t *f4, format5_label_t *f5,
+ format7_label_t *f7, char ch, int verbose,
+ u_int32_t start, u_int32_t stop, u_int32_t cyl,
+ u_int32_t trk)
+{
+ PDEBUG
+ if ((cyl * trk) > BIG_DISK_SIZE) {
+ if (ch == '+')
+ vtoc_update_format7_label_add(f7, verbose, start,
+ /* ds7ext RTA + 1 */
+ stop + 1);
+ else if (ch == '-')
+ vtoc_update_format7_label_del(f7, verbose, start,
+ /* ds7ext RTA + 1 */
+ stop + 1);
+ else
+ puts ("BUG: syntax error in vtoc_set_freespace call");
+
+ vtoc_reorganize_FMT7_extents (f7);
+
+ f4->DS4VTOCI = 0xa0;
+ f4->DS4EFLVL = 0x07;
+ vtoc_set_cchhb(&f4->DS4EFPTR, 0x0000, 0x0001, 0x03);
+ } else {
+ u_int16_t x,y;
+ u_int8_t z;
+
+ x = (u_int16_t) start;
+ y = (u_int16_t) ((stop - start + 1) / trk);
+ z = (u_int8_t) ((stop - start + 1) % trk);
+
+ if (ch == '+')
+ vtoc_update_format5_label_add(f5, verbose, trk, x, y, z);
+ else if (ch == '-')
+ vtoc_update_format5_label_del(f5, verbose, trk, x, y, z);
+ else
+ puts ("BUG: syntax error in vtoc_set_freespace call");
+
+ vtoc_reorganize_FMT5_extents (f5);
+ }
+}
diff --git a/libparted/libparted.c b/libparted/libparted.c
new file mode 100644
index 0000000..204ce00
--- /dev/null
+++ b/libparted/libparted.c
@@ -0,0 +1,262 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "configmake.h"
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include "architecture.h"
+
+#if ENABLE_NLS
+# include <locale.h>
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+/* ped_malloc() debugging. Stick the address and size of memory blocks that
+ * weren't free()d in here, and an exception will be thrown when it is
+ * allocated. That way, you can find out what, exactly, the allocated thing
+ * is, and where it is created.
+ */
+typedef struct
+{
+ void* pointer;
+ size_t size;
+} pointer_size_type;
+
+/* IMHO, none of the DEBUG-related code below is useful, and the
+ ped_malloc memset code is actually quite harmful: it masked at
+ least two nasty bugs that were fixed in June of 2007. */
+#undef DEBUG
+#ifdef DEBUG
+static pointer_size_type dodgy_malloc_list[] = {
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0},
+ {0, 0}
+};
+
+static int dodgy_memory_active[100];
+#endif /* DEBUG */
+
+extern void ped_disk_aix_init ();
+extern void ped_disk_bsd_init ();
+extern void ped_disk_dvh_init ();
+extern void ped_disk_gpt_init ();
+extern void ped_disk_loop_init ();
+extern void ped_disk_mac_init ();
+extern void ped_disk_msdos_init ();
+extern void ped_disk_pc98_init ();
+extern void ped_disk_sun_init ();
+extern void ped_disk_amiga_init ();
+extern void ped_disk_dasd_init ();
+extern void ped_disk_atari_init ();
+
+static void
+init_disk_types ()
+{
+ /* Note that probing is done in the reverse order of init */
+ ped_disk_loop_init (); /* must be last in the probe list */
+
+#if defined __s390__ || defined __s390x__
+ ped_disk_dasd_init();
+#endif
+ ped_disk_atari_init (); /* easy false positives, so probe others first */
+ ped_disk_sun_init ();
+#ifdef ENABLE_PC98
+ ped_disk_pc98_init ();
+#endif
+ ped_disk_msdos_init ();
+ ped_disk_mac_init ();
+ ped_disk_gpt_init ();
+ ped_disk_dvh_init ();
+ ped_disk_bsd_init ();
+ ped_disk_amiga_init ();
+ ped_disk_aix_init ();
+}
+
+extern void ped_file_system_amiga_init (void);
+extern void ped_file_system_xfs_init (void);
+extern void ped_file_system_ufs_init (void);
+extern void ped_file_system_reiserfs_init (void);
+extern void ped_file_system_ntfs_init (void);
+extern void ped_file_system_linux_swap_init (void);
+extern void ped_file_system_jfs_init (void);
+extern void ped_file_system_hfs_init (void);
+extern void ped_file_system_fat_init (void);
+extern void ped_file_system_f2fs_init (void);
+extern void ped_file_system_ext2_init (void);
+extern void ped_file_system_nilfs2_init (void);
+extern void ped_file_system_btrfs_init (void);
+extern void ped_file_system_udf_init (void);
+
+static void
+init_file_system_types ()
+{
+ ped_file_system_amiga_init ();
+ ped_file_system_xfs_init ();
+ ped_file_system_ufs_init ();
+ ped_file_system_reiserfs_init ();
+ ped_file_system_ntfs_init ();
+ ped_file_system_linux_swap_init ();
+ ped_file_system_jfs_init ();
+ ped_file_system_hfs_init ();
+ ped_file_system_fat_init ();
+ ped_file_system_f2fs_init ();
+ ped_file_system_ext2_init ();
+ ped_file_system_nilfs2_init ();
+ ped_file_system_btrfs_init ();
+ ped_file_system_udf_init ();
+}
+
+extern void ped_disk_aix_done ();
+extern void ped_disk_bsd_done ();
+extern void ped_disk_dvh_done ();
+extern void ped_disk_gpt_done ();
+extern void ped_disk_loop_done ();
+extern void ped_disk_mac_done ();
+extern void ped_disk_msdos_done ();
+extern void ped_disk_pc98_done ();
+extern void ped_disk_sun_done ();
+extern void ped_disk_amiga_done ();
+extern void ped_disk_dasd_done ();
+extern void ped_disk_atari_done ();
+
+static void
+done_disk_types ()
+{
+#if defined __s390__ || __s390x__
+ ped_disk_dasd_done ();
+#endif
+ ped_disk_sun_done ();
+#ifdef ENABLE_PC98
+ ped_disk_pc98_done ();
+#endif
+ ped_disk_msdos_done ();
+ ped_disk_mac_done ();
+ ped_disk_loop_done ();
+ ped_disk_gpt_done ();
+ ped_disk_dvh_done ();
+ ped_disk_bsd_done ();
+ ped_disk_amiga_done ();
+ ped_disk_aix_done ();
+ ped_disk_atari_done ();
+}
+
+static void _init() __attribute__ ((constructor));
+
+static void
+_init()
+{
+#ifdef ENABLE_NLS
+ bindtextdomain (PACKAGE, LOCALEDIR);
+#endif
+
+ init_disk_types ();
+ init_file_system_types ();
+ ped_set_architecture ();
+#ifdef DEBUG
+ memset (dodgy_memory_active, 0, sizeof (dodgy_memory_active));
+#endif
+}
+
+extern void ped_file_system_nilfs2_done (void);
+extern void ped_file_system_ext2_done (void);
+extern void ped_file_system_fat_done (void);
+extern void ped_file_system_f2fs_done (void);
+extern void ped_file_system_hfs_done (void);
+extern void ped_file_system_jfs_done (void);
+extern void ped_file_system_linux_swap_done (void);
+extern void ped_file_system_ntfs_done (void);
+extern void ped_file_system_reiserfs_done (void);
+extern void ped_file_system_ufs_done (void);
+extern void ped_file_system_xfs_done (void);
+extern void ped_file_system_amiga_done (void);
+extern void ped_file_system_btrfs_done (void);
+extern void ped_file_system_udf_done (void);
+
+static void
+done_file_system_types ()
+{
+ ped_file_system_nilfs2_done ();
+ ped_file_system_ext2_done ();
+ ped_file_system_f2fs_done ();
+ ped_file_system_fat_done ();
+ ped_file_system_hfs_done ();
+ ped_file_system_jfs_done ();
+ ped_file_system_linux_swap_done ();
+ ped_file_system_ntfs_done ();
+ ped_file_system_reiserfs_done ();
+ ped_file_system_ufs_done ();
+ ped_file_system_xfs_done ();
+ ped_file_system_amiga_done ();
+ ped_file_system_btrfs_done ();
+ ped_file_system_udf_done ();
+}
+
+static void _done() __attribute__ ((destructor));
+
+static void
+_done()
+{
+ ped_device_free_all ();
+ done_disk_types ();
+ done_file_system_types ();
+}
+
+const char*
+ped_get_version ()
+{
+ return VERSION;
+}
+
+void*
+ped_malloc (size_t size)
+{
+ void* mem;
+
+ mem = (void*) malloc (size);
+ if (!mem) {
+ ped_exception_throw (PED_EXCEPTION_FATAL, PED_EXCEPTION_CANCEL,
+ _("Out of memory."));
+ return NULL;
+ }
+
+ return mem;
+}
+
+
+void* ped_calloc (size_t size)
+{
+ void* buf = ped_malloc (size);
+
+ memset (buf, 0, size);
+
+ return buf;
+}
diff --git a/libparted/mbr.s b/libparted/mbr.s
new file mode 100644
index 0000000..8ac2240
--- /dev/null
+++ b/libparted/mbr.s
@@ -0,0 +1,85 @@
+; libparted - a library for manipulating disk partitions
+; Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+; Foundation, Inc.
+;
+; This program is free software; you can redistribute it and/or modify
+; it under the terms of the GNU General Public License as published by
+; the Free Software Foundation; either version 3 of the License, or
+; (at your option) any later version.
+;
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+; NOTE: I build this with:
+; $ as86 -b /dev/stdout mbr.s | hexdump -e '8/1 "0x%02x, " "\n"'
+;
+; The build isn't done automagically by make, because as86 may not be on many
+; machines (particularly non-x86). Also, it seems rather difficult to get
+; as86 to build object files that can be linked, especially as it's 16 bit
+; code...
+
+USE16
+
+; This code, plus the partition table is loaded into 0000:7C00 by the BIOS
+
+.text
+
+; set top of stack to 1000:B000
+
+ cli
+
+ mov ax, #0x1000
+ mov ss, ax
+ mov sp, #0xB000
+
+ mov ax, #0x0000
+ mov ds, ax
+ mov es, ax
+
+ sti
+
+; Copy what the BIOS loaded (i.e. the MBR + head of partition table) from
+; 0000:7c00 to 0000:0600
+
+ mov si, #0x7c00
+ mov di, #0x0600
+ mov cx, #0x200
+ rep
+ movsb
+
+; Jump to the copy of the MBR
+
+ jmp 0x0000:find_boot_partition + 0x0600
+
+find_boot_partition:
+ mov si, #0x07BE
+
+check_next_bootable:
+ cmp [si], al
+ jnz found_bootable
+ add si, #0x0010
+ cmp si, #0x07FE
+ jnz check_next_bootable
+ jmp error
+
+found_bootable:
+
+; Load in the boot sector at 0000:7c00
+
+ mov ah, #2 ; BIOS command (read)
+ mov al, #1 ; count
+ mov bx, #0x7c00 ; destination pointer
+ mov dl, #0x80 ; drive
+ mov dh, byte ptr [si + 1] ; head
+ mov cx, word ptr [si + 2] ; sector / cylinder
+ int #0x13 ; BIOS read interrupt
+
+ jmp 0x0000:0x7c00 ; hand control to boot sector
+
+error:
+ jmp error
diff --git a/libparted/tests/Makefile.am b/libparted/tests/Makefile.am
new file mode 100644
index 0000000..1097743
--- /dev/null
+++ b/libparted/tests/Makefile.am
@@ -0,0 +1,40 @@
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+#
+# This file may be modified and/or distributed without restriction.
+
+TESTS = t1000-label.sh t1001-flags.sh t2000-disk.sh t2100-zerolen.sh \
+ t3000-symlink.sh t4000-volser.sh
+EXTRA_DIST = $(TESTS)
+check_PROGRAMS = label disk zerolen symlink volser flags
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/libparted/libparted.la \
+ $(CHECK_LIBS) \
+ -lpthread
+
+AM_CPPFLAGS = \
+ $(CHECK_CFLAGS) \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+label_SOURCES = common.h common.c label.c
+disk_SOURCES = common.h common.c disk.c
+zerolen_SOURCES = common.h common.c zerolen.c
+symlink_SOURCES = common.h common.c symlink.c
+volser_SOURCES = common.h common.c volser.c
+flags_SOURCES = common.h common.c flags.c
+
+# Arrange to symlink to tests/init.sh.
+CLEANFILES = init.sh
+.PHONY: prereq
+prereq:
+ $(AM_V_GEN)ln -sf $(abs_top_srcdir)/tests/init.sh .
+$(TEST_LOGS): prereq
+
+TESTS_ENVIRONMENT = \
+ top_srcdir='$(top_srcdir)' \
+ abs_top_srcdir='$(abs_top_srcdir)' \
+ ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER)
diff --git a/libparted/tests/Makefile.in b/libparted/tests/Makefile.in
new file mode 100644
index 0000000..48fd115
--- /dev/null
+++ b/libparted/tests/Makefile.in
@@ -0,0 +1,2464 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# This file is part of GNU Parted
+# Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, Inc.
+#
+# This file may be modified and/or distributed without restriction.
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = label$(EXEEXT) disk$(EXEEXT) zerolen$(EXEEXT) \
+ symlink$(EXEEXT) volser$(EXEEXT) flags$(EXEEXT)
+subdir = libparted/tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am_disk_OBJECTS = common.$(OBJEXT) disk.$(OBJEXT)
+disk_OBJECTS = $(am_disk_OBJECTS)
+disk_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+disk_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+am_flags_OBJECTS = common.$(OBJEXT) flags.$(OBJEXT)
+flags_OBJECTS = $(am_flags_OBJECTS)
+flags_LDADD = $(LDADD)
+flags_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+am_label_OBJECTS = common.$(OBJEXT) label.$(OBJEXT)
+label_OBJECTS = $(am_label_OBJECTS)
+label_LDADD = $(LDADD)
+label_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+am_symlink_OBJECTS = common.$(OBJEXT) symlink.$(OBJEXT)
+symlink_OBJECTS = $(am_symlink_OBJECTS)
+symlink_LDADD = $(LDADD)
+symlink_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+am_volser_OBJECTS = common.$(OBJEXT) volser.$(OBJEXT)
+volser_OBJECTS = $(am_volser_OBJECTS)
+volser_LDADD = $(LDADD)
+volser_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+am_zerolen_OBJECTS = common.$(OBJEXT) zerolen.$(OBJEXT)
+zerolen_OBJECTS = $(am_zerolen_OBJECTS)
+zerolen_LDADD = $(LDADD)
+zerolen_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/common.Po ./$(DEPDIR)/disk.Po \
+ ./$(DEPDIR)/flags.Po ./$(DEPDIR)/label.Po \
+ ./$(DEPDIR)/symlink.Po ./$(DEPDIR)/volser.Po \
+ ./$(DEPDIR)/zerolen.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(disk_SOURCES) $(flags_SOURCES) $(label_SOURCES) \
+ $(symlink_SOURCES) $(volser_SOURCES) $(zerolen_SOURCES)
+DIST_SOURCES = $(disk_SOURCES) $(flags_SOURCES) $(label_SOURCES) \
+ $(symlink_SOURCES) $(volser_SOURCES) $(zerolen_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp \
+ $(top_srcdir)/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TESTS = t1000-label.sh t1001-flags.sh t2000-disk.sh t2100-zerolen.sh \
+ t3000-symlink.sh t4000-volser.sh
+
+EXTRA_DIST = $(TESTS)
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+LDADD = \
+ $(top_builddir)/libparted/libparted.la \
+ $(CHECK_LIBS) \
+ -lpthread
+
+AM_CPPFLAGS = \
+ $(CHECK_CFLAGS) \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+label_SOURCES = common.h common.c label.c
+disk_SOURCES = common.h common.c disk.c
+zerolen_SOURCES = common.h common.c zerolen.c
+symlink_SOURCES = common.h common.c symlink.c
+volser_SOURCES = common.h common.c volser.c
+flags_SOURCES = common.h common.c flags.c
+
+# Arrange to symlink to tests/init.sh.
+CLEANFILES = init.sh
+TESTS_ENVIRONMENT = \
+ top_srcdir='$(top_srcdir)' \
+ abs_top_srcdir='$(abs_top_srcdir)' \
+ ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libparted/tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu libparted/tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+disk$(EXEEXT): $(disk_OBJECTS) $(disk_DEPENDENCIES) $(EXTRA_disk_DEPENDENCIES)
+ @rm -f disk$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(disk_OBJECTS) $(disk_LDADD) $(LIBS)
+
+flags$(EXEEXT): $(flags_OBJECTS) $(flags_DEPENDENCIES) $(EXTRA_flags_DEPENDENCIES)
+ @rm -f flags$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(flags_OBJECTS) $(flags_LDADD) $(LIBS)
+
+label$(EXEEXT): $(label_OBJECTS) $(label_DEPENDENCIES) $(EXTRA_label_DEPENDENCIES)
+ @rm -f label$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(label_OBJECTS) $(label_LDADD) $(LIBS)
+
+symlink$(EXEEXT): $(symlink_OBJECTS) $(symlink_DEPENDENCIES) $(EXTRA_symlink_DEPENDENCIES)
+ @rm -f symlink$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(symlink_OBJECTS) $(symlink_LDADD) $(LIBS)
+
+volser$(EXEEXT): $(volser_OBJECTS) $(volser_DEPENDENCIES) $(EXTRA_volser_DEPENDENCIES)
+ @rm -f volser$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(volser_OBJECTS) $(volser_LDADD) $(LIBS)
+
+zerolen$(EXEEXT): $(zerolen_OBJECTS) $(zerolen_DEPENDENCIES) $(EXTRA_zerolen_DEPENDENCIES)
+ @rm -f zerolen$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(zerolen_OBJECTS) $(zerolen_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/volser.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zerolen.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+t1000-label.sh.log: t1000-label.sh
+ @p='t1000-label.sh'; \
+ b='t1000-label.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+t1001-flags.sh.log: t1001-flags.sh
+ @p='t1001-flags.sh'; \
+ b='t1001-flags.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+t2000-disk.sh.log: t2000-disk.sh
+ @p='t2000-disk.sh'; \
+ b='t2000-disk.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+t2100-zerolen.sh.log: t2100-zerolen.sh
+ @p='t2100-zerolen.sh'; \
+ b='t2100-zerolen.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+t3000-symlink.sh.log: t3000-symlink.sh
+ @p='t3000-symlink.sh'; \
+ b='t3000-symlink.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+t4000-volser.sh.log: t4000-volser.sh
+ @p='t4000-volser.sh'; \
+ b='t4000-volser.sh'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/common.Po
+ -rm -f ./$(DEPDIR)/disk.Po
+ -rm -f ./$(DEPDIR)/flags.Po
+ -rm -f ./$(DEPDIR)/label.Po
+ -rm -f ./$(DEPDIR)/symlink.Po
+ -rm -f ./$(DEPDIR)/volser.Po
+ -rm -f ./$(DEPDIR)/zerolen.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/common.Po
+ -rm -f ./$(DEPDIR)/disk.Po
+ -rm -f ./$(DEPDIR)/flags.Po
+ -rm -f ./$(DEPDIR)/label.Po
+ -rm -f ./$(DEPDIR)/symlink.Po
+ -rm -f ./$(DEPDIR)/volser.Po
+ -rm -f ./$(DEPDIR)/zerolen.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+.PHONY: prereq
+prereq:
+ $(AM_V_GEN)ln -sf $(abs_top_srcdir)/tests/init.sh .
+$(TEST_LOGS): prereq
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/libparted/tests/common.c b/libparted/tests/common.c
new file mode 100644
index 0000000..8c42ece
--- /dev/null
+++ b/libparted/tests/common.c
@@ -0,0 +1,94 @@
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <string.h>
+
+#include <check.h>
+
+#include "common.h"
+#include "xstrtol.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+size_t get_sector_size (void)
+{
+ char *p = getenv ("PARTED_SECTOR_SIZE");
+ size_t ss = 512;
+ unsigned long val;
+ if (p
+ && xstrtoul (p, NULL, 10, &val, NULL) == LONGINT_OK
+ && val % 512 == 0)
+ ss = val;
+
+ return ss;
+}
+
+PedExceptionOption
+_test_exception_handler (PedException* e)
+{
+ ck_abort_msg("Exception of type %s has been raised: %s",
+ ped_exception_get_type_string (e->type),
+ e->message);
+
+ return PED_EXCEPTION_UNHANDLED;
+}
+
+char*
+_create_disk (const off_t n_bytes)
+{
+ char* filename = strdup ("parted-test-XXXXXX");
+
+ if (filename == NULL)
+ return NULL;
+
+ int fd = mkstemp (filename);
+ if (fd < 0) {
+ free_filename:
+ free (filename);
+ return NULL;
+ }
+
+ FILE* disk = fdopen (fd, "w");
+ if (disk == NULL)
+ goto free_filename;
+
+ int fail = (fseek (disk, n_bytes, SEEK_SET) != 0
+ || fwrite ("", sizeof (char), 1, disk) != 1);
+
+ if (fclose (disk) != 0 || fail)
+ goto free_filename;
+
+ return filename;
+}
+
+PedDisk*
+_create_disk_label (PedDevice *dev, PedDiskType *type)
+{
+ PedDisk* disk = NULL;
+
+ /* Create the label */
+ disk = ped_disk_new_fresh (dev, type);
+ ck_assert_msg(disk != NULL, "Failed to create a label of type: %s",
+ type->name);
+ ck_assert_msg(ped_disk_commit(disk) != 0,
+ "Failed to commit label to device");
+
+ return disk;
+}
+
+int
+_implemented_disk_label (const char *label)
+{
+ /* FIXME: these have minor problems, so skip them, temporarily. */
+ if (STREQ (label, "amiga")) return 0;
+
+ if (STREQ (label, "atari") && get_sector_size() != 512)
+ return 0;
+
+ /* Not implemented yet */
+ if (STREQ (label, "aix")) return 0;
+ if (STREQ (label, "pc98")) return 0;
+
+ return 1;
+}
diff --git a/libparted/tests/common.h b/libparted/tests/common.h
new file mode 100644
index 0000000..5d7485e
--- /dev/null
+++ b/libparted/tests/common.h
@@ -0,0 +1,31 @@
+#include <parted/parted.h>
+
+/* Determine sector size from environment
+ *
+ */
+size_t get_sector_size (void);
+
+/* Create an empty disk image
+ *
+ * filename: file (with full path) where to write the disk image
+ * size: size of disk image (megabytes)
+ */
+char* _create_disk (const off_t size);
+
+/* Create a disk label
+ *
+ * dev: device to use when creating the label
+ * type: label type
+ */
+PedDisk* _create_disk_label (PedDevice* dev, PedDiskType* type);
+
+/* Return if a disk label is implemented
+ *
+ * label: disk label name
+ */
+int _implemented_disk_label (const char* label) _GL_ATTRIBUTE_PURE;
+
+/* Test specific exception handler
+ *
+ */
+PedExceptionOption _test_exception_handler (PedException* e);
diff --git a/libparted/tests/disk.c b/libparted/tests/disk.c
new file mode 100644
index 0000000..a2e304c
--- /dev/null
+++ b/libparted/tests/disk.c
@@ -0,0 +1,112 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+static char* temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (get_sector_size () * 4 * 10 * 1024);
+ ck_assert_msg(temporary_disk != NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+/* TEST: Create a disklabel on a simple disk image */
+START_TEST (test_duplicate)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDisk* disk;
+ PedDisk* disk_dup;
+ PedPartition *part;
+ PedPartition *part_dup;
+ PedConstraint *constraint;
+
+ int part_num[] = {1, 5, 6, 0};
+
+ disk = _create_disk_label (dev, ped_disk_type_get ("msdos"));
+
+ constraint = ped_constraint_any (dev);
+
+ /* Primary partition from 16,4kB to 15MB */
+ part = ped_partition_new (disk, PED_PARTITION_EXTENDED,
+ NULL,
+ 32, 29311);
+ ped_disk_add_partition (disk, part, constraint);
+
+ /* Logical partition from 10MB to 15MB */
+ part = ped_partition_new (disk, PED_PARTITION_LOGICAL,
+ ped_file_system_type_get ("ext2"),
+ 19584, 29311);
+ ped_disk_add_partition (disk, part, constraint);
+
+ /* Logical partition from 16,4kB to 4981kB */
+ part = ped_partition_new (disk, PED_PARTITION_LOGICAL,
+ ped_file_system_type_get ("ext2"),
+ 32, 9727);
+ ped_disk_add_partition (disk, part, constraint);
+
+ ped_disk_commit (disk);
+
+ ped_constraint_destroy (constraint);
+
+ disk_dup = ped_disk_duplicate (disk);
+
+ /* Checks if both partitions match */
+ for (int *i = part_num; *i != 0; i++) {
+ part = ped_disk_get_partition (disk, *i);
+ part_dup = ped_disk_get_partition (disk_dup, *i);
+
+ ck_assert_msg(part->geom.start == part_dup->geom.start &&
+ part->geom.end == part_dup->geom.end,
+ "Duplicated partition %d doesn't match. "
+ "Details are start: %lld/%lld end: %lld/%lld\n",
+ *i, part->geom.start, part_dup->geom.start,
+ part->geom.end, part_dup->geom.end);
+ }
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("Disk");
+ TCase* tcase_duplicate = tcase_create ("Duplicate");
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_duplicate, create_disk, destroy_disk);
+ tcase_add_test (tcase_duplicate, test_duplicate);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_duplicate, 0);
+ suite_add_tcase (suite, tcase_duplicate);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/flags.c b/libparted/tests/flags.c
new file mode 100644
index 0000000..ff4ae71
--- /dev/null
+++ b/libparted/tests/flags.c
@@ -0,0 +1,116 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+static char* temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (80 * 1024 * 1024);
+ ck_assert_msg(temporary_disk != NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+/* TEST: Test partition type flag on gpt disklabel */
+START_TEST (test_gpt_flag)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("gpt"));
+ PedConstraint *constraint = ped_constraint_any (dev);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ ped_file_system_type_get("ext4"), 2048, 4096);
+ ped_partition_set_flag(part, PED_PARTITION_BIOS_GRUB, 1);
+ // Type should remain set to BIOS_GRUB
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ ped_disk_add_partition (disk, part, constraint);
+ ped_disk_commit (disk);
+ ped_constraint_destroy (constraint);
+
+ // Check flag to confirm it is still set
+ part = ped_disk_get_partition (disk, 1);
+ ck_assert_msg(ped_partition_get_flag(part, PED_PARTITION_BIOS_GRUB) == 1, "BIOS_GRUB flag not set");
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+}
+END_TEST
+
+/* TEST: Test partition type flag on msdos disklabel */
+START_TEST (test_msdos_flag)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDisk* disk = ped_disk_new_fresh (dev, ped_disk_type_get ("msdos"));
+ PedConstraint *constraint = ped_constraint_any (dev);
+ PedPartition *part = ped_partition_new (disk, PED_PARTITION_NORMAL,
+ ped_file_system_type_get("ext4"), 2048, 4096);
+ ped_partition_set_flag(part, PED_PARTITION_BLS_BOOT, 1);
+ // Type should remain set to BIOS_GRUB
+ ped_partition_set_system(part, ped_file_system_type_get("ext4"));
+
+ ped_disk_add_partition (disk, part, constraint);
+ ped_disk_commit (disk);
+ ped_constraint_destroy (constraint);
+
+ // Check flag to confirm it is still set
+ part = ped_disk_get_partition (disk, 1);
+ ck_assert_msg(ped_partition_get_flag(part, PED_PARTITION_BLS_BOOT) == 1, "BLS_BOOT flag not set");
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("Partition Flags");
+ TCase* tcase_gpt = tcase_create ("GPT");
+ TCase* tcase_msdos = tcase_create ("MSDOS");
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_gpt, create_disk, destroy_disk);
+ tcase_add_test (tcase_gpt, test_gpt_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_gpt, 0);
+ suite_add_tcase (suite, tcase_gpt);
+
+ tcase_add_checked_fixture (tcase_msdos, create_disk, destroy_disk);
+ tcase_add_test (tcase_msdos, test_msdos_flag);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_msdos, 0);
+ suite_add_tcase (suite, tcase_msdos);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/label.c b/libparted/tests/label.c
new file mode 100644
index 0000000..67b1b07
--- /dev/null
+++ b/libparted/tests/label.c
@@ -0,0 +1,195 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+static char* temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (80 * 1024 * 1024);
+ ck_assert_msg(temporary_disk != NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+/* TEST: Create a disklabel on a simple disk image */
+START_TEST (test_create_label)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDiskType* type;
+ PedDisk* disk;
+
+ for (type = ped_disk_type_get_next (NULL); type;
+ type = ped_disk_type_get_next (type)) {
+ fprintf (stderr, "create label: %s\n", type->name); fflush (stderr);
+
+ if (!_implemented_disk_label (type->name))
+ continue;
+
+ disk = _create_disk_label (dev, type);
+ ped_disk_destroy (disk);
+ }
+ ped_device_destroy (dev);
+}
+END_TEST
+
+/* TEST: Probe the disk label of a loop device. */
+START_TEST (test_probe_label)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDiskType* probed;
+ PedDiskType* type;
+ PedDisk* disk;
+
+ for (type = ped_disk_type_get_next (NULL); type;
+ type = ped_disk_type_get_next (type)) {
+ fprintf (stderr, "PROBE label: %s\n", type->name); fflush (stderr);
+ if (!_implemented_disk_label (type->name))
+ continue;
+
+ disk = _create_disk_label (dev, type);
+ ped_disk_destroy (disk);
+
+ /* Try to probe the disk label. */
+ probed = ped_disk_probe (dev);
+ ck_assert_msg(probed,
+ "Failed to probe the just created label of type: %s",
+ type->name);
+ if (probed && !STREQ (probed->name, type->name))
+ ck_abort_msg("Probe returned label of type: %s as type: %s",
+ type->name, probed->name);
+ }
+ ped_device_destroy (dev);
+}
+END_TEST
+
+/* TEST: Read the disk label of a loop device. */
+START_TEST (test_read_label)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDiskType* type;
+ PedDisk* disk;
+
+ for (type = ped_disk_type_get_next (NULL); type;
+ type = ped_disk_type_get_next (type)) {
+ fprintf (stderr, "read label: %s\n", type->name); fflush (stderr);
+ if (!_implemented_disk_label (type->name))
+ continue;
+
+ disk = _create_disk_label (dev, type);
+ ped_disk_destroy (disk);
+
+ /* Try to read the disk label. */
+ disk = ped_disk_new (dev);
+ ck_assert_msg(disk,
+ "Failed to read the just created label of type: %s",
+ type->name);
+ if (disk && !STREQ (disk->type->name, type->name))
+ ck_abort_msg("Read returned label of type: %s as type: %s",
+ type->name, disk->type->name);
+
+ ped_disk_destroy (disk);
+ }
+ ped_device_destroy (dev);
+}
+END_TEST
+
+/* TEST: Clone the disk label of a loop device. */
+START_TEST (test_clone_label)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev == NULL)
+ return;
+
+ PedDiskType* type;
+
+ for (type = ped_disk_type_get_next (NULL); type;
+ type = ped_disk_type_get_next (type)) {
+ fprintf (stderr, "clone label: %s\n", type->name); fflush (stderr);
+ if (!_implemented_disk_label (type->name))
+ continue;
+
+ PedDisk* disk = _create_disk_label (dev, type);
+
+ /* Try to clone the disk label. */
+ PedDisk* clone = ped_disk_duplicate (disk);
+ ck_assert_msg(clone,
+ "Failed to clone the just created label of type: %s",
+ type->name);
+
+ ped_disk_destroy (clone);
+ ped_disk_destroy (disk);
+ }
+ ped_device_destroy (dev);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("Disk Label");
+ TCase* tcase_basic = tcase_create ("Create");
+ TCase* tcase_probe = tcase_create ("Probe");
+ TCase* tcase_read = tcase_create ("Read");
+ TCase* tcase_clone = tcase_create ("Clone");
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_basic, create_disk, destroy_disk);
+ tcase_add_test (tcase_basic, test_create_label);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_basic, 0);
+ suite_add_tcase (suite, tcase_basic);
+
+ tcase_add_checked_fixture (tcase_probe, create_disk, destroy_disk);
+ tcase_add_test (tcase_probe, test_probe_label);
+ /* Disable timeout for this test. */
+ tcase_set_timeout (tcase_probe, 0);
+ suite_add_tcase (suite, tcase_probe);
+
+ tcase_add_checked_fixture (tcase_read, create_disk, destroy_disk);
+ tcase_add_test (tcase_read, test_read_label);
+ /* Disable timeout for this test. */
+ tcase_set_timeout (tcase_read, 0);
+ suite_add_tcase (suite, tcase_read);
+
+ tcase_add_checked_fixture (tcase_clone, create_disk, destroy_disk);
+ tcase_add_test (tcase_clone, test_clone_label);
+ /* Disable timeout for this test. */
+ tcase_set_timeout (tcase_clone, 0);
+ suite_add_tcase (suite, tcase_clone);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/symlink.c b/libparted/tests/symlink.c
new file mode 100644
index 0000000..7be02cd
--- /dev/null
+++ b/libparted/tests/symlink.c
@@ -0,0 +1,146 @@
+/* Sometimes libparted operates on device mapper files, with a path of
+ /dev/mapper/foo. With newer lvm versions /dev/mapper/foo is a symlink to
+ /dev/dm-#. However some storage administration programs (anaconda for
+ example) may do the following:
+ 1) Create a ped_device for /dev/mapper/foo
+ 2) ped_get_device resolves the symlink to /dev/dm-#, and the path
+ in the PedDevice struct points to /dev/dm-#
+ 3) The program does some things to lvm, causing the symlink to
+ point to a different /dev/dm-# node
+ 4) The program does something with the PedDevice, which results
+ in an operation on the wrong device
+
+ Newer libparted versions do not suffer from this problem, as they
+ do not canonicalize device names under /dev/mapper. This test checks
+ for this bug. */
+
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+static char *temporary_disk;
+
+static void
+create_disk (void)
+{
+ temporary_disk = _create_disk (4096 * 1024);
+ ck_assert_msg(temporary_disk != NULL, "Failed to create temporary disk");
+}
+
+static void
+destroy_disk (void)
+{
+ unlink (temporary_disk);
+ free (temporary_disk);
+}
+
+START_TEST (test_symlink)
+{
+ char cwd[256], ln[256] = "/dev/mapper/parted-test-XXXXXX";
+
+ if (!getcwd (cwd, sizeof cwd)) {
+ ck_abort_msg("Could not get cwd");
+ return;
+ }
+
+ /* Create a symlink under /dev/mapper to our
+ temporary disk */
+ int tmp_fd = mkstemp (ln);
+ if (tmp_fd == -1) {
+ ck_abort_msg("Could not create tempfile");
+ return;
+ }
+
+ /* There is a temp file vulnerability symlink attack possibility
+ here, but as /dev/mapper is root owned this is a non issue */
+ close (tmp_fd);
+ unlink (ln);
+ char temp_disk_path[259];
+ int r = snprintf(temp_disk_path, sizeof temp_disk_path, "%s/%s",
+ cwd,
+ temporary_disk);
+ if (r < 0 || r >= sizeof temp_disk_path) {
+ ck_abort_msg("symlink truncated");
+ return;
+ }
+
+ int res = symlink (temp_disk_path, ln);
+ if (res) {
+ ck_abort_msg("could not create symlink");
+ return;
+ }
+
+ PedDevice *dev = ped_device_get (ln);
+ if (dev == NULL)
+ goto exit_unlink_ln;
+
+ /* Create a second temporary_disk */
+ char *temporary_disk2 = _create_disk (4096 * 1024);
+ if (temporary_disk2 == NULL) {
+ ck_abort_msg("Failed to create 2nd temporary disk");
+ goto exit_destroy_dev;
+ }
+
+ /* Remove first temporary disk, and make temporary_disk point to
+ temporary_disk2 (for destroy_disk()). */
+ unlink (temporary_disk);
+ free (temporary_disk);
+ temporary_disk = temporary_disk2;
+
+ /* Update symlink to point to our new / second temporary disk */
+ unlink (ln);
+ r = snprintf (temp_disk_path, sizeof temp_disk_path, "%s/%s",
+ cwd, temporary_disk);
+ if (r < 0 || r >= sizeof temp_disk_path) {
+ ck_abort_msg("2nd symlink truncated");
+ goto exit_destroy_dev;
+ }
+
+ res = symlink (temp_disk_path, ln);
+ if (res) {
+ ck_abort_msg("could not create 2nd symlink");
+ goto exit_destroy_dev;
+ }
+
+ /* Do something to our PedDevice, if the symlink was resolved,
+ instead of remembering the /dev/mapper/foo name, this will fail */
+ ped_disk_clobber (dev);
+
+exit_destroy_dev:
+ ped_device_destroy (dev);
+exit_unlink_ln:
+ unlink (ln);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("Symlink");
+ TCase* tcase_symlink = tcase_create ("/dev/mapper symlink");
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_symlink, create_disk, destroy_disk);
+ tcase_add_test (tcase_symlink, test_symlink);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_symlink, 0);
+ suite_add_tcase (suite, tcase_symlink);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/tests/t1000-label.sh b/libparted/tests/t1000-label.sh
new file mode 100755
index 0000000..c71fe55
--- /dev/null
+++ b/libparted/tests/t1000-label.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+# run the label unit tests in a directory supporting O_DIRECT
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This wrapper around the ./label binary is used to find a directory
+# in which one can open a file with the O_DIRECT flag.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+label || fail=1
+
+Exit $fail
diff --git a/libparted/tests/t1001-flags.sh b/libparted/tests/t1001-flags.sh
new file mode 100755
index 0000000..7ceffe8
--- /dev/null
+++ b/libparted/tests/t1001-flags.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# run the flags unittest
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+flags || fail=1
+
+Exit $fail
diff --git a/libparted/tests/t2000-disk.sh b/libparted/tests/t2000-disk.sh
new file mode 100755
index 0000000..0e7c774
--- /dev/null
+++ b/libparted/tests/t2000-disk.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+# run the disk unit tests in a directory supporting O_DIRECT
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This wrapper around the ./label binary is used to find a directory
+# in which one can open a file with the O_DIRECT flag.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+disk || fail=1
+
+Exit $fail
diff --git a/libparted/tests/t2100-zerolen.sh b/libparted/tests/t2100-zerolen.sh
new file mode 100755
index 0000000..8b9bfe0
--- /dev/null
+++ b/libparted/tests/t2100-zerolen.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+# run the zerolen unit tests in a directory supporting O_DIRECT
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${abs_top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+. $abs_top_srcdir/tests/t-lib-helpers.sh
+# Need root privileges to create a device-mapper device.
+require_root_
+device_mapper_required_
+
+init_root_dir_
+
+# This test only makes sense on Linux.
+test "$(uname -s)" = Linux \
+ || skip_ "not on Linux"
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device map name - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$
+
+cleanup_fn_()
+{
+ # 'dmsetup remove' may fail because udev is still processing the device.
+ # Try it repeatedly for 2s.
+ i=0
+ incr=1
+ while :; do
+ dmsetup remove $linear_ > /dev/null 2>&1 && break
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i = 20 && break
+ done
+ if test $i = 20; then
+ dmsetup remove $linear_
+ fi
+
+ test -n "$d1" && losetup -d "$d1"
+ rm -f "$f1"
+}
+
+f1=$(pwd)/1
+d1=$(loop_setup_ "$f1") \
+ || skip_ "is this partition mounted with 'nodev'?"
+
+echo "0 1024 linear $d1 0" | dmsetup create "$linear_" \
+ || skip_ "unable to create dm device"
+
+wait_for_dev_to_appear_ "/dev/mapper/$linear_" \
+ || skip_ "dm device did not appear"
+
+zerolen /dev/mapper/$linear_ || fail=1
+
+Exit $fail
diff --git a/libparted/tests/t3000-symlink.sh b/libparted/tests/t3000-symlink.sh
new file mode 100755
index 0000000..cd92879
--- /dev/null
+++ b/libparted/tests/t3000-symlink.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+# run the /dev/mapper symlink test
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${abs_top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+. $abs_top_srcdir/tests/t-lib-helpers.sh
+# Need root privileges to create a symlink under /dev/mapper.
+require_root_
+
+symlink || fail=1
+
+Exit $fail
diff --git a/libparted/tests/t4000-volser.sh b/libparted/tests/t4000-volser.sh
new file mode 100755
index 0000000..89688ba
--- /dev/null
+++ b/libparted/tests/t4000-volser.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
+
+volser || fail=1
+
+Exit $fail
diff --git a/libparted/tests/volser.c b/libparted/tests/volser.c
new file mode 100644
index 0000000..4b6e2d1
--- /dev/null
+++ b/libparted/tests/volser.c
@@ -0,0 +1,191 @@
+/*
+ * Author: Wang Dong <dongdwdw@cn.ibm.com>
+ */
+
+#include <config.h>
+#include <unistd.h>
+#include <check.h>
+
+#include <parted/vtoc.h>
+#include <parted/device.h>
+#include <parted/fdasd.h>
+#include <parted/vtoc.h>
+#include "../arch/linux.h"
+#include "common.h"
+#include "progname.h"
+
+#if defined __s390__ || defined __s390x__
+
+/* set dasd first */
+static char vol_devno[7] = {0};
+static char *tmp_disk;
+static int fd;
+
+static PedDisk *disk;
+static struct fdasd_anchor anc;
+static fdasd_anchor_t *anchor = &anc;
+static LinuxSpecific *arch_specific;
+
+/* set the enviroment */
+static void set_test (void)
+{
+ PedDevice *dev;
+ PedDiskType *type;
+ type = ped_disk_type_get ("dasd");
+
+ tmp_disk = _create_disk (20*1024*1024);
+ ck_assert_msg(tmp_disk != NULL, "Failed to create temporary disk");
+ dev = ped_device_get (tmp_disk);
+ if (dev == NULL)
+ return;
+
+ disk = _create_disk_label (dev, type);
+ if (!ped_device_open (disk->dev))
+ return;
+
+ fdasd_initialize_anchor (anchor);
+ arch_specific = LINUX_SPECIFIC (disk->dev);
+ fd = arch_specific->fd;
+ if (!fdasd_get_geometry (dev, anchor, fd))
+ return;
+
+ fdasd_check_volume (anchor, fd);
+ sprintf (vol_devno, "0X%04x", anchor->devno);
+ ck_assert (strlen (vol_devno) == VOLSER_LENGTH);
+}
+
+static void free_test (void)
+{
+ ped_device_close (disk->dev);
+ ped_device_destroy (disk->dev);
+ unlink (tmp_disk);
+ free (tmp_disk);
+ fdasd_cleanup (anchor);
+}
+
+/* Test with default volser */
+START_TEST (test_get_volser)
+{
+ char volser[7] = {0};
+ fdasd_change_volser (anchor, vol_devno);
+ fdasd_write_labels (anchor, fd);
+
+ fdasd_get_volser (anchor, volser, fd);
+ ck_assert (!strcmp (volser, vol_devno));
+}
+END_TEST
+
+START_TEST (test_check_volser)
+{
+ char vol_long[] = "abcdefg";
+ char vol_short[] = "ab_c ";
+ char vol_null[] = " ";
+ char *vol_input = NULL;
+
+ vol_input = vol_long;
+ fdasd_check_volser (vol_input, anchor->devno);
+ ck_assert(!strcmp (vol_input, "ABCDEF"));
+
+ vol_input = vol_short;
+ fdasd_check_volser (vol_input, anchor->devno);
+ ck_assert (!strcmp (vol_input, "ABC"));
+
+ vol_input = vol_null;
+ fdasd_check_volser (vol_input, anchor->devno);
+ ck_assert (!strcmp (vol_input, vol_devno));
+}
+END_TEST
+
+START_TEST (test_change_volser)
+{
+
+ char vol[] = "000000";
+ char volser[7] = {0};
+
+ fdasd_change_volser (anchor, vol);
+ fdasd_write_labels (anchor, fd);
+
+ fdasd_get_volser (anchor, volser, fd);
+ ck_assert (!strcmp (volser, vol));
+}
+END_TEST
+
+/*
+ * fdsad_recreate_vtoc recreate the VTOC with existing one.
+ * So the partition information should be not changed after recreating
+ * VTOC.
+*/
+START_TEST (test_reuse_vtoc)
+{
+ ds5ext_t before;
+ ds5ext_t after;
+
+ memcpy (&before, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
+
+ if (anchor->fspace_trk) {
+ fdasd_reuse_vtoc (anchor);
+ memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
+ if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
+ ck_abort ();
+ } else {
+ fdasd_reuse_vtoc (anchor);
+ memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
+ if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
+ ck_abort ();
+ }
+}
+END_TEST
+
+#endif
+
+int main (int argc, char **argv)
+{
+
+ set_program_name (argv[0]);
+
+#if defined __s390__ || defined __s390x__
+
+ int number_failed = 0;
+
+ Suite *suite = suite_create ("Volser");
+
+ TCase *tcase_get = tcase_create ("Get");
+ TCase *tcase_check = tcase_create ("Check");
+ TCase *tcase_change = tcase_create ("Change");
+ TCase *tcase_vtoc = tcase_create ("Vtoc");
+
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_checked_fixture (tcase_check, set_test, free_test);
+ tcase_add_test (tcase_check, test_check_volser);
+ tcase_set_timeout (tcase_check, 0);
+ suite_add_tcase (suite, tcase_check);
+
+ tcase_add_checked_fixture (tcase_change, set_test, free_test);
+ tcase_add_test (tcase_change, test_change_volser);
+ tcase_set_timeout (tcase_change, 0);
+ suite_add_tcase (suite, tcase_change);
+
+ tcase_add_checked_fixture (tcase_get, set_test, free_test);
+ tcase_add_test (tcase_get, test_get_volser);
+ tcase_set_timeout (tcase_get, 0);
+ suite_add_tcase (suite, tcase_get);
+
+ tcase_add_checked_fixture (tcase_vtoc, set_test, free_test);
+ tcase_add_test (tcase_vtoc, test_reuse_vtoc);
+ tcase_set_timeout (tcase_vtoc, 0);
+ suite_add_tcase (suite, tcase_vtoc);
+
+ SRunner *srunner = srunner_create (suite);
+ /* When to debug, uncomment this line */
+ /* srunner_set_fork_status (srunner, CK_NOFORK); */
+
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+
+#endif
+ return 0;
+}
diff --git a/libparted/tests/zerolen.c b/libparted/tests/zerolen.c
new file mode 100644
index 0000000..2d9b424
--- /dev/null
+++ b/libparted/tests/zerolen.c
@@ -0,0 +1,52 @@
+#include <config.h>
+#include <unistd.h>
+
+#include <check.h>
+
+#include <parted/parted.h>
+
+#include "common.h"
+#include "progname.h"
+
+static const char* temporary_disk;
+
+/* TEST: Probe a zero-length disk image without raising an exception */
+START_TEST (test_probe)
+{
+ PedDevice* dev = ped_device_get (temporary_disk);
+ if (dev)
+ ped_device_destroy (dev);
+}
+END_TEST
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+ int number_failed;
+ Suite* suite = suite_create ("ZeroLen");
+ TCase* tcase_probe = tcase_create ("Probe");
+
+ if (argc < 2) {
+ ck_abort_msg("Insufficient arguments");
+ return EXIT_FAILURE;
+ }
+ temporary_disk = argv[1];
+ setenv ("PARTED_TEST_DEVICE_LENGTH", "0", 1);
+
+ /* Fail when an exception is raised */
+ ped_exception_set_handler (_test_exception_handler);
+
+ tcase_add_test (tcase_probe, test_probe);
+ /* Disable timeout for this test */
+ tcase_set_timeout (tcase_probe, 0);
+ suite_add_tcase (suite, tcase_probe);
+
+ SRunner* srunner = srunner_create (suite);
+ srunner_run_all (srunner, CK_VERBOSE);
+
+ number_failed = srunner_ntests_failed (srunner);
+ srunner_free (srunner);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/libparted/timer.c b/libparted/timer.c
new file mode 100644
index 0000000..b913150
--- /dev/null
+++ b/libparted/timer.c
@@ -0,0 +1,244 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2001, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file timer.c */
+
+/**
+ * \addtogroup PedTimer
+ *
+ * \brief A PedTimer keeps track of the progress of a single (possibly
+ * compound) operation.
+ *
+ * The user of libparted constructs a PedTimer, and passes it to libparted
+ * functions that are likely to be expensive operations
+ * (like ped_file_system_resize). Use of timers is optional... you may
+ * pass NULL instead.
+ *
+ * When you create a PedTimer, you must specify a timer handler function.
+ * This will be called when there's an update on how work is progressing.
+ *
+ * Timers may be nested. When a timer is constructed, you can choose
+ * to assign it a parent, along with an estimate of what proportion of
+ * the total (parent's) time will be used in the nested operation. In
+ * this case, the nested timer's handler is internal to libparted,
+ * and simply updates the parent's progress, and calls its handler.
+ *
+ * @{
+ */
+
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+typedef struct {
+ PedTimer* parent;
+ float nest_frac;
+ float start_frac;
+} NestedContext;
+
+
+/**
+ * \brief Creates a timer.
+ *
+ * Context will be passed in the \p context
+ * argument to the \p handler, when it is invoked.
+ *
+ * \return a new PedTimer
+ */
+PedTimer*
+ped_timer_new (PedTimerHandler* handler, void* context)
+{
+ PedTimer* timer;
+
+ PED_ASSERT (handler != NULL);
+
+ timer = (PedTimer*) ped_malloc (sizeof (PedTimer));
+ if (!timer)
+ return NULL;
+
+ timer->handler = handler;
+ timer->context = context;
+ ped_timer_reset (timer);
+ return timer;
+}
+
+
+/**
+ * \brief Destroys a \p timer.
+ */
+void
+ped_timer_destroy (PedTimer* timer)
+{
+ if (!timer)
+ return;
+
+ free (timer);
+}
+
+/* This function is used by ped_timer_new_nested() as the timer->handler
+ * function.
+ */
+static void
+_nest_handler (PedTimer* timer, void* context)
+{
+ NestedContext* ncontext = (NestedContext*) context;
+
+ ped_timer_update (
+ ncontext->parent,
+ ncontext->start_frac + ncontext->nest_frac * timer->frac);
+}
+
+
+/**
+ * \brief Creates a new nested timer.
+ *
+ * This function creates a "nested" timer that describes the progress
+ * of a subtask. \p parent is the parent timer, and \p nested_frac is
+ * the estimated proportion (between 0 and 1) of the time that will be
+ * spent doing the nested timer's operation. The timer should only be
+ * constructed immediately prior to starting the nested operation.
+ * (It will be inaccurate, otherwise).
+ * Updates to the progress of the subtask are propagated
+ * back through to the parent task's timer.
+ *
+ * \return nested timer
+ */
+PedTimer*
+ped_timer_new_nested (PedTimer* parent, float nest_frac)
+{
+ NestedContext* context;
+
+ if (!parent)
+ return NULL;
+
+ PED_ASSERT (nest_frac >= 0.0f);
+ PED_ASSERT (nest_frac <= 1.0f);
+
+ context = (NestedContext*) ped_malloc (sizeof (NestedContext));
+ if (!context)
+ return NULL;
+ context->parent = parent;
+ context->nest_frac = nest_frac;
+ context->start_frac = parent->frac;
+
+ return ped_timer_new (_nest_handler, context);
+}
+
+/**
+ * \brief Destroys a nested \p timer.
+ */
+void
+ped_timer_destroy_nested (PedTimer* timer)
+{
+ if (!timer)
+ return;
+
+ free (timer->context);
+ ped_timer_destroy (timer);
+}
+
+/**
+ * \internal
+ *
+ * \brief This function calls the update handler, making sure that it has
+ * the latest time.
+ *
+ * First it updates \p timer->now and recomputes \p timer->predicted_end,
+ * and then calls the handler.
+ */
+void
+ped_timer_touch (PedTimer* timer)
+{
+ if (!timer)
+ return;
+
+ timer->now = time (NULL);
+ if (timer->now > timer->predicted_end)
+ timer->predicted_end = timer->now;
+
+ timer->handler (timer, timer->context);
+}
+
+/**
+ * \internal
+ *
+ * \brief This function sets the \p timer into a "start of task" position.
+ *
+ * It resets the \p timer, by setting \p timer->start and \p timer->now
+ * to the current time.
+ */
+void
+ped_timer_reset (PedTimer* timer)
+{
+ if (!timer)
+ return;
+
+ timer->start = timer->now = timer->predicted_end = time (NULL);
+ timer->state_name = NULL;
+ timer->frac = 0;
+
+ ped_timer_touch (timer);
+}
+
+/**
+ * \internal
+ *
+ * \brief This function tells a \p timer what fraction \p frac of the task
+ * has been completed.
+ *
+ * Sets the new \p timer->frac, and calls ped_timer_touch().
+ */
+void
+ped_timer_update (PedTimer* timer, float frac)
+{
+ if (!timer)
+ return;
+
+ timer->now = time (NULL);
+ timer->frac = frac;
+
+ if (frac)
+ timer->predicted_end
+ = timer->start
+ + (long) ((timer->now - timer->start) / frac);
+
+ ped_timer_touch (timer);
+}
+
+/**
+ * \internal
+ *
+ * \brief This function changes the description of the current task that the
+ * \p timer describes.
+ *
+ * Sets a new name - \p state_name - for the current "phase" of the operation,
+ * and calls ped_timer_touch().
+ */
+void
+ped_timer_set_state_name (PedTimer* timer, const char* state_name)
+{
+ if (!timer)
+ return;
+
+ timer->state_name = state_name;
+ ped_timer_touch (timer);
+}
+
+/** @} */
diff --git a/libparted/unit.c b/libparted/unit.c
new file mode 100644
index 0000000..a63b98d
--- /dev/null
+++ b/libparted/unit.c
@@ -0,0 +1,586 @@
+/*
+ libparted - a library for manipulating disk partitions
+ Copyright (C) 2005, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/** \file unit.c */
+
+/**
+ * \addtogroup PedUnit
+ *
+ * \brief The PedUnit module provides a standard mechanism for describing
+ * and parsing locations within devices in human-friendly plain text.
+ *
+ * Internally, libparted uses PedSector (which is typedef'ed to be long long
+ * in <parted/device.h>) to describe device locations such as the start and
+ * end of partitions. However, sector numbers are often long and unintuitive.
+ * For example, my extended partition starts at sector 208845. PedUnit allows
+ * this location to be represented in more intutitive ways, including "106Mb",
+ * "0Gb" and "0%", as well as "208845s". PedUnit aims to provide facilities
+ * to provide a consistent system for describing device locations all
+ * throughout libparted.
+ *
+ * PedUnit provides two basic services: converting a PedSector into a text
+ * representation, and parsing a text representation into a PedSector.
+ * PedUnit currently supports these units:
+ *
+ * sectors, bytes, kilobytes, megabytes, gigabytes, terabytes, compact,
+ * cylinder and percent.
+ *
+ * PedUnit has a global variable that contains the default unit for all
+ * conversions.
+ *
+ * @{
+ */
+
+
+
+
+#include <config.h>
+#include <parted/parted.h>
+#include <parted/debug.h>
+#include <parted/unit.h>
+
+#include <ctype.h>
+#include <stdio.h>
+#include <float.h>
+
+#define N_(String) String
+#if ENABLE_NLS
+# include <libintl.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+
+static PedUnit default_unit = PED_UNIT_COMPACT;
+static const char* unit_names[] = {
+ "s",
+ "B",
+ "kB",
+ "MB",
+ "GB",
+ "TB",
+ "compact",
+ "cyl",
+ "chs",
+ "%",
+ "kiB",
+ "MiB",
+ "GiB",
+ "TiB"
+};
+
+
+/**
+ * \brief Set the default \p unit used by subsequent calls to the PedUnit API.
+ *
+ * In particular, this affects how locations inside error messages
+ * (exceptions) are displayed.
+ */
+void
+ped_unit_set_default (PedUnit unit)
+{
+ default_unit = unit;
+}
+
+
+/**
+ * \brief Get the current default unit.
+ */
+PedUnit _GL_ATTRIBUTE_PURE
+ped_unit_get_default ()
+{
+ return default_unit;
+}
+
+/**
+ * Get the byte size of a given \p unit.
+ */
+long long
+ped_unit_get_size (const PedDevice* dev, PedUnit unit)
+{
+ PedSector cyl_size = dev->bios_geom.heads * dev->bios_geom.sectors;
+
+ switch (unit) {
+ case PED_UNIT_SECTOR: return dev->sector_size;
+ case PED_UNIT_BYTE: return 1;
+ case PED_UNIT_KILOBYTE: return PED_KILOBYTE_SIZE;
+ case PED_UNIT_MEGABYTE: return PED_MEGABYTE_SIZE;
+ case PED_UNIT_GIGABYTE: return PED_GIGABYTE_SIZE;
+ case PED_UNIT_TERABYTE: return PED_TERABYTE_SIZE;
+ case PED_UNIT_KIBIBYTE: return PED_KIBIBYTE_SIZE;
+ case PED_UNIT_MEBIBYTE: return PED_MEBIBYTE_SIZE;
+ case PED_UNIT_GIBIBYTE: return PED_GIBIBYTE_SIZE;
+ case PED_UNIT_TEBIBYTE: return PED_TEBIBYTE_SIZE;
+ case PED_UNIT_CYLINDER: return cyl_size * dev->sector_size;
+ case PED_UNIT_CHS: return dev->sector_size;
+
+ case PED_UNIT_PERCENT:
+ return dev->length * dev->sector_size / 100;
+
+ case PED_UNIT_COMPACT:
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Cannot get unit size for special unit "
+ "'COMPACT'."));
+ return 0;
+ }
+
+ /* never reached */
+ PED_ASSERT(0);
+ return 0;
+}
+
+/**
+ * Get a textual (non-internationalized) representation of a \p unit.
+ *
+ * For example, the textual representation of PED_UNIT_SECTOR is "s".
+ */
+const char*
+ped_unit_get_name (PedUnit unit)
+{
+ return unit_names[unit];
+}
+
+/**
+ * Get a unit based on its textual representation: \p unit_name.
+ *
+ * For example, ped_unit_get_by_name("Mb") returns PED_UNIT_MEGABYTE.
+ */
+PedUnit
+ped_unit_get_by_name (const char* unit_name)
+{
+ PedUnit unit;
+ for (unit = PED_UNIT_FIRST; unit <= PED_UNIT_LAST; unit++) {
+ if (!strcasecmp (unit_names[unit], unit_name))
+ return unit;
+ }
+ return -1;
+}
+
+static char*
+ped_strdup (const char *str)
+{
+ char *result;
+ result = ped_malloc (strlen (str) + 1);
+ if (!result)
+ return NULL;
+ strcpy (result, str);
+ return result;
+}
+
+/**
+ * \brief Get a string that describes the location of the \p byte on
+ * device \p dev.
+ *
+ * The string is described with the desired \p unit.
+ * The returned string must be freed with free().
+ */
+char*
+ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte, PedUnit unit)
+{
+ char buf[100];
+ PedSector sector = byte / dev->sector_size;
+ double d, w;
+ int p;
+
+ PED_ASSERT (dev != NULL);
+
+ /* CHS has a special comma-separated format. */
+ if (unit == PED_UNIT_CHS) {
+ const PedCHSGeometry *chs = &dev->bios_geom;
+ snprintf (buf, 100, "%lld,%lld,%lld",
+ sector / chs->sectors / chs->heads,
+ (sector / chs->sectors) % chs->heads,
+ sector % chs->sectors);
+ return ped_strdup (buf);
+ }
+
+ /* Cylinders, sectors and bytes should be rounded down... */
+ if (unit == PED_UNIT_CYLINDER
+ || unit == PED_UNIT_SECTOR
+ || unit == PED_UNIT_BYTE) {
+ snprintf (buf, 100, "%lld%s",
+ byte / ped_unit_get_size (dev, unit),
+ ped_unit_get_name (unit));
+ return ped_strdup (buf);
+ }
+
+ if (unit == PED_UNIT_COMPACT) {
+ if (byte >= 10LL * PED_TERABYTE_SIZE)
+ unit = PED_UNIT_TERABYTE;
+ else if (byte >= 10LL * PED_GIGABYTE_SIZE)
+ unit = PED_UNIT_GIGABYTE;
+ else if (byte >= 10LL * PED_MEGABYTE_SIZE)
+ unit = PED_UNIT_MEGABYTE;
+ else if (byte >= 10LL * PED_KILOBYTE_SIZE)
+ unit = PED_UNIT_KILOBYTE;
+ else
+ unit = PED_UNIT_BYTE;
+ }
+
+ /* IEEE754 says that 100.5 has to be rounded to 100 (by printf) */
+ /* but 101.5 has to be rounded to 102... so we multiply by 1+E. */
+ /* This just divide by 2 the natural IEEE754 extended precision */
+ /* and won't cause any trouble before 1000 TB */
+ d = ((double)byte / ped_unit_get_size (dev, unit))
+ * (1. + DBL_EPSILON);
+ w = d + ( (d < 10. ) ? 0.005 :
+ (d < 100.) ? 0.05 :
+ 0.5 );
+ p = (w < 10. ) ? 2 :
+ (w < 100.) ? 1 :
+ 0 ;
+
+#ifdef __BEOS__
+ snprintf (buf, 100, "%.*f%s", p, d, ped_unit_get_name(unit));
+#else
+ snprintf (buf, 100, "%1$.*2$f%3$s", d, p, ped_unit_get_name (unit));
+#endif
+
+ return ped_strdup (buf);
+}
+
+/**
+ * \brief Get a string that describes the location of the \p byte on
+ * device \p dev.
+ *
+ * The string is described with the default unit, which is set
+ * by ped_unit_set_default().
+ * The returned string must be freed with free().
+ */
+char*
+ped_unit_format_byte (const PedDevice* dev, PedSector byte)
+{
+ PED_ASSERT (dev != NULL);
+ return ped_unit_format_custom_byte (dev, byte, default_unit);
+}
+
+/**
+ * \brief Get a string that describes the location \p sector on device \p dev.
+ *
+ * The string is described with the desired \p unit.
+ * The returned string must be freed with free().
+ */
+char*
+ped_unit_format_custom (const PedDevice* dev, PedSector sector, PedUnit unit)
+{
+ PED_ASSERT (dev != NULL);
+ return ped_unit_format_custom_byte(dev, sector*dev->sector_size, unit);
+}
+
+/**
+ * \brief Get a string that describes the location \p sector on device \p dev.
+ *
+ * The string is described with the default unit, which is set
+ * by ped_unit_set_default().
+ * The returned string must be freed with free().
+ */
+char*
+ped_unit_format (const PedDevice* dev, PedSector sector)
+{
+ PED_ASSERT (dev != NULL);
+ return ped_unit_format_custom_byte (dev, sector * dev->sector_size,
+ default_unit);
+}
+
+/**
+ * If \p str contains a valid description of a location on \p dev,
+ * then \p *sector is modified to describe the location and a geometry
+ * is created in \p *range describing a 2 units large area centered on
+ * \p *sector. If the \p range as described here would be partially outside
+ * the device \p dev, the geometry returned is the intersection between the
+ * former and the whole device geometry. If no units are specified, then the
+ * default unit is assumed.
+ *
+ * \return \c 1 if \p str is a valid location description, \c 0 otherwise
+ */
+int
+ped_unit_parse (const char* str, const PedDevice* dev, PedSector *sector,
+ PedGeometry** range)
+{
+ return ped_unit_parse_custom (str, dev, default_unit, sector, range);
+}
+
+/* Inefficiently removes all spaces from a string, in-place. */
+static void
+strip_string (char* str)
+{
+ int i;
+
+ for (i = 0; str[i] != 0; i++) {
+ if (isspace (str[i])) {
+ int j;
+ for (j = i + 1; str[j] != 0; j++)
+ str[j - 1] = str[j];
+ }
+ }
+}
+
+
+/* Find non-number suffix. Eg: find_suffix("32Mb") returns a pointer to
+ * "Mb". */
+static char* _GL_ATTRIBUTE_PURE
+find_suffix (const char* str)
+{
+ while (str[0] != 0 && (isdigit (str[0]) || strchr(",.-", str[0])))
+ str++;
+ return (char *) str;
+}
+
+static void
+remove_punct (char* str)
+{
+ int i = 0;
+
+ for (i = 0; str[i]; i++) {
+ if (ispunct (str[i]))
+ str[i] = ' ';
+ }
+}
+
+static int _GL_ATTRIBUTE_PURE
+is_chs (const char* str)
+{
+ int punct_count = 0;
+ int i = 0;
+
+ for (i = 0; str[i]; i++)
+ punct_count += ispunct (str[i]) != 0;
+ return punct_count == 2;
+}
+
+static int
+parse_chs (const char* str, const PedDevice* dev, PedSector* sector,
+ PedGeometry** range)
+{
+ PedSector cyl_size = dev->bios_geom.heads * dev->bios_geom.sectors;
+ PedCHSGeometry chs;
+
+ char* copy = ped_strdup (str);
+ if (!copy)
+ return 0;
+ strip_string (copy);
+ remove_punct (copy);
+
+ if (sscanf (copy, "%d %d %d",
+ &chs.cylinders, &chs.heads, &chs.sectors) != 3) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("\"%s\" has invalid syntax for locations."),
+ copy);
+ goto error_free_copy;
+ }
+
+ if (chs.heads >= dev->bios_geom.heads) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("The maximum head value is %d."),
+ dev->bios_geom.heads - 1);
+ goto error_free_copy;
+ }
+ if (chs.sectors >= dev->bios_geom.sectors) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("The maximum sector value is %d."),
+ dev->bios_geom.sectors - 1);
+ goto error_free_copy;
+ }
+
+ *sector = 1LL * chs.cylinders * cyl_size
+ + chs.heads * dev->bios_geom.sectors
+ + chs.sectors;
+
+ if (*sector >= dev->length) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("The location %s is outside of the "
+ "device %s."),
+ str, dev->path);
+ goto error_free_copy;
+ }
+ if (range)
+ *range = ped_geometry_new (dev, *sector, 1);
+ free (copy);
+ return !range || *range != NULL;
+
+error_free_copy:
+ free (copy);
+ *sector = 0;
+ if (range)
+ *range = NULL;
+ return 0;
+}
+
+static PedSector
+clip (const PedDevice* dev, PedSector sector)
+{
+ if (sector < 0)
+ return 0;
+ if (sector > dev->length - 1)
+ return dev->length - 1;
+ return sector;
+}
+
+static PedGeometry*
+geometry_from_centre_radius (const PedDevice* dev,
+ PedSector sector, PedSector radius)
+{
+ PedSector start = clip (dev, sector - radius);
+ PedSector end = clip (dev, sector + radius);
+ if (sector - end > radius || start - sector > radius)
+ return NULL;
+ return ped_geometry_new (dev, start, end - start + 1);
+}
+
+static PedUnit
+parse_unit_suffix (const char* suffix, PedUnit suggested_unit)
+{
+ if (strlen (suffix) > 1 && tolower (suffix[1]) == 'i') {
+ switch (tolower (suffix[0])) {
+ case 'k': return PED_UNIT_KIBIBYTE;
+ case 'm': return PED_UNIT_MEBIBYTE;
+ case 'g': return PED_UNIT_GIBIBYTE;
+ case 't': return PED_UNIT_TEBIBYTE;
+ }
+ } else if (strlen (suffix) > 0) {
+ switch (tolower (suffix[0])) {
+ case 's': return PED_UNIT_SECTOR;
+ case 'b': return PED_UNIT_BYTE;
+ case 'k': return PED_UNIT_KILOBYTE;
+ case 'm': return PED_UNIT_MEGABYTE;
+ case 'g': return PED_UNIT_GIGABYTE;
+ case 't': return PED_UNIT_TERABYTE;
+ case 'c': return PED_UNIT_CYLINDER;
+ case '%': return PED_UNIT_PERCENT;
+ }
+ }
+
+ if (suggested_unit == PED_UNIT_COMPACT) {
+ if (default_unit == PED_UNIT_COMPACT)
+ return PED_UNIT_MEGABYTE;
+ else
+ return default_unit;
+ }
+
+ return suggested_unit;
+}
+
+/**
+ * If \p str contains a valid description of a location on \p dev, then
+ * \p *sector is modified to describe the location and a geometry is created
+ * in \p *range describing a 2 units large area centered on \p *sector. If the
+ * \p range as described here would be partially outside the device \p dev, the
+ * geometry returned is the intersection between the former and the whole
+ * device geometry. If no units are specified, then the default unit is
+ * assumed.
+ *
+ * \throws PED_EXCEPTION_ERROR if \p str contains invalid description of a
+ * location
+ * \throws PED_EXCEPTION_ERROR if location described by \p str
+ * is outside of the device \p dev->path
+ *
+ * \return \c 1 if \p str is a valid location description, \c 0 otherwise.
+ */
+int
+ped_unit_parse_custom (const char* str, const PedDevice* dev, PedUnit unit,
+ PedSector* sector, PedGeometry** range)
+{
+ char* copy;
+ char* suffix;
+ double num;
+ long long unit_size;
+ PedSector radius;
+
+ if (is_chs (str))
+ return parse_chs (str, dev, sector, range);
+
+ copy = ped_strdup (str);
+ if (!copy)
+ goto error;
+ strip_string (copy);
+
+ suffix = find_suffix (copy);
+ unit = parse_unit_suffix (suffix, unit);
+ suffix[0] = 0;
+
+ if (sscanf (copy, "%lf", &num) != 1) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Invalid number."));
+ goto error_free_copy;
+ }
+ if (num > 0 && num < 1) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Use a smaller unit instead of a value < 1"));
+ goto error_free_copy;
+ }
+
+ unit_size = ped_unit_get_size (dev, unit);
+ switch (unit) {
+ /* If the user specifies the address using IEC units e.g., 4MiB, as in
+ parted -s -- $dev mklabel gpt mkpart P-NAME 4MiB -34s
+ do not use size of the unit as the range. Rather, presume that they
+ are specifying precisely the starting or ending number,
+ and treat "4MiB" just as we would treat "4194304B". */
+ case PED_UNIT_KIBIBYTE:
+ case PED_UNIT_MEBIBYTE:
+ case PED_UNIT_GIBIBYTE:
+ case PED_UNIT_TEBIBYTE:
+ radius = 0;
+ break;
+ default:
+ radius = (ped_div_round_up (unit_size, dev->sector_size) / 2) - 1;
+ if (radius < 0)
+ radius = 0;
+ }
+
+ *sector = num * unit_size / dev->sector_size;
+ /* negative numbers count from the end */
+ if (copy[0] == '-')
+ *sector += dev->length;
+ if (range) {
+ *range = geometry_from_centre_radius (dev, *sector, radius);
+ if (!*range) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("The location %s is outside of the "
+ "device %s."),
+ str, dev->path);
+ goto error_free_copy;
+ }
+ }
+ *sector = clip (dev, *sector);
+
+ free (copy);
+ return 1;
+
+error_free_copy:
+ free (copy);
+error:
+ *sector = 0;
+ if (range)
+ *range = NULL;
+ return 0;
+}
+
+
+/** @} */
diff --git a/m4/00gnulib.m4 b/m4/00gnulib.m4
new file mode 100644
index 0000000..7fe03e0
--- /dev/null
+++ b/m4/00gnulib.m4
@@ -0,0 +1,85 @@
+# 00gnulib.m4 serial 8
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts before all other
+dnl gnulib-provided .m4 files. It is needed until the clang fix has
+dnl been included in Autoconf.
+
+# The following definitions arrange to use a compiler option
+# -Werror=implicit-function-declaration in AC_CHECK_DECL, when the
+# compiler is clang. Without it, clang implicitly declares "known"
+# library functions in C mode, but not in C++ mode, which would cause
+# Gnulib to omit a declaration and thus later produce an error in C++
+# mode. As of clang 9.0, these "known" functions are identified through
+# LIBBUILTIN invocations in the LLVM source file
+# llvm/tools/clang/include/clang/Basic/Builtins.def.
+# It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL,
+# because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed
+# to AC_REQUIRE anything: some configure.ac files have their first
+# AC_CHECK_DECL executed conditionally. Therefore append the extra tests
+# to AC_PROG_CC.
+AC_DEFUN([gl_COMPILER_CLANG],
+[
+dnl AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([whether the compiler is clang],
+ [gl_cv_compiler_clang],
+ [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error
+ dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has
+ dnl not yet been invoked.
+ _AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #ifdef __clang__
+ barfbarf
+ #endif
+ ]],[[]])
+ ],
+ [gl_cv_compiler_clang=no],
+ [gl_cv_compiler_clang=yes])
+ ])
+])
+AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL],
+[
+dnl AC_REQUIRE([AC_PROG_CC])
+dnl AC_REQUIRE([gl_COMPILER_CLANG])
+ AC_CACHE_CHECK([for compiler option needed when checking for declarations],
+ [gl_cv_compiler_check_decl_option],
+ [if test $gl_cv_compiler_clang = yes; then
+ dnl Test whether the compiler supports the option
+ dnl '-Werror=implicit-function-declaration'.
+ save_ac_compile="$ac_compile"
+ ac_compile="$ac_compile -Werror=implicit-function-declaration"
+ dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a
+ dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
+ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
+ [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'],
+ [gl_cv_compiler_check_decl_option=none])
+ ac_compile="$save_ac_compile"
+ else
+ gl_cv_compiler_check_decl_option=none
+ fi
+ ])
+ if test "x$gl_cv_compiler_check_decl_option" != xnone; then
+ ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option"
+ else
+ ac_compile_for_check_decl="$ac_compile"
+ fi
+])
+dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl
+dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC
+dnl in zzgnulib.m4 is inactive, use the original ac_compile.
+m4_define([_AC_CHECK_DECL_BODY],
+[ ac_save_ac_compile="$ac_compile"
+ if test -n "$ac_compile_for_check_decl"; then
+ ac_compile="$ac_compile_for_check_decl"
+ fi]
+m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile"
+])
+
+# gl_00GNULIB
+# -----------
+# Witness macro that this file has been included. Needed to force
+# Automake to include this file prior to all other gnulib .m4 files.
+AC_DEFUN([gl_00GNULIB])
diff --git a/m4/__inline.m4 b/m4/__inline.m4
new file mode 100644
index 0000000..acf8668
--- /dev/null
+++ b/m4/__inline.m4
@@ -0,0 +1,22 @@
+# Test for __inline keyword
+dnl Copyright 2017-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl___INLINE],
+[
+ AC_CACHE_CHECK([whether the compiler supports the __inline keyword],
+ [gl_cv_c___inline],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[typedef int foo_t;
+ static __inline foo_t foo (void) { return 0; }]],
+ [[return foo ();]])],
+ [gl_cv_c___inline=yes],
+ [gl_cv_c___inline=no])])
+ if test $gl_cv_c___inline = yes; then
+ AC_DEFINE([HAVE___INLINE], [1],
+ [Define to 1 if the compiler supports the keyword '__inline'.])
+ fi
+])
diff --git a/m4/absolute-header.m4 b/m4/absolute-header.m4
new file mode 100644
index 0000000..e794764
--- /dev/null
+++ b/m4/absolute-header.m4
@@ -0,0 +1,100 @@
+# absolute-header.m4 serial 17
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price.
+
+# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
+# ---------------------------------------
+# Find the absolute name of a header file, testing first if the header exists.
+# If the header were sys/inttypes.h, this macro would define
+# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
+# in config.h
+# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+AC_DEFUN([gl_ABSOLUTE_HEADER],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PREPROC_REQUIRE()dnl
+m4_foreach_w([gl_HEADER_NAME], [$1],
+ [AS_VAR_PUSHDEF([gl_absolute_header],
+ [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
+ AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+ [gl_absolute_header],
+ [AS_VAR_PUSHDEF([ac_header_exists],
+ [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
+ AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
+ if test AS_VAR_GET([ac_header_exists]) = yes; then
+ gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
+ fi
+ AS_VAR_POPDEF([ac_header_exists])dnl
+ ])dnl
+ AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
+ ["AS_VAR_GET([gl_absolute_header])"],
+ [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
+ AS_VAR_POPDEF([gl_absolute_header])dnl
+])dnl
+])# gl_ABSOLUTE_HEADER
+
+# gl_ABSOLUTE_HEADER_ONE(HEADER)
+# ------------------------------
+# Like gl_ABSOLUTE_HEADER, except that:
+# - it assumes that the header exists,
+# - it uses the current CPPFLAGS,
+# - it does not cache the result,
+# - it is silent.
+AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
+ dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+ dnl that contain only a #include of other header files and no
+ dnl non-comment tokens of their own. This leads to a failure to
+ dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+ dnl and others. The workaround is to force preservation of comments
+ dnl through option -C. This ensures all necessary #line directives
+ dnl are present. GCC supports option -C as well.
+ case "$host_os" in
+ aix*) gl_absname_cpp="$ac_cpp -C" ;;
+ *) gl_absname_cpp="$ac_cpp" ;;
+ esac
+changequote(,)
+ case "$host_os" in
+ mingw*)
+ dnl For the sake of native Windows compilers (excluding gcc),
+ dnl treat backslash as a directory separator, like /.
+ dnl Actually, these compilers use a double-backslash as
+ dnl directory separator, inside the
+ dnl # line "filename"
+ dnl directives.
+ gl_dirsep_regex='[/\\]'
+ ;;
+ *)
+ gl_dirsep_regex='\/'
+ ;;
+ esac
+ dnl A sed expression that turns a string into a basic regular
+ dnl expression, for use within "/.../".
+ gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+ gl_header_literal_regex=`echo '$1' \
+ | sed -e "$gl_make_literal_regex_sed"`
+ gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+ s|^/[^/]|//&|
+ p
+ q
+ }'
+changequote([,])
+ dnl eval is necessary to expand gl_absname_cpp.
+ dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+ dnl so use subshell.
+ AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]),
+[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+ sed -n "$gl_absolute_header_sed"`])
+])
diff --git a/m4/alloca.m4 b/m4/alloca.m4
new file mode 100644
index 0000000..c685fac
--- /dev/null
+++ b/m4/alloca.m4
@@ -0,0 +1,106 @@
+# alloca.m4 serial 21
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ALLOCA],
+[
+ AC_REQUIRE([AC_FUNC_ALLOCA])
+ if test $ac_cv_func_alloca_works = no; then
+ gl_PREREQ_ALLOCA
+ fi
+
+ # Define an additional variable used in the Makefile substitution.
+ if test $ac_cv_working_alloca_h = yes; then
+ AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
+ AC_EGREP_CPP([Need own alloca], [
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+ Need own alloca
+#endif
+ ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
+ ])
+ if test $gl_cv_rpl_alloca = yes; then
+ dnl OK, alloca can be implemented through a compiler built-in.
+ AC_DEFINE([HAVE_ALLOCA], [1],
+ [Define to 1 if you have 'alloca' after including <alloca.h>,
+ a header that may be supplied by this distribution.])
+ GL_GENERATE_ALLOCA_H=true
+ else
+ dnl alloca exists as a library function, i.e. it is slow and probably
+ dnl a memory leak. Don't define HAVE_ALLOCA in this case.
+ GL_GENERATE_ALLOCA_H=false
+ fi
+ else
+ GL_GENERATE_ALLOCA_H=true
+ fi
+
+ if test $ac_cv_working_alloca_h = yes; then
+ HAVE_ALLOCA_H=1
+ else
+ HAVE_ALLOCA_H=0
+ fi
+ AC_SUBST([HAVE_ALLOCA_H])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
+
+m4_version_prereq([2.70], [], [
+
+# This works around a bug in autoconf <= 2.68 and has simplifications
+# from 2.70. See:
+# https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=15edf7fd8094fd14a89d9891dd72a9624762597a
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of 'alloca'. Well, not exactly
+# AC_LIBOBJ since we actually set the output variable 'ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble. Some versions do not even contain alloca or
+# contain a buggy version. If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.])
+
+AC_CACHE_CHECK([stack direction for C alloca],
+ [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+ return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+ [ac_cv_c_stack_direction=1],
+ [ac_cv_c_stack_direction=-1],
+ [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([STACK_DIRECTION],
+[/* If using the C implementation of alloca, define if you know the
+ direction of stack growth for your system; otherwise it will be
+ automatically deduced at runtime.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+])
diff --git a/m4/arpa_inet_h.m4 b/m4/arpa_inet_h.m4
new file mode 100644
index 0000000..fa5fe83
--- /dev/null
+++ b/m4/arpa_inet_h.m4
@@ -0,0 +1,74 @@
+# arpa_inet_h.m4 serial 17
+dnl Copyright (C) 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Simon Josefsson and Bruno Haible
+
+AC_DEFUN_ONCE([gl_ARPA_INET_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
+
+ AC_CHECK_HEADERS_ONCE([arpa/inet.h])
+ if test $ac_cv_header_arpa_inet_h = yes; then
+ HAVE_ARPA_INET_H=1
+ else
+ HAVE_ARPA_INET_H=0
+ fi
+ AC_SUBST([HAVE_ARPA_INET_H])
+ dnl <arpa/inet.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([arpa/inet.h])
+
+ AC_REQUIRE([gl_FEATURES_H])
+
+ gl_PREREQ_SYS_H_WS2TCPIP
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+/* On some systems, this header is not self-consistent. */
+#if !(defined __GLIBC__ || defined __UCLIBC__)
+# include <sys/socket.h>
+#endif
+#ifdef __TANDEM
+# include <netdb.h>
+#endif
+#include <arpa/inet.h>
+ ]], [inet_ntop inet_pton])
+])
+
+# gl_ARPA_INET_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_ARPA_INET_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_ARPA_INET_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_NTOP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_PTON])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_ARPA_INET_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP])
+ HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON])
+ REPLACE_INET_NTOP=0; AC_SUBST([REPLACE_INET_NTOP])
+ REPLACE_INET_PTON=0; AC_SUBST([REPLACE_INET_PTON])
+])
diff --git a/m4/assert.m4 b/m4/assert.m4
new file mode 100644
index 0000000..deeac70
--- /dev/null
+++ b/m4/assert.m4
@@ -0,0 +1,24 @@
+#serial 7
+
+# Copyright (C) 1998-1999, 2001, 2004, 2008-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl based on code from Eleftherios Gkioulekas
+dnl Autoconf 2.60 provides AC_HEADER_ASSERT for the same purpose, but
+dnl it has broken semantics for --enable-assert until 2.64.
+AC_DEFUN([gl_ASSERT],
+[
+ AC_MSG_CHECKING([whether to enable assertions])
+ AC_ARG_ENABLE([assert],
+ [AS_HELP_STRING([--disable-assert], [turn off assertions])],
+ [AS_IF([test "x$enableval" = xno],
+ [AC_DEFINE([NDEBUG], [1],
+ [Define to 1 if assertions should be disabled.])],
+ [test "x$enableval" != xyes],
+ [AC_MSG_WARN([invalid argument supplied to --enable-assert])
+ enable_assert=yes])],
+ [enable_assert=yes])
+ AC_MSG_RESULT([$enable_assert])
+])
diff --git a/m4/assert_h.m4 b/m4/assert_h.m4
new file mode 100644
index 0000000..d255855
--- /dev/null
+++ b/m4/assert_h.m4
@@ -0,0 +1,73 @@
+# assert-h.m4
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_DEFUN([gl_ASSERT_H],
+[
+ AC_CACHE_CHECK([for static_assert], [gl_cv_static_assert],
+ [gl_save_CFLAGS=$CFLAGS
+ for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do
+ AS_CASE([$gl_working],
+ [*assert.h*], [CFLAGS="$gl_save_CFLAGS -DINCLUDE_ASSERT_H"])
+
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if defined __clang__ && __STDC_VERSION__ < 202311
+ #pragma clang diagnostic error "-Wc2x-extensions"
+ #pragma clang diagnostic error "-Wc++1z-extensions"
+ #endif
+ #ifdef INCLUDE_ASSERT_H
+ #include <assert.h>
+ #endif
+ static_assert (2 + 2 == 4, "arithmetic does not work");
+ static_assert (2 + 2 == 4);
+ ]],
+ [[
+ static_assert (sizeof (char) == 1, "sizeof does not work");
+ static_assert (sizeof (char) == 1);
+ ]])],
+ [gl_cv_static_assert=$gl_working],
+ [gl_cv_static_assert=no])
+ CFLAGS=$gl_save_CFLAGS
+ test "$gl_cv_static_assert" != no && break
+ done])
+
+ GL_GENERATE_ASSERT_H=false
+ AS_CASE([$gl_cv_static_assert],
+ [yes*keyword*],
+ [AC_DEFINE([HAVE_C_STATIC_ASSERT], [1],
+ [Define to 1 if the static_assert keyword works.])],
+ [no],
+ [GL_GENERATE_ASSERT_H=true
+ gl_NEXT_HEADERS([assert.h])])
+
+ dnl The "zz" puts this toward config.h's end, to avoid potential
+ dnl collisions with other definitions.
+ dnl #undef assert so that programs are not tempted to use it without
+ dnl specifically including assert.h.
+ dnl #undef __ASSERT_H__ so that on IRIX, when programs later include
+ dnl <assert.h>, this include actually defines assert.
+ dnl Break the #undef_s apart with a comment so that 'configure' does
+ dnl not comment them out.
+ AH_VERBATIM([zzstatic_assert],
+[#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \
+ && (!defined __cplusplus \
+ || (__cpp_static_assert < 201411 \
+ && __GNUG__ < 6 && __clang_major__ < 6)))
+ #include <assert.h>
+ #undef/**/assert
+ #ifdef __sgi
+ #undef/**/__ASSERT_H__
+ #endif
+ /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments.
+ We need it also to be invocable with a single argument. */
+ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus
+ #undef/**/static_assert
+ #define static_assert _Static_assert
+ #endif
+#endif])
+])
diff --git a/m4/btowc.m4 b/m4/btowc.m4
new file mode 100644
index 0000000..77218a7
--- /dev/null
+++ b/m4/btowc.m4
@@ -0,0 +1,105 @@
+# btowc.m4 serial 12
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_BTOWC],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+ dnl Check whether <wchar.h> is usable at all, first. Otherwise the test
+ dnl program below may lead to an endless loop. See
+ dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>.
+ AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+
+ AC_CHECK_FUNCS_ONCE([btowc])
+ if test $ac_cv_func_btowc = no; then
+ HAVE_BTOWC=0
+ else
+
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0.
+ AC_CACHE_CHECK([whether btowc(0) is correct],
+ [gl_cv_func_btowc_nul],
+ [
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <wchar.h>
+int main ()
+{
+ if (btowc ('\0') != 0)
+ return 1;
+ return 0;
+}]])],
+ [gl_cv_func_btowc_nul=yes],
+ [gl_cv_func_btowc_nul=no],
+ [
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_btowc_nul="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_btowc_nul="guessing yes" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_btowc_nul="guessing yes" ;;
+ esac
+changequote([,])dnl
+ ])
+ ])
+
+ dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF.
+ AC_CACHE_CHECK([whether btowc(EOF) is correct],
+ [gl_cv_func_btowc_eof],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on IRIX.
+ irix*) gl_cv_func_btowc_eof="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_btowc_eof="guessing yes" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_btowc_eof="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_FR != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdio.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ if (btowc (EOF) != WEOF)
+ return 1;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_btowc_eof=yes],
+ [gl_cv_func_btowc_eof=no],
+ [:])
+ fi
+ ])
+
+ case "$gl_cv_func_btowc_nul" in
+ *yes) ;;
+ *) REPLACE_BTOWC=1 ;;
+ esac
+ case "$gl_cv_func_btowc_eof" in
+ *yes) ;;
+ *) REPLACE_BTOWC=1 ;;
+ esac
+ fi
+])
+
+# Prerequisites of lib/btowc.c.
+AC_DEFUN([gl_PREREQ_BTOWC], [
+ :
+])
diff --git a/m4/build-to-host.m4 b/m4/build-to-host.m4
new file mode 100644
index 0000000..e3c7287
--- /dev/null
+++ b/m4/build-to-host.m4
@@ -0,0 +1,73 @@
+# build-to-host.m4 serial 1
+dnl Copyright (C) 2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Bruno Haible.
+
+dnl When the build environment ($build_os) is different from the target runtime
+dnl environment ($host_os), file names may need to be converted from the build
+dnl environment syntax to the target runtime environment syntax. This is
+dnl because the Makefiles are executed (mostly) by build environment tools and
+dnl therefore expect file names in build environment syntax, whereas the runtime
+dnl expects file names in target runtime environment syntax.
+dnl
+dnl For example, if $build_os = cygwin and $host_os = mingw32, filenames need
+dnl be converted from Cygwin syntax to native Windows syntax:
+dnl /cygdrive/c/foo/bar -> C:\foo\bar
+dnl /usr/local/share -> C:\cygwin64\usr\local\share
+dnl
+dnl gl_BUILD_TO_HOST([somedir])
+dnl This macro takes as input an AC_SUBSTed variable 'somedir', which must
+dnl already have its final value assigned, and produces two additional
+dnl AC_SUBSTed variables 'somedir_c' and 'somedir_c_make', that designate the
+dnl same file name value, just in different syntax:
+dnl - somedir_c is the file name in target runtime environment syntax,
+dnl as a C string (starting and ending with a double-quote,
+dnl and with escaped backslashes and double-quotes in
+dnl between).
+dnl - somedir_c_make is the same thing, escaped for use in a Makefile.
+
+AC_DEFUN([gl_BUILD_TO_HOST],
+[
+ AC_REQUIRE([AC_CANONICAL_BUILD])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_BUILD_TO_HOST_INIT])
+
+ dnl Define somedir_c.
+ gl_final_[$1]="$[$1]"
+ dnl Translate it from build syntax to host syntax.
+ case "$build_os" in
+ cygwin*)
+ case "$host_os" in
+ mingw*)
+ gl_final_[$1]=`cygpath -w "$gl_final_[$1]"` ;;
+ esac
+ ;;
+ esac
+ dnl Convert it to C string syntax.
+ [$1]_c=`echo "$gl_final_[$1]" | sed -e "$gl_sed_double_backslashes" -e "$gl_sed_escape_doublequotes"`
+ [$1]_c='"'"$[$1]_c"'"'
+ AC_SUBST([$1_c])
+
+ dnl Define somedir_c_make.
+ [$1]_c_make=`echo "$[$1]_c" | sed -e "$gl_sed_escape_for_make_1" -e "$gl_sed_escape_for_make_2"`
+ dnl Use the substituted somedir variable, when possible, so that the user
+ dnl may adjust somedir a posteriori when there are no special characters.
+ if test "$[$1]_c_make" = '\"'"${gl_final_[$1]}"'\"'; then
+ [$1]_c_make='\"$([$1])\"'
+ fi
+ AC_SUBST([$1_c_make])
+])
+
+dnl Some initializations for gl_BUILD_TO_HOST.
+AC_DEFUN([gl_BUILD_TO_HOST_INIT],
+[
+ gl_sed_double_backslashes='s/\\/\\\\/g'
+ gl_sed_escape_doublequotes='s/"/\\"/g'
+changequote(,)dnl
+ gl_sed_escape_for_make_1="s,\\([ \"&'();<>\\\\\`|]\\),\\\\\\1,g"
+changequote([,])dnl
+ gl_sed_escape_for_make_2='s,\$,\\$$,g'
+])
diff --git a/m4/builtin-expect.m4 b/m4/builtin-expect.m4
new file mode 100644
index 0000000..531ed48
--- /dev/null
+++ b/m4/builtin-expect.m4
@@ -0,0 +1,49 @@
+dnl Check for __builtin_expect.
+
+dnl Copyright 2016-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl___BUILTIN_EXPECT],
+[
+ AC_CACHE_CHECK([for __builtin_expect],
+ [gl_cv___builtin_expect],
+ [AC_LINK_IFELSE(
+ [AC_LANG_SOURCE([[
+ int
+ main (int argc, char **argv)
+ {
+ argc = __builtin_expect (argc, 100);
+ return argv[argc != 100][0];
+ }]])],
+ [gl_cv___builtin_expect=yes],
+ [AC_LINK_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <builtins.h>
+ int
+ main (int argc, char **argv)
+ {
+ argc = __builtin_expect (argc, 100);
+ return argv[argc != 100][0];
+ }]])],
+ [gl_cv___builtin_expect="in <builtins.h>"],
+ [gl_cv___builtin_expect=no])])])
+ if test "$gl_cv___builtin_expect" = yes; then
+ AC_DEFINE([HAVE___BUILTIN_EXPECT], [1])
+ elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then
+ AC_DEFINE([HAVE___BUILTIN_EXPECT], [2])
+ fi
+ AH_VERBATIM([HAVE___BUILTIN_EXPECT],
+ [/* Define to 1 if the compiler supports __builtin_expect,
+ and to 2 if <builtins.h> does. */
+#undef HAVE___BUILTIN_EXPECT
+#ifndef HAVE___BUILTIN_EXPECT
+# define __builtin_expect(e, c) (e)
+#elif HAVE___BUILTIN_EXPECT == 2
+# include <builtins.h>
+#endif
+ ])
+])
diff --git a/m4/c-bool.m4 b/m4/c-bool.m4
new file mode 100644
index 0000000..f614371
--- /dev/null
+++ b/m4/c-bool.m4
@@ -0,0 +1,51 @@
+# Check for bool that conforms to C2023.
+
+dnl Copyright 2022-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_C_BOOL],
+[
+ AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[
+ #if true == false
+ #error "true == false"
+ #endif
+ extern bool b;
+ bool b = true == false;]])],
+ [gl_cv_c_bool=yes],
+ [gl_cv_c_bool=no])])
+ if test "$gl_cv_c_bool" = yes; then
+ AC_DEFINE([HAVE_C_BOOL], [1],
+ [Define to 1 if bool, true and false work as per C2023.])
+ fi
+
+ AC_CHECK_HEADERS_ONCE([stdbool.h])
+
+ dnl The "zz" puts this toward config.h's end, to avoid potential
+ dnl collisions with other definitions.
+ dnl If 'bool', 'true' and 'false' do not work, arrange for them to work.
+ dnl In C, this means including <stdbool.h> if it is not already included.
+ dnl However, if the preprocessor mistakenly treats 'true' as 0,
+ dnl define it to a bool expression equal to 1; this is needed in
+ dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older.
+ AH_VERBATIM([zzbool],
+[#ifndef HAVE_C_BOOL
+# if !defined __cplusplus && !defined __bool_true_false_are_defined
+# if HAVE_STDBOOL_H
+# include <stdbool.h>
+# else
+# if defined __SUNPRO_C
+# error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC."
+# else
+# error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'."
+# endif
+# endif
+# endif
+# if !true
+# define true (!false)
+# endif
+#endif])
+])
diff --git a/m4/calloc.m4 b/m4/calloc.m4
new file mode 100644
index 0000000..3789cbf
--- /dev/null
+++ b/m4/calloc.m4
@@ -0,0 +1,83 @@
+# calloc.m4 serial 30
+
+# Copyright (C) 2004-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Jim Meyering.
+
+# Determine whether calloc (N, S) returns non-NULL when N*S is zero,
+# and returns NULL when N*S overflows.
+# If so, define HAVE_CALLOC. Otherwise, define calloc to rpl_calloc
+# and arrange to use a calloc wrapper function that does work in that case.
+
+# _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT])
+# -------------------------------------
+# If calloc is compatible with GNU calloc, run IF-WORKS, otherwise, IF-NOT.
+AC_DEFUN([_AC_FUNC_CALLOC_IF],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether calloc (0, n) and calloc (n, 0) return nonnull],
+ [ac_cv_func_calloc_0_nonnull],
+ [if test $cross_compiling != yes; then
+ ac_cv_func_calloc_0_nonnull=yes
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT],
+ [[int result = 0;
+ char * volatile p = calloc (0, 0);
+ if (!p)
+ result |= 1;
+ free (p);
+ return result;
+ ]])],
+ [],
+ [ac_cv_func_calloc_0_nonnull=no])
+ else
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+ fi
+ ])
+ AS_CASE([$ac_cv_func_calloc_0_nonnull], [*yes], [$1], [$2])
+])
+
+
+# gl_FUNC_CALLOC_GNU
+# ------------------
+# Replace calloc if it is not compatible with GNU libc.
+AC_DEFUN([gl_FUNC_CALLOC_GNU],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_CALLOC_POSIX])
+ REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX"
+ if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then
+ _AC_FUNC_CALLOC_IF([], [REPLACE_CALLOC_FOR_CALLOC_GNU=1])
+ fi
+])# gl_FUNC_CALLOC_GNU
+
+# gl_FUNC_CALLOC_POSIX
+# --------------------
+# Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails, and doesn't mess up with ptrdiff_t or size_t overflow),
+# and replace calloc if it is not.
+AC_DEFUN([gl_FUNC_CALLOC_POSIX],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=1
+ fi
+ dnl Although in theory we should also test for size_t overflow,
+ dnl in practice testing for ptrdiff_t overflow suffices
+ dnl since PTRDIFF_MAX <= SIZE_MAX on all known Gnulib porting targets.
+ dnl A separate size_t test would slow down 'configure'.
+])
diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4
new file mode 100644
index 0000000..d319645
--- /dev/null
+++ b/m4/canonicalize.m4
@@ -0,0 +1,185 @@
+# canonicalize.m4 serial 38
+
+dnl Copyright (C) 2003-2007, 2009-2023 Free Software Foundation, Inc.
+
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Provides canonicalize_file_name and canonicalize_filename_mode, but does
+# not provide or fix realpath.
+AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+ AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
+ gl_CHECK_FUNCS_ANDROID([faccessat], [[#include <unistd.h>]])
+ AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+ AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+ if test $ac_cv_func_canonicalize_file_name = no; then
+ HAVE_CANONICALIZE_FILE_NAME=0
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes) ;;
+ *) REPLACE_CANONICALIZE_FILE_NAME=1 ;;
+ esac
+ fi
+])
+
+# Provides canonicalize_file_name and realpath.
+AC_DEFUN([gl_CANONICALIZE_LGPL],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE])
+ if test $ac_cv_func_canonicalize_file_name = no; then
+ HAVE_CANONICALIZE_FILE_NAME=0
+ if test $ac_cv_func_realpath = no; then
+ HAVE_REALPATH=0
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes) ;;
+ *) REPLACE_REALPATH=1 ;;
+ esac
+ fi
+ else
+ case "$gl_cv_func_realpath_works" in
+ *yes)
+ ;;
+ *)
+ REPLACE_CANONICALIZE_FILE_NAME=1
+ REPLACE_REALPATH=1
+ ;;
+ esac
+ fi
+])
+
+# Like gl_CANONICALIZE_LGPL, except prepare for separate compilation
+# (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ).
+AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+ AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
+ gl_CHECK_FUNCS_ANDROID([faccessat], [[#include <unistd.h>]])
+
+ dnl On native Windows, we use _getcwd(), regardless whether getcwd() is
+ dnl available through the linker option '-loldnames'.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*) ;;
+ *) AC_CHECK_FUNCS([getcwd]) ;;
+ esac
+
+ AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
+ AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
+ AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
+
+# Check whether realpath works. Assume that if a platform has both
+# realpath and canonicalize_file_name, but the former is broken, then
+# so is the latter.
+AC_DEFUN([gl_FUNC_REALPATH_WORKS],
+[
+ AC_CHECK_FUNCS_ONCE([realpath lstat])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [
+ rm -rf conftest.a conftest.d
+ touch conftest.a
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.a conftest.l
+ fi
+ mkdir conftest.d
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]GL_NOCRASH[
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <string.h>
+ ]], [[
+ int result = 0;
+ /* This test fails on Solaris 10. */
+ {
+ char *name = realpath ("conftest.a", NULL);
+ if (!(name && *name == '/'))
+ result |= 1;
+ free (name);
+ }
+ /* This test fails on older versions of Cygwin. */
+ {
+ char *name = realpath ("conftest.b/../conftest.a", NULL);
+ if (name != NULL)
+ result |= 2;
+ free (name);
+ }
+ /* This test fails on Cygwin 2.9. */
+ #if HAVE_LSTAT
+ {
+ char *name = realpath ("conftest.l/../conftest.a", NULL);
+ if (name != NULL || errno != ENOTDIR)
+ result |= 4;
+ free (name);
+ }
+ #endif
+ /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */
+ {
+ char *name = realpath ("conftest.a/", NULL);
+ if (name != NULL)
+ result |= 8;
+ free (name);
+ }
+ /* This test fails on AIX 7, Solaris 10. */
+ {
+ char *name1 = realpath (".", NULL);
+ char *name2 = realpath ("conftest.d//./..", NULL);
+ if (! name1 || ! name2 || strcmp (name1, name2))
+ result |= 16;
+ free (name1);
+ free (name2);
+ }
+ #ifdef __linux__
+ /* On Linux, // is the same as /. See also double-slash-root.m4.
+ realpath() should respect this.
+ This test fails on musl libc 1.2.2. */
+ {
+ char *name = realpath ("//", NULL);
+ if (! name || strcmp (name, "/"))
+ result |= 32;
+ free (name);
+ }
+ #endif
+ return result;
+ ]])
+ ],
+ [gl_cv_func_realpath_works=yes],
+ [case $? in
+ 32) gl_cv_func_realpath_works=nearly ;;
+ *) gl_cv_func_realpath_works=no ;;
+ esac
+ ],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
+ # Guess 'nearly' on musl systems.
+ *-musl*) gl_cv_func_realpath_works="guessing nearly" ;;
+ # Guess no on Cygwin.
+ cygwin*) gl_cv_func_realpath_works="guessing no" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_realpath_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -rf conftest.a conftest.l conftest.d
+ ])
+ case "$gl_cv_func_realpath_works" in
+ *yes)
+ AC_DEFINE([FUNC_REALPATH_WORKS], [1],
+ [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles leading slashes and a trailing slash correctly.])
+ ;;
+ *nearly)
+ AC_DEFINE([FUNC_REALPATH_NEARLY_WORKS], [1],
+ [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles a trailing slash correctly.])
+ ;;
+ esac
+])
diff --git a/m4/clock_time.m4 b/m4/clock_time.m4
new file mode 100644
index 0000000..d624a73
--- /dev/null
+++ b/m4/clock_time.m4
@@ -0,0 +1,35 @@
+# clock_time.m4 serial 12
+dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Check for clock_getres, clock_gettime and clock_settime,
+# and set CLOCK_TIME_LIB.
+# For a program named, say foo, you should add a line like the following
+# in the corresponding Makefile.am file:
+# foo_LDADD = $(LDADD) $(CLOCK_TIME_LIB)
+
+AC_DEFUN([gl_CLOCK_TIME],
+[
+ dnl Persuade glibc and Solaris <time.h> to declare these functions.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function.
+ # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+
+ # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all*
+ # programs in the package would end up linked with that potentially-shared
+ # library, inducing unnecessary run-time overhead.
+ CLOCK_TIME_LIB=
+ AC_SUBST([CLOCK_TIME_LIB])
+ gl_saved_libs=$LIBS
+ AC_SEARCH_LIBS([clock_gettime], [rt posix4],
+ [test "$ac_cv_search_clock_gettime" = "none required" ||
+ CLOCK_TIME_LIB=$ac_cv_search_clock_gettime])
+ AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime])
+ LIBS=$gl_saved_libs
+ # For backward compatibility.
+ LIB_CLOCK_GETTIME="$CLOCK_TIME_LIB"
+ AC_SUBST([LIB_CLOCK_GETTIME])
+])
diff --git a/m4/close.m4 b/m4/close.m4
new file mode 100644
index 0000000..9f95c67
--- /dev/null
+++ b/m4/close.m4
@@ -0,0 +1,35 @@
+# close.m4 serial 9
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_CLOSE],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ m4_ifdef([gl_MSVC_INVAL], [
+ AC_REQUIRE([gl_MSVC_INVAL])
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_CLOSE=1
+ fi
+ ])
+ m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [
+ gl_PREREQ_SYS_H_WINSOCK2
+ if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then
+ dnl Even if the 'socket' module is not used here, another part of the
+ dnl application may use it and pass file descriptors that refer to
+ dnl sockets to the close() function. So enable the support for sockets.
+ REPLACE_CLOSE=1
+ fi
+ ])
+ dnl Replace close() for supporting the gnulib-defined fchdir() function,
+ dnl to keep fchdir's bookkeeping up-to-date.
+ m4_ifdef([gl_FUNC_FCHDIR], [
+ if test $REPLACE_CLOSE = 0; then
+ gl_TEST_FCHDIR
+ if test $HAVE_FCHDIR = 0; then
+ REPLACE_CLOSE=1
+ fi
+ fi
+ ])
+])
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644
index 0000000..5804f47
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,24 @@
+# codeset.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2023 Free Software
+dnl Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <langinfo.h>]],
+ [[char* cs = nl_langinfo(CODESET); return !cs;]])],
+ [am_cv_langinfo_codeset=yes],
+ [am_cv_langinfo_codeset=no])
+ ])
+ if test $am_cv_langinfo_codeset = yes; then
+ AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
+ [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+ fi
+])
diff --git a/m4/config-h.m4 b/m4/config-h.m4
new file mode 100644
index 0000000..185a3e4
--- /dev/null
+++ b/m4/config-h.m4
@@ -0,0 +1,13 @@
+# Say that -DHAVE_CONFIG_H is not needed.
+
+dnl Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# This package's source files all include config.h unconditionally,
+# so there's no need to pass -DHAVE_CONFIG_H to the compiler.
+AC_DEFUN([gl_CONFIG_H],
+ [AC_CONFIG_COMMANDS_PRE([test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=])])
diff --git a/m4/configmake.m4 b/m4/configmake.m4
new file mode 100644
index 0000000..94f8ae2
--- /dev/null
+++ b/m4/configmake.m4
@@ -0,0 +1,168 @@
+# configmake.m4 serial 5
+dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.60])
+
+# gl_CONFIGMAKE_PREP
+# ------------------
+# Guarantee all of the standard directory variables, even when used with
+# autoconf 2.64 (runstatedir wasn't supported before 2.70) or
+# automake 1.11 (runstatedir isn't supported even in 1.16.1).
+AC_DEFUN([gl_CONFIGMAKE_PREP],
+[
+ if test "x$lispdir" = x; then
+ AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp'])
+ fi
+ dnl Added in autoconf 2.70.
+ if test "x$runstatedir" = x; then
+ AC_SUBST([runstatedir], ['${localstatedir}/run'])
+ fi
+
+ dnl Automake 1.11 provides the pkg*dir variables merely without AC_SUBST,
+ dnl that is, only at the Makefile.am level. AC_SUBST them, so that
+ dnl gl_CONFIGMAKE can compute the final values at configure time.
+ dnl Blindly assigning the value at configure time is OK, since configure
+ dnl does not have --pkg*dir=... options.
+ AC_SUBST([pkgdatadir], ['${datadir}/${PACKAGE}'])
+ AC_SUBST([pkgincludedir], ['${includedir}/${PACKAGE}'])
+ AC_SUBST([pkglibdir], ['${libdir}/${PACKAGE}'])
+ AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
+])
+
+# gl_CONFIGMAKE
+# -------------
+# Find the final values of the standard directory variables, and create
+# AC_SUBSTed *_c and *_c_make variables with the corresponding values in
+# target runtime environment ($host_os) syntax.
+AC_DEFUN([gl_CONFIGMAKE],
+[
+ AC_REQUIRE([gl_CONFIGMAKE_PREP])
+
+ dnl Save the values.
+ gl_save_prefix="${prefix}"
+ gl_save_exec_prefix="${exec_prefix}"
+ gl_save_bindir="${bindir}"
+ gl_save_sbindir="${sbindir}"
+ gl_save_libexecdir="${libexecdir}"
+ gl_save_datarootdir="${datarootdir}"
+ gl_save_datadir="${datadir}"
+ gl_save_sysconfdir="${sysconfdir}"
+ gl_save_sharedstatedir="${sharedstatedir}"
+ gl_save_localstatedir="${localstatedir}"
+ gl_save_runstatedir="${runstatedir}"
+ gl_save_includedir="${includedir}"
+ gl_save_oldincludedir="${oldincludedir}"
+ gl_save_docdir="${docdir}"
+ gl_save_infodir="${infodir}"
+ gl_save_htmldir="${htmldir}"
+ gl_save_dvidir="${dvidir}"
+ gl_save_pdfdir="${pdfdir}"
+ gl_save_psdir="${psdir}"
+ gl_save_libdir="${libdir}"
+ gl_save_lispdir="${lispdir}"
+ gl_save_localedir="${localedir}"
+ gl_save_mandir="${mandir}"
+ gl_save_pkgdatadir="${pkgdatadir}"
+ gl_save_pkgincludedir="${pkgincludedir}"
+ gl_save_pkglibdir="${pkglibdir}"
+ gl_save_pkglibexecdir="${pkglibexecdir}"
+
+ dnl Find the final values.
+ dnl Unfortunately, prefix gets only finally determined at the end of
+ dnl configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ dnl Unfortunately, exec_prefix gets only finally determined at the end of
+ dnl configure.
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval bindir="$bindir"
+ eval sbindir="$sbindir"
+ eval libexecdir="$libexecdir"
+ eval datarootdir="$datarootdir"
+ eval datadir="$datadir"
+ eval sysconfdir="$sysconfdir"
+ eval sharedstatedir="$sharedstatedir"
+ eval localstatedir="$localstatedir"
+ eval runstatedir="$runstatedir"
+ eval includedir="$includedir"
+ eval oldincludedir="$oldincludedir"
+ eval docdir="$docdir"
+ eval infodir="$infodir"
+ eval htmldir="$htmldir"
+ eval dvidir="$dvidir"
+ eval pdfdir="$pdfdir"
+ eval psdir="$psdir"
+ eval libdir="$libdir"
+ eval lispdir="$lispdir"
+ eval localedir="$localedir"
+ eval mandir="$mandir"
+ eval pkgdatadir="$pkgdatadir"
+ eval pkgincludedir="$pkgincludedir"
+ eval pkglibdir="$pkglibdir"
+ eval pkglibexecdir="$pkglibexecdir"
+
+ dnl Transform the final values.
+ gl_BUILD_TO_HOST([prefix])
+ gl_BUILD_TO_HOST([exec_prefix])
+ gl_BUILD_TO_HOST([bindir])
+ gl_BUILD_TO_HOST([sbindir])
+ gl_BUILD_TO_HOST([libexecdir])
+ gl_BUILD_TO_HOST([datarootdir])
+ gl_BUILD_TO_HOST([datadir])
+ gl_BUILD_TO_HOST([sysconfdir])
+ gl_BUILD_TO_HOST([sharedstatedir])
+ gl_BUILD_TO_HOST([localstatedir])
+ gl_BUILD_TO_HOST([runstatedir])
+ gl_BUILD_TO_HOST([includedir])
+ gl_BUILD_TO_HOST([oldincludedir])
+ gl_BUILD_TO_HOST([docdir])
+ gl_BUILD_TO_HOST([infodir])
+ gl_BUILD_TO_HOST([htmldir])
+ gl_BUILD_TO_HOST([dvidir])
+ gl_BUILD_TO_HOST([pdfdir])
+ gl_BUILD_TO_HOST([psdir])
+ gl_BUILD_TO_HOST([libdir])
+ gl_BUILD_TO_HOST([lispdir])
+ gl_BUILD_TO_HOST([localedir])
+ gl_BUILD_TO_HOST([mandir])
+ gl_BUILD_TO_HOST([pkgdatadir])
+ gl_BUILD_TO_HOST([pkgincludedir])
+ gl_BUILD_TO_HOST([pkglibdir])
+ gl_BUILD_TO_HOST([pkglibexecdir])
+
+ dnl Restore the values.
+ pkglibexecdir="${gl_save_pkglibexecdir}"
+ pkglibdir="${gl_save_pkglibdir}"
+ pkgincludedir="${gl_save_pkgincludedir}"
+ pkgdatadir="${gl_save_pkgdatadir}"
+ mandir="${gl_save_mandir}"
+ localedir="${gl_save_localedir}"
+ lispdir="${gl_save_lispdir}"
+ libdir="${gl_save_libdir}"
+ psdir="${gl_save_psdir}"
+ pdfdir="${gl_save_pdfdir}"
+ dvidir="${gl_save_dvidir}"
+ htmldir="${gl_save_htmldir}"
+ infodir="${gl_save_infodir}"
+ docdir="${gl_save_docdir}"
+ oldincludedir="${gl_save_oldincludedir}"
+ includedir="${gl_save_includedir}"
+ runstatedir="${gl_save_runstatedir}"
+ localstatedir="${gl_save_localstatedir}"
+ sharedstatedir="${gl_save_sharedstatedir}"
+ sysconfdir="${gl_save_sysconfdir}"
+ datadir="${gl_save_datadir}"
+ datarootdir="${gl_save_datarootdir}"
+ libexecdir="${gl_save_libexecdir}"
+ sbindir="${gl_save_sbindir}"
+ bindir="${gl_save_bindir}"
+ exec_prefix="${gl_save_exec_prefix}"
+ prefix="${gl_save_prefix}"
+])
diff --git a/m4/ctype_h.m4 b/m4/ctype_h.m4
new file mode 100644
index 0000000..219f2ed
--- /dev/null
+++ b/m4/ctype_h.m4
@@ -0,0 +1,47 @@
+# ctype_h.m4 serial 9
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_CTYPE_H],
+[
+ AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
+
+ dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_NEXT_HEADERS([ctype.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <ctype.h>
+ ]], [isblank])
+])
+
+# gl_CTYPE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_CTYPE_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_CTYPE_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_CTYPE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISBLANK])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_CTYPE_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK])
+])
diff --git a/m4/double-slash-root.m4 b/m4/double-slash-root.m4
new file mode 100644
index 0000000..1776e5e
--- /dev/null
+++ b/m4/double-slash-root.m4
@@ -0,0 +1,38 @@
+# double-slash-root.m4 serial 4 -*- Autoconf -*-
+dnl Copyright (C) 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_DOUBLE_SLASH_ROOT],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root],
+ [ if test x"$cross_compiling" = xyes ; then
+ # When cross-compiling, there is no way to tell whether // is special
+ # short of a list of hosts. However, the only known hosts to date
+ # that have a distinct // are Apollo DomainOS (too old to port to),
+ # Cygwin, and z/OS. If anyone knows of another system for which // has
+ # special semantics and is distinct from /, please report it to
+ # <bug-gnulib@gnu.org>.
+ case $host in
+ *-cygwin | i370-ibm-openedition)
+ gl_cv_double_slash_root=yes ;;
+ *)
+ # Be optimistic and assume that / and // are the same when we
+ # don't know.
+ gl_cv_double_slash_root='unknown, assuming no' ;;
+ esac
+ else
+ set x `ls -di / // 2>/dev/null`
+ if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then
+ gl_cv_double_slash_root=no
+ else
+ gl_cv_double_slash_root=yes
+ fi
+ fi])
+ if test "$gl_cv_double_slash_root" = yes; then
+ AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1],
+ [Define to 1 if // is a file system root distinct from /.])
+ fi
+])
diff --git a/m4/dup2.m4 b/m4/dup2.m4
new file mode 100644
index 0000000..e1cc73e
--- /dev/null
+++ b/m4/dup2.m4
@@ -0,0 +1,105 @@
+#serial 27
+dnl Copyright (C) 2002, 2005, 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_DUP2],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works],
+ [AC_RUN_IFELSE([
+ AC_LANG_PROGRAM(
+ [[#include <errno.h>
+ #include <fcntl.h>
+ #include <limits.h>
+ #include <sys/resource.h>
+ #include <unistd.h>
+ ]GL_MDA_DEFINES[
+ #ifndef RLIM_SAVED_CUR
+ # define RLIM_SAVED_CUR RLIM_INFINITY
+ #endif
+ #ifndef RLIM_SAVED_MAX
+ # define RLIM_SAVED_MAX RLIM_INFINITY
+ #endif
+ ]],
+ [[int result = 0;
+ int bad_fd = INT_MAX;
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+ && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+ && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != RLIM_SAVED_MAX
+ && rlim.rlim_cur != RLIM_SAVED_CUR)
+ bad_fd = rlim.rlim_cur;
+ #ifdef FD_CLOEXEC
+ if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+ result |= 1;
+ #endif
+ if (dup2 (1, 1) != 1)
+ result |= 2;
+ #ifdef FD_CLOEXEC
+ if (fcntl (1, F_GETFD) != FD_CLOEXEC)
+ result |= 4;
+ #endif
+ close (0);
+ if (dup2 (0, 0) != -1)
+ result |= 8;
+ /* Many gnulib modules require POSIX conformance of EBADF. */
+ if (dup2 (2, bad_fd) == -1 && errno != EBADF)
+ result |= 16;
+ /* Flush out some cygwin core dumps. */
+ if (dup2 (2, -1) != -1 || errno != EBADF)
+ result |= 32;
+ dup2 (2, 255);
+ dup2 (2, 256);
+ /* On OS/2 kLIBC, dup2() does not work on a directory fd. */
+ {
+ int fd = open (".", O_RDONLY);
+ if (fd == -1)
+ result |= 64;
+ else if (dup2 (fd, fd + 1) == -1)
+ result |= 128;
+ close (fd);
+ }
+ return result;]])
+ ],
+ [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
+ [case "$host_os" in
+ mingw*) # on this platform, dup2 always returns 0 for success
+ gl_cv_func_dup2_works="guessing no" ;;
+ cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
+ gl_cv_func_dup2_works="guessing no" ;;
+ aix* | freebsd*)
+ # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE,
+ # not EBADF.
+ gl_cv_func_dup2_works="guessing no" ;;
+ haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC.
+ gl_cv_func_dup2_works="guessing no" ;;
+ *-android*) # implemented using dup3(), which fails if oldfd == newfd
+ gl_cv_func_dup2_works="guessing no" ;;
+ os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd.
+ gl_cv_func_dup2_works="guessing no" ;;
+ *) gl_cv_func_dup2_works="guessing yes" ;;
+ esac])
+ ])
+ case "$gl_cv_func_dup2_works" in
+ *yes) ;;
+ *)
+ REPLACE_DUP2=1
+ AC_CHECK_FUNCS([setdtablesize])
+ ;;
+ esac
+ dnl Replace dup2() for supporting the gnulib-defined fchdir() function,
+ dnl to keep fchdir's bookkeeping up-to-date.
+ m4_ifdef([gl_FUNC_FCHDIR], [
+ gl_TEST_FCHDIR
+ if test $HAVE_FCHDIR = 0; then
+ REPLACE_DUP2=1
+ fi
+ ])
+])
+
+# Prerequisites of lib/dup2.c.
+AC_DEFUN([gl_PREREQ_DUP2], [])
diff --git a/m4/eealloc.m4 b/m4/eealloc.m4
new file mode 100644
index 0000000..cb3e08f
--- /dev/null
+++ b/m4/eealloc.m4
@@ -0,0 +1,31 @@
+# eealloc.m4 serial 3
+dnl Copyright (C) 2003, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_EEALLOC],
+[
+ AC_REQUIRE([gl_EEMALLOC])
+ AC_REQUIRE([gl_EEREALLOC])
+])
+
+AC_DEFUN([gl_EEMALLOC],
+[
+ _AC_FUNC_MALLOC_IF(
+ [gl_cv_func_malloc_0_nonnull=1],
+ [gl_cv_func_malloc_0_nonnull=0])
+ AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull],
+ [If malloc(0) is != NULL, define this to 1. Otherwise define this
+ to 0.])
+])
+
+AC_DEFUN([gl_EEREALLOC],
+[
+ _AC_FUNC_REALLOC_IF(
+ [gl_cv_func_realloc_0_nonnull=1],
+ [gl_cv_func_realloc_0_nonnull=0])
+ AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull],
+ [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this
+ to 0.])
+])
diff --git a/m4/environ.m4 b/m4/environ.m4
new file mode 100644
index 0000000..741dfc5
--- /dev/null
+++ b/m4/environ.m4
@@ -0,0 +1,46 @@
+# environ.m4 serial 8
+dnl Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_ENVIRON],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ dnl Persuade glibc <unistd.h> to declare environ.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ gt_CHECK_VAR_DECL(
+ [#if HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
+ /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */
+ #include <stdlib.h>
+ ],
+ [environ])
+ if test $gt_cv_var_environ_declaration != yes; then
+ HAVE_DECL_ENVIRON=0
+ fi
+])
+
+# Check if a variable is properly declared.
+# gt_CHECK_VAR_DECL(includes,variable)
+AC_DEFUN([gt_CHECK_VAR_DECL],
+[
+ define([gt_cv_var], [gt_cv_var_]$2[_declaration])
+ AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[$1
+ typedef struct { int foo; } foo_t;
+ extern foo_t $2;]],
+ [[$2.foo = 1;]])],
+ [gt_cv_var=no],
+ [gt_cv_var=yes])])
+ if test $gt_cv_var = yes; then
+ AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1,
+ [Define if you have the declaration of $2.])
+ fi
+ undefine([gt_cv_var])
+])
diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
new file mode 100644
index 0000000..4c70d22
--- /dev/null
+++ b/m4/errno_h.m4
@@ -0,0 +1,131 @@
+# errno_h.m4 serial 14
+dnl Copyright (C) 2004, 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.61])
+
+AC_DEFUN_ONCE([gl_HEADER_ERRNO_H],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [
+ AC_EGREP_CPP([booboo],[
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
+#endif
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+ ],
+ [gl_cv_header_errno_h_complete=no],
+ [gl_cv_header_errno_h_complete=yes])
+ ])
+ if test $gl_cv_header_errno_h_complete = yes; then
+ GL_GENERATE_ERRNO_H=false
+ else
+ gl_NEXT_HEADERS([errno.h])
+ GL_GENERATE_ERRNO_H=true
+ fi
+ gl_REPLACE_ERRNO_VALUE([EMULTIHOP])
+ gl_REPLACE_ERRNO_VALUE([ENOLINK])
+ gl_REPLACE_ERRNO_VALUE([EOVERFLOW])
+])
+
+# Assuming $1 = EOVERFLOW.
+# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
+# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and
+# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.
+# Check for the value of EOVERFLOW.
+# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE.
+AC_DEFUN([gl_REPLACE_ERRNO_VALUE],
+[
+ if $GL_GENERATE_ERRNO_H; then
+ AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [
+ AC_EGREP_CPP([yes],[
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+ ],
+ [gl_cv_header_errno_h_]$1[=yes],
+ [gl_cv_header_errno_h_]$1[=no])
+ if test $gl_cv_header_errno_h_]$1[ = no; then
+ AC_EGREP_CPP([yes],[
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+ ], [gl_cv_header_errno_h_]$1[=hidden])
+ if test $gl_cv_header_errno_h_]$1[ = hidden; then
+ dnl The macro exists but is hidden.
+ dnl Define it to the same value.
+ AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug. */
+#include <stdio.h>
+#include <stdlib.h>
+])
+ fi
+ fi
+ ])
+ case $gl_cv_header_errno_h_]$1[ in
+ yes | no)
+ ]$1[_HIDDEN=0; ]$1[_VALUE=
+ ;;
+ *)
+ ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1["
+ ;;
+ esac
+ AC_SUBST($1[_HIDDEN])
+ AC_SUBST($1[_VALUE])
+ fi
+])
diff --git a/m4/error.m4 b/m4/error.m4
new file mode 100644
index 0000000..93a7558
--- /dev/null
+++ b/m4/error.m4
@@ -0,0 +1,22 @@
+#serial 16
+
+# Copyright (C) 1996-1998, 2001-2004, 2009-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_ERROR],
+[
+])
+
+# Prerequisites of lib/error.c.
+AC_DEFUN([gl_PREREQ_ERROR],
+[
+ dnl Use system extensions on Android, so that AC_FUNC_STRERROR_R
+ dnl discovers the GNU API for strerror_r on Android API level 23 and later.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([AC_FUNC_STRERROR_R])
+ :
+])
diff --git a/m4/error_h.m4 b/m4/error_h.m4
new file mode 100644
index 0000000..f38e4ea
--- /dev/null
+++ b/m4/error_h.m4
@@ -0,0 +1,125 @@
+# error_h.m4 serial 3
+dnl Copyright (C) 1996-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Provide a working "error.h".
+
+AC_DEFUN_ONCE([gl_ERROR_H],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ gl_CHECK_NEXT_HEADERS([error.h])
+ if test $ac_cv_header_error_h = yes; then
+ HAVE_ERROR_H=1
+ else
+ HAVE_ERROR_H=0
+ fi
+ AC_SUBST([HAVE_ERROR_H])
+
+ REPLACE_ERROR=0
+
+ gl_CHECK_FUNCS_ANDROID([error], [[#include <error.h>]])
+ if test $ac_cv_func_error = yes; then
+ HAVE_ERROR=1
+ else
+ HAVE_ERROR=0
+ case "$gl_cv_onwards_func_error" in
+ future*) REPLACE_ERROR=1 ;;
+ esac
+ fi
+
+ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer
+ dnl maintained in Autoconf and because it invokes AC_LIBOBJ.
+ dnl We need to notice a missing declaration, like gl_CHECK_FUNCS_ANDROID does.
+ AC_CHECK_DECL([error_at_line], , , [[#include <error.h>]])
+ if test $ac_cv_have_decl_error_at_line = yes; then
+ AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <error.h>]],
+ [[error_at_line (0, 0, "", 0, "an error occurred");]])],
+ [ac_cv_lib_error_at_line=yes],
+ [ac_cv_lib_error_at_line=no])])
+ else
+ ac_cv_lib_error_at_line=no
+ fi
+ if test $ac_cv_lib_error_at_line = yes; then
+ HAVE_ERROR_AT_LINE=1
+ else
+ HAVE_ERROR_AT_LINE=0
+ fi
+ REPLACE_ERROR_AT_LINE=0
+
+ if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then
+ dnl On Android 11, when error_print_progname is set, the output of the
+ dnl error() function contains an extra space.
+ AC_CACHE_CHECK([for working error function],
+ [gl_cv_func_working_error],
+ [if test $cross_compiling != yes; then
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <error.h>
+ static void print_no_progname (void) {}
+ ]], [[
+ error_print_progname = print_no_progname;
+ error (0, 0, "foo");
+ ]])
+ ],
+ [rm -f conftest.out
+ if test -s conftest$ac_exeext \
+ && ./conftest$ac_exeext 2> conftest.out; then
+ if grep ' ' conftest.out >/dev/null; then
+ gl_cv_func_working_error=no
+ else
+ gl_cv_func_working_error=yes
+ fi
+ else
+ gl_cv_func_working_error=no
+ fi
+ rm -f conftest.out
+ ],
+ [gl_cv_func_working_error=no])
+ else
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <error.h>
+ ]], [[
+ error (0, 0, "foo");
+ ]])
+ ],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;;
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_working_error="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_error="$gl_cross_guess_normal" ;;
+ esac
+ ],
+ [gl_cv_func_working_error=no])
+ fi
+ ])
+ case "$gl_cv_func_working_error" in
+ *no)
+ REPLACE_ERROR=1
+ REPLACE_ERROR_AT_LINE=1
+ ;;
+ esac
+ fi
+
+ if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \
+ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then
+ dnl Provide a substitute <error.h> file.
+ GL_GENERATE_ERROR_H=true
+ else
+ GL_GENERATE_ERROR_H=false
+ fi
+
+ AC_SUBST([HAVE_ERROR])
+ AC_SUBST([HAVE_ERROR_AT_LINE])
+ AC_SUBST([REPLACE_ERROR])
+ AC_SUBST([REPLACE_ERROR_AT_LINE])
+])
diff --git a/m4/extensions.m4 b/m4/extensions.m4
new file mode 100644
index 0000000..5336b8d
--- /dev/null
+++ b/m4/extensions.m4
@@ -0,0 +1,232 @@
+# serial 23 -*- Autoconf -*-
+# Enable extensions on systems that normally disable them.
+
+# Copyright (C) 2003, 2006-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that
+dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+.
+m4_ifndef([AC_CHECK_INCLUDES_DEFAULT],
+ [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])])
+
+# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
+# Autoconf. Perhaps we can remove this once we can assume Autoconf
+# is recent-enough everywhere, but since Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# If autoconf reports a warning
+# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+# but always AC_REQUIREd,
+# 2) to ensure that for each occurrence of
+# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+# or
+# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+# the corresponding gnulib module description has 'extensions' among
+# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+# invocation occurs in gl_EARLY, not in gl_INIT.
+
+m4_version_prereq([2.72], [], [
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+# We unconditionally define as many of the known feature-enabling
+# as possible, reserving conditional behavior for macros that are
+# known to cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl
+AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_LINK_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl
+dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE.
+dnl Use a different key than __EXTENSIONS__, as that name broke existing
+dnl configure.ac when using autoheader 2.62.
+dnl The macros below are in alphabetical order ignoring leading _ or __
+dnl prefixes.
+AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
+[/* Enable extensions on AIX 3, Interix. */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+/* Enable GNU extensions on systems that have them. */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+# undef _MINIX
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+# undef _POSIX_SOURCE
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+# undef _POSIX_1_SOURCE
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by C23 Annex F. */
+#ifndef __STDC_WANT_IEC_60559_EXT__
+# undef __STDC_WANT_IEC_60559_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop. */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+])dnl
+
+ AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl
+ _AC_CHECK_HEADER_ONCE([wchar.h])
+ _AC_CHECK_HEADER_ONCE([minix/config.h])
+
+dnl Defining __EXTENSIONS__ may break the system headers on some systems.
+dnl (FIXME: Which ones?)
+ AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+ [ac_cv_safe_to_define___extensions__],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+# define __EXTENSIONS__ 1
+ ]AC_INCLUDES_DEFAULT])],
+ [ac_cv_safe_to_define___extensions__=yes],
+ [ac_cv_safe_to_define___extensions__=no])])
+
+dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to
+dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1.
+dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms
+dnl not covered by turn-on-extensions macros (notably Dragonfly, Free,
+dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so
+dnl it should only be defined when necessary.
+ AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
+ [ac_cv_should_define__xopen_source],
+ [ac_cv_should_define__xopen_source=no
+ AS_IF([test $ac_cv_header_wchar_h = yes],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <wchar.h>
+ mbstate_t x;]])],
+ [],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #define _XOPEN_SOURCE 500
+ #include <wchar.h>
+ mbstate_t x;]])],
+ [ac_cv_should_define__xopen_source=yes])])])])
+
+ AC_DEFINE([_ALL_SOURCE])
+ AC_DEFINE([_DARWIN_C_SOURCE])
+ AC_DEFINE([_GNU_SOURCE])
+ AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API])
+ AC_DEFINE([_NETBSD_SOURCE])
+ AC_DEFINE([_OPENBSD_SOURCE])
+ AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+ AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__])
+ AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__])
+ AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__])
+ AC_DEFINE([__STDC_WANT_IEC_60559_EXT__])
+ AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__])
+ AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__])
+ AC_DEFINE([__STDC_WANT_LIB_EXT2__])
+ AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__])
+ AC_DEFINE([_TANDEM_SOURCE])
+ AS_IF([test $ac_cv_header_minix_config_h = yes],
+ [MINIX=yes
+ AC_DEFINE([_MINIX])
+ AC_DEFINE([_POSIX_SOURCE])
+ AC_DEFINE([_POSIX_1_SOURCE], [2])],
+ [MINIX=])
+ AS_IF([test $ac_cv_safe_to_define___extensions__ = yes],
+ [AC_DEFINE([__EXTENSIONS__])])
+ AS_IF([test $ac_cv_should_define__xopen_source = yes],
+ [AC_DEFINE([_XOPEN_SOURCE], [500])])
+])# AC_USE_SYSTEM_EXTENSIONS
+])
+
+# gl_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
+[
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl On OpenBSD 6.8 with GCC, the include files contain a couple of
+ dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE.
+ dnl That's because this version of GCC (4.2.1) supports the option
+ dnl '-std=gnu99' but not the option '-std=gnu11'.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ openbsd*)
+ AC_DEFINE([_ISOC11_SOURCE], [1],
+ [Define to enable the declarations of ISO C 11 types and functions.])
+ ;;
+ esac
+])
diff --git a/m4/extern-inline.m4 b/m4/extern-inline.m4
new file mode 100644
index 0000000..c001b1c
--- /dev/null
+++ b/m4/extern-inline.m4
@@ -0,0 +1,130 @@
+dnl 'extern inline' a la ISO C99.
+
+dnl Copyright 2012-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_EXTERN_INLINE],
+[
+ AC_CACHE_CHECK([whether ctype.h defines __header_inline],
+ [gl_cv_have___header_inline],
+ [AC_PREPROC_IFELSE(
+ [AC_LANG_SOURCE([[#include <ctype.h>
+ #ifndef __header_inline
+ #error "<ctype.h> does not define __header_inline"
+ #endif
+ ]])],
+ [gl_cv_have___header_inline=yes],
+ [gl_cv_have___header_inline=no])])
+ if test "$gl_cv_have___header_inline" = yes; then
+ AC_DEFINE([HAVE___HEADER_INLINE], [1],
+ [Define to 1 if ctype.h defines __header_inline.])
+ fi
+
+ AH_VERBATIM([HAVE___HEADER_INLINE_1],
+[/* Please see the Gnulib manual for how to use these macros.
+
+ Suppress extern inline with HP-UX cc, as it appears to be broken; see
+ <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+ Suppress extern inline with Sun C in standards-conformance mode, as it
+ mishandles inline functions that call each other. E.g., for 'inline void f
+ (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+ 'reference to static identifier "f" in extern inline function'.
+ This bug was observed with Oracle Developer Studio 12.6
+ (Sun C 5.15 SunOS_sparc 2017/05/30).
+
+ Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+ on configurations that mistakenly use 'static inline' to implement
+ functions or macros in standard C headers like <ctype.h>. For example,
+ if isdigit is mistakenly implemented via a static inline function,
+ a program containing an extern inline function that calls isdigit
+ may not work since the C standard prohibits extern inline functions
+ from calling static functions (ISO C 99 section 6.7.4.(3).
+ This bug is known to occur on:
+
+ OS X 10.8 and earlier; see:
+ https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+ DragonFly; see
+ http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log
+
+ FreeBSD; see:
+ https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+ OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+ for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+ Assume DragonFly and FreeBSD will be similar.
+
+ GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+ inline semantics, unless -fgnu89-inline is used. It defines a macro
+ __GNUC_STDC_INLINE__ to indicate this situation or a macro
+ __GNUC_GNU_INLINE__ to indicate the opposite situation.
+ GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+ semantics but warns, unless -fgnu89-inline is used:
+ warning: C99 inline functions are not supported; using GNU89
+ warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+ It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+ || defined __DragonFly__ || defined __FreeBSD__) \
+ && (defined HAVE___HEADER_INLINE \
+ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+ && ! defined __clang__) \
+ : ((! defined _DONT_USE_CTYPE_INLINE_ \
+ && (defined __GNUC__ || defined __cplusplus)) \
+ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+ && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+ : (199901L <= __STDC_VERSION__ \
+ && !defined __HP_cc \
+ && !defined __PGI \
+ && !(defined __SUNPRO_C && __STDC__))) \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */
+# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+# define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE _GL_UNUSED static
+# define _GL_EXTERN_INLINE _GL_UNUSED static
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+ suppress bogus "no previous prototype for 'FOO'"
+ and "no previous declaration for 'FOO'" diagnostics,
+ when FOO is an inline function in the header; see
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+# define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+# define _GL_INLINE_HEADER_CONST_PRAGMA \
+ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+ _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+ _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif])
+])
diff --git a/m4/fcntl-o.m4 b/m4/fcntl-o.m4
new file mode 100644
index 0000000..59d558b
--- /dev/null
+++ b/m4/fcntl-o.m4
@@ -0,0 +1,140 @@
+# fcntl-o.m4 serial 7
+dnl Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_PREREQ([2.60])
+
+# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
+# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
+# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
+AC_DEFUN([gl_FCNTL_O_FLAGS],
+[
+ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ AC_CHECK_FUNCS_ONCE([symlink])
+ AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ #include <sys/stat.h>
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <io.h>
+ # include <stdlib.h>
+ # defined sleep(n) _sleep ((n) * 1000)
+ #endif
+ #include <fcntl.h>
+ ]GL_MDA_DEFINES[
+ #ifndef O_NOATIME
+ #define O_NOATIME 0
+ #endif
+ #ifndef O_NOFOLLOW
+ #define O_NOFOLLOW 0
+ #endif
+ static int const constants[] =
+ {
+ O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+ O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+ };
+ ]],
+ [[
+ int result = !constants;
+ #if HAVE_SYMLINK
+ {
+ static char const sym[] = "conftest.sym";
+ if (symlink ("/dev/null", sym) != 0)
+ result |= 2;
+ else
+ {
+ int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+ if (fd >= 0)
+ {
+ close (fd);
+ result |= 4;
+ }
+ }
+ if (unlink (sym) != 0 || symlink (".", sym) != 0)
+ result |= 2;
+ else
+ {
+ int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+ if (fd >= 0)
+ {
+ close (fd);
+ result |= 4;
+ }
+ }
+ unlink (sym);
+ }
+ #endif
+ {
+ static char const file[] = "confdefs.h";
+ int fd = open (file, O_RDONLY | O_NOATIME);
+ if (fd < 0)
+ result |= 8;
+ else
+ {
+ struct stat st0;
+ if (fstat (fd, &st0) != 0)
+ result |= 16;
+ else
+ {
+ char c;
+ sleep (1);
+ if (read (fd, &c, 1) != 1)
+ result |= 24;
+ else
+ {
+ if (close (fd) != 0)
+ result |= 32;
+ else
+ {
+ struct stat st1;
+ if (stat (file, &st1) != 0)
+ result |= 40;
+ else
+ if (st0.st_atime != st1.st_atime)
+ result |= 64;
+ }
+ }
+ }
+ }
+ }
+ return result;]])],
+ [gl_cv_header_working_fcntl_h=yes],
+ [case $? in #(
+ 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+ 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+ 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+ *) gl_cv_header_working_fcntl_h='no';;
+ esac],
+ [case "$host_os" in
+ # Guess 'no' on native Windows.
+ mingw*) gl_cv_header_working_fcntl_h='no' ;;
+ *) gl_cv_header_working_fcntl_h=cross-compiling ;;
+ esac
+ ])
+ ])
+
+ case $gl_cv_header_working_fcntl_h in #(
+ *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+ *) ac_val=1;;
+ esac
+ AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
+ [Define to 1 if O_NOATIME works.])
+
+ case $gl_cv_header_working_fcntl_h in #(
+ *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+ *) ac_val=1;;
+ esac
+ AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
+ [Define to 1 if O_NOFOLLOW works.])
+])
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
new file mode 100644
index 0000000..524a99a
--- /dev/null
+++ b/m4/fcntl.m4
@@ -0,0 +1,151 @@
+# fcntl.m4 serial 11
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For now, this module ensures that fcntl()
+# - supports F_DUPFD correctly
+# - supports or emulates F_DUPFD_CLOEXEC
+# - supports F_GETFD
+# Still to be ported to mingw:
+# - F_SETFD
+# - F_GETFL, F_SETFL
+# - F_GETOWN, F_SETOWN
+# - F_GETLK, F_SETLK, F_SETLKW
+AC_DEFUN([gl_FUNC_FCNTL],
+[
+ dnl Persuade glibc to expose F_DUPFD_CLOEXEC.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS_ONCE([fcntl])
+ if test $ac_cv_func_fcntl = no; then
+ gl_REPLACE_FCNTL
+ else
+ dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target
+ dnl haiku alpha 2 F_DUPFD has wrong errno
+ AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly],
+ [gl_cv_func_fcntl_f_dupfd_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <errno.h>
+ #include <fcntl.h>
+ #include <limits.h>
+ #include <sys/resource.h>
+ #include <unistd.h>
+ ]GL_MDA_DEFINES[
+ #ifndef RLIM_SAVED_CUR
+ # define RLIM_SAVED_CUR RLIM_INFINITY
+ #endif
+ #ifndef RLIM_SAVED_MAX
+ # define RLIM_SAVED_MAX RLIM_INFINITY
+ #endif
+ ]],
+ [[int result = 0;
+ int bad_fd = INT_MAX;
+ struct rlimit rlim;
+ if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+ && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+ && rlim.rlim_cur != RLIM_INFINITY
+ && rlim.rlim_cur != RLIM_SAVED_MAX
+ && rlim.rlim_cur != RLIM_SAVED_CUR)
+ bad_fd = rlim.rlim_cur;
+ if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+ if (errno != EINVAL) result |= 2;
+ if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
+ if (errno != EINVAL) result |= 8;
+ /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */
+ {
+ int fd;
+ fd = open (".", O_RDONLY);
+ if (fd == -1)
+ result |= 16;
+ else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1)
+ result |= 32;
+
+ close (fd);
+ }
+ return result;]])],
+ [gl_cv_func_fcntl_f_dupfd_works=yes],
+ [gl_cv_func_fcntl_f_dupfd_works=no],
+ [case $host_os in
+ aix* | cygwin* | haiku*)
+ gl_cv_func_fcntl_f_dupfd_works="guessing no" ;;
+ *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;;
+ esac])])
+ case $gl_cv_func_fcntl_f_dupfd_works in
+ *yes) ;;
+ *) gl_REPLACE_FCNTL
+ AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD
+ behavior does not match POSIX]) ;;
+ esac
+
+ dnl Many systems lack F_DUPFD_CLOEXEC.
+ dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD.
+ AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC],
+ [gl_cv_func_fcntl_f_dupfd_cloexec],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#include <fcntl.h>
+ #include <unistd.h>
+ int main (int argc, char *argv[])
+ {
+ if (argc == 1)
+ /* parent process */
+ {
+ if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0)
+ return 1;
+ return execl ("./conftest", "./conftest", "child", NULL);
+ }
+ else
+ /* child process */
+ return (fcntl (10, F_GETFL) < 0 ? 0 : 42);
+ }
+ ]])
+ ],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#ifdef __linux__
+/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace
+ it to support the semantics on older kernels that failed with EINVAL. */
+choke me
+#endif
+ ]])],
+ [gl_cv_func_fcntl_f_dupfd_cloexec=yes],
+ [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])
+ ],
+ [gl_cv_func_fcntl_f_dupfd_cloexec=no],
+ [case "$host_os" in
+ # Guess no on NetBSD.
+ netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;;
+ *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_fcntl_f_dupfd_cloexec" in
+ *yes) ;;
+ *) gl_REPLACE_FCNTL
+ dnl No witness macro needed for this bug.
+ ;;
+ esac
+ fi
+ dnl Replace fcntl() for supporting the gnulib-defined fchdir() function,
+ dnl to keep fchdir's bookkeeping up-to-date.
+ m4_ifdef([gl_FUNC_FCHDIR], [
+ gl_TEST_FCHDIR
+ if test $HAVE_FCHDIR = 0; then
+ gl_REPLACE_FCNTL
+ fi
+ ])
+])
+
+AC_DEFUN([gl_REPLACE_FCNTL],
+[
+ AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([fcntl])
+ if test $ac_cv_func_fcntl = no; then
+ HAVE_FCNTL=0
+ else
+ REPLACE_FCNTL=1
+ fi
+])
diff --git a/m4/fcntl_h.m4 b/m4/fcntl_h.m4
new file mode 100644
index 0000000..68f4e64
--- /dev/null
+++ b/m4/fcntl_h.m4
@@ -0,0 +1,70 @@
+# serial 20
+# Configure fcntl.h.
+dnl Copyright (C) 2006-2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN_ONCE([gl_FCNTL_H],
+[
+ AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+ AC_REQUIRE([gl_FCNTL_O_FLAGS])
+ gl_NEXT_HEADERS([fcntl.h])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ dnl Ensure the type mode_t gets defined.
+ AC_REQUIRE([AC_TYPE_MODE_T])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, if it is not common
+ dnl enough to be declared everywhere.
+ gl_WARN_ON_USE_PREPARE([[#include <fcntl.h>
+ ]], [fcntl openat])
+])
+
+# gl_FCNTL_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_FCNTL_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_FCNTL_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_FCNTL_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL])
+ HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT])
+ REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT])
+ REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL])
+ REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN])
+ REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT])
+])
diff --git a/m4/fdopen.m4 b/m4/fdopen.m4
new file mode 100644
index 0000000..6b3909b
--- /dev/null
+++ b/m4/fdopen.m4
@@ -0,0 +1,51 @@
+# fdopen.m4 serial 5
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FDOPEN],
+[
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ m4_ifdef([gl_MSVC_INVAL], [
+ AC_REQUIRE([gl_MSVC_INVAL])
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_FDOPEN=1
+ fi
+ ])
+ if test $REPLACE_FDOPEN = 0; then
+ dnl Test whether fdopen() sets errno when it fails due to a bad fd argument.
+ AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works],
+ [
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <errno.h>
+]GL_MDA_DEFINES[
+int
+main (void)
+{
+ FILE *fp;
+ errno = 0;
+ fp = fdopen (-1, "r");
+ if (fp == NULL && errno == 0)
+ return 1;
+ return 0;
+}]])],
+ [gl_cv_func_fdopen_works=yes],
+ [gl_cv_func_fdopen_works=no],
+ [case "$host_os" in
+ mingw*) gl_cv_func_fdopen_works="guessing no" ;;
+ *) gl_cv_func_fdopen_works="guessing yes" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_fdopen_works" in
+ *no) REPLACE_FDOPEN=1 ;;
+ esac
+ fi
+])
+
+dnl Prerequisites of lib/fdopen.c.
+AC_DEFUN([gl_PREREQ_FDOPEN], [])
diff --git a/m4/flexmember.m4 b/m4/flexmember.m4
new file mode 100644
index 0000000..13f7e87
--- /dev/null
+++ b/m4/flexmember.m4
@@ -0,0 +1,44 @@
+# serial 5
+# Check for flexible array member support.
+
+# Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert.
+
+AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER],
+[
+ AC_CACHE_CHECK([for flexible array member],
+ ac_cv_c_flexmember,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ #include <stdio.h>
+ #include <stddef.h>
+ struct m { struct m *next, **list; char name[]; };
+ struct s { struct s *p; struct m *m; int n; double d[]; };]],
+ [[int m = getchar ();
+ size_t nbytes = offsetof (struct s, d) + m * sizeof (double);
+ nbytes += sizeof (struct s) - 1;
+ nbytes -= nbytes % sizeof (struct s);
+ struct s *p = malloc (nbytes);
+ p->p = p;
+ p->m = NULL;
+ p->d[0] = 0.0;
+ return p->d != (double *) NULL;]])],
+ [ac_cv_c_flexmember=yes],
+ [ac_cv_c_flexmember=no])])
+ if test $ac_cv_c_flexmember = yes; then
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [],
+ [Define to nothing if C supports flexible array members, and to
+ 1 if it does not. That way, with a declaration like 'struct s
+ { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack
+ can be used with pre-C99 compilers.
+ Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate
+ the size in bytes of such a struct containing an N-element array.])
+ else
+ AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1])
+ fi
+])
diff --git a/m4/fpending.m4 b/m4/fpending.m4
new file mode 100644
index 0000000..6991f81
--- /dev/null
+++ b/m4/fpending.m4
@@ -0,0 +1,36 @@
+# serial 23
+
+# Copyright (C) 2000-2001, 2004-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering
+dnl Using code from emacs, based on suggestions from Paul Eggert
+dnl and Ulrich Drepper.
+
+dnl Find out how to determine the number of pending output bytes on a stream.
+dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems,
+dnl we have to grub around in the (possibly opaque) FILE struct.
+
+AC_DEFUN([gl_FUNC_FPENDING],
+[
+ AC_CHECK_HEADERS_ONCE([stdio_ext.h])
+ fp_headers='
+ #include <stdio.h>
+ #if HAVE_STDIO_EXT_H
+ # include <stdio_ext.h>
+ #endif
+ '
+ AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending],
+ [
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[$fp_headers]],
+ [[return ! __fpending (stdin);]])],
+ [gl_cv_func___fpending=yes],
+ [gl_cv_func___fpending=no])
+ ])
+ if test $gl_cv_func___fpending = yes; then
+ AC_CHECK_DECLS([__fpending], [], [], [$fp_headers])
+ fi
+])
diff --git a/m4/free.m4 b/m4/free.m4
new file mode 100644
index 0000000..0389dea
--- /dev/null
+++ b/m4/free.m4
@@ -0,0 +1,52 @@
+# free.m4 serial 6
+# Copyright (C) 2003-2005, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert and Bruno Haible.
+
+AC_DEFUN([gl_FUNC_FREE],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+
+ dnl In the next release of POSIX, free must preserve errno.
+ dnl https://www.austingroupbugs.net/view.php?id=385
+ dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924
+ dnl So far, we know of three platforms that do this:
+ dnl * glibc >= 2.33, thanks to the fix for this bug:
+ dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924>
+ dnl * OpenBSD >= 4.5, thanks to this commit:
+ dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h>
+ dnl * Solaris, because its malloc() implementation is based on brk(),
+ dnl not mmap(); hence its free() implementation makes no system calls.
+ dnl For other platforms, you can only be sure if they state it in their
+ dnl documentation, or by code inspection of the free() implementation in libc.
+ AC_CACHE_CHECK([whether free is known to preserve errno],
+ [gl_cv_func_free_preserves_errno],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ ]],
+ [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__)
+ #elif defined __OpenBSD__
+ #elif defined __sun
+ #else
+ #error "'free' is not known to preserve errno"
+ #endif
+ ]])],
+ [gl_cv_func_free_preserves_errno=yes],
+ [gl_cv_func_free_preserves_errno=no])
+ ])
+
+ case $gl_cv_func_free_preserves_errno in
+ *yes)
+ AC_DEFINE([HAVE_FREE_POSIX], [1],
+ [Define if the 'free' function is guaranteed to preserve errno.])
+ ;;
+ *) REPLACE_FREE=1 ;;
+ esac
+])
+
+# Prerequisites of lib/free.c.
+AC_DEFUN([gl_PREREQ_FREE], [:])
diff --git a/m4/fstat.m4 b/m4/fstat.m4
new file mode 100644
index 0000000..7cb2edb
--- /dev/null
+++ b/m4/fstat.m4
@@ -0,0 +1,40 @@
+# fstat.m4 serial 8
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSTAT],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+
+ case "$host_os" in
+ mingw* | solaris*)
+ dnl On MinGW, the original stat() returns st_atime, st_mtime,
+ dnl st_ctime values that are affected by the time zone.
+ dnl Solaris stat can return a negative tv_nsec.
+ REPLACE_FSTAT=1
+ ;;
+ esac
+
+ dnl Replace fstat() for supporting the gnulib-defined open() on directories.
+ m4_ifdef([gl_FUNC_FCHDIR], [
+ gl_TEST_FCHDIR
+ if test $HAVE_FCHDIR = 0; then
+ case "$gl_cv_func_open_directory_works" in
+ *yes) ;;
+ *)
+ REPLACE_FSTAT=1
+ ;;
+ esac
+ fi
+ ])
+])
+
+# Prerequisites of lib/fstat.c and lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_FSTAT], [
+ AC_REQUIRE([gl_SYS_STAT_H])
+ AC_REQUIRE([gl_PREREQ_STAT_W32])
+ :
+])
diff --git a/m4/fsync.m4 b/m4/fsync.m4
new file mode 100644
index 0000000..857e495
--- /dev/null
+++ b/m4/fsync.m4
@@ -0,0 +1,17 @@
+# fsync.m4 serial 2
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSYNC],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([fsync])
+ if test $ac_cv_func_fsync = no; then
+ HAVE_FSYNC=0
+ fi
+])
+
+# Prerequisites of lib/fsync.c.
+AC_DEFUN([gl_PREREQ_FSYNC], [:])
diff --git a/m4/ftruncate.m4 b/m4/ftruncate.m4
new file mode 100644
index 0000000..cbb5f42
--- /dev/null
+++ b/m4/ftruncate.m4
@@ -0,0 +1,43 @@
+# serial 23
+
+# See if we need to emulate a missing ftruncate function using _chsize.
+
+# Copyright (C) 2000-2001, 2003-2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FTRUNCATE],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ gl_CHECK_FUNCS_ANDROID([ftruncate], [[#include <unistd.h>]])
+ if test $ac_cv_func_ftruncate = yes; then
+ m4_ifdef([gl_LARGEFILE], [
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*)
+ dnl Native Windows, and Large File Support is requested.
+ dnl The MSVCRT _chsize() function only accepts a 32-bit file size,
+ dnl and the mingw64 ftruncate64() function is unreliable (it may
+ dnl delete the file, see
+ dnl <https://web.archive.org/web/20160425005423/http://mingw-w64.sourcearchive.com/documentation/2.0-1/ftruncate64_8c_source.html>).
+ dnl Use gnulib's ftruncate() implementation instead.
+ REPLACE_FTRUNCATE=1
+ ;;
+ esac
+ ], [
+ :
+ ])
+ else
+ HAVE_FTRUNCATE=0
+ case "$gl_cv_onwards_func_ftruncate" in
+ future*) REPLACE_FTRUNCATE=1 ;;
+ esac
+ fi
+])
+
+# Prerequisites of lib/ftruncate.c.
+AC_DEFUN([gl_PREREQ_FTRUNCATE],
+[
+ AC_CHECK_FUNCS([_chsize])
+])
diff --git a/m4/getcwd.m4 b/m4/getcwd.m4
new file mode 100644
index 0000000..e95db05
--- /dev/null
+++ b/m4/getcwd.m4
@@ -0,0 +1,168 @@
+# getcwd.m4 - check for working getcwd that is compatible with glibc
+
+# Copyright (C) 2001, 2003-2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert.
+# serial 20
+
+AC_DEFUN([gl_FUNC_GETCWD_NULL],
+ [
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result],
+ [gl_cv_func_getcwd_null],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+# include <stdlib.h>
+# if HAVE_UNISTD_H
+# include <unistd.h>
+# else /* on Windows with MSVC */
+# include <direct.h>
+# endif
+ ]GL_MDA_DEFINES[
+# ifndef getcwd
+ char *getcwd ();
+# endif
+]], [[
+#if defined _WIN32 && ! defined __CYGWIN__
+/* mingw cwd does not start with '/', but _getcwd does allocate.
+ However, mingw fails to honor non-zero size. */
+#else
+ if (chdir ("/") != 0)
+ return 1;
+ else
+ {
+ char *f = getcwd (NULL, 0);
+ if (! f)
+ return 2;
+ if (f[0] != '/')
+ { free (f); return 3; }
+ if (f[1] != '\0')
+ { free (f); return 4; }
+ free (f);
+ return 0;
+ }
+#endif
+ ]])],
+ [gl_cv_func_getcwd_null=yes],
+ [gl_cv_func_getcwd_null=no],
+ [[case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_getcwd_null="guessing yes";;
+ # Guess yes on Cygwin.
+ cygwin*) gl_cv_func_getcwd_null="guessing yes";;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";;
+ esac
+ ]])])
+])
+
+AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE],
+[
+ AC_CACHE_CHECK([for getcwd with POSIX signature],
+ [gl_cv_func_getcwd_posix_signature],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+ ]GL_MDA_DEFINES],
+ [[extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ char *getcwd (char *, size_t);
+ ]])
+ ],
+ [gl_cv_func_getcwd_posix_signature=yes],
+ [gl_cv_func_getcwd_posix_signature=no])
+ ])
+])
+
+dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes
+dnl that either the system getcwd is robust, or that calling code is okay
+dnl with spurious failures when run from a directory with an absolute name
+dnl larger than 4k bytes.
+dnl
+dnl Assumes that getcwd exists; if you are worried about obsolete
+dnl platforms that lacked getcwd(), then you need to use the GPL module.
+AC_DEFUN([gl_FUNC_GETCWD_LGPL],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_GETCWD_NULL])
+ AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE])
+
+ case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in
+ *yes,yes) ;;
+ *)
+ dnl Minimal replacement lib/getcwd-lgpl.c.
+ REPLACE_GETCWD=1
+ ;;
+ esac
+])
+
+dnl Check for all known getcwd bugs; useful for a program likely to be
+dnl executed from an arbitrary location.
+AC_DEFUN([gl_FUNC_GETCWD],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_GETCWD_NULL])
+ AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ gl_abort_bug=no
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_getcwd_path_max=yes
+ ;;
+ *)
+ gl_FUNC_GETCWD_PATH_MAX
+ case "$gl_cv_func_getcwd_null" in
+ *yes)
+ gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes])
+ ;;
+ esac
+ ;;
+ esac
+ dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD
+ dnl if appropriate.
+ case "$gl_cv_func_getcwd_path_max" in
+ *"no" | *"no, it has the AIX bug") ;;
+ *)
+ AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1],
+ [Define to 1 if getcwd minimally works, that is, its result can be
+ trusted when it succeeds.])
+ ;;
+ esac
+ case "$gl_cv_func_getcwd_path_max" in
+ *"no, but it is partly working")
+ AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1],
+ [Define to 1 if getcwd works, except it sometimes fails when it
+ shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.])
+ ;;
+ *"yes, but with shorter paths")
+ AC_DEFINE([HAVE_GETCWD_SHORTER], [1],
+ [Define to 1 if getcwd works, but with shorter paths
+ than is generally tested with the replacement.])
+ ;;
+ esac
+
+ if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \
+ || test $gl_cv_func_getcwd_posix_signature != yes \
+ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \
+ || test $gl_abort_bug = yes; then
+ REPLACE_GETCWD=1
+ fi
+])
+
+# Prerequisites of lib/getcwd.c, when full replacement is in effect.
+AC_DEFUN([gl_PREREQ_GETCWD],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO])
+ :
+])
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
new file mode 100644
index 0000000..8bcda90
--- /dev/null
+++ b/m4/getdtablesize.m4
@@ -0,0 +1,63 @@
+# getdtablesize.m4 serial 8
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_GETDTABLESIZE],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS_ONCE([getdtablesize])
+ AC_CHECK_DECLS_ONCE([getdtablesize])
+ if test $ac_cv_func_getdtablesize = yes &&
+ test $ac_cv_have_decl_getdtablesize = yes; then
+ AC_CACHE_CHECK([whether getdtablesize works],
+ [gl_cv_func_getdtablesize_works],
+ [dnl There are two concepts: the "maximum possible file descriptor value + 1"
+ dnl and the "maximum number of open file descriptors in a process".
+ dnl Per SUSv2 and POSIX, getdtablesize() should return the first one.
+ dnl On most platforms, the first and the second concept are the same.
+ dnl On OpenVMS, however, they are different and getdtablesize() returns
+ dnl the second one; thus the test below fails. But we don't care
+ dnl because there's no good way to write a replacement getdtablesize().
+ case "$host_os" in
+ vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;;
+ *)
+ dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft
+ dnl limit up to an unchangeable hard limit; all other platforms
+ dnl correctly require setrlimit before getdtablesize() can report
+ dnl a larger value.
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM(
+ [[#include <unistd.h>]
+ GL_MDA_DEFINES
+ ],
+ [[int size = getdtablesize();
+ if (dup2 (0, getdtablesize()) != -1)
+ return 1;
+ if (size != getdtablesize())
+ return 2;
+ ]])],
+ [gl_cv_func_getdtablesize_works=yes],
+ [gl_cv_func_getdtablesize_works=no],
+ [case "$host_os" in
+ cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows
+ gl_cv_func_getdtablesize_works="guessing no" ;;
+ *) gl_cv_func_getdtablesize_works="guessing yes" ;;
+ esac
+ ])
+ ;;
+ esac
+ ])
+ case "$gl_cv_func_getdtablesize_works" in
+ *yes | "no (limitation)") ;;
+ *) REPLACE_GETDTABLESIZE=1 ;;
+ esac
+ else
+ HAVE_GETDTABLESIZE=0
+ fi
+])
+
+# Prerequisites of lib/getdtablesize.c.
+AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:])
diff --git a/m4/getopt.m4 b/m4/getopt.m4
new file mode 100644
index 0000000..7981a09
--- /dev/null
+++ b/m4/getopt.m4
@@ -0,0 +1,381 @@
+# getopt.m4 serial 48
+dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Request a POSIX compliant getopt function.
+AC_DEFUN([gl_FUNC_GETOPT_POSIX],
+[
+ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX])
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
+ dnl Other modules can request the gnulib implementation of the getopt
+ dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS.
+ dnl argp.m4 does this.
+ m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [
+ REPLACE_GETOPT=1
+ ], [
+ REPLACE_GETOPT=0
+ if test -n "$gl_replace_getopt"; then
+ REPLACE_GETOPT=1
+ fi
+ ])
+ GL_GENERATE_GETOPT_H=false
+ GL_GENERATE_GETOPT_CDEFS_H=false
+ if test $REPLACE_GETOPT = 1; then
+ dnl Arrange for getopt.h to be created.
+ gl_GETOPT_SUBSTITUTE_HEADER
+ fi
+])
+
+# Request a POSIX compliant getopt function with GNU extensions (such as
+# options with optional arguments) and the functions getopt_long,
+# getopt_long_only.
+AC_DEFUN([gl_FUNC_GETOPT_GNU],
+[
+ dnl Set the variable gl_getopt_required, so that all invocations of
+ dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file
+ dnl will check for getopt with GNU extensions.
+ dnl This means that if one gnulib-tool invocation requests getopt-posix
+ dnl and another gnulib-tool invocation requests getopt-gnu, it is as if
+ dnl both had requested getopt-gnu.
+ m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
+
+ dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically
+ dnl done through the module dependency getopt-gnu -> getopt-posix.
+])
+
+# Determine whether to replace the entire getopt facility.
+AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON
+
+ dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ gl_CHECK_NEXT_HEADERS([getopt.h])
+ if test $ac_cv_header_getopt_h = yes; then
+ HAVE_GETOPT_H=1
+ else
+ HAVE_GETOPT_H=0
+ fi
+ AC_SUBST([HAVE_GETOPT_H])
+
+ gl_replace_getopt=
+
+ dnl Test whether <getopt.h> is available.
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+ AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
+ fi
+
+ dnl Test whether the function getopt_long is available.
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+ AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
+ fi
+
+ dnl POSIX 2008 does not specify leading '+' behavior, but see
+ dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
+ dnl the next version of POSIX. For now, we only guarantee leading '+'
+ dnl behavior with getopt-gnu.
+ if test -z "$gl_replace_getopt"; then
+ AC_CACHE_CHECK([whether getopt is POSIX compatible],
+ [gl_cv_func_getopt_posix],
+ [
+ dnl Merging these three different test programs into a single one
+ dnl would require a reset mechanism. On BSD systems, it can be done
+ dnl through 'optreset'; on some others (glibc), it can be done by
+ dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1,
+ dnl Solaris 9, musl libc), there is no such mechanism.
+ if test $cross_compiling = no; then
+ dnl Sanity check. Succeeds everywhere (except on MSVC,
+ dnl which lacks <unistd.h> and getopt() entirely).
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char a[] = "-a";
+ static char foo[] = "foo";
+ static char bar[] = "bar";
+ char *argv[] = { program, a, foo, bar, NULL };
+ int c;
+
+ c = getopt (4, argv, "ab");
+ if (!(c == 'a'))
+ return 1;
+ c = getopt (4, argv, "ab");
+ if (!(c == -1))
+ return 2;
+ if (!(optind == 2))
+ return 3;
+ return 0;
+}
+]])],
+ [gl_cv_func_getopt_posix=maybe],
+ [gl_cv_func_getopt_posix=no])
+ if test $gl_cv_func_getopt_posix = maybe; then
+ dnl Sanity check with '+'. Succeeds everywhere (except on MSVC,
+ dnl which lacks <unistd.h> and getopt() entirely).
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char donald[] = "donald";
+ static char p[] = "-p";
+ static char billy[] = "billy";
+ static char duck[] = "duck";
+ static char a[] = "-a";
+ static char bar[] = "bar";
+ char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
+ int c;
+
+ c = getopt (7, argv, "+abp:q:");
+ if (!(c == -1))
+ return 4;
+ if (!(strcmp (argv[0], "program") == 0))
+ return 5;
+ if (!(strcmp (argv[1], "donald") == 0))
+ return 6;
+ if (!(strcmp (argv[2], "-p") == 0))
+ return 7;
+ if (!(strcmp (argv[3], "billy") == 0))
+ return 8;
+ if (!(strcmp (argv[4], "duck") == 0))
+ return 9;
+ if (!(strcmp (argv[5], "-a") == 0))
+ return 10;
+ if (!(strcmp (argv[6], "bar") == 0))
+ return 11;
+ if (!(optind == 1))
+ return 12;
+ return 0;
+}
+]])],
+ [gl_cv_func_getopt_posix=maybe],
+ [gl_cv_func_getopt_posix=no])
+ fi
+ if test $gl_cv_func_getopt_posix = maybe; then
+ dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug.
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main ()
+{
+ static char program[] = "program";
+ static char ab[] = "-ab";
+ char *argv[3] = { program, ab, NULL };
+ if (getopt (2, argv, "ab:") != 'a')
+ return 13;
+ if (getopt (2, argv, "ab:") != '?')
+ return 14;
+ if (optopt != 'b')
+ return 15;
+ if (optind != 2)
+ return 16;
+ return 0;
+}
+]])],
+ [gl_cv_func_getopt_posix=yes],
+ [gl_cv_func_getopt_posix=no])
+ fi
+ else
+ case "$host_os" in
+ darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
+ *) gl_cv_func_getopt_posix="guessing yes";;
+ esac
+ fi
+ ])
+ case "$gl_cv_func_getopt_posix" in
+ *no) gl_replace_getopt=yes ;;
+ esac
+ fi
+
+ if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+ AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu],
+ [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+ # optstring is necessary for programs like m4 that have POSIX-mandated
+ # semantics for supporting options interspersed with files.
+ # Also, since getopt_long is a GNU extension, we require optind=0.
+ # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT;
+ # so take care to revert to the correct (non-)export state.
+dnl GNU Coding Standards currently allow awk but not env; besides, env
+dnl is ambiguous with environment values that contain newlines.
+ gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
+ case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in
+ xx) gl_had_POSIXLY_CORRECT=exported ;;
+ x) gl_had_POSIXLY_CORRECT=yes ;;
+ *) gl_had_POSIXLY_CORRECT= ;;
+ esac
+ POSIXLY_CORRECT=1
+ export POSIXLY_CORRECT
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[#include <getopt.h>
+ #include <stddef.h>
+ #include <string.h>
+ ]GL_NOCRASH[
+ ]], [[
+ int result = 0;
+
+ nocrash_init();
+
+ /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+ and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+ OSF/1 5.1, Solaris 10. */
+ {
+ static char conftest[] = "conftest";
+ static char plus[] = "-+";
+ char *argv[3] = { conftest, plus, NULL };
+ opterr = 0;
+ if (getopt (2, argv, "+a") != '?')
+ result |= 1;
+ }
+ /* This code succeeds on glibc 2.8, mingw,
+ and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+ IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
+ {
+ static char program[] = "program";
+ static char p[] = "-p";
+ static char foo[] = "foo";
+ static char bar[] = "bar";
+ char *argv[] = { program, p, foo, bar, NULL };
+
+ optind = 1;
+ if (getopt (4, argv, "p::") != 'p')
+ result |= 2;
+ else if (optarg != NULL)
+ result |= 4;
+ else if (getopt (4, argv, "p::") != -1)
+ result |= 6;
+ else if (optind != 2)
+ result |= 8;
+ }
+ /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
+ {
+ static char program[] = "program";
+ static char foo[] = "foo";
+ static char p[] = "-p";
+ char *argv[] = { program, foo, p, NULL };
+ optind = 0;
+ if (getopt (3, argv, "-p") != 1)
+ result |= 16;
+ else if (getopt (3, argv, "-p") != 'p')
+ result |= 16;
+ }
+ /* This code fails on glibc 2.11. */
+ {
+ static char program[] = "program";
+ static char b[] = "-b";
+ static char a[] = "-a";
+ char *argv[] = { program, b, a, NULL };
+ optind = opterr = 0;
+ if (getopt (3, argv, "+:a:b") != 'b')
+ result |= 32;
+ else if (getopt (3, argv, "+:a:b") != ':')
+ result |= 32;
+ }
+ /* This code dumps core on glibc 2.14. */
+ {
+ static char program[] = "program";
+ static char w[] = "-W";
+ static char dummy[] = "dummy";
+ char *argv[] = { program, w, dummy, NULL };
+ optind = opterr = 1;
+ if (getopt (3, argv, "W;") != 'W')
+ result |= 64;
+ }
+ return result;
+ ]])],
+ [gl_cv_func_getopt_gnu=yes],
+ [gl_cv_func_getopt_gnu=no],
+ [dnl Cross compiling.
+ dnl Assume the worst, even on glibc platforms.
+ dnl But obey --enable-cross-guesses.
+ gl_cv_func_getopt_gnu="$gl_cross_guess_normal"
+ ])
+ case $gl_had_POSIXLY_CORRECT in
+ exported) ;;
+ yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;;
+ *) AS_UNSET([POSIXLY_CORRECT]) ;;
+ esac
+ ])
+ if test "$gl_cv_func_getopt_gnu" != yes; then
+ gl_replace_getopt=yes
+ else
+ AC_CACHE_CHECK([for working GNU getopt_long function],
+ [gl_cv_func_getopt_long_gnu],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <getopt.h>
+ #include <stddef.h>
+ #include <string.h>
+ ]],
+ [[static const struct option long_options[] =
+ {
+ { "xtremely-",no_argument, NULL, 1003 },
+ { "xtra", no_argument, NULL, 1001 },
+ { "xtreme", no_argument, NULL, 1002 },
+ { "xtremely", no_argument, NULL, 1003 },
+ { NULL, 0, NULL, 0 }
+ };
+ /* This code fails on OpenBSD 5.0. */
+ {
+ static char program[] = "program";
+ static char xtremel[] = "--xtremel";
+ char *argv[] = { program, xtremel, NULL };
+ int option_index;
+ optind = 1; opterr = 0;
+ if (getopt_long (2, argv, "", long_options, &option_index) != 1003)
+ return 1;
+ }
+ return 0;
+ ]])],
+ [gl_cv_func_getopt_long_gnu=yes],
+ [gl_cv_func_getopt_long_gnu=no],
+ [dnl Cross compiling. Guess no on OpenBSD, yes otherwise.
+ case "$host_os" in
+ openbsd*) gl_cv_func_getopt_long_gnu="guessing no";;
+ *) gl_cv_func_getopt_long_gnu="guessing yes";;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_getopt_long_gnu" in
+ *yes) ;;
+ *) gl_replace_getopt=yes ;;
+ esac
+ fi
+ fi
+])
+
+AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
+[
+ AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
+ if test $ac_cv_header_sys_cdefs_h = yes; then
+ HAVE_SYS_CDEFS_H=1
+ else
+ HAVE_SYS_CDEFS_H=0
+ fi
+ AC_SUBST([HAVE_SYS_CDEFS_H])
+
+ AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
+ [Define to rpl_ if the getopt replacement functions and variables
+ should be used.])
+ GL_GENERATE_GETOPT_H=true
+ GL_GENERATE_GETOPT_CDEFS_H=true
+])
diff --git a/m4/getpagesize.m4 b/m4/getpagesize.m4
new file mode 100644
index 0000000..79925a7
--- /dev/null
+++ b/m4/getpagesize.m4
@@ -0,0 +1,49 @@
+# getpagesize.m4 serial 10
+dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_GETPAGESIZE],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CHECK_FUNC_GETPAGESIZE
+ if test $gl_cv_func_getpagesize = no; then
+ HAVE_GETPAGESIZE=0
+ AC_CHECK_HEADERS([OS.h])
+ if test $ac_cv_header_OS_h = yes; then
+ HAVE_OS_H=1
+ fi
+ AC_CHECK_HEADERS([sys/param.h])
+ if test $ac_cv_header_sys_param_h = yes; then
+ HAVE_SYS_PARAM_H=1
+ fi
+ fi
+ case "$host_os" in
+ mingw*)
+ REPLACE_GETPAGESIZE=1
+ ;;
+ esac
+ dnl Also check whether it's declared.
+ dnl mingw has getpagesize() in libgcc.a but doesn't declare it.
+ AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0])
+])
+
+dnl Tests whether the function getpagesize() exists.
+dnl Sets gl_cv_func_getpagesize.
+AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE],
+[
+ dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a
+ dnl static inline function when compiling for Android 4.4 or older.
+ AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>]],
+ [[return getpagesize();]])
+ ],
+ [gl_cv_func_getpagesize=yes],
+ [gl_cv_func_getpagesize=no])
+ ])
+])
diff --git a/m4/getprogname.m4 b/m4/getprogname.m4
new file mode 100644
index 0000000..b8636e1
--- /dev/null
+++ b/m4/getprogname.m4
@@ -0,0 +1,54 @@
+# getprogname.m4 - check for getprogname or replacements for it
+
+# Copyright (C) 2016-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+AC_DEFUN([gl_FUNC_GETPROGNAME],
+[
+ gl_CHECK_FUNCS_ANDROID([getprogname], [[#include <stdlib.h>]])
+ if test $ac_cv_func_getprogname = no; then
+ HAVE_GETPROGNAME=0
+ case "$gl_cv_onwards_func_getprogname" in
+ future*) REPLACE_GETPROGNAME=1 ;;
+ esac
+ fi
+])
+
+AC_DEFUN([gl_PREREQ_GETPROGNAME],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_CHECK_FUNCS_ONCE([getexecname])
+ ac_found=0
+ AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [],
+ [#include <errno.h>])
+ AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [],
+ [#include <errno.h>])
+ AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>])
+
+ # Incur the cost of this test only if none of the above worked.
+ if test $ac_found = 0; then
+ # On OpenBSD 5.1, using the global __progname variable appears to be
+ # the only way to implement getprogname.
+ AC_CACHE_CHECK([whether __progname is defined in default libraries],
+ [gl_cv_var___progname],
+ [
+ gl_cv_var___progname=
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[extern char *__progname;]],
+ [[return *__progname;]]
+ )],
+ [gl_cv_var___progname=yes]
+ )
+ ]
+ )
+ if test "$gl_cv_var___progname" = yes; then
+ AC_DEFINE([HAVE_VAR___PROGNAME], 1,
+ [Define if you have a global __progname variable])
+ fi
+ fi
+])
diff --git a/m4/getrandom.m4 b/m4/getrandom.m4
new file mode 100644
index 0000000..7b7f9ce
--- /dev/null
+++ b/m4/getrandom.m4
@@ -0,0 +1,80 @@
+# getrandom.m4 serial 11
+dnl Copyright 2020-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_FUNC_GETRANDOM],
+[
+ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
+ gl_CHECK_FUNCS_ANDROID([getrandom],
+ [[/* Additional includes are needed before <sys/random.h> on uClibc
+ and Mac OS X. */
+ #include <sys/types.h>
+ #include <stdlib.h>
+ #include <sys/random.h>
+ ]])
+ if test "$ac_cv_func_getrandom" != yes; then
+ HAVE_GETRANDOM=0
+ case "$gl_cv_onwards_func_getrandom" in
+ future*) REPLACE_GETRANDOM=1 ;;
+ esac
+ else
+ dnl On Solaris 11.4 the return type is 'int', not 'ssize_t'.
+ AC_CACHE_CHECK([whether getrandom is compatible with its GNU+BSD signature],
+ [gl_cv_func_getrandom_ok],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* Additional includes are needed before <sys/random.h> on uClibc
+ and Mac OS X. */
+ #include <sys/types.h>
+ #include <stdlib.h>
+ #include <sys/random.h>
+ ssize_t getrandom (void *, size_t, unsigned int);
+ ]],
+ [[]])
+ ],
+ [gl_cv_func_getrandom_ok=yes],
+ [gl_cv_func_getrandom_ok=no])
+ ])
+ if test $gl_cv_func_getrandom_ok = no; then
+ REPLACE_GETRANDOM=1
+ fi
+ fi
+
+ case "$host_os" in
+ mingw*)
+ AC_CHECK_HEADERS([bcrypt.h], [], [],
+ [[#include <windows.h>
+ ]])
+ AC_CACHE_CHECK([whether the bcrypt library is guaranteed to be present],
+ [gl_cv_lib_assume_bcrypt],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <windows.h>]],
+ [[#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7)
+ cannot assume it
+ #endif
+ ]])
+ ],
+ [gl_cv_lib_assume_bcrypt=yes],
+ [gl_cv_lib_assume_bcrypt=no])
+ ])
+ if test $gl_cv_lib_assume_bcrypt = yes; then
+ AC_DEFINE([HAVE_LIB_BCRYPT], [1],
+ [Define to 1 if the bcrypt library is guaranteed to be present.])
+ GETRANDOM_LIB='-lbcrypt'
+ else
+ GETRANDOM_LIB='-ladvapi32'
+ fi
+ ;;
+ *)
+ GETRANDOM_LIB= ;;
+ esac
+ AC_SUBST([GETRANDOM_LIB])
+ dnl For backward compatibility.
+ LIB_GETRANDOM="$GETRANDOM_LIB"
+ AC_SUBST([LIB_GETRANDOM])
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..f84e6a5
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,383 @@
+# gettext.m4 serial 63 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl default (if it is not specified or empty) is 'no-libtool'.
+dnl INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl depending on --{enable,disable}-{shared,static} and on the presence of
+dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl implementations (in libc or libintl) without the ngettext() function
+dnl will be ignored. If NEEDSYMBOL is specified and is
+dnl 'need-formatstring-macros', then GNU gettext implementations that don't
+dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries. If empty,
+dnl the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl and used.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl Catalog format: GNU --> install in $(datadir)
+dnl Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl Catalog format: none
+dnl Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+ dnl Argument checking.
+ ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+ [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+ ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
+ [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
+ ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+ [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+ define([gt_included_intl],
+ ifelse([$1], [external],
+ ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+ [yes]))
+ define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+ gt_NEEDS_INIT
+ AM_GNU_GETTEXT_NEED([$2])
+
+ AC_REQUIRE([AM_PO_SUBDIRS])dnl
+ ifelse(gt_included_intl, yes, [
+ AC_REQUIRE([AM_INTL_SUBDIR])dnl
+ ])
+
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ dnl Ideally we would do this search only after the
+ dnl if test "$USE_NLS" = "yes"; then
+ dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+ dnl the configure script would need to contain the same shell code
+ dnl again, outside any 'if'. There are two solutions:
+ dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+ dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+ dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+ dnl documented, we avoid it.
+ ifelse(gt_included_intl, yes, , [
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+ ])
+
+ dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+ gt_INTL_MACOSX
+
+ dnl Set USE_NLS.
+ AC_REQUIRE([AM_NLS])
+
+ ifelse(gt_included_intl, yes, [
+ BUILD_INCLUDED_LIBINTL=no
+ USE_INCLUDED_LIBINTL=no
+ ])
+ LIBINTL=
+ LTLIBINTL=
+ POSUB=
+
+ dnl Add a version number to the cache macros.
+ case " $gt_needs " in
+ *" need-formatstring-macros "*) gt_api_version=3 ;;
+ *" need-ngettext "*) gt_api_version=2 ;;
+ *) gt_api_version=1 ;;
+ esac
+ gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+ gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+ dnl If we use NLS figure out what method
+ if test "$USE_NLS" = "yes"; then
+ gt_use_preinstalled_gnugettext=no
+ ifelse(gt_included_intl, yes, [
+ AC_MSG_CHECKING([whether included gettext is requested])
+ AC_ARG_WITH([included-gettext],
+ [ --with-included-gettext use the GNU gettext library included here],
+ nls_cv_force_use_gnu_gettext=$withval,
+ nls_cv_force_use_gnu_gettext=no)
+ AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext])
+
+ nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+ if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+ ])
+ dnl User does not insist on using GNU NLS library. Figure out what
+ dnl to use. If GNU gettext is available we use this. Else we have
+ dnl to fall back to GNU NLS library.
+
+ if test $gt_api_version -ge 3; then
+ gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+ else
+ gt_revision_test_code=
+ fi
+ if test $gt_api_version -ge 2; then
+ gt_expression_test_code=' + * ngettext ("", "", 0)'
+ else
+ gt_expression_test_code=
+ fi
+
+ AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+ [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+ [eval "$gt_func_gnugettext_libc=yes"],
+ [eval "$gt_func_gnugettext_libc=no"])])
+
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+ dnl Sometimes libintl requires libiconv, so first search for libiconv.
+ ifelse(gt_included_intl, yes, , [
+ AM_ICONV_LINK
+ ])
+ dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+ dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+ dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+ dnl even if libiconv doesn't exist.
+ AC_LIB_LINKFLAGS_BODY([intl])
+ AC_CACHE_CHECK([for GNU gettext in libintl],
+ [$gt_func_gnugettext_libintl],
+ [gt_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS $INCINTL"
+ gt_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBINTL"
+ dnl Now see whether libintl exists and does not depend on libiconv.
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [eval "$gt_func_gnugettext_libintl=yes"],
+ [eval "$gt_func_gnugettext_libintl=no"])
+ dnl Now see whether libintl exists and depends on libiconv.
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+ [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+ [LIBINTL="$LIBINTL $LIBICONV"
+ LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+ eval "$gt_func_gnugettext_libintl=yes"
+ ])
+ fi
+ CPPFLAGS="$gt_save_CPPFLAGS"
+ LIBS="$gt_save_LIBS"])
+ fi
+
+ dnl If an already present or preinstalled GNU gettext() is found,
+ dnl use it. But if this macro is used in GNU gettext, and GNU
+ dnl gettext is already preinstalled in libintl, we update this
+ dnl libintl. (Cf. the install rule in intl/Makefile.in.)
+ if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+ && test "$PACKAGE" != gettext-runtime \
+ && test "$PACKAGE" != gettext-tools; }; then
+ gt_use_preinstalled_gnugettext=yes
+ else
+ dnl Reset the values set by searching for libintl.
+ LIBINTL=
+ LTLIBINTL=
+ INCINTL=
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+ dnl GNU gettext is not found in the C library.
+ dnl Fall back on included GNU gettext library.
+ nls_cv_use_gnu_gettext=yes
+ fi
+ fi
+
+ if test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions used to generate GNU NLS library.
+ BUILD_INCLUDED_LIBINTL=yes
+ USE_INCLUDED_LIBINTL=yes
+ LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+ LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+ LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+ fi
+
+ CATOBJEXT=
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Mark actions to use GNU gettext tools.
+ CATOBJEXT=.gmo
+ fi
+ ])
+
+ if test -n "$INTL_MACOSX_LIBS"; then
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ dnl Some extra flags are needed during linking.
+ LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+ LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+ fi
+ fi
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes" \
+ || test "$nls_cv_use_gnu_gettext" = "yes"; then
+ AC_DEFINE([ENABLE_NLS], [1],
+ [Define to 1 if translation of program messages to the user's native language
+ is requested.])
+ else
+ USE_NLS=no
+ fi
+ fi
+
+ AC_MSG_CHECKING([whether to use NLS])
+ AC_MSG_RESULT([$USE_NLS])
+ if test "$USE_NLS" = "yes"; then
+ AC_MSG_CHECKING([where the gettext function comes from])
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ gt_source="external libintl"
+ else
+ gt_source="libc"
+ fi
+ else
+ gt_source="included intl directory"
+ fi
+ AC_MSG_RESULT([$gt_source])
+ fi
+
+ if test "$USE_NLS" = "yes"; then
+
+ if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+ if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+ AC_MSG_CHECKING([how to link with libintl])
+ AC_MSG_RESULT([$LIBINTL])
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+ fi
+
+ dnl For backward compatibility. Some packages may be using this.
+ AC_DEFINE([HAVE_GETTEXT], [1],
+ [Define if the GNU gettext() function is already present or preinstalled.])
+ AC_DEFINE([HAVE_DCGETTEXT], [1],
+ [Define if the GNU dcgettext() function is already present or preinstalled.])
+ fi
+
+ dnl We need to process the po/ directory.
+ POSUB=po
+ fi
+
+ ifelse(gt_included_intl, yes, [
+ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+ dnl to 'yes' because some of the testsuite requires it.
+ if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+ BUILD_INCLUDED_LIBINTL=yes
+ fi
+
+ dnl Make all variables we use known to autoconf.
+ AC_SUBST([BUILD_INCLUDED_LIBINTL])
+ AC_SUBST([USE_INCLUDED_LIBINTL])
+ AC_SUBST([CATOBJEXT])
+
+ dnl For backward compatibility. Some configure.ins may be using this.
+ nls_cv_header_intl=
+ nls_cv_header_libgt=
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ DATADIRNAME=share
+ AC_SUBST([DATADIRNAME])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INSTOBJEXT=.mo
+ AC_SUBST([INSTOBJEXT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ GENCAT=gencat
+ AC_SUBST([GENCAT])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLOBJS=
+ if test "$USE_INCLUDED_LIBINTL" = yes; then
+ INTLOBJS="\$(GETTOBJS)"
+ fi
+ AC_SUBST([INTLOBJS])
+
+ dnl Enable libtool support if the surrounding package wishes it.
+ INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+ AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+ ])
+
+ dnl For backward compatibility. Some Makefiles may be using this.
+ INTLLIBS="$LIBINTL"
+ AC_SUBST([INTLLIBS])
+
+ dnl Make all documented variables known to autoconf.
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_SUBST([POSUB])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+ m4_divert_text([DEFAULTS], [gt_needs=])
+ m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/gettimeofday.m4 b/m4/gettimeofday.m4
new file mode 100644
index 0000000..5051d61
--- /dev/null
+++ b/m4/gettimeofday.m4
@@ -0,0 +1,69 @@
+# serial 29
+
+# Copyright (C) 2001-2003, 2005, 2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering.
+
+AC_DEFUN([gl_FUNC_GETTIMEOFDAY],
+[
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_SYS_TIME_H])
+ AC_CHECK_FUNCS_ONCE([gettimeofday])
+
+ gl_gettimeofday_timezone=void
+ if test $ac_cv_func_gettimeofday != yes; then
+ HAVE_GETTIMEOFDAY=0
+ else
+ AC_CACHE_CHECK([for gettimeofday with POSIX signature],
+ [gl_cv_func_gettimeofday_posix_signature],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/time.h>
+ struct timeval c;
+ int gettimeofday (struct timeval *restrict, void *restrict);
+ ]],
+ [[/* glibc uses struct timezone * rather than the POSIX void *
+ if _GNU_SOURCE is defined. However, since the only portable
+ use of gettimeofday uses NULL as the second parameter, and
+ since the glibc definition is actually more typesafe, it is
+ not worth wrapping this to get a compliant signature. */
+ int (*f) (struct timeval *restrict, void *restrict)
+ = gettimeofday;
+ int x = f (&c, 0);
+ return !(x | c.tv_sec | c.tv_usec);
+ ]])],
+ [gl_cv_func_gettimeofday_posix_signature=yes],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/time.h>
+int gettimeofday (struct timeval *restrict, struct timezone *restrict);
+ ]])],
+ [gl_cv_func_gettimeofday_posix_signature=almost],
+ [gl_cv_func_gettimeofday_posix_signature=no])])])
+ if test $gl_cv_func_gettimeofday_posix_signature = almost; then
+ gl_gettimeofday_timezone='struct timezone'
+ elif test $gl_cv_func_gettimeofday_posix_signature != yes; then
+ REPLACE_GETTIMEOFDAY=1
+ fi
+ dnl If we override 'struct timeval', we also have to override gettimeofday.
+ if test $REPLACE_STRUCT_TIMEVAL = 1; then
+ REPLACE_GETTIMEOFDAY=1
+ fi
+ dnl On mingw, the original gettimeofday has only a precision of 15.6
+ dnl milliseconds. So override it.
+ case "$host_os" in
+ mingw*) REPLACE_GETTIMEOFDAY=1 ;;
+ esac
+ fi
+ AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone],
+ [Define this to 'void' or 'struct timezone' to match the system's
+ declaration of the second argument to gettimeofday.])
+])
+
+# Prerequisites of lib/gettimeofday.c.
+AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:])
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
new file mode 100644
index 0000000..c84a2af
--- /dev/null
+++ b/m4/gnulib-common.m4
@@ -0,0 +1,1398 @@
+# gnulib-common.m4 serial 82
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.62])
+
+# gl_COMMON
+# is expanded unconditionally through gnulib-tool magic.
+AC_DEFUN([gl_COMMON], [
+ dnl Use AC_REQUIRE here, so that the code is expanded once only.
+ AC_REQUIRE([gl_00GNULIB])
+ AC_REQUIRE([gl_COMMON_BODY])
+ AC_REQUIRE([gl_ZZGNULIB])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+ AH_VERBATIM([_GL_GNUC_PREREQ],
+[/* True if the compiler says it groks GNU C version MAJOR.MINOR. */
+#if defined __GNUC__ && defined __GNUC_MINOR__
+# define _GL_GNUC_PREREQ(major, minor) \
+ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__))
+#else
+# define _GL_GNUC_PREREQ(major, minor) 0
+#endif
+])
+ AH_VERBATIM([_Noreturn],
+[/* The _Noreturn keyword of C11. */
+#ifndef _Noreturn
+# if (defined __cplusplus \
+ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \
+ || (defined _MSC_VER && 1900 <= _MSC_VER)) \
+ && 0)
+ /* [[noreturn]] is not practically usable, because with it the syntax
+ extern _Noreturn void func (...);
+ would not be valid; such a declaration would only be valid with 'extern'
+ and '_Noreturn' swapped, or without the 'extern' keyword. However, some
+ AIX system header files and several gnulib header files use precisely
+ this syntax with 'extern'. */
+# define _Noreturn [[noreturn]]
+# elif (defined __clang__ && __clang_major__ < 16 \
+ && defined _GL_WORK_AROUND_LLVM_BUG_59792)
+ /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around
+ that rare LLVM bug, though you may get many false-alarm warnings. */
+# define _Noreturn
+# elif ((!defined __cplusplus || defined __clang__) \
+ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \
+ || (!defined __STRICT_ANSI__ \
+ && (_GL_GNUC_PREREQ (4, 7) \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 3 < __clang_major__ + (5 <= __clang_minor__))))))
+ /* _Noreturn works as-is. */
+# elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C
+# define _Noreturn __attribute__ ((__noreturn__))
+# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0)
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn
+# endif
+#endif
+])
+ AH_VERBATIM([isoc99_inline],
+[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+ the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+ earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+ __APPLE__ && __MACH__ test for Mac OS X.
+ __APPLE_CC__ tests for the Apple compiler and its version.
+ __STDC_VERSION__ tests for the C99 mode. */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif])
+ AH_VERBATIM([attribute],
+[/* Attributes. */
+#if (defined __has_attribute \
+ && (!defined __clang_minor__ \
+ || (defined __apple_build_version__ \
+ ? 6000000 <= __apple_build_version__ \
+ : 5 <= __clang_major__)))
+# define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__)
+#else
+# define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr
+# define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2)
+# define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95)
+# define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1)
+# define _GL_ATTR_diagnose_if 0
+# define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3)
+# define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1)
+# define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0)
+# define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6)
+# define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0)
+# ifdef _ICC
+# define _GL_ATTR_may_alias 0
+# else
+# define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3)
+# endif
+# define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1)
+# define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3)
+# define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0)
+# define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3)
+# define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96)
+# define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9)
+# define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0)
+# define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7)
+# define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4)
+#endif
+
+/* Disable GCC -Wpedantic if using __has_c_attribute and this is not C23+. */
+#if (defined __has_c_attribute && _GL_GNUC_PREREQ (4, 6) \
+ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)
+# pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+
+]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's alignas instead.
+[
+/* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function
+ is the size of the returned memory block.
+ _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied
+ by the Nth argument of the function is the size of the returned memory block.
+ */
+/* Applies to: function, pointer to function, function types. */
+#ifndef _GL_ATTRIBUTE_ALLOC_SIZE
+# if _GL_HAS_ATTRIBUTE (alloc_size)
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args))
+# else
+# define _GL_ATTRIBUTE_ALLOC_SIZE(args)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the
+ function and report an error if it cannot do so. */
+/* Applies to: function. */
+#ifndef _GL_ATTRIBUTE_ALWAYS_INLINE
+# if _GL_HAS_ATTRIBUTE (always_inline)
+# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
+# else
+# define _GL_ATTRIBUTE_ALWAYS_INLINE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show
+ in stack traces when debugging. The compiler should omit the function from
+ stack traces. */
+/* Applies to: function. */
+#ifndef _GL_ATTRIBUTE_ARTIFICIAL
+# if _GL_HAS_ATTRIBUTE (artificial)
+# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
+# else
+# define _GL_ATTRIBUTE_ARTIFICIAL
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */
+/* Applies to: functions. */
+/* Avoid __attribute__ ((cold)) on MinGW; see thread starting at
+ <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>.
+ Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */
+#ifndef _GL_ATTRIBUTE_COLD
+# if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__
+# ifndef __SUNPRO_C
+# define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+# define _GL_ATTRIBUTE_COLD __attribute__ ((cold))
+# endif
+# else
+# define _GL_ATTRIBUTE_COLD
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate
+ calls to the function with the same arguments.
+ This attribute is safe for a function that neither depends on nor affects
+ observable state, and always returns exactly once - e.g., does not loop
+ forever, and does not call longjmp.
+ (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_CONST
+# if _GL_HAS_ATTRIBUTE (const)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+# define _GL_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
+ that can be freed by passing them as the Ith argument to the
+ function F.
+ _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that
+ can be freed via 'free'; it can be used only after declaring 'free'. */
+/* Applies to: functions. Cannot be used on inline functions. */
+#ifndef _GL_ATTRIBUTE_DEALLOC
+# if _GL_GNUC_PREREQ (11, 0)
+# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i)))
+# else
+# define _GL_ATTRIBUTE_DEALLOC(f, i)
+# endif
+#endif
+/* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue
+ to use this earlier definition, since <stdlib.h> may not have been included
+ yet. */
+#ifndef _GL_ATTRIBUTE_DEALLOC_FREE
+# if defined __cplusplus && defined __GNUC__ && !defined __clang__
+/* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1)
+# else
+# define _GL_ATTRIBUTE_DEALLOC_FREE \
+ _GL_ATTRIBUTE_DEALLOC (free, 1)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated.
+ The compiler may warn if the entity is used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: namespace, class, template specialization. */
+#ifndef _GL_ATTRIBUTE_DEPRECATED
+# ifdef __has_c_attribute
+# if __has_c_attribute (__deprecated__)
+# define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated)
+# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
+# endif
+# ifndef _GL_ATTRIBUTE_DEPRECATED
+# define _GL_ATTRIBUTE_DEPRECATED
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and
+ the function call is not optimized away.
+ _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and
+ the function call is not optimized away. */
+/* Applies to: functions. */
+#if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING)
+# if _GL_HAS_ATTRIBUTE (error)
+# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
+# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
+# elif _GL_HAS_ATTRIBUTE (diagnose_if)
+# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error")))
+# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning")))
+# else
+# define _GL_ATTRIBUTE_ERROR(msg)
+# define _GL_ATTRIBUTE_WARNING(msg)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain
+ visible to debuggers etc., even with '-fwhole-program'. */
+/* Applies to: functions, variables. */
+#ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
+# if _GL_HAS_ATTRIBUTE (externally_visible)
+# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible))
+# else
+# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if
+ the control flow falls through to the immediately following 'case' or
+ 'default' label. The compiler should not warn in this case. */
+/* Applies to: Empty statement (;), inside a 'switch' statement. */
+/* Always expands to something. */
+#ifndef _GL_ATTRIBUTE_FALLTHROUGH
+# ifdef __has_c_attribute
+# if __has_c_attribute (__fallthrough__)
+# define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough)
+# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+# ifndef _GL_ATTRIBUTE_FALLTHROUGH
+# define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK))
+ declares that the STRING-INDEXth function argument is a format string of
+ style ARCHETYPE, which is one of:
+ printf, gnu_printf
+ scanf, gnu_scanf,
+ strftime, gnu_strftime,
+ strfmon,
+ or the same thing prefixed and suffixed with '__'.
+ If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK
+ are suitable for the format string. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_FORMAT
+# if _GL_HAS_ATTRIBUTE (format)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+# else
+# define _GL_ATTRIBUTE_FORMAT(spec)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other
+ compilation unit, it executes code from that unit only by return or by
+ exception handling. This declaration lets the compiler optimize that unit
+ more aggressively. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_LEAF
+# if _GL_HAS_ATTRIBUTE (leaf)
+# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
+# else
+# define _GL_ATTRIBUTE_LEAF
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly
+ allocated memory. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_MALLOC
+# if _GL_HAS_ATTRIBUTE (malloc)
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+# define _GL_ATTRIBUTE_MALLOC
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the
+ same storage as pointers to other types. Thus this declaration disables
+ strict aliasing optimization. */
+/* Applies to: types. */
+/* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */
+#ifndef _GL_ATTRIBUTE_MAY_ALIAS
+# if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C
+# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
+# else
+# define _GL_ATTRIBUTE_MAY_ALIAS
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if
+ the entity is not used. The compiler should not warn if the entity is not
+ used. */
+/* Applies to:
+ - function, variable,
+ - struct, union, struct/union member,
+ - enumeration, enumeration item,
+ - typedef,
+ in C++ also: class. */
+/* In C++ and C23, this is spelled [[__maybe_unused__]].
+ GCC's syntax is __attribute__ ((__unused__)).
+ clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode,
+ __has_c_attribute (__maybe_unused__) yields true but the use of
+ [[__maybe_unused__]] nevertheless produces a warning. */
+#ifndef _GL_ATTRIBUTE_MAYBE_UNUSED
+# if defined __clang__ && defined __cplusplus
+# if !defined __apple_build_version__ && __clang_major__ >= 10
+# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
+# endif
+# elif defined __has_c_attribute
+# if __has_c_attribute (__maybe_unused__)
+# define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]]
+# endif
+# endif
+# ifndef _GL_ATTRIBUTE_MAYBE_UNUSED
+# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
+# endif
+#endif
+/* Alternative spelling of this macro, for convenience and for
+ compatibility with glibc/include/libc-symbols.h. */
+#define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED
+/* Earlier spellings of this macro. */
+#define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED
+
+/* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not
+ discard the return value. The compiler may warn if the caller does not use
+ the return value, unless the caller uses something like ignore_value. */
+/* Applies to: function, enumeration, class. */
+#ifndef _GL_ATTRIBUTE_NODISCARD
+# if defined __clang__ && defined __cplusplus
+ /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces
+ a warning.
+ The 1000 below means a yet unknown threshold. When clang++ version X
+ starts supporting [[__nodiscard__]] without warning about it, you can
+ replace the 1000 with X. */
+# if __clang_major__ >= 1000
+# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
+# endif
+# elif defined __has_c_attribute
+# if __has_c_attribute (__nodiscard__)
+# define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]]
+# endif
+# endif
+# if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result)
+# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
+# endif
+# ifndef _GL_ATTRIBUTE_NODISCARD
+# define _GL_ATTRIBUTE_NODISCARD
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the
+ function. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NOINLINE
+# if _GL_HAS_ATTRIBUTE (noinline)
+# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
+# else
+# define _GL_ATTRIBUTE_NOINLINE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,...
+ must not be NULL.
+ _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be
+ null. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NONNULL
+# if _GL_HAS_ATTRIBUTE (nonnull)
+# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
+# else
+# define _GL_ATTRIBUTE_NONNULL(args)
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is
+ not meant to be NUL-terminated. */
+/* Applies to: struct/union members and variables that are arrays of element
+ type '[[un]signed] char'. */
+#ifndef _GL_ATTRIBUTE_NONSTRING
+# if _GL_HAS_ATTRIBUTE (nonstring)
+# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
+# else
+# define _GL_ATTRIBUTE_NONSTRING
+# endif
+#endif
+
+/* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */
+
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
+# define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+# else
+# define _GL_ATTRIBUTE_NOTHROW
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_PACKED declares:
+ For struct members: The member has the smallest possible alignment.
+ For struct, union, class: All members have the smallest possible alignment,
+ minimizing the memory required. */
+/* Applies to: struct members, struct, union,
+ in C++ also: class. */
+#ifndef _GL_ATTRIBUTE_PACKED
+# if _GL_HAS_ATTRIBUTE (packed)
+# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
+# else
+# define _GL_ATTRIBUTE_PACKED
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate
+ calls to the function with the same arguments if observable state is not
+ changed between calls.
+ This attribute is safe for a function that does not affect
+ observable state, and always returns exactly once.
+ (This attribute is looser than _GL_ATTRIBUTE_CONST.) */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_PURE
+# if _GL_HAS_ATTRIBUTE (pure)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+# define _GL_ATTRIBUTE_PURE
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is
+ a non-NULL pointer. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_RETURNS_NONNULL
+# if _GL_HAS_ATTRIBUTE (returns_nonnull)
+# define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
+# else
+# define _GL_ATTRIBUTE_RETURNS_NONNULL
+# endif
+#endif
+
+/* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a
+ trailing NULL argument.
+ _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99).
+ _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */
+/* Applies to: functions. */
+#ifndef _GL_ATTRIBUTE_SENTINEL
+# if _GL_HAS_ATTRIBUTE (sentinel)
+# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
+# else
+# define _GL_ATTRIBUTE_SENTINEL(pos)
+# endif
+#endif
+
+/* A helper macro. Don't use it directly. */
+#ifndef _GL_ATTRIBUTE_UNUSED
+# if _GL_HAS_ATTRIBUTE (unused)
+# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+# else
+# define _GL_ATTRIBUTE_UNUSED
+# endif
+#endif
+
+]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead.
+[
+/* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the
+ immediately preceding label is not used. The compiler should not warn
+ if the label is not used. */
+/* Applies to: label (both in C and C++). */
+/* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;'
+ syntax. But clang does. */
+#ifndef _GL_UNUSED_LABEL
+# if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__
+# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
+# else
+# define _GL_UNUSED_LABEL
+# endif
+#endif
+])
+ AH_VERBATIM([async_safe],
+[/* The _GL_ASYNC_SAFE marker should be attached to functions that are
+ signal handlers (for signals other than SIGABRT, SIGPIPE) or can be
+ invoked from such signal handlers. Such functions have some restrictions:
+ * All functions that it calls should be marked _GL_ASYNC_SAFE as well,
+ or should be listed as async-signal-safe in POSIX
+ <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04>
+ section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in
+ particular, are NOT async-signal-safe.
+ * All memory locations (variables and struct fields) that these functions
+ access must be marked 'volatile'. This holds for both read and write
+ accesses. Otherwise the compiler might optimize away stores to and
+ reads from such locations that occur in the program, depending on its
+ data flow analysis. For example, when the program contains a loop
+ that is intended to inspect a variable set from within a signal handler
+ while (!signal_occurred)
+ ;
+ the compiler is allowed to transform this into an endless loop if the
+ variable 'signal_occurred' is not declared 'volatile'.
+ Additionally, recall that:
+ * A signal handler should not modify errno (except if it is a handler
+ for a fatal signal and ends by raising the same signal again, thus
+ provoking the termination of the process). If it invokes a function
+ that may clobber errno, it needs to save and restore the value of
+ errno. */
+#define _GL_ASYNC_SAFE
+])
+ AH_VERBATIM([micro_optimizations],
+[/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where
+ n1 and n2 are expressions without side effects, that evaluate to real
+ numbers (excluding NaN).
+ It returns
+ 1 if n1 > n2
+ 0 if n1 == n2
+ -1 if n1 < n2
+ The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional
+ jump with nearly all GCC versions up to GCC 10.
+ This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many
+ GCC versions up to GCC 9.
+ The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9
+ avoids conditional jumps in all GCC versions >= 3.4. */
+#define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
+])
+ dnl Hint which direction to take regarding cross-compilation guesses:
+ dnl When a user installs a program on a platform they are not intimately
+ dnl familiar with, --enable-cross-guesses=conservative is the appropriate
+ dnl choice. It implements the "If we don't know, assume the worst" principle.
+ dnl However, when an operating system developer (on a platform which is not
+ dnl yet known to gnulib) builds packages for their platform, they want to
+ dnl expose, not hide, possible platform bugs; in this case,
+ dnl --enable-cross-guesses=risky is the appropriate choice.
+ dnl Sets the variables
+ dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad),
+ dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad).
+ AC_ARG_ENABLE([cross-guesses],
+ [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}],
+ [specify policy for cross-compilation guesses])],
+ [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then
+ AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses])
+ enableval=conservative
+ fi
+ gl_cross_guesses="$enableval"],
+ [gl_cross_guesses=conservative])
+ if test $gl_cross_guesses = risky; then
+ gl_cross_guess_normal="guessing yes"
+ gl_cross_guess_inverted="guessing no"
+ else
+ gl_cross_guess_normal="guessing no"
+ gl_cross_guess_inverted="guessing yes"
+ fi
+ dnl Preparation for running test programs:
+ dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+ dnl to /dev/tty, so they can be redirected to log files. Such diagnostics
+ dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
+ LIBC_FATAL_STDERR_=1
+ export LIBC_FATAL_STDERR_
+])
+
+# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename])
+# gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue])
+# initializes the shell variable that indicates the presence of the given module
+# as a C preprocessor expression.
+AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE],
+[
+ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2])
+ AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1])
+])
+
+# gl_MODULE_INDICATOR_CONDITION
+# expands to a C preprocessor expression that evaluates to 1 or 0, depending
+# whether a gnulib module that has been requested shall be considered present
+# or not.
+m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+# sets the shell variable that indicates the presence of the given module to
+# a C preprocessor expression that will evaluate to 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+[
+ gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
+ [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]],
+ [abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+ [gl_MODULE_INDICATOR_CONDITION])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
+# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
+# The shell variable's value is a C preprocessor expression that evaluates
+# to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
+[
+ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
+ [
+ dnl Simplify the expression VALUE || 1 to 1.
+ $1=1
+ ],
+ [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
+ [gl_MODULE_INDICATOR_CONDITION])])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
+# modifies the shell variable to include the given condition. The shell
+# variable's value is a C preprocessor expression that evaluates to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
+[
+ dnl Simplify the expression 1 || CONDITION to 1.
+ if test "$[]$1" != 1; then
+ dnl Simplify the expression 0 || CONDITION to CONDITION.
+ if test "$[]$1" = 0; then
+ $1=$2
+ else
+ $1="($[]$1 || $2)"
+ fi
+ fi
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module
+# in a location where it can be used.
+# | Value | Value |
+# | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules: | 1 | 1 |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: | 0 | 1 |
+# --------------------------------------------+---------+-----------+
+# Module not present at all: | 0 | 0 |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
+ [abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
+ [gl_MODULE_INDICATOR_CONDITION],
+ [Define to a C preprocessor expression that evaluates to 1 or 0,
+ depending whether the gnulib module $1 shall be considered present.])
+])
+
+# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
+# defines a C macro indicating the presence of the given module
+# in lib or tests. This is useful to determine whether the module
+# should be tested.
+# | Value | Value |
+# | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules: | 1 | 1 |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: | 1 | 1 |
+# --------------------------------------------+---------+-----------+
+# Module not present at all: | 0 | 0 |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
+[
+ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
+ [abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+ [Define to 1 when the gnulib module $1 should be tested.])
+])
+
+# gl_ASSERT_NO_GNULIB_POSIXCHECK
+# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
+# and thereby enables an optimization of configure and config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
+[
+ dnl Override gl_WARN_ON_USE_PREPARE.
+ dnl But hide this definition from 'aclocal'.
+ AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
+])
+
+# gl_ASSERT_NO_GNULIB_TESTS
+# asserts that there will be no gnulib tests in the scope of the configure.ac
+# and thereby enables an optimization of config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
+[
+ dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
+])
+
+# Test whether <features.h> exists.
+# Set HAVE_FEATURES_H.
+AC_DEFUN([gl_FEATURES_H],
+[
+ AC_CHECK_HEADERS_ONCE([features.h])
+ if test $ac_cv_header_features_h = yes; then
+ HAVE_FEATURES_H=1
+ else
+ HAVE_FEATURES_H=0
+ fi
+ AC_SUBST([HAVE_FEATURES_H])
+])
+
+# gl_PROG_CC_C99
+# Modifies the value of the shell variable CC in an attempt to make $CC
+# understand ISO C99 source code.
+AC_DEFUN([gl_PROG_CC_C99],
+[
+ dnl Just use AC_PROG_CC_C99.
+ dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted
+ dnl value of CC will contain the C99 enabling options twice. But this is only
+ dnl a cosmetic problem.
+ dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99;
+ dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete."
+ m4_version_prereq([2.70],
+ [AC_REQUIRE([AC_PROG_CC])],
+ [AC_REQUIRE([AC_PROG_CC_C99])])
+])
+
+# gl_PROG_AR_RANLIB
+# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
+# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
+# the values.
+AC_DEFUN([gl_PROG_AR_RANLIB],
+[
+ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
+ dnl as "cc", and GCC as "gcc". They have different object file formats and
+ dnl library formats. In particular, the GNU binutils programs ar and ranlib
+ dnl produce libraries that work only with gcc, not with cc.
+ AC_REQUIRE([AC_PROG_CC])
+ dnl The '][' hides this use from 'aclocal'.
+ AC_BEFORE([$0], [A][M_PROG_AR])
+ AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
+ [
+ AC_EGREP_CPP([Amsterdam],
+ [
+#ifdef __ACK__
+Amsterdam
+#endif
+ ],
+ [gl_cv_c_amsterdam_compiler=yes],
+ [gl_cv_c_amsterdam_compiler=no])
+ ])
+
+ dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not
+ dnl building with __ACK__.
+ if test $gl_cv_c_amsterdam_compiler = yes; then
+ if test -z "$AR"; then
+ AR='cc -c.a'
+ fi
+ if test -z "$ARFLAGS"; then
+ ARFLAGS='-o'
+ fi
+ else
+ dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST
+ dnl ARFLAGS variable (it is filed into Makefile.in directly by automake
+ dnl script on-demand, if not specified by ./configure of course).
+ dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above
+ dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block
+ dnl because AM_PROG_AR is written so it could re-set AR variable even for
+ dnl __ACK__. It may seem like its easier to avoid calling the macro here,
+ dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
+ dnl default value and automake should usually know them).
+ dnl
+ dnl The '][' hides this use from 'aclocal'.
+ m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:])
+ fi
+
+ dnl In case the code above has not helped with setting AR/ARFLAGS, use
+ dnl Automake-documented default values for AR and ARFLAGS, but prefer
+ dnl ${host}-ar over ar (useful for cross-compiling).
+ AC_CHECK_TOOL([AR], [ar], [ar])
+ if test -z "$ARFLAGS"; then
+ ARFLAGS='cr'
+ fi
+
+ AC_SUBST([AR])
+ AC_SUBST([ARFLAGS])
+ if test -z "$RANLIB"; then
+ if test $gl_cv_c_amsterdam_compiler = yes; then
+ RANLIB=':'
+ else
+ dnl Use the ranlib program if it is available.
+ AC_PROG_RANLIB
+ fi
+ fi
+ AC_SUBST([RANLIB])
+])
+
+# AC_C_RESTRICT
+# This definition is copied from post-2.70 Autoconf and overrides the
+# AC_C_RESTRICT macro from autoconf 2.60..2.70.
+m4_version_prereq([2.70.1], [], [
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
+ [ac_cv_c_restrict=no
+ # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see:
+ # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html
+ # Put 'restrict' last, because C++ lacks it.
+ for ac_kw in __restrict__ __restrict _Restrict restrict; do
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[typedef int *int_ptr;
+ int foo (int_ptr $ac_kw ip) { return ip[0]; }
+ int bar (int [$ac_kw]); /* Catch GCC bug 14050. */
+ int bar (int ip[$ac_kw]) { return ip[0]; }
+ ]],
+ [[int s[1];
+ int *$ac_kw t = s;
+ t[0] = 0;
+ return foo (t) + bar (t);
+ ]])],
+ [ac_cv_c_restrict=$ac_kw])
+ test "$ac_cv_c_restrict" != no && break
+ done
+ ])
+ AH_VERBATIM([restrict],
+[/* Define to the equivalent of the C99 'restrict' keyword, or to
+ nothing if this is not supported. Do not define if restrict is
+ supported only directly. */
+#undef restrict
+/* Work around a bug in older versions of Sun C++, which did not
+ #define __restrict__ or support _Restrict or __restrict__
+ even though the corresponding Sun C compiler ended up with
+ "#define restrict _Restrict" or "#define restrict __restrict__"
+ in the previous line. This workaround can be removed once
+ we assume Oracle Developer Studio 12.5 (2016) or later. */
+#if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__
+# define _Restrict
+# define __restrict__
+#endif])
+ case $ac_cv_c_restrict in
+ restrict) ;;
+ no) AC_DEFINE([restrict], []) ;;
+ *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])# AC_C_RESTRICT
+])
+
+# gl_BIGENDIAN
+# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
+# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
+# macros invoke AC_C_BIGENDIAN with arguments.
+AC_DEFUN([gl_BIGENDIAN],
+[
+ AC_C_BIGENDIAN
+])
+
+# A temporary file descriptor.
+# Must be less than 10, because dash 0.5.8 does not support redirections
+# with multi-digit file descriptors.
+m4_define([GL_TMP_FD], 9)
+
+# gl_SILENT(command)
+# executes command, but without the normal configure output.
+# This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.)
+# inside another AC_CACHE_CHECK.
+AC_DEFUN([gl_SILENT],
+[
+ exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null
+ $1
+ exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&-
+])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+ gl_SILENT([
+ AC_CACHE_VAL([$1], [$2])
+ ])
+])
+
+# gl_CONDITIONAL(conditional, condition)
+# is like AM_CONDITIONAL(conditional, condition), except that it does not
+# produce an error
+# configure: error: conditional "..." was never defined.
+# Usually this means the macro was only invoked conditionally.
+# when only invoked conditionally. Instead, in that case, both the _TRUE
+# and the _FALSE case are disabled.
+AC_DEFUN([gl_CONDITIONAL],
+[
+ pushdef([AC_CONFIG_COMMANDS_PRE], [:])dnl
+ AM_CONDITIONAL([$1], [$2])
+ popdef([AC_CONFIG_COMMANDS_PRE])dnl
+ if test -z "${[$1]_TRUE}" && test -z "${[$1]_FALSE}"; then
+ [$1]_TRUE='#'
+ [$1]_FALSE='#'
+ fi
+])
+
+# gl_CC_ALLOW_WARNINGS
+# sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option
+# that reverts a preceding '-Werror' option, if available.
+# This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang
+# and empty otherwise.
+AC_DEFUN([gl_CC_ALLOW_WARNINGS],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CACHE_CHECK([for C compiler option to allow warnings],
+ [gl_cv_cc_wallow],
+ [rm -f conftest*
+ echo 'int dummy;' > conftest.c
+ AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null
+ AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null
+ dnl Test the number of error output lines, because AIX xlc accepts the
+ dnl option '-Wno-error', just to produce a warning
+ dnl "Option -Wno-error was incorrectly specified. The option will be ignored."
+ dnl afterwards.
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cc_wallow='-Wno-error'
+ else
+ gl_cv_cc_wallow=none
+ fi
+ rm -f conftest*
+ ])
+ case "$gl_cv_cc_wallow" in
+ none) GL_CFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;;
+ esac
+ AC_SUBST([GL_CFLAG_ALLOW_WARNINGS])
+])
+
+# gl_CXX_ALLOW_WARNINGS
+# sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option
+# that reverts a preceding '-Werror' option, if available.
+AC_DEFUN([gl_CXX_ALLOW_WARNINGS],
+[
+ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX.
+ if test -n "$CXX" && test "$CXX" != no; then
+ AC_CACHE_CHECK([for C++ compiler option to allow warnings],
+ [gl_cv_cxx_wallow],
+ [rm -f conftest*
+ echo 'int dummy;' > conftest.cc
+ AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null
+ AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null
+ dnl Test the number of error output lines, because AIX xlC accepts the
+ dnl option '-Wno-error', just to produce a warning
+ dnl "Option -Wno-error was incorrectly specified. The option will be ignored."
+ dnl afterwards.
+ if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then
+ gl_cv_cxx_wallow='-Wno-error'
+ else
+ gl_cv_cxx_wallow=none
+ fi
+ rm -f conftest*
+ ])
+ case "$gl_cv_cxx_wallow" in
+ none) GL_CXXFLAG_ALLOW_WARNINGS='' ;;
+ *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;;
+ esac
+ else
+ GL_CXXFLAG_ALLOW_WARNINGS=''
+ fi
+ AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS])
+])
+
+# gl_CC_GNULIB_WARNINGS
+# sets and substitutes a variable GL_CFLAG_GNULIB_WARNINGS, to a $(CC) option
+# set that enables or disables warnings as suitable for the Gnulib coding style.
+AC_DEFUN([gl_CC_GNULIB_WARNINGS],
+[
+ AC_REQUIRE([gl_CC_ALLOW_WARNINGS])
+ dnl Assume that the compiler supports -Wno-* options only if it also supports
+ dnl -Wno-error.
+ GL_CFLAG_GNULIB_WARNINGS=''
+ if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then
+ dnl Enable these warning options:
+ dnl
+ dnl GCC clang
+ dnl -Wno-cast-qual >= 3 >= 3.9
+ dnl -Wno-conversion >= 3 >= 3.9
+ dnl -Wno-float-conversion >= 4.9 >= 3.9
+ dnl -Wno-float-equal >= 3 >= 3.9
+ dnl -Wimplicit-fallthrough >= 7 >= 3.9
+ dnl -Wno-pedantic >= 4.8 >= 3.9
+ dnl -Wno-sign-compare >= 3 >= 3.9
+ dnl -Wno-sign-conversion >= 4.3 >= 3.9
+ dnl -Wno-type-limits >= 4.3 >= 3.9
+ dnl -Wno-undef >= 3 >= 3.9
+ dnl -Wno-unsuffixed-float-constants >= 4.5
+ dnl -Wno-unused-function >= 3 >= 3.9
+ dnl -Wno-unused-parameter >= 3 >= 3.9
+ dnl
+ cat > conftest.c <<\EOF
+ #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-cast-qual
+ -Wno-conversion
+ -Wno-float-equal
+ -Wno-sign-compare
+ -Wno-undef
+ -Wno-unused-function
+ -Wno-unused-parameter
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-float-conversion
+ #endif
+ #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wimplicit-fallthrough
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-pedantic
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3)
+ -Wno-sign-conversion
+ -Wno-type-limits
+ #endif
+ #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4
+ -Wno-unsuffixed-float-constants
+ #endif
+EOF
+ gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out"
+ if AC_TRY_EVAL([gl_command]); then
+ gl_options=`grep -v '#' conftest.out`
+ for word in $gl_options; do
+ GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word"
+ done
+ fi
+ rm -f conftest.c conftest.out
+ fi
+ AC_SUBST([GL_CFLAG_GNULIB_WARNINGS])
+])
+
+dnl gl_CONDITIONAL_HEADER([foo.h])
+dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as input
+dnl and produces
+dnl - an AC_SUBSTed variable FOO_H that is either a file name or empty, based
+dnl on whether GL_GENERATE_FOO_H is true or false,
+dnl - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value of
+dnl the shell variable GL_GENERATE_FOO_H.
+AC_DEFUN([gl_CONDITIONAL_HEADER],
+[
+ m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1)))
+ m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+ m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1)))
+ case "$gl_generate_var" in
+ false) gl_header_name='' ;;
+ true)
+ dnl It is OK to use a .h file in lib/ from within tests/, but not vice
+ dnl versa.
+ if test -z "$gl_header_name"; then
+ gl_header_name="${gl_source_base_prefix}$1"
+ fi
+ ;;
+ *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;;
+ esac
+ AC_SUBST(gl_header_name)
+ gl_CONDITIONAL(gl_generate_cond, [$gl_generate_var])
+ m4_popdef([gl_generate_cond])
+ m4_popdef([gl_generate_var])
+ m4_popdef([gl_header_name])
+])
+
+dnl Preparations for gl_CHECK_FUNCS_MACOS.
+AC_DEFUN([gl_PREPARE_CHECK_FUNCS_MACOS],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_COMPILER_CLANG])
+ AC_CACHE_CHECK([for compiler option needed when checking for future declarations],
+ [gl_cv_compiler_check_future_option],
+ [case "$host_os" in
+ dnl This is only needed on macOS.
+ darwin*)
+ if test $gl_cv_compiler_clang = yes; then
+ dnl Test whether the compiler supports the option
+ dnl '-Werror=unguarded-availability-new'.
+ save_ac_compile="$ac_compile"
+ ac_compile="$ac_compile -Werror=unguarded-availability-new"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
+ [gl_cv_compiler_check_future_option='-Werror=unguarded-availability-new'],
+ [gl_cv_compiler_check_future_option=none])
+ ac_compile="$save_ac_compile"
+ else
+ gl_cv_compiler_check_future_option=none
+ fi
+ ;;
+ *) gl_cv_compiler_check_future_option=none ;;
+ esac
+ ])
+])
+
+dnl Pieces of the expansion of
+dnl gl_CHECK_FUNCS_ANDROID
+dnl gl_CHECK_FUNCS_MACOS
+dnl gl_CHECK_FUNCS_ANDROID_MACOS
+
+AC_DEFUN([gl_CHECK_FUNCS_DEFAULT_CASE],
+[
+ *)
+ AC_CHECK_FUNC([$1])
+ [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1]
+ ;;
+])
+
+AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_ANDROID],
+[
+ linux*-android*)
+ AC_CHECK_DECL([$1], , , [$2])
+ if test $[ac_cv_have_decl_][$1] = yes; then
+ AC_CHECK_FUNC([[$1]])
+ if test $[ac_cv_func_][$1] = yes; then
+ [gl_cv_onwards_func_][$1]=yes
+ else
+ dnl The function is declared but does not exist. This should not
+ dnl happen normally. But anyway, we know that a future version
+ dnl of Android will have the function.
+ [gl_cv_onwards_func_][$1]='future OS version'
+ fi
+ else
+ [gl_cv_onwards_func_][$1]='future OS version'
+ fi
+ ;;
+])
+
+AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_MACOS],
+[
+ darwin*)
+ if test "x$gl_cv_compiler_check_future_option" != "xnone"; then
+ dnl Use a compile test, not a link test.
+ save_ac_compile="$ac_compile"
+ ac_compile="$ac_compile $gl_cv_compiler_check_future_option"
+ save_ac_compile_for_check_decl="$ac_compile_for_check_decl"
+ ac_compile_for_check_decl="$ac_compile_for_check_decl $gl_cv_compiler_check_future_option"
+ unset [ac_cv_have_decl_][$1]
+ AC_CHECK_DECL([$1], , , [$2])
+ ac_compile="$save_ac_compile"
+ ac_compile_for_check_decl="$save_ac_compile_for_check_decl"
+ [ac_cv_func_][$1]="$[ac_cv_have_decl_][$1]"
+ if test $[ac_cv_func_][$1] = yes; then
+ [gl_cv_onwards_func_][$1]=yes
+ else
+ unset [ac_cv_have_decl_][$1]
+ AC_CHECK_DECL([$1], , , [$2])
+ if test $[ac_cv_have_decl_][$1] = yes; then
+ [gl_cv_onwards_func_][$1]='future OS version'
+ else
+ [gl_cv_onwards_func_][$1]=no
+ fi
+ fi
+ else
+ AC_CHECK_FUNC([$1])
+ [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1]
+ fi
+ ;;
+])
+
+AC_DEFUN([gl_CHECK_FUNCS_SET_RESULTS],
+[
+ case "$[gl_cv_onwards_func_][$1]" in
+ future*) [ac_cv_func_][$1]=no ;;
+ *) [ac_cv_func_][$1]=$[gl_cv_onwards_func_][$1] ;;
+ esac
+ if test $[ac_cv_func_][$1] = yes; then
+ AC_DEFINE([HAVE_]m4_translit([[$1]],
+ [abcdefghijklmnopqrstuvwxyz],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ]),
+ [1], [Define to 1 if you have the `$1' function.])
+ fi
+])
+
+dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]])
+dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem
+dnl on Android.
+dnl
+dnl When code is compiled on Android, it is in the context of a certain
+dnl "Android API level", which indicates the minimum version of Android on
+dnl which the app can be installed. In other words, you don't compile for a
+dnl specific version of Android. You compile for all versions of Android,
+dnl onwards from the given API level.
+dnl Thus, the question "does the OS have the function func" has three possible
+dnl answers:
+dnl - yes, in all versions starting from the given API level,
+dnl - no, in no version,
+dnl - not in the given API level, but in a later version of Android.
+dnl
+dnl In detail, this works as follows:
+dnl If func was added to Android API level, say, 28, then the libc.so has the
+dnl symbol func always, whereas the header file <foo.h> declares func
+dnl conditionally:
+dnl #if __ANDROID_API__ >= 28
+dnl ... func (...) __INTRODUCED_IN(28);
+dnl #endif
+dnl Thus, when compiling with "clang -target armv7a-unknown-linux-android28",
+dnl the function func is declared and exists in libc.
+dnl Whereas when compiling with "clang -target armv7a-unknown-linux-android27",
+dnl the function func is not declared but exists in libc.
+dnl
+dnl This macro sets two variables:
+dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version"
+dnl - ac_cv_func_<func> to yes / no / no
+dnl The first variable allows to distinguish all three cases.
+dnl The second variable is set, so that an invocation
+dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]])
+dnl can be used as a drop-in replacement for
+dnl AC_CHECK_FUNCS([func]).
+AC_DEFUN([gl_CHECK_FUNCS_ANDROID],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([for [$1]],
+ [[gl_cv_onwards_func_][$1]],
+ [gl_SILENT([
+ case "$host_os" in
+ gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2])
+ gl_CHECK_FUNCS_DEFAULT_CASE([$1])
+ esac
+ ])
+ ])
+ gl_CHECK_FUNCS_SET_RESULTS([$1])
+])
+
+dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]])
+dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem
+dnl on macOS.
+dnl
+dnl When code is compiled on macOS, it is in the context of a certain minimum
+dnl macOS version, that can be set through the option '-mmacosx-version-min='.
+dnl In other words, you don't compile for a specific version of macOS. You
+dnl compile for all versions of macOS, onwards from the given version.
+dnl Thus, the question "does the OS have the function func" has three possible
+dnl answers:
+dnl - yes, in all versions starting from the given version,
+dnl - no, in no version,
+dnl - not in the given version, but in a later version of macOS.
+dnl
+dnl In detail, this works as follows:
+dnl If func was added to, say, macOS version 13, then the libc has the
+dnl symbol func always, whereas the header file <foo.h> declares func
+dnl conditionally with a special availability attribute:
+dnl ... func (...) __attribute__((availability(macos,introduced=13.0)));
+dnl Thus, when compiling with "clang mmacosx-version-min=13", there is no
+dnl warning about the use of func, and the resulting binary
+dnl - runs fine on macOS 13,
+dnl - aborts with a dyld "Symbol not found" message on macOS 12.
+dnl Whereas, when compiling with "clang mmacosx-version-min=12", there is a
+dnl warning: 'func' is only available on macOS 13.0 or newer
+dnl [-Wunguarded-availability-new],
+dnl and the resulting binary
+dnl - runs fine on macOS 13,
+dnl - crashes with a SIGSEGV (signal 11) on macOS 12.
+dnl
+dnl This macro sets two variables:
+dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version"
+dnl - ac_cv_func_<func> to yes / no / no
+dnl The first variable allows to distinguish all three cases.
+dnl The second variable is set, so that an invocation
+dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]])
+dnl can be used as a drop-in replacement for
+dnl AC_CHECK_FUNCS([func]).
+AC_DEFUN([gl_CHECK_FUNCS_MACOS],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS])
+ AC_CACHE_CHECK([for [$1]],
+ [[gl_cv_onwards_func_][$1]],
+ [gl_SILENT([
+ case "$host_os" in
+ gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2])
+ gl_CHECK_FUNCS_DEFAULT_CASE([$1])
+ esac
+ ])
+ ])
+ gl_CHECK_FUNCS_SET_RESULTS([$1])
+])
+
+dnl gl_CHECK_FUNCS_ANDROID_MACOS([func], [[#include <foo.h>]])
+dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem
+dnl on Android and on macOS.
+dnl It is the combination of gl_CHECK_FUNCS_ANDROID and gl_CHECK_FUNCS_MACOS.
+AC_DEFUN([gl_CHECK_FUNCS_ANDROID_MACOS],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS])
+ AC_CACHE_CHECK([for [$1]],
+ [[gl_cv_onwards_func_][$1]],
+ [gl_SILENT([
+ case "$host_os" in
+ gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2])
+ gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2])
+ gl_CHECK_FUNCS_DEFAULT_CASE([$1])
+ esac
+ ])
+ ])
+ gl_CHECK_FUNCS_SET_RESULTS([$1])
+])
+
+dnl Expands to some code for use in .c programs that, on native Windows, defines
+dnl the Microsoft deprecated alias function names to the underscore-prefixed
+dnl actual function names. With this macro, these function names are available
+dnl without linking with '-loldnames' and without generating warnings.
+dnl Usage: Use it after all system header files are included.
+dnl #include <...>
+dnl #include <...>
+dnl ]GL_MDA_DEFINES[
+dnl ...
+AC_DEFUN([GL_MDA_DEFINES],[
+AC_REQUIRE([_GL_MDA_DEFINES])
+[$gl_mda_defines]
+])
+AC_DEFUN([_GL_MDA_DEFINES],
+[gl_mda_defines='
+#if defined _WIN32 && !defined __CYGWIN__
+#define access _access
+#define chdir _chdir
+#define chmod _chmod
+#define close _close
+#define creat _creat
+#define dup _dup
+#define dup2 _dup2
+#define ecvt _ecvt
+#define execl _execl
+#define execle _execle
+#define execlp _execlp
+#define execv _execv
+#define execve _execve
+#define execvp _execvp
+#define execvpe _execvpe
+#define fcloseall _fcloseall
+#define fcvt _fcvt
+#define fdopen _fdopen
+#define fileno _fileno
+#define gcvt _gcvt
+#define getcwd _getcwd
+#define getpid _getpid
+#define getw _getw
+#define isatty _isatty
+#define j0 _j0
+#define j1 _j1
+#define jn _jn
+#define lfind _lfind
+#define lsearch _lsearch
+#define lseek _lseek
+#define memccpy _memccpy
+#define mkdir _mkdir
+#define mktemp _mktemp
+#define open _open
+#define putenv _putenv
+#define putw _putw
+#define read _read
+#define rmdir _rmdir
+#define strdup _strdup
+#define swab _swab
+#define tempnam _tempnam
+#define tzset _tzset
+#define umask _umask
+#define unlink _unlink
+#define utime _utime
+#define wcsdup _wcsdup
+#define write _write
+#define y0 _y0
+#define y1 _y1
+#define yn _yn
+#endif
+'
+])
diff --git a/m4/gnulib-comp.m4 b/m4/gnulib-comp.m4
new file mode 100644
index 0000000..2afa046
--- /dev/null
+++ b/m4/gnulib-comp.m4
@@ -0,0 +1,2097 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2023 Free Software Foundation, Inc.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this file. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects that use version control, this file can be treated like
+# other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([gl_EARLY],
+[
+ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+ m4_pattern_allow([^gl_ES$])dnl a valid locale name
+ m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+ m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+
+ # Pre-early section.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([gl_PROG_AR_RANLIB])
+
+ # Code from module absolute-header:
+ # Code from module accept:
+ # Code from module accept-tests:
+ # Code from module alignasof:
+ # Code from module alignasof-tests:
+ # Code from module alloca:
+ # Code from module alloca-opt:
+ # Code from module alloca-opt-tests:
+ # Code from module announce-gen:
+ # Code from module argmatch:
+ # Code from module argmatch-tests:
+ # Code from module arpa_inet:
+ # Code from module arpa_inet-tests:
+ # Code from module assert:
+ # Code from module assert-h:
+ # Code from module assert-h-tests:
+ # Code from module assure:
+ # Code from module attribute:
+ # Code from module basename-lgpl:
+ # Code from module binary-io:
+ # Code from module binary-io-tests:
+ # Code from module bind:
+ # Code from module bind-tests:
+ # Code from module btowc:
+ # Code from module btowc-tests:
+ # Code from module builtin-expect:
+ # Code from module c-ctype:
+ # Code from module c-ctype-tests:
+ # Code from module c-strcase:
+ # Code from module c-strcase-tests:
+ # Code from module c-strcaseeq:
+ # Code from module c-strcasestr:
+ # Code from module c-strcasestr-tests:
+ # Code from module c99:
+ # Code from module calloc-gnu:
+ # Code from module calloc-gnu-tests:
+ # Code from module calloc-posix:
+ # Code from module canonicalize-lgpl:
+ # Code from module canonicalize-lgpl-tests:
+ # Code from module clock-time:
+ # Code from module cloexec:
+ # Code from module cloexec-tests:
+ # Code from module close:
+ # Code from module close-stream:
+ # Code from module close-tests:
+ # Code from module closeout:
+ # Code from module config-h:
+ # Code from module configmake:
+ # Code from module connect:
+ # Code from module connect-tests:
+ # Code from module ctype:
+ # Code from module ctype-tests:
+ # Code from module dirname:
+ # Code from module dirname-lgpl:
+ # Code from module dirname-tests:
+ # Code from module do-release-commit-and-tag:
+ # Code from module double-slash-root:
+ # Code from module dup2:
+ # Code from module dup2-tests:
+ # Code from module eloop-threshold:
+ # Code from module environ:
+ # Code from module environ-tests:
+ # Code from module errno:
+ # Code from module errno-tests:
+ # Code from module error:
+ # Code from module error-h:
+ # Code from module error-tests:
+ # Code from module exitfail:
+ # Code from module extensions:
+ # Code from module extern-inline:
+ # Code from module fcntl:
+ # Code from module fcntl-h:
+ # Code from module fcntl-h-tests:
+ # Code from module fcntl-tests:
+ # Code from module fd-hook:
+ # Code from module fdl:
+ # Code from module fdopen:
+ # Code from module fdopen-tests:
+ # Code from module fgetc-tests:
+ # Code from module filename:
+ # Code from module flexmember:
+ # Code from module fpending:
+ # Code from module fpending-tests:
+ # Code from module fputc-tests:
+ # Code from module fread-tests:
+ # Code from module free-posix:
+ # Code from module free-posix-tests:
+ # Code from module fstat:
+ # Code from module fstat-tests:
+ # Code from module fsync:
+ # Code from module fsync-tests:
+ # Code from module ftruncate:
+ # Code from module ftruncate-tests:
+ # Code from module fwrite-tests:
+ # Code from module gen-header:
+ # Code from module gendocs:
+ # Code from module getcwd-lgpl:
+ # Code from module getcwd-lgpl-tests:
+ # Code from module getdtablesize:
+ # Code from module getdtablesize-tests:
+ # Code from module getopt-gnu:
+ # Code from module getopt-gnu-tests:
+ # Code from module getopt-posix:
+ # Code from module getopt-posix-tests:
+ # Code from module getpagesize:
+ # Code from module getprogname:
+ # Code from module getprogname-tests:
+ # Code from module getrandom:
+ # Code from module getrandom-tests:
+ # Code from module gettext-h:
+ # Code from module gettimeofday:
+ # Code from module gettimeofday-tests:
+ # Code from module git-version-gen:
+ # Code from module gitlog-to-changelog:
+ # Code from module glibc-internal/dynarray:
+ # Code from module glibc-internal/dynarray-tests:
+ # Code from module glibc-internal/scratch_buffer:
+ # Code from module glibc-internal/scratch_buffer-tests:
+ # Code from module gnu-web-doc-update:
+ # Code from module gnumakefile:
+ # Code from module gnupload:
+ # Code from module hard-locale:
+ # Code from module hard-locale-tests:
+ # Code from module ialloc:
+ # Code from module idx:
+ # Code from module ignore-value:
+ # Code from module ignore-value-tests:
+ # Code from module include_next:
+ # Code from module inet_pton:
+ # Code from module inet_pton-tests:
+ # Code from module intprops:
+ # Code from module intprops-tests:
+ # Code from module inttypes:
+ # Code from module inttypes-incomplete:
+ # Code from module inttypes-tests:
+ # Code from module ioctl:
+ # Code from module ioctl-tests:
+ # Code from module isblank:
+ # Code from module isblank-tests:
+ # Code from module langinfo:
+ # Code from module langinfo-tests:
+ # Code from module largefile:
+ AC_REQUIRE([AC_SYS_LARGEFILE])
+ # Code from module lib-ignore:
+ # Code from module libc-config:
+ # Code from module limits-h:
+ # Code from module limits-h-tests:
+ # Code from module listen:
+ # Code from module listen-tests:
+ # Code from module localcharset:
+ # Code from module localcharset-tests:
+ # Code from module locale:
+ # Code from module locale-tests:
+ # Code from module localeconv:
+ # Code from module localeconv-tests:
+ # Code from module localename:
+ # Code from module localename-tests:
+ # Code from module lock:
+ # Code from module lock-tests:
+ # Code from module long-options:
+ # Code from module lseek:
+ # Code from module lseek-tests:
+ # Code from module lstat:
+ # Code from module lstat-tests:
+ # Code from module maintainer-makefile:
+ # Code from module malloc-gnu:
+ # Code from module malloc-gnu-tests:
+ # Code from module malloc-posix:
+ # Code from module malloca:
+ # Code from module malloca-tests:
+ # Code from module manywarnings:
+ # Code from module mbrtowc:
+ # Code from module mbrtowc-tests:
+ # Code from module mbsinit:
+ # Code from module mbsinit-tests:
+ # Code from module mbtowc:
+ # Code from module memchr:
+ # Code from module memchr-tests:
+ # Code from module mempcpy:
+ # Code from module minmax:
+ # Code from module mkdir:
+ # Code from module mkdir-tests:
+ # Code from module mkstemp:
+ # Code from module mktempd:
+ # Code from module msvc-inval:
+ # Code from module msvc-nothrow:
+ # Code from module multiarch:
+ # Code from module nanosleep:
+ # Code from module nanosleep-tests:
+ # Code from module netinet_in:
+ # Code from module netinet_in-tests:
+ # Code from module nl_langinfo:
+ # Code from module nl_langinfo-tests:
+ # Code from module nocrash:
+ # Code from module open:
+ # Code from module open-tests:
+ # Code from module pathmax:
+ # Code from module pathmax-tests:
+ # Code from module perror:
+ # Code from module perror-tests:
+ # Code from module pipe-posix:
+ # Code from module pipe-posix-tests:
+ # Code from module priv-set:
+ # Code from module priv-set-tests:
+ # Code from module progname:
+ # Code from module pselect:
+ # Code from module pselect-tests:
+ # Code from module pthread-h:
+ gl_ANYTHREADLIB_EARLY
+ # Code from module pthread-h-tests:
+ # Code from module pthread-thread:
+ # Code from module pthread-thread-tests:
+ # Code from module pthread_sigmask:
+ # Code from module pthread_sigmask-tests:
+ # Code from module putenv:
+ # Code from module quote:
+ # Code from module quotearg:
+ # Code from module quotearg-simple:
+ # Code from module quotearg-simple-tests:
+ # Code from module raise:
+ # Code from module raise-tests:
+ # Code from module rawmemchr:
+ # Code from module rawmemchr-tests:
+ # Code from module read:
+ # Code from module read-tests:
+ # Code from module readlink:
+ # Code from module readlink-tests:
+ # Code from module realloc-gnu:
+ # Code from module realloc-gnu-tests:
+ # Code from module realloc-posix:
+ # Code from module reallocarray:
+ # Code from module reallocarray-tests:
+ # Code from module regex:
+ # Code from module regex-tests:
+ # Code from module root-uid:
+ # Code from module rpmatch:
+ # Code from module safe-read:
+ # Code from module same-inode:
+ # Code from module sched:
+ # Code from module sched-tests:
+ # Code from module sched_yield:
+ # Code from module select:
+ # Code from module select-tests:
+ # Code from module setenv:
+ # Code from module setenv-tests:
+ # Code from module setlocale:
+ # Code from module setlocale-null:
+ # Code from module setlocale-null-tests:
+ # Code from module setlocale-tests:
+ # Code from module setsockopt:
+ # Code from module setsockopt-tests:
+ # Code from module signal-h:
+ # Code from module signal-h-tests:
+ # Code from module sigprocmask:
+ # Code from module sigprocmask-tests:
+ # Code from module sleep:
+ # Code from module sleep-tests:
+ # Code from module snippet/_Noreturn:
+ # Code from module snippet/arg-nonnull:
+ # Code from module snippet/c++defs:
+ # Code from module snippet/warn-on-use:
+ # Code from module socket:
+ # Code from module socketlib:
+ # Code from module sockets:
+ # Code from module sockets-tests:
+ # Code from module socklen:
+ # Code from module ssize_t:
+ # Code from module stat:
+ # Code from module stat-tests:
+ # Code from module stat-time:
+ # Code from module stat-time-tests:
+ # Code from module std-gnu11:
+ # Code from module stdarg:
+ dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode
+ dnl for the builtin va_copy to work. gl_PROG_CC_C99 arranges for this.
+ gl_PROG_CC_C99
+ # Code from module stdarg-tests:
+ # Code from module stdbool:
+ # Code from module stdbool-tests:
+ # Code from module stdckdint:
+ # Code from module stdckdint-tests:
+ # Code from module stddef:
+ # Code from module stddef-tests:
+ # Code from module stdint:
+ # Code from module stdint-tests:
+ # Code from module stdio:
+ # Code from module stdio-tests:
+ # Code from module stdlib:
+ # Code from module stdlib-tests:
+ # Code from module strdup-posix:
+ # Code from module streq:
+ # Code from module strerror:
+ # Code from module strerror-override:
+ # Code from module strerror-tests:
+ # Code from module strerror_r-posix:
+ # Code from module strerror_r-posix-tests:
+ # Code from module string:
+ # Code from module string-tests:
+ # Code from module strtoll:
+ # Code from module strtoll-tests:
+ # Code from module strtoull:
+ # Code from module strtoull-tests:
+ # Code from module symlink:
+ # Code from module symlink-tests:
+ # Code from module sys_ioctl:
+ # Code from module sys_ioctl-tests:
+ # Code from module sys_random:
+ # Code from module sys_random-tests:
+ # Code from module sys_select:
+ # Code from module sys_select-tests:
+ # Code from module sys_socket:
+ # Code from module sys_socket-tests:
+ # Code from module sys_stat:
+ # Code from module sys_stat-tests:
+ # Code from module sys_time:
+ # Code from module sys_time-tests:
+ # Code from module sys_types:
+ # Code from module sys_types-tests:
+ # Code from module sys_uio:
+ # Code from module sys_uio-tests:
+ # Code from module tempname:
+ # Code from module test-framework-sh:
+ # Code from module test-framework-sh-tests:
+ # Code from module thread:
+ # Code from module thread-optim:
+ # Code from module thread-tests:
+ # Code from module threadlib:
+ gl_THREADLIB_EARLY
+ # Code from module time:
+ # Code from module time-h:
+ # Code from module time-h-tests:
+ # Code from module time-tests:
+ # Code from module unistd:
+ # Code from module unistd-tests:
+ # Code from module unlink:
+ # Code from module unlink-tests:
+ # Code from module unlinkdir:
+ # Code from module unsetenv:
+ # Code from module unsetenv-tests:
+ # Code from module update-copyright:
+ # Code from module update-copyright-tests:
+ # Code from module useless-if-before-free:
+ # Code from module usleep:
+ # Code from module usleep-tests:
+ # Code from module vararrays:
+ # Code from module vc-list-files:
+ # Code from module vc-list-files-tests:
+ # Code from module verify:
+ # Code from module verify-tests:
+ # Code from module version-etc:
+ # Code from module version-etc-fsf:
+ # Code from module version-etc-tests:
+ # Code from module warnings:
+ # Code from module wchar:
+ # Code from module wchar-tests:
+ # Code from module wcrtomb:
+ # Code from module wcrtomb-tests:
+ # Code from module wctob:
+ # Code from module wctomb:
+ # Code from module wctype-h:
+ # Code from module wctype-h-tests:
+ # Code from module windows-mutex:
+ # Code from module windows-once:
+ # Code from module windows-recmutex:
+ # Code from module windows-rwlock:
+ # Code from module windows-thread:
+ # Code from module windows-tls:
+ # Code from module xalloc:
+ # Code from module xalloc-die:
+ # Code from module xalloc-die-tests:
+ # Code from module xalloc-oversized:
+ # Code from module xstrtol:
+ # Code from module xstrtol-error:
+ # Code from module xstrtol-tests:
+ # Code from module xstrtoll:
+ # Code from module xstrtoll-tests:
+ # Code from module yield:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([gl_INIT],
+[
+ AC_CONFIG_LIBOBJ_DIR([lib])
+ AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
+ gl_cond_libtool=true
+ gl_m4_base='m4'
+ m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
+ m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
+ m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
+ m4_pushdef([gl_LIBSOURCES_LIST], [])
+ m4_pushdef([gl_LIBSOURCES_DIR], [])
+ m4_pushdef([GL_MACRO_PREFIX], [gl])
+ m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
+ gl_COMMON
+ gl_source_base='lib'
+ gl_source_base_prefix=
+ gl_ALIGNASOF
+changequote(,)dnl
+LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'`
+changequote([, ])dnl
+AC_SUBST([LTALLOCA])
+ gl_FUNC_ALLOCA
+ gl_CONDITIONAL_HEADER([alloca.h])
+ AC_PROG_MKDIR_P
+ gl_ASSERT
+ gl_ASSERT_H
+ gl_CONDITIONAL_HEADER([assert.h])
+ AC_PROG_MKDIR_P
+ gl_FUNC_BTOWC
+ gl_CONDITIONAL([GL_COND_OBJ_BTOWC],
+ [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_BTOWC], [
+ gl_PREREQ_BTOWC
+ ])
+ gl_WCHAR_MODULE_INDICATOR([btowc])
+ gl___BUILTIN_EXPECT
+ gl_FUNC_CALLOC_GNU
+ if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then
+ AC_LIBOBJ([calloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([calloc-gnu])
+ gl_FUNC_CALLOC_POSIX
+ if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then
+ AC_LIBOBJ([calloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([calloc-posix])
+ gl_CANONICALIZE_LGPL
+ gl_CONDITIONAL([GL_COND_OBJ_CANONICALIZE_LGPL],
+ [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1])
+ gl_MODULE_INDICATOR([canonicalize-lgpl])
+ gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name])
+ gl_STDLIB_MODULE_INDICATOR([realpath])
+ gl_CLOCK_TIME
+ gl_MODULE_INDICATOR_FOR_TESTS([cloexec])
+ gl_FUNC_CLOSE
+ gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1])
+ gl_UNISTD_MODULE_INDICATOR([close])
+ gl_MODULE_INDICATOR([close-stream])
+ gl_CONFIG_H
+ gl_CONFIGMAKE
+ AC_PROG_MKDIR_P
+ gl_MODULE_INDICATOR([dirname])
+ gl_DOUBLE_SLASH_ROOT
+ gl_FUNC_DUP2
+ gl_CONDITIONAL([GL_COND_OBJ_DUP2], [test $REPLACE_DUP2 = 1])
+ AM_COND_IF([GL_COND_OBJ_DUP2], [
+ gl_PREREQ_DUP2
+ ])
+ gl_UNISTD_MODULE_INDICATOR([dup2])
+ gl_HEADER_ERRNO_H
+ gl_CONDITIONAL_HEADER([errno.h])
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_ERROR_H])
+ gl_ERROR
+ gl_CONDITIONAL([GL_COND_OBJ_ERROR], [test $GL_GENERATE_ERROR_H = true])
+ AM_COND_IF([GL_COND_OBJ_ERROR], [
+ gl_PREREQ_ERROR
+ ])
+ m4_ifdef([AM_XGETTEXT_OPTION],
+ [AM_][XGETTEXT_OPTION([--flag=error:3:c-format])
+ AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])])
+ gl_ERROR_H
+ gl_CONDITIONAL_HEADER([error.h])
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_EXTERN_INLINE])
+ gl_FUNC_FCNTL
+ gl_CONDITIONAL([GL_COND_OBJ_FCNTL],
+ [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1])
+ gl_FCNTL_MODULE_INDICATOR([fcntl])
+ gl_FCNTL_H
+ gl_FCNTL_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_FPENDING
+ gl_CONDITIONAL([GL_COND_OBJ_FPENDING], [test $gl_cv_func___fpending = no])
+ gl_FUNC_FREE
+ gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1])
+ AM_COND_IF([GL_COND_OBJ_FREE], [
+ gl_PREREQ_FREE
+ ])
+ gl_STDLIB_MODULE_INDICATOR([free-posix])
+ gl_FUNC_FSTAT
+ gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1])
+ AM_COND_IF([GL_COND_OBJ_FSTAT], [
+ case "$host_os" in
+ mingw*)
+ AC_LIBOBJ([stat-w32])
+ ;;
+ esac
+ gl_PREREQ_FSTAT
+ ])
+ gl_SYS_STAT_MODULE_INDICATOR([fstat])
+ gl_FUNC_FSYNC
+ gl_CONDITIONAL([GL_COND_OBJ_FSYNC], [test $HAVE_FSYNC = 0])
+ AM_COND_IF([GL_COND_OBJ_FSYNC], [
+ gl_PREREQ_FSYNC
+ ])
+ gl_UNISTD_MODULE_INDICATOR([fsync])
+ gl_FUNC_GETDTABLESIZE
+ gl_CONDITIONAL([GL_COND_OBJ_GETDTABLESIZE],
+ [test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1])
+ AM_COND_IF([GL_COND_OBJ_GETDTABLESIZE], [
+ gl_PREREQ_GETDTABLESIZE
+ ])
+ gl_UNISTD_MODULE_INDICATOR([getdtablesize])
+ gl_FUNC_GETOPT_GNU
+ dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required
+ dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are
+ dnl done in the getopt-posix module.
+ gl_FUNC_GETOPT_POSIX
+ gl_CONDITIONAL_HEADER([getopt.h])
+ gl_CONDITIONAL_HEADER([getopt-cdefs.h])
+ AC_PROG_MKDIR_P
+ gl_CONDITIONAL([GL_COND_OBJ_GETOPT], [test $REPLACE_GETOPT = 1])
+ AM_COND_IF([GL_COND_OBJ_GETOPT], [
+ dnl Define the substituted variable GNULIB_UNISTD_H_GETOPT to 1.
+ gl_UNISTD_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT], [1])
+ ])
+ gl_UNISTD_MODULE_INDICATOR([getopt-posix])
+ gl_FUNC_GETPROGNAME
+ gl_CONDITIONAL([GL_COND_OBJ_GETPROGNAME],
+ [test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1])
+ AM_COND_IF([GL_COND_OBJ_GETPROGNAME], [
+ gl_PREREQ_GETPROGNAME
+ ])
+ gl_STDLIB_MODULE_INDICATOR([getprogname])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_FUNC_GETRANDOM
+ gl_CONDITIONAL([GL_COND_OBJ_GETRANDOM],
+ [test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1])
+ gl_SYS_RANDOM_MODULE_INDICATOR([getrandom])
+ AC_SUBST([LIBINTL])
+ AC_SUBST([LTLIBINTL])
+ AC_PROG_MKDIR_P
+ AC_PROG_MKDIR_P
+ # Autoconf 2.61a.99 and earlier don't support linking a file only
+ # in VPATH builds. But since GNUmakefile is for maintainer use
+ # only, it does not matter if we skip the link with older autoconf.
+ # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+ # builds, so use a shell variable to bypass this.
+ GNUmakefile=GNUmakefile
+ m4_if(m4_version_compare([2.61a.100],
+ m4_defn([m4_PACKAGE_VERSION])), [1], [],
+ [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
+ [GNUmakefile=$GNUmakefile])])
+ AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
+ HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB"
+ AC_SUBST([HARD_LOCALE_LIB])
+ dnl For backward compatibility.
+ LIB_HARD_LOCALE="$HARD_LOCALE_LIB"
+ AC_SUBST([LIB_HARD_LOCALE])
+ gl_INTTYPES_H
+ gl_INTTYPES_INCOMPLETE
+ gl_INTTYPES_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_LANGINFO_H
+ gl_LANGINFO_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_LARGEFILE])
+ gl_IGNORE_UNUSED_LIBRARIES
+ gl___INLINE
+ gl_LIMITS_H
+ gl_CONDITIONAL_HEADER([limits.h])
+ AC_PROG_MKDIR_P
+ gl_LOCALCHARSET
+ dnl For backward compatibility. Some packages still use this.
+ LOCALCHARSET_TESTS_ENVIRONMENT=
+ AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
+ gl_LOCALE_H
+ gl_LOCALE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_LOCALECONV
+ gl_CONDITIONAL([GL_COND_OBJ_LOCALECONV], [test $REPLACE_LOCALECONV = 1])
+ AM_COND_IF([GL_COND_OBJ_LOCALECONV], [
+ gl_PREREQ_LOCALECONV
+ ])
+ gl_LOCALE_MODULE_INDICATOR([localeconv])
+ gl_LOCK
+ gl_MODULE_INDICATOR([lock])
+ gl_FUNC_LSEEK
+ gl_CONDITIONAL([GL_COND_OBJ_LSEEK], [test $REPLACE_LSEEK = 1])
+ gl_UNISTD_MODULE_INDICATOR([lseek])
+ gl_FUNC_LSTAT
+ gl_CONDITIONAL([GL_COND_OBJ_LSTAT], [test $REPLACE_LSTAT = 1])
+ AM_COND_IF([GL_COND_OBJ_LSTAT], [
+ gl_PREREQ_LSTAT
+ ])
+ gl_SYS_STAT_MODULE_INDICATOR([lstat])
+ AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
+ [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+ AC_REQUIRE([AC_PROG_SED])
+ AC_REQUIRE([AC_PROG_GREP])
+ gl_FUNC_MALLOC_GNU
+ if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then
+ AC_LIBOBJ([malloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([malloc-gnu])
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ AC_LIBOBJ([malloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([malloc-posix])
+ gl_MALLOCA
+ gl_FUNC_MBRTOWC
+ gl_CONDITIONAL([GL_COND_OBJ_MBRTOWC],
+ [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_MBRTOWC], [
+ if test $REPLACE_MBSTATE_T = 1; then
+ AC_LIBOBJ([lc-charset-dispatch])
+ AC_LIBOBJ([mbtowc-lock])
+ gl_PREREQ_MBTOWC_LOCK
+ fi
+ gl_PREREQ_MBRTOWC
+ ])
+ gl_WCHAR_MODULE_INDICATOR([mbrtowc])
+ gl_FUNC_MBSINIT
+ gl_CONDITIONAL([GL_COND_OBJ_MBSINIT],
+ [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1])
+ AM_COND_IF([GL_COND_OBJ_MBSINIT], [
+ gl_PREREQ_MBSINIT
+ ])
+ gl_WCHAR_MODULE_INDICATOR([mbsinit])
+ gl_FUNC_MBTOWC
+ gl_CONDITIONAL([GL_COND_OBJ_MBTOWC],
+ [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1])
+ AM_COND_IF([GL_COND_OBJ_MBTOWC], [
+ gl_PREREQ_MBTOWC
+ ])
+ gl_STDLIB_MODULE_INDICATOR([mbtowc])
+ gl_FUNC_MEMPCPY
+ gl_CONDITIONAL([GL_COND_OBJ_MEMPCPY],
+ [test $HAVE_MEMPCPY = 0 || test $REPLACE_MEMPCPY = 1])
+ AM_COND_IF([GL_COND_OBJ_MEMPCPY], [
+ gl_PREREQ_MEMPCPY
+ ])
+ gl_STRING_MODULE_INDICATOR([mempcpy])
+ gl_MINMAX
+ gl_FUNC_MKDIR
+ gl_CONDITIONAL([GL_COND_OBJ_MKDIR], [test $REPLACE_MKDIR = 1])
+ gl_SYS_STAT_MODULE_INDICATOR([mkdir])
+ gl_FUNC_MKSTEMP
+ gl_CONDITIONAL([GL_COND_OBJ_MKSTEMP],
+ [test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1])
+ AM_COND_IF([GL_COND_OBJ_MKSTEMP], [
+ gl_PREREQ_MKSTEMP
+ ])
+ gl_STDLIB_MODULE_INDICATOR([mkstemp])
+ AC_REQUIRE([gl_MSVC_INVAL])
+ gl_CONDITIONAL([GL_COND_OBJ_MSVC_INVAL],
+ [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1])
+ AC_REQUIRE([gl_MSVC_NOTHROW])
+ gl_CONDITIONAL([GL_COND_OBJ_MSVC_NOTHROW],
+ [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1])
+ gl_MODULE_INDICATOR([msvc-nothrow])
+ gl_MULTIARCH
+ gl_FUNC_NL_LANGINFO
+ gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO],
+ [test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1])
+ gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO_LOCK],
+ [test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0])
+ if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then
+ gl_PREREQ_NL_LANGINFO_LOCK
+ fi
+ gl_LANGINFO_MODULE_INDICATOR([nl_langinfo])
+ gl_FUNC_OPEN
+ gl_CONDITIONAL([GL_COND_OBJ_OPEN], [test $REPLACE_OPEN = 1])
+ AM_COND_IF([GL_COND_OBJ_OPEN], [
+ gl_PREREQ_OPEN
+ ])
+ gl_FCNTL_MODULE_INDICATOR([open])
+ gl_PATHMAX
+ AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
+ AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
+ gl_QUOTE
+ gl_QUOTEARG
+ gl_FUNC_RAWMEMCHR
+ gl_CONDITIONAL([GL_COND_OBJ_RAWMEMCHR], [test $HAVE_RAWMEMCHR = 0])
+ AM_COND_IF([GL_COND_OBJ_RAWMEMCHR], [
+ gl_PREREQ_RAWMEMCHR
+ ])
+ gl_STRING_MODULE_INDICATOR([rawmemchr])
+ gl_FUNC_READ
+ gl_CONDITIONAL([GL_COND_OBJ_READ], [test $REPLACE_READ = 1])
+ AM_COND_IF([GL_COND_OBJ_READ], [
+ gl_PREREQ_READ
+ ])
+ gl_UNISTD_MODULE_INDICATOR([read])
+ gl_FUNC_READLINK
+ gl_CONDITIONAL([GL_COND_OBJ_READLINK],
+ [test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1])
+ AM_COND_IF([GL_COND_OBJ_READLINK], [
+ gl_PREREQ_READLINK
+ ])
+ gl_UNISTD_MODULE_INDICATOR([readlink])
+ gl_FUNC_REALLOC_GNU
+ if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then
+ AC_LIBOBJ([realloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([realloc-gnu])
+ gl_FUNC_REALLOC_POSIX
+ if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then
+ AC_LIBOBJ([realloc])
+ fi
+ gl_STDLIB_MODULE_INDICATOR([realloc-posix])
+ gl_FUNC_REALLOCARRAY
+ gl_CONDITIONAL([GL_COND_OBJ_REALLOCARRAY],
+ [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1])
+ AM_COND_IF([GL_COND_OBJ_REALLOCARRAY], [
+ gl_PREREQ_REALLOCARRAY
+ ])
+ gl_MODULE_INDICATOR([reallocarray])
+ gl_STDLIB_MODULE_INDICATOR([reallocarray])
+ gl_REGEX
+ gl_CONDITIONAL([GL_COND_OBJ_REGEX], [test $ac_use_included_regex = yes])
+ AM_COND_IF([GL_COND_OBJ_REGEX], [
+ gl_PREREQ_REGEX
+ ])
+ gl_FUNC_RPMATCH
+ gl_CONDITIONAL([GL_COND_OBJ_RPMATCH], [test $HAVE_RPMATCH = 0])
+ AM_COND_IF([GL_COND_OBJ_RPMATCH], [
+ gl_PREREQ_RPMATCH
+ ])
+ gl_STDLIB_MODULE_INDICATOR([rpmatch])
+ gl_PREREQ_SAFE_READ
+ gl_FUNC_SETLOCALE_NULL
+ gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE_LOCK],
+ [test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0])
+ AM_COND_IF([GL_COND_OBJ_SETLOCALE_LOCK], [
+ gl_PREREQ_SETLOCALE_LOCK
+ ])
+ gl_LOCALE_MODULE_INDICATOR([setlocale_null])
+ gl_FUNC_SLEEP
+ gl_CONDITIONAL([GL_COND_OBJ_SLEEP],
+ [test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1])
+ gl_UNISTD_MODULE_INDICATOR([sleep])
+ gt_TYPE_SSIZE_T
+ gl_FUNC_STAT
+ gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1])
+ AM_COND_IF([GL_COND_OBJ_STAT], [
+ case "$host_os" in
+ mingw*)
+ AC_LIBOBJ([stat-w32])
+ ;;
+ esac
+ gl_PREREQ_STAT
+ ])
+ gl_SYS_STAT_MODULE_INDICATOR([stat])
+ gl_STAT_TIME
+ gl_STAT_BIRTHTIME
+ gl_STDARG_H
+ gl_CONDITIONAL_HEADER([stdarg.h])
+ AC_PROG_MKDIR_P
+ gl_C_BOOL
+ AC_CHECK_HEADERS_ONCE([stdckdint.h])
+ if test $ac_cv_header_stdckdint_h = yes; then
+ GL_GENERATE_STDCKDINT_H=false
+ else
+ GL_GENERATE_STDCKDINT_H=true
+ fi
+ gl_CONDITIONAL_HEADER([stdckdint.h])
+ AC_PROG_MKDIR_P
+ gl_STDDEF_H
+ gl_STDDEF_H_REQUIRE_DEFAULTS
+ gl_CONDITIONAL_HEADER([stddef.h])
+ AC_PROG_MKDIR_P
+ gl_STDINT_H
+ gl_CONDITIONAL_HEADER([stdint.h])
+ dnl Because of gl_REPLACE_LIMITS_H:
+ gl_CONDITIONAL_HEADER([limits.h])
+ AC_PROG_MKDIR_P
+ gl_STDIO_H
+ gl_STDIO_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_CONDITIONAL([GL_COND_OBJ_STDIO_READ], [test $REPLACE_STDIO_READ_FUNCS = 1])
+ gl_CONDITIONAL([GL_COND_OBJ_STDIO_WRITE], [test $REPLACE_STDIO_WRITE_FUNCS = 1])
+ dnl No need to create extra modules for these functions. Everyone who uses
+ dnl <stdio.h> likely needs them.
+ gl_STDIO_MODULE_INDICATOR([fscanf])
+ gl_MODULE_INDICATOR([fscanf])
+ gl_STDIO_MODULE_INDICATOR([scanf])
+ gl_MODULE_INDICATOR([scanf])
+ gl_STDIO_MODULE_INDICATOR([fgetc])
+ gl_STDIO_MODULE_INDICATOR([getc])
+ gl_STDIO_MODULE_INDICATOR([getchar])
+ gl_STDIO_MODULE_INDICATOR([fgets])
+ gl_STDIO_MODULE_INDICATOR([fread])
+ dnl No need to create extra modules for these functions. Everyone who uses
+ dnl <stdio.h> likely needs them.
+ gl_STDIO_MODULE_INDICATOR([fprintf])
+ gl_STDIO_MODULE_INDICATOR([printf])
+ gl_STDIO_MODULE_INDICATOR([vfprintf])
+ gl_STDIO_MODULE_INDICATOR([vprintf])
+ gl_STDIO_MODULE_INDICATOR([fputc])
+ gl_STDIO_MODULE_INDICATOR([putc])
+ gl_STDIO_MODULE_INDICATOR([putchar])
+ gl_STDIO_MODULE_INDICATOR([fputs])
+ gl_STDIO_MODULE_INDICATOR([puts])
+ gl_STDIO_MODULE_INDICATOR([fwrite])
+ gl_STDLIB_H
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_STRDUP_POSIX
+ gl_CONDITIONAL([GL_COND_OBJ_STRDUP], [test $REPLACE_STRDUP = 1])
+ AM_COND_IF([GL_COND_OBJ_STRDUP], [
+ gl_PREREQ_STRDUP
+ ])
+ gl_STRING_MODULE_INDICATOR([strdup])
+ gl_FUNC_STRERROR
+ gl_CONDITIONAL([GL_COND_OBJ_STRERROR], [test $REPLACE_STRERROR = 1])
+ gl_MODULE_INDICATOR([strerror])
+ gl_STRING_MODULE_INDICATOR([strerror])
+ AC_REQUIRE([gl_HEADER_ERRNO_H])
+ AC_REQUIRE([gl_FUNC_STRERROR_0])
+ gl_CONDITIONAL([GL_COND_OBJ_STRERROR_OVERRIDE],
+ [test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1])
+ AM_COND_IF([GL_COND_OBJ_STRERROR_OVERRIDE], [
+ gl_PREREQ_SYS_H_WINSOCK2
+ ])
+ gl_STRING_H
+ gl_STRING_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_STRTOLL
+ gl_CONDITIONAL([GL_COND_OBJ_STRTOLL],
+ [test $HAVE_STRTOLL = 0 || test $REPLACE_STRTOLL = 1])
+ AM_COND_IF([GL_COND_OBJ_STRTOLL], [
+ gl_PREREQ_STRTOLL
+ ])
+ gl_STDLIB_MODULE_INDICATOR([strtoll])
+ gl_FUNC_STRTOULL
+ gl_CONDITIONAL([GL_COND_OBJ_STRTOULL],
+ [test $HAVE_STRTOULL = 0 || test $REPLACE_STRTOULL = 1])
+ AM_COND_IF([GL_COND_OBJ_STRTOULL], [
+ gl_PREREQ_STRTOULL
+ ])
+ gl_STDLIB_MODULE_INDICATOR([strtoull])
+ gl_SYS_RANDOM_H
+ gl_SYS_RANDOM_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SYS_STAT_H
+ gl_SYS_STAT_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SYS_TYPES_H
+ gl_SYS_TYPES_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_GEN_TEMPNAME
+ gl_MODULE_INDICATOR([tempname])
+ AC_REQUIRE([gl_THREADLIB])
+ gl_TIME_H
+ gl_TIME_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_UNISTD_H
+ gl_UNISTD_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_UNLINK
+ gl_CONDITIONAL([GL_COND_OBJ_UNLINK], [test $REPLACE_UNLINK = 1])
+ gl_UNISTD_MODULE_INDICATOR([unlink])
+ gl_FUNC_USLEEP
+ gl_CONDITIONAL([GL_COND_OBJ_USLEEP],
+ [test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1])
+ gl_UNISTD_MODULE_INDICATOR([usleep])
+ AC_C_VARARRAYS
+ gl_VERSION_ETC
+ gl_WCHAR_H
+ gl_WCHAR_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_WCRTOMB
+ gl_CONDITIONAL([GL_COND_OBJ_WCRTOMB],
+ [test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1])
+ AM_COND_IF([GL_COND_OBJ_WCRTOMB], [
+ gl_PREREQ_WCRTOMB
+ ])
+ gl_WCHAR_MODULE_INDICATOR([wcrtomb])
+ gl_WCTYPE_H
+ gl_WCTYPE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ gl_XALLOC
+ gl_MODULE_INDICATOR([xalloc])
+ gl_MODULE_INDICATOR([xalloc-die])
+ gl_XSTRTOL
+ # End of code from modules
+ m4_ifval(gl_LIBSOURCES_LIST, [
+ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
+ for gl_file in ]gl_LIBSOURCES_LIST[ ; do
+ if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
+ echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
+ exit 1
+ fi
+ done])dnl
+ m4_if(m4_sysval, [0], [],
+ [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+ ])
+ m4_popdef([GL_MODULE_INDICATOR_PREFIX])
+ m4_popdef([GL_MACRO_PREFIX])
+ m4_popdef([gl_LIBSOURCES_DIR])
+ m4_popdef([gl_LIBSOURCES_LIST])
+ m4_popdef([AC_LIBSOURCES])
+ m4_popdef([AC_REPLACE_FUNCS])
+ m4_popdef([AC_LIBOBJ])
+ AC_CONFIG_COMMANDS_PRE([
+ gl_libobjs=
+ gl_ltlibobjs=
+ gl_libobjdeps=
+ if test -n "$gl_LIBOBJS"; then
+ # Remove the extension.
+changequote(,)dnl
+ sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+changequote([, ])dnl
+ for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+ gl_libobjs="$gl_libobjs $i.$ac_objext"
+ gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo"
+ done
+ fi
+ AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
+ AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+ AC_SUBST([gl_LIBOBJDEPS], [$gl_libobjdeps])
+ ])
+ gltests_libdeps=
+ gltests_ltlibdeps=
+ m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
+ m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
+ m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
+ m4_pushdef([gltests_LIBSOURCES_LIST], [])
+ m4_pushdef([gltests_LIBSOURCES_DIR], [])
+ m4_pushdef([GL_MACRO_PREFIX], [gltests])
+ m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL])
+ gl_COMMON
+ AC_REQUIRE([gl_CC_ALLOW_WARNINGS])
+ AC_REQUIRE([gl_CXX_ALLOW_WARNINGS])
+ gl_source_base='gnulib-tests'
+ gl_source_base_prefix=
+changequote(,)dnl
+ gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+ AC_SUBST([gltests_WITNESS])
+ gl_module_indicator_condition=$gltests_WITNESS
+ m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_ACCEPT], [test "$ac_cv_header_winsock2_h" = yes])
+ gl_SYS_SOCKET_MODULE_INDICATOR([accept])
+ gl_ARPA_INET_H
+ gl_ARPA_INET_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_BIND], [test "$ac_cv_header_winsock2_h" = yes])
+ gl_SYS_SOCKET_MODULE_INDICATOR([bind])
+ gt_LOCALE_FR
+ gt_LOCALE_FR_UTF8
+ gt_LOCALE_FR
+ gt_LOCALE_TR_UTF8
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_CONNECT], [test "$ac_cv_header_winsock2_h" = yes])
+ gl_SYS_SOCKET_MODULE_INDICATOR([connect])
+ gl_CTYPE_H
+ gl_CTYPE_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_ENVIRON
+ gl_UNISTD_MODULE_INDICATOR([environ])
+ gl_FUNC_FDOPEN
+ gl_CONDITIONAL([GL_COND_OBJ_FDOPEN], [test $REPLACE_FDOPEN = 1])
+ AM_COND_IF([GL_COND_OBJ_FDOPEN], [
+ gl_PREREQ_FDOPEN
+ ])
+ gl_STDIO_MODULE_INDICATOR([fdopen])
+ AC_C_FLEXIBLE_ARRAY_MEMBER
+ gl_FUNC_FTRUNCATE
+ gl_CONDITIONAL([GL_COND_OBJ_FTRUNCATE],
+ [test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1])
+ AM_COND_IF([GL_COND_OBJ_FTRUNCATE], [
+ gl_PREREQ_FTRUNCATE
+ ])
+ gl_UNISTD_MODULE_INDICATOR([ftruncate])
+ gl_FUNC_GETCWD_LGPL
+ gl_CONDITIONAL([GL_COND_OBJ_GETCWD_LGPL], [test $REPLACE_GETCWD = 1])
+ gl_UNISTD_MODULE_INDICATOR([getcwd])
+ gl_FUNC_GETPAGESIZE
+ gl_CONDITIONAL([GL_COND_OBJ_GETPAGESIZE], [test $REPLACE_GETPAGESIZE = 1])
+ gl_UNISTD_MODULE_INDICATOR([getpagesize])
+ gl_FUNC_GETTIMEOFDAY
+ gl_CONDITIONAL([GL_COND_OBJ_GETTIMEOFDAY],
+ [test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1])
+ AM_COND_IF([GL_COND_OBJ_GETTIMEOFDAY], [
+ gl_PREREQ_GETTIMEOFDAY
+ ])
+ gl_SYS_TIME_MODULE_INDICATOR([gettimeofday])
+ gl_MUSL_LIBC
+ dnl Distinguish OpenBSD >= 6.2 from OpenBSD < 6.2.
+ gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]])
+ gl_FUNC_INET_PTON
+ gl_CONDITIONAL([GL_COND_OBJ_INET_PTON],
+ [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1])
+ AM_COND_IF([GL_COND_OBJ_INET_PTON], [
+ gl_PREREQ_INET_PTON
+ ])
+ gl_ARPA_INET_MODULE_INDICATOR([inet_pton])
+ AC_C_BIGENDIAN
+ gl_FUNC_IOCTL
+ gl_CONDITIONAL([GL_COND_OBJ_IOCTL],
+ [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1])
+ gl_SYS_IOCTL_MODULE_INDICATOR([ioctl])
+ gl_FUNC_ISBLANK
+ gl_CONDITIONAL([GL_COND_OBJ_ISBLANK], [test $HAVE_ISBLANK = 0])
+ gl_MODULE_INDICATOR([isblank])
+ gl_CTYPE_MODULE_INDICATOR([isblank])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_LISTEN], [test "$ac_cv_header_winsock2_h" = yes])
+ gl_SYS_SOCKET_MODULE_INDICATOR([listen])
+ gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]])
+ gl_LOCALENAME
+ gl_LOCALE_MODULE_INDICATOR([localename])
+ gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]])
+ AC_CHECK_HEADERS_ONCE([semaphore.h])
+ AC_CHECK_DECLS_ONCE([alarm])
+ AC_REQUIRE([gl_SEMAPHORE])
+ gt_LOCALE_FR
+ gt_LOCALE_FR_UTF8
+ gt_LOCALE_JA
+ gt_LOCALE_ZH_CN
+ gt_LOCALE_FR_UTF8
+ gl_FUNC_MEMCHR
+ gl_CONDITIONAL([GL_COND_OBJ_MEMCHR], [test $REPLACE_MEMCHR = 1])
+ AM_COND_IF([GL_COND_OBJ_MEMCHR], [
+ gl_PREREQ_MEMCHR
+ ])
+ gl_STRING_MODULE_INDICATOR([memchr])
+ dnl Check for prerequisites for memory fence checks.
+ gl_FUNC_MMAP_ANON
+ AC_CHECK_HEADERS_ONCE([sys/mman.h])
+ AC_CHECK_FUNCS_ONCE([mprotect])
+ gl_FUNC_NANOSLEEP
+ gl_CONDITIONAL([GL_COND_OBJ_NANOSLEEP],
+ [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1])
+ gl_TIME_MODULE_INDICATOR([nanosleep])
+ AC_CHECK_DECLS_ONCE([alarm])
+ gl_HEADER_NETINET_IN
+ gl_CONDITIONAL_HEADER([netinet/in.h])
+ AC_PROG_MKDIR_P
+ gt_LOCALE_FR
+ gt_LOCALE_FR_UTF8
+ gt_FUNC_USELOCALE
+ gl_FUNC_PERROR
+ gl_CONDITIONAL([GL_COND_OBJ_PERROR], [test $REPLACE_PERROR = 1])
+ gl_STRING_MODULE_INDICATOR([perror])
+ gl_FUNC_PIPE
+ gl_CONDITIONAL([GL_COND_OBJ_PIPE], [test $HAVE_PIPE = 0])
+ gl_UNISTD_MODULE_INDICATOR([pipe])
+ gl_PRIV_SET
+ gl_FUNC_PSELECT
+ gl_CONDITIONAL([GL_COND_OBJ_PSELECT],
+ [test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1])
+ gl_SYS_SELECT_MODULE_INDICATOR([pselect])
+ AC_CHECK_HEADERS_ONCE([sys/wait.h])
+ gl_PTHREAD_H
+ gl_PTHREAD_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_PTHREAD_THREAD
+ gl_CONDITIONAL([GL_COND_OBJ_PTHREAD_THREAD],
+ [test $HAVE_PTHREAD_CREATE = 0 || test $REPLACE_PTHREAD_CREATE = 1])
+ gl_PTHREAD_MODULE_INDICATOR([pthread-thread])
+ gl_FUNC_PTHREAD_SIGMASK
+ gl_CONDITIONAL([GL_COND_OBJ_PTHREAD_SIGMASK],
+ [test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1])
+ AM_COND_IF([GL_COND_OBJ_PTHREAD_SIGMASK], [
+ gl_PREREQ_PTHREAD_SIGMASK
+ ])
+ gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask])
+ gl_FUNC_PUTENV
+ gl_CONDITIONAL([GL_COND_OBJ_PUTENV], [test $REPLACE_PUTENV = 1])
+ AM_COND_IF([GL_COND_OBJ_PUTENV], [
+ gl_PREREQ_PUTENV
+ ])
+ gl_STDLIB_MODULE_INDICATOR([putenv])
+ dnl Check for prerequisites for memory fence checks.
+ dnl FIXME: zerosize-ptr.h requires these: make a module for it
+ gl_FUNC_MMAP_ANON
+ AC_CHECK_HEADERS_ONCE([sys/mman.h])
+ AC_CHECK_FUNCS_ONCE([mprotect])
+ gl_FUNC_RAISE
+ gl_CONDITIONAL([GL_COND_OBJ_RAISE],
+ [test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1])
+ AM_COND_IF([GL_COND_OBJ_RAISE], [
+ gl_PREREQ_RAISE
+ ])
+ gl_SIGNAL_MODULE_INDICATOR([raise])
+ dnl Check for prerequisites for memory fence checks.
+ gl_FUNC_MMAP_ANON
+ AC_CHECK_HEADERS_ONCE([sys/mman.h])
+ AC_CHECK_FUNCS_ONCE([mprotect])
+ gl_SCHED_H
+ gl_SCHED_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_FUNC_SCHED_YIELD
+ gl_CONDITIONAL([GL_COND_OBJ_SCHED_YIELD],
+ [test $HAVE_SCHED_YIELD = 0 || test $REPLACE_SCHED_YIELD = 1])
+ gl_SCHED_MODULE_INDICATOR([sched_yield])
+ gl_FUNC_SELECT
+ gl_CONDITIONAL([GL_COND_OBJ_SELECT], [test $REPLACE_SELECT = 1])
+ gl_SYS_SELECT_MODULE_INDICATOR([select])
+ AC_CHECK_HEADERS_ONCE([sys/wait.h])
+ gl_FUNC_SETENV
+ gl_CONDITIONAL([GL_COND_OBJ_SETENV],
+ [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1])
+ gl_STDLIB_MODULE_INDICATOR([setenv])
+ gl_FUNC_SETLOCALE
+ gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE], [test $REPLACE_SETLOCALE = 1])
+ AM_COND_IF([GL_COND_OBJ_SETLOCALE], [
+ gl_PREREQ_SETLOCALE
+ ])
+ gl_LOCALE_MODULE_INDICATOR([setlocale])
+ gt_LOCALE_FR
+ gt_LOCALE_FR_UTF8
+ gt_LOCALE_JA
+ gt_LOCALE_ZH_CN
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_SETSOCKOPT],
+ [test "$ac_cv_header_winsock2_h" = yes])
+ gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt])
+ gl_SIGNAL_H
+ gl_SIGNAL_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SIGNALBLOCKING
+ gl_CONDITIONAL([GL_COND_OBJ_SIGPROCMASK], [test $HAVE_POSIX_SIGNALBLOCKING = 0])
+ AM_COND_IF([GL_COND_OBJ_SIGPROCMASK], [
+ gl_PREREQ_SIGPROCMASK
+ ])
+ gl_SIGNAL_MODULE_INDICATOR([sigprocmask])
+ AC_CHECK_DECLS_ONCE([alarm])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ gl_CONDITIONAL([GL_COND_OBJ_SOCKET], [test "$ac_cv_header_winsock2_h" = yes])
+ # When this module is used, sockets may actually occur as file descriptors,
+ # hence it is worth warning if the modules 'close' and 'ioctl' are not used.
+ m4_ifdef([gl_UNISTD_H_DEFAULTS], [gl_UNISTD_H_REQUIRE_DEFAULTS])
+ m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [gl_SYS_IOCTL_H_REQUIRE_DEFAULTS])
+ AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2])
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1
+ fi
+ gl_SYS_SOCKET_MODULE_INDICATOR([socket])
+ AC_REQUIRE([gl_SOCKETLIB])
+ AC_REQUIRE([gl_SOCKETS])
+ gl_TYPE_SOCKLEN_T
+ AC_REQUIRE([gt_TYPE_WCHAR_T])
+ AC_REQUIRE([gt_TYPE_WINT_T])
+ gl_FUNC_STRERROR_R
+ AS_IF([test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1], [
+ AC_LIBOBJ([strerror_r])
+ gl_PREREQ_STRERROR_R
+ ])
+ gl_STRING_MODULE_INDICATOR([strerror_r])
+ dnl For the modules argp, error.
+ gl_MODULE_INDICATOR([strerror_r-posix])
+ gl_FUNC_SYMLINK
+ gl_CONDITIONAL([GL_COND_OBJ_SYMLINK],
+ [test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1])
+ gl_UNISTD_MODULE_INDICATOR([symlink])
+ gl_SYS_IOCTL_H
+ gl_SYS_IOCTL_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SYS_SELECT_H
+ gl_SYS_SELECT_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SYS_SOCKET_H
+ gl_SYS_SOCKET_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ AC_CHECK_FUNCS_ONCE([shutdown])
+ gl_SYS_TIME_H
+ gl_SYS_TIME_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_SYS_UIO_H
+ gl_SYS_UIO_H_REQUIRE_DEFAULTS
+ AC_PROG_MKDIR_P
+ gl_THREAD
+ AC_CHECK_HEADERS([sys/single_threaded.h])
+ gl_FUNC_TIME
+ gl_CONDITIONAL([GL_COND_OBJ_TIME], [test $REPLACE_TIME = 1])
+ AM_COND_IF([GL_COND_OBJ_TIME], [
+ gl_PREREQ_TIME
+ ])
+ gl_TIME_MODULE_INDICATOR([time])
+ gl_UNLINKDIR
+ gl_FUNC_UNSETENV
+ gl_CONDITIONAL([GL_COND_OBJ_UNSETENV],
+ [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1])
+ AM_COND_IF([GL_COND_OBJ_UNSETENV], [
+ gl_PREREQ_UNSETENV
+ ])
+ gl_STDLIB_MODULE_INDICATOR([unsetenv])
+ abs_aux_dir=`cd "$ac_aux_dir"; pwd`
+ AC_SUBST([abs_aux_dir])
+ abs_aux_dir=`cd "$ac_aux_dir"; pwd`
+ AC_SUBST([abs_aux_dir])
+ gt_LOCALE_FR
+ gt_LOCALE_FR_UTF8
+ gt_LOCALE_JA
+ gt_LOCALE_ZH_CN
+ gl_FUNC_WCTOB
+ gl_CONDITIONAL([GL_COND_OBJ_WCTOB],
+ [test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1])
+ AM_COND_IF([GL_COND_OBJ_WCTOB], [
+ gl_PREREQ_WCTOB
+ ])
+ gl_WCHAR_MODULE_INDICATOR([wctob])
+ gl_FUNC_WCTOMB
+ gl_CONDITIONAL([GL_COND_OBJ_WCTOMB], [test $REPLACE_WCTOMB = 1])
+ AM_COND_IF([GL_COND_OBJ_WCTOMB], [
+ gl_PREREQ_WCTOMB
+ ])
+ gl_STDLIB_MODULE_INDICATOR([wctomb])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_THREAD],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_TLS],
+ [case "$host_os" in mingw*) true;; *) false;; esac])
+ AC_REQUIRE([gl_YIELD])
+ m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+ m4_ifval(gltests_LIBSOURCES_LIST, [
+ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
+ for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
+ if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
+ echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
+ exit 1
+ fi
+ done])dnl
+ m4_if(m4_sysval, [0], [],
+ [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+ ])
+ m4_popdef([GL_MODULE_INDICATOR_PREFIX])
+ m4_popdef([GL_MACRO_PREFIX])
+ m4_popdef([gltests_LIBSOURCES_DIR])
+ m4_popdef([gltests_LIBSOURCES_LIST])
+ m4_popdef([AC_LIBSOURCES])
+ m4_popdef([AC_REPLACE_FUNCS])
+ m4_popdef([AC_LIBOBJ])
+ AC_CONFIG_COMMANDS_PRE([
+ gltests_libobjs=
+ gltests_ltlibobjs=
+ gltests_libobjdeps=
+ if test -n "$gltests_LIBOBJS"; then
+ # Remove the extension.
+changequote(,)dnl
+ sed_drop_objext='s/\.o$//;s/\.obj$//'
+ sed_dirname1='s,//*,/,g'
+ sed_dirname2='s,\(.\)/$,\1,'
+ sed_dirname3='s,^[^/]*$,.,'
+ sed_dirname4='s,\(.\)/[^/]*$,\1,'
+ sed_basename1='s,.*/,,'
+changequote([, ])dnl
+ for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+ gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+ gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+ i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+ i_base=`echo "$i" | sed -e "$sed_basename1"`
+ gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo"
+ done
+ fi
+ AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
+ AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+ AC_SUBST([gltests_LIBOBJDEPS], [$gltests_libobjdeps])
+ ])
+ AC_REQUIRE([gl_CC_GNULIB_WARNINGS])
+ LIBTESTS_LIBDEPS="$gltests_libdeps"
+ AC_SUBST([LIBTESTS_LIBDEPS])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_LIBOBJ], [
+ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
+ gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_REPLACE_FUNCS], [
+ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+ AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gl_LIBSOURCES], [
+ m4_foreach([_gl_NAME], [$1], [
+ m4_if(_gl_NAME, [alloca.c], [], [
+ m4_define([gl_LIBSOURCES_DIR], [lib])
+ m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
+ ])
+ ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_LIBOBJ], [
+ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
+ gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_REPLACE_FUNCS], [
+ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+ AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gltests_LIBSOURCES], [
+ m4_foreach([_gl_NAME], [$1], [
+ m4_if(_gl_NAME, [alloca.c], [], [
+ m4_define([gltests_LIBSOURCES_DIR], [gnulib-tests])
+ m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+ ])
+ ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([gl_FILE_LIST], [
+ build-aux/announce-gen
+ build-aux/do-release-commit-and-tag
+ build-aux/gendocs.sh
+ build-aux/git-version-gen
+ build-aux/gitlog-to-changelog
+ build-aux/gnu-web-doc-update
+ build-aux/gnupload
+ build-aux/mktempd
+ build-aux/update-copyright
+ build-aux/useless-if-before-free
+ build-aux/vc-list-files
+ doc/fdl.texi
+ doc/gendocs_template
+ doc/gendocs_template_min
+ lib/_Noreturn.h
+ lib/alloca.c
+ lib/alloca.in.h
+ lib/arg-nonnull.h
+ lib/argmatch.c
+ lib/argmatch.h
+ lib/assert.in.h
+ lib/assure.h
+ lib/attribute.h
+ lib/basename-lgpl.c
+ lib/basename-lgpl.h
+ lib/basename.c
+ lib/btowc.c
+ lib/c++defs.h
+ lib/c-ctype.c
+ lib/c-ctype.h
+ lib/c-strcase.h
+ lib/c-strcasecmp.c
+ lib/c-strcaseeq.h
+ lib/c-strncasecmp.c
+ lib/calloc.c
+ lib/canonicalize-lgpl.c
+ lib/cdefs.h
+ lib/cloexec.c
+ lib/cloexec.h
+ lib/close-stream.c
+ lib/close-stream.h
+ lib/close.c
+ lib/closeout.c
+ lib/closeout.h
+ lib/dirname-lgpl.c
+ lib/dirname.c
+ lib/dirname.h
+ lib/dup2.c
+ lib/dynarray.h
+ lib/eloop-threshold.h
+ lib/errno.in.h
+ lib/error.c
+ lib/error.in.h
+ lib/exitfail.c
+ lib/exitfail.h
+ lib/fcntl.c
+ lib/fcntl.in.h
+ lib/fd-hook.c
+ lib/fd-hook.h
+ lib/filename.h
+ lib/fpending.c
+ lib/fpending.h
+ lib/free.c
+ lib/fstat.c
+ lib/fsync.c
+ lib/getdtablesize.c
+ lib/getopt-cdefs.in.h
+ lib/getopt-core.h
+ lib/getopt-ext.h
+ lib/getopt-pfx-core.h
+ lib/getopt-pfx-ext.h
+ lib/getopt.c
+ lib/getopt.in.h
+ lib/getopt1.c
+ lib/getopt_int.h
+ lib/getprogname.c
+ lib/getprogname.h
+ lib/getrandom.c
+ lib/gettext.h
+ lib/glthread/lock.c
+ lib/glthread/lock.h
+ lib/glthread/threadlib.c
+ lib/hard-locale.c
+ lib/hard-locale.h
+ lib/ialloc.c
+ lib/ialloc.h
+ lib/idx.h
+ lib/intprops-internal.h
+ lib/intprops.h
+ lib/inttypes.in.h
+ lib/langinfo.in.h
+ lib/lc-charset-dispatch.c
+ lib/lc-charset-dispatch.h
+ lib/libc-config.h
+ lib/limits.in.h
+ lib/localcharset.c
+ lib/localcharset.h
+ lib/locale.in.h
+ lib/localeconv.c
+ lib/long-options.c
+ lib/long-options.h
+ lib/lseek.c
+ lib/lstat.c
+ lib/malloc.c
+ lib/malloc/dynarray-skeleton.c
+ lib/malloc/dynarray.h
+ lib/malloc/dynarray_at_failure.c
+ lib/malloc/dynarray_emplace_enlarge.c
+ lib/malloc/dynarray_finalize.c
+ lib/malloc/dynarray_resize.c
+ lib/malloc/dynarray_resize_clear.c
+ lib/malloc/scratch_buffer.h
+ lib/malloc/scratch_buffer_grow.c
+ lib/malloc/scratch_buffer_grow_preserve.c
+ lib/malloc/scratch_buffer_set_array_size.c
+ lib/malloca.c
+ lib/malloca.h
+ lib/mbrtowc-impl-utf8.h
+ lib/mbrtowc-impl.h
+ lib/mbrtowc.c
+ lib/mbsinit.c
+ lib/mbtowc-impl.h
+ lib/mbtowc-lock.c
+ lib/mbtowc-lock.h
+ lib/mbtowc.c
+ lib/mempcpy.c
+ lib/minmax.h
+ lib/mkdir.c
+ lib/mkstemp.c
+ lib/msvc-inval.c
+ lib/msvc-inval.h
+ lib/msvc-nothrow.c
+ lib/msvc-nothrow.h
+ lib/nl_langinfo-lock.c
+ lib/nl_langinfo.c
+ lib/open.c
+ lib/pathmax.h
+ lib/progname.c
+ lib/progname.h
+ lib/quote.h
+ lib/quotearg.c
+ lib/quotearg.h
+ lib/rawmemchr.c
+ lib/rawmemchr.valgrind
+ lib/read.c
+ lib/readlink.c
+ lib/realloc.c
+ lib/reallocarray.c
+ lib/regcomp.c
+ lib/regex.c
+ lib/regex.h
+ lib/regex_internal.c
+ lib/regex_internal.h
+ lib/regexec.c
+ lib/rpmatch.c
+ lib/safe-read.c
+ lib/safe-read.h
+ lib/scratch_buffer.h
+ lib/setlocale-lock.c
+ lib/setlocale_null.c
+ lib/setlocale_null.h
+ lib/sleep.c
+ lib/stat-time.c
+ lib/stat-time.h
+ lib/stat-w32.c
+ lib/stat-w32.h
+ lib/stat.c
+ lib/stdarg.in.h
+ lib/stdckdint.in.h
+ lib/stddef.in.h
+ lib/stdint.in.h
+ lib/stdio-impl.h
+ lib/stdio-read.c
+ lib/stdio-write.c
+ lib/stdio.in.h
+ lib/stdlib.in.h
+ lib/strdup.c
+ lib/streq.h
+ lib/strerror-override.c
+ lib/strerror-override.h
+ lib/strerror.c
+ lib/string.in.h
+ lib/stripslash.c
+ lib/strtol.c
+ lib/strtoll.c
+ lib/strtoul.c
+ lib/strtoull.c
+ lib/sys-limits.h
+ lib/sys_random.in.h
+ lib/sys_stat.in.h
+ lib/sys_types.in.h
+ lib/tempname.c
+ lib/tempname.h
+ lib/time.in.h
+ lib/unistd.c
+ lib/unistd.in.h
+ lib/unlink.c
+ lib/usleep.c
+ lib/verify.h
+ lib/version-etc-fsf.c
+ lib/version-etc.c
+ lib/version-etc.h
+ lib/warn-on-use.h
+ lib/wchar.in.h
+ lib/wcrtomb.c
+ lib/wctype-h.c
+ lib/wctype.in.h
+ lib/windows-initguard.h
+ lib/windows-mutex.c
+ lib/windows-mutex.h
+ lib/windows-once.c
+ lib/windows-once.h
+ lib/windows-recmutex.c
+ lib/windows-recmutex.h
+ lib/windows-rwlock.c
+ lib/windows-rwlock.h
+ lib/xalloc-die.c
+ lib/xalloc-oversized.h
+ lib/xalloc.h
+ lib/xmalloc.c
+ lib/xstrtol.c
+ lib/xstrtol.h
+ lib/xstrtoll.c
+ lib/xstrtoul.c
+ lib/xstrtoull.c
+ m4/00gnulib.m4
+ m4/__inline.m4
+ m4/absolute-header.m4
+ m4/alloca.m4
+ m4/arpa_inet_h.m4
+ m4/assert.m4
+ m4/assert_h.m4
+ m4/btowc.m4
+ m4/build-to-host.m4
+ m4/builtin-expect.m4
+ m4/c-bool.m4
+ m4/calloc.m4
+ m4/canonicalize.m4
+ m4/clock_time.m4
+ m4/close.m4
+ m4/codeset.m4
+ m4/config-h.m4
+ m4/configmake.m4
+ m4/ctype_h.m4
+ m4/double-slash-root.m4
+ m4/dup2.m4
+ m4/eealloc.m4
+ m4/environ.m4
+ m4/errno_h.m4
+ m4/error.m4
+ m4/error_h.m4
+ m4/extensions.m4
+ m4/extern-inline.m4
+ m4/fcntl-o.m4
+ m4/fcntl.m4
+ m4/fcntl_h.m4
+ m4/fdopen.m4
+ m4/flexmember.m4
+ m4/fpending.m4
+ m4/free.m4
+ m4/fstat.m4
+ m4/fsync.m4
+ m4/ftruncate.m4
+ m4/getcwd.m4
+ m4/getdtablesize.m4
+ m4/getopt.m4
+ m4/getpagesize.m4
+ m4/getprogname.m4
+ m4/getrandom.m4
+ m4/gettimeofday.m4
+ m4/gnulib-common.m4
+ m4/include_next.m4
+ m4/inet_pton.m4
+ m4/intl-thread-locale.m4
+ m4/intlmacosx.m4
+ m4/inttypes.m4
+ m4/ioctl.m4
+ m4/isblank.m4
+ m4/langinfo_h.m4
+ m4/largefile.m4
+ m4/lcmessage.m4
+ m4/lib-ignore.m4
+ m4/limits-h.m4
+ m4/localcharset.m4
+ m4/locale-fr.m4
+ m4/locale-ja.m4
+ m4/locale-tr.m4
+ m4/locale-zh.m4
+ m4/locale_h.m4
+ m4/localeconv.m4
+ m4/localename.m4
+ m4/lock.m4
+ m4/lseek.m4
+ m4/lstat.m4
+ m4/malloc.m4
+ m4/malloca.m4
+ m4/manywarnings-c++.m4
+ m4/manywarnings.m4
+ m4/mbrtowc.m4
+ m4/mbsinit.m4
+ m4/mbstate_t.m4
+ m4/mbtowc.m4
+ m4/memchr.m4
+ m4/mempcpy.m4
+ m4/minmax.m4
+ m4/mkdir.m4
+ m4/mkstemp.m4
+ m4/mmap-anon.m4
+ m4/mode_t.m4
+ m4/msvc-inval.m4
+ m4/msvc-nothrow.m4
+ m4/multiarch.m4
+ m4/musl.m4
+ m4/nanosleep.m4
+ m4/netinet_in_h.m4
+ m4/nl_langinfo.m4
+ m4/nocrash.m4
+ m4/off_t.m4
+ m4/open-cloexec.m4
+ m4/open-slash.m4
+ m4/open.m4
+ m4/pathmax.m4
+ m4/perror.m4
+ m4/pid_t.m4
+ m4/pipe.m4
+ m4/priv-set.m4
+ m4/pselect.m4
+ m4/pthread-thread.m4
+ m4/pthread_h.m4
+ m4/pthread_rwlock_rdlock.m4
+ m4/pthread_sigmask.m4
+ m4/putenv.m4
+ m4/quote.m4
+ m4/quotearg.m4
+ m4/raise.m4
+ m4/rawmemchr.m4
+ m4/read.m4
+ m4/readlink.m4
+ m4/realloc.m4
+ m4/reallocarray.m4
+ m4/regex.m4
+ m4/rpmatch.m4
+ m4/safe-read.m4
+ m4/sched_h.m4
+ m4/sched_yield.m4
+ m4/select.m4
+ m4/semaphore.m4
+ m4/setenv.m4
+ m4/setlocale.m4
+ m4/setlocale_null.m4
+ m4/signal_h.m4
+ m4/signalblocking.m4
+ m4/sleep.m4
+ m4/socketlib.m4
+ m4/sockets.m4
+ m4/socklen.m4
+ m4/sockpfaf.m4
+ m4/ssize_t.m4
+ m4/stat-time.m4
+ m4/stat.m4
+ m4/std-gnu11.m4
+ m4/stdalign.m4
+ m4/stdarg.m4
+ m4/stddef_h.m4
+ m4/stdint.m4
+ m4/stdio_h.m4
+ m4/stdlib_h.m4
+ m4/strdup.m4
+ m4/strerror.m4
+ m4/strerror_r.m4
+ m4/string_h.m4
+ m4/strtoll.m4
+ m4/strtoull.m4
+ m4/symlink.m4
+ m4/sys_ioctl_h.m4
+ m4/sys_random_h.m4
+ m4/sys_select_h.m4
+ m4/sys_socket_h.m4
+ m4/sys_stat_h.m4
+ m4/sys_time_h.m4
+ m4/sys_types_h.m4
+ m4/sys_uio_h.m4
+ m4/tempname.m4
+ m4/thread.m4
+ m4/threadlib.m4
+ m4/time.m4
+ m4/time_h.m4
+ m4/unistd_h.m4
+ m4/unlink.m4
+ m4/unlinkdir.m4
+ m4/usleep.m4
+ m4/vararrays.m4
+ m4/version-etc.m4
+ m4/visibility.m4
+ m4/warn-on-use.m4
+ m4/warnings.m4
+ m4/wchar_h.m4
+ m4/wchar_t.m4
+ m4/wcrtomb.m4
+ m4/wctob.m4
+ m4/wctomb.m4
+ m4/wctype_h.m4
+ m4/wint_t.m4
+ m4/xalloc.m4
+ m4/xstrtol.m4
+ m4/yield.m4
+ m4/zzgnulib.m4
+ tests/atomic-int-gnulib.h
+ tests/init.sh
+ tests/locale.c
+ tests/macros.h
+ tests/nap.h
+ tests/null-ptr.h
+ tests/signature.h
+ tests/test-accept.c
+ tests/test-alignasof.c
+ tests/test-alloca-opt.c
+ tests/test-argmatch.c
+ tests/test-arpa_inet.c
+ tests/test-assert.c
+ tests/test-binary-io.c
+ tests/test-binary-io.sh
+ tests/test-bind.c
+ tests/test-btowc.c
+ tests/test-btowc1.sh
+ tests/test-btowc2.sh
+ tests/test-c-ctype.c
+ tests/test-c-strcase.sh
+ tests/test-c-strcasecmp.c
+ tests/test-c-strcasestr.c
+ tests/test-c-strncasecmp.c
+ tests/test-calloc-gnu.c
+ tests/test-canonicalize-lgpl.c
+ tests/test-cloexec.c
+ tests/test-close.c
+ tests/test-connect.c
+ tests/test-ctype.c
+ tests/test-dirname.c
+ tests/test-dup2.c
+ tests/test-dynarray.c
+ tests/test-environ.c
+ tests/test-errno.c
+ tests/test-error.c
+ tests/test-error.sh
+ tests/test-fcntl-h.c
+ tests/test-fcntl.c
+ tests/test-fdopen.c
+ tests/test-fgetc.c
+ tests/test-fpending.c
+ tests/test-fpending.sh
+ tests/test-fputc.c
+ tests/test-fread.c
+ tests/test-free.c
+ tests/test-fstat.c
+ tests/test-fsync.c
+ tests/test-ftruncate.c
+ tests/test-ftruncate.sh
+ tests/test-fwrite.c
+ tests/test-getcwd-lgpl.c
+ tests/test-getdtablesize.c
+ tests/test-getopt-gnu.c
+ tests/test-getopt-main.h
+ tests/test-getopt-posix.c
+ tests/test-getopt.h
+ tests/test-getopt_long.h
+ tests/test-getprogname.c
+ tests/test-getrandom.c
+ tests/test-gettimeofday.c
+ tests/test-hard-locale.c
+ tests/test-ignore-value.c
+ tests/test-inet_pton.c
+ tests/test-init.sh
+ tests/test-intprops.c
+ tests/test-inttypes.c
+ tests/test-ioctl.c
+ tests/test-isblank.c
+ tests/test-langinfo.c
+ tests/test-limits-h.c
+ tests/test-listen.c
+ tests/test-localcharset.c
+ tests/test-locale.c
+ tests/test-localeconv.c
+ tests/test-localename.c
+ tests/test-lock.c
+ tests/test-lseek.c
+ tests/test-lseek.sh
+ tests/test-lstat.c
+ tests/test-lstat.h
+ tests/test-malloc-gnu.c
+ tests/test-malloca.c
+ tests/test-mbrtowc-w32-1.sh
+ tests/test-mbrtowc-w32-2.sh
+ tests/test-mbrtowc-w32-3.sh
+ tests/test-mbrtowc-w32-4.sh
+ tests/test-mbrtowc-w32-5.sh
+ tests/test-mbrtowc-w32-6.sh
+ tests/test-mbrtowc-w32-7.sh
+ tests/test-mbrtowc-w32.c
+ tests/test-mbrtowc.c
+ tests/test-mbrtowc1.sh
+ tests/test-mbrtowc2.sh
+ tests/test-mbrtowc3.sh
+ tests/test-mbrtowc4.sh
+ tests/test-mbrtowc5.sh
+ tests/test-mbsinit.c
+ tests/test-mbsinit.sh
+ tests/test-memchr.c
+ tests/test-mkdir.c
+ tests/test-mkdir.h
+ tests/test-nanosleep.c
+ tests/test-netinet_in.c
+ tests/test-nl_langinfo-mt.c
+ tests/test-nl_langinfo1.c
+ tests/test-nl_langinfo1.sh
+ tests/test-nl_langinfo2.c
+ tests/test-nl_langinfo2.sh
+ tests/test-once.c
+ tests/test-open.c
+ tests/test-open.h
+ tests/test-pathmax.c
+ tests/test-perror.c
+ tests/test-perror.sh
+ tests/test-perror2.c
+ tests/test-pipe.c
+ tests/test-priv-set.c
+ tests/test-pselect.c
+ tests/test-pthread-thread.c
+ tests/test-pthread.c
+ tests/test-pthread_sigmask1.c
+ tests/test-pthread_sigmask2.c
+ tests/test-quotearg-simple.c
+ tests/test-quotearg.h
+ tests/test-raise.c
+ tests/test-rawmemchr.c
+ tests/test-read.c
+ tests/test-readlink.c
+ tests/test-readlink.h
+ tests/test-realloc-gnu.c
+ tests/test-reallocarray.c
+ tests/test-regex.c
+ tests/test-rwlock1.c
+ tests/test-sched.c
+ tests/test-scratch-buffer.c
+ tests/test-select-fd.c
+ tests/test-select-in.sh
+ tests/test-select-out.sh
+ tests/test-select-stdin.c
+ tests/test-select.c
+ tests/test-select.h
+ tests/test-setenv.c
+ tests/test-setlocale1.c
+ tests/test-setlocale1.sh
+ tests/test-setlocale2.c
+ tests/test-setlocale2.sh
+ tests/test-setlocale_null-mt-all.c
+ tests/test-setlocale_null-mt-one.c
+ tests/test-setlocale_null.c
+ tests/test-setsockopt.c
+ tests/test-signal-h.c
+ tests/test-sigprocmask.c
+ tests/test-sleep.c
+ tests/test-sockets.c
+ tests/test-stat-time.c
+ tests/test-stat.c
+ tests/test-stat.h
+ tests/test-stdbool.c
+ tests/test-stdckdint.c
+ tests/test-stddef.c
+ tests/test-stdint.c
+ tests/test-stdio.c
+ tests/test-stdlib.c
+ tests/test-strerror.c
+ tests/test-strerror_r.c
+ tests/test-string.c
+ tests/test-strtoll.c
+ tests/test-strtoull.c
+ tests/test-symlink.c
+ tests/test-symlink.h
+ tests/test-sys_ioctl.c
+ tests/test-sys_random.c
+ tests/test-sys_select.c
+ tests/test-sys_socket.c
+ tests/test-sys_stat.c
+ tests/test-sys_time.c
+ tests/test-sys_types.c
+ tests/test-sys_uio.c
+ tests/test-sys_wait.h
+ tests/test-thread_create.c
+ tests/test-thread_self.c
+ tests/test-time-h.c
+ tests/test-time.c
+ tests/test-unistd.c
+ tests/test-unlink.c
+ tests/test-unlink.h
+ tests/test-unsetenv.c
+ tests/test-update-copyright.sh
+ tests/test-usleep.c
+ tests/test-vc-list-files-cvs.sh
+ tests/test-vc-list-files-git.sh
+ tests/test-verify-try.c
+ tests/test-verify.c
+ tests/test-verify.sh
+ tests/test-version-etc.c
+ tests/test-version-etc.sh
+ tests/test-wchar.c
+ tests/test-wcrtomb-w32-1.sh
+ tests/test-wcrtomb-w32-2.sh
+ tests/test-wcrtomb-w32-3.sh
+ tests/test-wcrtomb-w32-4.sh
+ tests/test-wcrtomb-w32-5.sh
+ tests/test-wcrtomb-w32-6.sh
+ tests/test-wcrtomb-w32-7.sh
+ tests/test-wcrtomb-w32.c
+ tests/test-wcrtomb.c
+ tests/test-wcrtomb.sh
+ tests/test-wctype-h.c
+ tests/test-xalloc-die.c
+ tests/test-xalloc-die.sh
+ tests/test-xstrtol.c
+ tests/test-xstrtol.sh
+ tests/test-xstrtoll.c
+ tests/test-xstrtoll.sh
+ tests/test-xstrtoul.c
+ tests/test-xstrtoull.c
+ tests/zerosize-ptr.h
+ tests=lib/_Noreturn.h
+ tests=lib/accept.c
+ tests=lib/arg-nonnull.h
+ tests=lib/arpa_inet.in.h
+ tests=lib/binary-io.c
+ tests=lib/binary-io.h
+ tests=lib/bind.c
+ tests=lib/c++defs.h
+ tests=lib/c-strcasestr.c
+ tests=lib/c-strcasestr.h
+ tests=lib/connect.c
+ tests=lib/ctype.in.h
+ tests=lib/fdopen.c
+ tests=lib/flexmember.h
+ tests=lib/ftruncate.c
+ tests=lib/getcwd-lgpl.c
+ tests=lib/getpagesize.c
+ tests=lib/gettimeofday.c
+ tests=lib/glthread/thread.c
+ tests=lib/glthread/thread.h
+ tests=lib/glthread/yield.h
+ tests=lib/ignore-value.h
+ tests=lib/inet_pton.c
+ tests=lib/ioctl.c
+ tests=lib/isblank.c
+ tests=lib/listen.c
+ tests=lib/localename-table.c
+ tests=lib/localename-table.h
+ tests=lib/localename.c
+ tests=lib/localename.h
+ tests=lib/memchr.c
+ tests=lib/memchr.valgrind
+ tests=lib/nanosleep.c
+ tests=lib/netinet_in.in.h
+ tests=lib/perror.c
+ tests=lib/pipe.c
+ tests=lib/priv-set.c
+ tests=lib/priv-set.h
+ tests=lib/pselect.c
+ tests=lib/pthread-thread.c
+ tests=lib/pthread.in.h
+ tests=lib/pthread_sigmask.c
+ tests=lib/putenv.c
+ tests=lib/raise.c
+ tests=lib/root-uid.h
+ tests=lib/same-inode.h
+ tests=lib/sched.in.h
+ tests=lib/sched_yield.c
+ tests=lib/select.c
+ tests=lib/setenv.c
+ tests=lib/setlocale.c
+ tests=lib/setsockopt.c
+ tests=lib/signal.in.h
+ tests=lib/sigprocmask.c
+ tests=lib/socket.c
+ tests=lib/sockets.c
+ tests=lib/sockets.h
+ tests=lib/str-two-way.h
+ tests=lib/strerror_r.c
+ tests=lib/symlink.c
+ tests=lib/sys_ioctl.in.h
+ tests=lib/sys_select.in.h
+ tests=lib/sys_socket.c
+ tests=lib/sys_socket.in.h
+ tests=lib/sys_time.in.h
+ tests=lib/sys_uio.in.h
+ tests=lib/thread-optim.h
+ tests=lib/time.c
+ tests=lib/unlinkdir.c
+ tests=lib/unlinkdir.h
+ tests=lib/unsetenv.c
+ tests=lib/w32sock.h
+ tests=lib/warn-on-use.h
+ tests=lib/wctob.c
+ tests=lib/wctomb-impl.h
+ tests=lib/wctomb.c
+ tests=lib/windows-thread.c
+ tests=lib/windows-thread.h
+ tests=lib/windows-tls.c
+ tests=lib/windows-tls.h
+ tests=lib/xstrtol-error.c
+ tests=lib/xstrtol-error.h
+ top/GNUmakefile
+ top/maint.mk
+])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..f46ff14
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,199 @@
+# iconv.m4 serial 9 (gettext-0.18)
+dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+ dnl those with the standalone portable GNU libiconv installed).
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+ dnl accordingly.
+ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+ dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed libiconv and not disabled its use
+ dnl via --without-libiconv-prefix, he wants to use it. The first
+ dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+ am_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+ AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
+ am_cv_func_iconv="no, consider installing GNU libiconv"
+ am_cv_lib_iconv=no
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_func_iconv=yes])
+ if test "$am_cv_func_iconv" != yes; then
+ am_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBICONV"
+ AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+ [iconv_t cd = iconv_open("","");
+ iconv(cd,NULL,NULL,NULL,NULL);
+ iconv_close(cd);],
+ [am_cv_lib_iconv=yes]
+ [am_cv_func_iconv=yes])
+ LIBS="$am_save_LIBS"
+ fi
+ ])
+ if test "$am_cv_func_iconv" = yes; then
+ AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
+ dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
+ am_save_LIBS="$LIBS"
+ if test $am_cv_lib_iconv = yes; then
+ LIBS="$LIBS $LIBICONV"
+ fi
+ AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+ /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+ returns. */
+ {
+ iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+ if (cd_utf8_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\342\202\254"; /* EURO SIGN */
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_utf8_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+ /* Test against Solaris 10 bug: Failures are not distinguishable from
+ successful returns. */
+ {
+ iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
+ if (cd_ascii_to_88591 != (iconv_t)(-1))
+ {
+ static const char input[] = "\263";
+ char buf[10];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_ascii_to_88591,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if (res == 0)
+ return 1;
+ }
+ }
+#if 0 /* This bug could be worked around by the caller. */
+ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
+ {
+ iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+ if (cd_88591_to_utf8 != (iconv_t)(-1))
+ {
+ static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+ char buf[50];
+ const char *inptr = input;
+ size_t inbytesleft = strlen (input);
+ char *outptr = buf;
+ size_t outbytesleft = sizeof (buf);
+ size_t res = iconv (cd_88591_to_utf8,
+ (char **) &inptr, &inbytesleft,
+ &outptr, &outbytesleft);
+ if ((int)res > 0)
+ return 1;
+ }
+ }
+#endif
+ /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+ provided. */
+ if (/* Try standardized names. */
+ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+ /* Try IRIX, OSF/1 names. */
+ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+ /* Try AIX names. */
+ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+ /* Try HP-UX names. */
+ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+ return 1;
+ return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+ [case "$host_os" in
+ aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+ *) am_cv_func_iconv_works="guessing yes" ;;
+ esac])
+ LIBS="$am_save_LIBS"
+ ])
+ case "$am_cv_func_iconv_works" in
+ *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+ *) am_func_iconv=yes ;;
+ esac
+ else
+ am_func_iconv=no am_cv_lib_iconv=no
+ fi
+ if test "$am_func_iconv" = yes; then
+ AC_DEFINE([HAVE_ICONV], [1],
+ [Define if you have the iconv() function and it works.])
+ fi
+ if test "$am_cv_lib_iconv" = yes; then
+ AC_MSG_CHECKING([how to link with libiconv])
+ AC_MSG_RESULT([$LIBICONV])
+ else
+ dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+ dnl either.
+ CPPFLAGS="$am_save_CPPFLAGS"
+ LIBICONV=
+ LTLIBICONV=
+ fi
+ AC_SUBST([LIBICONV])
+ AC_SUBST([LTLIBICONV])
+])
+
+AC_DEFUN([AM_ICONV],
+[
+ AM_ICONV_LINK
+ if test "$am_cv_func_iconv" = yes; then
+ AC_MSG_CHECKING([for iconv declaration])
+ AC_CACHE_VAL([am_cv_proto_iconv], [
+ AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
+ am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+ am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+ AC_MSG_RESULT([
+ $am_cv_proto_iconv])
+ AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
+ [Define as const if the declaration of iconv() needs const.])
+ fi
+])
diff --git a/m4/include_next.m4 b/m4/include_next.m4
new file mode 100644
index 0000000..9f19215
--- /dev/null
+++ b/m4/include_next.m4
@@ -0,0 +1,224 @@
+# include_next.m4 serial 26
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Derek Price.
+
+dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER,
+dnl and PRAGMA_COLUMNS.
+dnl
+dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
+dnl 'include' otherwise.
+dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
+dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
+dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
+dnl '#pragma GCC system_header' has the same effect as if the file was found
+dnl through the include search path specified with '-isystem' options (as
+dnl opposed to the search path specified with '-I' options). Namely, gcc
+dnl does not warn about some things, and on some systems (Solaris and Interix)
+dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
+dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
+dnl of plain '__STDC__'.
+dnl
+dnl PRAGMA_COLUMNS can be used in files that override system header files, so
+dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
+dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
+dnl has the effect of truncating the lines of that file and all files that it
+dnl includes to 80 columns) and the gnulib file has lines longer than 80
+dnl columns.
+
+AC_DEFUN([gl_INCLUDE_NEXT],
+[
+ AC_LANG_PREPROC_REQUIRE()
+ AC_CACHE_CHECK([whether the preprocessor supports include_next],
+ [gl_cv_have_include_next],
+ [rm -rf conftestd1a conftestd1b conftestd2
+ mkdir conftestd1a conftestd1b conftestd2
+ dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+ dnl AIX 6.1 support include_next when used as first preprocessor directive
+ dnl in a file, but not when preceded by another include directive. Check
+ dnl for this bug by including <stdio.h>.
+ dnl Additionally, with this same compiler, include_next is a no-op when
+ dnl used in a header file that was included by specifying its absolute
+ dnl file name. Despite these two bugs, include_next is used in the
+ dnl compiler's <math.h>. By virtue of the second bug, we need to use
+ dnl include_next as well in this case.
+ cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+ cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+ cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+ gl_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+dnl We intentionally avoid using AC_LANG_SOURCE here.
+ AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+ [gl_cv_have_include_next=yes],
+ [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+ AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+ [gl_cv_have_include_next=buggy],
+ [gl_cv_have_include_next=no])
+ ])
+ CPPFLAGS="$gl_save_CPPFLAGS"
+ rm -rf conftestd1a conftestd1b conftestd2
+ ])
+ PRAGMA_SYSTEM_HEADER=
+ if test $gl_cv_have_include_next = yes; then
+ INCLUDE_NEXT=include_next
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+ if test -n "$GCC"; then
+ PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+ fi
+ else
+ if test $gl_cv_have_include_next = buggy; then
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+ else
+ INCLUDE_NEXT=include
+ INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+ fi
+ fi
+ AC_SUBST([INCLUDE_NEXT])
+ AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
+ AC_SUBST([PRAGMA_SYSTEM_HEADER])
+
+ dnl HP NonStop systems, which define __TANDEM, limit the line length
+ dnl after including some system header files.
+ AC_CACHE_CHECK([whether source code line length is unlimited],
+ [gl_cv_source_line_length_unlimited],
+ [AC_EGREP_CPP([choke me],
+ [
+#ifdef __TANDEM
+choke me
+#endif
+ ],
+ [gl_cv_source_line_length_unlimited=no],
+ [gl_cv_source_line_length_unlimited=yes])
+ ])
+ if test $gl_cv_source_line_length_unlimited = no; then
+ PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+ else
+ PRAGMA_COLUMNS=
+ fi
+ AC_SUBST([PRAGMA_COLUMNS])
+])
+
+# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------------
+# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
+# '<foo.h>'; otherwise define it to be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# That way, a header file with the following line:
+# #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
+# behaves (after sed substitution) as if it contained
+# #include_next <foo.h>
+# even if the compiler does not support include_next.
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+#
+# This macro also checks whether each header exists, by invoking
+# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+ gl_NEXT_HEADERS_INTERNAL([$1], [check])
+])
+
+# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------
+# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
+# This is suitable for headers like <stddef.h> that are standardized by C89
+# and therefore can be assumed to exist.
+AC_DEFUN([gl_NEXT_HEADERS],
+[
+ gl_NEXT_HEADERS_INTERNAL([$1], [assume])
+])
+
+# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
+AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+[
+ AC_REQUIRE([gl_INCLUDE_NEXT])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ m4_if([$2], [check],
+ [AC_CHECK_HEADERS_ONCE([$1])
+ ])
+
+ m4_foreach_w([gl_HEADER_NAME], [$1],
+ [AS_VAR_PUSHDEF([gl_next_header],
+ [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+ if test $gl_cv_have_include_next = yes; then
+ AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+ else
+ AC_CACHE_CHECK(
+ [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+ [gl_next_header],
+ [m4_if([$2], [check],
+ [AS_VAR_PUSHDEF([gl_header_exists],
+ [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+ if test AS_VAR_GET([gl_header_exists]) = yes; then
+ AS_VAR_POPDEF([gl_header_exists])
+ ])
+ gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+ AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+ AS_VAR_SET([gl_next_header], ['"'$gl_header'"'])
+ m4_if([$2], [check],
+ [else
+ AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+ fi
+ ])
+ ])
+ fi
+ AC_SUBST(
+ AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+ [AS_VAR_GET([gl_next_header])])
+ if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+ gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+ else
+ # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+ gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
+ fi
+ AC_SUBST(
+ AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+ [$gl_next_as_first_directive])
+ AS_VAR_POPDEF([gl_next_header])])
+])
+
+# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
+# this fallback is safe for all earlier autoconf versions.
+m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff --git a/m4/inet_pton.m4 b/m4/inet_pton.m4
new file mode 100644
index 0000000..94695c1
--- /dev/null
+++ b/m4/inet_pton.m4
@@ -0,0 +1,70 @@
+# inet_pton.m4 serial 19
+dnl Copyright (C) 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_INET_PTON],
+[
+ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
+
+ dnl Persuade Solaris <arpa/inet.h> to declare inet_pton.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ dnl Most platforms that provide inet_pton define it in libc.
+ dnl Solaris 8..10 provide inet_pton in libnsl instead.
+ dnl Solaris 2.6..7 provide inet_pton in libresolv instead.
+ dnl Haiku provides it in -lnetwork.
+ dnl Native Windows provides it in -lws2_32 instead, with a declaration in
+ dnl <ws2tcpip.h>, and it uses stdcall calling convention, not cdecl
+ dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it).
+ HAVE_INET_PTON=1
+ INET_PTON_LIB=
+ gl_PREREQ_SYS_H_WINSOCK2
+ if test $HAVE_WINSOCK2_H = 1; then
+ dnl It needs to be overridden, because the stdcall calling convention
+ dnl is not compliant with POSIX. Set REPLACE_INET_PTON in order to avoid
+ dnl a name conflict at the linker level, even though the header file
+ dnl <ws2tcpip.h> declares inet_pton only if _WIN32_WINNT >= 0x0600.
+ REPLACE_INET_PTON=1
+ AC_CHECK_DECLS([inet_pton],,, [[#include <ws2tcpip.h>]])
+ if test $ac_cv_have_decl_inet_pton = yes; then
+ INET_PTON_LIB="-lws2_32"
+ else
+ HAVE_DECL_INET_PTON=0
+ fi
+ else
+ gl_save_LIBS=$LIBS
+ AC_SEARCH_LIBS([inet_pton], [nsl resolv network], [],
+ [AC_CHECK_FUNCS([inet_pton])
+ if test $ac_cv_func_inet_pton = no; then
+ HAVE_INET_PTON=0
+ fi
+ ])
+ LIBS=$gl_save_LIBS
+
+ if test "$ac_cv_search_inet_pton" != "no" \
+ && test "$ac_cv_search_inet_pton" != "none required"; then
+ INET_PTON_LIB="$ac_cv_search_inet_pton"
+ fi
+
+ AC_CHECK_HEADERS_ONCE([netdb.h])
+ AC_CHECK_DECLS([inet_pton],,,
+ [[#include <arpa/inet.h>
+ #if HAVE_NETDB_H
+ # include <netdb.h>
+ #endif
+ ]])
+ if test $ac_cv_have_decl_inet_pton = no; then
+ HAVE_DECL_INET_PTON=0
+ fi
+ fi
+ AC_SUBST([INET_PTON_LIB])
+])
+
+# Prerequisites of lib/inet_pton.c.
+AC_DEFUN([gl_PREREQ_INET_PTON], [
+ AC_REQUIRE([gl_SOCKET_FAMILIES])
+])
diff --git a/m4/intl-thread-locale.m4 b/m4/intl-thread-locale.m4
new file mode 100644
index 0000000..90bc3b1
--- /dev/null
+++ b/m4/intl-thread-locale.m4
@@ -0,0 +1,219 @@
+# intl-thread-locale.m4 serial 10
+dnl Copyright (C) 2015-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Check how to retrieve the name of a per-thread locale (POSIX locale_t).
+dnl Sets gt_nameless_locales.
+AC_DEFUN([gt_INTL_THREAD_LOCALE_NAME],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ dnl Persuade Solaris <locale.h> to define 'locale_t'.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl Test whether uselocale() exists and works at all.
+ gt_FUNC_USELOCALE
+
+ dnl On OpenBSD >= 6.2, the locale_t type and the uselocale(), newlocale(),
+ dnl duplocale(), freelocale() functions exist but are effectively useless,
+ dnl because the locale_t value depends only on the LC_CTYPE category of the
+ dnl locale and furthermore contains only one bit of information (it
+ dnl distinguishes the "C" locale from the *.UTF-8 locales). See
+ dnl <https://cvsweb.openbsd.org/src/lib/libc/locale/newlocale.c?rev=1.1&content-type=text/x-cvsweb-markup>.
+ dnl In the setlocale() implementation they have thought about the programs
+ dnl that use the API ("Even though only LC_CTYPE has any effect in the
+ dnl OpenBSD base system, store complete information about the global locale,
+ dnl such that third-party software can access it"), but for uselocale()
+ dnl they did not think about the programs.
+ dnl In this situation, even the HAVE_NAMELESS_LOCALES support does not work.
+ dnl So, define HAVE_FAKE_LOCALES and disable all locale_t support.
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ AC_CHECK_HEADERS_ONCE([xlocale.h])
+ AC_CACHE_CHECK([for fake locale system (OpenBSD)],
+ [gt_cv_locale_fake],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+int main ()
+{
+ locale_t loc1, loc2;
+ if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) return 1;
+ if (setlocale (LC_ALL, "fr_FR.UTF-8") == NULL) return 1;
+ loc1 = newlocale (LC_ALL_MASK, "de_DE.UTF-8", (locale_t)0);
+ loc2 = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", (locale_t)0);
+ return !(loc1 == loc2);
+}]])],
+ [gt_cv_locale_fake=yes],
+ [gt_cv_locale_fake=no],
+ [dnl Guess the locale system is fake only on OpenBSD.
+ case "$host_os" in
+ openbsd*) gt_cv_locale_fake="guessing yes" ;;
+ *) gt_cv_locale_fake="guessing no" ;;
+ esac
+ ])
+ ])
+ ;;
+ *) gt_cv_locale_fake=no ;;
+ esac
+ case "$gt_cv_locale_fake" in
+ *yes)
+ gt_fake_locales=yes
+ AC_DEFINE([HAVE_FAKE_LOCALES], [1],
+ [Define if the locale_t type contains insufficient information, as on OpenBSD.])
+ ;;
+ *)
+ gt_fake_locales=no
+ ;;
+ esac
+
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ AC_CACHE_CHECK([for Solaris 11.4 locale system],
+ [gt_cv_locale_solaris114],
+ [case "$host_os" in
+ solaris*)
+ dnl Test whether <locale.h> defines locale_t as a typedef of
+ dnl 'struct _LC_locale_t **' (whereas Illumos defines it as a
+ dnl typedef of 'struct _locale *').
+ dnl Another possible test would be to include <sys/localedef.h>
+ dnl and test whether it defines the _LC_core_data_locale_t type.
+ dnl This type was added in Solaris 11.4.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <locale.h>
+ struct _LC_locale_t *x;
+ locale_t y;
+ ]],
+ [[*y = x;]])],
+ [gt_cv_locale_solaris114=yes],
+ [gt_cv_locale_solaris114=no])
+ ;;
+ *) gt_cv_locale_solaris114=no ;;
+ esac
+ ])
+ ;;
+ *) gt_cv_locale_solaris114=no ;;
+ esac
+ if test $gt_cv_locale_solaris114 = yes; then
+ AC_DEFINE([HAVE_SOLARIS114_LOCALES], [1],
+ [Define if the locale_t type is as on Solaris 11.4.])
+ fi
+
+ dnl Solaris 12 will maybe provide getlocalename_l. If it does, it will
+ dnl improve the implementation of gl_locale_name_thread(), by removing
+ dnl the use of undocumented structures.
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ AC_CHECK_FUNCS([getlocalename_l])
+ ;;
+ esac
+
+ dnl This code is for platforms where the locale_t type does not provide access
+ dnl to the name of each locale category. This code has the drawback that it
+ dnl requires the gnulib overrides of 'newlocale', 'duplocale', 'freelocale',
+ dnl which is a problem for GNU libunistring. Therefore try hard to avoid
+ dnl enabling this code!
+ gt_nameless_locales=no
+ case "$host_os" in
+ dnl It's needed on AIX 7.2.
+ aix*)
+ gt_nameless_locales=yes
+ AC_DEFINE([HAVE_NAMELESS_LOCALES], [1],
+ [Define if the locale_t type does not contain the name of each locale category.])
+ ;;
+ esac
+
+ dnl We cannot support uselocale() on platforms where the locale_t type is
+ dnl fake. So, set
+ dnl gt_good_uselocale = gt_working_uselocale && !gt_fake_locales.
+ if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then
+ gt_good_uselocale=yes
+ AC_DEFINE([HAVE_GOOD_USELOCALE], [1],
+ [Define if the uselocale exists, may be safely called, and returns sufficient information.])
+ else
+ gt_good_uselocale=no
+ fi
+
+ dnl Set gt_localename_enhances_locale_funcs to indicate whether localename.c
+ dnl overrides newlocale(), duplocale(), freelocale() to keep track of locale
+ dnl names.
+ if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then
+ gt_localename_enhances_locale_funcs=yes
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=1
+ AC_DEFINE([LOCALENAME_ENHANCE_LOCALE_FUNCS], [1],
+ [Define if localename.c overrides newlocale(), duplocale(), freelocale().])
+ else
+ gt_localename_enhances_locale_funcs=no
+ fi
+])
+
+dnl Tests whether uselocale() exists and is usable.
+dnl Sets gt_working_uselocale and defines HAVE_WORKING_USELOCALE.
+AC_DEFUN([gt_FUNC_USELOCALE],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Persuade glibc and Solaris <locale.h> to define 'locale_t'.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ gl_CHECK_FUNCS_ANDROID([uselocale], [[#include <locale.h>]])
+
+ dnl On AIX 7.2, the uselocale() function is not documented and leads to
+ dnl crashes in subsequent setlocale() invocations.
+ dnl In 2019, some versions of z/OS lack the locale_t type and have a broken
+ dnl uselocale function.
+ if test $ac_cv_func_uselocale = yes; then
+ AC_CHECK_HEADERS_ONCE([xlocale.h])
+ AC_CACHE_CHECK([whether uselocale works],
+ [gt_cv_func_uselocale_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+locale_t loc1;
+int main ()
+{
+ uselocale (NULL);
+ setlocale (LC_ALL, "en_US.UTF-8");
+ return 0;
+}]])],
+ [gt_cv_func_uselocale_works=yes],
+ [gt_cv_func_uselocale_works=no],
+ [# Guess no on AIX and z/OS, yes otherwise.
+ case "$host_os" in
+ aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;;
+ *) gt_cv_func_uselocale_works="guessing yes" ;;
+ esac
+ ])
+ ])
+ else
+ gt_cv_func_uselocale_works=no
+ fi
+ case "$gt_cv_func_uselocale_works" in
+ *yes)
+ gt_working_uselocale=yes
+ AC_DEFINE([HAVE_WORKING_USELOCALE], [1],
+ [Define if the uselocale function exists and may safely be called.])
+ ;;
+ *)
+ gt_working_uselocale=no
+ ;;
+ esac
+])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..81eefd7
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,65 @@
+# intlmacosx.m4 serial 8 (gettext-0.20.2)
+dnl Copyright (C) 2004-2014, 2016, 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on Mac OS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+ dnl Check for API introduced in Mac OS X 10.4.
+ AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+ [gt_cv_func_CFPreferencesCopyAppValue],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFPreferences.h>]],
+ [[CFPreferencesCopyAppValue(NULL, NULL)]])],
+ [gt_cv_func_CFPreferencesCopyAppValue=yes],
+ [gt_cv_func_CFPreferencesCopyAppValue=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+ AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1],
+ [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+ fi
+ dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent,
+ dnl because in macOS 10.13.4 it has the following behaviour:
+ dnl When two or more languages are specified in the
+ dnl "System Preferences > Language & Region > Preferred Languages" panel,
+ dnl it returns en_CC where CC is the territory (even when English is not among
+ dnl the preferred languages!). What we want instead is what
+ dnl CFLocaleCopyCurrent returned in earlier macOS releases and what
+ dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the
+ dnl first among the preferred languages and CC is the territory.
+ AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages],
+ [gt_save_LIBS="$LIBS"
+ LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <CoreFoundation/CFLocale.h>]],
+ [[CFLocaleCopyPreferredLanguages();]])],
+ [gt_cv_func_CFLocaleCopyPreferredLanguages=yes],
+ [gt_cv_func_CFLocaleCopyPreferredLanguages=no])
+ LIBS="$gt_save_LIBS"])
+ if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1],
+ [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.])
+ fi
+ INTL_MACOSX_LIBS=
+ if test $gt_cv_func_CFPreferencesCopyAppValue = yes \
+ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
+ INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+ fi
+ AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
new file mode 100644
index 0000000..e7efbe9
--- /dev/null
+++ b/m4/inttypes.m4
@@ -0,0 +1,184 @@
+# inttypes.m4 serial 37
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price, Bruno Haible.
+dnl Test whether <inttypes.h> is supported or must be substituted.
+
+AC_DEFUN_ONCE([gl_INTTYPES_H],
+[
+ AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
+ gl_INTTYPES_PRI_SCN
+])
+
+AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
+[
+ AC_REQUIRE([gl_STDINT_H])
+ AC_CHECK_HEADERS_ONCE([inttypes.h])
+
+ dnl Override <inttypes.h> always, so that the portability warnings work.
+ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+ gl_CHECK_NEXT_HEADERS([inttypes.h])
+
+ AC_REQUIRE([gl_MULTIARCH])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
+ ]], [imaxabs imaxdiv strtoimax strtoumax])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+])
+
+# Ensure that the PRI* and SCN* macros are defined appropriately.
+AC_DEFUN([gl_INTTYPES_PRI_SCN],
+[
+ PRIPTR_PREFIX=
+ if $GL_GENERATE_STDINT_H; then
+ dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or
+ dnl 'long long', depending on _WIN64.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #ifdef _WIN64
+ LLP64
+ #endif
+ ]])
+ ],
+ [PRIPTR_PREFIX='"l"'],
+ [PRIPTR_PREFIX='"ll"'])
+ else
+ dnl Using the system's <stdint.h>.
+ for glpfx in '' l ll I64; do
+ case $glpfx in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ I64) gltype1='__int64';;
+ esac
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <stdint.h>
+ extern intptr_t foo;
+ extern $gltype1 foo;]])],
+ [PRIPTR_PREFIX='"'$glpfx'"'])
+ test -n "$PRIPTR_PREFIX" && break
+ done
+ fi
+ AC_SUBST([PRIPTR_PREFIX])
+
+ gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+ [INT32_MAX_LT_INTMAX_MAX],
+ [defined INT32_MAX && defined INTMAX_MAX],
+ [INT32_MAX < INTMAX_MAX],
+ [sizeof (int) < sizeof (long long int)])
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+ gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+ [INT64_MAX_EQ_LONG_MAX],
+ [defined INT64_MAX],
+ [INT64_MAX == LONG_MAX],
+ [sizeof (long long int) == sizeof (long int)])
+ else
+ INT64_MAX_EQ_LONG_MAX=-1
+ fi
+ gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+ [UINT32_MAX_LT_UINTMAX_MAX],
+ [defined UINT32_MAX && defined UINTMAX_MAX],
+ [UINT32_MAX < UINTMAX_MAX],
+ [sizeof (unsigned int) < sizeof (unsigned long long int)])
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+ gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
+ [UINT64_MAX_EQ_ULONG_MAX],
+ [defined UINT64_MAX],
+ [UINT64_MAX == ULONG_MAX],
+ [sizeof (unsigned long long int) == sizeof (unsigned long int)])
+ else
+ UINT64_MAX_EQ_ULONG_MAX=-1
+ fi
+])
+
+# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
+# If $2 is true, the condition is $3; otherwise if long long int is supported
+# approximate the condition with $4; otherwise, assume the condition is false.
+# The condition should work on all C99 platforms; the approximations should be
+# good enough to work on all practical pre-C99 platforms.
+# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
+AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
+[
+ AC_CACHE_CHECK([whether $3],
+ [gl_cv_test_$1],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* Work also in C++ mode. */
+ #define __STDC_LIMIT_MACROS 1
+
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+
+ #include <limits.h>
+ #if HAVE_STDINT_H
+ #include <stdint.h>
+ #endif
+
+ #if $2
+ #define CONDITION ($3)
+ #else
+ #define CONDITION ($4)
+ #endif
+ int test[CONDITION ? 1 : -1];]])],
+ [gl_cv_test_$1=yes],
+ [gl_cv_test_$1=no])])
+ if test $gl_cv_test_$1 = yes; then
+ $1=1;
+ else
+ $1=0;
+ fi
+ AC_SUBST([$1])
+])
+
+# gl_INTTYPES_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_INTTYPES_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS])
+ HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV])
+ HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
+ HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
+ HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T])
+ HAVE_IMAXABS=1; AC_SUBST([HAVE_IMAXABS])
+ HAVE_IMAXDIV=1; AC_SUBST([HAVE_IMAXDIV])
+ REPLACE_IMAXABS=0; AC_SUBST([REPLACE_IMAXABS])
+ REPLACE_IMAXDIV=0; AC_SUBST([REPLACE_IMAXDIV])
+ REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX])
+ REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX])
+ INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
+ INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX])
+ PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX])
+ UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
+ UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
+])
diff --git a/m4/ioctl.m4 b/m4/ioctl.m4
new file mode 100644
index 0000000..83036c3
--- /dev/null
+++ b/m4/ioctl.m4
@@ -0,0 +1,44 @@
+# ioctl.m4 serial 6
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_IOCTL],
+[
+ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ HAVE_IOCTL=1
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ dnl Even if the 'socket' module is not used here, another part of the
+ dnl application may use it and pass file descriptors that refer to
+ dnl sockets to the ioctl() function. So enable the support for sockets.
+ HAVE_IOCTL=0
+ else
+ AC_CHECK_FUNCS([ioctl])
+ dnl On glibc systems, the second parameter is 'unsigned long int request',
+ dnl not 'int request'. We cannot simply cast the function pointer, but
+ dnl instead need a wrapper.
+ AC_CACHE_CHECK([for ioctl with POSIX signature],
+ [gl_cv_func_ioctl_posix_signature],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/ioctl.h>
+ /* On some platforms, ioctl() is declared in <unistd.h>. */
+ #include <unistd.h>
+ ]],
+ [[extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int ioctl (int, int, ...);
+ ]])
+ ],
+ [gl_cv_func_ioctl_posix_signature=yes],
+ [gl_cv_func_ioctl_posix_signature=no])
+ ])
+ if test $gl_cv_func_ioctl_posix_signature != yes; then
+ REPLACE_IOCTL=1
+ fi
+ fi
+])
diff --git a/m4/isblank.m4 b/m4/isblank.m4
new file mode 100644
index 0000000..809eab4
--- /dev/null
+++ b/m4/isblank.m4
@@ -0,0 +1,17 @@
+# isblank.m4 serial 3
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ISBLANK],
+[
+ dnl Persuade glibc <ctype.h> to declare isblank().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_CTYPE_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([isblank])
+ if test $ac_cv_func_isblank = no; then
+ HAVE_ISBLANK=0
+ fi
+])
diff --git a/m4/langinfo_h.m4 b/m4/langinfo_h.m4
new file mode 100644
index 0000000..b17a526
--- /dev/null
+++ b/m4/langinfo_h.m4
@@ -0,0 +1,137 @@
+# langinfo_h.m4 serial 12
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_LANGINFO_H],
+[
+ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+
+ dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([langinfo.h])
+
+ dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS.
+ HAVE_LANGINFO_CODESET=0
+ HAVE_LANGINFO_T_FMT_AMPM=0
+ HAVE_LANGINFO_ALTMON=0
+ HAVE_LANGINFO_ERA=0
+ HAVE_LANGINFO_YESEXPR=0
+ AC_CHECK_HEADERS_ONCE([langinfo.h])
+ if test $ac_cv_header_langinfo_h = yes; then
+ HAVE_LANGINFO_H=1
+ dnl Determine what <langinfo.h> defines.
+ dnl CODESET is missing on OpenBSD 3.8.
+ dnl ERA etc. are missing on OpenBSD 6.7.
+ dnl T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3.
+ dnl ALTMON_* are missing on glibc 2.26 and many other systems.
+ AC_CACHE_CHECK([whether langinfo.h defines CODESET],
+ [gl_cv_header_langinfo_codeset],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = CODESET;
+]])],
+ [gl_cv_header_langinfo_codeset=yes],
+ [gl_cv_header_langinfo_codeset=no])
+ ])
+ if test $gl_cv_header_langinfo_codeset = yes; then
+ HAVE_LANGINFO_CODESET=1
+ fi
+ AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM],
+ [gl_cv_header_langinfo_t_fmt_ampm],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = T_FMT_AMPM;
+]])],
+ [gl_cv_header_langinfo_t_fmt_ampm=yes],
+ [gl_cv_header_langinfo_t_fmt_ampm=no])
+ ])
+ if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then
+ HAVE_LANGINFO_T_FMT_AMPM=1
+ fi
+ AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1],
+ [gl_cv_header_langinfo_altmon],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = ALTMON_1;
+]])],
+ [gl_cv_header_langinfo_altmon=yes],
+ [gl_cv_header_langinfo_altmon=no])
+ ])
+ if test $gl_cv_header_langinfo_altmon = yes; then
+ HAVE_LANGINFO_ALTMON=1
+ fi
+ AC_CACHE_CHECK([whether langinfo.h defines ERA],
+ [gl_cv_header_langinfo_era],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = ERA;
+]])],
+ [gl_cv_header_langinfo_era=yes],
+ [gl_cv_header_langinfo_era=no])
+ ])
+ if test $gl_cv_header_langinfo_era = yes; then
+ HAVE_LANGINFO_ERA=1
+ fi
+ AC_CACHE_CHECK([whether langinfo.h defines YESEXPR],
+ [gl_cv_header_langinfo_yesexpr],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+int a = YESEXPR;
+]])],
+ [gl_cv_header_langinfo_yesexpr=yes],
+ [gl_cv_header_langinfo_yesexpr=no])
+ ])
+ if test $gl_cv_header_langinfo_yesexpr = yes; then
+ HAVE_LANGINFO_YESEXPR=1
+ fi
+ else
+ HAVE_LANGINFO_H=0
+ fi
+ AC_SUBST([HAVE_LANGINFO_H])
+ AC_SUBST([HAVE_LANGINFO_CODESET])
+ AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM])
+ AC_SUBST([HAVE_LANGINFO_ALTMON])
+ AC_SUBST([HAVE_LANGINFO_ERA])
+ AC_SUBST([HAVE_LANGINFO_YESEXPR])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <langinfo.h>
+ ]], [nl_langinfo])
+])
+
+# gl_LANGINFO_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_LANGINFO_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_LANGINFO_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NL_LANGINFO])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_LANGINFO_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO])
+ REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO])
+])
diff --git a/m4/largefile.m4 b/m4/largefile.m4
new file mode 100644
index 0000000..7fb81b8
--- /dev/null
+++ b/m4/largefile.m4
@@ -0,0 +1,376 @@
+# Enable large files on systems where this is not the default.
+# Enable support for files on Linux file systems with 64-bit inode numbers.
+
+# Copyright 1992-1996, 1998-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO:
+# It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this
+# setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko
+# and ftello in C++ mode as well.
+# Fixed in Autoconf 2.72, which has AC_SYS_YEAR2038.
+AC_DEFUN([gl_SET_LARGEFILE_SOURCE],
+ m4_ifndef([AC_SYS_YEAR2038], [[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_FUNC_FSEEKO
+ case "$host_os" in
+ hpux*)
+ AC_DEFINE([_LARGEFILE_SOURCE], [1],
+ [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).])
+ ;;
+ esac
+ ]])
+)
+
+# Work around a problem in autoconf <= 2.69:
+# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5,
+# or configures them incorrectly in some cases.
+m4_version_prereq([2.70], [], [
+
+# _AC_SYS_LARGEFILE_TEST_INCLUDES
+# -------------------------------
+m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES],
+[#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1]];[]dnl
+])
+])# m4_version_prereq 2.70
+
+# Support AC_SYS_YEAR2038, even if Autoconf 2.71 or earlier.
+# This code is taken from Autoconf master.
+m4_ifndef([AC_SYS_YEAR2038], [
+
+# _AC_SYS_YEAR2038_TEST_CODE
+# --------------------------
+# C code used to probe for time_t that can represent time points more
+# than 2**31 - 1 seconds after the epoch. With the usual Unix epoch,
+# these correspond to dates after 2038-01-18 22:14:07 +0000 (Gregorian),
+# hence the name.
+AC_DEFUN([_AC_SYS_YEAR2038_TEST_CODE],
+[[
+ #include <time.h>
+ /* Check that time_t can represent 2**32 - 1 correctly. */
+ #define LARGE_TIME_T \\
+ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
+ int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
+ && LARGE_TIME_T % 65537 == 0)
+ ? 1 : -1];
+]])
+
+# _AC_SYS_YEAR2038_OPTIONS
+# ------------------------
+# List of known ways to enable support for large time_t. If you change
+# this list you probably also need to change the AS_CASE at the end of
+# _AC_SYS_YEAR2038_PROBE.
+m4_define([_AC_SYS_YEAR2038_OPTIONS], m4_normalize(
+ ["none needed"] dnl 64-bit and newer 32-bit Unix
+ ["-D_TIME_BITS=64"] dnl glibc 2.34 with some 32-bit ABIs
+ ["-D__MINGW_USE_VC2005_COMPAT"] dnl 32-bit MinGW
+ ["-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"]
+ dnl 32-bit MinGW (misconfiguration)
+))
+
+# _AC_SYS_YEAR2038_PROBE([IF-NOT-DETECTED])
+# -----------------------------------------
+# Subroutine of AC_SYS_YEAR2038. Probe for time_t that can represent
+# time points more than 2**31 - 1 seconds after the epoch (dates after
+# 2038-01-18, see above) and set the cache variable ac_cv_sys_year2038_opts
+# to one of the values in the _AC_SYS_YEAR2038_OPTIONS list, or to
+# "support not detected" if none of them worked. Then, set compilation
+# options and #defines as necessary to enable large time_t support.
+#
+# Note that we do not test whether mktime, localtime, etc. handle
+# large values of time_t correctly, as that would require use of
+# AC_TRY_RUN. Note also that some systems only support large time_t
+# together with large off_t.
+#
+# If support is not detected, the behavior depends on which of the
+# top-level AC_SYS_YEAR2038 macros was used (see below).
+#
+# If you change this macro you may also need to change
+# _AC_SYS_YEAR2038_OPTIONS.
+AC_DEFUN([_AC_SYS_YEAR2038_PROBE],
+[AC_CACHE_CHECK([for $CC option to enable timestamps after Jan 2038],
+ [ac_cv_sys_year2038_opts],
+ [ac_save_CPPFLAGS="$CPPFLAGS"
+ ac_opt_found=no
+ for ac_opt in _AC_SYS_YEAR2038_OPTIONS; do
+ AS_IF([test x"$ac_opt" != x"none needed"],
+ [CPPFLAGS="$ac_save_CPPFLAGS $ac_opt"])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_YEAR2038_TEST_CODE])],
+ [ac_cv_sys_year2038_opts="$ac_opt"
+ ac_opt_found=yes])
+ test $ac_opt_found = no || break
+ done
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected"])
+
+ac_have_year2038=yes
+AS_CASE([$ac_cv_sys_year2038_opts],
+ ["none needed"], [],
+ ["support not detected"],
+ [ac_have_year2038=no
+ AS_CASE([$enable_year2038],
+ [yes],
+ [# If we're not cross compiling and 'touch' works with a large
+ # timestamp, then we can presume the system supports wider time_t
+ # *somehow* and we just weren't able to detect it. One common
+ # case that we deliberately *don't* probe for is a system that
+ # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers
+ # wide time_t. (It would be inappropriate for us to override an
+ # intentional use of -m32.) Error out, demanding use of
+ # --disable-year2038 if this is intentional.
+ AS_IF([test $cross_compiling = no],
+ [AS_IF([TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null],
+ [AS_CASE([`TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null`],
+ [*'Feb 7 2106'* | *'Feb 7 17:10'*],
+ [AC_MSG_FAILURE(m4_text_wrap(
+ [this system appears to support timestamps after January 2038,
+ but no mechanism for enabling wide 'time_t' was detected.
+ Did you mean to build a 64-bit binary? (e.g. 'CC="${CC} -m64"'.)
+ To proceed with 32-bit time_t, configure with '--disable-year2038'.],
+ [], [], [55]))])])])])],
+
+ ["-D_TIME_BITS=64"],
+ [AC_DEFINE([_TIME_BITS], [64],
+ [Number of bits in time_t, on hosts where this is settable.])],
+
+ ["-D__MINGW_USE_VC2005_COMPAT=1"],
+ [AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1],
+ [Define to 1 on platforms where this makes time_t a 64-bit type.])],
+
+ ["-U_USE_32_BIT_TIME_T"*],
+ [AC_MSG_FAILURE(m4_text_wrap(
+ [the 'time_t' type is currently forced to be 32-bit.
+ It will stop working after January 2038.
+ Remove _USE_32BIT_TIME_T from the compiler flags.],
+ [], [], [55]))],
+
+ [AC_MSG_ERROR(
+ [internal error: bad value for \$ac_cv_sys_year2038_opts])])
+])
+
+# _AC_SYS_YEAR2038_ENABLE
+# -----------------------
+# Subroutine of AC_SYS_YEAR2038 and _AC_SYS_YEAR2038_OPT_IN.
+# Depending on which of the YEAR2038 macros was used, add either an
+# --enable-year2038, or a --disable-year2038, or no option at all to
+# the configure script. Note that this is expanded very late and
+# therefore there cannot be any code in the AC_ARG_ENABLE. The
+# default value for enable_year2038 is emitted unconditionally
+# because the generated code always looks at this variable.
+m4_define([_AC_SYS_YEAR2038_ENABLE],
+[m4_divert_text([DEFAULTS],
+ m4_provide_if([AC_SYS_YEAR2038],
+ [enable_year2038=yes],
+ [enable_year2038=no]))]dnl
+[AC_ARG_ENABLE([year2038],
+ m4_provide_if([AC_SYS_YEAR2038],
+ [AS_HELP_STRING([--disable-year2038],
+ [do not support timestamps after 2038])],
+ [AS_HELP_STRING([--enable-year2038],
+ [support timestamps after 2038])]))])
+
+# _AC_SYS_YEAR2038_OPT_IN
+# -----------------------
+# If the --enable-year2038 option is given to configure, attempt to
+# detect and activate support for large time_t on 32-bit systems.
+# This macro is automatically invoked by AC_SYS_LARGEFILE when large
+# *file* support is detected. It does not AC_REQUIRE AC_SYS_LARGEFILE
+# to avoid a dependency loop, and is therefore unsafe to expose as a
+# documented macro.
+AC_DEFUN([_AC_SYS_YEAR2038_OPT_IN],
+[m4_provide_if([_AC_SYS_YEAR2038_PROBE], [], [dnl
+ AS_IF([test "$enable_year2038" != no], [_AC_SYS_YEAR2038_PROBE])
+ AC_CONFIG_COMMANDS_PRE([_AC_SYS_YEAR2038_ENABLE])
+])])
+
+# AC_SYS_YEAR2038
+# ---------------
+# Attempt to detect and activate support for large time_t.
+# On systems where time_t is not always 64 bits, this probe can be
+# skipped by passing the --disable-year2038 option to configure.
+AC_DEFUN([AC_SYS_YEAR2038],
+[AC_REQUIRE([AC_SYS_LARGEFILE])]dnl
+[m4_provide_if([_AC_SYS_YEAR2038_PROBE], [], [dnl
+ AS_IF([test "$enable_year2038" != no], [_AC_SYS_YEAR2038_PROBE])
+ AC_CONFIG_COMMANDS_PRE([_AC_SYS_YEAR2038_ENABLE])
+])])
+
+# _AC_SYS_LARGEFILE_TEST_CODE
+# ---------------------------
+# C code used to probe for large file support.
+m4_define([_AC_SYS_LARGEFILE_TEST_CODE],
+[@%:@include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+ We can't simply define LARGE_OFF_T to be 9223372036854775807,
+ since some C++ compilers masquerading as C compilers
+ incorrectly reject 9223372036854775807. */
+@%:@define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
+ int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721
+ && LARGE_OFF_T % 2147483647 == 1)
+ ? 1 : -1]];[]dnl
+])
+
+# _AC_SYS_LARGEFILE_OPTIONS
+# -------------------------
+# List of known ways to enable support for large files. If you change
+# this list you probably also need to change the AS_CASE at the end of
+# _AC_SYS_LARGEFILE_PROBE.
+m4_define([_AC_SYS_LARGEFILE_OPTIONS], m4_normalize(
+ ["none needed"] dnl Most current systems
+ ["-D_FILE_OFFSET_BITS=64"] dnl X/Open LFS spec
+ ["-D_LARGE_FILES=1"] dnl AIX (which versions?)
+ ["-n32"] dnl Irix 6.2 w/ SGI compiler
+))
+
+# _AC_SYS_LARGEFILE_PROBE
+# -----------------------
+# Subroutine of AC_SYS_LARGEFILE. Probe for large file support and set
+# the cache variable ac_cv_sys_largefile_opts to one of the values in
+# the _AC_SYS_LARGEFILE_OPTIONS list, or to "support not detected" if
+# none of the options in that list worked. Then, set compilation
+# options and #defines as necessary to enable large file support.
+#
+# If large file support is not detected, the behavior depends on which of
+# the top-level AC_SYS_LARGEFILE macros was used (see below).
+#
+# If you change this macro you may also need to change
+# _AC_SYS_LARGEFILE_OPTIONS.
+AC_DEFUN([_AC_SYS_LARGEFILE_PROBE],
+[AC_CACHE_CHECK([for $CC option to enable large file support],
+ [ac_cv_sys_largefile_opts],
+ [ac_save_CC="$CC"
+ ac_opt_found=no
+ for ac_opt in _AC_SYS_LARGEFILE_OPTIONS; do
+ AS_IF([test x"$ac_opt" != x"none needed"],
+ [CC="$ac_save_CC $ac_opt"])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_CODE])],
+ [ac_cv_sys_largefile_opts="$ac_opt"
+ ac_opt_found=yes])
+ test $ac_opt_found = no || break
+ done
+ CC="$ac_save_CC"
+ test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"])
+
+ac_have_largefile=yes
+AS_CASE([$ac_cv_sys_largefile_opts],
+ ["none needed"], [],
+ ["support not detected"],
+ [ac_have_largefile=no],
+
+ ["-D_FILE_OFFSET_BITS=64"],
+ [AC_DEFINE([_FILE_OFFSET_BITS], [64],
+ [Number of bits in a file offset, on hosts where this is settable.])],
+
+ ["-D_LARGE_FILES=1"],
+ [AC_DEFINE([_LARGE_FILES], [1],
+ [Define to 1 on platforms where this makes off_t a 64-bit type.])],
+
+ ["-n32"],
+ [CC="$CC -n32"],
+
+ [AC_MSG_ERROR(
+ [internal error: bad value for \$ac_cv_sys_largefile_opts])])
+
+_AC_SYS_YEAR2038_OPT_IN
+])
+
+# _AC_SYS_LARGEFILE_ENABLE
+# ------------------------
+# Subroutine of AC_SYS_LARGEFILE. Note that this
+# is expanded very late and therefore there cannot be any code in the
+# AC_ARG_ENABLE. The default value for enable_largefile is emitted
+# unconditionally because the generated shell code always looks at
+# this variable.
+m4_define([_AC_SYS_LARGEFILE_ENABLE],
+[m4_divert_text([DEFAULTS],
+ enable_largefile=yes)]dnl
+[AC_ARG_ENABLE([largefile],
+ [AS_HELP_STRING([--disable-largefile], [omit support for large files])])])
+
+# AC_SYS_LARGEFILE
+# ----------------
+# By default, many hosts won't let programs access large files;
+# one must use special compiler options to get large-file access to work.
+# For more details about this brain damage please see:
+# http://www.unix.org/version2/whatsnew/lfs20mar.html
+# Additionally, on Linux file systems with 64-bit inodes a file that happens
+# to have a 64-bit inode number cannot be accessed by 32-bit applications on
+# Linux x86/x86_64. This can occur with file systems such as XFS and NFS.
+# This macro allows configuration to continue if the system doesn't support
+# large files.
+AC_DEFUN([AC_SYS_LARGEFILE],
+[m4_provide_if([_AC_SYS_LARGEFILE_PROBE], [], [dnl
+ AS_IF([test "$enable_largefile" != no], [_AC_SYS_LARGEFILE_PROBE])
+ AC_CONFIG_COMMANDS_PRE([_AC_SYS_LARGEFILE_ENABLE])
+])])
+])# m4_ifndef AC_SYS_YEAR2038
+
+# Enable large files on systems where this is implemented by Gnulib, not by the
+# system headers.
+# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib
+# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively.
+AC_DEFUN([gl_LARGEFILE],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*)
+ dnl Native Windows.
+ dnl mingw64 defines off_t to a 64-bit type already, if
+ dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE.
+ AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1];
+ ]],
+ [[]])],
+ [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no])
+ ])
+ if test $gl_cv_type_off_t_64 = no; then
+ WINDOWS_64_BIT_OFF_T=1
+ else
+ WINDOWS_64_BIT_OFF_T=0
+ fi
+ dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat'
+ dnl to 'struct _stat32i64' or 'struct _stat64' (depending on
+ dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member.
+ AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ struct stat buf;
+ int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1];
+ ]],
+ [[]])],
+ [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no])
+ ])
+ if test $gl_cv_member_st_size_64 = no; then
+ WINDOWS_64_BIT_ST_SIZE=1
+ else
+ WINDOWS_64_BIT_ST_SIZE=0
+ fi
+ ;;
+ *)
+ dnl Nothing to do on gnulib's side.
+ dnl A 64-bit off_t is
+ dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX,
+ dnl OSF/1, Cygwin,
+ dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on
+ dnl glibc, HP-UX, Solaris,
+ dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX,
+ dnl - impossible to achieve on Minix 3.1.8.
+ WINDOWS_64_BIT_OFF_T=0
+ WINDOWS_64_BIT_ST_SIZE=0
+ ;;
+ esac
+])
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644
index 0000000..2e56de6
--- /dev/null
+++ b/m4/lcmessage.m4
@@ -0,0 +1,35 @@
+# lcmessage.m4 serial 8
+dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016, 2019-2023 Free
+dnl Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Lesser General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Lesser General Public License, and the rest of the GNU
+dnl gettext package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <locale.h>]],
+ [[return LC_MESSAGES]])],
+ [gt_cv_val_LC_MESSAGES=yes],
+ [gt_cv_val_LC_MESSAGES=no])])
+ if test $gt_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE([HAVE_LC_MESSAGES], [1],
+ [Define if your <locale.h> file defines LC_MESSAGES.])
+ fi
+])
diff --git a/m4/lib-ignore.m4 b/m4/lib-ignore.m4
new file mode 100644
index 0000000..c4d0217
--- /dev/null
+++ b/m4/lib-ignore.m4
@@ -0,0 +1,115 @@
+# If possible, ignore libraries that are not depended on.
+
+dnl Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+# gl_IGNORE_UNUSED_LIBRARIES
+# --------------------------
+# Determines the option to be passed to the C/C++/Fortran compiler, so that it
+# omits unused libraries.
+# Example (on Solaris):
+# $ cc foo.c -lnsl; ldd ./a.out
+# libnsl.so.1 => /lib/libnsl.so.1
+# libc.so.1 => /lib/libc.so.1
+# libmp.so.2 => /lib/libmp.so.2
+# libmd.so.1 => /lib/libmd.so.1
+# libscf.so.1 => /lib/libscf.so.1
+# libdoor.so.1 => /lib/libdoor.so.1
+# libuutil.so.1 => /lib/libuutil.so.1
+# libgen.so.1 => /lib/libgen.so.1
+# libm.so.2 => /lib/libm.so.2
+# $ cc foo.c -lnsl -Wl,-z,ignore; ldd ./a.out
+# libc.so.1 => /lib/libc.so.1
+# libm.so.2 => /lib/libm.so.2
+#
+# Note that the option works only for the C compiler, not for the C++
+# compiler:
+# - Sun C likes '-Wl,-z,ignore'.
+# '-Qoption ld -z,ignore' is not accepted.
+# '-z ignore' is accepted but has no effect.
+# - Sun C++ and Sun Fortran like '-Qoption ld -z,ignore'.
+# '-Wl,-z,ignore' is not accepted.
+# '-z ignore' is accepted but has no effect.
+#
+# Sets and substitutes a variable that depends on the current language:
+# - IGNORE_UNUSED_LIBRARIES_CFLAGS for C
+# - IGNORE_UNUSED_LIBRARIES_CXXFLAGS for C++
+# - IGNORE_UNUSED_LIBRARIES_FFLAGS for Fortran
+#
+# Note that the option works only for direct invocation of the compiler, not
+# through libtool: When libtool is used to create a shared library, it will
+# honor and translate '-Wl,-z,ignore' to '-Qoption ld -z -Qoption ld ignore'
+# if needed, but it will drop a '-Qoption ld -z,ignore' on the command line.
+#
+AC_DEFUN([gl_IGNORE_UNUSED_LIBRARIES],
+[
+ AC_CACHE_CHECK([for []_AC_LANG[] compiler flag to ignore unused libraries],
+ [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries],
+ [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=none
+ gl_saved_ldflags=$LDFLAGS
+ gl_saved_libs=$LIBS
+ # Link with -lm to detect binutils 2.16 bug with --as-needed; see
+ # <https://lists.gnu.org/r/bug-gnulib/2006-06/msg00131.html>.
+ LIBS="$LIBS -lm"
+ # Use long option sequences like '-z ignore' to test for the feature,
+ # to forestall problems with linkers that have -z, -i, -g, -n, etc. flags.
+ # GCC + binutils likes '-Wl,--as-needed'.
+ # GCC + Solaris ld likes '-Wl,-z,ignore'.
+ # Sun C likes '-Wl,-z,ignore'. '-z ignore' is accepted but has no effect.
+ # Don't try bare '--as-needed'; nothing likes it and the HP-UX 11.11
+ # native cc issues annoying warnings and then ignores it,
+ # which would cause us to incorrectly conclude that it worked.
+ for gl_flags in _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS
+ do
+ LDFLAGS="$gl_flags $LDFLAGS"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM()],
+ [gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries=$gl_flags])
+ LDFLAGS=$gl_saved_ldflags
+ test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none &&
+ break
+ done
+ LIBS=$gl_saved_libs
+ ])
+ IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS=
+ if test "$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries" != none; then
+ IGNORE_UNUSED_LIBRARIES_[]_AC_LANG_PREFIX[]FLAGS="$gl_cv_prog_[]_AC_LANG_ABBREV[]_ignore_unused_libraries"
+ fi
+ AC_SUBST([IGNORE_UNUSED_LIBRARIES_]_AC_LANG_PREFIX[FLAGS])
+])
+
+# _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS
+# -----------------------------------
+# Expands to the language dependent options to be tried.
+AC_DEFUN([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+# _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)
+# --------------------------------------
+m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C)],
+[ '-Wl,--as-needed' \
+ '-Wl,-z,ignore' \
+ '-z ignore'
+])
+
+# _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)
+# ----------------------------------------
+m4_define([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)],
+[ '-Wl,--as-needed' \
+ '-Qoption ld -z,ignore' \
+ '-Wl,-z,ignore' \
+ '-z ignore'
+])
+
+# _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)
+# -----------------------------------------------
+m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(C++)],
+ [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)])
+
+# _gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)
+# --------------------------------------------
+m4_copy([_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran 77)],
+ [_gl_IGNORE_UNUSED_LIBRARIES_OPTIONS(Fortran)])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..ebb3052
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld],
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ acl_cv_prog_gnu_ld=yes ;;
+*)
+ acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by GCC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]* | [A-Za-z]:[\\/]*)]
+ [re_direlt='/[^/][^/]*/\.\./']
+ # Canonicalize the path of ld
+ ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+ while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL([acl_cv_path_LD],
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ acl_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break ;;
+ *)
+ test "$with_gnu_ld" != yes && break ;;
+ esac
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT([$LD])
+else
+ AC_MSG_RESULT([no])
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..c73bd8e
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,774 @@
+# lib-link.m4 serial 21 (gettext-0.18)
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.54])
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+ ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+ ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+ ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+ ])
+ LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+ LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+ INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+ dnl results of this search when this library appears as a dependency.
+ HAVE_LIB[]NAME=yes
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message])
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. The missing-message
+dnl defaults to 'no' and may contain additional hints for the user.
+dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME}
+dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ AC_REQUIRE([AC_LIB_RPATH])
+ pushdef([Name],[translit([$1],[./-], [___])])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+ dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+ dnl accordingly.
+ AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+ dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+ dnl because if the user has installed lib[]Name and not disabled its use
+ dnl via --without-lib[]Name-prefix, he wants to use it.
+ ac_save_CPPFLAGS="$CPPFLAGS"
+ AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+ AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+ ac_save_LIBS="$LIBS"
+ dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS,
+ dnl because these -l options might require -L options that are present in
+ dnl LIBS. -l options benefit only from the -L options listed before it.
+ dnl Otherwise, add it to the front of LIBS, because it may be a static
+ dnl library that depends on another static library that is present in LIBS.
+ dnl Static libraries benefit only from the static libraries listed after
+ dnl it.
+ case " $LIB[]NAME" in
+ *" -l"*) LIBS="$LIBS $LIB[]NAME" ;;
+ *) LIBS="$LIB[]NAME $LIBS" ;;
+ esac
+ AC_TRY_LINK([$3], [$4],
+ [ac_cv_lib[]Name=yes],
+ [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])'])
+ LIBS="$ac_save_LIBS"
+ ])
+ if test "$ac_cv_lib[]Name" = yes; then
+ HAVE_LIB[]NAME=yes
+ AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.])
+ AC_MSG_CHECKING([how to link with lib[]$1])
+ AC_MSG_RESULT([$LIB[]NAME])
+ else
+ HAVE_LIB[]NAME=no
+ dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+ dnl $INC[]NAME either.
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIB[]NAME=
+ LTLIB[]NAME=
+ LIB[]NAME[]_PREFIX=
+ fi
+ AC_SUBST([HAVE_LIB]NAME)
+ AC_SUBST([LIB]NAME)
+ AC_SUBST([LTLIB]NAME)
+ AC_SUBST([LIB]NAME[_PREFIX])
+ popdef([NAME])
+ popdef([Name])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl acl_libext,
+dnl acl_shlibext,
+dnl acl_hardcode_libdir_flag_spec,
+dnl acl_hardcode_libdir_separator,
+dnl acl_hardcode_direct,
+dnl acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+ dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+ m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
+ AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
+ AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+ AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [
+ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+ . ./conftest.sh
+ rm -f ./conftest.sh
+ acl_cv_rpath=done
+ ])
+ wl="$acl_cv_wl"
+ acl_libext="$acl_cv_libext"
+ acl_shlibext="$acl_cv_shlibext"
+ acl_libname_spec="$acl_cv_libname_spec"
+ acl_library_names_spec="$acl_cv_library_names_spec"
+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+ acl_hardcode_direct="$acl_cv_hardcode_direct"
+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+ dnl Determine whether the user wants rpath handling at all.
+ AC_ARG_ENABLE([rpath],
+ [ --disable-rpath do not hardcode runtime library paths],
+ :, enable_rpath=yes)
+])
+
+dnl AC_LIB_FROMPACKAGE(name, package)
+dnl declares that libname comes from the given package. The configure file
+dnl will then not have a --with-libname-prefix option but a
+dnl --with-package-prefix option. Several libraries can come from the same
+dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar
+dnl macro call that searches for libname.
+AC_DEFUN([AC_LIB_FROMPACKAGE],
+[
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_frompackage_]NAME, [$2])
+ popdef([NAME])
+ pushdef([PACK],[$2])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ define([acl_libsinpackage_]PACKUP,
+ m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1])
+ popdef([PACKUP])
+ popdef([PACK])
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])])
+ pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-],
+ [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+ pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])])
+ dnl Autoconf >= 2.61 supports dots in --with options.
+ pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_ARG_WITH(P_A_C_K[-prefix],
+[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib
+ --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ if test "$acl_libdirstem2" != "$acl_libdirstem" \
+ && ! test -d "$withval/$acl_libdirstem"; then
+ additional_libdir="$withval/$acl_libdirstem2"
+ fi
+ fi
+ fi
+])
+ dnl Search the library and its dependencies in $additional_libdir and
+ dnl $LDFLAGS. Using breadth-first-seach.
+ LIB[]NAME=
+ LTLIB[]NAME=
+ INC[]NAME=
+ LIB[]NAME[]_PREFIX=
+ dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been
+ dnl computed. So it has to be reset here.
+ HAVE_LIB[]NAME=
+ rpathdirs=
+ ltrpathdirs=
+ names_already_handled=
+ names_next_round='$1 $2'
+ while test -n "$names_next_round"; do
+ names_this_round="$names_next_round"
+ names_next_round=
+ for name in $names_this_round; do
+ already_handled=
+ for n in $names_already_handled; do
+ if test "$n" = "$name"; then
+ already_handled=yes
+ break
+ fi
+ done
+ if test -z "$already_handled"; then
+ names_already_handled="$names_already_handled $name"
+ dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+ dnl or AC_LIB_HAVE_LINKFLAGS call.
+ uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+ eval value=\"\$HAVE_LIB$uppername\"
+ if test -n "$value"; then
+ if test "$value" = yes; then
+ eval value=\"\$LIB$uppername\"
+ test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+ eval value=\"\$LTLIB$uppername\"
+ test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+ else
+ dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+ dnl that this library doesn't exist. So just drop it.
+ :
+ fi
+ else
+ dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+ dnl and the already constructed $LIBNAME/$LTLIBNAME.
+ found_dir=
+ found_la=
+ found_so=
+ found_a=
+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name
+ if test -n "$acl_shlibext"; then
+ shrext=".$acl_shlibext" # typically: shrext=.so
+ else
+ shrext=
+ fi
+ if test $use_additional = yes; then
+ dir="$additional_libdir"
+ dnl The same code as in the loop below:
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ fi
+ if test "X$found_dir" = "X"; then
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ case "$x" in
+ -L*)
+ dir=`echo "X$x" | sed -e 's/^X-L//'`
+ dnl First look for a shared library.
+ if test -n "$acl_shlibext"; then
+ if test -f "$dir/$libname$shrext"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext"
+ else
+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+ ver=`(cd "$dir" && \
+ for f in "$libname$shrext".*; do echo "$f"; done \
+ | sed -e "s,^$libname$shrext\\\\.,," \
+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+ | sed 1q ) 2>/dev/null`
+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+ found_dir="$dir"
+ found_so="$dir/$libname$shrext.$ver"
+ fi
+ else
+ eval library_names=\"$acl_library_names_spec\"
+ for f in $library_names; do
+ if test -f "$dir/$f"; then
+ found_dir="$dir"
+ found_so="$dir/$f"
+ break
+ fi
+ done
+ fi
+ fi
+ fi
+ dnl Then look for a static library.
+ if test "X$found_dir" = "X"; then
+ if test -f "$dir/$libname.$acl_libext"; then
+ found_dir="$dir"
+ found_a="$dir/$libname.$acl_libext"
+ fi
+ fi
+ if test "X$found_dir" != "X"; then
+ if test -f "$dir/$libname.la"; then
+ found_la="$dir/$libname.la"
+ fi
+ fi
+ ;;
+ esac
+ if test "X$found_dir" != "X"; then
+ break
+ fi
+ done
+ fi
+ if test "X$found_dir" != "X"; then
+ dnl Found the library.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+ if test "X$found_so" != "X"; then
+ dnl Linking with a shared library. We attempt to hardcode its
+ dnl directory into the executable's runpath, unless it's the
+ dnl standard /usr/lib.
+ if test "$enable_rpath" = no \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem" \
+ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then
+ dnl No hardcoding is needed.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $found_dir"
+ fi
+ dnl The hardcoding into $LIBNAME is system dependent.
+ if test "$acl_hardcode_direct" = yes; then
+ dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+ dnl resulting binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode DIR into the resulting
+ dnl binary.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $found_dir"
+ fi
+ else
+ dnl Rely on "-L$found_dir".
+ dnl But don't add it if it's already contained in the LDFLAGS
+ dnl or the already constructed $LIBNAME
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$found_dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+ fi
+ if test "$acl_hardcode_minus_L" != no; then
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+ else
+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+ dnl here, because this doesn't fit in flags passed to the
+ dnl compiler. So give up. No hardcoding. This affects only
+ dnl very old systems.
+ dnl FIXME: Not sure whether we should use
+ dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+ dnl here.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ fi
+ else
+ if test "X$found_a" != "X"; then
+ dnl Linking with a static library.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+ else
+ dnl We shouldn't come here, but anyway it's good to have a
+ dnl fallback.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+ fi
+ fi
+ dnl Assume the include files are nearby.
+ additional_includedir=
+ case "$found_dir" in
+ */$acl_libdirstem | */$acl_libdirstem/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ */$acl_libdirstem2 | */$acl_libdirstem2/)
+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'`
+ if test "$name" = '$1'; then
+ LIB[]NAME[]_PREFIX="$basedir"
+ fi
+ additional_includedir="$basedir/include"
+ ;;
+ esac
+ if test "X$additional_includedir" != "X"; then
+ dnl Potentially add $additional_includedir to $INCNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 3. if it's already present in $CPPFLAGS or the already
+ dnl constructed $INCNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ for x in $CPPFLAGS $INC[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $INCNAME.
+ INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ fi
+ dnl Look for dependencies.
+ if test -n "$found_la"; then
+ dnl Read the .la file. It defines the variables
+ dnl dlname, library_names, old_library, dependency_libs, current,
+ dnl age, revision, installed, dlopen, dlpreopen, libdir.
+ save_libdir="$libdir"
+ case "$found_la" in
+ */* | *\\*) . "$found_la" ;;
+ *) . "./$found_la" ;;
+ esac
+ libdir="$save_libdir"
+ dnl We use only dependency_libs.
+ for dep in $dependency_libs; do
+ case "$dep" in
+ -L*)
+ additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+ dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 3. if it's already present in $LDFLAGS or the already
+ dnl constructed $LIBNAME,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \
+ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then
+ haveit=
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \
+ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ haveit=
+ for x in $LDFLAGS $LIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LIBNAME.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ haveit=
+ for x in $LDFLAGS $LTLIB[]NAME; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LTLIBNAME.
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ ;;
+ -R*)
+ dir=`echo "X$dep" | sed -e 's/^X-R//'`
+ if test "$enable_rpath" != no; then
+ dnl Potentially add DIR to rpathdirs.
+ dnl The rpathdirs will be appended to $LIBNAME at the end.
+ haveit=
+ for x in $rpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ dnl Potentially add DIR to ltrpathdirs.
+ dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+ haveit=
+ for x in $ltrpathdirs; do
+ if test "X$x" = "X$dir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ ltrpathdirs="$ltrpathdirs $dir"
+ fi
+ fi
+ ;;
+ -l*)
+ dnl Handle this in the next round.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+ ;;
+ *.la)
+ dnl Handle this in the next round. Throw away the .la's
+ dnl directory; it is already contained in a preceding -L
+ dnl option.
+ names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+ ;;
+ *)
+ dnl Most likely an immediate library name.
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+ ;;
+ esac
+ done
+ fi
+ else
+ dnl Didn't find the library; assume it is in the system directories
+ dnl known to the linker and runtime loader. (All the system
+ dnl directories known to the linker should also be known to the
+ dnl runtime loader, otherwise the system is severely misconfigured.)
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+ fi
+ fi
+ fi
+ done
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user must
+ dnl pass all path elements in one option. We can arrange that for a
+ dnl single library, but not when more than one $LIBNAMEs are used.
+ alldirs=
+ for found_dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+ done
+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for found_dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$found_dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+ done
+ fi
+ fi
+ if test "X$ltrpathdirs" != "X"; then
+ dnl When using libtool, the option that works for both libraries and
+ dnl executables is -R. The -R options are cumulative.
+ for found_dir in $ltrpathdirs; do
+ LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+ done
+ fi
+ popdef([P_A_C_K])
+ popdef([PACKLIBS])
+ popdef([PACKUP])
+ popdef([PACK])
+ popdef([NAME])
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+ for element in [$2]; do
+ haveit=
+ for x in $[$1]; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X$element"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ [$1]="${[$1]}${[$1]:+ }$element"
+ fi
+ done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+ AC_REQUIRE([AC_LIB_RPATH])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ $1=
+ if test "$enable_rpath" != no; then
+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+ dnl Use an explicit option to hardcode directories into the resulting
+ dnl binary.
+ rpathdirs=
+ next=
+ for opt in $2; do
+ if test -n "$next"; then
+ dir="$next"
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next=
+ else
+ case $opt in
+ -L) next=yes ;;
+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+ dnl No need to hardcode the standard /usr/lib.
+ if test "X$dir" != "X/usr/$acl_libdirstem" \
+ && test "X$dir" != "X/usr/$acl_libdirstem2"; then
+ rpathdirs="$rpathdirs $dir"
+ fi
+ next= ;;
+ *) next= ;;
+ esac
+ fi
+ done
+ if test "X$rpathdirs" != "X"; then
+ if test -n ""$3""; then
+ dnl libtool is used for linking. Use -R options.
+ for dir in $rpathdirs; do
+ $1="${$1}${$1:+ }-R$dir"
+ done
+ else
+ dnl The linker is used for linking directly.
+ if test -n "$acl_hardcode_libdir_separator"; then
+ dnl Weird platform: only the last -rpath option counts, the user
+ dnl must pass all path elements in one option.
+ alldirs=
+ for dir in $rpathdirs; do
+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+ done
+ acl_save_libdir="$libdir"
+ libdir="$alldirs"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="$flag"
+ else
+ dnl The -rpath options are cumulative.
+ for dir in $rpathdirs; do
+ acl_save_libdir="$libdir"
+ libdir="$dir"
+ eval flag=\"$acl_hardcode_libdir_flag_spec\"
+ libdir="$acl_save_libdir"
+ $1="${$1}${$1:+ }$flag"
+ done
+ fi
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..1601cea
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,224 @@
+# lib-prefix.m4 serial 7 (gettext-0.18)
+dnl Copyright (C) 2001-2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+ AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+ AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+ dnl By default, look in $includedir and $libdir.
+ use_additional=yes
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ AC_LIB_ARG_WITH([lib-prefix],
+[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+ --without-lib-prefix don't search for libraries in includedir and libdir],
+[
+ if test "X$withval" = "Xno"; then
+ use_additional=no
+ else
+ if test "X$withval" = "X"; then
+ AC_LIB_WITH_FINAL_PREFIX([
+ eval additional_includedir=\"$includedir\"
+ eval additional_libdir=\"$libdir\"
+ ])
+ else
+ additional_includedir="$withval/include"
+ additional_libdir="$withval/$acl_libdirstem"
+ fi
+ fi
+])
+ if test $use_additional = yes; then
+ dnl Potentially add $additional_includedir to $CPPFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/include,
+ dnl 2. if it's already present in $CPPFLAGS,
+ dnl 3. if it's /usr/local/include and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_includedir" != "X/usr/include"; then
+ haveit=
+ for x in $CPPFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-I$additional_includedir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_includedir" = "X/usr/local/include"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_includedir"; then
+ dnl Really add $additional_includedir to $CPPFLAGS.
+ CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+ fi
+ fi
+ fi
+ fi
+ dnl Potentially add $additional_libdir to $LDFLAGS.
+ dnl But don't add it
+ dnl 1. if it's the standard /usr/lib,
+ dnl 2. if it's already present in $LDFLAGS,
+ dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
+ dnl 4. if it doesn't exist as a directory.
+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+ haveit=
+ for x in $LDFLAGS; do
+ AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+ if test "X$x" = "X-L$additional_libdir"; then
+ haveit=yes
+ break
+ fi
+ done
+ if test -z "$haveit"; then
+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+ if test -n "$GCC"; then
+ case $host_os in
+ linux*) haveit=yes;;
+ esac
+ fi
+ fi
+ if test -z "$haveit"; then
+ if test -d "$additional_libdir"; then
+ dnl Really add $additional_libdir to $LDFLAGS.
+ LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+ fi
+ fi
+ fi
+ fi
+ fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ acl_final_prefix="$ac_default_prefix"
+ else
+ acl_final_prefix="$prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ acl_final_exec_prefix='${prefix}'
+ else
+ acl_final_exec_prefix="$exec_prefix"
+ fi
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+ acl_save_prefix="$prefix"
+ prefix="$acl_final_prefix"
+ acl_save_exec_prefix="$exec_prefix"
+ exec_prefix="$acl_final_exec_prefix"
+ $1
+ exec_prefix="$acl_save_exec_prefix"
+ prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates
+dnl - a variable acl_libdirstem, containing the basename of the libdir, either
+dnl "lib" or "lib64" or "lib/64",
+dnl - a variable acl_libdirstem2, as a secondary possible value for
+dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or
+dnl "lib/amd64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+ dnl There is no formal standard regarding lib and lib64.
+ dnl On glibc systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine
+ dnl the compiler's default mode by looking at the compiler's library search
+ dnl path. If at least one of its elements ends in /lib64 or points to a
+ dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI.
+ dnl Otherwise we use the default, namely "lib".
+ dnl On Solaris systems, the current practice is that on a system supporting
+ dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under
+ dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or
+ dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ acl_libdirstem=lib
+ acl_libdirstem2=
+ case "$host_os" in
+ solaris*)
+ dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment
+ dnl <http://docs.sun.com/app/docs/doc/816-5138/dev-env?l=en&a=view>.
+ dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link."
+ dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the
+ dnl symlink is missing, so we set acl_libdirstem2 too.
+ AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit],
+ [AC_EGREP_CPP([sixtyfour bits], [
+#ifdef _LP64
+sixtyfour bits
+#endif
+ ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no])
+ ])
+ if test $gl_cv_solaris_64bit = yes; then
+ acl_libdirstem=lib/64
+ case "$host_cpu" in
+ sparc*) acl_libdirstem2=lib/sparcv9 ;;
+ i*86 | x86_64) acl_libdirstem2=lib/amd64 ;;
+ esac
+ fi
+ ;;
+ *)
+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+ if test -n "$searchpath"; then
+ acl_save_IFS="${IFS= }"; IFS=":"
+ for searchdir in $searchpath; do
+ if test -d "$searchdir"; then
+ case "$searchdir" in
+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+ */../ | */.. )
+ # Better ignore directories of this form. They are misleading.
+ ;;
+ *) searchdir=`cd "$searchdir" && pwd`
+ case "$searchdir" in
+ */lib64 ) acl_libdirstem=lib64 ;;
+ esac ;;
+ esac
+ fi
+ done
+ IFS="$acl_save_IFS"
+ fi
+ ;;
+ esac
+ test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem"
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..e3adeda
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,8403 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+# Foundation, Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions. There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+])
+
+# serial 59 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+ for cc_temp in @S|@*""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+ done
+ func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_DECL_FILECMD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options that allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}"; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile=${ofile}T
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ $SED '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Go], [_LT_LANG(GO)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_GO. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC], [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+ fi
+fi
+if test -z "$GOC"; then
+ AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+ [LT_LANG(GO)],
+ [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "$LT_MULTI_MODULE"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ # If there is a non-empty error log, and "single_module"
+ # appears in it, assume the flag caused a linker warning
+ if test -s conftest.err && $GREP single_module conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ # Otherwise, if the output was created with a 0 exit code from
+ # the compiler, it worked.
+ elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS=$save_LDFLAGS
+ ])
+
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -s conftest.err && $GREP force_load conftest.err; then
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test yes = "$lt_cv_apple_cc_single_mod"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test yes = "$lt_cv_ld_exported_symbols_list"; then
+ _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+ fi
+ if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test yes = "$lt_cv_ld_force_load"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+ [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+ case $cc_basename in
+ ifort*|nagfor*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test yes = "$_lt_dar_can_shared"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ m4_if([$1], [CXX],
+[ if test yes != "$lt_cv_apple_cc_single_mod"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case $ECHO in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+ [Search for dependent libraries within DIR (or the compiler's sysroot
+ if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+ if test yes = "$GCC"; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([$with_sysroot])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out what ABI is being produced by ac_compile, and set mode
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE=32
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE=64
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+mips64*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ emul=elf
+ case `$FILECMD conftest.$ac_objext` in
+ *32-bit*)
+ emul="${emul}32"
+ ;;
+ *64-bit*)
+ emul="${emul}64"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *MSB*)
+ emul="${emul}btsmip"
+ ;;
+ *LSB*)
+ emul="${emul}ltsmip"
+ ;;
+ esac
+ case `$FILECMD conftest.$ac_objext` in
+ *N32*)
+ emul="${emul}n32"
+ ;;
+ esac
+ LD="${LD-ld} -m $emul"
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly. Note that the listed cases only cover the
+ # situations where additional linker options are needed (such as when
+ # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+ # vice versa); the common cases where no linker options are needed do
+ # not appear in the list.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ case `$FILECMD conftest.o` in
+ *x86-64*)
+ LD="${LD-ld} -m elf32_x86_64"
+ ;;
+ *)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ esac
+ ;;
+ powerpc64le-*linux*)
+ LD="${LD-ld} -m elf32lppclinux"
+ ;;
+ powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ powerpcle-*linux*)
+ LD="${LD-ld} -m elf64lppc"
+ ;;
+ powerpc-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test yes != "$lt_cv_cc_needs_belf"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS=$SAVE_CFLAGS
+ fi
+ ;;
+*-*solaris*)
+ # Find out what ABI is being produced by ac_compile, and set linker
+ # options accordingly.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `$FILECMD conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*)
+ case $host in
+ i?86-*-solaris*|x86_64-*-solaris*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ sparc*-*-solaris*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ # GNU ld 2.21 introduced _sol2 emulations. Use them if available.
+ if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+ LD=${LD-ld}_sol2
+ fi
+ ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+_LT_DECL([], [AR], [1], [The archiver])
+
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
+ [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -eq "$ac_status"; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test 0 -ne "$ac_status"; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test no = "$lt_cv_ar_at_file"; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ bitrig* | openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring=ABCD
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ os2*)
+ # The test takes a long time on OS/2.
+ lt_cv_sys_max_cmd_len=8192
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len" && \
+ test undefined != "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test 17 != "$i" # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen=load_add_on
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen=LoadLibrary
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+ lt_cv_dlopen=dyld
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ tpf*)
+ # Don't try to run any link tests for TPF. We know it's impossible
+ # because TPF is a cross-compiler, and we know how we open DSOs.
+ lt_cv_dlopen=dlopen
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=no
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen=shl_load],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen=dlopen],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test no = "$lt_cv_dlopen"; then
+ enable_dlopen=no
+ else
+ enable_dlopen=yes
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS=$CPPFLAGS
+ test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS=$LDFLAGS
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS=$LIBS
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test yes = "$lt_cv_dlopen_self"; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS=$save_CPPFLAGS
+ LDFLAGS=$save_LDFLAGS
+ LIBS=$save_LIBS
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test no = "$hard_links"; then
+ AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+ [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+ # We can hardcode non-existent directories.
+ if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+ test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+ test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+ test no = "$enable_shared"; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -z "$STRIP"; then
+ AC_MSG_RESULT([no])
+else
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+ fi
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+# string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+# string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+# string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+# "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+# VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+ case x@S|@2 in
+ x)
+ ;;
+ *:)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+ ;;
+ x:*)
+ eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ *::*)
+ eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+ eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+ ;;
+ *)
+ eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+ ;;
+ esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test yes = "$GCC"; then
+ case $host_os in
+ darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+ *) lt_awk_arg='/^libraries:/' ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+ *) lt_sed_strip_eq='s|=/|/|g' ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary...
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ # ...but if some path component already ends with the multilib dir we assume
+ # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+ case "$lt_multi_os_dir; $lt_search_path_spec " in
+ "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+ lt_multi_os_dir=
+ ;;
+ esac
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+ elif test -n "$lt_multi_os_dir"; then
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+ lt_foo = "";
+ lt_count = 0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo = "/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 supports IA64
+ library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line '#! .'. This would cause the generated library to
+ # depend on '.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # Using Import Files as archive members, it is possible to support
+ # filename-based versioning of shared library archives on AIX. While
+ # this would work for both with and without runtime linking, it will
+ # prevent static linking of such archives. So we do filename-based
+ # shared library versioning with .so extension only, which is used
+ # when both runtime linking and shared linking is enabled.
+ # Unfortunately, runtime linking may impact performance, so we do
+ # not want this to be the default eventually. Also, we use the
+ # versioned .so libs for executables only if there is the -brtl
+ # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+ # To allow for filename-based versioning support, we need to create
+ # libNAME.so.V as an archive file, containing:
+ # *) an Import File, referring to the versioned filename of the
+ # archive as well as the shared archive member, telling the
+ # bitwidth (32 or 64) of that shared object, and providing the
+ # list of exported symbols of that shared object, eventually
+ # decorated with the 'weak' keyword
+ # *) the shared object with the F_LOADONLY flag set, to really avoid
+ # it being seen by the linker.
+ # At run time we better use the real file rather than another symlink,
+ # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+ case $with_aix_soname,$aix_use_runtimelinking in
+ # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ aix,yes) # traditional libtool
+ dynamic_linker='AIX unversionable lib.so'
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ aix,no) # traditional AIX only
+ dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ svr4,*) # full svr4 only
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,yes) # both, prefer svr4
+ dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+ library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+ # unpreferred sharedlib libNAME.a needs extra handling
+ postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+ postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+ # We do not specify a path in Import Files, so LIBPATH fires.
+ shlibpath_overrides_runpath=yes
+ ;;
+ *,no) # both, prefer aix
+ dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+ library_names_spec='$libname$release.a $libname.a'
+ soname_spec='$libname$release$shared_ext$major'
+ # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+ postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+ postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+ ;;
+ esac
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='$libname$shared_ext'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
+ libname_spec='$name'
+ soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='$libname.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec=$LIB
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC and ICC wrapper
+ library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$major$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[23]].*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2.*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+haiku*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ if test 32 = "$HPUX_IA64_MODE"; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+ fi
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test yes = "$lt_cv_prog_gnu_ld"; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+ sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+linux*android*)
+ version_type=none # Android doesn't support versioned libraries.
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext'
+ soname_spec='$libname$release$shared_ext'
+ finish_cmds=
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ dynamic_linker='Android linker'
+ # Don't embed -rpath directories since the linker doesn't support them.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Add ABI-specific directories to the system library path.
+ sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib"
+
+ # Ideally, we could use ldconfig to report *all* directores which are
+ # searched for libraries, however this is still not possible. Aside from not
+ # being certain /sbin/ldconfig is available, command
+ # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+ # even though it is searched at run-time. Try to do the best guess by
+ # appending ld.so.conf contents (and includes) to the search path.
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd* | bitrig*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec=/usr/lib
+ need_lib_prefix=no
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ need_version=no
+ else
+ need_version=yes
+ fi
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+os2*)
+ libname_spec='$name'
+ version_type=windows
+ shrext_cmds=.dll
+ need_version=no
+ need_lib_prefix=no
+ # OS/2 can only load a DLL with a base name of 8 characters or less.
+ soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+ v=$($ECHO $release$versuffix | tr -d .-);
+ n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+ $ECHO $n$v`$shared_ext'
+ library_names_spec='${libname}_dll.$libext'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=BEGINLIBPATH
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ postinstall_cmds='base_file=`basename \$file`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='$libname$release$shared_ext$major'
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test yes = "$with_gnu_ld"; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec; then
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+ soname_spec='$libname$shared_ext.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=sco
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test yes = "$with_gnu_ld"; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux # correct to gnu/linux during the next big refactor
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux # correct to gnu/linux during the next big refactor
+ library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+ soname_spec='$libname$release$shared_ext$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+ sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+ sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+ [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+ [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD=$MAGIC_CMD
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$1"; then
+ lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS=$lt_save_ifs
+ MAGIC_CMD=$lt_save_MAGIC_CMD
+ ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test no = "$withval" || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test yes = "$GCC"; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return, which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD=$ac_prog
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test yes = "$with_gnu_ld"; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD=$ac_dir/$ac_prog
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test no != "$with_gnu_ld" && break
+ ;;
+ *)
+ test yes != "$with_gnu_ld" && break
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+else
+ lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test yes != "$GCC"; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test yes = "$GCC"; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+ cmp -s conftest.i conftest.out \
+ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+ [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='$FILECMD -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly* | midnightbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=$FILECMD
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=$FILECMD
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd* | bitrig*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+os2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM=$NM
+else
+ lt_nm_to_check=${ac_tool_prefix}nm
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS=$lt_save_ifs
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm=$ac_dir/$lt_tmp_nm
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+ case $build_os in
+ mingw*) lt_bad_file=conftest.nm/nofile ;;
+ *) lt_bad_file=/dev/null ;;
+ esac
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+ *$lt_bad_file* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break 2
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break 2
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS=$lt_save_ifs
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+ NM=$lt_cv_path_NM
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols -headers"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test : != "$DUMPBIN"; then
+ NM=$DUMPBIN
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh;
+ # decide which one to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd=$ECHO
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+ test DEF = "`$SED -n dnl
+ -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace
+ -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments
+ -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl
+ -e q dnl Only consider the first "real" line
+ $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM=-lm)
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test ia64 = "$host_cpu"; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Gets list of data symbols to import.
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+ # Adjust the below global symbol transforms to fixup imported variables.
+ lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+ lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
+ lt_c_name_lib_hook="\
+ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\
+ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'"
+else
+ # Disable hooks by default.
+ lt_cv_sys_global_symbol_to_import=
+ lt_cdecl_hook=
+ lt_c_name_hook=
+ lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function,
+ # D for any global variable and I for any imported variable.
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS=conftstm.$ac_objext
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test yes = "$pipe_works"; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+ [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+ [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly* | midnightbsd*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64, which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the '-m68020' flag to GCC prevents building anything better,
+ # like '-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+ fi
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test ia64 = "$host_cpu"; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ case $cc_basename in
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ case $host_os in
+ os2*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+ ;;
+ esac
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ # old Intel for x86_64, which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ F* | *Sun*Fortran*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ *Intel*\ [[CF]]*Compiler*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ *Portland\ Group*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms that do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl* | icl*)
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ' (' and ')$', so one must not match beginning or
+ # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+ # as well as any symbol that contains 'd'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ if test yes != "$GCC"; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+ with_gnu_ld=yes
+ ;;
+ openbsd* | bitrig*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test yes = "$with_gnu_ld"; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test yes = "$lt_use_gnu_ld_interface"; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='$wl'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test ia64 != "$host_cpu"; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test linux-dietlibc = "$host_os"; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test no = "$tmp_diet"
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ nagfor*) # NAGFOR 5.3
+ tmp_sharedflag='-Wl,-shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ tcc*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+ ;;
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+ # Without the "-l" option, or with the "-B" option, AIX nm treats
+ # weak defined symbols like other global defined symbols, whereas
+ # GNU nm marks them as "W".
+ # While the 'weak' keyword is ignored in the Export File, we need
+ # it in the Import File for the 'aix-soname' feature, so we have
+ # to replace the "-B" option with "-P" for AIX nm.
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # traditional, no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GCC"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag="$shared_flag "'$wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++ or Intel C++ Compiler.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl* | icl*)
+ # Native MSVC or ICC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC and ICC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2.*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly* | midnightbsd*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+
+ hpux10*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test yes,no = "$GCC,$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS=$save_LDFLAGS])
+ if test yes = "$lt_cv_irix_exported_symbol"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ linux*)
+ case $cc_basename in
+ tcc*)
+ # Fabrice Bellard et al's Tiny C Compiler
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ osf3*)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test yes = "$GCC"; then
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='$wl'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'. GCC discards it without '$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test sequent = "$host_vendor"; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test yes = "$GCC"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test sni = "$host_vendor"; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test yes,yes = "$GCC,$enable_shared"; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting $shlibpath_var if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report what library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+ ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+ (test g++ != "$CXX"))); then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test yes = "$GXX"; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test yes = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='$wl'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test ia64 = "$host_cpu"; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # have runtime linking enabled, and use it for executables.
+ # For shared libraries, we enable/disable runtime linking
+ # depending on the kind of the shared library created -
+ # when "with_aix_soname,aix_use_runtimelinking" is:
+ # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables
+ # "aix,yes" lib.so shared, rtl:yes, for executables
+ # lib.a static archive
+ # "both,no" lib.so.V(shr.o) shared, rtl:yes
+ # lib.a(lib.so.V) shared, rtl:no, for executables
+ # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a(lib.so.V) shared, rtl:no
+ # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables
+ # lib.a static archive
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # With aix-soname=svr4, we create the lib.so.V shared archives only,
+ # so we don't have lib.a shared libs to link our executables.
+ # We have to force runtime linking in this case.
+ aix_use_runtimelinking=yes
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ fi
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+ case $with_aix_soname,$aix_use_runtimelinking in
+ aix,*) ;; # no import file
+ svr4,* | *,yes) # use import file
+ # The Import File defines what to hardcode.
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ ;;
+ esac
+
+ if test yes = "$GXX"; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`$CC -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag=$shared_flag' $wl-G'
+ fi
+ # Need to ensure runtime linking is disabled for the traditional
+ # shared library, or the linker may eventually find shared libraries
+ # /with/ Import File - we do not want to mix them.
+ shared_flag_aix='-shared'
+ shared_flag_svr4='-shared $wl-G'
+ else
+ # not using gcc
+ if test ia64 = "$host_cpu"; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test yes = "$aix_use_runtimelinking"; then
+ shared_flag='$wl-G'
+ else
+ shared_flag='$wl-bM:SRE'
+ fi
+ shared_flag_aix='$wl-bM:SRE'
+ shared_flag_svr4='$wl-G'
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ # The "-G" linker flag allows undefined symbols.
+ _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+ else
+ if test ia64 = "$host_cpu"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+ if test yes = "$with_gnu_ld"; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+ # -brtl affects multiple linker settings, -berok does not and is overridden later
+ compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+ if test svr4 != "$with_aix_soname"; then
+ # This is similar to how AIX traditionally builds its shared
+ # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+ fi
+ if test aix != "$with_aix_soname"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+ else
+ # used by -dlpreopen to get the symbols
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir'
+ fi
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl* | ,icl* | no,icl*)
+ # Native MSVC or ICC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=.dll
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp "$export_symbols" "$output_objdir/$soname.def";
+ echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+ else
+ $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile=$lt_outputfile.exe
+ lt_tool_outputfile=$lt_tool_outputfile.exe
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file, use it as
+ # is; otherwise, prepend EXPORTS...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ shrext_cmds=.dll
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+ $ECHO EXPORTS >> $output_objdir/$libname.def~
+ prefix_cmds="$SED"~
+ if test EXPORTS = "`$SED 1q $export_symbols`"; then
+ prefix_cmds="$prefix_cmds -e 1d";
+ fi~
+ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+ emximp -o $lib $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd2.*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly* | midnightbsd*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test yes = "$GXX"; then
+ if test no = "$with_gnu_ld"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+ if test yes = "$supports_anon_versioning"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | $SED 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd* | bitrig*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands '-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test yes,no = "$GXX,$with_gnu_ld"; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require '-G' NOT '-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We CANNOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)=$GXX
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case @S|@2 in
+ .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+ *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case $prev$p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test x-L = "$p" ||
+ test x-R = "$p"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test no = "$pre_test_object_deps_done"; then
+ case $prev in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)=$prev$p
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test no = "$pre_test_object_deps_done"; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)=$p
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)=$p
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$G77
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test no = "$can_build_shared" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test yes = "$enable_shared" && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test ia64 != "$host_cpu"; then
+ case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+ yes,aix,yes) ;; # shared object as lib.so file only
+ yes,svr4,*) ;; # shared object as lib.so archive member only
+ yes,*) enable_static=no ;; # shared object in lib.a archive as well
+ esac
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test yes = "$enable_shared" || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+ _LT_TAGVAR(LD, $1)=$LD
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_FILECMD
+# ----------------
+# Check for a file(cmd) program that can be used to detect file type and magic
+m4_defun([_LT_DECL_FILECMD],
+[AC_CHECK_TOOL([FILECMD], [file], [:])
+_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
+])# _LD_DECL_FILECMD
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f "$lt_ac_sed" && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test 10 -lt "$lt_ac_count" && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test "$lt_ac_count" -gt "$lt_ac_max"; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/limits-h.m4 b/m4/limits-h.m4
new file mode 100644
index 0000000..4f8ce41
--- /dev/null
+++ b/m4/limits-h.m4
@@ -0,0 +1,42 @@
+dnl Check whether limits.h has needed features.
+
+dnl Copyright 2016-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_DEFUN_ONCE([gl_LIMITS_H],
+[
+ gl_CHECK_NEXT_HEADERS([limits.h])
+
+ AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.],
+ [gl_cv_header_limits_width],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+ #endif
+ #include <limits.h>
+ long long llm = LLONG_MAX;
+ int wb = WORD_BIT;
+ int ullw = ULLONG_WIDTH;
+ int bw = BOOL_WIDTH;
+ int bm = BOOL_MAX;
+ ]])],
+ [gl_cv_header_limits_width=yes],
+ [gl_cv_header_limits_width=no])])
+ if test "$gl_cv_header_limits_width" = yes; then
+ GL_GENERATE_LIMITS_H=false
+ else
+ GL_GENERATE_LIMITS_H=true
+ fi
+])
+
+dnl Unconditionally enables the replacement of <limits.h>.
+AC_DEFUN([gl_REPLACE_LIMITS_H],
+[
+ AC_REQUIRE([gl_LIMITS_H])
+ GL_GENERATE_LIMITS_H=true
+])
diff --git a/m4/localcharset.m4 b/m4/localcharset.m4
new file mode 100644
index 0000000..15b6b2a
--- /dev/null
+++ b/m4/localcharset.m4
@@ -0,0 +1,11 @@
+# localcharset.m4 serial 8
+dnl Copyright (C) 2002, 2004, 2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_LOCALCHARSET],
+[
+ dnl Prerequisites of lib/localcharset.c.
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+])
diff --git a/m4/locale-fr.m4 b/m4/locale-fr.m4
new file mode 100644
index 0000000..8c41fad
--- /dev/null
+++ b/m4/locale-fr.m4
@@ -0,0 +1,253 @@
+# locale-fr.m4 serial 20
+dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a french locale with traditional encoding.
+AC_DEFUN([gt_LOCALE_FR],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
+ one byte long. This excludes the UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
+# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+# endif
+ return 0;
+#endif
+}
+ ]])])
+ if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the native Windows locale name.
+ if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=French_France.1252
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO-8859-1
+ else
+ # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
+ if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.ISO8859-1
+ else
+ # Test for the HP-UX locale name.
+ if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr_FR.iso88591
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr=fr
+ else
+ # None found.
+ gt_cv_locale_fr=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+ ])
+ LOCALE_FR=$gt_cv_locale_fr
+ AC_SUBST([LOCALE_FR])
+])
+
+dnl Determine the name of a french locale with UTF-8 encoding.
+AC_DEFUN([gt_LOCALE_FR_UTF8],
+[
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if !(defined __BEOS__ || defined __HAIKU__)
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in the abbreviation of the second month, the second
+ character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
+ return 1;
+#endif
+#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
+ /* Check whether the decimal separator is a comma.
+ On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
+ are nl_langinfo(RADIXCHAR) are both ".". */
+ if (localeconv () ->decimal_point[0] != ',') return 1;
+#endif
+ return 0;
+}
+ ]])])
+ if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=French_France.65001
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr_FR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_fr_utf8=fr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_fr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+ ])
+ LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
+ AC_SUBST([LOCALE_FR_UTF8])
+])
diff --git a/m4/locale-ja.m4 b/m4/locale-ja.m4
new file mode 100644
index 0000000..2590173
--- /dev/null
+++ b/m4/locale-ja.m4
@@ -0,0 +1,143 @@
+# locale-ja.m4 serial 15
+dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a japanese locale with EUC-JP encoding.
+AC_DEFUN([gt_LOCALE_JA],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales
+ on Cygwin 1.5.x. */
+ if (MB_CUR_MAX == 1)
+ return 1;
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ return 0;
+#endif
+}
+ ]])])
+ if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Note that on native Windows, the Japanese locale is
+ # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
+ # cannot use it here.
+ gt_cv_locale_ja=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the AIX locale name.
+ if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC-JP
+ else
+ # Test for the HP-UX, OSF/1, NetBSD locale name.
+ if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # Test for the IRIX, FreeBSD locale name.
+ if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja_JP.EUC
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_ja=ja
+ else
+ # Special test for NetBSD 1.6.
+ if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then
+ gt_cv_locale_ja=ja_JP.eucJP
+ else
+ # None found.
+ gt_cv_locale_ja=none
+ fi
+ fi
+ fi
+ fi
+ fi
+ fi
+ ;;
+ esac
+ fi
+ rm -fr conftest*
+ ])
+ LOCALE_JA=$gt_cv_locale_ja
+ AC_SUBST([LOCALE_JA])
+])
diff --git a/m4/locale-tr.m4 b/m4/locale-tr.m4
new file mode 100644
index 0000000..847fb0d
--- /dev/null
+++ b/m4/locale-tr.m4
@@ -0,0 +1,126 @@
+# locale-tr.m4 serial 13
+dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a turkish locale with UTF-8 encoding.
+AC_DEFUN([gt_LOCALE_TR_UTF8],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <locale.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+#include <wctype.h>
+struct tm t;
+char buf[16];
+int main () {
+ /* On BeOS, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. But BeOS does not
+ implement the Turkish upper-/lowercase mappings. Therefore, let this
+ program return 1 on BeOS. */
+ /* Check whether the given locale name is recognized by the system. */
+#if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+#else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+#endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail. */
+#if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
+ return 1;
+ }
+#endif
+#ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+#endif
+ /* Check whether in the abbreviation of the eighth month, the second
+ character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is
+ two bytes long, with UTF-8 encoding. */
+ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19;
+ if (strftime (buf, sizeof (buf), "%b", &t) < 4
+ || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f)
+ return 1;
+ /* Check whether the upper-/lowercase mappings are as expected for
+ Turkish. */
+ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i'
+ || towupper(0x0131) != 'I' || towlower ('I') != 0x0131)
+ return 1;
+ return 0;
+}
+ ]])])
+ if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=Turkish_Turkey.65001
+ else
+ # None found.
+ gt_cv_locale_tr_utf8=none
+ fi
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the usual locale name.
+ if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr_TR
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr_TR.UTF-8
+ else
+ # Test for the Solaris 7 locale name.
+ if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_tr_utf8=tr.UTF-8
+ else
+ # None found.
+ gt_cv_locale_tr_utf8=none
+ fi
+ fi
+ fi
+ ;;
+ esac
+ else
+ gt_cv_locale_tr_utf8=none
+ fi
+ rm -fr conftest*
+ ])
+ LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8
+ AC_SUBST([LOCALE_TR_UTF8])
+])
diff --git a/m4/locale-zh.m4 b/m4/locale-zh.m4
new file mode 100644
index 0000000..b9f9eef
--- /dev/null
+++ b/m4/locale-zh.m4
@@ -0,0 +1,137 @@
+# locale-zh.m4 serial 15
+dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Determine the name of a chinese locale with GB18030 encoding.
+AC_DEFUN([gt_LOCALE_ZH_CN],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [
+ AC_LANG_CONFTEST([AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <time.h>
+#if HAVE_LANGINFO_CODESET
+# include <langinfo.h>
+#endif
+#include <stdlib.h>
+#include <string.h>
+struct tm t;
+char buf[16];
+int main ()
+{
+ /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
+ imitates locale dependent behaviour by looking at the environment
+ variables, and all locales use the UTF-8 encoding. */
+#if defined __BEOS__ || defined __HAIKU__
+ return 1;
+#else
+ /* Check whether the given locale name is recognized by the system. */
+# if defined _WIN32 && !defined __CYGWIN__
+ /* On native Windows, setlocale(category, "") looks at the system settings,
+ not at the environment variables. Also, when an encoding suffix such
+ as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
+ category of the locale to "C". */
+ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
+ || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
+ return 1;
+# else
+ if (setlocale (LC_ALL, "") == NULL) return 1;
+# endif
+ /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
+ On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
+ is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
+ On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "646". In this situation,
+ some unit tests fail.
+ On MirBSD 10, when an unsupported locale is specified, setlocale()
+ succeeds but then nl_langinfo(CODESET) is "UTF-8". */
+# if HAVE_LANGINFO_CODESET
+ {
+ const char *cs = nl_langinfo (CODESET);
+ if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
+ || strcmp (cs, "UTF-8") == 0)
+ return 1;
+ }
+# endif
+# ifdef __CYGWIN__
+ /* On Cygwin, avoid locale names without encoding suffix, because the
+ locale_charset() function relies on the encoding suffix. Note that
+ LC_ALL is set on the command line. */
+ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
+# endif
+ /* Check whether in a month name, no byte in the range 0x80..0x9F occurs.
+ This excludes the UTF-8 encoding (except on MirBSD). */
+ {
+ const char *p;
+ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
+ if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1;
+ for (p = buf; *p != '\0'; p++)
+ if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0)
+ return 1;
+ }
+ /* Check whether a typical GB18030 multibyte sequence is recognized as a
+ single wide character. This excludes the GB2312 and GBK encodings. */
+ if (mblen ("\203\062\332\066", 5) != 4)
+ return 1;
+ return 0;
+#endif
+}
+ ]])])
+ if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+ case "$host_os" in
+ # Handle native Windows specially, because there setlocale() interprets
+ # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
+ # "fr" or "fra" as "French" or "French_France.1252",
+ # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
+ # "ja" as "Japanese" or "Japanese_Japan.932",
+ # and similar.
+ mingw*)
+ # Test for the hypothetical native Windows locale name.
+ if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=Chinese_China.54936
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ ;;
+ solaris2.8)
+ # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are
+ # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK.
+ # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core.
+ gt_cv_locale_zh_CN=none
+ ;;
+ *)
+ # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
+ # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
+ # configure script would override the LC_ALL setting. Likewise for
+ # LC_CTYPE, which is also set at the beginning of the configure script.
+ # Test for the locale name without encoding suffix.
+ if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN
+ else
+ # Test for the locale name with explicit encoding suffix.
+ if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
+ gt_cv_locale_zh_CN=zh_CN.GB18030
+ else
+ # None found.
+ gt_cv_locale_zh_CN=none
+ fi
+ fi
+ ;;
+ esac
+ else
+ # If there was a link error, due to mblen(), the system is so old that
+ # it certainly doesn't have a chinese locale.
+ gt_cv_locale_zh_CN=none
+ fi
+ rm -fr conftest*
+ ])
+ LOCALE_ZH_CN=$gt_cv_locale_zh_CN
+ AC_SUBST([LOCALE_ZH_CN])
+])
diff --git a/m4/locale_h.m4 b/m4/locale_h.m4
new file mode 100644
index 0000000..a33a0a4
--- /dev/null
+++ b/m4/locale_h.m4
@@ -0,0 +1,174 @@
+# locale_h.m4 serial 28
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_LOCALE_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+
+ dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_*
+ dnl members of 'struct lconv'.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ dnl If <stddef.h> is replaced, then <locale.h> must also be replaced.
+ AC_REQUIRE([gl_STDDEF_H])
+
+ AC_REQUIRE([gl_LOCALE_T])
+
+ dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv'
+ dnl only if _LCONV_C99 is defined.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ solaris*)
+ AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.])
+ ;;
+ esac
+
+ AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001],
+ [gl_cv_header_locale_h_posix2001],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <locale.h>
+ int x = LC_MESSAGES;
+ int y = sizeof (((struct lconv *) 0)->decimal_point);]],
+ [[]])],
+ [gl_cv_header_locale_h_posix2001=yes],
+ [gl_cv_header_locale_h_posix2001=no])])
+
+ dnl Check whether 'struct lconv' is complete.
+ dnl Bionic libc's 'struct lconv' is just a dummy.
+ dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x,
+ dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members.
+ AC_CACHE_CHECK([whether struct lconv is properly defined],
+ [gl_cv_sys_struct_lconv_ok],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <locale.h>
+ struct lconv l;
+ int x = sizeof (l.decimal_point);
+ int y = sizeof (l.int_p_cs_precedes);]],
+ [[]])],
+ [gl_cv_sys_struct_lconv_ok=yes],
+ [gl_cv_sys_struct_lconv_ok=no])
+ ])
+ if test $gl_cv_sys_struct_lconv_ok = no; then
+ dnl On native Windows with MSVC, merely define these member names as macros.
+ dnl This avoids trouble in C++ mode.
+ case "$host_os" in
+ mingw*)
+ AC_EGREP_CPP([Special], [
+#ifdef _MSC_VER
+ Special
+#endif
+ ],
+ [],
+ [REPLACE_STRUCT_LCONV=1])
+ ;;
+ *) REPLACE_STRUCT_LCONV=1 ;;
+ esac
+ fi
+
+ dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_NEXT_HEADERS([locale.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <locale.h>
+/* Some systems provide declarations in a non-standard header. */
+#if HAVE_XLOCALE_H
+# include <xlocale.h>
+#endif
+ ]],
+ [setlocale newlocale duplocale freelocale])
+])
+
+dnl Checks to determine whether the system has the locale_t type,
+dnl and how to obtain it.
+AC_DEFUN([gl_LOCALE_T],
+[
+ dnl Persuade glibc and Solaris <locale.h> to define locale_t.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ dnl Check whether use of locale_t requires inclusion of <xlocale.h>,
+ dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by
+ dnl itself, we assume that <xlocale.h> will do so.
+ AC_CACHE_CHECK([whether locale.h defines locale_t],
+ [gl_cv_header_locale_has_locale_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <locale.h>
+ locale_t x;]],
+ [[]])],
+ [gl_cv_header_locale_has_locale_t=yes],
+ [gl_cv_header_locale_has_locale_t=no])
+ ])
+
+ dnl Check for <xlocale.h>.
+ AC_CHECK_HEADERS_ONCE([xlocale.h])
+ if test $ac_cv_header_xlocale_h = yes; then
+ HAVE_XLOCALE_H=1
+ if test $gl_cv_header_locale_has_locale_t = yes; then
+ gl_cv_header_locale_h_needs_xlocale_h=no
+ else
+ gl_cv_header_locale_h_needs_xlocale_h=yes
+ fi
+ HAVE_LOCALE_T=1
+ else
+ HAVE_XLOCALE_H=0
+ gl_cv_header_locale_h_needs_xlocale_h=no
+ if test $gl_cv_header_locale_has_locale_t = yes; then
+ HAVE_LOCALE_T=1
+ else
+ HAVE_LOCALE_T=0
+ fi
+ fi
+ AC_SUBST([HAVE_XLOCALE_H])
+])
+
+# gl_LOCALE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_LOCALE_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_LOCALE_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_LOCALE_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE])
+ HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE])
+ HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE])
+ REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV])
+ REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE])
+ REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE])
+ REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE])
+ REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE])
+ REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV])
+ LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS])
+])
diff --git a/m4/localeconv.m4 b/m4/localeconv.m4
new file mode 100644
index 0000000..ae225fe
--- /dev/null
+++ b/m4/localeconv.m4
@@ -0,0 +1,22 @@
+# localeconv.m4 serial 1
+dnl Copyright (C) 2012-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_LOCALECONV],
+[
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+ AC_REQUIRE([gl_LOCALE_H])
+
+ if test $REPLACE_STRUCT_LCONV = 1; then
+ REPLACE_LOCALECONV=1
+ fi
+])
+
+# Prerequisites of lib/localeconv.c.
+AC_DEFUN([gl_PREREQ_LOCALECONV],
+[
+ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [],
+ [[#include <locale.h>]])
+])
diff --git a/m4/localename.m4 b/m4/localename.m4
new file mode 100644
index 0000000..8c43a13
--- /dev/null
+++ b/m4/localename.m4
@@ -0,0 +1,55 @@
+# localename.m4 serial 10
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_LOCALENAME],
+[
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+ AC_REQUIRE([gl_LOCALE_T])
+ AC_REQUIRE([gt_LC_MESSAGES])
+ AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME])
+ AC_REQUIRE([gt_INTL_MACOSX])
+ AC_CHECK_HEADERS_ONCE([langinfo.h])
+ if test $HAVE_LOCALE_T = 1; then
+ gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]])
+ gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]])
+ gl_CHECK_FUNCS_ANDROID([freelocale], [[#include <locale.h>]])
+ gl_func_newlocale="$ac_cv_func_newlocale"
+ gl_func_duplocale="$ac_cv_func_duplocale"
+ gl_func_freelocale="$ac_cv_func_freelocale"
+ else
+ dnl In 2019, some versions of z/OS lack the locale_t type and have broken
+ dnl newlocale, duplocale, freelocale functions.
+ gl_cv_onwards_func_newlocale='future OS version'
+ gl_cv_onwards_func_duplocale='future OS version'
+ gl_cv_onwards_func_freelocale='future OS version'
+ gl_func_newlocale=no
+ gl_func_duplocale=no
+ gl_func_freelocale=no
+ fi
+ if test $gl_func_newlocale != yes; then
+ HAVE_NEWLOCALE=0
+ case "$gl_cv_onwards_func_newlocale" in
+ future*) REPLACE_NEWLOCALE=1 ;;
+ esac
+ fi
+ if test $gl_func_duplocale != yes; then
+ HAVE_DUPLOCALE=0
+ case "$gl_cv_onwards_func_duplocale" in
+ future*) REPLACE_DUPLOCALE=1 ;;
+ esac
+ fi
+ if test $gl_func_freelocale != yes; then
+ HAVE_FREELOCALE=0
+ case "$gl_cv_onwards_func_freelocale" in
+ future*) REPLACE_FREELOCALE=1 ;;
+ esac
+ fi
+ if test $gt_localename_enhances_locale_funcs = yes; then
+ REPLACE_NEWLOCALE=1
+ REPLACE_DUPLOCALE=1
+ REPLACE_FREELOCALE=1
+ fi
+])
diff --git a/m4/lock.m4 b/m4/lock.m4
new file mode 100644
index 0000000..88cf557
--- /dev/null
+++ b/m4/lock.m4
@@ -0,0 +1,47 @@
+# lock.m4 serial 14
+dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_LOCK],
+[
+ AC_REQUIRE([gl_THREADLIB])
+ if test "$gl_threads_api" = posix; then
+ # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
+ # pthread_rwlock_* functions.
+ has_rwlock=false
+ AC_CHECK_TYPE([pthread_rwlock_t],
+ [has_rwlock=true
+ AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
+ [Define if the POSIX multithreading library has read/write locks.])],
+ [],
+ [#include <pthread.h>])
+ if $has_rwlock; then
+ gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
+ fi
+ # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM(
+ [[#include <pthread.h>]],
+ [[
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
+ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+ ]])],
+ [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
+ [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+ fi
+ gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/glthread/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [:])
diff --git a/m4/lseek.m4 b/m4/lseek.m4
new file mode 100644
index 0000000..6e1ab6f
--- /dev/null
+++ b/m4/lseek.m4
@@ -0,0 +1,98 @@
+# lseek.m4 serial 13
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_LSEEK],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe],
+ [case "$host_os" in
+ mingw*)
+ dnl Native Windows.
+ dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or
+ dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT)
+ dnl for a pipe depends on the environment: In a Cygwin 1.5
+ dnl environment it succeeds (wrong); in a Cygwin 1.7 environment
+ dnl it fails with a wrong errno value.
+ gl_cv_func_lseek_pipe=no
+ ;;
+ *)
+ if test $cross_compiling = no; then
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h> /* for off_t */
+#include <stdio.h> /* for SEEK_CUR */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#else /* on Windows with MSVC */
+# include <io.h>
+#endif
+]GL_MDA_DEFINES],
+[[
+ /* Exit with success only if stdin is seekable. */
+ return lseek (0, (off_t)0, SEEK_CUR) < 0;
+]])],
+ [if test -s conftest$ac_exeext \
+ && ./conftest$ac_exeext < conftest.$ac_ext \
+ && test 1 = "`echo hi \
+ | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then
+ gl_cv_func_lseek_pipe=yes
+ else
+ gl_cv_func_lseek_pipe=no
+ fi
+ ],
+ [gl_cv_func_lseek_pipe=no])
+ else
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[
+#if defined __BEOS__
+/* BeOS mistakenly return 0 when trying to seek on pipes. */
+ Choke me.
+#endif]])],
+ [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no])
+ fi
+ ;;
+ esac
+ ])
+ if test "$gl_cv_func_lseek_pipe" = no; then
+ REPLACE_LSEEK=1
+ AC_DEFINE([LSEEK_PIPE_BROKEN], [1],
+ [Define to 1 if lseek does not detect pipes.])
+ fi
+
+ AC_REQUIRE([gl_SYS_TYPES_H])
+ if test $WINDOWS_64_BIT_OFF_T = 1; then
+ REPLACE_LSEEK=1
+ fi
+
+ AS_IF([test $REPLACE_LSEEK = 0],
+ [AC_CACHE_CHECK([whether SEEK_DATA works but is incompatible with GNU],
+ [gl_cv_func_lseek_works_but_incompatible],
+ [AC_PREPROC_IFELSE(
+ [AC_LANG_SOURCE(
+ dnl Use macOS "9999" to stand for a future fixed macOS version.
+ dnl See ../lib/unistd.in.h and <https://bugs.gnu.org/61386>.
+ [[#include <unistd.h>
+ #if defined __APPLE__ && defined __MACH__ && defined SEEK_DATA
+ # ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
+ # include <AvailabilityMacros.h>
+ # endif
+ # if 99990000 <= MAC_OS_X_VERSION_MIN_REQUIRED
+ # define LSEEK_WORKS_BUT_IS_INCOMPATIBLE_WITH_GNU
+ # endif
+ #endif
+ #ifndef LSEEK_WORKS_BUT_IS_INCOMPATIBLE_WITH_GNU
+ #error "No need to work around the bug"
+ #endif
+ ]])],
+ [gl_cv_func_lseek_works_but_incompatible=yes],
+ [gl_cv_func_lseek_works_but_incompatible=no])])
+ if test "$gl_cv_func_lseek_works_but_incompatible" = yes; then
+ REPLACE_LSEEK=1
+ fi])
+])
diff --git a/m4/lstat.m4 b/m4/lstat.m4
new file mode 100644
index 0000000..2bc4669
--- /dev/null
+++ b/m4/lstat.m4
@@ -0,0 +1,82 @@
+# serial 34
+
+# Copyright (C) 1997-2001, 2003-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering.
+
+AC_DEFUN([gl_FUNC_LSTAT],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ dnl If lstat does not exist, the replacement <sys/stat.h> does
+ dnl "#define lstat stat", and lstat.c is a no-op.
+ AC_CHECK_FUNCS_ONCE([lstat])
+ if test $ac_cv_func_lstat = yes; then
+ AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK])
+ case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in
+ solaris* | *no)
+ REPLACE_LSTAT=1
+ ;;
+ esac
+ else
+ HAVE_LSTAT=0
+ fi
+])
+
+# Prerequisites of lib/lstat.c.
+AC_DEFUN([gl_PREREQ_LSTAT], [:])
+
+AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
+[
+ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it
+ dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ.
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether lstat correctly handles trailing slash],
+ [gl_cv_func_lstat_dereferences_slashed_symlink],
+ [rm -f conftest.sym conftest.file
+ echo >conftest.file
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT],
+ [[struct stat sbuf;
+ if (symlink ("conftest.file", "conftest.sym") != 0)
+ return 1;
+ /* Linux will dereference the symlink and fail, as required by
+ POSIX. That is better in the sense that it means we will not
+ have to compile and use the lstat wrapper. */
+ return lstat ("conftest.sym/", &sbuf) == 0;
+ ]])],
+ [gl_cv_func_lstat_dereferences_slashed_symlink=yes],
+ [gl_cv_func_lstat_dereferences_slashed_symlink=no],
+ [case "$host_os" in
+ linux-* | linux)
+ # Guess yes on Linux systems.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ midipix*)
+ # Guess yes on systems that emulate the Linux system calls.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ *-gnu* | gnu*)
+ # Guess yes on glibc systems.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
+ mingw*)
+ # Guess no on native Windows.
+ gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
+ *)
+ # If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.sym conftest.file
+ ])
+ case "$gl_cv_func_lstat_dereferences_slashed_symlink" in
+ *yes)
+ AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1],
+ [Define to 1 if 'lstat' dereferences a symlink specified
+ with a trailing slash.])
+ ;;
+ esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..b0b5e9c
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,437 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+ [_LT_WITH_AIX_SONAME([aix])])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for pkg in $enableval; do
+ IFS=$lt_save_ifs
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+ AC_MSG_CHECKING([which variant of shared library versioning to provide])
+ AC_ARG_WITH([aix-soname],
+ [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+ [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+ [case $withval in
+ aix|svr4|both)
+ ;;
+ *)
+ AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+ ;;
+ esac
+ lt_cv_with_aix_soname=$with_aix_soname],
+ [AC_CACHE_VAL([lt_cv_with_aix_soname],
+ [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+ with_aix_soname=$lt_cv_with_aix_soname])
+ AC_MSG_RESULT([$with_aix_soname])
+ if test aix != "$with_aix_soname"; then
+ # For the AIX way of multilib, we name the shared archive member
+ # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+ # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+ # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+ # the AIX toolchain works better with OBJECT_MODE set (default 32).
+ if test 64 = "${OBJECT_MODE-32}"; then
+ shared_archive_member_spec=shr_64
+ else
+ shared_archive_member_spec=shr
+ fi
+ fi
+ ;;
+*)
+ with_aix_soname=aix
+ ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+ [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [lt_p=${PACKAGE-default}
+ case $withval in
+ yes|no) pic_mode=$withval ;;
+ *)
+ pic_mode=default
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+ for lt_pkg in $withval; do
+ IFS=$lt_save_ifs
+ if test "X$lt_pkg" = "X$lt_p"; then
+ pic_mode=yes
+ fi
+ done
+ IFS=$lt_save_ifs
+ ;;
+ esac],
+ [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..902508b
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,124 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..b155d0a
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,24 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
+# Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 4245 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.7])
+m4_define([LT_PACKAGE_REVISION], [2.4.7])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.7'
+macro_revision='2.4.7'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..0f7a875
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,99 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/m4/malloc.m4 b/m4/malloc.m4
new file mode 100644
index 0000000..bc58017
--- /dev/null
+++ b/m4/malloc.m4
@@ -0,0 +1,175 @@
+# malloc.m4 serial 29
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# This is adapted with modifications from upstream Autoconf here:
+# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949
+AC_DEFUN([_AC_FUNC_MALLOC_IF],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+ AC_CACHE_CHECK([whether malloc (0) returns nonnull],
+ [ac_cv_func_malloc_0_nonnull],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ ]],
+ [[void *p = malloc (0);
+ int result = !p;
+ free (p);
+ return result;]])
+ ],
+ [ac_cv_func_malloc_0_nonnull=yes],
+ [ac_cv_func_malloc_0_nonnull=no],
+ [case "$host_os" in
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midipix* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_malloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2])
+])# _AC_FUNC_MALLOC_IF
+
+# gl_FUNC_MALLOC_GNU
+# ------------------
+# Replace malloc if it is not compatible with GNU libc.
+AC_DEFUN([gl_FUNC_MALLOC_GNU],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX"
+ if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then
+ _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1])
+ fi
+])
+
+# gl_FUNC_MALLOC_PTRDIFF
+# ----------------------
+# Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX,
+# and replace malloc otherwise.
+AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF])
+ test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+])
+
+# Test whether malloc, realloc, calloc refuse to create objects
+# larger than what can be expressed in ptrdiff_t.
+# Set gl_cv_func_malloc_gnu to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF],
+[
+ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe],
+ [gl_cv_malloc_ptrdiff],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdint.h>
+ ]],
+ [[/* 64-bit ptrdiff_t is so wide that no practical platform
+ can exceed it. */
+ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0)
+
+ /* On rare machines where size_t fits in ptrdiff_t there
+ is no problem. */
+ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX)
+
+ /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t
+ bounds even on 32-bit platforms. We don't know which
+ non-glibc systems are safe. */
+ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__))
+
+ #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE
+ return 0;
+ #else
+ #error "malloc might not be ptrdiff_t safe"
+ syntax error
+ #endif
+ ]])],
+ [gl_cv_malloc_ptrdiff=yes],
+ [gl_cv_malloc_ptrdiff=no])
+ ])
+])
+
+# gl_FUNC_MALLOC_POSIX
+# --------------------
+# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails, and doesn't mess up with ptrdiff_t overflow), and replace
+# malloc if it is not.
+AC_DEFUN([gl_FUNC_MALLOC_POSIX],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF])
+ AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+ if test "$gl_cv_func_malloc_posix" = yes; then
+ AC_DEFINE([HAVE_MALLOC_POSIX], [1],
+ [Define if malloc, realloc, and calloc set errno on allocation failure.])
+ else
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=1
+ fi
+])
+
+# Test whether malloc, realloc, calloc set errno to ENOMEM on failure.
+# Set gl_cv_func_malloc_posix to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_POSIX],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure],
+ [gl_cv_func_malloc_posix],
+ [
+ dnl It is too dangerous to try to allocate a large amount of memory:
+ dnl some systems go to their knees when you do that. So assume that
+ dnl all Unix implementations of the function set errno on failure,
+ dnl except on those platforms where we have seen 'test-malloc-gnu',
+ dnl 'test-realloc-gnu', 'test-calloc-gnu' fail.
+ case "$host_os" in
+ mingw*)
+ gl_cv_func_malloc_posix=no ;;
+ irix* | solaris*)
+ dnl On IRIX 6.5, the three functions return NULL with errno unset
+ dnl when the argument is larger than PTRDIFF_MAX.
+ dnl On Solaris 11.3, the three functions return NULL with errno set
+ dnl to EAGAIN, not ENOMEM, when the argument is larger than
+ dnl PTRDIFF_MAX.
+ dnl Here is a test program:
+m4_divert_push([KILL])
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#define ptrdiff_t long
+#ifndef PTRDIFF_MAX
+# define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1))
+#endif
+
+int main ()
+{
+ void *p;
+
+ fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX);
+
+ errno = 0;
+ p = malloc ((unsigned long) PTRDIFF_MAX + 1);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ errno = 0;
+ p = calloc (PTRDIFF_MAX / 2 + 1, 2);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ errno = 0;
+ p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1);
+ fprintf (stderr, "p=%p errno=%d\n", p, errno);
+
+ return 0;
+}
+m4_divert_pop([KILL])
+ gl_cv_func_malloc_posix=no ;;
+ *)
+ gl_cv_func_malloc_posix=yes ;;
+ esac
+ ])
+])
diff --git a/m4/malloca.m4 b/m4/malloca.m4
new file mode 100644
index 0000000..1d777eb
--- /dev/null
+++ b/m4/malloca.m4
@@ -0,0 +1,14 @@
+# malloca.m4 serial 2
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MALLOCA],
+[
+ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables
+ dnl @ALLOCA@ and @LTALLOCA@.
+ dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies.
+ AC_REQUIRE([gl_EEMALLOC])
+])
diff --git a/m4/manywarnings.m4 b/m4/manywarnings.m4
new file mode 100644
index 0000000..2fac86e
--- /dev/null
+++ b/m4/manywarnings.m4
@@ -0,0 +1,211 @@
+# manywarnings.m4 serial 23
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
+# --------------------------------------------------
+# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
+# Elements separated by whitespace. In set logic terms, the function
+# does OUTVAR = LISTVAR \ REMOVEVAR.
+AC_DEFUN([gl_MANYWARN_COMPLEMENT],
+[
+ gl_warn_set=
+ set x $2; shift
+ for gl_warn_item
+ do
+ case " $3 " in
+ *" $gl_warn_item "*)
+ ;;
+ *)
+ gl_AS_VAR_APPEND([gl_warn_set], [" $gl_warn_item"])
+ ;;
+ esac
+ done
+ $1=$gl_warn_set
+])
+
+# gl_MANYWARN_ALL_GCC(VARIABLE)
+# -----------------------------
+# Add all documented GCC warning parameters to variable VARIABLE.
+# Note that you need to test them using gl_WARN_ADD if you want to
+# make sure your gcc understands it.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
+AC_DEFUN([gl_MANYWARN_ALL_GCC],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+# Specialization for _AC_LANG = C.
+AC_DEFUN([gl_MANYWARN_ALL_GCC(C)],
+[
+ AC_LANG_PUSH([C])
+
+ dnl First, check for some issues that only occur when combining multiple
+ dnl gcc warning categories.
+ AC_REQUIRE([AC_PROG_CC])
+ if test -n "$GCC"; then
+
+ dnl Check if -Wextra -Werror -Wno-missing-field-initializers is supported
+ dnl with the current $CC $CFLAGS $CPPFLAGS.
+ AC_CACHE_CHECK([whether -Wno-missing-field-initializers is supported],
+ [gl_cv_cc_nomfi_supported],
+ [gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wextra -Werror -Wno-missing-field-initializers"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]], [[]])],
+ [gl_cv_cc_nomfi_supported=yes],
+ [gl_cv_cc_nomfi_supported=no])
+ CFLAGS="$gl_save_CFLAGS"
+ ])
+
+ if test "$gl_cv_cc_nomfi_supported" = yes; then
+ dnl Now check whether -Wno-missing-field-initializers is needed
+ dnl for the { 0, } construct.
+ AC_CACHE_CHECK([whether -Wno-missing-field-initializers is needed],
+ [gl_cv_cc_nomfi_needed],
+ [gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Wextra -Werror"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[int f (void)
+ {
+ typedef struct { int a; int b; } s_t;
+ s_t s1 = { 0, };
+ return s1.b;
+ }
+ ]],
+ [[]])],
+ [gl_cv_cc_nomfi_needed=no],
+ [gl_cv_cc_nomfi_needed=yes])
+ CFLAGS="$gl_save_CFLAGS"
+ ])
+ fi
+
+ dnl Next, check if -Werror -Wuninitialized is useful with the
+ dnl user's choice of $CFLAGS; some versions of gcc warn that it
+ dnl has no effect if -O is not also used
+ AC_CACHE_CHECK([whether -Wuninitialized is supported],
+ [gl_cv_cc_uninitialized_supported],
+ [gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror -Wuninitialized"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]], [[]])],
+ [gl_cv_cc_uninitialized_supported=yes],
+ [gl_cv_cc_uninitialized_supported=no])
+ CFLAGS="$gl_save_CFLAGS"
+ ])
+
+ fi
+
+ # List all gcc warning categories.
+ # To compare this list to your installed GCC's, run this Bash command:
+ #
+ # comm -3 \
+ # <((sed -n 's/^ *\(-[^ 0-9][^ ]*\).*/\1/p' manywarnings.m4; \
+ # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec) | sort) \
+ # <(LC_ALL=C gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort)
+
+ $1=
+ for gl_manywarn_item in -fanalyzer -fno-common \
+ -Wall \
+ -Warith-conversion \
+ -Wbad-function-cast \
+ -Wcast-align=strict \
+ -Wdate-time \
+ -Wdisabled-optimization \
+ -Wdouble-promotion \
+ -Wduplicated-branches \
+ -Wduplicated-cond \
+ -Wextra \
+ -Wformat-signedness \
+ -Winit-self \
+ -Winline \
+ -Winvalid-pch \
+ -Wlogical-op \
+ -Wmissing-declarations \
+ -Wmissing-include-dirs \
+ -Wmissing-prototypes \
+ -Wnested-externs \
+ -Wnull-dereference \
+ -Wold-style-definition \
+ -Wopenmp-simd \
+ -Woverlength-strings \
+ -Wpacked \
+ -Wpointer-arith \
+ -Wshadow \
+ -Wstack-protector \
+ -Wstrict-overflow \
+ -Wstrict-prototypes \
+ -Wsuggest-attribute=cold \
+ -Wsuggest-attribute=const \
+ -Wsuggest-attribute=format \
+ -Wsuggest-attribute=malloc \
+ -Wsuggest-attribute=noreturn \
+ -Wsuggest-attribute=pure \
+ -Wsuggest-final-methods \
+ -Wsuggest-final-types \
+ -Wsync-nand \
+ -Wsystem-headers \
+ -Wtrampolines \
+ -Wuninitialized \
+ -Wunknown-pragmas \
+ -Wunsafe-loop-optimizations \
+ -Wunused-macros \
+ -Wvariadic-macros \
+ -Wvector-operation-performance \
+ -Wvla \
+ -Wwrite-strings \
+ \
+ ; do
+ gl_AS_VAR_APPEND([$1], [" $gl_manywarn_item"])
+ done
+
+ # gcc --help=warnings outputs an unusual form for these options; list
+ # them here so that the above 'comm' command doesn't report a false match.
+ gl_AS_VAR_APPEND([$1], [' -Warray-bounds=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wattribute-alias=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wbidi-chars=any,ucn'])
+ gl_AS_VAR_APPEND([$1], [' -Wformat-overflow=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wformat=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wformat-truncation=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wimplicit-fallthrough=5'])
+ gl_AS_VAR_APPEND([$1], [' -Wshift-overflow=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wuse-after-free=3'])
+ gl_AS_VAR_APPEND([$1], [' -Wunused-const-variable=2'])
+ gl_AS_VAR_APPEND([$1], [' -Wvla-larger-than=4031'])
+
+ # These are needed for older GCC versions.
+ if test -n "$GCC"; then
+ case `($CC --version) 2>/dev/null` in
+ 'gcc (GCC) '[[0-3]].* | \
+ 'gcc (GCC) '4.[[0-7]].*)
+ gl_AS_VAR_APPEND([$1], [' -fdiagnostics-show-option'])
+ gl_AS_VAR_APPEND([$1], [' -funit-at-a-time'])
+ ;;
+ esac
+ fi
+
+ # Disable specific options as needed.
+ if test "$gl_cv_cc_nomfi_needed" = yes; then
+ gl_AS_VAR_APPEND([$1], [' -Wno-missing-field-initializers'])
+ fi
+
+ if test "$gl_cv_cc_uninitialized_supported" = no; then
+ gl_AS_VAR_APPEND([$1], [' -Wno-uninitialized'])
+ fi
+
+ # This warning have too many false alarms in GCC 11.2.1.
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101713
+ gl_AS_VAR_APPEND([$1], [' -Wno-analyzer-malloc-leak'])
+
+ AC_LANG_POP([C])
+])
+
+# Specialization for _AC_LANG = C++.
+AC_DEFUN([gl_MANYWARN_ALL_GCC(C++)],
+[
+ gl_MANYWARN_ALL_GCC_CXX_IMPL([$1])
+])
diff --git a/m4/mbrtowc.m4 b/m4/mbrtowc.m4
new file mode 100644
index 0000000..4bf91be
--- /dev/null
+++ b/m4/mbrtowc.m4
@@ -0,0 +1,793 @@
+# mbrtowc.m4 serial 39 -*- coding: utf-8 -*-
+dnl Copyright (C) 2001-2002, 2004-2005, 2008-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBRTOWC],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ AC_REQUIRE([gl_PTHREADLIB])
+ AC_CHECK_HEADERS_ONCE([threads.h])
+
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ gl_MBSTATE_T_BROKEN
+
+ AC_CHECK_FUNCS_ONCE([mbrtowc])
+ if test $ac_cv_func_mbrtowc = no; then
+ HAVE_MBRTOWC=0
+ AC_CHECK_DECLS([mbrtowc],,, [[
+ #include <wchar.h>
+ ]])
+ if test $ac_cv_have_decl_mbrtowc = yes; then
+ dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although
+ dnl it does not have the function. Avoid a collision with gnulib's
+ dnl replacement.
+ REPLACE_MBRTOWC=1
+ fi
+ else
+ if test $REPLACE_MBSTATE_T = 1; then
+ REPLACE_MBRTOWC=1
+ else
+ gl_MBRTOWC_NULL_ARG1
+ gl_MBRTOWC_NULL_ARG2
+ gl_MBRTOWC_RETVAL
+ gl_MBRTOWC_NUL_RETVAL
+ gl_MBRTOWC_STORES_INCOMPLETE
+ gl_MBRTOWC_EMPTY_INPUT
+ gl_MBRTOWC_C_LOCALE
+ case "$gl_cv_func_mbrtowc_null_arg1" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1],
+ [Define if the mbrtowc function has the NULL pwc argument bug.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_null_arg2" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1],
+ [Define if the mbrtowc function has the NULL string argument bug.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_retval" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1],
+ [Define if the mbrtowc function returns a wrong return value.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_nul_retval" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1],
+ [Define if the mbrtowc function does not return 0 for a NUL character.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_stores_incomplete" in
+ *no) ;;
+ *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1],
+ [Define if the mbrtowc function stores a wide character when reporting incomplete input.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_empty_input" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1],
+ [Define if the mbrtowc function does not return (size_t) -2
+ for empty input.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in
+ *yes) ;;
+ *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1],
+ [Define if the mbrtowc function may signal encoding errors in the C locale.])
+ REPLACE_MBRTOWC=1
+ ;;
+ esac
+ fi
+ fi
+ if test $REPLACE_MBSTATE_T = 1; then
+ case "$host_os" in
+ mingw*) MBRTOWC_LIB= ;;
+ *)
+ gl_WEAK_SYMBOLS
+ case "$gl_cv_have_weak" in
+ *yes) MBRTOWC_LIB= ;;
+ *) MBRTOWC_LIB="$LIBPTHREAD" ;;
+ esac
+ ;;
+ esac
+ else
+ MBRTOWC_LIB=
+ fi
+ dnl MBRTOWC_LIB is expected to be '-pthread' or '-lpthread' on AIX
+ dnl with gcc or xlc, and empty otherwise.
+ AC_SUBST([MBRTOWC_LIB])
+ dnl For backward compatibility.
+ LIB_MBRTOWC="$MBRTOWC_LIB"
+ AC_SUBST([LIB_MBRTOWC])
+])
+
+dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that
+dnl redefines the semantics of the given mbstate_t type.
+dnl Result is REPLACE_MBSTATE_T.
+dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to
+dnl avoid inconsistencies.
+
+AC_DEFUN([gl_MBSTATE_T_BROKEN],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ AC_CHECK_FUNCS_ONCE([mbsinit])
+ AC_CHECK_FUNCS_ONCE([mbrtowc])
+ dnl On native Windows, we know exactly how mbsinit() behaves and don't need
+ dnl to override it, even if - like on MSVC - mbsinit() is only defined as
+ dnl an inline function, not as a global function.
+ if case "$host_os" in
+ mingw*) true ;;
+ *) test $ac_cv_func_mbsinit = yes ;;
+ esac \
+ && test $ac_cv_func_mbrtowc = yes; then
+ gl_MBRTOWC_INCOMPLETE_STATE
+ gl_MBRTOWC_SANITYCHECK
+ REPLACE_MBSTATE_T=0
+ case "$gl_cv_func_mbrtowc_incomplete_state" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ case "$gl_cv_func_mbrtowc_sanitycheck" in
+ *yes) ;;
+ *) REPLACE_MBSTATE_T=1 ;;
+ esac
+ else
+ REPLACE_MBSTATE_T=1
+ fi
+])
+
+dnl Test whether mbrtowc puts the state into non-initial state when parsing an
+dnl incomplete multibyte character.
+dnl Result is gl_cv_func_mbrtowc_incomplete_state.
+
+AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_JA])
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc handles incomplete characters],
+ [gl_cv_func_mbrtowc_incomplete_state],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on AIX and OSF/1.
+ aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_JA != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_incomplete_state=yes],
+ [gl_cv_func_mbrtowc_incomplete_state=no],
+ [:])
+ else
+ if test $LOCALE_FR_UTF8 != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ const char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ if (mbsinit (&state))
+ return 2;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_incomplete_state=yes],
+ [gl_cv_func_mbrtowc_incomplete_state=no],
+ [:])
+ fi
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc works not worse than mbtowc.
+dnl Result is gl_cv_func_mbrtowc_sanitycheck.
+
+AC_DEFUN([gl_MBRTOWC_SANITYCHECK],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_ZH_CN])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc],
+ [gl_cv_func_mbrtowc_sanitycheck],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Solaris 8.
+ solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_ZH_CN != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8:
+ mbrtowc returns 2, and sets wc to 0x00F0.
+ mbtowc returns 4 (correct) and sets wc to 0x5EDC. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 6, &state) != 4
+ && mbtowc (&wc, input + 3, 6) == 4)
+ return 2;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_sanitycheck=yes],
+ [gl_cv_func_mbrtowc_sanitycheck=no],
+ [:])
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc supports a NULL pwc argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg1.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG1],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument],
+ [gl_cv_func_mbrtowc_null_arg1],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Solaris.
+ solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_FR_UTF8 != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ char input[] = "\303\237er";
+ mbstate_t state;
+ wchar_t wc;
+ size_t ret;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ wc = (wchar_t) 0xBADFACE;
+ ret = mbrtowc (&wc, input, 5, &state);
+ if (ret != 2)
+ result |= 1;
+ if (!mbsinit (&state))
+ result |= 2;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ ret = mbrtowc (NULL, input, 5, &state);
+ if (ret != 2) /* Solaris 7 fails here: ret is -1. */
+ result |= 4;
+ if (!mbsinit (&state))
+ result |= 8;
+ }
+ return result;
+}]])],
+ [gl_cv_func_mbrtowc_null_arg1=yes],
+ [gl_cv_func_mbrtowc_null_arg1=no],
+ [:])
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc supports a NULL string argument correctly.
+dnl Result is gl_cv_func_mbrtowc_null_arg2.
+
+AC_DEFUN([gl_MBRTOWC_NULL_ARG2],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument],
+ [gl_cv_func_mbrtowc_null_arg2],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on OSF/1.
+ osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_FR_UTF8 != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ mbstate_t state;
+ wchar_t wc;
+ int ret;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ wc = (wchar_t) 0xBADFACE;
+ mbrtowc (&wc, NULL, 5, &state);
+ /* Check that wc was not modified. */
+ if (wc != (wchar_t) 0xBADFACE)
+ return 2;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_null_arg2=yes],
+ [gl_cv_func_mbrtowc_null_arg2=no],
+ [:])
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc, when parsing the end of a multibyte character,
+dnl correctly returns the number of bytes that were needed to complete the
+dnl character (not the total number of bytes of the multibyte character).
+dnl Result is gl_cv_func_mbrtowc_retval.
+
+AC_DEFUN([gl_MBRTOWC_RETVAL],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ AC_REQUIRE([gt_LOCALE_JA])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether mbrtowc has a correct return value],
+ [gl_cv_func_mbrtowc_retval],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on HP-UX, Solaris, native Windows.
+ hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_retval="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
+ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+ int found_some_locale = 0;
+ /* This fails on Solaris. */
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ char input[] = "B\303\274\303\237er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ {
+ input[1] = '\0';
+ if (mbrtowc (&wc, input + 2, 5, &state) != 1)
+ result |= 1;
+ }
+ found_some_locale = 1;
+ }
+ /* This fails on HP-UX 11.11. */
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2))
+ {
+ input[1] = '\0';
+ if (mbrtowc (&wc, input + 2, 5, &state) != 2)
+ result |= 2;
+ }
+ found_some_locale = 1;
+ }
+ /* This fails on native Windows. */
+ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+ {
+ char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 4;
+ }
+ found_some_locale = 1;
+ }
+ if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+ {
+ char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 8;
+ }
+ found_some_locale = 1;
+ }
+ if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+ {
+ char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2))
+ {
+ input[3] = '\0';
+ if (mbrtowc (&wc, input + 4, 4, &state) != 1)
+ result |= 16;
+ }
+ found_some_locale = 1;
+ }
+ return (found_some_locale ? result : 77);
+}]])],
+ [gl_cv_func_mbrtowc_retval=yes],
+ [if test $? != 77; then
+ gl_cv_func_mbrtowc_retval=no
+ fi
+ ],
+ [:])
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0.
+dnl Result is gl_cv_func_mbrtowc_nul_retval.
+
+AC_DEFUN([gl_MBRTOWC_NUL_RETVAL],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_ZH_CN])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character],
+ [gl_cv_func_mbrtowc_nul_retval],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Solaris 8 and 9.
+ solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_ZH_CN != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ /* This fails on Solaris 8 and 9. */
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ mbstate_t state;
+ wchar_t wc;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "", 1, &state) != 0)
+ return 2;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_nul_retval=yes],
+ [gl_cv_func_mbrtowc_nul_retval=no],
+ [:])
+ fi
+ ])
+])
+
+dnl Test whether mbrtowc stores a wide character when reporting incomplete
+dnl input.
+
+AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc stores incomplete characters],
+ [gl_cv_func_mbrtowc_stores_incomplete],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;;
+ *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;;
+ esac
+changequote([,])dnl
+ case "$host_os" in
+ mingw*)
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ int result = 0;
+ if (setlocale (LC_ALL, "French_France.65001") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 1;
+ }
+ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 2;
+ }
+ if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 4;
+ }
+ if (setlocale (LC_ALL, "Chinese_China.936") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ result |= 8;
+ }
+ return result;
+}]])],
+ [gl_cv_func_mbrtowc_stores_incomplete=no],
+ [gl_cv_func_mbrtowc_stores_incomplete=yes],
+ [:])
+ ;;
+ *)
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ if test $LOCALE_FR_UTF8 != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof (mbstate_t));
+ if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2)
+ && wc != (wchar_t) 0xBADFACE)
+ return 1;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_mbrtowc_stores_incomplete=no],
+ [gl_cv_func_mbrtowc_stores_incomplete=yes],
+ [:])
+ fi
+ ;;
+ esac
+ ])
+])
+
+dnl Test whether mbrtowc returns the correct value on empty input.
+
+AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether mbrtowc works on empty input],
+ [gl_cv_func_mbrtowc_empty_input],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on AIX and glibc systems.
+ aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+ *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;;
+ esac
+changequote([,])dnl
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <wchar.h>
+ static wchar_t wc;
+ static mbstate_t mbs;
+ int
+ main (void)
+ {
+ return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2;
+ }]])],
+ [gl_cv_func_mbrtowc_empty_input=yes],
+ [gl_cv_func_mbrtowc_empty_input=no],
+ [:])
+ ])
+])
+
+dnl Test whether mbrtowc reports encoding errors in the C locale.
+dnl Although POSIX was never intended to allow this, the GNU C Library
+dnl and other implementations do it. See:
+dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932
+
+AC_DEFUN([gl_MBRTOWC_C_LOCALE],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether the C locale is free of encoding errors],
+ [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+ gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal"
+
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <limits.h>
+ #include <locale.h>
+ #include <wchar.h>
+ ]], [[
+ int i;
+ char *locale = setlocale (LC_ALL, "C");
+ if (! locale)
+ return 2;
+ for (i = CHAR_MIN; i <= CHAR_MAX; i++)
+ {
+ char c = i;
+ wchar_t wc;
+ mbstate_t mbs = { 0, };
+ size_t ss = mbrtowc (&wc, &c, 1, &mbs);
+ if (1 < ss)
+ return 3;
+ }
+ return 0;
+ ]])],
+ [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes],
+ [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no],
+ [case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;;
+ esac
+ ])
+ ])
+])
+
+# Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c.
+AC_DEFUN([gl_PREREQ_MBRTOWC], [
+ AC_REQUIRE([AC_C_INLINE])
+ :
+])
+
+# Prerequisites of lib/mbtowc-lock.c.
+AC_DEFUN([gl_PREREQ_MBTOWC_LOCK],
+[
+ gl_VISIBILITY
+])
+
+
+dnl From Paul Eggert
+
+dnl This is an override of an autoconf macro.
+
+AC_DEFUN([AC_FUNC_MBRTOWC],
+[
+ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60.
+ AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
+ [gl_cv_func_mbrtowc],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>]],
+ [[wchar_t wc;
+ char const s[] = "";
+ size_t n = 1;
+ mbstate_t state;
+ return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])],
+ [gl_cv_func_mbrtowc=yes],
+ [gl_cv_func_mbrtowc=no])])
+ if test $gl_cv_func_mbrtowc = yes; then
+ AC_DEFINE([HAVE_MBRTOWC], [1],
+ [Define to 1 if mbrtowc and mbstate_t are properly declared.])
+ fi
+])
diff --git a/m4/mbsinit.m4 b/m4/mbsinit.m4
new file mode 100644
index 0000000..c388a8b
--- /dev/null
+++ b/m4/mbsinit.m4
@@ -0,0 +1,44 @@
+# mbsinit.m4 serial 9
+dnl Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBSINIT],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ gl_MBSTATE_T_BROKEN
+
+ AC_CHECK_FUNCS_ONCE([mbsinit])
+ if test $ac_cv_func_mbsinit = no; then
+ HAVE_MBSINIT=0
+ AC_CHECK_DECLS([mbsinit],,, [[
+ #include <wchar.h>
+ ]])
+ if test $ac_cv_have_decl_mbsinit = yes; then
+ dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although
+ dnl it does not have the function. Avoid a collision with gnulib's
+ dnl replacement.
+ REPLACE_MBSINIT=1
+ fi
+ else
+ if test $REPLACE_MBSTATE_T = 1; then
+ REPLACE_MBSINIT=1
+ else
+ dnl On mingw, mbsinit() always returns 1, which is inappropriate for
+ dnl states produced by mbrtowc() for an incomplete multibyte character
+ dnl in multibyte locales.
+ case "$host_os" in
+ mingw*) REPLACE_MBSINIT=1 ;;
+ esac
+ fi
+ fi
+])
+
+# Prerequisites of lib/mbsinit.c.
+AC_DEFUN([gl_PREREQ_MBSINIT], [
+ :
+])
diff --git a/m4/mbstate_t.m4 b/m4/mbstate_t.m4
new file mode 100644
index 0000000..dcd66b9
--- /dev/null
+++ b/m4/mbstate_t.m4
@@ -0,0 +1,34 @@
+# mbstate_t.m4 serial 14
+dnl Copyright (C) 2000-2002, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# From Paul Eggert.
+
+# BeOS 5 has <wchar.h> but does not define mbstate_t,
+# so you can't declare an object of that type.
+# Check for this incompatibility with Standard C.
+
+# AC_TYPE_MBSTATE_T
+# -----------------
+AC_DEFUN([AC_TYPE_MBSTATE_T],
+[
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11
+
+ AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT[
+ #include <wchar.h>]],
+ [[mbstate_t x; return sizeof x;]])],
+ [ac_cv_type_mbstate_t=yes],
+ [ac_cv_type_mbstate_t=no])])
+ if test $ac_cv_type_mbstate_t = yes; then
+ AC_DEFINE([HAVE_MBSTATE_T], [1],
+ [Define to 1 if <wchar.h> declares mbstate_t.])
+ else
+ AC_DEFINE([mbstate_t], [int],
+ [Define to a type if <wchar.h> does not define.])
+ fi
+])
diff --git a/m4/mbtowc.m4 b/m4/mbtowc.m4
new file mode 100644
index 0000000..02ed6eb
--- /dev/null
+++ b/m4/mbtowc.m4
@@ -0,0 +1,27 @@
+# mbtowc.m4 serial 5
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MBTOWC],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+
+ gl_CHECK_FUNCS_ANDROID([mbtowc], [[#include <stdlib.h>]])
+ if test $ac_cv_func_mbtowc = no; then
+ HAVE_MBTOWC=0
+ case "$gl_cv_onwards_func_mbtowc" in
+ future*) REPLACE_MBTOWC=1 ;;
+ esac
+ else
+ if false; then
+ REPLACE_MBTOWC=1
+ fi
+ fi
+])
+
+# Prerequisites of lib/mbtowc.c.
+AC_DEFUN([gl_PREREQ_MBTOWC], [
+ :
+])
diff --git a/m4/memchr.m4 b/m4/memchr.m4
new file mode 100644
index 0000000..4f1aed0
--- /dev/null
+++ b/m4/memchr.m4
@@ -0,0 +1,106 @@
+# memchr.m4 serial 18
+dnl Copyright (C) 2002-2004, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Check for prerequisites for memory fence checks.
+ gl_FUNC_MMAP_ANON
+ AC_CHECK_HEADERS_ONCE([sys/mman.h])
+ AC_CHECK_FUNCS_ONCE([mprotect])
+
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ # Detect platform-specific bugs in some versions of glibc:
+ # memchr should not dereference anything with length 0
+ # https://bugzilla.redhat.com/show_bug.cgi?id=499689
+ # memchr should not dereference overestimated length after a match
+ # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+ # memchr should cast the second argument to 'unsigned char'.
+ # This bug exists in Android 4.3.
+ # Assume that memchr works on platforms that lack mprotect.
+ AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+# define MAP_FILE 0
+# endif
+#endif
+]], [[
+ int result = 0;
+ char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+ const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+ const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+ const int flags = MAP_FILE | MAP_PRIVATE;
+ int fd = open ("/dev/zero", O_RDONLY, 0666);
+ if (fd >= 0)
+# endif
+ {
+ int pagesize = getpagesize ();
+ char *two_pages =
+ (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+ flags, fd, 0);
+ if (two_pages != (char *)(-1)
+ && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+ fence = two_pages + pagesize;
+ }
+#endif
+ if (fence)
+ {
+ /* Test against bugs on glibc systems. */
+ if (memchr (fence, 0, 0))
+ result |= 1;
+ strcpy (fence - 9, "12345678");
+ if (memchr (fence - 9, 0, 79) != fence - 1)
+ result |= 2;
+ if (memchr (fence - 1, 0, 3) != fence - 1)
+ result |= 4;
+ /* Test against bug on AIX 7.2. */
+ if (memchr (fence - 4, '6', 16) != fence - 4)
+ result |= 8;
+ }
+ /* Test against bug on Android 4.3. */
+ {
+ char input[3];
+ input[0] = 'a';
+ input[1] = 'b';
+ input[2] = 'c';
+ if (memchr (input, 0x789abc00 | 'b', 3) != input + 1)
+ result |= 16;
+ }
+ return result;
+]])],
+ [gl_cv_func_memchr_works=yes],
+ [gl_cv_func_memchr_works=no],
+ [case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_memchr_works="guessing no" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_memchr_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_memchr_works" in
+ *yes) ;;
+ *) REPLACE_MEMCHR=1 ;;
+ esac
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+ AC_CHECK_HEADERS([bp-sym.h])
+])
diff --git a/m4/mempcpy.m4 b/m4/mempcpy.m4
new file mode 100644
index 0000000..612b77b
--- /dev/null
+++ b/m4/mempcpy.m4
@@ -0,0 +1,29 @@
+# mempcpy.m4 serial 14
+dnl Copyright (C) 2003-2004, 2006-2007, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_MEMPCPY],
+[
+ dnl Persuade glibc <string.h> to declare mempcpy().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'.
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ gl_CHECK_FUNCS_ANDROID([mempcpy], [[#include <string.h>]])
+ if test $ac_cv_func_mempcpy = no; then
+ HAVE_MEMPCPY=0
+ case "$gl_cv_onwards_func_mempcpy" in
+ future*) REPLACE_MEMPCPY=1 ;;
+ esac
+ fi
+])
+
+# Prerequisites of lib/mempcpy.c.
+AC_DEFUN([gl_PREREQ_MEMPCPY], [
+ :
+])
diff --git a/m4/minmax.m4 b/m4/minmax.m4
new file mode 100644
index 0000000..fd09846
--- /dev/null
+++ b/m4/minmax.m4
@@ -0,0 +1,44 @@
+# minmax.m4 serial 4
+dnl Copyright (C) 2005, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_PREREQ([2.53])
+
+AC_DEFUN([gl_MINMAX],
+[
+ AC_REQUIRE([gl_PREREQ_MINMAX])
+])
+
+# Prerequisites of lib/minmax.h.
+AC_DEFUN([gl_PREREQ_MINMAX],
+[
+ gl_MINMAX_IN_HEADER([limits.h])
+ gl_MINMAX_IN_HEADER([sys/param.h])
+])
+
+dnl gl_MINMAX_IN_HEADER(HEADER)
+dnl The parameter has to be a literal header name; it cannot be macro,
+dnl nor a shell variable. (Because autoheader collects only AC_DEFINE
+dnl invocations with a literal macro name.)
+AC_DEFUN([gl_MINMAX_IN_HEADER],
+[
+ m4_pushdef([header], AS_TR_SH([$1]))
+ m4_pushdef([HEADER], AS_TR_CPP([$1]))
+ AC_CACHE_CHECK([whether <$1> defines MIN and MAX],
+ [gl_cv_minmax_in_]header,
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <$1>
+ int x = MIN (42, 17);]],
+ [[]])],
+ [gl_cv_minmax_in_]header[=yes],
+ [gl_cv_minmax_in_]header[=no])])
+ if test $gl_cv_minmax_in_[]header = yes; then
+ AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1,
+ [Define to 1 if <$1> defines the MIN and MAX macros.])
+ fi
+ m4_popdef([HEADER])
+ m4_popdef([header])
+])
diff --git a/m4/mkdir.m4 b/m4/mkdir.m4
new file mode 100644
index 0000000..c2bc4da
--- /dev/null
+++ b/m4/mkdir.m4
@@ -0,0 +1,91 @@
+# serial 18
+
+# Copyright (C) 2001, 2003-2004, 2006, 2008-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# On some systems, mkdir ("foo/", 0700) fails because of the trailing slash.
+# On others, mkdir ("foo/./", 0700) mistakenly succeeds.
+# On such systems, arrange to use a wrapper function.
+AC_DEFUN([gl_FUNC_MKDIR],
+[dnl
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ AC_CACHE_CHECK([whether mkdir handles trailing slash],
+ [gl_cv_func_mkdir_trailing_slash_works],
+ [rm -rf conftest.dir
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ ]GL_MDA_DEFINES],
+ [[return mkdir ("conftest.dir/", 0700);]])],
+ [gl_cv_func_mkdir_trailing_slash_works=yes],
+ [gl_cv_func_mkdir_trailing_slash_works=no],
+ [case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
+ # Guess yes on MSVC, no on mingw.
+ mingw*) AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+ ],
+ [gl_cv_func_mkdir_trailing_slash_works="guessing yes"],
+ [gl_cv_func_mkdir_trailing_slash_works="guessing no"])
+ ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -rf conftest.dir
+ ])
+ case "$gl_cv_func_mkdir_trailing_slash_works" in
+ *yes) ;;
+ *)
+ REPLACE_MKDIR=1
+ ;;
+ esac
+
+ AC_CACHE_CHECK([whether mkdir handles trailing dot],
+ [gl_cv_func_mkdir_trailing_dot_works],
+ [rm -rf conftest.dir
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ ]GL_MDA_DEFINES],
+ [[return !mkdir ("conftest.dir/./", 0700);]])],
+ [gl_cv_func_mkdir_trailing_dot_works=yes],
+ [gl_cv_func_mkdir_trailing_dot_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -rf conftest.dir
+ ]
+ )
+ case "$gl_cv_func_mkdir_trailing_dot_works" in
+ *yes) ;;
+ *)
+ REPLACE_MKDIR=1
+ AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly
+ creates a directory given with a trailing dot component.])
+ ;;
+ esac
+])
diff --git a/m4/mkstemp.m4 b/m4/mkstemp.m4
new file mode 100644
index 0000000..d4a15ea
--- /dev/null
+++ b/m4/mkstemp.m4
@@ -0,0 +1,87 @@
+#serial 29
+
+# Copyright (C) 2001, 2003-2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a
+# silly limit that it can create no more than 26 files from a given template.
+# Other systems lack mkstemp altogether.
+# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create
+# only 32 files per process.
+# On some hosts, mkstemp creates files with mode 0666, which is a security
+# problem and a violation of POSIX 2008.
+# On systems like the above, arrange to use the replacement function.
+AC_DEFUN([gl_FUNC_MKSTEMP],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ AC_CHECK_FUNCS_ONCE([mkstemp])
+ if test $ac_cv_func_mkstemp = yes; then
+ AC_CACHE_CHECK([for working mkstemp],
+ [gl_cv_func_working_mkstemp],
+ [
+ mkdir conftest.mkstemp
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT
+ GL_MDA_DEFINES],
+ [[int result = 0;
+ int i;
+ off_t large = (off_t) 4294967295u;
+ if (large < 0)
+ large = 2147483647;
+ umask (0);
+ for (i = 0; i < 70; i++)
+ {
+ char templ[] = "conftest.mkstemp/coXXXXXX";
+ int (*mkstemp_function) (char *) = mkstemp;
+ int fd = mkstemp_function (templ);
+ if (fd < 0)
+ result |= 1;
+ else
+ {
+ struct stat st;
+ if (lseek (fd, large, SEEK_SET) != large)
+ result |= 2;
+ if (fstat (fd, &st) < 0)
+ result |= 4;
+ else if (st.st_mode & 0077)
+ result |= 8;
+ if (close (fd))
+ result |= 16;
+ }
+ }
+ return result;]])],
+ [gl_cv_func_working_mkstemp=yes],
+ [gl_cv_func_working_mkstemp=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_working_mkstemp="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_working_mkstemp="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -rf conftest.mkstemp
+ ])
+ case "$gl_cv_func_working_mkstemp" in
+ *yes) ;;
+ *)
+ REPLACE_MKSTEMP=1
+ ;;
+ esac
+ else
+ HAVE_MKSTEMP=0
+ fi
+])
+
+# Prerequisites of lib/mkstemp.c.
+AC_DEFUN([gl_PREREQ_MKSTEMP],
+[
+])
diff --git a/m4/mmap-anon.m4 b/m4/mmap-anon.m4
new file mode 100644
index 0000000..d07d26e
--- /dev/null
+++ b/m4/mmap-anon.m4
@@ -0,0 +1,55 @@
+# mmap-anon.m4 serial 12
+dnl Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Detect how mmap can be used to create anonymous (not file-backed) memory
+# mappings.
+# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
+# and MAP_ANON exist and have the same value.
+# - On HP-UX, only MAP_ANONYMOUS exists.
+# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, only MAP_ANON exists.
+# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
+# used.
+
+AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON],
+[
+ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+ # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+ # irrelevant for anonymous mappings.
+ AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+
+ # Try to allow MAP_ANONYMOUS.
+ gl_have_mmap_anonymous=no
+ if test $gl_have_mmap = yes; then
+ AC_MSG_CHECKING([for MAP_ANONYMOUS])
+ AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+ I cannot identify this map
+#endif
+],
+ [gl_have_mmap_anonymous=yes])
+ if test $gl_have_mmap_anonymous != yes; then
+ AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANON
+ I cannot identify this map
+#endif
+],
+ [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
+ [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
+ gl_have_mmap_anonymous=yes])
+ fi
+ AC_MSG_RESULT([$gl_have_mmap_anonymous])
+ if test $gl_have_mmap_anonymous = yes; then
+ AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
+ [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+ config.h and <sys/mman.h>.])
+ fi
+ fi
+])
diff --git a/m4/mode_t.m4 b/m4/mode_t.m4
new file mode 100644
index 0000000..82197c0
--- /dev/null
+++ b/m4/mode_t.m4
@@ -0,0 +1,26 @@
+# mode_t.m4 serial 2
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and
+# include <sys/types.h>.
+
+# Define PROMOTED_MODE_T to the type that is the result of "default argument
+# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t.
+AC_DEFUN([gl_PROMOTED_TYPE_MODE_T],
+[
+ AC_REQUIRE([AC_TYPE_MODE_T])
+ AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [
+ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int',
+ dnl and to itself otherwise. This assumption is not guaranteed by the ISO C
+ dnl standard, but we don't know of any real-world counterexamples.
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]],
+ [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])],
+ [gl_cv_promoted_mode_t='int'],
+ [gl_cv_promoted_mode_t='mode_t'])
+ ])
+ AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t],
+ [Define to the type that is the result of default argument promotions of type mode_t.])
+])
diff --git a/m4/msvc-inval.m4 b/m4/msvc-inval.m4
new file mode 100644
index 0000000..8d9d21b
--- /dev/null
+++ b/m4/msvc-inval.m4
@@ -0,0 +1,19 @@
+# msvc-inval.m4 serial 1
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MSVC_INVAL],
+[
+ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler])
+ if test $ac_cv_func__set_invalid_parameter_handler = yes; then
+ HAVE_MSVC_INVALID_PARAMETER_HANDLER=1
+ AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1],
+ [Define to 1 on MSVC platforms that have the "invalid parameter handler"
+ concept.])
+ else
+ HAVE_MSVC_INVALID_PARAMETER_HANDLER=0
+ fi
+ AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER])
+])
diff --git a/m4/msvc-nothrow.m4 b/m4/msvc-nothrow.m4
new file mode 100644
index 0000000..0263e49
--- /dev/null
+++ b/m4/msvc-nothrow.m4
@@ -0,0 +1,10 @@
+# msvc-nothrow.m4 serial 1
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MSVC_NOTHROW],
+[
+ AC_REQUIRE([gl_MSVC_INVAL])
+])
diff --git a/m4/multiarch.m4 b/m4/multiarch.m4
new file mode 100644
index 0000000..3ba5b0f
--- /dev/null
+++ b/m4/multiarch.m4
@@ -0,0 +1,65 @@
+# multiarch.m4 serial 9
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine whether the compiler is or may be producing universal binaries.
+#
+# On Mac OS X 10.5 and later systems, the user can create libraries and
+# executables that work on multiple system types--known as "fat" or
+# "universal" binaries--by specifying multiple '-arch' options to the
+# compiler but only a single '-arch' option to the preprocessor. Like
+# this:
+#
+# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+# CPP="gcc -E" CXXCPP="g++ -E"
+#
+# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
+
+AC_DEFUN_ONCE([gl_MULTIARCH],
+[
+ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
+ AC_CACHE_CHECK([whether the compiler produces multi-arch binaries],
+ [gl_cv_c_multiarch],
+ [gl_cv_c_multiarch=no
+ AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE(
+ [[#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+ ]])],
+ [
+ dnl Check for potential -arch flags. It is not universal unless
+ dnl there are at least two -arch flags with different values.
+ arch=
+ prev=
+ for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+ if test -n "$prev"; then
+ case $word in
+ i?86 | x86_64 | ppc | ppc64 | arm | arm64)
+ if test -z "$arch" || test "$arch" = "$word"; then
+ arch="$word"
+ else
+ gl_cv_c_multiarch=yes
+ fi
+ ;;
+ esac
+ prev=
+ else
+ if test "x$word" = "x-arch"; then
+ prev=arch
+ fi
+ fi
+ done
+ ])
+ ])
+ if test $gl_cv_c_multiarch = yes; then
+ APPLE_UNIVERSAL_BUILD=1
+ else
+ APPLE_UNIVERSAL_BUILD=0
+ fi
+ AC_SUBST([APPLE_UNIVERSAL_BUILD])
+])
diff --git a/m4/musl.m4 b/m4/musl.m4
new file mode 100644
index 0000000..e28a3fe
--- /dev/null
+++ b/m4/musl.m4
@@ -0,0 +1,20 @@
+# musl.m4 serial 4
+dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for musl libc, despite the musl libc authors don't like it
+# <https://wiki.musl-libc.org/faq.html>
+# <https://lists.gnu.org/archive/html/bug-gnulib/2018-02/msg00079.html>.
+# From Bruno Haible.
+
+AC_DEFUN_ONCE([gl_MUSL_LIBC],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ *-musl* | midipix*)
+ AC_DEFINE([MUSL_LIBC], [1], [Define to 1 on musl libc.])
+ ;;
+ esac
+])
diff --git a/m4/nanosleep.m4 b/m4/nanosleep.m4
new file mode 100644
index 0000000..e21a3e3
--- /dev/null
+++ b/m4/nanosleep.m4
@@ -0,0 +1,150 @@
+# serial 43
+
+dnl From Jim Meyering.
+dnl Check for the nanosleep function.
+dnl If not found, use the supplied replacement.
+dnl
+
+# Copyright (C) 1999-2001, 2003-2023 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_NANOSLEEP],
+[
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Persuade glibc and Solaris <time.h> to declare nanosleep.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_CHECK_DECLS_ONCE([alarm])
+
+ nanosleep_save_libs=$LIBS
+
+ # Solaris 2.5.1 needs -lposix4 to get the nanosleep function.
+ # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4.
+ NANOSLEEP_LIB=
+ AC_SUBST([NANOSLEEP_LIB])
+ AC_SEARCH_LIBS([nanosleep], [rt posix4],
+ [test "$ac_cv_search_nanosleep" = "none required" ||
+ NANOSLEEP_LIB=$ac_cv_search_nanosleep])
+ if test "x$ac_cv_search_nanosleep" != xno; then
+ dnl The system has a nanosleep function.
+
+ AC_REQUIRE([gl_MULTIARCH])
+ if test $APPLE_UNIVERSAL_BUILD = 1; then
+ # A universal build on Apple Mac OS X platforms.
+ # The test result would be 'no (mishandles large arguments)' in 64-bit
+ # mode but 'yes' in 32-bit mode. But we need a configuration result that
+ # is valid in both modes.
+ gl_cv_func_nanosleep='no (mishandles large arguments)'
+ fi
+
+ AC_CACHE_CHECK([for working nanosleep],
+ [gl_cv_func_nanosleep],
+ [
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <errno.h>
+ #include <limits.h>
+ #include <signal.h>
+ #include <time.h>
+ #include <unistd.h>
+ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+ #define TYPE_MAXIMUM(t) \
+ ((t) (! TYPE_SIGNED (t) \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+
+ #if HAVE_DECL_ALARM
+ static void
+ check_for_SIGALRM (int sig)
+ {
+ if (sig != SIGALRM)
+ _exit (1);
+ }
+ #endif
+
+ int
+ main ()
+ {
+ static struct timespec ts_sleep;
+ static struct timespec ts_remaining;
+ /* Test for major problems first. */
+ if (! nanosleep)
+ return 2;
+ ts_sleep.tv_sec = 0;
+ ts_sleep.tv_nsec = 1;
+ #if HAVE_DECL_ALARM
+ {
+ static struct sigaction act;
+ act.sa_handler = check_for_SIGALRM;
+ sigemptyset (&act.sa_mask);
+ sigaction (SIGALRM, &act, NULL);
+ alarm (1);
+ if (nanosleep (&ts_sleep, NULL) != 0)
+ return 3;
+ /* Test for a minor problem: the handling of large arguments. */
+ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t);
+ ts_sleep.tv_nsec = 999999999;
+ alarm (1);
+ if (nanosleep (&ts_sleep, &ts_remaining) != -1)
+ return 4;
+ if (errno != EINTR)
+ return 5;
+ if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10)
+ return 6;
+ }
+ #else /* A simpler test for native Windows. */
+ if (nanosleep (&ts_sleep, &ts_remaining) < 0)
+ return 3;
+ /* Test for 32-bit mingw bug: negative nanosecond values do not
+ cause failure. */
+ ts_sleep.tv_sec = 1;
+ ts_sleep.tv_nsec = -1;
+ if (nanosleep (&ts_sleep, &ts_remaining) != -1)
+ return 7;
+ #endif
+ return 0;
+ }]])],
+ [gl_cv_func_nanosleep=yes],
+ [case $? in
+ 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)' ;;
+ 7) gl_cv_func_nanosleep='no (mishandles negative tv_nsec)' ;;
+ *) gl_cv_func_nanosleep=no ;;
+ esac],
+ [case "$host_os" in
+ linux*) # Guess it halfway works when the kernel is Linux.
+ gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;;
+ mingw*) # Guess no on native Windows.
+ gl_cv_func_nanosleep='guessing no' ;;
+ *) # If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_nanosleep="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_nanosleep" in
+ *yes)
+ REPLACE_NANOSLEEP=0
+ ;;
+ *)
+ REPLACE_NANOSLEEP=1
+ case "$gl_cv_func_nanosleep" in
+ *"mishandles large arguments"*)
+ AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1],
+ [Define to 1 if nanosleep mishandles large arguments.])
+ ;;
+ esac
+ ;;
+ esac
+ else
+ HAVE_NANOSLEEP=0
+ fi
+ LIBS=$nanosleep_save_libs
+
+ # For backward compatibility.
+ LIB_NANOSLEEP="$NANOSLEEP_LIB"
+ AC_SUBST([LIB_NANOSLEEP])
+])
diff --git a/m4/netinet_in_h.m4 b/m4/netinet_in_h.m4
new file mode 100644
index 0000000..7115419
--- /dev/null
+++ b/m4/netinet_in_h.m4
@@ -0,0 +1,29 @@
+# netinet_in_h.m4 serial 6
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_HEADER_NETINET_IN],
+[
+ AC_CACHE_CHECK([whether <netinet/in.h> is self-contained],
+ [gl_cv_header_netinet_in_h_selfcontained],
+ [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[]])],
+ [gl_cv_header_netinet_in_h_selfcontained=yes],
+ [gl_cv_header_netinet_in_h_selfcontained=no])
+ ])
+ if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
+ GL_GENERATE_NETINET_IN_H=false
+ else
+ GL_GENERATE_NETINET_IN_H=true
+ AC_CHECK_HEADERS([netinet/in.h])
+ gl_CHECK_NEXT_HEADERS([netinet/in.h])
+ if test $ac_cv_header_netinet_in_h = yes; then
+ HAVE_NETINET_IN_H=1
+ else
+ HAVE_NETINET_IN_H=0
+ fi
+ AC_SUBST([HAVE_NETINET_IN_H])
+ fi
+])
diff --git a/m4/nl_langinfo.m4 b/m4/nl_langinfo.m4
new file mode 100644
index 0000000..7648d52
--- /dev/null
+++ b/m4/nl_langinfo.m4
@@ -0,0 +1,80 @@
+# nl_langinfo.m4 serial 11
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_NL_LANGINFO],
+[
+ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS])
+ AC_REQUIRE([gl_LANGINFO_H])
+ gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include <langinfo.h>]])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
+ AC_REQUIRE([gl_PTHREADLIB])
+ AC_CHECK_HEADERS_ONCE([threads.h])
+ if test $ac_cv_func_nl_langinfo = yes; then
+ # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken.
+ AC_CACHE_CHECK([whether YESEXPR works],
+ [gl_cv_func_nl_langinfo_yesexpr_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[#include <langinfo.h>
+]], [[return !*nl_langinfo(YESEXPR);
+]])],
+ [gl_cv_func_nl_langinfo_yesexpr_works=yes],
+ [gl_cv_func_nl_langinfo_yesexpr_works=no],
+ [
+ case "$host_os" in
+ # Guess no on irix systems.
+ irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";;
+ # Guess yes elsewhere.
+ *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";;
+ esac
+ ])
+ ])
+ case $gl_cv_func_nl_langinfo_yesexpr_works in
+ *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;;
+ *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;;
+ esac
+ AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS],
+ [$FUNC_NL_LANGINFO_YESEXPR_WORKS],
+ [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.])
+ # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe.
+ case "$host_os" in
+ solaris*) NL_LANGINFO_MTSAFE=0 ;;
+ *) NL_LANGINFO_MTSAFE=1 ;;
+ esac
+ AC_DEFINE_UNQUOTED([NL_LANGINFO_MTSAFE], [$NL_LANGINFO_MTSAFE],
+ [Define to 1 if nl_langinfo is multithread-safe.])
+ if test $HAVE_LANGINFO_CODESET = 1 \
+ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \
+ && test $HAVE_LANGINFO_ALTMON = 1 \
+ && test $HAVE_LANGINFO_ERA = 1 \
+ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \
+ && test $NL_LANGINFO_MTSAFE = 1; then
+ :
+ else
+ REPLACE_NL_LANGINFO=1
+ AC_DEFINE([REPLACE_NL_LANGINFO], [1],
+ [Define if nl_langinfo exists but is overridden by gnulib.])
+ fi
+ else
+ HAVE_NL_LANGINFO=0
+ case "$gl_cv_onwards_func_nl_langinfo" in
+ future*) REPLACE_NL_LANGINFO=1 ;;
+ esac
+ fi
+ if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then
+ LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB"
+ else
+ LIB_NL_LANGINFO=
+ fi
+ dnl LIB_NL_LANGINFO is expected to be empty everywhere.
+ AC_SUBST([LIB_NL_LANGINFO])
+])
+
+# Prerequisites of lib/nl_langinfo-lock.c.
+AC_DEFUN([gl_PREREQ_NL_LANGINFO_LOCK],
+[
+ gl_VISIBILITY
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..003704c
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,32 @@
+# nls.m4 serial 5 (gettext-0.18)
+dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_NLS],
+[
+ AC_MSG_CHECKING([whether NLS is requested])
+ dnl Default is enabled NLS
+ AC_ARG_ENABLE([nls],
+ [ --disable-nls do not use Native Language Support],
+ USE_NLS=$enableval, USE_NLS=yes)
+ AC_MSG_RESULT([$USE_NLS])
+ AC_SUBST([USE_NLS])
+])
diff --git a/m4/nocrash.m4 b/m4/nocrash.m4
new file mode 100644
index 0000000..6a76638
--- /dev/null
+++ b/m4/nocrash.m4
@@ -0,0 +1,131 @@
+# nocrash.m4 serial 5
+dnl Copyright (C) 2005, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini.
+
+AC_PREREQ([2.13])
+
+dnl Expands to some code for use in .c programs that will cause the configure
+dnl test to exit instead of crashing. This is useful to avoid triggering
+dnl action from a background debugger and to avoid core dumps.
+dnl Usage: ...
+dnl ]GL_NOCRASH[
+dnl ...
+dnl int main() { nocrash_init(); ... }
+AC_DEFUN([GL_NOCRASH],[[
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X. */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens. */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+ EXC_BAD_ACCESS. */
+static void *
+mach_exception_thread (void *arg)
+{
+ /* Buffer for a message to be received. */
+ struct {
+ mach_msg_header_t head;
+ mach_msg_body_t msgh_body;
+ char data[1024];
+ } msg;
+ mach_msg_return_t retval;
+ /* Wait for a message on the exception port. */
+ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+ our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+ if (retval != MACH_MSG_SUCCESS)
+ abort ();
+ exit (1);
+}
+static void
+nocrash_init (void)
+{
+ mach_port_t self = mach_task_self ();
+ /* Allocate a port on which the thread shall listen for exceptions. */
+ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+ == KERN_SUCCESS) {
+ /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */
+ if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+ MACH_MSG_TYPE_MAKE_SEND)
+ == KERN_SUCCESS) {
+ /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting
+ for us. */
+ exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+ /* Create the thread listening on the exception port. */
+ pthread_attr_t attr;
+ pthread_t thread;
+ if (pthread_attr_init (&attr) == 0
+ && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+ && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+ pthread_attr_destroy (&attr);
+ /* Replace the exception port info for these exceptions with our own.
+ Note that we replace the exception port for the entire task, not only
+ for a particular thread. This has the effect that when our exception
+ port gets the message, the thread specific exception port has already
+ been asked, and we don't need to bother about it.
+ See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */
+ task_set_exception_ports (self, mask, our_exception_port,
+ EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+ }
+ }
+ }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows. */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+ switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+ {
+ case EXCEPTION_ACCESS_VIOLATION:
+ case EXCEPTION_IN_PAGE_ERROR:
+ case EXCEPTION_STACK_OVERFLOW:
+ case EXCEPTION_GUARD_PAGE:
+ case EXCEPTION_PRIV_INSTRUCTION:
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
+ case EXCEPTION_DATATYPE_MISALIGNMENT:
+ case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+ case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+ exit (1);
+ }
+ return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+ SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems. */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler. */
+static void
+exception_handler (int sig)
+{
+ _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+ signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+ signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+]])
diff --git a/m4/o-direct.m4 b/m4/o-direct.m4
new file mode 100644
index 0000000..7229d66
--- /dev/null
+++ b/m4/o-direct.m4
@@ -0,0 +1,252 @@
+#serial 2
+# Find a directory in which a disk-simulating file is usable by parted.
+# The problem is that on systems supporting O_DIRECT, open with O_DIRECT
+# fails for some file system types (e.g., tmpfs on linux-2.6.21).
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# From Jim Meyering.
+
+# Set PARTED_USABLE_TEST_DIR to the name of the first usable directory
+# from the list below. If none is usable, set it to the empty string.
+# Consider $TMPDIR only if it specifies an absolute name, and that
+# name contains no shell meta-character. Likewise for $HOME.
+
+# This code is pretty picky. The chosen partition must support aligned reads
+# and writes in blocks of size 512B and 4KB to a file descriptor opened with
+# O_RDWR|O_DIRECT. Reiserfs doesn't support 512-byte reads. On tmpfs,
+# the open fails.
+
+# The candidate directories:
+# . $HOME $TMPDIR /tmp /var/tmp /dev/shm
+AC_DEFUN([parted_FIND_USABLE_TEST_DIR],
+[
+ AC_CACHE_CHECK([for a usable (O_DIRECT-supporting) temporary dir],
+ [parted_cv_func_open_O_DIRECT_temp_dir],
+ [
+ # First of all, if there is no O_DIRECT definition, use ".",
+ # and skip the run-test.
+ AC_EGREP_CPP([frobnozzle], [
+#include <fcntl.h>
+#ifdef O_DIRECT
+frobnozzle
+#endif
+ ], pe_have_O_DIRECT=yes, pe_have_O_DIRECT=no)
+ if test $pe_have_O_DIRECT = no; then
+ # With no O_DIRECT definition, "." is fine.
+ pe_cand_dirs=.
+ else
+ pe_cand_dirs=.
+ for pe_dir in "$HOME" "$TMPDIR"; do
+ case $pe_dir in
+ /tmp) ;;
+ /var/tmp) ;;
+ /dev/shm) ;;
+ /*) case $pe_dir in
+ # Accept $HOME or $TMP only if the value is nice and boring.
+ *[^/a-zA-Z0-9_.-]*) ;;
+ *) pe_cand_dirs="$pe_cand_dirs $pe_dir";;
+ esac
+ esac
+ done
+
+ case $PARTED_TMPDIR in
+ *[^/a-zA-Z0-9_.-]*) ;;
+ *) pe_cand_dirs="$PARTED_TMPDIR $pe_cand_dirs";;
+ esac
+
+ # This is the list of candidate directories.
+ pe_cand_dirs="$pe_cand_dirs /tmp /var/tmp /dev/shm"
+
+ PARTED_CANDIDATE_DIRS=$pe_cand_dirs
+ export PARTED_CANDIDATE_DIRS
+
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE(
+ [[
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define MAX_LOGICAL_BLOCK_SIZE 4096
+static char g_buf[2 * MAX_LOGICAL_BLOCK_SIZE];
+
+static inline void *
+ptr_align (void const *ptr, size_t alignment)
+{
+ char const *p0 = ptr;
+ char const *p1 = p0 + alignment - 1;
+ return (void *) (p1 - (size_t) p1 % alignment);
+}
+
+static int
+create_input_file (char const *file, char const *buf, size_t n_bytes)
+{
+ int fd = open (file, O_CREAT | O_WRONLY, 0600);
+ if (fd < 0)
+ return 1;
+ if (write (fd, buf, n_bytes) != n_bytes)
+ {
+ close (fd);
+ return 1;
+ }
+ return !! close (fd);
+}
+
+static int
+try_o_direct (char const *file, size_t block_size)
+{
+ char *p = ptr_align (g_buf, MAX_LOGICAL_BLOCK_SIZE);
+ int fd;
+
+ if (!(p + block_size < g_buf + sizeof g_buf))
+ return 4;
+
+ fd = open (file, O_RDWR | O_DIRECT);
+ if (fd < 0)
+ return 1;
+
+ if (write (fd, p, block_size) != block_size)
+ return 1;
+
+ if (lseek (fd, 0, SEEK_SET) != 0)
+ return 1;
+
+ if (read (fd, p, block_size) != block_size)
+ return 1;
+
+ return !! close (fd);
+}
+
+#undef stpcpy
+#define stpcpy(a, b) my_stpcpy (a, b)
+static char *
+my_stpcpy (char *dest, const char *src)
+{
+ char *d = dest;
+ const char *s = src;
+ do *d++ = *s; while (*s++ != '\0');
+ return d - 1;
+}
+
+/* The base name of the file we'll create in the mkdtemp-returned
+ temporary directory. */
+#define BASENAME "x"
+
+/* Return 0 upon failure, else the 1-based index of the first
+ useful directory name from PARTED_CANDIDATE_DIRS. */
+int
+main ()
+{
+ char const *env_dirs;
+ char *dirs;
+ char *dir;
+ unsigned int n;
+ int found = 0;
+ size_t dirs_len;
+
+ if ((env_dirs = getenv ("PARTED_CANDIDATE_DIRS")) == NULL)
+ return 0;
+
+ dirs_len = strlen (env_dirs);
+ if ((dirs = strndup (env_dirs, dirs_len)) == NULL)
+ return 0;
+ dir = dirs;
+
+ for (n = 1; ; n++)
+ {
+ size_t dirname_len;
+ char *space;
+
+ /* Skip any leading spaces. */
+ while (*dir == ' ')
+ ++dir;
+
+ space = strchr (dir, ' ');
+ if (space)
+ {
+ *space = '\0';
+ dirname_len = space - dir;
+ }
+ else
+ {
+ dirname_len = strlen (dir);
+ }
+
+ if (dirname_len != 0)
+ {
+ /* Create an mkdtemp template starting with dir. */
+ char *tmp;
+ char *endp;
+ char const *base = "partedOD.XXXXXX";
+ /* Allocate enough space not just for the dir name, but
+ also for the name of the file to create within it. */
+ char *template = malloc (dirname_len + 1 + strlen (base)
+ + 1 + strlen (BASENAME) + 1);
+ if (template != NULL
+ && (endp = stpcpy (stpcpy (stpcpy (template, dir), "/"), base))
+ && (tmp = mkdtemp (template)) != NULL)
+ {
+ /* Append "/BASENAME" to create the file name. */
+ stpcpy (stpcpy (endp, "/"), BASENAME);
+
+ if (create_input_file (tmp, g_buf, sizeof g_buf) == 0
+ && try_o_direct (tmp, 512) == 0
+ && try_o_direct (tmp, MAX_LOGICAL_BLOCK_SIZE) == 0)
+ found = 1;
+
+ unlink (tmp); /* ignore failure */
+ *endp = '\0';
+ rmdir (tmp); /* ignore failure */
+ }
+ free (template);
+ }
+
+ if (found)
+ break;
+
+ dir += dirname_len + 1;
+ if (dirs + dirs_len < dir)
+ {
+ n = 0;
+ break;
+ }
+ }
+ free (dirs);
+
+ return n;
+}
+ ]])],
+ # If the above program exits with status 0, then
+ # there it found no useful directory. Use ".".
+ [parted_cv_func_open_O_DIRECT_temp_dir=.],
+
+ # It found one. The exit status is an index into the list.
+ # We also run this code when the program fails to compile or
+ # to link, as will happen on systems without a mkdtemp function.
+ [pe_err=$?; set _ $pe_cand_dirs; shift
+ eval parted_cv_func_open_O_DIRECT_temp_dir='$'$pe_err],
+
+ # When cross-compiling, use ".".
+ [parted_cv_func_open_O_DIRECT_temp_dir=.]
+ )
+ fi
+ ])
+ PARTED_USABLE_TEST_DIR=$parted_cv_func_open_O_DIRECT_temp_dir
+ AC_SUBST([PARTED_USABLE_TEST_DIR])
+
+ # If the result is ".", don't cache it. The next user of
+ # the cache may well be running from a different file system.
+ dnl Here, I'm using "$as_unset", which is a non-published (i.e., internal)
+ dnl part of autoconf, but we don't expect its name to change any time soon.
+ dnl and by then, it'll probably be ok to use "unset" all by itself.
+ if test "$parted_cv_func_open_O_DIRECT_temp_dir" = .; then
+ $as_unset parted_cv_func_open_O_DIRECT_temp_dir
+ fi
+])
diff --git a/m4/off_t.m4 b/m4/off_t.m4
new file mode 100644
index 0000000..880f347
--- /dev/null
+++ b/m4/off_t.m4
@@ -0,0 +1,18 @@
+# off_t.m4 serial 1
+dnl Copyright (C) 2012-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check whether to override the 'off_t' type.
+dnl Set WINDOWS_64_BIT_OFF_T.
+
+AC_DEFUN([gl_TYPE_OFF_T],
+[
+ m4_ifdef([gl_LARGEFILE], [
+ AC_REQUIRE([gl_LARGEFILE])
+ ], [
+ WINDOWS_64_BIT_OFF_T=0
+ ])
+ AC_SUBST([WINDOWS_64_BIT_OFF_T])
+])
diff --git a/m4/open-cloexec.m4 b/m4/open-cloexec.m4
new file mode 100644
index 0000000..fd572fc
--- /dev/null
+++ b/m4/open-cloexec.m4
@@ -0,0 +1,21 @@
+# Test whether O_CLOEXEC is defined.
+
+dnl Copyright 2017-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_PREPROC_O_CLOEXEC],
+[
+ AC_CACHE_CHECK([for O_CLOEXEC],
+ [gl_cv_macro_O_CLOEXEC],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <fcntl.h>
+ #ifndef O_CLOEXEC
+ choke me;
+ #endif
+ ]],
+ [[return O_CLOEXEC;]])],
+ [gl_cv_macro_O_CLOEXEC=yes],
+ [gl_cv_macro_O_CLOEXEC=no])])
+])
diff --git a/m4/open-slash.m4 b/m4/open-slash.m4
new file mode 100644
index 0000000..1f731f8
--- /dev/null
+++ b/m4/open-slash.m4
@@ -0,0 +1,60 @@
+# open-slash.m4 serial 2
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Tests whether open() and creat() recognize a trailing slash.
+dnl Sets gl_cv_func_open_slash.
+AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ dnl open("foo/") should not create a file when the file name has a
+ dnl trailing slash. FreeBSD only has the problem on symlinks.
+ AC_CHECK_FUNCS_ONCE([lstat])
+ AC_CACHE_CHECK([whether open recognizes a trailing slash],
+ [gl_cv_func_open_slash],
+ [# Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ touch conftest.tmp
+ ln -s conftest.tmp conftest.lnk
+ fi
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <fcntl.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+]GL_MDA_DEFINES[
+int main ()
+{
+ int result = 0;
+#if HAVE_LSTAT
+ if (open ("conftest.lnk/", O_RDONLY) != -1)
+ result |= 1;
+#endif
+ if (open ("conftest.sl/", O_CREAT, 0600) >= 0)
+ result |= 2;
+ return result;
+}]])],
+ [gl_cv_func_open_slash=yes],
+ [gl_cv_func_open_slash=no],
+ [
+changequote(,)dnl
+ case "$host_os" in
+ freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*)
+ gl_cv_func_open_slash="guessing no" ;;
+ *)
+ gl_cv_func_open_slash="guessing yes" ;;
+ esac
+changequote([,])dnl
+ ])
+ rm -f conftest.sl conftest.tmp conftest.lnk
+ ])
+ case "$gl_cv_func_open_slash" in
+ *no)
+ AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1],
+ [Define to 1 if open() fails to recognize a trailing slash.])
+ ;;
+ esac
+])
diff --git a/m4/open.m4 b/m4/open.m4
new file mode 100644
index 0000000..94fa2bb
--- /dev/null
+++ b/m4/open.m4
@@ -0,0 +1,56 @@
+# open.m4 serial 15
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_OPEN],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_PREPROC_O_CLOEXEC])
+ case "$host_os" in
+ mingw* | pw*)
+ REPLACE_OPEN=1
+ ;;
+ *)
+ dnl open("foo/") should not create a file when the file name has a
+ dnl trailing slash. FreeBSD only has the problem on symlinks.
+ AC_CHECK_FUNCS_ONCE([lstat])
+ if test "$gl_cv_macro_O_CLOEXEC" != yes; then
+ REPLACE_OPEN=1
+ fi
+ gl_OPEN_TRAILING_SLASH_BUG
+ case "$gl_cv_func_open_slash" in
+ *no)
+ REPLACE_OPEN=1
+ ;;
+ esac
+ ;;
+ esac
+ dnl Replace open() for supporting the gnulib-defined fchdir() function,
+ dnl to keep fchdir's bookkeeping up-to-date.
+ m4_ifdef([gl_FUNC_FCHDIR], [
+ if test $REPLACE_OPEN = 0; then
+ gl_TEST_FCHDIR
+ if test $HAVE_FCHDIR = 0; then
+ REPLACE_OPEN=1
+ fi
+ fi
+ ])
+ dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag.
+ m4_ifdef([gl_NONBLOCKING_IO], [
+ if test $REPLACE_OPEN = 0; then
+ gl_NONBLOCKING_IO
+ if test $gl_cv_have_open_O_NONBLOCK != yes; then
+ REPLACE_OPEN=1
+ fi
+ fi
+ ])
+])
+
+# Prerequisites of lib/open.c.
+AC_DEFUN([gl_PREREQ_OPEN],
+[
+ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T])
+ :
+])
diff --git a/m4/pathmax.m4 b/m4/pathmax.m4
new file mode 100644
index 0000000..6d47d2c
--- /dev/null
+++ b/m4/pathmax.m4
@@ -0,0 +1,42 @@
+# pathmax.m4 serial 11
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_PATHMAX],
+[
+ dnl Prerequisites of lib/pathmax.h.
+ AC_CHECK_HEADERS_ONCE([sys/param.h])
+])
+
+# Expands to a piece of C program that defines PATH_MAX in the same way as
+# "pathmax.h" will do.
+AC_DEFUN([gl_PATHMAX_SNIPPET], [[
+/* Arrange to define PATH_MAX, like "pathmax.h" does. */
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+#include <limits.h>
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+#ifdef __hpux
+# undef PATH_MAX
+# define PATH_MAX 1024
+#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+# undef PATH_MAX
+# define PATH_MAX 260
+#endif
+]])
+
+# Prerequisites of gl_PATHMAX_SNIPPET.
+AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ],
+[
+ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h])
+])
diff --git a/m4/perror.m4 b/m4/perror.m4
new file mode 100644
index 0000000..9842b24
--- /dev/null
+++ b/m4/perror.m4
@@ -0,0 +1,76 @@
+# perror.m4 serial 12
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PERROR],
+[
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+ AC_REQUIRE([gl_HEADER_ERRNO_H])
+ AC_REQUIRE([gl_FUNC_STRERROR_R])
+ AC_REQUIRE([gl_FUNC_STRERROR_0])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl We intentionally do not check for the broader REPLACE_STRERROR_R,
+ dnl since on glibc systems, strerror_r is replaced only for signature
+ dnl issues, and perror is just fine. Rather, we only want to
+ dnl replace perror if strerror_r was replaced for a content fix.
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" != false:0; then
+ dnl The system's perror() cannot know about the new errno values we add
+ dnl to <errno.h>, or any fix for strerror(0). Replace it.
+ REPLACE_PERROR=1
+ fi
+ case ${gl_cv_func_strerror_r_works-unset} in
+ unset|*yes)
+ AC_CACHE_CHECK([whether perror matches strerror],
+ [gl_cv_func_perror_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ ]],
+ [[char *str = strerror (-1);
+ if (!getenv("CONFTEST_OUTPUT")) return 0;
+ if (!str) str = "";
+ puts (str);
+ errno = -1;
+ perror ("");
+ return 0;
+ ]])],
+ [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \
+ && cmp conftest.txt1 conftest.txt2 >/dev/null; then
+ gl_cv_func_perror_works=yes
+ else
+ gl_cv_func_perror_works=no
+ fi
+ rm -rf conftest.txt1 conftest.txt2],
+ [gl_cv_func_perror_works=no],
+ [case "$host_os" in
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_perror_works="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_perror_works="guessing yes" ;;
+ # Otherwise obey --enable-cross-guesses.
+ *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_perror_works" in
+ *yes) ;;
+ *) REPLACE_PERROR=1 ;;
+ esac
+ ;;
+ *)
+ dnl The system's perror() probably inherits the bugs in the
+ dnl system's strerror_r(). Replace it.
+ REPLACE_PERROR=1
+ ;;
+ esac
+ dnl Does perror clobber the strerror buffer?
+ case "$host_os" in
+ # Yes on Android 11.
+ linux*-android*) REPLACE_PERROR=1 ;;
+ esac
+])
diff --git a/m4/pipe.m4 b/m4/pipe.m4
new file mode 100644
index 0000000..1ad6688
--- /dev/null
+++ b/m4/pipe.m4
@@ -0,0 +1,15 @@
+# pipe.m4 serial 2
+dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PIPE],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+
+ AC_CHECK_FUNCS_ONCE([pipe])
+ if test $ac_cv_func_pipe != yes; then
+ HAVE_PIPE=0
+ fi
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..47f36a4
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 17 (gettext-0.18)
+dnl Copyright (C) 1995-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ([2.50])
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+ AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+ AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+ AC_REQUIRE([AM_NLS])dnl
+
+ dnl Release version of the gettext macros. This is used to ensure that
+ dnl the gettext macros and po/Makefile.in.in are in sync.
+ AC_SUBST([GETTEXT_MACRO_VERSION], [0.18])
+
+ dnl Perform the following tests also if --disable-nls has been given,
+ dnl because they are needed for "make dist" to work.
+
+ dnl Search for GNU msgfmt in the PATH.
+ dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+ dnl The second test excludes FreeBSD msgfmt.
+ AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+ [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT])
+
+ dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+ case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+ *) MSGFMT_015=$MSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+ case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+ *) GMSGFMT_015=$GMSGFMT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([GMSGFMT_015])
+
+ dnl Search for GNU xgettext 0.12 or newer in the PATH.
+ dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+ dnl The second test excludes FreeBSD xgettext.
+ AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+ [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+ (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+ :)
+ dnl Remove leftover from FreeBSD xgettext call.
+ rm -f messages.po
+
+ dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+ case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+ *) XGETTEXT_015=$XGETTEXT ;;
+ esac
+changequote([,])dnl
+ AC_SUBST([XGETTEXT_015])
+
+ dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+ AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+ [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+ dnl Installation directories.
+ dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+ dnl have to define it here, so that it can be used in po/Makefile.
+ test -n "$localedir" || localedir='${datadir}/locale'
+ AC_SUBST([localedir])
+
+ dnl Support for AM_XGETTEXT_OPTION.
+ test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+ AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+ AC_CONFIG_COMMANDS([po-directories], [[
+ for ac_file in $CONFIG_FILES; do
+ # Support "outfile[:infile[:infile...]]"
+ case "$ac_file" in
+ *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ esac
+ # PO directories have a Makefile.in generated from Makefile.in.in.
+ case "$ac_file" in */Makefile.in)
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+ # Treat a directory as a PO directory if and only if it has a
+ # POTFILES.in file. This allows packages to have multiple PO
+ # directories under different names or in different locations.
+ if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+ rm -f "$ac_dir/POTFILES"
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+ cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+ POMAKEFILEDEPS="POTFILES.in"
+ # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+ # on $ac_dir but don't depend on user-specified configuration
+ # parameters.
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # The set of available languages was given in configure.in.
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+ fi
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ done
+ fi
+ test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+ sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+ for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+ if test -f "$f"; then
+ case "$f" in
+ *.orig | *.bak | *~) ;;
+ *) cat "$f" >> "$ac_dir/Makefile" ;;
+ esac
+ fi
+ done
+ fi
+ ;;
+ esac
+ done]],
+ [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+ # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+ # from automake < 1.5.
+ eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+ # Capture the value of LINGUAS because we need it to compute CATALOGS.
+ LINGUAS="${LINGUAS-%UNSET%}"
+ ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+ # When this code is run, in config.status, two variables have already been
+ # set:
+ # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+ # - LINGUAS is the value of the environment variable LINGUAS at configure
+ # time.
+
+changequote(,)dnl
+ # Adjust a relative srcdir.
+ ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+ ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+ ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+ # In autoconf-2.13 it is called $ac_given_srcdir.
+ # In autoconf-2.50 it is called $srcdir.
+ test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+ case "$ac_given_srcdir" in
+ .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+ /*) top_srcdir="$ac_given_srcdir" ;;
+ *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ # Find a way to echo strings without interpreting backslash.
+ if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='echo'
+ else
+ if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+ gt_echo='printf %s\n'
+ else
+ echo_func () {
+ cat <<EOT
+$*
+EOT
+ }
+ gt_echo='echo_func'
+ fi
+ fi
+
+ # A sed script that extracts the value of VARIABLE from a Makefile.
+ sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[ ]*VARIABLE[ ]*=/{
+ # Seen the first line of the variable definition.
+ s/^[ ]*VARIABLE[ ]*=//
+ ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+ # Set POTFILES to the value of the Makefile variable POTFILES.
+ sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+ POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+ # Compute POTFILES_DEPS as
+ # $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+ POTFILES_DEPS=
+ for file in $POTFILES; do
+ POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+ done
+ POMAKEFILEDEPS=""
+
+ if test -n "$OBSOLETE_ALL_LINGUAS"; then
+ test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+ fi
+ if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+ # The LINGUAS file contains the set of available languages.
+ ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+ POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+ else
+ # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+ sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+ ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+ fi
+ # Hide the ALL_LINGUAS assigment from automake < 1.5.
+ eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+ # Compute POFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+ # Compute UPDATEPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+ # Compute DUMMYPOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+ # Compute GMOFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+ # Compute PROPERTIESFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+ # Compute CLASSFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+ # Compute QMFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+ # Compute MSGFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+ # Compute RESOURCESDLLFILES
+ # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+ case "$ac_given_srcdir" in
+ .) srcdirpre= ;;
+ *) srcdirpre='$(srcdir)/' ;;
+ esac
+ POFILES=
+ UPDATEPOFILES=
+ DUMMYPOFILES=
+ GMOFILES=
+ PROPERTIESFILES=
+ CLASSFILES=
+ QMFILES=
+ MSGFILES=
+ RESOURCESDLLFILES=
+ for lang in $ALL_LINGUAS; do
+ POFILES="$POFILES $srcdirpre$lang.po"
+ UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+ DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+ GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+ PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+ CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+ QMFILES="$QMFILES $srcdirpre$lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ # CATALOGS depends on both $ac_dir and the user's LINGUAS
+ # environment variable.
+ INST_LINGUAS=
+ if test -n "$ALL_LINGUAS"; then
+ for presentlang in $ALL_LINGUAS; do
+ useit=no
+ if test "%UNSET%" != "$LINGUAS"; then
+ desiredlanguages="$LINGUAS"
+ else
+ desiredlanguages="$ALL_LINGUAS"
+ fi
+ for desiredlang in $desiredlanguages; do
+ # Use the presentlang catalog if desiredlang is
+ # a. equal to presentlang, or
+ # b. a variant of presentlang (because in this case,
+ # presentlang can be used as a fallback for messages
+ # which are not translated in the desiredlang catalog).
+ case "$desiredlang" in
+ "$presentlang"*) useit=yes;;
+ esac
+ done
+ if test $useit = yes; then
+ INST_LINGUAS="$INST_LINGUAS $presentlang"
+ fi
+ done
+ fi
+ CATALOGS=
+ JAVACATALOGS=
+ QTCATALOGS=
+ TCLCATALOGS=
+ CSHARPCATALOGS=
+ if test -n "$INST_LINGUAS"; then
+ for lang in $INST_LINGUAS; do
+ CATALOGS="$CATALOGS $lang.gmo"
+ JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+ QTCATALOGS="$QTCATALOGS $lang.qm"
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+ done
+ fi
+
+ sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+ if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+ @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+ \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+ # Add dependencies that cannot be formulated as a simple suffix rule.
+ for lang in $ALL_LINGUAS; do
+ frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+ cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+ @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+ \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+ done
+ fi
+ if test -n "$POMAKEFILEDEPS"; then
+ cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+ fi
+ mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+ XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+ XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/priv-set.m4 b/m4/priv-set.m4
new file mode 100644
index 0000000..00cbbd7
--- /dev/null
+++ b/m4/priv-set.m4
@@ -0,0 +1,15 @@
+# serial 8
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by David Bartley.
+
+AC_DEFUN([gl_PRIV_SET],
+[
+ AC_CHECK_FUNCS([getppriv])
+ AC_CHECK_HEADERS_ONCE([priv.h])
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..2d804ac
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 6 (gettext-0.18)
+dnl Copyright (C) 1996-2003, 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ([2.50])
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+ ac_executable_p="test -x"
+else
+ ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL([ac_cv_path_$1],
+[case "[$]$1" in
+ [[\\/]]* | ?:[[\\/]]*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ IFS="$ac_save_IFS"
+ test -z "$ac_dir" && ac_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+ echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+ break 2
+ fi
+ fi
+ done
+ done
+ IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+ AC_MSG_RESULT([$][$1])
+else
+ AC_MSG_RESULT([no])
+fi
+AC_SUBST([$1])dnl
+])
diff --git a/m4/pselect.m4 b/m4/pselect.m4
new file mode 100644
index 0000000..6c3d1b8
--- /dev/null
+++ b/m4/pselect.m4
@@ -0,0 +1,75 @@
+# pselect.m4 serial 11
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PSELECT],
+[
+ AC_REQUIRE([gl_SYS_SELECT_H])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_FUNCS_ONCE([pselect])
+
+ if test $ac_cv_func_pselect = yes; then
+ AC_CACHE_CHECK([whether signature of pselect conforms to POSIX],
+ [gl_cv_sig_pselect],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/select.h>
+ ]],
+ [[int (*p) (int, fd_set *, fd_set *, fd_set *restrict,
+ struct timespec const *restrict,
+ sigset_t const *restrict) = pselect;
+ return !p;]])],
+ [gl_cv_sig_pselect=yes],
+ [gl_cv_sig_pselect=no])])
+
+ dnl On FreeBSD 8.2, pselect() doesn't always reject bad fds.
+ AC_CACHE_CHECK([whether pselect detects invalid fds],
+ [gl_cv_func_pselect_detects_ebadf],
+ [
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#include <unistd.h>
+#include <errno.h>
+]GL_MDA_DEFINES],
+[[
+ fd_set set;
+ dup2(0, 16);
+ FD_ZERO(&set);
+ FD_SET(16, &set);
+ close(16);
+ struct timespec timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = 5000;
+ return pselect (17, &set, NULL, NULL, &timeout, NULL) != -1 || errno != EBADF;
+]])], [gl_cv_func_pselect_detects_ebadf=yes],
+ [gl_cv_func_pselect_detects_ebadf=no],
+ [
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_pselect_detects_ebadf="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case $gl_cv_func_pselect_detects_ebadf in
+ *yes) ;;
+ *) REPLACE_PSELECT=1 ;;
+ esac
+ fi
+
+ if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then
+ REPLACE_PSELECT=1
+ fi
+])
diff --git a/m4/pthread-thread.m4 b/m4/pthread-thread.m4
new file mode 100644
index 0000000..aafd979
--- /dev/null
+++ b/m4/pthread-thread.m4
@@ -0,0 +1,69 @@
+# pthread-thread.m4 serial 2
+dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_PTHREAD_THREAD],
+[
+ AC_REQUIRE([gl_PTHREAD_H])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ dnl Choose function names that don't conflict with the mingw-w64 winpthreads
+ dnl library.
+ REPLACE_PTHREAD_CREATE=1
+ REPLACE_PTHREAD_ATTR_INIT=1
+ REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1
+ REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1
+ REPLACE_PTHREAD_ATTR_DESTROY=1
+ REPLACE_PTHREAD_SELF=1
+ REPLACE_PTHREAD_EQUAL=1
+ REPLACE_PTHREAD_DETACH=1
+ REPLACE_PTHREAD_JOIN=1
+ REPLACE_PTHREAD_EXIT=1
+ else
+ if test $HAVE_PTHREAD_H = 0; then
+ HAVE_PTHREAD_CREATE=0
+ HAVE_PTHREAD_ATTR_INIT=0
+ HAVE_PTHREAD_ATTR_GETDETACHSTATE=0
+ HAVE_PTHREAD_ATTR_SETDETACHSTATE=0
+ HAVE_PTHREAD_ATTR_DESTROY=0
+ HAVE_PTHREAD_SELF=0
+ HAVE_PTHREAD_EQUAL=0
+ HAVE_PTHREAD_DETACH=0
+ HAVE_PTHREAD_JOIN=0
+ HAVE_PTHREAD_EXIT=0
+ else
+ dnl On HP-UX 11.11, pthread_create() and pthread_attr_init() are only
+ dnl defined as inline functions.
+ AC_CACHE_CHECK([whether pthread_create exists as a global function],
+ [gl_cv_func_pthread_create],
+ [saved_LIBS="$LIBS"
+ LIBS="$LIBS $LIBPMULTITHREAD"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [[extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int pthread_create (void);
+ int main ()
+ {
+ return pthread_create ();
+ }
+ ]])],
+ [gl_cv_func_pthread_create=yes],
+ [gl_cv_func_pthread_create=no])
+ LIBS="$saved_LIBS"
+ ])
+ if test $gl_cv_func_pthread_create = no; then
+ REPLACE_PTHREAD_CREATE=1
+ REPLACE_PTHREAD_ATTR_INIT=1
+ AC_DEFINE([PTHREAD_CREATE_IS_INLINE], [1],
+ [Define if pthread_create is an inline function.])
+ fi
+ fi
+ fi
+])
diff --git a/m4/pthread_h.m4 b/m4/pthread_h.m4
new file mode 100644
index 0000000..0d536fc
--- /dev/null
+++ b/m4/pthread_h.m4
@@ -0,0 +1,283 @@
+# pthread_h.m4 serial 8
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_PTHREAD_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_PTHREAD_H_DEFAULTS])
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_PTHREADLIB])
+
+ gl_CHECK_NEXT_HEADERS([pthread.h])
+ if test $ac_cv_header_pthread_h = yes; then
+ HAVE_PTHREAD_H=1
+ dnl On mingw, if --enable-threads=windows or gl_AVOID_WINPTHREAD is used,
+ dnl ignore the <pthread.h> from the mingw-w64 winpthreads library.
+ m4_ifdef([gl_][THREADLIB], [
+ AC_REQUIRE([gl_][THREADLIB])
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ HAVE_PTHREAD_H=0
+ fi
+ ])
+ else
+ HAVE_PTHREAD_H=0
+ fi
+ AC_SUBST([HAVE_PTHREAD_H])
+
+ AC_CHECK_TYPES([pthread_t, pthread_spinlock_t], [], [],
+ [AC_INCLUDES_DEFAULT[
+ #if HAVE_PTHREAD_H
+ #include <pthread.h>
+ #endif]])
+ if test $ac_cv_type_pthread_t != yes; then
+ HAVE_PTHREAD_T=0
+ fi
+ if test $ac_cv_type_pthread_spinlock_t != yes; then
+ HAVE_PTHREAD_SPINLOCK_T=0
+ fi
+
+ dnl Constants may be defined as C preprocessor macros or as enum items.
+
+ AC_CACHE_CHECK([for PTHREAD_CREATE_DETACHED],
+ [gl_cv_const_PTHREAD_CREATE_DETACHED],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ int x = PTHREAD_CREATE_DETACHED;
+ ]],
+ [[]])],
+ [gl_cv_const_PTHREAD_CREATE_DETACHED=yes],
+ [gl_cv_const_PTHREAD_CREATE_DETACHED=no])
+ ])
+ if test $gl_cv_const_PTHREAD_CREATE_DETACHED != yes; then
+ HAVE_PTHREAD_CREATE_DETACHED=0
+ fi
+
+ AC_CACHE_CHECK([for PTHREAD_MUTEX_RECURSIVE],
+ [gl_cv_const_PTHREAD_MUTEX_RECURSIVE],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ int x = PTHREAD_MUTEX_RECURSIVE;
+ ]],
+ [[]])],
+ [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=yes],
+ [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=no])
+ ])
+ if test $gl_cv_const_PTHREAD_MUTEX_RECURSIVE != yes; then
+ HAVE_PTHREAD_MUTEX_RECURSIVE=0
+ fi
+
+ AC_CACHE_CHECK([for PTHREAD_MUTEX_ROBUST],
+ [gl_cv_const_PTHREAD_MUTEX_ROBUST],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ int x = PTHREAD_MUTEX_ROBUST;
+ ]],
+ [[]])],
+ [gl_cv_const_PTHREAD_MUTEX_ROBUST=yes],
+ [gl_cv_const_PTHREAD_MUTEX_ROBUST=no])
+ ])
+ if test $gl_cv_const_PTHREAD_MUTEX_ROBUST != yes; then
+ HAVE_PTHREAD_MUTEX_ROBUST=0
+ fi
+
+ AC_CACHE_CHECK([for PTHREAD_PROCESS_SHARED],
+ [gl_cv_const_PTHREAD_PROCESS_SHARED],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ int x = PTHREAD_PROCESS_SHARED;
+ ]],
+ [[]])],
+ [gl_cv_const_PTHREAD_PROCESS_SHARED=yes],
+ [gl_cv_const_PTHREAD_PROCESS_SHARED=no])
+ ])
+ if test $gl_cv_const_PTHREAD_PROCESS_SHARED != yes; then
+ HAVE_PTHREAD_PROCESS_SHARED=0
+ fi
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, if it is not common
+ dnl enough to be declared everywhere.
+ gl_WARN_ON_USE_PREPARE([[#include <pthread.h>
+ ]], [
+ pthread_create pthread_attr_init pthread_attr_getdetachstate
+ pthread_attr_setdetachstate pthread_attr_destroy pthread_self pthread_equal
+ pthread_detach pthread_join pthread_exit
+ pthread_once
+ pthread_mutex_init pthread_mutexattr_init pthread_mutexattr_gettype
+ pthread_mutexattr_settype pthread_mutexattr_getrobust
+ pthread_mutexattr_setrobust pthread_mutexattr_destroy pthread_mutex_lock
+ pthread_mutex_trylock pthread_mutex_timedlock pthread_mutex_unlock
+ pthread_mutex_destroy
+ pthread_rwlock_init pthread_rwlockattr_init pthread_rwlockattr_destroy
+ pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_tryrdlock
+ pthread_rwlock_trywrlock pthread_rwlock_timedrdlock
+ pthread_rwlock_timedwrlock pthread_rwlock_unlock pthread_rwlock_destroy
+ pthread_cond_init pthread_condattr_init pthread_condattr_destroy
+ pthread_cond_wait pthread_cond_timedwait pthread_cond_signal
+ pthread_cond_broadcast pthread_cond_destroy
+ pthread_key_create pthread_setspecific pthread_getspecific
+ pthread_key_delete
+ pthread_spin_init pthread_spin_lock pthread_spin_trylock pthread_spin_unlock
+ pthread_spin_destroy])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ dnl For backward compatibility with gnulib versions <= 2019-07.
+ LIB_PTHREAD="$LIBPMULTITHREAD"
+ AC_SUBST([LIB_PTHREAD])
+])
+
+# gl_PTHREAD_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_PTHREAD_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_PTHREAD_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_PTHREAD_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_THREAD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_ONCE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_RWLOCK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_COND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_TSS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SPIN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX_TIMEDLOCK])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_PTHREAD_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_PTHREAD_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_PTHREAD_T=1; AC_SUBST([HAVE_PTHREAD_T])
+ HAVE_PTHREAD_SPINLOCK_T=1; AC_SUBST([HAVE_PTHREAD_SPINLOCK_T])
+ HAVE_PTHREAD_CREATE_DETACHED=1; AC_SUBST([HAVE_PTHREAD_CREATE_DETACHED])
+ HAVE_PTHREAD_MUTEX_RECURSIVE=1; AC_SUBST([HAVE_PTHREAD_MUTEX_RECURSIVE])
+ HAVE_PTHREAD_MUTEX_ROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEX_ROBUST])
+ HAVE_PTHREAD_PROCESS_SHARED=1; AC_SUBST([HAVE_PTHREAD_PROCESS_SHARED])
+ HAVE_PTHREAD_CREATE=1; AC_SUBST([HAVE_PTHREAD_CREATE])
+ HAVE_PTHREAD_ATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_ATTR_INIT])
+ HAVE_PTHREAD_ATTR_GETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_GETDETACHSTATE])
+ HAVE_PTHREAD_ATTR_SETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_SETDETACHSTATE])
+ HAVE_PTHREAD_ATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_ATTR_DESTROY])
+ HAVE_PTHREAD_SELF=1; AC_SUBST([HAVE_PTHREAD_SELF])
+ HAVE_PTHREAD_EQUAL=1; AC_SUBST([HAVE_PTHREAD_EQUAL])
+ HAVE_PTHREAD_DETACH=1; AC_SUBST([HAVE_PTHREAD_DETACH])
+ HAVE_PTHREAD_JOIN=1; AC_SUBST([HAVE_PTHREAD_JOIN])
+ HAVE_PTHREAD_EXIT=1; AC_SUBST([HAVE_PTHREAD_EXIT])
+ HAVE_PTHREAD_ONCE=1; AC_SUBST([HAVE_PTHREAD_ONCE])
+ HAVE_PTHREAD_MUTEX_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEX_INIT])
+ HAVE_PTHREAD_MUTEXATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_INIT])
+ HAVE_PTHREAD_MUTEXATTR_GETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETTYPE])
+ HAVE_PTHREAD_MUTEXATTR_SETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETTYPE])
+ HAVE_PTHREAD_MUTEXATTR_GETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETROBUST])
+ HAVE_PTHREAD_MUTEXATTR_SETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETROBUST])
+ HAVE_PTHREAD_MUTEXATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_DESTROY])
+ HAVE_PTHREAD_MUTEX_LOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_LOCK])
+ HAVE_PTHREAD_MUTEX_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TRYLOCK])
+ HAVE_PTHREAD_MUTEX_TIMEDLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TIMEDLOCK])
+ HAVE_PTHREAD_MUTEX_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_UNLOCK])
+ HAVE_PTHREAD_MUTEX_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEX_DESTROY])
+ HAVE_PTHREAD_RWLOCK_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_INIT])
+ HAVE_PTHREAD_RWLOCKATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_INIT])
+ HAVE_PTHREAD_RWLOCKATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_DESTROY])
+ HAVE_PTHREAD_RWLOCK_RDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_RDLOCK])
+ HAVE_PTHREAD_RWLOCK_WRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_WRLOCK])
+ HAVE_PTHREAD_RWLOCK_TRYRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYRDLOCK])
+ HAVE_PTHREAD_RWLOCK_TRYWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYWRLOCK])
+ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK])
+ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK])
+ HAVE_PTHREAD_RWLOCK_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_UNLOCK])
+ HAVE_PTHREAD_RWLOCK_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_DESTROY])
+ HAVE_PTHREAD_COND_INIT=1; AC_SUBST([HAVE_PTHREAD_COND_INIT])
+ HAVE_PTHREAD_CONDATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_INIT])
+ HAVE_PTHREAD_CONDATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_DESTROY])
+ HAVE_PTHREAD_COND_WAIT=1; AC_SUBST([HAVE_PTHREAD_COND_WAIT])
+ HAVE_PTHREAD_COND_TIMEDWAIT=1; AC_SUBST([HAVE_PTHREAD_COND_TIMEDWAIT])
+ HAVE_PTHREAD_COND_SIGNAL=1; AC_SUBST([HAVE_PTHREAD_COND_SIGNAL])
+ HAVE_PTHREAD_COND_BROADCAST=1; AC_SUBST([HAVE_PTHREAD_COND_BROADCAST])
+ HAVE_PTHREAD_COND_DESTROY=1; AC_SUBST([HAVE_PTHREAD_COND_DESTROY])
+ HAVE_PTHREAD_KEY_CREATE=1; AC_SUBST([HAVE_PTHREAD_KEY_CREATE])
+ HAVE_PTHREAD_SETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_SETSPECIFIC])
+ HAVE_PTHREAD_GETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_GETSPECIFIC])
+ HAVE_PTHREAD_KEY_DELETE=1; AC_SUBST([HAVE_PTHREAD_KEY_DELETE])
+ HAVE_PTHREAD_SPIN_INIT=1; AC_SUBST([HAVE_PTHREAD_SPIN_INIT])
+ HAVE_PTHREAD_SPIN_LOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_LOCK])
+ HAVE_PTHREAD_SPIN_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_TRYLOCK])
+ HAVE_PTHREAD_SPIN_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_UNLOCK])
+ HAVE_PTHREAD_SPIN_DESTROY=1; AC_SUBST([HAVE_PTHREAD_SPIN_DESTROY])
+ REPLACE_PTHREAD_CREATE=0; AC_SUBST([REPLACE_PTHREAD_CREATE])
+ REPLACE_PTHREAD_ATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_ATTR_INIT])
+ REPLACE_PTHREAD_ATTR_GETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_GETDETACHSTATE])
+ REPLACE_PTHREAD_ATTR_SETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_SETDETACHSTATE])
+ REPLACE_PTHREAD_ATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_ATTR_DESTROY])
+ REPLACE_PTHREAD_SELF=0; AC_SUBST([REPLACE_PTHREAD_SELF])
+ REPLACE_PTHREAD_EQUAL=0; AC_SUBST([REPLACE_PTHREAD_EQUAL])
+ REPLACE_PTHREAD_DETACH=0; AC_SUBST([REPLACE_PTHREAD_DETACH])
+ REPLACE_PTHREAD_JOIN=0; AC_SUBST([REPLACE_PTHREAD_JOIN])
+ REPLACE_PTHREAD_EXIT=0; AC_SUBST([REPLACE_PTHREAD_EXIT])
+ REPLACE_PTHREAD_ONCE=0; AC_SUBST([REPLACE_PTHREAD_ONCE])
+ REPLACE_PTHREAD_MUTEX_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_INIT])
+ REPLACE_PTHREAD_MUTEXATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_INIT])
+ REPLACE_PTHREAD_MUTEXATTR_GETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETTYPE])
+ REPLACE_PTHREAD_MUTEXATTR_SETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETTYPE])
+ REPLACE_PTHREAD_MUTEXATTR_GETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETROBUST])
+ REPLACE_PTHREAD_MUTEXATTR_SETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETROBUST])
+ REPLACE_PTHREAD_MUTEXATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_DESTROY])
+ REPLACE_PTHREAD_MUTEX_LOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_LOCK])
+ REPLACE_PTHREAD_MUTEX_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TRYLOCK])
+ REPLACE_PTHREAD_MUTEX_TIMEDLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TIMEDLOCK])
+ REPLACE_PTHREAD_MUTEX_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_UNLOCK])
+ REPLACE_PTHREAD_MUTEX_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_DESTROY])
+ REPLACE_PTHREAD_RWLOCK_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_INIT])
+ REPLACE_PTHREAD_RWLOCKATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_INIT])
+ REPLACE_PTHREAD_RWLOCKATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_DESTROY])
+ REPLACE_PTHREAD_RWLOCK_RDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_RDLOCK])
+ REPLACE_PTHREAD_RWLOCK_WRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_WRLOCK])
+ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYRDLOCK])
+ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYWRLOCK])
+ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK])
+ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK])
+ REPLACE_PTHREAD_RWLOCK_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_UNLOCK])
+ REPLACE_PTHREAD_RWLOCK_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_DESTROY])
+ REPLACE_PTHREAD_COND_INIT=0; AC_SUBST([REPLACE_PTHREAD_COND_INIT])
+ REPLACE_PTHREAD_CONDATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_INIT])
+ REPLACE_PTHREAD_CONDATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_DESTROY])
+ REPLACE_PTHREAD_COND_WAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_WAIT])
+ REPLACE_PTHREAD_COND_TIMEDWAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_TIMEDWAIT])
+ REPLACE_PTHREAD_COND_SIGNAL=0; AC_SUBST([REPLACE_PTHREAD_COND_SIGNAL])
+ REPLACE_PTHREAD_COND_BROADCAST=0; AC_SUBST([REPLACE_PTHREAD_COND_BROADCAST])
+ REPLACE_PTHREAD_COND_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_COND_DESTROY])
+ REPLACE_PTHREAD_KEY_CREATE=0; AC_SUBST([REPLACE_PTHREAD_KEY_CREATE])
+ REPLACE_PTHREAD_SETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_SETSPECIFIC])
+ REPLACE_PTHREAD_GETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_GETSPECIFIC])
+ REPLACE_PTHREAD_KEY_DELETE=0; AC_SUBST([REPLACE_PTHREAD_KEY_DELETE])
+ REPLACE_PTHREAD_SPIN_INIT=0; AC_SUBST([REPLACE_PTHREAD_SPIN_INIT])
+ REPLACE_PTHREAD_SPIN_LOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_LOCK])
+ REPLACE_PTHREAD_SPIN_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_TRYLOCK])
+ REPLACE_PTHREAD_SPIN_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_UNLOCK])
+ REPLACE_PTHREAD_SPIN_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_SPIN_DESTROY])
+])
diff --git a/m4/pthread_rwlock_rdlock.m4 b/m4/pthread_rwlock_rdlock.m4
new file mode 100644
index 0000000..66b29f8
--- /dev/null
+++ b/m4/pthread_rwlock_rdlock.m4
@@ -0,0 +1,185 @@
+# pthread_rwlock_rdlock.m4 serial 5
+dnl Copyright (C) 2017-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Inspired by
+dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c
+dnl by Intel Corporation.
+
+dnl Test whether in a situation where
+dnl - an rwlock is taken by a reader and has a writer waiting,
+dnl - an additional reader requests the lock,
+dnl - the waiting writer and the requesting reader threads have the same
+dnl priority,
+dnl the requesting reader thread gets blocked, so that at some point the
+dnl waiting writer can acquire the lock.
+dnl Without such a guarantee, when there a N readers and each of the readers
+dnl spends more than 1/Nth of the time with the lock held, there is a high
+dnl probability that the waiting writer will not get the lock in a given finite
+dnl time, a phenomenon called "writer starvation".
+dnl Without such a guarantee, applications have a hard time avoiding writer
+dnl starvation.
+dnl
+dnl POSIX:2017 makes this requirement only for implementations that support TPS
+dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO
+dnl and SCHED_RR, see
+dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html
+dnl but this test verifies the guarantee regardless of TPS and regardless of
+dnl scheduling policy.
+dnl Glibc does not provide this guarantee (and never will on Linux), see
+dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701
+dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052
+AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER],
+[
+ AC_REQUIRE([gl_THREADLIB_EARLY])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader],
+ [gl_cv_pthread_rwlock_rdlock_prefer_writer],
+ [save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <errno.h>
+#include <pthread.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define SUCCEED() exit (0)
+#define FAILURE() exit (1)
+#define UNEXPECTED(n) (exit (10 + (n)))
+
+/* The main thread creates the waiting writer and the requesting reader threads
+ in the default way; this guarantees that they have the same priority.
+ We can reuse the main thread as first reader thread. */
+
+static pthread_rwlock_t lock;
+static pthread_t reader1;
+static pthread_t writer;
+static pthread_t reader2;
+static pthread_t timer;
+/* Used to pass control from writer to reader2 and from reader2 to timer,
+ as in a relay race.
+ Passing control from one running thread to another running thread
+ is most likely faster than to create the second thread. */
+static pthread_mutex_t baton;
+
+static void *
+timer_func (void *ignored)
+{
+ /* Step 13 (can be before or after step 12):
+ The timer thread takes the baton, then waits a moment to make sure
+ it can tell whether the second reader thread is blocked at step 12. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (13);
+ usleep (100000);
+ /* By the time we get here, it's clear that the second reader thread is
+ blocked at step 12. This is the desired behaviour. */
+ SUCCEED ();
+}
+
+static void *
+reader2_func (void *ignored)
+{
+ int err;
+
+ /* Step 8 (can be before or after step 7):
+ The second reader thread takes the baton, then waits a moment to make sure
+ the writer thread has reached step 7. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (8);
+ usleep (100000);
+ /* Step 9: The second reader thread requests the lock. */
+ err = pthread_rwlock_tryrdlock (&lock);
+ if (err == 0)
+ FAILURE ();
+ else if (err != EBUSY)
+ UNEXPECTED (9);
+ /* Step 10: Launch a timer, to test whether the next call blocks. */
+ if (pthread_create (&timer, NULL, timer_func, NULL))
+ UNEXPECTED (10);
+ /* Step 11: Release the baton. */
+ if (pthread_mutex_unlock (&baton))
+ UNEXPECTED (11);
+ /* Step 12: The second reader thread requests the lock. */
+ err = pthread_rwlock_rdlock (&lock);
+ if (err == 0)
+ FAILURE ();
+ else
+ UNEXPECTED (12);
+}
+
+static void *
+writer_func (void *ignored)
+{
+ /* Step 4: Take the baton, so that the second reader thread does not go ahead
+ too early. */
+ if (pthread_mutex_lock (&baton))
+ UNEXPECTED (4);
+ /* Step 5: Create the second reader thread. */
+ if (pthread_create (&reader2, NULL, reader2_func, NULL))
+ UNEXPECTED (5);
+ /* Step 6: Release the baton. */
+ if (pthread_mutex_unlock (&baton))
+ UNEXPECTED (6);
+ /* Step 7: The writer thread requests the lock. */
+ if (pthread_rwlock_wrlock (&lock))
+ UNEXPECTED (7);
+ return NULL;
+}
+
+int
+main ()
+{
+ reader1 = pthread_self ();
+
+ /* Step 1: The main thread initializes the lock and the baton. */
+ if (pthread_rwlock_init (&lock, NULL))
+ UNEXPECTED (1);
+ if (pthread_mutex_init (&baton, NULL))
+ UNEXPECTED (1);
+ /* Step 2: The main thread acquires the lock as a reader. */
+ if (pthread_rwlock_rdlock (&lock))
+ UNEXPECTED (2);
+ /* Step 3: Create the writer thread. */
+ if (pthread_create (&writer, NULL, writer_func, NULL))
+ UNEXPECTED (3);
+ /* Job done. Go to sleep. */
+ for (;;)
+ {
+ sleep (1);
+ }
+}
+]])],
+ [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes],
+ [gl_cv_pthread_rwlock_rdlock_prefer_writer=no],
+ [case "$host_os" in
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess no on bionic systems.
+ *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
+ # Guess yes on native Windows with the mingw-w64 winpthreads library.
+ # Guess no on native Windows with the gnulib windows-rwlock module.
+ mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+ gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
+ else
+ gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no"
+ fi
+ ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ LIBS="$save_LIBS"
+ ])
+ case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in
+ *yes)
+ AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1],
+ [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.])
+ ;;
+ esac
+])
diff --git a/m4/pthread_sigmask.m4 b/m4/pthread_sigmask.m4
new file mode 100644
index 0000000..2779528
--- /dev/null
+++ b/m4/pthread_sigmask.m4
@@ -0,0 +1,280 @@
+# pthread_sigmask.m4 serial 22
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK],
+[
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+
+ AC_CHECK_FUNCS_ONCE([pthread_sigmask])
+
+ dnl On MinGW pthread_sigmask is just a macro which always returns 0.
+ dnl It does not exist as a real function, which is required by POSIX.
+ AC_CACHE_CHECK([whether pthread_sigmask is a macro],
+ [gl_cv_func_pthread_sigmask_macro],
+ [AC_EGREP_CPP([headers_define_pthread_sigmask], [
+#include <pthread.h>
+#include <signal.h>
+#ifdef pthread_sigmask
+ headers_define_pthread_sigmask
+#endif],
+ [gl_cv_func_pthread_sigmask_macro=yes],
+ [gl_cv_func_pthread_sigmask_macro=no])
+ ])
+
+ PTHREAD_SIGMASK_LIB=
+
+ if test $gl_cv_func_pthread_sigmask_macro = yes; then
+ dnl pthread_sigmask is a dummy macro.
+ HAVE_PTHREAD_SIGMASK=0
+ dnl Make sure to '#undef pthread_sigmask' before defining it.
+ REPLACE_PTHREAD_SIGMASK=1
+ else
+ dnl Test whether the gnulib module 'threadlib' is in use.
+ dnl Some packages like Emacs use --avoid=threadlib.
+ dnl Write the symbol in such a way that it does not cause 'aclocal' to pick
+ dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/.
+ m4_ifdef([gl_][THREADLIB], [
+ AC_REQUIRE([gl_][THREADLIB])
+
+ if test "$gl_threads_api" = posix; then
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ dnl pthread_sigmask is available without -lpthread.
+ :
+ else
+ if test -n "$LIBMULTITHREAD"; then
+ AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD],
+ [gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ #include <signal.h>
+ ]],
+ [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]])
+ ],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes],
+ [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no])
+ LIBS="$gl_save_LIBS"
+ ])
+ if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then
+ dnl pthread_sigmask is available with -pthread or -lpthread.
+ PTHREAD_SIGMASK_LIB="$LIBMULTITHREAD"
+ else
+ dnl pthread_sigmask is not available at all.
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ else
+ dnl pthread_sigmask is not available at all.
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
+ else
+ dnl pthread_sigmask may exist but does not interoperate with the chosen
+ dnl multithreading facility.
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ REPLACE_PTHREAD_SIGMASK=1
+ else
+ HAVE_PTHREAD_SIGMASK=0
+ fi
+ fi
+ ], [
+ dnl The module 'threadlib' is not in use, due to --avoid=threadlib being
+ dnl specified.
+ dnl The package either has prepared CPPFLAGS and LIBS for use of
+ dnl POSIX:2008 threads, or wants to build single-threaded programs.
+ if test $ac_cv_func_pthread_sigmask = yes; then
+ dnl pthread_sigmask exists and does not require extra libraries.
+ dnl Assume that it is declared.
+ :
+ else
+ dnl pthread_sigmask either does not exist or needs extra libraries.
+ HAVE_PTHREAD_SIGMASK=0
+ dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask,
+ dnl so as to not accidentally override the system's pthread_sigmask
+ dnl symbol from libpthread. This is necessary on IRIX 6.5.
+ REPLACE_PTHREAD_SIGMASK=1
+ fi
+ ])
+ fi
+
+ AC_SUBST([PTHREAD_SIGMASK_LIB])
+ dnl For backward compatibility.
+ LIB_PTHREAD_SIGMASK="$PTHREAD_SIGMASK_LIB"
+ AC_SUBST([LIB_PTHREAD_SIGMASK])
+ dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when
+ dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the
+ dnl same.
+
+ dnl Now test for some bugs in the system function.
+ if test $HAVE_PTHREAD_SIGMASK = 1; then
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl On FreeBSD 13.0, MidnightBSD 1.1, HP-UX 11.31, Solaris 9, in programs
+ dnl that are not linked with -lpthread, the pthread_sigmask() function
+ dnl always returns 0 and has no effect.
+ if test -z "$PTHREAD_SIGMASK_LIB"; then
+ case " $LIBS " in
+ *' -pthread '*) ;;
+ *' -lpthread '*) ;;
+ *)
+ AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread],
+ [gl_cv_func_pthread_sigmask_in_libc_works],
+ [
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <pthread.h>
+ #include <signal.h>
+ #include <stddef.h>
+ int main ()
+ {
+ sigset_t set;
+ sigemptyset (&set);
+ return pthread_sigmask (1729, &set, NULL) != 0;
+ }]])],
+ [gl_cv_func_pthread_sigmask_in_libc_works=no],
+ [gl_cv_func_pthread_sigmask_in_libc_works=yes],
+ [
+ changequote(,)dnl
+ case "$host_os" in
+ freebsd* | midnightbsd* | hpux* | solaris | solaris2.[2-9]*)
+ gl_cv_func_pthread_sigmask_in_libc_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";;
+ esac
+ changequote([,])dnl
+ ])
+ ])
+ case "$gl_cv_func_pthread_sigmask_in_libc_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+ AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1],
+ [Define to 1 if pthread_sigmask may return 0 and have no effect.])
+ ;;
+ esac;;
+ esac
+ fi
+
+ dnl On Cygwin 1.7.5, the pthread_sigmask() has a wrong return value
+ dnl convention: Upon failure, it returns -1 and sets errno.
+ AC_CACHE_CHECK([whether pthread_sigmask returns error numbers],
+ [gl_cv_func_pthread_sigmask_return_works],
+ [
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $PTHREAD_SIGMASK_LIB"
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <pthread.h>
+#include <signal.h>
+#include <stddef.h>
+int main ()
+{
+ sigset_t set;
+ sigemptyset (&set);
+ if (pthread_sigmask (1729, &set, NULL) == -1)
+ return 1;
+ return 0;
+}]])],
+ [gl_cv_func_pthread_sigmask_return_works=yes],
+ [gl_cv_func_pthread_sigmask_return_works=no],
+ [case "$host_os" in
+ cygwin*)
+ gl_cv_func_pthread_sigmask_return_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_return_works="guessing yes";;
+ esac
+ ])
+ LIBS="$gl_save_LIBS"
+ ])
+ case "$gl_cv_func_pthread_sigmask_return_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+ AC_DEFINE([PTHREAD_SIGMASK_FAILS_WITH_ERRNO], [1],
+ [Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.])
+ ;;
+ esac
+
+ dnl On IRIX 6.5, in a single-threaded program, pending signals are not
+ dnl immediately delivered when they are unblocked through pthread_sigmask,
+ dnl only a little while later.
+ AC_CACHE_CHECK([whether pthread_sigmask unblocks signals correctly],
+ [gl_cv_func_pthread_sigmask_unblock_works],
+ [
+ case "$host_os" in
+ irix*)
+ gl_cv_func_pthread_sigmask_unblock_works="guessing no";;
+ *)
+ gl_cv_func_pthread_sigmask_unblock_works="guessing yes";;
+ esac
+ m4_ifdef([gl_][THREADLIB],
+ [dnl Link against $LIBMULTITHREAD, not only $PTHREAD_SIGMASK_LIB.
+ dnl Otherwise we get a false positive on those platforms where
+ dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no".
+ gl_save_LIBS=$LIBS
+ LIBS="$LIBS $LIBMULTITHREAD"])
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <limits.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+]GL_MDA_DEFINES[
+static volatile int sigint_occurred;
+static void
+sigint_handler (int sig)
+{
+ sigint_occurred++;
+}
+int main ()
+{
+ sigset_t set;
+ pid_t pid = getpid ();
+ char command[80];
+ if (LONG_MAX < pid)
+ return 6;
+ signal (SIGINT, sigint_handler);
+ sigemptyset (&set);
+ sigaddset (&set, SIGINT);
+ if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0))
+ return 1;
+ sprintf (command, "sh -c 'sleep 1; kill -INT %ld' &", (long) pid);
+ if (!(system (command) == 0))
+ return 2;
+ sleep (2);
+ if (!(sigint_occurred == 0))
+ return 3;
+ if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0))
+ return 4;
+ if (!(sigint_occurred == 1)) /* This fails on IRIX. */
+ return 5;
+ return 0;
+}]])],
+ [:],
+ [gl_cv_func_pthread_sigmask_unblock_works=no],
+ [:])
+ m4_ifdef([gl_][THREADLIB], [LIBS=$gl_save_LIBS])
+ ])
+ case "$gl_cv_func_pthread_sigmask_unblock_works" in
+ *no)
+ REPLACE_PTHREAD_SIGMASK=1
+ AC_DEFINE([PTHREAD_SIGMASK_UNBLOCK_BUG], [1],
+ [Define to 1 if pthread_sigmask() unblocks signals incorrectly.])
+ ;;
+ esac
+ fi
+])
+
+# Prerequisite of lib/pthread_sigmask.c.
+AC_DEFUN([gl_PREREQ_PTHREAD_SIGMASK],
+[
+ if test $HAVE_PTHREAD_SIGMASK = 1; then
+ AC_DEFINE([HAVE_PTHREAD_SIGMASK], [1],
+ [Define to 1 if the pthread_sigmask function can be used (despite bugs).])
+ fi
+])
diff --git a/m4/putenv.m4 b/m4/putenv.m4
new file mode 100644
index 0000000..d37a602
--- /dev/null
+++ b/m4/putenv.m4
@@ -0,0 +1,64 @@
+# putenv.m4 serial 26
+dnl Copyright (C) 2002-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Jim Meyering.
+dnl
+dnl Check whether putenv ("FOO") removes FOO from the environment.
+dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that.
+
+AC_DEFUN([gl_FUNC_PUTENV],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([for putenv compatible with GNU and SVID],
+ [gl_cv_func_svid_putenv],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [AC_INCLUDES_DEFAULT
+ GL_MDA_DEFINES],
+ [[
+ /* Put it in env. */
+ if (putenv ("CONFTEST_putenv=val"))
+ return 1;
+
+ /* Try to remove it. */
+ if (putenv ("CONFTEST_putenv"))
+ return 2;
+
+ /* Make sure it was deleted. */
+ if (getenv ("CONFTEST_putenv") != 0)
+ return 3;
+
+ return 0;
+ ]])],
+ [gl_cv_func_svid_putenv=yes],
+ [gl_cv_func_svid_putenv=no],
+ [dnl When crosscompiling, assume putenv is broken.
+ case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_svid_putenv="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_svid_putenv="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_svid_putenv="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_svid_putenv" in
+ *yes) ;;
+ *)
+ REPLACE_PUTENV=1
+ ;;
+ esac
+])
+
+# Prerequisites of lib/putenv.c.
+AC_DEFUN([gl_PREREQ_PUTENV],
+[
+ AC_CHECK_DECLS([_putenv])
+])
diff --git a/m4/quote.m4 b/m4/quote.m4
new file mode 100644
index 0000000..551437f
--- /dev/null
+++ b/m4/quote.m4
@@ -0,0 +1,13 @@
+# quote.m4 serial 6
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_QUOTE],
+[
+ dnl Prerequisites of lib/quote.c.
+ dnl (none)
+ :
+])
diff --git a/m4/quotearg.m4 b/m4/quotearg.m4
new file mode 100644
index 0000000..15e4aa6
--- /dev/null
+++ b/m4/quotearg.m4
@@ -0,0 +1,11 @@
+# quotearg.m4 serial 10
+dnl Copyright (C) 2002, 2004-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_QUOTEARG],
+[
+ AC_REQUIRE([AC_C_RESTRICT])
+ :
+])
diff --git a/m4/raise.m4 b/m4/raise.m4
new file mode 100644
index 0000000..f20c439
--- /dev/null
+++ b/m4/raise.m4
@@ -0,0 +1,36 @@
+# raise.m4 serial 4
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RAISE],
+[
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS([raise])
+ if test $ac_cv_func_raise = no; then
+ HAVE_RAISE=0
+ else
+ m4_ifdef([gl_MSVC_INVAL], [
+ AC_REQUIRE([gl_MSVC_INVAL])
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_RAISE=1
+ fi
+ ])
+ m4_ifdef([gl_SIGNALBLOCKING], [
+ gl_SIGNALBLOCKING
+ if test $HAVE_POSIX_SIGNALBLOCKING = 0; then
+ m4_ifdef([gl_SIGNAL_SIGPIPE], [
+ gl_SIGNAL_SIGPIPE
+ if test $gl_cv_header_signal_h_SIGPIPE != yes; then
+ REPLACE_RAISE=1
+ fi
+ ], [:])
+ fi
+ ])
+ fi
+])
+
+# Prerequisites of lib/raise.c.
+AC_DEFUN([gl_PREREQ_RAISE], [:])
diff --git a/m4/rawmemchr.m4 b/m4/rawmemchr.m4
new file mode 100644
index 0000000..a48d829
--- /dev/null
+++ b/m4/rawmemchr.m4
@@ -0,0 +1,20 @@
+# rawmemchr.m4 serial 3
+dnl Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RAWMEMCHR],
+[
+ dnl Persuade glibc <string.h> to declare rawmemchr().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ AC_CHECK_FUNCS([rawmemchr])
+ if test $ac_cv_func_rawmemchr = no; then
+ HAVE_RAWMEMCHR=0
+ fi
+])
+
+# Prerequisites of lib/strchrnul.c.
+AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:])
diff --git a/m4/read.m4 b/m4/read.m4
new file mode 100644
index 0000000..3331689
--- /dev/null
+++ b/m4/read.m4
@@ -0,0 +1,28 @@
+# read.m4 serial 5
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_READ],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ m4_ifdef([gl_MSVC_INVAL], [
+ AC_REQUIRE([gl_MSVC_INVAL])
+ if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then
+ REPLACE_READ=1
+ fi
+ ])
+ dnl This ifdef is just an optimization, to avoid performing a configure
+ dnl check whose result is not used. It does not make the test of
+ dnl GNULIB_UNISTD_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
+ m4_ifdef([gl_NONBLOCKING_IO], [
+ gl_NONBLOCKING_IO
+ if test $gl_cv_have_nonblocking != yes; then
+ REPLACE_READ=1
+ fi
+ ])
+])
+
+# Prerequisites of lib/read.c.
+AC_DEFUN([gl_PREREQ_READ], [:])
diff --git a/m4/readlink.m4 b/m4/readlink.m4
new file mode 100644
index 0000000..f1d41d2
--- /dev/null
+++ b/m4/readlink.m4
@@ -0,0 +1,120 @@
+# readlink.m4 serial 17
+dnl Copyright (C) 2003, 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_READLINK],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_FUNCS_ONCE([readlink])
+ if test $ac_cv_func_readlink = no; then
+ HAVE_READLINK=0
+ else
+ AC_CACHE_CHECK([whether readlink signature is correct],
+ [gl_cv_decl_readlink_works],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+ /* Cause compilation failure if original declaration has wrong type. */
+ ssize_t readlink (const char *, char *, size_t);]])],
+ [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])])
+ dnl Solaris 9 ignores trailing slash.
+ dnl FreeBSD 7.2 dereferences only one level of links with trailing slash.
+ AC_CACHE_CHECK([whether readlink handles trailing slash correctly],
+ [gl_cv_func_readlink_trailing_slash],
+ [# We have readlink, so assume ln -s works.
+ ln -s conftest.no-such conftest.link
+ ln -s conftest.link conftest.lnk2
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+]], [[char buf[20];
+ return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])],
+ [gl_cv_func_readlink_trailing_slash=yes],
+ [gl_cv_func_readlink_trailing_slash=no],
+ [case "$host_os" in
+ # Guess yes on Linux or glibc systems.
+ linux-* | linux | *-gnu* | gnu*)
+ gl_cv_func_readlink_trailing_slash="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*)
+ gl_cv_func_readlink_trailing_slash="guessing yes" ;;
+ # Guess no on AIX or HP-UX.
+ aix* | hpux*)
+ gl_cv_func_readlink_trailing_slash="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.link conftest.lnk2])
+ case "$gl_cv_func_readlink_trailing_slash" in
+ *yes)
+ if test "$gl_cv_decl_readlink_works" != yes; then
+ REPLACE_READLINK=1
+ fi
+ ;;
+ *)
+ AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink
+ fails to recognize a trailing slash.])
+ REPLACE_READLINK=1
+ ;;
+ esac
+
+ AC_CACHE_CHECK([whether readlink truncates results correctly],
+ [gl_cv_func_readlink_truncate],
+ [# We have readlink, so assume ln -s works.
+ ln -s ab conftest.link
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+]], [[char c;
+ return readlink ("conftest.link", &c, 1) != 1;]])],
+ [gl_cv_func_readlink_truncate=yes],
+ [gl_cv_func_readlink_truncate=no],
+ [case "$host_os" in
+ # Guess yes on Linux or glibc systems.
+ linux-* | linux | *-gnu* | gnu*)
+ gl_cv_func_readlink_truncate="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*)
+ gl_cv_func_readlink_truncate="guessing yes" ;;
+ # Guess no on AIX or HP-UX.
+ aix* | hpux*)
+ gl_cv_func_readlink_truncate="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.link conftest.lnk2])
+ case $gl_cv_func_readlink_truncate in
+ *yes)
+ if test "$gl_cv_decl_readlink_works" != yes; then
+ REPLACE_READLINK=1
+ fi
+ ;;
+ *)
+ AC_DEFINE([READLINK_TRUNCATE_BUG], [1], [Define to 1 if readlink
+ sets errno instead of truncating a too-long link.])
+ REPLACE_READLINK=1
+ ;;
+ esac
+ fi
+])
+
+# Like gl_FUNC_READLINK, except prepare for separate compilation
+# (no REPLACE_READLINK, no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_READLINK_SEPARATE],
+[
+ AC_CHECK_FUNCS_ONCE([readlink])
+ gl_PREREQ_READLINK
+])
+
+# Prerequisites of lib/readlink.c.
+AC_DEFUN([gl_PREREQ_READLINK],
+[
+ :
+])
diff --git a/m4/realloc.m4 b/m4/realloc.m4
new file mode 100644
index 0000000..2605391
--- /dev/null
+++ b/m4/realloc.m4
@@ -0,0 +1,63 @@
+# realloc.m4 serial 27
+dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# This is adapted with modifications from upstream Autoconf here:
+# https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455
+AC_DEFUN([_AC_FUNC_REALLOC_IF],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
+ AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull],
+ [ac_cv_func_realloc_0_nonnull],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>
+ ]],
+ [[void *p = realloc (0, 0);
+ int result = !p;
+ free (p);
+ return result;]])
+ ],
+ [ac_cv_func_realloc_0_nonnull=yes],
+ [ac_cv_func_realloc_0_nonnull=no],
+ [case "$host_os" in
+ # Guess yes on platforms where we know the result.
+ *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
+ | gnu* | *-musl* | midipix* | midnightbsd* \
+ | hpux* | solaris* | cygwin* | mingw* | msys* )
+ ac_cv_func_realloc_0_nonnull="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2])
+])# AC_FUNC_REALLOC
+
+# gl_FUNC_REALLOC_GNU
+# -------------------
+# Replace realloc if it is not compatible with GNU libc.
+AC_DEFUN([gl_FUNC_REALLOC_GNU],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_REALLOC_POSIX])
+ if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then
+ _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1])
+ fi
+])# gl_FUNC_REALLOC_GNU
+
+# gl_FUNC_REALLOC_POSIX
+# ---------------------
+# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails, and doesn't mess up with ptrdiff_t overflow),
+# and replace realloc if it is not.
+AC_DEFUN([gl_FUNC_REALLOC_POSIX],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_MALLOC_POSIX])
+ if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=1
+ fi
+])
diff --git a/m4/reallocarray.m4 b/m4/reallocarray.m4
new file mode 100644
index 0000000..6a5b5ab
--- /dev/null
+++ b/m4/reallocarray.m4
@@ -0,0 +1,26 @@
+# reallocarray.m4 serial 5
+dnl Copyright (C) 2017-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_REALLOCARRAY],
+[
+ dnl Persuade glibc <stdlib.h> to declare reallocarray.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF])
+ gl_CHECK_FUNCS_ANDROID([reallocarray], [[#include <stdlib.h>]])
+ if test "$ac_cv_func_reallocarray" = no; then
+ HAVE_REALLOCARRAY=0
+ case "$gl_cv_onwards_func_reallocarray" in
+ future*) REPLACE_REALLOCARRAY=1 ;;
+ esac
+ elif test "$gl_cv_malloc_ptrdiff" = no; then
+ REPLACE_REALLOCARRAY=1
+ fi
+])
+
+# Prerequisites of lib/reallocarray.c.
+AC_DEFUN([gl_PREREQ_REALLOCARRAY], [:])
diff --git a/m4/regex.m4 b/m4/regex.m4
new file mode 100644
index 0000000..c89a143
--- /dev/null
+++ b/m4/regex.m4
@@ -0,0 +1,396 @@
+# serial 73
+
+# Copyright (C) 1996-2001, 2003-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl Initially derived from code in GNU grep.
+dnl Mostly written by Jim Meyering.
+
+AC_PREREQ([2.50])
+
+AC_DEFUN([gl_REGEX],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_ARG_WITH([included-regex],
+ [AS_HELP_STRING([--without-included-regex],
+ [don't compile regex; this is the default on systems
+ with recent-enough versions of the GNU C Library
+ (use with caution on other systems).])])
+
+ case $with_included_regex in #(
+ yes|no) ac_use_included_regex=$with_included_regex
+ ;;
+ '')
+ # If the system regex support is good enough that it passes the
+ # following run test, then default to *not* using the included regex.c.
+ # If cross compiling, assume the test would fail and use the included
+ # regex.c.
+ AC_CHECK_DECLS_ONCE([alarm])
+ AC_CHECK_HEADERS_ONCE([malloc.h])
+ AC_CACHE_CHECK([for working re_compile_pattern],
+ [gl_cv_func_re_compile_pattern_working],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <regex.h>
+
+ #include <locale.h>
+ #include <limits.h>
+ #include <string.h>
+
+ #if defined M_CHECK_ACTION || HAVE_DECL_ALARM
+ # include <signal.h>
+ # include <unistd.h>
+ #endif
+
+ #if HAVE_MALLOC_H
+ # include <malloc.h>
+ #endif
+
+ #ifdef M_CHECK_ACTION
+ /* Exit with distinguishable exit code. */
+ static void sigabrt_no_core (int sig) { raise (SIGTERM); }
+ #endif
+ ]],
+ [[int result = 0;
+ static struct re_pattern_buffer regex;
+ unsigned char folded_chars[UCHAR_MAX + 1];
+ int i;
+ const char *s;
+ struct re_registers regs;
+
+ /* Some builds of glibc go into an infinite loop on this
+ test. Use alarm to force death, and mallopt to avoid
+ malloc recursion in diagnosing the corrupted heap. */
+#if HAVE_DECL_ALARM
+ signal (SIGALRM, SIG_DFL);
+ alarm (2);
+#endif
+#ifdef M_CHECK_ACTION
+ signal (SIGABRT, sigabrt_no_core);
+ mallopt (M_CHECK_ACTION, 2);
+#endif
+
+ if (setlocale (LC_ALL, "en_US.UTF-8"))
+ {
+ {
+ /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html
+ This test needs valgrind to catch the bug on Debian
+ GNU/Linux 3.1 x86, but it might catch the bug better
+ on other platforms and it shouldn't hurt to try the
+ test here. */
+ static char const pat[] = "insert into";
+ static char const data[] =
+ "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK";
+ re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE
+ | RE_ICASE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+ if (s)
+ result |= 1;
+ else
+ {
+ if (re_search (&regex, data, sizeof data - 1,
+ 0, sizeof data - 1, &regs)
+ != -1)
+ result |= 1;
+ regfree (&regex);
+ }
+ }
+
+ {
+ /* This test is from glibc bug 15078.
+ The test case is from Andreas Schwab in
+ <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>.
+ */
+ static char const pat[] = "[^x]x";
+ static char const data[] =
+ /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */
+ "\xe1\x80\x80"
+ "\xe1\x80\xbb"
+ "\xe1\x80\xbd"
+ "\xe1\x80\x94"
+ "\xe1\x80\xba"
+ "\xe1\x80\xaf"
+ "\xe1\x80\x95"
+ "\xe1\x80\xba"
+ "x";
+ re_set_syntax (0);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern (pat, sizeof pat - 1, &regex);
+ if (s)
+ result |= 1;
+ else
+ {
+ i = re_search (&regex, data, sizeof data - 1,
+ 0, sizeof data - 1, 0);
+ if (i != 0 && i != 21)
+ result |= 1;
+ regfree (&regex);
+ }
+ }
+
+ if (! setlocale (LC_ALL, "C"))
+ return 1;
+ }
+
+ /* This test is from glibc bug 3957, reported by Andrew Mackey. */
+ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("a[^x]b", 6, &regex);
+ if (s)
+ result |= 2;
+ else
+ {
+ /* This should fail, but succeeds for glibc-2.5. */
+ if (re_search (&regex, "a\nb", 3, 0, 3, &regs) != -1)
+ result |= 2;
+ regfree (&regex);
+ }
+
+ /* This regular expression is from Spencer ere test number 75
+ in grep-2.3. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+ memset (&regex, 0, sizeof regex);
+ for (i = 0; i <= UCHAR_MAX; i++)
+ folded_chars[i] = i;
+ regex.translate = folded_chars;
+ s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, &regex);
+ /* This should fail with _Invalid character class name_ error. */
+ if (!s)
+ {
+ result |= 4;
+ regfree (&regex);
+ }
+
+ /* Ensure that [b-a] is diagnosed as invalid, when
+ using RE_NO_EMPTY_RANGES. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("a[b-a]", 6, &regex);
+ if (s == 0)
+ {
+ result |= 8;
+ regfree (&regex);
+ }
+
+ /* This should succeed, but does not for glibc-2.1.3. */
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("{1", 2, &regex);
+ if (s)
+ result |= 8;
+ else
+ regfree (&regex);
+
+ /* The following example is derived from a problem report
+ against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("[an\371]*n", 7, &regex);
+ if (s)
+ result |= 8;
+ else
+ {
+ /* This should match, but does not for glibc-2.2.1. */
+ if (re_match (&regex, "an", 2, 0, &regs) != 2)
+ result |= 8;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("x", 1, &regex);
+ if (s)
+ result |= 8;
+ else
+ {
+ /* glibc-2.2.93 does not work with a negative RANGE argument. */
+ if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
+ result |= 8;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ /* The version of regex.c in older versions of gnulib
+ ignored RE_ICASE. Detect that problem too. */
+ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("x", 1, &regex);
+ if (s)
+ result |= 16;
+ else
+ {
+ if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
+ result |= 16;
+ else
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+
+ /* Catch a bug reported by Vin Shelton in
+ https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html
+ */
+ re_set_syntax (RE_SYNTAX_POSIX_BASIC
+ & ~RE_CONTEXT_INVALID_DUP
+ & ~RE_NO_EMPTY_RANGES);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, &regex);
+ if (s)
+ result |= 32;
+ else
+ regfree (&regex);
+
+ /* REG_STARTEND was added to glibc on 2004-01-15.
+ Reject older versions. */
+ if (! REG_STARTEND)
+ result |= 64;
+
+ /* Matching with the compiled form of this regexp would provoke
+ an assertion failure prior to glibc-2.28:
+ regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed
+ With glibc-2.28, compilation fails and reports the invalid
+ back reference. */
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+ memset (&regex, 0, sizeof regex);
+ s = re_compile_pattern ("0|()0|\\\\1|0", 10, &regex);
+ if (!s)
+ {
+ memset (&regs, 0, sizeof regs);
+ i = re_search (&regex, "x", 1, 0, 1, &regs);
+ if (i != -1)
+ result |= 64;
+ if (0 <= i)
+ {
+ free (regs.start);
+ free (regs.end);
+ }
+ regfree (&regex);
+ }
+ else
+ {
+ if (strcmp (s, "Invalid back reference"))
+ result |= 64;
+ }
+
+ /* glibc bug 11053. */
+ re_set_syntax (RE_SYNTAX_POSIX_BASIC);
+ memset (&regex, 0, sizeof regex);
+ static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1";
+ s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, &regex);
+ if (s)
+ result |= 64;
+ else
+ {
+ memset (&regs, 0, sizeof regs);
+ static char const data[] = "a";
+ int datalen = sizeof data - 1;
+ i = re_search (&regex, data, datalen, 0, datalen, &regs);
+ if (i != 0)
+ result |= 64;
+ else if (regs.num_regs < 2)
+ result |= 64;
+ else if (! (regs.start[0] == 0 && regs.end[0] == 1))
+ result |= 64;
+ else if (! (regs.start[1] == 0 && regs.end[1] == 0))
+ result |= 64;
+ regfree (&regex);
+ free (regs.start);
+ free (regs.end);
+ }
+
+#if 0
+ /* It would be nice to reject hosts whose regoff_t values are too
+ narrow (including glibc on hosts with 64-bit ptrdiff_t and
+ 32-bit int), but we should wait until glibc implements this
+ feature. Otherwise, support for equivalence classes and
+ multibyte collation symbols would always be broken except
+ when compiling --without-included-regex. */
+ if (sizeof (regoff_t) < sizeof (ptrdiff_t)
+ || sizeof (regoff_t) < sizeof (ssize_t))
+ result |= 64;
+#endif
+
+ return result;
+ ]])],
+ [gl_cv_func_re_compile_pattern_working=yes],
+ [gl_cv_func_re_compile_pattern_working=no],
+ [case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;;
+ # Otherwise obey --enable-cross-guesses.
+ *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_re_compile_pattern_working" in #(
+ *yes) ac_use_included_regex=no;; #(
+ *no) ac_use_included_regex=yes;;
+ esac
+ ;;
+ *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex])
+ ;;
+ esac
+
+ if test $ac_use_included_regex = yes; then
+ AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1],
+ [Define if you want <regex.h> to include <limits.h>, so that it
+ consistently overrides <limits.h>'s RE_DUP_MAX.])
+ AC_DEFINE([_REGEX_LARGE_OFFSETS], [1],
+ [Define if you want regoff_t to be at least as wide POSIX requires.])
+ AC_DEFINE([re_syntax_options], [rpl_re_syntax_options],
+ [Define to rpl_re_syntax_options if the replacement should be used.])
+ AC_DEFINE([re_set_syntax], [rpl_re_set_syntax],
+ [Define to rpl_re_set_syntax if the replacement should be used.])
+ AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern],
+ [Define to rpl_re_compile_pattern if the replacement should be used.])
+ AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap],
+ [Define to rpl_re_compile_fastmap if the replacement should be used.])
+ AC_DEFINE([re_search], [rpl_re_search],
+ [Define to rpl_re_search if the replacement should be used.])
+ AC_DEFINE([re_search_2], [rpl_re_search_2],
+ [Define to rpl_re_search_2 if the replacement should be used.])
+ AC_DEFINE([re_match], [rpl_re_match],
+ [Define to rpl_re_match if the replacement should be used.])
+ AC_DEFINE([re_match_2], [rpl_re_match_2],
+ [Define to rpl_re_match_2 if the replacement should be used.])
+ AC_DEFINE([re_set_registers], [rpl_re_set_registers],
+ [Define to rpl_re_set_registers if the replacement should be used.])
+ AC_DEFINE([re_comp], [rpl_re_comp],
+ [Define to rpl_re_comp if the replacement should be used.])
+ AC_DEFINE([re_exec], [rpl_re_exec],
+ [Define to rpl_re_exec if the replacement should be used.])
+ AC_DEFINE([regcomp], [rpl_regcomp],
+ [Define to rpl_regcomp if the replacement should be used.])
+ AC_DEFINE([regexec], [rpl_regexec],
+ [Define to rpl_regexec if the replacement should be used.])
+ AC_DEFINE([regerror], [rpl_regerror],
+ [Define to rpl_regerror if the replacement should be used.])
+ AC_DEFINE([regfree], [rpl_regfree],
+ [Define to rpl_regfree if the replacement should be used.])
+ fi
+])
+
+# Prerequisites of lib/regex.c and lib/regex_internal.c.
+AC_DEFUN([gl_PREREQ_REGEX],
+[
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([AC_C_INLINE])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ AC_REQUIRE([gl_EEMALLOC])
+ AC_CHECK_HEADERS([libintl.h])
+ AC_CHECK_FUNCS_ONCE([isblank iswctype])
+ AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]])
+])
diff --git a/m4/rpmatch.m4 b/m4/rpmatch.m4
new file mode 100644
index 0000000..4a8bdf7
--- /dev/null
+++ b/m4/rpmatch.m4
@@ -0,0 +1,31 @@
+# rpmatch.m4 serial 10
+dnl Copyright (C) 2002-2003, 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_RPMATCH],
+[
+ dnl Persuade glibc <stdlib.h> to declare rpmatch().
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_CHECK_FUNCS([rpmatch])
+ if test $ac_cv_func_rpmatch = no; then
+ HAVE_RPMATCH=0
+ fi
+])
+
+# Prerequisites of lib/rpmatch.c.
+AC_DEFUN([gl_PREREQ_RPMATCH], [
+ AC_CACHE_CHECK([for nl_langinfo and YESEXPR], [gl_cv_langinfo_yesexpr],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <langinfo.h>]],
+ [[char* cs = nl_langinfo(YESEXPR); return !cs;]])],
+ [gl_cv_langinfo_yesexpr=yes],
+ [gl_cv_langinfo_yesexpr=no])
+ ])
+ if test $gl_cv_langinfo_yesexpr = yes; then
+ AC_DEFINE([HAVE_LANGINFO_YESEXPR], [1],
+ [Define if you have <langinfo.h> and nl_langinfo(YESEXPR).])
+ fi
+])
diff --git a/m4/safe-read.m4 b/m4/safe-read.m4
new file mode 100644
index 0000000..fe4ab75
--- /dev/null
+++ b/m4/safe-read.m4
@@ -0,0 +1,12 @@
+# safe-read.m4 serial 6
+dnl Copyright (C) 2002-2003, 2005-2006, 2009-2023 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Prerequisites of lib/safe-read.c.
+AC_DEFUN([gl_PREREQ_SAFE_READ],
+[
+ AC_REQUIRE([gt_TYPE_SSIZE_T])
+])
diff --git a/m4/sched_h.m4 b/m4/sched_h.m4
new file mode 100644
index 0000000..980d256
--- /dev/null
+++ b/m4/sched_h.m4
@@ -0,0 +1,106 @@
+# sched_h.m4 serial 15
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Bruno Haible.
+
+AC_DEFUN_ONCE([gl_SCHED_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_SCHED_H_DEFAULTS])
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
+ AC_CHECK_HEADERS([sched.h], [], [],
+ [[#if HAVE_SYS_CDEFS_H
+ #include <sys/cdefs.h>
+ #endif
+ ]])
+ gl_NEXT_HEADERS([sched.h])
+
+ if test "$ac_cv_header_sched_h" = yes; then
+ HAVE_SCHED_H=1
+ else
+ HAVE_SCHED_H=0
+ fi
+ AC_SUBST([HAVE_SCHED_H])
+
+ if test "$HAVE_SCHED_H" = 1; then
+ AC_CHECK_TYPE([struct sched_param],
+ [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0],
+ [[#if HAVE_SYS_CDEFS_H
+ #include <sys/cdefs.h>
+ #endif
+ #include <sched.h>
+ ]])
+ else
+ HAVE_STRUCT_SCHED_PARAM=0
+ case "$host_os" in
+ os2*)
+ dnl On OS/2 kLIBC, struct sched_param is in spawn.h.
+ AC_CHECK_TYPE([struct sched_param],
+ [HAVE_STRUCT_SCHED_PARAM=1], [],
+ [#include <spawn.h>])
+ ;;
+ vms)
+ dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h.
+ AC_CHECK_TYPE([struct sched_param],
+ [HAVE_STRUCT_SCHED_PARAM=1], [],
+ [#include <pthread.h>])
+ ;;
+ esac
+ fi
+ AC_SUBST([HAVE_STRUCT_SCHED_PARAM])
+
+ if test "$ac_cv_header_sys_cdefs_h" = yes; then
+ HAVE_SYS_CDEFS_H=1
+ else
+ HAVE_SYS_CDEFS_H=0
+ fi
+ AC_SUBST([HAVE_SYS_CDEFS_H])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, if it is not common
+ dnl enough to be declared everywhere.
+ gl_WARN_ON_USE_PREPARE([[#include <sched.h>
+ ]], [sched_yield])
+])
+
+# gl_SCHED_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SCHED_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SCHED_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SCHED_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCHED_YIELD])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SCHED_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SCHED_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_SCHED_YIELD=1; AC_SUBST([HAVE_SCHED_YIELD])
+ REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD])
+])
diff --git a/m4/sched_yield.m4 b/m4/sched_yield.m4
new file mode 100644
index 0000000..a1cb91e
--- /dev/null
+++ b/m4/sched_yield.m4
@@ -0,0 +1,22 @@
+# sched_yield.m4 serial 2
+dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SCHED_YIELD],
+[
+ AC_REQUIRE([gl_SCHED_H_DEFAULTS])
+ AC_REQUIRE([gl_PTHREADLIB])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ if { case "$host_os" in mingw*) true;; *) false;; esac; } \
+ && test $gl_threads_api = windows; then
+ dnl Choose function names that don't conflict with the mingw-w64 winpthreads
+ dnl library.
+ REPLACE_SCHED_YIELD=1
+ else
+ AC_CHECK_DECL([sched_yield], , [HAVE_SCHED_YIELD=0],
+ [[#include <sched.h>]])
+ fi
+])
diff --git a/m4/select.m4 b/m4/select.m4
new file mode 100644
index 0000000..88861af
--- /dev/null
+++ b/m4/select.m4
@@ -0,0 +1,122 @@
+# select.m4 serial 15
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SELECT],
+[
+ AC_REQUIRE([gl_SYS_SELECT_H])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([gl_SOCKETS])
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ REPLACE_SELECT=1
+ else
+ dnl On Interix 3.5, select(0, NULL, NULL, NULL, timeout) fails with error
+ dnl EFAULT.
+ AC_CHECK_HEADERS_ONCE([sys/select.h])
+ AC_CACHE_CHECK([whether select supports a 0 argument],
+ [gl_cv_func_select_supports0],
+ [
+ AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+int main ()
+{
+ struct timeval timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 5;
+ return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0;
+}]])], [gl_cv_func_select_supports0=yes], [gl_cv_func_select_supports0=no],
+ [
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Interix.
+ interix*) gl_cv_func_select_supports0="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_select_supports0="guessing yes";;
+ esac
+changequote([,])dnl
+ ])
+ ])
+ case "$gl_cv_func_select_supports0" in
+ *yes) ;;
+ *) REPLACE_SELECT=1 ;;
+ esac
+
+ dnl On FreeBSD 8.2, select() doesn't always reject bad fds.
+ AC_CACHE_CHECK([whether select detects invalid fds],
+ [gl_cv_func_select_detects_ebadf],
+ [
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/time.h>
+#if HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#include <unistd.h>
+#include <errno.h>
+]GL_MDA_DEFINES],
+[[
+ fd_set set;
+ dup2(0, 16);
+ FD_ZERO(&set);
+ FD_SET(16, &set);
+ close(16);
+ struct timeval timeout;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 5;
+ return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF;
+]])], [gl_cv_func_select_detects_ebadf=yes],
+ [gl_cv_func_select_detects_ebadf=no],
+ [
+ case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case $gl_cv_func_select_detects_ebadf in
+ *yes) ;;
+ *) REPLACE_SELECT=1 ;;
+ esac
+ fi
+
+ dnl Determine the needed libraries.
+ SELECT_LIB="$LIBSOCKET"
+ if test $REPLACE_SELECT = 1; then
+ case "$host_os" in
+ mingw*)
+ dnl On the MSVC platform, the function MsgWaitForMultipleObjects
+ dnl (used in lib/select.c) requires linking with -luser32. On mingw,
+ dnl it is implicit.
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE([[
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+int
+main ()
+{
+ MsgWaitForMultipleObjects (0, NULL, 0, 0, 0);
+ return 0;
+}]])],
+ [],
+ [SELECT_LIB="$SELECT_LIB -luser32"])
+ ;;
+ esac
+ fi
+ AC_SUBST([SELECT_LIB])
+ dnl For backward compatibility.
+ LIB_SELECT="$LIB_SELECT"
+ AC_SUBST([LIB_SELECT])
+])
diff --git a/m4/semaphore.m4 b/m4/semaphore.m4
new file mode 100644
index 0000000..edbed96
--- /dev/null
+++ b/m4/semaphore.m4
@@ -0,0 +1,45 @@
+# semaphore.m4 serial 1
+dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Sets LIB_SEMAPHORE to the library needed, in addition to $(LIBMULTITHREAD),
+# for getting the <semaphore.h> functions.
+
+AC_DEFUN([gl_SEMAPHORE],
+[
+ AC_REQUIRE([gl_THREADLIB])
+ dnl sem_post is
+ dnl - in libc on macOS, FreeBSD, AIX, IRIX, Solaris 11, Haiku, Cygwin,
+ dnl - in libpthread on glibc systems, OpenBSD,
+ dnl - in libpthread or librt on NetBSD,
+ dnl - in librt on HP-UX 11, OSF/1, Solaris 10.
+ dnl On the platforms where -lpthread is needed, it is contained in
+ dnl $LIBMULTITHREAD. Therefore, the only library we need to test for is -lrt.
+ AC_CACHE_CHECK([for library needed for semaphore functions],
+ [gl_cv_semaphore_lib],
+ [save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <semaphore.h>]],
+ [[sem_post ((sem_t *)0);]])],
+ [gl_cv_semaphore_lib=none],
+ [LIBS="$LIBS -lrt"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <semaphore.h>]],
+ [[sem_post ((sem_t *)0);]])],
+ [gl_cv_semaphore_lib='-lrt'],
+ [gl_cv_semaphore_lib=none])
+ ])
+ LIBS="$save_LIBS"
+ ])
+ if test "x$gl_cv_semaphore_lib" = xnone; then
+ LIB_SEMAPHORE=
+ else
+ LIB_SEMAPHORE="$gl_cv_semaphore_lib"
+ fi
+ AC_SUBST([LIB_SEMAPHORE])
+])
diff --git a/m4/setenv.m4 b/m4/setenv.m4
new file mode 100644
index 0000000..ef068ad
--- /dev/null
+++ b/m4/setenv.m4
@@ -0,0 +1,166 @@
+# setenv.m4 serial 32
+dnl Copyright (C) 2001-2004, 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SETENV],
+[
+ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ if test $ac_cv_func_setenv = no; then
+ HAVE_SETENV=0
+ else
+ AC_CACHE_CHECK([whether setenv validates arguments],
+ [gl_cv_func_setenv_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <string.h>
+ ]], [[
+ int result = 0;
+ {
+ if (setenv ("", "", 0) != -1)
+ result |= 1;
+ else if (errno != EINVAL)
+ result |= 2;
+ }
+ {
+ if (setenv ("a", "=", 1) != 0)
+ result |= 4;
+ else if (strcmp (getenv ("a"), "=") != 0)
+ result |= 8;
+ }
+ return result;
+ ]])],
+ [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;;
+ esac
+ ])])
+ case "$gl_cv_func_setenv_works" in
+ *yes) ;;
+ *)
+ REPLACE_SETENV=1
+ ;;
+ esac
+ fi
+])
+
+# Like gl_FUNC_SETENV, except prepare for separate compilation
+# (no REPLACE_SETENV, no AC_LIBOBJ).
+AC_DEFUN([gl_FUNC_SETENV_SEPARATE],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_CHECK_DECLS_ONCE([setenv])
+ if test $ac_cv_have_decl_setenv = no; then
+ HAVE_DECL_SETENV=0
+ fi
+ AC_CHECK_FUNCS_ONCE([setenv])
+ gl_PREREQ_SETENV
+])
+
+AC_DEFUN([gl_FUNC_UNSETENV],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_DECLS_ONCE([unsetenv])
+ if test $ac_cv_have_decl_unsetenv = no; then
+ HAVE_DECL_UNSETENV=0
+ fi
+ AC_CHECK_FUNCS([unsetenv])
+ if test $ac_cv_func_unsetenv = no; then
+ HAVE_UNSETENV=0
+ else
+ HAVE_UNSETENV=1
+ dnl Some BSDs return void, failing to do error checking.
+ AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+#undef _BSD
+#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */
+#include <stdlib.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+int unsetenv (const char *name);
+ ]],
+ [[]])],
+ [gt_cv_func_unsetenv_ret='int'],
+ [gt_cv_func_unsetenv_ret='void'])])
+ if test $gt_cv_func_unsetenv_ret = 'void'; then
+ AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void
+ instead of int.])
+ REPLACE_UNSETENV=1
+ fi
+
+ dnl Solaris 10 unsetenv does not remove all copies of a name.
+ dnl Haiku alpha 2 unsetenv gets confused by assignment to environ.
+ dnl OpenBSD 4.7 unsetenv("") does not fail.
+ AC_CACHE_CHECK([whether unsetenv obeys POSIX],
+ [gl_cv_func_unsetenv_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <stdlib.h>
+ #include <errno.h>
+ extern char **environ;
+ ]GL_MDA_DEFINES],
+ [[
+ char entry1[] = "a=1";
+ char entry2[] = "b=2";
+ char *env[] = { entry1, entry2, NULL };
+ if (putenv ((char *) "a=1")) return 1;
+ if (putenv (entry2)) return 2;
+ entry2[0] = 'a';
+ unsetenv ("a");
+ if (getenv ("a")) return 3;
+ if (!unsetenv ("") || errno != EINVAL) return 4;
+ entry2[0] = 'b';
+ environ = env;
+ if (!getenv ("a")) return 5;
+ entry2[0] = 'a';
+ unsetenv ("a");
+ if (getenv ("a")) return 6;
+ ]])],
+ [gl_cv_func_unsetenv_works=yes],
+ [gl_cv_func_unsetenv_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_unsetenv_works" in
+ *yes) ;;
+ *)
+ REPLACE_UNSETENV=1
+ ;;
+ esac
+ fi
+])
+
+# Prerequisites of lib/setenv.c.
+AC_DEFUN([gl_PREREQ_SETENV],
+[
+ AC_REQUIRE([AC_FUNC_ALLOCA])
+ AC_REQUIRE([gl_ENVIRON])
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+ AC_CHECK_HEADERS([search.h])
+ gl_CHECK_FUNCS_ANDROID([tsearch], [[#include <search.h>]])
+])
+
+# Prerequisites of lib/unsetenv.c.
+AC_DEFUN([gl_PREREQ_UNSETENV],
+[
+ AC_REQUIRE([gl_ENVIRON])
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+])
diff --git a/m4/setlocale.m4 b/m4/setlocale.m4
new file mode 100644
index 0000000..2e8094d
--- /dev/null
+++ b/m4/setlocale.m4
@@ -0,0 +1,88 @@
+# setlocale.m4 serial 9
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SETLOCALE],
+[
+ AC_REQUIRE([gl_LOCALE_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_SETLOCALE_NULL])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ dnl Test whether we need to improve on the general working of setlocale.
+ NEED_SETLOCALE_IMPROVED=0
+ case "$host_os" in
+ dnl On native Windows systems, setlocale(category,NULL) does not look at
+ dnl the environment variables LC_ALL, category, and LANG.
+ mingw*) NEED_SETLOCALE_IMPROVED=1 ;;
+ dnl On Cygwin 1.5.x, setlocale always succeeds but setlocale(LC_CTYPE,NULL)
+ dnl is then still "C".
+ cygwin*)
+ case `uname -r` in
+ 1.5.*) NEED_SETLOCALE_IMPROVED=1 ;;
+ esac
+ ;;
+ dnl On Android 4.3, setlocale(category,"C") always fails.
+ *)
+ AC_CACHE_CHECK([whether setlocale supports the C locale],
+ [gl_cv_func_setlocale_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+int main ()
+{
+ return setlocale (LC_ALL, "C") == NULL;
+}]])],
+ [gl_cv_func_setlocale_works=yes],
+ [gl_cv_func_setlocale_works=no],
+ [case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_setlocale_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_setlocale_works="guessing yes";;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_setlocale_works" in
+ *yes) ;;
+ *) NEED_SETLOCALE_IMPROVED=1 ;;
+ esac
+ ;;
+ esac
+ AC_DEFINE_UNQUOTED([NEED_SETLOCALE_IMPROVED], [$NEED_SETLOCALE_IMPROVED],
+ [Define to 1 to enable general improvements of setlocale.])
+
+ dnl Test whether we need a multithread-safe setlocale(category,NULL).
+ NEED_SETLOCALE_MTSAFE=0
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ NEED_SETLOCALE_MTSAFE=1
+ fi
+ AC_DEFINE_UNQUOTED([NEED_SETLOCALE_MTSAFE], [$NEED_SETLOCALE_MTSAFE],
+ [Define to 1 to enable a multithread-safety fix of setlocale.])
+
+ if test $NEED_SETLOCALE_IMPROVED = 1 || test $NEED_SETLOCALE_MTSAFE = 1; then
+ REPLACE_SETLOCALE=1
+ fi
+
+ if test $NEED_SETLOCALE_MTSAFE = 1; then
+ SETLOCALE_LIB="$SETLOCALE_NULL_LIB"
+ else
+ SETLOCALE_LIB=
+ fi
+ dnl SETLOCALE_LIB is expected to be '-pthread' or '-lpthread' on AIX with gcc
+ dnl or xlc, and empty otherwise.
+ AC_SUBST([SETLOCALE_LIB])
+ dnl For backward compatibility.
+ LIB_SETLOCALE="$SETLOCALE_LIB"
+ AC_SUBST([LIB_SETLOCALE])
+])
+
+# Prerequisites of lib/setlocale.c.
+AC_DEFUN([gl_PREREQ_SETLOCALE],
+[
+ dnl No need to check for CFLocaleCopyPreferredLanguages and
+ dnl CFPreferencesCopyAppValue because lib/setlocale.c is not used on Mac OS X.
+ dnl (The Mac OS X specific code is only used in libintl.)
+ :
+])
diff --git a/m4/setlocale_null.m4 b/m4/setlocale_null.m4
new file mode 100644
index 0000000..1105d69
--- /dev/null
+++ b/m4/setlocale_null.m4
@@ -0,0 +1,115 @@
+# setlocale_null.m4 serial 8
+dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_PTHREADLIB])
+ AC_CHECK_HEADERS_ONCE([threads.h])
+
+ AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe],
+ [gl_cv_func_setlocale_null_all_mtsafe],
+ [case "$host_os" in
+ # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku.
+ *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*)
+ gl_cv_func_setlocale_null_all_mtsafe=no ;;
+ # Guess no on Cygwin < 3.4.6.
+ cygwin*)
+ AC_EGREP_CPP([Lucky user],
+ [
+#if defined __CYGWIN__
+ #include <cygwin/version.h>
+ #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6)
+ Lucky user
+ #endif
+#endif
+ ],
+ [gl_cv_func_setlocale_null_all_mtsafe=yes],
+ [gl_cv_func_setlocale_null_all_mtsafe=no])
+ ;;
+ # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
+ *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
+ gl_cv_func_setlocale_null_all_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ dnl On platforms without multithreading, there is no issue.
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_all_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_all_mtsafe" in
+ *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ALL_MTSAFE=0 ;;
+ esac
+ AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE],
+ [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.])
+
+ dnl This is about a single category (not LC_ALL).
+ AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe],
+ [gl_cv_func_setlocale_null_one_mtsafe],
+ [case "$host_os" in
+ # Guess no on OpenBSD, AIX.
+ openbsd* | aix*)
+ gl_cv_func_setlocale_null_one_mtsafe=no ;;
+ # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows.
+ *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+ gl_cv_func_setlocale_null_one_mtsafe=yes ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *)
+ gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ dnl On platforms without multithreading, there is no issue.
+ case "$host_os" in
+ mingw*) ;;
+ *)
+ if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
+ gl_cv_func_setlocale_null_one_mtsafe="trivially yes"
+ fi
+ ;;
+ esac
+ case "$gl_cv_func_setlocale_null_one_mtsafe" in
+ *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;;
+ *) SETLOCALE_NULL_ONE_MTSAFE=0 ;;
+ esac
+ AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE],
+ [Define to 1 if setlocale (category, NULL) is multithread-safe.])
+
+ dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c.
+ if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then
+ case "$host_os" in
+ mingw*) SETLOCALE_NULL_LIB= ;;
+ *)
+ gl_WEAK_SYMBOLS
+ case "$gl_cv_have_weak" in
+ *yes) SETLOCALE_NULL_LIB= ;;
+ *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;;
+ esac
+ ;;
+ esac
+ else
+ SETLOCALE_NULL_LIB=
+ fi
+ dnl SETLOCALE_NULL_LIB is expected to be '-pthread' or '-lpthread' on AIX
+ dnl with gcc or xlc, and empty otherwise.
+ AC_SUBST([SETLOCALE_NULL_LIB])
+ dnl For backward compatibility.
+ LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB"
+ AC_SUBST([LIB_SETLOCALE_NULL])
+])
+
+# Prerequisites of lib/setlocale-lock.c.
+AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK],
+[
+ gl_VISIBILITY
+])
diff --git a/m4/signal_h.m4 b/m4/signal_h.m4
new file mode 100644
index 0000000..cdd6812
--- /dev/null
+++ b/m4/signal_h.m4
@@ -0,0 +1,100 @@
+# signal_h.m4 serial 22
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SIGNAL_H],
+[
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+ gl_NEXT_HEADERS([signal.h])
+
+# AIX declares sig_atomic_t to already include volatile, and C89 compilers
+# then choke on 'volatile sig_atomic_t'. C99 requires that it compile.
+ AC_CHECK_TYPE([volatile sig_atomic_t], [],
+ [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[
+#include <signal.h>
+ ]])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ AC_REQUIRE([AC_TYPE_UID_T])
+
+ dnl Persuade glibc <signal.h> to define sighandler_t.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+ AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[
+#include <signal.h>
+ ]])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <signal.h>
+ ]], [pthread_sigmask sigaction
+ sigaddset sigdelset sigemptyset sigfillset sigismember
+ sigpending sigprocmask])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+])
+
+AC_DEFUN([gl_CHECK_TYPE_SIGSET_T],
+[
+ AC_CHECK_TYPES([sigset_t],
+ [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no],
+ [[
+ #include <signal.h>
+ /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */
+ #include <sys/types.h>
+ ]])
+ if test $gl_cv_type_sigset_t != yes; then
+ HAVE_SIGSET_T=0
+ fi
+])
+
+# gl_SIGNAL_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SIGNAL_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SIGNAL_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SIGMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAISE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGPROCMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGACTION])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SIGNAL_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING])
+ HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK])
+ HAVE_RAISE=1; AC_SUBST([HAVE_RAISE])
+ HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T])
+ HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T])
+ HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION])
+ HAVE_STRUCT_SIGACTION_SA_SIGACTION=1;
+ AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION])
+ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1;
+ AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T])
+ HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T])
+ REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK])
+ REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE])
+])
diff --git a/m4/signalblocking.m4 b/m4/signalblocking.m4
new file mode 100644
index 0000000..81cc91a
--- /dev/null
+++ b/m4/signalblocking.m4
@@ -0,0 +1,23 @@
+# signalblocking.m4 serial 17
+dnl Copyright (C) 2001-2002, 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine available signal blocking primitives. Three different APIs exist:
+# 1) POSIX: sigemptyset, sigaddset, sigprocmask
+# 2) SYSV: sighold, sigrelse
+# 3) BSD: sigblock, sigsetmask
+# For simplicity, here we check only for the POSIX signal blocking.
+AC_DEFUN([gl_SIGNALBLOCKING],
+[
+ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
+ HAVE_POSIX_SIGNALBLOCKING=0
+ if test "$gl_cv_type_sigset_t" = yes; then
+ AC_CHECK_FUNC([sigprocmask], [HAVE_POSIX_SIGNALBLOCKING=1])
+ fi
+])
+
+# Prerequisites of lib/sigprocmask.c.
+AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:])
diff --git a/m4/sleep.m4 b/m4/sleep.m4
new file mode 100644
index 0000000..269b73b
--- /dev/null
+++ b/m4/sleep.m4
@@ -0,0 +1,68 @@
+# sleep.m4 serial 12
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_SLEEP],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ dnl We expect to see the declaration of sleep() in a header file.
+ dnl Older versions of mingw have a sleep() function that is an alias to
+ dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep():
+ dnl it takes the number of milliseconds as argument and returns void.
+ dnl mingw does not declare this function.
+ AC_CHECK_DECLS([sleep], , , [[#include <unistd.h>]])
+ AC_CHECK_FUNCS_ONCE([sleep])
+ if test $ac_cv_have_decl_sleep != yes; then
+ HAVE_SLEEP=0
+ else
+ dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days.
+ AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <errno.h>
+#include <unistd.h>
+#include <signal.h>
+static void
+handle_alarm (int sig)
+{
+ if (sig != SIGALRM)
+ _exit (2);
+}
+]], [[
+ /* Failure to compile this test due to missing alarm is okay,
+ since all such platforms (mingw) also lack sleep. */
+ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */
+ unsigned int remaining;
+ signal (SIGALRM, handle_alarm);
+ alarm (1);
+ remaining = sleep (pentecost);
+ if (remaining > pentecost)
+ return 3;
+ if (remaining <= pentecost - 10)
+ return 4;
+ return 0;
+ ]])],
+ [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_sleep_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_sleep_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;;
+ esac
+ ])])
+ case "$gl_cv_func_sleep_works" in
+ *yes) ;;
+ *)
+ REPLACE_SLEEP=1
+ ;;
+ esac
+ fi
+])
diff --git a/m4/socketlib.m4 b/m4/socketlib.m4
new file mode 100644
index 0000000..a556af1
--- /dev/null
+++ b/m4/socketlib.m4
@@ -0,0 +1,96 @@
+# socketlib.m4 serial 3
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl gl_SOCKETLIB
+dnl Determines the library to use for socket functions.
+dnl Sets and AC_SUBSTs LIBSOCKET.
+
+AC_DEFUN([gl_SOCKETLIB],
+[
+ gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H
+ LIBSOCKET=
+ if test $HAVE_WINSOCK2_H = 1; then
+ dnl Native Windows API (not Cygwin).
+ dnl If the function WSAStartup exists (declared in <winsock2.h> and
+ dnl defined through -lws2_32), we need to call it.
+ AC_CACHE_CHECK([for WSAStartup],
+ [gl_cv_func_wsastartup], [
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS -lws2_32"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+#ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+#endif]], [[
+ WORD wVersionRequested = MAKEWORD(1, 1);
+ WSADATA wsaData;
+ int err = WSAStartup(wVersionRequested, &wsaData);
+ WSACleanup ();
+ ]])
+ ],
+ [gl_cv_func_wsastartup=yes],
+ [gl_cv_func_wsastartup=no])
+ LIBS="$gl_save_LIBS"
+ ])
+ if test "$gl_cv_func_wsastartup" = "yes"; then
+ AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.])
+ LIBSOCKET='-lws2_32'
+ fi
+ else
+ dnl Unix API.
+ dnl Solaris has most socket functions in libsocket.
+ dnl Haiku has most socket functions in libnetwork.
+ dnl BeOS has most socket functions in libnet.
+ dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would
+ dnl break code (e.g. in libraries) that invokes accept(), getpeername(),
+ dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See
+ dnl "man xopen_networking" for details.
+ AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [
+ gl_cv_lib_socket=
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();]], [[setsockopt();]])],
+ [],
+ [gl_save_LIBS="$LIBS"
+ LIBS="$gl_save_LIBS -lsocket"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();]], [[setsockopt();]])],
+ [gl_cv_lib_socket="-lsocket"])
+ if test -z "$gl_cv_lib_socket"; then
+ LIBS="$gl_save_LIBS -lnetwork"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();]], [[setsockopt();]])],
+ [gl_cv_lib_socket="-lnetwork"])
+ if test -z "$gl_cv_lib_socket"; then
+ LIBS="$gl_save_LIBS -lnet"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
+#ifdef __cplusplus
+"C"
+#endif
+char setsockopt();]], [[setsockopt();]])],
+ [gl_cv_lib_socket="-lnet"])
+ fi
+ fi
+ LIBS="$gl_save_LIBS"
+ ])
+ if test -z "$gl_cv_lib_socket"; then
+ gl_cv_lib_socket="none needed"
+ fi
+ ])
+ if test "$gl_cv_lib_socket" != "none needed"; then
+ LIBSOCKET="$gl_cv_lib_socket"
+ fi
+ fi
+ AC_SUBST([LIBSOCKET])
+])
diff --git a/m4/sockets.m4 b/m4/sockets.m4
new file mode 100644
index 0000000..ed9cb87
--- /dev/null
+++ b/m4/sockets.m4
@@ -0,0 +1,17 @@
+# sockets.m4 serial 7
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SOCKETS],
+[
+ AC_REQUIRE([AC_C_INLINE])
+ AC_REQUIRE([gl_SOCKETLIB])
+ gl_PREREQ_SOCKETS
+])
+
+# Prerequisites of lib/sockets.c.
+AC_DEFUN([gl_PREREQ_SOCKETS], [
+ :
+])
diff --git a/m4/socklen.m4 b/m4/socklen.m4
new file mode 100644
index 0000000..1c63a85
--- /dev/null
+++ b/m4/socklen.m4
@@ -0,0 +1,76 @@
+# socklen.m4 serial 11
+dnl Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Albert Chin, Windows fixes from Simon Josefsson.
+
+dnl Check for socklen_t: historically on BSD it is an int, and in
+dnl POSIX 1g it is a type of its own, but some platforms use different
+dnl types for the argument to getsockopt, getpeername, etc.:
+dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS.
+dnl So we have to test to find something that will work.
+
+AC_DEFUN([gl_TYPE_SOCKLEN_T],
+ [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl
+ AC_CHECK_TYPE([socklen_t], ,
+ [AC_CACHE_CHECK([for socklen_t equivalent],
+ [gl_cv_socklen_t_equiv],
+ [# Systems have either "struct sockaddr *" or
+ # "void *" as the second argument to getpeername
+ gl_cv_socklen_t_equiv=
+ for arg2 in "struct sockaddr" void; do
+ for t in int size_t "unsigned int" "long int" "unsigned long int"; do
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[#include <sys/types.h>
+ #include <sys/socket.h>
+
+ int getpeername (int, $arg2 *, $t *);]],
+ [[$t len;
+ getpeername (0, 0, &len);]])],
+ [gl_cv_socklen_t_equiv="$t"])
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ test "$gl_cv_socklen_t_equiv" != "" && break
+ done
+ if test "$gl_cv_socklen_t_equiv" = ""; then
+ AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
+ fi
+ ])
+ AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv],
+ [type to use in place of socklen_t if not defined])],
+ [gl_SOCKET_HEADERS])])
+
+dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find
+dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users
+dnl of this module should use the same include pattern as gl_SOCKET_HEADERS.
+dnl When you change this macro, keep also in sync:
+dnl - gl_CHECK_SOCKET_HEADERS,
+dnl - the Include section of modules/socklen.
+AC_DEFUN([gl_SOCKET_HEADERS],
+[
+/* <sys/types.h> is not needed according to POSIX, but the
+ <sys/socket.h> in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#if HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#elif HAVE_WS2TCPIP_H
+# include <ws2tcpip.h>
+#endif
+])
+
+dnl Tests for the existence of the header for socket facilities.
+dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H.
+dnl This macro must match gl_SOCKET_HEADERS.
+AC_DEFUN([gl_CHECK_SOCKET_HEADERS],
+ [AC_CHECK_HEADERS_ONCE([sys/socket.h])
+ if test $ac_cv_header_sys_socket_h = no; then
+ dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
+ dnl the check for those headers unconditional; yet cygwin reports
+ dnl that the headers are present but cannot be compiled (since on
+ dnl cygwin, all socket information should come from sys/socket.h).
+ AC_CHECK_HEADERS([ws2tcpip.h])
+ fi
+ ])
diff --git a/m4/sockpfaf.m4 b/m4/sockpfaf.m4
new file mode 100644
index 0000000..6c6dc2f
--- /dev/null
+++ b/m4/sockpfaf.m4
@@ -0,0 +1,84 @@
+# sockpfaf.m4 serial 10
+dnl Copyright (C) 2004, 2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...)
+dnl and some common address families (AF_INET, AF_INET6, ...).
+dnl This test assumes that a system supports an address family if and only if
+dnl it supports the corresponding protocol family.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SOCKET_FAMILIES],
+[
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ AC_CHECK_HEADERS_ONCE([netinet/in.h])
+
+ AC_CACHE_CHECK([for IPv4 sockets],
+ [gl_cv_socket_ipv4],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif]],
+[[int x = AF_INET; struct in_addr y; struct sockaddr_in z;
+ if (&x && &y && &z) return 0;]])],
+ gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)])
+ if test $gl_cv_socket_ipv4 = yes; then
+ AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if <sys/socket.h> defines AF_INET.])
+ fi
+
+ AC_CACHE_CHECK([for IPv6 sockets],
+ [gl_cv_socket_ipv6],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif]],
+[[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z;
+ if (&x && &y && &z) return 0;]])],
+ gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)])
+ if test $gl_cv_socket_ipv6 = yes; then
+ AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if <sys/socket.h> defines AF_INET6.])
+ fi
+])
+
+AC_DEFUN([gl_SOCKET_FAMILY_UNIX],
+[
+ AC_REQUIRE([gl_SYS_SOCKET_H])
+ AC_CHECK_HEADERS_ONCE([sys/un.h])
+
+ AC_CACHE_CHECK([for UNIX domain sockets],
+ [gl_cv_socket_unix],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#endif]],
+[[int x = AF_UNIX; struct sockaddr_un y;
+ if (&x && &y) return 0;]])],
+ gl_cv_socket_unix=yes, gl_cv_socket_unix=no)])
+ if test $gl_cv_socket_unix = yes; then
+ AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if <sys/socket.h> defines AF_UNIX.])
+ fi
+])
diff --git a/m4/ssize_t.m4 b/m4/ssize_t.m4
new file mode 100644
index 0000000..1c12c33
--- /dev/null
+++ b/m4/ssize_t.m4
@@ -0,0 +1,23 @@
+# ssize_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2001-2003, 2006, 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether ssize_t is defined.
+
+AC_DEFUN([gt_TYPE_SSIZE_T],
+[
+ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/types.h>]],
+ [[int x = sizeof (ssize_t *) + sizeof (ssize_t);
+ return !x;]])],
+ [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])])
+ if test $gt_cv_ssize_t = no; then
+ AC_DEFINE([ssize_t], [int],
+ [Define as a signed type of the same size as size_t.])
+ fi
+])
diff --git a/m4/stat-time.m4 b/m4/stat-time.m4
new file mode 100644
index 0000000..40993d5
--- /dev/null
+++ b/m4/stat-time.m4
@@ -0,0 +1,83 @@
+# Checks for stat-related time functions.
+
+# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2023 Free Software
+# Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# st_atim.tv_nsec - Linux, Solaris, Cygwin
+# st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE
+# st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE
+# st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1)
+
+# st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway)
+# st_birthtim - Cygwin 1.7.0+
+
+AC_DEFUN([gl_STAT_TIME],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_CHECK_HEADERS_ONCE([sys/time.h])
+
+ AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec],
+ [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec],
+ [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #if HAVE_SYS_TIME_H
+ # include <sys/time.h>
+ #endif
+ #include <time.h>
+ struct timespec ts;
+ struct stat st;
+ ]],
+ [[
+ st.st_atim = ts;
+ ]])],
+ [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes],
+ [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])])
+ if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
+ AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1],
+ [Define to 1 if the type of the st_atim member of a struct stat is
+ struct timespec.])
+ fi],
+ [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [],
+ [AC_CHECK_MEMBERS([struct stat.st_atimensec], [],
+ [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])
+])
+
+# Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.)
+# and NTFS (Cygwin).
+# There was a time when this field was named st_createtime (21 June
+# 2002 to 16 July 2002) But that window is very small and applied only
+# to development code, so systems still using that configuration are
+# not supported. See revisions 1.10 and 1.11 of FreeBSD's
+# src/sys/ufs/ufs/dinode.h.
+#
+AC_DEFUN([gl_STAT_BIRTHTIME],
+[
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_CHECK_HEADERS_ONCE([sys/time.h])
+ AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [],
+ [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [],
+ [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])
+])
diff --git a/m4/stat.m4 b/m4/stat.m4
new file mode 100644
index 0000000..6d1628c
--- /dev/null
+++ b/m4/stat.m4
@@ -0,0 +1,87 @@
+# serial 19
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STAT],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+ AC_CHECK_FUNCS_ONCE([lstat])
+ case "$host_os" in
+ mingw*)
+ dnl On this platform, the original stat() returns st_atime, st_mtime,
+ dnl st_ctime values that are affected by the time zone.
+ REPLACE_STAT=1
+ ;;
+ *)
+ dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/").
+ dnl (For mingw, this is due to a broken stat() override in libmingwex.a.)
+ dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/").
+ AC_CACHE_CHECK([whether stat handles trailing slashes on files],
+ [gl_cv_func_stat_file_slash],
+ [touch conftest.tmp
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.tmp conftest.lnk
+ fi
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/stat.h>
+]], [[int result = 0;
+ struct stat st;
+ if (!stat ("conftest.tmp/", &st))
+ result |= 1;
+#if HAVE_LSTAT
+ if (!stat ("conftest.lnk/", &st))
+ result |= 2;
+#endif
+ return result;
+ ]])],
+ [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no],
+ [case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.tmp conftest.lnk])
+ case $gl_cv_func_stat_file_slash in
+ *no)
+ REPLACE_STAT=1
+ AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs
+ help when passed a file name with a trailing slash]);;
+ esac
+ case $host_os in
+ dnl Solaris stat can return a negative tv_nsec.
+ solaris*)
+ REPLACE_FSTAT=1 ;;
+ esac
+ ;;
+ esac
+])
+
+# Prerequisites of lib/stat.c and lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_STAT], [
+ AC_REQUIRE([gl_SYS_STAT_H])
+ AC_REQUIRE([gl_PREREQ_STAT_W32])
+ :
+])
+
+# Prerequisites of lib/stat-w32.c.
+AC_DEFUN([gl_PREREQ_STAT_W32], [
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ case "$host_os" in
+ mingw*)
+ AC_CHECK_HEADERS([sdkddkver.h])
+ ;;
+ esac
+])
diff --git a/m4/stdalign.m4 b/m4/stdalign.m4
new file mode 100644
index 0000000..f49cf8e
--- /dev/null
+++ b/m4/stdalign.m4
@@ -0,0 +1,200 @@
+# Check for alignas and alignof that conform to C23.
+
+dnl Copyright 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert and Bruno Haible.
+
+# Prepare for substituting <stdalign.h> if it is not supported.
+
+AC_DEFUN([gl_ALIGNASOF],
+[
+ AC_CACHE_CHECK([for alignas and alignof],
+ [gl_cv_header_working_stdalign_h],
+ [gl_save_CFLAGS=$CFLAGS
+ for gl_working in "yes, keywords" "yes, <stdalign.h> macros"; do
+ AS_CASE([$gl_working],
+ [*stdalign.h*], [CFLAGS="$gl_save_CFLAGS -DINCLUDE_STDALIGN_H"])
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdint.h>
+ #ifdef INCLUDE_STDALIGN_H
+ #include <stdalign.h>
+ #endif
+ #include <stddef.h>
+
+ /* Test that alignof yields a result consistent with offsetof.
+ This catches GCC bug 52023
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */
+ #ifdef __cplusplus
+ template <class t> struct alignof_helper { char a; t b; };
+ # define ao(type) offsetof (alignof_helper<type>, b)
+ #else
+ # define ao(type) offsetof (struct { char a; type b; }, b)
+ #endif
+ char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1];
+ char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1];
+ char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1];
+
+ /* Test alignas only on platforms where gnulib can help. */
+ #if \
+ ((defined __cplusplus && 201103 <= __cplusplus) \
+ || (__TINYC__ && defined __attribute__) \
+ || (defined __APPLE__ && defined __MACH__ \
+ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ : __GNUC__) \
+ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \
+ || 1300 <= _MSC_VER)
+ struct alignas_test { char c; char alignas (8) alignas_8; };
+ char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
+ ? 1 : -1];
+ #endif
+ ]])],
+ [gl_cv_header_working_stdalign_h=$gl_working],
+ [gl_cv_header_working_stdalign_h=no])
+
+ CFLAGS=$gl_save_CFLAGS
+ test "$gl_cv_header_working_stdalign_h" != no && break
+ done])
+
+ AS_CASE([$gl_cv_header_working_stdalign_h],
+ [yes*keyword*],
+ [AC_DEFINE([HAVE_C_ALIGNASOF], [1],
+ [Define to 1 if the alignas and alignof keywords work.])])
+
+ dnl The "zz" puts this toward config.h's end, to avoid potential
+ dnl collisions with other definitions.
+ AH_VERBATIM([zzalignas],
+[#if !defined HAVE_C_ALIGNASOF && __cplusplus < 201103 && !defined alignof
+# if HAVE_STDALIGN_H
+# include <stdalign.h>
+# endif
+
+/* ISO C23 alignas and alignof for platforms that lack it.
+
+ References:
+ ISO C23 (latest free draft
+ <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf>)
+ sections 6.5.3.4, 6.7.5, 7.15.
+ C++11 (latest free draft
+ <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
+ section 18.10. */
+
+/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment
+ requirement of a structure member (i.e., slot or field) that is of
+ type TYPE, as an integer constant expression.
+
+ This differs from GCC's and clang's __alignof__ operator, which can
+ yield a better-performing alignment for an object of that type. For
+ example, on x86 with GCC and on Linux/x86 with clang,
+ __alignof__ (double) and __alignof__ (long long) are 8, whereas
+ alignof (double) and alignof (long long) are 4 unless the option
+ '-malign-double' is used.
+
+ The result cannot be used as a value for an 'enum' constant, if you
+ want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */
+
+/* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023
+ <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
+ clang versions < 8.0.0 have the same bug. */
+# if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
+ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
+ && !defined __clang__) \
+ || (defined __clang__ && __clang_major__ < 8))
+# undef/**/_Alignof
+# ifdef __cplusplus
+# if (201103 <= __cplusplus || defined _MSC_VER)
+# define _Alignof(type) alignof (type)
+# else
+ template <class __t> struct __alignof_helper { char __a; __t __b; };
+# define _Alignof(type) offsetof (__alignof_helper<type>, __b)
+# define _GL_STDALIGN_NEEDS_STDDEF 1
+# endif
+# else
+# if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__
+# define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b)
+# else
+# define _Alignof(type) offsetof (struct { char __a; type __b; }, __b)
+# define _GL_STDALIGN_NEEDS_STDDEF 1
+# endif
+# endif
+# endif
+# if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))
+# undef/**/alignof
+# define alignof _Alignof
+# endif
+
+/* alignas (A), also known as _Alignas (A), aligns a variable or type
+ to the alignment A, where A is an integer constant expression. For
+ example:
+
+ int alignas (8) foo;
+ struct s { int a; int alignas (8) bar; };
+
+ aligns the address of FOO and the offset of BAR to be multiples of 8.
+
+ A should be a power of two that is at least the type's alignment
+ and at most the implementation's alignment limit. This limit is
+ 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable
+ to MSVC through at least version 10.0, A should be an integer
+ constant, as MSVC does not support expressions such as 1 << 3.
+ To be portable to Sun C 5.11, do not align auto variables to
+ anything stricter than their default alignment.
+
+ The following C23 requirements are not supported here:
+
+ - If A is zero, alignas has no effect.
+ - alignas can be used multiple times; the strictest one wins.
+ - alignas (TYPE) is equivalent to alignas (alignof (TYPE)).
+
+ */
+# if !HAVE_STDALIGN_H
+# if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112
+# if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)
+# define _Alignas(a) alignas (a)
+# elif (!defined __attribute__ \
+ && ((defined __APPLE__ && defined __MACH__ \
+ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+ : __GNUC__ && !defined __ibmxl__) \
+ || (4 <= __clang_major__) \
+ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__))
+# define _Alignas(a) __attribute__ ((__aligned__ (a)))
+# elif 1300 <= _MSC_VER
+# define _Alignas(a) __declspec (align (a))
+# endif
+# endif
+# if ((defined _Alignas \
+ && !(defined __cplusplus \
+ && (201103 <= __cplusplus || defined _MSC_VER))) \
+ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# define alignas _Alignas
+# endif
+# endif
+
+# if _GL_STDALIGN_NEEDS_STDDEF
+# include <stddef.h>
+# endif
+#endif])
+])
+
+AC_DEFUN([gl_STDALIGN_H],
+[
+ AC_REQUIRE([gl_ALIGNASOF])
+ if test "$gl_cv_header_working_stdalign_h" = no; then
+ GL_GENERATE_STDALIGN_H=true
+ else
+ GL_GENERATE_STDALIGN_H=false
+ fi
+
+ gl_CHECK_NEXT_HEADERS([stdalign.h])
+ if test $ac_cv_header_stdalign_h = yes; then
+ HAVE_STDALIGN_H=1
+ else
+ HAVE_STDALIGN_H=0
+ fi
+ AC_SUBST([HAVE_STDALIGN_H])
+])
diff --git a/m4/stdarg.m4 b/m4/stdarg.m4
new file mode 100644
index 0000000..94787cc
--- /dev/null
+++ b/m4/stdarg.m4
@@ -0,0 +1,76 @@
+# stdarg.m4 serial 8
+dnl Copyright (C) 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Provide a working va_copy in combination with <stdarg.h>.
+
+AC_DEFUN([gl_STDARG_H],
+[
+ GL_GENERATE_STDARG_H=false
+ NEXT_STDARG_H='<stdarg.h>'
+ AC_CACHE_CHECK([for va_copy],
+ [gl_cv_func_va_copy],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdarg.h>]],
+ [[
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+ ]])],
+ [gl_cv_func_va_copy=yes],
+ [gl_cv_func_va_copy=no])
+ ])
+ if test $gl_cv_func_va_copy = no; then
+ dnl Provide a substitute.
+ dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5
+ dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h>
+ dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
+ dnl this platform, we use an <stdarg.h> substitute. But we cannot use this
+ dnl approach on other platforms, because <stdarg.h> often defines only
+ dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
+ dnl not work in this situation.
+ AC_EGREP_CPP([vaccine],
+ [#if defined _AIX && !defined __GNUC__
+ AIX vaccine
+ #endif
+ ], [gl_aixcc=yes], [gl_aixcc=no])
+ if test $gl_aixcc = yes; then
+ dnl Provide a substitute <stdarg.h> file.
+ GL_GENERATE_STDARG_H=true
+ gl_NEXT_HEADERS([stdarg.h])
+ dnl Fallback for the case when <stdarg.h> contains only macro definitions.
+ if test "$gl_cv_next_stdarg_h" = '""'; then
+ gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+ NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+ fi
+ else
+ dnl Provide a substitute in <config.h>, either __va_copy or as a simple
+ dnl assignment.
+ gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdarg.h>]],
+ [[
+#ifndef __va_copy
+error, bail out
+#endif
+ ]])],
+ [gl_cv_func___va_copy=yes],
+ [gl_cv_func___va_copy=no])])
+ if test $gl_cv_func___va_copy = yes; then
+ AC_DEFINE([va_copy], [__va_copy],
+ [Define as a macro for copying va_list variables.])
+ else
+ AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */
+#define gl_va_copy(a,b) ((a) = (b))])
+ AC_DEFINE([va_copy], [gl_va_copy],
+ [Define as a macro for copying va_list variables.])
+ fi
+ fi
+ fi
+ AC_SUBST([NEXT_STDARG_H])
+])
diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4
new file mode 100644
index 0000000..aa01221
--- /dev/null
+++ b/m4/stddef_h.m4
@@ -0,0 +1,119 @@
+# stddef_h.m4 serial 14
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl A placeholder for <stddef.h>, for platforms that have issues.
+
+AC_DEFUN_ONCE([gl_STDDEF_H],
+[
+ AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+ AC_REQUIRE([gt_TYPE_WCHAR_T])
+
+ dnl Persuade OpenBSD <stddef.h> to declare max_align_t.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ GL_GENERATE_STDDEF_H=false
+
+ dnl Test whether the type max_align_t exists and whether its alignment
+ dnl "is as great as is supported by the implementation in all contexts".
+ AC_CACHE_CHECK([for good max_align_t],
+ [gl_cv_type_max_align_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[/* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has
+ the correct alignment with the default (wrong) definition of
+ _Alignof, but a wrong alignment as soon as we activate an
+ ISO C compliant _Alignof definition. */
+ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus
+ #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b)
+ #endif
+ #include <stddef.h>
+ unsigned int s = sizeof (max_align_t);
+ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__
+ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+ int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+ #endif
+ typedef struct { char a; max_align_t b; } max_helper;
+ typedef struct { char a; long b; } long_helper;
+ typedef struct { char a; double b; } double_helper;
+ typedef struct { char a; long double b; } long_double_helper;
+ int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1];
+ int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1];
+ int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1];
+ ]])],
+ [gl_cv_type_max_align_t=yes],
+ [gl_cv_type_max_align_t=no])
+ ])
+ if test $gl_cv_type_max_align_t = no; then
+ HAVE_MAX_ALIGN_T=0
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ if test $gt_cv_c_wchar_t = no; then
+ HAVE_WCHAR_T=0
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+ [gl_cv_decl_null_works],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+ int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+ [gl_cv_decl_null_works=yes],
+ [gl_cv_decl_null_works=no])])
+ if test $gl_cv_decl_null_works = no; then
+ REPLACE_NULL=1
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ AC_CACHE_CHECK([for unreachable],
+ [gl_cv_func_unreachable],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stddef.h>
+ ]],
+ [[unreachable ();
+ ]])],
+ [gl_cv_func_unreachable=yes],
+ [gl_cv_func_unreachable=no])
+ ])
+ if test $gl_cv_func_unreachable = no; then
+ GL_GENERATE_STDDEF_H=true
+ fi
+
+ if $GL_GENERATE_STDDEF_H; then
+ gl_NEXT_HEADERS([stddef.h])
+ fi
+])
+
+# gl_STDDEF_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_STDDEF_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ REPLACE_NULL=0; AC_SUBST([REPLACE_NULL])
+ HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T])
+ HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T])
+])
diff --git a/m4/stdint.m4 b/m4/stdint.m4
new file mode 100644
index 0000000..d6961b0
--- /dev/null
+++ b/m4/stdint.m4
@@ -0,0 +1,531 @@
+# stdint.m4 serial 61
+dnl Copyright (C) 2001-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Bruno Haible.
+dnl Test whether <stdint.h> is supported or must be substituted.
+
+AC_PREREQ([2.61])
+
+AC_DEFUN_ONCE([gl_STDINT_H],
+[
+ AC_PREREQ([2.59])dnl
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ AC_REQUIRE([gl_LIMITS_H])
+ AC_REQUIRE([gt_TYPE_WINT_T])
+
+ dnl For backward compatibility. Some packages may still be testing these
+ dnl macros.
+ AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type 'long long int'.])
+ AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+ [Define to 1 if the system has the type 'unsigned long long int'.])
+
+ dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
+ AC_CHECK_HEADERS_ONCE([wchar.h])
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
+ AC_SUBST([HAVE_WCHAR_H])
+
+ dnl Check for <inttypes.h>.
+ AC_CHECK_HEADERS_ONCE([inttypes.h])
+ if test $ac_cv_header_inttypes_h = yes; then
+ HAVE_INTTYPES_H=1
+ else
+ HAVE_INTTYPES_H=0
+ fi
+ AC_SUBST([HAVE_INTTYPES_H])
+
+ dnl Check for <sys/types.h>.
+ AC_CHECK_HEADERS_ONCE([sys/types.h])
+ if test $ac_cv_header_sys_types_h = yes; then
+ HAVE_SYS_TYPES_H=1
+ else
+ HAVE_SYS_TYPES_H=0
+ fi
+ AC_SUBST([HAVE_SYS_TYPES_H])
+
+ gl_CHECK_NEXT_HEADERS([stdint.h])
+ if test $ac_cv_header_stdint_h = yes; then
+ HAVE_STDINT_H=1
+ else
+ HAVE_STDINT_H=0
+ fi
+ AC_SUBST([HAVE_STDINT_H])
+
+ dnl Now see whether we need a substitute <stdint.h>.
+ if test $ac_cv_header_stdint_h = yes; then
+ AC_CACHE_CHECK([whether stdint.h conforms to C99],
+ [gl_cv_header_working_stdint_h],
+ [gl_cv_header_working_stdint_h=no
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+]
+gl_STDINT_INCLUDES
+[
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+/* Check that SIZE_MAX has the correct type, if possible. */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \
+ || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+ ((t) ((t) 0 < (t) -1 \
+ ? (t) -1 \
+ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+ int check_PTRDIFF:
+ PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+ && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+ ? 1 : -1;
+ /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */
+ int check_SIG_ATOMIC:
+ SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+ && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+ ? 1 : -1;
+ int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+ int check_WCHAR:
+ WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+ && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+ ? 1 : -1;
+ /* Detect bug in mingw. */
+ int check_WINT:
+ WINT_MIN == TYPE_MINIMUM (wint_t)
+ && WINT_MAX == TYPE_MAXIMUM (wint_t)
+ ? 1 : -1;
+
+ /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
+ int check_UINT8_C:
+ (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+ int check_UINT16_C:
+ (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+ /* Detect bugs in OpenBSD 3.9 stdint.h. */
+#ifdef UINT8_MAX
+ int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+ int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+ int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+ int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+ int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+ int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+ int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+ int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+ int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+ int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+ int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+ int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+ int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+ int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+ int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+ ]])],
+ [dnl Determine whether the various *_MIN, *_MAX macros are usable
+ dnl in preprocessor expression. We could do it by compiling a test
+ dnl program for each of these macros. It is faster to run a program
+ dnl that inspects the macro expansion.
+ dnl This detects a bug on HP-UX 11.23/ia64.
+ AC_RUN_IFELSE([
+ AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+ {
+#ifdef INT8_MAX
+ MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+ MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+ MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+ MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+ MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+ MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+ MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+ MVAL (UINT64_MAX),
+#endif
+ NULL
+ };
+]], [[
+ const char **mv;
+ for (mv = macro_values; *mv != NULL; mv++)
+ {
+ const char *value = *mv;
+ /* Test whether it looks like a cast expression. */
+ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+ || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+ || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+ || strncmp (value, "((int)"/*)*/, 6) == 0
+ || strncmp (value, "((signed short)"/*)*/, 15) == 0
+ || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+ return mv - macro_values + 1;
+ }
+ return 0;
+]])],
+ [gl_cv_header_working_stdint_h=yes],
+ [],
+ [case "$host_os" in
+ # Guess yes on native Windows.
+ mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+ # In general, assume it works.
+ *) gl_cv_header_working_stdint_h="guessing yes" ;;
+ esac
+ ])
+ ])
+ ])
+ fi
+
+ HAVE_C99_STDINT_H=0
+ HAVE_SYS_BITYPES_H=0
+ HAVE_SYS_INTTYPES_H=0
+ GL_GENERATE_STDINT_H=true
+ case "$gl_cv_header_working_stdint_h" in
+ *yes)
+ HAVE_C99_STDINT_H=1
+ dnl Now see whether the system <stdint.h> works without
+ dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
+ dnl If not, there would be problems when stdint.h is included from C++.
+ AC_CACHE_CHECK([whether stdint.h works without ISO C predefines],
+ [gl_cv_header_stdint_without_STDC_macros],
+ [gl_cv_header_stdint_without_STDC_macros=no
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+ ]])],
+ [gl_cv_header_stdint_without_STDC_macros=yes])
+ ])
+
+ if test $gl_cv_header_stdint_without_STDC_macros = no; then
+ AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
+ [Define to 1 if the system <stdint.h> predates C++11.])
+ AC_DEFINE([__STDC_LIMIT_MACROS], [1],
+ [Define to 1 if the system <stdint.h> predates C++11.])
+ fi
+ AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
+ [gl_cv_header_stdint_width],
+ [gl_cv_header_stdint_width=no
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[
+ /* Work if build is not clean. */
+ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+ #endif
+ #include <stdint.h>
+ ]gl_STDINT_INCLUDES[
+ int iw = UINTMAX_WIDTH;
+ ]])],
+ [gl_cv_header_stdint_width=yes])])
+ if test "$gl_cv_header_stdint_width" = yes; then
+ GL_GENERATE_STDINT_H=false
+ fi
+ ;;
+ *)
+ dnl Check for <sys/inttypes.h>, and for
+ dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
+ AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
+ if test $ac_cv_header_sys_inttypes_h = yes; then
+ HAVE_SYS_INTTYPES_H=1
+ fi
+ if test $ac_cv_header_sys_bitypes_h = yes; then
+ HAVE_SYS_BITYPES_H=1
+ fi
+ gl_STDINT_TYPE_PROPERTIES
+ ;;
+ esac
+
+ dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
+ gl_REPLACE_LIMITS_H
+
+ AC_SUBST([HAVE_C99_STDINT_H])
+ AC_SUBST([HAVE_SYS_BITYPES_H])
+ AC_SUBST([HAVE_SYS_INTTYPES_H])
+])
+
+dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
+dnl Determine the size of each of the given types in bits.
+AC_DEFUN([gl_STDINT_BITSIZEOF],
+[
+ dnl Use a shell loop, to avoid bloating configure, and
+ dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+ dnl config.h.in,
+ dnl - extra AC_SUBST calls, so that the right substitutions are made.
+ m4_foreach_w([gltype], [$1],
+ [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+ [Define to the number of bits in type ']gltype['.])])
+ for gltype in $1 ; do
+ AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
+ [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
+ [$2
+#include <limits.h>], [result=unknown])
+ eval gl_cv_bitsizeof_${gltype}=\$result
+ ])
+ eval result=\$gl_cv_bitsizeof_${gltype}
+ if test $result = unknown; then
+ dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
+ dnl do a syntax check even on unused #if conditions and give an error
+ dnl on valid C code like this:
+ dnl #if 0
+ dnl # if > 32
+ dnl # endif
+ dnl #endif
+ result=0
+ fi
+ GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
+ eval BITSIZEOF_${GLTYPE}=\$result
+ done
+ m4_foreach_w([gltype], [$1],
+ [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
+dnl Determine the signedness of each of the given types.
+dnl Define HAVE_SIGNED_TYPE if type is signed.
+AC_DEFUN([gl_CHECK_TYPES_SIGNED],
+[
+ dnl Use a shell loop, to avoid bloating configure, and
+ dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+ dnl config.h.in,
+ dnl - extra AC_SUBST calls, so that the right substitutions are made.
+ m4_foreach_w([gltype], [$1],
+ [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+ [Define to 1 if ']gltype[' is a signed integer type.])])
+ for gltype in $1 ; do
+ AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([$2[
+ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
+ result=yes, result=no)
+ eval gl_cv_type_${gltype}_signed=\$result
+ ])
+ eval result=\$gl_cv_type_${gltype}_signed
+ GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ if test "$result" = yes; then
+ AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
+ eval HAVE_SIGNED_${GLTYPE}=1
+ else
+ eval HAVE_SIGNED_${GLTYPE}=0
+ fi
+ done
+ m4_foreach_w([gltype], [$1],
+ [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
+dnl Determine the suffix to use for integer constants of the given types.
+dnl Define t_SUFFIX for each such type.
+AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
+[
+ dnl Use a shell loop, to avoid bloating configure, and
+ dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+ dnl config.h.in,
+ dnl - extra AC_SUBST calls, so that the right substitutions are made.
+ m4_foreach_w([gltype], [$1],
+ [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
+ [Define to l, ll, u, ul, ull, etc., as suitable for
+ constants of type ']gltype['.])])
+ for gltype in $1 ; do
+ AC_CACHE_CHECK([for $gltype integer literal suffix],
+ [gl_cv_type_${gltype}_suffix],
+ [eval gl_cv_type_${gltype}_suffix=no
+ eval result=\$gl_cv_type_${gltype}_signed
+ if test "$result" = yes; then
+ glsufu=
+ else
+ glsufu=u
+ fi
+ for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+ case $glsuf in
+ '') gltype1='int';;
+ l) gltype1='long int';;
+ ll) gltype1='long long int';;
+ i64) gltype1='__int64';;
+ u) gltype1='unsigned int';;
+ ul) gltype1='unsigned long int';;
+ ull) gltype1='unsigned long long int';;
+ ui64)gltype1='unsigned __int64';;
+ esac
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([$2[
+ extern $gltype foo;
+ extern $gltype1 foo;]])],
+ [eval gl_cv_type_${gltype}_suffix=\$glsuf])
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" != no && break
+ done])
+ GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+ eval result=\$gl_cv_type_${gltype}_suffix
+ test "$result" = no && result=
+ eval ${GLTYPE}_SUFFIX=\$result
+ AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
+ done
+ m4_foreach_w([gltype], [$1],
+ [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
+])
+
+dnl gl_STDINT_INCLUDES
+AC_DEFUN([gl_STDINT_INCLUDES],
+[[
+ #include <stddef.h>
+ #include <signal.h>
+ #if HAVE_WCHAR_H
+ # include <wchar.h>
+ #endif
+]])
+
+dnl gl_STDINT_TYPE_PROPERTIES
+dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
+dnl of interest to stdint.in.h.
+AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
+[
+ AC_REQUIRE([gl_MULTIARCH])
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+ gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
+ [gl_STDINT_INCLUDES])
+ fi
+ gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
+ [gl_STDINT_INCLUDES])
+ gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
+ [gl_STDINT_INCLUDES])
+ gl_cv_type_ptrdiff_t_signed=yes
+ gl_cv_type_size_t_signed=no
+ if test $APPLE_UNIVERSAL_BUILD = 0; then
+ gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
+ [gl_STDINT_INCLUDES])
+ fi
+ gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
+ [gl_STDINT_INCLUDES])
+
+ dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
+ dnl requirement that wint_t is "unchanged by default argument promotions".
+ dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
+ dnl Set the variable BITSIZEOF_WINT_T accordingly.
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
+ BITSIZEOF_WINT_T=32
+ fi
+])
diff --git a/m4/stdio_h.m4 b/m4/stdio_h.m4
new file mode 100644
index 0000000..0756996
--- /dev/null
+++ b/m4/stdio_h.m4
@@ -0,0 +1,237 @@
+# stdio_h.m4 serial 61
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_STDIO_H],
+[
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+ AH_VERBATIM([MINGW_ANSI_STDIO],
+[/* Use GNU style printf and scanf. */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+])
+ AC_DEFINE([__USE_MINGW_ANSI_STDIO])
+ gl_NEXT_HEADERS([stdio.h])
+
+ dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
+ dnl inttypes.h behave like gnu instead of system; we must give our
+ dnl printf wrapper the right attribute to match.
+ AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros],
+ [gl_cv_func_printf_attribute_flavor],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #define __STDC_FORMAT_MACROS 1
+ #include <stdio.h>
+ #include <inttypes.h>
+ /* For non-mingw systems, compilation will trivially succeed.
+ For mingw, compilation will succeed for older mingw (system
+ printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+ #if (defined _WIN32 && ! defined __CYGWIN__) && \
+ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+ extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+ #endif
+ ]])], [gl_cv_func_printf_attribute_flavor=system],
+ [gl_cv_func_printf_attribute_flavor=gnu])])
+ if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+ AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
+ [Define to 1 if printf and friends should be labeled with
+ attribute "__gnu_printf__" instead of "__printf__"])
+ fi
+
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
+ m4_ifdef([gl_NONBLOCKING_IO], [
+ gl_NONBLOCKING_IO
+ if test $gl_cv_have_nonblocking != yes; then
+ REPLACE_STDIO_READ_FUNCS=1
+ fi
+ ])
+
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant.
+ m4_ifdef([gl_SIGNAL_SIGPIPE], [
+ gl_SIGNAL_SIGPIPE
+ if test $gl_cv_header_signal_h_SIGPIPE != yes; then
+ REPLACE_STDIO_WRITE_FUNCS=1
+ fi
+ ])
+ dnl This ifdef is an optimization, to avoid performing a configure check whose
+ dnl result is not used. But it does not make the test of
+ dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant.
+ m4_ifdef([gl_NONBLOCKING_IO], [
+ gl_NONBLOCKING_IO
+ if test $gl_cv_have_nonblocking != yes; then
+ REPLACE_STDIO_WRITE_FUNCS=1
+ fi
+ ])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by both C89 and C11.
+ gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
+ ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
+ renameat snprintf tmpfile vdprintf vsnprintf])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_CHECK_DECLS_ONCE([fcloseall])
+ if test $ac_cv_have_decl_fcloseall = no; then
+ HAVE_DECL_FCLOSEALL=0
+ fi
+
+ AC_CHECK_DECLS_ONCE([getw])
+ if test $ac_cv_have_decl_getw = no; then
+ HAVE_DECL_GETW=0
+ fi
+
+ AC_CHECK_DECLS_ONCE([putw])
+ if test $ac_cv_have_decl_putw = no; then
+ HAVE_DECL_PUTW=0
+ fi
+])
+
+# gl_STDIO_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_STDIO_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STDIO_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL])
+ HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE])
+ HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO])
+ HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO])
+ HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM])
+ HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE])
+ HAVE_DECL_GETW=1; AC_SUBST([HAVE_DECL_GETW])
+ HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
+ HAVE_DECL_PUTW=1; AC_SUBST([HAVE_DECL_PUTW])
+ HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF])
+ HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF])
+ HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF])
+ HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO])
+ HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO])
+ HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE])
+ HAVE_POPEN=1; AC_SUBST([HAVE_POPEN])
+ HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT])
+ HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF])
+ HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF])
+ REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF])
+ REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE])
+ REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN])
+ REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH])
+ REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN])
+ REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU])
+ REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF])
+ REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE])
+ REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN])
+ REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK])
+ REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO])
+ REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL])
+ REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO])
+ REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM])
+ REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE])
+ REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF])
+ REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR])
+ REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN])
+ REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF])
+ REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE])
+ REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME])
+ REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT])
+ REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF])
+ REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF])
+ REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS])
+ REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
+ REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE])
+ REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF])
+ REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF])
+ REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF])
+ REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF])
+ REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF])
+ REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF])
+])
diff --git a/m4/stdlib_h.m4 b/m4/stdlib_h.m4
new file mode 100644
index 0000000..249ef65
--- /dev/null
+++ b/m4/stdlib_h.m4
@@ -0,0 +1,209 @@
+# stdlib_h.m4 serial 71
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_STDLIB_H],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ gl_NEXT_HEADERS([stdlib.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+/* OpenIndiana has a bug: <sys/time.h> must be included before
+ <sys/loadavg.h>. */
+# include <sys/time.h>
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+ ]], [_Exit aligned_alloc atoll canonicalize_file_name free
+ getloadavg getprogname getsubopt grantpt
+ initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps
+ posix_memalign posix_openpt ptsname ptsname_r qsort_r
+ random random_r reallocarray realpath rpmatch secure_getenv setenv
+ setstate setstate_r srandom srandom_r
+ strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_CHECK_DECLS_ONCE([ecvt])
+ if test $ac_cv_have_decl_ecvt = no; then
+ HAVE_DECL_ECVT=0
+ fi
+ AC_CHECK_DECLS_ONCE([fcvt])
+ if test $ac_cv_have_decl_fcvt = no; then
+ HAVE_DECL_FCVT=0
+ fi
+ AC_CHECK_DECLS_ONCE([gcvt])
+ if test $ac_cv_have_decl_gcvt = no; then
+ HAVE_DECL_GCVT=0
+ fi
+])
+
+# gl_STDLIB_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPROGNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE__EXIT=1; AC_SUBST([HAVE__EXIT])
+ HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC])
+ HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL])
+ HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+ HAVE_DECL_ECVT=1; AC_SUBST([HAVE_DECL_ECVT])
+ HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT])
+ HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT])
+ HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG])
+ HAVE_GETPROGNAME=1; AC_SUBST([HAVE_GETPROGNAME])
+ HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT])
+ HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT])
+ HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE])
+ HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE])
+ HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC])
+ HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP])
+ HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP])
+ HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS])
+ HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP])
+ HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS])
+ HAVE_POSIX_MEMALIGN=1; AC_SUBST([HAVE_POSIX_MEMALIGN])
+ HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT])
+ HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME])
+ HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R])
+ HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R])
+ HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM])
+ HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H])
+ HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R])
+ HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY])
+ HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH])
+ HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH])
+ HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV])
+ HAVE_SETENV=1; AC_SUBST([HAVE_SETENV])
+ HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV])
+ HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE])
+ HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE])
+ HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD])
+ HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL])
+ HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD])
+ HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL])
+ HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL])
+ HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL])
+ HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+ HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H])
+ HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT])
+ HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV])
+ REPLACE__EXIT=0; AC_SUBST([REPLACE__EXIT])
+ REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC])
+ REPLACE_CALLOC_FOR_CALLOC_GNU=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU])
+ REPLACE_CALLOC_FOR_CALLOC_POSIX=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX])
+ REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+ REPLACE_FREE=0; AC_SUBST([REPLACE_FREE])
+ REPLACE_GETLOADAVG=0; AC_SUBST([REPLACE_GETLOADAVG])
+ REPLACE_GETPROGNAME=0; AC_SUBST([REPLACE_GETPROGNAME])
+ REPLACE_GETSUBOPT=0; AC_SUBST([REPLACE_GETSUBOPT])
+ REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE])
+ REPLACE_MALLOC_FOR_MALLOC_GNU=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU])
+ REPLACE_MALLOC_FOR_MALLOC_POSIX=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX])
+ REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC])
+ REPLACE_MKOSTEMP=0; AC_SUBST([REPLACE_MKOSTEMP])
+ REPLACE_MKOSTEMPS=0; AC_SUBST([REPLACE_MKOSTEMPS])
+ REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP])
+ REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN])
+ REPLACE_POSIX_OPENPT=0; AC_SUBST([REPLACE_POSIX_OPENPT])
+ REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME])
+ REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R])
+ REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV])
+ REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R])
+ REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM])
+ REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R])
+ REPLACE_REALLOC_FOR_REALLOC_GNU=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU])
+ REPLACE_REALLOC_FOR_REALLOC_POSIX=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX])
+ REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY])
+ REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH])
+ REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV])
+ REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE])
+ REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD])
+ REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL])
+ REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD])
+ REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL])
+ REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL])
+ REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL])
+ REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV])
+ REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB])
+])
diff --git a/m4/strdup.m4 b/m4/strdup.m4
new file mode 100644
index 0000000..ecfcdd0
--- /dev/null
+++ b/m4/strdup.m4
@@ -0,0 +1,32 @@
+# strdup.m4 serial 15
+
+dnl Copyright (C) 2002-2023 Free Software Foundation, Inc.
+
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRDUP],
+[
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ AC_CHECK_DECLS_ONCE([strdup])
+ if test $ac_cv_have_decl_strdup = no; then
+ HAVE_DECL_STRDUP=0
+ fi
+])
+
+AC_DEFUN([gl_FUNC_STRDUP_POSIX],
+[
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+ if test $gl_cv_func_malloc_posix != yes; then
+ REPLACE_STRDUP=1
+ fi
+ AC_CHECK_DECLS_ONCE([strdup])
+ if test $ac_cv_have_decl_strdup = no; then
+ HAVE_DECL_STRDUP=0
+ fi
+])
+
+# Prerequisites of lib/strdup.c.
+AC_DEFUN([gl_PREREQ_STRDUP], [:])
diff --git a/m4/strerror.m4 b/m4/strerror.m4
new file mode 100644
index 0000000..9f1dddd
--- /dev/null
+++ b/m4/strerror.m4
@@ -0,0 +1,102 @@
+# strerror.m4 serial 24
+dnl Copyright (C) 2002, 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRERROR],
+[
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_HEADER_ERRNO_H])
+ AC_REQUIRE([gl_FUNC_STRERROR_0])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
+ ])
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ AC_CACHE_CHECK([for working strerror function],
+ [gl_cv_func_working_strerror],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ ]],
+ [[if (!*strerror (-2)) return 1;]])],
+ [gl_cv_func_working_strerror=yes],
+ [gl_cv_func_working_strerror=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_working_strerror" in
+ *yes) ;;
+ *)
+ dnl The system's strerror() fails to return a string for out-of-range
+ dnl integers. Replace it.
+ REPLACE_STRERROR=1
+ ;;
+ esac
+ m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [
+ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's
+ dnl buffer, we must replace strerror.
+ case "$gl_cv_func_strerror_r_works" in
+ *no) REPLACE_STRERROR=1 ;;
+ esac
+ ])
+ else
+ dnl The system's strerror() cannot know about the new errno values we add
+ dnl to <errno.h>, or any fix for strerror(0). Replace it.
+ REPLACE_STRERROR=1
+ fi
+])
+
+dnl Detect if strerror(0) passes (that is, does not set errno, and does not
+dnl return a string that matches strerror(-1)).
+AC_DEFUN([gl_FUNC_STRERROR_0],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ REPLACE_STRERROR_0=0
+ AC_CACHE_CHECK([whether strerror(0) succeeds],
+ [gl_cv_func_strerror_0_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ #include <errno.h>
+ ]],
+ [[int result = 0;
+ char *str;
+ errno = 0;
+ str = strerror (0);
+ if (!*str) result |= 1;
+ if (errno) result |= 2;
+ if (strstr (str, "nknown") || strstr (str, "ndefined"))
+ result |= 4;
+ return result;]])],
+ [gl_cv_func_strerror_0_works=yes],
+ [gl_cv_func_strerror_0_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # Guess yes on native Windows.
+ mingw*) gl_cv_func_strerror_0_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_strerror_0_works" in
+ *yes) ;;
+ *)
+ REPLACE_STRERROR_0=1
+ AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0)
+ does not return a message implying success.])
+ ;;
+ esac
+])
diff --git a/m4/strerror_r.m4 b/m4/strerror_r.m4
new file mode 100644
index 0000000..d790ba8
--- /dev/null
+++ b/m4/strerror_r.m4
@@ -0,0 +1,180 @@
+# strerror_r.m4 serial 26
+dnl Copyright (C) 2002, 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRERROR_R],
+[
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS])
+
+ dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT
+ dnl are not defined.
+ AC_CHECK_DECLS_ONCE([strerror_r])
+ if test $ac_cv_have_decl_strerror_r = no; then
+ HAVE_DECL_STRERROR_R=0
+ fi
+
+ if test $ac_cv_func_strerror_r = yes; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ if test $gl_cv_func_strerror_r_posix_signature = yes; then
+ case "$gl_cv_func_strerror_r_works" in
+ dnl The system's strerror_r has bugs. Replace it.
+ *no) REPLACE_STRERROR_R=1 ;;
+ esac
+ else
+ dnl The system's strerror_r() has a wrong signature. Replace it.
+ REPLACE_STRERROR_R=1
+ fi
+ else
+ dnl The system's strerror_r() cannot know about the new errno values we
+ dnl add to <errno.h>, or any fix for strerror(0). Replace it.
+ REPLACE_STRERROR_R=1
+ fi
+ fi
+])
+
+# Prerequisites of lib/strerror_r.c.
+AC_DEFUN([gl_PREREQ_STRERROR_R], [
+ AC_REQUIRE([AC_FUNC_STRERROR_R])
+ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
+ AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
+ gl_CHECK_FUNCS_ANDROID([catgets], [[#include <nl_types.h>]])
+ AC_CHECK_FUNCS_ONCE([snprintf])
+])
+
+# Detect if strerror_r works, but without affecting whether a replacement
+# strerror_r will be used.
+AC_DEFUN([gl_FUNC_STRERROR_R_WORKS],
+[
+ AC_REQUIRE([gl_HEADER_ERRNO_H])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+ dnl Persuade Android <string.h> to use the GNU strerror_r API,
+ dnl and Solaris <string.h> to declare strerror_r.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+ AC_REQUIRE([gl_FUNC_STRERROR_0])
+
+ gl_CHECK_FUNCS_ANDROID([strerror_r], [[#include <string.h>]])
+ if test $ac_cv_func_strerror_r = yes; then
+ if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then
+ dnl The POSIX prototype is: int strerror_r (int, char *, size_t);
+ dnl glibc, Cygwin: char *strerror_r (int, char *, size_t);
+ dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int);
+ AC_CACHE_CHECK([for strerror_r with POSIX signature],
+ [gl_cv_func_strerror_r_posix_signature],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <string.h>
+ int strerror_r (int, char *, size_t);
+ ]],
+ [])],
+ [gl_cv_func_strerror_r_posix_signature=yes],
+ [gl_cv_func_strerror_r_posix_signature=no])
+ ])
+ if test $gl_cv_func_strerror_r_posix_signature = yes; then
+ dnl AIX 6.1 strerror_r fails by returning -1, not an error number.
+ dnl HP-UX 11.31 strerror_r always fails when the buffer length argument
+ dnl is less than 80.
+ dnl FreeBSD 8.s strerror_r claims failure on 0
+ dnl Mac OS X 10.5 strerror_r treats 0 like -1
+ dnl Solaris 10 strerror_r corrupts errno on failure
+ AC_CACHE_CHECK([whether strerror_r works],
+ [gl_cv_func_strerror_r_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <errno.h>
+ #include <string.h>
+ ]],
+ [[int result = 0;
+ char buf[79];
+ if (strerror_r (EACCES, buf, 0) < 0)
+ result |= 1;
+ errno = 0;
+ if (strerror_r (EACCES, buf, sizeof buf) != 0)
+ result |= 2;
+ strcpy (buf, "Unknown");
+ if (strerror_r (0, buf, sizeof buf) != 0)
+ result |= 4;
+ if (errno)
+ result |= 8;
+ if (strstr (buf, "nknown") || strstr (buf, "ndefined"))
+ result |= 0x10;
+ errno = 0;
+ *buf = 0;
+ if (strerror_r (-3, buf, sizeof buf) < 0)
+ result |= 0x20;
+ if (errno)
+ result |= 0x40;
+ if (!*buf)
+ result |= 0x80;
+ return result;
+ ]])],
+ [gl_cv_func_strerror_r_works=yes],
+ [gl_cv_func_strerror_r_works=no],
+ [
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on AIX.
+ aix*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess no on HP-UX.
+ hpux*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess no on BSD variants.
+ *bsd*) gl_cv_func_strerror_r_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_strerror_r_works="guessing yes";;
+ esac
+changequote([,])dnl
+ ])
+ ])
+ else
+ dnl The system's strerror() has a wrong signature.
+ dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r.
+ AC_CHECK_FUNCS_ONCE([__xpg_strerror_r])
+ dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure.
+ dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer.
+ if test $ac_cv_func___xpg_strerror_r = yes; then
+ AC_CACHE_CHECK([whether __xpg_strerror_r works],
+ [gl_cv_func_strerror_r_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <errno.h>
+ #include <string.h>
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ int __xpg_strerror_r(int, char *, size_t);
+ ]],
+ [[int result = 0;
+ char buf[256] = "^";
+ char copy[256];
+ char *str = strerror (-1);
+ strcpy (copy, str);
+ if (__xpg_strerror_r (-2, buf, 1) == 0)
+ result |= 1;
+ if (*buf)
+ result |= 2;
+ __xpg_strerror_r (-2, buf, 256);
+ if (strcmp (str, copy))
+ result |= 4;
+ return result;
+ ]])],
+ [gl_cv_func_strerror_r_works=yes],
+ [gl_cv_func_strerror_r_works=no],
+ [dnl Guess no on all platforms that have __xpg_strerror_r,
+ dnl at least until fixed glibc and cygwin are more common.
+ gl_cv_func_strerror_r_works="$gl_cross_guess_normal"
+ ])
+ ])
+ fi
+ fi
+ fi
+ else
+ case "$gl_cv_onwards_func_strerror_r" in
+ future*) REPLACE_STRERROR_R=1 ;;
+ esac
+ fi
+])
diff --git a/m4/string_h.m4 b/m4/string_h.m4
new file mode 100644
index 0000000..7f51391
--- /dev/null
+++ b/m4/string_h.m4
@@ -0,0 +1,150 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 37
+
+# Written by Paul Eggert.
+
+AC_DEFUN_ONCE([gl_STRING_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+ gl_NEXT_HEADERS([string.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use, and which is not
+ dnl guaranteed by C89.
+ gl_WARN_ON_USE_PREPARE([[#include <string.h>
+ ]],
+ [explicit_bzero ffsl ffsll memmem mempcpy memrchr memset_explicit
+ rawmemchr stpcpy stpncpy strchrnul
+ strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
+ strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+])
+
+# gl_STRING_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_STRING_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMSET_EXPLICIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS])
+ dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_REQUIRE([gl_STRING_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_STRING_H_DEFAULTS],
+[
+ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN])
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO])
+ HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
+ HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL])
+ HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM])
+ HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY])
+ HAVE_MEMSET_EXPLICIT=1; AC_SUBST([HAVE_MEMSET_EXPLICIT])
+ HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR])
+ HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR])
+ HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY])
+ HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY])
+ HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL])
+ HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP])
+ HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP])
+ HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN])
+ HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK])
+ HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP])
+ HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR])
+ HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R])
+ HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R])
+ HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP])
+ HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP])
+ HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP])
+ HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL])
+ HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP])
+ REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL])
+ REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR])
+ REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM])
+ REPLACE_MEMPCPY=0; AC_SUBST([REPLACE_MEMPCPY])
+ REPLACE_STPCPY=0; AC_SUBST([REPLACE_STPCPY])
+ REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY])
+ REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL])
+ REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP])
+ REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT])
+ REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP])
+ REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN])
+ REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR])
+ REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR])
+ REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R])
+ REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR])
+ REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R])
+ REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP])
+ REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL])
+ UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R])
+])
diff --git a/m4/strtoll.m4 b/m4/strtoll.m4
new file mode 100644
index 0000000..ec09609
--- /dev/null
+++ b/m4/strtoll.m4
@@ -0,0 +1,62 @@
+# strtoll.m4 serial 10
+dnl Copyright (C) 2002, 2004, 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRTOLL],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS([strtoll])
+ if test $ac_cv_func_strtoll = yes; then
+ AC_CACHE_CHECK([whether strtoll works],
+ [gl_cv_func_strtoll_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>]],
+ [[int result = 0;
+ char *term;
+ /* This test fails on Minix and native Windows. */
+ {
+ const char input[] = "0x";
+ (void) strtoll (input, &term, 16);
+ if (term != input + 1)
+ result |= 1;
+ }
+ /* This test fails on pre-C23 platforms. */
+ {
+ const char input[] = "0b1";
+ (void) strtoll (input, &term, 2);
+ if (term != input + 3)
+ result |= 2;
+ }
+ return result;
+ ]])
+ ],
+ [gl_cv_func_strtoll_works=yes],
+ [gl_cv_func_strtoll_works=no],
+ [case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_strtoll_works="guessing no" ;;
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strtoll_works="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_func_strtoll_works="guessing no" ;;
+ *) gl_cv_func_strtoll_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_strtoll_works" in
+ *yes) ;;
+ *) REPLACE_STRTOLL=1 ;;
+ esac
+ else
+ HAVE_STRTOLL=0
+ fi
+])
+
+# Prerequisites of lib/strtoll.c.
+AC_DEFUN([gl_PREREQ_STRTOLL], [
+ :
+])
diff --git a/m4/strtoull.m4 b/m4/strtoull.m4
new file mode 100644
index 0000000..4f895c7
--- /dev/null
+++ b/m4/strtoull.m4
@@ -0,0 +1,62 @@
+# strtoull.m4 serial 10
+dnl Copyright (C) 2002, 2004, 2006, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRTOULL],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS([strtoull])
+ if test $ac_cv_func_strtoull = yes; then
+ AC_CACHE_CHECK([whether strtoull works],
+ [gl_cv_func_strtoull_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stdlib.h>]],
+ [[int result = 0;
+ char *term;
+ /* This test fails on Minix and native Windows. */
+ {
+ const char input[] = "0x";
+ (void) strtoull (input, &term, 16);
+ if (term != input + 1)
+ result |= 1;
+ }
+ /* This test fails on pre-C23 platforms. */
+ {
+ const char input[] = "0b1";
+ (void) strtoull (input, &term, 2);
+ if (term != input + 3)
+ result |= 2;
+ }
+ return result;
+ ]])
+ ],
+ [gl_cv_func_strtoull_works=yes],
+ [gl_cv_func_strtoull_works=no],
+ [case "$host_os" in
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_strtoull_works="guessing no" ;;
+ # Guess no on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_strtoull_works="guessing no" ;;
+ # Guess no on musl systems.
+ *-musl* | midipix*) gl_cv_func_strtoull_works="guessing no" ;;
+ *) gl_cv_func_strtoull_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_strtoull_works" in
+ *yes) ;;
+ *) REPLACE_STRTOULL=1 ;;
+ esac
+ else
+ HAVE_STRTOULL=0
+ fi
+])
+
+# Prerequisites of lib/strtoull.c.
+AC_DEFUN([gl_PREREQ_STRTOULL], [
+ :
+])
diff --git a/m4/symlink.m4 b/m4/symlink.m4
new file mode 100644
index 0000000..52d6c11
--- /dev/null
+++ b/m4/symlink.m4
@@ -0,0 +1,57 @@
+# serial 10
+# See if we need to provide symlink replacement.
+
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Written by Eric Blake.
+
+AC_DEFUN([gl_FUNC_SYMLINK],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_FUNCS_ONCE([symlink])
+ dnl The best we can do on mingw is provide a dummy that always fails, so
+ dnl that compilation can proceed with fewer ifdefs. On FreeBSD 7.2, AIX 7.1,
+ dnl and Solaris 9, we want to fix a bug with trailing slash handling.
+ if test $ac_cv_func_symlink = no; then
+ HAVE_SYMLINK=0
+ else
+ AC_CACHE_CHECK([whether symlink handles trailing slash correctly],
+ [gl_cv_func_symlink_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+ ]],
+ [[int result = 0;
+ if (!symlink ("a", "conftest.link/"))
+ result |= 1;
+ if (symlink ("conftest.f", "conftest.lnk2"))
+ result |= 2;
+ else if (!symlink ("a", "conftest.lnk2/"))
+ result |= 4;
+ return result;
+ ]])],
+ [gl_cv_func_symlink_works=yes], [gl_cv_func_symlink_works=no],
+ [case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_symlink_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_symlink_works="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_symlink_works="guessing yes" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_symlink_works="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.f conftest.link conftest.lnk2])
+ case "$gl_cv_func_symlink_works" in
+ *yes) ;;
+ *)
+ REPLACE_SYMLINK=1
+ ;;
+ esac
+ fi
+])
diff --git a/m4/sys_ioctl_h.m4 b/m4/sys_ioctl_h.m4
new file mode 100644
index 0000000..80f0510
--- /dev/null
+++ b/m4/sys_ioctl_h.m4
@@ -0,0 +1,79 @@
+# sys_ioctl_h.m4 serial 15
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Bruno Haible.
+
+AC_DEFUN_ONCE([gl_SYS_IOCTL_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])
+
+ AC_CHECK_HEADERS_ONCE([sys/ioctl.h])
+ if test $ac_cv_header_sys_ioctl_h = yes; then
+ HAVE_SYS_IOCTL_H=1
+ dnl Test whether <sys/ioctl.h> declares ioctl(), or whether some other
+ dnl header file, such as <unistd.h> or <stropts.h>, is needed for that.
+ AC_CACHE_CHECK([whether <sys/ioctl.h> declares ioctl],
+ [gl_cv_decl_ioctl_in_sys_ioctl_h],
+ [dnl We cannot use AC_CHECK_DECL because it produces its own messages.
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/ioctl.h>]],
+ [[(void) ioctl;]])],
+ [gl_cv_decl_ioctl_in_sys_ioctl_h=yes],
+ [gl_cv_decl_ioctl_in_sys_ioctl_h=no])
+ ])
+ else
+ HAVE_SYS_IOCTL_H=0
+ fi
+ AC_SUBST([HAVE_SYS_IOCTL_H])
+ dnl <sys/ioctl.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([sys/ioctl.h])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <sys/ioctl.h>
+/* Some platforms declare ioctl in the wrong header. */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <unistd.h>
+#endif
+ ]], [ioctl])
+])
+
+# gl_SYS_IOCTL_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_IOCTL_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_IOCTL_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_IOCTL_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IOCTL])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_IOCTL_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H])
+ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+ AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
+ REPLACE_IOCTL=0; AC_SUBST([REPLACE_IOCTL])
+])
diff --git a/m4/sys_random_h.m4 b/m4/sys_random_h.m4
new file mode 100644
index 0000000..01d5fee
--- /dev/null
+++ b/m4/sys_random_h.m4
@@ -0,0 +1,68 @@
+# sys_random_h.m4 serial 8
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_RANDOM_H],
+[
+ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
+ dnl <sys/random.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([sys/random.h])
+ if test $ac_cv_header_sys_random_h = yes; then
+ HAVE_SYS_RANDOM_H=1
+ else
+ HAVE_SYS_RANDOM_H=0
+ fi
+ AC_SUBST([HAVE_SYS_RANDOM_H])
+
+ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
+ if test $ac_cv_header_sys_random_h = yes; then
+ UNISTD_H_HAVE_SYS_RANDOM_H=1
+ fi
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+#if HAVE_SYS_RANDOM_H
+/* Additional includes are needed before <sys/random.h> on uClibc
+ and Mac OS X. */
+# include <sys/types.h>
+# include <stdlib.h>
+# include <sys/random.h>
+#endif
+ ]],
+ [getrandom])
+])
+
+# gl_SYS_RANDOM_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_RANDOM_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_RANDOM_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_RANDOM_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETRANDOM])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_RANDOM_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_GETRANDOM=1; AC_SUBST([HAVE_GETRANDOM])
+ REPLACE_GETRANDOM=0; AC_SUBST([REPLACE_GETRANDOM])
+])
diff --git a/m4/sys_select_h.m4 b/m4/sys_select_h.m4
new file mode 100644
index 0000000..4ec5ed7
--- /dev/null
+++ b/m4/sys_select_h.m4
@@ -0,0 +1,110 @@
+# sys_select_h.m4 serial 23
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_SELECT_H],
+[
+ AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_CACHE_CHECK([whether <sys/select.h> is self-contained],
+ [gl_cv_header_sys_select_h_selfcontained],
+ [
+ dnl Test against two bugs:
+ dnl 1. On many platforms, <sys/select.h> assumes prior inclusion of
+ dnl <sys/types.h>.
+ dnl 2. On OSF/1 4.0, <sys/select.h> provides only a forward declaration
+ dnl of 'struct timeval', and no definition of this type.
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/select.h>]],
+ [[struct timeval b;]])],
+ [gl_cv_header_sys_select_h_selfcontained=yes],
+ [gl_cv_header_sys_select_h_selfcontained=no])
+ dnl Test against another bug:
+ dnl 3. On Solaris 10, <sys/select.h> provides an FD_ZERO implementation
+ dnl that relies on memset(), but without including <string.h>.
+ if test $gl_cv_header_sys_select_h_selfcontained = yes; then
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <sys/select.h>]],
+ [[int memset; int bzero;]])
+ ],
+ [AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[
+ #undef memset
+ #define memset nonexistent_memset
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ void *memset (void *, int, unsigned long);
+ #undef bzero
+ #define bzero nonexistent_bzero
+ extern
+ #ifdef __cplusplus
+ "C"
+ #endif
+ void bzero (void *, unsigned long);
+ fd_set fds;
+ FD_ZERO (&fds);
+ ]])
+ ],
+ [],
+ [gl_cv_header_sys_select_h_selfcontained=no])
+ ])
+ fi
+ ])
+ dnl <sys/select.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([sys/select.h])
+ if test $ac_cv_header_sys_select_h = yes; then
+ HAVE_SYS_SELECT_H=1
+ else
+ HAVE_SYS_SELECT_H=0
+ fi
+ AC_SUBST([HAVE_SYS_SELECT_H])
+ gl_PREREQ_SYS_H_WINSOCK2
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+/* Some systems require prerequisite headers. */
+#include <sys/types.h>
+#if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <sys/select.h>
+ ]], [pselect select])
+])
+
+# gl_SYS_SELECT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_SELECT_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_SELECT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PSELECT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SELECT])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT])
+ REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT])
+ REPLACE_SELECT=0; AC_SUBST([REPLACE_SELECT])
+])
diff --git a/m4/sys_socket_h.m4 b/m4/sys_socket_h.m4
new file mode 100644
index 0000000..98a1041
--- /dev/null
+++ b/m4/sys_socket_h.m4
@@ -0,0 +1,206 @@
+# sys_socket_h.m4 serial 29
+dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson.
+
+AC_DEFUN_ONCE([gl_SYS_SOCKET_H],
+[
+ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+
+ dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have
+ dnl old-style declarations (with return type 'int' instead of 'ssize_t')
+ dnl unless _POSIX_PII_SOCKET is defined.
+ case "$host_os" in
+ osf*)
+ AC_DEFINE([_POSIX_PII_SOCKET], [1],
+ [Define to 1 in order to get the POSIX compatible declarations
+ of socket functions.])
+ ;;
+ esac
+
+ GL_GENERATE_SYS_SOCKET_H=false
+ AC_CACHE_CHECK([whether <sys/socket.h> is self-contained],
+ [gl_cv_header_sys_socket_h_selfcontained],
+ [
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])],
+ [gl_cv_header_sys_socket_h_selfcontained=yes],
+ [gl_cv_header_sys_socket_h_selfcontained=no])
+ ])
+ if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
+ dnl If the shutdown function exists, <sys/socket.h> should define
+ dnl SHUT_RD, SHUT_WR, SHUT_RDWR.
+ AC_CHECK_FUNCS([shutdown])
+ if test $ac_cv_func_shutdown = yes; then
+ AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros],
+ [gl_cv_header_sys_socket_h_shut],
+ [
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[#include <sys/socket.h>]],
+ [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])],
+ [gl_cv_header_sys_socket_h_shut=yes],
+ [gl_cv_header_sys_socket_h_shut=no])
+ ])
+ if test $gl_cv_header_sys_socket_h_shut = no; then
+ GL_GENERATE_SYS_SOCKET_H=true
+ fi
+ fi
+ fi
+ # We need to check for ws2tcpip.h now.
+ gl_PREREQ_SYS_H_SOCKET
+ AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[
+ /* sys/types.h is not needed according to POSIX, but the
+ sys/socket.h in i386-unknown-freebsd4.10 and
+ powerpc-apple-darwin5.5 required it. */
+#include <sys/types.h>
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+#ifdef HAVE_WS2TCPIP_H
+#include <ws2tcpip.h>
+#endif
+])
+ if test $ac_cv_type_struct_sockaddr_storage = no; then
+ HAVE_STRUCT_SOCKADDR_STORAGE=0
+ fi
+ if test $ac_cv_type_sa_family_t = no; then
+ HAVE_SA_FAMILY_T=0
+ fi
+ if test $ac_cv_type_struct_sockaddr_storage != no; then
+ AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family],
+ [],
+ [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0],
+ [#include <sys/types.h>
+ #ifdef HAVE_SYS_SOCKET_H
+ #include <sys/socket.h>
+ #endif
+ #ifdef HAVE_WS2TCPIP_H
+ #include <ws2tcpip.h>
+ #endif
+ ])
+ fi
+ if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
+ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
+ GL_GENERATE_SYS_SOCKET_H=true
+ fi
+ gl_PREREQ_SYS_H_WINSOCK2
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+/* Some systems require prerequisite headers. */
+#include <sys/types.h>
+#include <sys/socket.h>
+ ]], [socket connect accept bind getpeername getsockname getsockopt
+ listen recv send recvfrom sendto setsockopt shutdown accept4])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+])
+
+AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
+[
+ dnl Check prerequisites of the <sys/socket.h> replacement.
+ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
+ gl_CHECK_NEXT_HEADERS([sys/socket.h])
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_SYS_SOCKET_H=1
+ else
+ HAVE_SYS_SOCKET_H=0
+ fi
+ AC_SUBST([HAVE_SYS_SOCKET_H])
+ gl_PREREQ_SYS_H_WS2TCPIP
+])
+
+# Common prerequisites of the <sys/socket.h> replacement and of the
+# <sys/select.h> replacement.
+# Sets and substitutes HAVE_WINSOCK2_H.
+AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2],
+[
+ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
+ m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
+ AC_CHECK_HEADERS_ONCE([sys/socket.h])
+ if test $ac_cv_header_sys_socket_h != yes; then
+ dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
+ dnl the check for those headers unconditional; yet cygwin reports
+ dnl that the headers are present but cannot be compiled (since on
+ dnl cygwin, all socket information should come from sys/socket.h).
+ AC_CHECK_HEADERS([winsock2.h])
+ fi
+ if test "$ac_cv_header_winsock2_h" = yes; then
+ HAVE_WINSOCK2_H=1
+ UNISTD_H_HAVE_WINSOCK2_H=1
+ SYS_IOCTL_H_HAVE_WINSOCK2_H=1
+ else
+ HAVE_WINSOCK2_H=0
+ fi
+ AC_SUBST([HAVE_WINSOCK2_H])
+])
+
+# Common prerequisites of the <sys/socket.h> replacement and of the
+# <arpa/inet.h> replacement.
+# Sets and substitutes HAVE_WS2TCPIP_H.
+AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP],
+[
+ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
+ if test $ac_cv_header_sys_socket_h = yes; then
+ HAVE_WS2TCPIP_H=0
+ else
+ if test $ac_cv_header_ws2tcpip_h = yes; then
+ HAVE_WS2TCPIP_H=1
+ else
+ HAVE_WS2TCPIP_H=0
+ fi
+ fi
+ AC_SUBST([HAVE_WS2TCPIP_H])
+])
+
+# gl_SYS_SOCKET_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_SOCKET_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
+[
+ HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
+ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
+ AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
+ HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T])
+ HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4])
+])
diff --git a/m4/sys_stat_h.m4 b/m4/sys_stat_h.m4
new file mode 100644
index 0000000..ca57398
--- /dev/null
+++ b/m4/sys_stat_h.m4
@@ -0,0 +1,129 @@
+# sys_stat_h.m4 serial 42 -*- Autoconf -*-
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Eric Blake.
+dnl Provide a GNU-like <sys/stat.h>.
+
+AC_DEFUN_ONCE([gl_SYS_STAT_H],
+[
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+
+ dnl Check for broken stat macros.
+ AC_REQUIRE([AC_HEADER_STAT])
+
+ gl_CHECK_NEXT_HEADERS([sys/stat.h])
+
+ dnl Ensure the type mode_t gets defined.
+ AC_REQUIRE([AC_TYPE_MODE_T])
+
+ dnl Whether to enable precise timestamps in 'struct stat'.
+ m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [
+ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC])
+ ], [
+ WINDOWS_STAT_TIMESPEC=0
+ ])
+ AC_SUBST([WINDOWS_STAT_TIMESPEC])
+
+ dnl Whether to ensure that struct stat.st_size is 64-bit wide.
+ m4_ifdef([gl_LARGEFILE], [
+ AC_REQUIRE([gl_LARGEFILE])
+ ], [
+ WINDOWS_64_BIT_ST_SIZE=0
+ ])
+ AC_SUBST([WINDOWS_64_BIT_ST_SIZE])
+
+ dnl Define types that are supposed to be defined in <sys/types.h> or
+ dnl <sys/stat.h>.
+ AC_CHECK_TYPE([nlink_t], [],
+ [AC_DEFINE([nlink_t], [int],
+ [Define to the type of st_nlink in struct stat, or a supertype.])],
+ [#include <sys/types.h>
+ #include <sys/stat.h>])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h>
+ ]], [chmod fchmodat fstat fstatat futimens getumask lchmod lstat
+ mkdirat mkfifo mkfifoat mknod mknodat stat utimensat])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+])
+
+# gl_SYS_STAT_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_STAT_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHMOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
+ HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
+ HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS])
+ HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK])
+ HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD])
+ HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT])
+ HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT])
+ HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO])
+ HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT])
+ HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD])
+ HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT])
+ HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT])
+ REPLACE_CHMOD=0; AC_SUBST([REPLACE_CHMOD])
+ REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT])
+ REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT])
+ REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT])
+ REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS])
+ REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT])
+ REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR])
+ REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO])
+ REPLACE_MKFIFOAT=0; AC_SUBST([REPLACE_MKFIFOAT])
+ REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD])
+ REPLACE_MKNODAT=0; AC_SUBST([REPLACE_MKNODAT])
+ REPLACE_STAT=0; AC_SUBST([REPLACE_STAT])
+ REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT])
+])
diff --git a/m4/sys_time_h.m4 b/m4/sys_time_h.m4
new file mode 100644
index 0000000..45a1f8b
--- /dev/null
+++ b/m4/sys_time_h.m4
@@ -0,0 +1,120 @@
+# Configure a replacement for <sys/time.h>.
+# serial 12
+
+# Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert and Martin Lambers.
+
+AC_DEFUN_ONCE([gl_SYS_TIME_H],
+[
+ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement
+ dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1
+ dnl statements that occur in other macros.
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
+ AC_REQUIRE([AC_C_RESTRICT])
+ AC_CHECK_HEADERS_ONCE([sys/time.h])
+ gl_CHECK_NEXT_HEADERS([sys/time.h])
+
+ if test $ac_cv_header_sys_time_h != yes; then
+ HAVE_SYS_TIME_H=0
+ fi
+
+ dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h>
+ dnl only. So include that header in the list.
+ gl_PREREQ_SYS_H_WINSOCK2
+ AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+ #if HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ #endif
+ ]],
+ [[static struct timeval x; x.tv_sec = x.tv_usec;]])],
+ [gl_cv_sys_struct_timeval=yes],
+ [gl_cv_sys_struct_timeval=no])
+ ])
+ if test $gl_cv_sys_struct_timeval != yes; then
+ HAVE_STRUCT_TIMEVAL=0
+ else
+ dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined
+ dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only
+ dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is
+ dnl smaller than the 'time_t' type mandated by POSIX.
+ dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but
+ dnl that is good enough.
+ AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member],
+ [gl_cv_sys_struct_timeval_tv_sec],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if HAVE_SYS_TIME_H
+ #include <sys/time.h>
+ #endif
+ #include <time.h>
+ #if HAVE_WINSOCK2_H
+ # include <winsock2.h>
+ #endif
+ ]],
+ [[static struct timeval x;
+ typedef int verify_tv_sec_type[
+ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1
+ ];
+ ]])],
+ [gl_cv_sys_struct_timeval_tv_sec=yes],
+ [gl_cv_sys_struct_timeval_tv_sec=no])
+ ])
+ if test $gl_cv_sys_struct_timeval_tv_sec != yes; then
+ REPLACE_STRUCT_TIMEVAL=1
+ fi
+ fi
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+#if HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#include <time.h>
+ ]], [gettimeofday])
+])
+
+# gl_SYS_TIME_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_TIME_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_TIME_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETTIMEOFDAY])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_TIME_H_DEFAULTS],
+[
+ dnl Assume POSIX behavior unless another module says otherwise.
+ HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY])
+ HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL])
+ HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H])
+ REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY])
+ REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL])
+])
diff --git a/m4/sys_types_h.m4 b/m4/sys_types_h.m4
new file mode 100644
index 0000000..627671f
--- /dev/null
+++ b/m4/sys_types_h.m4
@@ -0,0 +1,70 @@
+# sys_types_h.m4 serial 13
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_TYPES_H],
+[
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+
+ dnl Use sane struct stat types in OpenVMS 8.2 and later.
+ AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
+
+ gl_NEXT_HEADERS([sys/types.h])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ dnl Ensure the type mode_t gets defined.
+ AC_REQUIRE([AC_TYPE_MODE_T])
+
+ dnl Whether to override the 'off_t' type.
+ AC_REQUIRE([gl_TYPE_OFF_T])
+
+ dnl Whether to override the 'dev_t' and 'ino_t' types.
+ m4_ifdef([gl_WINDOWS_STAT_INODES], [
+ AC_REQUIRE([gl_WINDOWS_STAT_INODES])
+ ], [
+ WINDOWS_STAT_INODES=0
+ ])
+ AC_SUBST([WINDOWS_STAT_INODES])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
+[
+])
+
+# This works around a buggy version in autoconf <= 2.69.
+# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html>
+# The 2.70 version isn't quoted properly, so override it too.
+
+m4_version_prereq([2.70.1], [], [
+
+m4_undefine([AC_HEADER_MAJOR])
+AC_DEFUN([AC_HEADER_MAJOR],
+[AC_CHECK_HEADERS_ONCE([sys/types.h])
+AC_CHECK_HEADER([sys/mkdev.h],
+ [AC_DEFINE([MAJOR_IN_MKDEV], [1],
+ [Define to 1 if `major', `minor', and `makedev' are
+ declared in <mkdev.h>.])])
+if test $ac_cv_header_sys_mkdev_h = no; then
+ AC_CHECK_HEADER([sys/sysmacros.h],
+ [AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
+ [Define to 1 if `major', `minor', and `makedev'
+ are declared in <sysmacros.h>.])])
+fi
+])# AC_HEADER_MAJOR
+
+])
diff --git a/m4/sys_uio_h.m4 b/m4/sys_uio_h.m4
new file mode 100644
index 0000000..93a65d2
--- /dev/null
+++ b/m4/sys_uio_h.m4
@@ -0,0 +1,46 @@
+# sys_uio_h.m4 serial 3
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_UIO_H],
+[
+ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS])
+ dnl <sys/uio.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([sys/uio.h])
+ if test $ac_cv_header_sys_uio_h = yes; then
+ HAVE_SYS_UIO_H=1
+ else
+ HAVE_SYS_UIO_H=0
+ fi
+ AC_SUBST([HAVE_SYS_UIO_H])
+])
+
+# gl_SYS_UIO_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_SYS_UIO_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_SYS_UIO_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS], [
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_SYS_UIO_H_DEFAULTS],
+[
+])
diff --git a/m4/tempname.m4 b/m4/tempname.m4
new file mode 100644
index 0000000..abed799
--- /dev/null
+++ b/m4/tempname.m4
@@ -0,0 +1,19 @@
+#serial 5
+
+# Copyright (C) 2006-2007, 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose
+# it as a public API, and provide it on systems that are lacking.
+AC_DEFUN([gl_FUNC_GEN_TEMPNAME],
+[
+ gl_PREREQ_TEMPNAME
+])
+
+# Prerequisites of lib/tempname.c.
+AC_DEFUN([gl_PREREQ_TEMPNAME],
+[
+ :
+])
diff --git a/m4/thread.m4 b/m4/thread.m4
new file mode 100644
index 0000000..9c63df3
--- /dev/null
+++ b/m4/thread.m4
@@ -0,0 +1,17 @@
+# thread.m4 serial 4
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_THREAD],
+[
+ AC_REQUIRE([gl_THREADLIB])
+
+ if test $gl_threads_api = posix; then
+ gl_save_LIBS="$LIBS"
+ LIBS="$LIBS $LIBMULTITHREAD"
+ gl_CHECK_FUNCS_ANDROID([pthread_atfork], [[#include <pthread.h>]])
+ LIBS="$gl_save_LIBS"
+ fi
+])
diff --git a/m4/threadlib.m4 b/m4/threadlib.m4
new file mode 100644
index 0000000..7202b95
--- /dev/null
+++ b/m4/threadlib.m4
@@ -0,0 +1,669 @@
+# threadlib.m4 serial 35
+dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ([2.60])
+
+dnl The general structure of the multithreading modules in gnulib is that we
+dnl have three set of modules:
+dnl
+dnl * POSIX API:
+dnl pthread, which combines
+dnl pthread-h
+dnl pthread-thread
+dnl pthread-once
+dnl pthread-mutex
+dnl pthread-rwlock
+dnl pthread-cond
+dnl pthread-tss
+dnl pthread-spin
+dnl sched_yield
+dnl
+dnl * ISO C API:
+dnl threads, which combines
+dnl threads-h
+dnl thrd
+dnl mtx
+dnl cnd
+dnl tss
+dnl
+dnl * Gnulib API, with an implementation that can be chosen at configure
+dnl time through the option --enable-threads=...
+dnl thread
+dnl lock
+dnl cond
+dnl tls
+dnl yield
+dnl
+dnl They are independent, except for the fact that
+dnl - the implementation of the ISO C API may use the POSIX (or some other
+dnl platform dependent) API,
+dnl - the implementation of the Gnulib API may use the POSIX or ISO C or
+dnl some other platform dependent API, depending on the --enable-threads
+dnl option.
+dnl
+dnl This file contains macros for all of these APIs!
+
+dnl ============================================================================
+dnl Macros for all thread APIs
+
+AC_DEFUN([gl_ANYTHREADLIB_EARLY],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ if test -z "$gl_anythreadlib_early_done"; then
+ case "$host_os" in
+ osf*)
+ # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+ # groks <pthread.h>. cc also understands the flag -pthread, but
+ # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+ # 2. putting a flag into CPPFLAGS that has an effect on the linker
+ # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
+ # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ ;;
+ esac
+ # Some systems optimize for single-threaded programs by default, and
+ # need special flags to disable these optimizations. For example, the
+ # definition of 'errno' in <errno.h>.
+ case "$host_os" in
+ aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+ solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+ esac
+ gl_anythreadlib_early_done=done
+ fi
+])
+
+dnl Checks whether the compiler and linker support weak declarations of symbols.
+
+AC_DEFUN([gl_WEAK_SYMBOLS],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether imported symbols can be declared weak],
+ [gl_cv_have_weak],
+ [case "$host_os" in
+ cygwin*)
+ dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but
+ dnl programs that use pthread_in_use() with weak symbol references
+ dnl crash miserably at runtime.
+ gl_cv_have_weak="guessing no"
+ ;;
+ *)
+ gl_cv_have_weak=no
+ dnl First, test whether the compiler accepts it syntactically.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[extern void xyzzy ();
+#pragma weak xyzzy]],
+ [[xyzzy();]])],
+ [gl_cv_have_weak=maybe])
+ if test $gl_cv_have_weak = maybe; then
+ dnl Second, test whether it actually works. On Cygwin 1.7.2, with
+ dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <stdio.h>
+#pragma weak fputs
+int main ()
+{
+ return (fputs == NULL);
+}]])],
+ [gl_cv_have_weak=yes],
+ [gl_cv_have_weak=no],
+ [dnl When cross-compiling, assume that only ELF platforms support
+ dnl weak symbols.
+ AC_EGREP_CPP([Extensible Linking Format],
+ [#ifdef __ELF__
+ Extensible Linking Format
+ #endif
+ ],
+ [gl_cv_have_weak="guessing yes"],
+ [gl_cv_have_weak="guessing no"])
+ ])
+ fi
+ ;;
+ esac
+ dnl But when linking statically, weak symbols don't work.
+ case " $LDFLAGS " in
+ *" -static "*) gl_cv_have_weak=no ;;
+ esac
+ dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak
+ dnl symbol and linking against a shared library that has a dependency on
+ dnl the shared library that defines the symbol.
+ case "$gl_cv_have_weak" in
+ *yes)
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ : > conftest1.c
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1
+ cat <<EOF > conftest2.c
+#include <pthread.h>
+#pragma weak pthread_mutexattr_gettype
+int main ()
+{
+ return (pthread_mutexattr_gettype != NULL);
+}
+EOF
+ $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \
+ || gl_cv_have_weak=no
+ rm -f conftest1.c libempty.so conftest2.c conftest
+ ;;
+ esac
+ ;;
+ esac
+ ])
+ case "$gl_cv_have_weak" in
+ *yes)
+ AC_DEFINE([HAVE_WEAK_SYMBOLS], [1],
+ [Define to 1 if the compiler and linker support weak declarations of symbols.])
+ ;;
+ esac
+])
+
+dnl ============================================================================
+dnl Macros for the POSIX API
+
+dnl gl_PTHREADLIB
+dnl -------------
+dnl Tests for the libraries needs for using the POSIX threads API.
+dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile.
+dnl Sets the variable LIBPMULTITHREAD, for programs that really need
+dnl multithread functionality. The difference between LIBPTHREAD and
+dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically
+dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not.
+dnl Sets the variable SCHED_YIELD_LIB to the linker options needed to use the
+dnl sched_yield() function.
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX
+dnl threads API is available.
+
+dnl The guts of gl_PTHREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_PTHREADLIB_BODY],
+[
+ AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+ if test -z "$gl_pthreadlib_body_done"; then
+ gl_pthread_api=no
+ LIBPTHREAD=
+ LIBPMULTITHREAD=
+ # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+ # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
+ AC_CHECK_HEADER([pthread.h],
+ [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
+ if test "$gl_have_pthread_h" = yes; then
+ # Other possible tests:
+ # -lpthreads (FSU threads, PCthreads)
+ # -lgthreads
+ # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+ # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+ # the second one only in libpthread, and lock.c needs it.
+ #
+ # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
+ # needs -pthread for some reason. See:
+ # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
+ save_LIBS=$LIBS
+ for gl_pthread in '' '-pthread'; do
+ LIBS="$LIBS $gl_pthread"
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ pthread_mutex_t m;
+ pthread_mutexattr_t ma;
+ ]],
+ [[pthread_mutex_lock (&m);
+ pthread_mutexattr_init (&ma);]])],
+ [gl_pthread_api=yes
+ LIBPTHREAD=$gl_pthread
+ LIBPMULTITHREAD=$gl_pthread])
+ LIBS=$save_LIBS
+ test $gl_pthread_api = yes && break
+ done
+ echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD
+
+ gl_pthread_in_glibc=no
+ # On Linux with glibc >= 2.34, libc contains the fully functional
+ # pthread functions.
+ case "$host_os" in
+ linux*)
+ AC_EGREP_CPP([Lucky user],
+ [#include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
+ Lucky user
+ #endif
+ #endif
+ ],
+ [gl_pthread_in_glibc=yes],
+ [])
+ ;;
+ esac
+ echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD
+
+ # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+ # since it is defined as a macro on OSF/1.)
+ if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then
+ # The program links fine without libpthread. But it may actually
+ # need to link with libpthread in order to create multiple threads.
+ AC_CHECK_LIB([pthread], [pthread_kill],
+ [if test $gl_pthread_in_glibc = yes; then
+ LIBPMULTITHREAD=
+ else
+ LIBPMULTITHREAD=-lpthread
+ # On Solaris and HP-UX, most pthread functions exist also in libc.
+ # Therefore pthread_in_use() needs to actually try to create a
+ # thread: pthread_create from libc will fail, whereas
+ # pthread_create will actually create a thread.
+ # On Solaris 10 or newer, this test is no longer needed, because
+ # libc contains the fully functional pthread functions.
+ case "$host_os" in
+changequote(,)dnl
+ solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
+changequote([,])dnl
+ AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+ [Define if the pthread_in_use() detection is hard.])
+ esac
+ fi
+ ])
+ elif test $gl_pthread_api != yes; then
+ # Some library is needed. Try libpthread and libc_r.
+ AC_CHECK_LIB([pthread], [pthread_kill],
+ [gl_pthread_api=yes
+ LIBPTHREAD=-lpthread
+ LIBPMULTITHREAD=-lpthread])
+ if test $gl_pthread_api != yes; then
+ # For FreeBSD 4.
+ AC_CHECK_LIB([c_r], [pthread_kill],
+ [gl_pthread_api=yes
+ LIBPTHREAD=-lc_r
+ LIBPMULTITHREAD=-lc_r])
+ fi
+ fi
+ echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD
+ fi
+ AC_MSG_CHECKING([whether POSIX threads API is available])
+ AC_MSG_RESULT([$gl_pthread_api])
+ AC_SUBST([LIBPTHREAD])
+ AC_SUBST([LIBPMULTITHREAD])
+ if test $gl_pthread_api = yes; then
+ AC_DEFINE([HAVE_PTHREAD_API], [1],
+ [Define if you have the <pthread.h> header and the POSIX threads API.])
+ fi
+
+ dnl On some systems, sched_yield is in librt, rather than in libpthread.
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sched.h>]],
+ [[sched_yield ();]])],
+ [SCHED_YIELD_LIB=
+ ],
+ [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc.
+ AC_CHECK_LIB([rt], [sched_yield], [SCHED_YIELD_LIB=-lrt],
+ [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt.
+ AC_CHECK_LIB([posix4], [sched_yield], [SCHED_YIELD_LIB=-lposix4])])
+ ])
+ AC_SUBST([SCHED_YIELD_LIB])
+ dnl For backward compatibility.
+ LIB_SCHED_YIELD="$SCHED_YIELD_LIB"
+ AC_SUBST([LIB_SCHED_YIELD])
+
+ gl_pthreadlib_body_done=done
+ fi
+])
+
+AC_DEFUN([gl_PTHREADLIB],
+[
+ AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+ gl_PTHREADLIB_BODY
+])
+
+dnl ============================================================================
+dnl Macros for the ISO C API
+
+dnl gl_STDTHREADLIB
+dnl ---------------
+dnl Tests for the libraries needs for using the ISO C threads API.
+dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile.
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads
+dnl API is available.
+
+dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_STDTHREADLIB_BODY],
+[
+ AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ if test -z "$gl_stdthreadlib_body_done"; then
+ AC_CHECK_HEADERS_ONCE([threads.h])
+
+ case "$host_os" in
+ mingw*)
+ LIBSTDTHREAD=
+ ;;
+ *)
+ gl_PTHREADLIB_BODY
+ if test $ac_cv_header_threads_h = yes; then
+ dnl glibc >= 2.29 has thrd_create in libpthread.
+ dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends
+ dnl on libpthread (for the symbol 'pthread_mutexattr_gettype').
+ dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in
+ dnl libc.
+ gl_CHECK_FUNCS_ANDROID([thrd_create], [[#include <threads.h>]])
+ if test $ac_cv_func_thrd_create = yes; then
+ LIBSTDTHREAD=
+ else
+ AC_CHECK_LIB([stdthreads], [thrd_create], [
+ LIBSTDTHREAD='-lstdthreads -lpthread'
+ ], [
+ dnl Guess that thrd_create is in libpthread.
+ LIBSTDTHREAD="$LIBPMULTITHREAD"
+ ])
+ fi
+ else
+ dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c.
+ LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB"
+ fi
+ ;;
+ esac
+ AC_SUBST([LIBSTDTHREAD])
+
+ AC_MSG_CHECKING([whether ISO C threads API is available])
+ AC_MSG_RESULT([$ac_cv_header_threads_h])
+ gl_stdthreadlib_body_done=done
+ fi
+])
+
+AC_DEFUN([gl_STDTHREADLIB],
+[
+ AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
+ gl_STDTHREADLIB_BODY
+])
+
+dnl ============================================================================
+dnl Macros for the Gnulib API
+
+dnl gl_THREADLIB
+dnl ------------
+dnl Tests for a multithreading library to be used.
+dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO
+dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the
+dnl default is 'no', otherwise it is system dependent. In both cases, the user
+dnl can change the choice through the options --enable-threads=choice or
+dnl --disable-threads.
+dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS,
+dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS.
+dnl The choice --enable-threads=isoc+posix is available only on platforms that
+dnl have both the ISO C and the POSIX threads APIs. It has the effect of using
+dnl the ISO C API for most things and the POSIX API only for creating and
+dnl controlling threads (because there is no equivalent to pthread_atfork in
+dnl the ISO C API).
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not.
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the
+dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the
+dnl same value. Only system libraries are needed.
+
+AC_DEFUN([gl_THREADLIB_EARLY],
+[
+ AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+])
+
+dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_EARLY_BODY],
+[
+ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+ dnl influences the result of the autoconf tests that test for *_unlocked
+ dnl declarations, on AIX 5 at least. Therefore it must come early.
+ AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+ AC_BEFORE([$0], [gl_ARGP])dnl
+
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
+ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+ dnl Check for multithreading.
+ m4_ifdef([gl_THREADLIB_DEFAULT_NO],
+ [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
+ [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
+ m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=])
+ AC_ARG_ENABLE([threads],
+AS_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
+AS_HELP_STRING([--disable-threads], [build without multithread safety])]),
+ [gl_use_threads=$enableval],
+ [if test -n "$gl_use_threads_default"; then
+ gl_use_threads="$gl_use_threads_default"
+ else
+changequote(,)dnl
+ case "$host_os" in
+ dnl Disable multithreading by default on OSF/1, because it interferes
+ dnl with fork()/exec(): When msgexec is linked with -lpthread, its
+ dnl child process gets an endless segmentation fault inside execvp().
+ osf*) gl_use_threads=no ;;
+ dnl Disable multithreading by default on Cygwin 1.5.x, because it has
+ dnl bugs that lead to endless loops or crashes. See
+ dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
+ cygwin*)
+ case `uname -r` in
+ 1.[0-5].*) gl_use_threads=no ;;
+ *) gl_use_threads=yes ;;
+ esac
+ ;;
+ dnl Obey gl_AVOID_WINPTHREAD on mingw.
+ mingw*)
+ case "$gl_use_winpthreads_default" in
+ yes) gl_use_threads=posix ;;
+ no) gl_use_threads=windows ;;
+ *) gl_use_threads=yes ;;
+ esac
+ ;;
+ *) gl_use_threads=yes ;;
+ esac
+changequote([,])dnl
+ fi
+ ])
+ if test "$gl_use_threads" = yes \
+ || test "$gl_use_threads" = isoc \
+ || test "$gl_use_threads" = posix \
+ || test "$gl_use_threads" = isoc+posix; then
+ # For using <threads.h> or <pthread.h>:
+ gl_ANYTHREADLIB_EARLY
+ fi
+])
+
+dnl The guts of gl_THREADLIB. Needs to be expanded only once.
+
+AC_DEFUN([gl_THREADLIB_BODY],
+[
+ AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
+ gl_threads_api=none
+ LIBTHREAD=
+ LTLIBTHREAD=
+ LIBMULTITHREAD=
+ LTLIBMULTITHREAD=
+ if test "$gl_use_threads" != no; then
+ dnl Check whether the compiler and linker support weak declarations.
+ gl_WEAK_SYMBOLS
+ if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+ dnl If we use weak symbols to implement pthread_in_use / pth_in_use /
+ dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create
+ dnl facility is in use.
+ AC_CHECK_HEADERS_ONCE([threads.h])
+ :
+ fi
+ if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then
+ AC_CHECK_HEADERS_ONCE([threads.h])
+ gl_have_isoc_threads="$ac_cv_header_threads_h"
+ fi
+ if test "$gl_use_threads" = yes \
+ || test "$gl_use_threads" = posix \
+ || test "$gl_use_threads" = isoc+posix; then
+ gl_PTHREADLIB_BODY
+ LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD
+ LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD
+ if test $gl_pthread_api = yes; then
+ if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then
+ gl_threads_api='isoc+posix'
+ AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1],
+ [Define if the combination of the ISO C and POSIX multithreading APIs can be used.])
+ LIBTHREAD= LTLIBTHREAD=
+ else
+ gl_threads_api=posix
+ AC_DEFINE([USE_POSIX_THREADS], [1],
+ [Define if the POSIX multithreading library can be used.])
+ if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then
+ AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1],
+ [Define if references to the POSIX multithreading library are satisfied by libc.])
+ else
+ if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
+ AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
+ [Define if references to the POSIX multithreading library should be made weak.])
+ LIBTHREAD= LTLIBTHREAD=
+ else
+ case "$host_os" in
+ freebsd* | dragonfly* | midnightbsd*)
+ if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then
+ dnl If weak symbols can't tell whether pthread_create(), pthread_key_create()
+ dnl etc. will succeed, we need a runtime test.
+ AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
+ [Define if the pthread_in_use() detection is hard.])
+ fi
+ ;;
+ esac
+ fi
+ fi
+ fi
+ fi
+ fi
+ if test $gl_threads_api = none; then
+ if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then
+ gl_STDTHREADLIB_BODY
+ LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD
+ LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD
+ gl_threads_api=isoc
+ AC_DEFINE([USE_ISOC_THREADS], [1],
+ [Define if the ISO C multithreading library can be used.])
+ fi
+ fi
+ if test $gl_threads_api = none; then
+ case "$gl_use_threads" in
+ yes | windows | win32) # The 'win32' is for backward compatibility.
+ if { case "$host_os" in
+ mingw*) true;;
+ *) false;;
+ esac
+ }; then
+ gl_threads_api=windows
+ AC_DEFINE([USE_WINDOWS_THREADS], [1],
+ [Define if the native Windows multithreading API can be used.])
+ fi
+ ;;
+ esac
+ fi
+ fi
+ AC_MSG_CHECKING([for multithread API to use])
+ AC_MSG_RESULT([$gl_threads_api])
+ AC_SUBST([LIBTHREAD])
+ AC_SUBST([LTLIBTHREAD])
+ AC_SUBST([LIBMULTITHREAD])
+ AC_SUBST([LTLIBMULTITHREAD])
+])
+
+AC_DEFUN([gl_THREADLIB],
+[
+ AC_REQUIRE([gl_THREADLIB_EARLY])
+ AC_REQUIRE([gl_THREADLIB_BODY])
+])
+
+
+dnl gl_DISABLE_THREADS
+dnl ------------------
+dnl Sets the gl_THREADLIB default so that threads are not used by default.
+dnl The user can still override it at installation time, by using the
+dnl configure option '--enable-threads'.
+
+AC_DEFUN([gl_DISABLE_THREADS], [
+ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
+])
+
+
+dnl gl_AVOID_WINPTHREAD
+dnl -------------------
+dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the
+dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided.
+dnl The user can still override it at installation time, by using the
+dnl configure option '--enable-threads'.
+
+AC_DEFUN([gl_AVOID_WINPTHREAD], [
+ m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no])
+])
+
+
+dnl ============================================================================
+
+
+dnl Survey of platforms:
+dnl
+dnl Platform Available Compiler Supports test-lock
+dnl flavours option weak result
+dnl --------------- --------- --------- -------- ---------
+dnl Linux 2.4/glibc posix -lpthread Y OK
+dnl
+dnl Linux/glibc 2.34 posix Y OK
+dnl
+dnl GNU Hurd/glibc posix -lpthread Y OK
+dnl
+dnl Ubuntu 14.04 posix -pthread Y OK
+dnl
+dnl FreeBSD 5.3 posix -lc_r Y
+dnl posix -lkse ? Y
+dnl posix -lpthread ? Y
+dnl posix -lthr Y
+dnl
+dnl FreeBSD 5.2 posix -lc_r Y
+dnl posix -lkse Y
+dnl posix -lthr Y
+dnl
+dnl FreeBSD 4.0,4.10 posix -lc_r Y OK
+dnl
+dnl NetBSD 1.6 --
+dnl
+dnl OpenBSD 3.4 posix -lpthread Y OK
+dnl
+dnl Mac OS X 10.[123] posix -lpthread Y OK
+dnl
+dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11 posix -lpthread N (cc) OK
+dnl Y (gcc)
+dnl
+dnl IRIX 6.5 posix -lpthread Y 0.5
+dnl
+dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK
+dnl -lpthread (gcc) Y
+dnl
+dnl Cygwin posix -lpthread Y OK
+dnl
+dnl Mingw windows N OK
+dnl
+dnl BeOS 5 --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl OK if all three tests terminate OK,
+dnl 0.5 if the first test terminates OK but the second one loops endlessly,
+dnl 0.0 if the first test already loops endlessly.
diff --git a/m4/time.m4 b/m4/time.m4
new file mode 100644
index 0000000..4c4e411
--- /dev/null
+++ b/m4/time.m4
@@ -0,0 +1,48 @@
+# time.m4 serial 3
+dnl Copyright (C) 2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_FUNC_TIME],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ dnl glibc has the bug https://sourceware.org/bugzilla/show_bug.cgi?id=30200 .
+ AC_CACHE_CHECK([whether time() works],
+ [gl_cv_func_time_works],
+ [dnl Guess that it works except on
+ dnl - glibc >= 2.31 with Linux. And binaries produced on glibc < 2.31
+ dnl need to run fine on newer glibc versions as well; therefore ignore
+ dnl __GLIBC_MINOR__.
+ dnl - AIX,
+ dnl - native Windows.
+ case "$host_os" in
+ linux*-gnu*)
+ AC_EGREP_CPP([Unlucky], [
+ #include <features.h>
+ #ifdef __GNU_LIBRARY__
+ #if __GLIBC__ == 2
+ Unlucky GNU user
+ #endif
+ #endif
+ ],
+ [gl_cv_func_time_works="guessing no"],
+ [gl_cv_func_time_works="guessing yes"])
+ ;;
+ aix*) gl_cv_func_time_works="guessing no";;
+ mingw*) gl_cv_func_time_works="guessing no";;
+ *) gl_cv_func_time_works="guessing yes";;
+ esac
+ ])
+ case "$gl_cv_func_time_works" in
+ *no) REPLACE_TIME=1 ;;
+ esac
+])
+
+# Prerequisites of lib/time.c.
+AC_DEFUN([gl_PREREQ_TIME],
+[
+ :
+])
diff --git a/m4/time_h.m4 b/m4/time_h.m4
new file mode 100644
index 0000000..51d553a
--- /dev/null
+++ b/m4/time_h.m4
@@ -0,0 +1,186 @@
+# Configure a more-standard replacement for <time.h>.
+
+# Copyright (C) 2000-2001, 2003-2007, 2009-2023 Free Software Foundation, Inc.
+
+# serial 22
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert and Jim Meyering.
+
+AC_DEFUN_ONCE([gl_TIME_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
+
+ gl_NEXT_HEADERS([time.h])
+ AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+#include <time.h>
+ ]], [asctime_r ctime_r])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_CACHE_CHECK([for TIME_UTC in <time.h>],
+ [gl_cv_time_h_has_TIME_UTC],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <time.h>
+ ]],
+ [[static int x = TIME_UTC; x++;]])],
+ [gl_cv_time_h_has_TIME_UTC=yes],
+ [gl_cv_time_h_has_TIME_UTC=no])])
+ if test $gl_cv_time_h_has_TIME_UTC = yes; then
+ TIME_H_DEFINES_TIME_UTC=1
+ else
+ TIME_H_DEFINES_TIME_UTC=0
+ fi
+ AC_SUBST([TIME_H_DEFINES_TIME_UTC])
+])
+
+dnl Check whether 'struct timespec' is declared
+dnl in time.h, sys/time.h, pthread.h, or unistd.h.
+
+AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC],
+[
+ AC_CHECK_HEADERS_ONCE([sys/time.h])
+ AC_CACHE_CHECK([for struct timespec in <time.h>],
+ [gl_cv_sys_struct_timespec_in_time_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <time.h>
+ ]],
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+ [gl_cv_sys_struct_timespec_in_time_h=yes],
+ [gl_cv_sys_struct_timespec_in_time_h=no])])
+
+ TIME_H_DEFINES_STRUCT_TIMESPEC=0
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
+ UNISTD_H_DEFINES_STRUCT_TIMESPEC=0
+ if test $gl_cv_sys_struct_timespec_in_time_h = yes; then
+ TIME_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ AC_CACHE_CHECK([for struct timespec in <sys/time.h>],
+ [gl_cv_sys_struct_timespec_in_sys_time_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/time.h>
+ ]],
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+ [gl_cv_sys_struct_timespec_in_sys_time_h=yes],
+ [gl_cv_sys_struct_timespec_in_sys_time_h=no])])
+ if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then
+ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ AC_CACHE_CHECK([for struct timespec in <pthread.h>],
+ [gl_cv_sys_struct_timespec_in_pthread_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <pthread.h>
+ ]],
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+ [gl_cv_sys_struct_timespec_in_pthread_h=yes],
+ [gl_cv_sys_struct_timespec_in_pthread_h=no])])
+ if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then
+ PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
+ else
+ AC_CACHE_CHECK([for struct timespec in <unistd.h>],
+ [gl_cv_sys_struct_timespec_in_unistd_h],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <unistd.h>
+ ]],
+ [[static struct timespec x; x.tv_sec = x.tv_nsec;]])],
+ [gl_cv_sys_struct_timespec_in_unistd_h=yes],
+ [gl_cv_sys_struct_timespec_in_unistd_h=no])])
+ if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then
+ UNISTD_H_DEFINES_STRUCT_TIMESPEC=1
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
+ AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
+ AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+ AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC])
+])
+
+# gl_TIME_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_TIME_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_TIME_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_TIME_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_TIME_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R])
+ HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP])
+ HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME])
+ HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM])
+ HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET])
+ HAVE_TIMESPEC_GETRES=1; AC_SUBST([HAVE_TIMESPEC_GETRES])
+ dnl Even GNU libc does not have timezone_t yet.
+ HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T])
+ dnl If another module says to replace or to not replace, do that.
+ dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK;
+ dnl this lets maintainers check for portability.
+ REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME])
+ REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R])
+ REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME])
+ REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP])
+ REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME])
+ REPLACE_TIME=0; AC_SUBST([REPLACE_TIME])
+ REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM])
+ REPLACE_TIMESPEC_GET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMESPEC_GET])
+ REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET])
+
+ dnl Hack so that the time module doesn't depend on the sys_time module.
+ dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent.
+ : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY])
+ dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME
+ dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier
+ dnl is no longer a big deal.
+ REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME])
+ REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME])
+])
diff --git a/m4/unistd_h.m4 b/m4/unistd_h.m4
new file mode 100644
index 0000000..1c96158
--- /dev/null
+++ b/m4/unistd_h.m4
@@ -0,0 +1,275 @@
+# unistd_h.m4 serial 94
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Simon Josefsson, Bruno Haible.
+
+AC_DEFUN_ONCE([gl_UNISTD_H],
+[
+ dnl Ensure to expand the default settings once only, before all statements
+ dnl that occur in other macros.
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+
+ gl_CHECK_NEXT_HEADERS([unistd.h])
+ if test $ac_cv_header_unistd_h = yes; then
+ HAVE_UNISTD_H=1
+ else
+ HAVE_UNISTD_H=0
+ fi
+ AC_SUBST([HAVE_UNISTD_H])
+
+ dnl Ensure the type pid_t gets defined.
+ AC_REQUIRE([AC_TYPE_PID_T])
+
+ dnl Determine WINDOWS_64_BIT_OFF_T.
+ AC_REQUIRE([gl_TYPE_OFF_T])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+/* Some systems declare various items in the wrong headers. */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if defined _WIN32 && ! defined __CYGWIN__
+# include <io.h>
+# endif
+#endif
+ ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess
+ execl execle execlp execv execve execvp execvpe
+ faccessat fchdir
+ fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize
+ getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass
+ getusershell setusershell endusershell
+ group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite
+ readlink readlinkat rmdir sethostname sleep symlink symlinkat
+ truncate ttyname_r unlink unlinkat usleep])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_CHECK_DECLS_ONCE([execvpe])
+ if test $ac_cv_have_decl_execvpe = no; then
+ HAVE_DECL_EXECVPE=0
+ fi
+])
+
+# gl_UNISTD_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_UNISTD_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_UNISTD_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN])
+ HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE])
+ HAVE_DUP3=1; AC_SUBST([HAVE_DUP3])
+ HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS])
+ HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE])
+ HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT])
+ HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR])
+ HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT])
+ HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC])
+ HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC])
+ HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE])
+ HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE])
+ HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY])
+ HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS])
+ HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME])
+ HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN])
+ HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
+ HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS])
+ HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER])
+ HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN])
+ HAVE_LINK=1; AC_SUBST([HAVE_LINK])
+ HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT])
+ HAVE_PIPE=1; AC_SUBST([HAVE_PIPE])
+ HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2])
+ HAVE_PREAD=1; AC_SUBST([HAVE_PREAD])
+ HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE])
+ HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
+ HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT])
+ HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME])
+ HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
+ HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK])
+ HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT])
+ HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT])
+ HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP])
+ HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
+ HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE])
+ HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR])
+ HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC])
+ HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME])
+ HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN])
+ HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
+ HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
+ HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
+ HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME])
+ HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE])
+ HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R])
+ HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
+ HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
+ REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS])
+ REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN])
+ REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE])
+ REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE])
+ REPLACE_DUP=0; AC_SUBST([REPLACE_DUP])
+ REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2])
+ REPLACE_DUP3=0; AC_SUBST([REPLACE_DUP3])
+ REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL])
+ REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE])
+ REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP])
+ REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV])
+ REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE])
+ REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP])
+ REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE])
+ REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT])
+ REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT])
+ REPLACE_FDATASYNC=0; AC_SUBST([REPLACE_FDATASYNC])
+ REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE])
+ REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD])
+ REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME])
+ REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE])
+ REPLACE_GETENTROPY=0; AC_SUBST([REPLACE_GETENTROPY])
+ REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R])
+ REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS])
+ REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE])
+ REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS])
+ REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU])
+ REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY])
+ REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN])
+ REPLACE_LINK=0; AC_SUBST([REPLACE_LINK])
+ REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT])
+ REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK])
+ REPLACE_PIPE2=0; AC_SUBST([REPLACE_PIPE2])
+ REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD])
+ REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE])
+ REPLACE_READ=0; AC_SUBST([REPLACE_READ])
+ REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK])
+ REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT])
+ REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR])
+ REPLACE_SETHOSTNAME=0; AC_SUBST([REPLACE_SETHOSTNAME])
+ REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP])
+ REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK])
+ REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT])
+ REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE])
+ REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R])
+ REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK])
+ REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT])
+ REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP])
+ REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE])
+ UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H])
+ UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+ AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
+])
diff --git a/m4/unlink.m4 b/m4/unlink.m4
new file mode 100644
index 0000000..1fecaac
--- /dev/null
+++ b/m4/unlink.m4
@@ -0,0 +1,137 @@
+# unlink.m4 serial 16
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_UNLINK],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_HEADERS_ONCE([unistd.h])
+
+ dnl Detect FreeBSD 7.2, AIX 7.1, Solaris 9 bug.
+ AC_CACHE_CHECK([whether unlink honors trailing slashes],
+ [gl_cv_func_unlink_honors_slashes],
+ [touch conftest.file
+ # Assume that if we have lstat, we can also check symlinks.
+ if test $ac_cv_func_lstat = yes; then
+ ln -s conftest.file conftest.lnk
+ fi
+ AC_RUN_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <io.h>
+ #endif
+ #include <errno.h>
+ ]GL_MDA_DEFINES],
+ [[int result = 0;
+ if (!unlink ("conftest.file/"))
+ result |= 1;
+ else if (errno != ENOTDIR)
+ result |= 2;
+#if HAVE_LSTAT
+ if (!unlink ("conftest.lnk/"))
+ result |= 4;
+ else if (errno != ENOTDIR)
+ result |= 8;
+#endif
+ return result;
+ ]])],
+ [gl_cv_func_unlink_honors_slashes=yes],
+ [gl_cv_func_unlink_honors_slashes=no],
+ [case "$host_os" in
+ # Guess yes on Linux systems.
+ linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess yes on glibc systems.
+ *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;;
+ esac
+ ])
+ rm -f conftest.file conftest.lnk])
+ case "$gl_cv_func_unlink_honors_slashes" in
+ *no)
+ REPLACE_UNLINK=1
+ ;;
+ esac
+
+ dnl Detect Mac OS X 10.5.6 bug: On read-write HFS mounts, unlink("..") or
+ dnl unlink("../..") succeeds without doing anything.
+ AC_CACHE_CHECK([whether unlink of a parent directory fails as it should],
+ [gl_cv_func_unlink_parent_fails],
+ [case "$host_os" in
+ darwin*)
+ dnl Try to unlink a subdirectory of /tmp, because /tmp is usually on a
+ dnl HFS mount on Mac OS X. Use a subdirectory, owned by the current
+ dnl user, because otherwise unlink() may fail due to permissions
+ dnl reasons, and because when running as root we don't want to risk
+ dnl destroying the entire /tmp.
+ if {
+ # Use the mktemp program if available. If not available, hide the error
+ # message.
+ tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+ } ||
+ {
+ # Use a simple mkdir command. It is guaranteed to fail if the directory
+ # already exists. $RANDOM is bash specific and expands to empty in shells
+ # other than bash, ksh and zsh. Its use does not increase security;
+ # rather, it minimizes the probability of failure in a very cluttered /tmp
+ # directory.
+ tmp=/tmp/gt$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+ }; then
+ mkdir "$tmp/subdir"
+ GL_SUBDIR_FOR_UNLINK="$tmp/subdir"
+ export GL_SUBDIR_FOR_UNLINK
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <stdlib.h>
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #else /* on Windows with MSVC */
+ # include <direct.h>
+ # include <io.h>
+ #endif
+ ]GL_MDA_DEFINES[
+ int main ()
+ {
+ int result = 0;
+ if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0)
+ result |= 1;
+ else if (unlink ("..") == 0)
+ result |= 2;
+ return result;
+ }
+ ]])],
+ [gl_cv_func_unlink_parent_fails=yes],
+ [gl_cv_func_unlink_parent_fails=no],
+ [# If we don't know, obey --enable-cross-guesses.
+ gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal"
+ ])
+ unset GL_SUBDIR_FOR_UNLINK
+ rm -rf "$tmp"
+ else
+ gl_cv_func_unlink_parent_fails="guessing no"
+ fi
+ ;;
+ *)
+ gl_cv_func_unlink_parent_fails="guessing yes"
+ ;;
+ esac
+ ])
+ case "$gl_cv_func_unlink_parent_fails" in
+ *no)
+ REPLACE_UNLINK=1
+ AC_DEFINE([UNLINK_PARENT_BUG], [1],
+ [Define to 1 if unlink() on a parent directory may succeed])
+ ;;
+ esac
+])
diff --git a/m4/unlinkdir.m4 b/m4/unlinkdir.m4
new file mode 100644
index 0000000..c3a9cfd
--- /dev/null
+++ b/m4/unlinkdir.m4
@@ -0,0 +1,32 @@
+# serial 7
+
+# Copyright (C) 2005-2007, 2009-2023 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_UNLINKDIR],
+[
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_HEADERS_ONCE([priv.h])
+
+ # The Hurd, the Linux kernel, the FreeBSD kernel version 2.2 and later,
+ # Cygwin, and mingw never let anyone (even root) unlink directories.
+ # If anyone knows of another system for which unlink can never
+ # remove a directory, please report it to <bug-coreutils@gnu.org>.
+ # Unfortunately this is difficult to test for, since it requires root access
+ # and might create garbage in the file system,
+ # so the code below simply relies on the kernel name and version number.
+ case $host_os in
+ gnu[[0-9]]* | \
+ linux-* | linux | \
+ freebsd2.2* | freebsd[[3-9]]* | freebsd[[1-9]][[0-9]]* | \
+ cygwin | \
+ mingw*)
+ AC_DEFINE([UNLINK_CANNOT_UNLINK_DIR], [1],
+ [Define to 1 if unlink (dir) cannot possibly succeed.]);;
+ esac
+])
diff --git a/m4/usleep.m4 b/m4/usleep.m4
new file mode 100644
index 0000000..d904224
--- /dev/null
+++ b/m4/usleep.m4
@@ -0,0 +1,51 @@
+# usleep.m4 serial 8
+dnl Copyright (C) 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This macro intentionally does not check for select or nanosleep;
+dnl both of those modules can require external libraries.
+AC_DEFUN([gl_FUNC_USLEEP],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ dnl usleep was required in POSIX 2001, but dropped as obsolete in
+ dnl POSIX 2008; therefore, it is not always exposed in headers.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CHECK_FUNCS_ONCE([usleep])
+ AC_CHECK_TYPE([useconds_t], [],
+ [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit
+ type if <sys/types.h> lacks this type.])])
+ if test $ac_cv_func_usleep = no; then
+ HAVE_USLEEP=0
+ else
+ dnl POSIX allows implementations to reject arguments larger than
+ dnl 999999, but GNU guarantees it will work.
+ AC_CACHE_CHECK([whether usleep allows large arguments],
+ [gl_cv_func_usleep_works],
+ [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <unistd.h>
+]], [[return !!usleep (1000000);]])],
+ [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no],
+ [case "$host_os" in
+ # Guess yes on glibc systems.
+ *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess yes on musl systems.
+ *-musl*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess yes on systems that emulate the Linux system calls.
+ midipix*) gl_cv_func_usleep_works="guessing yes" ;;
+ # Guess no on native Windows.
+ mingw*) gl_cv_func_usleep_works="guessing no" ;;
+ # If we don't know, obey --enable-cross-guesses.
+ *) gl_cv_func_usleep_works="$gl_cross_guess_normal" ;;
+ esac
+ ])])
+ case "$gl_cv_func_usleep_works" in
+ *yes) ;;
+ *)
+ REPLACE_USLEEP=1
+ ;;
+ esac
+ fi
+])
diff --git a/m4/version-etc.m4 b/m4/version-etc.m4
new file mode 100644
index 0000000..76b5d3e
--- /dev/null
+++ b/m4/version-etc.m4
@@ -0,0 +1,33 @@
+# version-etc.m4 serial 1
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+dnl $1 - configure flag and define name
+dnl $2 - human readable description
+m4_define([gl_VERSION_ETC_FLAG],
+[dnl
+ AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])],
+ [dnl
+ case $withval in
+ yes|no) ;;
+ *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;;
+ esac
+ ])
+])
+
+AC_DEFUN([gl_VERSION_ETC],
+[dnl
+ gl_VERSION_ETC_FLAG([packager],
+ [String identifying the packager of this software])
+ gl_VERSION_ETC_FLAG([packager-version],
+ [Packager-specific version information])
+ gl_VERSION_ETC_FLAG([packager-bug-reports],
+ [Packager info for bug reports (URL/e-mail/...)])
+ if test "X$with_packager" = "X" && \
+ test "X$with_packager_version$with_packager_bug_reports" != "X"
+ then
+ AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager])
+ fi
+])
diff --git a/m4/visibility.m4 b/m4/visibility.m4
new file mode 100644
index 0000000..f0468e8
--- /dev/null
+++ b/m4/visibility.m4
@@ -0,0 +1,82 @@
+# visibility.m4 serial 8
+dnl Copyright (C) 2005, 2008, 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl Mac OS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+ AC_REQUIRE([AC_PROG_CC])
+ CFLAG_VISIBILITY=
+ HAVE_VISIBILITY=0
+ if test -n "$GCC"; then
+ dnl First, check whether -Werror can be added to the command line, or
+ dnl whether it leads to an error because of some other option that the
+ dnl user has put into $CC $CFLAGS $CPPFLAGS.
+ AC_CACHE_CHECK([whether the -Werror option is usable],
+ [gl_cv_cc_vis_werror],
+ [gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror"
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[]], [[]])],
+ [gl_cv_cc_vis_werror=yes],
+ [gl_cv_cc_vis_werror=no])
+ CFLAGS="$gl_save_CFLAGS"
+ ])
+ dnl Now check whether visibility declarations are supported.
+ AC_CACHE_CHECK([for simple visibility declarations],
+ [gl_cv_cc_visibility],
+ [gl_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fvisibility=hidden"
+ dnl We use the option -Werror and a function dummyfunc, because on some
+ dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
+ dnl "visibility attribute not supported in this configuration; ignored"
+ dnl at the first function definition in every compilation unit, and we
+ dnl don't want to use the option in this case.
+ if test $gl_cv_cc_vis_werror = yes; then
+ CFLAGS="$CFLAGS -Werror"
+ fi
+ AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+ extern __attribute__((__visibility__("default"))) int exportedvar;
+ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+ extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+ void dummyfunc (void);
+ int hiddenvar;
+ int exportedvar;
+ int hiddenfunc (void) { return 51; }
+ int exportedfunc (void) { return 1225736919; }
+ void dummyfunc (void) {}
+ ]],
+ [[]])],
+ [gl_cv_cc_visibility=yes],
+ [gl_cv_cc_visibility=no])
+ CFLAGS="$gl_save_CFLAGS"
+ ])
+ if test $gl_cv_cc_visibility = yes; then
+ CFLAG_VISIBILITY="-fvisibility=hidden"
+ HAVE_VISIBILITY=1
+ fi
+ fi
+ AC_SUBST([CFLAG_VISIBILITY])
+ AC_SUBST([HAVE_VISIBILITY])
+ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+ [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff --git a/m4/warn-on-use.m4 b/m4/warn-on-use.m4
new file mode 100644
index 0000000..10649c5
--- /dev/null
+++ b/m4/warn-on-use.m4
@@ -0,0 +1,62 @@
+# warn-on-use.m4 serial 10
+dnl Copyright (C) 2010-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# If the module 'posixcheck' is in use:
+#
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros. NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# It is generally safe to assume declarations for functions declared
+# in the intersection of C89 and C11 (such as printf) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+ m4_ifdef([gl_POSIXCHECK],
+ [m4_foreach_w([gl_decl], [$2],
+ [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+ [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+ undefining macros.])])dnl
+ for gl_func in m4_flatten([$2]); do
+ AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+ dnl As a workaround to implicit built-in function declarations in
+ dnl clang (e.g. strndup), reference ac_compile_for_check_decl instead
+ dnl of ac_compile. If, for whatever reason, the override of AC_PROG_CC
+ dnl in zzgnulib.m4 is inactive, use the original ac_compile.
+ ac_save_ac_compile="$ac_compile"
+ if test -n "$ac_compile_for_check_decl"; then
+ ac_compile="$ac_compile_for_check_decl"
+ fi
+ AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+ [gl_Symbol],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[[#undef $gl_func
+ (void) $gl_func;]])],
+ [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])])
+ ac_compile="$ac_save_ac_compile"
+ AS_VAR_IF([gl_Symbol], [yes],
+ [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+ dnl Shortcut for an AC_CHECK_DECL invocation that may come later:
+ dnl If the raw declaration exists with the given includes, then
+ dnl AC_CHECK_DECL with its many includes would see it as well.
+ dnl So, set a cache variable to allow skipping any later
+ dnl AC_CHECK_DECL invocation for $gl_func.
+ eval "ac_cv_have_decl_$gl_func=yes"
+ ])
+ AS_VAR_POPDEF([gl_Symbol])dnl
+ done
+ ])
+])
diff --git a/m4/warnings.m4 b/m4/warnings.m4
new file mode 100644
index 0000000..063bc5c
--- /dev/null
+++ b/m4/warnings.m4
@@ -0,0 +1,110 @@
+# warnings.m4 serial 16
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+
+# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED],
+# [PROGRAM = AC_LANG_PROGRAM()])
+# -----------------------------------------------------------------
+# Check if the compiler supports OPTION when compiling PROGRAM.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
+AC_DEFUN([gl_COMPILER_OPTION_IF],
+[
+AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl
+AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl
+AS_LITERAL_IF([$1],
+ [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))],
+ [gl_positive="$1"
+case $gl_positive in
+ -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;;
+esac
+m4_pushdef([gl_Positive], [$gl_positive])])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], [gl_Warn], [
+ gl_save_compiler_FLAGS="$gl_Flags"
+ gl_AS_VAR_APPEND(m4_defn([gl_Flags]),
+ [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["])
+ AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([[]])])],
+ [AS_VAR_SET([gl_Warn], [yes])],
+ [AS_VAR_SET([gl_Warn], [no])])
+ gl_Flags="$gl_save_compiler_FLAGS"
+])
+AS_VAR_IF(gl_Warn, [yes], [$2], [$3])
+m4_popdef([gl_Positive])dnl
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+])
+
+# gl_UNKNOWN_WARNINGS_ARE_ERRORS
+# ------------------------------
+# Clang doesn't complain about unknown warning options unless one also
+# specifies -Wunknown-warning-option -Werror. Detect this.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS],
+[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
+
+# Specialization for _AC_LANG = C. This macro can be AC_REQUIREd.
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)],
+[
+ AC_LANG_PUSH([C])
+ gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+ AC_LANG_POP([C])
+])
+
+# Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd.
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)],
+[
+ AC_LANG_PUSH([C++])
+ gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+ AC_LANG_POP([C++])
+])
+
+# Specialization for _AC_LANG = Objective C. This macro can be AC_REQUIREd.
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS(Objective C)],
+[
+ AC_LANG_PUSH([Objective C])
+ gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL
+ AC_LANG_POP([Objective C])
+])
+
+AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL],
+[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option],
+ [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'],
+ [gl_unknown_warnings_are_errors=])])
+
+# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS],
+# [PROGRAM = AC_LANG_PROGRAM()])
+# -----------------------------------------------------------
+# Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it
+# when compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]).
+#
+# If VARIABLE is a variable name, AC_SUBST it.
+#
+# The effects of this macro depend on the current language (_AC_LANG).
+AC_DEFUN([gl_WARN_ADD],
+[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)])
+gl_COMPILER_OPTION_IF([$1],
+ [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])],
+ [],
+ [$3])
+m4_ifval([$2],
+ [AS_LITERAL_IF([$2], [AC_SUBST([$2])])],
+ [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl
+])
+
+# Local Variables:
+# mode: autoconf
+# End:
diff --git a/m4/wchar_h.m4 b/m4/wchar_h.m4
new file mode 100644
index 0000000..ad3d4ec
--- /dev/null
+++ b/m4/wchar_h.m4
@@ -0,0 +1,258 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 56
+
+AC_DEFUN_ONCE([gl_WCHAR_H],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+ AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+ dnl Prepare for creating substitute <wchar.h>.
+ dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+ dnl character support).
+ dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+ gl_CHECK_NEXT_HEADERS([wchar.h])
+ if test $ac_cv_header_wchar_h = yes; then
+ HAVE_WCHAR_H=1
+ else
+ HAVE_WCHAR_H=0
+ fi
+ AC_SUBST([HAVE_WCHAR_H])
+
+ AC_REQUIRE([gl_FEATURES_H])
+
+ AC_REQUIRE([gt_TYPE_WINT_T])
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
+ AC_SUBST([HAVE_WINT_T])
+
+ AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+ #include <wchar.h>
+ ]],
+ [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+ wcsrtombs wcsnrtombs wcwidth
+ wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset
+ wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
+ wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
+ wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime
+ ])
+
+ AC_REQUIRE([AC_C_RESTRICT])
+
+ AC_CHECK_DECLS([wcsdup], [], [], [[
+ #include <wchar.h>
+ ]])
+ if test $ac_cv_have_decl_wcsdup = no; then
+ HAVE_DECL_WCSDUP=0
+ fi
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+ dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+ dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+ dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+ dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+ [gl_cv_header_wchar_h_correct_inline],
+ [gl_cv_header_wchar_h_correct_inline=yes
+ case "$host_os" in
+ *-gnu* | gnu*)
+ AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([[
+ #define wcstod renamed_wcstod
+ #include <wchar.h>
+ extern int zero (void);
+ int main () { return zero(); }
+ ]])])
+ dnl Do not rename the object file from conftest.$ac_objext to
+ dnl conftest1.$ac_objext, as this will cause the link to fail on
+ dnl z/OS when using the XPLINK object format (due to duplicate
+ dnl CSECT names). Instead, temporarily redefine $ac_compile so
+ dnl that the object file has the latter name from the start.
+ save_ac_compile="$ac_compile"
+ ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+ if echo '#include "conftest.c"' >conftest1.c \
+ && AC_TRY_EVAL([ac_compile]); then
+ AC_LANG_CONFTEST([
+ AC_LANG_SOURCE([[
+ #define wcstod renamed_wcstod
+ #include <wchar.h>
+ int zero (void) { return 0; }
+ ]])])
+ dnl See note above about renaming object files.
+ ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+ if echo '#include "conftest.c"' >conftest2.c \
+ && AC_TRY_EVAL([ac_compile]); then
+ if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+ :
+ else
+ gl_cv_header_wchar_h_correct_inline=no
+ fi
+ fi
+ fi
+ ac_compile="$save_ac_compile"
+ rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext
+ ;;
+ esac
+ ])
+ if test $gl_cv_header_wchar_h_correct_inline = no; then
+ AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+ - Add the flag -fgnu89-inline to CC and reconfigure, or
+ - Fix your include files, using parts of
+ <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+ - Use a gcc version older than 4.3, or
+ - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+ fi
+])
+
+# gl_WCHAR_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_WCHAR_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME])
+ dnl Support Microsoft deprecated alias function names by default.
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS])
+ dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized.
+ gl_STDLIB_H_REQUIRE_DEFAULTS
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC])
+ HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT])
+ HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC])
+ HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN])
+ HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS])
+ HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS])
+ HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB])
+ HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS])
+ HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS])
+ HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR])
+ HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP])
+ HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY])
+ HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE])
+ HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY])
+ HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET])
+ HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN])
+ HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN])
+ HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY])
+ HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY])
+ HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY])
+ HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY])
+ HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT])
+ HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT])
+ HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP])
+ HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP])
+ HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP])
+ HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP])
+ HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL])
+ HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM])
+ HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP])
+ HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR])
+ HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR])
+ HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN])
+ HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN])
+ HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK])
+ HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR])
+ HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK])
+ HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH])
+ HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME])
+ HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB])
+ HAVE_DECL_WCSDUP=1; AC_SUBST([HAVE_DECL_WCSDUP])
+ HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH])
+ REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T])
+ REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC])
+ REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB])
+ REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT])
+ REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC])
+ REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN])
+ REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS])
+ REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+ REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB])
+ REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS])
+ REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+ REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH])
+ REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH])
+ REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME])
+ REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK])
+ REPLACE_WMEMPCPY=0; AC_SUBST([REPLACE_WMEMPCPY])
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100644
index 0000000..50bde08
--- /dev/null
+++ b/m4/wchar_t.m4
@@ -0,0 +1,24 @@
+# wchar_t.m4 serial 4 (gettext-0.18.2)
+dnl Copyright (C) 2002-2003, 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <stddef.h>
+ wchar_t foo = (wchar_t)'\0';]],
+ [[]])],
+ [gt_cv_c_wchar_t=yes],
+ [gt_cv_c_wchar_t=no])])
+ if test $gt_cv_c_wchar_t = yes; then
+ AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+ fi
+])
diff --git a/m4/wcrtomb.m4 b/m4/wcrtomb.m4
new file mode 100644
index 0000000..d51b36e
--- /dev/null
+++ b/m4/wcrtomb.m4
@@ -0,0 +1,146 @@
+# wcrtomb.m4 serial 17
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WCRTOMB],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+ AC_REQUIRE([AC_TYPE_MBSTATE_T])
+ gl_MBSTATE_T_BROKEN
+
+ AC_CHECK_FUNCS_ONCE([wcrtomb])
+ if test $ac_cv_func_wcrtomb = no; then
+ HAVE_WCRTOMB=0
+ AC_CHECK_DECLS([wcrtomb],,, [[
+ #include <wchar.h>
+ ]])
+ if test $ac_cv_have_decl_wcrtomb = yes; then
+ dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although
+ dnl it does not have the function. Avoid a collision with gnulib's
+ dnl replacement.
+ REPLACE_WCRTOMB=1
+ fi
+ else
+ dnl We don't actually need to override wcrtomb when redefining the semantics
+ dnl of the mbstate_t type. Tested on 32-bit AIX.
+ dnl if test $REPLACE_MBSTATE_T = 1; then
+ dnl REPLACE_WCRTOMB=1
+ dnl fi
+ if test $REPLACE_WCRTOMB = 0; then
+ dnl On Android 4.3, wcrtomb produces wrong characters in the C locale.
+ dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL)
+ dnl sometimes returns 0 instead of 1.
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR])
+ AC_REQUIRE([gt_LOCALE_FR_UTF8])
+ AC_REQUIRE([gt_LOCALE_JA])
+ AC_REQUIRE([gt_LOCALE_ZH_CN])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether wcrtomb works in the C locale],
+ [gl_cv_func_wcrtomb_works],
+ [AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <string.h>
+#include <stdlib.h>
+#include <wchar.h>
+int main ()
+{
+ mbstate_t state;
+ char out[64];
+ int count;
+ memset (&state, 0, sizeof (state));
+ out[0] = 'x';
+ count = wcrtomb (out, L'a', &state);
+ return !(count == 1 && out[0] == 'a');
+}]])],
+ [gl_cv_func_wcrtomb_works=yes],
+ [gl_cv_func_wcrtomb_works=no],
+ [case "$host_os" in
+ # Guess no on Android.
+ linux*-android*) gl_cv_func_wcrtomb_works="guessing no";;
+ # Guess yes otherwise.
+ *) gl_cv_func_wcrtomb_works="guessing yes";;
+ esac
+ ])
+ ])
+ case "$gl_cv_func_wcrtomb_works" in
+ *yes) ;;
+ *) AC_DEFINE([WCRTOMB_C_LOCALE_BUG], [1],
+ [Define if the wcrtomb function does not work in the C locale.])
+ REPLACE_WCRTOMB=1 ;;
+ esac
+ fi
+ if test $REPLACE_WCRTOMB = 0; then
+ AC_CACHE_CHECK([whether wcrtomb return value is correct],
+ [gl_cv_func_wcrtomb_retval],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on AIX 4, OSF/1, Solaris, native Windows.
+ aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_wcrtomb_retval="guessing yes" ;;
+ esac
+changequote([,])dnl
+ if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <string.h>
+#include <wchar.h>
+#include <stdlib.h>
+int main ()
+{
+ int result = 0;
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 1;
+ }
+ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 2;
+ {
+ wchar_t wc = (wchar_t) 0xBADFACE;
+ if (mbtowc (&wc, "\303\274", 2) == 2)
+ if (wcrtomb (NULL, wc, NULL) != 1)
+ result |= 2;
+ }
+ }
+ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 4;
+ }
+ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL)
+ {
+ if (wcrtomb (NULL, 0, NULL) != 1)
+ result |= 8;
+ }
+ return result;
+}]])],
+ [gl_cv_func_wcrtomb_retval=yes],
+ [gl_cv_func_wcrtomb_retval=no],
+ [:])
+ fi
+ ])
+ case "$gl_cv_func_wcrtomb_retval" in
+ *yes) ;;
+ *) AC_DEFINE([WCRTOMB_RETVAL_BUG], [1],
+ [Define if the wcrtomb function has an incorrect return value.])
+ REPLACE_WCRTOMB=1 ;;
+ esac
+ fi
+ fi
+])
+
+# Prerequisites of lib/wcrtomb.c.
+AC_DEFUN([gl_PREREQ_WCRTOMB], [
+ :
+])
diff --git a/m4/wctob.m4 b/m4/wctob.m4
new file mode 100644
index 0000000..90042a5
--- /dev/null
+++ b/m4/wctob.m4
@@ -0,0 +1,109 @@
+# wctob.m4 serial 13
+dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WCTOB],
+[
+ AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+
+ AC_CHECK_FUNCS_ONCE([wctob])
+ if test $ac_cv_func_wctob = no; then
+ HAVE_WCTOB=0
+ HAVE_DECL_WCTOB=0
+ else
+ HAVE_WCTOB=1
+
+ dnl Solaris 9 has the wctob() function but it does not work.
+ dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned
+ dnl registers, see <https://cygwin.com/ml/cygwin/2010-05/msg00015.html>.
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([gt_LOCALE_FR])
+ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_CACHE_CHECK([whether wctob works],
+ [gl_cv_func_wctob_works],
+ [
+ dnl Initial guess, used when cross-compiling or when no suitable locale
+ dnl is present.
+changequote(,)dnl
+ case "$host_os" in
+ # Guess no on Solaris <= 9 and Cygwin.
+ solaris2.[1-9] | solaris2.[1-9].* | cygwin*)
+ gl_cv_func_wctob_works="guessing no" ;;
+ # Guess no on native Windows.
+ mingw*)
+ gl_cv_func_wctob_works="guessing no" ;;
+ # Guess yes otherwise.
+ *) gl_cv_func_wctob_works="guessing yes" ;;
+ esac
+changequote([,])dnl
+ case "$host_os" in
+ cygwin*)
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <wchar.h>
+
+register long global __asm__ ("%ebx");
+
+int main ()
+{
+ setlocale (LC_ALL, "en_US.UTF-8");
+
+ global = 0x12345678;
+ if (wctob (0x00FC) != -1)
+ return 1;
+ if (global != 0x12345678)
+ return 2;
+ return 0;
+}]])],
+ [:],
+ [gl_cv_func_wctob_works=no],
+ [:])
+ ;;
+ esac
+ if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+#include <locale.h>
+#include <stdlib.h>
+#include <wchar.h>
+int main ()
+{
+ if (setlocale (LC_ALL, "$LOCALE_FR") != NULL)
+ {
+ wchar_t wc;
+
+ if (mbtowc (&wc, "\374", 1) == 1)
+ if (wctob (wc) != (unsigned char) '\374')
+ return 1;
+ }
+ return 0;
+}]])],
+ [gl_cv_func_wctob_works=yes],
+ [gl_cv_func_wctob_works=no],
+ [:])
+ fi
+ ])
+ case "$gl_cv_func_wctob_works" in
+ *yes) ;;
+ *) REPLACE_WCTOB=1 ;;
+ esac
+ if test $REPLACE_WCTOB = 0; then
+
+ dnl IRIX 6.5 has the wctob() function but does not declare it.
+ AC_CHECK_DECLS([wctob], [], [], [[
+ #include <wchar.h>
+ ]])
+ if test $ac_cv_have_decl_wctob != yes; then
+ HAVE_DECL_WCTOB=0
+ fi
+ fi
+ fi
+])
+
+# Prerequisites of lib/wctob.c.
+AC_DEFUN([gl_PREREQ_WCTOB], [
+ :
+])
diff --git a/m4/wctomb.m4 b/m4/wctomb.m4
new file mode 100644
index 0000000..2e22310
--- /dev/null
+++ b/m4/wctomb.m4
@@ -0,0 +1,19 @@
+# wctomb.m4 serial 2
+dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WCTOMB],
+[
+ AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+
+ if false; then
+ REPLACE_WCTOMB=1
+ fi
+])
+
+# Prerequisites of lib/wctomb.c.
+AC_DEFUN([gl_PREREQ_WCTOMB], [
+ :
+])
diff --git a/m4/wctype_h.m4 b/m4/wctype_h.m4
new file mode 100644
index 0000000..6856a73
--- /dev/null
+++ b/m4/wctype_h.m4
@@ -0,0 +1,200 @@
+# wctype_h.m4 serial 30
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN_ONCE([gl_WCTYPE_H],
+[
+ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_HOST])
+ AC_CHECK_FUNCS_ONCE([iswcntrl])
+ if test $ac_cv_func_iswcntrl = yes; then
+ HAVE_ISWCNTRL=1
+ else
+ HAVE_ISWCNTRL=0
+ fi
+ AC_SUBST([HAVE_ISWCNTRL])
+
+ AC_REQUIRE([gt_TYPE_WINT_T])
+ if test $gt_cv_c_wint_t = yes; then
+ HAVE_WINT_T=1
+ else
+ HAVE_WINT_T=0
+ fi
+ AC_SUBST([HAVE_WINT_T])
+
+ AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
+ gl_CHECK_NEXT_HEADERS([wctype.h])
+ if test $ac_cv_header_wctype_h = yes; then
+ if test $ac_cv_func_iswcntrl = yes; then
+ dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
+ dnl The other functions are likely broken in the same way.
+ AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
+ [
+ AC_RUN_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <wchar.h>
+ #include <wctype.h>
+ int main () { return iswprint ('x') == 0; }
+ ]])],
+ [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
+ [dnl Guess no on Linux libc5, yes otherwise.
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+ #if __GNU_LIBRARY__ == 1
+ Linux libc5 i18n is broken.
+ #endif]], [[]])],
+ [gl_cv_func_iswcntrl_works="guessing yes"],
+ [gl_cv_func_iswcntrl_works="guessing no"])
+ ])
+ ])
+ fi
+ HAVE_WCTYPE_H=1
+ else
+ HAVE_WCTYPE_H=0
+ fi
+ AC_SUBST([HAVE_WCTYPE_H])
+
+ if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then
+ REPLACE_ISWCNTRL=1
+ else
+ case "$gl_cv_func_iswcntrl_works" in
+ *yes) REPLACE_ISWCNTRL=0 ;;
+ *) REPLACE_ISWCNTRL=1 ;;
+ esac
+ fi
+ AC_SUBST([REPLACE_ISWCNTRL])
+
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+ dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
+ :
+ fi
+
+ if test $REPLACE_ISWCNTRL = 1; then
+ REPLACE_TOWLOWER=1
+ else
+ AC_CHECK_FUNCS([towlower])
+ if test $ac_cv_func_towlower = yes; then
+ REPLACE_TOWLOWER=0
+ else
+ AC_CHECK_DECLS([towlower],,,
+ [[#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+ ]])
+ if test $ac_cv_have_decl_towlower = yes; then
+ dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
+ dnl towupper() although it does not have the functions. Avoid a
+ dnl collision with gnulib's replacement.
+ REPLACE_TOWLOWER=1
+ else
+ REPLACE_TOWLOWER=0
+ fi
+ fi
+ fi
+ AC_SUBST([REPLACE_TOWLOWER])
+
+ if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+ dnl Redefine towlower, towupper in <wctype.h>.
+ :
+ fi
+
+ dnl We assume that the wctype() and iswctype() functions exist if and only
+ dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
+ dnl exists.
+ dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
+ AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>
+ #if HAVE_WCTYPE_H
+ # include <wctype.h>
+ #endif
+ wctype_t a;
+ ]],
+ [[]])],
+ [gl_cv_type_wctype_t=yes],
+ [gl_cv_type_wctype_t=no])
+ ])
+ if test $gl_cv_type_wctype_t = no; then
+ HAVE_WCTYPE_T=0
+ fi
+
+ dnl We assume that the wctrans() and towctrans() functions exist if and only
+ dnl if the type wctrans_t is defined in <wctype.h>.
+ AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>
+ #include <wctype.h>
+ wctrans_t a;
+ ]],
+ [[]])],
+ [gl_cv_type_wctrans_t=yes],
+ [gl_cv_type_wctrans_t=no])
+ ])
+ if test $gl_cv_type_wctrans_t = no; then
+ HAVE_WCTRANS_T=0
+ fi
+
+ dnl Check for declarations of anything we want to poison if the
+ dnl corresponding gnulib module is not in use.
+ gl_WARN_ON_USE_PREPARE([[
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <wchar.h>
+#endif
+#include <wctype.h>
+ ]],
+ [wctype iswctype wctrans towctrans
+ ])
+])
+
+# gl_WCTYPE_MODULE_INDICATOR([modulename])
+# sets the shell variable that indicates the presence of the given module
+# to a C preprocessor expression that will evaluate to 1.
+# This macro invocation must not occur in macros that are AC_REQUIREd.
+AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
+[
+ dnl Ensure to expand the default settings once only.
+ gl_WCTYPE_H_REQUIRE_DEFAULTS
+ gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+ dnl Define it also as a C macro, for the benefit of the unit tests.
+ gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+# Initializes the default values for AC_SUBSTed shell variables.
+# This macro must not be AC_REQUIREd. It must only be invoked, and only
+# outside of macros or in macros that are not AC_REQUIREd.
+AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS],
+[
+ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS])
+ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS])
+ ])
+ m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS])
+ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+])
+
+AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
+[
+ dnl Assume proper GNU behavior unless another module says otherwise.
+ HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK])
+ HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T])
+ HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T])
+ REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK])
+ REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT])
+ REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT])
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100644
index 0000000..dfd743b
--- /dev/null
+++ b/m4/wint_t.m4
@@ -0,0 +1,57 @@
+# wint_t.m4 serial 11
+dnl Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's
+dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>
+ wint_t foo = (wchar_t)'\0';]],
+ [[]])],
+ [gt_cv_c_wint_t=yes],
+ [gt_cv_c_wint_t=no])])
+ if test $gt_cv_c_wint_t = yes; then
+ AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+
+ dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present,
+ dnl override 'wint_t'.
+ AC_CACHE_CHECK([whether wint_t is large enough],
+ [gl_cv_type_wint_t_large_enough],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <wchar.h>
+ int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+ ]])],
+ [gl_cv_type_wint_t_large_enough=yes],
+ [gl_cv_type_wint_t_large_enough=no])])
+ if test $gl_cv_type_wint_t_large_enough = no; then
+ GNULIBHEADERS_OVERRIDE_WINT_T=1
+ else
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
+ fi
+ else
+ GNULIBHEADERS_OVERRIDE_WINT_T=0
+ fi
+ AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T])
+])
+
+dnl Prerequisites of the 'wint_t' override.
+AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
+[
+ AC_CHECK_HEADERS_ONCE([crtdefs.h])
+ if test $ac_cv_header_crtdefs_h = yes; then
+ HAVE_CRTDEFS_H=1
+ else
+ HAVE_CRTDEFS_H=0
+ fi
+ AC_SUBST([HAVE_CRTDEFS_H])
+])
diff --git a/m4/xalloc.m4 b/m4/xalloc.m4
new file mode 100644
index 0000000..fc56f59
--- /dev/null
+++ b/m4/xalloc.m4
@@ -0,0 +1,7 @@
+# xalloc.m4 serial 18
+dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XALLOC], [:])
diff --git a/m4/xstrtol.m4 b/m4/xstrtol.m4
new file mode 100644
index 0000000..dc41261
--- /dev/null
+++ b/m4/xstrtol.m4
@@ -0,0 +1,10 @@
+#serial 11
+dnl Copyright (C) 2002-2007, 2009-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSTRTOL],
+[
+ :
+])
diff --git a/m4/yield.m4 b/m4/yield.m4
new file mode 100644
index 0000000..4eb6bd9
--- /dev/null
+++ b/m4/yield.m4
@@ -0,0 +1,18 @@
+# yield.m4 serial 5
+dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_YIELD],
+[
+ AC_REQUIRE([gl_PTHREADLIB])
+ AC_REQUIRE([gl_THREADLIB])
+
+ if test $gl_threads_api = posix; then
+ YIELD_LIB="$SCHED_YIELD_LIB"
+ else
+ YIELD_LIB=
+ fi
+ AC_SUBST([YIELD_LIB])
+])
diff --git a/m4/zzgnulib.m4 b/m4/zzgnulib.m4
new file mode 100644
index 0000000..362102b
--- /dev/null
+++ b/m4/zzgnulib.m4
@@ -0,0 +1,23 @@
+# zzgnulib.m4 serial 1
+dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts after all other
+dnl package- or gnulib-provided .m4 files - at least for those packages
+dnl that redefine AC_PROG_CC.
+
+dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG
+dnl and gl_COMPILER_PREPARE_CHECK_DECL.
+m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[
+gl_COMPILER_CLANG
+gl_COMPILER_PREPARE_CHECK_DECL
+])
+
+# gl_ZZGNULIB
+# -----------
+# Witness macro that this file has been included. Needed to force
+# Automake to include this file after all other gnulib .m4 files.
+AC_DEFUN([gl_ZZGNULIB])
diff --git a/maint.mk b/maint.mk
new file mode 100644
index 0000000..44f3db9
--- /dev/null
+++ b/maint.mk
@@ -0,0 +1,1797 @@
+# -*-Makefile-*-
+# This Makefile fragment tries to be general-purpose enough to be
+# used by many projects via the gnulib maintainer-makefile module.
+
+## Copyright (C) 2001-2023 Free Software Foundation, Inc.
+##
+## This program is free software: you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+# This is reported not to work with make-3.79.1
+# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+ME := maint.mk
+
+# These variables ought to be defined through the configure.ac section
+# of the module description. But some packages import this file directly,
+# ignoring the module description.
+AWK ?= awk
+GREP ?= grep
+SED ?= sed
+
+# Helper variables.
+_empty =
+_sp = $(_empty) $(_empty)
+
+# _equal,S1,S2
+# ------------
+# If S1 == S2, return S1, otherwise the empty string.
+_equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
+
+# member-check,VARIABLE,VALID-VALUES
+# ----------------------------------
+# Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and
+# return it. Die otherwise.
+member-check = \
+ $(strip \
+ $(if $($(1)), \
+ $(if $(findstring $(_sp),$($(1))), \
+ $(error invalid $(1): '$($(1))', expected $(2)), \
+ $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \
+ $(error invalid $(1): '$($(1))', expected $(2)))), \
+ $(error $(1) undefined)))
+
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+ $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \
+ && printf %s --rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+GIT = git
+VC = $(GIT)
+
+VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir)
+
+# You can override this variable in cfg.mk if your gnulib submodule lives
+# in a different location.
+gnulib_dir ?= $(shell if test -n "$(GNULIB_SRCDIR)" && test -f "$(GNULIB_SRCDIR)/gnulib-tool"; then \
+ echo "$(GNULIB_SRCDIR)"; \
+ else \
+ echo $(srcdir)/gnulib; \
+ fi)
+
+# You can override this variable in cfg.mk to set your own regexp
+# matching files to ignore.
+VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$
+
+# This is to preprocess robustly the output of $(VC_LIST), so that even
+# when $(srcdir) is a pathological name like "....", the leading sed command
+# removes only the intended prefix.
+_dot_escaped_srcdir = $(subst .,\.,$(srcdir))
+
+# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only
+# when $(srcdir) is not ".".
+ifeq ($(srcdir),.)
+ _prepend_srcdir_prefix =
+else
+ _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|'
+endif
+
+# In order to be able to consistently filter "."-relative names,
+# (i.e., with no $(srcdir) prefix), this definition is careful to
+# remove any $(srcdir) prefix, and to restore what it removes.
+_sc_excl = \
+ $(or $(exclude_file_name_regexp--$@),^$$)
+VC_LIST_EXCEPT = \
+ $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \
+ | if test -f $(srcdir)/.x-$@; then $(GREP) -vEf $(srcdir)/.x-$@; \
+ else $(GREP) -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \
+ | $(GREP) -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \
+ $(_prepend_srcdir_prefix)
+
+ifeq ($(origin prev_version_file), undefined)
+ prev_version_file = $(srcdir)/.prev-version
+endif
+
+PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null)
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION))
+
+ifeq ($(VC),$(GIT))
+ this-vc-tag = v$(VERSION)
+ this-vc-tag-regexp = v$(VERSION_REGEXP)
+else
+ tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+ tag-this-version = $(subst .,_,$(VERSION))
+ this-vc-tag = $(tag-package)-$(tag-this-version)
+ this-vc-tag-regexp = $(this-vc-tag)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Old releases are stored here.
+release_archive_dir ?= ../release
+
+# If RELEASE_TYPE is undefined, but RELEASE is, use its second word.
+# But overwrite VERSION.
+ifdef RELEASE
+ VERSION := $(word 1, $(RELEASE))
+ RELEASE_TYPE ?= $(word 2, $(RELEASE))
+endif
+
+# Validate and return $(RELEASE_TYPE), or die.
+RELEASE_TYPES = alpha beta stable
+release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES))
+
+# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right.
+# Use alpha.gnu.org for alpha and beta releases.
+# Use ftp.gnu.org for stable releases.
+gnu_ftp_host-alpha = alpha.gnu.org
+gnu_ftp_host-beta = alpha.gnu.org
+gnu_ftp_host-stable = ftp.gnu.org
+gnu_rel_host ?= $(gnu_ftp_host-$(release-type))
+
+url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \
+ https://ftpmirror.gnu.org/$(PACKAGE), \
+ https://$(gnu_rel_host)/gnu/$(PACKAGE))
+
+# Override this in cfg.mk if you are using a different format in your
+# NEWS file.
+today = $(shell date +%Y-%m-%d)
+
+# Select which lines of NEWS are searched for $(news-check-regexp).
+# This is a sed line number spec. The default says that we search
+# lines 1..10 of NEWS for $(news-check-regexp).
+# If you want to search only line 3 or only lines 20-22, use "3" or "20,22".
+news-check-lines-spec ?= 1,10
+news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)'
+
+# Prevent programs like 'sort' from considering distinct strings to be equal.
+# Doing it here saves us from having to set LC_ALL elsewhere in this file.
+export LC_ALL = C
+
+## --------------- ##
+## Sanity checks. ##
+## --------------- ##
+
+ifneq ($(_gl-Makefile),)
+_cfg_mk := $(wildcard $(srcdir)/cfg.mk)
+
+# Collect the names of rules starting with 'sc_'.
+syntax-check-rules := $(sort $(shell env LC_ALL=C $(SED) -n \
+ 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk)))
+.PHONY: $(syntax-check-rules)
+
+ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0)
+ local-checks-available += $(syntax-check-rules)
+else
+ local-checks-available += no-vc-detected
+no-vc-detected:
+ @echo "No version control files detected; skipping syntax check"
+endif
+.PHONY: $(local-checks-available)
+
+# Arrange to print the name of each syntax-checking rule just before running it.
+$(syntax-check-rules): %: %.m
+sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules))
+.PHONY: $(sc_m_rules_)
+$(sc_m_rules_):
+ @echo $(patsubst sc_%.m, %, $@)
+ @date +%s.%N > .sc-start-$(basename $@)
+
+# Compute and print the elapsed time for each syntax-check rule.
+sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules))
+.PHONY: $(sc_z_rules_)
+$(sc_z_rules_): %.z: %
+ @end=$$(date +%s.%N); \
+ start=$$(cat .sc-start-$*); \
+ rm -f .sc-start-$*; \
+ $(AWK) -v s=$$start -v e=$$end \
+ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
+
+# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
+# that computes and prints elapsed time.
+local-check := \
+ $(patsubst sc_%, sc_%.z, \
+ $(filter-out $(local-checks-to-skip), $(local-checks-available)))
+
+syntax-check: $(local-check)
+endif
+
+# _sc_search_regexp
+#
+# This macro searches for a given construct in the selected files and
+# then takes some action.
+#
+# Parameters (shell variables):
+#
+# prohibit | require
+#
+# Regular expression (ERE) denoting either a forbidden construct
+# or a required construct. Those arguments are exclusive.
+#
+# exclude
+#
+# Regular expression (ERE) denoting lines to ignore that matched
+# a prohibit construct. For example, this can be used to exclude
+# comments that mention why the nearby code uses an alternative
+# construct instead of the simpler prohibited construct.
+#
+# in_vc_files | in_files
+#
+# grep-E-style regexp selecting the files to check. For in_vc_files,
+# the regexp is used to select matching files from the list of all
+# version-controlled files; for in_files, it's from the names printed
+# by "find $(srcdir)". When neither is specified, use all files that
+# are under version control.
+#
+# containing | non_containing
+#
+# Select the files (non) containing strings matching this regexp.
+# If both arguments are specified then CONTAINING takes
+# precedence.
+#
+# with_grep_options
+#
+# Extra options for grep.
+#
+# ignore_case
+#
+# Ignore case.
+#
+# halt
+#
+# Message to display before to halting execution.
+#
+# Finally, you may exempt files based on an ERE matching file names.
+# For example, to exempt from the sc_space_tab check all files with the
+# .diff suffix, set this Make variable:
+#
+# exclude_file_name_regexp--sc_space_tab = \.diff$
+#
+# Note that while this functionality is mostly inherited via VC_LIST_EXCEPT,
+# when filtering by name via in_files, we explicitly filter out matching
+# names here as well.
+
+# Initialize each, so that envvar settings cannot interfere.
+export require =
+export prohibit =
+export exclude =
+export in_vc_files =
+export in_files =
+export containing =
+export non_containing =
+export halt =
+export with_grep_options =
+
+# By default, _sc_search_regexp does not ignore case.
+export ignore_case =
+_ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :)
+
+define _sc_say_and_exit
+ dummy=; : so we do not need a semicolon before each use; \
+ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; };
+endef
+
+define _sc_search_regexp
+ dummy=; : so we do not need a semicolon before each use; \
+ \
+ : Check arguments; \
+ test -n "$$prohibit" && test -n "$$require" \
+ && { msg='Cannot specify both prohibit and require' \
+ $(_sc_say_and_exit) } || :; \
+ test -z "$$prohibit" && test -z "$$require" \
+ && { msg='Should specify either prohibit or require' \
+ $(_sc_say_and_exit) } || :; \
+ test -z "$$prohibit" && test -n "$$exclude" \
+ && { msg='Use of exclude requires a prohibit pattern' \
+ $(_sc_say_and_exit) } || :; \
+ test -n "$$in_vc_files" && test -n "$$in_files" \
+ && { msg='Cannot specify both in_vc_files and in_files' \
+ $(_sc_say_and_exit) } || :; \
+ test "x$$halt" != x \
+ || { msg='halt not defined' $(_sc_say_and_exit) }; \
+ \
+ : Filter by file name; \
+ if test -n "$$in_files"; then \
+ files=$$(find $(srcdir) | $(GREP) -E "$$in_files" \
+ | $(GREP) -Ev '$(_sc_excl)'); \
+ else \
+ files=$$($(VC_LIST_EXCEPT)); \
+ if test -n "$$in_vc_files"; then \
+ files=$$(echo "$$files" | $(GREP) -E "$$in_vc_files"); \
+ fi; \
+ fi; \
+ \
+ : Filter by content; \
+ test -n "$$files" \
+ && test -n "$$containing" \
+ && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); } \
+ || :; \
+ test -n "$$files" \
+ && test -n "$$non_containing" \
+ && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \
+ || :; \
+ \
+ : Check for the construct; \
+ if test -n "$$files"; then \
+ if test -n "$$prohibit"; then \
+ echo "$$files" \
+ | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE \
+ "$$prohibit" /dev/null \
+ | $(GREP) -vE "$${exclude:-^$$}" \
+ && { msg="$$halt" $(_sc_say_and_exit) } \
+ || :; \
+ else \
+ echo "$$files" \
+ | xargs \
+ $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \
+ | $(GREP) . \
+ && { msg="$$halt" $(_sc_say_and_exit) } \
+ || :; \
+ fi \
+ else :; \
+ fi || :;
+endef
+
+sc_avoid_if_before_free:
+ @$(VC_LIST_EXCEPT) \
+ | $(GREP) -v useless-if-before-free \
+ | xargs \
+ $(srcdir)/$(_build-aux)/useless-if-before-free \
+ $(useless_free_options) \
+ && { printf '$(ME): found useless "if"' \
+ ' before "free" above\n' 1>&2; \
+ exit 1; } \
+ || :
+
+sc_cast_of_argument_to_free:
+ @prohibit='\<free *\( *\(' halt="don't cast free argument" \
+ $(_sc_search_regexp)
+
+sc_cast_of_x_alloc_return_value:
+ @prohibit='\*\) *x(m|c|re)alloc\>' \
+ halt="don't cast x*alloc return value" \
+ $(_sc_search_regexp)
+
+sc_cast_of_alloca_return_value:
+ @prohibit='\*\) *alloca\>' \
+ halt="don't cast alloca return value" \
+ $(_sc_search_regexp)
+
+sc_space_tab:
+ @prohibit='[ ] ' \
+ halt='found SPACE-TAB sequence; remove the SPACE' \
+ $(_sc_search_regexp)
+
+# Don't use *scanf or the old ato* functions in "real" code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+ @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\(' \
+ halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \
+ $(_sc_search_regexp)
+
+# Use STREQ rather than comparing strcmp == 0, or != 0.
+sp_ = strcmp *\(.+\)
+sc_prohibit_strcmp:
+ @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \
+ exclude='# *define STRN?EQ\(' \
+ halt='replace strcmp calls above with STREQ/STRNEQ' \
+ $(_sc_search_regexp)
+
+# Really. You don't want to use this function.
+# It may fail to NUL-terminate the destination,
+# and always NUL-pads out to the specified length.
+sc_prohibit_strncpy:
+ @prohibit='\<strncpy *\(' \
+ halt='do not use strncpy, period' \
+ $(_sc_search_regexp)
+
+# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
+# Convert all uses automatically, via these two commands:
+# git grep -l '\<exit *(1)' \
+# | grep -vEf .x-sc_prohibit_magic_number_exit \
+# | xargs --no-run-if-empty \
+# perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/'
+# git grep -l '\<exit *(0)' \
+# | grep -vEf .x-sc_prohibit_magic_number_exit \
+# | xargs --no-run-if-empty \
+# perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/'
+sc_prohibit_magic_number_exit:
+ @prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]' \
+ exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \
+ halt='use EXIT_* values rather than magic number' \
+ $(_sc_search_regexp)
+
+# Check that we don't use $< in non-implicit Makefile rules.
+#
+# To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would
+# miss the Makefiles that are not under VC control (e.g., symlinks
+# installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems
+# too delicate.
+#
+# Use GNU Make's --print-data-base to normalize the rules into some
+# easy to parse format: they are separated by two \n. Look for the
+# "section" about non-pattern rules (marked with "# Files") inside
+# which there are still the POSIX Make like implicit rules (".c.o").
+sc_prohibit_gnu_make_extensions_awk_ = \
+ BEGIN { \
+ RS = "\n\n"; \
+ in_rules = 0; \
+ } \
+ /^\# Files/ { \
+ in_rules = 1; \
+ } \
+ /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \
+ print "Error: " file ": $$< in a non implicit rule\n" $$0; \
+ status = 1; \
+ } \
+ END { \
+ exit status; \
+ }
+sc_prohibit_gnu_make_extensions:
+ @if $(AWK) --version | grep GNU >/dev/null 2>&1; then \
+ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \
+ tr ' ' '\n' | \
+ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \
+ while read m; do \
+ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \
+ $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \
+ done; \
+ fi
+
+# Using EXIT_SUCCESS as the first argument to error is misleading,
+# since when that parameter is 0, error does not exit. Use '0' instead.
+sc_error_exit_success:
+ @prohibit='error *\(EXIT_SUCCESS,' \
+ in_vc_files='\.[chly]$$' \
+ halt='found error (EXIT_SUCCESS' \
+ $(_sc_search_regexp)
+
+# "FATAL:" should be fully upper-cased in error messages
+# "WARNING:" should be fully upper-cased, or fully lower-cased
+sc_error_message_warn_fatal:
+ @$(VC_LIST_EXCEPT) \
+ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \
+ | $(GREP) -E '"Warning|"Fatal|"fatal' \
+ && { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \
+ exit 1; } \
+ || :
+
+# Error messages should not start with a capital letter
+sc_error_message_uppercase:
+ @$(VC_LIST_EXCEPT) \
+ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \
+ | $(GREP) -E '"[A-Z]' \
+ | $(GREP) -vE '"FATAL|"WARNING|"Java|"C#|"PRI' \
+ && { echo '$(ME): found capitalized error message' 1>&2; \
+ exit 1; } \
+ || :
+
+# Error messages should not end with a period
+sc_error_message_period:
+ @$(VC_LIST_EXCEPT) \
+ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \
+ | $(GREP) -E '[^."]\."' \
+ && { echo '$(ME): found error message ending in period' 1>&2; \
+ exit 1; } \
+ || :
+
+sc_file_system:
+ @prohibit=file''system \
+ exclude='/proc/filesystems' \
+ ignore_case=1 \
+ halt='found use of "file''system"; spell it "file system"' \
+ $(_sc_search_regexp)
+
+# Don't use cpp tests of this symbol. All code assumes config.h is included.
+sc_prohibit_have_config_h:
+ @prohibit='^# *if.*HAVE''_CONFIG_H' \
+ halt='found use of HAVE''_CONFIG_H; remove' \
+ $(_sc_search_regexp)
+
+# Nearly all .c files must include <config.h>. However, we also permit this
+# via inclusion of a package-specific header, if cfg.mk specified one.
+# config_h_header must be suitable for grep -E.
+config_h_header ?= <config\.h>
+sc_require_config_h:
+ @require='^# *include $(config_h_header)' \
+ in_vc_files='\.c$$' \
+ halt='the above files do not include <config.h>' \
+ $(_sc_search_regexp)
+
+# Print each file name for which the first #include does not match
+# $(config_h_header). Like grep -m 1, this only looks at the first match.
+perl_config_h_first_ = \
+ -e 'BEGIN {$$ret = 0}' \
+ -e 'if (/^\# *include\b/) {' \
+ -e ' if (not m{^\# *include $(config_h_header)}) {' \
+ -e ' print "$$ARGV\n";' \
+ -e ' $$ret = 1;' \
+ -e ' }' \
+ -e ' \# Move on to next file after first include' \
+ -e ' close ARGV;' \
+ -e '}' \
+ -e 'END {exit $$ret}'
+
+# You must include <config.h> before including any other header file.
+# This can possibly be via a package-specific header, if given by cfg.mk.
+sc_require_config_h_first:
+ @if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \
+ files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') && \
+ perl -n $(perl_config_h_first_) $$files || \
+ { echo '$(ME): the above files include some other header' \
+ 'before <config.h>' 1>&2; exit 1; } || :; \
+ else :; \
+ fi
+
+sc_prohibit_HAVE_MBRTOWC:
+ @prohibit='\bHAVE_MBRTOWC\b' \
+ halt="do not use $$prohibit; it is always defined" \
+ $(_sc_search_regexp)
+
+# To use this "command" macro, you must first define two shell variables:
+# h: the header name, with no enclosing <> or ""
+# re: a regular expression that matches IFF something provided by $h is used.
+define _sc_header_without_use
+ dummy=; : so we do not need a semicolon before each use; \
+ h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \
+ if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \
+ files=$$($(GREP) -l '^# *include '"$$h_esc" \
+ $$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$')) && \
+ $(GREP) -LE "$$re" $$files | $(GREP) . && \
+ { echo "$(ME): the above files include $$h but don't use it" \
+ 1>&2; exit 1; } || :; \
+ else :; \
+ fi
+endef
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+ @h='assert.h' re='\<assert *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of close-stream.h without an actual use.
+sc_prohibit_close_stream_without_use:
+ @h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of getopt.h without an actual use.
+sc_prohibit_getopt_without_use:
+ @h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use)
+
+# Don't include quotearg.h unless you use one of its functions.
+sc_prohibit_quotearg_without_use:
+ @h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use)
+
+# Don't include quote.h unless you use one of its functions.
+sc_prohibit_quote_without_use:
+ @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_long_options_without_use:
+ @h='long-options.h' re='\<parse_(long_options|gnu_standard_options_only) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_inttostr_without_use:
+ @h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_ignore_value_without_use:
+ @h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_error_without_use:
+ @h='error.h' \
+ re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\
+ $(_sc_header_without_use)
+
+# Don't include xalloc.h unless you use one of its functions.
+# Consider these symbols:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__';
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h
+# Divide into two sets on case, and filter each through this:
+# | sort | perl -MRegexp::Assemble -le \
+# 'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g'
+# Note this was produced by the above:
+# _xa1 = \
+#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup)
+# But we can do better, in at least two ways:
+# 1) take advantage of two "dup"-suffixed strings:
+# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup)
+# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable
+# "char|[cmz]"
+# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa2 = X([CZ]|N?M)ALLOC
+sc_prohibit_xalloc_without_use:
+ @h='xalloc.h' \
+ re='\<($(_xa1)|$(_xa2)) *\('\
+ $(_sc_header_without_use)
+
+# Extract function names:
+# perl -lne '/^(?:extern )?(?:void|char|Hash_table) \*?(\w+) *\(/ and print $1' lib/hash.h
+_hash_re = \
+hash_(re(set_tuning|move)|xin(itialize|sert)|in(itialize|sert)|get_(firs|nex)t|print_statistics|(delet|fre)e|lookup|clear)
+_hash_fn = \<($(_hash_re)) *\(
+_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\>
+sc_prohibit_hash_without_use:
+ @h='hash.h' \
+ re='$(_hash_fn)|$(_hash_struct)'\
+ $(_sc_header_without_use)
+
+sc_prohibit_cloexec_without_use:
+ @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \
+ $(_sc_header_without_use)
+
+sc_prohibit_posixver_without_use:
+ @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use)
+
+sc_prohibit_same_without_use:
+ @h='same.h' re='\<same_name(at)? *\(' $(_sc_header_without_use)
+
+sc_prohibit_hash_pjw_without_use:
+ @h='hash-pjw.h' \
+ re='\<hash_pjw\>' \
+ $(_sc_header_without_use)
+
+sc_prohibit_safe_read_without_use:
+ @h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_argmatch_without_use:
+ @h='argmatch.h' \
+ re='(\<(ARGMATCH_DEFINE_GROUP|ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_canonicalize_without_use:
+ @h='canonicalize.h' \
+ re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \
+ $(_sc_header_without_use)
+
+sc_prohibit_root_dev_ino_without_use:
+ @h='root-dev-ino.h' \
+ re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
+ $(_sc_header_without_use)
+
+sc_prohibit_openat_without_use:
+ @h='openat.h' \
+ re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of c-ctype.h without an actual use.
+ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
+|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
+sc_prohibit_c_ctype_without_use:
+ @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \
+ $(_sc_header_without_use)
+
+# The following list was generated by running:
+# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
+# | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
+_sig_functions = \
+ bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \
+ sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \
+ siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \
+ sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo
+_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions)))
+# The following were extracted from "man signal.h" manually.
+_sig_types_and_consts = \
+ MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK \
+ SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL \
+ SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE \
+ SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \
+ sigstack sigval stack_t ucontext_t
+# generated via this:
+# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70
+_sig_names = \
+ SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT \
+ SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL \
+ SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \
+ SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR \
+ SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS \
+ SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 \
+ SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW \
+ SIGXCPU SIGXFSZ
+_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts)))
+
+# Prohibit the inclusion of signal.h without an actual use.
+sc_prohibit_signal_without_use:
+ @h='signal.h' \
+ re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>' \
+ $(_sc_header_without_use)
+
+# Don't include stdio--.h unless you use one of its functions.
+sc_prohibit_stdio--_without_use:
+ @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include stdio-safer.h unless you use one of its functions.
+sc_prohibit_stdio-safer_without_use:
+ @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of strings.h without a sensible use.
+# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible.
+sc_prohibit_strings_without_use:
+ @h='strings.h' \
+ re='\<(strn?casecmp|ffs(ll)?)\>' \
+ $(_sc_header_without_use)
+
+# Extract the raw list of symbol names with this:
+gl_extract_define_simple = \
+ /^\# *define ([A-Z]\w+)\(/ and print $$1
+# Filter out duplicates and convert to a space-separated list:
+_intprops_names = \
+ $(shell f=$(gnulib_dir)/lib/intprops.h; \
+ perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ')
+# Remove trailing space and convert to a regular expression:
+_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names)))
+# Prohibit the inclusion of intprops.h without an actual use.
+sc_prohibit_intprops_without_use:
+ @h='intprops.h' \
+ re='\<($(_intprops_syms_re)) *\(' \
+ $(_sc_header_without_use)
+
+_stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t
+# Prohibit the inclusion of stddef.h without an actual use.
+sc_prohibit_stddef_without_use:
+ @h='stddef.h' \
+ re='\<($(_stddef_syms_re))\>' \
+ $(_sc_header_without_use)
+
+_de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)?
+_de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)?
+_de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen
+_dirent_syms_re = $(_de1)|$(_de2)|$(_de3)
+# Prohibit the inclusion of dirent.h without an actual use.
+sc_prohibit_dirent_without_use:
+ @h='dirent.h' \
+ re='\<($(_dirent_syms_re))\>' \
+ $(_sc_header_without_use)
+
+# Prohibit the inclusion of verify.h without an actual use.
+sc_prohibit_verify_without_use:
+ @h='verify.h' \
+ re='\<(verify(_expr)?|assume) *\(' \
+ $(_sc_header_without_use)
+
+# Don't include xfreopen.h unless you use one of its functions.
+sc_prohibit_xfreopen_without_use:
+ @h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use)
+
+sc_obsolete_symbols:
+ @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \
+ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \
+ $(_sc_search_regexp)
+
+# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
+
+# Each nonempty ChangeLog line must start with a year number, or a TAB.
+sc_changelog:
+ @prohibit='^[^12 ]' \
+ in_vc_files='^ChangeLog$$' \
+ halt='found unexpected prefix in a ChangeLog' \
+ $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls bindtextdomain.
+sc_bindtextdomain:
+ @require='bindtextdomain *\(' \
+ in_vc_files='\.c$$' \
+ containing='\<main *(' \
+ halt='the above files do not call bindtextdomain' \
+ $(_sc_search_regexp)
+
+# Require that the final line of each test-lib.sh-using test be this one:
+# Exit $fail
+# Note: this test requires GNU grep's --label= option.
+Exit_witness_file ?= tests/test-lib.sh
+Exit_base := $(notdir $(Exit_witness_file))
+sc_require_test_exit_idiom:
+ @if test -f $(srcdir)/$(Exit_witness_file); then \
+ die=0; \
+ for i in $$($(GREP) -l -F 'srcdir/$(Exit_base)' \
+ $$($(VC_LIST) tests)); do \
+ tail -n1 $$i | $(GREP) '^Exit .' > /dev/null \
+ && : || { die=1; echo $$i; } \
+ done; \
+ test $$die = 1 && \
+ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \
+ echo 1>&2 'Exit something'; \
+ exit 1; } || :; \
+ fi
+
+sc_trailing_blank:
+ @prohibit='[ ]$$' \
+ halt='found trailing blank(s)' \
+ exclude='^Binary file .* matches$$' \
+ $(_sc_search_regexp)
+
+# Match lines like the following, but where there is only one space
+# between the options and the description:
+# -D, --all-repeated[=delimit-method] print all duplicate lines\n
+longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*]?)?
+sc_two_space_separator_in_usage:
+ @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \
+ halt='help2man requires at least two spaces between an option and its description'\
+ $(_sc_search_regexp)
+
+# A regexp matching function names like "error" that may be used
+# to emit translatable messages.
+_gl_translatable_diag_func_re ?= error
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+ @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \
+ exclude='(_|ngettext ?)\(' \
+ halt='found unmarked diagnostic(s)' \
+ $(_sc_search_regexp)
+
+# Avoid useless parentheses like those in this example:
+# #if defined (SYMBOL) || defined (SYM2)
+sc_useless_cpp_parens:
+ @prohibit='^# *if .*defined *\(' \
+ halt='found useless parentheses in cpp directive' \
+ $(_sc_search_regexp)
+
+# List headers for which HAVE_HEADER_H is always true, assuming you are
+# using the appropriate gnulib module. CAUTION: for each "unnecessary"
+# #if HAVE_HEADER_H that you remove, be sure that your project explicitly
+# requires the gnulib module that guarantees the usability of that header.
+gl_assured_headers_ = \
+ cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g'
+
+# Convert the list of names to upper case, and replace each space with "|".
+az_ = abcdefghijklmnopqrstuvwxyz
+AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+gl_header_upper_case_or_ = \
+ $$($(gl_assured_headers_) \
+ | tr $(az_)/.- $(AZ_)___ \
+ | tr -s ' ' '|' \
+ )
+sc_prohibit_always_true_header_tests:
+ @or=$(gl_header_upper_case_or_); \
+ re="HAVE_($$or)_H"; \
+ prohibit='\<'"$$re"'\>' \
+ halt=$$(printf '%s\n' \
+ 'do not test the above HAVE_<header>_H symbol(s);' \
+ ' with the corresponding gnulib module, they are always true') \
+ $(_sc_search_regexp)
+
+sc_prohibit_defined_have_decl_tests:
+ @prohibit='(#[ ]*ifn?def|\<defined)\>[ (]+HAVE_DECL_' \
+ halt='HAVE_DECL macros are always defined' \
+ $(_sc_search_regexp)
+
+# ==================================================================
+gl_other_headers_ ?= \
+ intprops.h \
+ openat.h \
+ stat-macros.h
+
+# Perl -lne code to extract "significant" cpp-defined symbols from a
+# gnulib header file, eliminating a few common false-positives.
+# The exempted names below are defined only conditionally in gnulib,
+# and hence sometimes must/may be defined in application code.
+gl_extract_significant_defines_ = \
+ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\
+ && $$2 !~ /(?:rpl_|_used_without_)/\
+ && $$1 !~ /^(?:NSIG|ENODATA)$$/\
+ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\
+ and print $$1
+
+# Create a list of regular expressions matching the names
+# of macros that are guaranteed to be defined by parts of gnulib.
+define def_sym_regex
+ gen_h=$(gl_generated_headers_); \
+ (cd $(gnulib_dir)/lib; \
+ for f in *.in.h $(gl_other_headers_); do \
+ test -f $$f \
+ && perl -lne '$(gl_extract_significant_defines_)' $$f; \
+ done; \
+ ) | sort -u \
+ | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/'
+endef
+
+# Don't define macros that we already get from gnulib header files.
+sc_prohibit_always-defined_macros:
+ @if test -d $(gnulib_dir); then \
+ case $$(echo all: | $(GREP) -l -f - Makefile) in Makefile);; *) \
+ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \
+ esac; \
+ regex=$$($(def_sym_regex)); export regex; \
+ $(VC_LIST_EXCEPT) \
+ | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"' \
+ dummy /dev/null \
+ && { printf '$(ME): define the above' \
+ ' via some gnulib .h file\n' 1>&2; \
+ exit 1; } \
+ || :; \
+ fi
+# ==================================================================
+
+# Prohibit checked in backup files.
+sc_prohibit_backup_files:
+ @$(VC_LIST) | $(GREP) '~$$' && \
+ { echo '$(ME): found version controlled backup file' 1>&2; \
+ exit 1; } || :
+
+# Require the latest GPL.
+sc_GPL_version:
+ @prohibit='either ''version [^3]' \
+ halt='GPL vN, N!=3' \
+ $(_sc_search_regexp)
+
+# Require the latest GFDL. Two regexp, since some .texi files end up
+# line wrapping between 'Free Documentation License,' and 'Version'.
+_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any)
+sc_GFDL_version:
+ @prohibit='$(_GFDL_regexp)' \
+ halt='GFDL vN, N!=3' \
+ $(_sc_search_regexp)
+
+# Don't use Texinfo's @acronym{}.
+# https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html
+texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$
+sc_texinfo_acronym:
+ @prohibit='@acronym\{' \
+ in_vc_files='$(texinfo_suffix_re_)' \
+ halt='found use of Texinfo @acronym{}' \
+ $(_sc_search_regexp)
+
+cvs_keywords = \
+ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
+
+sc_prohibit_cvs_keyword:
+ @prohibit='\$$($(cvs_keywords))\$$' \
+ halt='do not use CVS keyword expansion' \
+ $(_sc_search_regexp)
+
+# This Perl code is slightly obfuscated. Not only is each "$" doubled
+# because it's in a Makefile, but the $$c's are comments; we cannot
+# use "#" due to the way the script ends up concatenated onto one line.
+# It would be much more concise, and would produce better output (including
+# counts) if written as:
+# perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ...
+# but that would be far less efficient, reading the entire contents
+# of each file, rather than just the last two bytes of each.
+# In addition, while the code below detects both blank lines and a missing
+# newline at EOF, the above detects only the former.
+#
+# This is a perl script that is expected to be the single-quoted argument
+# to a command-line "-le". The remaining arguments are file names.
+# Print the name of each file that does not end in exactly one newline byte.
+# I.e., warn if there are blank lines (2 or more newlines), or if the
+# last byte is not a newline. However, currently we don't complain
+# about any file that contains exactly one byte.
+# Exit nonzero if at least one such file is found, otherwise, exit 0.
+# Warn about, but otherwise ignore open failure. Ignore seek/read failure.
+#
+# Use this if you want to remove trailing empty lines from selected files:
+# perl -pi -0777 -e 's/\n\n+$/\n/' files...
+#
+require_exactly_one_NL_at_EOF_ = \
+ foreach my $$f (@ARGV) \
+ { \
+ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \
+ my $$p = sysseek (F, -2, 2); \
+ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \
+ my $$last_two_bytes; \
+ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \
+ close F; \
+ $$c = "ignore read failure"; \
+ $$p && ($$last_two_bytes eq "\n\n" \
+ || substr ($$last_two_bytes,1) ne "\n") \
+ and (print $$f), $$fail=1; \
+ } \
+ END { exit defined $$fail }
+sc_prohibit_empty_lines_at_EOF:
+ @$(VC_LIST_EXCEPT) \
+ | xargs perl -le '$(require_exactly_one_NL_at_EOF_)' \
+ || { echo '$(ME): empty line(s) or no newline at EOF' 1>&2; \
+ exit 1; } \
+ || :
+
+# Make sure we don't use st_blocks. Use ST_NBLOCKS instead.
+# This is a bit of a kludge, since it prevents use of the string
+# even in comments, but for now it does the job with no false positives.
+sc_prohibit_stat_st_blocks:
+ @prohibit='[.>]st_blocks' \
+ halt='do not use st_blocks; use ST_NBLOCKS' \
+ $(_sc_search_regexp)
+
+# Make sure we don't define any S_IS* macros in src/*.c files.
+# They're already defined via gnulib's sys/stat.h replacement.
+sc_prohibit_S_IS_definition:
+ @prohibit='^ *# *define *S_IS' \
+ halt='do not define S_IS* macros; include <sys/stat.h>' \
+ $(_sc_search_regexp)
+
+# Perl block to convert a match to FILE_NAME:LINENO:TEST,
+# that is shared by two definitions below.
+perl_filename_lineno_text_ = \
+ -e ' {' \
+ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \
+ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \
+ -e ' print "$$ARGV:$$n:$$v\n";' \
+ -e ' }'
+
+prohibit_doubled_words_ = \
+ the then in an on if is it but for or at and do to can
+# expand the regex before running the check to avoid using expensive captures
+prohibit_doubled_word_expanded_ = \
+ $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_)))
+prohibit_doubled_word_RE_ ?= \
+ /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims
+prohibit_doubled_word_ = \
+ -e 'while ($(prohibit_doubled_word_RE_))' \
+ $(perl_filename_lineno_text_)
+
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_doubled_word_match_RE_ ?= ^$$
+
+sc_prohibit_doubled_word:
+ @$(VC_LIST_EXCEPT) \
+ | xargs perl -n -0777 $(prohibit_doubled_word_) \
+ | $(GREP) -vE '$(ignore_doubled_word_match_RE_)' \
+ | $(GREP) . \
+ && { echo '$(ME): doubled words' 1>&2; exit 1; } \
+ || :
+
+# A regular expression matching undesirable combinations of words like
+# "can not"; this matches them even when the two words appear on different
+# lines, but not when there is an intervening delimiter like "#" or "*".
+# Similarly undesirable, "See @xref{...}", since an @xref should start
+# a sentence. Explicitly prohibit any prefix of "see" or "also".
+# Also prohibit a prefix matching "\w+ +".
+# @pxref gets the same see/also treatment and should be parenthesized;
+# presume it must *not* start a sentence.
+# POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too.
+bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{
+bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{
+prohibit_undesirable_word_seq_RE_ ?= \
+ /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims
+prohibit_undesirable_word_seq_ = \
+ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \
+ $(perl_filename_lineno_text_)
+# Define this to a regular expression that matches
+# any filename:dd:match lines you want to ignore.
+# The default is to ignore no matches.
+ignore_undesirable_word_sequence_RE_ ?= ^$$
+
+sc_prohibit_undesirable_word_seq:
+ @$(VC_LIST_EXCEPT) \
+ | xargs perl -n -0777 $(prohibit_undesirable_word_seq_) \
+ | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)' \
+ | $(GREP) . \
+ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } \
+ || :
+
+# Except for shell files and for loops, double semicolon is probably a mistake
+sc_prohibit_double_semicolon:
+ @prohibit='; *;[ {} \]*(/[/*]|$$)' \
+ in_vc_files='\.[chly]$$' \
+ exclude='\bfor *\(.*\)' \
+ halt="Double semicolon detected" \
+ $(_sc_search_regexp)
+
+_ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
+_ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
+# Using test's -a and -o operators is not portable.
+# We prefer test over [, since the latter is spelled [[ in configure.ac.
+sc_prohibit_test_minus_ao:
+ @prohibit='(\<test| \[+) .+ -[ao] ' \
+ halt='$(_ptm1); $(_ptm2)' \
+ $(_sc_search_regexp)
+
+# Avoid a test bashism.
+sc_prohibit_test_double_equal:
+ @prohibit='(\<test| \[+) .+ == ' \
+ containing='#! */bin/[a-z]*sh' \
+ halt='use "test x = x", not "test x =''= x"' \
+ $(_sc_search_regexp)
+
+# Each program that uses proper_name_utf8 must link with one of the
+# ICONV libraries. Otherwise, some ICONV library must appear in LDADD.
+# The perl -0777 invocation below extracts the possibly-multi-line
+# definition of LDADD from the appropriate Makefile.am and exits 0
+# when it contains "ICONV".
+sc_proper_name_utf8_requires_ICONV:
+ @progs=$$($(VC_LIST_EXCEPT) \
+ | xargs $(GREP) -l 'proper_name_utf8 ''("'); \
+ if test "x$$progs" != x; then \
+ fail=0; \
+ for p in $$progs; do \
+ dir=$$(dirname "$$p"); \
+ perl -0777 \
+ -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)' \
+ $$dir/Makefile.am && continue; \
+ base=$$(basename "$$p" .c); \
+ $(GREP) "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \
+ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
+ done; \
+ test $$fail = 1 && \
+ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
+ exit 1; } || :; \
+ fi
+
+# Warn about "c0nst struct Foo const foo[]",
+# but not about "char const *const foo" or "#define const const".
+sc_redundant_const:
+ @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \
+ halt='redundant "const" in declarations' \
+ $(_sc_search_regexp)
+
+sc_const_long_option:
+ @prohibit='^ *static.*struct option ' \
+ exclude='const struct option|struct option const' \
+ halt='add "const" to the above declarations' \
+ $(_sc_search_regexp)
+
+NEWS_hash = \
+ $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \
+ $(srcdir)/NEWS \
+ | perl -0777 -pe \
+ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \
+ | md5sum - \
+ | $(SED) 's/ .*//')
+
+# Ensure that we don't accidentally insert an entry into an old NEWS block.
+sc_immutable_NEWS:
+ @if test -f $(srcdir)/NEWS; then \
+ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \
+ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \
+ fi
+
+# Update the hash stored above. Do this after each release and
+# for any corrections to old entries.
+update-NEWS-hash: NEWS
+ perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \
+ $(srcdir)/cfg.mk
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+# However, there is still one case in which @VAR@ use is not just
+# legitimate, but actually required: when augmenting an automake-defined
+# variable with a prefix. For example, gettext uses this:
+# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@
+# otherwise, makeinfo would put German or French (current locale)
+# navigation hints in the otherwise-English documentation.
+#
+# Allow the package to add exceptions via a hook in cfg.mk;
+# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by
+# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'.
+_makefile_at_at_check_exceptions ?=
+sc_makefile_at_at_check:
+ @perl -ne '/\@\w+\@/' \
+ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \
+ -e ''$(_makefile_at_at_check_exceptions) \
+ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \
+ $$($(VC_LIST_EXCEPT) | $(GREP) -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \
+ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-check: NEWS
+ $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \
+ | $(GREP) -E $(news-check-regexp) >/dev/null; then \
+ :; \
+ else \
+ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \
+ exit 1; \
+ fi
+
+sc_makefile_TAB_only_indentation:
+ @prohibit='^ [ ]{8}' \
+ in_vc_files='akefile|\.mk$$' \
+ halt='found TAB-8-space indentation' \
+ $(_sc_search_regexp)
+
+sc_m4_quote_check:
+ @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \
+ in_vc_files='(^configure\.ac|\.m4)$$' \
+ halt='quote the first arg to AC_DEF*' \
+ $(_sc_search_regexp)
+
+fix_po_file_diag = \
+'you have changed the set of files with translatable diagnostics;\n\
+apply the above patch\n'
+
+# Generate a list of files in which to search for translatable strings.
+perl_translatable_files_list_ = \
+ -e 'foreach $$file (@ARGV) {' \
+ -e ' \# Consider only file extensions with one or two letters' \
+ -e ' $$file =~ /\...?$$/ or next;' \
+ -e ' \# Ignore m4 and mk files' \
+ -e ' $$file =~ /\.m[4k]$$/ and next;' \
+ -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \
+ -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \
+ -e ' and next;' \
+ -e ' \# Skip unreadable files' \
+ -e ' -r $$file or next;' \
+ -e ' print "$$file ";' \
+ -e '}'
+
+# Verify that all source files using _() (more specifically, files that
+# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in.
+po_file ?= $(srcdir)/po/POTFILES.in
+generated_files ?= $(srcdir)/lib/*.[ch]
+_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$)
+sc_po_check:
+ @if test -f $(po_file); then \
+ $(GREP) -E -v '^(#|$$)' $(po_file) \
+ | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \
+ { $(VC_LIST_EXCEPT); echo $(generated_files); } \
+ | xargs perl $(perl_translatable_files_list_) \
+ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \
+ | $(SED) 's|^$(_dot_escaped_srcdir)/||' \
+ | sort -u > $@-2; \
+ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \
+ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \
+ rm -f $@-1 $@-2; \
+ fi
+
+# Sometimes it is useful to change the PATH environment variable
+# in Makefiles. When doing so, it's better not to use the Unix-centric
+# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'.
+msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead'
+sc_makefile_path_separator_check:
+ @prohibit='PATH[=].*:' \
+ in_vc_files='akefile|\.mk$$' \
+ halt=$(msg) \
+ $(_sc_search_regexp)
+
+sc_makefile_DISTCHECK_CONFIGURE_FLAGS:
+ @prohibit='^DISTCHECK_CONFIGURE_FLAGS' \
+ in_vc_files='akefile|\.mk$$' \
+ halt="use AM_DISTCHECK_CONFIGURE_FLAGS" \
+ $(_sc_search_regexp)
+
+# Check that 'make alpha' will not fail at the end of the process,
+# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release)
+# and is read-only.
+writable-files:
+ $(AM_V_GEN)if test -d $(release_archive_dir); then \
+ for file in $(DIST_ARCHIVES); do \
+ for p in ./ $(release_archive_dir)/; do \
+ test -e $$p$$file || continue; \
+ test -w $$p$$file \
+ || { echo ERROR: $$p$$file is not writable; fail=1; }; \
+ done; \
+ done; \
+ test "$$fail" && exit 1 || : ; \
+ else :; \
+ fi
+
+v_etc_file = $(gnulib_dir)/lib/version-etc.c
+sample-test = tests/sample-test
+texi = doc/$(PACKAGE).texi
+# Make sure that the copyright date in $(v_etc_file) is up to date.
+# Do the same for the $(sample-test) and the main doc/.texi file.
+sc_copyright_check:
+ @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \
+ in_files=$(v_etc_file) \
+ halt='out of date copyright in $(v_etc_file); update it' \
+ $(_sc_search_regexp)
+ @require='# Copyright \(C\) '$$(date +%Y)' Free' \
+ in_vc_files=$(sample-test) \
+ halt='out of date copyright in $(sample-test); update it' \
+ $(_sc_search_regexp)
+ @require='Copyright @copyright\{} .*'$$(date +%Y) \
+ in_vc_files=$(texi) \
+ halt='out of date copyright in $(texi); update it' \
+ $(_sc_search_regexp)
+
+# If tests/help-version exists and seems to be new enough, assume that its
+# use of init.sh and path_prepend_ is correct, and ensure that every other
+# use of init.sh is identical.
+# This is useful because help-version cross-checks prog --version
+# with $(VERSION), which verifies that its path_prepend_ invocation
+# sets PATH correctly. This is an inexpensive way to ensure that
+# the other init.sh-using tests also get it right.
+_hv_file ?= $(srcdir)/tests/help-version
+_hv_regex_weak ?= ^ *\. .*/init\.sh"
+# Fix syntax-highlighters "
+_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh"
+sc_cross_check_PATH_usage_in_tests:
+ @if test -f $(_hv_file); then \
+ $(GREP) -l 'VERSION mismatch' $(_hv_file) >/dev/null \
+ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \
+ exit 0; }; \
+ $(GREP) -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \
+ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \
+ exit 1; }; \
+ good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file)); \
+ $(VC_LIST_EXCEPT) \
+ | xargs $(GREP) -lE '$(_hv_regex_weak)' \
+ | xargs $(GREP) -LFx "$$good" \
+ | $(GREP) . \
+ && { printf "$(ME): the above files use" \
+ " path_prepend_ inconsistently\n" 1>&2; \
+ exit 1; } \
+ || :; \
+ fi
+
+# BRE regex of file contents to identify a test script.
+_test_script_regex ?= \<init\.sh\>
+
+# In tests, use "compare expected actual", not the reverse.
+sc_prohibit_reversed_compare_failure:
+ @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \
+ containing='$(_test_script_regex)' \
+ halt='reversed compare arguments' \
+ $(_sc_search_regexp)
+
+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+ @prohibit='^#define.*(yes|no|true|false)$$' \
+ in_files='$(CONFIG_INCLUDE)' \
+ halt='Use 0 or 1 for macro values' \
+ $(_sc_search_regexp)
+
+# Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might
+# not be constant, or might overflow a stack. In general, use PATH_MAX as
+# a limit, not an array or alloca size.
+sc_prohibit_path_max_allocation:
+ @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \
+ halt='Avoid stack allocations of size PATH_MAX' \
+ $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2009-4029:
+ @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \
+ in_files='(^|/)Makefile\.in$$' \
+ halt=$$(printf '%s\n' \
+ 'the above files are vulnerable; beware of running' \
+ ' "make dist*" rules, and upgrade to fixed automake' \
+ ' see https://bugzilla.redhat.com/show_bug.cgi?id=542609 for details') \
+ $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2012-3386:
+ @prohibit='chmod a\+w \$$\(distdir\)' \
+ in_files='(^|/)Makefile\.in$$' \
+ halt=$$(printf '%s\n' \
+ 'the above files are vulnerable; beware of running' \
+ ' "make distcheck", and upgrade to fixed automake' \
+ ' see https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3386 for details') \
+ $(_sc_search_regexp)
+
+sc_unportable_grep_q:
+ @prohibit='grep -q' halt="unportable 'grep -q', use >/dev/null instead" \
+ $(_sc_search_regexp)
+
+vc-diff-check:
+ $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
+ $(AM_V_at)if test -s vc-diffs; then \
+ cat vc-diffs; \
+ echo "Some files are locally modified:" 1>&2; \
+ exit 1; \
+ else \
+ rm vc-diffs; \
+ fi
+
+rel-files = $(DIST_ARCHIVES)
+
+gnulib-version = $$(cd $(gnulib_dir) \
+ && { git describe || git rev-parse --short=10 HEAD; } )
+bootstrap-tools ?= autoconf,automake,gnulib
+
+gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv)
+# If it's not already specified, derive the GPG key ID from
+# the signed tag we've just applied to mark this release.
+gpg_key_ID ?= \
+ $$(cd $(srcdir) \
+ && git cat-file tag v$(VERSION) \
+ | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \
+ | $(AWK) '/^\[GNUPG:] ERRSIG / {print $$3; exit}')
+gpg_key_email ?= \
+ $$(gpg --list-key --with-colons $(gpg_key_ID) 2>/dev/null \
+ | $(AWK) -F: '/^uid/ {print $$10; exit}' \
+ | $(SED) -n 's/.*<\(.*\)>/\1/p')
+gpg_keyring_url ?= https://savannah.gnu.org/project/release-gpgkeys.php?group=$(PACKAGE)&download=1
+
+translation_project_ ?= coordinator@translationproject.org
+
+# Make info-gnu the default only for a stable release.
+announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT)
+announcement_mail_headers_stable = \
+ To: info-gnu@gnu.org \
+ Cc: $(announcement_Cc_) \
+ Mail-Followup-To: $(PACKAGE_BUGREPORT)
+
+announcement_Cc_alpha = $(translation_project_)
+announcement_mail_headers_alpha = \
+ To: $(PACKAGE_BUGREPORT) \
+ Cc: $(announcement_Cc_)
+
+announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha)
+announcement_mail_headers_beta = $(announcement_mail_headers_alpha)
+
+announcement_Cc_ ?= $(announcement_Cc_$(release-type))
+announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type))
+announcement: NEWS ChangeLog $(rel-files)
+# Not $(AM_V_GEN) since the output of this command serves as
+# announcement message: it would start with " GEN announcement".
+ $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \
+ --mail-headers='$(announcement_mail_headers_)' \
+ --release-type=$(release-type) \
+ --package=$(PACKAGE) \
+ --prev=$(PREV_VERSION) \
+ --curr=$(VERSION) \
+ --gpg-key-id=$(gpg_key_ID) \
+ $$(test -n "$(gpg_key_email)" && \
+ echo --gpg-key-email="$(gpg_key_email)") \
+ $$(test -n "$(gpg_keyring_url)" && \
+ echo --gpg-keyring-url="$(gpg_keyring_url)") \
+ --srcdir=$(srcdir) \
+ --news=$(srcdir)/NEWS \
+ --bootstrap-tools=$(bootstrap-tools) \
+ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \
+ echo --gnulib-version=$(gnulib-version);; esac) \
+ $(addprefix --url-dir=, $(url_dir_list))
+
+.PHONY: release-commit
+release-commit:
+ $(AM_V_GEN)cd $(srcdir) \
+ && $(_build-aux)/do-release-commit-and-tag \
+ -C $(abs_builddir) $(RELEASE)
+
+## ---------------- ##
+## Updating files. ##
+## ---------------- ##
+
+ftp-gnu = https://ftp.gnu.org/gnu
+www-gnu = https://www.gnu.org
+
+upload_dest_dir_ ?= $(PACKAGE)
+upload_command = \
+ $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \
+ --to $(gnu_rel_host):$(upload_dest_dir_) \
+ $(rel-files)
+emit_upload_commands:
+ @echo =====================================
+ @echo =====================================
+ @echo '$(upload_command)'
+ @echo '# send the ~/announce-$(my_distdir) e-mail'
+ @echo =====================================
+ @echo =====================================
+
+.PHONY: upload
+upload:
+ $(AM_V_GEN)$(upload_command)
+
+define emit-commit-log
+ printf '%s\n' 'maint: post-release administrivia' '' \
+ '* NEWS: Add header line for next release.' \
+ '* .prev-version: Record previous version.' \
+ '* cfg.mk (old_NEWS_hash): Auto-update.'
+endef
+
+.PHONY: no-submodule-changes
+no-submodule-changes:
+ $(AM_V_GEN)if test -d $(srcdir)/.git \
+ && git --version >/dev/null 2>&1; then \
+ diff=$$(cd $(srcdir) && git submodule -q foreach \
+ git diff-index --name-only HEAD) \
+ || exit 1; \
+ case $$diff in '') ;; \
+ *) echo '$(ME): submodule files are locally modified:'; \
+ echo "$$diff"; exit 1;; esac; \
+ else \
+ : ; \
+ fi
+
+submodule-checks ?= no-submodule-changes public-submodule-commit
+
+# Ensure that each sub-module commit we're using is public.
+# Without this, it is too easy to tag and release code that
+# cannot be built from a fresh clone.
+.PHONY: public-submodule-commit
+public-submodule-commit:
+ $(AM_V_GEN)if test -d $(srcdir)/.git \
+ && git --version >/dev/null 2>&1; then \
+ cd $(srcdir) && \
+ git submodule --quiet foreach \
+ 'test "$$(git rev-parse "$$sha1")" \
+ = "$$(git merge-base origin "$$sha1")"' \
+ || { echo '$(ME): found non-public submodule commit' >&2; \
+ exit 1; }; \
+ else \
+ : ; \
+ fi
+# This rule has a high enough utility/cost ratio that it should be a
+# dependent of "check" by default. However, some of us do occasionally
+# commit a temporary change that deliberately points to a non-public
+# submodule commit, and want to be able to use rules like "make check".
+# In that case, run e.g., "make check gl_public_submodule_commit="
+# to disable this test.
+gl_public_submodule_commit ?= public-submodule-commit
+check: $(gl_public_submodule_commit)
+
+.PHONY: alpha beta stable release
+ALL_RECURSIVE_TARGETS += alpha beta stable
+alpha beta stable: $(local-check) writable-files $(submodule-checks)
+ $(AM_V_GEN)test $@ = stable \
+ && { echo $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$' \
+ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+ || :
+ $(AM_V_at)$(MAKE) vc-diff-check
+ $(AM_V_at)$(MAKE) news-check
+ $(AM_V_at)$(MAKE) distcheck
+ $(AM_V_at)$(MAKE) dist
+ $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@
+ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
+
+release:
+ $(AM_V_GEN)$(MAKE) _version
+ $(AM_V_at)$(MAKE) $(release-type)
+
+# Override this in cfg.mk if you follow different procedures.
+release-prep-hook ?= release-prep
+
+gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?]
+.PHONY: release-prep
+release-prep:
+ $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \
+ > ~/announce-$(my_distdir)
+ $(AM_V_at)if test -d $(release_archive_dir); then \
+ ln $(rel-files) $(release_archive_dir); \
+ chmod a-w $(rel-files); \
+ fi
+ $(AM_V_at)echo $(VERSION) > $(prev_version_file)
+ $(AM_V_at)$(MAKE) update-NEWS-hash
+ $(AM_V_at)perl -pi \
+ -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \
+ $(srcdir)/NEWS
+ $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \
+ cd $(srcdir) && $(VC) commit -m "$$msg" -a
+
+# Override this with e.g., -s $(srcdir)/some_other_name.texi
+# if the default $(PACKAGE)-derived name doesn't apply.
+gendocs_options_ ?=
+
+.PHONY: web-manual
+web-manual:
+ $(AM_V_GEN)test -z "$(manual_title)" \
+ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+ $(AM_V_at)cd '$(srcdir)/doc'; \
+ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \
+ -o '$(abs_builddir)/doc/manual' \
+ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+ "$(PACKAGE_NAME) - $(manual_title)"
+ $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs."
+
+.PHONY: web-manual-update
+web-manual-update:
+ $(AM_V_GEN)cd $(srcdir) \
+ && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir)
+
+
+# Code Coverage
+
+init-coverage:
+ $(MAKE) $(AM_MAKEFLAGS) clean
+ lcov --directory . --zerocounters
+
+COVERAGE_CCOPTS ?= "-g --coverage"
+COVERAGE_OUT ?= doc/coverage
+
+build-coverage:
+ $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS)
+ $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check
+ mkdir -p $(COVERAGE_OUT)
+ lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \
+ --capture
+
+gen-coverage:
+ genhtml --output-directory $(COVERAGE_OUT) \
+ $(COVERAGE_OUT)/$(PACKAGE).info \
+ --highlight --frames --legend \
+ --title "$(PACKAGE_NAME)"
+
+coverage:
+ $(MAKE) init-coverage
+ $(MAKE) build-coverage
+ $(MAKE) gen-coverage
+
+# Some projects carry local adjustments for gnulib modules via patches in
+# a gnulib patch directory whose default name is gl/ (defined in bootstrap
+# via local_gl_dir=gl). Those patches become stale as the originals evolve
+# in gnulib. Use this rule to refresh any stale patches. It applies each
+# patch to the original in $(gnulib_dir) and uses the temporary result to
+# generate a fuzz-free .diff file. If you customize the name of your local
+# gnulib patch directory via bootstrap.conf, this rule detects that name.
+# Run this from a non-VPATH (i.e., srcdir) build directory.
+.PHONY: refresh-gnulib-patches
+refresh-gnulib-patches:
+ gl=gl; \
+ if test -f bootstrap.conf; then \
+ t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \
+ -e 'END{defined $$d and print $$d}' bootstrap.conf); \
+ test -n "$$t" && gl=$$t; \
+ fi; \
+ for diff in $$(cd $$gl; git ls-files | $(GREP) '\.diff$$'); do \
+ b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \
+ VERSION_CONTROL=none \
+ patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \
+ ( cd $(gnulib_dir) || exit 1; \
+ git diff "$$b" > "../$$gl/$$diff"; \
+ git checkout $$b ) || exit 1; \
+ done
+
+# Update gettext files.
+PACKAGE ?= $(shell basename $(PWD))
+PO_DOMAIN ?= $(PACKAGE)
+POURL = https://translationproject.org/latest/$(PO_DOMAIN)/
+PODIR ?= po
+refresh-po:
+ rm -f $(PODIR)/*.po && \
+ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \
+ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \
+ echo 'en@boldquot' > $(PODIR)/LINGUAS && \
+ echo 'en@quot' >> $(PODIR)/LINGUAS && \
+ ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \
+ sort >> $(PODIR)/LINGUAS
+
+# Indentation
+
+indent_args ?= -ppi 1
+C_SOURCES ?= $$($(VC_LIST_EXCEPT) | grep '\.[ch]\(.in\)\?$$')
+INDENT_SOURCES ?= $(C_SOURCES)
+exclude_file_name_regexp--indent ?= $(exclude_file_name_regexp--sc_indent)
+
+.PHONY: indent
+indent: # Running indent once is not idempotent, but running it twice is.
+ $(AM_V_GEN)indent $(indent_args) $(INDENT_SOURCES) && \
+ indent $(indent_args) $(INDENT_SOURCES)
+
+sc_indent:
+ @if ! indent --version 2> /dev/null | grep 'GNU indent' > /dev/null; then \
+ echo 1>&2 '$(ME): sc_indent: GNU indent is missing'; \
+ else \
+ fail=0; files="$(INDENT_SOURCES)"; \
+ for f in $$files; do \
+ indent $(indent_args) -st $$f \
+ | indent $(indent_args) -st - \
+ | diff -u $$f - || fail=1; \
+ done; \
+ test $$fail = 1 && \
+ { echo 1>&2 '$(ME): code format error, try "make indent"'; \
+ exit 1; } || :; \
+ fi
+
+# If you want to set UPDATE_COPYRIGHT_* environment variables,
+# put the assignments in this variable.
+update-copyright-env ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+# If you have an additional project-specific rule,
+# add it in cfg.mk along with a line 'update-copyright: prereq'.
+# By default, exclude all variants of COPYING; you can also
+# add exemptions (such as ChangeLog..* for rotated change logs)
+# in the file .x-update-copyright.
+.PHONY: update-copyright
+update-copyright:
+ $(AM_V_GEN)$(GREP) -l -w Copyright \
+ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
+ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@
+
+# This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not
+# overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS.
+
+# NOTE: to override any _gl_TS_* default value, you must
+# define the variable(s) using "export" in cfg.mk.
+_gl_TS_dir ?= src
+
+ALL_RECURSIVE_TARGETS += sc_tight_scope
+sc_tight_scope: tight-scope.mk
+ @fail=0; \
+ if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \
+ > /dev/null \
+ && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \
+ > /dev/null 2>&1; then \
+ echo '$(ME): skipping $@'; \
+ else \
+ $(MAKE) -s -C $(_gl_TS_dir) \
+ -f Makefile \
+ -f $(abs_top_srcdir)/cfg.mk \
+ -f $(abs_top_builddir)/$< \
+ _gl_tight_scope \
+ || fail=1; \
+ fi; \
+ rm -f $<; \
+ exit $$fail
+
+tight-scope.mk: $(ME)
+ @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t
+ @mv $@-t $@
+
+ifeq (a,b)
+# TS-start
+
+# Most functions should have static scope.
+# Any that don't must be marked with 'extern', but 'main'
+# and 'usage' are exceptions: they're always extern, but
+# do not need to be marked. Symbols matching '__.*' are
+# reserved by the compiler, so are automatically excluded below.
+_gl_TS_unmarked_extern_functions ?= main usage
+_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/
+
+# If your project uses a macro like "XTERN", then put
+# the following in cfg.mk to override this default:
+# export _gl_TS_extern = extern|XTERN
+_gl_TS_extern ?= extern
+
+# The second nm|grep checks for file-scope variables with 'extern' scope.
+# Without gnulib's progname module, you might put program_name here.
+# Symbols matching '__.*' are reserved by the compiler,
+# so are automatically excluded below.
+_gl_TS_unmarked_extern_vars ?=
+
+# NOTE: the _match variables are perl expressions -- not mere regular
+# expressions -- so that you can extend them to match other patterns
+# and easily extract matched variable names.
+# For example, if your project declares some global variables via
+# a macro like this: GLOBAL(type, var_name, initializer), then you
+# can override this definition to automatically extract those names:
+# export _gl_TS_var_match = \
+# /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/
+_gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?])?;/
+
+# The names of object files in (or relative to) $(_gl_TS_dir).
+_gl_TS_obj_files ?= *.$(OBJEXT)
+
+# Files in which to search for the one-line style extern declarations.
+# $(_gl_TS_dir)-relative.
+_gl_TS_headers ?= $(noinst_HEADERS)
+_gl_TS_other_headers ?= *.h
+
+.PHONY: _gl_tight_scope
+_gl_tight_scope: $(bin_PROGRAMS)
+ sed_wrap='s/^/^_?/;s/$$/$$/'; \
+ t=exceptions-$$$$; \
+ trap 's=$$?; rm -f $$t; exit $$s' 0; \
+ for sig in 1 2 3 13 15; do \
+ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \
+ done; \
+ src=`for f in $(SOURCES); do \
+ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \
+ hdr=`for f in $(_gl_TS_headers); do \
+ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \
+ ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \
+ $(GREP) -h -A1 '^extern .*[^;]$$' $$src \
+ | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \
+ perl -lne \
+ '$(_gl_TS_function_match) and print $$1' $$hdr; \
+ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \
+ nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|$(GREP) -Ev -f $$t \
+ && { echo the above functions should have static scope >&2; \
+ exit 1; } || : ; \
+ ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \
+ perl -lne '$(_gl_TS_var_match) and print $$1' \
+ $$hdr $(_gl_TS_other_headers) \
+ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \
+ nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \
+ | sort -u | $(GREP) -Ev -f $$t \
+ && { echo the above variables should have static scope >&2; \
+ exit 1; } || :
+# TS-end
+endif
diff --git a/parted.spec b/parted.spec
new file mode 100644
index 0000000..c373682
--- /dev/null
+++ b/parted.spec
@@ -0,0 +1,91 @@
+# Default to disabling device-mapper
+%define use_devmapper 0
+
+# Enable device-mapper support if we find devmapper
+%define use_devmapper %(pkg-config --libs devmapper >/dev/null 2>&1; [ $? -eq 0 ] && echo 1)
+
+Summary: The GNU disk partition manipulation program
+Name: parted
+Version: 3.6
+Release: 1
+Source: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.bz2
+Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+License: GPL
+Group: Applications/System
+
+BuildRequires: e2fsprogs-devel readline-devel ncurses-devel gperf
+BuildRequires: automake libtool gettext-devel texinfo pkgconfig
+
+BuildRequires: device-mapper-devel
+
+Prereq: /sbin/install-info
+
+%description
+The GNU Parted program allows you to create, destroy, resize, move,
+and copy hard disk partitions. Parted can be used for creating space
+for new operating systems, reorganizing disk usage, and copying data
+to new hard disks.
+
+%package devel
+Summary: Files for developing apps which will manipulate disk partitions
+Group: Development/Libraries
+Requires: %{name}-%{version}-%{release}
+%description devel
+The GNU Parted library is a set of routines for hard disk partition
+manipulation. If you want to develop programs that manipulate disk
+partitions and filesystems using the routines provided by the GNU
+Parted library, you need to install this package.
+
+%prep
+%setup -q
+
+%build
+%configure \
+ --enable-shared \
+%if "%{use_devmapper}" == "1"
+ --enable-device-mapper \
+%else
+ --disable-devmapper \
+%endif
+ --enable-part-static \
+ --enable-pc98=no \
+ --enable-Werror=no
+%{__make} %{?_smp_mflags}
+
+%install
+%{__rm} -rf %{buildroot}
+%{__make} install DESTDIR=%{buildroot}
+
+%clean
+%{__rm} -rf %{buildroot}
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%doc AUTHORS BUGS COPYING ChangeLog NEWS README THANKS TODO doc/API doc/FAT
+%{_sbindir}/parted
+%{_sbindir}/partprobe
+%{_mandir}/man8/parted.8.gz
+%{_mandir}/man8/partprobe.8.gz
+%{_libdir}/libparted-*.so.*
+%{_libdir}/libparted-*.so.*
+%{_infodir}/parted.info.gz
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/parted
+%{_libdir}/libparted.a
+%{_libdir}/libparted.so
+%{_libdir}/pkgconfig/libparted.pc
+
+%changelog
+* Tue Mar 13 2007 David Cantrell <dcantrell@redhat.com>
+- Updated spec file
+
+* Mon Mar 13 2000 Fabian Emmes <fab@orlen.de>
+- changed "unset LINGUAS" line
+- reintroduced %build section ;)
+- started changelog
diff --git a/parted.spec.in b/parted.spec.in
new file mode 100644
index 0000000..d0e2b11
--- /dev/null
+++ b/parted.spec.in
@@ -0,0 +1,91 @@
+# Default to disabling device-mapper
+%define use_devmapper 0
+
+# Enable device-mapper support if we find devmapper
+%define use_devmapper %(pkg-config --libs devmapper >/dev/null 2>&1; [ $? -eq 0 ] && echo 1)
+
+Summary: The GNU disk partition manipulation program
+Name: @PACKAGE@
+Version: @VERSION@
+Release: 1
+Source: ftp://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.bz2
+Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+License: GPL
+Group: Applications/System
+
+BuildRequires: e2fsprogs-devel readline-devel ncurses-devel gperf
+BuildRequires: automake libtool gettext-devel texinfo pkgconfig
+
+BuildRequires: device-mapper-devel
+
+Prereq: /sbin/install-info
+
+%description
+The GNU Parted program allows you to create, destroy, resize, move,
+and copy hard disk partitions. Parted can be used for creating space
+for new operating systems, reorganizing disk usage, and copying data
+to new hard disks.
+
+%package devel
+Summary: Files for developing apps which will manipulate disk partitions
+Group: Development/Libraries
+Requires: %{name}-%{version}-%{release}
+%description devel
+The GNU Parted library is a set of routines for hard disk partition
+manipulation. If you want to develop programs that manipulate disk
+partitions and filesystems using the routines provided by the GNU
+Parted library, you need to install this package.
+
+%prep
+%setup -q
+
+%build
+%configure \
+ --enable-shared \
+%if "%{use_devmapper}" == "1"
+ --enable-device-mapper \
+%else
+ --disable-devmapper \
+%endif
+ --enable-part-static \
+ --enable-pc98=no \
+ --enable-Werror=no
+%{__make} %{?_smp_mflags}
+
+%install
+%{__rm} -rf %{buildroot}
+%{__make} install DESTDIR=%{buildroot}
+
+%clean
+%{__rm} -rf %{buildroot}
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%doc AUTHORS BUGS COPYING ChangeLog NEWS README THANKS TODO doc/API doc/FAT
+%{_sbindir}/parted
+%{_sbindir}/partprobe
+%{_mandir}/man8/parted.8.gz
+%{_mandir}/man8/partprobe.8.gz
+%{_libdir}/libparted-*.so.*
+%{_libdir}/libparted-*.so.*
+%{_infodir}/parted.info.gz
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/parted
+%{_libdir}/libparted.a
+%{_libdir}/libparted.so
+%{_libdir}/pkgconfig/libparted.pc
+
+%changelog
+* Tue Mar 13 2007 David Cantrell <dcantrell@redhat.com>
+- Updated spec file
+
+* Mon Mar 13 2000 Fabian Emmes <fab@orlen.de>
+- changed "unset LINGUAS" line
+- reintroduced %build section ;)
+- started changelog
diff --git a/parted/Makefile.am b/parted/Makefile.am
new file mode 100644
index 0000000..e5f3288
--- /dev/null
+++ b/parted/Makefile.am
@@ -0,0 +1,55 @@
+BUILT_SOURCES =
+
+sbin_PROGRAMS = parted
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+
+parted_SOURCES = command.c \
+ command.h \
+ parted.c \
+ strlist.c \
+ strlist.h \
+ ui.c \
+ ui.h \
+ jsonwrt.c \
+ jsonwrt.h \
+ table.c \
+ table.h
+
+noinst_LIBRARIES = libver.a
+nodist_libver_a_SOURCES = version.c version.h
+
+BUILT_SOURCES += version.c
+version.c: Makefile
+ $(AM_V_GEN)rm -f $@
+ $(AM_V_at)printf '#include <config.h>\n' > $@t
+ $(AM_V_at)printf 'char const *Version = "$(PACKAGE_VERSION)";\n' >> $@t
+ $(AM_V_at)chmod a-w $@t
+ $(AM_V_at)mv $@t $@
+
+BUILT_SOURCES += version.h
+version.h: Makefile
+ $(AM_V_GEN)rm -f $@
+ $(AM_V_at)printf 'extern char const *Version;\n' > $@t
+ $(AM_V_at)chmod a-w $@t
+ $(AM_V_at)mv $@t $@
+
+DISTCLEANFILES = version.c version.h
+MAINTAINERCLEANFILES = $(BUILT_SOURCES)
+
+parted_LDADD = \
+ libver.a \
+ $(top_builddir)/libparted/libparted.la \
+ $(INTLLIBS) $(LIBS) \
+ $(PARTED_LIBS)
+
+parted_LDFLAGS = $(PARTEDLDFLAGS)
+
+# Tell the linker to omit references to unused shared libraries.
+parted_LDFLAGS += $(IGNORE_UNUSED_LIBRARIES_CFLAGS)
+
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+
+MAINTAINERCLEANFILES += Makefile.in
diff --git a/parted/Makefile.in b/parted/Makefile.in
new file mode 100644
index 0000000..8faf73b
--- /dev/null
+++ b/parted/Makefile.in
@@ -0,0 +1,2085 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = parted$(EXEEXT)
+subdir = parted
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)"
+PROGRAMS = $(sbin_PROGRAMS)
+LIBRARIES = $(noinst_LIBRARIES)
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+libver_a_AR = $(AR) $(ARFLAGS)
+libver_a_LIBADD =
+nodist_libver_a_OBJECTS = version.$(OBJEXT)
+libver_a_OBJECTS = $(nodist_libver_a_OBJECTS)
+am_parted_OBJECTS = command.$(OBJEXT) parted.$(OBJEXT) \
+ strlist.$(OBJEXT) ui.$(OBJEXT) jsonwrt.$(OBJEXT) \
+ table.$(OBJEXT)
+parted_OBJECTS = $(am_parted_OBJECTS)
+am__DEPENDENCIES_1 =
+parted_DEPENDENCIES = libver.a $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+parted_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(parted_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/command.Po ./$(DEPDIR)/jsonwrt.Po \
+ ./$(DEPDIR)/parted.Po ./$(DEPDIR)/strlist.Po \
+ ./$(DEPDIR)/table.Po ./$(DEPDIR)/ui.Po ./$(DEPDIR)/version.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(nodist_libver_a_SOURCES) $(parted_SOURCES)
+DIST_SOURCES = $(parted_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+BUILT_SOURCES = version.c version.h
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+
+parted_SOURCES = command.c \
+ command.h \
+ parted.c \
+ strlist.c \
+ strlist.h \
+ ui.c \
+ ui.h \
+ jsonwrt.c \
+ jsonwrt.h \
+ table.c \
+ table.h
+
+noinst_LIBRARIES = libver.a
+nodist_libver_a_SOURCES = version.c version.h
+DISTCLEANFILES = version.c version.h
+MAINTAINERCLEANFILES = $(BUILT_SOURCES) Makefile.in
+parted_LDADD = \
+ libver.a \
+ $(top_builddir)/libparted/libparted.la \
+ $(INTLLIBS) $(LIBS) \
+ $(PARTED_LIBS)
+
+
+# Tell the linker to omit references to unused shared libraries.
+parted_LDFLAGS = $(PARTEDLDFLAGS) $(IGNORE_UNUSED_LIBRARIES_CFLAGS)
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu parted/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu parted/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libver.a: $(libver_a_OBJECTS) $(libver_a_DEPENDENCIES) $(EXTRA_libver_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libver.a
+ $(AM_V_AR)$(libver_a_AR) libver.a $(libver_a_OBJECTS) $(libver_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libver.a
+
+parted$(EXEEXT): $(parted_OBJECTS) $(parted_DEPENDENCIES) $(EXTRA_parted_DEPENDENCIES)
+ @rm -f parted$(EXEEXT)
+ $(AM_V_CCLD)$(parted_LINK) $(parted_OBJECTS) $(parted_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/command.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jsonwrt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parted.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strlist.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) $(LIBRARIES)
+installdirs:
+ for dir in "$(DESTDIR)$(sbindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+ clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/command.Po
+ -rm -f ./$(DEPDIR)/jsonwrt.Po
+ -rm -f ./$(DEPDIR)/parted.Po
+ -rm -f ./$(DEPDIR)/strlist.Po
+ -rm -f ./$(DEPDIR)/table.Po
+ -rm -f ./$(DEPDIR)/ui.Po
+ -rm -f ./$(DEPDIR)/version.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/command.Po
+ -rm -f ./$(DEPDIR)/jsonwrt.Po
+ -rm -f ./$(DEPDIR)/parted.Po
+ -rm -f ./$(DEPDIR)/strlist.Po
+ -rm -f ./$(DEPDIR)/table.Po
+ -rm -f ./$(DEPDIR)/ui.Po
+ -rm -f ./$(DEPDIR)/version.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-sbinPROGRAMS
+
+.MAKE: all check install install-am install-exec install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-noinstLIBRARIES \
+ clean-sbinPROGRAMS cscopelist-am ctags ctags-am distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-sbinPROGRAMS install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-sbinPROGRAMS
+
+.PRECIOUS: Makefile
+
+version.c: Makefile
+ $(AM_V_GEN)rm -f $@
+ $(AM_V_at)printf '#include <config.h>\n' > $@t
+ $(AM_V_at)printf 'char const *Version = "$(PACKAGE_VERSION)";\n' >> $@t
+ $(AM_V_at)chmod a-w $@t
+ $(AM_V_at)mv $@t $@
+version.h: Makefile
+ $(AM_V_GEN)rm -f $@
+ $(AM_V_at)printf 'extern char const *Version;\n' > $@t
+ $(AM_V_at)chmod a-w $@t
+ $(AM_V_at)mv $@t $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/parted/command.c b/parted/command.c
new file mode 100644
index 0000000..41031ee
--- /dev/null
+++ b/parted/command.c
@@ -0,0 +1,143 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include "command.h"
+#include "ui.h"
+
+#include <parted/debug.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include "xalloc.h"
+
+Command*
+command_create (const StrList* names,
+ int (*method) (PedDevice** dev, PedDisk** diskp),
+ const StrList* summary,
+ const StrList* help,
+ const int non_interactive)
+{
+ Command* cmd;
+
+ cmd = xmalloc (sizeof (Command));
+
+ if (non_interactive)
+ cmd->non_interactive = 1;
+ else
+ cmd->non_interactive = 0;
+
+ cmd->names = (StrList*) names;
+ cmd->method = method;
+ cmd->summary = (StrList*) summary;
+ cmd->help = (StrList*) help;
+
+ return cmd;
+}
+
+void
+command_destroy (Command* cmd)
+{
+ str_list_destroy (cmd->names);
+ str_list_destroy (cmd->summary);
+ str_list_destroy (cmd->help);
+ free (cmd);
+}
+
+void
+command_register (Command** list, Command* cmd)
+{
+ int i;
+
+ for (i = 0; list [i]; i++);
+
+ list [i] = cmd;
+ list [i + 1] = (Command*) NULL;
+}
+
+Command*
+command_get (Command** list, char* name)
+{
+ int i;
+ int partial_match = -1;
+ int ambiguous = 0;
+
+ if (!name)
+ return NULL;
+
+ for (i=0; list [i]; i++) {
+ switch (str_list_match_any (list [i]->names, name)) {
+ case 2:
+ return list [i];
+
+ case 1:
+ if (!ambiguous) {
+ if (partial_match == -1) {
+ partial_match = i;
+ } else {
+ partial_match = -1;
+ ambiguous = 1;
+ }
+ }
+ }
+ }
+
+ if (partial_match == -1)
+ return NULL;
+ else
+ return list [partial_match];
+}
+
+StrList*
+command_get_names (Command** list)
+{
+ Command** walk;
+ StrList* result = NULL;
+
+ for (walk = list; *walk; walk++)
+ result = str_list_join (result,
+ str_list_duplicate ((*walk)->names));
+ return result;
+}
+
+void
+command_print_summary (Command* cmd)
+{
+ if (cmd->summary == NULL)
+ return;
+ fputs (" ", stdout);
+ str_list_print_wrap (cmd->summary, screen_width(), 2, 8, stdout);
+ putchar ('\n');
+}
+
+void
+command_print_help (Command* cmd)
+{
+ command_print_summary (cmd);
+ if (cmd->help) {
+ fputs ("\n\t", stdout);
+ str_list_print_wrap (cmd->help, screen_width(), 8, 8, stdout);
+ }
+}
+
+int
+command_run (Command* cmd, PedDevice** dev, PedDisk** diskp)
+{
+ return cmd->method (dev, diskp);
+}
diff --git a/parted/command.h b/parted/command.h
new file mode 100644
index 0000000..c307dca
--- /dev/null
+++ b/parted/command.h
@@ -0,0 +1,48 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2000, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef COMMAND_H_INCLUDED
+#define COMMAND_H_INCLUDED
+
+#include <parted/parted.h>
+#include "strlist.h"
+
+typedef struct {
+ StrList* names;
+ int (*method) (PedDevice** dev, PedDisk** diskp);
+ StrList* summary;
+ StrList* help;
+ int non_interactive:1;
+} Command;
+
+extern Command* command_create (const StrList* names,
+ int (*method) (PedDevice** dev, PedDisk** diskp),
+ const StrList* summary,
+ const StrList* help,
+ int non_interactive);
+extern void command_destroy (Command* cmd);
+void command_register (Command** list, Command* cmd);
+
+extern Command* command_get (Command** list, char* name);
+extern StrList* command_get_names (Command** list);
+extern void command_print_summary (Command* cmd);
+extern void command_print_help (Command* cmd);
+extern int command_run (Command* cmd, PedDevice** dev, PedDisk** diskp);
+
+#endif /* COMMAND_H_INCLUDED */
diff --git a/parted/jsonwrt.c b/parted/jsonwrt.c
new file mode 100644
index 0000000..d562133
--- /dev/null
+++ b/parted/jsonwrt.c
@@ -0,0 +1,225 @@
+/*
+ * JSON output formatting functions.
+ *
+ * No copyright is claimed. This code is in the public domain; do with
+ * it what you wish.
+ *
+ * Written by Karel Zak <kzak@redhat.com>
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <inttypes.h>
+#include <ctype.h>
+#include <c-ctype.h>
+#include <assert.h>
+#include "jsonwrt.h"
+
+/*
+ * Requirements enumerated via testing (V8, Firefox, IE11):
+ *
+ * var charsToEscape = [];
+ * for (var i = 0; i < 65535; i += 1) {
+ * try {
+ * JSON.parse('{"sample": "' + String.fromCodePoint(i) + '"}');
+ * } catch (e) {
+ * charsToEscape.push(i);
+ * }
+ * }
+ */
+static void fputs_quoted_case_json(const char *data, FILE *out, int dir)
+{
+ const char *p;
+
+ fputc('"', out);
+ for (p = data; p && *p; p++) {
+
+ const unsigned int c = (unsigned int) *p;
+
+ /* From http://www.json.org
+ *
+ * The double-quote and backslashes would break out a string or
+ * init an escape sequence if not escaped.
+ *
+ * Note that single-quotes and forward slashes, while they're
+ * in the JSON spec, don't break double-quoted strings.
+ */
+ if (c == '"' || c == '\\') {
+ fputc('\\', out);
+ fputc(c, out);
+ continue;
+ }
+
+ /* All non-control characters OK; do the case swap as required. */
+ if (c >= 0x20) {
+ /*
+ * Don't use locale sensitive ctype.h functions for regular
+ * ASCII chars, because for example with Turkish locale
+ * (aka LANG=tr_TR.UTF-8) toupper('I') returns 'I'.
+ */
+ if (c <= 127)
+ fputc(dir == 1 ? c_toupper(c) :
+ dir == -1 ? c_tolower(c) : *p, out);
+ else
+ fputc(dir == 1 ? toupper(c) :
+ dir == -1 ? tolower(c) : *p, out);
+ continue;
+ }
+
+ /* In addition, all chars under ' ' break Node's/V8/Chrome's, and
+ * Firefox's JSON.parse function
+ */
+ switch (c) {
+ /* Handle short-hand cases to reduce output size. C
+ * has most of the same stuff here, so if there's an
+ * "Escape for C" function somewhere in the STL, we
+ * should probably be using it.
+ */
+ case '\b':
+ fputs("\\b", out);
+ break;
+ case '\t':
+ fputs("\\t", out);
+ break;
+ case '\n':
+ fputs("\\n", out);
+ break;
+ case '\f':
+ fputs("\\f", out);
+ break;
+ case '\r':
+ fputs("\\r", out);
+ break;
+ default:
+ /* Other assorted control characters */
+ fprintf(out, "\\u00%02x", c);
+ break;
+ }
+ }
+ fputc('"', out);
+}
+
+#define fputs_quoted_json(_d, _o) fputs_quoted_case_json(_d, _o, 0)
+#define fputs_quoted_json_upper(_d, _o) fputs_quoted_case_json(_d, _o, 1)
+#define fputs_quoted_json_lower(_d, _o) fputs_quoted_case_json(_d, _o, -1)
+
+void ul_jsonwrt_init(struct ul_jsonwrt *fmt, FILE *out, int indent)
+{
+ fmt->out = out;
+ fmt->indent = indent;
+ fmt->after_close = 0;
+}
+
+void ul_jsonwrt_indent(struct ul_jsonwrt *fmt)
+{
+ int i;
+
+ for (i = 0; i < fmt->indent; i++)
+ fputs(" ", fmt->out);
+}
+
+void ul_jsonwrt_open(struct ul_jsonwrt *fmt, const char *name, int type)
+{
+ if (name) {
+ if (fmt->after_close)
+ fputs(",\n", fmt->out);
+ ul_jsonwrt_indent(fmt);
+ fputs_quoted_json_lower(name, fmt->out);
+ } else {
+ if (fmt->after_close)
+ fputs(",", fmt->out);
+ else
+ ul_jsonwrt_indent(fmt);
+ }
+
+ switch (type) {
+ case UL_JSON_OBJECT:
+ fputs(name ? ": {\n" : "{\n", fmt->out);
+ fmt->indent++;
+ break;
+ case UL_JSON_ARRAY:
+ fputs(name ? ": [\n" : "[\n", fmt->out);
+ fmt->indent++;
+ break;
+ case UL_JSON_VALUE:
+ fputs(name ? ": " : " ", fmt->out);
+ break;
+ }
+ fmt->after_close = 0;
+}
+
+void ul_jsonwrt_close(struct ul_jsonwrt *fmt, int type)
+{
+ if (fmt->indent == 1) {
+ fputs("\n}\n", fmt->out);
+ fmt->indent--;
+ fmt->after_close = 1;
+ return;
+ }
+ assert(fmt->indent > 0);
+
+ switch (type) {
+ case UL_JSON_OBJECT:
+ fmt->indent--;
+ fputc('\n', fmt->out);
+ ul_jsonwrt_indent(fmt);
+ fputs("}", fmt->out);
+ break;
+ case UL_JSON_ARRAY:
+ fmt->indent--;
+ fputc('\n', fmt->out);
+ ul_jsonwrt_indent(fmt);
+ fputs("]", fmt->out);
+ break;
+ case UL_JSON_VALUE:
+ break;
+ }
+
+ fmt->after_close = 1;
+}
+
+void ul_jsonwrt_value_raw(struct ul_jsonwrt *fmt,
+ const char *name, const char *data)
+{
+ ul_jsonwrt_value_open(fmt, name);
+ if (data && *data)
+ fputs(data, fmt->out);
+ else
+ fputs("null", fmt->out);
+ ul_jsonwrt_value_close(fmt);
+}
+
+void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt,
+ const char *name, const char *data)
+{
+ ul_jsonwrt_value_open(fmt, name);
+ if (data)
+ fputs_quoted_json(data, fmt->out);
+ else
+ fputs("null", fmt->out);
+ ul_jsonwrt_value_close(fmt);
+}
+
+void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt,
+ const char *name, uint64_t data)
+{
+ ul_jsonwrt_value_open(fmt, name);
+ fprintf(fmt->out, "%"PRIu64, data);
+ ul_jsonwrt_value_close(fmt);
+}
+
+void ul_jsonwrt_value_boolean(struct ul_jsonwrt *fmt,
+ const char *name, int data)
+{
+ ul_jsonwrt_value_open(fmt, name);
+ fputs(data ? "true" : "false", fmt->out);
+ ul_jsonwrt_value_close(fmt);
+}
+
+void ul_jsonwrt_value_null(struct ul_jsonwrt *fmt,
+ const char *name)
+{
+ ul_jsonwrt_value_open(fmt, name);
+ fputs("null", fmt->out);
+ ul_jsonwrt_value_close(fmt);
+}
diff --git a/parted/jsonwrt.h b/parted/jsonwrt.h
new file mode 100644
index 0000000..4587b60
--- /dev/null
+++ b/parted/jsonwrt.h
@@ -0,0 +1,46 @@
+#ifndef UTIL_LINUX_JSONWRT_H
+#define UTIL_LINUX_JSONWRT_H
+
+enum {
+ UL_JSON_OBJECT,
+ UL_JSON_ARRAY,
+ UL_JSON_VALUE
+};
+
+struct ul_jsonwrt {
+ FILE *out;
+ int indent;
+
+ unsigned int after_close :1;
+};
+
+void ul_jsonwrt_init(struct ul_jsonwrt *fmt, FILE *out, int indent);
+void ul_jsonwrt_indent(struct ul_jsonwrt *fmt);
+void ul_jsonwrt_open(struct ul_jsonwrt *fmt, const char *name, int type);
+void ul_jsonwrt_close(struct ul_jsonwrt *fmt, int type);
+
+#define ul_jsonwrt_root_open(_f) ul_jsonwrt_open(_f, NULL, UL_JSON_OBJECT)
+#define ul_jsonwrt_root_close(_f) ul_jsonwrt_close(_f, UL_JSON_OBJECT)
+
+#define ul_jsonwrt_array_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_ARRAY)
+#define ul_jsonwrt_array_close(_f) ul_jsonwrt_close(_f, UL_JSON_ARRAY)
+
+#define ul_jsonwrt_object_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_OBJECT)
+#define ul_jsonwrt_object_close(_f) ul_jsonwrt_close(_f, UL_JSON_OBJECT)
+
+#define ul_jsonwrt_value_open(_f, _n) ul_jsonwrt_open(_f, _n, UL_JSON_VALUE)
+#define ul_jsonwrt_value_close(_f) ul_jsonwrt_close(_f, UL_JSON_VALUE)
+
+
+void ul_jsonwrt_value_raw(struct ul_jsonwrt *fmt,
+ const char *name, const char *data);
+void ul_jsonwrt_value_s(struct ul_jsonwrt *fmt,
+ const char *name, const char *data);
+void ul_jsonwrt_value_u64(struct ul_jsonwrt *fmt,
+ const char *name, uint64_t data);
+void ul_jsonwrt_value_boolean(struct ul_jsonwrt *fmt,
+ const char *name, int data);
+void ul_jsonwrt_value_null(struct ul_jsonwrt *fmt,
+ const char *name);
+
+#endif /* UTIL_LINUX_JSONWRT_H */
diff --git a/parted/parted.c b/parted/parted.c
new file mode 100644
index 0000000..3abb52f
--- /dev/null
+++ b/parted/parted.c
@@ -0,0 +1,2699 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2003, 2005-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+#include <stdbool.h>
+#include <uuid/uuid.h>
+
+#include "argmatch.h"
+#include "closeout.h"
+#include "configmake.h"
+#include "version-etc.h"
+#include "command.h"
+#include "ui.h"
+#include "progname.h"
+#include "table.h"
+#include "version.h"
+
+#define AUTHORS \
+ "<http://git.debian.org/?p=parted/parted.git;a=blob_plain;f=AUTHORS>"
+
+/* The official name of this program (e.g., no `g' prefix). */
+#define PROGRAM_NAME "parted"
+
+#define N_(String) String
+#if ENABLE_NLS
+# include <libintl.h>
+# include <locale.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include "c-ctype.h"
+#include "c-strcase.h"
+#include "xalloc.h"
+#include "jsonwrt.h"
+
+#ifdef ENABLE_MTRACE
+#include <mcheck.h>
+#endif
+
+#include <getopt.h>
+
+/* minimum amount of free space to leave, or maximum amount to gobble up */
+#define MIN_FREESPACE (1000 * 2) /* 1000k */
+
+static int MEGABYTE_SECTORS (PedDevice* dev)
+{
+ return PED_MEGABYTE_SIZE / dev->sector_size;
+}
+
+/* For long options that have no equivalent short option, use a
+ non-character as a pseudo short option, starting with CHAR_MAX + 1. */
+enum
+{
+ PRETEND_INPUT_TTY = CHAR_MAX + 1,
+};
+
+/* Output modes */
+enum
+{
+ HUMAN,
+ MACHINE,
+ JSON
+};
+
+enum
+{
+ ALIGNMENT_NONE = 2,
+ ALIGNMENT_CYLINDER,
+ ALIGNMENT_MINIMAL,
+ ALIGNMENT_OPTIMAL
+};
+
+static char const *const align_args[] =
+{
+ "none",
+ "cylinder",
+ "minimal",
+ "optimal",
+ NULL
+};
+
+static int const align_types[] =
+{
+ ALIGNMENT_NONE,
+ ALIGNMENT_CYLINDER,
+ ALIGNMENT_MINIMAL,
+ ALIGNMENT_OPTIMAL
+};
+ARGMATCH_VERIFY (align_args, align_types);
+
+typedef struct {
+ time_t last_update;
+ time_t predicted_time_left;
+} TimerContext;
+
+static struct option const options[] = {
+ /* name, has-arg, string-return-val, char-return-val */
+ {"help", 0, NULL, 'h'},
+ {"list", 0, NULL, 'l'},
+ {"machine", 0, NULL, 'm'},
+ {"json", 0, NULL, 'j'},
+ {"script", 0, NULL, 's'},
+ {"fix", 0, NULL, 'f'},
+ {"version", 0, NULL, 'v'},
+ {"align", required_argument, NULL, 'a'},
+ {"-pretend-input-tty", 0, NULL, PRETEND_INPUT_TTY},
+ {NULL, 0, NULL, 0}
+};
+
+static const char *const options_help [][2] = {
+ {"help", N_("displays this help message")},
+ {"list", N_("lists partition layout on all block devices")},
+ {"machine", N_("displays machine parseable output")},
+ {"json", N_("displays JSON output")},
+ {"script", N_("never prompts for user intervention")},
+ {"fix", N_("in script mode, fix instead of abort when asked")},
+ {"version", N_("displays the version")},
+ {"align=[none|cyl|min|opt]", N_("alignment for new partitions")},
+ {NULL, NULL}
+};
+
+int opt_script_mode = 0;
+int opt_fix_mode = 0;
+int pretend_input_tty = 0;
+int opt_output_mode = HUMAN;
+int disk_is_modified = 0;
+int is_toggle_mode = 0;
+int alignment = ALIGNMENT_OPTIMAL;
+
+static const char* number_msg = N_(
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n");
+
+static const char* label_type_msg_start = N_("LABEL-TYPE is one of: ");
+static const char* flag_msg_start = N_("FLAG is one of: ");
+static const char* disk_flag_msg_start = N_("FLAG is one of: ");
+static const char* unit_msg_start = N_("UNIT is one of: ");
+static const char* min_or_opt_msg = N_("desired alignment: minimum or optimal");
+static const char* part_type_msg = N_("PART-TYPE is one of: primary, logical, "
+ "extended\n");
+static const char* fs_type_msg_start = N_("FS-TYPE is one of: ");
+static const char* start_end_msg = N_("START and END are disk locations, such as "
+ "4GB or 10%. Negative values count from the end of the disk. "
+ "For example, -1s specifies exactly the last sector.\n");
+static const char* end_msg = N_("END is disk location, such as "
+ "4GB or 10%. Negative value counts from the end of the disk. "
+ "For example, -1s specifies exactly the last sector.\n");
+static const char* state_msg = N_("STATE is one of: on, off\n");
+static const char* device_msg = N_("DEVICE is usually /dev/hda or /dev/sda\n");
+static const char* name_msg = N_("NAME is any word you want\n");
+static const char* type_msg = N_("TYPE_ID is a value between 0x01 and 0xff, "
+ "TYPE_UUID is a UUID\n");
+
+static const char* copyright_msg = N_(
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n\n");
+
+static char* label_type_msg;
+static char* flag_msg;
+static char* disk_flag_msg;
+static char* unit_msg;
+
+static char* mkpart_fs_type_msg;
+
+static Command* commands [256] = {NULL};
+static PedTimer* g_timer;
+static TimerContext timer_context;
+
+static struct ul_jsonwrt json;
+
+static int _print_list ();
+static void _done (PedDevice* dev, PedDisk *diskp);
+static bool partition_align_check (PedDisk const *disk,
+ PedPartition const *part, enum AlignmentType a_type,
+ char **align_err);
+
+static void
+_timer_handler (PedTimer* timer, void* context)
+{
+ TimerContext* tcontext = (TimerContext*) context;
+ int draw_this_time;
+
+ if (opt_script_mode || !isatty(fileno(stdout)))
+ return;
+
+ if (tcontext->last_update != timer->now && timer->now > timer->start) {
+ tcontext->predicted_time_left
+ = timer->predicted_end - timer->now;
+ tcontext->last_update = timer->now;
+ draw_this_time = 1;
+ } else {
+ draw_this_time = 0;
+ }
+
+ if (draw_this_time) {
+ wipe_line ();
+
+ if (timer->state_name)
+ printf ("%s... ", timer->state_name);
+ printf (_("%0.f%%\t(time left %.2d:%.2d)"),
+ (double) (100.0f * timer->frac),
+ (int) (tcontext->predicted_time_left / 60),
+ (int) (tcontext->predicted_time_left % 60));
+
+ fflush (stdout);
+ }
+}
+
+static int
+_partition_warn_busy (PedPartition* part)
+{
+ char* path;
+
+ if (ped_partition_is_busy (part)) {
+ path = ped_partition_get_path (part);
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_YES_NO,
+ _("Partition %s is being used. Are you sure you " \
+ "want to continue?"),
+ path) != PED_EXCEPTION_YES)
+ {
+ free (path);
+ return 0;
+ }
+ free (path);
+ }
+ return 1;
+}
+
+static int
+_disk_warn_busy (PedDisk* disk)
+{
+ if (ped_device_is_busy (disk->dev))
+ return ped_exception_throw (
+ (opt_script_mode
+ ? PED_EXCEPTION_ERROR
+ : PED_EXCEPTION_WARNING),
+ PED_EXCEPTION_IGNORE_CANCEL,
+ _("Partition(s) on %s are being used."),
+ disk->dev->path) == PED_EXCEPTION_IGNORE;
+
+ return 1;
+}
+
+static int
+_disk_warn_loss (PedDisk* disk)
+{
+ return ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_YES_NO,
+ _("The existing disk label on %s will be destroyed "
+ "and all data on this disk will be lost. Do you "
+ "want to continue?"),
+ disk->dev->path) == PED_EXCEPTION_YES;
+}
+
+/* This function changes "sector" to "new_sector" if the new value lies
+ * within the required range.
+ */
+static int
+snap (PedSector* sector, PedSector new_sector, PedGeometry* range)
+{
+ PED_ASSERT (ped_geometry_test_sector_inside (range, *sector));
+ if (!ped_geometry_test_sector_inside (range, new_sector))
+ return 0;
+ *sector = new_sector;
+ return 1;
+}
+
+typedef enum {
+ MOVE_NO = 0,
+ MOVE_STILL = 1,
+ MOVE_UP = 2,
+ MOVE_DOWN = 4
+} EMoves;
+
+enum { /* Don't change these values */
+ SECT_START = 0,
+ SECT_END = -1
+};
+
+/* Find the preferred way to adjust the sector s inside range.
+ * If a move isn't allowed or is out of range it can't be selected.
+ * what contains SECT_START if the sector to adjust is a start sector
+ * or SECT_END if it's an end one.
+ * The preferred move is to the nearest allowed boundary of the part
+ * partition (if at equal distance: to start if SECT_START or to end
+ * if SECT_END).
+ * The distance is returned in dist.
+ */
+static EMoves
+prefer_snap (PedSector s, int what, PedGeometry* range, EMoves* allow,
+ PedPartition* part, PedSector* dist)
+{
+ PedSector up_dist = -1, down_dist = -1;
+ PedSector new_sect;
+ EMoves move;
+
+ PED_ASSERT (what == SECT_START || what == SECT_END);
+
+ if (!(*allow & (MOVE_UP | MOVE_DOWN))) {
+ *dist = 0;
+ return MOVE_STILL;
+ }
+
+ if (*allow & MOVE_UP) {
+ new_sect = part->geom.end + 1 + what;
+ if (ped_geometry_test_sector_inside (range, new_sect))
+ up_dist = new_sect - s;
+ else
+ *allow &= ~MOVE_UP;
+ }
+
+ if (*allow & MOVE_DOWN) {
+ new_sect = part->geom.start + what;
+ if (ped_geometry_test_sector_inside (range, new_sect))
+ down_dist = s - new_sect;
+ else
+ *allow &= ~MOVE_DOWN;
+ }
+
+ move = MOVE_STILL;
+ if ((*allow & MOVE_UP) && (*allow & MOVE_DOWN)) {
+ if (down_dist < up_dist || (down_dist == up_dist
+ && what == SECT_START) )
+ move = MOVE_DOWN;
+ else if (up_dist < down_dist || (down_dist == up_dist
+ && what == SECT_END) )
+ move = MOVE_UP;
+ else
+ PED_ASSERT (0);
+ } else if (*allow & MOVE_UP)
+ move = MOVE_UP;
+ else if (*allow & MOVE_DOWN)
+ move = MOVE_DOWN;
+
+ *dist = ( move == MOVE_DOWN ? down_dist :
+ ( move == MOVE_UP ? up_dist :
+ 0 ) );
+ return move;
+}
+
+/* Snaps a partition to nearby partition boundaries. This is useful for
+ * gobbling up small amounts of free space, and also for reinterpreting small
+ * changes to a partition as non-changes (eg: perhaps the user only wanted to
+ * resize the end of a partition).
+ * Note that this isn't the end of the story... this function is
+ * always called before the constraint solver kicks in. So you don't need to
+ * worry too much about inadvertantly creating overlapping partitions, etc.
+ */
+static void
+snap_to_boundaries (PedGeometry* new_geom, PedGeometry* old_geom,
+ PedDisk* disk,
+ PedGeometry* start_range, PedGeometry* end_range)
+{
+ PedPartition* start_part;
+ PedPartition* end_part;
+ PedSector start = new_geom->start;
+ PedSector end = new_geom->end;
+ PedSector start_dist = -1, end_dist = -1;
+ EMoves start_allow, end_allow, start_want, end_want;
+ int adjacent;
+
+ start_allow = end_allow = MOVE_STILL | MOVE_UP | MOVE_DOWN;
+
+ start_part = ped_disk_get_partition_by_sector (disk, start);
+ end_part = ped_disk_get_partition_by_sector (disk, end);
+ adjacent = (start_part->geom.end + 1 == end_part->geom.start);
+
+ /* If we can snap to old_geom, then we will... */
+ /* and this will enforce the snapped positions */
+ if (old_geom) {
+ if (snap (&start, old_geom->start, start_range))
+ start_allow = MOVE_STILL;
+ if (snap (&end, old_geom->end, end_range))
+ end_allow = MOVE_STILL;
+ }
+
+ /* If start and end are on the same partition, we */
+ /* don't allow them to cross. */
+ if (start_part == end_part) {
+ start_allow &= ~MOVE_UP;
+ end_allow &= ~MOVE_DOWN;
+ }
+
+ /* Let's find our way */
+ start_want = prefer_snap (start, SECT_START, start_range, &start_allow,
+ start_part, &start_dist );
+ end_want = prefer_snap (end, SECT_END, end_range, &end_allow,
+ end_part, &end_dist );
+
+ PED_ASSERT (start_dist >= 0 && end_dist >= 0);
+
+ /* If start and end are on adjacent partitions, */
+ /* and if they would prefer crossing, then refrain */
+ /* the farthest to do so. */
+ if (adjacent && start_want == MOVE_UP && end_want == MOVE_DOWN) {
+ if (end_dist < start_dist) {
+ start_allow &= ~MOVE_UP;
+ start_want = prefer_snap (start, SECT_START,
+ start_range, &start_allow,
+ start_part, &start_dist );
+ PED_ASSERT (start_dist >= 0);
+ } else {
+ end_allow &= ~MOVE_DOWN;
+ end_want = prefer_snap (end, SECT_END,
+ end_range, &end_allow,
+ end_part, &end_dist );
+ PED_ASSERT (end_dist >= 0);
+ }
+ }
+
+ /* New positions */
+ start = ( start_want == MOVE_DOWN ? start_part->geom.start :
+ ( start_want == MOVE_UP ? start_part->geom.end + 1 :
+ start ) );
+ end = ( end_want == MOVE_DOWN ? end_part->geom.start - 1 :
+ ( end_want == MOVE_UP ? end_part->geom.end :
+ end ) );
+ PED_ASSERT (ped_geometry_test_sector_inside(start_range,start));
+ PED_ASSERT (ped_geometry_test_sector_inside (end_range, end));
+ PED_ASSERT (start <= end);
+ ped_geometry_set (new_geom, start, end - start + 1);
+}
+
+static PedConstraint*
+constraint_from_start_end (PedDevice* dev, PedGeometry* range_start,
+ PedGeometry* range_end)
+{
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ range_start, range_end, 1, dev->length);
+}
+
+
+static PedConstraint*
+constraint_from_start_end_fixed_start (PedDevice* dev, PedSector start_sector,
+ PedGeometry* range_end)
+{
+ PedGeometry range_start;
+ range_start.dev = dev;
+ range_start.start = start_sector;
+ range_start.end = start_sector;
+ range_start.length = 1;
+
+ return ped_constraint_new (ped_alignment_any, ped_alignment_any,
+ &range_start, range_end, 1, dev->length);
+}
+
+void
+help_on (char* topic)
+{
+ Command* cmd;
+
+ cmd = command_get (commands, topic);
+ if (!cmd) return;
+
+ command_print_help (cmd);
+}
+
+void
+print_commands_help ()
+{
+ int i;
+
+ for (i=0; commands [i]; i++)
+ command_print_summary (commands [i]);
+}
+
+void
+print_options_help ()
+{
+ int i;
+
+ for (i=0; options_help [i][0]; i++) {
+ printf (" -%c, --%-25.25s %s\n",
+ options_help [i][0][0],
+ options_help [i][0],
+ _(options_help [i][1]));
+ }
+}
+
+int
+do_help (PedDevice** dev, PedDisk** diskp)
+{
+ if (command_line_get_word_count ()) {
+ char* word = command_line_pop_word ();
+ if (word) {
+ help_on (word);
+ free (word);
+ }
+ } else {
+ print_commands_help();
+ }
+ return 1;
+}
+
+static int
+do_mklabel (PedDevice** dev, PedDisk** diskp)
+{
+ PedDisk* disk;
+ const PedDiskType* type = NULL;
+
+ if (*diskp)
+ disk = *diskp;
+ else {
+ ped_exception_fetch_all ();
+ disk = ped_disk_new (*dev);
+ if (!disk) ped_exception_catch ();
+ ped_exception_leave_all ();
+ }
+
+ if (!command_line_get_disk_type (_("New disk label type?"), &type))
+ goto error;
+
+ if (disk) {
+ if (!_disk_warn_busy (disk))
+ goto error;
+ if (!opt_script_mode && !_disk_warn_loss (disk))
+ goto error;
+ }
+
+ disk = ped_disk_new_fresh (*dev, type);
+ if (!disk)
+ goto error;
+
+ if (!ped_disk_commit (disk))
+ goto error_destroy_disk;
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+ if (*diskp)
+ ped_disk_destroy (*diskp);
+ *diskp = disk;
+ return 1;
+
+error_destroy_disk:
+ ped_disk_destroy (disk);
+ *diskp = 0;
+error:
+ return 0;
+}
+
+/* Strip blanks from the end of string STR, in place. */
+void _strip_trailing_spaces(char *str)
+{
+ if (!str)
+ return;
+ size_t i = strlen(str);
+ while (i && c_isblank(str[--i]))
+ str[i]='\0';
+}
+
+/* Return true if the unit is one of the supported IEC unit values */
+static bool
+_is_unit_IEC(const PedUnit unit) {
+ return (unit == PED_UNIT_KIBIBYTE) || (unit == PED_UNIT_MEBIBYTE) ||
+ (unit == PED_UNIT_GIBIBYTE) || (unit == PED_UNIT_TEBIBYTE);
+}
+
+/* Return true, if str ends with IEC units. */
+static bool
+_string_ends_with_iec_unit(const char *str)
+{
+ /* 3 characters for the IEC unit and at least 1 digit */
+ if (!str || strlen(str) < 4)
+ return false;
+
+ char const *p = str + strlen(str) - 3;
+ PedUnit unit = ped_unit_get_by_name(p);
+ if (unit == -1) {
+ return false;
+ }
+ return _is_unit_IEC(unit);
+}
+
+/* Return true if str ends with explicit unit identifier.
+ * Do not parse the unit, just check if the unit is specified.
+ * This function expects trailing spaces to be already stripped.
+ */
+static bool
+_string_has_unit_suffix(const char *str)
+{
+ /* At least 1 digit and 1 character to meet the condition */
+ if (!str || strlen(str) < 2)
+ return false;
+
+ if (!isdigit(str[strlen(str) - 1]))
+ return true;
+
+ return false;
+}
+
+/* If the selected unit is one of KiB, MiB, GiB or TiB and the partition is not
+ * only 1 sector long, then adjust the end so that it is one sector before the
+ * given position. Also adjust range_end accordingly. Thus next partition can
+ * start immediately after this one.
+ *
+ * To be called after end sector is read from the user.
+ *
+ * https://lists.gnu.org/archive/html/bug-parted/2011-10/msg00009.html
+ */
+static void
+_adjust_end_if_iec (PedSector* start, PedSector* end,
+ PedGeometry* range_end, char* end_input)
+{
+ PED_ASSERT(start);
+ PED_ASSERT(end);
+ PED_ASSERT(range_end);
+
+ /* 1s partition - do not move the end */
+ if (*start == *end)
+ return;
+
+ _strip_trailing_spaces(end_input);
+ PedUnit unit = ped_unit_get_default();
+ if (_string_ends_with_iec_unit(end_input) ||
+ (!_string_has_unit_suffix(end_input) && _is_unit_IEC(unit))) {
+ *end -= 1;
+ range_end->start -= 1;
+ range_end->end -= 1;
+ }
+}
+
+static int
+do_mkpart (PedDevice** dev, PedDisk** diskp)
+{
+ PedDisk* disk;
+ PedPartition* part;
+ PedPartitionType part_type;
+ const PedFileSystemType* fs_type = ped_file_system_type_get ("ext2");
+ PedSector start = 0, end = 0;
+ PedGeometry *range_start = NULL, *range_end = NULL;
+ PedConstraint* user_constraint;
+ PedConstraint* dev_constraint;
+ PedConstraint* final_constraint;
+ char* peek_word;
+ char* part_name = NULL;
+ char *start_usr = NULL, *end_usr = NULL;
+ char *start_sol = NULL, *end_sol = NULL;
+ char *end_input = NULL;
+
+ if (*diskp)
+ disk = *diskp;
+ else {
+ disk = ped_disk_new (*dev);
+ *diskp = disk;
+ }
+ if (!disk)
+ goto error;
+
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
+ alignment == ALIGNMENT_CYLINDER))
+ goto error;
+
+ if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED)) {
+ part_type = PED_PARTITION_NORMAL;
+ } else {
+ if (!command_line_get_part_type (_("Partition type?"),
+ disk, &part_type))
+ goto error;
+ }
+
+ /* The undocumented feature that mkpart sometimes takes a
+ partition name is next to useless, at least with a dvh
+ partition table, since it makes the "mkpart" command
+ fail unconditionally for a primary partition. E.g.,
+ mkpart primary any-name xfs 4096s 5000s
+ requires the name, yet always fails, saying that only
+ logical partitions may have names.
+ If you want a name, use parted's separate "name" command. */
+
+ if (ped_disk_type_check_feature (disk->type,
+ PED_DISK_TYPE_PARTITION_NAME)
+ && ! (strcmp (disk->type->name, "dvh") == 0
+ && part_type != PED_PARTITION_LOGICAL))
+ part_name = command_line_get_word (_("Partition name?"),
+ "", NULL, 1);
+
+ peek_word = command_line_peek_word ();
+ if (part_type == PED_PARTITION_EXTENDED
+ || (peek_word && (isdigit (peek_word[0]) || peek_word[0] == '-'))) {
+ fs_type = NULL;
+ free (peek_word);
+ } else {
+ free (peek_word);
+ if (!command_line_get_fs_type (_("File system type?"),
+ &fs_type))
+ goto error;
+ }
+
+ if (!command_line_get_sector (_("Start?"), *dev, &start, &range_start, NULL))
+ goto error;
+ if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input))
+ goto error;
+
+ _adjust_end_if_iec(&start, &end, range_end, end_input);
+
+ /* processing starts here */
+ part = ped_partition_new (disk, part_type, fs_type, start, end);
+ if (!part)
+ goto error;
+
+ snap_to_boundaries (&part->geom, NULL, disk, range_start, range_end);
+
+ /* create constraints */
+ user_constraint = constraint_from_start_end (*dev, range_start,
+ range_end);
+ PED_ASSERT (user_constraint != NULL);
+
+ if (alignment == ALIGNMENT_OPTIMAL)
+ dev_constraint =
+ ped_device_get_optimal_aligned_constraint(*dev);
+ else if (alignment == ALIGNMENT_MINIMAL)
+ dev_constraint =
+ ped_device_get_minimal_aligned_constraint(*dev);
+ else
+ dev_constraint = ped_device_get_constraint(*dev);
+ PED_ASSERT (dev_constraint != NULL);
+
+ final_constraint = ped_constraint_intersect (user_constraint,
+ dev_constraint);
+ ped_constraint_destroy (user_constraint);
+ ped_constraint_destroy (dev_constraint);
+ if (!final_constraint)
+ goto error_destroy_simple_constraints;
+
+ /* subject to partition constraint */
+ ped_exception_fetch_all();
+ bool added_ok = ped_disk_add_partition (disk, part, final_constraint);
+ ped_constraint_destroy (final_constraint);
+ if (!added_ok) {
+ ped_exception_leave_all();
+
+ PedConstraint *constraint_any = ped_constraint_any (*dev);
+ added_ok = ped_disk_add_partition (disk, part,
+ constraint_any);
+ ped_constraint_destroy (constraint_any);
+
+ if (!added_ok)
+ goto error_destroy_simple_constraints;
+
+ if (!ped_geometry_test_sector_inside(range_start, part->geom.start) ||
+ !ped_geometry_test_sector_inside(range_end, part->geom.end)) {
+ start_usr = ped_unit_format (*dev, start);
+ end_usr = ped_unit_format (*dev, end);
+ start_sol = ped_unit_format (*dev, part->geom.start);
+ end_sol = ped_unit_format (*dev, part->geom.end);
+
+ /* In script mode failure to use specified values is fatal.
+ * However, in interactive mode, it merely elicits a warning
+ * and a prompt for whether to proceed.
+ */
+ switch (ped_exception_throw (
+ (opt_script_mode
+ ? PED_EXCEPTION_ERROR
+ : PED_EXCEPTION_WARNING),
+ (opt_script_mode
+ ? PED_EXCEPTION_CANCEL
+ : PED_EXCEPTION_YES_NO),
+ _("You requested a partition from %s to %s "
+ "(sectors %llu..%llu).\n"
+ "The closest location we can manage is "
+ "%s to %s (sectors %llu..%llu).%s"),
+ start_usr, end_usr,
+ start, end,
+ start_sol, end_sol,
+ part->geom.start, part->geom.end,
+ (opt_script_mode ? ""
+ : _("\nIs this still acceptable to you?"))))
+ {
+ case PED_EXCEPTION_YES:
+ /* all is well in this state */
+ break;
+ case PED_EXCEPTION_NO:
+ case PED_EXCEPTION_UNHANDLED:
+ default:
+ /* undo partition addition */
+ goto error_remove_part;
+ }
+ }
+
+ char *align_err = NULL;
+ if ((alignment == ALIGNMENT_OPTIMAL &&
+ !partition_align_check(disk, part, PA_OPTIMUM, &align_err)) ||
+ (alignment == ALIGNMENT_MINIMAL &&
+ !partition_align_check(disk, part, PA_MINIMUM, &align_err))) {
+ if (ped_exception_throw(
+ PED_EXCEPTION_WARNING,
+ (opt_script_mode
+ ? PED_EXCEPTION_OK
+ : PED_EXCEPTION_IGNORE_CANCEL),
+ _("The resulting partition is not properly "
+ "aligned for best performance: %s"),
+ align_err ? align_err : _("unknown (malloc failed)")) ==
+ PED_EXCEPTION_CANCEL) {
+ free(align_err);
+ /* undo partition addition */
+ goto error_remove_part;
+ }
+ free(align_err);
+ }
+ } else {
+ ped_exception_leave_all();
+ }
+ ped_exception_catch();
+
+ /* set minor attributes */
+ if (part_name)
+ if (!ped_partition_set_name (part, part_name))
+ goto error_remove_part;
+ free (part_name); /* avoid double-free upon failure */
+ part_name = NULL;
+
+ if (!ped_partition_set_system (part, fs_type))
+ goto error_remove_part;
+ if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
+ ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
+
+ if (!ped_disk_commit (disk))
+ goto error_remove_part;
+
+ /* clean up */
+ if (range_start != NULL)
+ ped_geometry_destroy (range_start);
+ if (range_end != NULL)
+ ped_geometry_destroy (range_end);
+
+ free (start_usr);
+ free (end_usr);
+ free (start_sol);
+ free (end_sol);
+ free(end_input);
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error_remove_part:
+ ped_disk_remove_partition (disk, part);
+error_destroy_simple_constraints:
+ ped_partition_destroy (part);
+error:
+ free (part_name);
+ if (range_start != NULL)
+ ped_geometry_destroy (range_start);
+ if (range_end != NULL)
+ ped_geometry_destroy (range_end);
+
+ free (start_usr);
+ free (end_usr);
+ free (start_sol);
+ free (end_sol);
+ free(end_input);
+
+ return 0;
+}
+
+static int
+do_name (PedDevice** dev, PedDisk** diskp)
+{
+ PedPartition* part = NULL;
+ char* name;
+
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ if (!ped_disk_type_check_feature((*diskp)->type, PED_DISK_TYPE_PARTITION_NAME)) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s disk labels do not support partition name."),
+ (*diskp)->type->name);
+ goto error;
+ }
+
+ if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
+ goto error;
+
+ name = command_line_get_word (_("Partition name?"),
+ ped_partition_get_name (part), NULL, 0);
+ if (!name)
+ goto error;
+ if (!ped_partition_set_name (part, name))
+ goto error_free_name;
+ free (name);
+
+ if (!ped_disk_commit (*diskp))
+ goto error;
+ return 1;
+
+error_free_name:
+ free (name);
+error:
+ return 0;
+}
+
+static int
+do_type (PedDevice** dev, PedDisk** diskp)
+{
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ bool has_type_id = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_TYPE_ID);
+ bool has_type_uuid = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_TYPE_UUID);
+
+ PED_ASSERT (!(has_type_id && has_type_uuid));
+
+ if (!has_type_id && !has_type_uuid) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("%s disk labels do not support partition type."),
+ (*diskp)->type->name);
+ goto error;
+ }
+
+ PedPartition* part = NULL;
+ if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
+ goto error;
+
+ char* input = NULL;
+
+ if (has_type_id) {
+ uint8_t type_id = ped_partition_get_type_id (part);
+ static char buf[8];
+ snprintf(buf, 8, "0x%02x", type_id);
+
+ input = command_line_get_word (_("Partition type-id?"), buf, NULL, 0);
+ if (!input)
+ goto error;
+
+ unsigned int tmp = strtol (input, (char**) NULL, 16);
+ if (tmp < 0x01 || tmp > 0xff) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Invalid type-id."));
+ goto error_free_input;
+ }
+
+ if (!ped_partition_set_type_id (part, tmp))
+ goto error_free_input;
+ }
+
+ if (has_type_uuid) {
+ uint8_t* type_uuid = ped_partition_get_type_uuid (part);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (type_uuid, buf);
+ free (type_uuid);
+
+ input = command_line_get_word (_("Partition type-uuid?"), buf, NULL, 0);
+ if (!input)
+ goto error;
+
+ uuid_t tmp;
+ if (uuid_parse (input, tmp) != 0 || uuid_is_null (tmp)) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Invalid type-uuid."));
+ goto error_free_input;
+ }
+
+ if (!ped_partition_set_type_uuid (part, tmp))
+ goto error_free_input;
+ }
+
+ free (input);
+
+ // Reset the fs_type based on the filesystem, if it exists
+ part->fs_type = ped_file_system_probe (&part->geom);
+
+ if (!ped_disk_commit (*diskp))
+ goto error;
+ return 1;
+
+error_free_input:
+ free (input);
+error:
+ return 0;
+}
+
+static char*
+partition_print_flags (PedPartition const *part)
+{
+ char *res = xstrdup ("");
+ if (!part)
+ return res;
+
+ PedPartitionFlag flag;
+ size_t res_buf_len = 1;
+ char const *sep = "";
+ for (flag = ped_partition_flag_next (0); flag;
+ flag = ped_partition_flag_next (flag))
+ {
+ if (ped_partition_get_flag (part, flag))
+ {
+ const char *name = _(ped_partition_flag_get_name (flag));
+ size_t new_len = res_buf_len + strlen (sep) + strlen (name);
+ res = xrealloc (res, new_len);
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
+ res_buf_len = new_len;
+ sep = ", ";
+ }
+ }
+
+ return res;
+}
+
+static void
+partition_print_flags_json (PedPartition const *part)
+{
+ if (!part)
+ return;
+
+ int did_open_array = 0;
+
+ PedPartitionFlag flag;
+ for (flag = ped_partition_flag_next (0); flag;
+ flag = ped_partition_flag_next (flag))
+ {
+ if (ped_partition_get_flag (part, flag))
+ {
+ if (!did_open_array)
+ ul_jsonwrt_array_open (&json, "flags");
+ did_open_array = 1;
+
+ ul_jsonwrt_value_s (&json, NULL, ped_partition_flag_get_name (flag));
+ }
+ }
+
+ if (did_open_array)
+ ul_jsonwrt_array_close (&json);
+}
+
+static int
+partition_print (PedPartition* part)
+{
+ return 1;
+}
+
+static char*
+disk_print_flags (PedDisk const *disk)
+{
+ char *res = xstrdup ("");
+ if (!disk)
+ return res;
+
+ PedDiskFlag flag;
+ size_t res_buf_len = 1;
+ char const *sep = "";
+ for (flag = ped_disk_flag_next (0); flag;
+ flag = ped_disk_flag_next (flag))
+ {
+ if (ped_disk_get_flag (disk, flag))
+ {
+ const char *name = _(ped_disk_flag_get_name (flag));
+ size_t new_len = res_buf_len + strlen (sep) + strlen (name);
+ res = xrealloc (res, new_len);
+ stpcpy (stpcpy (res + res_buf_len - 1, sep), name);
+ res_buf_len = new_len;
+ sep = ", ";
+ }
+ }
+
+ return res;
+}
+
+static void
+disk_print_flags_json (PedDisk const *disk)
+{
+ if (!disk)
+ return;
+
+ int did_open_array = 0;
+
+ PedDiskFlag flag;
+ for (flag = ped_disk_flag_next (0); flag;
+ flag = ped_disk_flag_next (flag))
+ {
+ if (ped_disk_get_flag (disk, flag))
+ {
+ if (!did_open_array)
+ ul_jsonwrt_array_open (&json, "flags");
+ did_open_array = 1;
+
+ ul_jsonwrt_value_s (&json, NULL, ped_disk_flag_get_name (flag));
+ }
+ }
+
+ if (did_open_array)
+ ul_jsonwrt_array_close (&json);
+}
+
+static void
+_print_disk_geometry (const PedDevice *dev)
+{
+ PED_ASSERT (dev != NULL);
+ const PedCHSGeometry* chs = &dev->bios_geom;
+ char* cyl_size = ped_unit_format_custom (dev,
+ chs->heads * chs->sectors,
+ PED_UNIT_KILOBYTE);
+
+ if (opt_output_mode == MACHINE) {
+ printf ("%d:%d:%d:%s;\n",
+ chs->cylinders, chs->heads, chs->sectors, cyl_size);
+ } else if (opt_output_mode == JSON) {
+ char* tmp = ped_malloc (128);
+ snprintf (tmp, 128, "%d,%d,%d %s", chs->cylinders, chs->heads, chs->sectors, cyl_size);
+ ul_jsonwrt_value_s (&json, "geometry", tmp);
+ free (tmp);
+ } else {
+ printf (_("BIOS cylinder,head,sector geometry: %d,%d,%d. "
+ "Each cylinder is %s.\n"),
+ chs->cylinders, chs->heads, chs->sectors, cyl_size);
+ }
+
+ free (cyl_size);
+}
+
+static char *
+_escape_machine_string (const char *str)
+{
+ size_t i, j;
+ char *dest;
+
+ dest = ped_malloc (2 * strlen(str) + 1);
+ if (!dest)
+ return NULL;
+
+ for (i = 0, j = 0; str[i] != '\0'; i++, j++) {
+ switch (str[i]) {
+ case ':':
+ case '\\':
+ dest[j++] = '\\';
+ /* fallthrough */
+ default:
+ dest[j] = str[i];
+ break;
+ }
+ }
+ dest[j] = '\0';
+
+ return dest;
+}
+
+static void
+_print_disk_info (const PedDevice *dev, const PedDisk *diskp)
+{
+ char const *const transport[] = {"unknown", "scsi", "ide", "dac960",
+ "cpqarray", "file", "ataraid", "i2o",
+ "ubd", "dasd", "viodasd", "sx8", "dm",
+ "xvd", "sd/mmc", "virtblk", "aoe",
+ "md", "loopback", "nvme", "brd",
+ "pmem"};
+
+ char* start = ped_unit_format (dev, 0);
+ PedUnit default_unit = ped_unit_get_default ();
+ char* end = ped_unit_format_byte (dev, dev->length * dev->sector_size
+ - (default_unit == PED_UNIT_CHS ||
+ default_unit == PED_UNIT_CYLINDER));
+
+ const char* pt_name = diskp ? diskp->type->name : "unknown";
+ char *disk_flags = disk_print_flags (diskp);
+
+ if (opt_output_mode == MACHINE) {
+ char *escaped_path = _escape_machine_string (dev->path);
+ char *escaped_model = _escape_machine_string (dev->model);
+
+ switch (default_unit) {
+ case PED_UNIT_CHS: puts ("CHS;");
+ break;
+ case PED_UNIT_CYLINDER: puts ("CYL;");
+ break;
+ default: puts ("BYT;");
+ break;
+
+ }
+ printf ("%s:%s:%s:%lld:%lld:%s:%s:%s;\n",
+ escaped_path, end, transport[dev->type],
+ dev->sector_size, dev->phys_sector_size,
+ pt_name, escaped_model, disk_flags);
+ free (escaped_path);
+ free (escaped_model);
+ } else if (opt_output_mode == JSON) {
+ ul_jsonwrt_value_s (&json, "path", dev->path);
+ ul_jsonwrt_value_s (&json, "size", end);
+ ul_jsonwrt_value_s (&json, "model", dev->model);
+ ul_jsonwrt_value_s (&json, "transport", transport[dev->type]);
+ ul_jsonwrt_value_u64 (&json, "logical-sector-size", dev->sector_size);
+ ul_jsonwrt_value_u64 (&json, "physical-sector-size", dev->phys_sector_size);
+ ul_jsonwrt_value_s (&json, "label", pt_name);
+ if (diskp) {
+ bool has_disk_uuid = ped_disk_type_check_feature (diskp->type, PED_DISK_TYPE_DISK_UUID);
+ if (has_disk_uuid) {
+ uint8_t* uuid = ped_disk_get_uuid (diskp);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (uuid, buf);
+ ul_jsonwrt_value_s (&json, "uuid", buf);
+ free (uuid);
+ }
+ ul_jsonwrt_value_u64 (&json, "max-partitions",
+ ped_disk_get_max_primary_partition_count(diskp));
+ disk_print_flags_json (diskp);
+ }
+ } else {
+ printf (_("Model: %s (%s)\n"),
+ dev->model, transport[dev->type]);
+ printf (_("Disk %s: %s\n"), dev->path, end);
+ printf (_("Sector size (logical/physical): %lldB/%lldB\n"),
+ dev->sector_size, dev->phys_sector_size);
+ }
+
+ free (start);
+ free (end);
+
+ if (ped_unit_get_default () == PED_UNIT_CHS
+ || ped_unit_get_default () == PED_UNIT_CYLINDER)
+ _print_disk_geometry (dev);
+
+ if (opt_output_mode == HUMAN) {
+ printf (_("Partition Table: %s\n"), pt_name);
+ printf (_("Disk Flags: %s\n"), disk_flags);
+ }
+ free (disk_flags);
+}
+
+static int
+do_print (PedDevice** dev, PedDisk** diskp)
+{
+ Table* table;
+ int has_extended;
+ int has_name;
+ int has_devices_arg = 0;
+ int has_free_arg = 0;
+ int has_list_arg = 0;
+ int has_num_arg = 0;
+ char* peek_word;
+ char* start;
+ char* end;
+ char* size;
+ const char* name;
+ char* tmp;
+ wchar_t* table_rendered;
+ int ok = 1; /* default to success */
+
+ peek_word = command_line_peek_word ();
+ if (peek_word) {
+ if (strncmp (peek_word, "devices", 7) == 0) {
+ char *w = command_line_pop_word();
+ free (w);
+ has_devices_arg = 1;
+ }
+ else if (strncmp (peek_word, "free", 4) == 0) {
+ char *w = command_line_pop_word ();
+ free (w);
+ has_free_arg = 1;
+ }
+ else if (strncmp (peek_word, "list", 4) == 0 ||
+ strncmp (peek_word, "all", 3) == 0) {
+ char *w = command_line_pop_word();
+ free (w);
+ has_list_arg = 1;
+ }
+ else
+ has_num_arg = isdigit(peek_word[0]);
+
+ free (peek_word);
+ }
+
+ if (!has_devices_arg && !has_list_arg) {
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ /* Returning NULL here is an indication of failure, when in
+ script mode. Otherwise (interactive mode) it may indicate
+ a real error, but it may also indicate that the user
+ declined when asked to perform some operation. FIXME:
+ what this really needs is an API change, but a reliable
+ exit code is less important in interactive mode. */
+ if (*diskp == NULL && opt_script_mode)
+ ok = 0;
+ }
+
+ if (*diskp &&
+ ped_disk_is_flag_available(*diskp, PED_DISK_CYLINDER_ALIGNMENT))
+ if (!ped_disk_set_flag(*diskp, PED_DISK_CYLINDER_ALIGNMENT,
+ alignment == ALIGNMENT_CYLINDER))
+ return 0;
+
+ if (has_devices_arg) {
+ char* dev_name;
+ PedDevice* current_dev = NULL;
+ int status = 0;
+
+ ped_device_probe_all();
+
+ while ((current_dev = ped_device_get_next(current_dev))) {
+ end = ped_unit_format_byte (current_dev,
+ current_dev->length
+ * current_dev->sector_size);
+ printf ("%s (%s)\n", current_dev->path, end);
+ free (end);
+ }
+
+ dev_name = xstrdup ((*dev)->path);
+ ped_device_free_all ();
+
+ *dev = ped_device_get (dev_name);
+ if (*dev && ped_device_open (*dev))
+ status = 1;
+ free (dev_name);
+
+ return status;
+ }
+
+ else if (has_list_arg)
+ return _print_list ();
+
+ else if (*diskp && has_num_arg) {
+ PedPartition* part = NULL;
+ int status = 0;
+ if (command_line_get_partition ("", *diskp, &part))
+ status = partition_print (part);
+ return status;
+ }
+
+ if (opt_output_mode == JSON) {
+ ul_jsonwrt_init (&json, stdout, 0);
+ ul_jsonwrt_root_open (&json);
+ ul_jsonwrt_object_open (&json, "disk");
+ }
+
+ _print_disk_info (*dev, *diskp);
+ if (!*diskp)
+ goto nopt;
+ if (opt_output_mode == HUMAN)
+ putchar ('\n');
+
+ has_extended = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_EXTENDED);
+ has_name = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_NAME);
+ bool has_type_id = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_TYPE_ID);
+ bool has_type_uuid = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_TYPE_UUID);
+ bool has_part_uuid = ped_disk_type_check_feature ((*diskp)->type,
+ PED_DISK_TYPE_PARTITION_UUID);
+
+ PedPartition* part;
+ if (opt_output_mode == HUMAN) {
+ StrList *row1;
+
+ if (ped_unit_get_default() == PED_UNIT_CHS) {
+ row1 = str_list_create (_("Number"), _("Start"),
+ _("End"), NULL);
+ } else {
+ row1 = str_list_create (_("Number"), _("Start"),
+ _("End"), _("Size"), NULL);
+ }
+
+ if (has_extended)
+ str_list_append (row1, _("Type"));
+
+ str_list_append (row1, _("File system"));
+
+ if (has_name)
+ str_list_append (row1, _("Name"));
+
+ str_list_append (row1, _("Flags"));
+
+
+ table = table_new (str_list_length(row1));
+
+ table_add_row_from_strlist (table, row1);
+
+ for (part = ped_disk_next_partition (*diskp, NULL); part;
+ part = ped_disk_next_partition (*diskp, part)) {
+
+ if ((!has_free_arg && !ped_partition_is_active(part)) ||
+ part->type & PED_PARTITION_METADATA)
+ continue;
+
+ tmp = ped_malloc (4);
+
+ if (part->num >= 0)
+ sprintf (tmp, "%2d ", part->num);
+ else
+ sprintf (tmp, "%2s ", "");
+
+ StrList *row = str_list_create (tmp, NULL);
+ free(tmp);
+
+ start = ped_unit_format (*dev, part->geom.start);
+ end = ped_unit_format_byte (
+ *dev,
+ (part->geom.end + 1) * (*dev)->sector_size - 1);
+ size = ped_unit_format (*dev, part->geom.length);
+ if (ped_unit_get_default() == PED_UNIT_CHS) {
+ str_list_append (row, start);
+ str_list_append (row, end);
+ } else {
+ str_list_append (row, start);
+ str_list_append (row, end);
+ str_list_append (row, size);
+ }
+
+ if (!(part->type & PED_PARTITION_FREESPACE)) {
+ if (has_extended) {
+ name = ped_partition_type_get_name (part->type);
+ str_list_append (row, name);
+ }
+
+ str_list_append (row, part->fs_type ?
+ part->fs_type->name : "");
+
+ if (has_name) {
+ name = ped_partition_get_name (part);
+ str_list_append (row, name);
+ }
+
+ char *flags = partition_print_flags (part);
+ str_list_append (row, flags);
+ free (flags);
+ } else {
+ if (has_extended)
+ str_list_append (row, "");
+ str_list_append (row, _("Free Space"));
+ if (has_name)
+ str_list_append (row, "");
+ str_list_append (row, "");
+ }
+
+ //PED_ASSERT (row.cols == caption.cols)
+ table_add_row_from_strlist (table, row);
+ str_list_destroy (row);
+ free (start);
+ free (end);
+ free (size);
+ }
+
+ table_rendered = table_render (table);
+#ifdef ENABLE_NLS
+ printf("%ls\n", table_rendered);
+#else
+ printf("%s\n", table_rendered);
+#endif
+ free (table_rendered);
+ table_destroy (table);
+ str_list_destroy (row1);
+
+ } else if (opt_output_mode == JSON) {
+
+ ul_jsonwrt_array_open (&json, "partitions");
+
+ for (part = ped_disk_next_partition (*diskp, NULL); part;
+ part = ped_disk_next_partition (*diskp, part)) {
+
+ if ((!has_free_arg && !ped_partition_is_active(part)) ||
+ part->type & PED_PARTITION_METADATA)
+ continue;
+
+ ul_jsonwrt_object_open (&json, NULL);
+
+ ul_jsonwrt_value_u64 (&json, "number", part->num >= 0 ? part->num : 0);
+
+ tmp = ped_unit_format (*dev, part->geom.start);
+ ul_jsonwrt_value_s (&json, "start", tmp);
+ free (tmp);
+
+ tmp = ped_unit_format_byte (*dev, (part->geom.end + 1) * (*dev)->sector_size - 1);
+ ul_jsonwrt_value_s (&json, "end", tmp);
+ free (tmp);
+
+ if (ped_unit_get_default() != PED_UNIT_CHS) {
+ tmp = ped_unit_format (*dev, part->geom.length);
+ ul_jsonwrt_value_s (&json, "size", tmp);
+ free (tmp);
+ }
+
+ name = ped_partition_type_get_name (part->type);
+ ul_jsonwrt_value_s (&json, "type", name);
+
+ if (!(part->type & PED_PARTITION_FREESPACE)) {
+
+ if (has_type_id) {
+ uint8_t type_id = ped_partition_get_type_id (part);
+ static char buf[8];
+ snprintf(buf, 8, "0x%02x", type_id);
+ ul_jsonwrt_value_s (&json, "type-id", buf);
+ }
+
+ if (has_type_uuid) {
+ uint8_t* type_uuid = ped_partition_get_type_uuid (part);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (type_uuid, buf);
+ ul_jsonwrt_value_s (&json, "type-uuid", buf);
+ free (type_uuid);
+ }
+
+ if (has_part_uuid) {
+ uint8_t* uuid = ped_partition_get_uuid (part);
+ static char buf[UUID_STR_LEN];
+ uuid_unparse_lower (uuid, buf);
+ ul_jsonwrt_value_s (&json, "uuid", buf);
+ free (uuid);
+ }
+
+ if (has_name) {
+ name = ped_partition_get_name (part);
+ if (strcmp (name, "") != 0)
+ ul_jsonwrt_value_s (&json, "name", name);
+ }
+
+ if (part->fs_type)
+ ul_jsonwrt_value_s (&json, "filesystem", part->fs_type->name);
+
+ partition_print_flags_json (part);
+ }
+
+ ul_jsonwrt_object_close (&json);
+ }
+
+ ul_jsonwrt_array_close (&json);
+
+ } else {
+
+ for (part = ped_disk_next_partition (*diskp, NULL); part;
+ part = ped_disk_next_partition (*diskp, part)) {
+
+ if ((!has_free_arg && !ped_partition_is_active(part)) ||
+ part->type & PED_PARTITION_METADATA)
+ continue;
+
+ if (part->num >= 0)
+ printf ("%d:", part->num);
+ else
+ fputs ("1:", stdout);
+
+ char *s = ped_unit_format (*dev, part->geom.start);
+ printf ("%s:", s);
+ free (s);
+ s = ped_unit_format_byte (*dev,
+ (part->geom.end + 1) *
+ (*dev)->sector_size - 1);
+ printf ("%s:", s);
+ free (s);
+
+ if (ped_unit_get_default() != PED_UNIT_CHS) {
+ s = ped_unit_format (*dev, part->geom.length);
+ printf ("%s:", s);
+ free (s);
+ }
+
+ if (!(part->type & PED_PARTITION_FREESPACE)) {
+
+ if (part->fs_type)
+ printf ("%s:", part->fs_type->name);
+ else
+ putchar (':');
+
+ if (has_name)
+ {
+ char *escaped_name = _escape_machine_string (ped_partition_get_name (part));
+ printf ("%s:", escaped_name);
+ free (escaped_name);
+ } else
+ putchar (':');
+
+ char *flags = partition_print_flags (part);
+ printf ("%s;\n", flags);
+ free (flags);
+
+ } else {
+ puts ("free;");
+ }
+ }
+ }
+
+nopt:
+
+ if (opt_output_mode == JSON) {
+ ul_jsonwrt_object_close (&json);
+ ul_jsonwrt_root_close (&json);
+ }
+
+ return ok;
+}
+
+static int
+_print_list ()
+{
+ PedDevice *current_dev = NULL;
+ PedDisk *diskp = NULL;
+
+ ped_device_probe_all();
+
+ while ((current_dev = ped_device_get_next(current_dev))) {
+ do_print (&current_dev, &diskp);
+ if (diskp)
+ ped_disk_destroy (diskp);
+ diskp = 0;
+ putchar ('\n');
+ }
+
+ return 1;
+}
+
+static int
+do_quit (PedDevice** dev, PedDisk **diskp)
+{
+ _done (*dev, *diskp);
+ exit (EXIT_SUCCESS);
+}
+
+static PedPartitionType
+_disk_get_part_type_for_sector (PedDisk* disk, PedSector sector)
+{
+ PedPartition* extended;
+
+ extended = ped_disk_extended_partition (disk);
+ if (!extended
+ || !ped_geometry_test_sector_inside (&extended->geom, sector))
+ return 0;
+
+ return PED_PARTITION_LOGICAL;
+}
+
+/* This function checks if "part" contains a file system, and returs
+ * 0 if either no file system was found, or the user declined to add it.
+ * 1 if a file system was found, and the user chose to add it.
+ * -1 if the user chose to cancel the entire search.
+ */
+static int
+_rescue_add_partition (PedPartition* part)
+{
+ const PedFileSystemType* fs_type;
+ PedGeometry* probed;
+ PedExceptionOption ex_opt;
+ PedConstraint* constraint;
+ char* found_start;
+ char* found_end;
+
+ fs_type = ped_file_system_probe (&part->geom);
+ if (!fs_type)
+ return 0;
+ probed = ped_file_system_probe_specific (fs_type, &part->geom);
+ if (!probed)
+ return 0;
+
+ if (!ped_geometry_test_inside (&part->geom, probed)) {
+ ped_geometry_destroy (probed);
+ return 0;
+ }
+
+ constraint = ped_constraint_exact (probed);
+ if (!ped_disk_set_partition_geom (part->disk, part, constraint,
+ probed->start, probed->end)) {
+ ped_constraint_destroy (constraint);
+ return 0;
+ }
+ ped_constraint_destroy (constraint);
+
+ found_start = ped_unit_format (probed->dev, probed->start);
+ found_end = ped_unit_format (probed->dev, probed->end);
+ ex_opt = ped_exception_throw (
+ PED_EXCEPTION_INFORMATION,
+ PED_EXCEPTION_YES_NO_CANCEL,
+ _("A %s %s partition was found at %s -> %s. "
+ "Do you want to add it to the partition table?"),
+ fs_type->name, ped_partition_type_get_name (part->type),
+ found_start, found_end);
+ ped_geometry_destroy (probed);
+ free (found_start);
+ free (found_end);
+
+ switch (ex_opt) {
+ case PED_EXCEPTION_CANCEL: return -1;
+ case PED_EXCEPTION_NO: return 0;
+ default: break;
+ }
+
+ if (!ped_partition_set_system (part, fs_type))
+ return 0;
+
+ if (!ped_disk_commit (part->disk))
+ return 0;
+
+ return 1;
+}
+
+/* hack: we only iterate through the start, since most (all) fs's have their
+ * superblocks at the start. We'll need to change this if we generalize
+ * for RAID, or something...
+ */
+static int
+_rescue_pass (PedDisk* disk, PedGeometry* start_range, PedGeometry* end_range)
+{
+ PedSector start;
+ PedGeometry start_geom_exact;
+ PedGeometry entire_dev;
+ PedConstraint constraint;
+ PedPartition* part;
+ PedPartitionType part_type;
+
+ part_type = _disk_get_part_type_for_sector (
+ disk, (start_range->start + end_range->end) / 2);
+
+ ped_geometry_init (&entire_dev, disk->dev, 0, disk->dev->length);
+
+ ped_timer_reset (g_timer);
+ ped_timer_set_state_name (g_timer, _("searching for file systems"));
+ for (start = start_range->start; start <= start_range->end; start++) {
+ ped_timer_update (g_timer, 1.0 * (start - start_range->start)
+ / start_range->length);
+
+ ped_geometry_init (&start_geom_exact, disk->dev, start, 1);
+ ped_constraint_init (
+ &constraint, ped_alignment_any, ped_alignment_any,
+ &start_geom_exact, &entire_dev,
+ 1, disk->dev->length);
+ part = ped_partition_new (disk, part_type, NULL, start,
+ end_range->end);
+ if (!part) {
+ ped_constraint_done (&constraint);
+ continue;
+ }
+
+ ped_exception_fetch_all ();
+ if (ped_disk_add_partition (disk, part, &constraint)) {
+ ped_exception_leave_all ();
+ switch (_rescue_add_partition (part)) {
+ case 1:
+ ped_constraint_done (&constraint);
+ return 1;
+
+ case 0:
+ ped_disk_remove_partition (disk, part);
+ break;
+
+ case -1:
+ goto error_remove_partition;
+ }
+ } else {
+ ped_exception_leave_all ();
+ }
+ ped_partition_destroy (part);
+ ped_constraint_done (&constraint);
+ }
+ ped_timer_update (g_timer, 1.0);
+
+ return 1;
+
+error_remove_partition:
+ ped_disk_remove_partition (disk, part);
+ ped_partition_destroy (part);
+ ped_constraint_done (&constraint);
+ return 0;
+}
+
+static int
+do_rescue (PedDevice** dev, PedDisk** diskp)
+{
+ PedDisk* disk;
+ PedSector start = 0, end = 0;
+ PedSector fuzz;
+ PedGeometry probe_start_region;
+ PedGeometry probe_end_region;
+
+ if (*diskp) {
+ ped_disk_destroy (*diskp);
+ *diskp = 0;
+ }
+ disk = ped_disk_new (*dev);
+ if (!disk)
+ goto error;
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
+ 0))
+ goto error;
+
+ if (!command_line_get_sector (_("Start?"), *dev, &start, NULL, NULL))
+ goto error_destroy_disk;
+ if (!command_line_get_sector (_("End?"), *dev, &end, NULL, NULL))
+ goto error_destroy_disk;
+
+ fuzz = PED_MAX (PED_MIN ((end - start) / 10, MEGABYTE_SECTORS(*dev)),
+ MEGABYTE_SECTORS(*dev) * 16);
+
+ ped_geometry_init (&probe_start_region, *dev,
+ PED_MAX(start - fuzz, 0),
+ PED_MIN(2 * fuzz, (*dev)->length - (start - fuzz)));
+ ped_geometry_init (&probe_end_region, *dev,
+ PED_MAX(end - fuzz, 0),
+ PED_MIN(2 * fuzz, (*dev)->length - (end - fuzz)));
+
+ if (!_rescue_pass (disk, &probe_start_region, &probe_end_region))
+ goto error_destroy_disk;
+
+ ped_disk_destroy (disk);
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error_destroy_disk:
+ ped_disk_destroy (disk);
+error:
+ return 0;
+}
+
+static int
+do_resize (PedDevice **dev, PedDisk** diskp)
+{
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("The resize command has been removed in parted 3.0"));
+ return 0;
+}
+
+static int
+do_resizepart (PedDevice** dev, PedDisk** diskp)
+{
+ PedDisk *disk = *diskp;
+ PedPartition *part = NULL;
+ PedSector start, end, oldend;
+ PedGeometry *range_end = NULL;
+ PedConstraint* constraint;
+ int rc = 0;
+ char* end_input = NULL;
+ char* end_size = NULL;
+
+ if (!disk) {
+ disk = ped_disk_new (*dev);
+ *diskp = disk;
+ }
+ if (!disk)
+ goto error;
+
+ if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
+ if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
+ alignment == ALIGNMENT_CYLINDER))
+ goto error;
+
+ if (!command_line_get_partition (_("Partition number?"), disk, &part))
+ goto error;
+
+ /* Save the optional End value if the partition is busy. */
+ if (ped_partition_is_busy(part)) {
+ if (command_line_get_word_count())
+ end_size = command_line_pop_word();
+ }
+
+ /* If the partition is busy this may clear the command_line and prompt the user */
+ if (!_partition_warn_busy (part))
+ goto error;
+
+ /* Push the End value back onto the command_line, if it exists */
+ if (end_size) {
+ command_line_push_word(end_size);
+ }
+
+ start = part->geom.start;
+ end = oldend = part->geom.end;
+ if (!command_line_get_sector (_("End?"), *dev, &end, &range_end, &end_input))
+ goto error;
+ _adjust_end_if_iec(&start, &end, range_end, end_input);
+
+ /* Do not move start of the partition */
+ constraint = constraint_from_start_end_fixed_start (*dev, start, range_end);
+ if (!ped_disk_set_partition_geom (disk, part, constraint,
+ start, end))
+ goto error_destroy_constraint;
+ /* warn when shrinking partition - might lose data */
+ if (part->geom.end < oldend)
+ if (ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_YES_NO,
+ _("Shrinking a partition can cause data loss, " \
+ "are you sure you want to continue?")) != PED_EXCEPTION_YES)
+ goto error_destroy_constraint;
+ ped_disk_commit (disk);
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ rc = 1;
+
+error_destroy_constraint:
+ ped_constraint_destroy (constraint);
+error:
+ if (range_end != NULL)
+ ped_geometry_destroy (range_end);
+ free(end_input);
+ free(end_size);
+
+ return rc;
+}
+
+
+static int
+do_rm (PedDevice** dev, PedDisk** diskp)
+{
+ PedPartition* part = NULL;
+
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
+ goto error;
+ if (!_partition_warn_busy (part))
+ goto error;
+
+ if (!ped_disk_delete_partition (*diskp, part))
+ goto error;
+ if (!ped_disk_commit (*diskp))
+ goto error;
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+do_select (PedDevice** dev, PedDisk** diskp)
+{
+ PedDevice* new_dev = *dev;
+
+ if (!command_line_get_device (_("New device?"), &new_dev))
+ return 0;
+ if (!ped_device_open (new_dev))
+ return 0;
+
+ ped_device_close (*dev);
+ if (*diskp) {
+ ped_disk_destroy (*diskp);
+ *diskp = 0;
+ }
+ *dev = new_dev;
+ print_using_dev (*dev);
+ return 1;
+}
+
+/* Return true if partition PART is consistent with DISK's selected
+ offset and alignment requirements. Also return true if there is
+ insufficient kernel support to determine DISK's alignment requirements.
+ Otherwise, return false. A_TYPE selects whether to check for minimal
+ or optimal alignment requirements.
+
+ If align_err is not NULL a string describing why the check failed
+ will be allocated and returned. It is up to the caller to free this.
+ Pass NULL if no error description is needed.
+
+ If allocating the error string fails *align_err will be set to NULL, the
+ caller should always check for this.
+*/
+static bool
+partition_align_check (PedDisk const *disk, PedPartition const *part,
+ enum AlignmentType a_type, char **align_err)
+{
+ PED_ASSERT (part->disk == disk);
+ PedDevice const *dev = disk->dev;
+
+ PedAlignment *pa = (a_type == PA_MINIMUM
+ ? ped_device_get_minimum_alignment (dev)
+ : ped_device_get_optimum_alignment (dev));
+ if (pa == NULL)
+ return true;
+
+ PED_ASSERT (pa->grain_size != 0);
+ bool ok = (part->geom.start % pa->grain_size == pa->offset);
+
+ /* If it isn't aligned and the caller wants an explanation,
+ show them the math. */
+ if (!ok && align_err) {
+ if (asprintf(align_err,
+ "%llds %% %llds != %llds",
+ part->geom.start, pa->grain_size, pa->offset) < 0) {
+ *align_err = NULL;
+ }
+ }
+ free (pa);
+ return ok;
+}
+
+static int
+do_align_check (PedDevice **dev, PedDisk** diskp)
+{
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ enum AlignmentType align_type = PA_OPTIMUM;
+ PedPartition *part = NULL;
+
+ if (!command_line_get_align_type (_("alignment type(min/opt)"), &align_type))
+ goto error;
+ if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
+ goto error;
+
+ char *align_err = NULL;
+ bool aligned = partition_align_check (*diskp, part, align_type, &align_err);
+
+ /* Don't print the error in script mode */
+ if (opt_script_mode) {
+ free(align_err);
+ return aligned ? 1 : 0;
+ }
+
+ if (aligned)
+ printf(_("%d aligned\n"), part->num);
+ else
+ printf(_("%d not aligned: %s\n"),
+ part->num,
+ align_err ? align_err : _("unknown (malloc failed)"));
+
+ free(align_err);
+
+ /* Always return 1 in interactive mode, to be consistent
+ with the other modes. */
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+do_disk_set (PedDevice** dev, PedDisk** diskp)
+{
+ PedDiskFlag flag;
+ int state;
+
+ if (!*diskp)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ if (!command_line_get_disk_flag (_("Flag to Invert?"), *diskp, &flag))
+ goto error;
+ state = (ped_disk_get_flag (*diskp, flag) == 0 ? 1 : 0);
+
+ if (!is_toggle_mode) {
+ if (!command_line_get_state (_("New state?"), &state))
+ goto error;
+ }
+
+ if (!ped_disk_set_flag (*diskp, flag, state))
+ goto error;
+ if (!ped_disk_commit (*diskp))
+ goto error;
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+do_set (PedDevice** dev, PedDisk **diskp)
+{
+ PedPartition* part = NULL;
+ PedPartitionFlag flag;
+ int state;
+
+ if (*diskp == 0)
+ *diskp = ped_disk_new (*dev);
+ if (!*diskp)
+ goto error;
+
+ if (!command_line_get_partition (_("Partition number?"), *diskp, &part))
+ goto error;
+ if (!command_line_get_part_flag (_("Flag to Invert?"), part, &flag))
+ goto error;
+ state = (ped_partition_get_flag (part, flag) == 0 ? 1 : 0);
+
+ if (!is_toggle_mode) {
+ if (!command_line_get_state (_("New state?"), &state))
+ goto error;
+ }
+
+ if (!ped_partition_set_flag (part, flag, state))
+ goto error;
+ if (!ped_disk_commit (*diskp))
+ goto error;
+
+ if ((*dev)->type != PED_DEVICE_FILE)
+ disk_is_modified = 1;
+
+ return 1;
+
+error:
+ return 0;
+}
+
+static int
+do_disk_toggle (PedDevice **dev, PedDisk** diskp)
+{
+ int result;
+
+ is_toggle_mode = 1;
+ result = do_disk_set (dev, diskp);
+ is_toggle_mode = 0;
+
+ return result;
+}
+
+static int
+do_toggle (PedDevice **dev, PedDisk** diskp)
+{
+ int result;
+
+ is_toggle_mode = 1;
+ result = do_set (dev, diskp);
+ is_toggle_mode = 0;
+
+ return result;
+}
+
+static int
+do_unit (PedDevice** dev, PedDisk** diskp)
+{
+ PedUnit unit = ped_unit_get_default ();
+ if (!command_line_get_unit (_("Unit?"), &unit))
+ return 0;
+ ped_unit_set_default (unit);
+ return 1;
+}
+
+static int
+do_version ()
+{
+ printf ("\n%s\n%s",
+ prog_name,
+ _(copyright_msg));
+ return 1;
+}
+
+static void
+_init_messages ()
+{
+ StrList* list;
+ int first;
+ PedFileSystemType* fs_type;
+ PedFileSystemAlias* fs_alias;
+ PedDiskType* disk_type;
+ PedPartitionFlag part_flag;
+ PedDiskFlag disk_flag;
+ PedUnit unit;
+
+/* flags */
+ first = 1;
+ list = str_list_create (_(flag_msg_start), NULL);
+ for (part_flag = ped_partition_flag_next (0); part_flag;
+ part_flag = ped_partition_flag_next (part_flag)) {
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list,
+ _(ped_partition_flag_get_name (part_flag)));
+ }
+ str_list_append (list, "\n");
+
+ flag_msg = str_list_convert (list);
+ str_list_destroy (list);
+/* disk flags */
+ first = 1;
+ list = str_list_create (_(disk_flag_msg_start), NULL);
+ for (disk_flag = ped_disk_flag_next (0); disk_flag;
+ disk_flag = ped_disk_flag_next (disk_flag)) {
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list,
+ _(ped_disk_flag_get_name (disk_flag)));
+ }
+ str_list_append (list, "\n");
+
+ disk_flag_msg = str_list_convert (list);
+ str_list_destroy (list);
+
+/* units */
+ first = 1;
+ list = str_list_create (_(unit_msg_start), NULL);
+ for (unit = PED_UNIT_FIRST; unit <= PED_UNIT_LAST; unit++) {
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list, ped_unit_get_name (unit));
+ }
+ str_list_append (list, "\n");
+
+ unit_msg = str_list_convert (list);
+ str_list_destroy (list);
+
+/* disk type */
+ list = str_list_create (_(label_type_msg_start), NULL);
+
+ first = 1;
+ for (disk_type = ped_disk_type_get_next (NULL);
+ disk_type; disk_type = ped_disk_type_get_next (disk_type)) {
+ if (disk_type->ops->write == NULL)
+ continue;
+
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list, disk_type->name);
+ }
+ str_list_append (list, "\n");
+
+ label_type_msg = str_list_convert (list);
+ str_list_destroy (list);
+
+/* mkpart - file system types and aliases */
+ list = str_list_create (_(fs_type_msg_start), NULL);
+
+ first = 1;
+ for (fs_type = ped_file_system_type_get_next (NULL);
+ fs_type; fs_type = ped_file_system_type_get_next (fs_type)) {
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list, fs_type->name);
+ }
+ for (fs_alias = ped_file_system_alias_get_next (NULL);
+ fs_alias; fs_alias = ped_file_system_alias_get_next (fs_alias)) {
+ if (first)
+ first = 0;
+ else
+ str_list_append (list, ", ");
+ str_list_append (list, fs_alias->alias);
+ }
+ str_list_append (list, "\n");
+
+ mkpart_fs_type_msg = str_list_convert (list);
+ str_list_destroy (list);
+}
+
+static void
+_done_messages ()
+{
+ free (flag_msg);
+ free (unit_msg);
+ free (mkpart_fs_type_msg);
+ free (label_type_msg);
+}
+
+static void
+_init_commands ()
+{
+ command_register (commands,
+ command_create ( str_list_create_unique ("align-check",
+ _("align-check"), NULL),
+ do_align_check,
+ str_list_create (
+ _("align-check TYPE N"
+ " "
+ "check partition N for"
+ " TYPE(min|opt) alignment"), NULL),
+
+ str_list_create (_(number_msg), _(min_or_opt_msg),
+ NULL), 1));
+ command_register (commands, command_create (
+ str_list_create_unique ("help", _("help"), NULL),
+ do_help,
+ str_list_create (
+_("help [COMMAND] print general help, or help "
+ "on COMMAND"),
+NULL),
+ NULL, 1));
+
+ command_register (commands, command_create (
+ str_list_create_unique ("mklabel", _("mklabel"), "mktable", _("mktable"), NULL),
+ do_mklabel,
+ str_list_create (
+_("mklabel,mktable LABEL-TYPE create a new disklabel "
+ "(partition table)"),
+NULL),
+ str_list_create (label_type_msg, NULL), 1));
+
+ command_register (commands, command_create (
+ str_list_create_unique ("mkpart", _("mkpart"), NULL),
+ do_mkpart,
+ str_list_create (
+_("mkpart PART-TYPE [FS-TYPE] START END make a partition"),
+NULL),
+ str_list_create (_(part_type_msg),
+ _(mkpart_fs_type_msg),
+ _(start_end_msg),
+ "\n",
+_("'mkpart' makes a partition without creating a new file system on the "
+ "partition. FS-TYPE may be specified to set an appropriate partition ID.\n"),
+NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("name", _("name"), NULL),
+ do_name,
+ str_list_create (
+_("name NUMBER NAME name partition NUMBER as NAME"),
+NULL),
+ str_list_create (_(number_msg), _(name_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("print", _("print"), NULL),
+ do_print,
+ str_list_create (
+_("print [devices|free|list,all] display the partition table, "
+ "or available devices, or free space, or all found partitions"),
+NULL),
+ str_list_create (
+_("Without arguments, 'print' displays the entire partition table. However "
+ "with the following arguments it performs various other actions.\n"),
+_(" devices : display all active block devices\n"),
+_(" free : display information about free unpartitioned space on the "
+ "current block device\n"),
+_(" list, all : display the partition tables of all active block devices\n"),
+NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("quit", _("quit"), NULL),
+ do_quit,
+ str_list_create (
+_("quit exit program"),
+NULL),
+ NULL, 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("rescue", _("rescue"), NULL),
+ do_rescue,
+ str_list_create (
+_("rescue START END rescue a lost partition near "
+"START and END"),
+NULL),
+ str_list_create (_(start_end_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("resize", _("resize"), NULL),
+ do_resize,
+ NULL,
+ str_list_create (_(N_("The resize command was removed in parted 3.0\n")), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("resizepart", _("resizepart"), NULL),
+ do_resizepart,
+ str_list_create (
+_("resizepart NUMBER END resize partition NUMBER"),
+NULL),
+ str_list_create (_(number_msg), _(end_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("rm", _("rm"), NULL),
+ do_rm,
+ str_list_create (
+_("rm NUMBER delete partition NUMBER"),
+NULL),
+ str_list_create (_(number_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("select", _("select"), NULL),
+ do_select,
+ str_list_create (
+_("select DEVICE choose the device to edit"),
+NULL),
+ str_list_create (_(device_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("disk_set", _("disk_set"), NULL),
+ do_disk_set,
+ str_list_create (
+_("disk_set FLAG STATE change the FLAG on selected device"),
+NULL),
+ str_list_create (disk_flag_msg, _(state_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("disk_toggle", _("disk_toggle"), NULL),
+ do_disk_toggle,
+ str_list_create (
+_("disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"),
+NULL),
+ str_list_create (disk_flag_msg, NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("set", _("set"), NULL),
+ do_set,
+ str_list_create (
+_("set NUMBER FLAG STATE change the FLAG on partition "
+ "NUMBER"),
+NULL),
+ str_list_create (_(number_msg), flag_msg, _(state_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("toggle", _("toggle"), NULL),
+ do_toggle,
+ str_list_create (
+_("toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+ "partition NUMBER"),
+NULL),
+ str_list_create (_(number_msg), flag_msg, NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("type", _("type"), NULL),
+ do_type,
+ str_list_create (
+_("type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of partition NUMBER"),
+NULL),
+ str_list_create (_(number_msg), _(type_msg), NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("unit", _("unit"), NULL),
+ do_unit,
+ str_list_create (
+_("unit UNIT set the default unit to UNIT"),
+NULL),
+ str_list_create (unit_msg, NULL), 1));
+
+command_register (commands, command_create (
+ str_list_create_unique ("version", _("version"), NULL),
+ do_version,
+ str_list_create (
+_("version display the version number "
+"and copyright information of GNU Parted"),
+NULL),
+ str_list_create (
+_("'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"),
+NULL), 1));
+
+}
+
+static void
+_done_commands ()
+{
+Command** walk;
+
+for (walk = commands; *walk; walk++) {
+ command_destroy (*walk);
+ *walk = NULL;
+}
+}
+
+static void
+_init_i18n ()
+{
+/* intialize i18n */
+#ifdef ENABLE_NLS
+setlocale(LC_ALL, "");
+bindtextdomain(PACKAGE, LOCALEDIR);
+textdomain(PACKAGE);
+#endif /* ENABLE_NLS */
+}
+
+void
+_version ()
+{
+ version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,
+ (char *) NULL);
+}
+
+static int
+_parse_options (int* argc_ptr, char*** argv_ptr)
+{
+int opt, help = 0, list = 0, version = 0, wrong = 0;
+
+while (1)
+{
+ opt = getopt_long (*argc_ptr, *argv_ptr, "hlmjsfva:",
+ options, NULL);
+ if (opt == -1)
+ break;
+
+ switch (opt) {
+ case 'h': help = 1; break;
+ case 'l': list = 1; break;
+ case 'm': opt_output_mode = MACHINE; break;
+ case 'j': opt_output_mode = JSON; break;
+ case 's': opt_script_mode = 1; break;
+ case 'f': opt_fix_mode = 1; break;
+ case 'v': version = 1; break;
+ case 'a':
+ alignment = XARGMATCH ("--align", optarg,
+ align_args, align_types);
+ break;
+ case PRETEND_INPUT_TTY:
+ pretend_input_tty = 1;
+ break;
+ default:
+ wrong = 1;
+ break;
+ }
+}
+
+if (wrong == 1) {
+ fprintf (stderr,
+ _("Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"),
+ program_name);
+ return 0;
+}
+
+if (version == 1) {
+ _version ();
+ exit (EXIT_SUCCESS);
+}
+
+if (help == 1) {
+ help_msg ();
+ exit (EXIT_SUCCESS);
+}
+
+if (list == 1) {
+ _print_list ();
+ exit (EXIT_SUCCESS);
+}
+
+*argc_ptr -= optind;
+*argv_ptr += optind;
+return 1;
+}
+
+static PedDevice*
+_choose_device (int* argc_ptr, char*** argv_ptr)
+{
+PedDevice* dev;
+
+/* specified on command line? */
+if (*argc_ptr) {
+ dev = ped_device_get ((*argv_ptr) [0]);
+ if (!dev)
+ return NULL;
+ (*argc_ptr)--;
+ (*argv_ptr)++;
+} else {
+retry:
+ ped_device_probe_all ();
+ dev = ped_device_get_next (NULL);
+ if (!dev) {
+ if (ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_RETRY_CANCEL,
+ _("No device found"))
+ == PED_EXCEPTION_RETRY)
+ goto retry;
+ else
+ return NULL;
+ }
+}
+
+if (!ped_device_open (dev))
+ return NULL;
+return dev;
+}
+
+static PedDevice*
+_init (int* argc_ptr, char*** argv_ptr)
+{
+PedDevice* dev;
+
+#ifdef ENABLE_MTRACE
+mtrace();
+#endif
+
+_init_i18n ();
+if (!init_ui ())
+ goto error;
+_init_messages ();
+_init_commands ();
+
+if (!_parse_options (argc_ptr, argv_ptr))
+ goto error_done_commands;
+
+if (!opt_script_mode)
+ if (init_readline ())
+ goto error_done_commands;
+
+#ifdef HAVE_GETUID
+ if (getuid() != 0 && !opt_script_mode) {
+ fputs (_("WARNING: You are not superuser. Watch out for "
+ "permissions.\n"), stderr);
+ }
+#endif
+
+dev = _choose_device (argc_ptr, argv_ptr);
+if (!dev)
+ goto error_done_commands;
+
+g_timer = ped_timer_new (_timer_handler, &timer_context);
+if (!g_timer)
+ goto error_done_commands;
+timer_context.last_update = 0;
+
+return dev;
+
+error_done_commands:
+_done_commands ();
+_done_messages ();
+done_ui ();
+error:
+return NULL;
+}
+
+static void
+_done (PedDevice* dev, PedDisk* diskp)
+{
+ if (diskp)
+ ped_disk_destroy (diskp);
+ if (dev->boot_dirty && dev->type != PED_DEVICE_FILE) {
+ ped_exception_throw (
+ PED_EXCEPTION_WARNING,
+ PED_EXCEPTION_OK,
+ _("You should reinstall your boot loader before "
+ "rebooting. Read section 4 of the Parted User "
+ "documentation for more information."));
+ }
+ if (!opt_script_mode && opt_output_mode == HUMAN && disk_is_modified) {
+ ped_exception_throw (
+ PED_EXCEPTION_INFORMATION, PED_EXCEPTION_OK,
+ _("You may need to update /etc/fstab.\n"));
+}
+
+ped_device_close (dev);
+
+ped_timer_destroy (g_timer);
+_done_commands ();
+_done_messages ();
+done_ui();
+}
+
+int
+main (int argc, char** argv)
+{
+ PedDevice* dev;
+ PedDisk* diskp = 0;
+ int status;
+
+ set_program_name (argv[0]);
+ atexit (close_stdout);
+
+ dev = _init (&argc, &argv);
+ if (!dev)
+ return 1;
+
+ if (argc || opt_script_mode)
+ status = non_interactive_mode (&dev, &diskp, commands, argc, argv);
+ else
+ status = interactive_mode (&dev, &diskp, commands);
+
+ _done (dev, diskp);
+
+ return !status;
+}
diff --git a/parted/strlist.c b/parted/strlist.c
new file mode 100644
index 0000000..c4cb351
--- /dev/null
+++ b/parted/strlist.c
@@ -0,0 +1,582 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/debug.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "xalloc.h"
+
+#ifdef ENABLE_NLS
+
+#undef __USE_GNU
+#define __USE_GNU
+
+#include <wchar.h>
+#include <wctype.h>
+
+#endif /* !ENABLE_NLS */
+
+#include "strlist.h"
+
+#define MIN(a,b) ( (a<b)? a : b )
+
+static int _GL_ATTRIBUTE_PURE
+wchar_strlen (const wchar_t* str)
+{
+#ifdef ENABLE_NLS
+ return wcslen (str);
+#else
+ return strlen (str);
+#endif
+}
+
+static wchar_t * _GL_ATTRIBUTE_PURE
+wchar_strchr (const wchar_t* str, char ch)
+{
+#ifdef ENABLE_NLS
+ return wcschr (str, ch);
+#else
+ return strchr (str, ch);
+#endif
+}
+
+static int _GL_ATTRIBUTE_PURE
+wchar_strcasecmp (const wchar_t* a, const wchar_t* b)
+{
+#ifdef ENABLE_NLS
+ return wcscasecmp (a, b);
+#else
+ return strcasecmp (a, b);
+#endif
+}
+
+static int _GL_ATTRIBUTE_PURE
+wchar_strncasecmp (const wchar_t* a, const wchar_t* b, size_t n)
+{
+#ifdef ENABLE_NLS
+ return wcsncasecmp (a, b, n);
+#else
+ return strncasecmp (a, b, n);
+#endif
+}
+
+static wchar_t * _GL_ATTRIBUTE_PURE
+wchar_strdup (const wchar_t* str)
+{
+#ifdef ENABLE_NLS
+ return wcsdup (str);
+#else
+ return xstrdup (str);
+#endif
+}
+
+/* converts a string from the encoding in the gettext catalogues to wide
+ * character strings (of type wchar_t*).
+ */
+#ifdef ENABLE_NLS
+static wchar_t*
+gettext_to_wchar (const char* str)
+{
+ int count;
+ wchar_t* result;
+ size_t status;
+ mbstate_t ps;
+
+ count = strlen (str) + 1;
+ result = malloc (count * sizeof (wchar_t));
+ if (!result)
+ goto error;
+
+ memset(&ps, 0, sizeof (ps));
+ status = mbsrtowcs(result, &str, count, &ps);
+ if (str != NULL)
+ goto error;
+
+ result = xrealloc (result, (status + 1) * sizeof (wchar_t));
+ return result;
+
+error:
+ fprintf (stderr, "Error during translation: %s\n", strerror (errno));
+ exit (EXIT_FAILURE);
+}
+
+#else /* ENABLE_NLS */
+
+static wchar_t*
+gettext_to_wchar (const char* str)
+{
+ return xstrdup (str);
+}
+
+#endif /* !ENABLE_NLS */
+
+
+#ifdef ENABLE_NLS
+static char*
+wchar_to_str (const wchar_t* str, size_t count)
+{
+ char* result;
+ char* out_buf;
+ size_t status;
+ mbstate_t ps;
+ size_t i;
+
+ if (count == 0 || wcslen(str) < count)
+ count = wcslen (str);
+
+ out_buf = result = malloc ((count + 1) * MB_LEN_MAX);
+ if (!result)
+ goto error;
+
+ memset(&ps, 0, sizeof(ps));
+
+ for (i = 0; i < count; i++) {
+ status = wcrtomb (out_buf, str[i], &ps);
+ if (status == (size_t) -1)
+ goto error;
+ out_buf += status;
+ }
+
+ status = wcrtomb (out_buf, 0, &ps);
+ if (status == (size_t) -1)
+ goto error;
+
+ result = realloc (result, strlen (result) + 1);
+ if (!result)
+ goto error;
+ return result;
+
+error:
+ fprintf (stderr, "Error during translation: %s\n", strerror (errno));
+ exit (EXIT_FAILURE);
+}
+
+#else /* ENABLE_NLS */
+
+static char*
+wchar_to_str (const wchar_t* str, size_t count)
+{
+ char* result;
+
+ result = xstrdup (str);
+ if (count && count < strlen (result))
+ result [count] = 0;
+ return result;
+}
+
+#endif /* !ENABLE_NLS */
+
+static void
+print_wchar (const wchar_t* str, size_t count, FILE *fp)
+{
+ char* tmp = wchar_to_str (str, count);
+ fprintf (fp, "%s", tmp);
+ free (tmp);
+}
+
+static StrList*
+str_list_alloc ()
+{
+ StrList* list;
+
+ list = xmalloc (sizeof (StrList));
+ list->next = NULL;
+
+ return list;
+}
+
+void
+str_list_destroy (StrList* list)
+{
+ if (list) {
+ str_list_destroy (list->next);
+ str_list_destroy_node (list);
+ }
+}
+
+void
+str_list_destroy_node (StrList* list)
+{
+ void *p = (char *) (list->str); /* discard const */
+ free (p);
+ free (list);
+}
+
+StrList*
+str_list_duplicate_node (const StrList* node)
+{
+ StrList* result = str_list_alloc ();
+ result->str = wchar_strdup (node->str);
+ return result;
+}
+
+StrList*
+str_list_duplicate (const StrList* list)
+{
+ if (list)
+ return str_list_join (str_list_duplicate_node (list),
+ str_list_duplicate (list->next));
+ else
+ return NULL;
+}
+
+StrList*
+str_list_join (StrList* a, StrList* b)
+{
+ StrList* walk;
+
+ for (walk = a; walk && walk->next; walk = walk->next);
+
+ if (walk) {
+ walk->next = b;
+ return a;
+ } else {
+ return b;
+ }
+}
+
+static StrList*
+_str_list_append (StrList* list, const wchar_t* str)
+{
+ StrList* walk;
+
+ if (list) {
+ for (walk = list; walk->next; walk = walk->next);
+ walk->next = str_list_alloc ();
+ walk = walk->next;
+ } else {
+ walk = list = str_list_alloc ();
+ }
+ walk->str = str;
+
+ return list;
+}
+
+StrList*
+str_list_append (StrList* list, const char* str)
+{
+ return _str_list_append (list, gettext_to_wchar (str));
+}
+
+StrList*
+str_list_append_unique (StrList* list, const char* str)
+{
+ StrList* walk;
+ wchar_t* new_str = gettext_to_wchar (str);
+
+ for (walk=list; walk; walk=walk->next) {
+ if (walk->str) {
+ if (wchar_strcasecmp (new_str, walk->str) == 0) {
+ free (new_str);
+ return list;
+ }
+ }
+ }
+
+ return _str_list_append (list, new_str);
+}
+
+StrList*
+str_list_insert (StrList* list, const char* str)
+{
+ return str_list_join (str_list_create (str, NULL), list);
+}
+
+StrList*
+str_list_create (const char* first, ...)
+{
+ va_list args;
+ char* str;
+ StrList* list;
+
+ list = str_list_append (NULL, first);
+
+ if (first) {
+ va_start (args, first);
+ while ( (str = va_arg (args, char*)) )
+ str_list_append (list, str);
+ va_end (args);
+ }
+
+ return list;
+}
+
+StrList*
+str_list_create_unique (const char* first, ...)
+{
+ va_list args;
+ char* str;
+ StrList* list;
+
+ list = str_list_append (NULL, first);
+
+ if (first) {
+ va_start (args, first);
+ while ( (str = va_arg (args, char*)) )
+ str_list_append_unique (list, str);
+ va_end (args);
+ }
+
+ return list;
+}
+
+char*
+str_list_convert_node (const StrList* list)
+{
+ return wchar_to_str (list->str, 0);
+}
+
+char*
+str_list_convert (const StrList* list)
+{
+ const StrList* walk;
+ int pos = 0;
+ int length = 1;
+ char* str = xstrdup ("");
+
+ for (walk = list; walk; walk = walk->next) {
+ if (walk->str) {
+ char* tmp = wchar_to_str (walk->str, 0);
+
+ length += strlen (tmp);
+
+ str = realloc (str, length);
+ strcpy (str + pos, tmp);
+
+ pos = length - 1;
+ free (tmp);
+ }
+ }
+
+ return str;
+}
+
+void
+str_list_print (const StrList* list, FILE *fp)
+{
+ const StrList* walk;
+
+ for (walk=list; walk; walk=walk->next) {
+ if (walk->str)
+ print_wchar (walk->str, 0, fp);
+ }
+}
+
+static int
+str_search (const wchar_t* str, int n, wchar_t c)
+{
+ int i;
+
+ for (i=0; i<n; i++)
+ if (str [i] == c)
+ return i;
+ return -1;
+}
+
+
+/* Japanese don't leave spaces between words, so ALL Japanese characters
+ * are treated as delimiters. Note: since the translations should already
+ * be properly formatted (eg: spaces after commas), there should be no
+ * need to include them. Best not to avoid side effects, like 3.
+14159 :-)
+ * FIXME: how do we exclude "." and "(" ?
+ * FIXME: glibc doesn't like umlaute. i.e. \"o (TeX notation), which should
+ * look like: ö
+ */
+
+static int
+is_break_point (wchar_t c)
+{
+#ifdef ENABLE_NLS
+ return !iswalnum (c) && !iswpunct (c);
+#else
+ return !isalnum (c) && !ispunct (c);
+#endif
+}
+
+/* NOTE: this should not return '\n' as a space, because explicit '\n' may
+ * be placed inside strings.
+ */
+static int
+is_space (wchar_t c)
+{
+#ifdef ENABLE_NLS
+ return c == (wchar_t) btowc(' ');
+#else
+ return c == ' ';
+#endif
+}
+
+void
+str_list_print_wrap (const StrList* list, int line_length, int offset,
+ int indent, FILE *fp)
+{
+ const StrList* walk;
+ const wchar_t* str;
+ int str_len;
+ int cut_right;
+ int cut_left;
+ int line_left;
+ int search_result;
+ int line_break;
+
+ PED_ASSERT (line_length - indent > 10);
+
+ line_left = line_length - offset;
+
+ for (walk=list; walk; walk=walk->next) {
+ if (!walk->str)
+ continue;
+ str = walk->str;
+ str_len = wchar_strlen (str);
+
+ while (line_left < str_len || wchar_strchr (str, '\n')) {
+ line_break = 0;
+
+ cut_left = MIN (line_left - 1, str_len - 1);
+
+ /* we can have a space "over", but not a comma */
+ if (cut_left < str_len
+ && is_space (str [cut_left + 1]))
+ cut_left++;
+
+ while (cut_left && !is_break_point (str [cut_left]))
+ cut_left--;
+ while (cut_left && is_space (str [cut_left]))
+ cut_left--;
+
+ /* str [cut_left] is either the end of a word, or a
+ * Japanese character, or the start of a blank line.
+ */
+
+ search_result = str_search (str, cut_left + 1, '\n');
+ if (search_result != -1) {
+ cut_left = search_result - 1;
+ line_break = 1;
+ }
+
+ for (cut_right = cut_left + (line_break ? 2 : 1);
+ cut_right < str_len && is_space (str [cut_right]);
+ cut_right++);
+
+ if (cut_left > 0)
+ print_wchar (str, cut_left + 1, fp);
+
+ str += cut_right;
+ str_len -= cut_right;
+ line_left = line_length - indent;
+
+ if (walk->next || *str)
+ fprintf (fp, "\n%*s", indent, "");
+ else if (line_break)
+ fputc ('\n', fp);
+ }
+
+ print_wchar (str, 0, fp);
+ line_left -= wchar_strlen (str);
+ }
+}
+
+static int
+_str_list_match_node (const StrList* list, const wchar_t* str)
+{
+ if (wchar_strcasecmp (list->str, str) == 0)
+ return 2;
+ if (wchar_strncasecmp (list->str, str, wchar_strlen (str)) == 0)
+ return 1;
+ return 0;
+}
+
+int
+str_list_match_node (const StrList* list, const char* str)
+{
+ wchar_t* wc_str = gettext_to_wchar (str); /* FIXME */
+ int status;
+
+ status = _str_list_match_node (list, wc_str);
+ free (wc_str);
+
+ return status;
+}
+
+/* returns: 2 for full match
+ 1 for partial match
+ 0 for no match
+ */
+int
+str_list_match_any (const StrList* list, const char* str)
+{
+ const StrList* walk;
+ int best_status = 0;
+ wchar_t* wc_str = gettext_to_wchar (str);
+
+ for (walk = list; walk; walk = walk->next) {
+ int this_status = _str_list_match_node (walk, wc_str);
+ if (this_status > best_status)
+ best_status = this_status;
+ }
+
+ free (wc_str);
+ return best_status;
+}
+
+StrList*
+str_list_match (const StrList* list, const char* str)
+{
+ const StrList* walk;
+ const StrList* partial_match = NULL;
+ int ambiguous = 0;
+ wchar_t* wc_str = gettext_to_wchar (str);
+
+ for (walk = list; walk; walk = walk->next) {
+ switch (_str_list_match_node (walk, wc_str)) {
+ case 2:
+ free (wc_str);
+ return (StrList*) walk;
+
+ case 1:
+ if (partial_match)
+ ambiguous = 1;
+ partial_match = walk;
+ }
+ }
+
+ free (wc_str);
+ return ambiguous ? NULL : (StrList*) partial_match;
+}
+
+int
+str_list_length (const StrList* list)
+{
+ int length = 0;
+ const StrList* walk;
+
+ for (walk = list; walk; walk = walk->next)
+ length++;
+
+ return length;
+}
diff --git a/parted/strlist.h b/parted/strlist.h
new file mode 100644
index 0000000..f9c4183
--- /dev/null
+++ b/parted/strlist.h
@@ -0,0 +1,66 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2001, 2007, 2009-2014, 2019-2023 Free Software
+ Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef STRLIST_H_INCLUDED
+#define STRLIST_H_INCLUDED
+
+#include <wchar.h>
+
+#ifndef ENABLE_NLS
+# define L_(str) str
+# ifdef wchar_t
+# undef wchar_t
+# endif
+# define wchar_t char
+#endif
+
+typedef struct _StrList StrList;
+struct _StrList {
+ StrList* next;
+ const wchar_t* str;
+};
+
+extern char* language;
+extern char* gettext_charset;
+extern char* term_charset;
+
+extern StrList* str_list_create (const char* first, ...);
+extern StrList* str_list_create_unique (const char* first, ...);
+extern void str_list_destroy (StrList* list);
+extern void str_list_destroy_node (StrList* list);
+
+extern StrList* str_list_duplicate (const StrList* list);
+extern StrList* str_list_duplicate_node (const StrList* list);
+extern StrList* str_list_insert (StrList* list, const char* str);
+extern StrList* str_list_append (StrList* list, const char* str);
+extern StrList* str_list_append_unique (StrList* list, const char* str);
+extern StrList* str_list_join (StrList* a, StrList* b);
+extern char* str_list_convert (const StrList* list);
+extern char* str_list_convert_node (const StrList* list);
+
+extern void str_list_print (const StrList* list, FILE *fp);
+extern void str_list_print_wrap (const StrList* list, int line_length,
+ int offset, int indent, FILE *fp);
+extern int str_list_match_any (const StrList* list, const char* str);
+extern int str_list_match_node (const StrList* list, const char* str);
+extern StrList* str_list_match (const StrList* list, const char* str);
+
+extern int str_list_length (const StrList* list) _GL_ATTRIBUTE_PURE;
+
+#endif /* STRLIST_H_INCLUDED */
diff --git a/parted/table.c b/parted/table.c
new file mode 100644
index 0000000..63c0e6a
--- /dev/null
+++ b/parted/table.c
@@ -0,0 +1,245 @@
+/*
+ * TODO: - make right and centered alignment possible
+ */
+/*
+ parted - a frontend to libparted
+ Copyright (C) 2006-2014, 2019-2023 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <assert.h>
+#include <wchar.h>
+#include <string.h>
+
+#include "xalloc.h"
+#include "strlist.h"
+
+#ifdef ENABLE_NLS
+# define L_(str) L##str
+#else
+# define L_(str) str
+# define wcslen strlen
+# define wcswidth strnlen
+# define wcscat strcat
+# define wcsdup xstrdup
+#endif
+
+
+static const unsigned int MAX_WIDTH = 512;
+static const wchar_t* DELIMITER = L_(" ");
+static const wchar_t* COLSUFFIX = L_("\n");
+
+typedef struct
+{
+ unsigned int ncols;
+ unsigned int nrows;
+ wchar_t*** rows;
+ int* widths;
+} Table;
+
+
+Table* table_new(int ncols)
+{
+ assert ( ncols >= 0 );
+
+ Table *t = xmalloc (sizeof(*t));
+
+ t->ncols = ncols;
+ t->nrows = 0;
+ t->rows = (wchar_t***)NULL;
+ t->widths = NULL;
+
+ return t;
+}
+
+
+void table_destroy (Table* t)
+{
+ unsigned int r, c;
+
+ assert (t);
+ assert (t->ncols > 0);
+
+ for (r = 0; r < t->nrows; ++r)
+ {
+ for (c = 0; c < t->ncols; ++c)
+ free (t->rows[r][c]);
+ free (t->rows[r]);
+ }
+
+ free (t->rows);
+ free (t->widths);
+ free (t);
+}
+
+
+static int max (int x, int y)
+{
+ return x > y ? x : y;
+}
+
+
+static void table_calc_column_widths (Table* t)
+{
+ unsigned int r, c;
+
+ assert(t);
+ assert(t->ncols > 0);
+
+ if (!t->widths)
+ t->widths = xmalloc (t->ncols * sizeof(t->widths[0]));
+
+ for (c = 0; c < t->ncols; ++c)
+ t->widths[c] = 0;
+
+ for (r = 0; r < t->nrows; ++r)
+ for (c = 0; c < t->ncols; ++c)
+ {
+ t->widths[c] = max ( t->widths[c],
+ wcswidth(t->rows[r][c],
+ MAX_WIDTH) );
+ }
+}
+
+
+/*
+ * add a row which is a string array of ncols elements.
+ * 'row' will get freed by table_destroy; you must not free it
+ * yourself.
+ */
+void table_add_row (Table* t, wchar_t** row)
+{
+ assert(t);
+
+ /*unsigned int i;
+ fputs ("adding row: ", stdout);
+ for (i = 0; i < t->ncols; ++i)
+ printf("[%s]", row[i]);
+ putchar ('\n');*/
+
+ t->rows = xrealloc (t->rows, (t->nrows + 1) * sizeof(*(t->rows)));
+
+ t->rows[t->nrows] = row;
+
+ ++t->nrows;
+
+ table_calc_column_widths (t);
+}
+
+
+void table_add_row_from_strlist (Table* t, StrList* list)
+{
+ wchar_t** row = xmalloc (str_list_length(list) * sizeof(*row));
+ int i = 0;
+
+ while (list)
+ {
+ row[i] = wcsdup (list->str);
+ if (row[i] == NULL)
+ xalloc_die ();
+
+
+ list = list->next;
+ ++i;
+ }
+
+ table_add_row (t, row);
+}
+
+
+/* render a row */
+static void table_render_row (Table* t, int rownum, int ncols, wchar_t** s)
+{
+ wchar_t** row = t->rows[rownum];
+ size_t len = 1, i;
+ size_t newsize;
+
+ assert(t);
+ assert(s != NULL);
+
+ for (i = 0; i < ncols; ++i)
+ len += t->widths[i] + wcslen(DELIMITER);
+
+ len += wcslen(COLSUFFIX);
+
+ newsize = (wcslen(*s) + len + 1) * sizeof(wchar_t);
+ *s = xrealloc (*s, newsize);
+
+ for (i = 0; i < ncols; ++i)
+ {
+ wcscat (*s, row[i]);
+ if (ncols <= i + 1)
+ break;
+
+ int j;
+ int nspaces = max(t->widths[i] - wcswidth(row[i], MAX_WIDTH),
+ 0);
+ wchar_t* pad = xmalloc ((nspaces + 1) * sizeof(*pad));
+
+ for (j = 0; j < nspaces; ++j)
+ pad[j] = L' ';
+
+ pad[nspaces] = L_('\0');
+
+ wcscat (*s, pad);
+ if (i + 1 < ncols)
+ wcscat (*s, DELIMITER);
+
+ free (pad);
+ }
+
+ /* Remove any trailing blanks. */
+ wchar_t *p = *s;
+ size_t k = wcslen (p);
+ while (k && p[k-1] == L_(' '))
+ --k;
+ p[k] = L_('\0');
+
+
+ wcscat (*s, COLSUFFIX);
+}
+
+
+/*
+ * Render the rows.
+ * \p s must be a null-terminated string.
+ */
+static void table_render_rows (Table* t, wchar_t** s)
+{
+ unsigned int i;
+
+ assert (**s == L_('\0'));
+ for (i = 0; i < t->nrows; ++i)
+ table_render_row (t, i, t->ncols, s);
+}
+
+/*
+ * Render the table to a string.
+ * You are responsible for freeing the returned string.
+ */
+wchar_t* table_render(Table* t)
+{
+ wchar_t* s = xmalloc (sizeof(*s));
+
+ *s = L_('\0');
+ table_render_rows (t, &s);
+ return s;
+}
diff --git a/parted/table.h b/parted/table.h
new file mode 100644
index 0000000..8c645d7
--- /dev/null
+++ b/parted/table.h
@@ -0,0 +1,52 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 2006-2007, 2009-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <wchar.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <assert.h>
+
+#include "strlist.h"
+
+#ifdef ENABLE_NLS
+# include <wchar.h>
+#else
+# ifdef wchar_t
+# undef wchar_t
+# endif
+# define wchar_t char
+#endif
+
+
+/* opaque data type */
+typedef void Table;
+
+Table* table_new(int ncols);
+void table_destroy (Table* t);
+
+/*
+ * you must not free neither 'row' nor 'list'
+ * -- this will be done by table_destroy()
+ */
+void table_add_row (Table* t, wchar_t** row);
+void table_add_row_from_strlist (Table* t, StrList* list);
+
+wchar_t* table_render(Table* t);
diff --git a/parted/ui.c b/parted/ui.c
new file mode 100644
index 0000000..33a1808
--- /dev/null
+++ b/parted/ui.c
@@ -0,0 +1,1702 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2002, 2006-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include <ctype.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <setjmp.h>
+#include <assert.h>
+#include <limits.h>
+#include <errno.h>
+
+#include "command.h"
+#include "strlist.h"
+#include "ui.h"
+#include "error.h"
+
+#define N_(String) String
+#if ENABLE_NLS
+# include <libintl.h>
+# include <locale.h>
+# define _(String) dgettext (PACKAGE, String)
+#else
+# define _(String) (String)
+#endif /* ENABLE_NLS */
+
+#ifdef HAVE_LIBREADLINE
+
+#ifdef HAVE_TERMCAP_H
+#include <termcap.h>
+#else
+extern int tgetnum (char* key);
+#endif
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+#ifndef HAVE_RL_COMPLETION_MATCHES
+#define rl_completion_matches completion_matches
+#endif
+
+#ifndef rl_compentry_func_t
+#define rl_compentry_func_t void
+#endif
+
+#endif /* HAVE_LIBREADLINE */
+
+#ifndef SA_SIGINFO
+# ifndef HAVE_SIGACTION
+
+struct sigaction {
+};
+
+static inline int
+sigaction (int signum, const struct* sigaction, struct* sigaction)
+{
+}
+
+# endif /* HAVE_SIGACTON */
+
+struct siginfo_t {
+ int si_code;
+};
+
+#endif /* SA_SIGINFO */
+
+#ifndef SEGV_MAPERR
+# define SEGV_MAPERR (INTMAX - 1)
+#endif
+
+#ifndef SEGV_ACCERR
+# define SEGV_ACCERR (INTMAX - 2)
+#endif
+
+#ifndef FPE_INTDIV
+# define FPE_INTDIV (INTMAX - 1)
+#endif
+
+#ifndef FPE_INTOVF
+# define FPE_INTOVF (INTMAX - 2)
+#endif
+
+#ifndef FPE_FLTDIV
+# define FPE_FLTDIV (INTMAX - 3)
+#endif
+
+#ifndef FPE_FLTOVF
+# define FPE_FLTOVF (INTMAX - 4)
+#endif
+
+#ifndef FPE_FLTUND
+# define FPE_FLTUND (INTMAX - 5)
+#endif
+
+#ifndef FPE_FLTRES
+# define FPE_FLTRES (INTMAX - 6)
+#endif
+
+#ifndef FPE_FLTINV
+# define FPE_FLTINV (INTMAX - 7)
+#endif
+
+#ifndef FPE_FLTSUB
+# define FPE_FLTSUB (INTMAX - 8)
+#endif
+
+#ifndef ILL_ILLOPC
+# define ILL_ILLOPC (INTMAX - 1)
+#endif
+
+#ifndef ILL_ILLOPN
+# define ILL_ILLOPN (INTMAX - 2)
+#endif
+
+#ifndef ILL_ILLADR
+# define ILL_ILLADR (INTMAX - 3)
+#endif
+
+#ifndef ILL_ILLTRP
+# define ILL_ILLTRP (INTMAX - 4)
+#endif
+
+#ifndef ILL_PRVOPC
+# define ILL_PRVOPC (INTMAX - 5)
+#endif
+
+#ifndef ILL_PRVREG
+# define ILL_PRVREG (INTMAX - 6)
+#endif
+
+#ifndef ILL_COPROC
+# define ILL_COPROC (INTMAX - 7)
+#endif
+
+#ifndef ILL_BADSTK
+# define ILL_BADSTK (INTMAX - 8)
+#endif
+
+const char* prog_name = "GNU Parted " VERSION "\n";
+
+static const char* banner_msg = N_(
+"Welcome to GNU Parted! Type 'help' to view a list of commands.\n");
+
+static const char* usage_msg = N_(
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, "
+"run in\ninteractive mode.\n");
+
+static const char* bug_msg = N_(
+"\n\nYou found a bug in GNU Parted! Here's what you have to do:\n\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n\n"
+"Please check this version prior to bug reporting.\n\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n\n"
+"\thttp://www.gnu.org/software/parted\n\n"
+"for further information.\n\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n\n"
+"\tparted DEVICE unit co print unit s print\n\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n");
+
+#define MAX_WORDS 1024
+
+static StrList* command_line;
+static Command** commands;
+static StrList* ex_opt_str [64];
+static StrList* on_list;
+static StrList* off_list;
+static StrList* on_off_list;
+
+static StrList* align_opt_list;
+static StrList* align_min_list;
+static StrList* align_opt_min_list;
+
+static StrList* fs_type_list;
+static StrList* disk_type_list;
+
+static struct {
+ const StrList* possibilities;
+ const StrList* cur_pos;
+ int in_readline;
+ sigjmp_buf jmp_state;
+} readline_state;
+
+static struct sigaction sig_segv;
+static struct sigaction sig_int;
+static struct sigaction sig_fpe;
+static struct sigaction sig_ill;
+
+volatile int got_ctrl_c = 0; /* used in exception_handler */
+
+int
+screen_width ()
+{
+ int width = 0;
+
+ if (opt_script_mode || pretend_input_tty)
+ return 32768; /* no wrapping ;) */
+
+/* HACK: don't specify termcap separately - it'll annoy the users. */
+#ifdef HAVE_LIBREADLINE
+ width = tgetnum ((char *) "co");
+#endif
+
+ if (width <= 0)
+ width = 80;
+
+ return width;
+}
+
+void
+wipe_line ()
+{
+ if (opt_script_mode)
+ return;
+
+ /* yuck */
+ fputs ("\r "
+ " \r", stdout);
+}
+
+#ifdef HAVE_LIBREADLINE
+/* returns matching commands for text */
+static char*
+command_generator (char* text, int state)
+{
+ if (!state)
+ readline_state.cur_pos = readline_state.possibilities;
+
+ while (readline_state.cur_pos) {
+ const StrList* cur = readline_state.cur_pos;
+ readline_state.cur_pos = cur->next;
+ if (str_list_match_node (cur, text))
+ return str_list_convert_node (cur);
+ }
+
+ return NULL;
+}
+
+/* completion function for readline() */
+char**
+complete_function (char* text, int start, int end)
+{
+ return rl_completion_matches (text,
+ (rl_compentry_func_t*) command_generator);
+}
+
+static void
+_add_history_unique (const char* line)
+{
+ HIST_ENTRY* last_entry = current_history ();
+ if (!strlen (line))
+ return;
+ if (!last_entry || strcmp (last_entry->line, line))
+ add_history ((char*) line);
+}
+
+/* Prints command history, to be used before aborting */
+static void
+_dump_history ()
+{
+ int i = 0;
+ HIST_ENTRY** all_entries = history_list ();
+
+ fputs (_("\nCommand History:\n"), stdout);
+ while (all_entries[i]) {
+ puts(all_entries[i++]->line);
+ }
+}
+
+#else
+
+/* Print nothing because Readline is absent. */
+static inline void
+_dump_history (void)
+{
+}
+
+#endif /* HAVE_LIBREADLINE */
+
+/* Resets the environment by jumping to the initial state
+ * saved during ui intitialisation.
+ * Pass 1 as the parameter if you want to quit parted,
+ * 0 if you just want to reset to the command prompt.
+ */
+static void
+reset_env (int quit)
+{
+ int in_readline = readline_state.in_readline;
+
+ readline_state.in_readline = 0;
+
+ if (in_readline) {
+ putchar ('\n');
+ if (quit)
+ exit (EXIT_SUCCESS);
+
+ siglongjmp (readline_state.jmp_state, 1);
+ }
+}
+
+/* Signal handler for SIGINT using 'sigaction'. */
+static void
+sa_sigint_handler (int signum, siginfo_t* info, void *ucontext)
+{
+ if (info)
+ sigaction (SIGINT, &sig_int, NULL);
+
+ got_ctrl_c = 1;
+ reset_env (0);
+}
+
+/* Signal handler for SIGSEGV using 'sigaction'. */
+static void
+sa_sigsegv_handler (int signum, siginfo_t* info, void* ucontext)
+{
+ fprintf (stderr, bug_msg, VERSION);
+ _dump_history ();
+
+ if (!info)
+ abort ();
+
+ sigaction (SIGSEGV, &sig_segv, NULL);
+
+ switch (info->si_code) {
+
+ case SEGV_MAPERR:
+ fputs(_("\nError: SEGV_MAPERR (Address not mapped "
+ "to object)\n"), stdout);
+ PED_ASSERT(0); /* Force a backtrace */
+ break;
+
+ case SEGV_ACCERR:
+ fputs(_("\nError: SEGV_ACCERR (Invalid permissions "
+ "for mapped object)\n"), stdout);
+ break;
+
+ default:
+ fputs(_("\nError: A general SIGSEGV signal was "
+ "encountered.\n"), stdout);
+ PED_ASSERT(0); /* Force a backtrace */
+ break;
+ }
+
+ abort ();
+}
+
+/* Signal handler for SIGFPE using 'sigaction'. */
+static void
+sa_sigfpe_handler (int signum, siginfo_t* info, void* ucontext)
+{
+ fprintf (stderr, bug_msg, VERSION);
+ _dump_history ();
+
+ if (!info)
+ abort ();
+
+ sigaction (SIGFPE, &sig_fpe, NULL);
+
+ switch (info->si_code) {
+
+ case FPE_INTDIV:
+ fputs(_("\nError: FPE_INTDIV (Integer: "
+ "divide by zero)"), stdout);
+ break;
+
+ case FPE_INTOVF:
+ fputs(_("\nError: FPE_INTOVF (Integer: "
+ "overflow)"), stdout);
+ break;
+
+ case FPE_FLTDIV:
+ fputs(_("\nError: FPE_FLTDIV (Float: "
+ "divide by zero)"), stdout);
+ break;
+
+ case FPE_FLTOVF:
+ fputs(_("\nError: FPE_FLTOVF (Float: "
+ "overflow)"), stdout);
+ break;
+
+ case FPE_FLTUND:
+ fputs(_("\nError: FPE_FLTUND (Float: "
+ "underflow)"), stdout);
+ break;
+
+ case FPE_FLTRES:
+ fputs(_("\nError: FPE_FLTRES (Float: "
+ "inexact result)"), stdout);
+ break;
+
+ case FPE_FLTINV:
+ fputs(_("\nError: FPE_FLTINV (Float: "
+ "invalid operation)"), stdout);
+ break;
+
+ case FPE_FLTSUB:
+ fputs(_("\nError: FPE_FLTSUB (Float: "
+ "subscript out of range)"), stdout);
+ break;
+
+ default:
+ fputs(_("\nError: A general SIGFPE signal "
+ "was encountered."), stdout);
+ break;
+
+ }
+
+ abort ();
+}
+
+/* Signal handler for SIGILL using 'sigaction'. */
+static void
+sa_sigill_handler (int signum, siginfo_t* info, void* ucontext)
+{
+ fprintf (stderr, bug_msg, VERSION);
+ _dump_history ();
+
+ if (!info)
+ abort();
+
+ sigaction (SIGILL, &sig_ill, NULL);
+
+ switch (info->si_code) {
+
+ case ILL_ILLOPC:
+ fputs(_("\nError: ILL_ILLOPC "
+ "(Illegal Opcode)"), stdout);
+ break;
+
+ case ILL_ILLOPN:
+ fputs(_("\nError: ILL_ILLOPN "
+ "(Illegal Operand)"), stdout);
+ break;
+
+ case ILL_ILLADR:
+ fputs(_("\nError: ILL_ILLADR "
+ "(Illegal addressing mode)"), stdout);
+ break;
+
+ case ILL_ILLTRP:
+ fputs(_("\nError: ILL_ILLTRP "
+ "(Illegal Trap)"), stdout);
+ break;
+
+ case ILL_PRVOPC:
+ fputs(_("\nError: ILL_PRVOPC "
+ "(Privileged Opcode)"), stdout);
+ break;
+
+ case ILL_PRVREG:
+ fputs(_("\nError: ILL_PRVREG "
+ "(Privileged Register)"), stdout);
+ break;
+
+ case ILL_COPROC:
+ fputs(_("\nError: ILL_COPROC "
+ "(Coprocessor Error)"), stdout);
+ break;
+
+ case ILL_BADSTK:
+ fputs(_("\nError: ILL_BADSTK "
+ "(Internal Stack Error)"), stdout);
+ break;
+
+ default:
+ fputs(_("\nError: A general SIGILL "
+ "signal was encountered."), stdout);
+ break;
+ }
+
+ abort ();
+}
+
+#ifndef SA_SIGINFO
+
+static void
+mask_signal()
+{
+ sigset_t curr;
+ sigset_t prev;
+
+ sigfillset(&curr);
+ sigprocmask(SIG_SETMASK, &curr, &prev);
+}
+
+/* Signal handler for SIGINT using 'signal'. */
+static void
+s_sigint_handler (int signum)
+{
+ signal (SIGINT, &s_sigint_handler);
+ mask_signal ();
+ sa_sigint_handler (signum, NULL, NULL);
+}
+
+/* Signal handler for SIGILL using 'signal'. */
+static void
+s_sigill_handler (int signum)
+{
+ signal (SIGILL, &s_sigill_handler);
+ mask_signal ();
+ sa_sigill_handler (signum, NULL, NULL);
+}
+
+/* Signal handler for SIGSEGV using 'signal'. */
+static void
+s_sigsegv_handler (int signum)
+{
+ signal (SIGSEGV, &s_sigsegv_handler);
+ mask_signal ();
+ sa_sigsegv_handler (signum, NULL, NULL);
+}
+
+/* Signal handler for SIGFPE using 'signal'. */
+static void
+s_sigfpe_handler (int signum)
+{
+ signal (SIGFPE, &s_sigfpe_handler);
+ mask_signal ();
+ sa_sigfpe_handler (signum, NULL, NULL);
+}
+#endif
+
+static char*
+_readline (const char* prompt, const StrList* possibilities)
+{
+ char* line;
+
+ readline_state.possibilities = possibilities;
+ readline_state.cur_pos = NULL;
+ readline_state.in_readline = 1;
+
+ if (sigsetjmp (readline_state.jmp_state,1))
+ return NULL;
+
+ wipe_line ();
+#ifdef HAVE_LIBREADLINE
+ if (!opt_script_mode) {
+ line = readline (prompt);
+ if (line)
+ _add_history_unique (line);
+ } else
+#endif
+ {
+ fputs (prompt, stdout);
+ fflush (stdout);
+ line = (char*) malloc (256);
+ if (fgets (line, 256, stdin) && strcmp (line, "") != 0) {
+#ifndef HAVE_LIBREADLINE
+ /* Echo the input line, to be consistent with
+ how readline-5.2 works. */
+ fputs (line, stdout);
+ fflush (stdout);
+#endif
+ /* kill trailing NL */
+ if (strlen (line))
+ line [strlen (line) - 1] = 0;
+ } else {
+ free (line);
+ line = NULL;
+ }
+ }
+
+ readline_state.in_readline = 0;
+ return line;
+}
+
+static PedExceptionOption _GL_ATTRIBUTE_PURE
+option_get_next (PedExceptionOption options, PedExceptionOption current)
+{
+ PedExceptionOption i;
+
+ if (current == 0)
+ i = PED_EXCEPTION_OPTION_FIRST;
+ else
+ i = current * 2;
+
+ for (; i <= options; i *= 2) {
+ if (options & i)
+ return i;
+ }
+ return 0;
+}
+
+static void
+_print_exception_text (PedException* ex)
+{
+ StrList* text;
+
+ wipe_line ();
+
+ if (ex->type == PED_EXCEPTION_BUG) {
+ fprintf (stderr, bug_msg, VERSION);
+ text = str_list_create ("\n", ex->message, "\n\n", NULL);
+ } else {
+ text = str_list_create (
+ _(ped_exception_get_type_string (ex->type)),
+ ": ", ex->message, "\n", NULL);
+ }
+
+ str_list_print_wrap (text, screen_width (), 0, 0, stderr);
+ str_list_destroy (text);
+}
+
+static PedExceptionOption
+exception_handler (PedException* ex)
+{
+ PedExceptionOption opt;
+
+ _print_exception_text (ex);
+
+ /* only one choice? Take it ;-) */
+ opt = option_get_next (ex->options, 0);
+ if (!option_get_next (ex->options, opt))
+ return opt;
+
+ /* script-mode and fix? */
+ int fix_is_an_option = (ex->options & PED_EXCEPTION_FIX);
+ if (opt_script_mode && opt_fix_mode && fix_is_an_option) {
+ printf ("Fixing, due to --fix\n");
+ return PED_EXCEPTION_FIX;
+ }
+
+ /* script-mode: don't handle the exception */
+ if (opt_script_mode || (!isatty (0) && !pretend_input_tty))
+ return PED_EXCEPTION_UNHANDLED;
+
+ got_ctrl_c = 0;
+
+ opt = command_line_get_ex_opt ("", ex->options);
+
+ return opt;
+}
+
+void
+command_line_push_word (const char* word)
+{
+ command_line = str_list_append (command_line, word);
+}
+
+char*
+command_line_pop_word ()
+{
+ char* result;
+ StrList* next;
+
+ PED_ASSERT (command_line != NULL);
+
+ result = str_list_convert_node (command_line);
+ next = command_line->next;
+
+ str_list_destroy_node (command_line);
+ command_line = next;
+ return result;
+}
+
+void
+command_line_flush ()
+{
+ str_list_destroy (command_line);
+ command_line = NULL;
+}
+
+char*
+command_line_peek_word ()
+{
+ if (command_line)
+ return str_list_convert_node (command_line);
+ else
+ return NULL;
+}
+
+int
+command_line_get_word_count ()
+{
+ return str_list_length (command_line);
+}
+
+static int _GL_ATTRIBUTE_PURE
+_str_is_spaces (const char* str)
+{
+ while (isspace (*str))
+ str++;
+
+ return *str == 0;
+}
+
+/* "multi_word mode" is the "normal" mode... many words can be typed,
+ * delimited by spaces, etc.
+ * In single-word mode, only one word is parsed per line.
+ * Leading and trailing spaces are removed. For example: " a b c "
+ * is a single word "a b c". The motivation for this mode is partition
+ * names, etc. In single-word mode, the empty string is a word.
+ * (but not in multi-word mode).
+ */
+void
+command_line_push_line (const char* line, int multi_word)
+{
+ int quoted = 0;
+ int quotes_empty = 0;
+ char quote_char = 0;
+ char this_word [256];
+ int i;
+
+ do {
+ while (*line == ' ')
+ line++;
+
+ i = 0;
+ for (; *line && i < sizeof (this_word) - 1; line++) {
+ if (*line == ' ' && !quoted) {
+ if (multi_word)
+ break;
+
+ /* single word: check for trailing spaces + eol */
+ if (_str_is_spaces (line))
+ break;
+ }
+
+ if (!quoted && strchr ("'\"", *line)) {
+ quoted = 1;
+ quote_char = *line;
+ continue;
+ }
+
+ if (quoted && *line == quote_char) {
+ quoted = 0;
+ /* allow empty partition name in script mode */
+ if (!i)
+ quotes_empty = 1;
+ continue;
+ }
+
+ /* hack: escape characters */
+ if (quoted && line[0] == '\\' && line[1])
+ line++;
+
+ quotes_empty = 0;
+ this_word [i++] = *line;
+ }
+ if (i || !multi_word || quotes_empty) {
+ quotes_empty = 0;
+ this_word [i] = 0;
+ command_line_push_word (this_word);
+ }
+ } while (*line && multi_word);
+}
+
+static char*
+realloc_and_cat (char* str, const char* append)
+{
+ int length = strlen (str) + strlen (append) + 1;
+ char* new_str = realloc (str, length);
+
+ PED_ASSERT(new_str != NULL);
+
+ strcat (new_str, append);
+ return new_str;
+}
+
+static char*
+_construct_prompt (const char* head, const char* def,
+ const StrList* possibilities)
+{
+ PED_ASSERT(head != NULL);
+ char* prompt = strdup (head);
+ PED_ASSERT(prompt != NULL);
+
+ if (def && possibilities)
+ PED_ASSERT (str_list_match_any (possibilities, def));
+
+ if (possibilities && str_list_length (possibilities) < 8) {
+ const StrList* walk;
+
+ if (strlen (prompt))
+ prompt = realloc_and_cat (prompt, " ");
+
+ for (walk = possibilities; walk; walk = walk->next) {
+ if (walk != possibilities)
+ prompt = realloc_and_cat (prompt, "/");
+
+ if (def && str_list_match_node (walk, def) == 2) {
+ prompt = realloc_and_cat (prompt, "[");
+ prompt = realloc_and_cat (prompt, def);
+ prompt = realloc_and_cat (prompt, "]");
+ } else {
+ char* text = str_list_convert_node (walk);
+ prompt = realloc_and_cat (prompt, text);
+ free (text);
+ }
+ }
+ prompt = realloc_and_cat (prompt, "? ");
+ } else if (def) {
+ if (strlen (prompt))
+ prompt = realloc_and_cat (prompt, " ");
+ prompt = realloc_and_cat (prompt, "[");
+ prompt = realloc_and_cat (prompt, def);
+ prompt = realloc_and_cat (prompt, "]? ");
+ } else {
+ if (strlen (prompt))
+ prompt = realloc_and_cat (prompt, " ");
+ }
+
+ return prompt;
+}
+
+void
+command_line_prompt_words (const char* prompt, const char* def,
+ const StrList* possibilities, int multi_word)
+{
+ char* line;
+ char* real_prompt;
+ char* _def = (char*) def;
+ int _def_needs_free = 0;
+
+ if (!def && str_list_length (possibilities) == 1) {
+ _def = str_list_convert_node (possibilities);
+ _def_needs_free = 1;
+ }
+
+ if (opt_script_mode) {
+ if (_def) {
+ command_line_push_line (_def, 0);
+ if (_def_needs_free)
+ free (_def);
+ }
+ return;
+ }
+
+ do {
+ real_prompt = _construct_prompt (prompt, _def, possibilities);
+ line = _readline (real_prompt, possibilities);
+ free (real_prompt);
+ if (!line) {
+ /* readline returns NULL to indicate EOF.
+ Treat that like an interrupt. */
+ got_ctrl_c = 1;
+ break;
+ }
+
+ if (!strlen (line)) {
+ if (_def)
+ command_line_push_line (_def, 0);
+ } else {
+ command_line_push_line (line, multi_word);
+ }
+ free (line);
+ } while (!command_line_get_word_count () && !_def);
+
+ if (_def_needs_free)
+ free (_def);
+}
+
+/**
+ * Get a word from command line.
+ *
+ * \param possibilities a StrList of valid strings, NULL if all are valid.
+ * \param multi_word whether multiple words are allowed.
+ *
+ * \return The word(s), or NULL if empty.
+ */
+char*
+command_line_get_word (const char* prompt, const char* def,
+ const StrList* possibilities, int multi_word)
+{
+ do {
+ if (command_line_get_word_count ()) {
+ char* result = command_line_pop_word ();
+ StrList* result_node;
+
+ if (!possibilities)
+ return result;
+
+ result_node = str_list_match (possibilities, result);
+ if (result_node == NULL)
+ error (0, 0, _("invalid token: %s"), result);
+ free (result);
+ if (result_node)
+ return str_list_convert_node (result_node);
+
+ command_line_flush ();
+ if (opt_script_mode)
+ return NULL;
+ }
+
+ command_line_prompt_words (prompt, def, possibilities,
+ multi_word);
+ if (got_ctrl_c) {
+ got_ctrl_c = 0;
+ return NULL;
+ }
+ } while (command_line_get_word_count ());
+
+ return NULL;
+}
+
+int
+command_line_get_integer (const char* prompt, int* value)
+{
+ char def_str [20];
+ char* input;
+ long ret;
+
+ snprintf (def_str, 20, "%d", *value);
+ input = command_line_get_word (prompt, *value ? def_str : NULL,
+ NULL, 1);
+ if (!input)
+ return 0;
+
+ errno = 0;
+ ret = strtol (input, (char**) NULL, 10);
+ if (errno)
+ goto error;
+
+ if ((ret > INT_MAX) || (ret < INT_MIN))
+ goto error;
+ else
+ *value = (int) ret;
+
+ free (input);
+ return 1;
+
+error:
+ free (input);
+ return 0;
+}
+
+int
+command_line_get_sector (const char* prompt, PedDevice* dev, PedSector* value,
+ PedGeometry** range, char** raw_input)
+{
+ char* def_str;
+ char* input;
+ int valid;
+
+ def_str = ped_unit_format (dev, *value);
+ input = command_line_get_word (prompt, *value ? def_str : NULL,
+ NULL, 1);
+
+ /* def_str might have rounded *value a little bit. If the user picked
+ * the default, make sure the selected sector is identical to the
+ * default.
+ */
+ if (input && *value && !strcmp (input, def_str)) {
+ if (range) {
+ *range = ped_geometry_new (dev, *value, 1);
+ free (def_str);
+ free (input);
+ return *range != NULL;
+ }
+
+ free (def_str);
+ free (input);
+ return 1;
+ }
+
+ free (def_str);
+ if (!input) {
+ *value = 0;
+ if (range)
+ *range = NULL;
+ return 0;
+ }
+
+ valid = ped_unit_parse (input, dev, value, range);
+
+ if (raw_input)
+ *raw_input = input;
+ else
+ free (input);
+ return valid;
+}
+
+int
+command_line_get_state (const char* prompt, int* value)
+{
+ char* def_word;
+ char* input;
+
+ if (*value)
+ def_word = str_list_convert_node (on_list);
+ else
+ def_word = str_list_convert_node (off_list);
+ input = command_line_get_word (prompt, def_word, on_off_list, 1);
+ free (def_word);
+ if (!input)
+ return 0;
+ if (str_list_match_any (on_list, input))
+ *value = 1;
+ else
+ *value = 0;
+ free (input);
+ return 1;
+}
+
+int
+command_line_get_device (const char* prompt, PedDevice** value)
+{
+ char *def_dev_name = *value ? (*value)->path : NULL;
+ char *dev_name = command_line_get_word (prompt, def_dev_name, NULL, 1);
+ if (!dev_name)
+ return 0;
+
+ PedDevice *dev = ped_device_get (dev_name);
+ free (dev_name);
+ if (!dev)
+ return 0;
+
+ *value = dev;
+ return 1;
+}
+
+int
+command_line_get_disk (const char* prompt, PedDisk** value)
+{
+ PedDevice* dev = *value ? (*value)->dev : NULL;
+
+ if (!command_line_get_device (prompt, &dev))
+ return 0;
+
+ assert (*value);
+ if (dev != (*value)->dev) {
+ PedDisk* new_disk = ped_disk_new (dev);
+ if (!new_disk)
+ return 0;
+ *value = new_disk;
+ }
+ return 1;
+}
+
+int
+command_line_get_partition (const char* prompt, PedDisk* disk,
+ PedPartition** value)
+{
+ PedPartition* part;
+ int ret;
+
+ /* Flawed logic, doesn't seem to work?!
+ check = ped_disk_next_partition (disk, part);
+ part = ped_disk_next_partition (disk, check);
+
+ if (part == NULL) {
+
+ *value = check;
+ printf (_("The (only) primary partition has "
+ "been automatically selected\n"));
+ return 1;
+
+ } else {
+ */
+ int num = (*value) ? (*value)->num : 0;
+
+ ret = command_line_get_integer (prompt, &num);
+ if ((!ret) || (num < 0)) {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Expecting a partition number."));
+ return 0;
+ }
+
+ part = ped_disk_get_partition (disk, num);
+
+ if (!part) {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_CANCEL,
+ _("Partition doesn't exist."));
+ return 0;
+ }
+
+ *value = part;
+ return 1;
+ //}
+}
+
+int
+command_line_get_fs_type (const char* prompt, const PedFileSystemType*(* value))
+{
+ char* fs_type_name;
+ PedFileSystemType* fs_type;
+
+ fs_type_name = command_line_get_word (prompt,
+ *value ? (*value)->name : NULL,
+ fs_type_list, 1);
+ if (!fs_type_name) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Expecting a file system type."));
+ return 0;
+ }
+
+ fs_type = ped_file_system_type_get (fs_type_name);
+ if (!fs_type) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Unknown file system type \"%s\"."),
+ fs_type_name);
+ free (fs_type_name);
+ return 0;
+ }
+
+ free (fs_type_name);
+ *value = fs_type;
+ return 1;
+}
+
+int
+command_line_get_disk_type (const char* prompt, const PedDiskType*(* value))
+{
+ char* disk_type_name;
+
+ disk_type_name = command_line_get_word (prompt,
+ *value ? (*value)->name : NULL,
+ disk_type_list, 1);
+ if (!disk_type_name) {
+ ped_exception_throw (PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Expecting a disk label type."));
+ return 0;
+ }
+
+ *value = ped_disk_type_get (disk_type_name);
+ free (disk_type_name);
+ PED_ASSERT (*value != NULL);
+ return 1;
+}
+
+int
+command_line_get_disk_flag (const char* prompt, const PedDisk* disk,
+ PedDiskFlag* flag)
+{
+ StrList* opts = NULL;
+ PedDiskFlag walk = 0;
+ char* flag_name;
+
+ while ( (walk = ped_disk_flag_next (walk)) ) {
+ if (ped_disk_is_flag_available (disk, walk)) {
+ const char* walk_name;
+
+ walk_name = ped_disk_flag_get_name (walk);
+ opts = str_list_append (opts, walk_name);
+ opts = str_list_append_unique (opts, _(walk_name));
+ }
+ }
+ if (opts == NULL)
+ {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_OK,
+ _("No flags supported"));
+
+ return 0;
+ }
+ flag_name = command_line_get_word (prompt, NULL, opts, 1);
+ str_list_destroy (opts);
+
+ if (flag_name) {
+ *flag = ped_disk_flag_get_by_name (flag_name);
+ free (flag_name);
+ return 1;
+ } else
+ return 0;
+}
+
+int
+command_line_get_part_flag (const char* prompt, const PedPartition* part,
+ PedPartitionFlag* flag)
+{
+ StrList* opts = NULL;
+ PedPartitionFlag walk = 0;
+ char* flag_name;
+
+ while ( (walk = ped_partition_flag_next (walk)) ) {
+ if (ped_partition_is_flag_available (part, walk)) {
+ const char* walk_name;
+
+ walk_name = ped_partition_flag_get_name (walk);
+ opts = str_list_append (opts, walk_name);
+ opts = str_list_append_unique (opts, _(walk_name));
+ }
+ }
+ if (opts == NULL)
+ {
+ ped_exception_throw (PED_EXCEPTION_ERROR,
+ PED_EXCEPTION_OK,
+ _("No flags supported"));
+
+ return 0;
+ }
+ flag_name = command_line_get_word (prompt, NULL, opts, 1);
+ str_list_destroy (opts);
+
+ if (flag_name) {
+ *flag = ped_partition_flag_get_by_name (flag_name);
+ free (flag_name);
+ return 1;
+ } else
+ return 0;
+}
+
+static int
+_can_create_primary (const PedDisk* disk)
+{
+ int i;
+
+ for (i = 1; i <= ped_disk_get_max_primary_partition_count (disk); i++) {
+ if (!ped_disk_get_partition (disk, i))
+ return 1;
+ }
+
+ return 0;
+}
+
+static int
+_can_create_extended (const PedDisk* disk)
+{
+ if (!_can_create_primary (disk))
+ return 0;
+
+ if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED))
+ return 0;
+
+ if (ped_disk_extended_partition (disk))
+ return 0;
+
+ return 1;
+}
+
+static int
+_can_create_logical (const PedDisk* disk)
+{
+ if (!ped_disk_type_check_feature (disk->type, PED_DISK_TYPE_EXTENDED))
+ return 0;
+
+ return ped_disk_extended_partition (disk) != 0;
+}
+
+int
+command_line_get_part_type (const char* prompt, const PedDisk* disk,
+ PedPartitionType* type)
+{
+ StrList* opts = NULL;
+ char* type_name;
+
+ if (_can_create_primary (disk)) {
+ opts = str_list_append_unique (opts, "primary");
+ opts = str_list_append_unique (opts, _("primary"));
+ }
+ if (_can_create_extended (disk)) {
+ opts = str_list_append_unique (opts, "extended");
+ opts = str_list_append_unique (opts, _("extended"));
+ }
+ if (_can_create_logical (disk)) {
+ opts = str_list_append_unique (opts, "logical");
+ opts = str_list_append_unique (opts, _("logical"));
+ }
+ if (!opts) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Can't create any more partitions."));
+ return 0;
+ }
+
+ type_name = command_line_get_word (prompt, NULL, opts, 1);
+ str_list_destroy (opts);
+
+ if (!type_name) {
+ ped_exception_throw (
+ PED_EXCEPTION_ERROR, PED_EXCEPTION_CANCEL,
+ _("Expecting a partition type."));
+ return 0;
+ }
+
+ if (!strcmp (type_name, "primary")
+ || !strcmp (type_name, _("primary"))) {
+ *type = 0;
+ }
+ if (!strcmp (type_name, "extended")
+ || !strcmp (type_name, _("extended"))) {
+ *type = PED_PARTITION_EXTENDED;
+ }
+ if (!strcmp (type_name, "logical")
+ || !strcmp (type_name, _("logical"))) {
+ *type = PED_PARTITION_LOGICAL;
+ }
+
+ free (type_name);
+ return 1;
+}
+
+PedExceptionOption
+command_line_get_ex_opt (const char* prompt, PedExceptionOption options)
+{
+ StrList* options_strlist = NULL;
+ PedExceptionOption opt;
+ char* opt_name;
+
+ command_line_flush ();
+ for (opt = option_get_next (options, 0); opt;
+ opt = option_get_next (options, opt)) {
+ options_strlist = str_list_append_unique (options_strlist,
+ _(ped_exception_get_option_string (opt)));
+ options_strlist = str_list_append_unique (options_strlist,
+ ped_exception_get_option_string (opt));
+ }
+
+ opt_name = command_line_get_word (prompt, NULL, options_strlist, 1);
+ if (!opt_name)
+ return PED_EXCEPTION_UNHANDLED;
+ str_list_destroy (options_strlist);
+
+ opt = PED_EXCEPTION_OPTION_FIRST;
+ while (1) {
+ if (strcmp (opt_name,
+ ped_exception_get_option_string (opt)) == 0)
+ break;
+ if (strcmp (opt_name,
+ _(ped_exception_get_option_string (opt))) == 0)
+ break;
+ opt = option_get_next (options, opt);
+ }
+ free (opt_name);
+ return opt;
+}
+
+int
+command_line_get_align_type (const char *prompt, enum AlignmentType *align_type)
+{
+ char* def_word;
+ char* input;
+
+ if (*align_type)
+ def_word = str_list_convert_node (align_opt_list);
+ else
+ def_word = str_list_convert_node (align_min_list);
+ input = command_line_get_word (prompt, def_word, align_opt_min_list, 1);
+ free (def_word);
+ if (!input)
+ return 0;
+ *align_type = (str_list_match_any (align_opt_list, input)
+ ? PA_OPTIMUM
+ : PA_MINIMUM);
+ free (input);
+ return 1;
+}
+
+int
+command_line_get_unit (const char* prompt, PedUnit* unit)
+{
+ StrList* opts = NULL;
+ PedUnit walk;
+ char* unit_name;
+ const char* default_unit_name;
+
+ for (walk = PED_UNIT_FIRST; walk <= PED_UNIT_LAST; walk++)
+ opts = str_list_append (opts, ped_unit_get_name (walk));
+
+ default_unit_name = ped_unit_get_name (ped_unit_get_default ());
+ unit_name = command_line_get_word (prompt, default_unit_name, opts, 1);
+ str_list_destroy (opts);
+
+ if (unit_name) {
+ *unit = ped_unit_get_by_name (unit_name);
+ free (unit_name);
+ return 1;
+ } else
+ return 0;
+}
+
+int
+command_line_is_integer ()
+{
+ char* word;
+ int is_integer;
+ int scratch;
+
+ word = command_line_peek_word ();
+ if (!word)
+ return 0;
+
+ is_integer = sscanf (word, "%d", &scratch);
+ free (word);
+ return is_integer;
+}
+
+static int
+init_ex_opt_str ()
+{
+ int i;
+ PedExceptionOption opt;
+
+ for (i = 0; (1 << i) <= PED_EXCEPTION_OPTION_LAST; i++) {
+ opt = (1 << i);
+ ex_opt_str [i]
+ = str_list_create (
+ ped_exception_get_option_string (opt),
+ _(ped_exception_get_option_string (opt)),
+ NULL);
+ if (!ex_opt_str [i])
+ return 0;
+ }
+
+ ex_opt_str [i] = NULL;
+ return 1;
+}
+
+static void
+done_ex_opt_str ()
+{
+ int i;
+
+ for (i=0; ex_opt_str [i]; i++)
+ str_list_destroy (ex_opt_str [i]);
+}
+
+static int
+init_state_str ()
+{
+ on_list = str_list_create_unique (_("on"), "on", NULL);
+ off_list = str_list_create_unique (_("off"), "off", NULL);
+ on_off_list = str_list_join (str_list_duplicate (on_list),
+ str_list_duplicate (off_list));
+ return 1;
+}
+
+static void
+done_state_str ()
+{
+ str_list_destroy (on_list);
+ str_list_destroy (off_list);
+ str_list_destroy (on_off_list);
+}
+
+static int
+init_alignment_type_str ()
+{
+ align_opt_list = str_list_create_unique (_("optimal"), "optimal", NULL);
+ align_min_list = str_list_create_unique (_("minimal"), "minimal", NULL);
+ align_opt_min_list = str_list_join (str_list_duplicate (align_opt_list),
+ str_list_duplicate (align_min_list));
+ return 1;
+}
+
+static void
+done_alignment_type_str ()
+{
+ str_list_destroy (align_opt_list);
+ str_list_destroy (align_min_list);
+ str_list_destroy (align_opt_min_list);
+}
+
+static int
+init_fs_type_str ()
+{
+ PedFileSystemType* walk;
+ PedFileSystemAlias* alias_walk;
+
+ fs_type_list = NULL;
+
+ for (walk = ped_file_system_type_get_next (NULL); walk;
+ walk = ped_file_system_type_get_next (walk))
+ {
+ fs_type_list = str_list_insert (fs_type_list, walk->name);
+ if (!fs_type_list)
+ return 0;
+ }
+ for (alias_walk = ped_file_system_alias_get_next (NULL); alias_walk;
+ alias_walk = ped_file_system_alias_get_next (alias_walk))
+ {
+ fs_type_list = str_list_insert (fs_type_list,
+ alias_walk->alias);
+ if (!fs_type_list)
+ return 0;
+ }
+
+ return 1;
+}
+
+static int
+init_disk_type_str ()
+{
+ PedDiskType* walk;
+
+ disk_type_list = NULL;
+
+ for (walk = ped_disk_type_get_next (NULL); walk;
+ walk = ped_disk_type_get_next (walk))
+ {
+ disk_type_list = str_list_insert (disk_type_list, walk->name);
+ if (!disk_type_list)
+ return 0;
+ }
+
+ return 1;
+}
+
+int
+init_readline (void)
+{
+#ifdef HAVE_LIBREADLINE
+ if (!opt_script_mode) {
+ rl_initialize ();
+ rl_attempted_completion_function = (rl_completion_func_t *) complete_function;
+ readline_state.in_readline = 0;
+ }
+#endif
+ return 0;
+}
+
+int
+init_ui ()
+{
+ if (!init_ex_opt_str ()
+ || !init_state_str ()
+ || !init_alignment_type_str ()
+ || !init_fs_type_str ()
+ || !init_disk_type_str ())
+ return 0;
+ ped_exception_set_handler (exception_handler);
+
+#ifdef SA_SIGINFO
+ sigset_t curr;
+ sigfillset (&curr);
+
+ sig_segv.sa_sigaction = &sa_sigsegv_handler;
+ sig_int.sa_sigaction = &sa_sigint_handler;
+ sig_fpe.sa_sigaction = &sa_sigfpe_handler;
+ sig_ill.sa_sigaction = &sa_sigill_handler;
+
+ sig_segv.sa_mask =
+ sig_int.sa_mask =
+ sig_fpe.sa_mask =
+ sig_ill.sa_mask = curr;
+
+ sig_segv.sa_flags =
+ sig_int.sa_flags =
+ sig_fpe.sa_flags =
+ sig_ill.sa_flags = SA_SIGINFO;
+
+ sigaction (SIGSEGV, &sig_segv, NULL);
+ sigaction (SIGINT, &sig_int, NULL);
+ sigaction (SIGFPE, &sig_fpe, NULL);
+ sigaction (SIGILL, &sig_ill, NULL);
+#else
+ signal (SIGSEGV, s_sigsegv_handler);
+ signal (SIGINT, s_sigint_handler);
+ signal (SIGFPE, s_sigfpe_handler);
+ signal (SIGILL, s_sigill_handler);
+#endif /* SA_SIGINFO */
+
+ return 1;
+}
+
+void
+done_ui ()
+{
+ ped_exception_set_handler (NULL);
+ done_ex_opt_str ();
+ done_state_str ();
+ done_alignment_type_str ();
+ str_list_destroy (fs_type_list);
+ str_list_destroy (disk_type_list);
+}
+
+void
+help_msg ()
+{
+ fputs (_(usage_msg), stdout);
+
+ putchar ('\n');
+ fputs (_("OPTIONs:"), stdout);
+ putchar ('\n');
+ print_options_help ();
+
+ putchar ('\n');
+ fputs (_("COMMANDs:"), stdout);
+ putchar ('\n');
+ print_commands_help ();
+ printf (_("\nReport bugs to %s\n"), PACKAGE_BUGREPORT);
+ exit (EXIT_SUCCESS);
+}
+
+void
+print_using_dev (PedDevice* dev)
+{
+ printf (_("Using %s\n"), dev->path);
+}
+
+int
+interactive_mode (PedDevice** dev, PedDisk** disk, Command* cmd_list[])
+{
+ StrList* list;
+ StrList* command_names = command_get_names (cmd_list);
+
+ commands = cmd_list; /* FIXME yucky, nasty, evil hack */
+
+ fputs (prog_name, stdout);
+
+ print_using_dev (*dev);
+
+ list = str_list_create (_(banner_msg), NULL);
+ str_list_print_wrap (list, screen_width (), 0, 0, stdout);
+ str_list_destroy (list);
+
+ while (1) {
+ char* word;
+ Command* cmd;
+
+ while (!command_line_get_word_count ()) {
+ if (got_ctrl_c) {
+ putchar ('\n');
+ return 1;
+ }
+ command_line_prompt_words ("(parted)", NULL,
+ command_names, 1);
+ }
+
+ word = command_line_pop_word ();
+ if (word) {
+ cmd = command_get (commands, word);
+ free (word);
+ if (cmd) {
+ if (!command_run (cmd, dev, disk)) {
+ command_line_flush ();
+
+ if (*disk) {
+ ped_disk_destroy (*disk);
+ *disk = 0;
+ }
+ }
+ } else
+ print_commands_help ();
+ }
+ }
+
+ return 1;
+}
+
+
+int
+non_interactive_mode (PedDevice** dev, PedDisk **disk, Command* cmd_list[],
+ int argc, char* argv[])
+{
+ int i;
+ Command* cmd;
+
+ commands = cmd_list; /* FIXME yucky, nasty, evil hack */
+
+ for (i = 0; i < argc; i++)
+ command_line_push_line (argv [i], 1);
+
+ while (command_line_get_word_count ()) {
+ char* word;
+
+ word = command_line_pop_word ();
+ if (!word)
+ break;
+
+ cmd = command_get (commands, word);
+ free (word);
+ if (!cmd) {
+ help_msg ();
+ goto error;
+ }
+ if (!(cmd->non_interactive)) {
+ fputs(_("This command does not make sense in "
+ "non-interactive mode.\n"), stdout);
+ exit(EXIT_FAILURE);
+ goto error;
+ }
+
+ if (!command_run (cmd, dev, disk))
+ goto error;
+ }
+ return 1;
+
+error:
+ return 0;
+}
diff --git a/parted/ui.h b/parted/ui.h
new file mode 100644
index 0000000..61a71de
--- /dev/null
+++ b/parted/ui.h
@@ -0,0 +1,98 @@
+/*
+ parted - a frontend to libparted
+ Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef UI_H_INCLUDED
+#define UI_H_INCLUDED
+
+#include "strlist.h"
+
+enum AlignmentType
+ {
+ PA_MINIMUM = 1,
+ PA_OPTIMUM
+ };
+
+extern const char *prog_name;
+
+extern int init_ui ();
+extern int init_readline ();
+extern int non_interactive_mode (PedDevice** dev, PedDisk **disk,
+ Command* cmd_list[], int argc,
+ char* argv[]);
+extern int interactive_mode (PedDevice** dev, PedDisk **disk,
+ Command* cmd_list[]);
+extern void done_ui ();
+
+extern int screen_width ();
+extern void wipe_line ();
+
+extern void command_line_push_word (const char* word);
+extern char* command_line_pop_word ();
+extern char* command_line_peek_word ();
+extern void command_line_flush ();
+extern int command_line_get_word_count () _GL_ATTRIBUTE_PURE;
+extern void command_line_prompt_words (const char* prompt, const char* def,
+ const StrList* possibilities,
+ int multi_word);
+extern char* command_line_get_word (const char* prompt, const char* def,
+ const StrList* possibilities,
+ int multi_word);
+extern int command_line_get_integer (const char* prompt, int* value);
+extern int command_line_get_sector (const char* prompt, PedDevice* dev,
+ PedSector* value, PedGeometry** range, char** raw_input);
+extern int command_line_get_state (const char* prompt, int* value);
+extern int command_line_get_device (const char* prompt, PedDevice** value);
+extern int command_line_get_disk (const char* prompt, PedDisk** value)
+ __attribute__((__nonnull__(2)));
+extern int command_line_get_partition (const char* prompt, PedDisk* disk,
+ PedPartition** value);
+extern int command_line_get_fs_type (const char* prompt,
+ const PedFileSystemType*(* value));
+extern int command_line_get_disk_type (const char* prompt,
+ const PedDiskType*(* value));
+extern int command_line_get_disk_flag (const char* prompt,
+ const PedDisk* disk,
+ PedDiskFlag* flag);
+extern int command_line_get_part_flag (const char* prompt,
+ const PedPartition* part,
+ PedPartitionFlag* flag);
+extern int command_line_get_part_type (const char* prompt, const PedDisk* disk,
+ PedPartitionType* type);
+extern PedExceptionOption command_line_get_ex_opt (const char* prompt,
+ PedExceptionOption options);
+extern int command_line_get_unit (const char* prompt, PedUnit* unit);
+extern int command_line_get_align_type (const char *prompt,
+ enum AlignmentType *align_type);
+
+extern int command_line_is_integer ();
+extern int command_line_is_sector ();
+
+extern void help_msg () __attribute__((__noreturn__));
+
+extern void print_using_dev (PedDevice* dev);
+
+/* in parted.c */
+extern int opt_script_mode;
+extern int opt_fix_mode;
+extern int pretend_input_tty;
+
+extern void print_options_help ();
+extern void print_commands_help ();
+
+#endif /* UI_H_INCLUDED */
diff --git a/partprobe/Makefile.am b/partprobe/Makefile.am
new file mode 100644
index 0000000..c0304a0
--- /dev/null
+++ b/partprobe/Makefile.am
@@ -0,0 +1,16 @@
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+sbin_PROGRAMS = partprobe
+
+partprobe_SOURCES = partprobe.c
+
+partprobe_LDADD = \
+ $(top_builddir)/libparted/libparted.la \
+ $(INTLLIBS) $(LIBS) \
+ $(PARTED_LIBS)
+
+partprobe_LDFLAGS = $(PARTEDLDFLAGS)
+
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
diff --git a/partprobe/Makefile.in b/partprobe/Makefile.in
new file mode 100644
index 0000000..fa1d4ad
--- /dev/null
+++ b/partprobe/Makefile.in
@@ -0,0 +1,2007 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+sbin_PROGRAMS = partprobe$(EXEEXT)
+subdir = partprobe
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)"
+PROGRAMS = $(sbin_PROGRAMS)
+am_partprobe_OBJECTS = partprobe.$(OBJEXT)
+partprobe_OBJECTS = $(am_partprobe_OBJECTS)
+am__DEPENDENCIES_1 =
+partprobe_DEPENDENCIES = $(top_builddir)/libparted/libparted.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+partprobe_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(partprobe_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/partprobe.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(partprobe_SOURCES)
+DIST_SOURCES = $(partprobe_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+partedincludedir = \
+ -I$(top_srcdir)/lib -I$(top_builddir)/include -I$(top_srcdir)/include
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+partprobe_SOURCES = partprobe.c
+partprobe_LDADD = \
+ $(top_builddir)/libparted/libparted.la \
+ $(INTLLIBS) $(LIBS) \
+ $(PARTED_LIBS)
+
+partprobe_LDFLAGS = $(PARTEDLDFLAGS)
+AM_CPPFLAGS = $(partedincludedir) $(INTLINCS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu partprobe/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu partprobe/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ || test -f $$p1 \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(sbindir)" && rm -f $$files
+
+clean-sbinPROGRAMS:
+ @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+partprobe$(EXEEXT): $(partprobe_OBJECTS) $(partprobe_DEPENDENCIES) $(EXTRA_partprobe_DEPENDENCIES)
+ @rm -f partprobe$(EXEEXT)
+ $(AM_V_CCLD)$(partprobe_LINK) $(partprobe_OBJECTS) $(partprobe_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partprobe.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+ for dir in "$(DESTDIR)$(sbindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/partprobe.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/partprobe.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-sbinPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+ clean-generic clean-libtool clean-sbinPROGRAMS cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-sbinPROGRAMS install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am uninstall-sbinPROGRAMS
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/partprobe/partprobe.c b/partprobe/partprobe.c
new file mode 100644
index 0000000..bdd8963
--- /dev/null
+++ b/partprobe/partprobe.c
@@ -0,0 +1,227 @@
+/*
+ partprobe - informs the OS kernel of partition layout
+ Copyright (C) 2001-2002, 2007-2014, 2019-2023 Free Software Foundation,
+ Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* it's best to compile this with:
+ *
+ * CFLAGS=-Os ./configure --disable-nls --disable-shared --disable-debug
+ * --enable-discover-only
+ *
+ * And strip(1) afterwards!
+ */
+
+#include <config.h>
+
+#include <parted/parted.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <getopt.h>
+
+#include "closeout.h"
+#include "configmake.h"
+#include "progname.h"
+#include "version-etc.h"
+
+#include <locale.h>
+#include "gettext.h"
+#if ! ENABLE_NLS
+# undef textdomain
+# define textdomain(Domainname) /* empty */
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) /* empty */
+#endif
+
+#undef _
+#define _(msgid) gettext (msgid)
+
+#define AUTHORS \
+ "<http://git.debian.org/?p=parted/parted.git;a=blob_plain;f=AUTHORS>"
+
+/* The official name of this program (e.g., no `g' prefix). */
+#define PROGRAM_NAME "partprobe"
+
+static struct option const long_options[] =
+ {
+ {"dry-run", no_argument, NULL, 'd'},
+ {"summary", no_argument, NULL, 's'},
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'v'},
+ {NULL, 0, NULL, 0}
+ };
+
+/* initialized to 0 according to the language lawyers */
+static int opt_no_inform;
+static int opt_summary;
+
+static void
+summary (PedDisk* disk)
+{
+ PedPartition* walk;
+
+ printf ("%s: %s partitions", disk->dev->path, disk->type->name);
+ for (walk = disk->part_list; walk; walk = walk->next) {
+ if (!ped_partition_is_active (walk))
+ continue;
+
+ printf (" %d", walk->num);
+ if (walk->type & PED_PARTITION_EXTENDED) {
+ PedPartition* log_walk;
+ int is_first = 1;
+
+ printf (" <");
+ for (log_walk = walk->part_list; log_walk;
+ log_walk = log_walk->next) {
+ if (!ped_partition_is_active (log_walk))
+ continue;
+ if (!is_first)
+ printf (" ");
+ printf ("%d", log_walk->num);
+ is_first = 0;
+ }
+ printf (">");
+ }
+ }
+ printf ("\n");
+}
+
+static int
+process_dev (PedDevice* dev)
+{
+ PedDiskType* disk_type;
+ PedDisk* disk;
+
+ if (!ped_device_open (dev))
+ return 0;
+
+ disk_type = ped_disk_probe (dev);
+ if (!disk_type) {
+ /* Partition table not found, so create dummy,
+ empty one */
+ disk_type = ped_disk_type_get("msdos");
+ if (!disk_type)
+ goto error;
+
+ disk = ped_disk_new_fresh (dev, disk_type);
+ if (!disk)
+ goto error_destroy_disk;
+ } else {
+ disk = ped_disk_new (dev);
+ if (!disk)
+ goto error;
+ }
+ if (!opt_no_inform) {
+ if (!ped_disk_commit_to_os (disk))
+ goto error_destroy_disk;
+ }
+ if (opt_summary)
+ summary (disk);
+ ped_disk_destroy (disk);
+ ped_device_close (dev);
+ return 1;
+
+error_destroy_disk:
+ ped_disk_destroy (disk);
+error:
+ ped_device_close (dev);
+ return 0;
+}
+
+static void
+usage (int status)
+{
+ if (status != EXIT_SUCCESS)
+ fprintf (stderr, _("Try `%s --help' for more information.\n"),
+ program_name);
+ else
+ {
+ printf (_("Usage: %s [OPTION] [DEVICE]...\n"), PROGRAM_NAME);
+ fputs (_("\
+Inform the operating system about partition table changes.\n\
+\n\
+ -d, --dry-run do not actually inform the operating system\n\
+ -s, --summary print a summary of contents\n\
+ -h, --help display this help and exit\n\
+ -v, --version output version information and exit\n\
+"), stdout);
+ fputs (_("\
+\n\
+When no DEVICE is given, probe all partitions.\n\
+"), stdout);
+ printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ }
+ exit (status);
+}
+
+int
+main (int argc, char* argv[])
+{
+ int status = 0;
+
+ set_program_name (argv[0]);
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
+ atexit (close_stdout);
+
+ int c;
+ while ((c = getopt_long (argc, argv, "dhsv", long_options, NULL)) != -1)
+ switch (c) {
+ case 'd':
+ opt_no_inform = 1;
+ break;
+
+ case 's':
+ opt_summary = 1;
+ break;
+
+ case 'h':
+ usage (EXIT_SUCCESS);
+ break;
+
+ case 'v':
+ version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME,
+ VERSION, AUTHORS, (char *) NULL);
+ exit (EXIT_SUCCESS);
+ break;
+
+ default:
+ usage (EXIT_FAILURE);
+ }
+
+ int n_dev = argc - optind;
+ if (n_dev != 0) {
+ int i;
+ for (i = optind; i < argc; i++) {
+ PedDevice *dev = ped_device_get (argv[i]);
+ if (dev == NULL || process_dev (dev) == 0)
+ status = 1;
+ }
+ } else {
+ ped_device_probe_all ();
+ PedDevice *dev;
+ for (dev = ped_device_get_next (NULL); dev;
+ dev = ped_device_get_next (dev))
+ if (process_dev (dev) == 0)
+ status = 1;
+ }
+
+ return status;
+}
diff --git a/po/ChangeLog.0 b/po/ChangeLog.0
new file mode 100644
index 0000000..df19c9f
--- /dev/null
+++ b/po/ChangeLog.0
@@ -0,0 +1,52 @@
+2004-03-11 gettextize <bug-gnu-gettext@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.14.1.
+ * boldquot.sed: New file, from gettext-0.14.1.
+ * en@boldquot.header: New file, from gettext-0.14.1.
+ * en@quot.header: New file, from gettext-0.14.1.
+ * insert-header.sin: New file, from gettext-0.14.1.
+ * quot.sed: New file, from gettext-0.14.1.
+ * remove-potcdate.sin: New file, from gettext-0.14.1.
+ * Rules-quot: New file, from gettext-0.14.1.
+
+2003-06-13 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2002-11-15 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-12-31 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-12-27 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-12-16 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-12-12 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-11-09 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2001-07-14 gettextize <bug-gnu-utils@gnu.org>
+
+ * Makefile.in.in: Upgrade to gettext-0.10.38.
+ * cat-id-tbl.c: Remove file.
+ * stamp-cat-id: Remove file.
+
+-----------------------------------------------------------------------------
+
+This file is part of GNU Parted
+Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation Inc.
+
+This file may be modified and/or distributed without restriction. This is
+not an invitation to misrepresent the history of GNU Parted.
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 0000000..b5dcf1c
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,31 @@
+ca
+cs
+da
+de
+es
+fr
+fur
+gl
+hu
+id
+it
+ja
+ka
+ko
+nl
+nn
+pl
+pt
+pt_BR
+ro
+ru
+rw
+sk
+sl
+sr
+sv
+tr
+uk
+vi
+zh_CN
+zh_TW
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..83d8838
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,444 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions. It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.18
+GETTEXT_MACRO_VERSION = 0.18
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+ @echo "$(MSGFMT) -c -o $@ $<"; \
+ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+ @lang=`echo $* | sed -e 's,.*/,,'`; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \
+ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+ sed -e '/^#/d' $< > t-$@
+ mv t-$@ $@
+
+
+all: check-macro-version all-@USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+ @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+ exit 1; \
+ }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+ test ! -f $(srcdir)/$(DOMAIN).pot || \
+ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+ @test ! -f $(srcdir)/$(DOMAIN).pot || { \
+ echo "touch stamp-po" && \
+ echo timestamp > stamp-poT && \
+ mv stamp-poT stamp-po; \
+ }
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+ if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+ package_gnu='GNU '; \
+ else \
+ package_gnu=''; \
+ fi; \
+ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+ else \
+ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+ fi; \
+ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ *) \
+ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+ --files-from=$(srcdir)/POTFILES.in \
+ --copyright-holder='$(COPYRIGHT_HOLDER)' \
+ --package-name="$${package_gnu}@PACKAGE@" \
+ --package-version='@VERSION@' \
+ --msgid-bugs-address="$$msgid_bugs_address" \
+ ;; \
+ esac
+ test ! -f $(DOMAIN).po || { \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+ else \
+ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ else \
+ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+ fi; \
+ }
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+ $(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+ @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+ if test -f "$(srcdir)/$${lang}.po"; then \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \
+ cd $(srcdir) \
+ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \
+ esac; \
+ }; \
+ else \
+ $(MAKE) $${lang}.po-create; \
+ fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ $(INSTALL_DATA) $(srcdir)/$$file \
+ $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ for file in Makevars; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+install-data-no: all
+install-data-yes: all
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+ fi; \
+ done; \
+ done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+ else \
+ : ; \
+ fi
+installdirs-data-no:
+installdirs-data-yes:
+ @catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ dir=$(localedir)/$$lang/LC_MESSAGES; \
+ $(mkdir_p) $(DESTDIR)$$dir; \
+ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+ if test -n "$$lc"; then \
+ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+ for file in *; do \
+ if test -f $$file; then \
+ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+ fi; \
+ done); \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+ else \
+ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+ :; \
+ else \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+ fi; \
+ fi; \
+ fi; \
+ done; \
+ done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data-@USE_NLS@
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ for file in $(DISTFILES.common) Makevars.template; do \
+ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+ done; \
+ else \
+ : ; \
+ fi
+uninstall-data-no:
+uninstall-data-yes:
+ catalogs='$(CATALOGS)'; \
+ for cat in $$catalogs; do \
+ cat=`basename $$cat`; \
+ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+ done; \
+ done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+ rm -f remove-potcdate.sed
+ rm -f stamp-poT
+ rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+ rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+ rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+ rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+ $(MAKE) update-po
+ @$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+ dists="$(DISTFILES)"; \
+ if test "$(PACKAGE)" = "gettext-tools"; then \
+ dists="$$dists Makevars.template"; \
+ fi; \
+ if test -f $(srcdir)/$(DOMAIN).pot; then \
+ dists="$$dists $(DOMAIN).pot stamp-po"; \
+ fi; \
+ if test -f $(srcdir)/ChangeLog; then \
+ dists="$$dists ChangeLog"; \
+ fi; \
+ for i in 0 1 2 3 4 5 6 7 8 9; do \
+ if test -f $(srcdir)/ChangeLog.$$i; then \
+ dists="$$dists ChangeLog.$$i"; \
+ fi; \
+ done; \
+ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+ for file in $$dists; do \
+ if test -f $$file; then \
+ cp -p $$file $(distdir) || exit 1; \
+ else \
+ cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+ fi; \
+ done
+
+update-po: Makefile
+ $(MAKE) $(DOMAIN).pot-update
+ test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+ $(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+ @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+ exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+ @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+ cd $(srcdir); \
+ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ *) \
+ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
+ esac; \
+ }; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "msgmerge for $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+ @:
+
+# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
+# because execution permission bits may not work on the current file system.
+# Use @SHELL@, which is the shell determined by autoconf for the use by its
+# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+ cd $(top_builddir) \
+ && @SHELL@ ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..e646f1b
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,61 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \
+ \
+ --flag=_:1:pass-c-format\
+ --flag=N_:1:pass-c-format\
+ --flag=error:3:c-format --flag=error_at_line:5:c-format\
+\
+ --from-code=UTF-8\
+ --flag=asprintf:2:c-format\
+ --flag=asnprintf:3:c-format\
+ --flag=error:3:c-format\
+ --flag=error_at_line:5:c-format\
+ --flag=vasprintf:2:c-format\
+ --flag=vasnprintf:3:c-format\
+ --flag=wrapf:1:c-format\
+ --flag=xasprintf:1:c-format\
+ --flag=xfprintf:2:c-format\
+ --flag=xprintf:1:c-format\
+\
+ --keyword=proper_name:1,'"This is a proper name. See the gettext manual, section Names."'\
+ --keyword=proper_name_utf8:1,'"This is a proper name. See the gettext manual, section Names."'\
+ $${end_of_xgettext_options+}
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = bug-parted@gnu.org
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..3c45cfc
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,78 @@
+# libparted
+# Copyright (C) 1999-2001, 2006-2014, 2019-2023 Free Software Foundation, Inc.
+# This file may be modified and/or copied without restriction.
+
+# list of files containing translatable strings
+
+# lib
+lib/argmatch.c
+lib/argmatch.h
+lib/closeout.c
+lib/error.c
+lib/getopt.c
+lib/quotearg.c
+lib/regcomp.c
+lib/rpmatch.c
+lib/version-etc.c
+lib/xalloc-die.c
+libparted/arch/beos.c
+
+partprobe/partprobe.c
+
+# libparted
+libparted/arch/gnu.c
+libparted/arch/linux.c
+libparted/cs/geom.c
+libparted/debug.c
+libparted/disk.c
+libparted/exception.c
+libparted/labels/aix.c
+libparted/labels/atari.c
+libparted/labels/bsd.c
+libparted/labels/dasd.c
+libparted/labels/dos.c
+libparted/labels/dvh.c
+libparted/labels/fdasd.c
+libparted/labels/gpt.c
+libparted/labels/loop.c
+libparted/labels/mac.c
+libparted/labels/pc98.c
+libparted/labels/pt-tools.c
+libparted/labels/rdb.c
+libparted/labels/sun.c
+libparted/labels/vtoc.c
+libparted/libparted.c
+libparted/unit.c
+
+libparted/fs/amiga/affs.c
+libparted/fs/amiga/amiga.c
+libparted/fs/amiga/apfs.c
+libparted/fs/amiga/asfs.c
+
+libparted/fs/fat/fat.c
+libparted/fs/fat/bootsector.c
+libparted/fs/linux_swap/linux_swap.c
+libparted/fs/hfs/probe.c
+
+libparted/fs/r/fat/bootsector.c
+libparted/fs/r/fat/calc.c
+libparted/fs/r/fat/context.c
+libparted/fs/r/fat/count.c
+libparted/fs/r/fat/fat.c
+libparted/fs/r/fat/resize.c
+libparted/fs/r/fat/table.c
+libparted/fs/r/filesys.c
+libparted/fs/r/hfs/advfs.c
+libparted/fs/r/hfs/advfs_plus.c
+libparted/fs/r/hfs/cache.c
+libparted/fs/r/hfs/file.c
+libparted/fs/r/hfs/file_plus.c
+libparted/fs/r/hfs/hfs.c
+libparted/fs/r/hfs/journal.c
+libparted/fs/r/hfs/probe.c
+libparted/fs/r/hfs/reloc.c
+libparted/fs/r/hfs/reloc_plus.c
+
+# parted
+parted/parted.c
+parted/ui.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..af52487
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en@quot.po-create:
+ $(MAKE) en@quot.po-update
+en@boldquot.po-create:
+ $(MAKE) en@boldquot.po-update
+
+en@quot.po-update: en@quot.po-update-en
+en@boldquot.po-update: en@boldquot.po-update-en
+
+.insert-header.po-update-en:
+ @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+ tmpdir=`pwd`; \
+ echo "$$lang:"; \
+ ll=`echo $$lang | sed -e 's/@.*//'`; \
+ LC_ALL=C; export LC_ALL; \
+ cd $(srcdir); \
+ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+ rm -f $$tmpdir/$$lang.new.po; \
+ else \
+ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+ :; \
+ else \
+ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+ exit 1; \
+ fi; \
+ fi; \
+ else \
+ echo "creation of $$lang.po failed!" 1>&2; \
+ rm -f $$tmpdir/$$lang.new.po; \
+ fi
+
+en@quot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
+
+en@boldquot.insert-header: insert-header.sin
+ sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+ rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
+s/“/“/g
+s/â€/â€/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/ca.gmo b/po/ca.gmo
new file mode 100644
index 0000000..84f43ea
--- /dev/null
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..9aff17a
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,3613 @@
+# GNU Parted en català
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# Miquel Matas <miquelmatas@wanadoo.es>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 1.6.0\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2002-05-05 14:47+0100\n"
+"Last-Translator: Miquel Matas <miquelmatas@wanadoo.es>\n"
+"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: KBabel 0.7\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:193
+#, fuzzy
+msgid "Unknown system error"
+msgstr "Tipus de sistema de fitxers desconegut \"%s\"."
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr ""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr ""
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr ""
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr ""
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr ""
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr ""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr ""
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr ""
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr ""
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr ""
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr ""
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr ""
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr ""
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr ""
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr ""
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ""
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr ""
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr ""
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr ""
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Error obrint %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"No s'ha pogut obrir %s lectura/escritura (%s). %s s'ha obert només lectura. "
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s mentre es preparava per llegir a %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s mentre s'estava llegint a %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "No s'ha pogut escriure a %s, ja que era obert per només lectura"
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s mentre es preparava per escruire a %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s mentre s'estava escrivint a %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr ""
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "No s'ha pogut obrir %s"
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "No s'ha pogut provar d'emmagatzemar."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s intentant de sincronitzar %s al dics"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Impossible d'inicialitzar el dispositiu %s - %s."
+
+#: libparted/arch/linux.c:690
+#, fuzzy, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "No s'ha pogut determinar la mida de %s (%s)"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, fuzzy, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "No s'ha pogut determinar la mida de %s (%s)"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr ""
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "No s'ha pogut obtenir la identitat del dispositiu %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Error inicialitzant el dispositiu SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+
+#: libparted/arch/linux.c:1349
+#, fuzzy, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"No s'ha pogut determinar la geometria del fitxer/dispositiu. No s'hauria de "
+"fer servir Parted EXCEPTE que se sàpiga el que s'està fent!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Nou dispositiu?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controlador RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controlador ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controlador I20"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+#, fuzzy
+msgid "Loopback device"
+msgstr "Dispositiu d'origen?"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Dispositiu no suportat"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, fuzzy, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Error obrint %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, fuzzy, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Error informant el kernel sobre modificacions a la partició %s - %s. Això "
+"vol dir que Linux no reconeixerà cap canvi que haveu fet a %s fins que no "
+"reinicieu - per tant no podeu muntar-la o utilitzar-la en cap sentit abans "
+"d'inicialitzar la màquina. "
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "No s'ha pogut determinar la mida de %s (%s)"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, fuzzy, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "No es pot acabar abans de començar!"
+
+#: libparted/cs/geom.c:379
+#, fuzzy, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "S'ha intentat escriure sectors %ld-%ld fora de la partició a %s"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "comprovant blocs errònis"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, fuzzy, c-format
+msgid "%s: unrecognised disk label"
+msgstr "No s'ha pogut obrir %s - etiqueta de disc desconeguda."
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Aquesta libparted no té suport per escriure a %s. Potser va ser compilada "
+"per només lectura."
+
+#: libparted/disk.c:632
+#, fuzzy, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "La partició %d és de %.3fMb, però el sistema de fitxers és de %.3fMb."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "boot"
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Flag desconegut a %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Les etiquetes de disc de %s no suporten particions exteses."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Les etiquetes de disc de %s no suporten particions lògiques o exteses."
+
+#: libparted/disk.c:2003
+#, fuzzy
+msgid "Too many primary partitions."
+msgstr "Massa particions primàries."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"No es pot afegir una partició lògica a %s, ja que no hi ha una partició "
+"extesa"
+
+#: libparted/disk.c:2036
+#, fuzzy, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "No pot haver més d'una partició extesa a %s"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "No poden haver particions lògiques fora de la partició extesa."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "No pot haver una partició lògica fora de la partició extesa a %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "No pot haver una partició primaria dins d'una partició extesa."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "No es pot fer una partició fora del disc!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+#, fuzzy
+msgid "Can't have overlapping partitions."
+msgstr "No poden haver particions solapades."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "lliure"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extesa"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lògica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primària"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "oculta"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "servei-hp"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr ""
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr ""
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr ""
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Sí"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, fuzzy, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Flag desconegut a %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informació"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Perill"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Error"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "No Implementat"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Fix"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sí"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "No"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "D'accord"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Reintentar"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Cancel·lar"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+#, fuzzy
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/aix.c:103
+#, fuzzy
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/aix.c:116
+#, fuzzy
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/aix.c:126
+#, fuzzy
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/aix.c:144
+#, fuzzy
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/aix.c:154
+#, fuzzy
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"El suport per crear sistemes de fitxers de %s encara no està implementat."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "No es poden copiar particions exteses."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "No s'ha pogut satisfer les limitacions a la partició"
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+#, fuzzy
+msgid "Unable to allocate a partition number."
+msgstr "S'esperava un múmero de partició."
+
+#: libparted/labels/bsd.c:588
+#, fuzzy
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "No s'ha pogut reservar una etiqueta bsd"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+#, fuzzy
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "No s'ha pogut reservar una etiqueta bsd"
+
+#: libparted/labels/dos.c:1159
+#, fuzzy, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Taula de particions invàlida a %s - signatura dolenta %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Taula de particions invàlida - partició recursiva a %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "No es pot crear cap més partició."
+
+#: libparted/labels/dvh.c:183
+#, fuzzy, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"%s no té partició extesa (partició de capçalera de volum). Si ignoreu, tots "
+"els volums d'arrencada seràn esborrats. "
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Checksum incorrecte, la qual cosa indica que la taula de particions és "
+"corrupte."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Només les particions primàries poden ser particions root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Només les particions primàries poden ser particions swap."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Només les particions lògiques poden ser un fitxer d'arrencada."
+
+#: libparted/labels/dvh.c:719
+#, fuzzy, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr "Només les particions lògiques (fitxers d'arrencada) tenen nom."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Massa particions primàries."
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+#, fuzzy
+msgid "Unsupported disk type"
+msgstr "ped_device_new() Dispositiu no suportat"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr ""
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr ""
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr ""
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+#, fuzzy
+msgid "Fatal error"
+msgstr "Fatal"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+#, fuzzy
+msgid "No room for partition info."
+msgstr "No s'ha trobat un mapa de particions vàlid."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "No s'ha pogut detectar el sistema de fitxers."
+
+#: libparted/labels/fdasd.c:1029
+#, fuzzy
+msgid "Could not retrieve disk geometry information."
+msgstr "No s'ha pogut llegir la geometria de %s - %s"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Sistema de fitxers massa petit per ext2."
+
+#: libparted/labels/gpt.c:791
+#, fuzzy, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"El format de la taula de particions GPT és més nou que el que Parted pot "
+"reconeixer. Si-us-plau, diga'ns-ho a bug-parted@gnu.org"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"La còpia de la taula GPT no és al final del disc com hauriea d'ser. Això pot "
+"voler dir que un altre sistema operatiu creu que el disc és més petit. Ho "
+"voleu arreglar novent la còpia al final ( i esborrant la còpia antiga)?"
+
+#: libparted/labels/gpt.c:1044
+#, fuzzy
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Tant la taula primària GPT com la còpia són corruptes. Intenteu crear una "
+"taula actualitzada, i fent servir la opció de rescat de Parted per "
+"reconstruïr les particions."
+
+#: libparted/labels/gpt.c:1055
+#, fuzzy
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"La taula primària GPT és corrupte, però la còpia sembla correcta, per tant "
+"es farà servir aquesta."
+
+#: libparted/labels/gpt.c:1067
+#, fuzzy
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"La taula primària GPT és corrupte, però la còpia sembla correcta, per tant "
+"es farà servir aquesta."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "No s'ha pogut determinar si la partició està muntada."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Signatura invàlida %x per etiquetes de discs Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "El Mapa de particions no té entrada de mapa de particions!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s massa petita per una etiqueta d'un disc Mac."
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "La partició %d té una signatura invàlida %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "La partició %d té una logitud invàlida de 0 bytes!"
+
+#: libparted/labels/mac.c:555
+#, fuzzy
+msgid "The data region doesn't start at the start of the partition."
+msgstr "La regió de dades no comença al principi de la partició"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "La regió d'arrencada de la partició no ocupa la partició sencera."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "La regió de dades de la partició no ocupa la partició sencera."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"La mida de bloc extrany al dispositiu: %d bytes no és divisible per 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"El controlador diu que el tamany de bloc físic és de %d bytes, però Linux "
+"troba que és de %d bytes."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "No s'ha trobat un mapa de particions vàlid."
+
+#: libparted/labels/mac.c:775
+#, fuzzy, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Conflicte de mida de entrada del mapa de particions! La entrada 1 diu que és "
+"%d, però la entrada %d diu que és %d!"
+
+#: libparted/labels/mac.c:806
+#, fuzzy
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Estrany - 2 entrades de mapes de particions!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Canviar el nom d'una partició root o swap impedirà que Linux les reconeixi "
+"com a tals."
+
+#: libparted/labels/mac.c:1444
+#, fuzzy
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"No es pot afegir una altra partició - el mapa de particions és massa petit!"
+
+#: libparted/labels/pc98.c:285
+#, fuzzy, c-format
+msgid "Invalid partition table on %s."
+msgstr "Taula de particions invàlida a %s"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, fuzzy, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"La partició %d no està aliniada als límits dels cilindres. Cal afegir suport "
+"per aquesta característica."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "No es pot afegir un altra partició."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, fuzzy, c-format
+msgid "Failed to write partition block at %d."
+msgstr "No s'ha pogut determinar si la partició està muntada."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "S'ha detectat una etiqueta Sun corrupte."
+
+#: libparted/labels/sun.c:277
+#, fuzzy, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"La geometria del disc CHS (%d,%d,%d) no coincideix amb la geometria "
+"emmagatzemada a la etiqueta del disc (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "La etiqueta del disc descriu un disc més gran de %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"La partició sencera de disk és la única disponible que queda. Generalment, "
+"no és una bona idea sobreescriure aquesta partició amb una d'autèntica. "
+"Solaris pot no ser capaç d'arrencar sense ella i SILO ( el gestor "
+"d'arrencada d'sparc) també la té en compte."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "La etiqueta del disc de Sun està plena."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+#, fuzzy
+msgid "Could not read volume label."
+msgstr "No s'ha pogut llegir la geometria de %s - %s"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+#, fuzzy
+msgid "Could not write volume label."
+msgstr "No s'ha pogut detectar el sistema de fitxers."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr ""
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Sense memòria."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr ""
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, fuzzy, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s mentre s'estava escrivint a %s"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+#, fuzzy
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted va ser mal compilat: el sector boot de FAT ha de ser de 512 "
+"bytes. El suport per FAT serà desactivat."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"El sistema de fitxers té una signatura invàlida per a un sistema de fitxers "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"El sistema de fitxers té una mida de sector invàlida per a un sistema de "
+"fitxers FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+#, fuzzy
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"El sistema de fitxers té una mida de sector invàlida per a un sistema de "
+"fitxers FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+#, fuzzy
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"El sistema de fitxers té un número de sectors reservats per a un sistema de "
+"fitxers FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+#, fuzzy
+msgid "File system has an invalid number of FATs."
+msgstr "El sistema de fitxers té un número de FATS invàlid."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"El sector boot de la FAT diu que la mida del sector lògic és 0. Això és "
+"extrany."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"El sector boot de la FAT diu que no hi ha taules FAT. Això és extrany."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"El sector boot de la FAT diu que els clústers tenen 0 sectors. Això és "
+"extrany."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+#, fuzzy
+msgid "File system is FAT12, which is unsupported."
+msgstr "El sistema de fitxers és FAT12, que no està suportat."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, fuzzy, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Signatura de linux swap '%10s' no reconeguda."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, fuzzy, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Signatura de linux swap '%10s' no reconeguda."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, fuzzy, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Signatura de linux swap '%10s' no reconeguda."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"El sector d'informació té una signatura incorrecta (%x). Selecciona "
+"cancel·la ara mateix, i envia-ns un informe. Si estas desesperat, el més "
+"segur és Ignorar."
+
+#: libparted/fs/r/fat/calc.c:134
+#, fuzzy, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Es necessiten %dM d'espai lliure per contraure aquesta partició a aquesta "
+"mida (actualment només hi ha %dM lliures)"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"El començament delta de cluster = %d, que no és multiple de la mida de "
+"cluster %d. "
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrada de directori incorrecta per %s: el primer clúster és el final de la "
+"marca de fitxer."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: cadena sense acabar per %s. Has de executar dosfsck o "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: clúster %d fora del sistema de fitxers a la cadena per %s. "
+"Has de executar dosfsck o scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT incorrecta: clúster %d té un enllaç creuat per %s. Has d'executar "
+"dosfsck o scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, fuzzy, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s és %dk, però té %d clústers (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, fuzzy, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partició massa gran/petita per un sistema de fitxers %s"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Les FATs no coincideixen. Si no saps què vols dir aixó, llavors selecciona "
+"cancelar, executa scandisk al sistema de fitxers, i després torna."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "No hi ha configuracions possibles per aquest tipus de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"El sistema de fitxers no té unes mides que agradin a Windows. La mida de "
+"clúster es %dk (hauria de ser de %dk); el número de clústers és de %d "
+"(hauria de ser de %d); la mida de FAT és de %d sectors ( hauria de ser de %d "
+"sectors)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"El sistema de fitxers diu que la mida de l'espai lliure en clústers és de "
+"%d, no de %d clústers."
+
+#: libparted/fs/r/fat/resize.c:159
+#, fuzzy
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"No hi ha espai suficient al directori root, per a tots els fitxers. O bé, "
+"cancel·lar, o bé, Ignorar perdent els fitxers. "
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Error escribint al directori root."
+
+#: libparted/fs/r/fat/resize.c:479
+#, fuzzy
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Si deixes el sistema de fitxers com FAT16, llavors no tindràs problemes"
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Si converteixes a FAT16, i MS Windows està instal·lat a aquesta partició, "
+"llavors hauràs de reinstal·lar el carregador d'arrencada de MS Windows. Si "
+"vols fer aixó, hauries de consultar el manual de Parted ( o el manual de la "
+"teva distribució)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Si deixes el teu sistema de fitxers com a FAT32, llavors no tindràs més "
+"problemes."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Si converteixes a FAT32, i MS Windows està instal·lat a aquesta partició, "
+"llavors hauràs de reinstal·lar el carregador d'arrencada de MS Windows. Si "
+"vols fer aixó, hauries de consultar el manual de Parted ( o el manual de la "
+"teva distribució). També, convertint a FAT32 faràs que MS DOS, MS Windows "
+"95a i Windows NT no puguin llegir el sistema de fitxers "
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Vol fer servir FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"El sistema de fitxers només pot ser redimensionada a aquesta mida covertint-"
+"la a FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"El sistema de fitxers només pot ser redimensionada a aquesta mida covertint-"
+"la a FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+#, fuzzy
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted no por redimensionar aquesta partició a aquesta mida. Estem "
+"treballant en aixó!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"La FAT %d del medi %x no coincideix amb sector boot del medi %x. Hauries "
+"d'executar scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, fuzzy, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: clúster %ld fora del sistema de fitxers"
+
+#: libparted/fs/r/fat/table.c:301
+#, fuzzy, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: clúster %ld fora del sistema de fitxers"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: no hi ha clústers lliures"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "No s'ha pogut detectar el sistema de fitxers."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"El suport per redimensionar sistemes de fitxers de %s encara no està "
+"implementat."
+
+#: libparted/fs/r/filesys.c:171
+#, fuzzy
+msgid "The file system is bigger than its volume!"
+msgstr "El sistema de fitxers és més gran que ho és el volum!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "encongint"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+#, fuzzy
+msgid "writing HFS Master Directory Block"
+msgstr "Error escribint al directori root."
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+#, fuzzy
+msgid "Error while writing the allocation file."
+msgstr "Error escribint al directori root."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+#, fuzzy
+msgid "shrinking HFS wrapper"
+msgstr "encongint"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+#, fuzzy
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"El començament delta de cluster = %d, que no és multiple de la mida de "
+"cluster %d. "
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+#, fuzzy
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"El començament delta de cluster = %d, que no és multiple de la mida de "
+"cluster %d. "
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+#, fuzzy
+msgid "Could not cache the file system in memory."
+msgstr "No s'ha pogut detectar el sistema de fitxers."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "mostra aquest missatge d'ajuda"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "mai pregunta a l'usuari"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "mostra la versió"
+
+#: parted/parted.c:145
+#, fuzzy
+msgid "alignment for new partitions"
+msgstr "No es poden copiar particions exteses."
+
+#: parted/parted.c:158
+#, fuzzy
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"MINOR és el número de partició utilitzada per Linux. A etiquetes de disk "
+"msdos, les particions primàries són numeradas de 1 a 4, i les particions "
+"lògiques de la 5 en davant.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPUS-ETI és una d'aquestes: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG és una d'aquests:"
+
+#: parted/parted.c:164
+#, fuzzy
+msgid "UNIT is one of: "
+msgstr "FLAG és una d'aquests:"
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPUS-PART és una d'aquestes: primària, lògica, extesa\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPUS-SF és un d'aquests: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ESTAT és un d'aquests: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOS és, normalment, /dev/hda o /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOM és qualsevol paraula que vulguis\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+#, fuzzy
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.\n"
+"Aquest programa és programari obert sota Llicència Pública General GNU.\n"
+"\n"
+"Aquest programa es distribueix en la esperança que sigui útil, però SENSE "
+"CAP GARANTIA; sense la garantia implícita de COMERCIALITZACIO ni que "
+"CUMPLEIXI CAP PROPOSIT PARTICULAR. Per més detalls, vegeu la Llicència "
+"General Pública GNU.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(temps que queda %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "La(s) partició(ns) a %s s'està utilitzant."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Nou tipus d'etiqueta?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipus de partició?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nom de la partició?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Sistema de fitxers?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Inici?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Fi?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Les etiquetes de disc de %s no suporten particions exteses."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Número de partició?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Les etiquetes de disc de %s no suporten particions exteses."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipus de partició?"
+
+#: parted/parted.c:972
+msgid "Invalid type-id."
+msgstr ""
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipus de partició?"
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr ""
+
+#: parted/parted.c:1242
+#, fuzzy, c-format
+msgid "Disk %s: %s\n"
+msgstr "Tipus d'etiqueta: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, fuzzy, c-format
+msgid "Partition Table: %s\n"
+msgstr "Nom de la partició?"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Tipus d'etiqueta: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+#, fuzzy
+msgid "Start"
+msgstr "Inici?"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+#, fuzzy
+msgid "End"
+msgstr "Fi?"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr ""
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr ""
+
+#: parted/parted.c:1398
+#, fuzzy
+msgid "File system"
+msgstr "Sistema de fitxers?"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr ""
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flags"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr ""
+
+#: parted/parted.c:1702
+#, fuzzy, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Una partició %s %s ha estat trobada a %.3fMb -> %.3fMb. Vols afegir-la a la "
+"taula de particions?"
+
+#: parted/parted.c:1745
+#, fuzzy
+msgid "searching for file systems"
+msgstr "sistema de fitxers creixent"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nou dispositiu?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+#, fuzzy
+msgid "Flag to Invert?"
+msgstr "Flag a canviar?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nou estat?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+#, fuzzy
+msgid "align-check"
+msgstr "comprova"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "ajuda"
+
+#: parted/parted.c:2317
+#, fuzzy
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr "Ajuda [ORDRE] imprimeix ajuda general, o ajuda d'ORDRE"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr ""
+
+#: parted/parted.c:2326
+#, fuzzy
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel TIPUS-ETI crea una nova etiqueta de disc (taula de partició)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+#, fuzzy
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPUS-PART [TIPUS-SF] INICI FI crea una partició"
+
+#: parted/parted.c:2341
+#, fuzzy
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart crea una partició sense crear cap sistema de fitxers a la partició. "
+"TIPUS-SF ha de ser especificat per assignar una ID de partició.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+#, fuzzy
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name MINOR NOM anomena la partició MINOR NOM"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print[MINOR] mostra la taula de particions; o una partició"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+#, fuzzy
+msgid "quit exit program"
+msgstr "quit surt del programa"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescatar"
+
+#: parted/parted.c:2381
+#, fuzzy
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr "rescatar INICI FI rescata particions perdudes entre INICI i FI"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "rm MINOR suprimeix la partició MINOR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+#, fuzzy
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm MINOR suprimeix la partició MINOR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+#, fuzzy
+msgid "select DEVICE choose the device to edit"
+msgstr "select DISPOSITIU escollir el dispositiu a editar"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr ""
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+#, fuzzy
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set MINOR FLAG ESTAT canvia un flag a la partició MINOR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr ""
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr ""
+
+#: parted/parted.c:2463
+#, fuzzy
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "quit surt del programa"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr ""
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "No s'ha trobat el dispositiu"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"S'ha de reinstal·lar el carregador d'arrencada abans de rearrencar llegir la "
+"secció 4 de la documentació de l'Usuari de Parted per més informació."
+
+#: parted/parted.c:2666
+#, fuzzy
+msgid "You may need to update /etc/fstab.\n"
+msgstr "No us oblideu d'actualitzar /etc/fstab si cal.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+#, fuzzy
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Ús: parted [OPCIÓ]... [DISPOSITIU [ORDRE [PARAMETRES]...]...]\n"
+"Aplica les ORDRES amb PARAMETRES al DISPOSITIU. Si no s'especifiquen "
+"ORDRES, s'executa en\n"
+"mode interactiu.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, fuzzy, c-format
+msgid "invalid token: %s"
+msgstr "Taula de particions invàlida a %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "S'esperava un múmero de partició."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "La partició no existeix."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "S'esperava un tipus de sistema de fitxers."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipus de sistema de fitxers desconegut \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "S'esperava un tipus de etiqueta de dics."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "No es pot crear cap més partició."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "S'esperava un tipus de partició."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPCIONS:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "ORDRES:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Utilitzant %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr ""
+
+#, c-format
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes"
+#~ msgstr ""
+#~ "La mida del sector a %s és de %d bytes. Parted no funcionarà correctament "
+#~ "amb discs d'una mida de sector diferent de %d bytes"
+
+#, c-format
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "El dispositiu %s té una geometria incorrecte."
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+#, c-format
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "El dispositiu %s no és ni SCSI ni IDE"
+
+#, c-format
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Error al llegir %s (%s) per determinar si la partició està muntada."
+
+#, c-format
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything nothing about the modifications you made "
+#~ "until you reboot. You should reboot your computer before doing anything "
+#~ "with %s."
+#~ msgstr ""
+#~ "El kernel no ha pogut rellegir la taula de particions a %s (%s).Aixó vol "
+#~ "dir que Linux no reconeixerà cap de les modificacions fetes. Heu "
+#~ "d'arrencar la màquina abans de fer res amb %s."
+
+#~ msgid ""
+#~ "The partition table was unable to be reread, as such, you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "La taula de particions no s'ha pogut rellegir, per tant es necessita fer "
+#~ "reboot abans de muntar una partició modificada. També es necessita "
+#~ "reinstal·lar el carregador d'arrencada abans de reinicialitzar ( que pot "
+#~ "necessitar el muntatge de les particions modificades ). No és possible "
+#~ "fer les dues coses! Per tant, necessites arrencar amb un disquet de "
+#~ "rescat i reinstal·lar el carregador d'arrencada des del disc de rescat. "
+#~ "Llegeix la secció 4 de la documentació de l'Usuari de Parted per més "
+#~ "informació. "
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s (%s). This means the Hurd knows nothing about "
+#~ "any modifications you made. You should reboot your computer before doing "
+#~ "anything with %s."
+#~ msgstr ""
+#~ "La taula de particions a %s (%s).Aixó vol dir que Linux no reconeixerà "
+#~ "cap de les modificacions fetes. S'ha de re-arrencar la màquina abans de "
+#~ "fer res amb %s."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "La taula de particions a %s és inconsistent. Hi ha diverses raons per "
+#~ "les quals es pot donar aquest error. Però la més comú sol ser que Linux "
+#~ "ha detectat la geometria de la BIOS de %s incorrectament. GNU Parted creu "
+#~ "que la autèntica geometria ha de ser %d/%d/%d ( i no %d/%d/%d). Primer "
+#~ "s'ha de comprovar la BIOS que sigui correcta. Es pot especificar a Linux "
+#~ "afegint el paràmetre %s=%d,%d,%d a la línia de comandes. Veieu la "
+#~ "documentació de LILO o GRUB per més informació. Si es creu que la "
+#~ "geometria que suggereix Parted és correcta, seleccioneu Ignorar per "
+#~ "continuar ( i arregleu Linux després). Si no, seleccioneu Cancel·lar ( i "
+#~ "arregleu Linux i/o la BIOS ara mateix)."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "La taula de particions a %s és inconsistent. Hi ha diverses raons per les "
+#~ "quals es pot donar aquest error. Però la més comú sol ser que Linux ha "
+#~ "detectat la geometria de la BIOS incorrectament. No obstant, no sembla "
+#~ "ser el cas aqui. El més segur és Ignorar, però ignorant pot causar "
+#~ "problemes (que es podren arreglar) en alguns carregadors d'arrencada i "
+#~ "també pot donar problemes amb sistemes de fitxers FAT. Es recomana "
+#~ "utilitzar LBA."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "No s'ha pogut aliniar la partició correctament. Aixó vol dir que, "
+#~ "probablement, que un altre gestor de particions ha generat una taula de "
+#~ "particions incorrecta ja que no té una correcta geometria a la BIOS. El "
+#~ "més segur és Ignorar, però si s'ignora pot causar problemes (que es "
+#~ "podren arreglar)amb alguns carregadors d'arrencada."
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted - possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s conté signatures GPT, la qual cosa indica que té una taula GPT. No "
+#~ "obstant, no té una taula de particions msdos imitada, com hauria de ser. "
+#~ "Potser és corrupte - possiblement per un programa que no és capaç "
+#~ "d'entendre les taules de partició GPT. O potser, també, heu esborrat la "
+#~ "taula GPT i ara feu servir una taula de particions msdos. És aquesta una "
+#~ "partició GPT? "
+
+#~ msgid "The boot region doesn't start at the start of the partition"
+#~ msgstr "La regió d'arrencada no comemça al principi de la partició"
+
+#, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "El suport per obrir sistemes de fitxers de %s encara no està implementat."
+
+#, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "El suport per comprovar sistemes de fitxers de %s encara no està "
+#~ "implementat."
+
+#~ msgid "raw block copying"
+#~ msgstr "copiant bloc raw"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "No es pot copiar a una partició solapada."
+
+#, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Support directe per copiar sistemes de fitxers encara no ha estat "
+#~ "implementada per %s. No obstant, si que està implementat el suport per el "
+#~ "redimensionament. Per tant, el sistema de fitxers pot ser copiat si la "
+#~ "nova partició és, com a mínim, tant gran com la antiga. Per tant, o es "
+#~ "contrau la partició que es vol copiar o es copia a una partició més gran."
+
+#, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Suport per copiar sistemes de fitxers %s encara no està implementat."
+
+#, c-format
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "S'ha detectat un bug a GNU Parted. Si-us-plau, envieu un e-mail a bug-"
+#~ "parted@gnu.org que contingui la versió (%s) i el següent missatge:"
+
+#, c-format
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "S'ha intentat llegir sectors %ld-%ld fora de la partició a %s"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Grup de descriptors inconsistent!"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "Sistema de fitxers ple!"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "Aquest sistema de fitxers ext2 té un disseny bastant extrany! Parted "
+#~ "(encara) no el pot redimensionar."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr "Superblock invàlid. Segur que és un sistema de fitxers ext2?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "El sistema de fitxers té errors! Has d'executar e2fsck."
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr ""
+#~ "El sistema de fitxers no ha estat desmuntat correctament! S'ha d'executar "
+#~ "e2fsck."
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "El sistema de fitxers té una característica incompatible activada"
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Error en la reserva de la memòria cau de la memòria intermèdia"
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr ""
+#~ "S'ha trobat un inode amb un número d'enllaços incorrecte. Millor que "
+#~ "primer s'executi e2fsck."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "No hi ha suficients inodes lliures!"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "El sistema de fitxers està massa ocupat a suprimir un grup!"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "El sistema de fitxers té massa inodes reservats per suprimir un grup!"
+
+#~ msgid "adding groups"
+#~ msgstr "afegint grups"
+
+#, c-format
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "El sistema de fitxers està massa ocupat en redimensionar-se a %i blocs.Ho "
+#~ "sento."
+
+#, c-format
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "El sistema de fitxers té massa inodes ocupats per redimensionar-se a %i "
+#~ "blocs.Ho sento."
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr ""
+#~ "S'ha trobat blocs amb enllaços creuats! Millor que primer s'executi "
+#~ "e2fsck!"
+
+#, c-format
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "El bloc %i no té referència? Extrany"
+
+#, c-format
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "El bloc %i no hauria d'estar marcat!"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "El sistema de fitxers ext2 ha passat una comprovació bàsica. Per una "
+#~ "comprovació més completa utilitzar el programa e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr ""
+#~ "Ho sento, no es pot moure encara el començament de les particions ext2"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "No s'ha pogut buidar la memòria cau de la memòria intermèdia!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "escribint metadata per-grup"
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr ""
+#~ "El sistema de fitxers té una signatura invàlida per a un sistema de "
+#~ "fitxers FAT."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Aquest sistema de fitxers té una mida de sector lògic de %d. GNU Parted "
+#~ "no treballarà correctament amb mides de sectors diferents de 512 bytes."
+
+#, c-format
+#~ msgid ""
+#~ "The FATs aren't big enough to describe all clusters! Each FAT is %d "
+#~ "sectors. There are %d clusters, which would require each FAT to be %d "
+#~ "sectors. This is REALLY weird. You might want to write us an email: bug-"
+#~ "parted@gnu.org"
+#~ msgstr ""
+#~ "Les FATs no són el suficientment grans per descriure tots els clústers! "
+#~ "Cada FAT és de %d sectors. Hi ha %d clústers, que vol dir que cada FAT "
+#~ "tingui %d sectors. Això és molt extrany. Ens podries escriure un e-mail "
+#~ "a: bug-parted@gnu.org"
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "El fitxer %s està marcat com un sistema de fitxers. Això vol dir que si "
+#~ "el moveu por ocasionar que alguns programes no funcionin."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Massa pàgines incorrectes."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "quan és necessari, pregunta a l'usuari"
+
+#~ msgid "START and END are in megabytes\n"
+#~ msgstr "INICI i FI són en megabytes\n"
+
+#~ msgid "Partition is being used."
+#~ msgstr "La partició s'està utilitzant."
+
+#~ msgid "Source partition number?"
+#~ msgstr "Número de partició d'origen?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Número de partició destí?"
+
+#, c-format
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Has demanat de crear una partició a %.3f-%.3fMb. El més proper que Parted "
+#~ "pot manegar és %.3f-%.3fMb."
+
+#~ msgid "Extended partitions can't have file systems. Did you want mkpart?"
+#~ msgstr ""
+#~ "Les particions exteses no poden tenir sistemes de fitxers. Voleu "
+#~ "executar mkpart?"
+
+#~ msgid "Can't move extended partitions."
+#~ msgstr "No es poden moure particions exteses"
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "No es por moure una partició a ella mateixa. Vols redimensionar-la, "
+#~ "potser?"
+
+#, c-format
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Has demanat de moure una partició a %.3f-%.3fMb. El més proper que Parted "
+#~ "pot manegar és %.3f-%.3fMb."
+
+#, c-format
+#~ msgid "Minor: %d\n"
+#~ msgstr "Minor: %d\n"
+
+#~ msgid "Flags: "
+#~ msgstr "Flags:"
+
+#, c-format
+#~ msgid "File System: %s\n"
+#~ msgstr "Sistema de fitxers:%s\n"
+
+#, c-format
+#~ msgid "Size: %10.3fMb (%d%%)\n"
+#~ msgstr "Mida: %10.3fMb (%d%%)\n"
+
+#, c-format
+#~ msgid "Minimum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Mida mínima: %10.3fMb (%d%%)\n"
+
+#, c-format
+#~ msgid "Maximum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Mida màxima: %10.3fMb (%d%%)\n"
+
+#, c-format
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "La geometria del disc per %s: 0.000-%.3f megabytes\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Minor Inici Fi "
+
+#~ msgid "Type "
+#~ msgstr "Tipus "
+
+#~ msgid "Filesystem "
+#~ msgstr "Sistema de fitxers "
+
+#~ msgid "Name "
+#~ msgstr "Nom "
+
+#, c-format
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Has demanat redimensionar una partició a %.3f-%.3fMb. El més proper que "
+#~ "Parted pot manegar és %.3f-%.3fMb."
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr ""
+#~ "comprova MINOR fa una simple comprovació al sistema de "
+#~ "fitxers"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [DESDE-DISPOS] DE-MINOR A-MINOR copia un sistema de fitxers a una "
+#~ "altra partició"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs MINOR TIPUS-SF crea un sistema de fitxers TIPUS-SF a la "
+#~ "partició MINOR"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr ""
+#~ "mkpartfs TIPUS-PART TIPUS-SF INICI FI crea una partició amb un "
+#~ "sistema de fitxers"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START END move partition MINOR"
+#~ msgstr "move MINOR INICI FI mou la partició MINOR"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr ""
+#~ "resize MINOR INICI FI redimensiona el sistema de fitxers a la "
+#~ "partició MINOR"
+
+#, c-format
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Has trobat un bug a GNU Parted. Si-us-plau, envia-ns un e-mail amb un "
+#~ "informe a bug-parted@gnu.org que inclogui la versió (%s), i el següent "
+#~ "missatge:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ " Tens particion(s) Windows FAT que no fan servir LBA. Si la teva BIOS "
+#~ "suporta LBA, llavors hauries d'activar el flag LBA a totes les particions "
+#~ "FAT. D'altra manera, assegura't que el sistema operatiu i la BIOS tenen "
+#~ "la mateixa geometria abans de canviar de mida qualservol partició FAT."
+
+#, c-format
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "El sistema operatiu creu que la geometria a %s és %d/%d/%d. El cilindre "
+#~ "1024 acaba a %.3fM.%s"
+
+#, c-format
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "El sistema operatiu creu que la geometria a %s és %d/%d/%d.%s"
diff --git a/po/cs.gmo b/po/cs.gmo
new file mode 100644
index 0000000..1767bab
--- /dev/null
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..3e15a61
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,3827 @@
+# Czech translation of parted.
+# Copyright (C) 2003, 2007 Miloslav Trmac <mitr@volny.cz>
+# Miloslav Trmac <mitr@volny.cz>, 2003, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 1.8.8\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2007-09-11 14:02+0200\n"
+"Last-Translator: Miloslav Trmac <mitr@volny.cz>\n"
+"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, fuzzy, c-format
+msgid "invalid argument %s for %s"
+msgstr "neplatný token: %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "chyba při zápisu"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Neznámá chyba systému"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: pÅ™epínaÄ `%s' není jednoznaÄný\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: pÅ™epínaÄ `%s' není jednoznaÄný\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: neznámý pÅ™epínaÄ `%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: pÅ™epínaÄ `%c%s' nepovoluje parametr\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: pÅ™epínaÄ `%s' vyžaduje parametr\n"
+
+#: lib/getopt.c:621
+#, fuzzy, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neplatný pÅ™epínaÄ -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, fuzzy, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: pÅ™epínaÄ vyžaduje parametr -- %c\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Úspěch"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Žádný výskyt"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Neplatný regulární výraz"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Neplatný řadicí znak"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Neplatný název třídy znaků"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Koncové zpětné lomítko"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Neplatný odkaz zpět"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Nepárová [ nebo [^"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Nepárová ( nebo \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Nepárová \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Neplatný obsah \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Neplatný konec rozsahu"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Došla paměť"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Neplatný předchozí regulární výraz"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "PÅ™edÄasný konec regulárního výrazu"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Regulární výraz je příliš velký"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Nepárová ) nebo \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Žádný předchozí regulární výraz"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[aA]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"License GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl."
+"html>\n"
+"Toto je free software: můžete je měnit a dále šířit.\n"
+"Není poskytována ŽÃDNà ZÃRUKA, v rozsahu povoleném zákonem.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Napsal(a) %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Napsali %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Napsali %s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s\n"
+"a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Napsali %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s a další.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Chyby hlaste na <%s>.\n"
+
+#: lib/version-etc.c:251
+#, fuzzy, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+"\n"
+"Chyby hlaste na <%s>.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "došla paměť"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Obraz disku"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Chyba při otevírání %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Nemohu otevřít %s pro Ätení/zápis (%s). %s bylo otevÅ™eno jen pro Ätení."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s pÅ™i seek pro Ätení %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s pÅ™i Ätení %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Nemohu zapisovat na %s, protože je otevÅ™en jen pro Ätení."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s při seek pro zápis na %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s při zápisu na %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pro více informací zkuste `%s --help'.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "použití: %s [PŘEPÃNAÄŒ] [ZAŘÃZENÃ]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informovat operaÄní systém o zmÄ›nách tabulky oddílů.\n"
+"\n"
+" -d, --dry-run ve skuteÄnosti operaÄní systém neinformovat\n"
+" -s, --summary vypsat souhrn obsahu\n"
+" -h, --help zobrazit tuto nápovÄ›du a skonÄit\n"
+" -v, --version vypsat informace o verzi a skonÄit\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Když není zadáno ZAŘÃZENÃ, prozkoumat vÅ¡echny oddíly.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Chyby hlaste na <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Nemohu otevřít %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Nemohu prozkoumat úložný prostor."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s při pokusu sync %s na disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Nemohu stat zařízení %s - %s."
+
+#: libparted/arch/linux.c:690
+#, fuzzy, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Nemohu urÄit velikost %s (%s)."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Nemohu zjistit velikost sektoru pro %s: %s.\n"
+"Používám implicitní velikost sektoru (%lld)."
+
+#: libparted/arch/linux.c:795
+#, fuzzy, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Nemohu zjistit velikost sektoru pro %s: %s.\n"
+"Používám implicitní velikost sektoru (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Nemohu urÄit velikost %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Obecné IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Nemohu získat identitu zařízení %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Zařízení %s má několik (%d) logických sektorů na fyzický sektor.\n"
+"GNU Parted to EXPERIMENTÃLNÄš podporuje pro nÄ›které konkrétní kombinace "
+"jmenovky disku/systému souborů, např. GPT a ext2/3.\n"
+"Pro aktuální informace prosím navštivte WWW server."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Chyba při inicializaci zařízení SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, fuzzy, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Zařízení %s má nulovou délku a nemůže obsahovat systém souborů nebo tabulku "
+"oddílů. Možná jste vybrali špatné zařízení?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Nemohu urÄit geometrii souboru/zařízení %s. NemÄ›li byste používat Parted, "
+"pokud OPRAVDU nevíte, co děláte!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Nové zařízení?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "ŘadiÄ RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Zařízení Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Disk IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "Virtuální DASD IBM iSeries"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ŘadiÄ ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "ŘadiÄ I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UBD User-mode Linuxu"
+
+#: libparted/arch/linux.c:1546
+#, fuzzy
+msgid "Loopback device"
+msgstr "Zdrojové zařízení?"
+
+#: libparted/arch/linux.c:1554
+#, fuzzy, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Virtuální blokové zařízení Xenu"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Neznámý"
+
+#: libparted/arch/linux.c:1579
+#, fuzzy
+msgid "Virtio Block Device"
+msgstr "Virtuální blokové zařízení Xenu"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Nepodporovaný typ zařízení"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, fuzzy, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Chyba při otevírání %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Chyba při informování jádra o změnách oddílu %s — %s. To znamená, že Linux "
+"nebude vědět o změnách, které provedli na %s, dokud nerestartujete systém — "
+"takže byste jej neměli připojovat nebo jej před restartem jakkoli používat."
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Nemohu urÄit velikost %s (%s)."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, fuzzy, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Nemohu mít konec pÅ™ed zaÄátkem!"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Pokus zapisovat sektory %ld-%ld mimo oddíl na %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "hledám špatné bloky"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace má na zásobníku %d volání:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Tvrzení (%s) na %s:%d ve funkci %s() selhalo."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: neznámá jmenovka disku"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Tato libparted nemá podporu pro zápis pro %s. Možná byla přeložena jen pro "
+"Ätení."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Oddíl %d je %s, ale systém souborů je %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "boot"
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Neznámý příznak oddílu, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Jmenovky disku %s nepodporují rozšířené oddíly."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Jmenovky disku %s nepodporují logické nebo rozšířené oddíly."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Příliš mnoho primárních oddílů."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "Nemohu přidat logický oddíl do %s, protože neexistuje rozšířený oddíl."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Nemohu mít více než jeden rozšířený oddíl na %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Nemohu mít logické oddíly mimo rozšířený oddíl."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Nemohu mít logický oddíl mimo rozšířený oddíl na %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Nemohu mít primární oddíl uvnitř rozšířeného oddílu."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Nemohu mít oddíl mimo disk!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Nemohu mít překrývající se oddíly."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "volné"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "rozšířený"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logický"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primární"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "skrytý"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Ano"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Neznámý příznak oddílu, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informace"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Varování"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Chyba"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatální"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Chyba"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Neimplementováno"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Opravit"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ano"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Ne"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Znovu"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorovat"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: libparted/exception.c:134
+#, fuzzy, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Byla detekována chyba v GNU parted. Pro více informací o tom, co je užiteÄné "
+"při hlášení chyb, viz WWW server partedu http://www.gnu.org/software/parted/"
+"parted.html! Pošlete prosím e-mailem hlášení o chybě na bug-parted@gnu.org "
+"obsahující alespoň verzi (%s) a následující zprávu:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Podpora pro Ätení jmenovek disku AIXu jeÅ¡tÄ› není implementována."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Podpora pro zápis jmenovek disku AIXu ještě není implementována."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora pro přidávání oddílů do jmenovek disku AIXu ještě není "
+"implementována."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora pro duplikování oddílů ve jmenovkách disku AIXu ještě není "
+"implementována."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Podpora pro nastavování typu systému oddílů ve jmenovkách disku AIXu ještě "
+"není implementována."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora pro nastavování pÅ™epínaÄů ve jmenovkách disku AIXu jeÅ¡tÄ› není "
+"implementována."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Parted nemůže používat systémy souborů HFS na disků s velikostí sektoru "
+"jinou než %d bajtů."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Nemohu kopírovat rozšířený oddíl."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Nemohu splnit všechna omezení na oddíl."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Nemohu alokovat Äíslo oddílu."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Nemohu alokovat položku jmenovky disku bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Nemohu alokovat položku jmenovky disku dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Neplatná tabulka oddílů na %s - nesprávný podpis %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Neplatná tabulka oddílů - rekurzivní oddíl na %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted neumí měnit velikost oddílů spravovaných pomocí Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Nemohu vytvářet další oddíly."
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s nemá rozšířený oddíl (oddíl hlaviÄky svazku)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Kontrolní souÄet je Å¡patnÄ›, což indikuje, že tabulka oddílů je poÅ¡kozená."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Jen primární oddíly mohou být kořenové oddíly."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Jen primární oddíly mohou být odkládací oddíly."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Jen logické oddíly mohou být zaváděcí soubor."
+
+#: libparted/labels/dvh.c:719
+#, fuzzy, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr "Jen logické oddíly (zaváděcí soubory) mají název."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Příliš mnoho primárních oddílů"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "chyba při otevírání"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "chyba při posunu"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "chyba pÅ™i Ätení"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "chyba při ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Nesoulad verzí API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nepodporovaný typ disku"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nepodporovaný formát disku"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disk se používá"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Chyba syntaxe v souboru s nastavením"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Jmenovka svazku je poškozena"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Název sady dat je poškozen"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Alokace paměti selhala"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Ověřování zařízení selhalo"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Zadané zařízení není platné zařízení DASD"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Fatální chyba"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Není místo na jmenovku svazku."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Není místo pro informace o oddílech."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Neplatná VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Nemohu získat verzi API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr "Aktuální verze API '%d' neodpovídá verzi API ovladaÄe '%d'!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Nemohu získat informace o disku."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Nemohu získat informace o geometrii disku."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Nemohu získat informace o velikosti bloku."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Zařízení pro %lu bloků příliš malé."
+
+#: libparted/labels/gpt.c:791
+#, fuzzy, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formát tabulky oddílů GPT je verze %x, což je novější, než kterou umí "
+"rozpoznat Parted. Oznamte nám to prosím! bug-parted@gnu.org"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Zřejmě se nepoužívá všechno dostupné místo na %s, můžete opravit GPT, aby "
+"používala vÅ¡echno místo (dalších %llu bloků) nebo pokraÄovat se souÄasným "
+"nasatvením? "
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Záložní tabulka GPT není na konci disku, jak by měla být. To možná znamená, "
+"že jiný operaÄní systém si myslí, že disk je menší. Mám to opravit "
+"přesunutím zálohy na konec (a odstraněním staré zálohy)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Primární i záložní tabulka GPT je poškozena. Zkuste vytvořit novou tabulku a "
+"obnovit oddíly pomocí schopnosti Partedu rescue."
+
+#: libparted/labels/gpt.c:1055
+#, fuzzy
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Primární tabulka GPT je poškozena, ale záloha se zdá být v pořádku, takže "
+"bude použita záloha."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Primární tabulka GPT je poškozena, ale záloha se zdá být v pořádku, takže "
+"bude použita záloha."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Nemohu alokovat Äíslo oddílu."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Neplatný podpis %x pro jmenovky disku Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Mapa oddílů nemá žádnou položku mapy oddílů!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s je příliš malý pro jmenovku disku Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Oddíl %d má neplatný podpis %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Oddíl %d má neplatnou délku 0 bajtů."
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Datový region nezaÄíná na zaÄátku oddílu."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Zaváděcí region oddílu nezabírá celý oddíl."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Datový region oddílu nezabírá celý oddíl."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Podivná velikost bloku v deskriptoru zařízení: %d bajtů není dělitelné 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Deskriptor ovladaÄe říká, že fyzická velikost bloku je %d bajtů ale Linux "
+"říká, že je to %d bajtů."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nenalezena platná mapa oddílů."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Kolidující velikosti položek mapy oddílů! Položka 1 říká, že je to %d, ale "
+"položka %d říká, že je to %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Podivné! Existují 2 položky mapy oddílu!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Změna názvu kořenového nebo odkládacího oddílu zabrání Linuxu v jeho "
+"rozpoznání."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Nemohu přidat další oddíl — mapa oddílů je příliš malá!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Neplatná tabulka oddílů na %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Oddíl %d není zarovnán na hranice cylindru. To pořád ještě není podporováno."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Nemohu přidat další oddíl."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Å patný kontrolní souÄet bloku %llu typu %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Nenašel jsem blok rdb, to by se nemělo nikdy stát."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Na bloku %d detekována smyÄka."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Seznam %s je zřejmě v bloku %s špatný."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Nemohu vypsat špatné bloky."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Nemohu vypsat bloky oddílu."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Nemohu vypsat bloky systému souborů."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Nemohu vypsat zaváděcí bloky."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Nemohu zapsat blok oddílu na %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Detekována poškozená jmenovka disku Sun."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometrie disku CHS (%d,%d,%d) ohlášená operaÄním systémem neodpovídá "
+"geometrii uložené v jmenovce disku (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Jmenovka disku popisuje disk větší než %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disk má %d cylindrů, což je více než maximum 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Jediný zbývající oddíl je oddíl Celý disk. Obecně není dobrý nápad tento "
+"oddíl pÅ™epsat skuteÄným oddílem. Bez nÄ›j možná nebude možné zavést Solaris a "
+"SILO (zavadÄ›Ä systému pro sparc) jej také ocení."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Jmenovka disku Sun je plná."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "otevírání zařízení selhalo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "posun v zařízení selhal"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "zápis na zařízení selhal"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "Ätení ze zařízení selhalo"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Nemohu Äíst jmenovku svazku."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Nemohu zapsat jmenovku svazku."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Nemohu Äíst jmenovky VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Nemohu Äíst FMT1 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Nemohu Äíst FMT4 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Nemohu Äíst FMT5 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Nemohu Äíst FMT7 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Nemohu zapisovat jmenovky VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Nemohu zapisovat FMT1 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Nemohu zapisovat FMT4 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Nemohu zapisovat FMT5 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Nemohu zapisovat FMT7 DSCB VTOC."
+
+#: libparted/labels/vtoc.c:622
+#, fuzzy
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Nemohu zapisovat FMT1 DSCB VTOC."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Nedostatek paměti."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Nemohu získat velikost jednotky pro speciální jednotku 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" má neplatnou syntax umístění."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Maximální hodnota hlavy je %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Maximální hodnota sektoru je %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Umístění %s je mimo zařízení %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Neplatné Äíslo."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Nemohu alokovat blok oddílu\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Nemohu alokovat blok\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Nemohu Äíst zavádÄ›cí blok %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Nemohu Äíst koÅ™enový blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Nemohu alokovat prvek seznamu id\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Nemohu Äíst blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Å patný kontrolní souÄet bloku %llu typu %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Nemohu zapsat blok %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Nemohu alokovat disk_specific blok rdb\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Nenašeljsem blok rdb, to by se nemělo nikdy stát\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : NemohuÄíst blok oddílu %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted byl nesprávně přeložen: zaváděcí sektor FAT by měl být 512 bajtů. "
+"Podpora FAT bude zakázána."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Systém souborů má neplatný podpis pro systém souborů FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Systém souborů má neplatnou velikost sektoru pro systém souborů FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Systém souborů má neplatnou velikost clusteru pro systém souborů FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Systém souborů má neplatný poÄet rezervovaných sektorů pro systém souborů "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Systém souborů má neplatný poÄet FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Zaváděcí sektor FAT říká, že logická velikost sektoru je 0. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Zaváděcí sektor FAT říká, že neexistuje žádná tabulka FAT. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Zaváděcí sektor FAT říká, že cluster je 0 sektorů. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Systém souborů je FAT12, což není podporováno."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, fuzzy, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Nerozpoznaný podpis odkládacího oddílu linuxu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, fuzzy, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Nerozpoznaný podpis odkládacího oddílu linuxu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, fuzzy, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Nerozpoznaný podpis odkládacího oddílu linuxu '%10s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted nemůže používat systémy souborů HFS na disků s velikostí sektoru "
+"jinou než %d bajtů."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Geometrie CHS systému souborů je (%d, %d, %d), což není platné. Geometrie "
+"CHS tabulky oddílů je (%d, %d, %d). Zvolíte-li Ignorovat, geometrie CHS "
+"systému souborů bude ponechána beze změny. Zvolíte-li Opravit, geometrie CHS "
+"systému souborů bude nastavena tak, aby odpovídala geometrii CHS tabulky "
+"oddílů."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Sektor informací má nesprávný podpis (%x). Zatím zvolte Zrušit a pošlete "
+"hlášení o chybě. Pokud jste v úzkých, můžete to pravděpodobně bez obav "
+"ignorovat."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Pro zmenšení tohoto oddílu na tuto velikost potřebujete %s volného místa. "
+"Momentálně je volné jen %s."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "ZmÄ›na zaÄátku clusteru = %d, což není násobek velikosti clusteru %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "Å patná položka adresáře pro %s: první cluster je znaÄka konce souboru."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Å patná FAT: neukonÄený Å™etÄ›zec pro %s. MÄ›li byste spustit dosfsck nebo "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Špatná FAT: cluster %d je mimo systém souborů v řetězci pro %s. Měli byste "
+"spustit dosfsck nebo scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Špatná FAT: cluster %d pro %s má křížové odkazy. Měli byste spustit dosfsck "
+"nebo scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s je %dk, ale má %d clusterů (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Oddíl je příliš velký/malý pro systém souborů %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Tabulky FAT si neodpovídají. Pokud nevíte, co to znamená, zvolte Zrušit, "
+"spusťte na systému souborů scandisk a pak se vraťte."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Pro tento typ FAT neexistuje možná konfigurace."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Systém souborů nemá oÄekávané velikosti, aby jej Windows mÄ›ly rády. Velikost "
+"clusteru je %dk (oÄekáváno %dk); poÄet clusterů je %d (oÄekáváno %d); "
+"velikost FAT je %d sektorů (oÄekáváno %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Systém souborů oznamuje volné místo jako %d clusterů, ne %d clusterů."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"V koÅ™enovém adresáři není dostatek místa pro vÅ¡echny souborů. Zvolte buÄ "
+"Zrušit, nebo Ignorovat pro ztrátu těchto souborů."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Chyba při zápisu do kořenového adresáře."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Pokud svůj systém souborů ponecháte jako FAT16, nebudete mít žádné problémy."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Pokud převedete na FAT16 a na tomto oddílu jsou nainstalovány MS Windows, "
+"musíte reinstalovat zavadÄ›Ä systému MS Windows. Pokud to chcete udÄ›lat, mÄ›li "
+"byste si pÅ™eÄíst manuál Partedu (nebo manuál své distribuce)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Pokud svůj systém souborů ponecháte jako FAT16, nezpůsobíte žádné nové "
+"problémy."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Pokud převedete na FAT32 a na tomto oddílu jsou nainstalovány MS Windows, "
+"musíte reinstalovat zavadÄ›Ä systému MS Windows. Pokud to chcete udÄ›lat, mÄ›li "
+"byste si pÅ™eÄíst manuál Partedu (nebo manuál své distribuce). PÅ™evedení na "
+"FAT32 také uÄiní systém souborů neÄitelným pro MS DOS, MS Windows 95a a MS "
+"Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Chcete použít FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Velikost systému souborů může být na tuto hodnotu změněna jen převodem na "
+"FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Velikost systému souborů může být na tuto hodnotu změněna jen převodem na "
+"FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted neumí změnit velikost tohoto oddílu na tuto hodnotu. Pracujeme na "
+"tom!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d media %x neodpovídá media %x zaváděcího sektoru. Pravděpodobně byste "
+"měli spustit scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld mimo systém souborů"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld mimo systém souborů"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: nejsou volné clustery"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Nemohu detekovat systém souborů."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"Podpora pro změnu velikosti souborových systémů %s ještě není implementována."
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Systém souborů je větší než jeho obsah!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Systém souborů obsahuje chyby."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Nelze Äíst Å¡patné bloky."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Pokouším se zaregistrovat rozsah zaÄínající na bloku 0x%X, ale v tomto "
+"umístění již jeden existuje. Měli byste zkontrolovat systém souborů!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Pokouším se přesunout rozsah z bloku 0x%X do bloku 0x%X, ale v tomto "
+"umístění již jeden existuje. To by se nemělo stát!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Nemohu aktualizovat cache rozsahů pro soubor HFS s CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Pokus Äíst soubor HFS s CNID %X za koncem souboru."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Nemohu najít sektor %lli souboru HFS s CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Pokus zapisovat do souboru HFS s CNID %X za konec souboru."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Nemohu aktualizovat cache rozsahů pro soubor HFS+ s CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Pokus Äíst soubor HFS+ s CNID %X za koncem souboru."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Nemohu najít sektor %lli souboru HFS+ s CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Pokus zapisovat do souboru HFS+ s CNID %X za konec souboru."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Lituji, HFS zatím nelze takto měnit velikost."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "zmenšuji"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Přesun dat selhal."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Přesun dat nechal na konci svazku nějaká data."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "zapisuhi blok hlavního adresáře HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Při otevírání nebyl nalezen platný podpis HFS[+X]."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Verze %d HFS+ není podporována."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Verze %d HFSX není podporována."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Přesun dat nechal na konci svazku nějaká data."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Chyba při zápisu do souboru alokací."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Chyba pÅ™i zápisu do Äásti pro kompatibilitu souboru alokací."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "zapisuji hlaviÄku svazku HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Při hledání povinného souboru špatných bloků došlo k chybě."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"V obalu HFS je zřejmě chyba: soubor špatných bloků neobsahuje vložený svazek "
+"HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Lituji, HFS+ zatím nelze takto měnit velikost."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "zmenšuji vložený svazek HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Změna velikosti svazku HFS+ selhala."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "zmenšuji obal HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Aktualizace obalu HFS selhala."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Toto není skuteÄná kontrola %s. Toto pro ladicí úÄely extrahuje speciální "
+"nízkoúrovňové soubory."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Kontrolní souÄet hlaviÄky seznamu Å¡patných bloků."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr "Neplatná velikost bloku transakce při přehrávání žurnálu (%i bajtů)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Žurnály uložené mimo svazek nejsou podporovány. Zkuste deaktivovat žurnál a "
+"spusťte Parted znovu."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Posun nebo velikost žurnálu není násobek velikosti sektoru."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Neplatné kouzelné hodnoty v hlaviÄce žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Nesoulad velikosti žurnálu mezi blokem informací o žurnálu a hlaviÄkou "
+"žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "NÄ›které pole hlaviÄky nejsou násobek velikosti sektoru."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Velikost sektoru uložená v žurnálunení 512. Parted podporuje jen sektory "
+"velké 512 bajtů."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Å patný kontrolní souÄet žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Žurnál není prázdný. Před otevřením systému souborů musí Parted přehrát "
+"transakce. To změní systém souborů."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"HlaviÄka svazku nebo hlavní blok adresáře se pÅ™i pÅ™ehrávání žurnálu zmÄ›nil. "
+"Měli byste restartovat Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Rozsah nebyl přesunut."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Odkaz na rozsah přichází z místa, ze kterého by neměla. Měli byste "
+"zkontrolovat systém souborů!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Tento svazek HFS nemá soubor katalogu. To je velice neobvyklé!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Tento svazek HFS nemá soubor pÅ™eteÄení rozsahů. To je celkem neobvyklé!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Soubor pÅ™eteÄení rozsahů by nemÄ›l obsahovat své vlastní rozsahy! MÄ›li byste "
+"zkontrolovat systém souborů."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Nemohu kešovat systém souborů v paměti."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Seznam Å¡patných bloků nelze naÄíst."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Při přesunu rozsahu došlo k chybě."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Tento svazek HFS+ nemá soubor katalogu. To je velice neobvyklé!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Tento svazek HFS+ nemá soubor pÅ™eteÄení rozsahů. To je celkem neobvyklé!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "zobrazí tuto zprávu nápovědy"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "vypíše rozložení oddílů na všech blokových zařízeních"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "zobrazí strojově zpracovatelný výstup"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "zobrazí strojově zpracovatelný výstup"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nikdy nežádá o intervenci uživatele"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "zobrazí verzi"
+
+#: parted/parted.c:145
+#, fuzzy
+msgid "alignment for new partitions"
+msgstr "Nemohu vytvářet další oddíly."
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"ÄŒÃSLO je Äíslo oddílu používané Linuxem. Na jmenovkách disku MS-DOS mají "
+"primární oddíly Äísla 1-4 a logické oddíly od 5 dál.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TYP-JMENOVKY je jeden z: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "PŘEPÃNAÄŒ je jeden z: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "JEDNOTKA je jedna z: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TYP-ODDÃLU je jeden z: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TYP-FS je jeden z: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ZAÄŒÃTEK a KONEC jsou místa na disku, napÅ™. 4GB nebo 10%. Záporné hodnoty se "
+"poÄítají od konce disku. Například -1s urÄuje pÅ™esnÄ› poslední sektor.\n"
+
+#: parted/parted.c:172
+#, fuzzy
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"ZAÄŒÃTEK a KONEC jsou místa na disku, napÅ™. 4GB nebo 10%. Záporné hodnoty se "
+"poÄítají od konce disku. Například -1s urÄuje pÅ™esnÄ› poslední sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STAV je jeden z: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "ZAŘÃZENà je obvykle /dev/hda nebo /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NÃZEV je libovolné slovo\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright © 1998 — 2006 Free Software Foundation, Inc.\n"
+"Toto je volné programové vybavení podle GNU General Public License.\n"
+"\n"
+"Tento program je rozÅ¡iÅ™ován v nadÄ›ji, že bude užiteÄný,\n"
+"ale BEZ JAKÉKOLI ZÃRUKY; ani bez pÅ™edpokládané záruky\n"
+"PRODEJNOSTI nebo VHODNOSTI PRO KONKRÉTNà ÚČEL. Další\n"
+"podrobnosti najdete v GNU General Public License.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(zbylý Äas %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Oddíl %s se používá. Než jej budete upravovat Partedem, musíte jej odpojit."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Oddíl(a) na %s jsou používány."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Existující jmenovka disku na %s bude zniÄena a vÅ¡echna data na tomto disku "
+"budou ztracena. Chcete pokraÄovat?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Typ nové jmenovky disku?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Typ oddílu?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Název oddílu?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Typ souborového systému?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "ZaÄátek?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Konec?"
+
+#: parted/parted.c:794
+#, fuzzy, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Požádali jste o oddíl od %s do %s.\n"
+"Nejbližší umístění, které zvládneme, je %s až %s. Je to pro vás ještě "
+"přijatelné?"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Jmenovky disku %s nepodporují rozšířené oddíly."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Číslo oddílu?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Jmenovky disku %s nepodporují rozšířené oddíly."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Typ oddílu?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Neplatné Äíslo."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Typ oddílu?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Neplatné Äíslo."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "Geometrie cylindr,hlava,sektor BIOSu: %d,%d,%d. Každý cylindr je %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sector size (logical/physical): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabulka oddílů: %s\n"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Číslo"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "ZaÄátek"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Konec"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Velikost"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Typ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Systém souborů"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Název"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "PÅ™epínaÄe"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Volné místo"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Byl nalezen oddíl %s %s na %s -> %s. Chcete jej přidat do tabulky oddílů?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "hledám systémy souborů"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nové zařízení?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "PÅ™epínaÄ, který zmÄ›nit?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nový stav?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Jednotka?"
+
+#: parted/parted.c:2303
+#, fuzzy
+msgid "align-check"
+msgstr "check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [PŘÃKAZ] vypsat obecnou nápovÄ›du nebo "
+"nápovÄ›du o PŘÃKAZu"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TYP-JMENOVKY vytvořit novou jmenovku disku "
+"(tabulku oddílů)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TYP-ODDÃLU [TYP-FS] ZAÄŒÃTEK KONEC vytvoÅ™it oddíl"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' vytvoří oddíl bez vytvoření nového systému souborů na něm. TYP-FS "
+"může být urÄen pro nastavení odpovídajícího ID oddílu.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name ÄŒÃSLO NÃZEV pojmenovat oddíl ÄŒÃSLO NÃZEV"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|ÄŒÃSLO] zobrazit tabulku oddílů, dostupná "
+"zařízení, volné místo, všechny nalezené oddíly, nebo konkrétní oddíl"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"'print' bez parametrů zobrazí celou tabulku oddílů. S následujícími "
+"parametry ale provede různé jiné akce.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : zobrazit všechna aktivní bloková zařízení\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : zobrazit informace o volném místě mimo oddíly na aktuálním "
+"blokovém zařízení\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : zobrazit tabulky oddílů všech aktivních blokových zařízení\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit ukonÄit program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ZAÄŒÃTEK KONEC zachránit ztracený oddíl poblíž "
+"ZAÄŒÃTKU a KONCE"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "move ÄŒÃSLO ZAÄŒÃTEK KONEC pÅ™esunout oddíl ÄŒÃSLO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm ÄŒÃSLO odstranit oddíl ÄŒÃSLO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select ZAŘÃZENà zvolit upravované zařízení"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+#, fuzzy
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"set ÄŒÃSLO PŘEPÃNAÄŒ STAV zmÄ›nit PŘEPÃNAÄŒ na oddílu ÄŒÃSLO"
+
+#: parted/parted.c:2425
+#, fuzzy
+msgid "disk_toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2428
+#, fuzzy
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"toggle [ÄŒÃSLO [PŘEPÃNAÄŒ]] pÅ™epnout stav PŘEPÃNAÄŒE na oddílu "
+"ÄŒÃSLO"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set ÄŒÃSLO PŘEPÃNAÄŒ STAV zmÄ›nit PŘEPÃNAÄŒ na oddílu ÄŒÃSLO"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [ÄŒÃSLO [PŘEPÃNAÄŒ]] pÅ™epnout stav PŘEPÃNAÄŒE na oddílu "
+"ÄŒÃSLO"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+#, fuzzy
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr "move ÄŒÃSLO ZAÄŒÃTEK KONEC pÅ™esunout oddíl ÄŒÃSLO"
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit JEDNOTKA nastavit implicitní jednotku na "
+"JEDNOTKA"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version zobrazit Äíslo verze a informace o "
+"copyrightu GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' zobrazí informace o copyrightu a informace o verzi odpovídající "
+"této kopii GNU Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr "Použití: %s [-hlmsv] [ZAŘÃZENà [PŘÃKAZ [PARAMETRY]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nenalezeno žádné zařízení"
+
+#: parted/parted.c:2626
+#, fuzzy
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "VAROVÃNÃ: Nejste superuživatel. Pozor na oprávnÄ›ní."
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"PÅ™ed restartem byste mÄ›li reinstalovat svůj zavadÄ›Ä systému. Pro více "
+"informací si pÅ™eÄtÄ›te oddíl 4 Uživatelské dokumentace Parted."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Možná budete potřebovat aktualizovat /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Vítá vás GNU Parted! Zobrazte seznam příkazů napsáním 'help'.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Použití: parted [PŘEPÃNAÄŒ]... [ZAŘÃZENà [PŘÃKAZ [PARAMETRY]...]...]\n"
+"Provést PŘÃKAZy s PARAMETRY na ZAŘÃZENÃ. Není-li zadán PŘÃKAZ, spustit\n"
+"v interaktivním režimu.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Našli jste chybu v GNU Parted! Musíte udělat toto:\n"
+"\n"
+"Nepanikařte! Chyba pravděpodobně neměla vliv na žádná vaše data.\n"
+"Pomozte nám opravit tuto chybu takto:\n"
+"\n"
+"Zkontrolujte, jestli již byla chyba opravena, zkontrolováním\n"
+"nejnovější verze GNU Parted, kterou můžete najít na:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Před hlášením chyby prosím zkontrolujte tuto verzi.\n"
+"\n"
+"Pokud to ještě nebylo opraveno nebo pokud nevíte, jak to zkontrolovat,\n"
+"navštivte prosím WWW server GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"pro více informací.\n"
+"\n"
+"Vaše zpráva by měla obsahovat verzi tohoto programu (%s)\n"
+"a zprávu o chybě níže, výstup\n"
+"\n"
+"\tparted ZAŘÃZENà unit co print unit s print\n"
+"\n"
+"a následující historii příkazů, které jste zadali.\n"
+"Také přidejte další informace o vaší konfiguraci, které\n"
+"považujete za důležité.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Historie příkazů:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Chyba: SEGV_MAPERR (Adresa nepřiřazena objektu)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Chyba: SEGV_ACCERR (Neplatné oprávnění namapovaného objektu)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Chyba: Byl přijat obecný signál SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Chyba: FPE_INTDIV (Celá Äísla: dÄ›lení nulou)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_INTOVF (Celá Äísla: pÅ™eteÄení)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTDIV (Plovoucí: dělení nulou)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTOVF (Plovoucí: pÅ™eteÄení)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTUND (Plovoucí: podteÄení)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTRES (Plovoucí: nepřesný výsledek)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTINV (Plovoucí: neplatný výsledek)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTSUB (Plovoucí: index mimo rozsah)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Chyba: Byl přijat obecný signál SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLOPC (Neplatný kód operace)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLOPN (Neplatný parametr)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLADR (Neplatný režim adresování)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLTRP (Neplatné zachycení)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Chyba: ILL_PRVOPC (Privilegovaný kód operace)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Chyba: ILL_PRVREG (Privilegovaný registr)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Chyba: ILL_COPROC (Chyba koprocesoru)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Chyba: ILL_BADSTK (Interní chyba zásobníku)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Chyba: Byl přijat obecný signál SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "neplatný token: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "OÄekávám Äíslo oddílu."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Oddíl neexistuje."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "OÄekávám typ systému souborů."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Neznámý typ systému souborů \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "OÄekávám typ jmenovky disku."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Nemohu vytvářet další oddíly."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "OÄekávám typ oddílu."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "PŘEPÃNAÄŒe:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "PŘÃKAZy:"
+
+#: parted/ui.c:1602
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Chyby hlaste na <%s>.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Používám %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Tento příkaz nedává smysl v neinteraktivním režimu.\n"
+
+#, c-format
+#~ msgid "%s: option `--%s' doesn't allow an argument\n"
+#~ msgstr "%s: pÅ™epínaÄ `--%s' nepovoluje parametr\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option `--%s'\n"
+#~ msgstr "%s: neznámý pÅ™epínaÄ `--%s'\n"
+
+#, c-format
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: neplatný pÅ™epínaÄ -- %c\n"
+
+#, c-format
+#~ msgid "%s: option `-W %s' is ambiguous\n"
+#~ msgstr "%s: pÅ™epínaÄ `-W %s' není jednoznaÄný\n"
+
+#, c-format
+#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: pÅ™epínaÄ `-W %s' nepovoluje parametr\n"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Použití: %s [PŘEPÃNAÄŒ]\n"
+#~ " nebo: %s ZAŘÃZENà MINOR\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Vymazat nepoužívané místo na oddílu FAT (nástroj pro testování GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help zobrazit tuto nápovÄ›du a skonÄit\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version vypsat informace o verzi a skonÄit\n"
+
+#, c-format
+#~ msgid "too few arguments"
+#~ msgstr "příliš málo parametrů"
+
+#, c-format
+#~ msgid "too many arguments"
+#~ msgstr "příliš mnoho parametrů"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Nebylo možné znovu naÄíst tabulku oddílů. To znamená, že budete muset "
+#~ "pÅ™ed pÅ™ipojením zmÄ›nÄ›ných oddílů restartovat poÄítaÄ. Také musíte pÅ™ed "
+#~ "restartem reinstalovat svůj zavadÄ›Ä systému (což může vyžadovat pÅ™ipojení "
+#~ "změněných oddílů). Nelze provést obojí! Takže budete muset zavést systém "
+#~ "ze záchranného disku a reinstalovat svůj zavadÄ›Ä systému odtud. Pro více "
+#~ "informací si pÅ™eÄtÄ›te oddíl 4 Uživatelské dokumentace Parted."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Tabulku oddílů na %s nelze znovu naÄíst (%s). To znamená, že Hurd neví "
+#~ "nic o změnách, které jste provedli. Než budete cokoli dělat s %s, měli "
+#~ "byste restartovat svůj poÄítaÄ."
+
+#, c-format
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Zařízení %s má logickou velikost sektoru %lld. Ne vÅ¡echny Äásti GNU "
+#~ "Parted to momentálně podporují, a fungující kód je VELICE "
+#~ "EXPERIMENTÃLNÃ.\n"
+
+#, c-format
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted nemohl znovu naÄíst tabulku oddílů na %s (%s). To znamená, že "
+#~ "Linux nebude vědět nic o změnách, které jste provedli."
+
+#, c-format
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything about the modifications you made until "
+#~ "you reboot. You should reboot your computer before doing anything with "
+#~ "%s."
+#~ msgstr ""
+#~ "Jádro nemohlo znovu naÄíst tabulku oddílů na %s (%s). To znamená, že "
+#~ "Linux nebude vědět nic o změnách, které jste provedli, dokud "
+#~ "nerestartujete systém. MÄ›li byste svůj poÄítaÄ restartovat, než budete s "
+#~ "%s něco dělat."
+
+#, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pro otevírání souborových systémů %s ještě není implementována."
+
+#, c-format
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pro vytváření souborových systémů %s ještě není implementována."
+
+#, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pro kontrolu souborových systémů %s ještě není implementována."
+
+#~ msgid "raw block copying"
+#~ msgstr "přímé kopírování bloků"
+
+#~ msgid "growing file system"
+#~ msgstr "zvětšování systému souborů"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Nemohu kopírovat do překrývajícího se oddílu."
+
+#, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Pro %s není ještě implementována přímá podpora pro kopírování systémů "
+#~ "souborů. Je ale implementována podpora pro změnu velikosti. Systém "
+#~ "souborů tedy může být zkopírován, je-li nový oddíl alespoň tak velký jako "
+#~ "starý. Takže buÄ zmenÅ¡ete oddíl, který se pokoušíte zkopírovat, nebo "
+#~ "kopírujte do většího oddílu."
+
+#, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pro kopírování souborových systémů %s ještě není implementována."
+
+#~ msgid "creating"
+#~ msgstr "vytváření"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "Systém souborů je v neplatném stavu. Možná je připojen?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr "Systém souborů má starý formát (nepodporující změnu velikosti)."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr "Neplatný poÄet volných bloků. Nejdřív spusÅ¥te reiserfsck --check."
+
+#~ msgid "checking"
+#~ msgstr "kontroluji"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Strom reiserfs je zřejmě poškozen. Nejdřív spusťte reiserfsck --check."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Systém souborů reiserfs prošel základní kontrolou. Pro podrobnější "
+#~ "kontrolu spusťte reiserfsck --check."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Lituji, jeÅ¡tÄ› neumím pÅ™esunout zaÄátek oddílů reiserfs."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr "Nemohu znovu otevřít vrstvu abstrakce zařízení pro Ätení/zápis."
+
+#~ msgid "expanding"
+#~ msgstr "zvětšuji"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Nemohu vytvořit vrtsvu abstrakce zařízení reiserfs."
+
+#~ msgid "copying"
+#~ msgstr "kopíruji"
+
+#, c-format
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Nemohu nalézt symbol %s. Chyba: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted nalezl neplatnou knihovnu libreiserfs."
+
+#, c-format
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted detekoval nesoulad ve verzích rozhraní libreiserfs. Nalezeno "
+#~ "%d-%d, vyžadováno %d. Podpora ReiserFS bude zakázána."
+
+#~ msgid "Unable to determine the block size of this dasd"
+#~ msgstr "Nemohu urÄit bloku tohoto dasd"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Rozšířené oddíly nelze na jmenovkách disku msdos skrývat."
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "Toto není disk ECKD! Tento typ disku není podporován!"
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s obsahuje podpisy GPT, což naznaÄuje, že má tabulku GPT. Nemá ale "
+#~ "platnou falešnou tabulku oddílů msdos, kterou by měl mít. Možná byla "
+#~ "poškozena — např. programem, který nerozumí tabulkám oddílů GPT. Nebo "
+#~ "jste možná odstranili tabulku oddílů GPT a nyní používáte tabulku oddílů "
+#~ "msdos. Je toto tabulka oddílů GPT?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "ZavádÄ›cí region nezaÄíná na zaÄátku oddílu."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Nekonzistentní deskriptory skupin!"
+
+#~ msgid "File system full!"
+#~ msgstr "Systém souborů plný!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr "Neplatný superblok. Opravdu to je systém souborů ext2?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Systém souborů má chyby! Měli byste spustit e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Systém souborů nebyl ÄistÄ› odpojen! MÄ›li byste spustit e2fsck. Úpravy "
+#~ "neÄistého systému souborů mohou způsobit vážné poÅ¡kození dat."
+
+#~ msgid "File system has an incompatible feature enabled."
+#~ msgstr "Systém souborů má povolenou nekompatibilní vlastnost."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Chyba při alokaci buffer cache."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "NaÅ¡el jsem inode s nesprávným poÄtem odkazů. RadÅ¡i nejdřív spusÅ¥te e2fsck!"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Nedostatek volných inodů!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Systém souborů je příliš plný na to, abych mohl odstranit skupinu!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Systém souborů má příliš mnoho alokovaných inodů na to, abych mohl "
+#~ "odstranit skupinu!"
+
+#~ msgid "adding groups"
+#~ msgstr "přidávám skupiny"
+
+#, c-format
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Váš systém souborů je příliš plný na to, abych mohl změnit jeho velikost "
+#~ "na %i bloků. Lituji."
+
+#, c-format
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Váš systém souborů má příliš mnoho použitých inodů na to, abych mohl "
+#~ "změnit jeho velikost na %i bloků. Lituji."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "Systém souborů nebyl správně odpojen! Měli byste spustit e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Systém souborů má povolenu vlastnost 'dir_index'. Parted může změnit "
+#~ "velikost systému souborů, jen pokud tuto vlastnost zakáže. Můžete ji "
+#~ "pozdÄ›ji povolit spuÅ¡tÄ›ním 'tune2fs -O dir_index ZAŘÃZENÃ' a pak 'e2fsck -"
+#~ "fD ZAŘÃZENÃ'."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Operace změny velikosti na tomto systému souborů bude používat "
+#~ "EXPERIMENTÃLNÃ\n"
+#~ "kód, který jej MŮŽE POŠKODIT (i když zatím nikdo takové poškození "
+#~ "nehlásil).\n"
+#~ "Přinejmenším byste měli nejdřív zazálohovat svá data, a potom spustit\n"
+#~ "'e2fsck -f'."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr "Nalezeny bloky s křížovými odkazy! Radši nejdřív spusťte e2fsck!"
+
+#, c-format
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Blok %i nemá odkaz? Divné."
+
+#, c-format
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Blok %i by nemÄ›l být oznaÄen (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Systém souborů ext2 prošel základní kontrolou. Pro podrobnější kontrolu "
+#~ "použijte program e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Lituji, jeÅ¡tÄ› neumím pÅ™esunout zaÄátek oddílů ext2!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Nemohu vyprázdnit buffer cache!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "zapisuji metadata skupin"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Systém souborů příliš malý pro ext2."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Systém souborů má logickou velikost sektoru %d. Ví se, že GNU Parted "
+#~ "nepracuje správně s velikostí sektoru jinou než 512 bajtů."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Soubor %s je oznaÄen jako systémový soubor. To znamená, že jeho pÅ™esun "
+#~ "může způsobit, že některé programy přestanou fungovat."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Příliš mnoho špatných stránek."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "Oddíl musí mít jeden z následujících TYPů-FS:"
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Existující systém souborů bude zniÄen a vÅ¡echna data v oddílu budou "
+#~ "ztracena. Chcete pokraÄovat?"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Číslo zdrojového oddílu?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Číslo cílového oddílu?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr ""
+#~ "Rozšířený oddíl nemůže obsahovat systém souborů. Chtěli jste mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Nemohu přesouvat rozšířený oddíl."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr "Nemohu přesunout oddíl na sebe. Možná zkuste použít resize?"
+
+#, c-format
+#~ msgid "Minor: %d\n"
+#~ msgstr "Minor: %d\n"
+
+#, c-format
+#~ msgid "Flags: %s\n"
+#~ msgstr "PÅ™epínaÄe: %s\n"
+
+#, c-format
+#~ msgid "File System: %s\n"
+#~ msgstr "Systém souborů: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Velikost: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Minimální velikost: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Maximální velikost: "
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check ÄŒÃSLO provést jednoduchou kontrolu "
+#~ "systému souborů"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [Z-ZAŘÃZENÃ] Z-ÄŒÃSLA NA-ÄŒÃSLO zkopírovat systém souborů na "
+#~ "jiný oddíl"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partititon NUMBER"
+#~ msgstr ""
+#~ "mkfs ÄŒÃSLO TYP-FS vytvoÅ™it systém souborů TYP-FS "
+#~ "na oddílu ÄŒÃSLO"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs TYP-ODDÃLU TYP-FS ZAÄŒÃTEK KONEC vytvoÅ™it oddíl se systémem "
+#~ "souborů"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " ÄŒÃSLO : zobrazit podrobnÄ›jší informace o tomto konkrétním oddílu\n"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "resize ÄŒÃSLO ZAÄŒÃTEK KONEC zmÄ›nit velikost oddílu ÄŒÃSLO a "
+#~ "jeho systému souborů"
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "Zařízení %s není disk SCSI ani IDE."
+
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Chyba pÅ™i Ätení %s (%s) pro urÄení, jestli je oddíl pÅ™ipojen."
+
+#~ msgid ""
+#~ "Unable to determine if partitions are mounted via /proc/mounts or /etc/"
+#~ "mtab. Make sure you don't attempt to resize or modify mounted file "
+#~ "systems. (Even read-only mounted)"
+#~ msgstr ""
+#~ "Nemohu urÄit pomocí /proc/mounts nebo /etc/mtab, jestli jsou oddíly "
+#~ "pÅ™ipojeny. PÅ™esvÄ›dÄte se, že se nepokoušíte zmÄ›nit velikost nebo mÄ›nit "
+#~ "pÅ™ipojené soubory souborů. (I pÅ™ipojené jen pro Ätení)"
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "Tabulka oddílů na %s není konzistentní. To se může stát z mnoha důvodů. "
+#~ "Nejpravděpodobnější důvod je, že Linux nesprávně detekoval geometrii "
+#~ "BIOSu pro %s. GNU Parted má podezÅ™ení, že skuteÄná geometrie by mÄ›la být "
+#~ "%d/%d/%d (ne %d/%d/%d). Měli byste to nejdřív zkontrolovat ve svém BIOSu, "
+#~ "protože to možná není správně. Linux můžete informovat přidáním parametru "
+#~ "%s=%d,%d%d na příkazovém řádku. Pro více informací viz dokumentaci o LILO "
+#~ "nebo GRUB. Jestliže si myslíte, že geometrie Partedu je správná, můžete "
+#~ "pokraÄovat zvolením Ignorovat (a opravit Linux pozdÄ›ji). V opaÄném "
+#~ "případě zvolte Zrušit (a opravte Linux a/nebo BIOS hned)."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "Tabulka oddílů na %s není konzistentní. To se může stát z mnoha důvodů. "
+#~ "Často se stává, že Linux nesprávně detekuje geometrii BIOSu. To ale není "
+#~ "tento případ. Můžete problém bez obav ignorovat, ale jeho ignorování může "
+#~ "způsobit (opravitelné) problémy s nÄ›kterými zavadÄ›Äi systému a může "
+#~ "způsobit problémy se systémy souborů FAT. DoporuÄuje se používat LBA."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Nemohu správně zarovnat oddíl. To pravděpodobně znamená, že jiný nástroj "
+#~ "na tvorbu oddílů vygeneroval nesprávnou tabulku oddílů, protože neměl "
+#~ "správnou geometrii BIOSu. Tento problém můžete bez obav ignorovat, ale "
+#~ "jeho ignorování může způsobit (opravitelné) problémy s nÄ›kterými zavadÄ›Äi "
+#~ "systému."
+
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Pokus Äíst sektory %ld-%ld mimo oddíl na %s"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "Tento systém souborů ext2 má poněkud zvláštní rozložení! Parted (ještě) "
+#~ "neumí změnit jeho velikost."
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "Systém souborů má neplatný podpis pro systémy souborů FAT."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "je-li potřeba, požádá o intervenci uživatele"
+
+#~ msgid ""
+#~ "Partition %s is being used. Modifying it while it is in use could cause "
+#~ "severe corruption."
+#~ msgstr ""
+#~ "Oddíl %s je používán. Úpravy oddílu, který je používán, mohou vést k "
+#~ "vážnému poškození dat."
+
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "Geometrie disku pro %s: 0.000-%.3f megabajtů\n"
+
+#~ msgid "Disk label type: %s\n"
+#~ msgstr "Typ jmenovky disku: %s\n"
+
+#~ msgid "Type "
+#~ msgstr "Typ "
+
+#~ msgid "Name "
+#~ msgstr "Název "
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ "Máte oddíl(y) Windows FAT, které nepoužívají LBA. Pokud váš BIOS "
+#~ "podporuje LBA, mÄ›li byste pÅ™ejít na LBA nastavením pÅ™epínaÄe LBA na vÅ¡ech "
+#~ "oddílech FAT. V opaÄném případÄ› se pÅ™ed zmÄ›nou velikosti oddílů FAT "
+#~ "pÅ™esvÄ›dÄete, že operaÄní systém a BIOS mají stejnou geometrii."
diff --git a/po/da.gmo b/po/da.gmo
new file mode 100644
index 0000000..b7dfa5a
--- /dev/null
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..b68b2a3
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,3331 @@
+# Danish messages for parted
+# Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Daniel Nylander <po@danielnylander.se>, 2009.
+# Keld Simonsen <keld@keldix.com>, 2001-2002,2011
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.0\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2011-06-03 23:23+0200\n"
+"Last-Translator: Keld Simonsen <keld@keldix.com>\n"
+"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "Ugyldigt argument %s for %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "flertydigt argument %s for %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Gyldige argumenter er:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "skrivefejl"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Ukendt systemfejl"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: flaget '-W %s' er flertydigt\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: flaget '%s' er flertydigt; muligheder:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: ukendt flag '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: flaget '%c%s' tillader intet argument\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: flaget '--%s' kræver et argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ugyldig flag -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaget kræver et argument -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "'"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Lykkedes"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ingen træffer"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ugyldigt regulært udtryk"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ugyldigt sorteringstegn"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ugyldigt tegnklassnavn"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Efterfølgende omvendt skråstreg"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Ugyldig bagudreference"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Ensomt [ eller [^"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Ensomt ( eller \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Ensomt \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Ugyldigt indhold i \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ugyldig intervalslut"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Slut på hukommelse"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ugyldigt foregående regulært udtryk"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "For tidlig slutning på regulært udtryk"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Regulært udtryk er for stort"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Ensomt ) eller \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Ingen tidligere regulære udtryk"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[jJyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Pakket af %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Pakket af %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/gpl."
+"html>.\n"
+"Dette er frit programmel: du må ændre og distribuere det\n"
+"Der gives INGEN GARANTIER, så vidt som lov tillader.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Skrevet af %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Skrevet af %s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Skrevet af %s, %s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s\n"
+"og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s, %s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s, %s, %s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s og %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Skrevet af %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s og andre.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Rapportér fejl til: %s\n"
+"Send synspunkter på oversættelsen til <dansk@dansk-gruppen.dk>\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Rapporteér fejl i %s til: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Hjemmeside for %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+"Generel hjælp for hvordan man bruger GNU-programmer: <http://www.gnu.org/"
+"gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "slut på hukommelse"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Diskafbildning"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "En fejl opstod da %s åbnedes: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Kunne ikke åbne %s for både læsning og skrivning (%s). %s åbnedes i "
+"læsetilstand."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s under positionering for at læse på %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s under læsning på %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Kan ikke skrive til %s eftersom den kun er åbnet i læsetilstand."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s under positionering for at skrive på %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s under skrivning på %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prøv '%s --help' for mere information.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Brug: %s [FLAG] [ENHED]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informér operativsystemet om ændringer i partitionstabel.\n"
+"\n"
+" -d, --dry-run test, men informér ikke operativsystemet\n"
+" -s, --summary udskriv et sammendrag af indholdet\n"
+" -h, --help vis denne hjælpetekst og afslut\n"
+" -v, --version vis versionsinformation og afslut\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Når ingen ENHED er sngivet, så undersøg alle partitioner.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapportér fejl til <%s>.\n"
+"Send synspunkter på oversættelsen til <dansk@dansk-gruppen.dk>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Kunne ikke åbne %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Kunne ikke undersøge lageret."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s prøver at synkronisere %s med disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Kunne ikke tage status på enheden %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Kunne ikke bestemme dm-typen på %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Kunne ikke bestemme sektorstørrelse for %s: %s.\n"
+"Bruger standardsektorstørrelsen (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Kunne ikke bestemme fysisk sektorstørrelse for %s.\n"
+"Bruger den logiske sektorstørrelse (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Kunne ikke bestemme størrelsen på %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Generisk IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Kunne ikke finde identitet for enhed %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Enheden %s har flere (%d) logiske sektorer per fysisk sektor.\n"
+"GNU Parted har EKSPERIMENTIEL understøttelse for dette for visse specielle "
+"kombinationer af disketikette/filsystem, fx GPT og ext2/3.\n"
+"Referér til webstedet for opdateret information."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "En fejl opstod ved initiering af SCSI-enheden %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Enheden %s har så lille at den slet ikke kan indeholde et filsystem eller en "
+"partitionstabel. Måske har du valgt den forkerte enhed?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Kunne ikke bestemme geometrien på fil/enhed %s. Du bør ikke bruge Parted "
+"hvis du ikke er RIGTIGT sikker på hvad du gør!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Generelt SD/MMC-lagringskort"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Ny enhed?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Styrekort for DAC960 RAID"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA-enhed"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA over Ethernet-enhed"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD-enhed"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries virtuel DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Styrekort for ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O-styrekort"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr ""
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen virtuel blokenhed"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio-blokenhed"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux programmeret RAID"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Understøttelse mangler for denne enhedstype"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "fejl ved fsync/close på %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, fuzzy, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "filslutning ved læsning af %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Fejl ved underretning af kernen om ændringer på partition %s - %s. Dette "
+"betyder at Linux ikke véd noget som helst om de ændringer du lavede på %s "
+"før du genopstarter - så du bør ikke montere den eller bruge den på nogen "
+"måde før du har genstartet."
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Kunne ikke bestemme størrelsen eller længden af %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partitioner %s på %s er blevet skrevet, men vi har ikke kunnet informere "
+"kerne om ændringen, nok fordi de er i brug. Som et resultat deraf er de "
+"gamle partitioner stadig i bruge Du bør genstate nu før du laver yderligere "
+"ændringer."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Kan ikke have slutningen før begyndelsen! (startsektor=%jd længde=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Forsøg på at skrive sektorerne %ld-%ld udenfor partitionen på %s"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "kontrollerer for dårlige blokke"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace har %d kald på stakken:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Påstand (%s) på %s:%d i funktionen %s() mislykkedes."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: ukendt diskmærke"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Denne libparted har ikke skriveunderstøttelse for %s. Måske var den oversat "
+"skrivebeskyttet."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partition %d er %s, men filsystemet er %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "start"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ukendt diskflag, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Filallokeringstabeller for %s understøtter ikke udvidede partitioner."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"Filallokeringstabeller for %s understøtter ikke logiske eller udvidede "
+"partitioner."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "For mange primære partitioner."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Kan ikke tilføje en logisk partition til %s, da der mangler en udvidet "
+"partition."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Kan ikke have mere end én udvidet partition på %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Kan ikke have logiske partitioner udenfor den udvidede partition."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Kan ikke have en logisk partition udenfor den udvidede partition på %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Kan ikke have en primær partition inden i en udvidet partition."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Kan ikke have en partition udenfor disken!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Kan ikke have overlappende partitioner."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "ledigt"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "udvidet"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logisk"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primær"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "start"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "rod"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swapplads"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "skjult"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Ja"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "start"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ukendt partitionsflag, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Information"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Advarsel"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Fejl"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Programfejl"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Ikke implementeret"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Reparér"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ja"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nej"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "O.k."
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Forsøg igen"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorér"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Annullér"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"En fejl er blevet fundet i GNU Parted. Se Parted's websted http://www.gnu."
+"org/software/parted/parted.html for mere information om hvad der kan være "
+"nyttigt for fejlrapportering! Send en fejlrapport med e-post til %s hvor du "
+"angiver versionsnumret (%s) og følgende meddelelse:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Understøttelse for at læse AIX disketiketter er ikke implementeret endnu."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Understøttelse for at skrive AIX disketiketter er ikke implementeret endnu."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Understøttelse for at tilføje AIX disketiketter er ikke implementeret endnu."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Understøttelse for at duplikere AIX disketiketter er ikke implementeret "
+"endnu."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Understøttelse for at sætte systemtype på partitioner i AIX disketiketter er "
+"ikke implementeret endnu."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Understøttelse for at sætte flag i AIX disketiketter er ikke implementeret "
+"endnu."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Parted kan ikke bruge HFS-filsystemer på diske med en sektorstørrelse "
+"forskellig fra %d byte."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Kunne ikke opfylde alle begrænsninger på partitionen."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Kan ikke tildele et partitionsnummer."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Kan ikke tildele en plads til bsd-disketikette."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Kan ikke tildele en plads til dasd-disketikette"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ugyldig partitionstabel på %s - fejlagtig signatur %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ugyldig partitionstabel - rekursiv partition på %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted kan ikke ændre størrelse på partitioner som håndteres af Windows "
+"Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Kan ikke tilføje flere partitioner."
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s har ingen udvidet partition (bindhoved-partition)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Tjeksummen er forkert, og det tyder på at partitionstabellen er ødelagt."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Kun primære partitioner kan være rod-partitioner."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Kun primære partitioner kan være swap-partitioner."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Kun logiske partitioner kan være en opstatsfil."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"mislykkedes med at sætte navn på dvh-partition %s:\n"
+"Kun logiske partitioner (opstartsfiler) har et navn."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "For mange primære partitioner"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "fejl ved åbning (open)"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "fejl ved søgning (seek)"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "fejl ved læsning (read)"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl()-fejl"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API-versionen stemmer ikke"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Disktypen understøttes ikke"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Diskformatet understøttes ikke"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disken er i brug"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Syntaksfejl i konfigurationsfilen"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Volumetiketten er skaded"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Et datasætnavn er skadet"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Hukommelsesallokeringen mislykkedes"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Enhedsverificeringen mislykkedes"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Den angivne enhed er ikke en gyldig DASD-enhed"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Fatal fejl"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ingen plads for volumetikette."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Ingen plads for partitionsinformation."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ugyldig VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Kunne ikke få fat på API-versionen."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Den aktuelle API-version '%d' passer ikke med API-versionen '%d' for dasd-"
+"drivrutinen!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Kunne ikke få fat på diskinformation."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Kunne ikke få fat på information om diskgeometri."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Kunne ikke få fat på information om blokstørrelse."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr ""
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formatet på GPT-partitionstabellen er version %x, hvilket er nyere end hvad "
+"Parted kan genkende. Rapportér gerne dette!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Det ser ud til at ikke al pladsen tilgængelig på %s er i brug; du kan rette "
+"GPT til at bruge al pladsen (%llu blokke mere), eller fortsæt med at bruge "
+"den aktuelle indstilling? "
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Sikkerhedskopien af GPT-tabellen er ikke i slutningen af disken, som den "
+"burde være. Dette kan betyde at et andet styresystem tror disken er mindre. "
+"Skal det rettes ved at flytte sikkerhedskopien til slutningen (og fjerne den "
+"gamle sikkerhedskopi)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Både den primære GPT-tabel og sikkerhedskopien er ødelagt. Prøv at lave en "
+"frisk tabel, og at genskabe partitioner med Parteds redningsfacilitet."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Sikkerhedskopien af GPT-tabellen er ødelagt, men den primære tabel ser ud "
+"til at være i orden, så den vil blive brugt."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Den primære GPT-tabel er ødelagt, men sikkerhedskopien ser ud til at være i "
+"orden, så den vil blive brugt."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "Uoverensstemmelse for CRC på primær partitionstabel"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Kan ikke tildele et partitionsnummer."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ugyldig signatur %x for en filallokeringstabel for Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Partitionstabellen mangler oplysninger om sig selv!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s er for lille for en filallokeringstabel for Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partition %d har en ugyldig signatur %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partition %d har en ugyldig længde, 0 byte!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Dataområdet begynder ikke ved partitionens begyndelse."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Partitionens opstartområde optager ikke hele partitionens plads."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Partitionens dataområde optager ikke hele partitionens plads."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Mærkelig blokstørrelse på enhedens beskriver: %d byte er ikke helt delbart "
+"med 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Enhedens beskriver påstår at den fysiske blokstørrelse er %d byte, men Linux "
+"påstår at den er %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Ingen gyldig partitionstabel kunne findes."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Konfliktende størrelsesdata i partitionstabellen! Post 1 påstår den er %d, "
+"mens post %d påstår den er %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Mærkeligt! Der er 2 poster i partitionstabellen!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"At ændre navnet på en rod- eller swappartition gør at Linux ikke kan "
+"genkende dem."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Kan ikke tilføje endnu en partition - partitionstabellen er for lille!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ugyldig partitionstabel på %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partitionen %d ligger ikke på hel cylindergrænse. Dette er stadig ikke "
+"understøttelset."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Kan ikke tilføje endnu en partition."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"partitionslængden på %jd sektorer overstiger maksimum for %s-partition-table-"
+"imposed på %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"sektornumret for begyndelsen, %jd overstiger maksimum for %s-partition-table-"
+"imposed maksimum på %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Fejlagtig kontrolsum på blok %llu af typen %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Fandt ikke rdb-blok. Dette bør aldrig ske."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : løkke opdaget ved blok %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : %s-listen ser ud til at være fejlagtig på blok %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Mislykkedes med at liste fejlagtige blokke."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Mislykkedes med at liste partitionsblokke."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Mislykkedes med at liste filsystemsblokke."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Mislykkedes med at liste opstartsblokke."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Mislykkedes med at skrive partitionsblok på %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "En beskadiget Sun disk-etikette blev fundet."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Disk CHS-geometrien (%d,%d,%d) som opgivet af styresystemet passer ikke med "
+"geometrien gemt på disk-etiketten (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Disk-etiketten beskriver en disk større end %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disken har %d cylindre, hvilket er større end maksimum som er 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Hele disk-partitionen er den eneste tilbageværende, der er tilgængelig. "
+"Generelt er det ikke en god idé at overskrive denne partition med en rigtig "
+"én. Solaris vil muligvis ikke kunne starte op uden den, og SILO "
+"(opstartsprogrammet for Sparc) sætter også pris på den."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun disk-etikette er fuld."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "åbning af enheden mislykkedes"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "søgning på enhed mislykkedes"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "skrivning til enheden mislykkedes"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "læsning fra enheden mislykkedes"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Kunne ikke læse volumetikette."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Kunne ikke skrive volumetikette."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Kunne ikke læse VTOC-etiketter."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Kunne ikke læse VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Kunne ikke læse VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Kunne ikke læse VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Kunne ikke læse VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Kunne ikke skrive VTOC-etiketter."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Kunne ikke skrive VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Kunne ikke skrive VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Kunne ikke skrive VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Kunne ikke skrive VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+#, fuzzy
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Kunne ikke skrive VTOC FMT1 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Ikke mere hukommelse."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Kan ikke få fat på enhedsstørrelse på specialenhed 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "'%s' indeholder en ugyldig syntaks for placeringer."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Den maksimale værdi for hoved er %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Den maksimale sektor-værdi er %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Placeringen %s er udenfor enheden %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ugyldigt nummer."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Mislykkedes med at allokere partitionsblok\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Mislykkedes med at allokere blok\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Kunne ikke læse startblok %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Kunne ikke læse rodblok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Mislykkedes med at allokere id liste-element\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Kunne ikke læse blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Fejlagtig kontrolsum på blok %llu af typen %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Kunne ikke skrive blok %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Mislykkedes med at allokere dikspecifik rdb-blok\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s :Fandt ikke rdb-blok, dette burde aldig kunne ske\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Mislykkedes med at læse partitionsblok %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted kompileredes fejlagtigt: FAT's startsektor skal være 512 byte. "
+"Understøttelsen for FAT vil være deaktiveret."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Filsystemet har en ugyldig signatur for filsystemer af typen FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Filsystemet har en ugyldig sektorstørrelse for et filsystem af typen FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Filsystemet har en ugyldig klyngestørrelse for et filsystem af typen FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Filsystemet har et ugyldigt antal reserverede sektorer for et filsystem af "
+"typen FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Filsystemet har et fejlagtigt antal filallokeringstabeller (FAT)."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT's startsektor mener at den logiske sektorstørrelse er 0. Mærkeligt."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT's startsektor mener at der mangler FAT-tabeller. Mærkeligt."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "FAT's startsektor mener at en klynge består af 0 sektorer. Mærkeligt."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Filsystemet er FAT12, som ikke understøttes."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Ukendt signatur '%10s' for gammel type Linux swapplads."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Ukendt signatur '%10s' for ny type Linux swapplads."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Ukendt Linux swsup signatur '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted kan ikke bruge HFS-filsystemer på diske med en sektorstørrelse "
+"forskellig fra %d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Filsystemets CHS-geometri er (%d, %d, %d), hvilket er ugyldigt. "
+"Partitionstabellens CHS-geometri er (%d, %d, %d). Hvis du vælger Ignorér så "
+"vil filsystemets CHS-geometri ikke blive ændret. Hvis du vælger Reparér så "
+"vil filsystemets CHS-geometri bilve sat til at matche partitionstabellens "
+"CHS-geometri."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Informationssektoren har forkert signatur (%x). Vælg annullér og indsend en "
+"fejlrapport. Hvis du er desperat så er det formodentlig sikkert at ignorere "
+"fejlen."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:244
+#, fuzzy, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partition %d er %s, men filsystemet er %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr ""
+
+#: libparted/fs/r/filesys.c:152
+#, fuzzy
+msgid "Could not detect file system."
+msgstr "Kunne ikke tage status på enheden %s - %s."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "Forventer en filsystemstype."
+
+#: libparted/fs/r/filesys.c:171
+#, fuzzy
+msgid "The file system is bigger than its volume!"
+msgstr "Disk-etiketten beskriver en disk større end %s."
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+#, fuzzy
+msgid "Data relocation has failed."
+msgstr "Hukommelsesallokeringen mislykkedes"
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "viser denne hjælpetekst"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "lister partitionslayout for alle blokenheder"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "viser udskriften på maskintolkningsbar måde"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "viser udskriften på maskintolkningsbar måde"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "spørger aldrig brugeren om alternativer"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "viser versionen"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "justering for nye partitioner"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMMER er partitionsnumret som Linux bruger. På filsystemer af type MS-DOS "
+"er de primære partitioner numrerede fra 1 til 4, og de logiske partitioner "
+"fra 5 og opad.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE er en af:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG er et af: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ENHED er et af: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "ønsket tilpasning: mindste eller bedste"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE er en af: primær, logisk, udvidet\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYPE er en af: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START og SLUT er steder på disken, såsom 4GB eller 10%. Negative værdier "
+"regnes fra slutningen på disken. For eksempel angiver -1s præcist den sidste "
+"sektor.\n"
+
+#: parted/parted.c:172
+#, fuzzy
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"START og SLUT er steder på disken, såsom 4GB eller 10%. Negative værdier "
+"regnes fra slutningen på disken. For eksempel angiver -1s præcist den sidste "
+"sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "TILSTAND er en af: på, af\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "ENHED er normalt /dev/hda eller /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAVN er et vilkårligt ord\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Ophavsret © 1998 - 2006 Free Software Foundation, Inc.\n"
+"Dette program er frit programmel, dækket af GNU General Public License.\n"
+"\n"
+"Dette program distribueres i håb om at det vil være nyttigt, men\n"
+"UDEN NOGEN SOM HELST GARANTI, endog uden underforstået garanti om\n"
+"SALGBARHED eller EGNETHED FOR NOGET SPECIELT FORMÅL. Se GNU General\n"
+"Public License for yderligere information.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tid tilbage %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Partitionen %s bruges. Du skal afmontere den inden du kan ændre den med "
+"Parted."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partitionen på %s er i brug."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Den eksisterende disketikette på %s vil blive ødelagt og alle data på denne "
+"disk vil gå tabt. Vil du fortsætte?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Type på ny disketikette?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Type på partitionen"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Navn på partitionen?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Type på filsystemet?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Start?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Slut?"
+
+#: parted/parted.c:794
+#, fuzzy, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Du bad om at oprette en partition fra %s til %s.\n"
+"Det nærmeste Parted kan klare er fra %s til %s.%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Er dette stadigvæk acceptabelt for dig?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "Den resulterende partition er ikke rigtigt justeret for bedste ydelse."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Filallokeringstabeller for %s understøtter ikke udvidede partitioner."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Nummer på partitionen?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Filallokeringstabeller for %s understøtter ikke udvidede partitioner."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Type på partitionen"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ugyldigt nummer."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Type på partitionen"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ugyldigt nummer."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS-geometri for cylinder,hoved,sektor: %d,%d,%d. Hver cylinder er %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sektorstørrelse (logisk/fysisk): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partitionstabel: %s\n"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Nummer"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Start"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Slut"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Størrelse"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Type"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Filsystem"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Name"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flag"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Fri plads"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"En %s %s partition blev fundet på %s -> %s. Ønsker du at tilføje den til "
+"partitionstabellen?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "leder efter filsystemer"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ny enhed?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "justeringstype (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d justeret\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d ikke justeret\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flag at invertere?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Ny tilstand?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Enhed?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TYPE N tjek partition N for TYPE(min|opt) "
+"justering"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "hjælp"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"hjælp [KOMMANDO] udskriver generel hjælp, eller "
+"speciel hjælp for KOMMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ETIKETTE-TYPE opret en ny disketikette "
+"(partitionstabel)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PARTITIONSTYPE [FS-TYPE] START SLUT lav en partition"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' laver en partition uden at oprette et nyt filsystem på partitionen. "
+"FS-TYPE kan angives for at sætte en passende identitet på partitionen.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMMER NAVN navngiv partition NUMMER som NAVN"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|NUMMER] vis partitionstabellen, "
+"tilgængelige enheder, ledig plads, alle partitioner som blev fundet, eller "
+"en specifik partition"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Uden argumenter udskriver 'skriv' hele partitionstabellen. Hvis et nummer på "
+"en partition er angivet vil mere detaljeret information om denne partition "
+"blive vist.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : vis alle aktive blokenheder\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : vis information om ledig upartitioneret plads på den aktuelle "
+"blokenhed\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr " list, all : vis partitionstabellerne på alle aktive blokenheder\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit afslut programmet"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue START SLUT red tabte partitioner nær ved START "
+"og SLUT"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr ""
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr ""
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "rm NUMMER slet partition NUMMER"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMMER slet partition NUMMER"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "vælg"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "vælg ENHED vælg enhed at redigere"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+#, fuzzy
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"sæt NUMMER FLAG TILSTAND ændr et flag på partition NUMMER"
+
+#: parted/parted.c:2425
+#, fuzzy
+msgid "disk_toggle"
+msgstr "skift"
+
+#: parted/parted.c:2428
+#, fuzzy
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"skift [NUMMER [FLAG]] væxla tilstandet for FLAG på "
+"partition NUMMER"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "sæt"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"sæt NUMMER FLAG TILSTAND ændr et flag på partition NUMMER"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "skift"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"skift [NUMMER [FLAG]] væxla tilstandet for FLAG på "
+"partition NUMMER"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "enhed ENHED sæt standardenheden til ENHED"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version vis versionsnummeret og "
+"ophavsretlig information om GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' viser information om version og ophavsret for denne kopi af GNU "
+"Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr "Usage: %s [-hlmsv] [-a<align>] [ENHED [KOMMANDO [PARAMETRE]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Ingen enhed fundet"
+
+#: parted/parted.c:2626
+#, fuzzy
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"ADVARSEL: Du er ikke superbruger. Vær opmærksom på rettighedsproblemer."
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Du bør geninstallere opstartsprogrammet inden du genopstarter. Læs sektion 4 "
+"i Parteds brugermanual for mere information."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Glem ikke at opdatere /etc/fstab, om nødvendigt.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Velkommen til GNU Parted! Skriv 'hjælp' for at vise en liste med "
+"kommandoer.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Brug: parted [FLAG]... [ENHED [KOMMANDO [PARAMETRE]...]...]\n"
+"Kør KOMMANDO med PARAMETRE på ENHED. Hvis ingen KOMMANDOER angives køres\n"
+"programmet i interaktiv tilstand.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Du har fundet en fejl i GNU Parted! Dette bør du gøre:\n"
+"\n"
+"Gå ikke i panik! Fejlen har antagligt ikke påvirket noget af dine data.\n"
+"Hjælp os med at rette denne fejl ved at gøre følgende:\n"
+"\n"
+"Kontrollér om fejlen allerede er rettet ved at tjekke\n"
+"den seneste version af GNU Parted som du kan finde på:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Vær sød at tjekke med denne version inden du rapporterer fejlen.\n"
+"\n"
+"Hvis det ikke er rettet til endnu, eller hvis du ikke véd hvordan du skal\n"
+"tjekke det, så besøg webbsiden for GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for yderligere information.\n"
+"\n"
+"Din rapport bør indeholde versionsnumret for denne udgave (%s)\n"
+"sammen med fejlmeddelelsen nedenfor samt udskriften fra\n"
+"\n"
+"\tparted ENHED unit co print unit s print\n"
+"\n"
+"og følgende kommandohistorik som du angav.\n"
+"Inkludér også yderligere information om din konfiguration som\n"
+"du mener er vigtigt at vide.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Kommandohistorik:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Fejl: SEGV_MAPERR (Adresse ikke mappet to objekt)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Fejl: SEGV_ACCERR (Ugyldige rettigheder for mappet object)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Fejl: Et generelt SIGSEGV-signal indtraf.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Fejl: FPE_INTDIV (heltal: division med nul)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Fejl: FPE_INTOVF (Integer: overløb)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTDIV (Float: division med nul)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTOVF (Float: overløb)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTUND (Float: underløb)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTRES (Float: unøjagtigt resultat)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTINV (Float: ugyldig operation)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Fejl: FPE_FLTSUB (Float: subskript uden for område)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Fejl: Et generelt SIGFPE-signal indtraf."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Fejl: ILL_ILLOPC (Ugyldig Opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Fejl: ILL_ILLOPN (Ugyldig Operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Fejl: ILL_ILLADR (Ugyldig adressingstilstand)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Fejl: ILL_ILLTRP (Ugyldig Fælde)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Fejl: ILL_PRVOPC (Privilligeret Opkode)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Fejl: ILL_PRVREG (Privilligeret Register)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Fejl: ILL_COPROC (Coprocessor fejl)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Fejl: ILL_BADSTK (Intern stakfejl)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Fejl: Et generelt SIGILL-signal indtraf."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "ugyldigt token: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Forventer et partitionsnummer."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partitionen findes ikke."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Forventer en filsystemstype."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Ukendt filsystemstype '%s'."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Forventer en disketikettetype."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Kan ikke tilføje flere partitioner."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Forventer eN partitionstype."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "på"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "fra"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "FLAG:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "KOMMANDOer:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Rapportér fejl til %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Bruger %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Denne kommando er meningsløs i ikke-interaktiv tilstand.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: flaget '--%s' tillader intet argument\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: ukendt flag '--%s'\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: flaget '-W %s' tillader intet argument\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: flaget '-W %s' kræver et argument\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Hjemmeside for %s: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "ugyldigt %s%s-argument '%s'"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "ugyldigt suffiks i %s%s-argumentet '%s'"
+
+#, c-format
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s-argumentet '%s' er for stort"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Partitionstabellen kan ikke genindlæses. Dette betyder at du skal starte "
+#~ "maskinen op igen inden du kan montere nogen ændrede partitioner. Du skal "
+#~ "også geninstallere opstartsprogrammet inden du genstarter (hvilket kan "
+#~ "indebære montering af ændrede partitioner). Det er umuligt at gøre begge "
+#~ "dele! Så du skal starte fra en redningsdiskette og geninstallere "
+#~ "opstartsprogrammet fra redningsdisketten. Læs kapitel 4 i Parteds "
+#~ "brugermanual for mere information."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Partitionstabellen på %s kan ikke genindlæses (%s). Det betyder at Hurd "
+#~ "ikke véd noget som helst om de ændringer du lavede. Du bør genstarte "
+#~ "maskinen inden du gør noget som helst med %s."
+
+#, c-format
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Mislykkedes med at tilføje partition %d (%s)"
+
+#, c-format
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted kunne ikke genindlæse partitionstabellen på %s (%s). Det betyder "
+#~ "at Linux ikke véd noget som helst om de ændringer du lavede. "
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Udvidede partitioner kan ikke være skjulte i etiketter af typen msdos."
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s indeholder GPT-signaturer, der tyder på at den har en GPT-tabel. "
+#~ "Imidlertid har den ikke en gyldig falsk msdos-partitionstabel som den "
+#~ "burde. Måske er den ødelagt - muligvis af et program der ikke forstår GPT-"
+#~ "partitionstabeller. Eller måske slettede du GPT-tabellen, og bruger nu en "
+#~ "msdos-partitionstabel. Er dette en GPT-tabel?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Startområdet begynder ikke ved partitionens begyndelse"
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Filsystemet har en logisk sektorstørrelse på %d. Det er kendt at GNU "
+#~ "Parted ikke fungerer godt med andre sektorstørrelser end 512 byte."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMMER : vis mere detaljeret information om denne specifikke "
+#~ "partition\n"
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644
index 0000000..f74789b
--- /dev/null
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..337ce31
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,3367 @@
+# German translation of parted.
+# Copyright (C) 1999, 2000, 2001, 2002, 2007, 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Martin von Löwis <martin@v.loewis.de>, 1999-2002.
+# Martin Ereth <martin.ereth@arcor.de>, 2007.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2021-2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted-3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-06 19:18+0200\n"
+"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
+"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 21.12.3\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ungültiges Argument %s für %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "Mehrdeutiges Argument %s für %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Zulässige Argumente sind:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "Schreibfehler"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Unbekannter Systemfehler"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: Die Option »%s%s« ist mehrdeutig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: Die Option »%s%s« ist mehrdeutig; Möglichkeiten:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: unbekannte Option »%s%s«\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: Die Option »%s%s« erlaubt kein Argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: Die Option »%s%s« benötigt ein Argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ungültige Option -- »%c«\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: Die Option benötigt ein Argument -- »%c«\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "»"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "«"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Erfolg"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Keine Ãœbereinstimmung"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ungültiger regulärer Ausdruck"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ungültiger Sortierbuchstabe"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ungültiger Klassenname des Buchstabens"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Angehängter umgekehrter Schrägstrich"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Ungültige Zurück-Referenz"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Nicht gefunden: [, [^, [:, [., oder [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Nicht gefunden: ( oder \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Nicht gefunden: \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Ungültiger Inhalt in \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ungültiges Ende des Bereichs"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Speicher erschöpft"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Vorausgehender ungültiger regulärer Ausdruck"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Verfrühtes Ende des regülären Ausdrucks"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Regulärer Ausdruck zu groß"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Nicht gefunden: ) oder \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Kein regulärer Ausdruck vorher"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[jJ]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Gepackt von %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Gepackt von %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Lizenz GPLv3+: GNU GPL Version 3 oder neuer <%s>\n"
+"Dies ist freie Software: Es ist Ihnen freigestellt, sie zu verändern und zu "
+"verbreiten.\n"
+"Es gibt in dem gesetzlichen gegebenen Umfang KEINE GARANTIE.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Geschrieben von %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Geschrieben von %s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Geschrieben von %s, %s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr "Geschrieben von %s, %s, %s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s, %s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s, %s, %s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s und %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Geschrieben von %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s und anderen.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Melden Sie Fehler an: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Melden Sie %s-Fehler an: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Webseite von %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Allgemeine Hilfe zu GNU-Software: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "Speicher erschöpft"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Speicherabbild"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Fehler beim Öffnen von %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%s kann nicht zum Schreiben geöffnet werden (%s). %s wurde nur lesbar "
+"geöffnet."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s, während %s zum Lesen positioniert wurde"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s, während von %s gelesen wurde"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr ""
+"Auf %s kann nicht geschrieben werden, weil es nur-lesend geöffnet wurde."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s, während %s zum Schreiben positioniert wurde"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s, während auf %s geschrieben wurde"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Rufen Sie »%s --help« auf, um mehr Informationen zu erhalten.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Aufruf: %s [OPTION] [GERÄT] …\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Dem Betriebssystem Änderungen an der Partitionstabelle mitteilen.\n"
+"\n"
+" -d, --dry-run das Betriebssystem nicht informieren\n"
+" -s, --summary eine Zusammenfassung der Inhalte ausgeben\n"
+" -h, --help diese Hilfe anzeigen und beenden\n"
+" -v, --version Versionsangaben ausgeben und beenden\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Ohne GERÄT, alle Partitionen testen.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Fehler an <%s> berichten.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%s kann nicht geöffnet werden."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Der Speicher konnte nicht untersucht werden."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"WARNUNG: Der Kernel hat das Neueinlesen der Partitionstabelle auf %s "
+"verweigert (%s). Daher könnten nicht alle Ihrer Änderungen nach einem "
+"Neustart wirksam sein."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Warnung: %s kann nicht geöffnet werden (%s). Daher könnten nicht alle Ihrer "
+"Änderungen nach einem Neustart wirksam sein."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Warnung: Umsetzer auf %s konnte nicht verworfen werden (%s). Daher könnten "
+"nicht alle Ihrer Änderungen nach einem Neustart wirksam sein."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s beim Versuch, %s auf die Platte zu speichern (sync)"
+
+# cformat removed for testing
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Aufruf von stat für Gerät %s schlug fehl - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "dm-Typ von %s kann nicht festgestellt werden."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Die Sektorgröße von %s konnte nicht ermittelt werden: %s.\n"
+"Es wird die Standardsektorgröße verwendet (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Die physische Sektorgröße von %s konnte nicht ermittelt werden.\n"
+"Es wird die logische Sektorgröße verwendet (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Die Größe von %s kann nicht festgestellt werden (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Standard IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Die Identität von Gerät %s konnte nicht ermittelt werden - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Das Gerät %s hat mehrere (%d) logische Sektoren pro physischem Sektor.\n"
+"GNU Parted unterstützt dies EXPERIMENTELL für einige spezielle "
+"Plattenkennungen/Dateisystem-Kombinationen, z.B.: GPT und ext2/3.\n"
+"Bitte besuchen Sie die Webseite für aktuelle Informationen."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Fehler in der Initialisierung von SCSI-Gerät %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Das Gerät %s ist derart klein, dass es wahrscheinlich kein Dateisystem oder "
+"eine Partitionstabelle speichern kann. Vielleicht haben Sie das falsche "
+"Gerät ausgewählt?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Geometrie von Datei/Gerät %s konnte nicht ermittelt werden. Sie sollten "
+"Parted nicht verwenden, wenn Sie nicht WIRKLICH wissen, was Sie tun!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Generisch SD/MMC-Speicherkarte"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe-Gerät"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID-Controller"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA-Gerät"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA over Ethernet-Gerät"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD-Laufwerk"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM-Gerät"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID-Controller"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I20-Controller"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Loopback-Gerät"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen Virtuelles Blockorientiertes Gerät"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio Blockorientiertes Gerät"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux Software-RAID-Verbund"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM-Gerät"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Nicht unterstützter Gerätetyp"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Fehler beim Abgleich oder Schließen von %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sDateiende beim Lesen von %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Fehler beim Informieren des Kernels über Änderungen an der Partition %s -- "
+"%s. Das bedeutet, dass Linux Ihre Änderungen an %s vor einem Neustart nicht "
+"sehen wird. Sie sollten daher die Partition nicht einhängen oder sonst "
+"irgendwie benutzen, bis Sie den Rechner neu gestartet haben."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Beginn und Länge von %s können nicht festgestellt werden."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Der/die Partition(en) %s auf %s wurden geschrieben, aber es war nicht "
+"möglich, den Kernel über die Änderungen zu informieren, weil sie "
+"wahrscheinlich in Benutzung sind. Daher werden die alten Partitionen noch "
+"benutzt. Sie sollten nun den Rechner neu starten, bevor Sie weitere "
+"Änderungen vornehmen."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Das Ende kommt nicht vor dem Anfang! (Startsektor=%jd Länge=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"Versuch, die Sektoren %ld-%ld außerhalb der Partition auf %s zu schreiben."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "Nach defekten Blöcken wird gesucht"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Die Ablaufverfolgung hat %d Aufrufe auf dem Stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Aussage (%s) bei %s:%d in der Funktion %s() fehlgeschlagen."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: unbekannte Partitionstabelle"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Der libparted fehlt die Schreibunterstützung für %s. Vielleicht wurde sie "
+"nur lesbar kompiliert."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Die Partition %d hat %s, aber das Dateisystem hat %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Unbekanntes Disk-Flag, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s-Disk-Labels unterstützen keine erweiterten Partitionen."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%s-Disk-Labels unterstützen keine logischen oder erweiterten Partitionen."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Zu viele primäre Partitionen."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Zu %s kann keine logische Partition hinzugefügt werden, da es keine "
+"erweiterte Partition gibt."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Auf %s kann es nicht mehr als eine erweiterte Partition geben."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+"Logische Partitionen können nicht außerhalb der erweiterten Partition sein."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Außerhalb der erweiterten Partition auf %s kann keine logische Partition "
+"existieren."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Es kann keine primäre Partition in einer erweiterten Partition sein."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Partitionen außerhalb der Festplatte sind nicht möglich!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Es können keine überlappenden Partitionen existieren."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "Metadaten"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "frei"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "erweitert"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logisch"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primär"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "versteckt"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Unbekanntes Partitionsflag %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Information"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Warnung"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Fehler"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fataler Fehler"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Keine Implementierung"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Fix"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ja"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nein"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Wiederholen"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Es wurde ein Bug in GNU parted entdeckt. Bitte lesen Sie die Webseite http://"
+"www.gnu.org/software/parted/parted.html für Informationen, was wichtig für "
+"einen Fehlerbericht sein könnte. Bitte senden Sie einen Fehlerbericht an %s "
+"unter Angabe der Version (%s) und der folgenden Meldung: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Unterstützung für das Lesen von AIX-Partitionstabellen ist noch nicht "
+"implementiert."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Unterstützung für das Schreiben von AIX-Partitionstabellen ist noch nicht "
+"implementiert."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Unterstützung für das Hinzufügen von Partitionen zu AIX-Partitionstabellen "
+"ist noch nicht implementiert."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Unterstützung für das Duplizieren von Partitionen in AIX-Partitionstabellen "
+"ist noch nicht implementiert."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Unterstützung für das Setzen des Systemtyps von Partitionen in AIX-"
+"Partitionstabellen ist noch nicht implementiert."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Unterstützung für das Setzen von Flags in AIX-Partitionstabellen ist noch "
+"nicht implementiert."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Atari-Partitionstabellen auf Festplatten mit einer Sektorgröße ungleich %d "
+"Bytes können nicht verwendet werden."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Atari-Partitionstabellen auf Festplatten mit mehr als %d Sektoren können "
+"nicht verwendet werden."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Es wurden zu viele Atari-Partitionen erkannt. Möglicherweise ist eine "
+"Schleife in der XGM-Linkliste. Abbruch."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Keine Datenpartition gefunden im ARS bei Sektor %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Der Eintrag des nächsten logischen ARS ist nicht vom Typ XGM im ARS bei "
+"Sektor %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Die Partitionstabelle auf dieser Festplatte (%s) scheint keine Atari-"
+"Partitionstabelle zu sein, oder sie ist beschädigt."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"Kein Platz bei Sektor %lli zum Speichern des ARS der logischen Partition %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Kein Platz bei Sektor %lli zum Speichern des ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Die in der Partitionstabelle gespeicherte Sektorenanzahl entspricht nicht "
+"der Größe Ihres Gerätes. Wollen Sie die Partitionstabelle korrigieren?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Kein Platz bei Sektor %lli zum Speichern des BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Nach dem Füllen der Haupt-AHDI-Tabelle waren Partitionen übrig."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Die Haupt-AHDI-Tabelle wurde mit allen Partitionen gefüllt, aber die ICD-"
+"Tabelle ist nicht leer, so dass weitere Partitionen unbekannter Größe und "
+"Position von ICD-kompatibler Software erkannt werden. Wollen Sie die ICD-"
+"Tabelle ungültig machen?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ICD-Einträge können erweiterte oder logische Partitionen enthalten."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Nach dem Füllen der Tabellen waren Partitionen übrig."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Sie können eine erweiterte XGM-Partition nicht im ICD-Modus verwenden (mehr "
+"als %d primäre Partitionen; falls XGM die erste Partition ist, zählt sie "
+"doppelt)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Es können nicht alle Anforderungen an die Partition erfüllt werden."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Sie können nicht mehr als %d primäre Partition (ICD-Modus) verwenden, wenn "
+"Sie eine erweiterte XGM-Partition verwenden. Falls XGM die erste Partition "
+"ist, zählt sie doppelt."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Die Partitionsnummer konnte nicht zugewiesen werden."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "BSD-Disklabel-Zeilen können nicht belegt werden."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+"Die Partitionstabelle des DASD-LDL-Gerätes kann nicht geändert werden.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "dasd-Disklabel-Zeilen können nicht belegt werden"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ungültige Partitionstabelle auf %s -- falsche Signatur %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ungültige Partitionstabelle - Rekursive Partition auf %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted kann von Windows Dynamic Disk verwaltete Partitionen nicht in der "
+"Größe verändern."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "Es können keine weiteren Partitionen erzeugt werden."
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s hat keine erweiterte Partition (volume header partition)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Die Prüfsumme ist falsch. Das weist auf eine defekte Partitionstabelle hin."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Nur primäre Partitionen können Root-Partitionen sein."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Nur primäre Partitionen können Swap-Partitionen sein."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Nur logische Partitionen können Boot-Dateien sein."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"dvh-Partitionsname kann nicht auf %s gesetzt werden:\n"
+"Nur logische Partitionen (Boot-Dateien) haben einen Namen."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Zu viele primäre Partitionen"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "Fehler beim Öffnen"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "Fehler beim Suchen"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "Lesefehler"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() Fehler"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Versionsunterschied der API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nicht unterstützter Festplattentyp"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nicht unterstütztes Festplattenfomat"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Festplatte ist in Verwendung"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Syntaxfehler in der Konfigurationsdatei"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Die Volumenbezeichnung ist beschädigt"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ein Datensatzname ist beschädigt"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Speicherzuweisung ist fehlgeschlagen"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Geräteprüfung fehlgeschlagen"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Das angegebene Gerät ist kein gültiges DASD-Gerät"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER wurde auf dem Gerät nicht gefunden"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Fataler Fehler"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Kein Platz für eine Volumenbezeichnung."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Kein Platz für Partitionsinformationen."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ungültiges VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Die API-Version kann nicht abgefragt werden."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Die aktuelle API-Version »%d« stimmt nicht mit der dasd-Treiber-API »%d« "
+"überein!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Die Festplattengröße konnte nicht ermittelt werden."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Die Festplattengeometrie konnte nicht gelesen werden."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Die Blöckgröße konnte nicht gelesen werden."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+"Die Festplattengeometrie entspricht nicht einem DASD-Gerät des Typs 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "Gerät ist für GPT zu klein"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Das Format der GPT-Partitionstabelle (%x) ist neuer als das von Parted "
+"verstandene. Bitte melden Sie das."
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Nicht der gesamte verfügbare Platz von %s scheint belegt zu sein. Sie können "
+"die GPT reparieren, damit der gesamte Platz verwendet wird (zusätzlich %llu "
+"Blöcke) oder Sie können mit den aktuellen Einstellungen fortfahren."
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Die Sicherung der GPT-Tabelle ist nicht am Ende der Festplatte, wo sie "
+"normalerweise sein sollte. Soll das durch Verschieben der Sicherung zum Ende "
+"(und löschen der alten Sicherung) korrigiert werden?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Sowohl die primäre als auch die Backup-GPT-Tabelle sind defekt. Versuchen "
+"Sie, eine neue Tabelle anzulegen und die Partititionen mit Hilfe von "
+"Parted's Rettungsmöglichkeiten zu restaurieren."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Die gesicherte GPT-Tabelle ist defekt, aber die primäre scheint in Ordnung "
+"zu sein, daher wird diese verwendet."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Die primäre GPT-Tabelle ist defekt, aber die Sicherung scheint in Ordnung zu "
+"sein. Daher wird die Sicherung verwendet."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "Array der primären Partitionstabelle und CRC stimmen nicht überein"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "Der Partitionsname konnte nicht übersetzt werden."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ungültige Signatur %x für Mac-Partitionstabellen."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Die Partitionskarte hat keinen Partitionskarteneintrag!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s ist zu klein für eine Mac-Partitionstabelle!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partition %d hat eine ungültige Signatur %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partition %d hat eine ungültige Länge von 0 Bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Die Datenregion beginnt nicht am Anfang der Partition."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Die Bootregion der Partition belegt nicht die ganze Partition."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Die Datenregion der Partition belegt nicht die ganze Partition."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Seltsame Blockgröße auf dem Gerätedeskriptor: %d Bytes ist nicht durch 512 "
+"teilbar."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Der Treiberdeskriptor sagt, dass die physische Blockgröße %d Bytes ist. "
+"Linux sagt, dass es %d Bytes sind."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Keine gültige Partitionskarte gefunden."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Widersprüchliche Größen in den Partitionskarteneinträgen! Eintrag 1 sagt, "
+"dass es %d Bytes sind, Eintrag %d sagt aber, dass es %d Bytes sind!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Seltsam! Es gibt 2 Partitionskarteneinträge!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Eine Änderung des Namens der Root- oder Swap-Partition verhindert, dass "
+"Linux sie als solche erkennt."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Eine weitere Partition kann nicht hinzugefügt werden -- die Partitionskarte "
+"ist zu klein!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ungültige Partitionstabelle auf %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partition %d ist nicht an den Zylindergrenzen ausgerichtet. Dies wird immer "
+"noch nicht unterstützt."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Es kann keine weitere Partition hinzugefügt werden."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"Partitionslänge von %jd Sektoren übersteigt das %s-partition-table-imposed "
+"Maximum von %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"Startsektornummer %jd übersteigt das %s-partition-table-imposed Maximum von "
+"%jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Falsche Prüfsumme bei Block %llu vom Typ %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+"%s : rdb-Block konnte nicht gefunden werden. Das sollte niemals passieren."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Schleife bei Block %d gefunden."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Die %s-Liste scheint am Block %s fehlerhaft zu sein."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Die fehlerhaften Blöcke konnten nicht angezeigt werden."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Die Partitionsblöcke konnten nicht angezeigt werden."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Die Dateisystemblöcke konnten nicht angezeigt werden."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Die Bootblöcke konnten nicht angezeigt werden."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Der Partitionsblock konnte an %d nicht geschrieben werden."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Defektes Sun-Disklabel gefunden."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Die vom System gemeldete CHS-Geometrie (%d,%d,%d) der Festplatte stimmt "
+"nicht mit der gespeicherten Geometrie in der Partitionstabelle (%d,%d,%d) "
+"überein."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Das Disklabel beschreibt eine Festplatte größer als %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+"Die Festplatte hat %d Zylinder, was größer ist als das Maximum von 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Die Whole-Disk-Partition ist die einzig verbleibende. Es ist normalerweise "
+"keine gute Idee, diese Partition mit einer echten zu überschreiben. Solaris "
+"bootet ohne vielleicht nicht mehr, und SILO (der Sparc-Bootlader) schätzt "
+"sie auch."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Das Sun-Disklabel ist voll."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "Fehler beim Öffnen des Geräts"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "Fehler beim Suchen auf dem Gerät"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "Fehler beim Schreiben auf das Gerät"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "Fehler beim Lesen vom Gerät"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Volumenbezeichnung kann nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Volumenbezeichnung kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "VTOC-Bezeichnung kann nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB konnte nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB konnte nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB konnte nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB konnte nicht gelesen werden."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "VTOC-Bezeichnung kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB kann nicht geschrieben werden."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT9 DSCB kann nicht geschrieben werden."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Speicher erschöpft."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"Die Größe der speziellen Einheit »COMPACT« konnte nicht ermittelt werden."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "»%s« hat eine ungültige Syntax für Orte."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Die maximale Zahl der Köpfe ist %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Die maximale Zahl der Sektoren ist %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Der Ort %s ist außerhalb des Geräts %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ungültige Nummer."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Verwenden Sie eine kleinere Einheit anstelle eines Wertes < 1."
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Der Partitionsblock konnte nicht belegt werden\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Der Block konnte nicht belegt werden\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Der Boot-Block %llu konnte nicht gelesen werden\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Der Root-Block %llu konnte nicht gelesen werden\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Das ID-Listen-Element konnte nicht belegt werden\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s: Der Block %llu konnte nicht gelesen werden\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Falsche Prüfsumme bei Block %llu vom Typ %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Block %d konnte nicht geschrieben werden\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+"%s : Der Festplatten-spezifische rdb-Block konnte nicht belegt werden\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+"%s : rdb-Block konnte nicht gefunden werden. Das sollte niemals passieren\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Der Partitionsblock %llu kann nicht gelesen werden\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted ist fehlerhaft kompiliert: Der FAT-Bootsektor sollte 512 Bytes "
+"sein. FAT-Unterstützung wird deaktiviert."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Das Dateisystem hat eine ungültige Signatur für ein FAT-Dateisystem."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Das Dateisystem hat eine ungültige Sektorgröße für ein FAT-Dateisystem."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Das Dateisystem hat eine ungültige Clustergröße für ein FAT-Dateisystem."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Das Dateisystem hat eine ungültige Zahl von reservierten Sektoren für ein "
+"FAT-Dateisystem."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Das Dateisystem hat eine ungültige Anzahl von FATs."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Die CHS-Geometrie des Dateisystems ist (%d, %d, %d), dies ist unzulässig. "
+"Die CHS-Geometrie der Partitionstabelle ist (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Der FAT-Bootsektor sagt, die logische Sektorgröße sei 0. Das ist seltsam."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Der FAT-Bootsektor sagt, es gäbe keine FAT-Tabellen. Das ist seltsam."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Der FAT-Bootsektor sagt, Cluster seien 0 Sektoren groß. Das ist seltsam."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Das Dateisystem ist FAT12, welches nicht unterstützt wird."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Unbekannte veraltete Linux-Swap-Signatur »%10s«."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Unbekannte neue Linux-Swap-Signatur »%10s«."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Unbekannte swsusp-Linux-Swap-Signatur »%9s«."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted kann das HFS-Dateisystem nicht auf Festplatten mit einer Sektorgröße "
+"ungleich %d Bytes verwenden."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Die CHS-Geometrie des Dateisystems ist ungültig (%d, %d, %d). Die CHS-"
+"Geometrie der Partitionstabelle ist (%d, %d, %d). Wenn Sie Abbrechen "
+"auswählen, wird die CHS-Geometrie des Dateisystem nicht verändert. Wenn Sie "
+"Reparieren auswählen, wird die CHS-Geometrie des Dateisystems so gesetzt, "
+"dass sie mit der CHS-Geometrie der Partitionstabelle übereinstimmt."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Der Informationssektor hat die falsche Signatur (%x). Wählen Sie jetzt "
+"Abbrechen und senden Sie einen Fehlerbericht. Wenn es sein muss, können Sie "
+"das auch ignorieren."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Sie benötigen %s freien Platz, um diese Partition auf diese Größe zu "
+"verkleinern. Momentan ist nur %s frei."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Clusteranfang delta = %d ist kein Vielfaches der Clustergröße %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Falscher Verzeichniseintrag für %s: Erster Cluster ist am Ende des "
+"Dateimarkers."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Schlechte FAT: unbeendete Kette für %s. Sie sollten dosfsck oder Scandisk "
+"ausführen."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Schlechte FAT: Cluster %d ist außerhalb des Dateisystems in Kette %s. Sie "
+"sollten dosfsck oder Scandisk ausführen."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Schlechte FAT: Cluster %d ist querverbunden für %s. Sie sollten dosfsck oder "
+"Scandisk ausführen."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s ist %dk, hat aber %d Cluster (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Die Partition ist für ein %s-Dateisystem zu groß/klein."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Die FATs stimmen nicht überein. Wenn Sie nicht wissen, was das bedeutet, "
+"brechen Sie ab, rufen Scandisk für das Dateisystem auf und versuchen es noch "
+"einmal."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Es gibt keine möglichen Konfigurationen für diesen FAT-Typ."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Das Dateisystem hat nicht die Größe, die Windows mag. Die Clustergröße ist "
+"%dk (%dk erwartet); die Clusterzahl ist %d (%d erwartet); die FAT-Größe ist "
+"%d Sektoren (%d erwartet)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Dateisystem meldet freien Platz als %d Cluster, nicht %d Cluster."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Es gibt im Root-Verzeichnis nicht genügend Platz für alle Dateien. Entweder "
+"abbrechen, oder ignorieren und die Dateien verlieren."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Fehler beim Schreiben in das Root-Verzeichnis."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Wenn Sie Ihr Dateisystem als FAT16 belassen, werden Sie keine Probleme haben."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Wenn Sie in FAT16 konvertieren und MS-Windows auf dieser Partition "
+"installiert ist, müssen Sie den MS-Windows-Bootlader neu installieren. Wenn "
+"Sie das tun wollen, sollten Sie das Handbuch von Parted lesen (oder das "
+"Handbuch Ihrer Distribution)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Wenn Sie Ihr Dateisystem als FAT32 belassen, werden Sie keine neuen Probleme "
+"herbeiführen."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Wenn Sie zu FAT32 konvertieren und MS-Windows auf dieser Partition "
+"installiert ist, müssen Sie den MS-Windows-Bootlader neu installieren. Wenn "
+"Sie das tun wollen, sollten Sie das Handbuch von Parted lesen (oder das "
+"Ihrer Distribution). Außerdem kann nach einer Konvertierung zu FAT32 das "
+"Dateisystem nicht mehr von MS-DOS, MS-Windows 95a und MS-Windows NT gelesen "
+"werden."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Wollen Sie FAT32 verwenden?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Das Dateisystem kann nur durch Konvertierung zu FAT16 in der Größe verändert "
+"werden."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Das Dateisystem kann nur durch Konvertierung zu FAT32 in der Größe verändert "
+"werden."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted kann diese Partition nicht auf diese Größe verändern. Wir "
+"arbeiten daran!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d Medium %x stimmt nicht mit dem Bootsektor von Medium %x überein. Sie "
+"sollten Scandisk ausführen."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: Cluster %ld ist außerhalb des Dateisystems"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: Cluster %ld ist außerhalb des Dateisystems"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: Keine freien Cluster"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Dateisystem wurde nicht erkannt."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "Größenänderung von %s-Dateisystemen ist noch nicht implementiert."
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Das Dateisystem ist größer als sein Datenträger!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Das Dateisystem enthält Fehler."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Fehlerhafte Blöcke konnten nicht gelesen werden."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Es wurde versucht, einen erweiterten Anfang bei Block 0x%X zu registrieren, "
+"aber es existiert bereits ein anderer an dieser Stelle. Sie sollten das "
+"Dateisystem überprüfen!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Es wurde versucht, einen erweiterten Block von 0x%X nach 0x%X zu "
+"verschieben, aber ein anderer existiert bereits an dieser Stelle. Das sollte "
+"nicht passieren!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Der erweiterte Cache der HFS-Datei mit der CNID %X konnte nicht aktualisiert "
+"werden."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+"Die HFS-Datei mit der CNID %X kann nicht hinter dem Ende gelesen werden."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+"Der Sektor %lli der HFS-Datei mit der CNID %X konnte nicht gefunden werden."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+"Die HFS-Datei mit der CNID %X kann nicht hinter dem Ende geschrieben werden."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Der erweiterte Cache der HFS+-Datei mit der CNID %X konnte nicht "
+"aktualisiert werden."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Die HFS+-Datei mit der CNID %X kann nicht hinter dem Ende gelesen werden."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+"Der Sektor %lli der HFS+-Datei mit der CNID %X konnte nicht gefunden werden."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Die HFS+-Datei mit der CNID %X kann nicht hinter dem Ende geschrieben werden."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Entschuldigung, HFS kann so noch nicht in der Größe verändert werden."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "verkleinern"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Die Umlagerung der Daten ist fehlgeschlagen."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"Die Umlagerung der Daten hat einige Daten am Ende des Datenträgers "
+"hinterlassen."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "Schreiben des HFS Master Directory Block"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Beim Öffnen wurde keine gültige HFS[+X]-Signatur gefunden."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Die HFS+-Version %d ist nicht unterstützt."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Die HFSX-Version %d ist nicht unterstützt."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"Die Umlagerung der Daten hat einige Daten am Ende des Datenträgers "
+"hinterlassen."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Fehler beim Schreiben der Belegungsdatei."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Fehler beim Schreiben des Kompatibilitätsteils der Belegungsdatei."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "Schreiben des HFS+-Datenträger-Kopfes"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"Beim Suchen nach der notwendigen Datei, die fehlerhafte Blöcke enthält, trat "
+"ein Fehler auf."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Es scheint, als wäre im HFS-Wrapper ein Fehler: die Datei der fehlerhaften "
+"Blöcke enthält nicht den eingebetteten HFS+-Datenträger."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Entschuldigung, HFS+ kann so nicht in der Größe verändert werden."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "Verkleinern des eingebetteten HFS+-Datenträgers"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Verkleinern des HFS+-Datenträgers ist fehlgeschlagen."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "Verkleinern des HFS-Wrappers"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Aktualisieren des HFS-Wrappers ist fehlgeschlagen."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Das ist keine echte Prüfung von %s. Es werden spezielle Dateien einer tiefen "
+"Ebene zu Fehlerbeseitigungszwecken extrahiert."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Prüfsummenfehler im Kopf der Liste der schlechten Blöcke."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ungültige Größe eines Vorgangsblocks, während das Journal überprüft wurde "
+"(%i Bytes)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Ein Journal außerhalb des Datenträgers ist nicht unterstützt. Versuchen Sie, "
+"das Journal zu deaktivieren und führen Sie Parted dann erneut aus."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Journal-Abstand oder Größe ist kein Vielfaches der Sektorgröße."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Falsche Magic-Zahl im Kopf des Journals."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Versatz der Größe des Journals zwischen Infoblock und dem Kopf des Journals."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Einige Einträge im Kopf sind kein Vielfaches der Clustergröße."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Die im Journal gespeicherte Sektorgröße ist ungleich 512 Bytes. Parted "
+"unterstützt nur Sektoren mit einer Länge von 512 Bytes."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Falsche Prüfsumme des Journals."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Das Journal ist nicht leer. Parted muss die Vorgänge überprüfen, bevor das "
+"Dateisystem geöffnet werden kann. Das wird das Dateisystem verändern."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Der Kopf des Datenträgers oder der Block des Hauptverzeichnisses hat sich "
+"während des Überprüfens der Vorgänge geändert. Sie sollten Parted neu "
+"starten."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Eine Erweiterung wurde nicht umgelagert."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Ein Verweis einer Erweiterung kam von einem Ort, von dem er nicht kommen "
+"sollte. Sie sollten das Dateisystem überprüfen lassen!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Dieser HFS-Datenträger hat keine Katalog-Datei. Das ist sehr unüblich!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Dieser HFS-Datenträger hat keine Überlaufdatei für Erweiterungen. Das ist "
+"schon ungewöhnlich!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Die Ãœberlaufdatei der Erweiterungen sollte nicht seine eigenen Erweiterungen "
+"enthalten! Sie sollten das Dateisystem überprüfen lassen."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Das Dateisystem konnte nicht zwischengespeichert werden."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Die Liste der schlechten Blöcke konnte nicht geladen werden."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Während der Umlagerung der Erweiterungen trat ein Fehler auf."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Dieser HFS+-Datenträger hat keine Katalog-Datei. Das ist sehr ungewöhnlich!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Dieser HFS-Datenträger hat keine Überlaufdatei für Erweiterungen. Das ist "
+"schon ungewöhnlich!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "zeigt diese Hilfe an"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "zeigt das Partitionslayout aller blockorientierten Geräte"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "zeigt maschinenlesbare Ausgaben an"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "zeigt die Ausgabe im JSON-Format an"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "bittet nie um Eingriff des Benutzers"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "im Skriptmodus korrigieren anstatt abbrechen, wenn gefragt wird"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "zeigt die Version"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "Ausrichtung für neue Partitionen"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMMER ist die von Linux verwendete Partitionsnummer. Bei MS-DOS-"
+"Partitionstabellen ist für Primärpartitionen die Nummer zwischen 1 und 4, "
+"für logische Partitionen größer 5.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYP ist eines von: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG ist eines von: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "EINHEIT ist eines von: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "Gewünschte Ausrichtung: minimum oder optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYP ist eines von: primär, logisch, erweitert\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYP ist eines von: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ANFANG und ENDE sind Stellen auf der Festplatte, z.B. 4GB oder 10%. Negative "
+"Werte zählen vom Ende der Festplatte aus. Beispielsweise steht -1s für genau "
+"den letzen Sektor.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"ENDE ist eine Stelle auf der Festplatte, z.B. 4GB oder 10%. Negative Werte "
+"zählen vom Ende der Festplatte aus. Beispielsweise steht -1s für genau den "
+"letzten Sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STATUS ist eines von: an, aus\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "GERÄT ist normalerweise /dev/hda oder /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAME ist ein beliebiges Wort Ihrer Wahl\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Dieses Programm ist freie Software unter den Regeln der GNU General Public "
+"License.\n"
+"\n"
+"Dieses Programm wird in der Hoffnung verteilt, daß es nützlich ist,\n"
+"jedoch OHNE JEGLICHE GARANTIE; sogar ohne die implizite Garantie der\n"
+"MARKTFÄHIGKEIT oder der ERFÜLLUNG EINES BESTIMMTEN ZWECKES. In der\n"
+"\"GNU General Public License\" können weitere Einzelheiten nachgelesen\n"
+"werden.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(Restzeit %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Die Partition %s wird gerade verwendet. Sind Sie sicher, dass Sie fortsetzen "
+"wollen?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partition(en) auf %s werden verwendet."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Die bestehende Partitionstabelle und alle Daten auf %s werden gelöscht. "
+"Wollen Sie fortfahren?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Neuer Disk-Label-Typ?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Partitionsname?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Dateisystemtyp?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Anfang?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Ende?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Sie wollen eine Partition von %s bis %s (Sektoren %llu..%llu).\n"
+"Das Beste, was Parted bieten kann, ist von %s nach %s (Sektoren %llu..%llu)."
+"%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Ist dies noch akzeptabel für Sie?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Die Partition ist nicht sauber ausgerichtet, gemessen an bester Performance: "
+"%s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "unbekannt (»malloc« fehlgeschlagen)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s-Disk-Labels unterstützen keine Partitionsnamen."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Partitionsnummer?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s-Disk-Labels unterstützen keine Partitionsnamen."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ungültige Nummer."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ungültige Nummer."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS Zylinder-, Kopf-, Sektor-Geometrie: %d, %d, %d. Jeder Zylinder ist %s "
+"groß.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modell: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Festplatte %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sektorgröße (logisch/physisch): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partitionstabelle: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disk-Flags: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Nummer"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Anfang"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Ende"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Größe"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Typ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Dateisystem"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Name"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flags"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Freier Platz"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Eine %s %s-Partition wurde bei %s -> %s gefunden. Wollen Sie diese Partition "
+"zur Partitionstabelle hinzufügen?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "Suche nach Dateisystemen"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Der resize-Befehl wurde in parted 3.0 entfernt."
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Das Verkleinern einer Partition kann Datenverlust zur Folge haben, sind Sie "
+"sicher, dass Sie fortsetzen wollen?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Neues Gerät?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "Ausrichtungstyp (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d ausgerichtet\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d nicht ausgerichtet: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Umzukehrendes Flag?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Neuer Zustand?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Einheit?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TYP N Partition N auf TYP (min|opt) der "
+"Ausrichtung prüfen"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [BEFEHL] Allgemeine Hilfe, oder Hilfe zu BEFEHL"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable LABEL-TYP Neues Disklabel (Partitionstabelle) "
+"erzeugen"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYP [FS-TYP] ANFANG ENDE Partition erzeugen"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"»mkpart« erzeugt eine Partition, ohne ein neues Dateisystem auf der "
+"Partition zu erzeugen. FS-TYP kann angegeben werden, um eine geeignete "
+"Partitions-ID zu setzen.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMMER NAME Partition NUMMER mit NAME benennen"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] Partitionstabelle, verfügbare Geräte, "
+"freien Speicher, oder alle Paritionen anzeigen"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Ohne Argumente zeigt »print« die komplette Partitionstabelle an. Mit den "
+"folgenden Argumenten verrichtet es die zahlreichen anderen Aktionen.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : zeigt alle aktiven blockorientierten Geräte an\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : zeigt Informationen über freien, unpartitionierten Platz auf "
+"dem\n"
+" aktuellen blockorientierten Gerät an\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : zeigt Partitionstabellen aller aktiven blockorientierten\n"
+" Geräte an\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit Programm beenden"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ANFANG ENDE Eine verlorene Partitionen zwischen "
+"ANFANG und ENDE retten"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Der resize-Befehl wurde in parted 3.0 entfernt.\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMMER ENDE Größe der Partition NUMMER ändern"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMMER Partition NUMMER löschen"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select GERÄT Wählen Sie ein GERÄT zur Bearbeitung"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FLAG STATUS ändern des FLAGs auf dem gewählten "
+"Gerät"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAG] Umschalten des FLAGs auf dem "
+"gewählten Gerät"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMMER FLAG STATUS Ändern des FLAGs auf der Partition "
+"NUMMER"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMMER [FLAG]] Umschalten des FLAGs von Partition "
+"NUMMER"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit EINHEIT die Standardgröße auf EINHEIT setzen"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version zeigt die Versions- und Copyright-"
+"Informationen\n"
+" von GNU Parted an"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"»version« zeigt die Versions- und Copyright-Informationen zu dieser Kopie "
+"von GNU Parted an\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Aufruf: %s [-hlmsfv] [-a<Ausrichtung>] [GERÄT [BEFEHL [PARAMETER]] …]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Kein Gerät gefunden"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"WARNUNG: Sie sind kein Systemadministrator. Achten Sie auf Ihre Rechte.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Vor einem Neustart sollten Sie Ihren Bootlader neu installieren. Lesen Sie "
+"den Abschnitt 4 der Benutzerdokumentation von Parted für mehr Informationen."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Möglicherweise müssen Sie /etc/fstab anpassen.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Willkommen zu GNU Parted! Rufen Sie »help« auf, um eine Liste der "
+"verfügbaren Befehle zu erhalten.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Aufruf: parted [OPTION] … [GERÄT [BEFEHL [PARAMETER] …] …]\n"
+"BEFEHLE mit PARAMETERN für GERÄT ausführen. Wenn keine BEFEHLE angegeben "
+"sind,\n"
+"interaktiv arbeiten.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Sie haben einen Fehler in GNU Parted gefunden! Hier steht, was Sie tun "
+"sollten:\n"
+"\n"
+"Bleiben Sie ruhig! Der Fehler sollte Ihre Daten nicht beeinträchtigt haben.\n"
+"Helfen Sie uns, den Fehler zu beseitigen, indem Sie folgendes tun:\n"
+"\n"
+"Überprüfen Sie, ob der Fehler bereits beseitigt wurde, indem Sie die \n"
+"neueste Version von GNU Parted verwenden:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Bitte überprüfen Sie diese Version, bevor Sie einen Fehlerbericht "
+"einreichen.\n"
+"\n"
+"Falls der Fehler noch nicht beseitigt sein sollte, oder falls Sie nicht "
+"wissen sollten, wie Sie das überprüfen sollen,\n"
+"besuchen Sie bitte die GNU Parted- Webseite:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted,\n"
+"\n"
+"um weitere Informationen zu erhalten.\n"
+"\n"
+"Ihr Bericht sollte die Version dieser Freigabe beinhalten (%s),\n"
+"die untenstehende Fehlermeldung und die Ausgabe von \n"
+"\n"
+"\tparted GERÄT unit co print unit s print\n"
+"\n"
+"und die folgende Befehlsfolge, die Sie eingegeben haben.\n"
+"Nehmen Sie auch noch weitere Informationen über Ihr System auf, die Sie als "
+"wichtig empfinden.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Befehlsfolge:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Fehler: SEGV_MAPERR (Adresse nicht an ein Objekt gebunden)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Fehler: SEGV_ACCERR (Ungültige Berechtigung für gebundenes Objekt)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Fehler: Ein generelles SIGSEGV-Signal wurde empfangen.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Fehler: FPE_INTDIV (Ganzzahl: Division durch Null)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Fehler: FPE_INTOVF (Ganzzahl: Ãœberlauf)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTDIV (Fließkommazahl: Division durch Null)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTOVF (Fließkommazahl: Überlauf)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTUND (Fließkommazahl: Unterlauf)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTRES (Fließkommazahl: ungenaues Ergebnis)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTINV (Fließkommazahl: ungültige Operation)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Fehler: FPE_FLTSUB (Fließkommazahl: Index außerhalb des zulässigen Bereichs)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Fehler: Ein generelles SIGFPE-Signal wurde empfangen."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Fehler: ILL_ILLOPC (Nicht erlaubter Opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Fehler: ILL_ILLOPN (Nicht erlaubter Operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Fehler: ILL_ILLADR (Nicht erlaubter Adressierungsmodus)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Fehler: ILL_ILLTRP (Nicht erlaubte Falle)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Fehler: ILL_PRVOPC (Privilegierter Opcode)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Fehler: ILL_PRVREG (Privilegiertes Register)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Fehler: ILL_COPROC (Coprozessor-Fehler)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Fehler: ILL_BADSTK (Interner Stack-Fehler)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Fehler: Ein generelles SIGILL-Signal wurde empfangen."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "Unbekanntes Zeichen: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Es wird eine Partitionsnummer erwartet."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Die Partition existiert nicht."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Es wird ein Dateisystemtyp erwartet."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Unbekannter Dateisystemtyp »%s«."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Es wird ein Disklabeltyp erwartet."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Keine Unterstützung für Flags"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Weitere Partitionen können nicht mehr erzeugt werden."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Es wird ein Partitionstyp erwartet."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "an"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "aus"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPTIONEN:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "BEFEHLE:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Melden Sie Fehler an %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "%s wird verwendet\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Dieser Befehl ergibt im nicht-interaktiven Modus keinen Sinn.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Erweiterte Partitionen können in MS-DOS-Disk-Labels nicht versteckt "
+#~ "werden."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Erweiterte Partitionen können in MS-DOS-Disk-Labels keine "
+#~ "Wiederherstellungspartitionen sein."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMMER : zeigt detailliertere Informationen über diese Partition an\n"
diff --git a/po/en@boldquot.header b/po/en@boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en@boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en@quot.header b/po/en@quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en@quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644
index 0000000..3c950b2
--- /dev/null
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..665dbe5
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,3878 @@
+# Mensajes en español para GNU parted.
+# Copyright (C) 2002 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Vicente E. Llorens <vllorens@mundofree.com>, 2002.
+# Alejandro Cendejas Tena <alex.cendejas@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-07 09:34-0600\n"
+"Last-Translator: Alejandro Cendejas Tena <alex.cendejas@gmail.com>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento %s inválido para %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambiguo para %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Los argumentos válidos son:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "error de escritura"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Error de sistema desconocido"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: la opción '%s%s' es ambigua\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: la opción '%s%s' es ambigua; posibilidades:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opción '%s%s' no reconocida\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: la opción '%s%s' no admite argumentos\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: la opción '%s%s' requiere un argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opción inválida -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la opción requiere un argumento -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Conseguido"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Sin coincidencia"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Expresión regular inválida"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Carácter de colación inválido"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nombre de clase de caracteres inválido"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Barra invertida al final"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Referencia hacia atrás inválida"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [., o [= desemparejado"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( o //( desemparejado"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ desemparejado"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Contenido inválido de \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Final de rango inválido"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memoria agotada"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "La expresión regular precedente es inválida"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Final prematuro de la expresión regular"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "La expresión regular es demasiado grande"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") o \\) desemparejado"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "No hay ninguna expresión regular anterior"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[sS]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Empaquetado por %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Empaquetado por %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licencia GPLv3+: GPL de GNU versión 3 o posterior <%s>.\n"
+"Esto es software libre: usted es libre de cambiarlo y redistribuirlo.\n"
+"No hay NINGUNA GARANTÍA, hasta donde permite la ley.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Escrito por %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Escrito por %s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Escrito por %s, %s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s, %s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s, %s, %s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s, %s, %s, %s\n"
+"y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s, %s, %s, %s\n"
+"%s y %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Escrito por %s, %s, %s\n"
+"%s, %s, %s, %s\n"
+"%s, %s y otros.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Comunicar errores en el programa a: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Comunicar errores sobre %s a: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Página inicial de %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Ayuda general sobre el uso de software de GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria agotada"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Imagen de Disco"
+
+# o también "al abrir"
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Error al abrir %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"No se puede abrir %s en modo lectura-escritura (%s). %s ha sido abierto en "
+"modo de sólo lectura."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s durante la preparación para lectura en %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s durante la lectura en %s"
+
+# para sólo lectura.
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "No se puede escribir en %s, porque está abierto para sólo lectura."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s durante la preparación para la escritura en %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s durante la escritura en %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pruebe '%s --help' para más información.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Modo de empleo: %s [OPCIÓN] [DISPOSITIVO]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informa al sistema operativo acerca de cambios en la tabla de particiones.\n"
+"\n"
+" -d, --dry-run no informa al sistema operativo\n"
+" -s, --summary muestra un resumen del contenido\n"
+" -h, --help muestra esta ayuda y finaliza\n"
+" -v, --version muestra información de la versión y finaliza\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Cuando no se proporciona un DISPOSITIVO, examina todas las particiones.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Comunicar errores a <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "No se puede abrir %s."
+
+# (AC): No me gusta esto. ¿Sugerencias?
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "No se puede sondear store."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"ADVERTENCIA: el kernel no pudo volver a leer la tabla de particiones en %s "
+"(%s). Por esto, podría no reflejar todos los cambios hasta después de "
+"reiniciar."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Advertencia: no se pudo abrir %s (%s). Por esto, podría no reflejar todos "
+"los cambios hasta después de reiniciar."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Advertencia: no se pudo quitar el traductor en %s (%s). Por esto, podría no "
+"reflejar todos los cambios hasta después de reiniciar."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s intentando sincronizar %s al disco"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "No se puede hacer `stat' sobre el dispositivo %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "No se puede determinar el tipo de dm de %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"No se pudo determinar el tamaño de sector para %s: %s.\n"
+"Se utiliza el tamaño de sector por omisión (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"No se pudo determinar el tamaño del sector físico para %s.\n"
+"Se utiliza el tamaño del sector lógico (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "No se puede determinar el tamaño de %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE genérico"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "No se puede obtener la identidad del dispositivo %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"El dispositivo %s tiene varios (%d) sectores lógicos por cada sector "
+"físico.\n"
+"GNU Parted implementa esto de forma EXPERIMENTAL para algunas combinaciones\n"
+"especiales de etiqueta de disco/sistema de archivos, p. ej. GPT y ext2/3.\n"
+"Por favor consulte el sitio web para información actualizada."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Error iniciando el dispositivo SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"El dispositivo %s es tan pequeño que no puede contener un sistema de "
+"archivos o tabla de particiones. ¿Tal vez ha seleccionado el dispositivo "
+"incorrecto?"
+
+# el Parted -> Parted. No se suelen poner artículos a los nombres de
+# los programas. queda un poco despectivo
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"No se puede determinar la geometría del fichero/dispositivo %s. ¡No debería "
+"utilizar Parted a no ser que REALMENTE sepa lo que está haciendo!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Tarjeta SD/MMC genérica"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Dispositivo NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controladora RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Dispositivo SATA Promise SX8"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Dispositivo ATA por Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Unidad DASD IBM S390"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "DASD virtual IBM iSeries"
+
+# de Compaq
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Estructura Smart de Compaq"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Dispositivo NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controladora ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controladora I20"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UBD de User-Mode Linux"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Dispositivo de origen"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Mapeador de dispositivos de Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Dispositivo orientado a bloques virtual Xen"
+
+# ¿Qué, exactamente, es desconocido? ¿No será desconocida?
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Desconocida"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Dispositivo orientado a bloques Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Conjunto Software RAID de Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Unidad RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipo de dispositivo no soportado"
+
+# o también "al abrir"
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Error al usar fsync o cerrar %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sfin del fichero durante la lectura de %s"
+
+# informing the kernel -> al informar al núcleo
+# in any way -> de ninguna forma
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Error al informar el núcleo sobre las modificaciones en la partición %s -- "
+"%s. Esto significa que Linux no reconocerá ningún cambio que haya hecho en "
+"%s hasta que lo reinicie -- por lo tanto no puede montarla o utilizarla "
+"antes de reiniciarla."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "No se puede determinar el inicio y tamaño de %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"La(s) partición(es) %s en %s se han escrito, pero no hemos podido informar "
+"al núcleo del cambio, probablemente porque está(n) en uso. Por lo tanto, "
+"la(s) partición(es) vieja(s) permanecerán en uso. Debería reiniciar ahora "
+"antes de hacer más cambios."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"¡No se puede tener el final de la partición antes del inicio! (sector de "
+"inicio=%jd tamaño=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"Se intentaron escribir los sectores %ld-%ld fuera de la partición en %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "comprobando bloques erroneos"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace tiene %d llamadas en la pila:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Falló la aserción (%s) en %s:%d en la función %s()."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: etiqueta de disco desconocida"
+
+# para sólo lectura.
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Esta libparted no tiene soporte para escritura en %s. Quizás fue compilada "
+"para sólo lectura."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "La partición %d es %s, pero el sistema de ficheros es de %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "alineación_cilíndrica"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "arranque_pmbr"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Bandera de disco desconocida, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Las etiquetas de disco de %s no soportan particiones extendidas."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"Las etiquetas de disco %s no soportan particiones extendidas o lógicas."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Demasiadas particiones primarias."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"No se puede añadir una partición lógica en %s, porque no hay una partición "
+"extendida."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "No se puede tener más de una partición extendida en %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+"No se puede tener una partición lógica fuera de la partición extendida."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"No se puede tener una partición lógica fuera de la partición extendida en %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr ""
+"No se puede tener una partición primaria dentro de una partición extendida."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "¡No se puede hacer una partición fuera del disco!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "No se puede tener particiones superpuestas."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "libre"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extendida"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lógica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primaria"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "arranque"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "grub_bios"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "raíz"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "oculta"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "utilidad-hp"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "arranque_legacy"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "núcleo_chromeos"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "arranque_bls"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Modificador de particiones desconocido, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Información"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Advertencia"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Error"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Error"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Sin Implementación"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Arreglar"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sí"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "No"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "De acuerdo"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Reintentar"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Descartar"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Se detectó un error en GNU Parted. ¡Consulte el sitio web de parted http://"
+"www.gnu.org/software/parted/parted.html para más información acerca de lo "
+"que podría ser útil para reportar el error! Por favor comunique el error "
+"enviando un email a %s que contenga al menos la versión (%s) y el siguiente "
+"mensaje: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "El soporte para leer etiquetas de disco AIX aún no está implementado."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"El soporte para escribir etiquetas de disco AIX aún no está implementado."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"El soporte para agregar particiones a etiquetas de disco AIX aún no está "
+"implementado."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"El soporte para duplicar particiones en etiquetas de disco AIX aún no está "
+"implementado."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"El soporte para establecer el tipo de sistema de particiones en etiquetas de "
+"disco AIX aún no está implementado."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"El soporte para establecer banderas en etiquetas de disco AIX aún no está "
+"implementado."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"No se pueden usar tablas de partición Atari en discos con un tamaño de "
+"sector diferente a %d bytes."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"No se pueden usar tablas de partición Atari en discons con más de %d "
+"sectores."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Se detectaron demasiadas particiones Atari. Tal vez haya un bucle en la "
+"lista vinculada XGM. Cancelando."
+
+# (AC): ARS = Auxiliary Root Sector. ¿Debería dejarlo como sector raíz auxiliar?
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+"No se encontró información de partición en el sector raíz auxiliar %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"El registro del siguiente sector raíz auxiliar lógico no es del tipo XGM en "
+"el sector raíz auxiliar %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"No parece haber una tabla de particiones Atari en este disco (%s), o está "
+"dañada."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"No hay espacio en el sector %lli para almacenar el sector raíz auxiliar de "
+"la partición lógica %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+"No hay espacio en el sector %lli para almacenar el sector raíz auxiliar."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"El conteo de sectores almacenado en la tabla de particiones no corresponde "
+"al tamaño de su dispositivo. ¿Desea corregir la tabla de particiones?"
+
+# (AC): BSL = Bad Sectors List ¿debería dejarlo como lista de sectores dañados?
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+"No hay espacio en el sector %lli para almacenar la lista de sectores dañados."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Quedaron particiones pendientes tras llenar la tabla AHDI principal."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"La tabla AHDI principal se ha llenado con todas las particiones, pero la "
+"tabla ICD no está vacía, así que más particiones de tamaño y posición "
+"desconocidas serán detectadas por software compatible con ICD. ¿Desea "
+"invalidar la tabla ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+"Los registros ICD no pueden contener particiones extendidas ni lógicas."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Quedaron particiones pendientes tras llenar las tablas."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"No puede usar una partición XGM extendida en modo ICD (más de %d particiones "
+"primarias, si XGM es la primera, cuenta por dos)."
+
+# No se pueden, con N.
+# no pongas dos espacios seguidos
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "No se pueden satisfacer todas las restricciones en la partición."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"No puede usar más de %d particiones primarias (modo ICD) si usa una "
+"partición XGM extendida. Si XGM es la primera partición, cuenta por dos."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "No se puede asignar un número de partición."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "No se puede asignar una ranura de la etiqueta de disco bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+"No se puede cambiar la tabla de particiones del dispositivo DASD-LDL.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "No se puede asignar una ranura de la etiqueta de disco dasd."
+
+# te doy permiso para poner inválida
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabla de particiones inválida en %s -- firma errónea %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabla de particiones inválida - partición recursiva en %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted no puede redimensionar particiones manejadas por Windows Dynamic Disk."
+
+# No se puede.
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "no se puede crear más particiones"
+
+# to ignore no es ignorar, es descartar, pasar por alto, hacer la vista
+# gorda, etc. ingorar es no saber, y eso se dice "not to know".
+# La segunda acepción de ignorar (según el diccionario) también es pasar
+# por alto. vll
+# volumenes -> volúmenes
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s no tiene partición extendida (partición de cabecera de volumen)."
+
+# suma de comprobación
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"La suma de comprobación es incorrecta, lo cual indica que la tabla de "
+"particiones está corrupta."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Sólo las particiones primarias pueden ser particiones raíz."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Sólo las particiones primarias pueden ser particiones de intercambio."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Sólo las particiones lógicas pueden ser un fichero de arranque."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"falla al establecer el nombre de la partición dvh a %s:\n"
+"Sólo las particiones lógicas (ficheros de arranque) tienen un nombre."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Demasiadas particiones primarias"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "error de apertura"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "error de búsqueda"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "error de lectura"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "error de ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "discrepancia de versiones de API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tipo de disco no soportado"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Formato de disco no soportado"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "El disco está en uso"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Error de sintaxis en fichero de configuración"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "La etiqueta del volumen está dañada"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "El nombre de un conjunto de datos está dañado"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Falla en asignación de memoria"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Falla en verificación de dispositivo"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "El dispositivo especificado no es un dispositivo DASD válido."
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "No se encontró VOLSER en el dispositivo"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Error fatal"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "No hay espacio para la etiqueta de volumen."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "No hay espacio para la información de particiones."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC inválido."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "No se pudo obtener la versión de API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"¡La versión de API actual '%d' no coincide con la versión de API '%d' del "
+"controlador dasd!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "No se pudo recuperar el tamaño del disco."
+
+# No se puede.
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "No se pudo recuperar la información de geometría del disco."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "No se pudo recuperar la información de tamaño de bloques."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "La geometría del disco no coincide con un dispositivo DASD tipo 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "el dispositivo es demasiado pequeño para GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"El formato de la tabla de particiones GPT es la versión %x, el cual es más "
+"nuevo que lo que Parted puede reconocer. ¡Por favor, reporte esto!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Parece que no se está usando todo el espacio disponible en %s, puede "
+"corregir la GPT para usar todo el espacio (%llu bloques extra) o ¿desea "
+"continuar con la configuración actual? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"La tabla GPT de respaldo no está al final del disco, como debería. ¿Corregir "
+"esto moviendo el respaldo al final (y quitando el respaldo viejo)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"La tabla primaria y la copia de respaldo GPT están corruptas. Intente crear "
+"una tabla actualizada, y utilice la opción de rescate de Parted para "
+"reconstruir las particiones."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"La tabla GPT de respaldo está dañada, pero la primaria parece correcta, por "
+"lo tanto se usará esta."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"La tabla primaria GPT está corrupta, pero la copia de respaldo parece "
+"correcta, por lo tanto se usará esta."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "discrepancia de CRC de la tabla de particiones primarias"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "falla al traducir el nombre de la partición"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Firma inválida %x para etiquetas de discos Mac."
+
+# Map es asignación o tabla. Mapa es un barbarismo.
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr ""
+"¡La tabla de particiones no tiene una entrada de la tabla de particiones!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "¡%s es demasiado pequeño para una etiqueta de disco Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "La partición %d tiene una firma inválida %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "¡La partición %d tiene una longitud inválida de 0 bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "La región de datos no empieza al principio de la partición."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "La región de arranque de la partición no ocupa toda la partición."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "La región de datos de la partición no ocupa toda la partición."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Tamaño de bloque extraño en el descriptor del dispositivo: %d bytes no es "
+"divisible por 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"El descriptor del controlador dice que el tamaño del bloque físico es de %d "
+"bytes, pero Linux dice que es de %d bytes."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Se encontró una tabla de particiones inválida."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"¡Conflicto en el tamaño de la entrada de la tabla de particiones! ¡La "
+"entrada 1 dice que es %d, pero la entrada %d dice que es %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "¡Extraño! ¡Hay 2 entradas de tabla de particiones!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Cambiando el nombre de una partición raíz o de intercambio impedirán a Linux "
+"de reconocela como tal."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"¡No se puede añadir otra partición -- la tabla de las particiones es "
+"demasiado pequeña!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabla de particiones inválida en %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"La partición %d no está alineada a los límites del cilindro. Necesita "
+"añadirle soporte."
+
+# No se puede.
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "No se puede añadir otra partición."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"el tamaño de partición de %jd sectores excede el máximo especificado en la "
+"tabla de particiones %s de %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"el número de sector inicial, %jd excede el máximo especificado en la tabla "
+"de particiones %s de %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Suma de comprobación mala en el bloque %llu de tipo %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : No se encuentra el bloque rdb, nunca debería ocurrir."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Bucle detectado en el bloque %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : La lista %s parece mala en el bloque %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Falla al enlistar bloques dañados."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Falla al enlistar bloques de partición."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Falla al enlistar bloques del sistema de ficheros."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Falla al enlistar bloques de arranque."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Falla al escribir el bloque de la partición en %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Se ha detectado una etiqueta de disco Sun corrupta."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"La geometría de disco CHS (%d,%d,%d) informada por el sistema operativo no "
+"parece coincidir con la geometría guardada en la etiqueta de disco (%d,%d,"
+"%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "La etiqueta de disco describe un disco mayor que %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "El disco tiene %d cilindros que son mayores que el máximo de 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"La partición Entera del Disco es la única que queda disponible. "
+"Generalmente, no es una buena idea sobrescribir esta partición con una "
+"verdadera. Solaris no se puede arrancar sin ella, y SILO (el cargador de "
+"arranque de sparc) también la agradece."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "La etiqueta de disco Sun está llena."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "falló la apertura del dispositivo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "falló la búsqueda en el dispositivo"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "falló la escritura al dispositivo"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "falló la lectura del dispositivo"
+
+# No se puede.
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "No se pudo leer la etiqueta de volumen."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "No se pudo escribir la etiqueta de volumen."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "No se pudieron leer las etiquetas VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "No se pudo leer VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "No se pudo leer VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "No se pudo leer VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "No se pudo leer VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "No se pudieron escribir las etiquetas VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "No se pudo escribir VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "No se pudo escribir VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "No se pudo escribir VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "No se pudo escribir VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "No se pudo escribir VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "No hay memoria."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"No se puede obtener el tamaño unitario para la unidad especial 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" tiene sintaxis inválida para las ubicaciones."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "El valor máximo de encabezado es %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "El valor máximo de sector es %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "La ubicación %s está fuera del dispositivo %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Número inválido."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Use una unidad menor en lugar de un valor < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Falla al asignar el bloque de partición\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Falla al asignar el bloque\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : No se pudo leer el bloque de arranque %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : No se pudo leer el bloque raíz %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Falla al asignar elemento de lista de identificación\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : No se pudo leer el bloque %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Suma de comprobación mala en el bloque %llu de tipo %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : No se pudo escribir el bloque %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Falla al asignar bloque rdb específico_del_disco\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : No se encuentra el bloque rdb, nunca debería ocurrir\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Falla al escribir el bloque de la partición %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted fue mal compilado: el sector de arranque FAT debería ser de 512 "
+"bytes. El soporte a FAT será desabilitado."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"El sistema de ficheros tiene una firma inválida para un sistema de ficheros "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"El sistema de ficheros tiene un tamaño de sector inválido para un sistema de "
+"ficheros FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"El sistema de ficheros tiene un tamaño de cluster inválido para un sistema "
+"de ficheros FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"El sistema de ficheros tiene un número inválido de sectores reservados para "
+"un sistema de ficheros FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "El sistema de ficheros tiene un número de FATS inválido."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"La geometría CHS del sistema de ficheros es (%d, %d, %d), y es inválida. La "
+"gemoetría CHS de la tabla de particiones es (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"El sector de arranque de la FAT dice que el tamaño lógico del sector es 0. "
+"Esto es extraño. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"El sector de arranque de la FAT dice que no hay tablas FAT. Esto es "
+"extraño. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"El sector de arranque de la FAT dice que los clusters tienen 0 sectores. "
+"Esto es extraño. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "El sistema de ficheros es FAT12, el cuál no está soportado."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Firma estilo viejo de la partición de intercambio de linux '%10s' no "
+"reconocida."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Firma estilo nuevo de la partición de intercambio de linux '%10s' no "
+"reconocida."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr ""
+"Firma swsusp de la partición de intercambio de linux '%10s' no reconocida."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted no puede usar sistemas de ficheros HFS en discos con un tamaño de "
+"sector distinto a %d bytes."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"La geometría CHS del sistema de ficheros es (%d, %d, %d), y es inválida. La "
+"geometría CHS de la tabla de particiones es (%d, %d, %d). Si elige "
+"Descartar, la geometría CHS del sistema de ficheros permanecerá sin cambios. "
+"Si elige Arreglar, la geometría CHS del sistema de ficheros se ajustará para "
+"coincidir con la geometría CHS de la tabla de particiones."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"El sector de información tiene una firma errónea (%x). Seleccione cancelar "
+"por ahora, y mande un informe de falla. Si está desesperado, es más seguro "
+"descartar."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Necesita %s de espacio disco libre para reducir esta partición a este "
+"tamaño. Actualmente, sólo %s está libre."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"El inicio delta del cluster = %d, que no es un múltiplo del tamaño de "
+"cluster %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrada de directorio incorrecta para %s: el primer cluster es el final de "
+"la marca del fichero."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: cadena no terminada para %s. Debería ejecutar dosfsck o "
+"scandisck."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: el cluster %d está fuera del sistema de ficheros en la "
+"cadena para %s. Debería ejecutar dosfsck o scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT incorrecta: el cluster %d tiene enlaces cruzados para %s. Debería "
+"ejecutar dosfsck o scandisck."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s es %dk, pero tiene %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partición demasiado grande/pequeña para un sistema de ficheros %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Las FATs no son iguales. Si no sabe que significa esto, seleccione "
+"cancelar, ejecute scandisk en el sistema de ficheros, y después vuelva."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "No hay configuraciones posibles para este tipo de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"El sistema de ficheros no tiene los tamaños esperados para que los utilize "
+"Windows. El tamaño del cluster es %dk (se esperaba %dk); el número de "
+"clusters es de %d (se esperaba %d); el tamaño de la FAT es de %d sectores "
+"(se esperaba %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"El sistema de ficheros está informando que el espacio libre de clusters es "
+"de %d, no de %d clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"No hay espacio suficiente en el directorio root para todos los ficheros. "
+"Puede cancelar o descartar perdiendo los ficheros."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Error al escribir en el directorio root."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Si deja su sistema de ficheros como FAT16, entonces no tendrá problemas."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Si convierte a FAT16, y MS Windows está instalado en esa partición, entonces "
+"debería re-instalar el cargador de arranque de MS Windows. Si quiere hacer "
+"esto, debería consultar el manual de Parted (o el manual de su distribución)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Si deja su sistema de ficheros como FAT32, entonces no tendrá nuevos "
+"problemas."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Si convierte a FAT32, y MS Windows está instalado en la partición, tiene que "
+"re-instalar el cargador de arranque de MS Windows. Si quiere hacerlo, "
+"debería consultar el manual de Parted (o el manual de su distribución). "
+"También, la conversión a FAT32 hará ilegible el sistema de ficheros para MS "
+"DOS, MS Windows 95a y MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "¿Le gustaría usar FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"El sistema de ficheros sólo puede ser redimensionado a este tamaño para "
+"convertirlo a FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"El sistema de ficheros sólo puede ser redimensionado a este tamaño para "
+"convertirlo a FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted no puede redimensionar esta partición a ese tamaño. ¡Estamos "
+"trabajando en ello!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"La FAT %d del medio %x no coincide con los sectores de arranque del medio "
+"%x. Debería, probablemente, ejecutar scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: el cluster %ld está fuera del sistema de ficheros"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: el cluster %ld está fuera del sistema de ficheros"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: no quedan clusters libres"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "No se pudo detectar el sistema de ficheros."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "el redimensionamiento de sistemas de ficheros %s no está implementado"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "¡El sistema de ficheros es más grande que su volumen!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "El sistema de ficheros contiene errores."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "No pueden leerse los bloques incorrectos."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Intentando registrar una extensión que empieza en el bloque 0x%X, pero ya "
+"existe otra en esta posición. ¡Debería verificar el sistema de ficheros!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Intentando mover una extensión desde el bloque Ox%X hacia el bloque Ox%X, "
+"pero ya existe otra en esta posición. ¡Esto no debería pasar!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"No se pudo actualizar la caché de extensión para el fichero HFS con CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Intentando leer el fichero HFS con CNID %X tras el final del fichero."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "No se pudo encontrar el sector %lli del fichero HFS con CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+"Intentando escribir el fichero HFS con CNID %X tras el final del fichero."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"No se pudo actualizar la caché de extensión para el fichero HFS+ con CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Intentando leer el fichero HFS+ con CNID %X tras el final del fichero."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "No se pudo encontrar el sector %lli del fichero HFS+ con CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Intentando escribir el fichero HFS+ con CNID %X tras el final del fichero."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Disculpe, HFS aún no puede ser redimensionado así."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "contrayendo"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "La reubicación de datos falló."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "La reubicación de datos dejó algunos datos al final del volumen."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "escribiendo Bloque de Directorio Maestro HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "No se encontró una firma HFS[+X] válida al abrir."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "La versión %d de HFS+ no está implementada."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "La versión %d de HFSX no está implementada."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "La reubicación de datos dejó algunos datos al final del volumen."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Error al escribir el fichero de asignación."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+"Error al escribir la parte de compatibilidad del fichero de asignación."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "escribiendo el Encabezado de Volumen HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Ocurrió un error al buscar el fichero obligatorio de bloques dañados."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Parece que hubo un error en la envoltura HFS: el fichero de bloques dañados "
+"no contiene el volumen HFS+ embebido."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Disculpe, HFS+ aún no puede ser redimensionado así."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "contrayendo volumen HFS+ embebido"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "El redimensionamiento del volumen HFS+ falló."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "contrayendo envoltura HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "La actualización de la envoltura HFS falló."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Esta no es una revisión real de %s. Esto va a extraer ficheros especiales de "
+"bajo nivel para depuración."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Checksum del encabezado de la lista de bloques dañados."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Tamaño inválido de un bloque de transacción al reproducir el diario de "
+"registros (%i bytes)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"El almacenamiento de diario de registros fuera del volumen no está "
+"implementado. Intente desactivar el diario de registros y ejecute Parted "
+"nuevamente."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"El desplazamiento o el tamaño del diario de registros no es un múltiplo del "
+"tamaño de sector."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valores mágicos incorrectos en el encabezado del diario de registros."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Discrepancia en el tamaño del diario de registros entre el bloque de "
+"información y el encabezado del diario."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Algunos campos de encabezado no son múltiplos del tamaño de sector."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"El tamaño de sector almacenado en el diario de registros no es de 512 bytes. "
+"Parted solo implementa sectores de 512 bytes."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Checksum de diario de registros incorrecto."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"El diario de registros no está vacío. Parted debe reproducir las "
+"transacciones antes de abrir el sistema de ficheros. Esto modificará el "
+"sistema de ficheros."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"El encabezado del volumen o el bloque de directorio maestro ha cambiado al "
+"reproducir el diario de registros. Debería reiniciar Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "No se ha reubicado una extensión."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Una referencia a una extensión viene de un lugar que no debería. ¡Debería "
+"revisar el sistema de ficheros!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Este volumen HFS no tiene un Fichero Catálogo. ¡Esto es muy extraño!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Este volumen HFS no tiene un Fichero de Desbordamiento de Extensiones. ¡Esto "
+"es muy extraño!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"¡El Fichero de Desbordamiento de Extensiones no debería contener sus propias "
+"extensiones! Debería revisar el sistema de ficheros."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "No se pudo almacenar en memoria caché el sistema de ficheros."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "No se pudo cargar la lista de bloques dañados."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Ocurrió un error durante la relocalización de la extensión."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Este volumen HFS+ no tiene un Fichero Catálogo. ¡Esto es muy extraño!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Este volumen HFS+ no tiene un Fichero de Desbordamiento de Extensiones. "
+"¡Esto es muy extraño!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "muestra este mensaje de ayuda"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+"enlista la disposición de particiones en todos los dispositivos de bloque"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "muestra salida analizable"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "muestra salida JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "no pide nunca la intervención del usuario"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "en modo guión, corrige en lugar de cancelar al solicitarlo"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "muestra la versión"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "alineación para nuevas particiones"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMERO es el número de la partición usada por Linux. En las etiquetas de "
+"disco MS-DOS, las particiones primarias van del 1 al 4, y las particiones "
+"lógicas del 5 en adelante.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPO_ETIQUETA es uno de: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG es uno de: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIDAD es uno de: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "alineación deseada: mínima u óptima"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPO-PART es uno de: primário, lógico, extendido\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPO-SF es uno de: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"INICIO y FIN son ubicaciones de disco, como 4GB o 10%. Los valores negativos "
+"cuentan desde el final del disco. Por ejemplo, -1s especifica exactamente el "
+"último sector.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"FIN es una ubicación de disco, como 4GB o 10%. Los valores negativos cuentan "
+"desde el final del disco. Por ejemplo, -1s especifica exactamente el último "
+"sector.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ESTADO es uno de: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOSITIVO es normalmente /dev/hda o /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOMBRE es cualquier palabra que quiera\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+# Please, busca este mismo texto en el .po de fileutils o textutils e intenta
+# que se parezca en la terminología,
+# por ejemplo: is distributed -> se distribuye
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 -2006 Free Software Foundation, Inc.\n"
+"Este programa es software libre, cubierto por la Licencia Pública General de "
+"GNU.\n"
+"\n"
+"Este programa se distribuye con la esperanza de que sea útil,\n"
+"pero SIN NINGUNA GARANTÍA; ni siquiera la garantía implícita de\n"
+"COMERCIABILIDAD o IDONEIDAD PARA UN FIN DETERMINADO. Vea la \n"
+"Licencia Pública General de GNU para obtener más detalles.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tiempo que queda %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "La partición %s está usandose. ¿Realmente desea continuar?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "La(s) partición(es) en %s está(n) siendo usada(s)."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"La etiqueta de disco actual en %s será destruida y todos los datos en este "
+"disco se perderán. ¿Desea continuar?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "¿Nuevo tipo de etiqueta de disco?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "¿Tipo de partición?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "¿Nombre de la partición?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "¿Tipo de sistema de ficheros?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "¿Inicio?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "¿Fin?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Pidió una partición de %s a %s (sectores %llu..%llu).\n"
+"La ubicación más cercana que podemos manejar es %s a %s (sectores %llu.."
+"%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"¿Esto aún es aceptable para usted?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"La partición resultante no está correctamente alineada para el mejor "
+"desempeño: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "desconocido (malloc falló)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Las etiquetas de disco de %s no implementan nombre de partición."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "¿Número de la partición?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Las etiquetas de disco de %s no implementan nombre de partición."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "¿Tipo de partición?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Número inválido."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "¿Tipo de partición?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Número inválido."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Geometría cilindro,encabezado,sector de BIOS: %d,%d,%d. Cada cilindro es "
+"%s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modelo: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disco %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Tamaño de sector (lógico/físico): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabla de particiones: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Banderas de disco: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Número"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Inicio"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fin"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Tamaño"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tipo"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Sistema de ficheros"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nombre"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Banderas"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Espacio Libre"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Ha sido encontrada una partición %s %s en %s -> %s. ¿Quiere añadirla a la "
+"tabla de particiones?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "buscando los sistemas de ficheros"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "La orden resize fue eliminada en parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Contraer una partición puede provocar pérdida de datos, ¿realmente desea "
+"continuar?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "¿Nuevo dispositivo?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "tipo de alineación(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d alineada\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d no alineada: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "¿Bandera a Inveritr?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "¿Nuevo estado?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "¿Unidad?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TIPO N revisa TIPO(min|opt) de alineación de "
+"partición N"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [ORDEN] muestra la ayuda general, o la ayuda "
+"sobre la ORDEN"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TIPO-ETIQUETA crea una nueva etiqueta de disco (en "
+"la tabla de particiones)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPO-PART [TIPO-SF] INICIO FIN crea una partición"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' crea una partición sin crear un nuevo sistema de ficheros en la "
+"partición. Puede establecer el TIPO-SF para asignar una ID de partición.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMERO NOMBRE nombra la partición NUMERO como NOMBRE"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] muestra la tabla de particiones, "
+"dispositivos disponibles, espacio libre, o todas las particiones"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Sin argumentos, 'print' muestra la tabla de particiones completa. Sin "
+"embargo, con los argumentos siguientes, realiza otras acciones.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : muestra todos los dispositivos de bloque activos\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : muestra información acerca de espacio libre sin particionar en "
+"el dispositivo de bloque actual\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : muestra las tablas de particiones de todos los dispositivos de "
+"bloque activos\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit sale del programa"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue INICIO FIN recupera las particiones perdidas "
+"entre INICIO y FIN"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "La orden resize fue eliminada en parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMERO FIN redimensiona la partición NUMERO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMERO borra la partición NUMERO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select DISPOSITIVO elige el dispositivo a editar"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set BANDERA ESTADO cambia la BANDERA en el dispositivo "
+"seleccionado"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [BANDERA] alterna el estado de BANDERA en el "
+"dispositivo seleccionado"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMERO BANDERA ESTADO cambia la BANDERA de la partición "
+"NUMERO"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMERO [BANDERA]] alterna el estado de BANDERA en la "
+"partición NUMERO"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+#, fuzzy
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+"mkfs NUMERO TIPO-SF crea un sistema de ficheros TIPO-SF en la "
+"partición NUMERO"
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit UNIDAD configura la unidad por defecto para "
+"UNIDAD"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version muestra el número de versión y la "
+"información de copyright de GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' muestra la información de versión y copyright de esta copia de GNU "
+"Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Modo de empleo: %s [-hlmsfv] [-a<alinear>] [DISPOSITIVO [ORDEN "
+"[PARÁMETROS]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "No se encontró el dispositivo"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "ADVERTENCIA: Usted no es superusuario. Esté atento a los permisos.\n"
+
+# boot loader -> cargador de arranque.
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Debe reinstalar su cargador de arranque antes de reiniciar. Lea la sección "
+"4 de la documentación del Usuario de Parted para obtener más información."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Puede que tenga que actualizar /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Bienvenido(a) a GNU Parted! Escriba 'help' para ver una lista de órdenes.\n"
+
+# Uso: o Modo de empleo:
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Modo de Empleo: parted [OPCIÓN]... [DISPOSITIVO [ORDEN [PARÁMETROS]...]...]\n"
+"Aplica la(s) ORDEN(es) con PARÁMETROS al DISPOSITIVO. Si no se da "
+"ninguna(s) ORDEN(es), ejecutar en\n"
+"modo interactivo.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"¡Usted encontró un error en GNU Parted! Aquí está lo que debe hacer:\n"
+"\n"
+"¡No se asuste! El error probablemente no ha afectado su información.\n"
+"Ayúdenos a arreglar este error haciendo lo siguiente:\n"
+"\n"
+"Revise si este error ya fue corregido revisando la\n"
+"última versión de GNU Parted que pueda encontrar en:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Por favor revise esta versión antes de reportar este error.\n"
+"\n"
+"Si el error no ha sido corregido, o si no sabe cómo revisarlo,\n"
+"por favor visite el sitio web de GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"para más información.\n"
+"\n"
+"Su reporte debería contener la versión de esta revisión (%s)\n"
+"junto con el mensaje de error que aparece abajo, la salida de\n"
+"\n"
+"\t parted DISPOSITIVO unit co print unit s print\n"
+"\n"
+"y el siguiente historial de órdenes que usted usó.\n"
+"Incluya también cualquier información adicional acerca de su\n"
+"configuración que considere importante.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Historial de órdenes:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Error: SEGV_MAPERR (Dirección no asignada a objeto)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Error: SEGV_ACCERR (Permisos inválidos para objeto asignado)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Error: Se encontró una señal general de SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Error: FPE_INTDIV (Entero: división entre cero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Error: FPE_INTOVF (Entero: desbordamiento)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Error: FPE_FLTDIV (Flotante: división entre cero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Error: FPE_FLTOVF (Flotante: desbordamiento)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Error: FPE_FLTUND (Flotante: subdesbordamiento)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Error: FPE_FLTRES (Flotante: resultado inexacto)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Error: FPE_FLTINV (Flotante: operación inválida)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Error: FPE_FLTSUB (Flotante: subíndice fuera de rango)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Error: Se encontró una señal general de SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Error: ILL_ILLOPC (Código de operación ilegal)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Error: ILL_ILLOPN (Operando ilegal)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Error: ILL_ILLADR (Modo de direccionamiento ilegal)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Error: ILL_ILLTRP (Trampa ilegal)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Error: ILL:PRVOPC (Código de operación privilegiado)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Error: ILL:PRVREG (Registro privilegiado)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Error: ILL_COPROC (Error de coprocesador)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Error: ILL_BADSTK (Error de pila interna)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Error: Se encontró una señal general de SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "token inválido: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Se esperaba un número de partición."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "La partición no existe."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Se esperaba un tipo de sistema de ficheros."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipo de sistema de ficheros \"%s\" desconocido."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Se esperaba un tipo de etiqueta de disco."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Ninguna bandera implementada"
+
+# No se puede.
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "No se puede crear más particiones."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Se esperaba un tipo de partición."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPCIÓNes:"
+
+# Comando es una barbaridad. En es@li.org usamos "orden".
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "ORDENes:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Comunicar errores a %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Usando %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Esta orden no tiene sentido en modo no-interactivo.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "No pueden esconderse particiones extendidas en etiquetas de disco msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Las particiones extendidas no pueden ser particiones de recuperación en "
+#~ "etiquetas de disco msdos."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMERO : muestra información más detallada acerca de esta partición "
+#~ "específica\n"
+
+# drives -> unidades
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes."
+#~ msgstr ""
+#~ "El tamaño del sector en %s es de %d bytes. Parted no funciona "
+#~ "correctamente con unidades que tengan un tamaño de sector distinto de %d "
+#~ "bytes"
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything about the modifications you made until "
+#~ "you reboot. You should reboot your computer before doing anything with "
+#~ "%s."
+#~ msgstr ""
+#~ "El núcleo no pudo releer la tabla de particiones en %s (%s). Esto "
+#~ "significa que Linux no reconocerá las modificaciones que hizo. Debe "
+#~ "reiniciarlo antes de hacer cualquier uso con %s."
+
+# cargador "de" aranque (no del)
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "No se pudo releer la tabla de particiones, por lo tanto es necesario "
+#~ "reiniciar antes de montar alguna partición modificada. ¡También necesita "
+#~ "reinstalar su cargador de arranque antes de reiniciar (que puede requerir "
+#~ "montar las particiones modificadas). ¡Es imposible hacer ambas cosas! "
+#~ "Así que necesitará arrancar con un disco de rescate y reinstalar su "
+#~ "cargador de arranque desde el disco de rescate. Lea la sección 4 de la "
+#~ "documentación del Usuario de Parted para obtener más información."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "La tabla de particiones en %s no puede ser releida(%s). Esto significa "
+#~ "que Hurd (o Linux) no reconocerá las modificaciones que hizo. Debe "
+#~ "reiniciar su computadora antes de hacer nada con %s."
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s contiene firmas GPT, lo cual indica que tiene una tabla GPT. No "
+#~ "obstante, no tiene una tabla de particiones msdos de imitación válida, "
+#~ "como habría de ser. Quizás esta corrupta -- posiblemente por un programa "
+#~ "que no es capaz de enterder las tablas de partición GPT. O quizás borró "
+#~ "la tabla GPT y ahora está usando una tabla de particiones msdos. ¿Es "
+#~ "esta una tabla de partición GPT?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "La región de arranque no empieza al principio de la partición."
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "El soporte para abrir el sistema de ficheros %s aún no está implementado."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "El soporte para comprobar el sistema de ficheros %s aún no está "
+#~ "implementado."
+
+#~ msgid "raw block copying"
+#~ msgstr "copiando los bloque en bruto"
+
+#~ msgid "growing file system"
+#~ msgstr "sistema de ficheros creciendo"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "No se puede copiar sobre una partición superpuesta."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "El soporte directo para copiar sistemas de ficheros aún no está "
+#~ "implementado para %s. Sin embargo, el soporte para redimensionar está "
+#~ "implementado. Por lo tanto, el sistema de ficheros se puede copiar si la "
+#~ "nueva partición es por lo menos tan grande como la vieja. Así, o reduce "
+#~ "la partición que está intentando copiar o copie en una partición más "
+#~ "grande."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "El soporte para copiar el sistema de ficheros %s aún no está implementado."
+
+# bicho :-)
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "Si detectó un bicho en GNU parted. Por favor, envíe un informe del bicho "
+#~ "a bug-parted@gnu.org conteniendo la versión (%s) y el mensaje siguiente:"
+
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s."
+#~ msgstr ""
+#~ "Se intentaron leer los sectores %ld-%ld fuera de la partición en %s."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "¡Descriptores de grupo inconsistentes!"
+
+#~ msgid "File system full!"
+#~ msgstr "¡Sistema de ficheros lleno!"
+
+#~ msgid ""
+#~ "This ext2 file system has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "¡Este sistema de ficheros ext2 tiene un diseño muy estraño! Parted (aún) "
+#~ "no puede redimensionarlo."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Superbloque inválido. ¿Está seguro de que este es un sistema de ficheros "
+#~ "ext2?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "¡El sistema de ficheros tiene errores! Debería ejecutar e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "¡El sistema de ficheros no fue desmontado limpiamente! Debería ejecutar "
+#~ "e2fsck. Modificar un sistema de ficheros sucio podría causar una "
+#~ "corrupción grave."
+
+#~ msgid "File system has an incompatible feature enabled."
+#~ msgstr ""
+#~ "El sistema de ficheros tiene activada una característica incompatible."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Error asignando espacio en la caché del búfer."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Encontrado un nodo-i con una cuenta de enlace incorrecta. ¡Mejor "
+#~ "ejecutar primero e2fsck!"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "¡No hay suficientes nodos-i libres!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr ""
+#~ "¡El sistema de ficheros está demasiado ocupado para borrar un grupo!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "¡El sistema de ficheros tiene demasiados nodos-i asignados para borrar un "
+#~ "grupo!"
+
+#~ msgid "adding groups"
+#~ msgstr "añadiendo grupos"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Su sistema de ficheros está demasiado lleno para redimensionarlo a %i "
+#~ "bloques. Disculpe."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Su sistema de ficheros tiene demasiados nodos-i ocupados para "
+#~ "redimensionarlo a %i bloques. Disculpe."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr ""
+#~ "¡El sistema de ficheros no fue desmontado limpiamente! Debería ejecutar "
+#~ "e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "El sistema de ficheros tiene la opción 'dir_index' habilitada. Parted "
+#~ "sólo pude redimensionar el sistema de ficheros si desactiva esta opción. "
+#~ "Puede habilitarla después ejecutando 'tune2fs -O dir_index UNIDAD' y "
+#~ "luego 'e2fsck -fD UNIDAD'."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "¡Se encontraron bloques con referencia cruzada! ¡Mejor ejecutar primero "
+#~ "e2fsck!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "¿El bloque %i no tiene una referencia? Estraño."
+
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "¡El bloque %i no debería haber sido marcado!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "El sistema de ficheros ext2 pasó una comprobación básica. Para una "
+#~ "comprobación más a fondo, utilize el programa e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr ""
+#~ "¡Disculpe, aún no se puede mover el principio de las particiones ext2!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "¡No se pudo vaciar la caché del búfer!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "escribiendo metadatos por-grupo"
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "El sistema de ficheros tiene el tamaño del sector lógico de %d. GNU "
+#~ "Parted es conocido por no funcionar adecuadamente con tamaños de sector "
+#~ "distintos de 512 bytes."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "El fichero %s está marcado como un fichero del sistema. Esto quiere "
+#~ "decir que si lo mueve puede ocurrir que algunos programas no funcionen."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Demasiadas páginas incorrectas."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "donde sea necesario, pedir la intervención del usuario"
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "La partición debe tener uno de los siguientes TIPOS de SF: "
+
+#~ msgid "Source partition number?"
+#~ msgstr "¿Número de la partición de origen?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "¿Número de la partición de destino?"
+
+#~ msgid "File system?"
+#~ msgstr "¿Sistema de ficheros?"
+
+#~ msgid ""
+#~ "You requested to create a partition at %s - %s. The closest Parted can "
+#~ "manage is %s - %s."
+#~ msgstr ""
+#~ "Pidió crear una partición en %s - %s. Lo más cerca que Parted puede "
+#~ "manejar es %s - %s."
+
+#, fuzzy
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr ""
+#~ "La particiones extendidas no puede sostener un sistema de ficheros. "
+#~ "¿Quiere mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "No se pueden mover una partición extendida."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "No se puede mover una partición sobre sí misma. ¿Pruebe a usar "
+#~ "redimensionar, quizás?"
+
+#~ msgid ""
+#~ "You requested to move the partition to %s - %s. The closest Parted can "
+#~ "manage is %s - %s."
+#~ msgstr ""
+#~ "Pidió mover la partición a %s - %s. Lo más cerca que Parted puede manejar "
+#~ "es %s - %s."
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Minor: %d\n"
+
+#~ msgid "Flags: "
+#~ msgstr "Banderas: "
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Sistema de ficheros: %s\n"
+
+#, fuzzy
+#~ msgid "Size: "
+#~ msgstr "Tamaño: %10.3fMb (%d%%)\n"
+
+#~ msgid "Minimum size: "
+#~ msgstr "Tamaño mínimo: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Tamaño máximo: "
+
+#~ msgid "Disk geometry for %s: %s - %s\n"
+#~ msgstr "Geometría de disco para %s: %s - %s\n"
+
+#~ msgid "check NUMBER do a simple check on the file system"
+#~ msgstr ""
+#~ "comprueba NUMERO hace una comprobación simple del "
+#~ "sistema de ficheros"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [DESDE-DISPOSITIVO] DE-NUMERO A-NUMERO copia el sistema de ficheros "
+#~ "a otra partición"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs TIPO-PART TIPO-SF INICIO FIN crear una partición con un "
+#~ "sistema de ficheros"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move NUMBER START END move partition NUMBER"
+#~ msgstr "move NUMERO INICIO FIN mueve la partición NUMERO"
+
+#~ msgid ""
+#~ "print [NUMBER] display the partition table, or a partition"
+#~ msgstr ""
+#~ "print [NUMERO] muestra la tabla de las particiones, o una "
+#~ "partición"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its file system"
+#~ msgstr ""
+#~ "resize NUMERO INICIO FIN redimensiona el sistema de ficheros y la "
+#~ "partición NUMERO"
+
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Encontró un bicho en GNU parted. Por favor, envíe un informe del bicho a "
+#~ "bug-parted@gnu.org conteniedo la versión (%s), y el siguiente mensaje:\n"
+
+# Pon `dodgey' entre comitas, por lo menos mientras no se encuentre una
+# traducción.
+# En otras traducciones definen dodgey como inadmisible o extraña. vll
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "El dispositivo %s tiene una geometría incorrecta."
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+# ninguna + ni doble negación
+# Yo lo dejaría en "no es una unidad SCSI ni IDE"
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "El dispositivo %s no es una unidad SCSI ni IDE."
+
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Error leyendo %s (%s) para determinar si la partición está montada."
+
+# detectara -> detectó (se entiende mejor)
+# BIOS es masculino pues se trata del Sistema Básico de Entrada/Salida
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "La tabla de particiones en %s es inconsistente. Hay varias razones para "
+#~ "que ocurra esto. Sin embargo, la razón más probable es que Linux detectó "
+#~ "la geometría de la BIOS para %s incorrectamente. GNU Parted sospecha que "
+#~ "la geometría real debería ser %d/%d/%d (y no %d/%d/%d). Debería "
+#~ "comprobar su BIOS primero, pues esta puede no ser correcta. Puede "
+#~ "informar a Linux añadiendo el parámetro %s=%d,%d,%d en la línea de "
+#~ "órdenes. Vea la documentación de LILO o GRUB para obtener más "
+#~ "información. Si cree que la geometría sugerida por Parted es correcta, "
+#~ "puede seleccionar Ignorar para continuar (y arreglar Linux después). De "
+#~ "lo contrario, seleccione Cancelar (y repare Linux y/o la BIOS ahora)."
+
+# tabla de particiones
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "La tabla de particiones en %s es inconsistente. Hay varias razones para "
+#~ "que esto ocurra. Muchas veces, la razón es que Linux detecta la geometría "
+#~ "de la BIOS incorrectamente. Sin embargo, este no parece ser el caso aquí. "
+#~ "Puede estar seguro ignorándolo, pero el ignorarlo puede causar problemas "
+#~ "(reparables) con algunos cargadores de arranque, y puede causar problemas "
+#~ "con sistemas de ficheros FAT. Es recomendable usar LBA."
+
+# partitioning tool -> herramienta de particionado.
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "No se puede alinear correctamente la partición. Esto probablemente "
+#~ "significa que otra herramienta de particionado ha generado una tabla de "
+#~ "la partición incorrecta, porque no tiene correcta la geometría de la "
+#~ "BIOS. Puede estar seguro ignorándolo, pero el ignorarlo puede causar "
+#~ "problemas (reparables) con algunos cargadores de arranque."
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr ""
+#~ "El sistema de ficheros tiene una firma inválida para un sistema de "
+#~ "ficheros FAT."
+
+#~ msgid "START and END are in megabytes\n"
+#~ msgstr "INICIO y FIN son en megabytes\n"
+
+#~ msgid "Partition is being used."
+#~ msgstr "La partición está siendo usada."
+
+#~ msgid "Minor Start End "
+#~ msgstr "Minor Inicio Fin "
+
+#~ msgid "Type "
+#~ msgstr "Tipo "
+
+#~ msgid "Filesystem "
+#~ msgstr "Sistema de ficheros "
+
+#~ msgid "Name "
+#~ msgstr "Nombre "
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ " Tiene particiones FAT Windows que no están usando LBA. Si su BIOS "
+#~ "soporta LBA, debería cambiarse a LBA poniendo el modificador LBA en todas "
+#~ "las particiones FAT. De otro modo, asegúrese de que el sistema operativo "
+#~ "y la BIOS tienen la misma geometría antes de redimensionar cualquiera de "
+#~ "las particiones FAT."
+
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "El sistema operativo opina que la geometría en %s es %d/%d/%d. Por "
+#~ "consiguiente, el cilindro 1024 termina en %.3fM.%s"
+
+# cree, piensa (no sé, eso de "opina" no me pega, ya sé que los ordenadores
+# no piensan ni tienen creencias, pero me pega menos todavía que tengan
+# opiniones).
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "El sistema operativo cree que la geometría en %s es %d/%d/%d.%s"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..5323998
--- /dev/null
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..32cdc0f
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,3379 @@
+# translation of parted to Français.
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur since/depuis 1996.
+# Laurent Marsac <laurent DOT marsac AT laposte DOT net> 2006.
+# Nicolas Provost <nprovost AT quadriv DOT com>, 2011.
+# Stéphane Aulery <lkppo@free.fr>, 2015.
+#
+# Réencodage ISO-8859-1 => UTF-8 et typos, S. Aulery, 2015.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.3.52\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2021-11-21 01:19+0100\n"
+"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
+"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 1.6.10\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument non valide %s pour %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument ambigu %s pour %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Arguments valides :"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "erreur d’écriture"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Erreur système inconnue"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s : l’option « %s%s » est ambiguë\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s : l’option « %s%s » est ambiguë ; valeurs possibles :"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s : option « %s%s » inconnue\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: l’option « %s%s » ne prend pas d’argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s : l’option « %s%s » requiert un argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s : option -- « %c » invalide\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s : cette option requiert un argument -- « %c »\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "»"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Succès"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Pas de correspondance"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Expression régulière incorrecte"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Collation de caractère invalide"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nom de classe de caractères invalide"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Problème d’antislash"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Référence arrière invalide"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [., ou [= non balancées"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( ou \\( non balancées"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ non balancés"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Contenu de \\{\\} invalide"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Fin d’intervalle invalide"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Mémoire épuisée"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "L’expression régulière précédente est incorrecte"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Fin prématurée de l’expression régulière"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Expression régulière trop longue"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") ou \\) non balancées"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Pas d’expression régulière précédente"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[oO]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Empaqueté par %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Empaqueté par %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licence GPLv3+ : GNU GPL version 3 ou ultérieure <%s>\n"
+"Logiciel libre : vous êtes libre de le modifier et de le redistribuer.\n"
+"Il n’y a AUCUNE GARANTIE, dans les limites autorisées par la loi.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Écrit par %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Écrit par %s et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Écrit par %s, %s, et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, %s, et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, %s, %s, et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, et %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Écrit par %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, et d’autres contributeurs.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Rapports de bugs à <%s>\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Envoi des rapports de bugs %s à <%s>\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "page web %s : <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Aide générale des logiciels GNU : <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "mémoire épuisée"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Image Disque"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Erreur pendant l’ouverture de %s : %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Impossible d’ouvrir %s en lecture-écriture (%s). %s a été ouvert en lecture "
+"seule."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s lors d’un positionnement pour lecture sur %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s lors de la lecture sur %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Impossible d’écrire sur %s car il est ouvert en lecture seule."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s lors d’un positionnement pour écriture sur %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s lors de l’écriture sur %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Essayez « %s --help » pour plus d’informations.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Usage : %s [OPTION] [PÉRIPHÉRIQUE]…\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informe le système d’exploitation des changements survenus dans la table de "
+"partitions.\n"
+"\n"
+" -d, --dry-run ne pas informer le système d’exploitation pour le moment\n"
+" -s, --summary affiche un résumé\n"
+" -h, --help affiche l’aide et quitte\n"
+" -v, --version affiche les informations de version et quitte\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Quand aucun PÉRIPHÉRIQUE n’est précisé, teste toutes les partitions.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Envoyer les rapports de bugs à <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Impossible d’ouvrir %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Impossible de tester le stockage."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s essaie de synchroniser %s sur le disque"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Ne peut évaluer le statut du périphérique %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Impossible de déterminer le type dm de %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Impossible de déterminer la taille des secteurs de %s : %s.\n"
+"Utilisation de la taille des secteurs par défaut (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Impossible de déterminer la taille des secteurs physiques de %s.\n"
+"Utilisation de la taille des secteurs logiques (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Impossible de déterminer la taille de %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE générique"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Impossible d’obtenir l’identité du périphérique %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Le périphérique %s a de multiples (%d) secteurs logiques par secteur "
+"physique.\n"
+"GNU Parted supporte cela de manière EXPÉRIMENTALE pour certaines étiquettes "
+"de disque / combinaisons spéciales de systèmes de fichiers, i.e. GPT et "
+"ext2/3.\n"
+"Merci de consulter le site web pour des informations à jour."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Erreur d’initialisation du périphérique SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Le périphérique %s est de si petite taille qu’il ne peut pas stocker un "
+"système de fichiers ou une table de partition. Peut-être avez-vous "
+"sélectionné le mauvais périphérique ?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Impossible de déterminer la géométrie du fichier/périphérique %s. Vous ne "
+"devriez pas utiliser Parted sans VRAIMENT savoir ce que vous faites !"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Carte de stockage SD/MMC générique"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Périphérique NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Contrôleur RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Périphérique Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Périphérique ATA sur Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Disque IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Contrôleur ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Contrôleur I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Périphérique Loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Mappeur de périphériques Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Périphérique par blocs virtuel Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Périphérique par blocs Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Grappe RAID logiciel Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Type de périphérique non pris en charge"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Erreur de synchronisation/fermeture %s : %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s fin de fichier atteinte en lisant %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Erreur lors de la transmission au noyau des modifications de la partition %s "
+"- %s. Cela signifie que Linux ne reconnaîtra aucun des changements faits sur "
+"%s avant de redémarrer - vous ne devriez donc pas le monter ou l’utiliser "
+"avant de redémarrer."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Impossible de déterminer le début et la taille de %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"La ou les partitions %s ont été écrites sur %s, mais il est impossible "
+"d’informer le système des changements, sans doute à cause de leur "
+"utilisation. Ainsi, les anciennes partitions restent en usage. Vous devriez "
+"redémarrer maintenant avant d’effectuer d’autres changements."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"La fin ne peut pas être avant le début ! (secteur début=%jd longueur=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"Tentative d’écriture des secteurs %ld-%ld en dehors de la partition sur %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "recherche de blocs défectueux"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace : %d appels sur la pile :\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Assertion (%s) à %s : échec de %d dans la fonction %s()."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s : étiquette de disque inconnue"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Cette librairie « libparted » n’a pas de prise en charge pour l’écriture sur "
+"%s. Peut-être a-t-elle été compilée en lecture seulement."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "La partition %d est %s mais le système de fichiers est %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "alignement_cylindre"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Drapeau de partition inconnu, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr ""
+"Les étiquettes du disque %s ne prennent pas en charge les partitions "
+"étendues."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"Les étiquettes du disque %s ne prennent pas en charge les partitions "
+"logiques ou étendues."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Trop de partitions primaires."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Impossible d’ajouter une partition logique sur %s parce qu’il n’y a pas de "
+"partition étendue."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Impossible d’avoir plus d’une partition étendue sur %s"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+"Impossible d’avoir des partitions logiques en dehors de la partition étendue."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Impossible d’avoir une partition logique en dehors de la partition étendue "
+"sur %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr ""
+"Impossible d’avoir une partition primaire à l’intérieur d’une partition "
+"étendue."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Impossible d’avoir une partition en dehors du disque !"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Impossible d’avoir des partitions qui se chevauchent."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "méta-données"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "libre"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "étendue"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logique"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primaire"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "démarrage"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "racine"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "caché"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Drapeau de partition inconnu, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Information"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Avertissement"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Erreur"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatale"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Pas d’implémentation"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Réparer"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Oui"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Non"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Réessayer"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Annuler"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Une anomalie a été détectée dans GNU Parted. Reportez-vous au site de Parted "
+"http://www.gnu.org/software/parted/parted.html pour plus d’informations sur "
+"ce qui pourrait être utile pour le signalement de l’anomalie ! Veuillez "
+"rapportez celle-ci à %s en précisant au moins la version (%s) et le message "
+"suivant : "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"La prise en charge en lecture du système de fichiers AIX n’est pas encore "
+"implanté."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"La prise en charge de l’écriture du système de fichiers AIX n’est pas encore "
+"implanté."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"La prise en charge de la création de partitions AIX n’est pas encore "
+"implanté."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"La prise en charge de la copie de partitions AIX n’est pas encore implanté."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"La prise en charge du type de système de configuration des partitions dans "
+"les étiquettes de disque AIX n’est pas encore implanté."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"La prise en charge de la modification des drapeaux dans les étiquettes de "
+"disque AIX n’est pas encore implanté."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Impossible d'utiliser une table de partitions Atari sur des disques dont la "
+"taille de secteur n’est pas égale à %d octets."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Impossible de satisfaire toutes les contraintes sur la partition."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Impossible d’allouer un numéro de partition."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Impossible d’allouer l’entrée d’une étiquette de disque BSD."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Impossible d’allouer l’entrée d’une étiquette de disque DASD."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Table de partition invalide sur %s - signature erronée %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Table de partition invalide - partition récursive sur %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted ne peut redimensionner les partitions gérées par Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "impossible de créer davantage de partitions"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s n’a pas de partition étendue (partition d’en-tête de volume)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"La somme de contrôle est erronée, cela indique que la table de partition est "
+"corrompue."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Seules les partitions primaires peuvent être des partitions racines."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Seules les partitions primaires peuvent être des partitions d’échange."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Seules les partitions logiques peuvent être amorçables."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"impossible de fixer le nom de la partition dvh en %s :\n"
+"Seules les partitions logiques (d’amorçage) ont un nom."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Trop de partitions primaires"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "erreur d’ouverture"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "erreur de positionnement"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "erreur de lecture"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "erreur ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "mauvaise version d’API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Type de disque non pris en charge"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Format de disque non pris en charge"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disque en cours d’utilisation"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Erreur de syntaxe dans le fichier de configuration"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Etiquette de volume corrompue"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Un nom de lot de données est corrompu"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Échec d’une allocation de mémoire"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Échec de vérification du périphérique"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Le périphérique spécifié n’est pas un périphérique DASD valide"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Erreur fatale"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Pas de place pour l’étiquette de volume."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Pas de place pour les informations de partition."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Table de volume (VTOC) incorrecte."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Impossible de détecter la version de l’API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"La version courante de l’API « %d » ne correspond pas avec celle du pilote "
+"DASD « %d » !"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Impossible de lire la taille du disque."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Impossible d’analyser la géométrie du disque."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Impossible de trouver la taille de bloc."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "périphérique trop petit pour GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Le format de la table de partitions GPT est de version %x, ce qui est plus "
+"récent que ce que Parted peut reconnaître. SVP prévenez-nous !"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Il semble que l’espace disponible sur %s ne soit pas totalement utilisé, "
+"voulez-vous ajuster la table GPT pour utiliser tout l’espace (%llu blocs en "
+"plus) ou continuer ainsi ?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"La sauvegarde de la table GPT n’est pas à la fin du disque ainsi qu’elle le "
+"devrait. Faut-il corriger en déplaçant la copie à la fin du disque (et "
+"enlever la vieille sauvegarde) ?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Les tables GPT primaire et secondaire (sauvegarde) sont corrompues toutes "
+"les deux. Essayer d’écrire une nouvelle table et d’utiliser le mode de "
+"secours de Parted pour récupérer les partitions."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"La sauvegarde de table GPT est corrompue mais l’originale semble valide et "
+"sera donc utilisée."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"La table primaire GPT est corrompue mais sa sauvegarde semble valide, elle "
+"sera donc utilisée."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "erreur CRC sur la table primaire de partitions"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "échec de traduction du nom de partition"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Signature %x invalide pour une étiquette de disque Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "La table de partitions n’a pas d’entrée de table de partition !"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s est trop petit pour une étiquette de disque Mac !"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "La partition %d a une signature %x invalide."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "La partition %d a une longueur invalide de 0 octet !"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "La zone de données ne commence pas au début de la partition."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr ""
+"La zone d’amorce de la partition ne couvre pas entièrement la partition."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr ""
+"La zone de données de la partition ne couvre pas entièrement la partition."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Taille bizarre de bloc sur le descripteur de périphérique : %d octets n’est "
+"pas divisible par 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Le descripteur du pilote indique une taille physique de bloc de %d octets, "
+"mais Linux lui indique %d octets."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Aucune table de partitions valide n’a été trouvée."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Tailles conflictuelles des entrées de la table de partition ! L’entrée 1 "
+"indique %d alors que l’entrée %d indique %d !"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Bizarre - Il y a 2 entrées de table de partitions !"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Changer le nom d’une partition racine (root) ou d’échange (swap) empêchera "
+"Linux de les reconnaître en tant que telles."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Impossible d’ajouter une autre partition - la table de partition est trop "
+"petite !"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Table de partition invalide sur %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"La partition %d n’est pas alignée sur une frontière de cylindre. Ce cas de "
+"figure n’est pas pris en charge."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Impossible d’ajouter une autre partition."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"la longueur de la partition, %jd secteurs, excède le max. imposée par la "
+"table de partitions %s : %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"le numéro du secteur de départ %jd excède le max. imposée par la table de "
+"partitions %s : %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Mauvaise somme de contrôle sur le bloc %llu de type %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+"%s : Impossible de trouver le bloc RDB, cela ne devrait jamais arriver."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Boucle détectée sur le bloc %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : La liste %s semble être erronée sur le bloc %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Impossible de détecter les blocs défectueux"
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Impossible de lister les blocs de la partition."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Impossible de lister les blocs du système de fichiers."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Impossible de lister les blocs de démarrage."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Impossible d’écrire le bloc descripteur de partition sur %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Étiquette de disque Sun corrompue."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"La géométrie CHS du disque (%d,%d,%d) donnée par le système d’exploitation "
+"ne concorde pas avec la géométrie stockée sur l’étiquette de disque (%d,%d,"
+"%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "L’étiquette de disque décrit un disque plus gros que %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+"Le disque a %d cylindres, ce qui est plus grand que le maximum : 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"La partition représentant le disque entier est la seule encore disponible. "
+"Généralement, ce n’est pas une bonne idée d’écraser cette partition avec une "
+"vraie. Solaris ne pourra pas démarrer sans elle et SILO (le gestionnaire de "
+"démarrage sur Sparc) en a besoin."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "L’étiquette de disque Sun est remplie."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "échec de l’ouverture du périphérique"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "erreur de positionnement sur le périphérique"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "échec d’écriture sur le périphérique"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "échec de lecture sur le périphérique"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Impossible de lire l’étiquette du volume."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Impossible d’écrire l’étiquette du volume."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Impossible de lire les étiquettes de la table de volume (VTOC)."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Impossible de lire la table de volume VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Impossible de lire la table de volume VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Impossible de lire la table de volume VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Impossible de lire la table de volume VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Impossible d’écrire les étiquettes de la table de volume (VTOC)."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Impossible d’écrire la table de volume VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Impossible d’écrire la table de volume VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Impossible d’écrire la table de volume VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Impossible d’écrire la table de volume VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Impossible d’écrire VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Mémoire insuffisante."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Impossible d’obtenir la taille de l’unité spéciale « COMPACT »."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "« %s » a une syntaxe de localisation invalide."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Le nombre maximum de têtes est %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Le nombre maximum de secteurs est %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "La localisation %s est en dehors du périphérique %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Nombre invalide."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Utiliser une unité plus petite à la place d’une valeur inférieure à 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Impossible d’allouer un bloc de partition\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Impossible d’allouer un bloc\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Impossible de lire le bloc de démarrage %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Impossible de lire le bloc racine %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Impossible d’allouer un élément de la liste des identifiants\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : impossible de lire le bloc %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Mauvaise somme de contrôle sur le bloc %llu de type %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : impossible d’écrire le bloc %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : impossible d’allouer le bloc RDB spécifique\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+"%s : impossible de trouver le bloc RDB, cela ne devrait jamais arriver\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Impossible de lire les blocs de la partition %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted a été mal compilé : le secteur d’amorce FAT devrait être de 512 "
+"octets. La prise en charge du système de fichiers FAT sera désactivée."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"Le système de fichiers a une signature invalide pour un système de fichiers "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Le système de fichiers a une taille de secteur invalide pour un système de "
+"fichiers FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Le système de fichiers a une taille de cluster invalide pour un système de "
+"fichiers FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Le système de fichiers a un nombre invalide de secteurs réservés pour un "
+"système de fichiers FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Le système de fichiers a un nombre incorrect de tables FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"La géométrie du système de fichier CHS est (%d, %d, %d), ce qui est "
+"invalide. La géométrie CHS de la table de partitions est (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Le secteur d’amorce FAT indique une taille de secteur logique de 0. Ceci est "
+"bizarre."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Le secteur d’amorce FAT indique qu’il n’y a pas de tables FAT. Ceci est "
+"bizarre."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Le secteur d’amorce FAT indique des clusters ayant 0 secteur. Ceci est "
+"bizarre."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Le système de fichiers est FAT12, lequel n’est pas prise en charge."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Signature de partition d’échange Linux (swap) de type ancien non reconnue "
+"« %10s »."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Signature de partition d’échange Linux (swap) de type nouveau non reconnue "
+"« %10s »."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr ""
+"Signature de partition d’échange Linux (swap) de type swsusp non reconnue "
+"« %9s »."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted ne peut utiliser des systèmes de fichiers HFS sur les disques dont la "
+"taille des secteurs n’est pas égale à %d octets."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"La géométrie CHS du système de fichiers est (%d, %d, %d), ce qui est "
+"invalide. La géométrie CHS de la table des partitions est (%d, %d, %d). Si "
+"vous choisissez d’ignorer (Ignore), la géométrie CHS du système de fichiers "
+"restera inchangée. Si vous choisissez de réparer (Fix), la géométrie CHS du "
+"système de fichiers sera modifiée de manière à concorder avec la géométrie "
+"CHS de la table des partitions."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"L’information de secteur contient une signature erronée (%x). Sélectionner « "
+"annuler » (cancel) pour le moment et transmettre un rapport d’anomalie. Si "
+"vous êtes désespéré, il est probablement prudent de sélectionner « ignorer »."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Vous avez besoin de %s d’espace libre pour réduire cette partition à cette "
+"taille. Pour l’instant il n’y a que de %s de libre."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Delta de départ du cluster = %d , lequel n’est pas un multiple de la taille "
+"d’un cluster %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrée de répertoire erronée pour %s : le premier cluster est à la fin du "
+"marqueur de fichiers."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Table FAT erronée : chaîne non terminée pour %s. Vous devriez exécuter "
+"dosfsck ou scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Table FAT erronée : le cluster %d est en dehors du système de fichiers dans "
+"la chaîne associée à %s. Vous devriez exécuter dosfsck ou scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Table FAT erronée : le cluster %d a des liens croisés pour %s. Vous devriez "
+"exécuter dosfsck ou scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s est %dk, mais il a %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr ""
+"La partition est trop grande ou trop petite pour un système de fichiers %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Les tables FAT ne concordent pas. Si vous ne savez pas ce que cela signifie "
+"alors sélectionnez « annuler » (cancel) et exécutez scandisk sur le système "
+"de fichiers, puis réessayez."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Il n’y a pas de configuration possible pour ce type FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Le système de fichiers ne correspond pas à des tailles compatibles avec "
+"Windows. La taille du cluster est %dk (%dk attendu). Le nombre de clusters "
+"est %d (%d attendu). La taille des FAT est de %d secteurs (%d attendu)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Le système de fichiers annonce un espace libre de %d clusters et non pas %d "
+"clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Il n’y a pas assez d’espace dans le répertoire racine (root) pour tous les "
+"fichiers. Soit annuler (cancel), soit ignorer (ignore) avec perte de "
+"fichiers."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Erreur d’écriture du répertoire racine (root)."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Si vous conservez votre système de fichiers en FAT16, vous n’aurez pas de "
+"problème."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Si vous convertissez le système de fichiers en FAT16 et que MS WIndows est "
+"installé sur cette partition alors vous devrez réinstaller le gestionnaire "
+"de démarrage de MS Windows. Si vous désirez faire cela, vous devriez "
+"consulter le manuel de Parted (ou le manuel de votre distribution)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Si vous conservez votre système de fichiers en FAT32 alors vous "
+"n’introduirez pas de nouveaux problèmes."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Si vous convertissez en FAT32 et que MS Windows est installé sur cette "
+"partition, alors vous devrez réinstaller le gestionnaire de démarrage de MS "
+"Windows. Si vous désirez faire cela, vous devriez consulter le manuel de "
+"Parted (ou le manuel de votre distribution). Notez que la conversion en "
+"FAT32 rendra le système de fichiers illisible par MS DOS, MS Windows 95a et "
+"MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Voulez-vous utiliser FAT32 ?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Le système de fichiers peut seulement être redimensionné à cette taille en "
+"le convertissant en FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Le système de fichiers peut seulement être redimensionné à cette taille en "
+"le convertissant en FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted ne peut redimensionner cette partition à cette taille. Nous y "
+"travaillons !"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"La table FAT %d du média %x ne concorde pas avec le secteur d’amorce du "
+"média %x. Vous devriez probablement exécuter scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set : cluster %ld en dehors du système de fichiers"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get : cluster %ld en dehors du système de fichiers"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster : pas de cluster disponible"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Impossible de détecter le système de fichiers."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"la modification de la taille du système de fichiers %s n’est pas prise en "
+"charge"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Le système de fichiers est plus gros que le volume physique !"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Le système de fichiers contient des erreurs."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Les blocs défectueux ne peuvent pas être lus."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Tentative d’enregistrement d’une zone débutant au bloc 0x%X, mais une autre "
+"existe déjà à cette position. Vous devriez vérifier le système de fichiers !"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Tentative de déplacement d'une zone du bloc 0x%X au bloc 0x%X, mais une "
+"autre existe déjà à cette position. Cela ne devrait pas arriver !"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Impossible de mettre à jour le cache des fragments du fichier HFS ayant le "
+"CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+"Tentative de lecture d’un fichier HFS ayant un CNID %X après la fin du "
+"fichier."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Impossible de trouver le secteur %lli du fichier HFS ayant le CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+"Tentative d’écriture d’un fichier HFS ayant un CNID %X après la fin du "
+"fichier."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Impossible de mettre à jour le cache des fragments du fichier HFS+ ayant le "
+"CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Tentative de lecture d’un fichier HFS+ ayant un CNID %X après la fin du "
+"fichier."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+"Impossible de trouver le secteur %lli du fichier HFS+ ayant le CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Tentative d’écriture d’un fichier HFS+ ayant un CNID %X après la fin du "
+"fichier."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+"Désolé, le système de fichiers HFS ne peut être redimensionné de cette "
+"manière pour le moment."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "réduction en cours"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Le déplacement des données a échoué."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"Le déplacement des données a laissé certaines données à la fin du volume."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "écriture du Master Directory Block HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Aucune signature HFS[+X] valide n’a été trouvée lors de l’ouverture."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "La version %d du système de fichiers HFS+ n’est pas prise en charge."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "La version %d du système de fichiers HFSX n’est pas prise en charge."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"Le déplacement des données a laissé certaines données à la fin du volume."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Erreur lors de l’écriture du fichier d’allocation."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+"Erreur durant l’écriture de la zone de compatibilité du fichier d’allocation."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "écriture de l’entête de volume HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"Une erreur est survenue lors de la recherche du fichier de gestion des blocs "
+"défectueux."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Il semble qu’il y ait une erreur dans le gestionnaire HFS : le fichier des "
+"blocs défectueux contient le volume HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+"Désolé, le système de fichiers HFS+ ne peut être redimensionné de cette "
+"manière pour le moment."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "réduction du volume HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Le redimensionnement du volume HFS+ a échoué."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "réajustement du conteneur HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "La mise à jour du conteneur HFS a échoué."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Ceci n’est pas un test réel de %s. Il s’agit d’extraire des fichiers "
+"spéciaux de bas niveau pour débogage."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Mauvaise somme de contrôle de l’entête de la liste des blocs."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Taille de bloc de transaction invalide durant le ré-exécution d’après le "
+"journal (%i octets)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Le placement du journal à l’extérieur du volume n’est pas pris en charge. "
+"Essayez de désactiver la journalisation et de relancer Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Le déplacement ou la taille du journal n’est pas un multiple de la taille "
+"d’un secteur."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valeurs magiques incorrectes dans l’entête du journal."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Erreur de correspondance de la taille du journal entre le bloc d’information "
+"du journal et l’entête du journal."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"Certains champs de l’entête ne sont pas des multiples de la taille du "
+"secteur."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"La taille de secteur stockée dans le journal n’est pas 512 octets. Parted ne "
+"prend pas en charge que les secteurs dont la taille est 512 octets."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Mauvaise somme de contrôle du journal."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Le journal n’est pas vide. Parted doit rejouer les transactions avant "
+"d’ouvrir le système de fichiers. Cela modifiera le système de fichiers."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"L’entête du volume ou le master directory block a changé pendant le ré-"
+"exécution d’après le journal. Vous devriez relancer Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Une zone n’a pas été réallouée."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Une référence à une zone correspond à une localisation qui ne devrait pas y "
+"être associée. Vous devriez vérifier le système de fichiers."
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"Ce volume HFS n’a pas de fichier catalogue. C’est vraiment inhabituel !"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ce volume HFS n’a pas de fichier de zones additionnelles. C’est plutôt "
+"inhabituel !"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Le fichier de zones additionnelles ne devrait pas contenir sa propre zone ! "
+"Vous devriez vérifier le système de fichiers."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Impossible d’indexer le système de fichiers en mémoire."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "La liste des blocs défectueux ne peut être chargée."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Une erreur est survenue pendant le déplacement de la zone."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Ce volume HFS+ n’a pas de fichier catalogue. C’est vraiment inhabituel !"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ce volume HFS+ n’a pas de fichier de zones additionnelles. C’est plutôt "
+"inhabituel !"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "affiche ce message d’aide"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "liste la structure des partitions sur tous les périphériques par blocs"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "sortie dans un style lisible par une machine"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "sortie dans un style lisible par une machine"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "ne demande jamais l’intervention de l’utilisateur"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "affiche la version"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "alignement des nouvelles partitions"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMÉRO est le numéro de partition utilisé par Linux. Avec une étiquette de "
+"disque MS-DOS, les partitions primaires sont numérotées de 1 à 4 et les "
+"partitions logiques à partir de 5.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE est une des valeurs : "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "DRAPEAU est une des valeurs : "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNITÉ est parmi : "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "alignement souhaité : minimum ou optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE est une des valeurs : primaire, logique, étendue\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYPE est parmi : "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"DEBUT et FIN sont des emplacements sur un disque, comme 4GB ou 10%. Les "
+"valeurs négatives se comptent à partir de la fin du disque. Par exemple, "
+"=-1s spécifie précisément le dernier secteur.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"FIN est un emplacements sur un disque, comme 4GB ou 10%. Une valeur négative "
+"se compte à partir de la fin du disque. Par exemple, -1s spécifie "
+"précisément le dernier secteur.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ÉTAT est une des valeurs : on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "PÉRIPHÉRIQUE est habituellement du genre /dev/hda ou /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOM est un mot de votre choix\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Ce programme est un logiciel libre, sous la Licence Publique Générale GNU "
+"(GNU General Public License).\n"
+"Ce programme est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE "
+"GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou DE "
+"CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la Licence Publique Générale "
+"GNU pour plus de détails.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(temps restant %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"La partition %s est en cours d’utilisation. Êtes vous certain de vouloir "
+"continuer ?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Au moins une partition de %s est en cours d’utilisation."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Le type du disque %s va être effacé et toutes les données vont être perdues. "
+"Voulez-vous continuer ?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Nouveau type d’étiquette de disque ?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Type de partition ?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nom de la partition ?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Type de système de fichiers ?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Début ?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Fin ?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Vous voulez établir une partition de %s à %s (secteurs %llu..%llu).\n"
+"La position la plus proche gérable est %s à %s (secteurs %llu..%llu). %s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Est-ce acceptable pour vous ?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"L’alignement de la partition ainsi définie n’est pas optimal au niveau "
+"performance : %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr ""
+"Les étiquettes du disque %s ne prennent pas en charge les noms de partition."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Numéro de partition ?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr ""
+"Les étiquettes du disque %s ne prennent pas en charge les noms de partition."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Type de partition ?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Nombre invalide."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Type de partition ?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Nombre invalide."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Géométrie BIOS cylindre,tête,secteur : %d,%d,%d. Chaque cylindre : %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modèle : %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disque %s : %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Taille des secteurs (logiques/physiques) : %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Table de partitions : %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Drapeaux de disque : %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Numéro"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Début"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fin"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Taille"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Type"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Système de fichiers"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nom"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Drapeaux"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Espace libre"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Une partition %s %s a été localisée de %s à %s. Voulez-vous l’ajouter à la "
+"table de partition ?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "recherche des systèmes de fichiers"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "La commande de redimensionnement a été supprimer dans Parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Réduire une partition peut causer une perte de données ; Êtes vous certain "
+"de vouloir continuer ?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nouveau périphérique ?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "type d’alignement (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d aligné(es)\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d non aligné(es) : %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Drapeaux à basculer ?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nouvel état ?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Unité ?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "vérifier-align"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"vérifier-align TYPE N contrôle l’alignement de TYPE(min|"
+"opt) de la partition N"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "aide"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMMANDE] affiche l’aide générale ou l’aide "
+"concernant la COMMANDE"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable LABEL-TYPE crée une nouvelle étiquette de "
+"disque (table de partition)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYPE [FS-TYPE] DEBUT FIN créer une partition"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"« mkpart » crée une partition sans créer un nouveau système de fichiers sur "
+"la partition. FS-TYPE doit être spécifié pour initialiser le type de "
+"partition approprié.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "nommer"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMÉRO NOM donner un NOM à la partition NUMÉRO"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "afficher"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|NUMÉRO] affiche la table des partitions, "
+"les périphériques disponibles, l’espace libre, toutes les partitions ou une "
+"partition précise"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Sans argument, « print » affiche toute la table de partitions. Toutefois "
+"avec les arguments suivants, elle permet bien d’autres actions.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : affiche tous les périphériques par blocs actifs\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : affiche l’information sur l’espace libre non partitionné du "
+"périphérique courant\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list,all : afficher la table de partitions de tous les périphériques par "
+"blocs actifs\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quitter"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit quitter le programme"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue DEBUT FIN restaurer une partition perdue "
+"entre DEBUT et FIN"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "redimentionner"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "La commande de redimensionnement a été supprimée dans Parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "redimpart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "redimpart NUMÉRO FIN redim partition NUMÉRO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMÉRO détruire partition NUMÉRO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "sélectionner"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"choisir PÉRIPHÉRIQUE choisir le périphérique à modifier"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disque_choix"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disque_choix DRAPEAU ÉTAT modifier le DRAPEAU du périphérique "
+"choisi"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disque_basculer"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disque_basculer [DRAPEAU] basculer l’état du drapeau du "
+"périphérique choisi"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "positionner"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMÉRO DRAPEAU ÉTAT modifier le DRAPEAU de la partition "
+"NUMÉRO"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "basculer"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"basculer [NUMÉRO [DRAPEAU]] basculer l’état du DRAPEAU de la "
+"partition NUMÉRO"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unité"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unité UNITÉ définie l’unité par défaut à UNITÉ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version affiche la version courante de GNU "
+"Parted ainsi que l’information sur le copyright"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"« version » affiche le copyright et la version de cette copie de GNU Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Usage : %s [-hlmsv] [-a <alignement>] [PÉRIPHÉRIQUE [COMMANDE "
+"[PARAMÈTRES]]…]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Aucun périphérique trouvé"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"ATTENTION : vous n’êtes pas superutilisateur. Contrôlez les permissions.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Vous devriez réinstaller le gestionnaire de démarrage avant de redémarrer. "
+"Consultez la section 4 de la documentation utilisateur de Parted pour plus "
+"d’informations."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Ne pas oublier de mettre à jour /etc/fstab si nécessaire.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Bienvenue sur GNU Parted ! Tapez « help » pour voir la liste des commandes.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Usage : parted [OPTION]… [PÉRIPHÉRIQUE [COMMANDES[PARAMÈTRES]…]…]\n"
+"Appliquer les COMMANDES avec les PARAMÈTRES au PÉRIPHÉRIQUE. Si aucune "
+"COMMANDE n’est fournie\n"
+"l’exécution se fait en mode interactif.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Vous avez trouvé un bug dans GNU Parted ! Voici ce que vous devez faire :\n"
+"\n"
+"Ne paniquez pas ! Le bug n’a probablement pas affecté vos données.\n"
+"Aidez nous à le résoudre en faisant ce qui suit:\n"
+"\n"
+"Vérifiez si le bug n’a pas déjà été résolu dans la dernière version de GNU\n"
+"Parted que vous pouvez trouver à l’adresse :\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"SVP vérifiez cette version avant de reporter tout bug.\n"
+"\n"
+"S’il n’a pas encore été résolu ou si vous ne savez pas comment vérifier,\n"
+"SVP visitez le site web de GNU Parted :\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"pour plus d’informations.\n"
+"\n"
+"Votre rapport doit contenir la version de cette release (%s)\n"
+"accompagnée du message d’erreur ci-dessous, le résultat de\n"
+"\n"
+"\tparted PÉRIPHÉRIQUE unit co print unit s print\n"
+"\n"
+"et l’historique des commandes saisies.\n"
+"Plus toutes les informations supplémentaires que vous trouverez importantes "
+"à propos de votre configuration.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Historique des commandes :\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Erreur : SEGV_MAPERR (l’adresse n’est pas associée à un objet)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Erreur : SEGV_ACCERR (permissions invalides pour l’objet associé)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Erreur : un signal SIGSEGV général est survenu.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Erreur : FPE_INTDIV (Entier : division par zéro)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Erreur : FPE_INTOVF (Entier : dépassement)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Erreur : FPE_INTDIV (division par zéro en nombres flottants)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Erreur : FPE_FLTOVF (Flottant : dépassement)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Erreur : FPE_FLTUND (Flottant: dépassement de précision)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Erreur : PE_FLTRES (Flottant : résultat inexact)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Erreur : FPE_FLTINV (Flottant : opération invalide)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Erreur : FPE_FLTSUB (Flottant: débordement de plage)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Erreur : Un signal SIGFPE général est survenu."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Erreur : ILL_ILLOPC (Opcode illégal)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Erreur : ILL_ILLOPN (Opérande illégal)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Erreur : ILL_ILLADR (Mode d’adressage illégal)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Erreur : ILL_ILLTRP (Déroutement illégal)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Erreur : ILL_PRVOPC (Opcode privilégié)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Erreur : ILL_PRVREG (Registre privilégié)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Erreur : ILL_COPROC (Erreur du coprocesseur)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Erreur : ILL_BADSTK (Erreur de pile interne)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Erreur : un signal SIGILL général est survenu."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "élément incorrect : %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Numéro de partition attendu."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "La partition n’existe pas."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Type de système de fichiers attendu."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Type de système de fichiers inconnu « %s »."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Type d’étiquette de disque attendu."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Impossible d’ajouter de nouvelle partition."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Type de partition attendu."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPTIONS :"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMMANDES :"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Rapporter les anomalies à %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Utilisation de %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Cette commande n’a pas de sens en mode non-interactif.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Les partitions étendues ne peuvent être cachées sur les disques étiquetés "
+#~ "MS-DOS."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Les partitions étendues ne peuvent être récupérés sur les disques "
+#~ "étiquetés MS-DOS."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMÉRO : affiche les informations détaillées sur la partition "
+#~ "désignée\n"
diff --git a/po/fur.gmo b/po/fur.gmo
new file mode 100644
index 0000000..2a3358b
--- /dev/null
+++ b/po/fur.gmo
Binary files differ
diff --git a/po/fur.po b/po/fur.po
new file mode 100644
index 0000000..cc1c550
--- /dev/null
+++ b/po/fur.po
@@ -0,0 +1,3415 @@
+# Friulian translation for the parted package
+# Copyright (C) 2019 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Fabio Tomat <f.t.public@gmail.com>, 2023.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2023-01-31 13:46+0100\n"
+"Last-Translator: Fabio T. <f.t.public@gmail.com>\n"
+"Language-Team: Friulian <f.t.public@gmail.com>\n"
+"Language: fur\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Editor: HaiPO 1.4 beta\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argoment %s no valit par %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argoment %s ambigui par %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "I argoments valits a son:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "erôr di scriture"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Erôr di sisteme no cognossût"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: la opzion ''%s%s' e je ambigue\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: la opzion '%s%s' e je ambigue; pussibilitâts:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opzion '%s%s' no ricognossude\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: la opzion '%s%s' no permet un argoment\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: la opzion '%s%s' e à bisugne di un argoment\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opzion --'%c' no valide\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: la opzion e à bisugne di un argoment --'%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "\\"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "\\"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Sucès"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nissune corispondence"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Espression regolâr no valide"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Caratar di confront no valit"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Non de classe dal caratar no valit"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Sbare contrarie finâl"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Riferiment indaûr no valit"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [., o [= cence corispondence"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( o \\( c vence corispondence"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ cence corispondence"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Contignût di \\{\\} no valit"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Limit massim no valit"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memorie esauride"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Espression regolâr precedente no valide"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Fin premadure de espression regolâr"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Espression regolâr masse grande"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") o \\) cence corispondence"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Nissune espression regolâr precedente"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[sSyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Impachetât di %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Impachetât di %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licence GPLv3+: GNU GPL version 3 o sucessive <%s>.\n"
+"Chest al è software libar: tu sês libar di cambiâlu e tornâ a distribuîlu.\n"
+"No je NISSUNE GARANZIE, te misure consintude de leç.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Scrit di %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Scrit di %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Scrit di %s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s, %s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Scrit di %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s e altris.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Segnale i erôrs a: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Segnale i erôrs di %s a: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Sît web di %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Jutori gjenerâl par doprâ software GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memorie esauride"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Imagjin disc"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Erôr tal vierzi %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Impussibil vierzi %s in leture-scriture (%s). %s al è stât viert in "
+"modalitât dome-leture."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s dulinvie il plaçament pe leture su %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s dulinvie la leture su %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Impussibil scrivi su %s parcè che al è viert in modalitât dome-leture."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s dulinvie il plaçament pe scriture su %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s dulinvie la scriture su %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prove \\\"%s --help\\\" par vê plui informazions.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Ûs: %s [OPZION] [DISPOSITÎF]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informe il sisteme operatîf su lis modifichis de tabele des partizions.\n"
+"\n"
+" -d, --dry-run no sta informâ il sisteme operatîf\n"
+" -s, --summary stampe une sisntesi dai contignûts\n"
+" -h, --help mostre chest jutori e jes\n"
+" -v, --version stampe la version e jes\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Cuant che nol ven furnît nissun DISPOSITÎF, al scandaie dutis lis "
+"partizions.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Segnale i erôrs a <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Impussibil vierzi %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Impussibil scandaiâ il dispositîf di archiviazion."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"ATENZION: il kernel nol è rivât a tornâ a lei la tabele des partizions su %s "
+"(%s). Par chel al podarès no rifleti dutis lis modifichis fin dopo che il "
+"sisteme nol ven tornât a inviâsi."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Atenzion: impussibil vierzi %s (%s). Par chel, al podarès no rifleti dutis "
+"lis modifichis fin dopo che il sisteme al ven tornât a inviâsi."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Atenzion: nol è stât pussibil fâ sparî il tradutôr su %s (%s). Par chel, al "
+"podarès no rifleti dutis lis modifichis fin dopo che il sisteme al ven "
+"tornât a inviâsi."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s tal tentatîf di sincronizâ %s sul disc"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Impussibil fâ il stat dal dispositîf %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Impussibil determinâ il gjenar di dm di %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Impussibil determinâ la dimension dal setôr par %s: %s.\n"
+"Si dopre la dimension di setôr predefinide (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Impussibil determinâ la dimension dal setôr fisic par %s.\n"
+"Si dopre la dimension dal setôr logjic (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Impussibil determinâ la dimension di %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE gjeneric"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Impussibil otignî la identitât dal dispositîf %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Il dispositîf %s al à multiplis (%d) setôrs logjics par ogni setôr fisic.\n"
+"Il supuart a cheste configurazion al è SPERIMENTÂL in GNU Parted e dome par "
+"cualchi cumbinazion di gjenars di etichetis/filesystem, p.e. GPT e ext2/3.\n"
+"Par vê informazions inzornadis, consultâ il sît web."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Erôr tal inizializâ il dispositîf SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Il dispositîf %s al è cussì piçul che forsit nol pues contignî un file "
+"system o une tabele des partizions. Isal stât selezionât il dispositîf "
+"sbaliât?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Impussibil determinâ la gjeometrie dal file/dispositîf %s. No si varès di "
+"doprâ Parted a mancul che no si savedi PARDABON ce che si sta fasint!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Schede di archiviazion SD/MMC gjeneriche"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Dispositîf NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controller DAC960 RAID"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Dispositîf Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Dispositîf ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Unitât IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Dispositîf NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controller ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controller I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode UBD Linux Modalitât-Utent"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Dispositîf di loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Device-mapper Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Dispositîf a blocs Xen Virtual"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "No cognossût"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Dispositîf a blocs Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Array RAID Software Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Unitât RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Gjenar di dispositîf no supuartât"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Erôr tal fsync o tal sierâ %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s fin dal file intant che si leieve %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Erôr tal informâ il kernel su lis modifichis ae partizion %s -- %s. Chest "
+"al significhe che Linux nol savarà nuie su lis modifichis fatis a %s "
+"fintremai che no si torne a inviâ il sisteme -- duncje nol è il câs di "
+"montâlu o doprâlu in nissune maniere prime di ve tornât a inviâ il sisteme."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Impussibil determinâ l'inizi e la lungjece di %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Lis partizions %s su %s a son stadis scritis, ma no ven podût informâ il "
+"kernel de modifiche, forsit parcè che a son in ûs. Duncje a restin in vore "
+"lis vecjis partizions. Tu varessis di tornâ a inviâ cumò prime di fâ "
+"ulteriôrs modifichis."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Impussibil vê la fin prime dal inizi! (setôr di inizi=%jd lungjece=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Tentatîf di scrivi i setôrs %ld-%ld fûr de partizion su %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "control dai blocs ruvinâts"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace al à %d clamadis sul stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "La declarazion (%s) in %s:%d inte funzion %s() falide."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: etichete dal disc no ricognossude"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Chest libparted nol à il supuart pe scriture par %s. Forsit al è stât "
+"compilât in dome-leture."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "La partizion %d e je %s, ma il filesystem al è %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Opzion/flag disc no cognossude, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Lis etichetis dai discs %s no supuartin partizions estesis."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"Lis etichetis dai discs %s no supuartin lis partizions logjichis o estesis."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Masse partizions primariis."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Impussibil zontâ une partizion logjiche a %s, parcè che no je nissune "
+"partizion estese."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "No si pues vê plui di une partizion estese su %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "No si pues vê partizions logjichis fûr de partizion estese."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "No si pues vê une partizion logjiche fûr de partizion estese su %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "No si pues vê une partizion primarie dentri di une partizion estese."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "No si pues vê une partizion fûr dal disc!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "No si pues soreponi lis partizions."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadâts"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "libar"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "estese"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logjiche"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primarie"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "inviament"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "platade"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Opzion/flag di partizion no cognossude, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informazions"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Avertiment"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Erôr"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatâl"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "No implementât"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Comede"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sì"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "No"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "Va ben"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Torne prove"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignore"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Anule"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Al è stât cjatât un bug/erôr in GNU Parted. Controle il sît web di parted "
+"http://www.gnu.org/software/parted/parted.html par vê plui informazions su "
+"ce che al podarès jessi util comunicâ te segnalazion dal erôr! Mande une "
+"segnalazion di erôr vie e-mail a %s specificant almancul la version (%s) e "
+"il messaç chi sot: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Il supuart par lei lis etichetis dai discs AIX nol è stât ancjemò "
+"implementât."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Il supuart par scrivi lis etichetis dai discs AIX nol è stât ancjemò "
+"implementât."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Il supuart par zontâ partizions aes etichetis dai discs AIX nol è stât "
+"ancjemò implementât."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Il supuart par dopleâ partizions tes etichetis dai discs AIX nol è stât "
+"ancjemò implementât."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Il supuart par stabilî il gjenar di sisteme des partizions tes etichetis dai "
+"discs AIX nol è stât ancjemò implementât."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Il supuart par stabilî lis opzions/flags tes etichetis dai discs AIX nol è "
+"stât ancjemò implementât."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Impussibil doprâ la tabele des partizions Atari sui discs cun dimension di "
+"setôr che no je uguâl a %d bytes."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Impussibil doprâ lis tabelis di partizion Atari sui discs cun plui di %d "
+"setôrs."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Masse partizions Atari rilevadis. Forsit al è un cicli infinît te liste "
+"colegade a XGM. Si interomp."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Nissune partizion cjatade tal ARS al setôr %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"La vôs dal ARS logjic sucessîf nol è di gjenar XGM in ARS al setôr %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Al somee che su chest disc (%s) no je une tabele di partizions Atari opûr "
+"che e je ruvinade."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"Nissun spazi al setôr %lli par memorizâ l'ARS de partizion logjiche %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Nissun spazi al setôr %lli par memorizâ l'ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"La conte dai setôrs che e je memorizade te tabele des partizion no "
+"corispuint ae dimension dal to dispositîf. Desideristu comedâ la tabele des "
+"partizions?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Nissun spazi al setôr %lli par memorizâ il BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "A jerin restadis partizions dopo vê jemplade la tabele AHDI principâl."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"La tabele AHDI principâl e je stade jemplade cun dutis lis partizions ma la "
+"tabele ICD no je vueide duncje a vignaran rilevadis, dai software compatibii "
+"cun ICD, plui partizions di dimension e posizion no cognossudis. "
+"Desideristu invalidâ la tabele ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Lis vôs ICD no puedin contignî partizions estesis o logjichis."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "A jerin restadis partizions dopo vê jemplât lis tabelis."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"No tu puedis doprâ une partizion XGM estese in modalitât ICD (plui di %d "
+"partizions primariis, se XGM e je la prime e vâl par dôs)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Impussibil sodisfâ ducj i vincui su pe partizion."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"No tu puedis doprâ plui di %d partizions primariis (modalitât ICD) se tu "
+"dopris une partizion XGM estese. Se XGM e je la prime partizion e vâl par "
+"dôs."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Impussibil assegnâ un numar di partizion."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Impussibil assegnâ un toc di spazi par une etichete bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+"Nol è pussibil cambiâ la tabele des partizions dal dispositîf DASD-LDL.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Impussibil assegnâ un toc di spazi par une etichete dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabele des partizions no valide su %s -- firme %x sbaliade."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabele des partizion no valide - partizion ricorsive su %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted nol pues ridimensionâ lis partizions gjestidis di Windows Dynamic "
+"Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "impussibil creâ ancjemò partizions"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s nol à partizions estesis (volume header partition)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Sume di control (checksum) sbaliade, la tabele des partizions e je ruvinade."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Dome lis partizions primariis a puedin jessi partizions di root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Dome lis partizions primariis a puedin jessi partizions di swap."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr ""
+"Dome lis partizions logjichis a puedin jessi un file di inviament/boot."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"no si è rivâts a stabilî il non de partizion dvh a %s:\n"
+"Dome lis partizions logjichis (file di boot) a àn un non."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Masse partizions primariis"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "erôr di “openâ€"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "erôr di “seekâ€"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "erôr di “readâ€"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "erôr di “ioctl()â€"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Corispondence version API sbaliade"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Gjenar di disc no supuartât"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Formât disc no supuartât"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disc in ûs"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Erôr di sintassi tal file di configurazion"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "La etichete dal volum e je ruvinade"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Il non di un “data set†al è ruvinât"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Assegnazion memorie falide"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Verifiche dispositîf falide"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Il dispositîf specificât nol è un dispositîf DASD valit"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER nol è stât cjatât sul dispositîf"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Erôr fatâl"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Spazi insuficient pe etichete dal volum."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Spazi insuficient pes informazions su la partizion."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC no valit."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Impussibil recuperâ la version des API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"La version '%d' atuâl des API no corispuint ae version '%d' des API dal "
+"driver dasd!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Impussibil recuperâ la dimension dal disc."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Impussibil recuperâ lis informazions su la gjeometrie dal disc."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Impussibil recuperâ lis informazions su la dimension dal bloc."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+"La gjeometrie dal disc no corispuint a un dispositîf DASD di gjenar 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "il dispositîf al è masse piçul par GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Il formât ae tabele des partizions GPT al è ae version %x, che al è plui "
+"gnûf di chel che al ricognòs Parted. Segnale chest probleme!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Al semee che no dut il spazi disponibil in %s al sedi doprât. Justâ GPT par "
+"fa un mût che al dopri dut il spazi (altris %llu blocs) o continuâ cun lis "
+"impostazions atuâls? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"La copie di backup de tabele GPT no je ae fin dal disc, come che al varès di "
+"jessi. Comedâ, spostant la copie di backup ae fin (e gjavant chê viele)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Dutis dôs lis tabelis GPT, chê p rimarie e chê di backup, a son ruvinadis. "
+"Prove a creâ une gnove tabele, e dopre la funzionalitât di ripristinament "
+"partizions di Parted."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"La tabele GPT di backup e je ruvinade, ma chê primarie e semee a puest, "
+"duncje si doprarà chê."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"La tabele GPT primarie e je ruvinade, ma chê di backup e semee a puest, "
+"duncje si doprarà chê."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "il CRC dal array de tabele des partizions primarie nol corispuint"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "no si è rivâts a tradusi il non de partizion"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Firme %x no valide pes etichetis dai discs Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "La mape des partizions no à elements!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s al è masse piçul par une etichete di disc Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "La partizion %d e à une firme no valide %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "La partizion %d e à une lungjece no valide di 0 bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "La regjon dai dâts no scomence al inizi de partizion."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr ""
+"La regjon di inviament/boot de partizion no ocupe la partizion interie."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "La regjon dai dâts de partizion no ocupe la partizion interie."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Dimension dal bloc inusuâl sul descritôr dal dispositîf: %d byte nol è "
+"divisibil par 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Il descritôr dal driver al dîs che la dimension dal bloc fisic e je di %d "
+"byte, ma Linux al dîs che e je di %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "No je stade cjatade nissune mape des partizions valide."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Dimensions dai elements de mape des partizions in conflit! Il prin element "
+"al dîs di jessi %d, ma l'element %d al dîs di jessi %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Inusuâl! A esistin 2 mapis des partizions!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Cambiant il non di une partizion di root o di swap nol permetarà a Linux di "
+"ricognossile par ce che e je."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Impussibil zontâ une altre partizion -- la mape des partizions e je masse "
+"piçule!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabele des partizions no valide su %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"La partizion %d no je inlineade cui margjins dal cilindri. Funzionalitât "
+"ancjemò no supuartade."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Impussibil zontâ une altre partizion."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"la lungjece de partizion di %jd setôrs e va fûr di chê massime, comandade de "
+"tabele des partizions di %s, di %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"il numar di setôrs iniziâi %jd al va fûr di chel massim, comandât de tabele "
+"des partizions di %s, di %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : sume di control (checksum) sbaliât sul bloc %llu di gjenar %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : nol è stât cjatât il bloc rdb, nol varès di sucedi mai."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : cjatât cicli al bloc %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : la liste %s e semee sbaliade al bloc %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : no si è rivâts a listâ i blocs ruvinâts."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : no si è rivâts a listâ i blocs de partizion."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : no si è rivâts a listâ i blocs dal file system."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : no si è rivâts a listâ i blocs di inviament/boot."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "No si è rivâts a scrivi il bloc de partizions ae posizion %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Rilevade etichete Sun ruvinade."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"La gjeometrie CHS dal disc (%d,%d,%d) riferide dal sisteme operatîf no "
+"corispuint ae gjeometrie archiviade su pe etichete dal disc (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "La etichete dal disc e descrîf un disc plui grant di %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+"Il disc al à %d cilindris, che al è un valôr plui grant dal massim di 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"La partizion “Whole Disk†e je la uniche restade. Di solit no je une buine "
+"idee sorescrivi cheste partizions cuntune reâl. Solaris al podarès no rivâ "
+"plui a inviâsi cence di chê e ancje SILO (il boot loader di sparc) le dopre."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "La etichete dal disc Sun e je plene."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "no si è rivâts a vierzi il dispositîf"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "no si è rivâts a posizionâsi sul dispositîf"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "no si è rivâts a scrivi sul dispositîf"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "no si è rivâts a lei dal dispositîf"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Impussibil lei la etichete dal volum."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Impussibil scrivi la etichete dal volum."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Impussibil lei lis etichetis VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Impussibil lei VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Impussibil lei VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Impussibil lei VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Impussibil lei VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Impussibil scrivi lis etichetis VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Impussibil scrivi VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Impussibil scrivi VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Impussibil scrivi VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Impussibil scrivi VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Impussibil scrivi VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Memorie insuficiente."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Impussibil otignî la dimension de unitât pe unitât speciâl 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" nol à une sintassi valide pes posizions."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Il massim valôr pe testine al è %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Il massim valôr pal setôr al è %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "La posizion %s e je fûr dal dispositîf %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Numar no valit."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Doprâ une unitât plui piçule invezit che un valôr < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : No si è rivâts a assegnâ il bloc de partizion\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : No si è rivâts a assegnâ il bloc\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Impussibil lei il bloc di inviament/boot %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Impussibil lei il bloc di root %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : No si è rivâts a assegnâ l'element de liste dai id\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Impussibil lei il bloc %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : sume di control sbaliade sul bloc %llu di gjenar %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Impussibil scrivi il bloc %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : no si è rivâts a assegnâ il bloc rdb disk_specific\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : nol è stât cjatât il bloc rdb, nol varès di sucedi mai\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : no si è rivâts a lei il bloc %llu de partizion\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted nol è stât compilât ben: il setôr di inviament (boot) FAT al "
+"varès di jessi di 512 byte. Il supuart a FAT al vignarà disabilitât."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Il file system nol à une firme valide par jessi un file system FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Il file system nol à une dimension di setôr valide par jessi un file system "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Il file system nol à une dimension di cluster valide par jessi un file "
+"system FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Il file system nol à un numar di setôrs riservâts valit par jessi un file "
+"system FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Il file system nol à un numar di FAT valit."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"La gjeometrie CHS dal file system e je (%d, %d, %d) e chê no je valide. La "
+"gjeometrie CHS de tabele des partizions e je (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Il setôr di inviament/boot di FAT al dîs che la dimension dal setôr logjic "
+"al è 0. Situazion inusuâl. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Il setôr di inviament/boot di FAT al dîs che no'ndi son di tabelis FAT. "
+"Situazion inusuâl. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Il setôr di inviament/boot di FAT al dîs che i cluster a son fats di 0 "
+"setôrs. Situazion inusuâl. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Il file system al è FAT12, che nol è supuartât."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Firme de partizion di vecje maniere dal swap di linux no ricognossude: "
+"'%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Firme de partizion di gnove maniere dal swap di linux no ricognossude: "
+"'%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Firme de partizion swap di linux swsusp no ricognossude: '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted nol pues doprâ i file system HFS sui discs cun dimension di setôr che "
+"no je uguâl a %d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"La gjeometrie CHS dal file system e je (%d, %d, %d), che no je valide. La "
+"gjeometrie CHS de tabele des partizions e je (%d, %d, %d). Se si selezione "
+"Ignore, la gjeometrie CHS dal file system e vignarà lassade cussì. Se si "
+"selezione Comede, la gjeometrie CHS dal file system e vignarà stabilide in "
+"mût che e corispuindi ae gjeometrie CHS de tabele des partizions."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Il setôr di informazions al à la firme sbaliade (%x). Selezione anule par "
+"cumò, e invie une segnalazion di erôr. Se tu stâs tribulant, alore forsit "
+"al è pussibil ignorâ l'erôr."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"A coventin %s di spazi libar sul disc par scurtâ la partizion a cheste "
+"dimension. Pal moment a son libars dome %s."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Il spostament dal prin bloc dal cluster al è di %d e nol è un multipli de "
+"dimension dal cluster %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Element di directory sbaliât par %s: il prin cluster al è ae fin dal "
+"marcadôr di file."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT sbaliade: la cjadene par %s no je finide. Tu varessis di eseguî dosfsck "
+"o scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT sbaliade: il cluster %d doprât te cjadene par %s al è fûr dal file "
+"system. Si varès di eseguî dosfsck o scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT sbaliade: cluster %d cun colegaments incrosâts par %s. Si varès di "
+"eseguî dosfsck o scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s al è di %dk, ma al à %d cluster (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partizion masse grande/piçule par un file system %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Lis FAT no corispuindin. Se no si sa ce che al significhe, selezione anule, "
+"eseguî scandisk sul file system e daspò tornâ achì."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "No'ndi son configurazions pussibilis par chest gjenar di FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Il file system nol à parametris compatibii cun Windows. La dimension dal "
+"cluster e je di %dk (si spietave %dk); il numar di cluster al è %d (si "
+"spietave %d); la dimensions des FAT e je di %d setôrs (si spietave %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Il file system al riferìs che il spazi libar al è di %d cluster invezit che "
+"%d cluster."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Nol è vonde spazi inte cartele root par ducj i file. Anule o ignore par "
+"pierdi i file."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Erôr tal scrivi la cartele root."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Se si lasse il file system come FAT16 no si varà nissun probleme."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Se si convertìs a FAT16 e MS Windows al è instalât in cheste partizion, si "
+"varà i tornâ a instalâ il boot loader di MS Windows. Se si desidere fâ "
+"cussì, al sarès di consultâ il manuâl di Parted (o il manuâl de "
+"distribuzion)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Se si lasse il file system come FAT32 no si crearà nissun gnûf probleme."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Se si convertìs a FAT32 e MS Windows al è instalât in cheste partizion, si "
+"varà di tornâ a instalâ il boot loader di MS Windows. Se si desidere fâ "
+"cussì, si varès di consultâ il manuâl di Parted (o il manuâl de "
+"distribuzion). In diplui, convertint a FAT32, MS DOS, MS Windows 95a e MS "
+"Windows NT no rivaran a lei il file system."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Doprâ FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Il file system al pues jessi ridimensionât dome a cheste dimension se si "
+"convertìs a FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Il file system al pues jessi ridimensionât dome a cheste dimension se si "
+"convertìs a FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted nol pues ridimensionâ cheste partizion a cheste dimension. "
+"Funzion in svilup!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d, il supuart %x nol corispuint al setôr di inviament dal supuart %x. "
+"Si varès di eseguî scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld fûr dal file system"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld fûr dal file system"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: nissun cluster libar"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Impussibil rilevâ il file system."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "il ridimensionâ il file system %s, nol è supuartât"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Il file system al è plui grant dal so volum!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Il file system al conten erôrs."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "I blocs ruvinâts no puedin jessi lets."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Si cîr di regjistrâ un extent a partî dal block 0x%X, ma un altrial esist za "
+"a chê posizion. Si varès di controlâ il file system!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Si cîr di spostâ un extent dal bloc 0x%X al bloc 0x%X, ma un altri al esist "
+"za in chê posizion. Chest nol varès di sucedi!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Impussibil inzornâ la cache dai extent pal file HFS cun CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Si cîr di lei il file HFS cun CNID %X daûr dal EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Impussibil cjatâ il setôr %lli dal file HFS cun CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Si cîr di scrivi il file HFS cun CNID %X daûr dal EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Impussibil inzornâ la cache dai extent pal file HFS+ cun CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Si cîr di lei il file HFS+ cun CNID %X daûr dal EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Impussibil cjatâ il setôr %lli dal file HFS+ cun CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Si cîr di scrivi il file HFS+ cun CNID %X daûr dal EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "HFS nol pues ancjemò jessi ridimensionât in chê maniere."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "daûr a scurtâ"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Riposizionament dai dâts falît."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"Il riposizionament dai dâts indi à lassât cualchidun inte fin dal volum."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "scriture dal \"Master Directory Block\" di HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Vierzint no je stade cjatade nissune firme HFS[+X] valide."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "La version %d di HFS+ no je supuartade."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "La version %d di HFSX no je supuartade."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Il riposizionament dai dâts indi à lassât cualchidun ae fin dal volum."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Erôr tal scrivi il \"allocation file\"."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Erôr tal scrivi la part di compatibilitât dal \"allocation file\"."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "scriture de intestazion dal volum di HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"Si è presentât un erôr intal viodi il file dai blocs ruvinâts obligatori."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Al semee che al sedi un erôr intal wrapper HFS: il file dai blocs ruvinâts "
+"nol conten il volum HFS+ integrât."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "HFS+ nol pues ancjemò jessi ridimensionât in chê maniere."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "daûr a scurtâ il volum HFS+ integrât"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Ridimensionament dal volum HFS+ falît."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "daûr a scurtâ il wrapper HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "No si è rivâts a inzornâ il wrapper HFS."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Chest nol è un control %s reâl. Cheste procedure e covente par tirâ fûr i "
+"file speciâi di bas nivel par finalitâts di debug."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Sume di control (checksum) de intestazion de liste dai blocs ruvinâts."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Dimension no valide di un bloc di transazion dilunc la riesecuzion dal "
+"regjistri (journal) (%i byte)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"I regjistris (journal) archiviâts fûr dal volum no son supuartâts. Prove a "
+"disativâ il regjisti e torne a eseguî Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Il spostament o la dimension dal regjistri (journal) nol è multipli de "
+"dimension di un setôr."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valôrs \"magic\" sbaliâts inte intestazion dal regjistri (journal)."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"La dimension dal regjistri (journal) no corispuint tra chê dal bloc des "
+"informazions dal regjistri e chê de intestazion dal regjistri."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Cualchi cjamp di intestazion nol è multipli de dimension di un setôr."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"La dimension dal setôr archiviade tal regjistri (journal) no je di 512 "
+"byte. Parted al supuarte dome setôrs cun lungjece di 512 byte."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Sume di control (checksum) dal regjistri (journal) sbaliade."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Il regjistri nol è vueit. Parted al à di ripeti la transazion prime di "
+"vierzi il file system. Cheste operazion e modificarà il file system."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"La intestazion dal volum o il \"master directory bloc\" al è stât modificât "
+"intant che si tornave a eseguî il regjistri. Torne invie Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Un extent nol è stât riposizionât."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Un riferiment a un extent al ven di un puest che nol varès di stâ. Controle "
+"il file system!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"Chest volum HFS nol à il file catalic. Cheste situazion è je une vore "
+"inusuâl!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Chest volum HFS nol à un \"extents overflow file\". Cheste e je une "
+"situazion vonde inusuâl!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Il \"extent overflow file\" nol à di contignî i siei extent! Controle il "
+"file system."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Impussibil cjariâ la cache dal file system in memorie."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Impussibil cjariâ la liste dai blocs ruvinâts."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Al è vignût fûr un erôr tal riposizionâ un extent."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Chest volum HFS+ nol à il file catalic. Cheste situazion è je une vore "
+"inusuâl!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Chest volum HFS+ nol à un \"extents overflow file\". Cheste e je une "
+"situazion vonde inusuâl!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "al mostre chest messaç di jutori"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "al liste la disposizion des partizions su ducj i dispositîfs a blocs"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "al mostre un output che si pues analizâ dal computer"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "al mostre la jessude di JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "no sta domandâ mai l'intervent dal utent"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "in modalitât script, comede invezit di interompi, se domandât"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "al mostre la version"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "inlineament pes gnovis partizions"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMAR al è il numar di partizion doprât di Linux. Su lis etichetis di disc "
+"MS-DOS, il numar des partizions primaris di 1 a 4, partizions logjichis di 5 "
+"indenant.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "GJENAR-ETIC al è un di: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG al è un di: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNITÂT al è un di: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "inlineament desiderât: minim o otimâl"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "GJENAR-PART al è un di: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "GJENAR-FS al è un di: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"INIZI e FIN a son posizions sul disc, come 4GB o 10%. I valôrs negatîfs a "
+"partissin de fin dal disc. Par esempli: -1s al specifiche in maniere "
+"precise l'ultin setôr.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"FIN e je une posizion sul disc, come 4GB o 10%. I valôrs negatîfs a "
+"partissin de fin dal disc. Par esempli: -1s al specifiche in maniere "
+"precise l'ultin setôr.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STÂT al è un di: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOSITÎF al è di solit /dev/hda or /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NON al è cualsisei peraule desiderade\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Chest program al è software libar, cuviert de Licence Publiche Gjenerâl GNU "
+"(GNU-GPL).\n"
+"\n"
+"Chest program al è distribuît inte sperance che al sedi util,\n"
+"ma CENCE NISSUNE GARANZIE; cence ancje la implicite garanzie di\n"
+"CUMIERÇABILITÂT o IDONEITÂT A UNE FINALITÂT PARTICOLÂR. Consultâ la\n"
+"GNU General Public License par vê plui detais.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(a restin %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "La partizion %s e je in ûs. Sigûrs di continuâ?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Lis partizions su %s a son in ûs."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"La etichete dal disc su %s e vignarà eliminade e ducj i dâts sul disc a "
+"laran pierdûts. Continuâ?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Gnûf gjenar di etichete disc?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Gjenar di partizion?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Non de partizion?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Gjenar di file system?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Inizi?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Fin?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"E je stade domandade une partizion di %s a %s (setôrs %llu..%llu).\n"
+"La posizion disponibile plui dongje e je %s a %s (setôrs %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Ti vadial ben distès cussì?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"La partizion che e ven fûr no je inlineade ben par prestazions otimâls: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "no cognossût (malloc falît)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Lis etichetis dai discs %s no supuartin il non de partizion."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Numar di partizion?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Lis etichetis dai discs %s no supuartin il non de partizion."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Gjenar di partizion?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Numar no valit."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Gjenar di partizion?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Numar no valit."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Gjeometrie cilindri, testine, setôr dal BIOS: %d,%d,%d. Ogni cilindri al è "
+"%s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disc %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Dimension dal setôr (logjic/fisic): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabele des partizions: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Flag dal disc: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Numar"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Inizi"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fin"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Dimension"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Gjenar"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "File system"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Non"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flag"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Spazi libar"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"E je stade cjatade une partizion %s %s su %s -> %s. Desideristu zontâle ae "
+"tabele des partizions?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "ricercje dai file system"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Il comant par ridimensionâ al è stât gjavât de version 3.0 di parted"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Scurtâ une partizion al pues causâ pierditis di dâts, sigûrs di continuâ?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Gnûf dispositîf?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "gjenar di inlineament(min/oti)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d inlineade\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d no inlineade: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flag di invertî?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Gnûf stât?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Unitât?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check GJENAR N controle la partizion N pal "
+"inlineament di GJENAR(min|oti)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "jutori"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMANT] stampe il jutori gjenerâl o sul "
+"COMANT"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable GJENAR-ETIC cree une gnove etichete dal disc "
+"(tabele des partizions)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart GJENAR-PART [GJENAR-FS] INIZI FIN cree une partizion"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' al cree une partizion cence creâ un gnûf file system su pe "
+"partizion. Al pues jessi specificât GJENAR-FS par stabilî un ID di "
+"partizion adat.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "non"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMAR NON clame la partizion NUMAR come NON"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] mostre la tabele des partizions, i "
+"dispositîfs disponibii, il spazi libar o dutis lis partizions cjatadis"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Cence argoments, 'print' al mostre dute la tabele des partizions. Dut câs "
+"cui argoments chi sot al fasarà variis altris azions.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : mostre ducj i dispositîfs a blocs atîfs\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : mostre lis informazions sul spazi libar no partizionât, sul "
+"dispositîf a blocs atuâl\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : mostre lis tabelis des partizions di ducj i dispositîfs a "
+"blocs atîfs\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit jes dal program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue INIZI FIN recupere une partizion pierdude "
+"dongje INIZI e FIN"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Il comant par ridimensionâ al è stât gjavât in parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMAR FIN ridimensione la partizion NUMAR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMAR elimine la partizion NUMAR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select DISPOSITÎF sielç il dispositîf di modificâ"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FLAG STÂT cambie il FLAG sul dispositîf "
+"selezionât"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAG] comute il stât dal FLAG sul "
+"dispositîf selezionât"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMAR FLAG STÂT cambie il FLAG su pe partizion NUMAR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMAR [FLAG]] comute il stât di FLAG su pe "
+"partizion NUMAR"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit UNITÂT stabilìs la unitât predefinide a "
+"UNITÂT"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version mostre il numar di version e lis "
+"informazions di copyright di GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' al mostre lis informazions sul copyright e la version relative a "
+"cheste copie di GNU Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Ûs: %s [-hlmsfv] [-a<inlineament>] [DISPOSITÎF [COMANT [PARAMETRIS]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nissun dispositîf cjatât"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "ATENZION: No tu sês un superutent. Fâs atenzion ai permès.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Tu âs di tornâ a instalâ il boot loader prime di tornâ a inviâ. Lei la "
+"sezion 4 de documentazion di Parted par vê plui informazions."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Al podarès coventâ inzornâ /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Benvignûts in GNU Parted! Scrîf 'help' par viodi une liste di comants.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Ûs: parted [OPZION]... [DISPOSITÎF [COMANT [PARAMETRIS]...]...]\n"
+"Apliche i COMANTs cui PARAMETRIS al DISPOSITÎF. Se nol ven furnît nissun "
+"COMANT, \n"
+"al partìs in modalitât interative.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Tu âs cjatât un erôr in GNU Parted! Chi al è ce che tu âs di fâ:\n"
+"\n"
+"Nie pôre! Al è probabile che l'erôr nol vedi ruvinât i tiei dâts.\n"
+"Judinus a justâ chest erôr fasint chestis operazions:\n"
+"\n"
+"Controle se l'erôr al è za stât comedât controlant\n"
+"la ultime version di GNU Parted, che tu puedis cjatâ su:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Controle cheste version prime di segnalâ l'erôr.\n"
+"\n"
+"Se nol è stât ancjemò comedât o se no tu sâs ce mût controlâ,\n"
+"visite il sît web di GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"par ulteriôrs informazions.\n"
+"\n"
+"La tô segnalazion e à di contignî la version di cheste publicazion (%s)\n"
+"adun cul messaç di erôr chi sot, il output di\n"
+"\n"
+"\tparted DISPOSITÃŽF unit co print unit s print\n"
+"\n"
+"e cheste cronologjie dai comants che tu âs inserît.\n"
+"Inclût ancje cualsisei informazion adizionâl su la tô configurazion che tu\n"
+"consideris impuartante.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Cronologjie comants:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Erôr: SEGV_MAPERR (Direzion no mapade al ogjet)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Erôr: SEGV_ACCERR (permès no valits pal ogjet mapât)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Erôr: si è presentât a un segnâl SIGSEGV gjenerâl.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Erôr: FPE_INTDIV (intîr: division par zero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Erôr: FPE_INTOVF (intîr: overflow)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTDIV (virgule mobile: division par zero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTOVF (virgule mobile: overflow)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTUND (virgule mobile: underflow)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTRES (virgule mobile: risultât inesat)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTINV (virgule mobile: operazion no valide)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Erôr: FPE_FLTSUB (virgule mobile: subscript fûr dai limits)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Erôr: si è presentât un segnâl SIGFPE gjenerâl."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Erôr: ILL_ILLOPC (opcode no consintût)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Erôr: ILL_ILLOPN (operandi no consintût)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Erôr: ILL_ILLADR (modalitât di direzionament no consintude)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Erôr: ILL_ILLTRP (trap no consintût)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Erôr: ILL_PRVOPC (opcode privilegjât)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Erôr: ILL_PRVREG (regjistri privilegjât)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Erôr: ILL_COPROC (erôr di coprocessôr)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Erôr: ILL_BADSTK (erôr di stack interni)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Erôr: si è presentât un segnâl SIGILL gjenerâl."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "token no valit: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Si spiete un numar di partizion."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "La partizion no esist."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Si spiete un gjenar di file system."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Gjenar di file system \"%s\" no cognossût."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Si spiete un gjenar di etichete di disc."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Nissun flag supuartât"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Impussibil creâ ancjemò altris partizions."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Si spiete un gjenar di partizion."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "otimâl"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimâl"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPZIONs:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMANTs:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"segnale i erôrs a %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Al ven doprât %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "In modalitât no interative, chest comant nol à sens.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Lis partizions estesis no puedin jessi platadis su pes etichetis disc "
+#~ "msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Lis partizions estesis no puedin jessi partizions di recupar su etichetis "
+#~ "disc msdos."
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: la opzion '--%s' no permet un argoment\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opzion '--%s' no ricognossude\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: la opzion '-W %s' no permet un argoment\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: la opzion '-W %s' e à bisugne di un argoment\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Sît web di %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "l'argoment \\\"%3$s\\\" di %1$s%2$s nol è valit"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "il sufìs tal argomento \\\"%3$s\\\" di %1$s%2$s nol è valit"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "l'argoment \\\"%3$s\\\" di %1$s%2$s al è masse grant"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Impussibil tornâ a lei la tabele des partizions. Chest al significhe che "
+#~ "al covente tornâ a inviâ il sisteme prime di montâ cualsisei partizion "
+#~ "modificade. Tu varâs ancje di tornâ a instalâ il boot loader prime di "
+#~ "tornâ a inviâ il sisteme (che al podarès vê bisugne di montâ lis "
+#~ "partizions modificadis). Al è impussibil fâ dutis dôs lis robis! Duncje "
+#~ "tu varâs di inviâ un disc di ripristinament e di lì tornâ a instalâ il "
+#~ "boot loader. Lei la sezion 4 de documentazion di Parted par vê plui "
+#~ "informazions."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Impussibil tornâ a lei la tabele des partizions su %s (%s). Chest al "
+#~ "significhe che Hurd nol sa nuie su lis modifichis che tu âs fat. Tu âs "
+#~ "di tornâ a inviâ il computer prime di fâ alc cun %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "La regjon di inviament/boot no scomence al inizi de partizion."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Il file systen al à une dimension di setôr logjic di %d. Si sa che GNU "
+#~ "Parted nol lavore ben cun dimensions di setôr diviers di 512 byte."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Il file %s al è segnât come file di sisteme. Chest al significhe che "
+#~ "spostantlu cualchi program al podarès blocâsi."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMAR : mostre informazions plui detaiadis sun cheste particolâr "
+#~ "partizion\n"
diff --git a/po/gl.gmo b/po/gl.gmo
new file mode 100644
index 0000000..4afdace
--- /dev/null
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..795fece
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,3955 @@
+# Galician translation of GNU parted
+# This file is distributed under the same license as the parted package.
+# Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 2012 Leandro Regueiro.
+#
+# Jacobo Tarrío Barreiro <jtarrio@trasno.net>, 2000, 2001, 2002.
+# Leandro Regueiro <leandro.regueiro@gmail.com>, 2012.
+#
+# Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas
+# colaborar connosco, podes atopar máis información en http://www.trasno.net
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.1\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2012-11-11 15:50+0100\n"
+"Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
+"Language-Team: Galician <proxecto@trasno.net>\n"
+"Language: gl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento incorrecto %s para %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento %s ambiguo para %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Os argumentos válidos son:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "erro de escritura"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Erro de sistema descoñecido"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a opción «-W %s» é ambigua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a opción «%s» é ambigua; as posibilidades son:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opción «%c%s» non recoñecida\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a opción «%c%s» non permite ningún argumento\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a opción «--%s» require un argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opción incorrecta -- «%c»\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a opción require un argumento -- «%c»\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "»"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Éxito"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Sen coincidencias"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Expresión regular non válida"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Carácter de ordenación incorrecto"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nome da clase de caracteres incorrecto"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Barra invertida ao final"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[ ou [^ sen parella"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( ou \\( sen parella"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ sen parella"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Contido de \\{\\} non válido"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Fin de intervalo non válida"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memoria esgotada"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Expresión regular precedente non válida"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Fin prematura da expresión regular"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Expresión regular grande de máis"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") ou \\) sen parella"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Non hai ningunha expresión regular anterior"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[sSyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Empaquetado por %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Empaquetado por %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Licenza GPL3v+: GNU GPL versión3 ou posterior <http://gnu.org/licenses/gpl."
+"html>\n"
+"Isto é software libre: pode modificalo e redistribuílo.\n"
+"Non hai NINGUNHA GARANTÃA, ata onde o permita a lei.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Escrito por %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Escrito por %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Escrito por %s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, e outros.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Envíe os informes de fallo a: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Envíe os informes de fallo en %s a %s.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "PaÌxina web de %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Axuda xeral ao usar software GNU: <http://www.gnu.org/gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "esgotouse a memoria"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Imaxe de disco"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Produciuse un erro ao abrir %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Non foi posíbel abrir %s para lectura-escritura (%s). Abriuse %s para só "
+"lectura."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s mentres se ía á posición na que ler en %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s durante a lectura en %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Non foi posíbel escribir en %s, porque está aberto para só lectura."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s mentres se ía á posición na que escribir en %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s durante a escritura en %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Execute «%s --help» para obter máis información.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Uso: %s [OPCIÓN] [DISPOSITIVO]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Envíe os informes de fallo a <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Non foi posíbel abrir %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr ""
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s tentando sincronizar %s no disco"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Non foi posíbel facer \"stat\" sobre o dispositivo %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr ""
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Non foi posíbel determinar o tamaño de %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE xenérico"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Non foi posíbel obter a identidade do dispositivo %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Produciuse un erro ao inicializar o dispositivo SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"O dispositivo %s é tan pequeno que non é posíbel que almacene un sistema de "
+"ficheiros nin unha táboa de particións. Non seleccionaría un dispositivo "
+"equivocado?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Non foi posíbel determinar a xeometría do ficheiro/dispositivo %s. Non "
+"debería usar Parted se non sabe DE VERDADE o que está a facer!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Novo dispositivo?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controladora RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controladora ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controladora I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Dispositivo de Loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipo de dispositivo non compatíbel"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr ""
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Produciuse un erro ao informar ao núcleo sobre as modificacións feitas na "
+"partición %s -- %s. Isto quere dicir que Linux non ha saber nada dos cambios "
+"que lle fixo a %s ata que reinicie -- así que non debería montala ou "
+"empregala de ningún xeito antes de reiniciar."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Non foi posíbel determinar o inicio e a lonxitude de %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"O final da partición non pode estar antes do comezo! (sector inicial=%jd "
+"lonxitude=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Tentáronse escribir os sectores %ld-%ld fóra da partición en %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "buscando bloques erróneos"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: etiqueta de disco non recoñecida"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Esta versión de libparted non admite a escritura para %s. Se cadra está "
+"compilado para só lectura."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "A partición %d é %s, pero o sistema de ficheiros é %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr ""
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Modificador de particións descoñecido, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "As etiquetas de disco %s non admiten particións estendidas."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "As etiquetas de disco %s non admiten particións lóxicas ou estendidas."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Demasiadas particións primarias."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Non é posíbel engadir unha partición lóxica a %s, porque non hai unha "
+"partición estendida."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Non é posíbel ter máis de unha partición estendida en %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Non é posíbel ter particións lóxicas fóra da partición estendida."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Non é posíbel ter unha partición lóxica fóra da partición estendida en %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr ""
+"Non é posíbel ter unha partición primaria dentro dunha partición estendida."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Non é posíbel ter unha partición fóra do disco!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Non é posíbel ter particións que se solapen."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadatos"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "libre"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "estendida"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lóxica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primaria"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "arranque"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "raíz"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "intercambio"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "oculta"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadatos"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Si"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "arranque"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, fuzzy, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Modificador de particións descoñecido, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Información"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Aviso"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Erro"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Moi grave"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Fallo"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Sen implementación"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Arranxar"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Si"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Non"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "Aceptar"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Reintentar"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"A compatibilidade para ler etiquetas de disco AIX aínda non está "
+"implementada."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"A compatibilidade para escribir etiquetas de disco AIX aínda non está "
+"implementada."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"A compatibilidade para engadir particións a etiquetas de disco AIX aínda non "
+"está implementada."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"A compatibilidade para duplicar particións en etiquetas de disco AIX aínda "
+"non está implementada."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"A compatibilidade para definir o tipo de sistema de particións en etiquetas "
+"de disco AIX aínda non está implementada."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Non se poden move-las particións extendidas."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Non foi posíbel satisfacer todas as restricións da partición."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Non foi posíbel asignar un número de partición."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr ""
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr ""
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Táboa de particións incorrecta en %s -- sinatura %x incorrecta."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Táboa de particións incorrecta - partición recursiva en %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "non é posíbel crear máis particións"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"%s non ten unha partición estendida (partición de cabeceira de volume)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"A suma de comprobación é incorrecta, o que indica que a táboa de partición "
+"está danada."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Só as particións primarias poden ser particións raíz."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Só as particións primarias poden ser particións de intercambio."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Só as particións lóxicas poden ser un ficheiro de arranque."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Demasiadas particións primarias."
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "erro de apertura"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "erro de lectura"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "erro de ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tipo de disco non compatíbel"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Formato de disco non compatíbel"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "O disco está en uso"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Erro de sintaxe no ficheiro de configuración"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "A etiqueta do volume está danada"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Produciuse un erro ao asignar memoria"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Produciuse un erro ao comprobar o dispositivo"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Erro moi grave"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Non hai espazo para a información das particións."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Non foi posíbel recuperar a información da xeometría de disco."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Non foi posíbel recuperar a información da xeometría de disco."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "O sistema de ficheiros é pequeno de máis para ext2."
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"O formato da táboa de partición GPT é da versión %x, que é máis recente do "
+"que Parted pode recoñecer. Por favor infórmenos!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"A copia de seguridade da táboa GPT non está ao final do disco, tal como "
+"debería. Isto pode significar que outro sistema operativo cre que o disco é "
+"máis pequeno. Quere arranxalo, movendo a copia de seguridade ao final (e "
+"retirando a copia vella)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Ãmbalas dúas táboas GPT, primaria e copia de seguridade, están danadas. "
+"Probe a crear unha táboa nova e a empregar a característica de rescate "
+"(rescue) de Parted para recuperar as particións."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"A copia de seguridade da táboa GPT está danada, pero a primaria semella "
+"estar ben, así que é a que se ha empregar."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"A táboa GPT primaria está danada, pero a copia de seguridade semella estar "
+"ben, así que é a que se ha empregar."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Non foi posíbel asignar un número de partición."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Sinatura %x non válida para etiquetas de disco Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "O mapa de particións non ten unha entrada do mapa de particións!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s é pequeno de máis para unha etiqueta de disco Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "A partición %d ten unha sinatura %x non válida."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "A partición %d ten unha lonxitude non válida de 0 bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "A rexión de datos non comeza no principio da partición."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "A rexión de arranque da partición non ocupa toda a partición."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "A rexión de datos da partición non ocupa toda a partición."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Tamaño de bloque estraño no descritor do dispositivo: %d bytes non é "
+"divisíbel por 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"O descritor do controlador di que o tamaño do bloque físico é %d bytes, pero "
+"Linux di que é de %d bytes."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Non se atopou un mapa de particións válido."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Tamaños das entradas do mapa de particións conflitivos! A entrada 1 di que é "
+"de %d, pero a entrada %d di que é %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Estraño! Hai 2 entradas de mapa de particións!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Cambiar o nome dunha partición raíz ou de intercambio ha impedir que Linux a "
+"recoñeza coma tal."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Non é posíbel engadir outra partición -- o mapa de particións é pequeno de "
+"máis!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Táboa de particións incorrecta en %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"A partición %d non está aliñada nos límites dos cilindros. Aínda non hai "
+"compatibilidade para isto."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Non é posíbel engadir máis particións."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Produciuse un erro ao escribir o bloque de partición en %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Detectouse unha etiqueta de disco Sun danada."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"A xeometría CHS do disco (%d,%d,%d) indicada polo sistema operativo no "
+"coincide coa xeometría almacenada na etiqueta de disco (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "A etiqueta de disco describe un disco maior de %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "O disco ten %d cilindros, o que supera o máximo de 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"A partición de Disco Completo é a única que queda dispoñíbel. Normalmente "
+"non é unha boa idea sobrescribir esta partición cunha de verdade. Solaris "
+"pode non arrancar sen ela, e SILO (o cargador de arranque de sparc) tamén a "
+"aprecia."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "A etiqueta de disco Sun está chea."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "produciuse un erro ao abrir o dispositivo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "produciuse un erro ao escribir no dispositivo"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "produciuse un erro ao ler do dispositivo"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Non foi posíbel ler a etiqueta de volume."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Non foi posíbel escribir a etiqueta de volume."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+#, fuzzy
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Non foi posíbel escribir a etiqueta de volume."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Memoria esgotada."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "A localización de %s está fóra do dispositivo %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: non foi posíbel escribir o bloque %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted compilouse incorrectamente: o sector de arranque FAT debería ter "
+"512 bytes. Vaise desactivar a compatibilidade FAT."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"O sistema de ficheiros ten unha sinatura incorrecta para un sistema de "
+"ficheiros FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"O sistema de ficheiros ten un tamaño de sector incorrecto para un sistema de "
+"ficheiros FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"O sistema de ficheiros ten un tamaño de bloque non válido para un sistema de "
+"ficheiros FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"O sistema de ficheiros ten un número incorrecto de sectores reservados para "
+"un sistema de ficheiros FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "O sistema de ficheiros ten un número de FATs incorrecto."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"O sector de arranque de FAT di que o tamaño lóxico de sector é 0. Isto é moi "
+"estraño. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"O sector de arranque de FAT di que non hai táboas FAT. Isto é moi estraño. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"O sector de arranque de FAT di que os clusters teñen 0 sectores. Isto é moi "
+"estraño. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "O sistema de ficheiros é FAT12, para o cal non hai compatibilidade."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Sinatura «%10s» da partición de intercambio de linux de antigo estilo non "
+"recoñecida."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Sinatura «%10s» da partición de intercambio de linux de novo estilo non "
+"recoñecida."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr ""
+"Sinatura «%9s» da partición de intercambio de linux swsusp non recoñecida."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"O sector de información ten unha sinatura incorrecta (%x). Escolla "
+"\"Cancelar\" polo de agora, e envíe un informe de fallo. Se está "
+"desesperado, pode que sexa seguro ignorar."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Precisa %s de espazo libre para reducir esta partición a este tamaño "
+"(actualmente ten só hai %s libres)"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Delta do comezo do cluster = %d, que non é un múltiplo do tamaño do cluster "
+"%d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrada de directorio incorrecta para %s: o primeiro cluster é o marcador de "
+"fin de ficheiro."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: cadea non rematada para %s. Debería executar dosfsck ou "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT incorrecta: o cluster %d está fóra do sistema de ficheiros na cadea para "
+"%s. Debería executar dosfsck ou scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT incorrecta: o cluster %d ten ligazóns cruzadas para %s. Debería executar "
+"dosfsck ou scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s é de %dk, pero ten %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "A partición é grande/pequena de máis para un sistema de ficheiros %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"As FATs non coinciden. Se non sabe o que isto significa, escolla "
+"\"Cancelar\", empregue \"scandisk\" no sistema de ficheiros, e logo volva."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Non hai configuracións posíbeis para este tipo de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"O sistema de ficheiros non ten os tamaños esperados para que a Windows lle "
+"guste. O tamaño do cluster é %dk (esperábase %dk); o número de clusters é %d "
+"(esperábanse %d); o tamaño das FATs é de %d sectores (esperábanse %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"O sistema de ficheiros di que o espacio libre é de %d clusters, non %d "
+"clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Non hai espazo dabondo no directorio raíz para todos os ficheiros. Pode ou "
+"ben cancelar, ou ben ignorar e perder os ficheiros."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Produciuse un erro ao escribir no directorio raíz."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Se deixa o sistema de ficheiros como FAT16, non ha ter problemas."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Se converte a FAT16, e MS Windows está instalado na partición, ha ter que "
+"reinstalar o cargador de arranque de MS Windows. Se quere facelo, debería "
+"consultar o manual de Parted (ou o manual da súa distribución)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Se deixa o sistema de ficheiros como FAT32, non ha introducir novos "
+"problemas."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Se converte a FAT32, e MS Windows está instalado na partición, ha ter que "
+"reinstalar o cargador de arranque de MS Windows. Se quere facelo, debería "
+"consultar o manual de Parted (ou o manual da súa distribución). Ademais, a "
+"conversión a FAT32 fará o sistema de ficheiros ilexíbel para MS DOS, MS "
+"Windows 95a e MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Quere usar FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"O sistema de ficheiros só pode alcanzar este tamaño convertendo a FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"O sistema de ficheiros só pode alcanzar este tamaño convertendo a FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted non pode redimensionar esta partición a este tamaño. Estamos "
+"traballando niso!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"Na FAT %d, o soporte %x non coincide co soporte do sector de arranque, %x. "
+"Seguramente debería executar scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: o cluster %ld está fóra do sistema de ficheiros"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: o cluster %ld está fóra do sistema de ficheiros"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: non hai clusters libres"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Non é posíbel detectar un sistema de ficheiros."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"non hai compatibilidade para o redimensionamento de sistemas de ficheiros %s"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "O sistema de ficheiros é maior que seu volume!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "reducindo"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "mostra esta mensaxe de axuda"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "lista a disposición das particións de todos os dispositivos de bloques"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "non pedir nunca a intervención do usuario"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "mostra a versión"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr ""
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"MENOR é o número de partición que usa Linux. Nas etiquetas de disco MS-DOS, "
+"as particións primarias teñen números de 1 a 4, e as lóxicas téñenos do 5 en "
+"diante.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPO-ETIQUETA é un destes: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "MODIF é un destes: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr ""
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr ""
+"TIPO-PARTICION é: primary (primaria), logical (lóxica), extended "
+"(estendida)\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPO-SF é un destes: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ESTADO é un destes: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOSITIVO adoita ser /dev/hda ou /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOME é calquera palabra que queira\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Este programa é software libre, cuberto pola Licenza Pública Xeral de GNU.\n"
+"\n"
+"Este programa distribúese coa esperanza de que sexa útil, pero\n"
+"SEN NINGUNHA GARANTÃA; nin sequera a garantía implícita de\n"
+"COMERCIABILIDADE ou APTITUDE PARA UN FIN EN PARTICULAR. Vexa a\n"
+"Licenza Pública Xeral de GNU para obter máis detalles.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tempo restante %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Estase a usa-la partición %s."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Esta(n)se a usar a(s) partición(s) de %s."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Novo tipo de etiqueta de disco?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipo de partición?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nome da partición?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Tipo de sistema de ficheiros?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Inicio?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Fin?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "As etiquetas de disco %s non admiten particións estendidas."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Número de partición?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "As etiquetas de disco %s non admiten particións estendidas."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipo de partición?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Fin de intervalo non válida"
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipo de partición?"
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modelo: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disco %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Táboa de particións: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Número"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Inicio"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fin"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Tamaño"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tipo"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Sistema de ficheiros"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nome"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Modificadores"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Espazo libre"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Atopouse unha partición %s %s en %s -> %s. Quere engadila á táboa de "
+"particións?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "buscando sistemas de ficheiros"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Novo dispositivo?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr ""
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Novo estado?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr "help [ORDE] mostrar axuda xeral, ou axuda sobre a ORDE"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel, mktable TIPO-ETIQUETA crear unha nova etiqueta de disco "
+"(táboa de particións)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPO-PARTICION [TIPO-FS] INICIO FIN crear unha partición"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"«mkpart» crea unha partición sen crear un novo sistema de ficheiros na "
+"partición. Debe especificarse TIPO-SF para definir un ID de partición "
+"axeitado.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NÚMERO NOME ponlle o NOME á partición NÚMERO"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [MENOR] amosa-la táboa de particións ou unha partición"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Sen argumentos, «print» mostra toda a táboa de particións. Aínda así cos "
+"seguintes argumentos realiza outras accións.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit saír do programa"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue INICIO FIN recupera unha partición perdida "
+"entre INICIO e FIN"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "rm NÚMERO eliminar a partición NÚMERO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NÚMERO eliminar a partición NÚMERO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select DISPOSITIVO escoller o dispositivo a editar"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+#, fuzzy
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set MENOR MODIF ESTADO cambiar un MODIFicador na partición MENOR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Non se atopou ningún dispositivo"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Debería reinstalar o cargador de arranque antes de reiniciar. Lea a sección "
+"4 da documentación de Usuario de Parted para obter máis información."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Non esqueza actualizar /etc/fstab, se é necesario.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Uso: parted [OPCIÓN]... [DISPOSITIVO [ORDE [PARÃMETROS]...]...]\n"
+"Aplica a ORDE cos PARÃMETROS ao DISPOSITIVO. Se non se indica ningunha\n"
+"ORDE, funciona en modo interactivo.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr ""
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Espérase un número de partición."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "A partición non existe."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Espérase un tipo de sistema de ficheiros."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipo de sistema de ficheiros «%s» descoñecido."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Espérase un tipo de etiqueta de disco."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Non é posíbel crear máis particións."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Espérase un tipo de partición."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPCIÓNs:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "ORDEs:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Envíe os informes de fallo a: %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Usando %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Esta orde non ten sentido nun modo non interactivo.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opción «--%s» non permite ningún argumento\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opción «--%s» non recoñecida\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opción «-W %s» non permite ningún argumento\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opción «-W %s» require un argumento\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Páxina web de %s: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "o argumento «%s» de %s%s é incorrecto"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "sufixo incorrecto %s%s no argumento «%s»"
+
+#, c-format
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s argumento «%s» demasiado longo"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Non foi posíbel volver ler a táboa de particións, así que ten que "
+#~ "reiniciar antes de montar calquera partición modificada. Tamén ten que "
+#~ "reinstalar o cargador de arranque antes de reiniciar (o que pode precisar "
+#~ "a montaxe de particións modificadas). É imposíbel facer ámbalas dúas "
+#~ "cousas, así que ha ter que arrancar cun disco de rescate, e reinstalar o "
+#~ "cargador de arranque desde o disco de rescate. Lea a sección 4 da "
+#~ "documentación de Usuario de Parted para obter máis información."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Non é posíbel volver ler a táboa de particións de %s (%s). Isto quere "
+#~ "dicir que Hurd non sabe nada sobre as modificacións que vostede fixo. "
+#~ "Debería reiniciar o seu computador antes de facer nada con %s."
+
+#, c-format
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Produciuse un erro ao engadir a partición %d (%s)"
+
+#, c-format
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted non puido volver ler a táboa de particións de %s (%s). Isto quere "
+#~ "dicir que Linux non sabe nada sobre as modificacións que vostede fixo. "
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións estendidas non poden estar ocultas en etiquetas de disco "
+#~ "msdos."
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s contén sinaturas GPT, o que indica que ten unha táboa GPT. Aínda así, "
+#~ "non ten unha táboa de partición msdos falsa válida, tal como debería. Se "
+#~ "cadra está danada -- posibelmente por un programa que non entende as "
+#~ "táboas de particións GPT. Ou se cadra eliminou a táboa GPT e agora "
+#~ "emprega unha táboa de particións msdos. É esta unha táboa de particións "
+#~ "GPT?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "A rexión de arranque non comeza no principio da partición."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Este sistema de ficheiros ten un tamaño de sector lóxico de %d. Sábese "
+#~ "que GNU Parted non traballa correctamente con tamaños de sector distintos "
+#~ "de 512 bytes."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "O ficheiro %s está marcado como ficheiro de sistema. Isto significa que "
+#~ "movelo podería facer que outros programas deixen de traballar."
+
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes"
+#~ msgstr ""
+#~ "O tamaño dos sectores de %s é de %d bytes. Sábese que parted non traballa "
+#~ "correctamente con unidades que teñan un tamaño de sector distinto de %d "
+#~ "bytes"
+
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "O dispositivo %s ten unha xeometría moi estraña."
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "O dispositivo %s non é unha unidade SCSI nin IDE."
+
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Erro ao ler %s (%s) para determinar se a partición está montada."
+
+#~ msgid ""
+#~ "Unable to determine if partitions are mounted via /proc/mounts or /etc/"
+#~ "mtab. Make sure you don't attempt to resize or modify mounted file "
+#~ "systems. (Even read-only mounted)"
+#~ msgstr ""
+#~ "Non se puido determinar se as particións están montadas mediante /proc/"
+#~ "mounts ou /etc/mtab. Asegúrese de que non tenta cambia-lo tamaño ou "
+#~ "modificar sistemas de ficheiros montados (incluso se están montados en só-"
+#~ "lectura)."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "A táboa de particións de %s non é consistente. Hai moitos motivos polos "
+#~ "que isto puido pasar. Nembargantes, o motivo máis probable é que Linux "
+#~ "detectara a xeometría da BIOS de %s incorrectamente. GNU Parted sospeita "
+#~ "que a verdadeira xeometría debería ser %d/%d/%d (e non %d/%d/%d). Debería "
+#~ "comprobar isto coa BIOS primeiro, porque todo isto podería non ser "
+#~ "correcto. Pode informar a Linux engadindo o parámetro %s=%d,%d,%d na liña "
+#~ "de comando. Vexa a documentación de LILO ou GRUB para obter máis "
+#~ "información. Se cre que a xeometría suxerida por Parted é correcta, pode "
+#~ "escoller \"Ignorar\" para continuar (e arranxar Linux despois). Noutro "
+#~ "caso, escolla \"Cancelar\" (e arranxe Linux e/ou a BIOS agora)."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "A táboa de particións de %s non é consistente. Hai moitos motivos polos "
+#~ "que isto puido pasar. Moitas veces, o motivo é que Linux detectou a "
+#~ "xeometría da BIOS incorrectamente. Nembargantes, este non parece se-lo "
+#~ "caso agora. Pódese ignorar isto de xeito seguro pero facelo pode causar "
+#~ "problemas (que se poden arranxar) con algúns cargadores de inicio, e "
+#~ "tamén pode causar problemas con sistemas de ficheiros FAT. Recoméndase o "
+#~ "emprego de LBA."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Non se puido aliña-la partición correctamente. Isto, seguramente, "
+#~ "signifique que outra ferramenta de particionamento xerou unha táboa de "
+#~ "particións incorrecta, porque non tiña a xeometría da BIOS correcta. "
+#~ "Pódese ignorar de xeito seguro, pero facelo pode provocar problemas (que "
+#~ "se poden arranxar) con algúns cargadores de inicio."
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "O soporte de apertura de sistemas de ficheiros %s non está implementado "
+#~ "aínda."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "O soporte de comprobación de sistemas de ficheiros %s non está "
+#~ "implementado aínda."
+
+#~ msgid "raw block copying"
+#~ msgstr "copiando bloque a bloque"
+
+#~ msgid "growing file system"
+#~ msgstr "aumentando o sistema de ficheiros"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Non se pode copiar nunha partición que se solapa."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "O soporte directo de copia de sistemas de ficheiros non está implementado "
+#~ "aínda para %s. Nembargantes, o soporte para o cambio de tamaño sí está. "
+#~ "Polo tanto, pódese copia-lo sistema de ficheiros se a partición nova é "
+#~ "alomenos tan grande coma a vella. Así que, ou ben reduza a partición que "
+#~ "quere copiar, ou copie nunha partición máis grande."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "O soporte de copia de sistemas de ficheiros %s non está implementado "
+#~ "aínda."
+
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "Detectouse un erro en GNU parted. Por favor, envíe un informe de erro a "
+#~ "bug-parted@gnu.org que conteña a versión (%s) e a seguinte mensaxe:"
+
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Tentáronse le-los sectores %ld-%ld fóra da partición en %s"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "¡Descriptores de grupo non consistentes!"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "¡Sistema de ficheiros cheo!"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "¡Este sistema de ficheiros ten unha organización moi estraña! Parted non "
+#~ "lle pode cambia-lo tamaño a isto (aínda)."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr ""
+#~ "Superbloque incorrecto. ¿Está seguro de que este é un sistema de "
+#~ "ficheiros ext2?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "¡O sistema de ficheiros ten erros! Debería executar e2fsck."
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr ""
+#~ "¡O sistema de ficheiros non foi desmontado limpamente! Debería executar "
+#~ "e2fsck."
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr ""
+#~ "O sistema de ficheiros ten unha característica incompatible activada."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Erro ao buscar espacio para o buffer cache."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr ""
+#~ "Atopei un inode cunha conta de ligazóns incorrecta. Mellor será que "
+#~ "empregue e2fsck antes."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "¡Non hai inodes libres dabondo!"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr ""
+#~ "¡O sistema de ficheiros está demasiado ocupado para eliminar un grupo!"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "¡O sistema de ficheiros ten demasiados inodes ocupados para eliminar un "
+#~ "grupo!"
+
+#~ msgid "adding groups"
+#~ msgstr "engadindo grupos"
+
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "O seu sistema de ficheiros está demasiado ocupado para cambiarlle o "
+#~ "tamaño a %i bloques. Síntoo."
+
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "O seu sistema de ficheiros ten demasiados inodes ocupados para cambiarlle "
+#~ "o tamaño a %i bloques. Síntoo."
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr ""
+#~ "¡Atopáronse bloques ligados entre si! ¡Mellor será que empregue e2fsck "
+#~ "antes!"
+
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "¿O bloque %i non ten unha referencia? Moi raro."
+
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "¡O bloque %i non debería estar marcado!"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "O sistema de ficheiros ext2 pasou unha comprobación básica. Para unha "
+#~ "comprobación máis a fondo, empregue o programa e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "¡Síntoo, ainda non podo move-lo principio das particións ext2!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "¡Non se puido baleira-lo buffer cache!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "gravando os metadatos por grupos"
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr ""
+#~ "O sistema de ficheiros ten unha sinatura incorrecta para un sistema de "
+#~ "ficheiros FAT."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Demasiadas páxinas incorrectas."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "onde sexa necesario, pedi-la intervención do usuario"
+
+#~ msgid "START and END are in megabytes\n"
+#~ msgstr "INICIO e FIN indícanse en megabytes\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "¿Número da partición orixe?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "¿Número da partición de destino?"
+
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Solicitou crear unha partición en %.3f-%.3fMb. O máis semellante que pode "
+#~ "manexar Parted é %.3f-%.3fMb."
+
+#~ msgid "Extended partitions can't have file systems. Did you want mkpart?"
+#~ msgstr ""
+#~ "As particións estendidass non poden ter sistemas de ficheiros. ¿Quería "
+#~ "executar mkpart?"
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Non se pode mover unha partición a si mesma. ¿Non quererá usar resize?"
+
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Solicitou move-la partición a %.3f-%.3fMb. O máis semellante que pode "
+#~ "manexar Parted é %.3f-%.3fMb."
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Menor: %d\n"
+
+#~ msgid "Flags: "
+#~ msgstr "Modificadores: "
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Sistema de Ficheiros: %s\n"
+
+#~ msgid "Size: %10.3fMb (%d%%)\n"
+#~ msgstr "Tamaño: %10.3fMb (%d%%)\n"
+
+#~ msgid "Minimum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Tam. mínimo: %10.3fMb (%d%%)\n"
+
+#~ msgid "Maximum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Tam. Máximo: %10.3fMb (%d%%)\n"
+
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "Xeometría de disco de %s: 0.000-%.3f megabytes\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Menor Inicio Fin "
+
+#~ msgid "Type "
+#~ msgstr "Tipo "
+
+#~ msgid "Filesystem "
+#~ msgstr "Sistema de ficheiros "
+
+#~ msgid "Name "
+#~ msgstr "Nome "
+
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Solicitou cambia-lo tamaño da partición a %.3f-%.3fMb. O máis semellante "
+#~ "que pode manexar Parted é %.3f-%.3fMb."
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr ""
+#~ "check MENOR facer unha comprobación simple no sistema de "
+#~ "ficheiros"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [DE-DISPOSITIVO] DE-MENOR A-MENOR copiar sistema de fich. noutra "
+#~ "partición"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs MENOR TIPO-SF crear un sistema de ficheiros TIPO-SF na partición "
+#~ "MENOR"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr ""
+#~ "mkpartfs TIPO-PARTICION TIPO-SF INICIO FIN\n"
+#~ " crear unha partición cun sistema de "
+#~ "ficheiros"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START END move partition MINOR"
+#~ msgstr "move MENOR INICIO FIN move-la partición MENOR"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr ""
+#~ "resize MENOR INICIO FIN cambia o tamaño do sistema de ficheiros da part. "
+#~ "MENOR"
+
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Atopou un erro en GNU parted. Por favor, envíe un informe de erro a bug-"
+#~ "parted@gnu.org que conteña a versión (%s) e a seguinte mensaxe:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ " Ten particións FAT de Windows que non empregan LBA. Se a BIOS soporta "
+#~ "LBA debería cambiar a LBA estabrecendo o modificador LBA en tódalas "
+#~ "particións FAT. Noutro caso, asegúrese de que o sistema operativo e a "
+#~ "BIOS teñen a mesma xeometría antes de cambia-lo tamaño de ningunha "
+#~ "partición FAT."
+
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "O sistema operativo cre que a xeometría de %s é %d/%d/%d. Polo tanto, o "
+#~ "cilindro 1024 remata en %.3fM.%s"
+
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "O sistema operativo cre que a xeometría de %s é %d/%d/%d.%s"
+
+#~ msgid ""
+#~ "The FATs aren't big enough to describe all clusters! Each FAT is %d "
+#~ "sectors. There are %d clusters, which would require each FAT to be %d "
+#~ "sectors. This is REALLY weird. You might want to write us an email: bug-"
+#~ "parted@gnu.org"
+#~ msgstr ""
+#~ "¡As FATs non son grandes dabondo para describir tódolos clusters! Cada "
+#~ "FAT ten %d sectores. Hai %d clusters, que precisan que cada FAT teña %d "
+#~ "sectores. Isto SI que é estraño. Se cadra debería mandarnos unha mensaxe "
+#~ "electrónica: bug-parted@gnu.org"
+
+# ¿Para que carallo pon este a abreviatura MB en minúsculas,
+# cando todo o mundo sabe que é en maiúsculas? - jt
+#~ msgid ""
+#~ "This swap partition is not compatible with Linux version 2.1.117 or "
+#~ "earlier. Use a smaller partition (maximum size 128mb) if you want to use "
+#~ "old versions of Linux."
+#~ msgstr ""
+#~ "Esta partición de intercambio non é compatible con Linux versión 2.1.117 "
+#~ "ou anterior. Empregue unha partición máis pequena (tamaño máximo 128MB) "
+#~ "se quere usar versións antigas de Linux."
+
+#~ msgid "unknown"
+#~ msgstr "descoñecido"
+
+#~ msgid "Unknown SCSI"
+#~ msgstr "SCSI descoñecido"
+
+#~ msgid "GUID Partition Table Header Signature is wrong: "
+#~ msgstr "A Sinatura Cabeceira da Táboa de Particións GUID é incorrecta: "
+
+#~ msgid " should be "
+#~ msgstr " debía ser "
+
+#~ msgid "GPT Header CRC check failed, %x should be %x."
+#~ msgstr "A comprobación CRC da Cabeceira GPT, %x debía ser %x."
+
+#~ msgid "GPT Partition Entry Array CRC check failed, %x should be %x."
+#~ msgstr ""
+#~ "A comprobación CRC do Array de Entradas da Partición GPT fallou, %x debía "
+#~ "ser %x."
+
+#~ msgid ""
+#~ "This disk contains a valid Primary and Alternate GUID Partition Table but "
+#~ "the Protective MBR is invalid. This generally means that the disk had "
+#~ "GPT partitions on it, but then a legacy partition editing tool was used "
+#~ "to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and rewrite the "
+#~ "PMBR.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk."
+#~ msgstr ""
+#~ "Este disco contén unha Táboa de Partición GUID Primaria e Alternativa, "
+#~ "pero o MBR Protector non é válido. Isto adoita significar que o disco "
+#~ "tiña particións GPT, pero despois empregouse unha ferramenta de "
+#~ "particionamento antiga para cambia-la táboa de particións armacenada no "
+#~ "MBR.\n"
+#~ "¿Que datos son válidos, GPT ou MBR?\n"
+#~ "Si ha supor que a información GPT é correcta, e ha regrava-lo PMBR.\n"
+#~ "Non ha supor que o MBR é correcto, e ha borra-la información GPT.\n"
+#~ "Ignorar ha supor que o MBR é correcto, pero non ha cambia-lo disco."
+
+#~ msgid ""
+#~ "This disk contains a valid Alternate GUID Partition Table but the Primary "
+#~ "GPT and Protective MBR are invalid. This generally means that the disk "
+#~ "had GPT partitions on it, but then a legacy partition editing tool was "
+#~ "used to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and will rewrite the "
+#~ "PMBR and Primary GPT.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk."
+#~ msgstr ""
+#~ "Este disco contén unha Taboa de Particións GUID Alternativa válida, pero "
+#~ "a GPT Primaria e o MBR Protector non son válidos. Isto adoita significar "
+#~ "que o disco tivo particións GPT pero despois empregouse unha ferramenta "
+#~ "de particionamento antiga para cambia-la táboa de particións armacenada "
+#~ "no MBR.\n"
+#~ "¿Que datos son válidos, GPT ou MBR?\n"
+#~ "Si ha supor que a información GPT é correcta, e ha regrava-lo PMBR e a "
+#~ "GPT Primaria.\n"
+#~ "Non ha supor que o MBR é correcto, e ha borra-la información GPT.\n"
+#~ "Ignorar ha supor que o MBR é correcto, pero non ha cambia-lo disco."
+
+#~ msgid ""
+#~ "This disk contains a valid Primary GUID Partition Table but the Alternate "
+#~ "GPT and Protective MBR are invalid. This generally means that the disk "
+#~ "had GPT partitions on it, but then a legacy partition editing tool was "
+#~ "used to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and will rewrite the "
+#~ "PMBR and Alternate GPT.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk.\n"
+#~ msgstr ""
+#~ "Este disco contén unha Taboa de Particións GUID Primaria válida, pero a "
+#~ "GPT Alternativa e o MBR Protector non son válidos. Isto adoita significar "
+#~ "que o disco tivo particións GPT pero despois empregouse unha ferramenta "
+#~ "de particionamento antiga para cambia-la táboa de particións armacenada "
+#~ "no MBR.\n"
+#~ "¿Que datos son válidos, GPT ou MBR?\n"
+#~ "Si ha supor que a información GPT é correcta, e ha regrava-lo PMBR e a "
+#~ "GPT Alternativa.\n"
+#~ "Non ha supor que o MBR é correcto, e ha borra-la información GPT.\n"
+#~ "Ignorar ha supor que o MBR é correcto, pero non ha cambia-lo disco.\n"
+
+#~ msgid "The new partition overlaps with another partition."
+#~ msgstr "A nova partición superponse con outra partición."
+
+#~ msgid "Can't set non-Linux partitions as a root device."
+#~ msgstr "Non se poden estabrecer particións non Linux coma dispositivo raiz."
+
+#~ msgid "Can't set non-Linux partitions as a swap device."
+#~ msgstr ""
+#~ "Non se poden estabrecer particións non Linux coma dispositivo de "
+#~ "intercambio."
+
+#~ msgid "No get_resize_constraint for %s!"
+#~ msgstr "¡%s non ten get_resize_constraint!"
+
+#~ msgid "The %s file system code doesn't support %s disk labels."
+#~ msgstr ""
+#~ "O código do sistema de ficheiros %s non soporta etiquetas de disco %s."
+
+#~ msgid "Creating new %s disklabels is not implemented yet."
+#~ msgstr ""
+#~ "A creación de novas etiquetas de disco %s non está implementado ainda."
+
+#~ msgid "The code to write the partition table hasn't been written for %s yet"
+#~ msgstr ""
+#~ "Ainda non se escribíu o código de escritura de táboas de particións para "
+#~ "%s"
+
+#~ msgid ""
+#~ "Can't resize an extended partition so as to exclude a logical partition."
+#~ msgstr ""
+#~ "Non se pode cambia-lo tamaño dunha partición estendida escluindo unha "
+#~ "partición lóxica."
+
+#~ msgid "Can't grow a partition onto used space."
+#~ msgstr "Non se pode facer medra-la partición sobre espacio usado."
+
+#~ msgid "Insane! %d clusters!"
+#~ msgstr "¡Isto é unha toleada! ¡%d clusters!"
+
+#~ msgid ""
+#~ "The filesystem is going to be too big for FAT16, so FAT32 will be used. "
+#~ "This is not compatible with MS-DOS, early versions of MS-Windows 95 and "
+#~ "Windows NT. If you use these operating systems, then select cancel, and "
+#~ "create a smaller partition. If you only use Linux, BSD, MS Windows 98 "
+#~ "and/or MS Windows 95 B, then select OK."
+#~ msgstr ""
+#~ "O sistema de ficheiros vai ser grande de máis para FAT16, así que usarase "
+#~ "FAT32. Isto non é compatible con MS-DOS, versións antigas de MS-Windows "
+#~ "95 e Windows NT. Se usa eses sistemas operativos, escolla `Cancelar', e "
+#~ "cree unha partición máis pequena. Se só usa Linux, BSD, MS Windows 98 e/"
+#~ "ou MS Windows 95 B, entón escolla `Aceptar'."
+
+#~ msgid "Weird: fat_calc_sizes() failed for FAT32!"
+#~ msgstr "Estraño: ¡fallou a chamada a fat_calc_sizes() para FAT32!"
+
+#~ msgid ""
+#~ "Would you like to use FAT32 for this filesystem? It is much more "
+#~ "efficient with your disk space, but is not compatible with early versions "
+#~ "of Windows 95 and Windows NT. Only select yes if you only use Linux, "
+#~ "BSD, MS Windows 98 and/or MS Windows 95 B."
+#~ msgstr ""
+#~ "¿Quere usar FAT32 neste sistema de ficheiros? É moito máis eficiente co "
+#~ "seu espacio en disco, pero non é compatible con versións antigas de "
+#~ "Windows 95 e Windows NT. Escolla `Si' só se só usa Linux, BSD, MS Windows "
+#~ "98 e/ou MS Windows 95 B."
+
+#~ msgid ""
+#~ "File system doesn't have expected sizes for Windows to like it. Number "
+#~ "of clusters is %d (%d expected); size of FATs is %d sectors (%d expected)."
+#~ msgstr ""
+#~ "O sistema de ficheiros non ten os tamaños esperados para que a Windows "
+#~ "lle goste. O número de clusters é %d (esperábanse %d); o tamaño das FATs "
+#~ "é de %d sectores (esperábanse %d)."
+
+#~ msgid ""
+#~ "Partition size (%ld sectors) and filesystem size (%ld sectors) do not "
+#~ "match."
+#~ msgstr ""
+#~ "O tamaño da partición (%ld sectores) e o do sistema de ficheiros (%ld "
+#~ "sectores) non coinciden."
+
+#~ msgid "Linux-swap partitions can not be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións de intercambio de Linux non poden estar ocultas nas "
+#~ "etiquetas de disco msdos."
+
+#~ msgid "Linux-swap partitions can not be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "As particións de intercambio de Linux non poden ser de inicio nas "
+#~ "etiquetas de disco msdos."
+
+#~ msgid "HFS partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións HFS non poden estar ocultas nas etiquetas de disco msdos."
+
+#~ msgid "JFS partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións JFS non poden estar ocultas nas etiquetas de disco msdos."
+
+#~ msgid "Reiserfs partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións Reiserfs non poden estar ocultas nas etiquetas de disco "
+#~ "msdos."
+
+#~ msgid "Reiserfs partitions must be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "As particións Reiserfs deben ser de inicio nas etiquetas de disco pc98."
+
+#~ msgid "XFS partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "As particións XFS non poden estar ocultas nas etiquetas de disco msdos."
+
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. You should "
+#~ "check that this matches the BIOS geometry before using this program."
+#~ msgstr ""
+#~ "O sistema operativo cre que a xeometría de %s é %d/%d/%d. Debería "
+#~ "comprobar que isto coincide coa xeometría da BIOS antes de usar este "
+#~ "programa."
+
+#~ msgid ""
+#~ "There is no boot code on this disk. Would you like to use GNU parted's "
+#~ "boot loader?"
+#~ msgstr ""
+#~ "Non hai un programa de arrinque neste disco. ¿Quere usa-lo cargador de "
+#~ "GNU parted?"
+
+#~ msgid "No get_system() for %s!"
+#~ msgstr "¡Non hai unha chamada get_system() para %s!"
+
+#~ msgid "Can't create a partition with the start after the end."
+#~ msgstr "Non se pode crear unha partición co comezo despois da fin."
+
+#~ msgid ""
+#~ "No filesystem found on partition. Can't determine what partition system "
+#~ "to use."
+#~ msgstr ""
+#~ "Non se atopou un sistema de ficheiros na partición. Non se puido "
+#~ "determina-lo sistema de particións a usar."
+
+#~ msgid "FAT filesystems don't have an id for non-msdos partition tables"
+#~ msgstr ""
+#~ "Os sistemas de ficheiros FAT non teñen un identificador para táboas de "
+#~ "particións que non son de msdos."
+
+#~ msgid ""
+#~ "Would you like to use FAT32? It is more efficient, but it is not "
+#~ "compatible with MS-DOS, early versions of MS-Windows 95 and Windows NT. "
+#~ "If you use these operating systems, then select No. If you only use "
+#~ "Linux, BSD, MS Windows 98 and/or MS Windows 95 B, then you may select Yes."
+#~ msgstr ""
+#~ "¿Quere usar FAT32? É Moi eficiente, pero non é compatible con MS-DOS, "
+#~ "versións antigas de MS-Windows 95 e Windows NT. Se usa eses sistemas "
+#~ "operativos, escolla `Non'. Se só usa Linux, BSD, MS Windows 98 e/ou MS "
+#~ "Windows 95 B, entón pode escoller `Si'."
+
+#~ msgid ""
+#~ "The filesystem is going to be too big for FAT16, so FAT32 must be used. "
+#~ "This is not compatible with MS-DOS, early versions of MS-Windows 95 and "
+#~ "Windows NT. If you use these operating systems, then select Cancel, and "
+#~ "create a smaller partition. If you only use Linux, BSD, MS Windows 98 "
+#~ "and/or MS Windows 95 B, then select OK."
+#~ msgstr ""
+#~ "O sistema de ficheiros vai ser grande de máis para FAT16, así que se ha "
+#~ "usar FAT32. Isto non é compatible con MS-DOS, versións antigas de MS-"
+#~ "Windows 95 e Windows NT. Se usa eses sistemas operativos, escolla "
+#~ "`Cancelar', e cree unha partición máis pequena. Se só usa Linux, BSD, MS "
+#~ "Windows 98 e/ou MS Windows 95 B, entón escolla `Aceptar'."
+
+#~ msgid "hide"
+#~ msgstr "hide"
+
+#~ msgid "Disk geometry: 1-%d, %dk cylinders\n"
+#~ msgstr "Xeometría de disco: 1-%d, %dk cilindros\n"
+
+#~ msgid "Minor Start End Type Filesystem Flags\n"
+#~ msgstr ""
+#~ "Menor Inicio Fin Tipo Sist.Ficheiros Modificadores\n"
+
+#~ msgid "unhide"
+#~ msgstr "unhide"
+
+#~ msgid "hide MINOR hides partition MINOR"
+#~ msgstr "hide MENOR agocha-la partición MENOR"
+
+#~ msgid "Partition length of %dk is too small."
+#~ msgstr "A lonxitude da partición de %dk é moi pequena."
+
+#~ msgid "There are no possible configurations for this cluster size."
+#~ msgstr "Non hai configuracións posibles para este tamaño de cluster."
+
+#~ msgid ""
+#~ "To resize this filesystem to this size, the cluster size must be changed "
+#~ "from %d bytes to %d bytes. This functionality is not yet implemented. "
+#~ "Note that there are many weird different sizes that can be achieved with "
+#~ "the same cluster size - if you keep experimenting with different "
+#~ "partition sizes, you might be lucky!!!"
+#~ msgstr ""
+#~ "Para cambiar este sistema de ficheiros a este tamaño, o tamaño do cluster "
+#~ "debe ser cambiado de %d bytes a %d bytes. Esta funcionalidade non está "
+#~ "implementada ainda. Teña en conta que hai moitos tamaños diferentes que "
+#~ "se poden conseguir co mesmo tamaño de cluster - ¡se segue a experimentar "
+#~ "con diferentes tamaños de partición, podería ter sorte!"
+
+#~ msgid ""
+#~ "The filesystem is going to be too big for FAT16, (with a cluster size of "
+#~ "%dk, anyway) so FAT32 will be used. This is not compatible with MS-DOS, "
+#~ "early versions of MS-Windows 95 and Windows NT. If you use these "
+#~ "operating systems, then select cancel, and create a smaller partition. "
+#~ "If you only use Linux, BSD, MS Windows 98 and/or MS Windows 95 B, then "
+#~ "select OK."
+#~ msgstr ""
+#~ "O sistema de ficheiros ha ser grande de máis para FAT16 (cun tamaño de "
+#~ "cluster de %d, de tódolos xeitos), así que se ha usar FAT32. Isto non é "
+#~ "compatible con MS-DOS, versións antigas de MS-Windows 95 e Windows NT. Se "
+#~ "usa estes sistemas operativos, escolla `Cancelar' e cree unha partición "
+#~ "máis pequena. Se só usa Linux, BSD, MS Windows 98 e/ou MS Windows 95 B, "
+#~ "escolla `Aceptar'."
+
+#~ msgid "the root directory"
+#~ msgstr "o directorio raiz"
+
+#~ msgid "fat_read_clusters: clusters %ld-%ld outside filesystem"
+#~ msgstr ""
+#~ "fat_read_clusters: os clusters %ld-%ld están fóra do sistema de ficheiros"
+
+#~ msgid "fat_write_clusters: clusters %ld-%ld outside filesystem"
+#~ msgstr ""
+#~ "fat_write_clusters: os clusters %ld-%ld están fóra do sistema de ficheiros"
diff --git a/po/hu.gmo b/po/hu.gmo
new file mode 100644
index 0000000..75a9461
--- /dev/null
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..dc3e0b8
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,3337 @@
+# Hungarian translation of parted
+# Copyright (C) 2016 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# Szervác Attila <sas at 321 dot hu>, 2006.
+# Gabor Kelemen <kelemeng at ubuntu dot com>, 2016.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.1.90\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2016-05-27 20:34+0200\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.5\n"
+"X-Launchpad-Export-Date: 2016-05-26 09:04+0000\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "a(z) %s argumentum érvénytelen a következőhöz: %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "a(z) „%s†argumentum nem egyértelmű a következÅ‘höz: „%sâ€"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Az érvényes argumentumok a következők:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "íráshiba"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Ismeretlen rendszerhiba"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a „-W %s†kapcsoló nem egyértelmű\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a(z) „%s†kapcsoló nem egyértelmű, lehetőségek:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: a(z) „%c%s†kapcsoló ismeretlen\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a(z) „%c%s†kapcsoló nem enged meg argumentumot\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a(z) „--%s†kapcsolóhoz argumentum szükséges\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: érvénytelen kapcsoló -- „%câ€\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a kapcsoló egy argumentumot igényel -- „%câ€\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Sikerült"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nincs találat"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Érvénytelen reguláris kifejezés"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Érvénytelen leválogatási karakter"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Érvénytelen karakterosztálynév"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Záró visszaper"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Érvénytelen visszahivatkozás"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Pár nélküli [ vagy [^"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Pár nélküli ( vagy \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Pár nélküli \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "A \\{\\} tartalma érvénytelen"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Érvénytelen tartományvég"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Elfogyott a memória"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Érvénytelen megelőző szabályos kifejezés"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "A reguláris kifejezés túl korán véget ért"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "A reguláris kifejezés túl nagy"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Pár nélküli ) vagy \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Nincs előző reguláris kifejezés"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[iIyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Csomagolta: %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Csomagolta: %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Licenc: GPLv3+: A GNU GPL 3. vagy újabb változata <http://gnu.org/licenses/"
+"gpl.html>\n"
+"Ez egy szabad szoftver: terjesztheti és/vagy módosíthatja.\n"
+"NINCS GARANCIA, a törvény által engedélyezett mértékig.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Ãrta %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Ãrta %s és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Ãrta %s, %s, és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, %s, és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, %s, %s, és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, és %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Ãrta %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, és mások.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"A hibák a(z) %s címen jelenthetők.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "A(z) %s hibái a(z) %s címen jelenthetők.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "A(z) %s honlapja: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+"Ãltalános segítség a GNU szoftverek használatához: <http://www.gnu.org/"
+"gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "elfogyott a memória"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Lemezkép"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Hiba %s megnyitása közben: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr "%s nem nyitható meg írásra/olvasásra (%s). %s most csak olvasható."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s olvasáshoz pozicionálás közben ezen: %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s olvasáskor ezen: %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "%s nem írható, mert csak olvashatóként van megnyitva."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s íráshoz pozicionálás közben ezen: %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s írás közben ezen: %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "További információkért adja ki a(z) „%s --help†parancsot.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Használat: %s [KAPCSOLÓ] [ESZKÖZ]…\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Az operációs rendszer értesítése a partíciós tábla változásairól.\n"
+"\n"
+" -d, --dry-run ne értesítse ténylegesen az operációs rendszert\n"
+" -s, --summary kontextusok összefoglalásának kiírása\n"
+" -h, --help súgó megjelenítése és kilépés\n"
+" -v, --version verzióinformációk kiírása és kilépés\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Ha nincs megadva ESZKÖZ, az összes partíció szondázása.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"A hibák a(z) <%s> címen jelenthetők.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%s nem nyitható meg."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "A tároló nem szondázható."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s megpróbálja lemezre szinkronizálni ezt: %s"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Nem érhető el az eszköz: %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Nem határozható meg %s dm típusa."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Nem határozható meg %s szektormérete: %s.\n"
+"Az alap szektorméret (%lld) lesz felhasználva."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Nem határozható meg %s fizikai szektormérete.\n"
+"A logikai szektorméret (%lld) lesz felhasználva."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Nem sikerült megállapítani %s méretét (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Ãltalános IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Nem sikerült azonosítani ezt az eszközt: %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"%s eszköz fizikai szektorai több (%d) logikai szektort tartalmaznak.\n"
+"A GNU Parted ezt most KÃSÉRLETI módon támogatja egyes lemezcímke/"
+"fájlrendszer párokhoz, pl.: GPT és ext2/3.\n"
+"Nézze meg a weben elérhető dokumentációt."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Hiba a SCSI eszköz előkészítésekor: %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"%s eszköz olyan kicsi, hogy nem tárolhat fájlrendszert vagy partíciós "
+"táblát. Lehet, hogy rossz eszközt választott?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Nem határozható meg a(z) %s fájl/eszköz geometriája. Ne használja a Parted-"
+"et, hacsak nem tudja BIZTOSAN, hogy mit csinál!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Ãltalános SD/MMC tárolókártya"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Új eszköz?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID-vezérlő"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA eszköz"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA Ethernet fölött eszköz"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD eszköz"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries virtuális DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart tömb"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID vezérlő"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O vezérlő"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Hurokeszköz"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen virtuális blokkeszköz"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio blokkeszköz"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux szoftveres RAID tömb"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Nem támogatott eszköztípus"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Hiba %s fsync/bezárás műveletekor: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s fájl vége %s olvasásakor"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Nem sikerült a kernelt értesíteni a következő partíció módosításáról: %s -- "
+"%s. Ez azt jelenti, hogy a Linux az újraindításig nem fog tudni semmit %s "
+"változásairól - így semmi esetre se csatolja vagy használja azt egy "
+"újraindítás előtt."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Nem határozható meg %s kezdete és hossza."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"%s partíciókra írás történt ezen: %s, de nem lehetett a kernelt a "
+"változásról értesíteni, valószínűleg azért, mert használatban vannak. Ennek "
+"eredményeként a régi partíciók maradnak használatban. Indítsa újra a "
+"rendszert most, további módosítások végrehajtása előtt."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "A vég nem lehet a kezdet előtt! (kezdő szektor=%jd, hossz=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Kísérlet a partíción kívüli %ld-%ld szektorok írására ezen: %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "hibás blokkok keresése"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "A visszakövetésben %d hívás van a veremben:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "A kijelentés (%s) itt: %s:%d, ezen függvényben: %s() meghiúsult."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: ismeretlen lemezcímke"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"A libparted nem támogatja az írást ide: %s. Lehet, hogy csak olvasóként "
+"fordították."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "A(z) %d. partíció %s, de a fájlrendszer %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ismeretlen lemezjelző, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s lemez címkéi nem támogatják a kiterjesztett partíciókat."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"A(z) %s lemezcímkék nem támogatják a logikai vagy kiterjesztett partíciókat."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Túl sok elsődleges partíció."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "Kiterjesztett partíció nélkül nem készíthető logikai partíció ide: %s."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Nem lehet egynél több kiterjesztett partíció itt: %s"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Nem lehetnek logikai partíciók a kiterjesztetten kívül."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Nem lehet logikai partíció a kiterjesztetten kívül itt: %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Nem lehet elsődleges partíció egy kiterjesztettben."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Nem lehet partíció a lemezen kívül!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Nem lehetnek egymást átfedő partíciók."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metaadatok"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "szabad"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extended"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logical"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primary"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "hidden"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ismeretlen partíciójelző: %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Információ"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Figyelmeztetés"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Hiba"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Végzetes"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Programhiba"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Nincs megvalósítva"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Javítás"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Igen"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nem"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Újra"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Mellőzés"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Megszakítás"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Hiba a GNU Partedben. A hibajelentéshez hasznos információkért nézze meg a "
+"parted weboldalát itt: http://www.gnu.org/software/parted/parted.html A "
+"hibajelentést küldje el e-mailben ide: %s, írja meg legalább a verziót (%s), "
+"és a következő üzenetet:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Az AIX lemezcímkék olvasásának támogatása még nincs megvalósítva."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Az AIX lemezcímkék írásának támogatása még nincs megvalósítva."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"A partíciók AIX lemezcímkékhez adásának támogatása még nincs megvalósítva."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"A partíciók AIX lemezcímkékben duplikálásának támogatása még nincs "
+"megvalósítva."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"A partíciók rendszertípusának AIX lemezcímkékben való beállításának "
+"támogatása még nincs megvalósítva."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"A jelzők AIX lemezcímkékben való beállításának támogatása még nincs "
+"megvalósítva."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"A Parted nem tudja a(z) %d bájttól eltérő szektorméretű HFS fájlrendszereket "
+"kezelni."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Nem elégíthető ki minden korlátozás a partíción."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Nem foglalható partíciószám."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Nem lehet BSD lemezcímke helyet foglalni."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Nem lehet dasd lemezcímke helyet foglalni"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Érvénytelen partíciós tábla ezen: %s -- rossz %x aláírás."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Érvénytelen partíciós tábla - rekurzív partíció ezen: %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"A Parted nem tud átméretezni Windows Dynamic Disk által kezelt partíciókat."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "nem lehet több partíciót létrehozni"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s nem tartalmaz kiterjesztett partíciót (kötetfejléc partíciót)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Az ellenőrzőösszeg hibás, ez a partíciós tábla sérülését jelzi."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Csak elsődleges partíciók lehetnek gyökérpartíciók."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Csak elsődleges partíciók lehetnek swap partíciók."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Csak logikai partíciók lehetnek indítófájlok."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"nem sikerült a dvh partíciónév beállítása erre: %s:\n"
+"Csak logikai partícióknak (indítófájlok) lehet nevük."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Túl sok elsődleges partíció"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "megnyitási hiba"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "pozicionálási hiba"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "olvasási hiba"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() hiba"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API verzióeltérés"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nem támogatott lemeztípus"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nem támogatott lemezformátum"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "A lemez használatban van"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Szintaktikai hiba a beállítófájlban"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "A kötetcímke sérült"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Egy adathalmaz neve sérült"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "A memóriafoglalás meghiúsult"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Az eszközellenőrzés meghiúsult"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "A megadott eszköz nem érvényes DASD eszköz"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Végzetes hiba"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Nincs hely a kötetcímkének."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Nincs hely a partícióinformációknak."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Érvénytelen VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Nem kérhető le az API verzió."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"A jelenlegi API verzió („%dâ€) nem felel meg a dasd illesztÅ‘program API "
+"verziójának („%dâ€)!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Nem sikerült lekérni a lemezinformációkat."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Nem sikerült lekérni a lemezgeometria-információkat."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Nem sikerült lekérni a blokkméret-információkat."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "az eszköz túl kicsi a GPT-hez"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"A GPT partíciós tábla formátuma %x verziójú, ami újabb a Parted által "
+"felismerhetőnél. Jelentse be ezt hibaként!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Nem minden, %s számára elérhető hely tűnik használatban lévőnek. Javíthatja "
+"a GPT-t az összes hely (további %llu blokk) felhasználásához, vagy "
+"folytathatja a jelenlegi beállításokkal."
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"A tartalék GPT tábla nem a lemez végén van, ahol lennie kellene. Javítja a "
+"tartalék áthelyezésével a végére (és a régi tartalék törlésével)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Az elsődleges GPT tábla és a tartalék is sérült. Próbáljon egy újat "
+"készíteni, és a Parted rescue funkciójával visszaállítani a partíciókat."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"A tartalék GPT tábla sérült, de az elsődleges jónak tűnik, így az lesz "
+"felhasználva."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Az elsődleges GPT tábla sérült, de a tartalék jónak tűnik, így az lesz "
+"felhasználva."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "elsődleges partícióstábla-tömb CRC eltérés"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "a partíciónév fordítása meghiúsult"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Érvénytelen %x aláírás a Mac lemez címkékhez."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "A partíciótérképen nincs partíciótérkép bejegyzés."
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s túl kicsi egy Mac lemezcímkéhez."
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "%d. partíció %x aláírása érvénytelen."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "%d. partíció hossza érvénytelen, 0 bájt."
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Az adatterület nem a partíció elején kezdődik."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "A partíció boot területe nem fedi le a teljes partíciót."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "A partíció adatterülete nem fedi le a teljes partíciót."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "Fura blokkméret az eszközleírón: %d bájt nem osztható 512-vel."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Az illesztőprogram-leíró szerint a fizikai blokkméret %d bájt, de az a Linux "
+"szerint %d bájt."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nincs érvényes partíciótérkép."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"A partíciótérkép bejegyzésméretei ütköznek. Az 1. bejegyzés szerint %d, %d. "
+"szerint %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Fura! Két partíciótérkép-bejegyzés van!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Egy gyökér vagy swap partíció nevének megváltoztatása megakadályozza, hogy a "
+"Linux akként felismerje."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Nem vehető fel másik partíció -- a partíciótérkép túl kicsi!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Érvénytelen partíciós tábla ezen: %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "%d. partíció nem igazodik a cilinderhatárokhoz. Ez még nem támogatott."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Nem vehető fel másik partíció."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"a(z) %jd szektoros partícióhossz meghaladja a(z) %s partíciós tábla által "
+"előírt %jd maximumot"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"a kezdő %jd szektorszám meghaladja a(z) %s partíciós tábla által előírt %jd "
+"maximumot"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s: Hibás ellenőrzőösszeg a(z) %llu blokkon (típus: %s)."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s: Nem található rdb blokk, ez nem fordulhatna elő."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s: Hurok található a(z) %d. blokkban."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s: a(z) %s lista hibásnak tűnik ebben a blokkban: %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s: A hibás blokkok kiírása sikertelen."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s: A partícióblokkok kiírása sikertelen."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s: A fájlrendszerblokkok kiírása sikertelen."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s: Az indítóblokkok kiírása sikertelen."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "A partícióblokk írása sikertelen itt: %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Sérült Sun lemezcímke észlelve."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"A lemez operációs rendszer által jelzett CHS geometriája (%d,%d,%d) nem "
+"egyezik a lemezcímkén tárolttal (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "A lemezcímke nagyobb lemezt ír le, mint %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "A lemez %d cilinderű, ami nagyobb, mint a maximális 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Már csak a Teljes lemez partíció elérhetÅ‘. Ãltalában nem jó ötlet ezt "
+"felülírni egy valódival. A Solaris nem biztos, hogy elindul enélkül, és a "
+"SILO (a sparc boot betöltő) is értékeli a jelenlétét."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "A Sun lemezcímke betelt."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "Az eszköz megnyitása sikertelen"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "a pozicionálás az eszközön sikertelen"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "az eszközre írás sikertelen"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "az eszközről olvasás sikertelen"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "A kötetcímke nem olvasható."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "A kötetcímke nem írható."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "A VTOC címkék nem olvashatók."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "A VTOC FMT1 DSCB nem olvasható."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "A VTOC FMT4 DSCB nem olvasható."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "A VTOC FMT5 DSCB nem olvasható."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "A VTOC FMT7 DSCB nem olvasható."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "A VTOC címkék nem írhatók."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "A VTOC FMT1 DSCB nem írható."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "A VTOC FMT4 DSCB nem írható."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "A VTOC FMT5 DSCB nem írható."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "A VTOC FMT7 DSCB nem írható."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "A VTOC FMT9 DSCB nem írható."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Elfogyott a memória."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Nem kérhető le az egységméret a speciális „COMPACT†egységhez."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "„%s†érvénytelen szintaxist tartalmaz a helyekhez."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "A maximális fej érték %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "A maximális szektor érték %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "%s hely kívül esik ezen az eszközön: %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Érvénytelen szám."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Az 1-nél kisebb érték helyett használjon kisebb egységet."
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s: Partícióblokk foglalása sikertelen\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s: Blokk foglalása sikertelen\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s: Nem olvasható a(z) %llu. indító blokk\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s: Nem olvasható a(z) %llu. gyökér blokk\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s: Azonosítólista elem foglalása sikertelen\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s: Nem olvasható a(z) %llu. blokk\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s: Hibás ellenőrzőösszeg a(z) %llu blokkon (típus: %s)\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: Nem írható a(z) %d. blokk\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: A disk_specific rdb blokk foglalása sikertelen\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s: Nem található rdb blokk, ez nem fordulhatna elő\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s: A(z) %llu. partícióblokk foglalása sikertelen\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"A GNU Parted hibásan lett lefordítva: a FAT indítószektornak 512 bájtnak "
+"kell lennie. A FAT támogatás le lesz tiltva."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "A fájlrendszer aláírása érvénytelen a FAT fájlrendszerhez."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "A fájlrendszer szektormérete érvénytelen a FAT fájlrendszerhez."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "A fájlrendszer fürtmérete érvénytelen a FAT fájlrendszerhez."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"A fájlrendszer fenntartott szektorainak száma érvénytelen a FAT "
+"fájlrendszerhez."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "A fájlrendszer FAT-jainak száma érvénytelen."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"A fájlrendszer CHS geometriája (%d, %d, %d) érvénytelen. A partíciós tábla "
+"CHS geometriája (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "A FAT boot szektor szerint a logikai szektorméret 0. Fura. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "A FAT boot szektor szerint nincsenek FAT táblák. Fura. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "A FAT boot szektor szerint a fürtök 0 szektorosak. Fura. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "A fájlrendszer FAT12, ami nem támogatott."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Ismeretlen régi stílusú linux swap aláírás: „%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Ismeretlen új stílusú linux swap aláírás: „%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Ismeretlen swsusp linux swap aláírás: „%9sâ€."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"A Parted nem tudja a(z) %d bájttól eltérő szektorméretű HFS fájlrendszereket "
+"kezelni."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"A fájlrendszer CHS geometriája (%d, %d, %d), ami érvénytelen. A partíciós "
+"tábla CHS geometriája (%d, %d, %d). Ha a Mellőzést választja, a fájlrendszer "
+"CHS geometriája változatlan marad. Ha a Javítást választja, a fájlrendszer "
+"CHS geometriája a partíciós tábla CHS geometriájának megfelelően lesz "
+"beállítva."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Az információs szektorban hibás aláírás van (%x). Egyelőre válassza a "
+"Megszakítás lehetőséget, és küldjön hibajelentést. Ha nagyon eltökélt, ez "
+"valószínűleg biztonsággal figyelmen kívül hagyható."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"%s szabad lemezhely szükséges a partíció átméretezéséhez a megadott méretre. "
+"Most csak %s szabad."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "A fürt kezdeti eltérése = %d, ami nem a(z) %d fürtméret többszöröse."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "Hibás könyvtárbejegyzés ehhez: %s: az első fürt a fájl vége jelző."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Hibás FAT: befejezetlen lánc ehhez: %s. Futtassa a dosfsck vagy a scandisk "
+"programot."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Hibás FAT: a(z) %d. fürt kívül esik a fájlrendszeren %s láncában. Futtassa a "
+"dosfsck vagy a scandisk programot."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Hibás FAT: a(z) %d. fürt kereszthivatkozva van ehhez: %s. Futtassa a dosfsck "
+"vagy a scandisk programot."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s %dk, de %d fürtje van (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "A partíció túl nagy vagy túl kicsi egy %s fájlrendszerhez."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"A FAT-ek nem egyeznek. Ha nem tudja, ez mit jelent, akkor válassza a "
+"Megszakítást, futtassa a scandisk programot a fájlrendszeren, és próbálja "
+"újra."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Ehhez a FAT típushoz nincsenek lehetséges beállítások."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"A fájlrendszer méretei nem a Windows által elvártak. A fürtméret %dk (várt: "
+"%dk), a fürtök száma %d (várt: %d), a FAT-ek mérete %d szektor (várt: %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "A fájlrendszer szerint a szabad hely %d fürt, nem pedig %d fürt."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Nincs elég hely a gyökérkönyvtárban az összes fájlnak. Szakítsa meg, vagy a "
+"fájlok elvesztéséhez válassza a Mellőzést."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Hiba a gyökérkönyvtárba írás közben."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Ha a fájlrendszert FAT16-ként hagyja, nem lesz gond."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Ha FAT16-ra vált, és az MS Windows telepítve van ezen a partíción, akkor "
+"újra kell telepíteni az MS Windows rendszertöltőjét. Ha ezt szeretné, nézze "
+"meg a Parted (vagy a disztribúciója) kézikönyvét."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "Ha a fájlrendszert FAT32-ként hagyja, nem lesz újabb gond."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Ha FAT32-re vált, és az MS Windows telepítve van ezen a partíción, akkor "
+"újra kell telepíteni az MS Windows rendszertöltőjét. Ha ezt szeretné, nézze "
+"meg a Parted (vagy a disztribúciója) kézikönyvét. A FAT32-re váltás egyben "
+"olvashatatlanná teszi a fájlrendszert az MS DOS, MS Windows 95a és MS "
+"Windows NT számára."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Szeretne FAT32-t használni?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "A fájlrendszer csak FAT16-ra alakítással méretezhető át ekkorára."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "A fájlrendszer csak FAT32-re alakítással méretezhető át ekkorára."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"A GNU Parted nem tudja ezt a partíciót ekkorára méretezni. Dolgozunk rajta!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"A(z) %d. FAT %x. médiája nem egyezik a boot szektor %x médiájával. "
+"Valószínűleg futtatni kellene a scandisk-et."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: a(z) %ld. fürt kívül esik a fájlrendszeren"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: a(z) %ld. fürt kívül esik a fájlrendszeren"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: nincs szabad fürt"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Nem észlelhető fájlrendszer."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "%s fájlrendszerek átméretezése nem támogatott"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "A fájlrendszer nagyobb, mint a kötet!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "A fájlrendszeren hibák vannak."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "A hibás blokkok nem olvashatók."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Kísérlet egy extent regisztrálására a(z) 0x%X blokkal kezdődően, de már "
+"létezik egy másik ezen a pozíción. Ellenőrizze a fájlrendszert!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Kísérlet egy extent áthelyezésére a(z) 0x%X. blokkból a(z) 0x%X. blokkba, de "
+"már létezik egy másik ezen a pozíción. Ez nem fordulhatna elő!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Nem sikerült az extent gyorsítótár frissítése a(z) %X CNID-jű HFS fájlhoz."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Kísérlet a(z) %X CNID-jű HFS fájl olvasására a fájl végén túl."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Nem található a(z) %2$X CNID-jű HFS fájl %1$lli. szektora."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Kísérlet a(z) %X CNID-jű HFS fájl írására a fájl végén túl."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Nem sikerült az extent gyorsítótár frissítése a(z) %X CNID-jű HFS+ fájlhoz."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Kísérlet a(z) %X CNID-jű HFS+ fájl olvasására a fájl végén túl."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Nem található a(z) %2$X CNID-jű HFS+ fájl %1$lli. szektora."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Kísérlet a(z) %X CNID-jű HFS+ fájl írására a fájl végén túl."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Elnézést, a HFS így még nem méretezhető át."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "zsugorítás"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Sikertelen adatáthelyezés."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Az adatáthelyezés adatokat hagyott a kötet végén."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "HFS elsődleges könyvtárblokk írása"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Nem található érvényes HFS[+X] aláírás megnyitáskor."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "A HFS+ %d. verziója nem támogatott."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "A HFSX %d. verziója nem támogatott."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Az adatáthelyezés adatokat hagyott a kötet végén."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Hiba a foglalási fájl írásakor."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Hiba a foglalási fájl kompatibilitási részének írásakor."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "HFS+ kötetfejléc írása"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Hiba történt a hibás blokkok kötelező fájljának keresése közben."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Úgy tűnik, a HFS átalakító hibás: a hibás blokkok fájlja nem tartalmazza a "
+"beágyazott HFS+ kötetet."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Elnézést, a HFS+ így még nem méretezhető át."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "beágyazott HFS+ kötet zsugorítása"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "A HFS+ kötet átméretezése meghiúsult."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "HFS átalakító zsugorítása"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "A HFS átalakító frissítése meghiúsult."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Ez nem egy valódi %s ellenőrzés. Ez alacsony szintű fájlokat fog kinyerni "
+"hibakeresési céllal."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Hibás a blokklista-fejléc ellenőrzőösszege."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr "Érvénytelen tranzakcióblokk-méret a napló újrajátszásakor (%i bájt)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"A köteten kívüli napló nem támogatott. Próbálja meg kikapcsolni a naplót, és "
+"futtassa újra a Parted-et."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "A napló eltolása vagy mérete nem a szektorméret többszöröse."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Hibás bűvös számok a napló fejlécében."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "A napló mérete eltér a napló infoblokkjában és a napló fejlécében."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Néhány fejlécmező nem a szektorméret többszöröse."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"A naplóban tárolt szektorméret nem 512 bájt. A Parted csak az 512 bájt "
+"méretű szektorokat támogatja."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Hibás napló-ellenőrzőösszeg."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"A napló nem üres. A Parted-nek újra kell játszania a fájlrendszer megnyitása "
+"előtt. Ez módosítja a fájlrendszert."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"A kötet fejléce vagy az elsődleges könyvtárblokk megváltozott a napló "
+"újrajátszásakor. Újra kell indítani a Parted-et."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Egy extent nem lett áthelyezve."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Egy extenthivatkozás nem létező helyről érkezik. Ellenőrizni kellene a "
+"fájlrendszert!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Ennek a HFS+ kötetnek nincs katalógusfájlja. Ez nagyon szokatlan!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ennek a HFS kötetnek nincs extenttúlcsordulási fájlja. Ez nagyon szokatlan!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Az extenttúlcsordulási fájl nem tartalmazhatja a saját extentjeit! "
+"Ellenőrizni kellene a fájlrendszert."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Nem sikerült a fájlrendszert a memóriába gyorsítótárazni."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "A hibás blokkok listája nem tölthető be."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Hiba történt az extent áthelyezéskor."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Ennek a HFS+ kötetnek nincs katalógusfájlja. Ez nagyon szokatlan!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ennek a HFS kötetnek nincs extenttúlcsordulási fájlja. Ez nagyon szokatlan!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "ezen súgóüzenet megjelenítése"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "minden blokkos eszköz partícióelrendezésének kiírása"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "gépileg feldolgozható kimenet megjelenítése"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "gépileg feldolgozható kimenet megjelenítése"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "soha ne kérdezzen"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "verzió megjelenítése"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "új partíciók igazítása"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"A SZÃM a Linux által használt partíciószám. Egy MS-DOS lemezcímkén "
+"(partíciós táblán) az elsődleges partíciók 1-től 4-ig, a logikaiak 5-től "
+"számozódnak.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "A CÃMKETÃPUS ezek egyike: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "A JELZÅ ezek egyike: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "Az EGYSÉG ezek egyike: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "kívánt igazítás: minimum vagy optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "A PART-TÃPUS ezek egyike: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "Az FS-TÃPUS ezek egyike: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"A KEZDET és VÉG lemezhelyek, pl.: 4GB vagy 10%. A negatív értékek a lemez "
+"végéről számítódnak. Például a -1s az utolsó szektort adja.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"A VÉG egy lemezhely, pl.: 4GB vagy 10%. A negatív értékek a lemez végéről "
+"számítódnak. Például a -1s az utolsó szektort adja.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "Az ÃLLAPOT ezek egyike: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "Az ESZKÖZ általában a /dev/hda vagy /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "A NÉV tetszőleges\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Ez a program szabad szoftver, a GNU General Public License-ben foglaltak "
+"alapján.\n"
+"\n"
+"Ezt a programot abban a reményben terjesztjük, hogy hasznos lesz, de nem\n"
+"vállalunk SEMMIFÉLE GARANCIÃT, még olyan értelemben sem, hogy a program\n"
+"alkalmas-e a KÖZREADÃSRA vagy EGY BIZONYOS FELADAT ELVÉGZÉSÉRE.\n"
+"További részletekért tanulmányozza a GNU GPL licencet.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(hátralévő idő: %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "A(z) %s partíció használatban van. Biztos, hogy folytatni kívánja?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "%s partíciói használatban vannak."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"A meglévő lemezcímke ezen: %s megsemmisül, és a lemezen lévő minden adat "
+"elvész. Szeretné folytatni?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Az új lemezcímke típusa?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "A partíció típusa?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "A partíció neve?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "A fájlrendszer típusa?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Kezdete?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Vége?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Egy partíciót kért innentől: %s idáig: %s (szektorok: %llu..%llu).\n"
+"A legközelebbi használható hely ez: %s - %s (szektorok: %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Ez elfogadható?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Az eredményül kapott partíció igazítása nem megfelelő a legjobb "
+"teljesítményhez."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s lemez címkéi nem támogatják a kiterjesztett partíciókat."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "A partíció száma?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s lemez címkéi nem támogatják a kiterjesztett partíciókat."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "A partíció típusa?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Érvénytelen szám."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "A partíció típusa?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Érvénytelen szám."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS cilinder,fej,szektor geometria: %d,%d,%d. Minden cilinder %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Típus: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "%s lemez: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Szektorméret (logikai/fizikai): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partíciós tábla: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Lemezjelzők: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Szám"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Kezdet"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Vég"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Méret"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Típus"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Fájlrendszer"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Név"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Jelzők"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Szabad hely"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Egy %s %s partíció található itt: %s -> %s. Szeretné hozzáadni a partíciós "
+"táblához?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "fájlrendszerek keresése"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "A resize parancs eltávolításra került a parted 3.0-ban"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Egy partíció zsugorítása adatvesztést okozhat, biztosan folytatni szeretné?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Új eszköz?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "igazítás típusa (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d igazítva\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d nem igazított\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "A megfordítandó jelző?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Új állapot?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Egység?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TÃPUS N TÃPUS(min|opt) igazítás keresése "
+"az N. partíción"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [PARANCS] általános súgó vagy a PARANCS "
+"súgójának kiírása"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable CÃMKETÃPUS új lemezcímke (partíciós tábla) "
+"létrehozása"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TÃPUS [FS-TÃPUS] KEZDET VÉG partíció készítése"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"Az „mkpart†partíciót hoz létre, új fájlrendszer létrehozása nélkül. Az FS-"
+"TÃPUS megadható megfelelÅ‘ partícióazonosító beállítása érdekében.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name SZÃM NÉV a SZÃM. partíciót elnevezése a "
+"NÉVVEL"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|SZÃM] a partíciós tábla, elérhetÅ‘ "
+"eszközök, szabad hely, minden megtalált partíció vagy egy adott partíció "
+"megjelenítése"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Argumentumok nélkül a „print†az egész partíciós táblát megjeleníti. Azonban "
+"a következő argumentumokkal különböző egyéb műveleteket hajt végre.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : az összes aktív blokkos eszköz megjelenítése\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : információk megjelenítése a szabad particionálatlan helyről az "
+"aktuális blokkos eszközön\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : az összes aktív blokkos eszköz partíciós tábláinak kiírása\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit kilépés a programból"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue KEZDET VÉG a KEZDET és VÉG környéki partíció "
+"helyreállítása"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "A resize parancs eltávolításra került a parted 3.0-ban\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart SZÃM VÉG a SZÃM. partíció átméretezése"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm SZÃM a SZÃM. partíció törlése"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select ESZKÖZ a szerkesztendő eszköz kiválasztása"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set JELZÅ ÃLLAPOT a JELZÅ módosítása a kijelölt "
+"eszközön"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [JELZÅ] a JELZŠállapotának átváltása a "
+"kijelölt eszközön"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set SZÃM JELZÅ ÃLLAPOT a JELZŠátváltása a SZÃM. partíción"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [SZÃM [JELZÅ]] a JELZŠállapotának átváltása a "
+"SZÃM. partíción"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit EGYSÉG az alapértelmezett egység "
+"beállítása az EGYSÉGRE"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version megjeleníti a GNU Parted "
+"verziószámát és a szerzői jogi információkat"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"a „version†megjeleníti a GNU Parted ezen példányának verzió- és szerzői "
+"jogi információit\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Használat: %s [-hlmsv] [-a<igazítás>] [ESZKÖZ [PARANCS [PARAMÉTEREK]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nem található eszköz"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "FIGYELMEZTETÉS: Ön nem rendszergazda. Figyeljen a jogosultságokra.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"A rendszertöltőt újraindítás előtt újra kell telepíteni. További "
+"információkért lásd a Parted felhasználói dokumentáció 4. fejezetét."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Szükség lehet az /etc/fstab frissítésére.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Ãœdvözli a GNU Parted! Ãrja be a 'help' szót a parancsok listájának "
+"megnézéséhez.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Használat: parted [KAPCSOLÓ]... [ESZKÖZ [PARANCS [PARAMÉTEREK]...]...]\n"
+"A PARAMÉTEREKKEL rendelkező PARANCSOK alkalmazása az ESZKÖZRE. Ha nincs "
+"megadva\n"
+"PARANCS, interaktív módban fut.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Hibát talált a GNU Partedben! A következőket kell tennie:\n"
+"\n"
+"Ne essen pánikba! A hiba valószínűleg nem befolyásolta az adatokat.\n"
+"Segíthet a hiba kijavításában a következő módon:\n"
+"\n"
+"Ellenőrizze, hogy a hiba nincs-e már javítva a GNU Parted legfrissebb\n"
+"verziójában, ami innen érhető el:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Ellenőrizze ezt a verziót a hiba bejelentése előtt.\n"
+"\n"
+"Ha még nincs javítva, vagy nem tudja, hogyan ellenőrizze, akkor\n"
+"keresse fel a GNU Parted weboldalát:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"további információkért.\n"
+"\n"
+"Angol nyelvű jelentésének tartalmaznia kell ezen kiadás verzióját (%s)\n"
+"a lenti hibaüzenettel együtt, majd a következő parancs kimenetét:\n"
+"\n"
+"\tparted ESZKÖZ unit co print unit s print\n"
+"\n"
+"és a kiadott parancsok következő listáját.\n"
+"A rendszerével kapcsolatos, fontosnak tűnő információkat is\n"
+"csatolja.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Parancselőzmények:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Hiba: SEGV_MAPERR (Cím nincs leképezve objektumra)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Hiba: SEGV_ACCERR (Érvénytelen jogosultságok a leképezett objektumhoz)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Hiba: Ãltalános SIGSEGV szignál.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Hiba: FPE_INTDIV (egész: osztás nullával)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Hiba: FPE_INTOVF (egész: túlcsordulás)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTDIV (lebegőpontos: osztás nullával)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTOVF (lebegőpontos: túlcsordulás)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTUND (lebegőpontos: alulcsordulás)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTRES (lebegőpontos: pontatlan eredmény)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTINV (lebegőpontos: érvénytelen művelet)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Hiba: FPE_FLTSUB (lebegőpontos: kívül esik a tartományon)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Hiba: Ãltalános SIGFPE szignál érkezett."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Hiba: ILL_ILLOPC (Érvénytelen műveletkód)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Hiba: ILL_ILLOPN (Érvénytelen operandus)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Hiba: ILL_ILLADR (Érvénytelen címzési mód)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Hiba: ILL_ILLTRP (Érvénytelen trap)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Hiba: ILL_PRVOPC (Privilegizált műveletkód)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Hiba: ILL_PRVREG (Privilegizált regiszter)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Hiba: ILL_COPROC (Koprocesszor hiba)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Hiba: ILL_BADSTK (Belső veremhiba)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Hiba: Ãltalános SIGILL szignál érkezett."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "érvénytelen jelsor: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Egy partíciószám szükséges."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "A partíció nem létezik."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Egy fájlrendszertípus szükséges."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Ismeretlen „%s†fájlrendszertípus."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Egy lemezcímketípus szükséges."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Nem lehet több partíciót létrehozni."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Egy partíciótípus szükséges."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "KAPCSOLÓK:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "PARANCSOK:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"A hibák a(z) %s címen jelenthetők.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "%s használatával\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Ennek a parancsnak nincs értelme nem interaktív módban.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a(z) „--%s†kapcsoló nem enged meg argumentumot\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: a(z) „--%s†kapcsoló ismeretlen\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a „-W %s†kapcsoló nem enged meg argumentumot\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a(z) „-W %s†kapcsolóhoz argumentum szükséges\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "A(z) %s honlapja: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "érvénytelen %s%s argumentum: „%sâ€"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "érvénytelen utótag a(z) %s%s argumentumban: „%sâ€"
+
+#, c-format
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s: a(z) „%s†argumentum túl nagy"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "A partíciós tábla nem olvasható újra. Ez azt jelenti, hogy újra kell "
+#~ "indítani a rendszert a módosított partíciók csatolása előtt. Az "
+#~ "újraindítás előtt újra kell telepíteni a rendszertöltőt is (amihez "
+#~ "szükség lehet a módosított partíciók csatolására). Mindkettőt lehetetlen "
+#~ "megtenni. Emiatt egy mentő lemezről kell indítani a rendszert, és "
+#~ "újratelepíteni a rendszertöltőt a mentő lemezről. További információkért "
+#~ "lásd a Parted felhasználói dokumentáció 4. fejezetét."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Nem lehet újraolvasni %s partíciós tábláját (%s). A Hurd most nem tud "
+#~ "semmit a változásokról. %s bármilyen felhasználása előtt újra kell "
+#~ "indítani a gépet."
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Kiterjesztett partíciók nem rejthetők el msdos lemezcímkéken."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "A boot terület nem a partíció elején kezdődik."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "A fájlrendszer logikai szektormérete %d. A GNU Parted nem működik jól 512 "
+#~ "bájttól eltérő szektorméretekkel."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "%s rendszerfájlként van meg jelölve. Ãthelyezése után elÅ‘fordulhat, hogy "
+#~ "egyes programok leállnak."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " SZÃM : részletesebb információk megjelenítése az adott "
+#~ "partícióról\n"
diff --git a/po/id.gmo b/po/id.gmo
new file mode 100644
index 0000000..83603cb
--- /dev/null
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 0000000..c6dce3a
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,3300 @@
+# Pesan Bahasa Indonesia untuk GNU parted
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2006.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2009.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2010.
+# Andika Triwidada <andika@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-07 10:22+0700\n"
+"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.0\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumen %s tidak valid untuk %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumen %s ambigu untuk %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Argumen yang valid adalah:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "galat tulis"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Galat sistem tak dikenal"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opsi '%s%s' ambigu\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opsi '%s%s' ambigu; kemungkinan:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opsi tak dikenal '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opsi '%s%s' tidak mengizinkan sebuah argumen\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opsi '%s%s' membutuhkan sebuah argumen\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opsi tidak valid -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opsi membutuhkan sebuah argumen -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "'"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Sukses"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Tak ada yang cocok"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ekspresi regular tidak valid"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Karakter kolasi tidak valid"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nama kelas karakter tidak valid"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Backslash di ekor"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Back reference tidak valid"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Tidak cocok [, [^, [:, [., atau [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Tidak cocok ( atau \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Tidak cocok \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Isi tidak valid dari \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Akhir rentang tidak valid"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Kehabisan memori"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ekspresi regular pendahulu tidak valid"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Akhir dini dari ekspresi reguler"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Ekspresi regular terlalu besar"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Tidak cocok ) atau \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Tidak ada ekpresi regular sebelumnya"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[tT]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Dipaketkan oleh %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Dipaketkan oleh %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Lisensi GPLv3+: GNU GPL versi 3 atau yang lebih baru <%s>.\n"
+"Ini adalah perangkat lunak bebas: Anda bebas mengubah dan mendistribusikan "
+"ulang.\n"
+"Tidak ada GARANSI, yang dilindungi oleh hukum yang berlaku.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Ditulis oleh %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Ditulis oleh %s dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Ditulis oleh %s, %s, dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, %s, dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, %s, %s, dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, dan %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Ditulis oleh %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, dan yang lainnya.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Laporkan bug ke: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Laporkan bug %s ke: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Beranda %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Bantuan umum memakai peranti lunak GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "kehabisan memori"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Image Disk"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Galat saat membuka %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Tidak dapat membuka %s untuk baca-tulis (%s). %s telah dibuka hanya-baca."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s selama seek untuk dibaca pada %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s selama pembacaan pada %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Tidak bisa menulis ke %s, karena ini dibuka secara hanya-baca."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s selama seek untuk menulis pada %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s selama penulisan pada %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Coba '%s --help' untuk informasi lebih lanjut.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Penggunaan: %s [OPSI] [PERANGKAT]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Beritahukan sistem operasi tentang perubahan tabel partisi.\n"
+"\n"
+" -d, --dry-run jangan informasikan ke sistem operasi\n"
+" -s, --summary tampilkan rangkuman dari isi\n"
+" -h, --help tampilkan bantuan ini dan keluar\n"
+" -v, --version keluarkan informasi versi dan keluar\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Jika tak ada PERANGKAT yang diberikan, selidiki seluruh partisi.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Laporkan bug ke <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Tidak dapat membuka %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Tidak dapat memprobe store."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"PERINGATAN: kernel gagal membaca ulang tabel partisi pada %s (%s). "
+"Akibatnya, itu mungkin tidak mencerminkan semua perubahan Anda sampai "
+"setelah reboot."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Peringatan: tidak dapat membuka %s (%s). Akibatnya, itu mungkin tidak "
+"mencerminkan semua perubahan Anda sampai setelah reboot."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Peringatan: gagal membuat penerjemah pergi pada %s (%s). Akibatnya, itu "
+"mungkin tidak mencerminkan semua perubahan Anda sampai setelah reboot."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s mencoba untuk mensinkronisasi %s ke disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Tidak dapat men-stat perangkat %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Tidak dapat menentukan tipe dm dari %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Tidak dapat menentukan ukuran sektor untuk %s: %s.\n"
+"Menggunakan baku ukuran sektor (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Tidak dapat menentukan ukuran sektor fisik untuk %s.\n"
+"Menggunakan ukuran sektor logis (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Tidak dapat menentukan ukuran dari %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE Generik"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Tidak dapat memperoleh identitas dari perangkat %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Perangkat %s memiliki beberapa (%d) sektor logis dalam setiap sektor fisik.\n"
+"GNU Parted mendukung ini dalam tahap PERCOBAAN untuk beberapa kombinasi "
+"label disk label/sistem berkas khusus, contoh GPT dan ext2/3.\n"
+"Silakan lihat situs web untuk informasi terbaru."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Galat saat menginisialisasi perangkat SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Perangkat %s sangat kecil sehingga tidak mungkin menyimpan sistem berkas "
+"atau tabel partisi. Mungkin Anda memilih perangkat yang salah?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Tidak dapat menentukan geometri dari berkas/perangkat %s. Anda seharusnya "
+"tidak menggunakan Parted kecuali Anda BENAR-BENAR tahu apa yang Anda lakukan!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Kartu Penyimpanan SD/MMC Generik"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Perangkat NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Pengendali RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Perangkat Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Perangkat ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Drive DASD IBM S390"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "DASD Virtual IBM iSeries"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Perangkat NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Pengendali ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Pengendali I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UBD Linux Mode-Pengguna"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Perangkat loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Device-mapper Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Divais Blok Virtual Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Tak Dikenal"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Divais Blok Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Larik RAID Perangkat Lunak Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Drive RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipe perangkat tidak disupport"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Galat saat fsync/menutup %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s akhir berkas saat membaca %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Gagal memberitahukan kernel mengenai modifikasi ke partisi %s -- %s. Ini "
+"berarti Linux tidak tahu tentang segala perubahan yang Anda buat pada %s "
+"sampai Anda me-reboot -- jadi Anda seharusnya tidak mengait itu atau "
+"menggunakannya dalam segala cara sebelum reboot."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Tidak dapat menentukan awal dan panjang %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partisi %s pada %s telah ditulis, tetapi kami tidak dapat menginformasikan "
+"kernel tentang perubahan tersebut, mungkin karena itu sedang digunakan. "
+"Akibatnya, partisi lama akan tetap digunakan. Anda harus reboot sekarang "
+"sebelum membuat perubahan lebih lanjut."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Tidak bisa punya (nilai) akhir kurang dari (nilai) awal! (sektor awal=%jd "
+"panjang=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Mencoba untuk menulis sektor %ld-%ld di luar partisi pada %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "memeriksa blok rusak"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace memiliki %d panggilan di stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Asersi (%s) di %s:%d dalam fungsi %s() gagal."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: label diska tak dikenal"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"libparted ini tidak memiliki dukungan tulis untuk %s. Mungkin ini "
+"dikompilasi untuk mode hanya baca."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partisi %d adalah %s, tetapi sistem berkasnya adalah %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Flag diska tak dikenal, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Label diska %s tidak mendukung partisi extended."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Label diska %s tidak mendukung partisi logis atau extended."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Terlalu banyak partisi primer."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Tidak dapat menambahkan sebuah partisi logis pada %s, karena di sana tidak "
+"ada partisi extended."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Tidak dapat memiliki lebih dari satu partisi extended pada %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Tidak dapat memiliki partisi logis di luar dari partisi extended."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Tidak dapat memiliki partisi logis di luar partisi extended pada %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Tidak dapat memiliki partisi primer di dalam sebuah partisi extended."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Tidak dapat memiliki partisi di luar dari disk!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Tidak dapat memiliki partisi yang tumpang tindih."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "free"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extended"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logis"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primer"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "tersembunyi"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Flag partisi tak dikenal, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informasi"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Peringatan"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Galat"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Tidak ada Implementasi"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Perbaiki"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ya"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Tidak"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Coba Lagi"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Abaikan"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Batal"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Sebuah bug telah terdeteksi dalam GNU parted. Lihat ke situs web dari parted "
+"di http://www.gnu.org/software/parted/parted.html untuk informasi lebih "
+"lanjut tentang apa yang mungkin berguna dalam mengirimkan laporan bug! "
+"Tolong kirim surel laporan bug ke %s berisi setidaknya versi (%s) dan pesan "
+"berikut ini: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Dukungan untuk membaca label disk AIX belum diimplementasikan."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Dukungan untuk menulis label disk AIX belum diimplementasikan."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Dukungan untuk menambahkan partisi ke label disk AIX belum diimplementasikan."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Dukungan untuk menduplikasi partisi dalam label disk AIX belum "
+"diimplementasikan."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Dukungan untuk mengatur tipe partisi sistem di label disk AIX belum "
+"diimplementasikan."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Dukungan untuk mengatur flag di label disk AIX belum diimplementasikan."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Tidak dapat menggunakan tabel partisi Atari pada disk dengan ukuran sektor "
+"yang tidak sama dengan %d byte."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Tidak dapat menggunakan tabel partisi Atari pada disk dengan lebih dari %d "
+"sektor."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Terlalu banyak partisi Atari yang terdeteksi. Mungkin ada loop dalam daftar "
+"tertaut XGM. Menggugurkan."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Tidak ada partisi data yang ditemukan dalam ARS pada sektor %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Entri ARS logis berikutnya bukan dari tipe XGM dalam ARS pada sektor %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Tampaknya tidak ada tabel partisi Atari pada disk ini (%s), atau rusak."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"Tidak ada ruang di sektor %lli untuk menyimpan ARS dari partisi logis %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Tidak ada ruang di sektor %lli untuk menyimpan ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Cacah sektor yang disimpan dalam tabel partisi tidak sesuai dengan ukuran "
+"perangkat Anda. Apakah Anda ingin memperbaiki tabel partisi?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Tidak ada ruang di sektor %lli untuk menyimpan BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Ada partisi yang tersisa setelah mengisi tabel AHDI utama."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Tabel AHDI utama telah diisi dengan semua partisi tetapi tabel ICD tidak "
+"kosong sehingga lebih banyak partisi dengan ukuran dan posisi yang tidak "
+"diketahui akan terdeteksi oleh perangkat lunak yang kompatibel dengan ICD. "
+"Apakah Anda ingin membatalkan tabel ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Entri ICD tidak dapat berisi partisi extended atau logis."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Ada partisi yang tersisa setelah mengisi tabel."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Anda tidak dapat menggunakan partisi XGM extended dalam mode ICD (lebih dari "
+"%d partisi primer, jika XGM adalah yang pertama, itu dihitung dua)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Tidak dapat memenuhi semua batasan pada partisi."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Anda tidak dapat menggunakan lebih dari %d partisi primer (mode ICD) jika "
+"Anda menggunakan partisi XGM extended. Jika XGM adalah partisi pertama, itu "
+"dihitung dua."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Tidak dapat mengalokasikan sebuah nomor partisi."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Tidak dapat mengalokasikan sebuah slot disklabel bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Tabel partisi perangkat DASD-LDL tidak dapat diubah.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Tidak dapat mengalokasikan sebuah slot disklabel dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Table partisi tidak valid pada %s -- tanda tangan salah %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Table partisi tidak valid - partisi rekursif pada %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted tidak bisa mengubah ukuran partisi yang diatur oleh Windows Dynamic "
+"Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "tidak bisa membuat lebih banyak partisi lagi"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s tidak memiliki partisi extended (partisi header volume)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Checksum salah, mengindikasikan bahwa tabel partisi terkorupsi."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Hanya partisi primer yang dapat menjadi partisi root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Hanya partisi primer yang dapat menjadi partisi swap."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Hanya partisi logis yang dapat menjadi berkas boot."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"gagal mengatur nama partisi dvh ke %s:\n"
+"Hanya partisi logis (berkas boot) yang memiliki nama."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Terlalu banyak partisi primer"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "galat buka"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "galat seek"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "galat baca"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "galat ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "versi API tidak cocok"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tipe disk tidak didukung"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Format disk tidak didukung"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disk sedang digunakan"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Galat sintaks di berkas konfigurasi"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Label volume terkorupsi"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Sebuah nama set data terkorupsi"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Alokasi memori gagal"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Verifikasi perangkat gagal"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Perangkat yang dinyatakan bukan perangkat DASD yang valid"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER tidak ditemukan di perangkat"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Galat fatal"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Tak ada ruang untuk label volume."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Tak ada ruang untuk info partisi."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC tidak valid."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Tidak dapat mengambil versi API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Versi API saat ini '%d' tidak cocok dengan versi API penggerak dasd '%d'!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Tak dapat mengambil ukuran disk."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Tak dapat mengambil informasi geometri disk."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Tak dapat mengambil informasi ukuran blok."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Geometri disk tidak cocok dengan perangkat DASD tipe 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "perangkat terlalu kecil untuk GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Format tabel partisi GPT adalah versi %x, lebih baru dari format yang Parted "
+"dapat mengenalnya. Harap laporkan ini!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Tidak semua ruang kosong yang tersedia untuk %s nampak digunakan, Anda dapat "
+"memperbaiki GPT untuk menggunakan semua ruang kosong (tambahan %llu blok) "
+"atau melanjutkan dengan pengaturan saat ini? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Tabel GPT cadangan tidak ada pada akhir dari disk, seperti yang seharusnya. "
+"Perbaiki, dengan memindahkan cadangan ke akhir (dan menghapus cadangan lama)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Kedua tabel GPT primer dan cadangan sudah terkorupsi. Cobalah untuk membuat "
+"sebuah tabel yang baru, dan gunakan fitur penyelamatan Parted untuk "
+"memulihkan partisi."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Tabel GPT cadangan telah terkorupsi, tetapi yang primer tampak OK, jadi itu "
+"yang akan digunakan."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Tabel GPT primer telah terkorupsi, tetapi cadangannya tampak OK, jadi itu "
+"yang akan digunakan."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "nilai CRC larik tabel partisi primer tidak cocok"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "gagal menerjemahkan nama partisi"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Tanda tangan %x tidak valid untuk label disk Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Peta partisi tidak memiliki entri peta partisi!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s terlalu kecil untuk sebuah label disk Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partisi %d memiliki tanda tangan %x yang tidak valid."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partisi %d memiliki panjang 0 byte yang tidak valid!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Daerah data tidak dimulai pada awal dari partisi."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Daerah boot partisi tidak menempati seluruh partisi."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Daerah data partisi tidak menempati seluruh partisi."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Ukuran blok aneh pada deskriptor perangkat: %d byte tidak dapat dibagi oleh "
+"512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Deskriptor driver mengatakan bahwa ukuran blok fisik adalah %d bytes, tetapi "
+"Linux mengatakan %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Tidak ditemukan peta partisi yang valid."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Konflik ukuran entri peta partisi! Entri 1 mengatakan %d, tetapi entri %d "
+"mengatakan %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Aneh! Ada 2 entri peta partisi!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr "Mengubah nama partisi root atau swap akan mencegah Linux mengenalinya."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Tidak dapat menambah partisi lagi -- peta partisi terlalu kecil!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabel partisi tidak valid pada %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partisi %d tidak diratakan ke perbatasan silinder. Ini masih tidak didukung."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Tidak dapat menambah partisi lagi."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"panjang partisi dari sektor %jd melampaui maksimum yang dibatasi oleh tabel "
+"partisi %s sebesar %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"memulai penomoran sektor, %jd melampaui maksimum maksimum yang dibatasi "
+"tabel partisi %s sebesar %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Checksum buruk pada blok %llu dengan tipe %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Tidak menemukan blok rdb, seharusnya tidak pernah terjadi."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Loop terdeteksi pada blok %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Senarai %s kelihatannya buruk pada blok %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Gagal untuk mendaftar blok buruk."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Gagal untuk mendaftar blok partisi."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Gagal untuk mendaftar blok sistem berkas."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Gagal untuk mendaftar blok boot."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Gagal untuk menulis blok partisi pada %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Label disk Sun terdeteksi terkorupsi."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometri CHS dari disk (%d,%d,%d) yang dilaporkan oleh sistem operasi tidak "
+"cocok dengan geometri yang disimpan pada label disk (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Label disk mendeskripsikan disk lebih besar dari %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disk memiliki %d silinder, yang besar dari maksimum 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Yang tersisa hanya partisi Seluruh Disk. Umumnya, bukan ide yang baik untuk "
+"menimpa partisi ini dengan yang nyata. Solaris mungkin tidak dapat di-boot "
+"tanpanya, dan SILO (boot loader untuk SPARC) menghargainya juga."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Label disk Sun penuh."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "pembukaan perangkat gagal"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "seek perangkat gagal"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "penulisan ke perangkat gagal"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "membaca dari perangkat gagal"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Tidak dapat membaca label volume."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Tidak dapat menulis label volume."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Tidak dapat membaca label VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Tidak dapat membaca VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Tidak dapat membaca VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Tidak dapat membaca VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Tidak dapat membaca VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Tidak dapat menulis label VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Tidak dapat menulis VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Tidak dapat menulis VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Tidak dapat menulis VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Tidak dapat menulis VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Tidak dapat menulis VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Kehabisan memori."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Tidak dapat mendapatkan ukuran unit untuk unit spesial 'COMPAT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" memiliki syntaks yang tidak valid untuk lokasi."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Nilai head maksimum adalah %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Nilai maksimum dari sektor adalah %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Lokasi %s terletak di luar dari perangkat %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Nomor tidak valid."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Gunakan unit yang lebih kecil alih-alih nilai < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Gagal untuk mengalokasikan blok partisi\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Gagal untuk mengalokasikan blok\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Tidak dapat membaca blok boot %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Tidak dapat membaca blok root %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Gagal mengalokasikan elemen senarai id\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Tidak dapat membaca blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Checksum buruk pada blok %llu dengan tipe %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Tidak dapat menulis blok %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Gagal untuk mengalokasikan blok rdb disk_specific\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Tidak menemukan blok rdb, seharusnya tidak pernah terjadi\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Gagal untuk membaca blok partisi %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted telah salah dikompile: FAT sektor boot seharusnya 512 bytes. "
+"Dukungan FAT akan dinonaktifkan."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"Sistem berkas memiliki tanda tangan yang tidak valid untuk sebuah sistem "
+"berkas FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Sistem berkas memiliki ukuran sektor yang tidak valid untuk sebuah sistem "
+"berkas FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Sistem berkas memiliki ukuran cluster yang tidak valid untuk sistem berkas "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Sistem berkas memiliki angka yang tidak valid bagi sektor yang dicadangan "
+"untuk sebuah sistem berkas FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Sistem berkas memiliki banyaknya FAT yang tidak valid."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Geometri CHS sistem berkas adalah (%d, %d, %d), yang tidak valid. Geometri "
+"CHS tabel partisi adalah (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "Sektor boot FAT mengatakan ukuran sektor logis adalah 0. Ini aneh. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Sektor boot FAT mengatakan tidak ada tabel FAT. Ini aneh. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Sektor boot FAT mengatakan cluster adalah 0 sektor. Ini aneh. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Sistem berkas adalah FAT12, yang tidak didukung."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Tanda tangan swap linux gaya lama yang tak dikenal '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Tanda tangan swap linux gaya baru yang tak dikenal '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Tanda tangan swap linux swsusp yang tak dikenal '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted tidak dapat menggunakan sistem berkas HFS pada disk dengan ukuran "
+"sektor tidak sama dengan %d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Geometri CHS sistem berkas adalah (%d, %d, %d), ini tidak valid. Geometri "
+"CHS tabel partisi adalah (%d, %d, %d). Jika Anda memilih Abaikan, geometri "
+"CHS sistem berkas akan dibiarkan tak diubah. Jika Anda memilih Perbaiki, "
+"geometri CHS sistem berkas akan diatur sehingga cocok dengan geometri CHS "
+"tabel partisi."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Sektor informasi memiliki tanda tangan (%x) yang salah. Pilih batal "
+"sekarang, dan kirim dalam laporan bug. Jika Anda putus asa, mungkin aman "
+"untuk mengabaikannya."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Anda butuh ruang kosong disk %s untuk mengecilkan partisi ke ukuran ini. "
+"Saat ini hanya %s yang kosong."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Delta awal cluster = %d, yang bukan kelipatan dari ukuran cluster %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entri direktori buruk untuk %s: cluster pertama merupakan akhir dari penanda "
+"berkas."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT buruk: rantai tak diakhiri untuk %s. Anda mesti menjalankan dosfsck "
+"atau scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT buruk: cluster %d di luar dari sistem berkas dalam rantai untuk %s. "
+"Anda mesti menjalankan dosfsck atau scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT buruk: cluster %d cross-linked untuk %s. Anda mesti menjalankan dosfsck "
+"atan scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s adalah %dk, tetapi ini memiliki %d cluster (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partisi terlalu besar/kecil untuk sebuah sistem berkas %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Kedua FAT tidak cocok. Jika Anda tidak tahu apa artinya ini, maka pilih "
+"batal, jalankan scandisk pada sistem berkas, dan coba lagi."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Tidak ada konfigurasi yang mungkin untuk tipe FAT ini."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Sistem berkas tidak memiliki ukuran yang diharapkan bagi Windows untuk "
+"menyukainya. Ukuran cluster %dk (diharapkan %dk); banyaknya cluster %d "
+"(diharapkan %d); ukuran FAT %d sektor (diharapkan %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Sistem berkas melaporkan ruang kosong sebagai %d cluster, bukan %d cluster."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Tidak ada cukup ruang bagi direktori root untuk semua berkas. Pilih batal, "
+"atau abaikan untuk kehilangan berkas."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Galat saat menulis ke direktori root."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Jika Anda membiarkan sistem berkas Anda sebagai FAT16, maka Anda tidak akan "
+"punya masalah."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Jika Anda mengubah ke FAT16, dan MS Windows terpasang pada partisi ini, maka "
+"Anda harus memasang ulang boot loader MS Windows. Jika Anda ingin melakukan "
+"ini, Anda mesti membaca terlebih dahulu manual Parted (atau manual dari "
+"distribusi Anda)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Jika Anda membiarkan sistem berkas sebagai FAT32, mungkin Anda tidak menemui "
+"masalah baru."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Jika Anda mengubah ke FAT16, dan MS Windows terpasang pada partisi ini, maka "
+"Anda harus memasang ulang boot loader MS Windows. Jika Anda ingin melakukan "
+"ini, Anda mesti membaca terlebih dahulu manual Parted (atau manual dari "
+"distribusi Anda). Juga, mengubah ke FAT32 akan membuat sistem berkas tidak "
+"dapat dibaca oleh MS DOS, MS Windows 95a, dan MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Maukah Anda menggunakan FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Sistem berkas hanya dapat diubah ke ukuran ini dengan mengonversi ke FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Sistem berkas hanya dapat diubah ke ukuran ini dengan mengonversi ke FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted tidak dapat mengubah partisi ini ke ukuran ini. Kami sedang "
+"mengerjakannya!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d media %x tidak cocok dengan sektor boot media %x. Anda mungkin mesti "
+"menjalankan scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld di luar sistem berkas"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld di luar sistem berkas"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: tidak ada cluster bebas"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Tidak dapat mendeteksi sistem berkas."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "mengubah ukuran sistem berkas %s tidak didukung"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Sistem berkas lebih besar dari volumenya!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Sistem berkas mengandung kesalahan."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Blok buruk tidak dapat dibaca."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Mencoba untuk me-register sebuah extent yang dimulai dari blok 0x%X, tetapi "
+"sudah ada yang lain di posiisi ini. Anda mesti memeriksa sistem berkas!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Mencoba untuk memindahkan sebuah extent dari blok 0x%X ke blok 0x%X, tetapi "
+"sudah ada yang lain di posisi ini. Ini seharusnya tidak terjadi!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Tidak dapat memperbarui singgahan extent untuk berkas HFS dengan CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Mencoba untuk membaca berkas HFS dengan CNID %X di belakang EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Tidak dapat menemukan sektor %lli dari berkas HFS dengan CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Mencoba untuk menulis berkas HFS dengan CNID %X di belakang EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Tidak dapat memperbarui singgahan extent untuk berkas HFS+ dengan CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Mencoba untuk membaca berkas HFS+ dengan CNID %X di belakang EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Tidak dapat menemukan sektor %lli dari berkas HFS+ dengan CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Mencoba untuk menulis berkas HFS+ dengan CNID %X di belakang EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Maaf, HFS belum dapat diubah ukurannya dengan cara itu."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "mengecilkan"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Relokasi data telah gagal."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Relokasi data meninggalkan sebagian data di akhir volume."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "menulis HFS Master Directory Block"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Tidak ditemukan tanda tangan HFS[+X] yang valid ketika membuka."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "HFS+ versi %d tidak didukung."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "HFSX versi %d tidak didukung."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Relokasi data meninggalkan sebagian data di akhir volume."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Galat saat menulis berkas alokasi."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Galat ketika menulis bagian kompatibilitas dari berkas alokasi."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "menulis HFS+ Volume Header"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Sebuah galat terjadi ketika mencari berkas blok buruk yang wajib."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Kelihatannya terjadi kesalahan dalam pembungkus HFS: berkas blok buruk tidak "
+"berisi volume HFS+ tertanam."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Maaf, HFS+ belum dapat diubah ukuran dengan cara itu."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "mengecilkan volume HFS+ tertanam"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Mengubah ukuran volume HFS+ telah gagal."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "mengecilkan pembungkus HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Memperbarui pembungkus HFS telah gagal."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Ini bukan sebuah pemeriksaan %s nyata. Ini akan mengekstrak berkas spesial "
+"level bawah untuk tujuan debugging."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Checksum header senarai blok buruk."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ukuran tidak valid dari suatu blok transaksi ketika memutar ulang jurnal "
+"transaksi (%i byte)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Jurnal yang disimpan di luar dari volume tidak didukung. Cobalah untuk "
+"menonaktifkan jurnal dan jalankan Parted lagi."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Ukuran atau ofset dari journal bukan kelipatan dari ukuran sektor."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Nilai magic tidak benar dalam header jurnal."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Ukuran jurnal tidak cocok di antara blok info jurnal dan header jurnal."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Beberapa ruas header bukan kelipatan dari ukuran sektor."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Ukuran sektor yang disimpan dalam jurnal bukan 512 byte. Parted hanya "
+"mendukung ukuran sektor 512 byte."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Checksum jurnal jelek."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Jurnal tidak kosong. Parted harus memutar ulang transaksi sebelum membuka "
+"sistem berkas. Ini akan memodifikasi sistem berkas."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Header volume atau blok induk direktori telah berubah ketika memainkan ulang "
+"transaksi jurnal. Anda mesti menjalankan ulang Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Sebuah extent belum direlokasikan."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Suatu referensi untuk sebuah extent datang dari tempat yang tidak "
+"seharusnya. Anda mesti memeriksa sistem berkas!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Volume HFS ini tidak memiliki berkas katalog. Ini sangat tidak biasa!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Volume HFS+ ini tidak memiliki berkas overflow extent. Ini tidak biasa!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Berkas overflow extent seharusnya tidak berisi extentnya sendiri! Anda "
+"mesti memeriksa sistem berkas."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Tidak dapat menyinggahkan sistem berkas dalam memori."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Daftar blok buruk tidak bisa dimuat."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Terjadi galat ketika merelokasi extent."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Volume HFS+ ini tidak memiliki berkas katalog. Ini sangat tidak biasa!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Volume HFS+ ini tidak memiliki berkas overflow extent. Ini tidak biasa!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "tampilkan pesan bantuan ini"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "tampilkan tata letak partisi di seluruh perangkat blok"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "tampilkan keluaran yang dapat diurai mesin"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "tampilkan keluaran JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "jangan pernah tanyakan untuk intervensi pengguna"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "dalam mode skrip, perbaiki alih-alih menggugurkan saat diminta"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "tampilkan versi"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "perataan untuk partisi baru"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NOMOR adalah nomor partisi yang biasa digunakan oleh Linux. Pada label disk "
+"MS-DOS, partisi primer bernomor dari 1 sampai 4, partisi logis dari 5 ke "
+"atas.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPE-LABEL adalah salah satu dari: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG adalah salah satu dari: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "SATUAN adalah salah satu dari: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "perataan yang diinginkan: minimal atau optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPE-PART adalah salah satu dari: primer, logis, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPE-FS adalah salah satu dari: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"AWAL dan AKHIR adalah lokasi dari disk, seperti 4GB atau 10%. Nilai negatif "
+"dihitung dari akhir alamat disk. Sebagai contoh, -1s menyatakan persis "
+"sektor terakhir.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"AKHIR adalah lokasi dari disk, seperti 4GB atau 10%. Nilai negatif dihitung "
+"dari akhir alamat disk. sebagai contoh, -1s menyatakan persis sektor "
+"terakhir.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "KEADAAN adalah salah satu dari: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "PERANGKAT biasanya adalah /dev/hda atau /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAMA adalah kata apapun yang Anda inginkan\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Hak Cipta (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Program ini adalah perangkat lunak bebas, dilindungi oleh GNU General Public "
+"Licence.\n"
+"\n"
+"Program ini didistribusikan dengan harapan akan berguna,\n"
+"tetapi TANPA ADANYA GARANSI; bahkan untuk garansi dalam hal\n"
+"PENJUALAN atau KESESUAIAN UNTUK TUJUAN TERTENTU. Lihat\n"
+"GNU General Public License untuk informasi yang lebih detail.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(sisa waktu %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partisi %s sedang digunakan. Anda yakin ingin melanjutkan?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partisi pada %s sedang digunakan."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Disk label yang ada di %s akan dirusak dan seluruh data di disk ini akan "
+"hilang. Apakah Anda ingin melanjutkan?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Tipe label disk baru?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipe partisi?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nama partisi?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Tipe sistem berkas?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Awal?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Akhir?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Anda meminta sebuah partisi dari %s sampai %s (sektor %llu..%llu).\n"
+"Lokasi terdekat yang dapat kami tangani adalah %s sampai %s (sektor %llu.."
+"%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Apakah ini masih dapat Anda terima?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Partisi yang dihasilkan tidak diratakan dengan benar untuk kinerja terbaik: "
+"%s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "tidak diketahui (malloc gagal)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Label disk %s tidak mendukung partisi extended."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Nomor partisi?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Label disk %s tidak mendukung partisi extended."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipe partisi?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Nomor tidak valid."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipe partisi?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Nomor tidak valid."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Geometri silinder,head,sektor BIOS: %d,%d,%d. Setiap silinder adalah %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Ukuran sektor (logis/fisik): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabel Partisi: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Flag Disk: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Nomor"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Mulai"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Akhir"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Ukuran"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tipe"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Sistem berkas"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nama"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flag"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Ruang Kosong"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Sebuah partisi %s %s ditemukan pada %s -> %s. Anda ingin menambahkan ini "
+"pada tabel partisi?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "mencari sistem berkass"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Perintah resize telah dihapus di parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Mengecilkan partisi dapat menyebabkan kehilangan data, Anda yakin ingin "
+"melanjutkan?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Perangkat baru?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "tipe perataan(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d diratakan\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d tidak diratakan: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flag yang akan Dibalik?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Keadaan baru?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Satuan?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TIPE N periksa partisi N untuk perataan "
+"TIPE (min|opt)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [PERINTAH] menampilkan bantuan umum, atau "
+"bantuan tentang PERINTAH"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TIPE-LABEL membuat sebuah disklabel baru "
+"(tabel partisi)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPE-PART [TIPE-FS] AWAL AKHIR membuat sebuah partisi"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' membuat sebuah partisi tanpa membuat sebuah sistem berkas baru pada "
+"partisi. TIPE-FS dapat dinyatakan untuk menata ID partisi yang sesuai.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NOMOR NAMA memberi nama partisi NOMOR dengan "
+"NAMA"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] tampilkan tabel partisi, atau "
+"perangkat yang bisa dipakai, atau ruang kosong, atau seluruh partisi yang "
+"ditemukan"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Tanpa argumen, 'print' menampilkan seluruh tabel partisi. Akan tetapi dengan "
+"diikuti argumen ini akan melakukan beberapa aksi yang berbeda.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : menampilkan seluruh perangkat blok yang aktif\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : menampilkan informasi tentang ruang partisi kosong di perngkat "
+"blok yang sedang dipakai\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : tampilkan tabel partisi dari seluruh perangkat blok yang "
+"aktif\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit keluar dari program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue AWAL AKHIR menyelamatkan partisi yang hilang "
+"di dekat AWAL dan AKHIR"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Perintah resize telah dihapus di parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart NOMOR AKHIR mengubah ukuran partisi NOMOR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NOMOR hapus partisi NOMOR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select PERANGKAT pilih perangkat yang akan disunting"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FLAG STATE ubah FLAG pada perangkat yang "
+"dipilih"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAG] jungkitkan keadaan FLAG pada "
+"perangkat yang dipilih"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set NOMOR FLAG STATE ubah FLAG pada partisi NOMOR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NOMOR [FLAG]] jungkitkan keadaan FLAG pada "
+"partisi NOMOR"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "unit SATUAN menata satuan baku ke SATUAN"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version menampilkan versi dan informasi hak "
+"cipta dari GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' menampilkan hak cipta dan informasi versi yang sesuai dengan "
+"salinan dari GNU Parted ini\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Penggunaan: %s [-hlmsfv] [-a<perataan>] [PERANGKAT [PERINTAH "
+"[PARAMETER]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Tak ada perangkat yang ditemukan"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "PERINGATAN: Anda bukan superuser. Hati-hati dengan izin.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Anda seharusnya memasang ulang boot loader Anda sebelum reboot. Baca bagian "
+"4 dari dokumentasi pengguna Parted untuk informasi lebih lanjut."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Anda mungkin perlu memperbarui /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Selamat datang di GNU Parted| Ketik 'help' untuk melihat daftar perintah.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Penggunaan: parted [OPSI]... [PERANGKAT [PERINTAH [PARAMETER]...]...]\n"
+"Menerapkan PERINTAH dengan PARAMETER ke PERANGKAT. Jika tidak ada PERINTAH "
+"yang diberikan,\n"
+"maka parted akan berjalan dalam mode interaktif.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Anda menemukan sebuah bug dalam GNU Parted! Ini yang harus Anda lakukan:\n"
+"\n"
+"Jangan panik! Bug tersebut sangat boleh jadi tidak mempengaruhi data Anda.\n"
+"Bantu kami untuk memperbaiki bug ini dengan melakukan hal berikut:\n"
+"\n"
+"Periksa apakah bug telah diperbaiki dengan memeriksa\n"
+"versi terbaru dari GNU Parted yang dapat Anda temukan di:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Tolong periksa versi ini terlebih dahulu sebelum melaporkan bug.\n"
+"\n"
+"Jika bug ini belum diperbaiki atau jika Anda tidak tahu bagaimana\n"
+"cara memeriksanya, kunjungi situs web GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"untuk informasi lebih lanjut.\n"
+"\n"
+"Laporan Anda seharusnya berisi versi dari rilis ini (%s)\n"
+"dengan pesan galat di bawah ini, dan keluaran dari perintah\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"dan riwayat dari perintah yang telah Anda jalankan.\n"
+"Sertakan juga informasi tambahan mengenai penyiapan yang\n"
+"Anda anggap penting.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Riwayat Perintah:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Galat: SEGV_MAPPER (Alamat tidak dipetakan ke objek)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Galat: SEGV_ACCER (Izin tidak sah untuk objek yang dipetakan)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Galat: Sebuah sinyal SIGSEGV umum telah dijumpai.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Galat: FPE_INTDIV (Integer: pembagian dengan nol)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Galat: FPE_INTOVF (Integer: overflow)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTDIV (Float: pembagian dengan nol)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTOVF (Float: overflow)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTUND (Float: underflow)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTRES (Float: hasil tidak eksak)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTINV (Float: operasi tidak valid)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Galat: FPE_FLTSUB (Float: subskrip di luar dari jangkauan)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Galat: Sebuah sinyal SIGFPE umum telah dijumpai."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Galat: ILL_ILLOPC (Opcode Ilegal)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Galat: ILL_ILLOPN (Operand Ilegal)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Galat: ILL_ILLADDR (Mode pengalamatan ilegal)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Galat: ILL_ILLTRP (Trap Ilegal)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Galat: ILL_PRVOPC (Opcode Privileged)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Galat: ILL_PRVREG (Register Privileged)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Galat: ILL_COPROC (Galat Koprosesor)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Galat: ILL_BADSTK (Galat Stack Internal)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Galat: Sebuah sinyal SIGILL umum telah dijumpai."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "token tidak valid: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Mengharapkan sebuah nomor partisi."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partisi tidak ada."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Mengharapkan sebuah tipe sistem berkas."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipe sistem berkas tak dikenal \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Mengharapkan sebuah tipe label disk."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Tidak ada flag yang didukung"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Tidak dapat membuat partisi lagi."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Mengharapkan sebuah tipe partisi."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "nyala"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "mati"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPSI:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "PERINTAH:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Laporkan bug ke: %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Menggunakan %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Perintah ini tidak masuk akal dalam mode non-interaktif.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Partisi extended tidak dapat disembunyikan pada label disk msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Partisi extended tidak bisa berupa partisi pemulihan pada label disk "
+#~ "msdos."
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644
index 0000000..7a47a5a
--- /dev/null
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..a716f17
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,3413 @@
+# Italian translation for the parted package
+# Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Giuseppe Sacco <eppesuig@debian.org>, 2004-2006.
+# Milo Casagrande <milo@casagrande.name>, 2008, 2009, 2010, 2011, 2012, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.1.90\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2014-07-10 09:57+0100\n"
+"Last-Translator: Milo Casagrande <milo@milo.name>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: Poedit 1.6.6\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argomento %s per %s non valido"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argomento %s per %s ambiguo"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Argomenti validi sono:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "errore di scrittura"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Errore di sistema sconosciuto"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: l'opzione \"-W %s\" è ambigua\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: l'opzione \"%s\" è ambigua. Possibilità:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opzione \"%c%s\" non riconosciuta\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: l'opzione \"%c%s\" non accetta un argomento\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: l'opzione \"--%s\" richiede un argomento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opzione non valida -- \"%c\"\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: l'opzione richiede un argomento -- \"%c\"\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "\""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "\""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Successo"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nessuna corrispondenza"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Espressione regolare non valida"
+
+# (ndt) http://en.wikipedia.org/wiki/Collation
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Carattere di collazione non valido"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nome classe del carattere non valida"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Backslash finale"
+
+# (ndt) hmmm....
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Riferimento all'indietro non valido"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[ o [^ senza corrispondenza"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( o \\( senza corrispondenza"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ senza corrispondenza"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Contenuto di \\{\\} non valido"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Limite massimo non valido"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memoria esaurita"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Espressione regolare precedente non valida"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Fine prematura dell'espressione regolare"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Espressione regolare troppo grande"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") o \\) senza corrispondenza"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Nessuna espressione regolare precedente"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[sSyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Pacchetto creato da %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Pacchetto creato da %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Licenza GPLv3+: GNU GPL versione 3 o successiva <http://gnu.org/licenses/gpl."
+"html>.\n"
+"Questo programma è software libero: siete liberi di modificarlo e "
+"ridistribuirlo.\n"
+"Non c'è ALCUNA GARANZIA, per quanto consentito dalle vigenti normative.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Scritto da %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Scritto da %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Scritto da %s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s, %s, %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Scritto da %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s e altri.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Segnalare i bug a: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Segnalare i bug di %s a: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Sito web di %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Aiuto per l'utilizzo di software GNU: <http://www.gnu.org/gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memoria esaurita"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Immagine disco"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Errore nell'aprire %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Impossibile aprire %s in lettura-scrittura (%s). %s è stato aperto in sola "
+"lettura."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s durante il posizionamento per la lettura su %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s durante la lettura su %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Impossibile scrivere su %s poiché è stato aperto in sola lettura."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s durante il posizionamento per la scrittura su %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s durante la scrittura su %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Usare \"%s --help\" per ulteriori informazioni.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Uso: %s [OPZIONI] [DEVICE]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informa il sistema operativo riguardo i cambiamenti nella tabella delle "
+"partizioni.\n"
+"\n"
+" -d, --dry-run Non informa il sistema operativo\n"
+" -s, --summary Stampa un sommario dei contenuti\n"
+" -h, --help Visualizza questo aiuto ed esce\n"
+" -v, --version Stampa la versione ed esce\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Quando non viene fornito alcun DEVICE, rileva tutte le partizioni.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Segnalare i bug a <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Impossibile aprire %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Impossibile rilevare il dispositivo di archiviazione."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s nel tentativo di sincronizzare %s sul disco"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Impossibile fare stat del device %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Impossibile determinare il tipo dm di %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Impossibile determinare la dimensione del settore per %s: %s.\n"
+"Verrà utilizzata la dimensione predefinita (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Impossibile determinare la dimensione fisica del settore per %s.\n"
+"Verrà utilizzata la dimensione logica (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Impossibile determinare la dimensione di %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE generico"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Impossibile identificare il device %s -%s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Il device %s ha settori logici multipli (%d) per ogni settore fisico.\n"
+"Il supporto a questa configurazione è SPERIMENTALE e solo per alcune "
+"combinazioni di tipi di etichetta/file system, come GPT ed ext2/3.\n"
+"Per maggiori informazioni, consultare il sito web."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Errore nell'inizializzare il device SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Il device %s è così piccolo che probabilmente non può contenere un file "
+"system o una tabella delle partizioni. È stato selezionato il device errato?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Impossibile determinare la geometria del file/device %s. L'uso di questo "
+"programma è sconsigliato a meno che non si sappia VERAMENTE cosa si sta "
+"facendo."
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Scheda di archiviazione SD/MMC generica"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Nuovo device?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controller RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Dispositivo Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Dispositivo ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Drive IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controller ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controller I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Device di loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Device-mapper Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Device a blocchi Xen Virtual"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Device a blocchi Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Array RAID software Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipo di device non supportato"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Errore nell'eseguire fsync o nel chiudere %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s raggiunta la fine del file durante la lettura di %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Errore nell'informare il kernel delle modifiche alla partizione %s -- %s. "
+"Questo significa che le modifiche apportate a %s non saranno note fino al "
+"successivo riavvio: è consigliato non eseguire il mount o usare il "
+"dispositivo prima del riavvio."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Impossibile determinare l'inizio e la lunghezza di %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Le partizioni %s su %s sono state scritte, ma non è stato possibile "
+"informare il kernel della modifica, probabilmente poiché sono in uso: "
+"restano in uso le vecchie partizioni. È consigliato riavviare ora prima di "
+"eseguire ulteriori modifiche."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Impossibile avere la fine prima dell'inizio (settore iniziale=%jd "
+"lunghezza=%jd)."
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"Tentativo di scrivere i settori %ld-%ld al di fuori della partizione su %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "controllo dei blocchi danneggiati"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace ha %d chiamate sullo stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Asserzione (%s) in %s:%d nella funzione %s() non riuscita."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: etichetta del disco non riconosciuta"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Questa versione di libparted non dispone del supporto alla scrittura per %s. "
+"Potrebbe essere stato compilato in sola lettura."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "La partizione %d è %s, ma il file system è %s."
+
+# (ndt) lasciare non tradotto?
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Flag del disco %d sconosciuto."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Le etichette dei dischi %s non supportano le partizioni estese."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"Le etichette dei dischi %s non supportano le partizioni estese o logiche."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Troppe partizioni primarie."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Impossibile aggiungere una partizione logica a %s poiché non ci sono "
+"partizioni estese."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Impossibile avere più di una partizione estesa su %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+"Impossibile avere partizioni logiche al di fuori della partizione estesa."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Impossibile avere una partizione logica esterna alla partizione estesa su %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Impossibile avere una partizione primaria all'interno di una estesa."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Impossibile avere una partizione al di fuori del disco."
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Impossibile avere partizioni che si sovrappongono."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadati"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "libero"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "estesa"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primaria"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "avvio"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "nascosta"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Flag di partizione %d sconosciuto."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informazioni"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Avviso"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Errore"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Irrimediabile"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Non implementato"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Ripara"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sì"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "No"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Riprova"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignora"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Annulla"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"È stato trovato un bug di GNU Parted. Controllare il sito web http://www.gnu."
+"org/software/parted/parted.html per maggiori informazioni su cosa è utile "
+"comunicare nelle segnalazioni. Segnalare un bug a %s specificando almeno la "
+"versione (%s) e il seguente messaggio: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Il supporto per leggere etichette dei dischi AIX non è ancora stato "
+"implementato."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Il supporto per scrivere etichette dei dischi AIX non è ancora stato "
+"implementato."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Il supporto per aggiungere partizioni alle etichette dei dischi AIX non è "
+"ancora stato implementato."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Il supporto per duplicare partizioni in etichette dei dischi AIX non è "
+"ancora stato implementato."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Il supporto per impostare il tipo di sistema delle partizioni in etichette "
+"dei dischi AIX non è ancora stato implementato."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Il supporto per impostare i flag in etichette dei dischi AIX non è ancora "
+"stato implementato."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Il programma non può utilizzare file system HFS su dischi con settori di "
+"dimensione diversa da %d byte."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Impossibile soddisfare tutti i vincoli sulla partizione."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Impossibile allocare un numero di partizione."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Impossibile allocare uno spazio per un'etichetta bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Impossibile allocare uno spazio per un'etichetta dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabella delle partizioni su %s non valida -- firma %x errata."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabella della partizioni non valida - partizione ricorsiva su %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr "Impossibile ridimensionare partizioni gestite da Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "Non è possibile creare ulteriori partizioni"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s non ha partizioni estese (volume header partition)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Checksum errato; la tabella delle partizioni è danneggiata."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Solo le partizioni primarie possono essere partizioni di root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Solo le partizioni primarie possono essere partizioni di swap."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Solo le partizioni logiche possono essere file di avvio."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"Impostazione del nome della partizione dvh a %s non riuscita:\n"
+"solo le partizioni logiche (file di avvio) hanno un nome."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Troppe partizioni primarie"
+
+# (ndt) o forse è il caso di rendere in italiano?
+# errore di apertura
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "errore di \"open\""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "errore di \"seek\""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "errore di \"read\""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "errore di \"ioctl()\""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Corrispondenza versione API non corretta"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tipo di disco non supportato"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Formato del disco non supportato"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disco in uso"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Errore di sintassi nel file di configurazione"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "L'etichetta del volume è danneggiata"
+
+# (ndt) ????
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Il nome di un data set è danneggiato"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Allocazione memoria non riuscita"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Verifica del device non riuscita"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Il device specificato non è un device DASD valido"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Errore irrimediabile"
+
+# (ndt) ?
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Spazio insufficiente per l'etichetta di volume."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Spazio insufficiente per le informazioni sulla partizione."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC non valido."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Impossibile recuperare la versione delle API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"La versione \"%d\" delle API correnti non corrisponde alla versione \"%d\" "
+"delle API del driver dasd."
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Impossibile recuperare informazioni sul disco."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Impossibile recuperare informazioni sulla geometria del disco."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Impossibile recuperare informazioni sulla dimensione del blocco."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "il device è troppo piccolo per GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"La versione del formato della tabella delle partizioni GPT è %x, successiva "
+"a quella nota al programma. Segnalare questo problema."
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Non tutto lo spazio disponibile in %s sembra essere usato. Correggere GPT "
+"affinché utilizzi tutto lo spazio (ulteriori %llu blocchi) o continuare con "
+"le impostazioni attuali?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"La copia di backup della tabella GPT non è presente, come dovrebbe, alla "
+"fine del disco. Correggere il problema spostando la copia alla fine (e "
+"rimuovendo quella vecchia)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Sia la tabella GPT principale che quella di backup sono danneggiate. Provare "
+"a crearne una nuova e, tramite le funzionalità di ripristino del programma, "
+"recuperare le partizioni."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"La tabella GPT di backup è danneggiata, ma quella principale sembra corretta "
+"e verrà utilizzata."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"La tabella GPT principale è danneggiata, ma la copia di backup sembra "
+"corretta e verrà utilizzata."
+
+# (ndt) aiuto!!! idee sul vero significato della frase?
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+"CRC non corrispondente nella tabella delle partizioni primaria dell'array"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "traduzione nome della partizione non riuscita"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Firma %x non valida per le etichette dei dischi Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "La mappa delle partizioni non ha elementi."
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s è troppo piccolo per un'etichetta di disco Mac."
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "La partizione %d ha una firma non valida %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "La partizione %d ha una lunghezza non valida di 0 byte."
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "La regione dei dati non comincia all'inizio della partizione."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "La regione di avvio della partizione non occupa l'intera partizione."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "La regione dati della partizione non occupa l'intera partizione."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Dimensione del blocco nel descrittore del device inusuale: %d byte non è "
+"divisibile per 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Il descrittore del driver indica che la dimensione del blocco fisico è di %d "
+"byte, ma Linux indica %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Non è stata trovata alcuna mappa delle partizioni valida."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Due elementi della mappa delle partizioni hanno dimensioni diverse. Il primo "
+"elemento indica di essere %d, mentre l'elemento %d indica %d."
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Sono presenti due mappe delle partizioni. Situazione inusuale."
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Cambiare il nome di una partizione di root o swap non permetterà a Linux di "
+"riconoscerla come tale."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Impossibile aggiungere un'altra partizione: la mappa delle partizioni è "
+"troppo piccola."
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabella delle partizioni non valida su %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"La partizione %d non è allineata con l'inizio di un cilindro. Funzionalità "
+"non ancora supportata."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Non è possibile aggiungere un'altra partizione."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"la lunghezza della partizione di %1$jd settori eccede quella massima di "
+"%3$jd imposta dalla tabella delle partizioni %2$s"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"il numero di settori iniziali %1$jd eccede quello massimo di %3$jd imposto "
+"dalla tabella delle partizioni di %2$s"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s: checksum errato sul blocco %llu di tipo %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s: non è stato trovato il blocco rdb, non dovrebbe succedere."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s: rilevato ciclo al blocco %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s: l'elenco %s sembra errato al blocco %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s: elencazione dei blocchi danneggiati non riuscita."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s: elencazione dei blocchi della partizione non riuscita."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s: elencazione dei blocchi del file system non riuscita."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s: elencazione dei blocchi di avvio non riuscita."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Scrittura del blocco di partizione alla posizione %d non riuscita."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Rilevata etichetta Sun danneggiata."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"La geometria CHS del disco (%d,%d,%d) riportata dal sistema operativo non "
+"corrisponde a quella presente nell'etichetta del disco (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "L'etichetta del disco descrive un disco più grande di %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Il disco ha %d cilindri, maggiori del massimo consentito di 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"La partizione \"whole disk\" è l'unica rimasta disponibile. Normalmente non "
+"è una buona idea sovrascriverla con una partizione reale. Solaris potrebbe "
+"non essere in grado di avviarsi; inoltre anche SILO (il boot loader per "
+"sparc) ne fa uso."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "L'etichetta del disco Sun è piena."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "apertura del device non riuscita"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "posizionamento nel device non riuscito"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "scrittura sul device non riuscita"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "lettura dal device non riuscita"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Impossibile leggere l'etichetta del volume."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Impossibile scrivere l'etichetta del volume."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Impossibile leggere le etichette VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Impossibile leggere VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Impossibile leggere VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Impossibile leggere VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Impossibile leggere VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Impossibile scrivere le etichette VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Impossibile scrivere VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Impossibile scrivere VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Impossibile scrivere VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Impossibile scrivere VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Impossibile scrivere VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Memoria non sufficiente."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Impossibile ottenere la dimensione dell'unità speciale \"COMPACT\""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" utilizza una sintassi errata per le posizioni."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Il massimo valore per la testina è %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Il massimo valore per il settore è %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "La posizione %s è esterna al device %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Numero non valido."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Usare un'unità più piccola al posto di un valore < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s: allocazione blocco di partizione non riuscita\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s: allocazione del blocco non riuscita\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s: impossibile leggere il blocco di avvio %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s: impossibile leggere il blocco di root %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s: allocazione ID elemento dell'elenco non riuscita\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s: impossibile leggere il blocco %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s: checksum errato sul blocco %llu del tipo %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: impossibile scrivere il blocco %d\n"
+
+# (ndt) disk_specific ???
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: allocazione del blocco rdb disk_specific non riuscita\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s: blocco rdb non trovato, non dovrebbe accadere\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s: lettura del blocco di partizione %llu non riuscita\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"Il programma non è stato compilato correttamente: il settore di avvio "
+"dovrebbe essere di 512 byte. Il supporto per FAT verrà disabilitato."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Il file system ha una firma non valida per un file system FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Il file system ha una dimensione del settore non valida per un file system "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Il file system ha una dimensione del cluster non valida per un file system "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Il file system ha un numero di settori riservati non valido per un file "
+"system FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Il file system ha un numero non valido di FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"La geometria del file system CHS è (%d, %d, %d) e non è valida. La geometria "
+"della tabella delle partizioni di CHS è (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Il settore di avvio della FAT sostiene che la dimensione del settore logico "
+"sia 0. Situazione inusuale."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Il settore di avvio della FAT sostiene che non ci siano tabelle FAT. "
+"Situazione inusuale."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Il settore di avvio della FAT sostiene che il cluster sia composto da 0 "
+"settori. Situazione inusuale."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Il file system è FAT12 e non è supportato."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Vecchia firma linux di partizione swap non conosciuta: \"%10s\"."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Nuova firma linux di partizione swap non conosciuta: \"%10s\"."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Firma linux di partizione swap swsusp non conosciuta: \"%9s\"."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Il programma non può utilizzare file system HFS su dischi con settori di "
+"dimensione diversa da %d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"La geometria CHS (%d, %d, %d) del file system non è valida. La geometria CHS "
+"della tabella delle partizioni è (%d, %d, %d). Selezionare \"Ignora\" per "
+"non modificare la geometria CHS del file system, selezionare \"Ripara\" per "
+"impostare la geometria CHS del file system affinché corrisponda alla "
+"geometria CHS della tabella delle partizioni."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Il settore di informazioni ha una firma errata (%x). Selezionare \"Annulla\" "
+"e inviare un segnalazione di bug. In situazioni estreme è forse possibile "
+"ignorare l'errore."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Servono %s di spazio libero per ridurre la partizione a questa dimensione. "
+"Attualmente soltanto %s sono liberi."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Lo spostamento del primo blocco del cluster è %d e non è un multiplo della "
+"dimensione del cluster %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Elemento di directory errato per %s: il primo cluster è la fine del "
+"marcatore di file."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT errata: catena per %s non terminata. Eseguire \"dosfsck\" oppure "
+"\"scandisk\"."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT errata: cluster %d usato nella catena %s fuori dal file system. Eseguire "
+"\"dosfsck\" oppure \"scandisk\"."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT errata: cluster %d con collegamenti incrociati per %s. Eseguire "
+"\"dosfsck\" oppure \"scandisk\"."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s è %dk, ma contiene %d cluster (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partizione troppo grande o troppo piccola per il file system %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Le FAT non coincidono. Se non se ne conosce il significato, selezionare "
+"\"Annulla\", eseguire \"scandisk\", quindi ritornare a questo punto."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Non ci sono configurazioni possibili per questo tipo di FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Il file system non ha una parametri compatibili con Windows. La dimensione "
+"del cluster è %dk (atteso %dk); il numero di cluster è %d (atteso %d); la "
+"dimensione delle FAT è %d settori (atteso %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Il file system riporta uno spazio libero di %d cluster anziché %d."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Non c'è sufficiente spazio nella directory principale per tutti i file. "
+"Annullare oppure ignorare per perdere i file."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Errore nello scrivere nella directory principale."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Lasciare il file system come FAT16 non causerà alcun problema."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Convertire una partizione che contiene MS Windows a FAT16 richiede di "
+"reinstallare il boot loader di Windows. Per continuare, consultare il "
+"manuale di Parted (o della propria distribuzione)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "Lasciare il file system come FAT32 non introdurrà alcun problema."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Convertire una partizione che contiene MS Windows a FAT32 richiede di "
+"reinstallare il boot loader. Per continuare, consultare il manuale di Parted "
+"(o della propria distribuzione). Inoltre, la conversione a FAT32 renderà il "
+"file system non utilizzabile con MS-DOS, MS Windows 95a e MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Usare FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Il file system può solo essere portato a questa dimensione se si converte a "
+"FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Il file system può solo essere portato a questa dimensione se si converte a "
+"FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"Impossibile ridimensionare questa partizione a questa dimensione. Funzione "
+"in fase di sviluppo."
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d, il supporto %x non coincide con quello specificato nel settore di "
+"avvio di %x. Eseguire \"scandisk\"."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld al di fuori del file system"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld al di fuori del file system"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: cluster esauriti"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Impossibile rilevare il file system."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "La ridimensione del file system %s non è supportata"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Il file system è più ampio del suo volume."
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Il file system contiene errori."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "I blocchi danneggiati non possono essere letti."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Tentativo di registrare un extent a partire dal blocco 0x%X, ma ne esiste "
+"già uno alla stessa posizione. Controllare il file system."
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Tentativo di spostare un extent dal blocco 0x%X al blocco 0x%X, ma ne esiste "
+"già uno alla stessa posizione. Questo non dovrebbe verificarsi."
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Impossibile aggiornare la cache degli extent per file HFS con CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Tentativo di leggere file HFS con CNID %X oltre EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Impossibile trovare il settore %lli del file HFS con CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Tentativo di scrivere file HFS con CNID %X oltre EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Impossibile aggiornare la cache degli extent per file HFS+ con CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Tentativo di leggere file HFS+ con CNID %X oltre EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Impossibile trovare il settore %lli del file HFS+ con CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Tentativo di scrivere file HFS+ con CNID %X oltre EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "HFS non può ancora essere ridimensionato in quel modo."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "riduzione"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Riposizionamento dei dati non riuscito."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"Il riposizionamento dei dati ne ha lasciati alcuni alla fine del volume."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "scrittura del \"Master Directory Block\" HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "All'apertura non è stata trovata alcuna firma HFS[+X] valida."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "La versione %d di HFS+ non è supportata."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "La versione %d di HFSX non è supportata."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"Il riposizionamento dei dati ne ha lasciati alcuni alla fine del volume."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Errore nello scrivere l'\"Allocation File\"."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Errore nello scrivere la parte compatibile dell'\"Allocation File\"."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "scrittura del \"Volume Header\" HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Errore nella ricerca del file obbligatorio per i blocchi danneggiati."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Sembra esserci un errore nel wrapper HFS: il file dei blocchi danneggiati "
+"non contiene il volume HFS+ integrato."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "HFS+ non può ancora essere ridimensionato in quel modo."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "riduzione del volume HFS+ integrato"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Ridimensionamento del volume HFS+ non riuscito."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "riduzione del wrapper HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Aggiornamento del wrapper HFS non riuscito."
+
+# (ndt) mah...
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Non è un controllo %s reale. Avvio della speciale procedura a basso livello "
+"d'estrazione dei file per il debug."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Checksum dell'elenco blocchi di intestazione inesatto."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Dimensione di un blocco di transazione non valida durante la riesecuzione "
+"del registro (%i byte)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Registri memorizzati all'esterno del volume non sono supportati. Disattivare "
+"il registro e riavviare il programma."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Lo spostamento o la dimensione del registro non è un multiplo della "
+"dimensione di un settore."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valori \"magic\" errati nell'intestazione del registro."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"La dimensione del registro non corrisponde con quella dell'intestazione del "
+"registro medesimo."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"Alcuni campi dell'intestazione non sono un multiplo della dimensione di un "
+"settore."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"La dimensione del settore presente nel registro non è di 512 byte. Il "
+"programma supporta solo settori di lunghezza pari a 512 byte."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Checksum del registro inesatto."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Il registro non è vuoto. Il programma deve ripetere le transazioni prima di "
+"aprire il file system. Il file system verrà modificato."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Il \"Volume Header\" o il \"Master Directory Block\" è stato modificato "
+"durante la riesecuzione del registro. Riavviare il programma."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Un extent non è stato riposizionato."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Il riferimento a un extent proviene da una posizione inusuale. Controllare "
+"il file system."
+
+# (ndt) preferisco lasciarli in inglese, sono delle 'parti' della struttura di HFS
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"Questo volume HFS non possiede un \"Catalog File\". Situazione inusuale."
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Questo volume HFS non possiede un \"Extent Overflow File\". Situazione "
+"abbastanza inusuale."
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"L'\"Extent Overflow File\" non deve contenere i propri extent. Controllare "
+"il file system."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Impossibile caricare il file system in memoria."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Impossibile caricare l'elenco dei blocchi danneggiati."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Si è verificato un errore nel riallocare l'extent."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Questo volume HFS non ha un \"Catalog File\". Situazione inusuale."
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Questo volume HFS+ non possiede un \"Extent Overflow File\". Situazione "
+"abbastanza inusuale."
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "Mostra questo messaggio di aiuto"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "Elenca la disposizione delle partizioni su tutti i device a blocchi"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "Mostra un output analizzabile dal computer"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "Mostra un output analizzabile dal computer"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "Non chiede mai l'intervento dell'utente"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "Stampa la versione"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "allineamento per le nuove partizioni"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMERO è il numero di partizione usato da Linux. Su etichette del disco MS-"
+"DOS, le partizioni primarie hanno numeri da 1 a 4 e le logiche da 5 in poi.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPO_ETIC è uno di: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG è uno di: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNITÀ è uno di: "
+
+# (ndt) da tradurre?
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "allineamento richiesto: minimo od ottimale"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPO_PART è uno di: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPO_FS è uno di: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"INIZIO e FINE sono posizioni sul disco, come 4GB o 10%. I numeri negativi "
+"sono relativi alla fine del disco. Per esempio, -1s indica esattamente "
+"l'ultimo settore.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"FINE è una posizione sul disco, come 4GB o 10%. I numeri negativi sono "
+"relativi alla fine del disco. Per esempio, -1s indica esattamente l'ultimo "
+"settore.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STATO è uno di: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DEVICE è normalmente /dev/hda o /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOME è una qualsiasi parola\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998-2006 Free Software Foundation, Inc.\n"
+"Questo programma è software libero, protetto dalla GNU General Public "
+"License.\n"
+"\n"
+"Questo programma è distribuito nella speranza che sia utile, ma SENZA ALCUNA "
+"GARANZIA; senza neppure le garanzie derivate dalla COMMERCIABILITÀ o "
+"dall'essere ADATTO A UN PARTICOLARE SCOPO. Per maggiori informazioni, "
+"consultare la GNU General Public License.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tempo rimasto %.2d.%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "La partizione %s è in uso. Continuare veramente?"
+
+# (ndt) preferisco tenerla al plurale
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Le partizioni su %s sono in uso."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"L'etichetta del disco su %s verrà eliminata e tutti i dati su questo disco "
+"saranno persi. Continuare?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Tipo dell'etichetta del nuovo disco?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipo di partizione?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nome della partizione?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Tipo di file system?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Inizio?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Fine?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"È stata richiesta una partizione da %s a %s (settori %llu..%llu).\n"
+"La posizione più prossima disponibile è da %s a %s (settori %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"È accettabile?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"La partizione risultante non è allineata correttamente per garantire "
+"prestazioni ottimali."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Le etichette dei dischi %s non supportano le partizioni estese."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Partizione numero?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Le etichette dei dischi %s non supportano le partizioni estese."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipo di partizione?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Numero non valido."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipo di partizione?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Numero non valido."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Geometria cilindri, testine, settori dal BIOS: %d,%d,%d. Ogni cilindro è "
+"%s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modello: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disco %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Dimensione del settore (logica/fisica): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabella delle partizioni: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Flag del disco: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Numero"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Inizio"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fine"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Dimensione"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tipo"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "File system"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nome"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flag"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Spazio libero"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"È stata trovata una partizione %s %s su %s -> %s. Aggiungerla alla tabella "
+"delle partizioni?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "ricerca file system"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Il comando di ridimensionamento è stato rimosso da parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Ridurre la dimensione di una partizione può causare la perdita di dati: "
+"continuare veramente?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nuovo device?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "tipo di allineamento (min/ott)"
+
+# (ndt) sembra che quel numero sia il numero della partizione
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d allineata\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d non allineata\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flag da invertire?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nuovo stato?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Unità?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TIPO N Controlla la partizione N per "
+"l'allineamento TIPO(min|ott)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMANDO] Mostra l'aiuto generale o sul "
+"COMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TIPO_ETIC Crea una nuova etichetta del disco "
+"(tabella delle partizioni)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPO_PART [TIPO_FS] INIZIO FINE Crea una partizione"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"\"mkpart\" crea un partizione senza crearvi un file system. TIPO_FS può "
+"essere specificato per impostare un ID della partizione appropriato.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMERO NOME Chiama la partizione NUMERO come "
+"NOME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [device|free|list,all|NUMERO] Visualizza la tabella delle "
+"partizioni, i device disponibili, lo spazio libero, tutte le partizioni "
+"trovate o una particolare partizione"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Senza argomenti, \"print\" visualizza l'intera tabella delle partizioni. Con "
+"i seguenti argomenti esegue diverse altre azioni.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : mostra tutti i device a blocchi attivi\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : visualizza informazioni riguardo lo spazio libero non "
+"partizionato sul device a blocchi corrente\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : visualizza le tabelle delle partizioni di tutti i device a "
+"blocchi attivi\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit Esce dal programma"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue INIZIO FINE Ripristina una partizione persa "
+"vicino a INIZIO e FINE"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Il comando di ridimensionamento è stato rimosso da parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMERO FINE Ridimensiona la partizione NUMERO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMERO Elimina la partizione NUMERO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select DEVICE Sceglie il device da modificare"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FLAG STATO Modifica il FLAG sul device "
+"selezionato"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAG] Commuta lo stato del FLAG sul "
+"device\n"
+" selezionato"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMERO FLAG STATO Modifica il FLAG sulla partizione\n"
+" NUMERO"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMERO [FLAG]] Commuta lo stato del FLAG sulla\n"
+" partizione NUMERO"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit UNITÀ Imposta l'unità predefinita a UNITÀ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version Stampa la versione e le "
+"informazioni\n"
+" sul copyright di GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"\"version\" visualizza informazioni sul copyright e la versione di questa "
+"copia di GNU Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Uso: %s [-hlmsv] [-a<allineamento>] [DEVICE [COMANDO [PARAMETRI]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nessun device trovato"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"Attenzione: non è stato eseguito come super utente. Prestare attenzione ai "
+"permessi.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Prima di riavviare è utile reinstallare il \"boot loader\". Per maggiori "
+"informazioni, consultare la sezione 4 della documentazione di Parted."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Potrebbe essere necessario aggiornare /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Benvenuti in GNU Parted. Digitare \"help\" per l'elenco dei comandi.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Uso: parted [OPZIONI]... [DEVICE [COMANDO [PARAMETRI]...]...]\n"
+"Esegue COMANDO con i PARAMETRI sul DEVICE. Se non c'è alcun COMANDO\n"
+"parte in modalità interattiva.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"È stato trovato un bug in GNU Parted. Ecco cosa fare:\n"
+"\n"
+"Non innervosirsi, molto probabilmente il bug non ha rovinato i dati.\n"
+"Il modo per aiutare nel correggerlo è il seguente:\n"
+"\n"
+"Verificare che il bug non sia già stato corretto utilizzando\n"
+"la versione più recente di GNU Parted disponibile presso:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Usare questa versione prima di segnalare il bug.\n"
+"\n"
+"Se il problema non è ancora stato risolto o non si sa come verificarlo,\n"
+"visitare il sito web di GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"per ulteriori informazioni.\n"
+"\n"
+"La segnalazione deve contenere la versione di questo programma (%s),\n"
+"il messaggio d'errore riportato di seguito, l'output di\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"e la seguente cronologia dei comandi.\n"
+"Includere anche qualsiasi altra informazione riguardo la propria\n"
+"configurazione da considerarsi importante.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Cronologia comandi:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Errore: SEGV_MAPERR (indirizzo non mappato all'oggetto)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Errore: SEGV_ACCERR (permessi non validi per l'oggetto mappato)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Errore: incontrato un segnale SIGSEGV generico.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Errore: FPE_INTDIV (intero: divisione per zero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Errore: FPE_INTOVF (intero: overflow)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTDIV (float: divisione per zero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTOVF (float: overflow)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTUND (float: underflow)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTRES (float: risultato inesatto)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTINV (float: operazione non valida)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Errore: FPE_FLTSUB (float: subscript fuori dal limite)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Errore: incontrato un segnale SIGFPE generico."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Errore: ILL_ILLOPC (opcode non consentito)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Errore: ILL_ILLOPN (operando non consentito)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Errore: ILL_ILLADR (modalità di indirizzamento non consentita)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Errore: ILL_ILLTRP (trap non consentita)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Errore: ILL_PRVOPC (opcode privilegiato)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Errore: ILL_PRVREG (registro privilegiato)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Errore: ILL_COPROC (errore del coprocessore)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Errore: ILL_BADSTK (errore dello stack interno)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Errore: incontrato un segnale SIGILL generico."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "token non valido: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Atteso un numero di partizione."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "La partizione non esiste."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Atteso un tipo di file system."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipo di file system \"%s\" sconosciuto."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Atteso un tipo di etichetta disco."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Non è possibile creare ulteriori partizioni."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Atteso un tipo di partizione."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "ottimale"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimale"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPZIONI:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMANDI:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Segnalare i bug a %s\n"
+
+# '%s' = dev->path
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Viene usato %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Questo comando non ha senso nella modalità non interattiva.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opzione \"--%s\" non accetta un argomento\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opzione \"--%s\" non riconosciuta\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: l'opzione \"-W %s\" non accetta un argomento\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: l'opzione \"-W %s\" richiede un argomento\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Sito web di %s: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "l'argomento \"%3$s\" di %1$s%2$s non è valido"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "il suffisso nell'argomento \"%3$s\" di %1$s%2$s non è valido"
+
+#, c-format
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "l'argomento \"%3$s\" di %1$s%2$s è troppo grande"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Impossibile rileggere la tabella delle partizioni; per poter montare le "
+#~ "partizioni modificate è necessario riavviare il computer. Prima del "
+#~ "riavvio è anche necessario installare nuovamente il \"boot "
+#~ "loader\" (potrebbe richiedere di montare le partizioni modificate). "
+#~ "Poiché non è possibile svolgere entrambe le operazioni, avviare il "
+#~ "computer da un disco di ripristino e installare il \"boot loader\" da "
+#~ "tale disco. Per maggiori informazioni, consultare la sezione 4 della "
+#~ "documentazione di Parted."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "La tabella delle partizioni su %s (%s) non può essere riletta. Questo "
+#~ "significa che le modifiche effettuate non saranno note a Hurd. Riavviare "
+#~ "il computer prima di fare qualsiasi cosa con %s."
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Le partizioni estese non possono essere nascoste su etichette MS-DOS."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "La regione di avvio non comincia all'inizio della partizione."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Il file system ha dei settori logici con dimensione %d. Il programma non "
+#~ "funziona correttamente con settori di dimensione diversa da 512 byte."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Il file %s è indicato come file di sistema; spostandolo, alcuni programmi "
+#~ "potrebbero bloccarsi."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMERO : visualizza informazioni dettagliate riguardo questa "
+#~ "particolare partizione\n"
diff --git a/po/ja.gmo b/po/ja.gmo
new file mode 100644
index 0000000..9a408a9
--- /dev/null
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..c26a95f
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,3279 @@
+# Partedã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æ—¥æœ¬èªžè¨³
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Hiroshi Takekawa <sian@big.or.jp>, 1999, 2019, 2021, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-06 18:42+0900\n"
+"Last-Translator: Hiroshi Takekawa <sian@big.or.jp>\n"
+"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%s 㯠%s ã®ä¸æ­£ãªå¼•æ•°ã§ã™"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%s 㯠%s ã«ã¯æ›–昧ãªå¼•æ•°ã§ã™"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "利用å¯èƒ½ãªå¼•æ•°ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ï¼š"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "書ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "ä¸æ˜Žãªã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: オプション '%s%s' ã¯æ›–昧ã§ã™\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: オプション '%s%s' ã¯æ›–昧ã§ã™ã€‚å¯èƒ½æ€§ã¨ã—ã¦ã¯æ¬¡ã®ã‚‚ã®ãŒã‚ã‚Šã¾ã™:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: '%s%s' ã¯èªè­˜ã§ããªã„オプションã§ã™\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: オプション '%s%s' ã¯å¼•æ•°ã‚’å—ã‘ã¨ã‚Šã¾ã›ã‚“\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: オプション '%s%s' ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: '%c' ã¯ä¸æ­£ãªã‚ªãƒ—ションã§ã™\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: '%c' ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "æˆåŠŸ"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "マッãƒãªã—"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "ä¸æ­£ãªæ­£è¦è¡¨ç¾"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "ä¸æ­£ãªé †åºæ–‡å­—"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "ä¸æ­£ãªæ–‡å­—クラスå"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "余分ãªãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "ä¸æ­£ãªå¾Œæ–¹å‚ç…§"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "対応ã®ãªã„ [, [^, [:, [. ã‚ã‚‹ã„㯠[="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "対応ã®ãªã„ ( ã‚ã‚‹ã„㯠\\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "対応ã®ãªã„ \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "\\{\\} ã®ä¸­èº«ãŒä¸æ­£"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "ä¸æ­£ãªçµ‚了値"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "メモリä¸è¶³"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "先行ã™ã‚‹æ­£è¦è¡¨ç¾ãŒä¸æ­£"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "æ­£è¦è¡¨ç¾ãŒé€”中ã§çµ‚ã‚ã£ã¦ã„ã‚‹"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "大ãã™ãŽã‚‹æ­£è¦è¡¨ç¾"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "対応ã®ãªã„ ) ã¾ãŸã¯ \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "ã“れよりå‰ã«æ­£è¦è¡¨ç¾ãŒãªã„"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "パッケージ作æˆè€… %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "パッケージ作æˆè€… %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"ライセンス GPLv3+: GNU GPL ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 3 ã‚ã‚‹ã„ã¯ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ <%s>。\n"
+"ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯ãƒ•ãƒªãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã™ã€‚自由ã«å¤‰æ›´ã€å†é…布ãŒã§ãã¾ã™ã€‚\n"
+"法律ãŒè¨±ã™ã‹ãŽã‚Šã€å…¨ãã®ç„¡ä¿è¨¼ã§ã™ã€‚\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "%s ã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "%s 㨠%s ã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "%sã€%s 㨠%s ã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"ãŠã‚ˆã³ã€%s ã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€ãŠã‚ˆã³ã€%sã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€%sã€ãŠã‚ˆã³ã€%sã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€ãŠã‚ˆã³ã€%sã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€%sã€\n"
+"ãŠã‚ˆã³%sã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€%sã€\n"
+"%sã€ãŠã‚ˆã³ã€%sã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€%sã€\n"
+"%sã€%sã¨ã„ã£ãŸäººã€…ã«ã‚ˆã£ã¦ä½œã‚‰ã‚Œã¾ã—ãŸã€‚\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ %s ã¸ã€‚\n"
+"翻訳ã«ã¤ã„ã¦ã¯ translation-team-ja@lists.sourceforge.net ã¸ã€‚\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "%s ã®ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ %s ã¸ã€‚\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s ホームページ: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "GNU ソフトウェアã®ä¸€èˆ¬çš„ãªãƒ˜ãƒ«ãƒ—ã¯: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "メモリä¸è¶³"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "ディスクイメージ"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "%s をオープン中ã«ã‚¨ãƒ©ãƒ¼: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%s を読ã¿æ›¸ãå¯èƒ½ãªçŠ¶æ…‹ã«ã‚ªãƒ¼ãƒ—ンã§ãã¾ã›ã‚“(%s)。%s ã¯èª­ã¿è¾¼ã¿ã®ã¿å¯èƒ½ãªçŠ¶æ…‹"
+"ã§ã‚ªãƒ¼ãƒ—ンã•ã‚Œã¾ã—ãŸã€‚"
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s: %s ã‹ã‚‰èª­ã¿è¾¼ã¿ä¸­ã®ã‚·ãƒ¼ã‚¯ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s: %s ã‹ã‚‰èª­ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "読ã¿è¾¼ã¿ã®ã¿ãŒå¯èƒ½ãªã‚ˆã†ã«ã‚ªãƒ¼ãƒ—ンã•ã‚Œã¦ã„ã‚‹ã®ã§ã€%sã«æ›¸ãã“ã‚ã¾ã›ã‚“。"
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s: %s ã«æ›¸ãã“ã¿ä¸­ã®ã‚·ãƒ¼ã‚¯ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s: %s ã«æ›¸ãã“ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "より詳ã—ã知るã«ã¯ `%s --help' を使ã£ã¦ã¿ã¦ãã ã•ã„。\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "使ã„æ–¹: %s [オプション] [デãƒã‚¤ã‚¹]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"OS ã«ãƒ‘ーティションテーブルã®å¤‰æ›´ã‚’通知ã—ã¾ã™ã€‚\n"
+"\n"
+" -d, --dry-run カーãƒãƒ«ã«å¤‰æ›´ã‚’通知ã—ãªã„\n"
+" -s, --summary 内容ã®ã‚µãƒžãƒªã‚’表示\n"
+" -h, --help ã“ã®ãƒ˜ãƒ«ãƒ—を表示ã—ã¦çµ‚了\n"
+" -v, --version ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã—ã¦çµ‚了\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"デãƒã‚¤ã‚¹ã®æŒ‡å®šãŒãªã„å ´åˆã¯ã€å…¨ãƒ‘ーティションを調ã¹ã¾ã™ã€‚\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ <%s> ã¸ã€‚\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%s ã‚’é–‹ã‘ã¾ã›ã‚“。"
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "デãƒã‚¤ã‚¹ã®ãƒ—ローブã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"警告: カーãƒãƒ«ã¯ %s ã®ãƒ‘ーティションテーブルã®å†èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—㟠(%s)。"
+"å†èµ·å‹•ã™ã‚‹ã¾ã§å¤‰æ›´ãŒå…¨ã¦ã¯å映ã•ã‚Œãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。"
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"警告: %s をオープンã§ãã¾ã›ã‚“ (%s)。å†èµ·å‹•ã™ã‚‹ã¾ã§å¤‰æ›´ãŒå…¨ã¦ã¯å映ã•ã‚Œãªã„ã‹"
+"ã‚‚ã—ã‚Œã¾ã›ã‚“。"
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"警告: %s ã®ãƒˆãƒ©ãƒ³ã‚¹ãƒ¬ãƒ¼ã‚¿ã‚’終了ã•ã›ã‚‰ã‚Œã¾ã›ã‚“ (%s). å†èµ·å‹•ã™ã‚‹ã¾ã§å¤‰æ›´ãŒå…¨ã¦"
+"ã¯å映ã•ã‚Œãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。"
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s: %s ã‚’åŒæœŸä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "デãƒã‚¤ã‚¹ %s を調ã¹ã‚‰ã‚Œã¾ã›ã‚“: %s"
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "%s ã® dm タイプを特定ã§ãã¾ã›ã‚“"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"%s ã®ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒæ±ºå®šã§ãã¾ã›ã‚“: %s\n"
+"デフォルトã®ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚º (%lld) を使ã„ã¾ã™ã€‚"
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"%s ã®ç‰©ç†ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒæ±ºå®šã§ãã¾ã›ã‚“。\n"
+"è«–ç†ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚º (%lld) を使ã„ã¾ã™ã€‚"
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "%s ã®ã‚µã‚¤ã‚ºã‚’決定ã§ãã¾ã›ã‚“(%s)"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "一般的㪠IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "デãƒã‚¤ã‚¹ %s ã® identity ã‚’å–å¾—ã§ãã¾ã›ã‚“: %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"デãƒã‚¤ã‚¹ %s ã«ã¯ã€ç‰©ç†ã‚»ã‚¯ã‚¿ä¸€ã¤ã«ã¤ã複数 (%dセクタ) ã®è«–ç†ã‚»ã‚¯ã‚¿ãŒã‚ã‚Šã¾"
+"ã™ã€‚\n"
+"GNU Parted ã¯ã€ã‚る特定ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¨ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®çµ„ã¿åˆã‚ã›ã«ã¤ã„"
+"ã¦ã€ã“ã®ã‚ˆã†ãªå ´åˆã‚’「実験的ã«ã€ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚例ãˆã°ã€GPT 㨠ext2/3 ã¨"
+"ã„ã£ãŸçµ„ã¿åˆã‚ã›ã§ã™ã€‚\n"
+"最新ã®æƒ…報㯠web サイトをã”覧ãã ã•ã„。"
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "SCSI デãƒã‚¤ã‚¹ %s ã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ: %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"デãƒã‚¤ã‚¹ %s ã®ã‚µã‚¤ã‚ºãŒã¨ã¦ã‚‚å°ã•ã„ã®ã§ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚„パーティションテー"
+"ブルを記録ã§ãã¾ã›ã‚“。デãƒã‚¤ã‚¹ã®é¸æŠžã‚’é–“é•ã£ã¦ã„ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"ファイルã¾ãŸã¯ãƒ‡ãƒã‚¤ã‚¹ %s ã® geometry を決定ã§ãã¾ã›ã‚“。自分ã§ä½•ã‚’ã—ã¦ã„ã‚‹ã‹"
+"よãç†è§£ã—ã¦ã„ãªã‘れ㰠Parted を使ã†ã¹ãã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "SD/MMC カード"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMeデãƒã‚¤ã‚¹"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID コントローラ"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA デãƒã‚¤ã‚¹"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA over Ethernetデãƒã‚¤ã‚¹"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD ドライブ"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMMデãƒã‚¤ã‚¹"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATA RAID コントローラ"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O コントローラ"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Loopback デãƒã‚¤ã‚¹"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen Virtual Block Device"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "ä¸æ˜Ž"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio Block Device"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux Software RAID Array"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAMドライブ"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„種類ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã™ã€‚"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "%s ã‚’ fsync/close 中ã«ã‚¨ãƒ©ãƒ¼: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s%s を読ã¿è¾¼ã¿ä¸­ã«ãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚ã‚ã‚Šã«é”ã—ã¾ã—ãŸ"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"カーãƒãƒ«ã«ãƒ‘ーティション %s ã¸ã®å¤‰æ›´ã‚’ä¼ãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—㟠-- %s。"
+"従ã£ã¦ã€ã‚«ãƒ¼ãƒãƒ«ã¯å†èµ·å‹•ã™ã‚‹ã¾ã§ %s ã«è¡Œã£ãŸå¤‰æ›´ã‚’èªè­˜ã—ã¾ã›ã‚“。å†èµ·å‹•ã™ã‚‹ã¾"
+"ã§ãã®ãƒ‘ーティションをマウントã—ãŸã‚Šä½•ã‹ã—ãŸã‚Šã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。"
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "%s ã®é–‹å§‹ä½ç½®ã¨é•·ã•ã‚’決定ã§ãã¾ã›ã‚“"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"パーティション %s (%s 上) ã«æ›¸ãã“ã¾ã‚Œã¾ã—ãŸãŒã€ã‚«ãƒ¼ãƒãƒ«ã«å¤‰æ›´ã‚’ä¼ãˆã‚‹ã“ã¨ãŒ"
+"ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ãŠãらãã€ä½¿ç”¨ä¸­ã ã£ãŸã®ãŒåŽŸå› ã ã¨æ€ã‚ã‚Œã¾ã™ã€‚ãã®ãŸã‚ã€å¤"
+"ã„パーティション情報ãŒãã®ã¾ã¾ä½¿ã‚ã‚Œã¾ã™ã€‚ã•ã‚‰ãªã‚‹å¤‰æ›´ã‚’ã™ã‚‹å‰ã«å†èµ·å‹•ã—ã¦ã"
+"ã ã•ã„。"
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "終了ä½ç½®ã‚’開始ä½ç½®ã®å‰ã«ã¯å‹•ã‹ã›ã¾ã›ã‚“(開始セクタ=%jd é•·ã•=%jd)。"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"書ã込もã†ã¨ã—ãŸã‚»ã‚¯ã‚¿ (%ld-%ld) 㯠%s 上ã®ãƒ‘ーティションã®å¤–ã«ã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "ä¸è‰¯ãƒ–ロックをãƒã‚§ãƒƒã‚¯ä¸­"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace has %d calls on stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Assertion (%s) at %s:%d in function %s() failed."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: ディスクラベルãŒèªè­˜ã§ãã¾ã›ã‚“。"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"使用ã—ã¦ã„ã‚‹ libparted 㯠%s ã®æ›¸ãã“ã¿ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。読ã¿è¾¼ã¿å°‚用ã§"
+"コンパイルã•ã‚Œã¦ã„ã‚‹ã¨æ€ã‚ã‚Œã¾ã™ã€‚"
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "パーティション %d 㯠%s ã§ã‚ã‚‹ã®ã«ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã¯ %s ã§ã™ã€‚"
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "%d ã¯ä¸æ˜Žãªãƒ‡ã‚£ã‚¹ã‚¯ãƒ•ãƒ©ã‚°ã§ã™ã€‚"
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¯æ‹¡å¼µãƒ‘ーティションをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%s ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¯è«–ç†ãƒ‘ーティションや拡張パーティションをサãƒãƒ¼ãƒˆã—ã¦ã¾ã›"
+"ã‚“"
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "プライマリパーティションãŒå¤šã™ãŽã¾ã™ã€‚"
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "拡張パーティションãŒãªã„ã®ã§ã€è«–ç†ãƒ‘ーティションを %s ã«ä½œã‚Œã¾ã›ã‚“。"
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%s ã«ã¯ 1 個ã—ã‹æ‹¡å¼µãƒ‘ーティションを作れã¾ã›ã‚“。"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "è«–ç†ãƒ‘ーティションを拡張パーティションã®å¤–ã«ã¯æŒã¦ã¾ã›ã‚“。"
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s ã®æ‹¡å¼µãƒ‘ーティションã®å¤–ã«è«–ç†ãƒ‘ーティションã¯ä½œã‚Œã¾ã›ã‚“。"
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "拡張パーティション内ã«ãƒ—ライマリパーティションã¯ä½œã‚Œã¾ã›ã‚“。"
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "ディスクã®å¤–å´ã«ãƒ‘ーティションã¯ä½œã‚Œã¾ã›ã‚“。"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "é‡ãªã‚Šã®ã‚るパーティションã¯æŒã¦ã¾ã›ã‚“。"
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "メタ情報"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "空ã"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "æ‹¡å¼µ"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "è«–ç†"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "プライマリ"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "hidden"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "%d ã¯ä¸æ˜Žãªãƒ‘ーティションフラグã§ã™ã€‚"
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "通知"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "警告"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "エラー"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "致命的エラー"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "ãƒã‚°"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "未実装"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "修正"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "ã¯ã„(Y)"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "ã„ã„ãˆ(N)"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "ã‚„ã‚ŠãªãŠã—(R)"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "無視(I)"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "å–消(C)"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"GNU parted ã«ãƒã‚°ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚parted ã®ã‚¦ã‚§ãƒ–サイト http://www.gnu.org/"
+"software/parted/parted.html ã«ä½•ã‚’報告ã™ã‚Œã°ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¨ã—ã¦å½¹ç«‹ã¤ã‹è¼‰ã›ã¦"
+"ã‚ã‚Šã¾ã™ã€‚%s ã«æœ€ä½Žé™ã©ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‹ (%s) ã¨ä»¥ä¸‹ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å«ã‚ã¦ãƒ¡ãƒ¼ãƒ«ã§"
+"é€ã£ã¦ãã ã•ã„: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "AIX ディスクラベルã®èª­ã¿è¾¼ã¿ã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "AIX ディスクラベルã®æ›¸ãè¾¼ã¿ã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "AIX ディスクラベルã¸ã®ãƒ‘ーティションã®è¿½åŠ ã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "AIX ディスクラベルã§ã®ãƒ‘ーティションã®è¤‡è£½ã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "AIX ディスクラベルã®ãƒ‘ーティションã®ã‚·ã‚¹ãƒ†ãƒ ã‚¿ã‚¤ãƒ—ã®è¨­å®šã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "AIX ディスクラベルã®ãƒ•ãƒ©ã‚°ã®è¨­å®šã¯æœªå®Ÿè£…ã§ã™ã€‚"
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"セクタサイズ㌠%d ãƒã‚¤ãƒˆã§ãªã„ディスクã§ã¯ Atari パーティションテーブルã¯ä½¿ãˆ"
+"ã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"セクタ数㌠%d より多ã„ディスクã§ã¯ Atari パーティションテーブルã¯ä½¿ãˆã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"多ã™ãŽã‚‹ Atari パーティションãŒæ¤œå‡ºã•ã‚Œã¾ã—ãŸã€‚ã‚‚ã—ã‹ã—ãŸã‚‰ XGM リンクリスト"
+"ã«ãƒ«ãƒ¼ãƒ—ãŒã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。中止ã—ã¾ã™ã€‚"
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "データパーティションãŒã‚»ã‚¯ã‚¿ %lli ã«ã‚ã‚‹ ARS ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr "セクタ %lli ã«ã‚ã‚‹ ARS ã®ä¸­ã®æ¬¡ã®è«–ç†ARSエントリãŒXGMã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"ã“ã®ãƒ‡ã‚£ã‚¹ã‚¯ (%s) ã« Atari パーティションテーブルãŒãªã„ã‹ç ´æã—ã¦ã„ã¾ã™ã€‚"
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"セクタ %lli ã«è«–ç†ãƒ‘ーティション %d ã® ARS ã‚’ä¿å­˜ã™ã‚‹é ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "セクタ %lli ã« ARS ã‚’ä¿å­˜ã™ã‚‹é ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"パーティションテーブルã«ä¿å­˜ã•ã‚Œã¦ã„るセクタ数ãŒãƒ‡ãƒã‚¤ã‚¹ã®ã‚µã‚¤ã‚ºã«åˆè‡´ã—ã¾ã›"
+"ん。パーティションテーブルを修正ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "セクタ %lli ã« BSL ã‚’ä¿å­˜ã™ã‚‹é ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "メイン AHDI テーブルを埋ã‚ãŸå¾Œã«æ®‹ã£ã¦ã„るパーティションãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"メイン AHDI テーブルã¯å…¨ã¦ã®ãƒ‘ーティションã§åŸ‹ã¾ã‚Šã¾ã—ãŸãŒ ICD テーブルãŒç©ºã§"
+"ãªã„ãŸã‚ã€ä½™åˆ†ã«ä¸æ˜Žãªã‚µã‚¤ã‚ºã¨ä½ç½®ã®ãƒ‘ーティション㌠ICD 互æ›ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«"
+"よã£ã¦æ¤œå‡ºã•ã‚Œã¾ã™ã€‚ICD テーブルを無効ã«ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+"ICD エントリã¯æ‹¡å¼µãƒ‘ーティションや論ç†ãƒ‘ーティションをå«ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "テーブルを埋ã‚ã¦ã‚‚パーティションã«ä½™ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"æ‹¡å¼µ XGM パーティション㯠ICD モードã§ã¯ä½¿ãˆã¾ã›ã‚“ (XGM ãŒæœ€åˆã®ãƒ‘ーティショ"
+"ンã®å ´åˆã¯2ã¤ã¨ã—ã¦æ•°ãˆã‚‰ã‚Œã€%d 以上ã®ãƒ—ライマリパーティションã¨ãªã‚Šã¾ã™)。"
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "ã“ã®ãƒ‘ーティションã§å…¨ã¦ã®åˆ¶ç´„を満ãŸã›ã¾ã›ã‚“。"
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"æ‹¡å¼µ XGM パーティションを使ã†å ´åˆã€%d 個以上ã®ãƒ—ライマリパーティションを ICD "
+"モードã§ä½¿ã†ã“ã¨ãŒã§ãã¾ã›ã‚“。XGM ãŒæœ€åˆã®ãƒ‘ーティションã®å ´åˆã¯ãã‚Œã¯2ã¤ã¨ã—"
+"ã¦æ•°ãˆã‚‰ã‚Œã¾ã™ã€‚"
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "パーティション番å·ã‚’割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“。"
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "BSDディスクラベルã®ã‚¹ãƒ­ãƒƒãƒˆã‚’確ä¿ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "DASD-LDL パーティションテーブルã®ãƒ‡ãƒã‚¤ã‚¹ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "dasd ディスクラベルã®ã‚¹ãƒ­ãƒƒãƒˆã‚’確ä¿ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr ""
+"%s ã®ãƒ‘ーティションテーブルãŒä¸æ­£ã§ã™ã€‚%x ã¨ã„ã†ã‚·ã‚°ãƒãƒãƒ£ã¯ã‚ã‚„ã¾ã‚Šã§ã™ã€‚"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr ""
+"パーティションテーブルãŒä¸æ­£ã§ã™ã€‚å†å¸°çš„ãªãƒ‘ーティション㌠%s ã«ã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"ダイナミックディスクã«ä½¿ã‚ã‚Œã¦ã„るパーティション㯠Parted ã§ã¯ãƒªã‚µã‚¤ã‚ºã§ãã¾"
+"ã›ã‚“。"
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "パーティションを追加ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"%s ã¯ä¸€ã¤ã‚‚拡張パーティション(ボリュームヘッダパーティション)をæŒã£ã¦ã„ã¾ã›"
+"ん。"
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã®å€¤ãŒé•ã„ã¾ã™ã€‚パーティションテーブルãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚"
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "プライマリパーティションã ã‘ãŒãƒ«ãƒ¼ãƒˆãƒ‘ーティションã«ãªã‚Œã¾ã™ã€‚"
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "プライマリパーティションã ã‘ãŒã‚¹ãƒ¯ãƒƒãƒ—パーティションã«ãªã‚Œã¾ã™ã€‚"
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "è«–ç†ãƒ‘ーティションã ã‘ãŒãƒ–ートファイルã«ãªã‚Œã¾ã™ã€‚"
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"dvh パーティションåã‚’ %s ã«è¨­å®šã™ã‚‹ã®ã«å¤±æ•—ã—ã¾ã—ãŸ:\n"
+"è«–ç†ãƒ‘ーティション(ブートファイル)ã ã‘ãŒåå‰ã‚’æŒã¡ã¾ã™ã€‚"
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "プライマリパーティションãŒå¤šã™ãŽã¾ã™ã€‚"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "オープンエラー"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "シークエラー"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "読ã¿è¾¼ã¿ã‚¨ãƒ©ãƒ¼"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl()エラー"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä¸æ•´åˆ"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ディスクタイプ"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„ディスクフォーマット"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ディスク使用中"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "コンフィグファイルã®æ–‡æ³•ã‚¨ãƒ©ãƒ¼"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "ボリュームラベルãŒå£Šã‚Œã¦ã„ã¾ã™"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "データセットåãŒå£Šã‚Œã¦ã„ã¾ã™"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "メモリã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "デãƒã‚¤ã‚¹ã®ãƒ™ãƒªãƒ•ã‚¡ã‚¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "指定ã•ã‚ŒãŸãƒ‡ãƒã‚¤ã‚¹ã¯æœ‰åŠ¹ãª DASD デãƒã‚¤ã‚¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER ãŒãƒ‡ãƒã‚¤ã‚¹ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "致命的ãªã‚¨ãƒ©ãƒ¼"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "ボリュームラベルã®ãŸã‚ã®é ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "パーティション情報ã®ãŸã‚ã®é ˜åŸŸãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "ä¸æ­£ãªVTOCã§ã™ã€‚"
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "API ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå–å¾—ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"ç¾åœ¨ã® API ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ '%d' ã§ã€dasd ドライムAPI ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ '%d' ã¨ä¸€è‡´"
+"ã—ã¾ã›ã‚“!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "ディスクサイズãŒå–å¾—ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "ディスクã®ã‚¸ã‚ªãƒ¡ãƒˆãƒªæƒ…å ±ãŒå–å¾—ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "ブロックサイズ情報ãŒå–å¾—ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Disk ジオメトリãŒã‚¿ã‚¤ãƒ— 3390 ã® DASDデãƒã‚¤ã‚¹ã¨ä¸€è‡´ã—ã¾ã›ã‚“。"
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "デãƒã‚¤ã‚¹ã¯ GPT を使ã†ã«ã¯å°ã•ã™ãŽã¾ã™"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"GPT パーティションテーブルã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒ %x 㧠parted ã®ç†è§£ã§"
+"ãã‚‹ã‚‚ã®ã‚ˆã‚Šæ–°ã—ã„ã§ã™ã€‚報告ã—ã¦ãã ã•ã„。"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"%s ã§åˆ©ç”¨å¯èƒ½ãªé ˜åŸŸã®ä¸€éƒ¨ãŒåˆ©ç”¨ã•ã‚Œã¦ã„ã¾ã›ã‚“。GPT を修正ã—ã¦å…¨ã¦ã®é ˜åŸŸã‚’利用"
+"å¯èƒ½ã«ã™ã‚‹ã‹(%llu ブロック増ãˆã¾ã™)ã€ã“ã®ã¾ã¾ã§ç¶šè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ãŒã€ã©ã†"
+"ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"ã‚ã‚‹ã¹ã GPT テーブルã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ãŒãƒ‡ã‚£ã‚¹ã‚¯ã®æœ€å¾Œã«ã‚ã‚Šã¾ã›ã‚“。ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—"
+"を最後ã«æŒã£ã¦ãã¦ï¼ˆå¤ã„ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—を削除ã—ã¦ï¼‰ä¿®å¾©ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"プライマリ GPT テーブルã¨ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã®ä¸¡æ–¹ãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚æ–°ãŸã«ãƒ†ãƒ¼ãƒ–ルを作"
+"ã‚ŠãªãŠã—ã¦ã€Parted ã®ä¿®å¾©æ©Ÿèƒ½ã‚’用ã„ã¦ãƒ‘ーティションã®ä¿®å¾©ã‚’試ã¿ã¾ã™ã€‚"
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ— GPT テーブルã¯å£Šã‚Œã¦ã„ã¾ã™ãŒã€ãƒ—ライマリã¯å•é¡Œãªã„よã†ãªã®ã§ã€ã"
+"ã¡ã‚‰ã‚’使ã„ã¾ã™ã€‚"
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"プライマリ GPT テーブルã¯å£Šã‚Œã¦ã„ã¾ã™ãŒã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—ã¯å•é¡Œãªã„よã†ãªã®ã§ã€ã"
+"ã¡ã‚‰ã‚’使ã„ã¾ã™ã€‚"
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "プライマリパーティションテーブル㮠CRC ãŒä¸€è‡´ã—ã¾ã›ã‚“"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "パーティションåを変æ›ã§ãã¾ã›ã‚“"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Mac ディスクラベルã®ã‚·ã‚°ãƒãƒãƒ£ %x ã¯ä¸æ­£ã§ã™ã€‚"
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "パーティションマップã«ã‚¨ãƒ³ãƒˆãƒªãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s 㯠Mac ディスクラベルã«ã¯å°ã•ã™ãŽã¾ã™ã€‚"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "パーティション %d ã®ã‚·ã‚°ãƒãƒãƒ£ %x ã¯ä¸æ­£ã§ã™ã€‚"
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "パーティション %d ã®é•·ã•ãŒ 0 ãªã®ã¯ä¸æ­£ã§ã™ã€‚"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "データ領域ãŒãƒ‘ーティションã®é–‹å§‹ä½ç½®ã‹ã‚‰å§‹ã¾ã£ã¦ã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "パーティションã®ãƒ–ート領域ãŒã€ãƒ‘ーティション全体をå æœ‰ã—ã¦ã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "パーティションã®ãƒ‡ãƒ¼ã‚¿é ˜åŸŸãŒã€ãƒ‘ーティション全体をå æœ‰ã—ã¦ã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"デãƒã‚¤ã‚¹ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ã‚¿ã«æ›¸ã„ã¦ã‚るブロックサイズã¯ãŠã‹ã—ã„ã§ã™ã€‚%d ãƒã‚¤ãƒˆã¯ "
+"512 ã§å‰²ã‚Šåˆ‡ã‚Œã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"ドライãƒã¯ç‰©ç†ãƒ–ロックサイズ㌠%d ãƒã‚¤ãƒˆã§ã‚ã‚‹ã¨è¨€ã£ã¦ã„ã¾ã™ãŒã€Linux 㯠%d "
+"ãƒã‚¤ãƒˆã ã¨è¨€ã£ã¦ã„ã¾ã™ã€‚"
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "æ­£ã—ã„パーティションマップãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"パーティションマップã®ã‚¨ãƒ³ãƒˆãƒªã®ã‚µã‚¤ã‚ºãŒä¸€è‡´ã—ã¾ã›ã‚“。エントリ 1 ã«ã‚ˆã‚Œã° %d "
+"ã§ã™ãŒã€ã‚¨ãƒ³ãƒˆãƒª %d ã«ã‚ˆã‚Œã° %d ã§ã™ã€‚"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "ãŠã‹ã—ã„ã§ã™ã€‚パーティションマップエントリãŒ2ã¤ã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"root ã«ä½¿ã‚ã‚Œã¦ã„るパーティションや swap パーティションã®åå‰ã‚’変更ã™ã‚‹ã¨ "
+"Linux ãŒãれらをãã†ã¨èªè­˜ã§ããªããªã‚Šã¾ã™ã€‚"
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "パーティションを追加ã§ãã¾ã›ã‚“。パーティションマップãŒå°ã•ã™ãŽã¾ã™ã€‚"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "%s ã®ãƒ‘ーティションテーブルãŒä¸æ­£ã§ã™ã€‚"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"パーティション %d ã¯ã‚·ãƒªãƒ³ãƒ€å¢ƒç•Œä¸Šã«ã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ã¾ã ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾"
+"ã›ã‚“。"
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "パーティションを追加ã§ãã¾ã›ã‚“。"
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"パーティション長 %jd セクタ㯠%s パーティションテーブルã«ã‚ˆã£ã¦æ±ºã‚られãŸæœ€å¤§"
+"é•· %jd を越ãˆã¦ã„ã¾ã™"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"é–‹å§‹ã‚»ã‚¯ã‚¿ç•ªå· %jd 㯠%s パーティションテーブルã«ã‚ˆã£ã¦æ±ºã‚られãŸæœ€å¤§å€¤ %jd "
+"を越ãˆã¦ã„ã¾ã™"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : ブロック %llu (type %s) ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒä¸æ­£ã§ã™ã€‚"
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+"%s : rdb ブロックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ã“ã‚Œã¯ã‚ã£ã¦ã¯ãªã‚‰ãªã„ã“ã¨ã§ã™ã€‚"
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : ブロック %d ã«ãƒ«ãƒ¼ãƒ—ãŒç™ºè¦‹ã•ã‚Œã¾ã—ãŸã€‚"
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : %s リストãŒãŠã‹ã—ã„よã†ã§ã™(ブロック %s)。"
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : ä¸æ­£ãªãƒ–ロックã®ä¸€è¦§ã‚’得られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : パーティションブロックã®ä¸€è¦§ã‚’得られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : ファイルシステムブロックã®ä¸€è¦§ã‚’得られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : ブートブロックã®ä¸€è¦§ã‚’得られã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "パーティションブロック(ブロック %d)ã®æ›¸ãã“ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Sunディスクラベルã®ç ´æを検出ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"ディスク㮠geometry(CHS) (%d,%d,%d) ãŒã€ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã®ã‚‚ã® (%d,%d,%d) ã¨ä¸€"
+"致ã—ã¾ã›ã‚“。"
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "ディスクレベルã«ã‚ˆã‚‹ã¨ã€ãƒ‡ã‚£ã‚¹ã‚¯ã¯ %s より大ãã„ã“ã¨ã«ãªã£ã¦ã„ã¾ã™ã€‚"
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+"ã“ã®ãƒ‡ã‚£ã‚¹ã‚¯ã¯ %d シリンダã‚ã‚Šã¾ã™ã€‚ã“ã‚Œã¯æœ€å¤§å€¤ã® 65536 を越ãˆã¦ã„ã¾ã™ã€‚"
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Whole Disk パーティションã—ã‹æ®‹ã•ã‚Œã¦ã¾ã›ã‚“。ã ã„ãŸã„ã®å ´åˆã«ãŠã„ã¦ã€ã“ã®ãƒ‘ー"
+"ティションを上書ãã™ã‚‹ã®ã¯ã‚ˆãã‚ã‚Šã¾ã›ã‚“。Solaris ãŒèµ·å‹•ã—ãªããªã‚‹ã‹ã‚‚ã—ã‚Œã¾"
+"ã›ã‚“ã—ã€SILO(the sparc boot loader)ã«ã‚‚都åˆãŒã‚ˆãã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "SunディスクラベルãŒã„ã£ã±ã„ã§ã™ã€‚"
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "デãƒã‚¤ã‚¹ã®ã‚ªãƒ¼ãƒ—ンã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "デãƒã‚¤ã‚¹ã®ã‚·ãƒ¼ã‚¯ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "デãƒã‚¤ã‚¹ã¸ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "デãƒã‚¤ã‚¹ã‹ã‚‰ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "ボリュームラベルãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "ボリュームラベルãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "VTOC ラベルãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB ãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB ãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB ãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB ãŒèª­ã‚ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "VTOC ラベルãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB ãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB ãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB ãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB ãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT9 DSCB ãŒæ›¸ã‘ã¾ã›ã‚“。"
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "メモリä¸è¶³ã§ã™ã€‚"
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "特別ãªå˜ä½ã§ã‚ã‚‹ 'COMPACT' ã®å˜ä½ã‚ãŸã‚Šã®ã‚µã‚¤ã‚ºã‚’得られã¾ã›ã‚“。"
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" ã«ã¯ä½ç½®ã«ã¤ã„ã¦èª¤ã‚ŠãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "最大ヘッド値㯠%d ã§ã™ã€‚"
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "最大セクタ値㯠%d ã§ã™ã€‚"
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "%s ã¯ã€ãƒ‡ãƒã‚¤ã‚¹ %s ã®å¤–ã§ã™ã€‚"
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "ä¸æ­£ãªå€¤ã§ã™ã€‚"
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "1未満ã®å€¤ã®å¤‰ã‚ã‚Šã«ã€ã‚ˆã‚Šå°ã•ãªãƒ¦ãƒ‹ãƒƒãƒˆã‚’使ã£ã¦ãã ã•ã„"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : パーティションブロックã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : ブロックã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : ブートブロック %llu ãŒèª­ã‚ã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : ルートブロック %llu ãŒèª­ã‚ã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : id list element ãŒç¢ºä¿ã§ãã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : ブロック %llu ãŒèª­ã‚ã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : ブロック %llu (タイプ %s) ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒä¸æ­£ã§ã™\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : ブロック %d ã«æ›¸ãã“ã‚ã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : disk_specific rdb ブロックãŒç¢ºä¿ã§ãã¾ã›ã‚“\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : rdb ブロックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。起ã“ã‚‹ã¯ãšã®ãªã„ã“ã¨ã§ã™ã€‚\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : パーティションブロック %llu ãŒèª­ã‚ã¾ã›ã‚“\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted ãŒã¡ã‚ƒã‚“ã¨ã‚³ãƒ³ãƒ‘イルã•ã‚Œã¦ã„ã¾ã›ã‚“。FAT ã®ãƒ–ートセクタ㯠512 ãƒã‚¤"
+"トã§ã‚ã‚‹ã¹ãã§ã™ã€‚FAT サãƒãƒ¼ãƒˆã‚’無効ã«ã—ã¾ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"ファイルシステムã®ã‚·ã‚°ãƒãƒãƒ£ãŒ FAT ファイルシステムã®ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"ファイルシステムã®ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒ FAT ファイルシステムã®ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"ファイルシステムã®ã‚¯ãƒ©ã‚¹ã‚¿ã‚µã‚¤ã‚ºãŒ FAT ファイルシステムã®ã‚‚ã®ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"ファイルシステムã®äºˆç´„セクタã®æ•°ãŒ FAT ファイルシステムã¨ã—ã¦ã¯ä¸æ­£ã§ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "ファイルシステム㮠FAT ã®æ•°ãŒä¸æ­£ã§ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"ファイルシステム㮠CHS ジオメトリ㌠(%d, %d, %d) ã§ä¸æ­£ã§ã™ã€‚パーティション"
+"テーブル㮠CHS ジオメトリ㯠(%d, %d, %d) ã§ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT ã®ãƒ–ートセクタã«ã¯è«–ç†ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒ 0 ã¨æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€ã“ã‚Œã¯ãŠã‹ã—ã„ã§"
+"ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT ã®ãƒ–ートセクタ㫠FAT テーブルãŒã‚ã‚Šã¾ã›ã‚“。ã“ã‚Œã¯ãŠã‹ã—ã„ã§ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"FAT ã®ãƒ–ートセクタã«ã‚¯ãƒ©ã‚¹ã‚¿ã¯ 0 セクタã§ã‚ã‚‹ã¨æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚ã“ã‚Œã¯ãŠã‹ã—ã„"
+"ã§ã™ã€‚"
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "FAT12 ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "å¤ã„タイプ㮠Linux swap signature '%10s' ã‚’èªè­˜ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "æ–°ã—ã„タイプ㮠Linux swap signature '%10s' ã‚’èªè­˜ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Linux swsusp signature '%9s' ã‚’èªè­˜ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted ã¯ã€ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒ %d ãƒã‚¤ãƒˆã§ãªã„ディスクã§ã¯ HFS ファイルシステムを"
+"使ãˆã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã® CHS geometry 㯠(%d, %d, %d) ã§ä¸æ­£ã§ã™ã€‚パーティショ"
+"ンテーブル㮠CHS geometry 㯠(%d, %d, %d) ã§ã™ã€‚無視(I)ã‚’é¸ã¹ã°ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†"
+"ム㮠CHS geometry ã¯ãã®ã¾ã¾ã«ãªã‚Šã¾ã™ã€‚修正(F)ã‚’é¸ã¹ã°ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã® "
+"CHS geometry ã¯ã€ãƒ‘ーティション㮠CHS geometry ã¨åˆã†ã‚ˆã†ä¿®æ­£ã•ã‚Œã¾ã™ã€‚"
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"information セクタã®ã‚·ã‚°ãƒãƒãƒ£(%x)ã¯ã¾ã¡ãŒã£ã¦ã„ã¾ã™ã€‚å–消(C) ã—ã¦ãƒã‚°ãƒ¬ãƒãƒ¼"
+"トをé€ã£ã¦ãã ã•ã„。もã—ã©ã†ãªã£ã¦ã‚‚ã„ã„ã®ã§ã‚れ㰠無視(I) ã—ã¦ã‚‚ã„ã„ã§ã—ょ"
+"ã†ã€‚"
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"ã“ã®ãƒ‘ーティションをã“ã®ã‚µã‚¤ã‚ºã«ç¸®å°ã™ã‚‹ã«ã¯ %s ã®ç©ºã容é‡ãŒå¿…è¦ã§ã™ã€‚%s ã—ã‹"
+"空ã„ã¦ã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "クラスタ開始デルタ㌠%d ã§ã€ã‚¯ãƒ©ã‚¹ã‚¿ã‚µã‚¤ã‚º %d ã®å€æ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"%s ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚¨ãƒ³ãƒˆãƒªã¯ä¸æ­£ã§ã™: 最åˆã®ã‚¯ãƒ©ã‚¹ã‚¿ãŒãƒ•ã‚¡ã‚¤ãƒ«ã®çµ‚端を示ã—ã¦ã„"
+"ã¾ã™ã€‚"
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"ä¸æ­£ãª FAT: %s ã®ãƒã‚§ã‚¤ãƒ³ãŒçµ‚端ã—ã¦ã„ã¾ã›ã‚“。dosfsck ã‚„ scandisk を走らã›ã‚‹ã¹"
+"ãã§ã™ã€‚"
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"ä¸æ­£ãª FAT: クラスタ %d 㯠%s ã®ãƒã‚§ã‚¤ãƒ³ã«ã‚ã‚Šã¾ã™ãŒã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®å¤–ã«"
+"ã‚ã‚Šã¾ã™ã€‚dosfsck ã‚„ scandisk を走らã›ã‚‹ã¹ãã§ã™ã€‚"
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"ä¸æ­£ãª FAT: クラスタ %d 㯠%s ã§ã‚¯ãƒ­ã‚¹ãƒªãƒ³ã‚¯ã—ã¦ã„ã¾ã™ã€‚dosfsck ã‚„ scandisk "
+"を走らã›ã‚‹ã¹ãã§ã™ã€‚"
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s 㯠%dk ã§ã™ãŒã€%d クラスタ (%dk 分) ã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr ""
+"パーティションãŒãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ  %s ã«å¯¾ã—ã¦å¤§ãã™ãŽã€ã‚ã‚‹ã„ã¯å°ã•ã™ãŽã¾ã™ã€‚"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT ãŒè¤‡è£½ã¨ä¸€è‡´ã—ã¾ã›ã‚“。ã“ã®ã“ã¨ã®æ„味ãŒã™ã‚‹ã“ã¨ãŒã‚ã‹ã‚‰ãªã„よã†ãªã‚‰ã€ã‚­ãƒ£"
+"ンセルã—㦠scandisk ã‚’ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã«å¯¾ã—ã¦å®Ÿè¡Œã—ã¦ã€ã‚‚ã†ä¸€åº¦å®Ÿè¡Œã—ã¦"
+"ãã ã•ã„。"
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "ã“ã® FAT タイプã«å¯¾ã™ã‚‹å¯èƒ½ãªè¨­å®šãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"ファイルシステム㌠Windows ã«åˆã†ã‚ˆã†ãªæƒ³å®šã™ã‚‹ã‚µã‚¤ã‚ºã«ãªã£ã¦ã„ã¾ã›ã‚“。クラス"
+"タサイズ㯠%dk (想定 %dk)ã§ã€ã‚¯ãƒ©ã‚¹ã‚¿æ•°ã¯ %d (想定 %d)ã€FAT ã®ã‚µã‚¤ã‚ºã¯ %d ã‚»"
+"クタ (想定 %d)ã§ã™ã€‚"
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"ファイルシステムã®æƒ…å ±ã«ã‚ˆã‚Œã°ç©ºã容é‡ã¯ %d クラスタã§ã€ %d クラスタã§ã¯ã‚ã‚Š"
+"ã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãã ã‘ã®ç©ºããŒãƒ«ãƒ¼ãƒˆãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚ã‚Šã¾ã›ã‚“。キャンセルã™"
+"ã‚‹ã‹ã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’失ã£ã¦ã‚‚ã„ã„å ´åˆã¯ç„¡è¦–ã—ã¦ãã ã•ã„。"
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "ルートディレクトリã¸ã®æ›¸ãã“ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "ファイルシステムを FAT16 ã®ã¾ã¾ã«ã—ã¦ãŠããªã‚‰ã€å•é¡Œã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"FAT16 ã«å¤‰æ›ã—ã€ã—ã‹ã‚‚ã“ã®ãƒ‘ーティション㫠MS Windows ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„"
+"ã‚‹ãªã‚‰ã€MS Windows ブートローダをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ãã†ã—ãŸã„"
+"å ´åˆã¯ã€ Parted ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‹ãƒ‡ã‚£ãƒˆãƒªãƒ“ューションã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ã—ã¦ãã "
+"ã•ã„。"
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "ファイルシステムを FAT32 ã®ã¾ã¾ã«ã™ã‚Œã°ã€å•é¡Œã¯ç™ºç”Ÿã—ã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"FAT16 ã«å¤‰æ›ã—ã€ã—ã‹ã‚‚ã“ã®ãƒ‘ーティション㫠MS Windows ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„"
+"ã‚‹ãªã‚‰ã€MS Windows ブートローダをå†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ãã†ã—ãŸã„"
+"å ´åˆã¯ã€ Parted ã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‹ãƒ‡ã‚£ãƒˆãƒªãƒ“ューションã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’å‚ç…§ã—ã¦ãã "
+"ã•ã„。ã¾ãŸã€FAT32 ã«å¤‰æ›ã™ã‚‹ã¨ã€ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã¯ MS DOSã€MS Windows "
+"95aã€MS Windows NT ã§èª­ã‚ãªããªã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "FAT32 ã«ã—ãŸã„ã§ã™ã‹ï¼Ÿ"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"ファイルシステムをã“ã®ã‚µã‚¤ã‚ºã«å¤‰æ›ã™ã‚‹ã«ã¯ FAT16 ã«ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"ファイルシステムをã“ã®ã‚µã‚¤ã‚ºã«å¤‰æ›ã™ã‚‹ã«ã¯ FAT32 ã«ã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted ã§ã¯ã“ã®ãƒ‘ーティションをã“ã®ã‚µã‚¤ã‚ºã«ãƒªã‚µã‚¤ã‚ºã§ãã¾ã›ã‚“。ç¾åœ¨é–‹ç™ºä¸­"
+"ã§ã™ã€‚"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d メディア %x ã¯ãƒ–ートセクタã®ãƒ¡ãƒ‡ã‚£ã‚¢ %x ã¨ä¸€è‡´ã—ã¾ã›ã‚“。scandisk ã‚’èµ°"
+"らã›ã‚‹ã¹ãã§ã™ã€‚"
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: クラスタ %ld ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®å¤–ã«ã‚ã‚Šã¾ã™"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: クラスタ %ld ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã®å¤–ã«ã‚ã‚Šã¾ã™"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: 空ãクラスタãŒã‚ã‚Šã¾ã›ã‚“"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "ファイルシステムãŒè¦‹ã¤ã‘られã¾ã›ã‚“。"
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "ファイルシステム %s ã®ãƒªã‚µã‚¤ã‚ºã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "ファイルシステムãŒãƒœãƒªãƒ¥ãƒ¼ãƒ ã‚ˆã‚Šå¤§ãã„ã§ã™ï¼"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "ファイルシステムã«ã‚¨ãƒ©ãƒ¼ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "ãƒãƒƒãƒ‰ãƒ–ロックãŒèª­ã¿ã ã›ã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"ブロック 0x%X ã‹ã‚‰å§‹ã¾ã‚‹ extent を登録ã—よã†ã¨ã—ã¾ã—ãŸãŒã€ã“ã“ã«ã¯æ—¢ã«åˆ¥ã®ã‚‚"
+"ã®ãŒã‚ã‚Šã¾ã™ã€‚ファイルシステムã®ãƒã‚§ãƒƒã‚¯ã‚’実行ã™ã¹ãã§ã™ï¼"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"ブロック Ox%X ã‹ã‚‰ Ox%X ã« extent を移動ã•ã›ã‚ˆã†ã¨ã—ã¾ã—ãŸãŒã€æ—¢ã«ã“ã“ã«åˆ¥ã®"
+"ã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚èµ·ãã¦ã¯ãªã‚‰ãªã„ã“ã¨ã§ã™ï¼"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "CNID %X ã® HFS ファイル㮠extent キャッシュを更新ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "CNID %X ã® HFS ファイルを EOF を越ãˆã¦èª­ã‚‚ã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "CNID %2$X ã® HFS ファイルã«å«ã¾ã‚Œã‚‹ã‚»ã‚¯ã‚¿ %1$lli ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "CNID %X ã® HFS ファイルを EOF を越ãˆã¦æ›¸ãã“ã‚‚ã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "CNID %X ã® HFS+ ファイル㮠extent キャッシュを更新ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "CNID %X ã® HFS+ ファイルを EOF を越ãˆã¦èª­ã‚‚ã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "CNID %2$X ã® HFS+ ファイルã«å«ã¾ã‚Œã‚‹ã‚»ã‚¯ã‚¿ %1$lli ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "CNID %X ã® HFS+ ファイルを EOF を越ãˆã¦æ›¸ãã“ã‚‚ã†ã¨ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "残念ãªãŒã‚‰ã€ã¾ã  HFS ã¯ãã®ã‚ˆã†ã«ãƒªã‚µã‚¤ã‚ºã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "縮å°ä¸­"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "データã®å†é…ç½®ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "データをå†é…ç½®ã—ã¦ã‚‚ボリュームã®æœ€å¾Œã«ãƒ‡ãƒ¼ã‚¿ãŒæ®‹ã‚Šã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "HFS マスターディレクトリブロックを書込中"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "オープン中ã«æ­£ã—ã„ HFS[+X] ã®ã‚·ã‚°ãƒãƒãƒ£ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Version %d ã® HFS+ ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Version %d ã® HFSX ã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "データをå†é…ç½®ã—ã¦ã‚‚ボリュームã®æœ€å¾Œã«ãƒ‡ãƒ¼ã‚¿ãŒæ®‹ã‚Šã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "allocation ファイルã®æ›¸è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "allocation ファイルã®äº’æ›æ€§éƒ¨åˆ†ã«æ›¸è¾¼ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "HFS+ ボリュームヘッダã®æ›¸è¾¼ä¸­"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "å¿…é ˆãƒãƒƒãƒ‰ãƒ–ロックファイルを探ã—ã¦ã„る時ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"HFS ラッパーã«ã‚¨ãƒ©ãƒ¼ãŒã‚るよã†ã§ã™ï¼šãƒãƒƒãƒ‰ãƒ–ロックファイルã«åŸ‹ã‚ã“ã¿ HFS+ ボ"
+"リュームãŒå«ã¾ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "残念ãªãŒã‚‰ã€ã¾ã  HFS+ ã¯ãã®ã‚ˆã†ã«ãƒªã‚µã‚¤ã‚ºã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "埋ã‚ã“ã¿ HFS+ ボリュームを縮å°ä¸­"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "HFS+ ボリュームã®ãƒªã‚µã‚¤ã‚ºã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "HFS ラッパーを縮å°ä¸­"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "HFS ラッパーã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"ã“ã‚Œã¯æœ¬ç‰©ã® %s ãƒã‚§ãƒƒã‚¯ã§ã¯ã‚ã‚Šã¾ã›ã‚“。デãƒãƒƒã‚°ç›®çš„ã«ç‰¹åˆ¥ãªä½Žãƒ¬ãƒ™ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«"
+"を抽出ã—ã¾ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "ブロックリストヘッダã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ãŒä¸æ­£ã§ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"ジャーナル(%i ãƒã‚¤ãƒˆ)ã®ãƒªãƒ—レイ中ã«ä¸æ­£ãªã‚µã‚¤ã‚ºã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãƒ–ロックãŒã‚"
+"ã‚Šã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"ボリュームã®å¤–ã«ã‚るジャーナルã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。ジャーナルを無効ã«ã—㦠"
+"Parted を実行ã—ãªãŠã—ã¦ãã ã•ã„。"
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "ジャーナルã®ã‚ªãƒ•ã‚»ãƒƒãƒˆã‹ã‚µã‚¤ã‚ºãŒã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºã®å€æ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "ジャーナルヘッダã®ãƒžã‚¸ãƒƒã‚¯ãƒŠãƒ³ãƒãƒ¼ãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"ジャーナルã®ã‚µã‚¤ã‚ºãŒã‚¸ãƒ£ãƒ¼ãƒŠãƒ«æƒ…報ブロックã¨ã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ãƒ˜ãƒƒãƒ€ã¨ã§ç•°ãªã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "ヘッダã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ä¸­ã«ã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºã®å€æ•°ã§ãªã„ã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"ジャーナルã«æ›¸ã‹ã‚ŒãŸã‚»ã‚¯ã‚¿ã‚µã‚¤ã‚ºãŒ 512 ãƒã‚¤ãƒˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。Parted 㯠512 ãƒ"
+"イトã®ã‚»ã‚¯ã‚¿ã—ã‹ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ä¸æ­£ãªã‚¸ãƒ£ãƒ¼ãƒŠãƒ«ã®ãƒã‚§ãƒƒã‚¯ã‚µãƒ ã§ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"ジャーナルãŒç©ºã§ã¯ã‚ã‚Šã¾ã›ã‚“。Parted ã¯ãƒ•ã‚¡ã‚¤ãƒ«ã‚·ã‚¹ãƒ†ãƒ ã‚’オープンã™ã‚‹å‰ã«ãƒˆãƒ©"
+"ンザクションをリプレイã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。ファイルシステムを修正ã™ã‚‹ã“ã¨ã«"
+"ãªã‚Šã¾ã™ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"ジャーナルãŒãƒªãƒ—レイã•ã‚Œã¦ã€ãƒœãƒªãƒ¥ãƒ¼ãƒ ãƒ˜ãƒƒãƒ€ã‹ãƒžã‚¹ã‚¿ãƒ¼ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ–ロックãŒ"
+"変更ã•ã‚Œã¾ã—ãŸã€‚Parted ã‚’å†èµ·å‹•ã—ã¦ãã ã•ã„。"
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "extent ã¯å†é…ç½®ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"ã‚ã‚‹ã¹ãã§ã¯ãªã„ã¨ã“ã‚ã‹ã‚‰ extent ã¸ã®å‚ç…§ãŒã‚ã‚Šã¾ã™ã€‚ファイルシステムã®"
+"ãƒã‚§ãƒƒã‚¯ã‚’実行ã™ã‚‹ã¹ãã§ã™ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"ã“ã® HFS ボリュームã«ã¯ã‚«ã‚¿ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。滅多ã«ãªã„ã“ã¨ã§ã™ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"ã“ã® HFS ボリュームã«ã¯ extent オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。滅多ã«ã‚ã‚Š"
+"ãˆãªã„ã“ã¨ã§ã™ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"extent オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ãã® extent 自身をå«ã‚“ã§ã¯ã„ã‘ã¾ã›ã‚“ï¼ãƒ•ã‚¡ã‚¤"
+"ルシステムã®ãƒã‚§ãƒƒã‚¯ã‚’実行ã™ã‚‹ã¹ãã§ã™ã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "ファイルシステムをメモリã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã§ãã¾ã›ã‚“。"
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "ãƒãƒƒãƒ‰ãƒ–ロックリストを読ã¿ã“ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "extent ã®å†é…置中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"ã“ã® HFS+ ボリュームã«ã¯ã‚«ã‚¿ãƒ­ã‚°ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。滅多ã«ãªã„ã“ã¨ã§ã™ï¼"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"ã“ã® HFS+ ボリュームã«ã¯ extent オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。滅多ã«ã‚"
+"ã‚Šãˆãªã„ã“ã¨ã§ã™ï¼"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "ã“ã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "全ブロックデãƒã‚¤ã‚¹ã®ãƒ‘ーティションレイアウトを表示"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "機械ãŒè§£é‡ˆå¯èƒ½ãªå‡ºåŠ›ã‚’ã™ã‚‹"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "JSON フォーマットã§å‡ºåŠ›ã‚’ã™ã‚‹"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "ユーザã«ä»‹å…¥ã•ã›ãªã„"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "スクリプトモードã§ä¸­æ­¢ã§ã¯ãªã修正ã™ã‚‹"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’表示ã™ã‚‹"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "æ–°è¦ãƒ‘ーティションã®ã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆ"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMBER 㯠Linux カーãƒãƒ«ã«ã‚ˆã£ã¦ãƒ‘ーティション番å·ã¨ã—ã¦ä½¿ã‚ã‚Œã¾ã™ã€‚MS-DOS "
+"ディスクラベルã§ã¯ã€åŸºæœ¬ãƒ‘ーティション番å·ã¯ 1 ã‹ã‚‰ 4 ã¾ã§ã§ã€è«–ç†ãƒ‘ーティ"
+"ション㯠5 以é™ã¨ãªã‚Šã¾ã™ã€‚\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "ラベルã®ç¨®é¡žã¯æ¬¡ã®ã†ã¡ã‹ã‚‰é¸ã³ã¾ã™: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "フラグã¯æ¬¡ã®ã†ã¡ã‹ã‚‰é¸ã³ã¾ã™: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIT ã¯æ¬¡ã®ã†ã¡ã‹ã‚‰é¸ã³ã¾ã™: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "望ã¾ã—ã„アライメント: minimum(最å°) ã‹ optimal(最é©)"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr ""
+"パーティションã®ç¨®é¡žã¯æ¬¡ã®ã†ã¡ã®ã©ã‚Œã‹ã¨ãªã‚Šã¾ã™: プライマリã€è«–ç†ã€æ‹¡å¼µ\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "ファイルシステムã®ç¨®é¡žã¯æ¬¡ã®ã†ã¡ã‹ã‚‰é¸ã³ã¾ã™: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START 㨠END ã¯ã€ãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã®ä½ç½®ã‚’ 4GB ã‚„ 10% ãªã©ã§è¡¨ã‚ã—ã¾ã™ã€‚è² ã®å€¤ã¯ãƒ‡ã‚£"
+"スクã®çµ‚ã‚ã‚Šã‹ã‚‰ã®å€¤ã«ãªã‚Šã¾ã™ã€‚例ãˆã°ã€-1s ã¯ã€æœ€å¾Œã®ã‚»ã‚¯ã‚¿ã‚’指ã—ã¾ã™ã€‚\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"END ã¯ã€ãƒ‡ã‚£ã‚¹ã‚¯ä¸Šã®ä½ç½®ã‚’ 4GB ã‚„ 10% ãªã©ã§è¡¨ã‚ã—ã¾ã™ã€‚è² ã®å€¤ã¯ãƒ‡ã‚£ã‚¹ã‚¯ã®çµ‚"
+"ã‚ã‚Šã‹ã‚‰ã®å€¤ã«ãªã‚Šã¾ã™ã€‚例ãˆã°ã€-1s ã¯ã€æœ€å¾Œã®ã‚»ã‚¯ã‚¿ã‚’指ã—ã¾ã™ã€‚\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "状態㯠on ã‹ off ã®ã©ã¡ã‚‰ã‹\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "デãƒã‚¤ã‚¹ã¯ãŸã„ã¦ã„ /dev/hda ã‹ /dev/sda ã§ã™ã€‚\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "åå‰ã®éƒ¨åˆ†ã¯ä»»æ„ã®å˜èªž\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"ã“ã®ãƒ—ログラム㯠GPL ã«åŸºã¥ã„ãŸãƒ•ãƒªãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã™ã€‚\n"
+"日本語訳ã«é–¢ã—ã¦ã¯ Hiroshi Takekawa <sian@big.or.jp> ã¾ã§ãŠã­ãŒã„ã—ã¾ã™ã€‚\n"
+"\n"
+"本プログラムã¯æœ‰ç”¨ã¨ã¯æ€ã„ã¾ã™ãŒã€é ’布ã«ã‚ãŸã£ã¦ã¯ã€\n"
+"市場性åŠã³ç‰¹å®šç›®çš„é©åˆæ€§ã«ã¤ã„ã¦ã®æš—é»™ã®ä¿è¨¼ã‚’å«ã‚ã¦ã€\n"
+"ã„ã‹ãªã‚‹ä¿è¨¼ã‚‚è¡Œãªã„ã¾ã›ã‚“。詳細ã«ã¤ã„ã¦ã¯GNU 一般公有使用許諾書をãŠèª­ã¿ãã "
+"ã•ã„。\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(残り時間 %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "パーティション %s ã¯ä½¿ç”¨ä¸­ã§ã™ã€‚ãã‚Œã§ã‚‚実行ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "%s ã®ãƒ‘ーティションãŒä½¿ç”¨ä¸­ã§ã™ã€‚"
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"ã„ã¾å­˜åœ¨ã—ã¦ã„ã‚‹ %s ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¯ç ´å£Šã•ã‚Œã€ã“ã®ãƒ‡ã‚£ã‚¹ã‚¯ã®å…¨ãƒ‡ãƒ¼ã‚¿ãŒå¤±ã‚"
+"ã‚Œã¾ã™ã€‚続行ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "æ–°ã—ã„ディスクラベル?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "パーティションã®ç¨®é¡ž?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "パーティションã®åå‰?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "ファイルシステムã®ç¨®é¡ž?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "開始?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "終了?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"%s ã‹ã‚‰ %s (%llu ã‹ã‚‰ %llu セクタ)ã¾ã§ã®ãƒ‘ーティションを指定ã•ã‚Œã¾ã—ãŸã€‚\n"
+"å¯èƒ½ãªä¸­ã§æœ€ã‚‚è¿‘ã„ã‚‚ã®ã¯ %s ã‹ã‚‰ %s (%llu ã‹ã‚‰ %llu セクタ)ã«ãªã‚Šã¾ã™ã€‚%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"ãã‚Œã§ã‚‚ã‹ã¾ã„ã¾ã›ã‚“ã‹ï¼Ÿ"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"æ“作ã®çµæžœã§ãるパーティションã¯ã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆãŒæ­£ã—ããªã„ãŸã‚ã«ãƒ‘フォーマンス"
+"ãŒã§ã¾ã›ã‚“: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "ä¸æ˜Ž (malloc 失敗)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¯ãƒ‘ーティションåをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "パーティション番�"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s ã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒ©ãƒ™ãƒ«ã¯ãƒ‘ーティションåをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。"
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "パーティションã®ç¨®é¡ž?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "ä¸æ­£ãªå€¤ã§ã™ã€‚"
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "パーティションã®ç¨®é¡ž?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "ä¸æ­£ãªå€¤ã§ã™ã€‚"
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS シリンダã€ãƒ˜ãƒƒãƒ‰ã€ã‚»ã‚¯ã‚¿ geometry: %d,%d,%d. 1シリンダ㯠%s。\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "モデル: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ディスク %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "セクタサイズ (è«–ç†/物ç†): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "パーティションテーブル: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "ディスクフラグ: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "番å·"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "開始"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "終了"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "サイズ"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "タイプ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "ファイルシステム"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "åå‰"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "フラグ"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "空ã容é‡"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"%s %s パーティション㌠%s → %s ã®å ´æ‰€ã«ç™ºè¦‹ã•ã‚Œã¾ã—ãŸã€‚ã“ã®ãƒ‘ーティションを"
+"パーティションテーブルã«è¿½åŠ ã—ã¾ã™ã‹ï¼Ÿ"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "ファイルシステムを探ã—ã¦ã„ã¾ã™"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "resize コマンド㯠parted 3.0 ã§å‰Šé™¤ã•ã‚Œã¾ã—ãŸ"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"パーティションを縮å°ã™ã‚‹ã¨ãƒ‡ãƒ¼ã‚¿ã‚’失ã†ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒã€ãã‚Œã§ã‚‚実行ã—ã¾ã™"
+"ã‹ï¼Ÿ"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "æ–°ã—ã„デãƒã‚¤ã‚¹?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "アライメントタイプ(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d アライメント済\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d 未アライメント: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "å転ã™ã‚‹ãƒ•ãƒ©ã‚°?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "æ–°ã—ã„状態?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "å˜ä½ã¯?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TYPE N パーティション N ã®ã‚¢ãƒ©ã‚¤ãƒ¡ãƒ³ãƒˆ(TYPE: min|opt)"
+"ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [コマンド] ヘルプ表示。コマンド指定ã§ãã®ãƒ˜ãƒ«ãƒ—を表示"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ラベルã®ç¨®é¡ž æ–°ã—ã„ラベル(パーティションテーブル)を作る"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYPE [FS-TYPE] START END パーティションを作æˆ"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart ã¯ãƒ‘ーティションã ã‘作りã€æ–°ã—ã„ファイルシステムã¯ä½œã‚Šã¾ã›ã‚“。ファイル"
+"システムã®ç¨®é¡žã‚’指定ã™ã‚‹ã¨ã€æ­£ã—ã„IDãŒè¨­å®šã•ã‚Œã¾ã™ã€‚\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name NUMBER åå‰ ãƒ‘ãƒ¼ãƒ†ã‚£ã‚·ãƒ§ãƒ³ã«åå‰ã‚’ã¤ã‘ã‚‹"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] パーティションテーブルやã€åˆ©ç”¨å¯èƒ½ãª"
+"デãƒã‚¤ã‚¹ã€ç©ºã領域ã€è¦‹ã¤ã‹ã£ãŸå…¨ã¦ã®ãƒ‘ーティションã«ã¤ã„ã¦è¡¨ç¤ºã™ã‚‹"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"引数をã¤ã‘ãªã„å ´åˆã€'print' コマンドã¯ã€å…¨ãƒ‘ーティションテーブルを表示ã—ã¾"
+"ã™ã€‚次ã®å¼•æ•°ã‚’ã¤ã‘ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : å…¨ã¦ã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ–ロックデãƒã‚¤ã‚¹ã‚’表示\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : カレントブロックデãƒã‚¤ã‚¹ã®ãƒ‘ーティションã«å«ã¾ã‚Œã¦ã„ãªã„空ãé ˜"
+"域情報を表示\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : アクティブãªå…¨ãƒ–ロックデãƒã‚¤ã‚¹ã®ãƒ‘ーティションテーブルを表示\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit プログラムを終了ã™ã‚‹"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue 開始 終了 開始ã€çµ‚了ã§æŒ‡å®šã—ãŸç¯„囲付近ã«ã‚るパーティショ"
+"ンを復活ã•ã›ã‚‹"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "resize コマンド㯠parted 3.0 ã§å‰Šé™¤ã•ã‚Œã¾ã—ãŸ\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMBER END パーティション NUMBER ã‚’ END ã«ãƒªã‚µã‚¤ã‚ºã™ã‚‹"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMBER パーティションを削除ã™ã‚‹"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select デãƒã‚¤ã‚¹ æ“作ã™ã‚‹ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_set FLAG STATE é¸æŠžã—ãŸãƒ‡ãƒã‚¤ã‚¹ã® FLAG を変更"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr "disk_toggle [FLAG] é¸æŠžã—ãŸãƒ‡ãƒã‚¤ã‚¹ã® FLAG ã®çŠ¶æ…‹ã‚’トグル"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set NUMBER フラグ 状態 ファイルシステムã®ãƒ•ãƒ©ã‚°ã¨çŠ¶æ…‹ã‚’設定ã™ã‚‹"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr "toggle [NUMBER [FLAG]] パーティションã®ãƒ•ãƒ©ã‚°ã®çŠ¶æ…‹ã‚’å転ã™ã‚‹"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "unit UNIT デフォルトã®å˜ä½ã‚’ UNIT ã«ã™ã‚‹"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version GNU Parted ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨è‘—作権情報を表示"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"version ã¯ã€å®Ÿè¡Œä¸­ã® GNU Parted ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨è‘—作権情報を表示ã—ã¾ã™ã€‚\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"使ã„æ–¹: %s [-hlmsfv] [-a<アライン>] [デãƒã‚¤ã‚¹ [コマンド [パラメータ]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "デãƒã‚¤ã‚¹ãŒã¿ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "警告: 管ç†è€…権é™ãŒã‚ã‚Šã¾ã›ã‚“。パーミッションã«æ³¨æ„ã—ã¦ãã ã•ã„。\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"å†èµ·å‹•ã™ã‚‹å‰ã«ãƒ–ートローダをã„ã‚ŒãªãŠã™ã¹ãã§ã™ã€‚詳細㯠Parted ユーザドキュメ"
+"ントã®4章を読んã§ãã ã•ã„。"
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "å¿…è¦ã§ã‚れ㰠/etc/fstab ã‚’æ›´æ–°ã™ã‚‹ã®ã‚’忘れãªã„よã†ã«ã—ã¦ãã ã•ã„。\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"GNU Parted ã¸ã‚ˆã†ã“ãï¼ ã‚³ãƒžãƒ³ãƒ‰ä¸€è¦§ã‚’è¦‹ã‚‹ã«ã¯ 'help' ã¨å…¥åŠ›ã—ã¦ãã ã•ã„。\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"使ã„æ–¹: parted [オプション]... [デãƒã‚¤ã‚¹ [コマンド [パラメータ]...]...]\n"
+"デãƒã‚¤ã‚¹ã«å¯¾ã—ã¦ãƒ‘ラメータã«å¾“ã£ã¦ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¾ã™ã€‚ã‚‚ã—コマンドãŒæŒ‡å®šã•"
+"ã‚Œãªã‘ã‚Œã°ã€å¯¾è©±ãƒ¢ãƒ¼ãƒ‰ã«å…¥ã‚Šã¾ã™ã€‚\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"GNU Parted ã®ãƒã‚°ã‚’発見ã—ã¾ã—ãŸï¼\n"
+"\n"
+"パニックを起ã“ã•ãªã„ã§ãã ã•ã„ï¼ ã“ã®ãƒã‚°ã¯ãŠãらãデータã«ã¯å½±éŸ¿ã‚ã‚Šã¾ã›"
+"ん。\n"
+"次ã®ã“ã¨ã‚’ã—ã¦ã“ã®ãƒã‚°ã®ä¿®æ­£ã«ã”å”力ãã ã•ã„。\n"
+"\n"
+"次ã®ã‚µã‚¤ãƒˆã«æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã™ã€‚\n"
+"æ—¢ã«ã“ã®ãƒã‚°ãŒä¿®æ­£ã•ã‚Œã¦ã„ãªã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã‚’ã™ã‚‹å‰ã«æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ç¢ºèªã—ã¦ãã ã•ã„。\n"
+"\n"
+"ã¾ã ãƒã‚°ãŒä¿®æ­£ã•ã‚Œã¦ã„ãªã„ã‹ã€ç¢ºèªã®ä»•æ–¹ãŒã‚ã‹ã‚‰ãªã„å ´åˆã€\n"
+"GNU Parted 㮠web サイト\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"ã‚’é–‹ã„ã¦ã€è©³ã—ã„情報を調ã¹ã¦ãã ã•ã„。\n"
+"\n"
+"レãƒãƒ¼ãƒˆã«ã¯ã€ã“ã® Parted ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…å ± (%s) ã¨ã€\n"
+"下ã«è¡¨ç¤ºã•ã‚Œã¦ã„るエラーメッセージã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"ã®å‡ºåŠ›ã¨ã€ã‚³ãƒžãƒ³ãƒ‰å±¥æ­´ã€\n"
+"ãã®ä»–é‡è¦ã¨æ€ã†æƒ…報を記述ã—ã¦ãã ã•ã„。\n"
+"\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"コマンド履歴:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"エラー: SEGV_MAPERR (アドレスãŒã‚ªãƒ–ジェクトã«å¤‰æ›ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"エラー: SEGV_ACCERR (マップã•ã‚ŒãŸã‚ªãƒ–ジェクトã®ãƒ‘ーミッションãŒä¸æ­£ã§ã™)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"エラー: SIGSEGV シグナルをå—ã‘ã¨ã‚Šã¾ã—ãŸã€‚\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"エラー: FPE_INTDIV (æ•´æ•°: 0ã«ã‚ˆã‚‹é™¤ç®—)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"エラー: FPE_INTOVF (æ•´æ•°: オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"エラー: FPE_FLTDIV (浮動å°æ•°ç‚¹: 0ã«ã‚ˆã‚‹é™¤ç®—)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"エラー: FPE_FLTOVF (浮動å°æ•°ç‚¹: オーãƒãƒ¼ãƒ•ãƒ­ãƒ¼)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"エラー: FPE_FLTUND (浮動å°æ•°ç‚¹: アンダーフロー)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"エラー: FPE_FLTRES (浮動å°æ•°ç‚¹: æ­£ã—ããªã„çµæžœ)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"\n"
+"エラー: FPE_FLTINV (浮動å°æ•°ç‚¹: ä¸æ­£ãªæ“作)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"エラー: FPE_FLTSUB (浮動å°æ•°ç‚¹: 添字ãŒç¯„囲を越ãˆã¾ã—ãŸ)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"エラー: SIGFPE シグナルをå—ã‘ã¨ã‚Šã¾ã—ãŸã€‚"
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"エラー: ILL_ILLOPC (ä¸æ­£ãªã‚ªãƒšã‚³ãƒ¼ãƒ‰)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"エラー: ILL_ILLOPN (ä¸æ­£ãªã‚ªãƒšãƒ©ãƒ³ãƒ‰)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"エラー: ILL_ILLADR (ä¸æ­£ãªã‚¢ãƒ‰ãƒ¬ã‚¹ãƒ¢ãƒ¼ãƒ‰)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"エラー: ILL_ILLTRP (ä¸æ­£ãªãƒˆãƒ©ãƒƒãƒ—)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"エラー: ILL_PRVOPC (特権ãŒå¿…è¦ãªã‚ªãƒšã‚³ãƒ¼ãƒ‰)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"エラー: ILL_PRVREG (特権ãŒå¿…è¦ãªãƒ¬ã‚¸ã‚¹ã‚¿)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"エラー: ILL_COPROC (コプロセッサエラー)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"エラー: ILL_BADSTK (インターナルスタックエラー)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"エラー: SIGILL シグナルをå—ã‘ã¨ã‚Šã¾ã—ãŸã€‚"
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã§ã™: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "パーティション番å·ã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "パーティションãŒã‚ã‚Šã¾ã›ã‚“。"
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "ファイルシステムã®ç¨®é¡žã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "ファイルシステムã®ç¨®é¡ž \"%s\" ã¯ä¸æ˜Žã§ã™ã€‚"
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "ディスクラベルã®ç¨®é¡žã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "フラグãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "パーティションを追加ã§ãã¾ã›ã‚“。"
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "パーティションã®ç¨®é¡žã‚’入力ã—ã¦ãã ã•ã„。"
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "最é©(optimal)"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "最å°(minimal)"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "オプション"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "コマンド:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"ãƒã‚°ãƒ¬ãƒãƒ¼ãƒˆã¯ %s ã¸ã€‚\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "%s を使用\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯å¯¾è©±æ“作モードã§ãªã‘ã‚Œã°æ„味ãŒã‚ã‚Šã¾ã›ã‚“。\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "MSDOS ディスクラベルã§æ‹¡å¼µãƒ‘ーティションã¯éš ã›ã¾ã›ã‚“。"
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "MSDOS ディスクラベルã§æ‹¡å¼µãƒ‘ーティションã¯ãƒªã‚«ãƒãƒªãƒ‘ーティションã«ã§ãã¾ã›"
+#~ "ん。"
diff --git a/po/ka.gmo b/po/ka.gmo
new file mode 100644
index 0000000..ca62348
--- /dev/null
+++ b/po/ka.gmo
Binary files differ
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..5a0992c
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,3135 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-17 15:31+0200\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
+"Language-Team: Georgian <(nothing)>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%s áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ áƒáƒ áƒ’უმენტირ%s-თვის"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%s გáƒáƒ£áƒ áƒ™áƒ•áƒ”ველი áƒáƒ áƒ’უმენტირ%s-თვის"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "სწáƒáƒ áƒ˜ áƒáƒ áƒ’უმენტებიáƒ:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "სისტემის უცნáƒáƒ‘ი შეცდáƒáƒ›áƒ"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: პáƒáƒ áƒáƒ›áƒ”ტრი '%s%s' გáƒáƒ£áƒ áƒ™áƒ•áƒ”ველიáƒ\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: პáƒáƒ áƒáƒ›áƒ”ტრი '%s%s' გáƒáƒ£áƒ áƒ™áƒ•áƒ”ველიáƒ; შესáƒáƒ«áƒšáƒ ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ”ბი:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: უცნáƒáƒ‘ი პáƒáƒ áƒáƒ›áƒ”ტრი '%s'%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: პáƒáƒ áƒáƒ›áƒ”ტრს \"%s%s' áƒáƒ áƒ’უმენტი áƒáƒ  სჭირდებáƒ\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: პáƒáƒ áƒáƒ›áƒ”ტრს \"%s%s\" áƒáƒ áƒ’უმენტი ესáƒáƒ­áƒ˜áƒ áƒáƒ”ბáƒ\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ პáƒáƒ áƒáƒ›áƒ”ტრი -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: პáƒáƒ áƒáƒ›áƒ”ტრს ესáƒáƒ­áƒ˜áƒ áƒáƒ”ბრáƒáƒ áƒ’უმენტი -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "წáƒáƒ áƒ›áƒáƒ¢áƒ”ბáƒ"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "áƒáƒ  ემთხვევáƒ"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "კáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სიმბáƒáƒšáƒ"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "სიმბáƒáƒšáƒáƒ”ბის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ კლáƒáƒ¡áƒ˜"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "ბáƒáƒšáƒ Backslash"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ უკუბმáƒ"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "áƒáƒ  ემთხვევრ[, [^, [:, [., áƒáƒœ [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "áƒáƒ  ემთხვევრ( áƒáƒœ \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "áƒáƒ  ემთხვევრ\\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "\\{\\}-ის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ შემცელáƒáƒ‘áƒ"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "დიáƒáƒžáƒáƒ–áƒáƒœáƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "მეხსიერებრგáƒáƒ“áƒáƒ•áƒ¡áƒ”ბულიáƒ"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბის მáƒáƒ£áƒšáƒáƒ“ნელი დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "რეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბრძáƒáƒšáƒ˜áƒáƒœ დიდიáƒ"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "áƒáƒ  ემთხვევრ) áƒáƒœ \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "წინრრეგულáƒáƒ áƒ£áƒšáƒ˜ გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბრáƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "áƒáƒ¬áƒ§áƒáƒ‘ილირ%s-ის მიერ (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "áƒáƒ¬áƒ§áƒáƒ‘ილირ%s-ის მიერ\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "áƒáƒ•áƒ¢áƒáƒ áƒ˜: %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s\n"
+"დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s, %s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s, %s, %s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"%s დრ%s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"áƒáƒ•áƒ¢áƒáƒ áƒ”ბი: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"%s, %s დრსხვ.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "შეცდáƒáƒ›áƒ”ბის შესáƒáƒ®áƒ”ბ მიწერეთ: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "%s-ის შეცდáƒáƒ›áƒ”ბის შესáƒáƒ®áƒ”ბ მისáƒáƒ¬áƒ”რი ელფáƒáƒ¡áƒ¢áƒ: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s-ის სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ გვერდიáƒ: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "GNU-ის პრáƒáƒ’რáƒáƒ›áƒ£áƒšáƒ˜ უზრუნველყáƒáƒ¤áƒ˜áƒ¡ სáƒáƒ”რთრდáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ: <%s >\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "მეხსიერებრგáƒáƒ“áƒáƒ•áƒ¡áƒ”ბულიáƒ"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "დისკის გáƒáƒ›áƒáƒ¡áƒáƒ®áƒ£áƒšáƒ”ბáƒ"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "%s-ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%s-ის ჩáƒáƒ¬áƒ”რისთვის გáƒáƒ®áƒ¡áƒœáƒ შეუძლებელირ(%s). %s მხáƒáƒšáƒáƒ“ კითხვისთვისáƒáƒ ღიáƒ."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s წáƒáƒ¡áƒáƒ™áƒ˜áƒ—ხáƒáƒ•áƒáƒ“ ძებნისáƒáƒ¡ %s-ზე"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s კითხვისáƒáƒ¡ %s-ზე"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "%s-ზე ჩáƒáƒ¬áƒ”რრშეუძლებელიáƒ. გáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜áƒ მხáƒáƒšáƒáƒ“ კითხვის რეჟიმში."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s ჩáƒáƒ¡áƒáƒ¬áƒ”რáƒáƒ“ ძებნისáƒáƒ¡ %s-ზე"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s ჩáƒáƒ¬áƒ”რისáƒáƒ¡ %s-ზე"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "მეტი ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის სცáƒáƒ“ეთ '%s --help'\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: %s [პáƒáƒ áƒáƒ›áƒ”ტრი].. [მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"რáƒáƒªáƒ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რმითითებული áƒáƒ áƒáƒ, ყველრდáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სკáƒáƒœáƒ˜áƒ áƒ”ბáƒ.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ”ბის შესáƒáƒ®áƒ”ბ მიწერეთ: %s\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%s-ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "მáƒáƒ¦áƒáƒ–იის მáƒáƒ™áƒ•áƒšáƒ”ვის შეცდáƒáƒ›áƒ."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"გáƒáƒ¤áƒ áƒ—ხილებáƒ: ბირთვის მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე (%s) დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის რუკის თáƒáƒ•áƒ˜áƒ“áƒáƒœ წáƒáƒ™áƒ˜áƒ—ხვის "
+"შეცდáƒáƒ›áƒ (%s). შედეგáƒáƒ“ თქვენი ცვლილებები შეიძლებრგáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ›áƒ“ე áƒáƒ  "
+"გáƒáƒ›áƒáƒ©áƒœáƒ“ეს."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"გáƒáƒ¤áƒ áƒ—ხილებáƒ: %s-ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ (%s). შედეგáƒáƒ“ ცვლილებები შეიძლებრშემდეგ "
+"გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ›áƒ“ე áƒáƒ  გáƒáƒ›áƒáƒ©áƒœáƒ“ეს."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"გáƒáƒ¤áƒ áƒ—ხილებáƒ: %s-ზე მთáƒáƒ áƒ’მნელის მáƒáƒªáƒ˜áƒšáƒ”ბრშეუძლებელირ(%s). შედეგáƒáƒ“ ცვლილებები "
+"შეიძლებრშემდეგ გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ›áƒ“ე áƒáƒ  გáƒáƒ›áƒáƒ©áƒœáƒ“ეს."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s ცდილáƒáƒ‘ს %s-ის დისკთáƒáƒœ სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒáƒ¡"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის (%s) áƒáƒ¦áƒ›áƒáƒ©áƒ”ნის შეცდáƒáƒ›áƒ - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "%s-ის dm-ის ტიპის გáƒáƒ›áƒáƒªáƒœáƒáƒ‘რშეუძლებელიáƒ."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"%s-ის სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒáƒªáƒœáƒáƒ‘ის შეცდáƒáƒ›áƒ: %s.\n"
+"გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებრსექტáƒáƒ áƒ˜áƒ¡ ნáƒáƒ’ულისხმები ზáƒáƒ›áƒ (%lldl)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"%s-ის სექტáƒáƒ áƒ˜áƒ¡ ფიზიკური ზáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒáƒªáƒœáƒáƒ‘ის შეცდáƒáƒ›áƒ.\n"
+"გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებრსექტáƒáƒ áƒ˜áƒ¡ ფიზიკური ზáƒáƒ›áƒ (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "%s-ის ზáƒáƒ›áƒ˜áƒ¡ გáƒáƒœáƒ¡áƒáƒ–ღვრრშეუძლებელირ(%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "ზáƒáƒ’áƒáƒ“ი IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის (%s) იდენტიფიკáƒáƒªáƒ˜áƒ შეუძლებელირ- %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "SCSI მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის (%s) ინიციáƒáƒšáƒ˜áƒ–áƒáƒªáƒ˜áƒ˜áƒ¡ შეცდáƒáƒ›áƒ - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რ%s ისეთი პáƒáƒ¢áƒáƒ áƒáƒ, რáƒáƒ› ვერ იტევს ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ áƒáƒœ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის "
+"ცხრილს. გáƒáƒ“áƒáƒáƒ›áƒáƒ¬áƒ›áƒ”თ, მითითებული მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რსწáƒáƒ áƒ˜áƒ, თუ áƒáƒ áƒ?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"%s-ის გეáƒáƒ›áƒ”ტრიის დáƒáƒ“გენრშეუძლებáƒáƒšáƒ˜áƒ. áƒáƒ  გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— parted, თუ ზუსტáƒáƒ“ áƒáƒ  "
+"იცით, რáƒáƒ¡ áƒáƒ™áƒ”თებთ!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "ზáƒáƒ’áƒáƒ“ი SD/MMC სáƒáƒªáƒáƒ•áƒ˜áƒ¡ ბáƒáƒ áƒáƒ—ი"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID კáƒáƒœáƒ¢áƒ áƒáƒšáƒ”რი"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA over Ethernet მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD დისკი"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart მáƒáƒ¡áƒ˜áƒ•áƒ˜"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID კáƒáƒœáƒ¢áƒ áƒáƒšáƒ”რი"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O კáƒáƒœáƒ¢áƒ áƒáƒšáƒ”რი"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "მáƒáƒ®áƒ›áƒáƒ áƒ”ბლის-რეჟიმის Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Loopback მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen-ის ვირტუáƒáƒšáƒ£áƒ áƒ˜ ბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "უცნáƒáƒ‘იáƒ"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio ბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux-ის პრáƒáƒ’რáƒáƒ›áƒ£áƒšáƒ˜ RAID მáƒáƒ¡áƒ˜áƒ•áƒ˜"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM დისკი"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის მხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელი ტიპი"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Fsync-ის/დáƒáƒ®áƒ£áƒ áƒ•áƒ˜áƒ¡ შეცდáƒáƒ›áƒ (%s): %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sფáƒáƒ˜áƒšáƒ˜ კითხვის დáƒáƒ¡áƒ áƒ£áƒšáƒ”ბáƒáƒ›áƒ“ე დáƒáƒ›áƒ—áƒáƒ•áƒ áƒ“რ%s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "%s-ის დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜áƒ¡ დრსიგრძის გáƒáƒœáƒ¡áƒáƒ–ღვრის შეცდáƒáƒ›áƒ."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"დáƒáƒœáƒáƒ§áƒáƒ¤(ებ)-ი %s ჩáƒáƒ˜áƒ¬áƒ”რრ%s-ზე. მáƒáƒ’რáƒáƒ› ბირთვს áƒáƒ›áƒ˜áƒ¡ შესáƒáƒ®áƒ”ბ ვერ შევáƒáƒ¢áƒ§áƒáƒ‘ინეთ. "
+"áƒáƒ›áƒ˜áƒ¡ მიზეზს ძირითáƒáƒ“áƒáƒ“ წáƒáƒ áƒ›áƒáƒáƒ“გენს ის, რáƒáƒ› დისკი ჯერ კიდევ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებáƒ. მეტი "
+"ცვლილების შეტáƒáƒœáƒáƒ›áƒ“ე გირჩევთ, გáƒáƒ“áƒáƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ— კáƒáƒ›áƒžáƒ˜áƒ£áƒ¢áƒ”რი."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜áƒ¡ დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒáƒ›áƒ“ე ქáƒáƒœáƒ შეუძლებელიáƒ! (დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜=%jd სიგრძე=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "სექტáƒáƒ áƒ”ბის (%ld-%ld) ჩáƒáƒ¬áƒ”რის მცდელáƒáƒ‘რდáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡(%s) გáƒáƒ áƒ”თ."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "ცუდი ბლáƒáƒ™áƒ”ბის áƒáƒ áƒ¡áƒ”ბáƒáƒ‘áƒáƒ–ე შემáƒáƒ¬áƒ›áƒ”ბáƒ"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: დისკის უცნáƒáƒ‘ი ჭდე"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Libparted-ს %s-ზე ჩáƒáƒ¬áƒ”რის მხáƒáƒ áƒ“áƒáƒ­áƒ áƒ áƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ. შეიძლებრáƒáƒ’ებულირრáƒáƒ’áƒáƒ áƒª "
+"მხáƒáƒšáƒáƒ“-წáƒáƒ¡áƒáƒ™áƒ˜áƒ—ხáƒáƒ“."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ %d-ირ%s, მáƒáƒ’რáƒáƒ› ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრ%s-áƒ."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "დისკის უცნáƒáƒ‘ი áƒáƒšáƒáƒ›áƒ˜. %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s დისკის ჭდეს áƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის მხáƒáƒ áƒ“áƒáƒ­áƒ”რáƒ."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%s დისკის ჭდეს áƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დრლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის მხáƒáƒ áƒ“áƒáƒ­áƒ”რáƒ."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "მეტისმეტáƒáƒ“ ბევრი ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"%s-ზე ლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბრგáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ის გáƒáƒ áƒ”შე "
+"შეუძლებელიáƒ."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%s-ზე ერთზე მეტი გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ áƒáƒ áƒ¡áƒ”ბáƒáƒ‘რშეუძლებელიáƒ."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ გáƒáƒ áƒ”თ ლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ქáƒáƒœáƒ შეუძლებელიáƒ."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s-ზე გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ გáƒáƒ áƒ”თ ლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ ვერ გექნებáƒáƒ—."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შიგნით ვერ გექნებáƒáƒ—."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ დისკის გáƒáƒ áƒ”თ ვერ იáƒáƒ áƒ¡áƒ”ბებს!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "გáƒáƒ“áƒáƒ¤áƒáƒ áƒ•áƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის áƒáƒ áƒ¡áƒ”ბáƒáƒ‘რშეუძლებელიáƒ."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "მეტáƒáƒ›áƒáƒœáƒáƒªáƒ”მები"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒšáƒ˜"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული თვისებები"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "ლáƒáƒ’იკური"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "ძირითáƒáƒ“ი"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ“ი"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "სვáƒáƒžáƒ˜"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "დáƒáƒ›áƒáƒšáƒ£áƒšáƒ˜"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ უცნáƒáƒ‘ი áƒáƒšáƒáƒ›áƒ˜, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "შეტყáƒáƒ‘ინებáƒ"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "შეცდáƒáƒ›áƒ"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "ფáƒáƒ¢áƒáƒšáƒ£áƒ áƒ˜"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "შეცდáƒáƒ›áƒ"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "იმპლემენტáƒáƒªáƒ˜áƒ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "გáƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "დიáƒáƒ®"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "áƒáƒ áƒ"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "დიáƒáƒ®"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "თáƒáƒ•áƒ˜áƒ“áƒáƒœ ცდáƒ"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "იგნáƒáƒ áƒ˜"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "AIX-ის დისკის ჭდის წáƒáƒ™áƒ˜áƒ—ხვის იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "AIX-ის დისკის ჭდის ჩáƒáƒ¬áƒ”რის იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"AIX-ის დისკის ჭდეზე დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის დáƒáƒ›áƒáƒ¢áƒ”ბის იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"AIX-ის დისკის ჭდეზე დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნის იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"AIX-ის დისკის ჭდეზე დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სისტემის ტიპის დáƒáƒ§áƒ”ნების იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  "
+"áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"AIX-ის დისკის ჭდეზე შექმნილ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ–ე áƒáƒšáƒ›áƒ”ბის დáƒáƒ§áƒ”ნების იმპლემენტáƒáƒªáƒ˜áƒ ჯერ áƒáƒ  "
+"áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Atari-ის დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის რუკის გáƒáƒ›áƒáƒ§áƒ”ნებრდისკებზე, რáƒáƒ›áƒšáƒ˜áƒ¡ სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒáƒª %d "
+"ბáƒáƒ˜áƒ¢áƒ˜áƒ¡ ტáƒáƒšáƒ˜ áƒáƒ áƒáƒ, შეუძლებელიáƒ."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Atari-ის დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის რუკის გáƒáƒ›áƒáƒ§áƒ”ნებრდისკებზე რáƒáƒ›áƒšáƒ˜áƒ¡ სექტáƒáƒ áƒ”ბიც %d-ზე "
+"მეტიáƒ, შეუძლებელიáƒ."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"ნáƒáƒžáƒáƒ•áƒœáƒ˜áƒ Atari-ის მეტისმეტáƒáƒ“ ბევრი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜. შეიძლებრXGM-ის ბმულ სიáƒáƒ¨áƒ˜ "
+"მáƒáƒ áƒ§áƒ£áƒŸáƒ˜áƒ. პრáƒáƒ’რáƒáƒ›áƒ áƒáƒ›áƒ—áƒáƒ•áƒ áƒ”ბს მუშáƒáƒáƒ‘áƒáƒ¡."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "სექტáƒáƒ áƒ˜áƒ¡(%lli) ARS-ში მáƒáƒœáƒáƒªáƒ”მების დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ ნáƒáƒžáƒáƒ•áƒœáƒ˜ áƒáƒ áƒáƒ."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "სექტáƒáƒ áƒ¨áƒ˜ %lli ლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ (%d) ARS-ის შესáƒáƒœáƒáƒ®áƒ˜ áƒáƒ“გილი რ დáƒáƒ áƒ©áƒ."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "სექტáƒáƒ áƒ¨áƒ˜ %lli ARS-ის შესáƒáƒœáƒáƒ®áƒ˜ áƒáƒ“გილი áƒáƒ  დáƒáƒ áƒ©áƒ."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "სექტáƒáƒ áƒ¨áƒ˜ %lli BSL-ის შესáƒáƒœáƒáƒ®áƒ˜ áƒáƒ“გილი áƒáƒ  დáƒáƒ áƒ©áƒ."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "ცხრილების შევსების შემდეგ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბი ჯერ კიდევ დáƒáƒ áƒ©áƒ”ნილიáƒ."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ყველრშეზღუდვის დáƒáƒ™áƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒšáƒ”ბის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ნáƒáƒ›áƒ áƒ˜áƒ¡ გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ შეუძლებელიáƒ."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "BSD-ის დისკის ჭდის გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ შეუძლებელიáƒ."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "DASD დისკის ჭდის გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ შეუძლებელიáƒ"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "%s-ზე áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ცხრილირ-- áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ხელმáƒáƒ¬áƒ”რრ(%x)."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ცხრილი - %s-ზე áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს რეკურსიული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted-ს áƒáƒ  შეუძლირWindows Dynamic Disk-ით მáƒáƒ áƒ—ული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ზáƒáƒ›áƒ˜áƒ¡ შეცვლáƒ."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "მეტი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შექმნრშეუძლებელიáƒ"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s-ს გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბი áƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ (ტáƒáƒ›áƒ˜áƒ¡ თáƒáƒ•áƒ¡áƒáƒ áƒ—ის დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"სáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ რიცხვი áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜áƒ, რáƒáƒª ნიშნáƒáƒ•áƒ¡, რáƒáƒ› დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ცხრილი "
+"დáƒáƒ–იáƒáƒœáƒ”ბულიáƒ."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Root დáƒáƒœáƒáƒ§áƒáƒ¤áƒáƒ“ მხáƒáƒšáƒáƒ“ ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ შეგიძლიáƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒáƒ—."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "სვáƒáƒžáƒ˜áƒ¡ დáƒáƒœáƒáƒ§áƒáƒ¤áƒáƒ“ მხáƒáƒšáƒáƒ“ ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ შეგიძლიáƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒáƒ—."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ ფáƒáƒ˜áƒšáƒ˜ მხáƒáƒšáƒáƒ“ ლáƒáƒ’იკური დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ შეიძლებრიყáƒáƒ¡."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"dvh დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სáƒáƒ®áƒ”ლის %s-ზე დáƒáƒ§áƒ”ნების შეცდáƒáƒ›áƒ:\n"
+"სáƒáƒ®áƒ”ლები მხáƒáƒšáƒáƒ“ ლáƒáƒ’იკურ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბს (ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ• ფáƒáƒ˜áƒšáƒ”ბს) áƒáƒ¥áƒ•áƒ—."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "მეტისმეტáƒáƒ“ ბევრი ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "ძიების შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl()-ის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API-ის ვერსირáƒáƒ  ემთხვევáƒ"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "დისკის მხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელი ტიპი"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "დისკის მხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელი ფáƒáƒ áƒ›áƒáƒ¢áƒ˜"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "დისკი გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებáƒ"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜áƒ¡ სინტáƒáƒ¥áƒ¡áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "სáƒáƒªáƒáƒ•áƒ˜áƒ¡ ჭდე დáƒáƒ–იáƒáƒœáƒ”ბულიáƒ"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "მáƒáƒœáƒáƒªáƒ”მების ნáƒáƒ™áƒ áƒ”ბის სáƒáƒ®áƒ”ლი დáƒáƒ–იáƒáƒœáƒ”ბულიáƒ"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "მეხსიერების გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის შემáƒáƒ¬áƒ›áƒ”ბის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "მითითებული მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რáƒáƒ  წáƒáƒ áƒ›áƒáƒáƒ“გენს DASD სáƒáƒªáƒáƒ•áƒ¡"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე VOLSER ნáƒáƒžáƒáƒ•áƒœáƒ˜ áƒáƒ áƒáƒ"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "ფáƒáƒ¢áƒáƒšáƒ£áƒ áƒ˜ შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "სáƒáƒªáƒáƒ•áƒ˜áƒ¡ ჭდისთვის áƒáƒ“გილი áƒáƒ áƒáƒ."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის áƒáƒ“გილი áƒáƒ áƒáƒ."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ VTOC-ი."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "API-ის ვერსიის მიღებრშეუძლებელიáƒ."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"API-ის მიმდინáƒáƒ áƒ” ვერსირ(%d) áƒáƒ  ემთხვევრDASD-ის დრáƒáƒ˜áƒ•áƒ”რის API-ის ვერსიáƒáƒ¡ "
+"(%d)!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "დისკის ზáƒáƒ›áƒ˜áƒ¡ მიღების შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "დისკის გეáƒáƒ›áƒ”ტრიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ მიღების შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "ბლáƒáƒ™áƒ˜áƒ¡ ზáƒáƒ›áƒ˜áƒ¡ შესáƒáƒ®áƒ”ბ ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ მიღების შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "დისკის გეáƒáƒ›áƒ”ტრირáƒáƒ  ემთხვევრDASD-ის 3390-ე ტიპს."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რGPT-ისთვის მეტისმეტáƒáƒ“ პáƒáƒ¢áƒáƒ áƒáƒ"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ძირითáƒáƒ“ი ცხრილის CRC-ის მნიშვნელáƒáƒ‘რáƒáƒ  ემთხვევáƒ"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სáƒáƒ®áƒ”ლის თáƒáƒ áƒ’მნის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Mac-ის დისკის ჭდეების áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ხელმáƒáƒ¬áƒ”რáƒ: %x."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის რუკáƒáƒ¡ სáƒáƒªáƒœáƒáƒ‘ი ნიშáƒáƒœáƒ˜ áƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s Mac-ის დისკის ჭდის დáƒáƒ¡áƒáƒ“ებáƒáƒ“ მეტისმეტáƒáƒ“ პáƒáƒ¢áƒáƒ áƒáƒ!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ (%d) áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ხელმáƒáƒ¬áƒ”რრ(%x)."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ¡ (%d) áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜, ნულáƒáƒ•áƒáƒœáƒ˜ ზáƒáƒ›áƒ გáƒáƒáƒ©áƒœáƒ˜áƒ!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "მáƒáƒœáƒáƒªáƒ”მების რეგიáƒáƒœáƒ˜ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ—áƒáƒœ áƒáƒ  იწყებáƒ."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ რეგიáƒáƒœáƒ˜ მთელ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ¡ áƒáƒ  მáƒáƒ˜áƒªáƒáƒ•áƒ¡."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ მáƒáƒœáƒáƒªáƒ”მების რეგიáƒáƒœáƒ˜ მთელ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ¡ áƒáƒ  მáƒáƒ˜áƒªáƒáƒ•áƒ¡."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის დესკრიპტáƒáƒ áƒ¨áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის ბლáƒáƒ™áƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ზáƒáƒ›áƒ. %d 512-ზე áƒáƒ  "
+"იყáƒáƒ¤áƒ."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის სწáƒáƒ áƒ˜ რუკრნáƒáƒžáƒáƒ•áƒœáƒ˜ áƒáƒ áƒáƒ."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "უცნáƒáƒ£áƒ áƒ˜áƒ! დისკზე დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის 2 რუკრáƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"მეტი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბრშეუძლებელირ-- დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის რუკრძáƒáƒšáƒ˜áƒáƒœ პáƒáƒ¢áƒáƒ áƒáƒ!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ჭდე (%s)."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "მეტი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბრშეუძლებელიáƒ."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : ბლáƒáƒ™áƒ–ე (%llu) áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ ჯáƒáƒ›áƒ˜ (ტიპი: %s)."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : rdb ბლáƒáƒ™áƒ˜áƒ¡ მáƒáƒ«áƒ”ბნრშეუძლებელიáƒ. ეს áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡ უნდრხდებáƒáƒ“ეს."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : ბლáƒáƒ™ %d-სთáƒáƒœ ნáƒáƒžáƒáƒ•áƒœáƒ˜áƒ მáƒáƒ áƒ§áƒ£áƒŸáƒ˜."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : ცუდი ბლáƒáƒ™áƒ”ბის სიის პრáƒáƒ‘ლემáƒ."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ბლáƒáƒ™áƒ”ბის სიის პრáƒáƒ‘ლემáƒ."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის ბლáƒáƒ™áƒ”ბის სიის პრáƒáƒ‘ლემáƒ."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ ბლáƒáƒ™áƒ”ბის სიის პრáƒáƒ‘ლემáƒ."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "%d-ში დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ბლáƒáƒ™áƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რრშეუძლებელიáƒ."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "ნáƒáƒžáƒáƒ•áƒœáƒ˜áƒ Sun-ის დისკის დáƒáƒ–იáƒáƒœáƒ”ბული ჭდე."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"დისკის CHS გეáƒáƒ›áƒ”ტრიáƒ(%d,%d,%d), რáƒáƒ›áƒ”ლიც მáƒáƒ’ვეწáƒáƒ“რáƒáƒžáƒ”რáƒáƒªáƒ˜áƒ£áƒšáƒ˜ სისტემიდáƒáƒœ, áƒáƒ  "
+"ემთხვევრდისკის ჭდეში დáƒáƒ›áƒáƒ®áƒ¡áƒáƒ•áƒ áƒ”ბულ გეáƒáƒ›áƒ”ტრიáƒáƒ¡ (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "დისკის ჭდე áƒáƒ¦áƒ¬áƒ”რს დისკს დიდს, ვიდრე %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "დისკს áƒáƒ¥áƒ•áƒ¡ %d ცილინდრი, რáƒáƒª მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ  მნიშვნელáƒáƒ‘áƒáƒ–ე (65536) მეტიáƒ."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun-ის დისკის ჭდე სáƒáƒ•áƒ¡áƒ”áƒ."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ¨áƒ˜ დáƒáƒ«áƒ”ბნის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘იდáƒáƒœ წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "სáƒáƒªáƒáƒ•áƒ˜áƒ¡ ჭდის წáƒáƒ™áƒ˜áƒ—ხვრშეუძლებელიáƒ."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "სáƒáƒªáƒáƒ•áƒ˜áƒ¡ ჭდის დáƒáƒ§áƒ”ნებრშეუძლებელიáƒ."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "VTOC-ის ჭდის წáƒáƒ™áƒ˜áƒ—ხვრშეუძლებელიáƒ."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB-ის წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB-ის წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB-ის წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB-ის წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "VTOC-ის ჭდის ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB-ზე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB-ზე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB-ზე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB-ზე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT9 DSCB-ზე ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "áƒáƒ áƒáƒ¡áƒáƒ™áƒ›áƒáƒ áƒ˜áƒ¡áƒ˜ მეხსიერებáƒ."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"სპეციáƒáƒšáƒ£áƒ áƒ˜ ერთეულისთვის \"კáƒáƒ›áƒžáƒáƒ¥áƒ¢áƒ£áƒ áƒ˜\" ერთეულის ზáƒáƒ›áƒ˜áƒ¡ გáƒáƒœáƒ¡áƒáƒ–ღვრის შეცდáƒáƒ›áƒ."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "%s-ს თქვენი ლáƒáƒ™áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სინტáƒáƒ¥áƒ¡áƒ˜ გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "თáƒáƒ•áƒáƒ™áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘ის მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ  მნიშვნელáƒáƒ‘áƒáƒ %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "სექტáƒáƒ áƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘ის მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜ მნიშვნელáƒáƒ‘áƒáƒ %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "მდებáƒáƒ áƒ”áƒáƒ‘რ%s მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის (%s) გáƒáƒ áƒ”თáƒáƒ."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რიცხვი."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "< 1 მნიშვნელáƒáƒ‘ის მáƒáƒ’იერ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ უფრრმცირე ერთეული"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ბლáƒáƒ™áƒ˜áƒ¡ გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : ბლáƒáƒ™áƒ˜áƒ¡ გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒáƒ“ი ბლáƒáƒ™áƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვრშეუძლებელირ(%llu)\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : root- ბლáƒáƒ™áƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვის შეუძლებელირ(%llu)\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : სიის ელემენტისთვის id-ის გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : ბლáƒáƒ™áƒ˜áƒ¡ წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : %llu ბლáƒáƒ™áƒ˜áƒ¡ %s ტიპის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ ჯáƒáƒ›áƒ˜\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : ბლáƒáƒ™áƒ˜áƒ¡ (%d) ჩáƒáƒ¬áƒ”რრშეუძლებელიáƒ\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : disk_specific rdb-ის ტიპის ბლáƒáƒ™áƒ˜áƒ¡ გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შეცდáƒáƒ›áƒ\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : rdb ბლáƒáƒ™áƒ˜áƒ¡ მáƒáƒ«áƒ”ბნრშეუძლებელიáƒ. ეს áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡ უნდრხდებáƒáƒ“ეს\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ბლáƒáƒ™áƒ˜áƒ¡ (%llu) წáƒáƒ™áƒ˜áƒ—ხვის შეცდáƒáƒ›áƒ\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted-ის áƒáƒ’ებისáƒáƒ¡ დáƒáƒ¨áƒ•áƒ”ბულირშეცდáƒáƒ›áƒ. FAT-ის ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒ "
+"512 ბáƒáƒ˜áƒ¢áƒ˜ უნდრიყáƒáƒ¡. FAT-ის მხáƒáƒ áƒ“áƒáƒ­áƒ”რრგáƒáƒ—იშულიáƒ."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ FAT-ისთვის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ხელწერრგáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ FAT-ისთვის სექტáƒáƒ áƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ზáƒáƒ›áƒ გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ FAT-ისთვის კლáƒáƒ¡áƒ¢áƒ”რის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ზáƒáƒ›áƒ გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ FAT-ისთვის დáƒáƒ áƒ”ზერვებულირსექტáƒáƒ áƒ”ბის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რáƒáƒáƒ“ენáƒáƒ‘რ"
+"გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რáƒáƒáƒ“ენáƒáƒ‘ის FAT-ები áƒáƒ¥áƒ•áƒ¡."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT-ის ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ სექტáƒáƒ áƒ˜ იძáƒáƒ®áƒ˜áƒ¡, რáƒáƒ› ლáƒáƒ’იკური სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒ 0-ის ტáƒáƒšáƒ˜áƒ. "
+"ეს უცნáƒáƒ£áƒ áƒ˜áƒ. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"FAT-ის ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ სექტáƒáƒ áƒ˜ იძáƒáƒ®áƒ˜áƒ¡, რáƒáƒ› FAT ცხრილები áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს. ეს "
+"უცნáƒáƒ£áƒ áƒ˜áƒ. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"FAT-ის ჩáƒáƒ›áƒ¢áƒ•áƒ˜áƒ áƒ—áƒáƒ•áƒ˜ სექტáƒáƒ áƒ˜ იძáƒáƒ®áƒ˜áƒ¡, რáƒáƒ› კლáƒáƒ¡áƒ¢áƒ”რში 0 სექტáƒáƒ áƒ˜áƒ. ეს უცნáƒáƒ£áƒ áƒ˜áƒ. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრFAT12-იáƒ, რáƒáƒ›áƒšáƒ˜áƒ¡ მხáƒáƒ áƒ“áƒáƒ­áƒ”რáƒáƒª áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "ლინუქსის სვáƒáƒžáƒ˜áƒ¡ ძველი ხელმáƒáƒ¬áƒ”რის უცნáƒáƒ‘ი სტილი '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "ლინუქსის სვáƒáƒžáƒ˜áƒ¡ áƒáƒ®áƒáƒšáƒ˜ ხელმáƒáƒ¬áƒ”რის უცნáƒáƒ‘ი სტილი '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "ლინუქსის სვáƒáƒžáƒ˜áƒ¡ swsusp-ის უცნáƒáƒ‘ი ხელმáƒáƒ¬áƒ”რრ'%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s %dკ-áƒ, მáƒáƒ’რáƒáƒ› გáƒáƒáƒ©áƒœáƒ˜áƒ %d კლáƒáƒ¡áƒ¢áƒ”რი (%dკ)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ %s ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემისáƒáƒ—ვის ძáƒáƒšáƒ˜áƒáƒœ დიდი áƒáƒœ პáƒáƒ¢áƒáƒ áƒáƒ."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "FAT-ის áƒáƒ› ტიპის კáƒáƒœáƒ¤áƒ˜áƒ’ურáƒáƒªáƒ˜áƒ ხელმიუწვდáƒáƒ›áƒ”ლიáƒ."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრპáƒáƒ¡áƒ£áƒ®áƒáƒ‘ს თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒš სივრცეს, რáƒáƒ’áƒáƒ áƒª %d კლáƒáƒ¡áƒ¢áƒ”რს, áƒáƒ áƒ %d "
+"კლáƒáƒ¡áƒ¢áƒ”რს."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Root სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ეში ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "თუ დáƒáƒ¢áƒáƒ•áƒ”ბთ ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡, რáƒáƒ’áƒáƒ áƒª FAT16-ს, პრáƒáƒ‘ლემები áƒáƒ  გექნებáƒáƒ—."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"თუ დáƒáƒ¢áƒáƒ•áƒ”ბთ ფáƒáƒ˜áƒšáƒ£áƒ  სისტემáƒáƒ¡, რáƒáƒ’áƒáƒ áƒª FAT32-ს, áƒáƒ®áƒáƒš პრáƒáƒ‘ლემებს áƒáƒ  დáƒáƒ˜áƒ›áƒáƒ¢áƒ”ბთ."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "გნებáƒáƒ•áƒ— გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნáƒáƒ— FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის მითითებულ ზáƒáƒ›áƒáƒ–ე დáƒáƒ§áƒ”ნებრმხáƒáƒšáƒáƒ“ მისი FAT16-ში გáƒáƒ áƒ“áƒáƒ¥áƒ›áƒœáƒ˜áƒ¡ "
+"შემდეგáƒáƒ შესáƒáƒ«áƒšáƒ”ბელი."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის მითითებულ ზáƒáƒ›áƒáƒ–ე დáƒáƒ§áƒ”ნებრმხáƒáƒšáƒáƒ“ მისი FAT32-ში გáƒáƒ áƒ“áƒáƒ¥áƒ›áƒœáƒ˜áƒ¡ "
+"შემდეგáƒáƒ შესáƒáƒ«áƒšáƒ”ბელი."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted-ს áƒáƒ› ზáƒáƒ›áƒ˜áƒ¡ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ზáƒáƒ›áƒ˜áƒ¡ შეცვლრáƒáƒ  შეუძლიáƒ. ჩვენ ვმუშáƒáƒáƒ‘თ "
+"áƒáƒ›áƒáƒ–ე!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: კლáƒáƒ¡áƒ¢áƒ”რი (%ld) ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის გáƒáƒ áƒ”თáƒáƒ"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: კლáƒáƒ¡áƒ¢áƒ”რი (%ld) ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის გáƒáƒ áƒ”თáƒáƒ"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒšáƒ˜ კლáƒáƒ¡áƒ¢áƒ”რების გáƒáƒ áƒ”შე"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის გáƒáƒ›áƒáƒªáƒœáƒáƒ‘ის შეცდáƒáƒ›áƒ."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "áƒáƒ› ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის (%s) ზáƒáƒ›áƒ˜áƒ¡ შეცვლრმხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელიáƒ"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრტáƒáƒ›áƒ–ე დიდიáƒ!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემრშეცდáƒáƒ›áƒ”ბს შეიცáƒáƒ•áƒ¡."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "ცუდი ბლáƒáƒ™áƒ”ბის წáƒáƒ™áƒ˜áƒ—ხვრშეუძლებელიáƒ."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "HFS-ის ზáƒáƒ›áƒ˜áƒ¡ áƒáƒ¡áƒ” შეცვლრჯერ შეუძლებელიáƒ."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "დáƒáƒžáƒáƒ¢áƒáƒ áƒáƒ•áƒ”ბáƒ"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "მáƒáƒœáƒáƒªáƒ”მების გáƒáƒ“áƒáƒáƒ“გილების შეცდáƒáƒ›áƒ."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "მáƒáƒœáƒáƒªáƒ”მების გáƒáƒ“áƒáƒáƒ“გილებáƒáƒ› ტáƒáƒ›áƒ˜áƒ¡ ბáƒáƒšáƒáƒ¨áƒ˜ მáƒáƒœáƒáƒªáƒ”მები მáƒáƒ˜áƒœáƒª დáƒáƒ¢áƒáƒ•áƒ."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "hfs-ის მთáƒáƒ•áƒáƒ áƒ˜ სáƒáƒ¥áƒáƒ¦áƒáƒšáƒ“ის ბლáƒáƒ™áƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რáƒ"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "HFS+ის ვერსირმხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელიáƒ: %d."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "HFSX-ის ვერსირმხáƒáƒ áƒ“áƒáƒ£áƒ­áƒ”რელიáƒ: %d."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "გáƒáƒ›áƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¬áƒ”რის შეცდáƒáƒ›áƒ."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "hfs+-ის ტáƒáƒ›áƒ˜áƒ¡ თáƒáƒ•áƒ¡áƒáƒ áƒ—ის ჩáƒáƒ¬áƒ”რáƒ"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "ბლáƒáƒ™áƒ”ბის სიის გáƒáƒ¤áƒ£áƒ­áƒ”ბული სáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ ჯáƒáƒ›áƒ˜."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "ჟურნáƒáƒšáƒ˜áƒ¡ თáƒáƒ•áƒ¡áƒáƒ áƒ—ის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ მáƒáƒ’იური მნიშვნელáƒáƒ‘ები."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "მის სáƒáƒ˜áƒœáƒ¤áƒáƒ áƒ›áƒáƒªáƒ˜áƒ ბლáƒáƒ™áƒ¡áƒ დრთáƒáƒ•áƒ¡áƒáƒ áƒ—ში ჟურნáƒáƒšáƒ˜áƒ¡ ზáƒáƒ›áƒ სხვáƒáƒ“áƒáƒ¡áƒ®áƒ•áƒáƒ."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "თáƒáƒ•áƒ¡áƒáƒ áƒ—ის ზáƒáƒ’იერთი ველი სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒ˜áƒ¡ ნáƒáƒ›áƒ áƒáƒ•áƒšáƒ˜ áƒáƒ áƒáƒ."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ჟურნáƒáƒšáƒ˜áƒ¡ áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ სáƒáƒ™áƒáƒœáƒ¢áƒ áƒáƒšáƒ რიცხვი."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის მეხსიერებáƒáƒ¨áƒ˜ დáƒáƒ¥áƒ”შვრშეუძლებელიáƒ."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "ცუდი ბლáƒáƒ™áƒ”ბის სიის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვის შეცდáƒáƒ›áƒ."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბის áƒáƒ› შეტყáƒáƒ‘ინების ჩვენებáƒ"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "ყველრბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის გáƒáƒœáƒšáƒáƒ’ების ჩვენებáƒ"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "მáƒáƒœáƒ¥áƒáƒœáƒ˜áƒ¡áƒáƒ—ვის დáƒáƒ›áƒ£áƒ¨áƒáƒ•áƒ”ბáƒáƒ“ი სáƒáƒ®áƒ˜áƒ— გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "json-ის გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡ ითხáƒáƒ•áƒ¡ მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის ჩáƒáƒ áƒ”ვáƒáƒ¡"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "სკრიპტულ რეჟიმში გáƒáƒ£áƒ¥áƒ›áƒ”ბის მáƒáƒ’იერ შეგიძლიáƒáƒ— ჩáƒáƒáƒ¡áƒ¬áƒáƒ áƒáƒ— ქმედებáƒ"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "ვერსიის ჩვენებáƒ"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის სწáƒáƒ áƒ”ბáƒ"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"რიცხვი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ნáƒáƒ›áƒ”რს წáƒáƒ áƒ›áƒáƒáƒ“გენს, რáƒáƒ›áƒ”ლიც ლინუქსში გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებáƒ. MS-DOS-ში "
+"ძირითáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ნáƒáƒ›áƒ áƒ”ბირ1-4, ლáƒáƒ’იკურების კი 5 დრზემáƒáƒ—.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "ჭდის-ტიპი შეიძლებრიყáƒáƒ¡: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "áƒáƒšáƒáƒ›áƒ˜ შეიძლებრიყáƒáƒ¡: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ერთეული შეიძლებრიყáƒáƒ¡: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "სáƒáƒ¡áƒ£áƒ áƒ•áƒ”ლი გáƒáƒœáƒšáƒáƒ’ებáƒ: მინიმáƒáƒšáƒ£áƒ áƒ˜ áƒáƒœ áƒáƒžáƒ¢áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡-ტიპი შეიძლებრიყáƒáƒ¡: ძირითáƒáƒ“ი, ლáƒáƒ’იკური áƒáƒœ გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის ტიპი შეიძლებრიყáƒáƒ¡: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ დრდáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜ დისკის მდებáƒáƒ áƒ”áƒáƒ‘ებიáƒ, მáƒáƒ’: 4GB áƒáƒœ 10%. უáƒáƒ áƒ§áƒáƒ¤áƒ˜áƒ—ი "
+"მნიშვნელáƒáƒ‘ები დისკის ბáƒáƒšáƒáƒ“áƒáƒœ ითვლებáƒ. მáƒáƒ’: -1s ნიშნáƒáƒ•áƒ¡ ზუსტáƒáƒ“ ბáƒáƒšáƒ "
+"სექტáƒáƒ áƒ¡.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜ დისკის მდებáƒáƒ áƒ”áƒáƒ‘áƒáƒ, მáƒáƒ’: 4GB áƒáƒœ 10%. უáƒáƒ áƒ§áƒáƒ¤áƒ˜áƒ—ი მნიშვნელáƒáƒ‘ები "
+"დისკის ბáƒáƒšáƒáƒ“áƒáƒœ ითვლებáƒ. მáƒáƒ’: -1s ნიშნáƒáƒ•áƒ¡ ზუსტáƒáƒ“ ბáƒáƒšáƒ სექტáƒáƒ áƒ¡.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘რშეიძლებრიყáƒáƒ¡: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რჩვეულებრივ /dev/hda áƒáƒœ /dev/sda-áƒ\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "სáƒáƒ®áƒ”ლი თქვენის სáƒáƒ¡áƒ£áƒ áƒ•áƒ”ლი ნებისმიერი სიტყვáƒáƒ\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(დáƒáƒ áƒ©áƒ”ნილი დრრ%.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"áƒáƒ›áƒŸáƒáƒ›áƒáƒ“ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ (%s) გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებáƒ. დáƒáƒ áƒ¬áƒ›áƒ£áƒœáƒ”ბული ბრძáƒáƒœáƒ“ებით, რáƒáƒ› გნებáƒáƒ•áƒ—, "
+"გáƒáƒáƒ’რძელáƒáƒ—?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "%s-ზე მდებáƒáƒ áƒ” დáƒáƒœáƒáƒ§áƒáƒ¤(ებ)-ი áƒáƒ›áƒŸáƒáƒ›áƒáƒ“ გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნებáƒ."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"დისკის (%s) დáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ áƒáƒ áƒ¡áƒ”ბული ჭდე წáƒáƒ˜áƒ¨áƒšáƒ”ბრდრზედ áƒáƒ áƒ¡áƒ”ბული მáƒáƒœáƒáƒªáƒ”მები "
+"დáƒáƒ˜áƒ™áƒáƒ áƒ’ებáƒ. გნებáƒáƒ•áƒ— გáƒáƒáƒ’რძელáƒáƒ—?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ დისკის ჭდის ტიპი?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ტიპი?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სáƒáƒ®áƒ”ლი?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის სáƒáƒ®áƒ”ლი?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"áƒáƒ¡áƒ” ჯერ კიდევ მáƒáƒ’წáƒáƒœáƒ—?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "შედეგáƒáƒ“ მიღებული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ წáƒáƒ áƒ›áƒáƒ“áƒáƒ‘ისთვის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒáƒ“áƒáƒ სწáƒáƒ áƒ”ბული: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "უცნáƒáƒ‘ი (malloc-ის შეცდáƒáƒ›áƒ)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s დისკის ჭდეებს დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სáƒáƒ®áƒ”ლის მხáƒáƒ áƒ“áƒáƒ­áƒ”რრáƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ნáƒáƒ›áƒ”რი?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s დისკის ჭდეებს დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ სáƒáƒ®áƒ”ლის მხáƒáƒ áƒ“áƒáƒ­áƒ”რრáƒáƒ  გáƒáƒáƒ©áƒœáƒ˜áƒ."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ტიპი?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რიცხვი."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ტიპი?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რიცხვი."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS-ის ცილინდრებით/თáƒáƒ•áƒáƒ™áƒ”ბით/სექტáƒáƒ áƒ”ბით áƒáƒ¦áƒ¬áƒ”რილი გეáƒáƒ›áƒ”ტრიáƒ: %d, %d, %d. "
+"თითáƒáƒ”ული ცილინდრი %s-იáƒ.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "მáƒáƒ“ელი: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "დისკი %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "სექტáƒáƒ áƒ˜áƒ¡ ზáƒáƒ›áƒ (ლáƒáƒ’იკური/ფიზიკური): %lldბ/%lldბ\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ცხრილი: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "დისკის áƒáƒšáƒ›áƒ”ბი: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "რიცხვი"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "დáƒáƒ¬áƒ§áƒ”ბáƒ"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "ზáƒáƒ›áƒ"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "ტიპი"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემáƒ"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "სáƒáƒ®áƒ”ლი"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "áƒáƒšáƒ›áƒ”ბი"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "თáƒáƒ•áƒ˜áƒ¡áƒ£áƒ¤áƒáƒšáƒ˜ áƒáƒ“გილი"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"%s %s დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ ნáƒáƒžáƒáƒ•áƒœáƒ˜áƒ %s ->%s -ზე. გნებáƒáƒ•áƒ— მისი დáƒáƒ›áƒáƒ¢áƒ”ბრდáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის "
+"ცხრილში?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემების ძებნáƒ"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "ბრძáƒáƒœáƒ”ბრresize áƒáƒ›áƒáƒ¦áƒ”ბულირparted 3.0-დáƒáƒœ დრზემáƒáƒ—"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ დáƒáƒžáƒáƒ¢áƒáƒ áƒáƒ•áƒ”ბáƒáƒ› შეიძლებრმáƒáƒœáƒáƒªáƒ”მების კáƒáƒ áƒ’ვრგáƒáƒ›áƒáƒ˜áƒ¬áƒ•áƒ˜áƒáƒ¡. მáƒáƒ˜áƒœáƒª "
+"გáƒáƒáƒ’რძელებთ?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "სწáƒáƒ áƒ”ბის ტიპი (მინ/áƒáƒžáƒ¢)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d გáƒáƒ¡áƒ¬áƒáƒ áƒ”ბულიáƒ\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d გáƒáƒ¡áƒ¬áƒáƒ áƒ”ბული áƒáƒ áƒáƒ: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "შესáƒáƒ‘რუნებელი áƒáƒšáƒáƒ›áƒ˜?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "áƒáƒ®áƒáƒšáƒ˜ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘áƒ?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "ერთეული?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check ტიპი N დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ N შემáƒáƒ¬áƒ›áƒ”ბრტიპის(min|"
+"opt) სწáƒáƒ áƒ”ბáƒáƒ–ე"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "დáƒáƒ®áƒ›áƒáƒ áƒ”ბáƒ"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [ბრძáƒáƒœáƒ”ბáƒ] ზáƒáƒ’áƒáƒ“ი áƒáƒœ მითითებული ბრძáƒáƒœáƒ”ბის "
+"დáƒáƒ®áƒ›áƒáƒ áƒ”ბის გáƒáƒ›áƒáƒ¢áƒáƒœáƒ"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ჭდის-ტიპი დისკის áƒáƒ®áƒáƒšáƒ˜ ჭდის(დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის "
+"ცხრილის) შექმნáƒ"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart დáƒáƒœáƒáƒ§-ტიპი [ფს-ტიპი] დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შექმნáƒ"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name რიცხვი სáƒáƒ®áƒ”ლი რიცხვის ნáƒáƒ›áƒ áƒ˜áƒ¡ მქáƒáƒœáƒ” დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ "
+"სáƒáƒ®áƒ”ლის დáƒáƒ§áƒ”ნებáƒ"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბის ცხრილის, "
+"მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ების, áƒáƒ“გილის áƒáƒœ ყველრდáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ჩვენებáƒ"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices :áƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ˜ ბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ების სიáƒ\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free :მიმდინáƒáƒ áƒ” ბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის დáƒáƒ£áƒ§áƒáƒ¤áƒ”ლი áƒáƒ“გილის შესáƒáƒ®áƒ”ბ "
+"ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ჩვენებáƒ\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr " list, all : ყველრáƒáƒ¥áƒ¢áƒ˜áƒ£áƒ áƒ˜ ბლáƒáƒ™áƒ£áƒ áƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ჩვენებáƒ\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit პრáƒáƒ’რáƒáƒ›áƒ˜áƒ“áƒáƒœ გáƒáƒ¡áƒ•áƒšáƒ"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜ შესáƒáƒ‘áƒáƒ›áƒ˜áƒ¡áƒáƒ“ დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜áƒ¡áƒ "
+"დრდáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜áƒ¡ სიáƒáƒ®áƒšáƒáƒ•áƒ”ში მყáƒáƒ¤áƒ˜ დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ áƒáƒ¦áƒ›áƒáƒ©áƒ”ნრდრგáƒáƒ“áƒáƒ áƒ©áƒ”ნáƒ"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "ბრძáƒáƒœáƒ”ბრresize áƒáƒ›áƒáƒ¦áƒ”ბულირparted 3.0-დáƒáƒœ დრზემáƒáƒ—\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart რიცხვი დáƒáƒ¡áƒáƒ¡áƒ áƒ£áƒšáƒ˜ მითითებული ნáƒáƒ›áƒ áƒ˜áƒ¡ მქáƒáƒœáƒ” "
+"დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ზáƒáƒ›áƒ˜áƒ¡ შეცვლáƒ"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr ""
+"rm რიცხვი მითითებული ნáƒáƒ›áƒ áƒ˜áƒ¡ მქáƒáƒœáƒ” დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ "
+"წáƒáƒ¨áƒšáƒ"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რáƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ჩáƒáƒ¡áƒáƒ¡áƒ¬áƒáƒ áƒ”ბელი "
+"მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set áƒáƒšáƒáƒ›áƒ˜ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘რმáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘ის "
+"მითითებული áƒáƒšáƒ›áƒ˜áƒ¡ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘ის შეცვლáƒ"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [áƒáƒšáƒáƒ›áƒ˜] მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒš მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე მითითებული "
+"áƒáƒšáƒ›áƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ—ვáƒ"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set რიცხვი áƒáƒšáƒáƒ›áƒ˜ მდგáƒáƒ›áƒáƒ áƒ”áƒáƒ‘რმáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒš მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე "
+"მითითებული áƒáƒšáƒ›áƒ˜áƒ¡ შეცვლáƒ"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [რიცხვი [áƒáƒšáƒáƒ›áƒ˜]] მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒš მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე მითითებული "
+"áƒáƒšáƒ›áƒ˜áƒ¡ გáƒáƒ“áƒáƒ áƒ—ვáƒ"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit ერთეული ნáƒáƒ’ულისხმები ერთეულის დáƒáƒ§áƒ”ნებáƒ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version GNU Parted-ის ლიცენზიისრდრვერსიის "
+"ჩვენებáƒ"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: %s [-hlmsfv] [-a <align>] [მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რ[ბრძáƒáƒœáƒ”ბრ"
+"[პáƒáƒ áƒáƒ›áƒ”ტრები]] ..]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რნáƒáƒžáƒáƒ•áƒœáƒ˜ áƒáƒ áƒáƒ"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "გáƒáƒ¤áƒ áƒ—ხილებáƒ: გáƒáƒ“áƒáƒáƒ›áƒáƒ¬áƒ›áƒ”თ, გáƒáƒ¥áƒ•áƒ— თუ áƒáƒ áƒ root-ის წვდáƒáƒ›áƒ”ბი.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "შეიძლებრ/etc/fstab-ის გáƒáƒœáƒáƒ®áƒšáƒ”ბრდáƒáƒ’ჭირდეთ.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"მáƒáƒ’ესáƒáƒšáƒ›áƒ”ბით GNU Parted-ში! ბრძáƒáƒœáƒ”ბების სიის მისáƒáƒ¦áƒ”ბáƒáƒ“ áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ 'help'.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"გáƒáƒ›áƒáƒ§áƒ”ნებáƒ: parted [პáƒáƒ áƒáƒ›áƒ”ტრი] .. [მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘რ[ბრძáƒáƒœáƒ”ბრ"
+"[პáƒáƒ áƒáƒ›áƒ”ტრები]...]..]\n"
+"ბრძáƒáƒœáƒ”ბრმითითებული პáƒáƒ áƒáƒ›áƒ”ტრებით გáƒáƒ“áƒáƒ¢áƒáƒ áƒ“ებრმითითებულ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒáƒ–ე.\n"
+"თუ ბრძáƒáƒœáƒ”ბრმითითებული áƒáƒ áƒáƒ, parted-ი ინტერáƒáƒ¥áƒ¢áƒ˜áƒ£áƒ  რეჟიმში გáƒáƒ”შვებáƒ.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"ბრძáƒáƒœáƒ”ბების ისტáƒáƒ áƒ˜áƒ:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: SEGV_MAPERR (მისáƒáƒ›áƒáƒ áƒ—ი áƒáƒ‘იექტზე მიბმული áƒáƒ áƒáƒ)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: SEGV_ACCERR (მიბმული áƒáƒ‘იექტის áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ წვდáƒáƒ›áƒ”ბი)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: დáƒáƒ¤áƒ˜áƒ¥áƒ¡áƒ˜áƒ áƒ”ბულირSIGSEGV სიგნáƒáƒšáƒ˜.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_INTDIV (მთელი რიცხვები 0-ზე áƒáƒ  იყáƒáƒ¤áƒ)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_INTOVF (მთელი რიცხვების მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜ მნიშვნელáƒáƒ‘ის გáƒáƒ“áƒáƒªáƒ˜áƒšáƒ”ბáƒ)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTDIV (ნულზე გáƒáƒ§áƒáƒ¤áƒ შეუძლებელიáƒ)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTOVF (წილáƒáƒ“ი რიცხვების მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜ მნიშვნელáƒáƒ‘ის გáƒáƒ“áƒáƒªáƒ˜áƒšáƒ”ბáƒ)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTUND (წილáƒáƒ“ი რიცხვების მინიმáƒáƒšáƒ£áƒ áƒ˜ მნიშვნელáƒáƒ‘áƒáƒ–ე ჩáƒáƒ›áƒáƒªáƒ˜áƒšáƒ”ბáƒ)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTRES (áƒáƒ áƒáƒ–უსტი შედეგი)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTINV (წილáƒáƒ“ი რიცხვების áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: FPE_FLTSUB (წილáƒáƒ“ი რიცხვის მნიშვნელáƒáƒ‘რდიáƒáƒžáƒáƒ–áƒáƒœáƒ¡ გáƒáƒ áƒ”თáƒáƒ)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: მიღებულირზáƒáƒ’áƒáƒ“ი SIGFPE სიგნáƒáƒšáƒ˜."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_ILLOPC (áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ áƒáƒžáƒ™áƒáƒ“ი)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"შეცდმáƒ: ILL_ILLOPN (áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ áƒáƒžáƒ”რáƒáƒœáƒ“ი)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_ILLADDR (დáƒáƒ›áƒ˜áƒ¡áƒáƒ›áƒáƒ áƒ—ების áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ რეჟიმი)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_ILLTRP (áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ჩáƒáƒ­áƒ”რáƒ)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_PRVOPC (პრივილეგირებული áƒáƒžáƒ™áƒáƒ“ი)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_PRVREG (პრივილეგირებულ რეგისტრი)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_COPROC (კáƒáƒžáƒ áƒáƒªáƒ”სáƒáƒ áƒ˜áƒ¡ შეცდáƒáƒ›áƒ)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: ILL_BADSTK (სტეკის შიდრშეცდáƒáƒ›áƒ)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ: მიღებულირზáƒáƒ’áƒáƒ“ი SIGILL სიგნáƒáƒšáƒ˜."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ კáƒáƒ“ი: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "მáƒáƒ•áƒ”ლáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ნáƒáƒ›áƒ”რს."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜ áƒáƒ  áƒáƒ áƒ¡áƒ”ბáƒáƒ‘ს."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "მáƒáƒ¡áƒáƒšáƒáƒ“ნელირფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის ტიპი."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "ფáƒáƒ˜áƒšáƒ£áƒ áƒ˜ სისტემის უცნáƒáƒ‘ი ტიპი \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "მáƒáƒ•áƒ”ლáƒáƒ“ი დისკის ჭდის ტიპს."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "áƒáƒšáƒ›áƒ”ბს მხáƒáƒ áƒ“áƒáƒ­áƒ”რის გáƒáƒ áƒ”შე"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "მეტი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ შექმნრშეუძლებელიáƒ."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "მáƒáƒ•áƒ”ლáƒáƒ“ი დáƒáƒœáƒáƒ§áƒáƒ¤áƒ˜áƒ¡ ტიპს."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "ჩáƒáƒ áƒ—ული"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "გáƒáƒ›áƒáƒ áƒ—ული"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "áƒáƒžáƒ¢áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "მინიმáƒáƒšáƒ£áƒ áƒ˜"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "პáƒáƒ áƒáƒ›áƒ”ტრები:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "ბრძáƒáƒœáƒ”ბები:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"შეცდáƒáƒ›áƒ”ბის შესáƒáƒ®áƒ”ბ მიწერეთ: %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "სáƒáƒ›áƒ£áƒ¨áƒáƒ მáƒáƒ¬áƒ§áƒáƒ‘ილáƒáƒ‘áƒ: %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "áƒáƒ› ბრძáƒáƒœáƒ”ბáƒáƒ¡ áƒáƒ áƒáƒ˜áƒœáƒ¢áƒ”რáƒáƒ¥áƒ¢áƒ˜áƒ£áƒ  რეჟიმში áƒáƒ–რი áƒáƒ  áƒáƒ¥áƒ•áƒ¡.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "MSDOS-ის ტიპის დისკის ჭდეზე გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბი დáƒáƒ›áƒáƒšáƒ£áƒšáƒ˜ áƒáƒ  შეიძლებრ"
+#~ "იყáƒáƒ¡."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "MSDOS-ის ტიპის დისკის ჭდეზე გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული დáƒáƒœáƒáƒ§áƒáƒ¤áƒ”ბი áƒáƒ¦áƒ“გენის áƒáƒ  შეიძლებრ"
+#~ "იყáƒáƒ¡."
diff --git a/po/ko.gmo b/po/ko.gmo
new file mode 100644
index 0000000..3aebc43
--- /dev/null
+++ b/po/ko.gmo
Binary files differ
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..1a662d2
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,3314 @@
+# Korean translation for the parted package.
+# This file is distributed under the same license as the parted package.
+# Seong-ho Cho <darkcircle.0426@gmail.com>, 2016, 2021, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-07 15:50+0900\n"
+"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
+"Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 2.3\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$sì˜ ìž˜ëª»ëœ %1$sì¸ìž"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$sì˜ ì• ë§¤í•œ ì¸ìž %1$s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "유효한 ì¸ìž:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "ê¸°ë¡ ì˜¤ë¥˜"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "알 수 없는 시스템 오류"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: '%s%s' ì˜µì…˜ì€ ì• ë§¤í•©ë‹ˆë‹¤\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: ‘%s%s’ ì˜µì…˜ì€ ì• ë§¤í•©ë‹ˆë‹¤. 쓸 수 있는 ì˜µì…˜ì€ ë‹¤ìŒê³¼ 같습니다:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: ì¸ì‹í•  수 없는 ‘%s%s’ 옵션\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: ‘%s%s’ ì˜µì…˜ì€ ì¸ìžë¥¼ 허용하지 않습니다\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: ‘%s%s’ ì˜µì…˜ì€ ì¸ìžê°€ 필요합니다\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ìž˜ëª»ëœ ì˜µì…˜ -- ‘%c’\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: ì˜µì…˜ì— ì¸ìžê°€ 필요합니다 -- ‘%c’\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "‘"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "성공"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "ì¼ì¹˜í•˜ëŠ” 항목 ì—†ìŒ"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "ìž˜ëª»ëœ ì •ê·œ 표현ì‹"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "ìž˜ëª»ëœ ëŒ€ì¡° 문ìž"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "ìž˜ëª»ëœ ë¬¸ìž í´ëž˜ìŠ¤ ì´ë¦„"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "ì—­ 슬래시가 ë”°ë¼ë¶™ìŒ"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "ìž˜ëª»ëœ ì—­ 참조"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "ì¼ì¹˜í•˜ì§€ 않는 [ ë˜ëŠ” [^, [:, [., [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "ì¼ì¹˜í•˜ì§€ 않는 ( ë˜ëŠ” \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "ì¼ì¹˜í•˜ì§€ 않는 \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "ìž˜ëª»ëœ \\{\\} 컨í…트"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "ìž˜ëª»ëœ ë²”ìœ„ì˜ ë"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "메모리가 부족합니다"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "ìž˜ëª»ëœ ì •ê·œ í‘œí˜„ì‹ ì•ž 부분"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "ì •ê·œ 표현ì‹ì´ 예ìƒì¹˜ 않게 미리 ë났습니다"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "ì •ê·œ 표현ì‹ì´ 너무 ê¹ë‹ˆë‹¤"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "ì¼ì¹˜í•˜ì§€ 않는 ) ë˜ëŠ” \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "ì •ê·œ í‘œí˜„ì‹ ì•ž ë¶€ë¶„ì´ ì—†ìŠµë‹ˆë‹¤"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "%sì´(ê°€) 패키징함(%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "%sì´(ê°€) 패키징함\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"ë¼ì´ì„ ìŠ¤ GPLv3+: GNU GPL 버전 3 ì´ìƒ <%s>.\n"
+"ì´ í”„ë¡œê·¸ëž¨ì€ ìžìœ  소프트웨어입니다: ìžìœ ë¡­ê²Œ 바꾸거나 재배í¬í•  수 있습니"
+"다.\n"
+"ë²•ì´ í—ˆìš©í•˜ëŠ” í•œë„까지 ë³´ì¦í•  수 없습니다.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "%sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "%s, %sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "%s, %s, %sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%s, %s, %s,\n"
+"%sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%s, %s, %s, %s,\n"
+"%sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"%s, %s, %s, %s,\n"
+"%s, %sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"%s, %s, %s, %s,\n"
+"%s, %s, %sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%s, %s, %s, %s, \n"
+"%s, %s, %s,\n"
+"%sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%s, %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%sì´(ê°€) 작성함.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"%s, %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s 외 여러 참여ìžê°€ 작성함.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "버그 보고 주소: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "%s 버그 보고 주소: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 홈페ì´ì§€: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "GNU 프로그램 활용 ì¼ë°˜ ë„움ë§: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "메모리가 부족합니다"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "ë””ìŠ¤í¬ ì´ë¯¸ì§€"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "%s 열기 오류: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%sì„(를) ì½ê¸°/쓰기 ìš©ë„ë¡œ ì—´ 수 없습니다(%s). %sì„(를) ì½ê¸° 전용으로 열었습니"
+"다."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%2$s ì½ê¸° ìš©ë„ë¡œ íƒìƒ‰ 중 %1$s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%2$sì„(를) ì½ëŠ” 중 %1$s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "ì½ê¸° 전용으로 ì—´ì–´ %sì— ì“¸ 수 없습니다."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%2$sì— ê¸°ë¡ ìš©ë„ë¡œ íƒìƒ‰ 중 %1$s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%2$sì— ê¸°ë¡ ì¤‘ %1$s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "ìžì„¸í•œ 정보는 ‘%s --help’를 입력하십시오.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "사용법: %s [<옵션>] [<장치>]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"분할 ì˜ì—­ í…Œì´ë¸”ì˜ ë°”ë€ ìƒíƒœë¥¼ ìš´ì˜ì²´ì œì— 알립니다.\n"
+"\n"
+" -d, —dry-run 실제로 ìš´ì˜ì²´ì œì— 알려주지 않습니다\n"
+" -s, —summary 요약 ë‚´ìš©ì„ ì¶œë ¥í•©ë‹ˆë‹¤\n"
+" -h, —help ì´ ë„움ë§ì„ 나타낸 후 빠져나갑니다\n"
+" -v, —version 버전 정보를 출력한 후 빠져나갑니다\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"<장치> ê°’ì´ ì—†ìœ¼ë©´, 모든 분할 ì˜ì—­ì„ 찾습니다.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"<%s>ì— ë²„ê·¸ë¥¼ 보고하십시오.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%sì„(를) ì—´ 수 없습니다."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "저장 장치를 ì°¾ì„ ìˆ˜ 없습니다."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"경고: 커ë„ì—ì„œ %sì˜ ë¶„í•  ì˜ì—­ í…Œì´ë¸” 다시 ì½ê¸° 실패(%s). ê²°ê³¼ì ìœ¼ë¡œ, ë°”ë€ ëª¨"
+"ë“  ì„¤ì •ì´ ë‹¤ì‹œ 부팅한 ë‹¤ìŒ ë°˜ì˜ì´ 안 ë  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"경고: %s ì—´ 수 ì—†ìŒ(%s). ê²°ê³¼ì ìœ¼ë¡œ, ë°”ë€ ëª¨ë“  ì„¤ì •ì´ ë‹¤ì‹œ 부팅한 ë‹¤ìŒ ë°˜ì˜"
+"ì´ ì•ˆ ë  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"경고: %sì—ì„œ ë²—ì–´ë‚œ 트랜스레ì´í„° ìƒì„± 실패(%s). ê²°ê³¼ì ìœ¼ë¡œ, ë°”ë€ ëª¨ë“  ì„¤ì •ì´ "
+"다시 부팅한 ë‹¤ìŒ ë°˜ì˜ì´ 안 ë  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%sì—ì„œ 디스í¬ë¡œ %s ë™ê¸°í™”를 ì‹œë„합니다"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "%s ìž¥ì¹˜ì˜ ìƒíƒœë¥¼ 가져올 수 없습니다 - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "%sì˜ dm 형ì‹ì„ 파악할 수 없습니다."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"%sì˜ ì„¹í„° í¬ê¸°ë¥¼ 파악할 수 없습니다: %s.\n"
+"기본 섹터 í¬ê¸°(%lld)를 활용합니다."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"%sì˜ ì‹¤ì œ 섹터 í¬ê¸°ë¥¼ 파악할 수 없습니다.\n"
+"논리 섹터 í¬ê¸°(%lld)를 활용합니다."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "%s í¬ê¸°ë¥¼ 파악할 수 없습니다(%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "ì¼ë°˜ IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "%s ìž¥ì¹˜ì˜ ì‹ë³„ 정보를 가져올 수 없습니다 - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"%s ìž¥ì¹˜ì— ì‹¤ì œ 섹터 당 다중(%d) 논리 섹터가 있습니다.\n"
+"GNU Partedì—서는 GPT와 ext2/3ì„ ì‚¬ìš©í•˜ëŠ” 것처럼 ì¼ë¶€ 특수 ë””ìŠ¤í¬ ë ˆì´ë¸”/íŒŒì¼ "
+"시스템 í˜¼ìš©ì„ ì‹¤í—˜ì ìœ¼ë¡œ 지ì›í•©ë‹ˆë‹¤.\n"
+"최신 정보는 웹사ì´íŠ¸ë¥¼ 참고하십시오."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "%s SCSI 장치 초기화 중 오류 - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"%s 장치는 íŒŒì¼ ì‹œìŠ¤í…œ ë˜ëŠ” 분할 ì˜ì—­ í…Œì´ë¸”ì„ ì €ìž¥í•  수 ì—†ì„ ì •ë„ë¡œ ìš©ëŸ‰ì´ ë„ˆ"
+"무 작습니다. ìž˜ëª»ëœ ìž¥ì¹˜ë¥¼ ì„ íƒí•˜ì§€ 않았습니까?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"%s 파ì¼/ìž¥ì¹˜ì˜ í¬ê¸°ë¥¼ 파악할 수 없습니다. 정확히 ì–´ë–¤ ê³¼ì •ì„ í–‰í•˜ëŠ” 지 모르"
+"면 Parted를 사용하지 마십시오!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "ì¼ë°˜ SD/MMC 저장소 ì¹´ë“œ"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe 장치"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID 컨트롤러"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA 장치"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ì´ë”ë„· 경유 ATA 장치"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD ë“œë¼ì´ë¸Œ"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries ê°€ìƒ DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "컴팩 스마트 ì–´ë ˆì´"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM 장치"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID 컨트롤러"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O 컨트롤러"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "유저 모드 리눅스 UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "루프백 장치"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "리눅스 장치 매í¼(%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "ì   ê°€ìƒ ë¸”ë¡ ìž¥ì¹˜"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "ì•Œ 수 ì—†ìŒ"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio ë¸”ë¡ ìž¥ì¹˜"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "리눅스 소프트웨어 RAID ì–´ë ˆì´"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM ë“œë¼ì´ë¸Œ"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() 지ì›í•˜ì§€ 않는 장치 형ì‹"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "%s fsync/닫기 처리 중 오류: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s %s ì½ëŠ” ë™ì•ˆ íŒŒì¼ ëì— ë„달했습니다"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"%s 분할 ì˜ì—­ 수정 ë‚´ìš©ì„ ì»¤ë„ì— ì•Œë¦¬ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤ -- %s. 다시 부"
+"팅하기 ì „ì—는 리눅스ì—ì„œ %sì„(를) 바꾼 ë‚´ìš©ì„ ì•Œì§€ 못합니다 -- ë”°ë¼ì„œ 다시 부"
+"팅하기 ì „ì—는 마운트하거나 사용하면 안ë©ë‹ˆë‹¤."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "%sì˜ ì‹œìž‘ ì  ë° ê¸¸ì´ë¥¼ 파악할 수 없습니다."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"%2$sì˜ %1$s 분할 ì˜ì—­ì„ 기ë¡í–ˆì§€ë§Œ, 사용중ì´ê¸° ë•Œë¬¸ì— ë°”ê¾¼ ë‚´ìš©ì„ ì»¤ë„ì— ì•Œ"
+"릴 수 없습니다. ê²°ê³¼ì ìœ¼ë¡œ ì´ì „ 분할 ì˜ì—­ì€ 사용 ì¤‘ì¸ ê·¸ëŒ€ë¡œ 남습니다. 분할 "
+"ì˜ì—­ 배치를 바꾸기 ì „ 다시 부팅해야합니다."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "시작 ì§€ì  ì´ì „ì— ë 지ì ì´ 있으면 안ë©ë‹ˆë‹¤! (시작 섹터=%jd 길ì´=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "%3$s 분할 ì˜ì—­ ë°–ì— %1$ld-%2$ld 섹터 기ë¡ì„ ì‹œë„합니다."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "불량 ë¸”ë¡ ê²€ì‚¬ 중"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "ìŠ¤íƒ ì—­ì¶”ì  ëª©ë¡ì— 호출 항목 %d개가 있습니다:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "%4$s() í•¨ìˆ˜ì˜ %2$s:%3$dì—ì„œ ê²€ì¦(%1$s)ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: ì¸ì‹í•  수 없는 ë””ìŠ¤í¬ ë ˆì´ë¸”"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"libpartedì—서는 %s 기ë¡ì„ 지ì›í•˜ì§€ 않습니다. ì•„ë§ˆë„ ì½ê¸° 전용으로 컴파ì¼í•œ "
+"것 같습니다."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "분할 ì˜ì—­ %dë²ˆì€ %s(ì´)지만, íŒŒì¼ ì‹œìŠ¤í…œì€ %s입니다."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "ì•Œ 수 없는 %d ë””ìŠ¤í¬ í”Œëž˜ê·¸."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s ë””ìŠ¤í¬ ë ˆì´ë¸”ì€ í™•ìž¥ 분할 ì˜ì—­ì„ 지ì›í•˜ì§€ 않습니다."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%s ë””ìŠ¤í¬ ë ˆì´ë¸”ì€ ë…¼ë¦¬ 분할 ì˜ì—­ ë˜ëŠ” 확장 분할 ì˜ì—­ì„ 지ì›í•˜ì§€ 않습니다."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "주 분할 ì˜ì—­ì´ 너무 많습니다."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "%sì— í™•ìž¥ 분할 ì˜ì—­ì´ 없어 논리 분할 ì˜ì—­ì„ 추가할 수 없습니다."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%sì— í•˜ë‚˜ ì´ìƒì˜ 확장 분할 ì˜ì—­ì´ 없습니다."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "확장 분할 ì˜ì—­ ë°–ì— ë…¼ë¦¬ 분할 ì˜ì—­ì„ 배치할 수 없습니다."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%sì— í™•ìž¥ 분할 ì˜ì—­ 밖으로 논리 분할 ì˜ì—­ì„ 배치할 수 없습니다."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "확장 분할 ì˜ì—­ ì•ˆì— ì£¼ 분할 ì˜ì—­ì„ 배치할 수 없습니다."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "ë””ìŠ¤í¬ ì˜ì—­ ë°–ì— ë¶„í•  ì˜ì—­ì„ 배치할 수 없습니다!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "분할 ì˜ì—­ì„ 중복 지정할 수 없습니다."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "free"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extended"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logical"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primary"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "hidden"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "RAID"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "ì•Œ 수 없는 분할 ì˜ì—­ì˜ %d 플래그입니다."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "ì •ë³´"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "경고"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "오류"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "실패"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "버그"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "기능 ì—†ìŒ"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "고침"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "예"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "아니요"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "확ì¸"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "다시 ì‹œë„"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "무시"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "취소"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"GNU Partedì˜ ë²„ê·¸ë¥¼ 찾았습니다. http://www.gnu.org/software/parted/parted."
+"html Parted 웹사ì´íŠ¸ì—ì„œ 버그 ì œì¶œì— ìœ ìš©í•œ 정보를 찾아보십시오! %sì—게 버전"
+"(%s) 정보와 ë‹¤ìŒ ë©”ì‹œì§€ë¥¼ 넣어 버그 보고서를 ë©”ì¼ë¡œ 보내주십시오:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "AIC ë””ìŠ¤í¬ ë ˆì´ë¸”ì˜ ì½ê¸° ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "AIX ë””ìŠ¤í¬ ë ˆì´ë¸” ê¸°ë¡ ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "AIX ë””ìŠ¤í¬ ë ˆì´ë¸”ì˜ ë¶„í•  ì˜ì—­ 추가 ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "AIX ë””ìŠ¤í¬ ë ˆì´ë¸”ì˜ ë¶„í•  ì˜ì—­ 복제 ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "AIX ë””ìŠ¤í¬ ë ˆì´ë¸”ì˜ ì‹œìŠ¤í…œ 분할 ì˜ì—­ í˜•ì‹ ì„¤ì • ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "AIX ë””ìŠ¤í¬ ë ˆì´ë¸”ì˜ ì„¤ì • 플래그 ì§€ì› ê¸°ëŠ¥ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Partedì—ì„œ 섹터 í¬ê¸°ê°€ %d ë°”ì´íŠ¸ê°€ ì•„ë‹Œ 아타리 분할 ì˜ì—­ í…Œì´ë¸”ì„ ì‚¬ìš©í•  수 "
+"없습니다."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr "디스í¬ì˜ 아타리 분할 í…Œì´ë¸”ì—서는 %d 섹터 ì´ìƒ 사용할 수 없습니다."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"아타리 분할 ì˜ì—­ì´ 너무 많습니다. ì•„ë§ˆë„ XGM ì—°ê²° ë¦¬ìŠ¤íŠ¸ì— ë£¨í”„ê°€ 있는 것 ê°™"
+"습니다. 중단함."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "%lli번 ì„¹í„°ì˜ ARSì— ë°ì´í„° 분할 ì˜ì—­ì´ 없습니다."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr "ë‹¤ìŒ ë…¼ë¦¬ ARS í•­ëª©ì€ %lli번 섹터 ARSì˜ XGM 형ì‹ì´ 아닙니다."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr "ì´ ë””ìŠ¤í¬(%s)ì— ì•„íƒ€ë¦¬ 분할 ì˜ì—­ì´ 없거나 ì†ìƒì„ ìž…ì€ ê²ƒ 같습니다."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "%lli번 ì„¹í„°ì— %d번 논리 분할 ì˜ì—­ì˜ ARS를 저장할 ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "%lli번 ì„¹í„°ì— ARS를 저장할 ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"분할 ì˜ì—­ì— 저장한 섹터 수가 장치 í¬ê¸°ì— 맞지 않습니다. 분할 í…Œì´ë¸”ì„ ìˆ˜ì •í•˜"
+"시겠습니까?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "%lli번 ì„¹í„°ì— BSLì„ ì €ìž¥í•  ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "주 AHDI ì¼€ì´ë¸”ì„ ì±„ìš´ 후 분할 ì˜ì—­ì´ 남아있습니다."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"주 AHDI í…Œì´ë¸”ì„ ëª¨ë“  분할 ì˜ì—­ìœ¼ë¡œ 채웠지만 ICD í…Œì´ë¸”ì´ ë¹„ì–´ìžˆì§€ ì•Šì•„ ì•Œ "
+"수 없는 í¬ê¸°ì˜ ë” ë§Žì€ ë¶„í•  ì˜ì—­ê³¼ 위치를 ICD 호환 프로그램ì—ì„œ ì°¾ì„ ìˆ˜ 있습"
+"니다. ICD í…Œì´ë¸”ì„ ê°±ì‹ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ICD í•­ëª©ì— í™•ìž¥, 논리 분할 ì˜ì—­ì„ ë„£ì„ ìˆ˜ 없습니다."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "í…Œì´ë¸”ì„ ì±„ìš´ ë‹¤ìŒ ë¶„í•  ì˜ì—­ì´ 남아있습니다."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"ICD 모드ì—ì„œ 확장 XGM 분할 ì˜ì—­ì„ 사용할 수 없습니다 (XGM 분할 ì˜ì—­ì´ 처ìŒì— "
+"둘 ë°°ì¹˜í–ˆì„ ë•Œ 주 분할 ì˜ì—­ %dê°œ ì´ìƒ)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "분할 ì˜ì—­ì˜ 모든 제약 ì¡°ê±´ì„ ë§Œì¡±í•  수 없습니다."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"XGM 확장 분할 ì˜ì—­ì„ 사용할 경우 (ICD 모드ì—ì„œ) 주 분할 ì˜ì—­ %dê°œ ì´ìƒ 사용"
+"할 수 없습니다. XGM "
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "분할 ì˜ì—­ 번호를 할당할 수 없습니다."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "BSD ë””ìŠ¤í¬ ë ˆì´ë¸” ìŠ¬ë¡¯ì„ í• ë‹¹í•  수 없습니다."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "DASD-LDL ìž¥ì¹˜ì˜ ë¶„í•  í…Œì´ë¸”ì„ ë°”ê¿€ 수 없습니다.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "DASD ë””ìŠ¤í¬ ë ˆì´ë¸” ìŠ¬ë¡¯ì„ í• ë‹¹í•  수 없습니다."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "%sì— ìž˜ëª»ëœ ë¶„í•  ì˜ì—­ í…Œì´ë¸” -- ìž˜ëª»ëœ %x 서명."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "ìž˜ëª»ëœ ë¶„í•  ì˜ì—­ í…Œì´ë¸” - %sì— ìž¬ê·€ 분할 ì˜ì—­."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Partedì—서는 윈ë„ìš° ë™ì  디스í¬ì—ì„œ 관리하는 분할 ì˜ì—­ì˜ í¬ê¸°ë¥¼ 조절할 수 ì—†"
+"습니다."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "분할 ì˜ì—­ì„ ë” ë§Œë“¤ 수 없습니다."
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%sì— í™•ìž¥ 분할 ì˜ì—­(볼륨 í—¤ë” ë¶„í•  ì˜ì—­)ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "ê²€ì‚¬í•©ì´ ìž˜ëª»ë습니다. 분할 ì˜ì—­ í…Œì´ë¸”ì´ ê¹¨ì§„ 것 같습니다."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "주 분할 ì˜ì—­ë§Œ 루트 분할 ì˜ì—­ì´ ë  ìˆ˜ 있습니다."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "주 분할 ì˜ì—­ë§Œ 스왑 분할 ì˜ì—­ì´ ë  ìˆ˜ 있습니다."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "논리 분할 ì˜ì—­ë§Œ 부트 파ì¼ì´ ë  ìˆ˜ 있습니다."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"dvh 분할 ì˜ì—­ ì´ë¦„ì„ %s(으)ë¡œ ì„¤ì •í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤:\n"
+"논리 분할 ì˜ì—­(부트 파ì¼)만 ì´ë¦„ì„ ë³´ìœ í•©ë‹ˆë‹¤."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "주 분할 ì˜ì—­ì´ 너무 많습니다"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "열기 오류"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "íƒìƒ‰ 오류"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "ì½ê¸° 오류"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() 오류"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API 버전 ì¼ì¹˜ 안함"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "지ì›í•˜ì§€ 않는 ë””ìŠ¤í¬ í˜•ì‹"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "지ì›í•˜ì§€ 않는 ë””ìŠ¤í¬ êµ¬ì„± 형ì‹"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "디스í¬ë¥¼ 사용 중입니다"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "설정 íŒŒì¼ ë¬¸ë²• 오류"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "볼륨 ë ˆì´ë¸”ì´ ê¹¨ì¡ŒìŠµë‹ˆë‹¤"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "ë°ì´í„° 세트 ì´ë¦„ì´ ê¹¨ì¡ŒìŠµë‹ˆë‹¤"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "메모리 í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "장치 ê²€ì¦ì— 실패했습니다"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "지정 장치는 유효한 DASD 장치가 아닙니다"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "ìž¥ì¹˜ì— VOLSERì´ ì—†ìŠµë‹ˆë‹¤"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "치명ì ì¸ 오류"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "볼륨 ë ˆì´ë¸”ì„ ì„¤ì •í•  ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "분할 ì˜ì—­ 정보를 저장할 ê³µê°„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "ìž˜ëª»ëœ VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "API ë²„ì „ì„ ê°€ì ¸ì˜¬ 수 없습니다."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"현재 API 버전 ‘%d’ì´(ê°€) DASD ë“œë¼ì´ë²„ API 버전 ‘%d’와(ê³¼) ì¼ì¹˜í•˜ì§€ 않습니다!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "ë””ìŠ¤í¬ í¬ê¸° 정보를 가져올 수 없습니다."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "ë””ìŠ¤í¬ í¬ê¸° 정보를 가져올 수 없습니다."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "ë¸”ë¡ í¬ê¸° 정보를 가져올 수 없습니다."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "ë””ìŠ¤í¬ êµ¬ì¡° ì •ë³´ê°€ 3390 형ì‹ì˜ DASD ìž¥ì¹˜ì— ë§žì§€ 않습니다."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "GPT를 설정하기ì—는 장치 ìš©ëŸ‰ì´ ë„ˆë¬´ 작습니다"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"GPT 분할 ì˜ì—­ í…Œì´ë¸” 형ì‹ì€ Partedì—ì„œ ì¸ì‹í•  수 있는 버전보다 ë†’ì€ %x 버전"
+"ì„ ì§€ë‹ˆê³  있습니다. 보고해주십시오!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"%s 사용 여분 공간 전체를 활용할 수 있는건 아닌 것 같습니다만, 모든 공간(추가 "
+"%llu 블ë¡)ì„ ì‚¬ìš©í•  수 있ë„ë¡ GPT를 수정할 수 있습니다. 아니면 현재 설정 ìƒíƒœ"
+"ë¡œ ê³„ì† ì§„í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"백업 GPT í…Œì´ë¸” ì˜ì—­ì´ ë””ìŠ¤í¬ ë§ˆì§€ë§‰ 공간까지 차지해야 í•˜ëŠ”ë° ê·¸ë ‡ì§€ 않습니"
+"다. 백업 ì˜ì—­ì„ 마지막으로 ì´ë™í•˜(ê³  ì´ì „ ë°±ì—…ì„ ì œê±°í•˜)ì—¬ 문제를 수정하시겠"
+"습니까?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"주 GPT í…Œì´ë¸”ê³¼ 백업 GPT í…Œì´ë¸”ì´ ê¹¨ì¡ŒìŠµë‹ˆë‹¤. 분할 ì˜ì—­ì„ 복구하려면 í…Œì´ë¸”"
+"ì„ ìƒˆë¡œ 만들고 Partedì˜ ë³µêµ¬ ê¸°ëŠ¥ì„ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"백업 GPT í…Œì´ë¸”ì´ ê¹¨ì¡Œì§€ë§Œ, 주 GPT í…Œì´ë¸”ì€ ë¬¸ì œê°€ 없으므로 주 GPT í…Œì´ë¸”ì„ "
+"사용하겠습니다."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"주 GPT í…Œì´ë¸”ì´ ê¹¨ì¡Œì§€ë§Œ, 백업 GPT í…Œì´ë¸”ì€ ë¬¸ì œê°€ 없으므로 백업 GPT í…Œì´ë¸”"
+"ì„ ì‚¬ìš©í•˜ê² ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "주 분할 ì˜ì—­ í…Œì´ë¸” ì–´ë ˆì´ CRCê°€ ì¼ì¹˜í•˜ì§€ 않습니다"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "분할 ì˜ì—­ ì´ë¦„ í•´ì„ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "맥 ë””ìŠ¤í¬ ë ˆì´ë¸”ì— ìž˜ëª»ëœ %x ì„œëª…ì´ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "분할 ì˜ì—­ ë§µì— ë¶„í•  ì˜ì—­ 맵 í•­ëª©ì´ ì—†ìŠµë‹ˆë‹¤!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%sì€(는) 맥 ë””ìŠ¤í¬ ë ˆì´ë¸”ë¡œ í™œìš©í•˜ê¸°ì— ë„ˆë¬´ 작습니다!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "%d번 분할 ì˜ì—­ì— ìž˜ëª»ëœ %x ì„œëª…ì´ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "%d번 분할 ì˜ì—­ì— ìž˜ëª»ëœ 0ë°”ì´íŠ¸ 길ì´ê°€ 있습니다!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "ë°ì´í„° ì˜ì—­ì´ 분할 ì˜ì—­ 시작 지ì ì—ì„œ 시작하지 않았습니다."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "분할 ì˜ì—­ì˜ 부트 ì˜ì—­ì´ ì „ì²´ 분할 ì˜ì—­ì„ 차지하지 않았습니다."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "분할 ì˜ì—­ì˜ ë°ì´í„° ì˜ì—­ì´ ì „ì²´ 분할 ì˜ì—­ì„ 차지하지 않았습니다."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"장치 서술ìžì˜ ë¸”ë¡ í¬ê¸°ê°€ ì´ìƒí•©ë‹ˆë‹¤: %d ë°”ì´íŠ¸ëŠ” 512ì˜ ë°°ìˆ˜ê°€ 아닙니다."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"ë“œë¼ì´ë²„ 서술ìžì—ì„œ 실제 ë¸”ë¡ ì‚¬ì´ì¦ˆëŠ” %d ë°”ì´íŠ¸ë¼ê³  하지만, 리눅스ì—서는 %d "
+"ë°”ì´íŠ¸ë¼ê³  합니다."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "올바른 분할 ì˜ì—­ ë§µì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"분할 ì˜ì—­ 맵 항목 í¬ê¸°ê°€ 맞지 않습니다! 1번 í•­ëª©ì€ %dë¼ê³  하지만 %d번 í•­ëª©ì€ "
+"%dë¼ê³  합니다!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "ì´ìƒí•©ë‹ˆë‹¤! 분할 ì˜ì—­ 맵 í•­ëª©ì´ ë‘ ê°œ 있습니다!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"루트 분할 ì˜ì—­ ë˜ëŠ” 스왑 분할 ì˜ì—­ì˜ ì´ë¦„ì„ ë°”ê¾¸ë©´, 리눅스ì—ì„œ 해당 분할 ì˜ì—­"
+"ì„ ì¸ì‹í•˜ì§€ 못합니다."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "다른 분할 ì˜ì—­ì„ 추가할 수 없습니다 -- 분할 ì˜ì—­ ë§µì´ ë„ˆë¬´ 작습니다!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "%sì— ìž˜ëª»ëœ ë¶„í•  ì˜ì—­ í…Œì´ë¸”ì´ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"%d번 분할 ì˜ì—­ì„ ì‹¤ë¦°ë” ë²”ìœ„ ë‚´ë¡œ 정렬하지 않았습니다. 여전히 지ì›í•˜ì§€ 않습"
+"니다."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "다른 분할 ì˜ì—­ì„ 추가할 수 없습니다."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"%jd 섹터 분할 ì˜ì—­ 길ì´ëŠ” %s 분할 ì˜ì—­ í…Œì´ë¸”ì— ëª…ì‹œí•œ 최대 ê°’ %jdì„(를) 넘습"
+"니다"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"시작 섹터 번호 %jdì€(는) %s ë·´í•  ì˜ì—­ í…Œì´ë¸”ì— ëª…ì‹œí•œ 최대값 %jdì„(를) 넘습니"
+"다"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%1$s : %3$s 형ì‹ì˜ %2$llu번째 블ë¡ì— ìž˜ëª»ëœ ê²€ì‚¬í•© ê°’ì´ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : rdb 블ë¡ì„ ì°¾ì„ ìˆ˜ 없어 아무 ì¼ë„ ì¼ì–´ë‚˜ì§€ 않습니다."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : %d번째 블ë¡ì— 루프가 있습니다."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : %s 목ë¡ì˜ %s 불량 블ë¡ì´ 있는 것 같습니다."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : 불량 ë¸”ë¡ ì¡°íšŒì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : 분할 ì˜ì—­ ë¸”ë¡ ì¡°íšŒì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : íŒŒì¼ ì‹œìŠ¤í…œ ë¸”ë¡ ì¡°íšŒì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : 부트 ë¸”ë¡ ì¡°íšŒì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "%d번째 분할 ì˜ì—­ ë¸”ë¡ ì“°ê¸°ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "깨진 ì¬ ë””ìŠ¤í¬ ë ˆì´ë¸”ì„ ì°¾ì•˜ìŠµë‹ˆë‹¤."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"디스í¬ì˜ 실린ë”, 헤드, 섹터 í¬ê¸°(%d,%d,%d) ì •ë³´ê°€ ë””ìŠ¤í¬ ë ˆì´ë¸”ì— ì €ìž¥í•œ í¬ê¸°"
+"(%d, %d, %d)와 ì¼ì¹˜í•˜ì§€ ì•ŠìŒì„ ìš´ì˜ ì²´ì œì—ì„œ 보고했습니다."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "ë””ìŠ¤í¬ ë ˆì´ë¸”ì€ %s보다 í° ë””ìŠ¤í¬ë¥¼ 언급합니다."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "디스í¬ì˜ ì‹¤ë¦°ë” ê°¯ìˆ˜ëŠ” 최대 65536보다 í° %d입니다."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"ì „ì²´ ë””ìŠ¤í¬ ë¶„í•  ì˜ì—­ì€ 하나만 가능합니다. 보통 실제 분할 ì˜ì—­ìœ¼ë¡œ ì´ ë¶„í•  "
+"ì˜ì—­ì„ ë®ì–´ì“°ëŠ”ê±´ ì¢‹ì€ ë°©ì‹ì´ 아닙니다. 솔ë¼ë¦¬ìŠ¤ëŠ” ì´ ë¶„í•  ì˜ì—­ì´ 없으면 부"
+"팅할 수 없으며, SILO(ìŠ¤íŒ ë¶€íŠ¸ ë¡œë”)ë„ ë§ˆì°¬ê°€ì§€ë¡œ ì´ ë¬¸ì œë¥¼ ì¸ì‹í•©ë‹ˆë‹¤."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "ì¬ ë””ìŠ¤í¬ ë ˆì´ë¸”ì´ ë‹¤ 찼습니다."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "장치 열기 실패"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "장치 íƒìƒ‰ 실패"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "장치 쓰기 실패"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "장치 ì½ê¸° 실패"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "볼륨 ë ˆì´ë¸”ì„ ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "볼륨 ë ˆì´ë¸”ì„ ì“¸ 수 없습니다."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "VTOC ë ˆì´ë¸”ì„ ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB를 ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB를 ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB를 ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB를 ì½ì„ 수 없습니다."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "VTOC ë ˆì´ë¸”ì„ ì“¸ 수 없습니다."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB를 쓸 수 없습니다."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB를 쓸 수 없습니다."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB를 쓸 수 없습니다."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB를 쓸 수 없습니다."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT9 DSCB를 쓸 수 없습니다."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "메모리가 부족합니다."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "'COMPACT' 특수 ë‹¨ìœ„ì˜ ë‹¨ìœ„ í¬ê¸°ë¥¼ 가져올 수 없습니다."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\"ì€(는) ìž˜ëª»ëœ ìœ„ì¹˜ 문법입니다."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "최대 헤드 ê°’ì€ %d입니다."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "최대 섹터 ê°’ì€ %d입니다."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "%s위치는 %s 장치 ì´ì™¸ì˜ ì˜ì—­ì— 있습니다."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "ìž˜ëª»ëœ ìˆ«ìž ê°’."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "1보다 ìž‘ì€ ê°’ì„ ì‚¬ìš©í•˜ëŠ” 대신 ìž‘ì€ ë‹¨ìœ„ë¥¼ 사용하십시오"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : 분할 ì˜ì—­ ë¸”ë¡ í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : ë¸”ë¡ í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : %llu 부트 블ë¡ì„ ì½ì„ 수 없습니다\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : %llu 루트 블ë¡ì„ ì½ì„ 수 없습니다\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : ID ëª©ë¡ êµ¬ì„± 요소 í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : %llu 블ë¡ì„ ì½ì„ 수 없습니다\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%1$s : %3$s 형ì‹ì˜ %2$llu 블ë¡ì— ìž˜ëª»ëœ ê²€ì‚¬í•© ê°’ì´ ìžˆìŠµë‹ˆë‹¤\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : %d 블ë¡ì„ 쓸 수 없습니다\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : disk_specific rdb ë¸”ë¡ í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : rdb 블ë¡ì„ ì°¾ì„ ìˆ˜ 없어 아무 ì¼ë„ ì¼ì–´ë‚˜ì§€ 않습니다\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : %llu 분할 ì˜ì—­ ë¸”ë¡ ì½ê¸°ì— 실패했습니다\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted 컴파ì¼ì— 문제가 있습니다: FAT 부트 섹터 í¬ê¸°ëŠ” 512 ë°”ì´íŠ¸ì—¬ì•¼ 합니"
+"다. FAT 지ì›ì„ 비활성화합니다."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "FAT íŒŒì¼ ì‹œìŠ¤í…œì— ìž˜ëª»ëœ ì„œëª…ì´ ìžˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "FAT íŒŒì¼ ì‹œìŠ¤í…œì˜ ì„¹í„° í¬ê¸°ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "FAT íŒŒì¼ ì‹œìŠ¤í…œì˜ í´ëŸ¬ìŠ¤í„° í¬ê¸°ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr "FAT íŒŒì¼ ì‹œìŠ¤í…œì˜ ì˜ˆì•½ 섹터 수가 잘못ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "FAT 갯수가 잘못ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"íŒŒì¼ ì‹œìŠ¤í…œì˜ ì‹¤ë¦°ë”, 헤드, 섹터 í¬ê¸°(%d, %d, %d)ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 분할 ì˜"
+"ì—­ í…Œì´ë¸”ì˜ ì‹¤ë¦°ë”, 헤드, 섹터 í¬ê¸°ëŠ”(%d, %d, %d) 입니다."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "FAT 부트 ì„¹í„°ì˜ ë…¼ë¦¬ 섹터 í¬ê¸°ê°€ 0입니다. ì´ìƒí•œ 값입니다."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT 부트 ì„¹í„°ì— FAT í…Œì´ë¸”ì´ ì—†ìŠµë‹ˆë‹¤. ì´ìƒí•œ 값입니다. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "FAT 부트 ì„¹í„°ì˜ í´ëŸ¬ìŠ¤í„° 섹터 수가 0 입니다. ì´ìƒí•œ 값입니다. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "지ì›í•˜ì§€ 않는 FAT12 íŒŒì¼ ì‹œìŠ¤í…œìž…ë‹ˆë‹¤."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "ì¸ì‹í•  수 없는 예전 ë°©ì‹ì˜ 리눅스 스왑 서명 '%10s' 입니다."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "ì¸ì‹í•  수 없는 새 ë°©ì‹ì˜ 리눅스 스왑 서명 '%10s' 입니다."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "ì¸ì‹í•  수 없는 swsusp 리눅스 스왑 서명 '%9s' 입니다."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Partedì—ì„œ 섹터 í¬ê¸°ê°€ %d ë°”ì´íŠ¸ê°€ ì•„ë‹Œ HFS íŒŒì¼ ì‹œìŠ¤í…œ 디스í¬ë¥¼ 사용할 수 ì—†"
+"습니다."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"íŒŒì¼ ì‹œìŠ¤í…œì˜ ì‹¤ë¦°ë”, 헤드, 섹터(%d, %d, %d) í¬ê¸°ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤. 분할 ì˜"
+"ì—­ í…Œì´ë¸”ì˜ ì‹¤ë¦°ë”, 헤드, 섹터 í¬ê¸°ëŠ”(%d, %d, %d) 입니다. 무시를 ì„ íƒí•˜ë©´ 파"
+"ì¼ ì‹œìŠ¤í…œì˜ ì‹¤ë¦°ë”, 헤드, 섹터 í¬ê¸°ë¥¼ 바꾸지 않습니다. ìˆ˜ì •ì„ ì„ íƒí•˜ë©´, 실린"
+"ë”, 헤드, 섹터 í¬ê¸°ë¥¼ 분할 ì˜ì—­ í…Œì´ë¸”ì˜ ì‹¤ë¦°ë”, 헤드, 섹터 í¬ê¸°ì— 맞춥니다."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"섹터 ì •ë³´ì— ìž˜ëª»ëœ ì„œëª… ì •ë³´(%x)ê°€ 있습니다. 지금 취소를 ì„ íƒí•œ 후 버그 ë³´ê³ "
+"서를 보내십시오. ìží¬ìžê¸° ìƒíƒœë¼ë©´ ë¬´ì‹œí•´ë„ ì•ˆì „í•©ë‹ˆë‹¤."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"ì´ ë¶„í•  ì˜ì—­ì„ 지정 í¬ê¸°ë¡œ 줄ì´ë ¤ë©´ ë‚¨ì€ ê³µê°„ì„ %s ë§Œí¼ í™•ë³´í•´ì•¼í•©ë‹ˆë‹¤. 현"
+"재, %s 만í¼ë§Œ 남아있습니다."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "í´ëŸ¬ìŠ¤í„° 시작 ë¸íƒ€ ê°’ = %dì€(는) í´ëŸ¬ìŠ¤í„° í¬ê¸° %dì˜ ë°°ìˆ˜ê°€ 아닙니다."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "%sì˜ ìž˜ëª»ëœ ë””ë ‰í„°ë¦¬ 항목: 첫번째 í´ëŸ¬ìŠ¤í„°ëŠ” íŒŒì¼ ë§ˆì»¤ì˜ ë입니다."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"ìž˜ëª»ëœ FAT: %sì— ë나지 ì•Šì€ ì²´ì¸ì´ 있습니다. dosfsck ë˜ëŠ” scandisk를 실행하"
+"십시오."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"ìž˜ëª»ëœ FAT: %d번 í´ëŸ¬ìŠ¤í„°ê°€ %s ì²´ì¸ì˜ íŒŒì¼ ì‹œìŠ¤í…œ 바깥 ì˜ì—­ì— 있습니다. "
+"dosfsck ë˜ëŠ” scandisk를 실행하십시오."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"ìž˜ëª»ëœ FAT: %d번 í´ëŸ¬ìŠ¤í„°ê°€ %s와(ê³¼) êµì°¨ ì—°ê²° ìƒíƒœìž…니다. dosfsck ë˜ëŠ” "
+"scandisk를 실행하십시오."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%sì€(는) %dk지만, í´ëŸ¬ìŠ¤í„° %d개가 있습니다(%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "%s íŒŒì¼ ì‹œìŠ¤í…œì˜ ë¶„í•  ì˜ì—­ì´ 너무 í¬ê±°ë‚˜ 작습니다."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT ì •ë³´ê°€ ì¼ì¹˜í•˜ì§€ 않습니다. 무슨 ì˜ë¯¸ì¸ì§€ 모르겠다면, 취소를 ì„ íƒí•˜ê³  파"
+"ì¼ ì‹œìŠ¤í…œì—ì„œ scandisk를 실행한 후 다시 ëŒì•„오십시오."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "ì´ FAT 형ì‹ì— 가능한 ì„¤ì •ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"íŒŒì¼ ì‹œìŠ¤í…œì´ ìœˆë„ìš°ì—ì„œ 기대하는 í¬ê¸°ê°€ 아닙니다. í´ëŸ¬ìŠ¤í„° í¬ê¸°ëŠ”(%2$dk여야 "
+"하지만) %1$dk 입니다. ë˜í•œ í´ëŸ¬ìŠ¤íŠ¸ 갯수는(%4$dk여야 하지만) %3$dkê°œ 입니다. "
+"FATì˜ ì„¹í„° 갯수는(%6$d개여야 하지만) %5$d개입니다."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"íŒŒì¼ ì‹œìŠ¤í…œ 여분 공간 í´ëŸ¬ìŠ¤í„° 갯수가 %2$d개가 ì•„ë‹Œ %1$d개로 나타납니다."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"모든 파ì¼ì— 대한 루트 디렉터리 ê³µê°„ì´ ì¶©ë¶„í•˜ì§€ 않습니다. 취소를 누르십시오. "
+"ë˜ëŠ” 무시를 누르시면 파ì¼ì´ 없어집니다."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "루트 디렉터리 ê¸°ë¡ ì¤‘ 오류."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "FAT16 íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ ë‘ë©´, 문제가 나타나지 않습니다."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"FAT16으로 변환하고 MS 윈ë„우를 설치하면 MS 윈ë„ìš° 부트로ë”ë„ ë‹¤ì‹œ 설치해야합"
+"니다. ì´ë ‡ê²Œ 하려면 Parted 설명서(ë˜ëŠ” ë°°í¬íŒ 설명서)를 참고하십시오."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì„ FAT32ë¡œ ë‘ë©´, 새 문제가 나타나지 않습니다."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"FAT32ë¡œ 변환하고 MS 윈ë„우를 ì´ ë¶„í•  ì˜ì—­ì— 설치하면 MS 윈ë„ìš° 부트 ë¡œë”를 다"
+"ì‹œ 설치해야합니다. 지침대로 수행하려면 Parted 설명서(ë˜ëŠ” ë°°í¬íŒ 설명서)를 ì°¸"
+"고하십시오. ë˜í•œ FAT32ë¡œ 변환하면 MS DOS, MS 윈ë„ìš°, MS 윈ë„ìš° NTì—ì„œ íŒŒì¼ ì‹œ"
+"ìŠ¤í…œì„ ì¸ì‹í•  수 없습니다."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "FAT32를 사용하시겠습니까?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "FAT16으로 변환해야 íŒŒì¼ ì‹œìŠ¤í…œ í¬ê¸°ë¥¼ 조절할 수 있습니다."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "FAT32ë¡œ 변환해야 íŒŒì¼ ì‹œìŠ¤í…œ í¬ê¸°ë¥¼ 조절할 수 있습니다."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Partedì—ì„œ 분할 ì˜ì—­ì„ ì´ í¬ê¸°ë¡œ 조절할 수 없습니다. ì´ ë¬¸ì œë¥¼ 처리중입"
+"니다!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"%d FATì˜ %x 미디어는 부트 ì„¹í„°ì˜ %x 미디어와 ì¼ì¹˜í•˜ì§€ 않습니다. scandisk를 실"
+"행하십시오."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: %ld í´ëŸ¬ìŠ¤í„°ëŠ” íŒŒì¼ ì‹œìŠ¤í…œ ë°–ì— ìžˆìŠµë‹ˆë‹¤"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: %ld í´ëŸ¬ìŠ¤í„°ëŠ” íŒŒì¼ ì‹œìŠ¤í…œ ë°–ì— ìžˆìŠµë‹ˆë‹¤"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: ì—¬ë¶„ì˜ í´ëŸ¬ìŠ¤í„°ê°€ 없습니다"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì„ ë°œê²¬í•  수 없습니다."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "%s íŒŒì¼ ì‹œìŠ¤í…œ í¬ê¸° ì¡°ì ˆ ê¸°ëŠ¥ì„ ì§€ì›í•˜ì§€ 않습니다"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì€ ì´ ë³¼ë¥¨ë³´ë‹¤ 커야합니다!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œì— ì˜¤ë¥˜ê°€ 있습니다."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "불량 블ë¡ì„ ì½ì„ 수 없습니다."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"0x%X 블ë¡ì—ì„œ 시작하는 범위 정보를 등ë¡í•˜ë ¤ 했지만, ì´ë¯¸ ì´ ìœ„ì¹˜ì— ë‹¤ë¥¸ ì •ë³´"
+"ê°€ 있습니다. íŒŒì¼ ì‹œìŠ¤í…œì„ ê²€ì‚¬í•˜ì‹­ì‹œì˜¤!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"0x%X번 블ë¡ì—ì„œ 0x%X번 블ë¡ìœ¼ë¡œ 범위 ì •ë³´ ì´ë™ì„ ì‹œë„했지만, ì´ ìœ„ì¹˜ì— ë‹¤ë¥¸ "
+"범위 ì •ë³´ê°€ 있습니다. ì´ ë™ìž‘ì„ ì‹œë„하면 안ë©ë‹ˆë‹¤!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "%X CNIDë¡œ HFS 파ì¼ì˜ 범위 ì •ë³´ ìºì‹œë¥¼ ì—…ë°ì´íŠ¸í•  수 없습니다."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "EOF ì´ì „ì˜ %X CNIDë¡œ HFS 파ì¼ì„ ì½ìœ¼ë ¤ 합니다."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "%2$X CNIDë¡œ HFS 파ì¼ì˜ %1$lli 섹터를 ì°¾ì„ ìˆ˜ 없습니다."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "EOF ì´ì „ì˜ %X CNIDë¡œ HFS 파ì¼ì„ 기ë¡í•˜ë ¤ 합니다."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "%X CNIDë¡œ HFS+ 파ì¼ì˜ 범위 ì •ë³´ ìºì‹œë¥¼ ì—…ë°ì´íŠ¸í•  수 없습니다."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "EOF ì´ì „ì˜ %X CNIDë¡œ HFS+ 파ì¼ì„ ì½ìœ¼ë ¤ 합니다."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "%2$X CNIDë¡œ HFS+ 파ì¼ì˜ %1$lli 섹터를 ì°¾ì„ ìˆ˜ 없습니다."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "EOF ì´ì „ì˜ %X CNIDë¡œ HFS+ 파ì¼ì— 기ë¡í•˜ë ¤ 합니다."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "죄송하지만, HFS í¬ê¸°ë¥¼ ì´ ë°©ì‹ìœ¼ë¡œ 조절할 수 없습니다."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "í¬ê¸° 줄ì´ëŠ” 중"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "ë°ì´í„° ìž¬ë°°ì¹˜ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "ë°ì´í„° 재배치 중 볼륨 마지막 ë¶€ë¶„ì— ì¼ë¶€ ë°ì´í„°ê°€ 남았습니다."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "HFS 마스터 디렉터리 ë¸”ë¡ ê¸°ë¡ ì¤‘"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "여는 중 유효한 HFS[+X] ì„œëª…ì„ ì°¾ì§€ 못했습니다."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "HFS+ %d ë²„ì „ì€ ì§€ì›í•˜ì§€ 않습니다."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "HFSX %d ë²„ì „ì€ ì§€ì›í•˜ì§€ 않습니다."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "ë°ì´í„° 재배치 중 볼륨 마지막 ë¶€ë¶„ì— ì¼ë¶€ ë°ì´í„°ê°€ 남았습니다."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "할당 파ì¼ì„ 기ë¡í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "할당 파ì¼ì˜ 호환성 ë¶€ë¶„ì„ ê¸°ë¡í•˜ëŠ” 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "HFS+ 볼륨 í—¤ë” ê¸°ë¡ ì¤‘"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "필수 불량 ë¸”ë¡ íŒŒì¼ì„ 찾는 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"HFS 래í¼ì— 오류가 있는 것 같습니다. 불량 ë¸”ë¡ íŒŒì¼ì— 내장 HFS+ 볼륨 ì •ë³´ê°€ ì—†"
+"습니다."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "죄송하지만, HFS+ í¬ê¸°ë¥¼ ì´ ë°©ì‹ìœ¼ë¡œ 조절할 수 없습니다."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "내장 HFS+ 볼륨 í¬ê¸° 줄ì´ëŠ” 중"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "HFS+ 볼륨 í¬ê¸° ì¡°ì ˆì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "HFS ëž˜í¼ í¬ê¸° 줄ì´ëŠ” 중"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "HFS ëž˜í¼ ì—…ë°ì´íŠ¸ì— 실패했습니다."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"실제로 %s 검사를 진행하지 않습니다. 디버깅 목ì ìœ¼ë¡œ ì € 수준 파ì¼ì„ 추출합니"
+"다."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "불량 ë¸”ë¡ ëª©ë¡ í—¤ë”ì˜ ê²€ì‚¬í•©ìž…ë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"ì €ë„ì„ ìž¬í˜„í•˜ëŠ” ë™ì•ˆ 트랜잭션 ë¸”ë¡ í¬ê¸°ê°€ 잘못ë¨ì„ 발견했습니다(%ië°”ì´íŠ¸)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"볼륨 ë°–ì— ìžˆëŠ” ì €ë„ì„ ì§€ì›í•˜ì§€ 않습니다. ì €ë„ì„ ë¹„í™œì„±í™”í•œ 후 Parted를 다시 "
+"실행하십시오."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "ì €ë„ ì˜¤í”„ì…‹ ë˜ëŠ” í¬ê¸°ê°€ 섹터 í¬ê¸°ì˜ 배수가 아닙니다."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "ì €ë„ í—¤ë”ì˜ ë§¤ì§ ê°’ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "ì €ë„ ì •ë³´ ë¸”ë¡ ë° ì €ë„ í—¤ë”ê°„ ì €ë„ í¬ê¸° ê°’ì´ ì¼ì¹˜í•˜ì§€ 않습니다."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "ì¼ë¶€ í—¤ë” í•„ë“œ ê°’ì€ ì„¹í„° í¬ê¸°ì˜ 배수가 아닙니다."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"ì €ë„ì— ì €ìž¥í•œ 섹터 í¬ê¸°ê°€ 512 ë°”ì´íŠ¸ê°€ 아닙니다. Partedì—서는 512 ë°”ì´íŠ¸ 길"
+"ì´ ì„¹í„°ë§Œ 지ì›í•©ë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ìž˜ëª»ëœ ì €ë„ ê²€ì‚¬í•©."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"ì €ë„ì´ ë¹„ì–´ìžˆì§€ 않습니다. Partedì—서는 íŒŒì¼ ì‹œìŠ¤í…œì„ ì—´ê¸° ì „ì— íŠ¸ëžœìž­ì…˜ì„ ë‹¤"
+"ì‹œ 수행해야합니다. ì´ ë™ìž‘으로 íŒŒì¼ ì‹œìŠ¤í…œì„ ìˆ˜ì •í•©ë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"ì €ë„ì„ ìž¬í˜„í•˜ëŠ” ë™ì•ˆ 볼륨 í—¤ë” ë˜ëŠ” 주 디렉터리 블ë¡ì„ 바꾸었습니다. Parted"
+"를 다시 시작해야합니다."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "범위 정보를 다시 배치하지 않았습니다."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"범위 ì •ë³´ 참조를 ë‘지 ë§ì•„야 í•  ê³³ì— ë‘었습니다. íŒŒì¼ ì‹œìŠ¤í…œì„ ê²€ì‚¬í•˜ì‹­ì‹œì˜¤!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "HFS ë³¼ë¥¨ì— ì¹´íƒˆë¡œê·¸ 파ì¼ì´ 없습니다. ìƒë‹¹ížˆ 드문 ì¼ìž…니다!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "HFS ë³¼ë¥¨ì— ë²”ìœ„ ì •ë³´ 오버플로우 파ì¼ì´ 없습니다. ìƒë‹¹ížˆ 드문 ì¼ìž…니다!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"ìžì²´ 범위 ì •ë³´ì— ë²”ìœ„ ì •ë³´ 오버플로우 파ì¼ì´ 들어있으면 안ë©ë‹ˆë‹¤! íŒŒì¼ ì‹œìŠ¤í…œ"
+"ì„ ê²€ì‚¬í•˜ì‹­ì‹œì˜¤."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "ë©”ëª¨ë¦¬ì— íŒŒì¼ ì‹œìŠ¤í…œì„ ìºì‹±í•  수 없습니다."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "불량 ë¸”ë¡ ëª©ë¡ì„ 불러올 수 없습니다."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "범위 ì •ë³´ 재배치를 수행하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "HFS+ ë³¼ë¥¨ì— ì¹´íƒˆë¡œê·¸ 파ì¼ì´ 없습니다. ìƒë‹¹ížˆ 드문 ì¼ìž…니다!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"HFS+ ë³¼ë¥¨ì— ë²”ìœ„ ì •ë³´ 오버플로우 파ì¼ì´ 없습니다. ìƒë‹¹ížˆ 드문 ì¼ìž…니다!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "ë„ì›€ë§ ë©”ì‹œì§€ë¥¼ 나타냅니다"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "모든 ë¸”ë¡ ìž¥ì¹˜ì˜ ë¶„í•  ì˜ì—­ 배치를 나타냅니다"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "기계 í•´ì„ ê°€ëŠ¥í•œ ì¶œë ¥ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "JSON ì¶œë ¥ì„ í‘œì‹œí•©ë‹ˆë‹¤"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "ì‚¬ìš©ìž ê°œìž… 여부를 묻지 ì•ŠìŒ"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "스í¬ë¦½íŠ¸ 모드ì—서는, 물어볼 ë•Œ 멈추는 대신 수정합니다"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "버전 정보를 나타냅니다"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "새 분할 ì˜ì—­ì˜ ì •ë ¬ ë°©ì‹"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"<번호>는 리눅스ì—ì„œ 사용하는 분할 ì˜ì—­ 번호입니다. MS-DOS ë””ìŠ¤í¬ ë ˆì´ë¸”ì—ì„œ, "
+"주 분할 ì˜ì—­ 번호는 1부터 4까지, 논리 분할 ì˜ì—­ì€ 5 ì´í›„입니다.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "<ë ˆì´ë¸” 형ì‹>ì€ ë‹¤ìŒ ì¤‘ 하나입니다:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "<플래그>는 ë‹¤ìŒ ì¤‘ 하나입니다:"
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "<단위>는 ë‹¤ìŒ ì¤‘ 하나입니다:"
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "ì ì ˆí•œ 정렬값: minimum ë˜ëŠ” optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "<분할 ì˜ì—­ 형ì‹>ì€ ë‹¤ìŒ ì¤‘ 하나입니다: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "<íŒŒì¼ ì‹œìŠ¤í…œ 형ì‹> ì€ ë‹¤ìŒ ì¤‘ 하나입니다:"
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"<시작>ê³¼ <ë>ì€ 4GB ë˜ëŠ” 10% ê°™ì€ ë””ìŠ¤í¬ ìœ„ì¹˜ìž…ë‹ˆë‹¤. ìŒìˆ˜ ê°’ì€ ë””ìŠ¤í¬ ë’·ë¶€ë¶„"
+"부터 계산한 값입니다. 예를 들면, -1ì€ ì •í™•ížˆ 마지막 섹터를 가리킵니다.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"<ë>ì€ 4GB ë˜ëŠ” 10% ê°™ì€ ë””ìŠ¤í¬ ìœ„ì¹˜ìž…ë‹ˆë‹¤. ìŒìˆ˜ ê°’ì€ ë””ìŠ¤í¬ ë’·ë¶€ë¶„ë¶€í„° 계산"
+"í•œ 값입니다. 예를 들면, -1ì€ ì •í™•ížˆ 마지막 섹터를 가리킵니다.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "<ìƒíƒœ>는 on, off 둘 중 하나입니다\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "<장치>는 보통 /dev/hda ë˜ëŠ” /dev/sda입니다\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "<ì´ë¦„>ì€ ì›í•˜ëŠ” ì–´ë–¤ 단어든 들어갑니다\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(ë‚¨ì€ ì‹œê°„: %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "%s 분할 ì˜ì—­ì„ 사용중입니다. ì •ë§ ê³„ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "%sì˜ ë¶„í•  ê³µê°„ì„ ì‚¬ìš© 중입니다."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"%sì˜ ê¸°ì¡´ ë””ìŠ¤í¬ ë ˆì´ë¸”ì„ ì—†ì• ë©° 디스í¬ì˜ 모든 ë°ì´í„°ê°€ 사ë¼ì§‘니다. 계ì†í•˜ì‹œ"
+"겠습니까?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "새 ë””ìŠ¤í¬ ë ˆì´ë¸” 형ì‹?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "분할 ì˜ì—­ 형ì‹?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "분할 ì˜ì—­ ì´ë¦„?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 형ì‹?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "시작�"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "ëì ?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"%s부터 %s까지(%llu..%llu 섹터) ì˜ì—­ ë¶„í• ì„ ìš”ì²­í–ˆìŠµë‹ˆë‹¤.\n"
+"관리할 수 있는 가까운 위치는 %s부터 %s까지(%llu..%llu 섹터)입니다.%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"여전히 만족합니까?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"ìµœì  ì„±ëŠ¥ì„ ëª©ì ìœ¼ë¡œ 분할 ì˜ì—­ 배치 과정ì—ì„œ 제대로 정렬하지 않았습니다: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "ì•Œ 수 ì—†ìŒ(malloc 실패)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s ë””ìŠ¤í¬ ë ˆì´ë¸”ì€ ë¶„í•  ì˜ì—­ ì´ë¦„ì„ ì§€ì›í•˜ì§€ 않습니다."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "분할 ì˜ì—­ 번호?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s ë””ìŠ¤í¬ ë ˆì´ë¸”ì€ ë¶„í•  ì˜ì—­ ì´ë¦„ì„ ì§€ì›í•˜ì§€ 않습니다."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "분할 ì˜ì—­ 형ì‹?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "ìž˜ëª»ëœ ìˆ«ìž ê°’."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "분할 ì˜ì—­ 형ì‹?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "ìž˜ëª»ëœ ìˆ«ìž ê°’."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS 실린ë”,헤드,섹터 í¬ê¸°: %d,%d,%d. ê° ì‹¤ë¦°ë”는 %s 입니다.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "모ë¸: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "%s 디스í¬: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "섹터 í¬ê¸°(논리/실제): %lld/B%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "분할 ì˜ì—­ í…Œì´ë¸”: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "ë””ìŠ¤í¬ í”Œëž˜ê·¸: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "번호"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "시작"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "ë"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "í¬ê¸°"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "형ì‹"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "ì´ë¦„"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "플래그"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "여분 공간"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"%s %s 분할 ì˜ì—­ì„ %s->%sì—ì„œ 찾았습니다. ì´ ë¶„í•  ì˜ì—­ì„ 분할 ì˜ì—­ í…Œì´ë¸”ì— ì¶”"
+"가하시겠습니까?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 검색 중"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Parted 3.0ì—ì„œ resize ëª…ë ¹ì„ ì œê±°í–ˆìŠµë‹ˆë‹¤"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"분할 ì˜ì—­ ê³µê°„ì„ ì¤„ì´ë©´ ë°ì´í„°ë¥¼ ìžƒì„ ìˆ˜ 있습니다. ì •ë§ë¡œ 계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "새 장치?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "ì •ë ¬ 형ì‹(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "분할 ì˜ì—­ %dì€(는) ì •ë ¬ ìƒíƒœìž„\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+"%dë²ˆì„ ì •ë ¬í•˜ì§€ ì•ŠìŒ: %s\n"
+"\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "반전할 플래그?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "새 ìƒíƒœ?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "단위?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check <형ì‹> <번호> <번호> 분할 ì˜ì—­ì˜ 지정 <형ì‹"
+">(min|opt) ì •ë ¬ ìƒíƒœë¥¼ 검사합니다"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [<명령>] ì¼ë°˜ ë„ì›€ë§ ë˜ëŠ” <명령> ë„움ë§ì„ 출력"
+"합니다"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable <ë ˆì´ë¸” 형ì‹> 새 ë””ìŠ¤í¬ ë ˆì´ë¸”(분할 ì˜ì—­ í…Œì´ë¸”)"
+"ì„ ë§Œë“­ë‹ˆë‹¤"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr ""
+"mkpart <분할 ì˜ì—­ 형ì‹> [<íŒŒì¼ ì‹œìŠ¤í…œ 형ì‹>] <시작> <ë> 분할 ì˜ì—­ì„ 만듭"
+"니다"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"‘mkpart’는 분할 ì˜ì—­ì— 새 íŒŒì¼ ì‹œìŠ¤í…œì„ ë§Œë“¤ì§€ ì•Šê³  분할 ì˜ì—­ì„ 만듭니다. <파"
+"ì¼ ì‹œìŠ¤í…œ 형ì‹>ì— ì ë‹¹í•œ 분할 ì˜ì—­ ID를 설정해야 합니다.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name <번호> <ì´ë¦„> <번호> 분할 ì˜ì—­ì˜ ì´ë¦„ì„ <ì´ë¦„>으"
+"로 지정합니다"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] 분할 ì˜ì—­ í…Œì´ë¸”, 존재 장치, 여분 공간, ë°œ"
+"견한 모든 분할 ì˜ì—­ì„ 나타냅니다"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"‘print’ ëª…ë ¹ì— ì¸ìžë¥¼ 빼면 ì „ì²´ 분할 ì˜ì—­ í…Œì´ë¸”ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤. 하지만 ë‹¤ìŒ ì¸"
+"ìž ê°’ì„ ë„£ìœ¼ë©´ 다양한 다른 ë™ìž‘ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : 모든 활성 ë¸”ë¡ ìž¥ì¹˜ë¥¼ 나타냅니다\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : 현재 ë¸”ë¡ ìž¥ì¹˜ì—ì„œ 분할 ì˜ì—­ìœ¼ë¡œ 지정하지 ì•Šì€ ì—¬ë¶„ì˜ ê³µê°„ ì •ë³´"
+"를 나타냅니다\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr " list, all : 모든 활성 ë¸”ë¡ ìž¥ì¹˜ì˜ ë¶„í•  ì˜ì—­ í…Œì´ë¸”ì„ ë‚˜íƒ€ëƒ…ë‹ˆë‹¤\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit í”„ë¡œê·¸ëž¨ì„ ë¹ ì ¸ 나갑니다"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue <시작> <ë> <시작> ë° <ë> ì˜ì—­ ì£¼ë³€ì˜ ì†Œì‹¤ 분"
+"í•  ì˜ì—­ì„ ë³µì›í•©ë‹ˆë‹¤"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Parted 3.0ì—ì„œ resize ëª…ë ¹ì„ ì œê±°í–ˆìŠµë‹ˆë‹¤\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart <번호> <ë> <번호> 분할 ì˜ì—­ì˜ í¬ê¸°ë¥¼ 조절합니"
+"다"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm <번호> <번호> 분할 ì˜ì—­ì„ 삭제합니다"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select <장치> 편집할 장치를 ì„ íƒí•©ë‹ˆë‹¤"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set <플래그> <ìƒíƒœ> ì„ íƒí•œ ìž¥ì¹˜ì˜ <플래그> ê°’ì„ ë°”"
+"꿉니다"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [<플래그>] ì„ íƒí•œ ìž¥ì¹˜ì˜ <플래그> ìƒíƒœë¥¼ ì „"
+"환합니다"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set <번호> <플래그> <ìƒíƒœ> <번호> 분할 ì˜ì—­ì˜ <플래그> ê°’"
+"ì„ ë°”ê¿‰ë‹ˆë‹¤"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [<번호> [<플래그>]] <번호> 분할 ì˜ì—­ì˜ <플래그> ìƒíƒœ"
+"를 전환합니다"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit <단위> 기본 단위를 <단위> 값으로 설정합니"
+"다"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version GNU Partedì˜ ë²„ì „ 번호와 저작 ì •ë³´"
+"를 나타냅니다"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"‘version’ ëª…ë ¹ì€ GNU Parted 사본과 ê´€ë ¨ëœ ì €ìž‘ 정보와 버전 정보를 나타냅니"
+"다\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"사용법: %s [-hlmsfv] [-a<정렬방ì‹>] [<장치> [<명령> [<매개변수>]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "장치가 없습니다"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "경고: 관리ìžê°€ 아닙니다. ê¶Œí•œì„ í™•ì¸í•˜ì‹­ì‹œì˜¤.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"다시 부팅하기 ì „ 부트 ë¡œë”를 다시 설치해야 합니다. ìžì„¸í•œ 정보는 Parted 사용"
+"ìž ë¬¸ì„œ 4ìž¥ì„ ì‚´íŽ´ë³´ì‹­ì‹œì˜¤."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "/etc/fstab 정보를 ì—…ë°ì´íŠ¸í•´ì•¼ 합니다.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"GNU Parted ì‚¬ìš©ì„ í™˜ì˜í•©ë‹ˆë‹¤! 명령 목ë¡ì„ 보려면 ‘help’를 입력하십시오.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"사용법: parted [<옵션>]... [<장치> [<명령> [<매개변수>]...]...]\n"
+"<매개변수>를 ë¶™ì¸ <명령>ì„ <장치>ì— ì ìš©í•©ë‹ˆë‹¤. <명령>ì´ ì—†ìœ¼ë©´\n"
+"ëŒ€í™”ì‹ ëª¨ë“œë¡œ 실행합니다.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"GNU Partedì˜ ë²„ê·¸ë¥¼ 찾았습니다! 해야 í•  ì¼ì´ 있습니다:\n"
+"\n"
+"ì ˆë§í•˜ì§€ 마십시오! ëŒ€ë¶€ë¶„ì€ ì–´ë–¤ ë°ì´í„°ì—ë„ ì˜í–¥ì„ 주지 않는 버그입니다.\n"
+"ë‹¤ìŒ ì ˆì°¨ë¥¼ ë”°ë¼ ë²„ê·¸ ìˆ˜ì •ì„ ë„와주십시오:\n"
+"\n"
+"ë‹¤ìŒ ì£¼ì†Œì—ì„œ GNU Parted 최신 ë²„ì „ì„ ë°›ì•„ ì´ë¯¸ 버그를 고쳤는지 \n"
+"확ì¸í•˜ì‹­ì‹œì˜¤:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"버그를 보고하기 ì „ ì´ ë²„ì „ì„ í™•ì¸í•˜ì‹­ì‹œì˜¤.\n"
+"\n"
+"ì•„ì§ ìˆ˜ì •í•˜ì§€ 않았거나 í™•ì¸ ë°©ë²•ì„ ëª¨ë¥´ì‹ ë‹¤ë©´, GNU Parted 웹 \n"
+"사ì´íŠ¸ì— 방문하십시오:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"여기서 ìžì„¸í•œ 정보를 찾아보십시오.\n"
+"\n"
+"ë³´ê³ ì„œì—는 ì´ ë¦´ë¦¬ìŠ¤ 버전(%s)ê³¼ í•˜ë‹¨ì˜ ì˜¤ë¥˜ 메시지 출력\n"
+"ë‚´ìš©ì„ í•¨ê»˜ 넣으셔야합니다\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"그리고 ì—¬ëŸ¬ë¶„ì´ ìž…ë ¥í•œ ë‹¤ìŒ ëª…ë ¹ 기ë¡ì„ 넣으십시오.\n"
+"ë˜í•œ 중요하다고 ìƒê°í•˜ëŠ” 추가 설정 ì •ë³´ë„ ë„£ìœ¼ì‹­ì‹œì˜¤.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"명령 기ë¡:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"오류: SEGV_MAPERR (ê°ì²´ì— 주소를 매핑하지 ì•ŠìŒ)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"오류: SEGV_ACCERR (매핑할 오브ì íŠ¸ì— 접근할 권한 ì—†ìŒ)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"오류: ì¼ë°˜ SIGSEGV 시그ë„ì´ ë°œìƒí–ˆìŠµë‹ˆë‹¤.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"오류: FPE_INTDIV (정수: 0 나누기 오류)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"오류: FPE_INTOVF (정수: 오버플로우)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"오류: FPE_FLTDIV (실수: 0 나누기 오류)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"오류: FPE_FLTOVF (실수: 오버플로우)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"오류: FPE_FLTUND (실수: ì–¸ë”플로우)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"오류: FPE_FLTRES (실수: 부정확한 결과)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"오류: FPE_FLTINV (실수: ìž˜ëª»ëœ ì—°ì‚°)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"오류: FPE_FLTSUB (실수: 아래 ì²¨ìž ë²”ìœ„ 벗어남)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"오류: ì¼ë°˜ SIGFPE 시그ë„ì´ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"오류: ILL_ILLOPC (ìž˜ëª»ëœ ê¸°ê³„ì–´ 코드)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"오류: ILL_ILLOPN (ìž˜ëª»ëœ ê¸°ê³„ì–´ ì¸ìž)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"오류: ILL_ILLADR (ìž˜ëª»ëœ ì£¼ì†Œ 모드)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"오류: ILL_ILLTRP (ìž˜ëª»ëœ íŠ¸ëž© 처리)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"오류: ILL_PRVOPC (ê¶Œí•œì´ í•„ìš”í•œ 기계어 코드)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"오류: ILL_PRVREG (ê¶Œí•œì´ í•„ìš”í•œ 레지스터 ì ‘ê·¼)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"오류: ILL_COPROC (코프로세서 오류)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"오류: ILL_BADSTK (내부 ìŠ¤íƒ ì˜¤ë¥˜)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"오류: ì¼ë°˜ SIGILL 시그ë„ì´ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "ìž˜ëª»ëœ í† í°: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "분할 ì˜ì—­ 번호가 필요합니다."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "분할 ì˜ì—­ì´ 없습니다."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 형ì‹ì´ 필요합니다."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "ì•Œ 수 없는 íŒŒì¼ ì‹œìŠ¤í…œ í˜•ì‹ â€œ%sâ€."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "ë””ìŠ¤í¬ ë ˆì´ë¸” 형ì‹ì´ 필요합니다."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "지ì›í•˜ëŠ” 플래그 ì—†ìŒ"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "ë” ì´ìƒì˜ 분할 ì˜ì—­ì„ 만들 수 없습니다."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "분할 ì˜ì—­ 형ì‹ì´ 필요합니다."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "옵션:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "명령:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"%sì— ë²„ê·¸ë¥¼ 보고하십시오\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "%s 사용법\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "ì´ ëª…ë ¹ì€ ë¹„ ëŒ€í™”ì‹ ëª¨ë“œì—ì„œ ë™ìž‘하지 않습니다.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "확장 분할 ì˜ì—­ì€ MSDOS ë””ìŠ¤í¬ ë ˆì´ë¸”ì—ì„œ 숨길 수 없습니다."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "확장 분할 ì˜ì—­ì€ MSDOS ë””ìŠ¤í¬ ë ˆì´ë¸”ì—ì„œ 복구 분할 ì˜ì—­ìœ¼ë¡œ 지정할 수 없습"
+#~ "니다."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr " <번호> : ì´ ë¶„í•  ì˜ì—­ì˜ ìžì„¸í•œ 정보를 나타냅니다\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: ‘--%s’ ì˜µì…˜ì€ ì¸ìžë¥¼ 허용하지 않습니다\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: ì¸ì‹í•  수 없는 ’--%s’ 옵션\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: ‘-W %s’ ì˜µì…˜ì€ ì¸ìžë¥¼ 허용하지 않습니다\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: ‘-W %s’ ì˜µì…˜ì€ ì¸ìžê°€ 필요합니다\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s 홈페ì´ì§€: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ìž˜ëª»ëœ %s%s ì¸ìž ‘%s’"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "%s%s ì¸ìžì˜ '%s'ì— ìž˜ëª»ëœ ì ‘ë¯¸ë¶€"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s ì¸ìžì˜ ‘%s’ì´(ê°€) 너무 í½ë‹ˆë‹¤"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "분할 ì˜ì—­ í…Œì´ë¸”ì„ ë‹¤ì‹œ ì½ì„ 수 없습니다. 수정한 분할 ì˜ì—­ì„ 마운트하기 ì „"
+#~ "ì— ë‹¤ì‹œ 부팅해야 합니다. 다시 부팅하기 ì „ì— ë¶€íŠ¸ ë¡œë”를 다시 설치해야 합니"
+#~ "다(수정한 분할 ì˜ì—­ì„ 마운트하려면 필요합니다). ë‘ ê°€ì§€ë¥¼ 다 처리할 수 ì—†"
+#~ "습니다. 복구 디스í¬ë¡œ 부팅하고 복구 디스í¬ë¡œ 부트 ë¡œë”를 다시 설치해야 í•©"
+#~ "니다. ìžì„¸í•œ 정보는 Parted ì‚¬ìš©ìž ë¬¸ì„œ 4ìž¥ì„ ì‚´íŽ´ë³´ì‹­ì‹œì˜¤."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "%sì˜ ë¶„í•  ì˜ì—­ í…Œì´ë¸”ì„ ë‹¤ì‹œ ì½ì„ 수 없습니다(%s). Hurdì—ì„œ 수정 ë‚´ì—­ì„ íŒŒ"
+#~ "악하지 못합니다. %s(으)ë¡œ 무언가를 진행하기 ì „ì— ì»´í“¨í„°ë¥¼ 다시 부팅해야 í•©"
+#~ "니다."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "부트 ì˜ì—­ì´ 분할 ì˜ì—­ 시작 지ì ì—ì„œ 시작하지 않았습니다."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "ì´ íŒŒì¼ ì‹œìŠ¤í…œì˜ ë…¼ë¦¬ 섹터 í¬ê¸°ê°€ %d ë°”ì´íŠ¸ 입니다. GNU Partedì—서는 섹터 "
+#~ "í¬ê¸°ê°€ 512 ë°”ì´íŠ¸ ì´ìƒì¸ 경우 제대로 ë™ìž‘하지 않습니다."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "%s 파ì¼ì€ 시스템 파ì¼ìž…니다. ì´ íŒŒì¼ì„ 옮기면 ì¼ë¶€ í”„ë¡œê·¸ëž¨ì˜ ë™ìž‘ì´ ë©ˆì¶¥"
+#~ "니다."
diff --git a/po/nl.gmo b/po/nl.gmo
new file mode 100644
index 0000000..c6088f2
--- /dev/null
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..bdc78cc
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,3791 @@
+# Dutch translations for GNU parted.
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# "Zeven collega's bleven stoïcijns backspacen dat het een lieve lust was."
+#
+# Benno Schulenberg <benno@vertaalt.nl>, 2005, 2006, 2007, 2010, 2011, 2012, 2014, 2021, 2022.
+# Erwin Poeze <erwin.poeze@gmail.com>, 2010.
+# Ivo Timmermans <ivo@o2w.nl>, 2000.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-13 09:50+0200\n"
+"Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ongeldig argument %s van %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument %s van %s is niet eenduidig"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Geldige argumenten zijn:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "schrijffout"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Onbekende systeemfout"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: optie '%s%s' is niet eenduidig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: optie '%s%s' is niet eenduidig; mogelijkheden zijn:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: onbekende optie '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: optie '%s%s' staat geen argument toe\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: optie '%s%s' vereist een argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ongeldige optie -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: optie vereist een argument -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "‘"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "’"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Gelukt"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Geen overeenkomsten"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ongeldige reguliere expressie"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ongeldig samengesteld teken"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ongeldige tekenklassenaam"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Backslash aan het eind"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Ongeldige terugverwijzing"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Ongepaarde [, [^, [:, [., of [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Ongepaarde ( of \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Ongepaarde \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Ongeldige inhoud van \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ongeldig bereikeinde"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Onvoldoende geheugen beschikbaar"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ongeldige voorafgaande reguliere expressie"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Voortijdig einde van reguliere expressie"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Reguliere expressie is te groot"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Ongepaarde ) of \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Geen eerdere reguliere expressie"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[jJyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "In pakketvorm gebracht door %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "In pakketvorm gebracht door %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n"
+"De precieze licentie is GPL-3+: GNU General Public License versie 3 of "
+"later.\n"
+"Zie <%s> voor de volledige (Engelse) tekst.\n"
+"Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Geschreven door %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Geschreven door %s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Geschreven door %s, %s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s\n"
+"en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s, %s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s, %s, %s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s en %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Geschreven door %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s en anderen.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"Rapporteer gebreken in het programma aan <%s>;\n"
+"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+"Rapporteer gebreken in het programma '%s' aan <%s>;\n"
+"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Webpagina van %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Algemene hulp bij gebruik van GNU-software: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "onvoldoende geheugen beschikbaar"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Schijfimage"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Fout tijdens openen van %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Kan %s niet openen voor lezen-en-schrijven (%s); %s is geopend voor alleen-"
+"lezen."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s tijdens een 'seek' bij het lezen van %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s tijdens lezen van %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Kan niet naar %s schrijven, omdat het geopend is voor alleen-lezen."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s tijdens een 'seek' bij het schrijven naar %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s tijdens schrijven naar %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Typ '%s --help' voor meer informatie.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Gebruik: %s [OPTIE] [APPARAAT]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Het besturingssysteem informeren over veranderingen in een partitietabel.\n"
+"\n"
+" -d, --dry-run het besturingssysteem niet informeren, maar doen alsof\n"
+" -s, --summary een samenvatting van de inhoud tonen\n"
+" -h, --help deze hulptekst tonen en stoppen\n"
+" -v, --version programmaversie tonen en stoppen\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Zonder APPARAAT worden alle beschikbare apparaten onderzocht.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapporteer gebreken in het programma aan <%s>;\n"
+"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Kan %s niet openen."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Kan de logische opbouw van het apparaat niet achterhalen."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"WAARSCHUWING: de kernel kan de partitietabel op %s niet opnieuw lezen (%s). "
+"Dit kan als gevolg hebben dat het niet al uw aanpassingen weergeeft tot na "
+"een herstart."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Waarschuwing: kan %s niet openen (%s). Dit kan als gevolg hebben dat het "
+"niet al uw aanpassingen weergeeft tot na een herstart."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Waarschuwing: kan translator op %s niet verwijderen (%s). Dit kan als "
+"gevolg hebben dat het niet al uw aanpassingen weergeeft tot na een herstart."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s: bezig met synchroniseren van %s naar schijf"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Kan de status van apparaat '%s' niet opvragen -- %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Kan het apparaattype van '%s' niet achterhalen."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Kan de sectorgrootte van %s niet achterhalen: %s.\n"
+"De standaard sectorgrootte (%lld) wordt gebruikt."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Kan de fysieke sectorgrootte van %s niet achterhalen.\n"
+"De logische sectorgrootte (%lld) wordt gebruikt."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Kan de grootte van %s niet achterhalen -- %s."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Gewone IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Kan de identiteit van apparaat %s niet achterhalen -- %s."
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Apparaat %s bevat per fysieke sector meerdere (%d) logische sectoren.\n"
+"GNU Parted ondersteunt dit op EXPERIMENTELE basis voor sommige combinaties "
+"van\n"
+"schijflabel en bestandssysteem, bijvoorbeeld GPT met ext2/3.\n"
+"Zie de website van Parted voor de laatste informatie."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Fout tijdens initialiseren van SCSI-apparaat %s -- %s."
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Apparaat %s is zo klein dat het onmogelijk een bestandssysteem of\n"
+"partitietabel kan bevatten. Hebt u misschien een verkeerd apparaat gekozen?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Kan de logische opbouw van het apparaat %s niet achterhalen.\n"
+"U kunt Parted beter niet gebruiken tenzij u ECHT weet wat u doet!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Algemeen SD/MMC-geheugenkaart"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe-apparaat"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID-stuurapparaat"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA-apparaat"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA-over-Ethernet-apparaat"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD-schijf"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries virtuele DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array-stuurapparaat"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM-apparaat"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID-stuurapparaat"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O-stuurapparaat"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux-blokapparaat (UBD)"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Lus-apparaat"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen virtueel blokapparaat"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "(onbekend)"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio-blokapparaat"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux-Software-RAID-array"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM-schijf"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "Apparaattype wordt niet ondersteund."
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Fout tijdens fsyncing/sluiten van %s: %s"
+
+# Dit is een maffe manier (%0.0s) om de eerste parameter te negeren.
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sbestandseinde tijdens lezen van %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Er is een fout opgetreden tijdens het informeren van de kernel over de "
+"wijzigingen aan partitie %s -- %s. Dit betekent dat Linux geen weet heeft "
+"van de veranderingen die u net hebt gemaakt aan %s totdat u uw computer "
+"herstart -- u dient deze partitie dus niet aan te koppelen of op enigerlei "
+"wijze te gebruiken alvorens te herstarten."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Kan begin en lengte van %s niet achterhalen."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partitie(s) %s op %s zijn geschreven maar het is niet gelukt de kernel over "
+"de wijzigingen te informeren, waarschijnlijk omdat de partitie(s) gebruikt "
+"worden. De oude partities zullen zodoende actief blijven. U dient uw "
+"computer nu te herstarten alvorens verdere veranderingen aan te brengen."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Het einde kan niet vóór het begin liggen! (startsector=%jd, lengte=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"Poging tot het schrijven van sectoren %ld-%ld buiten de partitie op %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "bezig met zoeken naar slechte blokken"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "De backtrace heeft %d aanroepen op de stack:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "*** assertion (%s) at %s:%d in function %s() failed ***"
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: onbekend schijflabel"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Deze libparted kan niet naar %s schrijven. Mogelijk werd libparted voor "
+"alleen-lezen gecompileerd."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partitie %d is %s, maar het bestandssysteem is %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cilinderuitlijning"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "PMBR_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Onbekende schijfvlag %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s-schijflabels kennen geen uitgebreide partities."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s-schijflabels kennen geen logische of uitgebreide partities."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Te veel primaire partities."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Kan geen logische partitie aan %s toevoegen, omdat er geen uitgebreide "
+"partitie is."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Kan niet meer dan één uitgebreide partitie maken op %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Kan geen logische partitie buiten de uitgebreide partitie maken."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Kan geen logische partitie buiten de uitgebreide partitie op %s maken."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Kan geen primaire partitie binnen een uitgebreide partitie maken."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Kan geen partitie maken buiten de schijf!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Partities mogen elkaar niet overlappen."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metagegevens"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "vrij"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "uitgebreid"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logisch"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primair"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "opstart"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "hoofdmap"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "verborgen"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Onbekende partitievlag %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Opmerking"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Fout"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fataal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Programmeerfout"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Niet-geïmplementeerd"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Repareren"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ja"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nee"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Opnieuw proberen"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Negeren"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"U bent tegen een programmeerfout in GNU Parted aangelopen.\n"
+"Zie eventueel de website (http://www.gnu.org/software/parted/parted.html)\n"
+"voor meer informatie over het nuttig rapporteren van fouten.\n"
+"\n"
+"Stuur een foutrapportage (naar %s) die in elk geval\n"
+"het versienummer (%s) noemt en de volgende boodschap: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Het lezen van AIX-schijflabels is nog niet geïmplementeerd."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Het schrijven van AIX-schijflabels is nog niet geïmplementeerd."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Het toevoegen van partities aan AIX-schijflabels is nog niet geïmplementeerd."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Het klonen van partities in AIX-schijflabels is nog niet geïmplementeerd."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Het instellen van het systeemtype in AIX-schijflabels is nog niet "
+"geïmplementeerd."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Het zetten van vlaggen in AIX-schijflabels is nog niet geïmplementeerd."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Er waren nog partities over na het vullen van de hoofd-AHDI-tabel."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Er waren nog partities over na het vullen van alle tabellen."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Kan niet aan alle voorwaarden voor deze partitie voldoen."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Geen partitienummer meer beschikbaar."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Kan in het BSD-schijflabel geen plekje meer reserveren."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+"De partitietabel van een DASD-LDL-apparaat kan niet gewijzigd worden.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Kan in het DASD-schijflabel geen plekje meer reserveren."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ongeldige partitietabel op %s -- onjuiste vingerafdruk %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ongeldige partitietabel -- recursieve partitie op %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted kan partitities beheerd door Windows Dynamic Disk niet van grootte "
+"veranderen."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "kan geen nieuwe partities meer maken"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s bevat geen uitgebreide partitie (volumenkop-partitie)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Onjuiste controlesom: de partitietabel is beschadigd."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Alleen een primaire partitie kan rootpartitie zijn."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Alleen een primaire partitie kan swappartitie zijn."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Alleen een logische partitie kan een opstartbestand zijn."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"Het instellen van '%s' als dvh-partitienaam is mislukt:\n"
+"alleen logische partities (opstartbestanden) hebben een naam."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Te veel primaire partities."
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "openfout"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "'seek'-fout"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "leesfout"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl()-fout"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API-versies passen niet bij elkaar"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Schijftype wordt niet ondersteund"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Schijfindeling wordt niet ondersteund"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Schijf is in gebruik"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Syntaxfout in configuratiebestand"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Volumenlabel is beschadigd"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Naam van een dataset is beschadigd"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Onvoldoende geheugen beschikbaar"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Apparaatcontrole is mislukt"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Het opgegeven apparaat is geen geldig DASD-apparaat"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER is niet gevonden op apparaat"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Fatale fout"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Geen ruimte voor een volumenlabel."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Geen ruimte voor partitie-informatie."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ongeldige VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Kan de API-versie niet verkrijgen."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Huidige API-versie '%d' past niet bij API-versie '%d' van het DASD-"
+"stuurprogramma!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Kan schijfgrootte niet verkrijgen."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Kan informatie over schijfopbouw niet verkrijgen."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Kan blokgrootte niet verkrijgen."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Schijfgeometrie komt niet overeen met een DASD-apparaat van type 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "Het apparaat is te klein voor GPT."
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"De indeling van de GPT-partitietabel is van versie %x. Dit is nieuwer dan "
+"wat deze versie van Parted kent. Rapporteer dit alstublieft aan ons."
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Niet alle beschibare ruimte voor %s schijnt gebruikt te worden.\n"
+"De GPT bijwerken om alle ruimte te gebruiken (%llu extra blokken),\n"
+"of doorgaan en deze extra ruimte negeren? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"De reservekopie van de GPT-tabel staat niet helemaal aan het einde van de "
+"schijf, zoals zou moeten. Dit kan gerepareerd worden door de reservekopie "
+"naar het einde te verplaatsen (en de oude reservekopie te verwijderen). "
+"Reparatie uitvoeren?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Zowel de primaire GPT-tabel als de reservekopie zijn beschadigd. Maak eerst "
+"een nieuw schijflabel aan, en probeer dan met de 'red'-opdracht de "
+"kwijtgeraakte partities te herstellen."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"De reservekopie van de GPT-tabel is beschadigd, maar de primaire tabel lijkt "
+"goed. Deze laatste zal worden gebruikt."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"De primaire GPT-tabel is beschadigd, maar de reservekopie lijkt goed. Deze "
+"laatste zal worden gebruikt."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "CRC-verschil in hoofdpartitietabel-array"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "vertalen van partitienaam is mislukt"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ongeldige vingerafdruk %x voor een Mac-schijflabel."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Partitietabel bevat geen partitietabelitem!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s is te klein voor een Mac-schijflabel!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partitie %d heeft een ongeldige vingerafdruk %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partitie %d heeft een ongeldige lengte van 0 bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Het gegevensgebied begint niet bij het begin van de partitie."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Het opstartgebied beslaat niet de gehele partitie."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Het gegevensgebied beslaat niet de gehele partitie."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Vreemde blokgrootte in apparaatbeschrijving: %d bytes is niet deelbaar door "
+"512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"De beschrijving van het stuurprogramma zegt dat de fysieke blokgrootte %d "
+"bytes is, maar Linux zegt dat het %d bytes is."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Geen geldige partitietabel gevonden."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Tegenstrijdige groottes van partitietabelitems!\n"
+"Item 1 zegt dat het %d is, maar item %d zegt dat het %d is!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Vreemd: twee partitietabelitems!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Het veranderen van de naam van een root- of swappartitie zal verhinderen dat "
+"Linux deze als zodanig herkent."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Kan geen nieuwe primaire partitie toevoegen: de partitietabel is te klein!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ongeldige partitietabel op %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partitie %d is niet uitgelijnd op cilindergrenzen. Dit wordt nog niet "
+"ondersteund."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Kan niet nog een partitie toevoegen."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"partitielengte van %jd-sectoren overschrijdt het %s-partitietabelverplicht "
+"maximum van %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"startsectornummer, %jd overschrijdt het %s-partitietabelverplicht maximum "
+"van %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Onjuiste controlesom op blok %llu van type %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Geen 'rdb'-blok gevonden -- zou nooit mogen gebeuren."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Lus gedetecteerd bij blok %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : De %s-lijst lijkt verkeerd te zijn bij blok %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Invullen van slechte blokken is mislukt."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Invullen van partitieblokken is mislukt."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Invullen van bestandssysteemblokken is mislukt."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Invullen van opstartblokken is mislukt."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Schrijven van partitieblok %d is mislukt."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Beschadigd Sun-schijflabel gevonden."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"De logische schijfopbouw (%d,%d,%d) gerapporteerd door het besturingssysteem "
+"komt niet overeen met de opbouw (%d,%d,%d) opgeslagen in het schijflabel."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Het schijflabel beschrijft een schijf groter dan %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "De schijf heeft %d cilinders, wat groter is dan het maximum van 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"De 'Hele-Schijf'-partitie is de enige die over is. In het algemeen is het "
+"geen goed idee om deze partitie met een echte te overschrijven. Solaris kan "
+"mogelijk niet zonder deze partitie starten, en SILO (de Sparc-opstartlader) "
+"waardeert de aanwezigheid ervan ook."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun-schijflabel is vol."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "openen van apparaat is mislukt"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "een 'seek' op apparaat is mislukt"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "schrijven naar apparaat is mislukt"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "lezen van apparaat is mislukt"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Kan volumenlabel niet lezen."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Kan volumenlabel niet schrijven."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Kan VTOC-labels niet lezen."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Kan een FMT1 DSCB niet lezen."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Kan een FMT4 DSCB niet lezen."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Kan een FMT5 DSCB niet lezen."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Kan een FMT7 DSCB niet lezen."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Kan VTOC-labels niet schrijven."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Kan een FMT1 DSCB niet schrijven."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Kan een FMT4 DSCB niet schrijven."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Kan een FMT5 DSCB niet schrijven."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Kan een FMT7 DSCB niet schrijven."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Kan een FMT9 DSCB niet schrijven."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Onvoldoende geheugen beschikbaar."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Kan grootte van speciale eenheid 'COMPACT' niet achterhalen."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" heeft een voor locaties ongeldige syntax."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "De maximum waarde voor de kop is %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "De maximum waarde voor de sector is %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Locatie %s ligt buiten het apparaat %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ongeldig nummer."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Gebruik een kleinere eenheid in plaats van een waarde kleiner dan 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Geheugen reserveren voor partitieblok is mislukt\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Geheugen reserveren voor blok is mislukt\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Kan opstartblok %llu niet lezen\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Kan hoofdblok %llu niet lezen\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Geheugen reserveren voor ID-lijstelement is mislukt\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Kan blok %llu niet lezen\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Onjuiste controlesom op blok %llu van type %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Kan blok %d niet schrijven\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Geheugen reserveren voor schijfspecifiek 'rdb'-blok is mislukt\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Geen 'rdb'-blok gevonden -- zou nooit mogen gebeuren\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Kan partitieblok %llu niet lezen\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted is verkeerd gecompileerd: de FAT-opstartsector zou 512 bytes "
+"moeten zijn. Ondersteuning voor FAT wordt uitgeschakeld."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Dit bestandssysteem heeft een voor FAT ongeldige vingerafdruk."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Dit bestandssysteem heeft een voor FAT ongeldige sectorgrootte."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Dit bestandssysteem heeft een voor FAT ongeldige clustergrootte."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Dit bestandssysteem heeft een voor FAT ongeldig aantal gereserveerde "
+"sectoren."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Dit bestandssysteem heeft een ongeldig aantal FAT's."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"De logische schijfopbouw (%d,%d,%d) vermeld in het bestandssysteem is "
+"ongeldig. De opbouw opgeslagen in het schijflabel is (%d,%d,%d) (cilinders,"
+"koppen,sectoren)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"De FAT-opstartsector zegt dat de logische sectorgrootte 0 is. Dit is heel "
+"vreemd. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"De FAT-opstartsector zegt dat er geen FAT-tabellen zijn. Dit is heel "
+"vreemd. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"De FAT-opstartsector zegt dat een cluster nul sectoren heeft. Dit is heel "
+"vreemd. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Het bestandssysteem is FAT12. Dit wordt niet ondersteund."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Onbekende vingerafdruk '%10s' voor oudestijl-Linux-swappartitie."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Onbekende vingerafdruk '%10s' voor nieuwestijl-Linux-swappartitie."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Onbekende vingerafdruk '%10s' voor swsusp-Linux-swappartitie."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted kan geen HFS-bestandssystemen bewerken op schijven met een andere "
+"sectorgrootte dan %d bytes."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"De logische schijfopbouw (%d,%d,%d) vermeld in het bestandssysteem is "
+"ongeldig. De opbouw opgeslagen in het schijflabel is (%d,%d,%d) (cilinders,"
+"koppen,sectoren). Als u 'Negeren' kiest, wordt de opbouw vermeld in het "
+"bestandssysteem onveranderd gelaten. Als u 'Repareren' kiest, wordt deze "
+"opbouw gelijkgemaakt aan die in de partitietabel."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"De informatiesector heeft een onjuiste vingerafdruk (%x). Kies voorlopig "
+"'Annuleren', en stuur een foutrapportage naar <bug-parted@gnu.org>. Indien "
+"u heel wanhopig bent: het is waarschijnlijk wel veilig om voor 'Negeren' "
+"kiezen."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"U hebt minstens %s vrije schijfruimte nodig om deze partitie naar die "
+"grootte te kunnen verkleinen (u hebt nu slechts %s beschikbaar)."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Clusterbegin-delta = %d, en dat is geen veelvoud van de clustergrootte %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Foutief mapitem voor %s: de eerste cluster is een bestandseinde-markering."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Onjuiste FAT: onbeëindigde keten voor %s. Voer eerst 'dosfsck' of "
+"'scandisk' uit."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Onjuiste FAT: cluster %d in de keten voor %s ligt buiten het "
+"bestandssysteem. Voer eerst 'dosfsck' of 'scandisk' uit."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Onjuiste FAT: cluster %d is voor %s kruiselings gekoppeld. Voer eerst "
+"'dosfsck' of 'scandisk' uit."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s is %dk, maar heeft %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partitie is te klein of te groot voor een %s-bestandssysteem."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"De FAT's komen niet overeen. Als u niet weet wat dit betekent, selecteer "
+"dan 'Annuleren', voer 'scandisk' uit op het bestandssysteem, en kom dan weer "
+"terug."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Er zijn geen mogelijke configuraties voor dit type FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Het bestandssysteem heeft andere groottes dan Windows graag wil. De "
+"clustergrootte is %dk (%dk verwacht); het aantal clusters is %d (%d "
+"verwacht); de grootte van de FAT's is %d sectoren (%d verwacht)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Het bestandssysteem geeft de beschikbare ruimte aan als %d clusters, niet %d "
+"clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Er is niet genoeg ruimte in de hoofdmap voor alle bestanden. Kies 'Negeren' "
+"om de overtallige bestanden te verwijderen."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Fout tijdens schrijven naar de hoofdmap."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Als u het bestandssysteem als FAT16 laat, zult u geen problemen hebben."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Als u converteert naar FAT16, en MS-Windows is op deze partitie "
+"geïnstalleerd, dan dient u de MS-Windows-opstartlader opnieuw te "
+"installeren. Als u dit wilt doen, raadpleeg dan de Parted-documentatie (of "
+"de documentatie van uw distributie)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Als u het bestandssysteem als FAT32 laat, zult u geen nieuwe problemen "
+"introduceren."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Als u converteert naar FAT32, en MS-Windows is op deze partitie "
+"geïnstalleerd, dan dient u de MS-Windows-opstartlader opnieuw te "
+"installeren. Als u dit wilt doen, raadpleeg dan de Parted-documentatie (of "
+"de documentatie van uw distributie). Maar bedenk: converteren naar FAT32 "
+"maakt het bestandssysteem onleesbaar voor MSDOS, Windows 95a en Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Wilt u FAT32 gebruiken?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Het bestandssysteem kan alleen naar deze grootte veranderd worden door te "
+"converteren naar FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Het bestandssysteem kan alleen naar deze grootte veranderd worden door te "
+"converteren naar FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted kan de partitiegrootte niet naar deze afmetingen veranderen. We "
+"zijn er mee bezig!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d medium %x komt niet overeen met medium %x uit de opstartsector. U "
+"kunt beter eerst 'scandisk' uitvoeren."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set(): cluster %ld ligt buiten het bestandssysteem"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get(): cluster %ld ligt buiten het bestandssysteem"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster(): geen beschikbare clusters"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Kan geen bestandssysteem vinden."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"het van grootte veranderen van %s-bestandssystemen wordt niet ondersteund"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Het bestandssysteem is groter dan de partitie!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Het bestandssysteem bevat fouten."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Slechte blokken konden niet gelezen worden."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Poging tot het registreren van een 'extent' beginnend bij blok 0x%X, maar er "
+"bestaat al een 'extent' op die positie. Voer een bestandssysteemcontrole "
+"uit!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Poging tot het verplaatsen van een 'extent' van blok 0x%X naar blok 0x%X, "
+"maar er bestaat al een 'extent' op die positie. Dit hoort nooit te gebeuren!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Kan 'extent'-cache voor HFS-bestand met CNID %X niet bijwerken."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+"Poging tot lezen van HFS-bestand met CNID %X voorbij einde-van-bestand."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Kan sector %lli van HFS-bestand met CNID %X niet vinden."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+"Poging tot schrijven van HFS-bestand met CNID %X voorbij einde-van-bestand."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Kan 'extent'-cache voor HFS+-bestand met CNID %X niet bijwerken."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Poging tot lezen van HFS+-bestand met CNID %X voorbij einde-van-bestand."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Kan sector %lli van HFS+-bestand met CNID %X niet vinden."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Poging tot schrijven van HFS+-bestand met CNID %X voorbij einde-van-bestand."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Sorry, HFS kan nog niet op deze manier van grootte veranderd worden."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "bezig met verkleinen"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "De gegevensverplaatsing is mislukt."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"De gegevensverplaatsing heeft enkele gegevens aan het einde van het volumen "
+"achtergelaten."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "bezig met schrijven van HFS-hoofdmapblok"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Geen geldige HFS[+X]-vingerafdruk gevonden tijdens openen."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Versie %d van HFS+ wordt niet ondersteund."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Versie %d van HFSX wordt niet ondersteund."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"De gegevensverplaatsing heeft enkele gegevens aan het einde van het volumen "
+"achtergelaten."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Fout tijdens schrijven van het reserveringsbestand."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+"Fout tijdens schrijven van het compatibiliteitsdeel van het "
+"reserveringsbestand."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "bezig met schrijven van HFS+-volumenkop"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Fout tijdens zoeken naar het vereiste slechte-blokkenbestand."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Er schijnt een fout in de HFS-wikkel te zitten: het slechte-blokkenbestand "
+"bevat geen ingebed HFS+-volumen."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Sorry, HFS+ kan nog niet op deze manier van grootte veranderd worden."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "bezig met verkleinen van een ingebed HFS+-volumen"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Het van grootte veranderen van het HFS+-volumen is mislukt."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "bezig met verkleinen van HFS-wikkel"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Het bijwerken van de HFS-wikkel is mislukt."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Dit is geen echte %s-controle. Het extraheert slechts enkele speciale "
+"bestanden om bij de foutopsporing te helpen."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Onjuiste controlesom van kop van blokkenlijst."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ongeldige grootte (%i bytes) van een transactieblok tijdens herafspelen van "
+"het journal."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Een journal opgeslagen buiten het volumen wordt niet ondersteund. Probeer "
+"het journal uit te schakelen en voer dan Parted opnieuw uit."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Grootte of offset van het journal is geen veelvoud van de sectorgrootte."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Onjuiste magische getallen in de journalkop."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Journalgrootte is verschillend aangegeven in journal-infoblok en journalkop."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"Sommige velden in de journalkop zijn geen veelvoud van de sectorgrootte."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"De sectorgrootte is volgens het journal niet 512 bytes. Parted ondersteunt "
+"alleen sectoren van 512 bytes."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Onjuiste controlesom van journal."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Het journal is niet leeg. Parted moet de transacties herafspelen alvorens "
+"het bestandssysteem te openen. Dit zal het bestandssysteem veranderen."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"De volumenkop of het hoofdmappenblok is veranderd tijdens het herafspelen "
+"van het journal. U dient Parted te herstarten."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Een 'extent' is niet verplaatst."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Er wordt gerefereerd aan een 'extent' vanuit een onmogelijke plaats. Voer "
+"een bestandssyteemcontrole uit!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"Dit HFS-volumen heeft geen catalogusbestand. Dit is zeer ongebruikelijk!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Dit HFS-volumen heeft geen 'extents-overflow'-bestand. Dit is zeer "
+"ongebruikelijk!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Het 'extents-overflow'-bestand hoort niet zijn eigen 'extents' te bevatten. "
+"Voer een bestandssyteemcontrole uit!"
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Kan het bestandssysteem niet tijdelijk opslaan in het geheugen."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "De lijst met slechte blokken kan niet geladen worden."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Er is een fout opgetreden tijdens het verplaatsen van een 'extent'."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Dit HFS+-volumen heeft geen catalogusbestand. Dit is zeer ongebruikelijk!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Dit HFS+-volumen heeft geen 'extents-overflow'-bestand. Dit is zeer "
+"ongebruikelijk!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "deze hulptekst tonen"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "de partietabellen van alle apparaten tonen"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "computerverwerkbare uitvoer produceren"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "JSON-uitvoer produceren"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nooit vragen stellen"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "(in scriptmodus) repareren i.p.v. afbreken wanneer gevraagd"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "de programmaversie tonen"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "uitlijning voor nieuwe partities"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMMER is het door Linux gebruikte nummer van de partitie. In MSDOS-"
+"schijflabels zijn de primaire partities genummerd van 1 tot 4, de logische "
+"partities vanaf 5 en hoger.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE is een van: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "VLAG is een van: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "EENHEID is een van: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "gewenste uitlijning: minimaal of optimaal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE is een van: primair, logisch, uitgebreid\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "BS-SOORT is een van: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"BEGIN en EINDE zijn schijflocaties, zoals 4GB of 10%. Negatieve waarden "
+"tellen vanaf het einde van de schijf. Bijvoorbeeld, -1s geeft precies de "
+"laatste sector aan.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"EINDE is een schijflocatie, zoals 4GB of 10%. Negatieve waarden tellen "
+"vanaf het einde van de schijf. Bijvoorbeeld, -1s geeft precies de laatste "
+"sector aan.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "TOESTAND is één van: aan, uit\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "APPARAAT is gewoonlijk /dev/hda of /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAAM is elk woord dat u wilt\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"\n"
+"Dit is vrije software, vallend onder de GNU General Public License.\n"
+"\n"
+"Dit programma wordt uitgegeven in de hoop dat het nuttig is,\n"
+"maar ZONDER ENIGE GARANTIE; zelfs zonder de impliciete garantie\n"
+"van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL.\n"
+"Zie de GNU General Public License voor meer details.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(resterende tijd: %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partitie %s is in gebruik. Weet u zeker dat u verder wilt gaan?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partitie(s) op %s zijn in gebruik."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Het bestaande label op %s zal worden vernietigd en alle gegevens op deze "
+"schijf zullen verloren gaan. Wilt u doorgaan?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Type van nieuw schijflabel?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Partitietype?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Naam van partitie?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Bestandssysteemsoort?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Begin?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Einde?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"U verzocht om een partitie van %s tot %s (sectoren %llu..%llu).\n"
+"De dichtstbijzijnde mogelijkheid is van %s tot %s (sectoren %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Is dit nog acceptabel?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"De resulterende partitie is niet correct uitgelijnd voor optimale "
+"prestaties: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "onbekend (onvoldoende geheugen beschikbaar)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s-schijflabels kennen geen partitienamen."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Nummer van partitie?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s-schijflabels kennen geen partitienamen."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Partitietype?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ongeldig nummer."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Partitietype?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ongeldig nummer."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Logische schijfopbouw volgens BIOS: %d,%d,%d (cilinders,koppen,sectoren). "
+"Elke cilinder is %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Schijf %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sectorgrootte (logisch/fysiek): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partitietabel: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Schijfvlaggen: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Nummer"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Begin"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Einde"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Grootte"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Type"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Bestandssysteem"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Naam"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Vlaggen"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Vrije ruimte"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Er is een %s %s-partitie gevonden van %s tot %s. Wilt u deze aan de "
+"partitietabel toevoegen?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "bezig met zoeken naar bestandssystemen"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "De 'grootte'-opdracht is verwijderd in Parted 3.0."
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Het krimpen van een partitie kan gegevensverlies veroorzaken.\n"
+"Weet u zeker dat u verder wilt gaan?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nieuw apparaat?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "uitlijningssoort (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d is uitgelijnd\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d is niet uitgelijnd: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Om te zetten vlag?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nieuwe toestand?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Eenheid?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "uitlijncontrole"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"uitlijncontrole SOORT N partitie N controleren op SOORT(min|opt)-"
+"uitlijning"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "hulp"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [OPDRACHT] enige algemene hulp geven (of hulp bij OPDRACHT)"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "maaklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "maaktabel"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"maaklabel LABEL-TYPE nieuw schijflabel maken (met lege partitietabel)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "maakpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "maakpart PART-TYPE [BS-SOORT] BEGIN EINDE een partitie aanmaken"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"Opdracht 'maakpart' maakt een partitie aan zonder een bestandssysteem aan te "
+"maken. BS-SOORT mag gebruikt worden om het een geschikt partitiekenmerk te "
+"geven.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "noem"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "noem NUMMER NAAM partitie NUMMER deze NAAM geven"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "toon"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"toon [devices|free|list,all] de partitietabel weergeven (of beschikbare "
+"apparaten, of vrije ruimte, of alle gevonden partities)"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Zonder argumenten toont 'toon' de volledige partitietabel, maar met\n"
+"de volgende argumenten wordt meer specifieke informatie getoond:\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : alle actieve blokapparaten tonen\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : informatie over vrije ruimte op huidige blokapparaat tonen\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : de partitietabellen van alle actieve blokapparaten tonen\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "einde"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "einde programma afsluiten"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "red"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"red BEGIN EINDE een verloren partitie (met geschat begin en "
+"einde) proberen te herstellen"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "grootte"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "De 'grootte'-opdracht is verwijderd in Parted 3.0.\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "rekoptot"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"rekoptot NUMMER EINDE partitie NUMMER krimpen/oprekken tot nieuw EINDE"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "verwijder"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "verwijder NUMMER partitie NUMMER verwijderen"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "kies"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "kies APPARAAT dit APPARAAT kiezen om te bewerken"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "schijf_zet"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"schijf_zet VLAG TOESTAND op gekozen apparaat deze VLAG in TOESTAND zetten"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "schijf_zetom"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"schijf_zetom [VLAG] op gekozen apparaat de toestand van VLAG omzetten"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "zet"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"zet NUMMER VLAG TOESTAND op partitie NUMMER deze VLAG in TOESTAND zetten"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "zetom"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"zetom [NUMMER [VLAG]] op partitie NUMMER de toestand van VLAG omzetten"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "eenheid"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "eenheid EENHEID standaard deze EENHEID gebruiken"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "versie"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"versie versienummer en copyright van deze Parted tonen"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'versie' toont informatie over het auteursrecht en de versie van deze GNU "
+"Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Gebruik: %s [-hlmsfv] [-aUITLIJNING] [APPARAAT [OPDRACHT [PARAMETERS]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Geen apparaat gevonden"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"WAARSCHUWING: u bent niet root.\n"
+"Houd rekening met ontbrekende toegangsrechten.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Alvorens te herstarten dient u uw opstartlader opnieuw te installeren. Lees "
+"sectie 4 van de Parted-gebruikersdocumentatie voor meer informatie."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Het kan nodig zijn /etc/fstab bij te werken.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Welkom bij GNU Parted! Typ 'help' voor een opdrachtenoverzicht.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Gebruik: parted [OPTIE]... [APPARAAT [OPDRACHT [ARGUMENTEN]...]...]\n"
+"\n"
+"Dit voert OPDRACHT met ARGUMENTEN uit op APPARAAT.\n"
+"Als er geen OPDRACHT gegeven is, wordt interactieve modus gestart.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"U hebt een programmeerfout in GNU Parted gevonden.\n"
+"Help ons de fout te verbeteren door het volgende te doen:\n"
+"\n"
+"Raak niet in paniek.\n"
+"De fout heeft zeer waarschijnlijk uw gegevens intact gelaten.\n"
+"\n"
+"Controleer of de fout al is verbeterd door de nieuwste versie\n"
+"van GNU Parted te gebruiken, te vinden op:\n"
+"\n"
+" http://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Probeer die versie alvorens een fout te rapporteren.\n"
+"\n"
+"Als de fout nog niet is verbeterd, of als u niet precies weet hoe dit\n"
+"te controleren, kijk dan voor verdere informatie op de Parted-website:\n"
+"\n"
+" http://www.gnu.org/software/parted\n"
+"\n"
+"Uw rapportage dient het versienummer van Parted te bevatten (%s),\n"
+"de onderstaande foutmelding, de uitvoer van de volgende opdracht:\n"
+"\n"
+" parted APPARAAT unit co print unit s print\n"
+"\n"
+"en de hierna volgende opdrachtengeschiedenis, plus verdere\n"
+"relevante informatie over de configuratie van uw systeem.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Opdrachtengeschiedenis:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Fout: SEGV_MAPERR (Adres niet verbonden met object)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Fout: SEGV_ACCERR (Ongeldige toegangsrechten voor object)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Fout: een niet-specifiek SIGSEGV-signaal werd ontvangen.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Fout: FPE_INTDIV (Deling door nul)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Fout: FPE_INTOVF (Overloop)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTDIV (Deling door nul)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTOVF (Overloop)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTUND (Onderloop)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTRES (Inexact resultaat)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTINV (Ongeldige operatie)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Fout: FPE_FLTSUB (Index buiten bereik)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Fout: een niet-specifiek SIGFPE-signaal werd ontvangen."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Fout: ILL_ILLOPC (Ongeldige opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Fout: ILL_ILLOPN (Ongeldige parameter)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Fout: ILL_ILLADR (Ongeldige adresseringsmodus)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Fout: ILL_ILLTRP (Ongeldige 'trap'-instructie)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Fout: ILL_PRVOPC (Instructie alleen toegankelijk voor geprivilegieerden)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Fout: ILL_PRVREG (Register alleen toegankelijk voor geprivilegieerden)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Fout: ILL_COPROC (Coprocessorfout)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Fout: ILL_BADSTK (Interne stack-fout)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Fout: een niet-specifiek SIGILL-signaal werd ontvangen."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "ongeldig symbool: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Een partitienummer wordt verwacht."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partitie bestaat niet."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Een bestandssysteemsoort wordt verwacht."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Onbekende bestandssysteemsoort '%s'."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Een schijflabeltype wordt verwacht."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Vlaggen worden niet ondersteund."
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Kan geen nieuwe partities meer maken."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Een partitietype wordt verwacht."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "aan"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "uit"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimaal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimaal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPTIEs:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "OPDRACHTen:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Rapporteer gebreken in het programma aan <%s>;\n"
+"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Apparaat %s wordt gebruikt.\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Deze opdracht is zonder betekenis in niet-interactieve modus.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Uitgebreide partities kunnen op MSDOS-schijflabels niet verborgen zijn."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Uitgebreide partities kunnen op MSDOS-schijflabels geen herstelpartities "
+#~ "zijn."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr " NUMMER : meer details over partitie NUMMER tonen\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '--%s' staat geen argument toe\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: onbekende optie '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: optie '-W %s' staat geen argument toe\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: optie '-W %s' vereist een argument\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Webpagina van %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ongeldig argument '%3$s' van %1$s%2$s"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "ongeldig achtervoegsel in argument '%3$s' van %1$s%2$s"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argument '%3$s' van %1$s%2$s is te groot"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "De kernel kan de partitietabel niet herinlezen. Dit betekent dat u uw "
+#~ "computer moet herstarten alvorens veranderde partities te gebruiken. "
+#~ "Maar voor het herstarten moet u ook uw opstartlader opnieuw installeren, "
+#~ "wat mogelijk het aankoppelen van veranderde partitities vereist. De twee "
+#~ "dingen zijn niet samen mogelijk! U zult dus van een reddingsdiskette of "
+#~ "van een CD moeten herstarten, en vanaf daar uw opstartlader moeten "
+#~ "herinstalleren. Lees eventueel sectie 4 van de Parted-"
+#~ "gebruikersdocumentatie."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "De kernel kan de partitietabel op %s niet herinlezen (%s). Dit betekent "
+#~ "dat de Hurd geen weet heeft van de veranderingen die u net hebt gemaakt. "
+#~ "U dient uw computer te herstarten alvorens iets met %s te doen."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Het opstartgebied begint niet bij het begin van de partitie."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Dit bestandssysteem heeft een logische sectorgrootte van %d. GNU Parted "
+#~ "werkt niet goed met sectorgroottes anders dan 512 bytes."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Het bestand %s is gemarkeerd als een systeembestand. Als het verplaatst "
+#~ "wordt, zullen sommige programma's misschien niet meer werken."
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Toevoegen van partitie %d is mislukt (%s)"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "Parted kan de partitietabel op %s niet herinlezen (%s). Dit betekent dat "
+#~ "Linux geen weet heeft van de veranderingen die u net hebt gemaakt. "
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s bevat GPT-vingerafdrukken die aangeven dat het een GPT-tabel heeft. "
+#~ "Maar het bevat geen geldige nep-MSDOS-partitietabel, zoals zou moeten. "
+#~ "Misschien werd deze beschadigd, mogelijk door een programma dat GPT-"
+#~ "partitietabellen niet begrijpt. Of misschien hebt u de GPT-tabel "
+#~ "verwijderd en gebruikt nu een MSDOS-partitietabel. Is dit echt een GPT-"
+#~ "partitietabel?"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Gebruik: %s [OPTIE]\n"
+#~ " of: %s APPARAAT SUBNUMMER\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Ongebruikte ruimte op een FAT-partitie wissen (testgereedschap van GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help deze hulptekst tonen en stoppen\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version programmaversie tonen en stoppen\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "te weinig argumenten"
+
+#~ msgid "too many arguments"
+#~ msgstr "te veel argumenten"
+
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "ongeldig subapparaatnummer: %s"
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Ondersteuning voor het openen van %s-bestandssystemen is nog niet "
+#~ "geïmplementeerd."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Ondersteuning voor het maken van %s-bestandssystemen is nog niet "
+#~ "geïmplementeerd."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Ondersteuning voor het controleren van %s-bestandssystemen is nog niet "
+#~ "geïmplementeerd."
+
+#~ msgid "raw block copying"
+#~ msgstr "bezig met kopiëren van blokken"
+
+#~ msgid "growing file system"
+#~ msgstr "bezig met vergroten van bestandssysteem"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Kan niet naar een overlappende partitie kopiëren."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Het kopiëren en tegelijkertijd verkleinen van een %s-bestandssysteem is "
+#~ "nog niet geïmplementeerd. Verklein dus eerst de bronpartitie alvorens "
+#~ "deze naar de gekozen partitie te kopiëren, of kies een grotere "
+#~ "doelpartitie."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Ondersteuning voor het kopiëren van %s-bestandssystemen is nog niet "
+#~ "geïmplementeerd."
+
+#~ msgid "creating"
+#~ msgstr "bezig met aanmaken"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr ""
+#~ "Het bestandssysteem is in een ongeldige toestand.\n"
+#~ "Misschien is het aangekoppeld?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr ""
+#~ "Het bestandssysteem is in een oude indeling;\n"
+#~ "de grootte kan niet veranderd worden."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Ongeldig aantal vrije blokken. Voer eerst 'reiserfsck --check' uit."
+
+#~ msgid "checking"
+#~ msgstr "bezig met controleren"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Het bestandssysteem lijkt beschadigd. Voer eerst 'reiserfsck --check' "
+#~ "uit."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Het reiserfs-bestandssysteem heeft deze basistest goed doorstaan.\n"
+#~ "Voor een uitgebreidere test kunt u 'reiserfsck --check' gebruiken."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr ""
+#~ "Sorry, het begin van een reiserfs-partitie kan nog niet verplaatst worden."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr "Kan apparaat niet heropenen voor lezen-en-schrijven."
+
+#~ msgid "expanding"
+#~ msgstr "bezig met vergroten"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Kan apparaat-abstractie niet aanmaken."
+
+#~ msgid "copying"
+#~ msgstr "bezig met kopiëren"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Kan symbool %s niet herleiden. Fout: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted heeft een ongeldige libreiserfs gevonden."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted heeft een niet-passende versie van libreiserfs gevonden.\n"
+#~ "Gevonden is versie %d-%d, terwijl versie %d nodig is.\n"
+#~ "Ondersteuning voor reiserfs wordt uitgeschakeld."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Inconsistente groepsbeschrijvers!"
+
+#~ msgid "File system full!"
+#~ msgstr "Bestandssysteem is vol!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Ongeldig superblok. Weet u zeker dat dit een ext2-bestandssysteem is?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Het bestandssysteem bevat fouten! Voer eerst 'e2fsck' uit."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Het bestandssysteem werd niet correct ontkoppeld! Voer eerst 'e2fsck' "
+#~ "uit. Het veranderen van een ongeschoond bestandssysteem kan tot zware "
+#~ "beschadigingen leiden."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "Bestandssysteem heeft een niet-compatibele functie ingeschakeld. "
+#~ "Compatibele functies zijn 'has_journal', 'dir_index', 'filetype', "
+#~ "'sparse_super' en 'large_file'. Gebruik 'tune2fs' of 'debugfs' om "
+#~ "functies te verwijderen."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Fout tijdens reserveren van buffercache."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Er is een inode gevonden met een onjuist aantal verwijzingen! U kunt "
+#~ "beter eerst 'e2fsck' uitvoeren."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Niet genoeg beschikbare inodes!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Het bestandssysteem is te vol om een groep te verwijderen!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Het bestandssysteem heeft te veel gebruikte inodes om een groep te "
+#~ "verwijderen!"
+
+#~ msgid "adding groups"
+#~ msgstr "bezig met toevoegen van groepen"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Uw bestandssysteem is te vol om het naar %i blokken te verkleinen. Sorry."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Uw bestandssysteem heeft te veel bezette inodes om het naar %i blokken te "
+#~ "verkleinen. Sorry."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr ""
+#~ "Het bestandssysteem werd niet correct ontkoppeld! Voer eerst 'e2fsck' "
+#~ "uit."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Het bestandssysteem gebruikt de 'dir_index'-functie. Parted kan het "
+#~ "bestandssysteem alleen van grootte veranderen als het deze functie "
+#~ "uitschakelt. U kunt deze functie later weer aanzetten door middel van "
+#~ "'tune2fs -O dir_index APPARAAT' en dan 'e2fsck -fD APPARAAT'."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Het van grootte veranderen van dit bestandssysteem zal EXPERIMENTELE\n"
+#~ "programmacode gebruiken die het bestandssysteem ZOU KUNNEN BESCHADIGEN\n"
+#~ "(maar dit, voor zover bekend, nog nooit gedaan heeft). Maak vooraf een\n"
+#~ "reservekopie van uw gegevens, en voer na de verandering 'e2fsck -f' uit."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Kruiselings gekoppelde blokken gevonden! U kunt beter eerst 'e2fsck' "
+#~ "uitvoeren."
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Aan blok %i wordt niet gerefereerd! Merkwaardig."
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Blok %i zou niet als (%d, %d) gemarkeerd moeten zijn!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Het ext2-bestandssysteem heeft deze basistest goed doorstaan.\n"
+#~ "Voor een uitgebreidere test kunt u het programma 'e2fsck' gebruiken."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr ""
+#~ "Sorry, het begin van een ext2-partitie kan nog niet verplaatst worden."
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Kan de buffercache niet leegmaken!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "bezig met schrijven van groepsmetagegevens"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Het bestandssysteem is te klein voor ext2."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Te veel slechte pagina's."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "De partitie dient een van de volgende BS-SOORTen te hebben: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Het bestaande bestandssysteem zal worden vernietigd en alle gegevens op "
+#~ "de partitie zullen verloren gaan. Wilt u doorgaan?"
+
+#~ msgid ""
+#~ "WARNING: you are attempting to use %s to operate on (%s) a file system.\n"
+#~ "%s's file system manipulation code is not as robust as what you'll find "
+#~ "in\n"
+#~ "dedicated, file-system-specific packages like e2fsprogs. We recommend\n"
+#~ "you use %s only to manipulate partition tables, whenever possible.\n"
+#~ "Support for performing most operations on most types of file systems\n"
+#~ "will be removed in an upcoming release.\n"
+#~ msgstr ""
+#~ "WAARSCHUWING: u probeert %s te gebruiken om een bestandssysteem (%s)\n"
+#~ "te bewerken. De bestandssysteembewerkingsroutines van %s zijn niet zo "
+#~ "robuust\n"
+#~ "als in gespecialiseerde bestandssysteemspecifieke pakketten zoals "
+#~ "esfsprogs.\n"
+#~ "We bevelen aan om %s zo mogelijk alleen te gebruiken om partitietabellen\n"
+#~ "te bewerken. Ondersteuning van de meeste bewerkingen op de meeste\n"
+#~ "bestandssysteemsoorten zal in de komende versies verwijderd worden.\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Nummer van bronpartitie?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Nummer van doelpartitie?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr ""
+#~ "Een uitgebreide partitie kan geen bestandssysteem bevatten. Bedoelde u "
+#~ "'maakpart'?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Kan een uitgebreide partitie niet verplaatsen."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Kan een partitie niet naar zichzelf verplaatsen. Bedoelde u 'grootte'?"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Nummer: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "Vlaggen: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Bestandssysteem: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Grootte: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Minimum grootte: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Maximum grootte: "
+
+#~ msgid "check"
+#~ msgstr "controleer"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "controleer NUMMER een simpele controle uitvoeren van "
+#~ "bestandssysteem op partitie NUMMER"
+
+#~ msgid "cp"
+#~ msgstr "kopieer"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "kopieer [APPARAAT] VAN-NUMMER NAAR-NUMMER een bestandssysteem naar een "
+#~ "andere partitie kopiëren"
+
+#~ msgid "mkfs"
+#~ msgstr "maakbs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partition NUMBER"
+#~ msgstr ""
+#~ "maakbs NUMMER BS-SOORT op partitie NUMMER een bestandssysteem van BS-"
+#~ "SOORT aanmaken"
+
+#~ msgid "mkpartfs"
+#~ msgstr "maakpartbs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "maakpartbs PART-TYPE BS-SOORT BEGIN EINDE een partitie met een "
+#~ "bestandssysteem aanmaken"
+
+#~ msgid "move"
+#~ msgstr "schuif"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "grootte NUMMER BEGIN EINDE de grootte van het bestandssysteem op "
+#~ "partitie NUMMER veranderen"
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "Dit is geen ECKD-schijf! Dit soort schijf wordt niet ondersteund!"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Apparaat %s heeft een logische sectorgrootte van %lld.\n"
+#~ "Niet alle onderdelen van GNU Parted ondersteunen dit momenteel,\n"
+#~ "en de wel aanwezige ondersteuning is ZEER EXPERIMENTEEL.\n"
diff --git a/po/nn.gmo b/po/nn.gmo
new file mode 100644
index 0000000..597c9d5
--- /dev/null
+++ b/po/nn.gmo
Binary files differ
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..8a41b77
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,3577 @@
+# Norwegian nynorsk messages for GNU parted
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Kjetil Torgrim Homme <kjetilho@ifi.uio.no>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 1.6.6-pre2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2003-07-04 19:03+0200\n"
+"Last-Translator: Kjetil Torgrim Homme <kjetilho@ifi.uio.no>\n"
+"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\n"
+"Language: nn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:193
+#, fuzzy
+msgid "Unknown system error"
+msgstr "Filsystemtypen «%s» er ukjend."
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr ""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr ""
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr ""
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr ""
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr ""
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr ""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr ""
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr ""
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr ""
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr ""
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr ""
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr ""
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr ""
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr ""
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr ""
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ""
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr ""
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr ""
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr ""
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Feil ved opning av %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Kunne ikkje opna %s for både lesing og skriving (%s). %s er berre opna for "
+"lesing."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s under posisjonering før lesing av %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s under lesing av %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Kan ikkje skriva til %s, sidan han berre er opna for lesing."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s under posisjonering før skriving til %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s under skriving til %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr ""
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Kunne ikkje opna %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Kunne ikkje undersøkja lagringsmediet."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "Fekk feilmeldinga «%s» ved forsøk på å synkronisera %s til disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Kunne ikkje undersøkja eininga %s - %s."
+
+#: libparted/arch/linux.c:690
+#, fuzzy, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Klarte ikkje å finna storleiken til %s (%s)"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, fuzzy, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Klarte ikkje å finna storleiken til %s (%s)"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr ""
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Kunne ikkje finna identiteten til eininga %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Initialisering av SCSI-eininga %s gav feil - %s"
+
+#: libparted/arch/linux.c:1236
+#, fuzzy, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Eininga %s har storleik null, og kan umogleg innehalda eit filsystem eller "
+"ein partisjonstabell. Kanskje du valte feil eining?"
+
+#: libparted/arch/linux.c:1349
+#, fuzzy, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Klarte ikkje å finna geometrien til fila/eininga. Du bør ikkje bruka Parted "
+"med mindre du VERKELEG veit kva du gjer!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Ny eining?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID-kontroller"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID-kontroller"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O-kontroller"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+#, fuzzy
+msgid "Loopback device"
+msgstr "Kva eining skal vera kjelda?"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Einingstypen er ikkje støtta"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, fuzzy, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Feil ved opning av %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, fuzzy, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Ein feil oppstod ved varsling av kjerna om endringane på partisjon %s - %s. "
+"Dette tyder at Linux ikkje veit om endringar du har gjort på %s før etter "
+"omstart av maskinen, så du må ikkje montera han eller bruka han på nokon "
+"måte før omstart."
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Klarte ikkje å finna storleiken til %s (%s)"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, fuzzy, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Kan ikkje ha slutten før starten!"
+
+#: libparted/cs/geom.c:379
+#, fuzzy, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Prøvde å skriva sektorane %ld-%ld utanfor partisjonen på %s"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "ser etter dårlege blokker"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, fuzzy, c-format
+msgid "%s: unrecognised disk label"
+msgstr "Kunne ikkje opna %s - ukjend disklabel."
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Dette libparted-biblioteket har ikkje støtte for skriving til %s. Kanskje "
+"vart det kompilert for kun lesing."
+
+#: libparted/disk.c:632
+#, fuzzy, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partisjonen %d er %.3f MiB, men filsystemet er %.3f MiB."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "boot"
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ukjent partisjonsflagg, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Ein %s-disklabel støttar ikkje utvidingspartisjonar."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s-disklablar støttar ikkje logiske eller utvidingspartisjonar."
+
+#: libparted/disk.c:2003
+#, fuzzy
+msgid "Too many primary partitions."
+msgstr "For mange primærpartisjonar"
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Kan ikkje leggja ein logisk partisjon til %s, sidan der ikkje er nokon "
+"utvidingspartisjon."
+
+#: libparted/disk.c:2036
+#, fuzzy, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Kan ikkje ha meir enn éin utvidingspartisjon på %s"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Kan ikkje ha logiske partisjonar utanfor utvidingspartisjonen."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Ein logisk partisjon kan ikkje liggja utanfor utvidingspartisjonen på %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Ein primærpartisjon kan ikkje liggja inne i ein utvidingspartisjon."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Kan ikkje ha ein partisjon utanfor disken!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+#, fuzzy
+msgid "Can't have overlapping partitions."
+msgstr "Partisjonar kan ikkje overlappa kvarandre."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "ledig"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "utviding"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logisk"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primær"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "rot"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "skjult"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr ""
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr ""
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr ""
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Ja"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, fuzzy, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ukjent partisjonsflagg, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informasjon"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Åtvaring"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Feil"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Kritisk"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Programfeil"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Ikkje laga"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Rett opp"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ja"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nei"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Prøv igjen"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Oversjå"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+#, fuzzy
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/aix.c:103
+#, fuzzy
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/aix.c:116
+#, fuzzy
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/aix.c:126
+#, fuzzy
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/aix.c:144
+#, fuzzy
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/aix.c:154
+#, fuzzy
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "Støtte for å laga %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Kan ikkje kopiera utvidingspartisjonar."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Kunne ikkje oppfylla alle dei tekniske krava til partisjonen."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+#, fuzzy
+msgid "Unable to allocate a partition number."
+msgstr "Forventa eit partisjonsnummer."
+
+#: libparted/labels/bsd.c:588
+#, fuzzy
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Kunne ikkje tilordna plass i BSD-disklabel."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+#, fuzzy
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Kunne ikkje tilordna plass i BSD-disklabel."
+
+#: libparted/labels/dos.c:1159
+#, fuzzy, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ugyldig partisjonstabell på %s - feil signatur %x"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ugyldig partisjonstabell - rekursiv partisjon på %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Kan ikkje laga fleire partisjonar."
+
+# checkit
+#: libparted/labels/dvh.c:183
+#, fuzzy, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"%s har ingen utvidingspartisjon (volume header-partisjon). Om du overser "
+"denne meldinga, vil eventuelle bootvolum verta sletta."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Sjekksummen er feil, og det tyder på at partisjonstabellen er korrupt."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Berre primærpartisjonar kan vera rotpartisjonar."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Berre primærpartisjonar kan vera swap-partisjonar."
+
+# checkit
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Berre logiske partisjonar kan vera ei bootfil."
+
+# checkit
+#: libparted/labels/dvh.c:719
+#, fuzzy, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr "Berre logiske partisjonar (bootfiler) kan ha namn."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "For mange primærpartisjonar"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+#, fuzzy
+msgid "Unsupported disk type"
+msgstr "ped_device_new() Einingstypen er ikkje støtta"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr ""
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr ""
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr ""
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+#, fuzzy
+msgid "Fatal error"
+msgstr "Kritisk"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+#, fuzzy
+msgid "No room for partition info."
+msgstr "Fann ikkje noko gyldig partisjonskart."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Kan ikkje kjenna igjen noko filsystem."
+
+#: libparted/labels/fdasd.c:1029
+#, fuzzy
+msgid "Could not retrieve disk geometry information."
+msgstr "Kunne ikkje lesa geometrien til %s - %s."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Filsystemet er for lite for ext2."
+
+#: libparted/labels/gpt.c:791
+#, fuzzy, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formatet til GPT-partisjonstabellen er versjon %x, som er nyare enn det "
+"Parted kan kjenna att. Ver venleg å seia i frå med ein epost til <bug-"
+"parted@gnu.org> (skriv helst på engelsk)"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Sikringskopien av GPT-tabellen er ikkje sist på disken slik han skal vera. "
+"Dette kan tyda at eit anna operativsystem trur at disken er mindre. Skal "
+"dette rettast ved å flytta kopien til slutten av disken (og sletta den gamle "
+"kopien)?"
+
+#: libparted/labels/gpt.c:1044
+#, fuzzy
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Både originalen og kopien av GPT-tabellen er korrupt. Prøv å laga ein ny "
+"tom tabell, og bruk Parteds redningsmodus til å finna partisjonane."
+
+#: libparted/labels/gpt.c:1055
+#, fuzzy
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"GPT-tabellen er korrupt, men sikringskopien ser frisk ut, så kopien vert "
+"brukt."
+
+#: libparted/labels/gpt.c:1067
+#, fuzzy
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"GPT-tabellen er korrupt, men sikringskopien ser frisk ut, så kopien vert "
+"brukt."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Kva partisjonsnummer er målet?"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ugyldig signatur %x for ein Mac-disklabel."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Partisjonskartet inneheld ingen oppføringar!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s er for liten for ein Mac-disklabel!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partisjon %d har ein ugyldig signatur %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partisjon %d har ei ugyldig lengde på 0 oktettar!"
+
+#: libparted/labels/mac.c:555
+#, fuzzy
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Dataregionen startar ikkje på starten av partisjonen"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Bootregionen fyller ikkje heile partisjonen."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Dataregionen fyller ikkje heile partisjonen."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Merkeleg blokkstorleik på einingsdeskriptor: %d oktettar er ikkje deleleg på "
+"512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Drivardeskriptoren seier at den fysiske blokkstorleiken er %d oktettar, men "
+"Linux seier at han er %d oktettar."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Fann ikkje noko gyldig partisjonskart."
+
+#: libparted/labels/mac.c:775
+#, fuzzy, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Motstridande storleikar i partisjonskartet! Oppføring 1 seier at han er %d, "
+"men oppføring %d seier at han er %d!"
+
+#: libparted/labels/mac.c:806
+#, fuzzy
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Merkeleg - to partisjonskartoppføringar!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Endrar du namnet på ein rot- eller swap-partisjon, vil ikkje Linux lenger "
+"kjenna han igjen."
+
+#: libparted/labels/mac.c:1444
+#, fuzzy
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Kan ikkje leggja til ein partisjon til - partisjonskartet er for lite!"
+
+#: libparted/labels/pc98.c:285
+#, fuzzy, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ugyldig partisjonstabell på %s"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, fuzzy, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partisjon %d ligg ikkje nøyaktig på grensa mellom to sylinderar. Det "
+"manglar støtte for dette."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Kan ikkje leggja til ein partisjon til."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr ""
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Øydelagd Sun-disklabel funne."
+
+#: libparted/labels/sun.c:277
+#, fuzzy, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometrien til disken (C=%d,H=%d,S=%d) stemmer ikkje med geometrien i "
+"disklabelen (C=%d,H=%d,S=%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Disklabelen skildrar ein disk større enn %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Partisjonen som omfattar heile disken er den einaste som er ledig. Det er "
+"vanlegvis ikkje nokon god idé å bruka dette som ein vanleg partisjon. "
+"Solaris klarer kanskje ikkje å starta utan han, og SILO (boot-lastar for "
+"SPARC) likar det heller ikkje."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun-disklabel er full."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+#, fuzzy
+msgid "Could not read volume label."
+msgstr "Kunne ikkje lesa geometrien til %s - %s."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+#, fuzzy
+msgid "Could not write volume label."
+msgstr "Kan ikkje kjenna igjen noko filsystem."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr ""
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Tom for minne."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr ""
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, fuzzy, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s under skriving til %s"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+#, fuzzy
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted er feilkompilert: ein bootsektor i FAT skal vera 512 oktettar. "
+"FAT-støtte er no skrudd av."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Filsystemet har ein ugyldig signatur til å vera eit FAT-filsystem."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Filsystemet har ein ugyldig sektorstorleik til å vera eit FAT-filsystem."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Filsystemet har ein storleik på allokeringseininga som er ugyldig for FAT-"
+"filsystem."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+#, fuzzy
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Filsystemet har eit ugyldig tal på reserverte sektorar til å vera eit FAT-"
+"filsystem"
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+#, fuzzy
+msgid "File system has an invalid number of FATs."
+msgstr "Filsystemet har eit ugyldig tal på FAT-ar."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Bootsektoren i FAT seier at logisk sektorstorleik er 0. Det var rart. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Bootsektoren i FAT seier at der ikkje er nokon FAT-tabellar. Det var rart. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Bootsektoren i FAT seier at allokeringseininga er 0 sektorar. Det var rart. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+#, fuzzy
+msgid "File system is FAT12, which is unsupported."
+msgstr "Filsystemet er FAT12, som er ustøtta."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, fuzzy, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Ukjent swap-signatur for Linux '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, fuzzy, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Ukjent swap-signatur for Linux '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, fuzzy, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Ukjent swap-signatur for Linux '%10s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Informasjonssektoren har feil signatur (%x). Vel avbryt, og send inn ein "
+"feilrapport. Viss du er desperat, er det sannsynlegvis trygt å oversjå "
+"denne feilen."
+
+#: libparted/fs/r/fat/calc.c:134
+#, fuzzy, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Du treng %d MiB med ledig diskplass for å krympa partisjonen til denne "
+"storleiken (du har for tida berre %d MiB ledig)"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Allokeringseininga sitt startdelta er %d, og det er ikkje eit multiplum av "
+"storleiken %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Feil i katalogoppføringa for %s: første allokeringseininga markerer slutt på "
+"fila."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Feil på FAT: endelaus kjede for %s. Du bør køyre dosfsck eller scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Feil på FAT: allokeringseining %d er utanfor filsystemet i kjeda for %s. Du "
+"bør køyra dosfsck eller scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Feil på FAT: allokeringseining %d er krysslenka for %s. Du bør køyre "
+"dosfsck eller scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s er %d KiB, men har %d allokeringseiningar (%d KiB)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, fuzzy, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partisjonen er for liten eller stor for eit %s-filsystem"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT-ane stemmer ikkje overeins. Viss du ikkje veit kva dette tyder, vel "
+"avbryt, køyr scandisk på filsystem, og kom attende."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Der er ingen moglege konfigurasjonar for denne FAT-typen."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Filsystemet har ikkje parametrar som Windows vil like. Allokeringseininga "
+"er %d KiB (%d KiB er forventa), talet på allokeringseiningar er %d (%d er "
+"forventa), FAT-ane er på %d sektorar (%d er forventa)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Filsystemet rapporterer %d allokeringseiningar med ledig plass, ikkje %d."
+
+#: libparted/fs/r/fat/resize.c:159
+#, fuzzy
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Der er ikkje plass i toppkatalogen til alle filene. Vel anten avbryt, eller "
+"oversjå feilen for å misse alle filene."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Feil ved skriving til toppkatalogen."
+
+#: libparted/fs/r/fat/resize.c:479
+#, fuzzy
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Viss du let filsystemet vera FAT16, vil du ikkje ha nokon problem."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Viss du konverterer til FAT16 og MS Windows er installert på denne "
+"partisjonen, må du leggja inn boot-lastaren til MS Windows på nytt. Dersom "
+"du vil gjera dette, bør du lesa Parted-manualen (eller manualen som høyrer "
+"til distribusjonen din)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "Viss du let filsystemet vera FAT32, vil du ikkje få nokon nye problem."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Viss du konverterer til FAT32, og MS Windows er installert på denne "
+"partisjonen, må du leggja inn boot-lastaren til MS Windows på nytt. Dersom "
+"du vil gjera dette, bør du lesa Parted-manualen (eller manualen som høyrer "
+"til distribusjonen din). FAT32 er også uleseleg for MS-DOS, MS Windows 95a "
+"og NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Ønskjer du å bruka FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "Filsystemet kan kun få denne storleiken ved å konvertera til FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "Filsystemet kan kun få denne storleiken ved å konvertera til FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+#, fuzzy
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted kan ikkje endra storleiken til dette. Vi arbeider med saka!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d media %x stemmer ikkje overeins med bootsektorens media %x. Du bør "
+"sannsynlegvis køyra scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, fuzzy, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: allokeringseining %ld utanfor filsystemet"
+
+#: libparted/fs/r/fat/table.c:301
+#, fuzzy, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: allokeringseining %ld utanfor filsystemet"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: ingen ledige allokeringseiningar"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Kan ikkje kjenna igjen noko filsystem."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "Støtte for å endra storleik på %s-filsystem er ikkje lagt inn enno."
+
+#: libparted/fs/r/filesys.c:171
+#, fuzzy
+msgid "The file system is bigger than its volume!"
+msgstr "Filsystemet er større enn volumet det ligg på!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "krympar"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+#, fuzzy
+msgid "writing HFS Master Directory Block"
+msgstr "Feil ved skriving til toppkatalogen."
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+#, fuzzy
+msgid "Error while writing the allocation file."
+msgstr "Feil ved skriving til toppkatalogen."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+#, fuzzy
+msgid "shrinking HFS wrapper"
+msgstr "krympar"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+#, fuzzy
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Allokeringseininga sitt startdelta er %d, og det er ikkje eit multiplum av "
+"storleiken %d."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+#, fuzzy
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"Allokeringseininga sitt startdelta er %d, og det er ikkje eit multiplum av "
+"storleiken %d."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+#, fuzzy
+msgid "Could not cache the file system in memory."
+msgstr "Kan ikkje kjenna igjen noko filsystem."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "vis denne hjelpeteksten"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "spør aldri brukaren"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "vis programversjon"
+
+#: parted/parted.c:145
+#, fuzzy
+msgid "alignment for new partitions"
+msgstr "Kan ikkje kopiera utvidingspartisjonar."
+
+#: parted/parted.c:158
+#, fuzzy
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NR er partisjonsnummeret brukt av Linux. På MS-DOS-disklabels, er "
+"primærpartisjonar nummerert 1-4, og logiske partisjonar går frå 5 og "
+"oppover.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE er ein av: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAGG er eitt av: "
+
+#: parted/parted.c:164
+#, fuzzy
+msgid "UNIT is one of: "
+msgstr "FLAGG er eitt av: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE er ein av: primær, logisk, utviding\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYPE er ein av: "
+
+#: parted/parted.c:169
+#, fuzzy
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START og SLUTT er i mebibytes. Negative verdiar tel frå slutten av disken.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STATUS er ein av: av, på\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "EINING er vanlegvis /dev/hda eller /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAMN er eit valfritt ord\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+#, fuzzy
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"(Fylgjande tekst er ei omsetjing som *kun* vert gjeve på informativ basis. "
+"For alle juridiske tolkingar gjeld den engelske originalteksten.)\n"
+"\n"
+"Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.\n"
+"Dette programmet er fri programvare, dekt av GNU General Public License.\n"
+"\n"
+"Dette programmet vert distribuert med von om at det vil vera nyttig, men "
+"utan NOKA FORM FOR garanti; ikkje eingong for at produktet er eigna for SAL "
+"eller BRUK TIL NOKO FORMÅL. Sjå GNU General Public License for detaljar.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tid att %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partisjonen %s er i bruk. Endringar no kan føre til alvorleg datatap."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partisjon(ane) på %s er i bruk."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Ny disklabel-type?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Partisjonstype?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Partisjonsnamn?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Filsystemtype?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Start?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Slutt?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Ein %s-disklabel støttar ikkje utvidingspartisjonar."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Partisjonsnummer?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Ein %s-disklabel støttar ikkje utvidingspartisjonar."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Partisjonstype?"
+
+#: parted/parted.c:972
+msgid "Invalid type-id."
+msgstr ""
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Partisjonstype?"
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr ""
+
+#: parted/parted.c:1242
+#, fuzzy, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disklabel-type: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, fuzzy, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partisjonsnamn?"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disklabel-type: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+#, fuzzy
+msgid "Start"
+msgstr "Start?"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+#, fuzzy
+msgid "End"
+msgstr "Slutt?"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr ""
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr ""
+
+#: parted/parted.c:1398
+#, fuzzy
+msgid "File system"
+msgstr "Filsystem?"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr ""
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flagg"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr ""
+
+#: parted/parted.c:1702
+#, fuzzy, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Ein %s %s-partisjon vart funnen på %.3f MiB -> %.3f MiB. Ønskjer du å "
+"leggja han til i partisjonstabellen?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "leitar etter filsystem"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ny eining?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+#, fuzzy
+msgid "Flag to Invert?"
+msgstr "Flagg som skal endrast?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Ny status?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+#, fuzzy
+msgid "align-check"
+msgstr "check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+#, fuzzy
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [KOMMANDO] gjev generell hjelp, eller hjelp om KOMMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr ""
+
+#: parted/parted.c:2326
+#, fuzzy
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr "mklabel LABEL-TYPE lag ny disklabel (partisjonstabell)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+#, fuzzy
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYPE [FS-TYPE] START SLUTT lag ein partisjon"
+
+#: parted/parted.c:2341
+#, fuzzy
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart lagar ein partisjon utan å laga eit nytt filsystem der. Du kan "
+"spesifisera FS-TYPE for å setja ein passande partisjons-id.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+#, fuzzy
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name NR NAMN gje partisjonen NR namnet NAMN"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [NR] vis partisjonstabellen eller ein partisjon"
+
+#: parted/parted.c:2361
+#, fuzzy
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Utan argument skriv print ut heile partisjonstabellen. Dersom eit\n"
+"partisjonsnummer er oppgjeve, vil meir detaljert informasjon om\n"
+"partisjonen verta vist.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+#, fuzzy
+msgid "quit exit program"
+msgstr "quit avslutt programmet"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+#, fuzzy
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue START SLUTT redd tapte partisjonar nær START og SLUTT"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "rm NR slett partisjonen NR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+#, fuzzy
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NR slett partisjonen NR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+#, fuzzy
+msgid "select DEVICE choose the device to edit"
+msgstr "select EINING vel eininga du vil gjera endringar på"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr ""
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+#, fuzzy
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set NR FLAGG STATUS endra eit flagg på partisjonen NR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr ""
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr ""
+
+#: parted/parted.c:2463
+#, fuzzy
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "quit avslutt programmet"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr ""
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Ingen diskar funne"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Du må installera boot-lastaren på nytt før neste omstart. Les del 4 i "
+"brukarhandboka for meir informasjon."
+
+#: parted/parted.c:2666
+#, fuzzy
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Gløym ikkje å oppdatera /etc/fstab, om naudsynt.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+#, fuzzy
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Bruk: parted [FLAGG]... [EINING [KOMMANDO [PARAMETER]...]...]\n"
+"Utfør KOMMANDO med PARAMETER på EINING. Dersom ingen KOMMANDO er gjeven,\n"
+"køyrer GNU Parted i interaktiv modus.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, fuzzy, c-format
+msgid "invalid token: %s"
+msgstr "Ugyldig partisjonstabell på %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Forventa eit partisjonsnummer."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partisjonen finst ikkje."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Forventa ei filsystemtype."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Filsystemtypen «%s» er ukjend."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Forventa ein disklabel-type."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Kan ikkje laga fleire partisjonar."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Forventa ein partisjonstype."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "på"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "av"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "FLAGG:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "KOMMANDOar:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Brukar %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr ""
+
+#, c-format
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes"
+#~ msgstr ""
+#~ "Sektorane på %s er %d oktettar store. Parted fungerer berre skikkeleg på "
+#~ "diskar som har ein sektorstorleik på %d oktettar"
+
+#, c-format
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "Eininga %s har tvilsam geometri."
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+#, c-format
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "Eininga %s er korkje ein SCSI- eller IDE-disk."
+
+#, c-format
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Feil ved lesing av %s (%s) for å avgjera om partisjonen er montert."
+
+#~ msgid ""
+#~ "Unable to determine if partitions are mounted via /proc/mounts or /etc/"
+#~ "mtab. Make sure you don't attempt to resize or modify mounted file "
+#~ "systems. (Even read-only mounted)"
+#~ msgstr ""
+#~ "Kunne ikkje finna liste over monterte partisjonar i /proc/mounts eller /"
+#~ "etc/mtab. Forsikra deg om at du ikkje prøver å endra på monterte "
+#~ "filsystem (sjølv om dei er montert med kun lesetilgang)"
+
+#, c-format
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything nothing about the modifications you made "
+#~ "until you reboot. You should reboot your computer before doing anything "
+#~ "with %s."
+#~ msgstr ""
+#~ "Kjerna klarte ikkje å lesa partisjonstabellen på %s på nytt (%s). Dette "
+#~ "tyder at Linux ikkje veit om endringane du har gjort. Du må ta omstart "
+#~ "på maskinen din før du gjer noko med %s."
+
+#~ msgid ""
+#~ "The partition table was unable to be reread, as such, you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Kjerna klarte ikkje å lesa partisjonstabellen på nytt, så du må starta om "
+#~ "maskina før du kan montera endra partisjonar. Du må også installera boot-"
+#~ "lastaren på nytt før omstarten (som kanskje krever at du monterer "
+#~ "partisjonane du har endra). Det er umogleg å gjera båe delar! Start frå "
+#~ "ein redningsdiskett, og reinstallera boot-lastaren frå redningsmiljøet. "
+#~ "Les del 4 i brukarhandboka for meir informasjon."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s (%s). This means the Hurd knows nothing about "
+#~ "any modifications you made. You should reboot your computer before doing "
+#~ "anything with %s."
+#~ msgstr ""
+#~ "Partisjonstabellen på %s (%s). Det tyder at Hurd ikkje veit noko om "
+#~ "endringar du har gjort. Datamaskinen må startast på nytt før du gjer "
+#~ "noko med %s."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "Partisjonstabellen på %s er inkonsistent. Det kan koma av mange ting, "
+#~ "men mest sannsynleg har Linux brukt feil BIOS-geometri for %s. GNU "
+#~ "Parted trur den verkelege geometrien er %d/%d/%d (ikkje %d/%d/%d). Sjekk "
+#~ "først i BIOS om det stemmer. Du kan læra Linux dette ved å leggja til "
+#~ "parameteren %s=%d,%d,%d på kjernekommandolinja. Sjå dokumentasjonen til "
+#~ "LILO eller GRUB for meir informasjon. Viss du trur geometrien Parted "
+#~ "foreslår er rett, kan du velja Ignorer for å halda fram (og fiksa Linux "
+#~ "seinare). Viss ikkje, vel Avbryt (og fiks Linux og/eller BIOS-en no)."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "Partisjonstabellen på %s er inkonsistent. Det kan koma av mange ting, og "
+#~ "ofte er grunnen at Linux har brukt feil BIOS-geometri. I dette tilfellet "
+#~ "ser det ikkje slik ut. Det er trygt å oversjå denne feilen, men du kan "
+#~ "koma bort i problem med boot-lastaren (som kan rettast opp), og med FAT-"
+#~ "filsystem. Det er tilrådd å bruka LBA."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Kunne ikkje plassera partisjonen på ei passande skiljelinje. Dette tyder "
+#~ "vanlegvis at eit anna partisjonsprogram har laga ein partisjonstabell med "
+#~ "feil BIOS-geometri. Det er trygt å oversjå denne feilen, men du kan kome "
+#~ "bort i problem med boot-lastaren (som kan rettast opp)."
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted - possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s inneheld GPT-signaturar, som tyder på at han har ein GPT-tabell. Men "
+#~ "han har ikkje ein gyldig falsk MSDOS-partisjonstabell slik han skulle. "
+#~ "Kanskje vart han øydelagt, t.d. av eit program som ikkje forstår GPT-"
+#~ "partisjonstabellar. Eller kanskje du har sletta GPT-tabellen og brukar "
+#~ "no ein MSDOS-partisjonstabell. Er dette ein GPT-partisjonstabell?"
+
+#~ msgid "The boot region doesn't start at the start of the partition"
+#~ msgstr "Bootregionen startar ikkje på starten av partisjonen"
+
+#, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "Støtte for å opna %s-filsystem er ikkje lagt inn enno."
+
+#, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "Støtte for å sjekka %s-filsystem for feil er ikkje lagt inn enno."
+
+#~ msgid "raw block copying"
+#~ msgstr "rå blokkopiering"
+
+#~ msgid "growing file system"
+#~ msgstr "aukar storleik på filsystemet"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Kan ikkje kopiera inn i ein overlappande partisjon."
+
+#, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Å kopiera filsystemet er ikkje direkte støtta for %s. Men, støtte for å "
+#~ "endra storleik er med, så filsystemet kan kopierast viss den nye "
+#~ "partisjonen er minst like stor som den gamle. Du må altså anten krympa "
+#~ "partisjonen du prøver å kopiera, eller kopiera til ein større partisjon."
+
+#, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Støtte for å kopiera %s-filsystem er ikkje lagt inn enno."
+
+#, c-format
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "Ein programfeil oppstod i GNU Parted. Ver venleg å senda ei feilmelding "
+#~ "til bug-parted@gnu.org der du oppgjev versjonsnummeret (%s) og fylgjande "
+#~ "melding:"
+
+#, c-format
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Prøvde å lesa sektorane %ld-%ld utanfor partisjonen på %s"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Inkonsistente gruppe-deskriptorar"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "Filsystemet er fullt!"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "Dette ext2-filsystemet har eit ganske rart utlegg. Parted kan ikkje "
+#~ "endra storleiken på det (enno)."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr ""
+#~ "Ugyldig superblokk. Er du sikker på at dette er eit ext2-filsystem?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "Der er feil på filsystemet! Køyr e2fsck først."
+
+#~ msgid ""
+#~ "Filesystem was not cleanly unmounted! You should e2fsck. Modifying an "
+#~ "unclean filesystem could cause severe corruption."
+#~ msgstr ""
+#~ "Filsystemet vart ikkje avmontert på ein rein og pen måte. Du må køyra "
+#~ "e2fsck. Å gjera endringar på eit ureint filsystem kan føre til alvorleg "
+#~ "datatap."
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "Filsystemet brukar finessar GNU parted ikkje støttar"
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Kunne ikkje allokera buffercache."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr "Fann ein inode med feil tal på lenkar. Du bør køyra e2fsck først."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "For få ledige inodar!"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "Filsystemet er for fullt til å sletta ei gruppe!"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr "Filsystemet har for mange inodar i bruk til å sletta ei gruppe!"
+
+#~ msgid "adding groups"
+#~ msgstr "legg til grupper"
+
+#, c-format
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Filsystemet er for fullt til at ein kan endra storleiken til %i blokker. "
+#~ "Beklagar."
+
+#, c-format
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Filsystemet har for mange inodar i bruk til at ein kan endra storleiken "
+#~ "til %i blokker. Beklagar."
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr ""
+#~ "Filsystemet vart ikkje avmontert på ein rein og pen måte. Du må køyra "
+#~ "e2fsck."
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr "Krysslenka blokker funne! Køyr e2fsck først!"
+
+#, c-format
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "Blokk %i har ingen referansar til seg? Rart"
+
+#, c-format
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "Blokk %i burde ikkje ha vore merka!"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Ext2-filsystemet gjekk gjennom ein enkel sjekk. For ein meir grundig "
+#~ "sjekk, bruk programmet e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Beklagar, kan ikkje flytta starten på ein ext2-partisjon enno!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Kunne ikkje lagra buffercache til disk!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "skriv per-gruppe metadata"
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "Filsystemet har ein ugyldig signatur til å vera eit FAT-filsystem."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Dette filsystemet har ein logisk sektorstorleik på %d. GNU Parted "
+#~ "fungerer berre skikkeleg når sektorstorleiken er 512 oktettar."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Fila %s er klassifisert som ei systemfil. Å flytta denne fila kan føra "
+#~ "til at nokon program sluttar å fungera."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "For mange dårlege sider."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "der naudsynt, spør brukaren"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Kva partisjonsnummer skal vera kjelda?"
+
+#, c-format
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Du bad om ein partisjon på %.3f-%.3f MiB. Det nærmaste Parted kan koma "
+#~ "er %.3f-%.3f MiB."
+
+#~ msgid "Extended partitions can't have file systems. Did you want mkpart?"
+#~ msgstr "Utvidingspartisjonar kan ikkje ha filsystem. Meinte du mkpart?"
+
+#~ msgid "Can't move extended partitions."
+#~ msgstr "Kan ikkje flytta utvidingspartisjonar."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Kan ikkje flytta ein partisjon til seg sjølv. Kanskje du vil prøva å "
+#~ "endra storleik?"
+
+#, c-format
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Du bad om å flytta partisjonen til %.3f-%.3f MiB. Det nærmaste Parted "
+#~ "kan klara er %.3f-%.3f MiB."
+
+#, c-format
+#~ msgid "Minor: %d\n"
+#~ msgstr "Nummer: %d\n"
+
+#~ msgid "Flags: "
+#~ msgstr "Flagg: "
+
+#, c-format
+#~ msgid "File System: %s\n"
+#~ msgstr "Filsystem: %s\n"
+
+#, c-format
+#~ msgid "Size: %10.3fMb (%d%%)\n"
+#~ msgstr "Storleik: %10.3fMiB (%d%%)\n"
+
+#, c-format
+#~ msgid "Minimum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Minste storleik: %10.3fMiB (%d%%)\n"
+
+#, c-format
+#~ msgid "Maximum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Største storleik: %10.3fMiB (%d%%)\n"
+
+#, c-format
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "Diskgeometri for %s: 0.000-%.3f mebibytes\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Nr Start End "
+
+#~ msgid "Type "
+#~ msgstr "Type "
+
+#~ msgid "Filesystem "
+#~ msgstr "Filsystem "
+
+#~ msgid "Name "
+#~ msgstr "Namn "
+
+#, c-format
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Du bad om å endra storleik på partisjonen til %.3f-%.3f MiB. Det "
+#~ "nærmaste Parted kan klara er %.3f-%.3f MiB."
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr ""
+#~ "check NR ta ein enkel konsistenssjekk av filsystemet"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [FRÅ-EINING] FRÅ-NR TIL-NR kopier filsystem til ein annan "
+#~ "partisjon"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs NR FS-TYPE lag eit filsystem av FS-TYPE på partisjon NR"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr ""
+#~ "mkpartfs PART-TYPE FS-TYPE START SLUTT lag ein partition med eit "
+#~ "filsystem"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START END move partition MINOR"
+#~ msgstr "move NR START SLUTT flytt partisjonen NR"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr ""
+#~ "resize NR START SLUTT endra storleik på filsystemet på "
+#~ "partisjonen NR"
+
+#, c-format
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Du har funne ein programfeil i GNU Parted. Ver venleg å senda ei "
+#~ "feilmelding til bug-parted@gnu.org der du oppgjev versjonsnummeret (%s) "
+#~ "og fylgjande melding:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ " Du har Windows FAT-partisjon(ar) som ikkje brukar LBA. Viss BIOS "
+#~ "støttar LBA, bør du bytta til LBA ved å setja LBA-flagget på alle FAT-"
+#~ "partisjonar. Viss ikkje, sjekk at operativsystemet og BIOS har same "
+#~ "formeining om diskgeomtetri før du endrar storleik på nokon av FAT-"
+#~ "partisjonane."
+
+#, c-format
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "Operativsystemet trur geometrien på %s er %d/%d/%d, altså endar sylinder "
+#~ "1024 på %.3f MiB.%s"
+
+#, c-format
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "Operativsystemet meiner at geometrien til %s er %d/%d/%d.%s"
diff --git a/po/parted.pot b/po/parted.pot
new file mode 100644
index 0000000..54f684f
--- /dev/null
+++ b/po/parted.pot
@@ -0,0 +1,2916 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the GNU parted package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: GNU parted 3.6\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr ""
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr ""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr ""
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr ""
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr ""
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr ""
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr ""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr ""
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr ""
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr ""
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr ""
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr ""
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr ""
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr ""
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr ""
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr ""
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ""
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr ""
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr ""
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr ""
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr ""
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr ""
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr ""
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr ""
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr ""
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr ""
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr ""
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr ""
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr ""
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr ""
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr ""
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr ""
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr ""
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr ""
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr ""
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr ""
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr ""
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr ""
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr ""
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr ""
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr ""
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr ""
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr ""
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr ""
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr ""
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr ""
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr ""
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr ""
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr ""
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr ""
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr ""
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr ""
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr ""
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr ""
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr ""
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr ""
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr ""
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr ""
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr ""
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr ""
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr ""
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr ""
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr ""
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr ""
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr ""
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr ""
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr ""
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr ""
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr ""
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr ""
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr ""
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr ""
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr ""
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr ""
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr ""
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr ""
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr ""
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr ""
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr ""
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr ""
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr ""
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr ""
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr ""
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr ""
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr ""
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr ""
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr ""
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr ""
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr ""
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr ""
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr ""
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr ""
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr ""
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr ""
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr ""
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr ""
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr ""
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr ""
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr ""
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr ""
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr ""
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr ""
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr ""
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr ""
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr ""
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr ""
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr ""
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr ""
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr ""
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr ""
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr ""
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr ""
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr ""
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr ""
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr ""
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr ""
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr ""
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr ""
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr ""
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr ""
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr ""
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr ""
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr ""
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr ""
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr ""
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr ""
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr ""
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr ""
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr ""
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr ""
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr ""
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr ""
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr ""
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr ""
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr ""
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr ""
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr ""
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr ""
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr ""
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr ""
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr ""
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr ""
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr ""
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr ""
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr ""
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr ""
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr ""
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr ""
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr ""
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr ""
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr ""
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr ""
+
+#: parted/parted.c:949
+#, c-format
+msgid "%s disk labels do not support partition type."
+msgstr ""
+
+#: parted/parted.c:965
+msgid "Partition type-id?"
+msgstr ""
+
+#: parted/parted.c:972
+msgid "Invalid type-id."
+msgstr ""
+
+#: parted/parted.c:986
+msgid "Partition type-uuid?"
+msgstr ""
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr ""
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr ""
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr ""
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr ""
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr ""
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr ""
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr ""
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr ""
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr ""
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr ""
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr ""
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr ""
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr ""
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr ""
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr ""
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr ""
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr ""
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr ""
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr ""
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr ""
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr ""
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr ""
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr ""
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr ""
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr ""
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr ""
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr ""
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr ""
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr ""
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr ""
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr ""
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr ""
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr ""
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr ""
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr ""
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr ""
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr ""
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr ""
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr ""
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr ""
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr ""
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr ""
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr ""
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr ""
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr ""
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr ""
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr ""
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr ""
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr ""
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr ""
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr ""
diff --git a/po/pl.gmo b/po/pl.gmo
new file mode 100644
index 0000000..0cb1a65
--- /dev/null
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..373331d
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,3303 @@
+# Polish translations for GNU Parted package.
+# Copyright (C) 2003, 2005, 2006, 2007, 2009, 2010, 2011, 2012, 2014, 2021, 2022 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Wojciech Polak <polak@gnu.org>, 2003, 2005, 2006.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2006-2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-06 17:30+0200\n"
+"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "nieprawidłowy argument %s opcji %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "niejednoznaczny argument %s opcji %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Prawidłowe argumenty to:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "błąd zapisu"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Nieznany błąd systemowy"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opcja '%s%s' jest niejednoznaczna; możliwości:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: nieznana opcja '%s%s'\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opcja '%s%s' nie może mieć argumentów\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opcja '%s%s' musi mieć argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: błędna opcja -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opcja musi mieć argument -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Sukces"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nic nie pasuje"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Błędne wyrażenie regularne"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Błędny znak sortowany"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Błędna nazwa klasy znaku"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Kończący znak `\\'"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Błędne odniesienie wstecz"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Niesparowane [, [^, [:, [. lub [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Niesparowane ( lub \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Niesparowane \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Błędna zawartość \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Błędny koniec zakresu"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Pamięć wyczerpana"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Błędne poprzedzające wyrażenie regularne"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Przedwczesny koniec wyrażenia regularnego"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Wyrażenie regularne zbyt duże"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Niesparowane ) lub \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Brak poprzedniego wyrażenia regularnego"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yYtT]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "PakietujÄ…cy: %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "PakietujÄ…cy: %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licencja GPLv3+: GNU GPL w wersji 3 lub późniejszej:\n"
+"<%s>\n"
+"Ten program jest wolnodostępny: można go modyfikować i rozprowadzać.\n"
+"NIE MA ŻADNEJ GWARANCJI w zakresie dopuszczalnym przez prawo.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Autor: %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Autorzy: %s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Autorzy: %s, %s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s\n"
+"i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s, %s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s, %s, %s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s i %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Autorzy: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s i inni.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"Prosimy zgłaszać błędy na adres <%s>.\n"
+"Błędy w tłumaczeniu prosimy zgłaszać na adres: <translation-team-pl@lists."
+"sourceforge.net>.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Prosimy zgłaszać błędy w %s na adres <%s>.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Strona domowa projektu %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Ogólna pomoc przy używaniu oprogramowania GNU: <%s>.\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "pamięć wyczerpana"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Obraz dysku"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "BÅ‚Ä…d podczas otwierania %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Nie można otworzyć %s jednocześnie w trybie do odczytu i zapisu (%s). %s "
+"został otwarty tylko w trybie do odczytu."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s podczas ustawiania do odczytu na %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s podczas czytania %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Nie można zapisać do %s, ponieważ otwarte jest tylko do czytania."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s podczas ustawiania do zapisu na %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s podczas zapisu %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Polecenie `%s --help' pozwoli uzyskać więcej informacji.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Składnia: %s [OPCJA] [URZĄDZENIE]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Poinformowanie systemu operacyjnego o zmianach w tablicy partycji.\n"
+"\n"
+" -d, --dry-run pominięcie informowania systemu operacyjnego\n"
+" -s, --summary wypisanie podsumowania zawartości\n"
+" -h, --help wyświetlenie tego opisu i zakończenie\n"
+" -v, --version wyświetlenie informacji o wersji i zakończenie\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Jeśli nie podano URZĄDZENIA, sprawdzane są wszystkie partycje.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Prosimy zgłaszać błędy na adres <%s>.\n"
+"Błędy w tłumaczeniu prosimy zgłaszać na adres: <translation-team-pl@lists."
+"sourceforge.net>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Nie można otworzyć %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Detekcja geometrii nie powiodła się."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"UWAGA: nie powiodło się ponowne przeczytanie przez jądro tablicy partycji na "
+"%s (%s). W efekcie zmiany mogą nie być widoczne do restartu systemu."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Uwaga: nie można otworzyć %s (%s). W efekcue zmiany mogą nie być widoczne do "
+"restartu systemu."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Uwaga: nie udało się wyłączyć translacji na %s (%s). W efekcie zmiany mogą "
+"nie być widoczne do restartu systemu."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "BÅ‚Ä…d synchronizacji %s do dysku %s"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Nie można sprawdzić urządzenia %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Nie można określić typu dm %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Nie udało się określić rozmiaru sektora dla %s: %s.\n"
+"Użyto domyślnego rozmiaru sektora (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Nie udało się określić rozmiaru sektora fizycznego dla %s.\n"
+"Użyto rozmiaru sektora logicznego (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Nie można ustalić rozmiaru %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Ogólne IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Nie można uzyskać tożsamości urządzenia %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Urządzenie %s ma wiele (%d) logicznych sektorów w każdym sektorze "
+"fizycznym.\n"
+"GNU Parted obsługuje to EKSPERYMENTALNIE dla niektórych specjalnych połączeń "
+"etykiet dysków i systemów plików, np. GPT i ext2/3.\n"
+"Aktualne informacje znajdujÄ… siÄ™ na stronie WWW."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "BÅ‚Ä…d podczas inicjalizacji urzÄ…dzenia SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Urządzenie %s jest tak małe, że może nie być w stanie przechowywać systemu "
+"plików lub tablicy partycji. Być może dokonano niewłaściwego wyboru "
+"urzÄ…dzenia?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Nie można ustalić geometrii pliku/urządzenia %s. W tym przypadku nie jest "
+"zalecane używanie Parteda, chyba że NAPRAWDĘ wiesz co robisz!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Karta pamięci SD/MMC"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "UrzÄ…dzenie NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Kontroler DAC960 RAID"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "UrzÄ…dzenie Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "UrzÄ…dzenie ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Dysk DASD IBM S390"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "Wirtualny dysk DASD IBM iSeries"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "UrzÄ…dzenie NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Kontroler ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Kontroler I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UBD z User-Mode Linuksa"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "UrzÄ…dzenie loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linuksowy device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Wirtualne urzÄ…dzenie blokowe Xena"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Nieznane"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "UrzÄ…dzenie blokowe Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linuksowa programowa macierz RAID"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Ramdysk"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Ten typ urzÄ…dzenia nie jest wspierany"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "BÅ‚Ä…d podczas synchronizacji/zamykania %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0skoniec pliku w trakcie odczytu %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Błąd przy informowaniu jądra o modyfikacji partycji %s - %s. Oznacza to, że "
+"Linux nie będzie wiedział o zmianach wykonanych na %s do czasu restartu "
+"systemu - więc nie będzie można zamontować tej partycji ani użyć jej w inny "
+"sposób przed restartem."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Nie można ustalić początku i długości %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partycja %s na %s została zapisana, ale nie udało się poinformować jądra o "
+"tej zmianie, prawdopodobnie ponieważ partycje są w użyciu. W efekcie w "
+"użyciu pozostaną stare partycje; przed dalszymi zmianami trzeba zrestartować "
+"system."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Nie można mieć końca przed początkiem! (sektor pocz.=%jd długość=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Próba zapisania sektorów %ld-%ld poza partycją na %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "sprawdzam czy istniejÄ… uszkodzone bloki"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace zawiera %d wywołań na stosie:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Zapewnienie (%s) w %s:%d w funkcji %s() nie powiodło się."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: nierozpoznana etykieta dysku"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Biblioteka libparted nie posiada obsługi zapisu dla %s. Być może została ona "
+"zbudowana z obsługą tylko-do-odczytu."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partycja %d jest %s, lecz system plików jest %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "wyrównanie_cylindra"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Nieznana flaga dysku: %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Etykiety dysku %s nie wspierajÄ… rozszerzonych partycji."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Etykiety dysku %s nie wspierajÄ… logicznych lub rozszerzonych partycji."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Zbyt dużo partycji głównych."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Nie można dodać logicznej partycji do %s, ponieważ nie istnieje rozszerzona "
+"partycja."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Nie można mieć więcej niż jedną rozszerzoną partycję na %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Nie można mieć logicznych partycji poza rozszerzoną partycją."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s nie może mieć logicznej partycji poza rozszerzoną partycją."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Nie można mieć głównej partycji wewnątrz rozszerzonej partycji."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Nie można mieć partycji poza dyskiem!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Nie można mieć nakładających się partycji."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadane"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "wolna"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "rozszerzona"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logiczna"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "główna"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "Å‚adowalna"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "wymiany"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "ukryta"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "usługa-hp"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Nieznana flaga partycji: %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informacja"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "BÅ‚Ä…d"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatalny błąd"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "BÅ‚Ä…d"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Brak implementacji"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Popraw"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Tak"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nie"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Powtórz"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Zignoruj"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Poniechaj"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Został wykryty błąd w działaniu programu GNU Parted. Odwiedź stronę http://"
+"www.gnu.org/software/parted/parted.html w celu uzyskania informacji na temat "
+"zgłaszania błędów. Proszę wysłać raport na temat błędu na adres %s, "
+"dołączając przynajmniej numer wersji (%s) oraz następujący komunikat: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Obsługa odczytu etykiet dyskowych AIX jeszcze nie została zaimplementowana."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Obsługa zapisu etykiet dyskowych AIX jeszcze nie została zaimplementowana."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Obsługa dodawania partycji do etykiet dyskowych AIX jeszcze nie została "
+"zaimplementowana."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Obsługa powielania partycji na etykietach dyskowych AIX jeszcze nie została "
+"zaimplementowana."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Obsługa ustawiania rodzaju systemu partycji na etykietach dyskowych AIX "
+"jeszcze nie została zaimplementowana."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Obsługa ustawiania flag na etykietach dyskowych AIX jeszcze nie została "
+"zaimplementowana."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Nie można używać tablic partycji Atari na dyskach z rozmiarem sektora innym "
+"niż %d bajtów."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Nie można używać tablic partycji Atari na dyskach o liczbie sektorów powyżej "
+"%d."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Wykryto zbyt dużo partycji Atari. Być może jest pętla w liście XGM. "
+"Przerwano."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Nie znaleziono partycji danych w ARS w sektorze %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Wpis następnego logicznego ARS nie jest typu XGM w ARS w sektorze %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Wygląda na to, że na tym dysku (%s) nie ma tablicy partycji Atari lub jest "
+"uszkodzona."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "Brak miejsca w sektorze %lli, aby zapisać ARS partycji logicznej %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Brak miejsca w sektorze %lli, aby zapisać ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Liczba sektorów zapisana w tablicy partycji nie odpowiada rozmiarowi "
+"urządzenia. Czy poprawić tablicę partycji?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Brak miejsca w sektorze %lli, aby zapisać BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Pozostały jeszcze partycje po wypełnieniu głównej tablicy AHDI."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Główna tablica AHDI została wypełniona wszystkimi partycjami, ale tablica "
+"ICD nie jest pusta, więc oprogramowanie zgodne z ICD wykryje więcej partycji "
+"o nieznanym rozmiarze i położeniu. Czy unieważnić tablicę ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Wpisy ICD nie mogą zawierać partycji rozszerzonych ani logicznych."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Po wypełnieniu tablic pozostały jeszcze partycje."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Nie można użyć partycji rozszerzonej XGM w trybie ICD (powyżej %d partycji "
+"głównych; jeśli XGM jest pierwszą, liczy się jako dwie)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Nie można zaspokoić wszystkich ograniczeń na partycji."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Nie można użyć więcej niż %d partycji głównych (tryb ICD) w przypadku użycia "
+"partycji rozszerzonej XGM. Jeśli XGM jest pierwszą, liczy się jako dwie."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Nie można przydzielić numeru partycji."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Nie można przydzielić miejsca na etykietę dysku bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Tablica partycji urządzenia DASD-LDL nie może być zmieniona.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Nie można przydzielić miejsca na etykiecie dysku dasd."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Nieprawidłowa tablica partycji na %s -- błędna sygnatura %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Nieprawidłowa tablica partycji - partycja rekursywna na %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted nie może zmienić rozmiaru partycji zarządzanych przez Windows Dynamic "
+"Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "nie można utworzyć więcej partycji"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"%s nie posiada żadnych rozszerzonych partycji (partycji nagłówka wolumenu)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Suma kontrolna jest błędna i oznacza to, że tablica partycji jest uszkodzona."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Tylko główne partycje mogą być typu root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Tylko główne partycje mogą być partycjami wymiany."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Tylko logiczne partycje mogą być plikami ładowalnymi (boot)."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"nie udało się ustawić nazwy partycji dvh na %s:\n"
+"Tylko logiczne partycje (Å‚adowalne pliki) majÄ… nazwy."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Zbyt dużo partycji głównych"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "błąd otwierania"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "błąd seek"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "błąd odczytu"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "błąd ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "niezgodność wersji API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nieobsługiwany typ dysku"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nieobsługiwany format dysku"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Dysk jest w użyciu"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Błąd składni w pliku konfiguracyjnym"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Uszkodzona etykieta wolumenu"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Uszkodzona nazwa zbioru danych"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Przydzielanie pamięci powiodło się"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Weryfikacja urządzenia nie powiodło się"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Podane urzÄ…dzenie nie jest poprawnym urzÄ…dzeniem DASD"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "Nie znaleziono VOLSER na urzÄ…dzeniu"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "BÅ‚Ä…d krytyczny"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Brak miejsca na etykietÄ™ wolumenu."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Brak miejsca na informacjÄ™ o partycji."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Nieprawidłowe dane VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Nie udało się odczytać wersji API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Aktualna wersja API '%d' nie zgadza siÄ™ z wersjÄ… API sterownika dasd '%d'!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Nie udało się odczytać rozmiaru dysku."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Nie udało się odczytać informacji o geometrii dysku."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Nie udało się odczytać informacji o rozmiarze bloku."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Geometria dysku nie pasuje do urzÄ…dzenia DASD typu 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "urządzenie jest zbyt małe na GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Format tablicy partycji GPT (wersja %x) jest nowszy niż program Parted jest "
+"w stanie rozpoznać. Poinformuj nas o tym!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Nie całe dostępne miejsce na %s wydaje się być używane, poprawić GPT, aby "
+"użyte zostało całe miejsce (dodatkowe %llu bloków) czy kontynuować przy "
+"aktualnych ustawieniach? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Kopia zapasowa tablicy GPT nie znajduje się na końcu dysku, a powinna. Czy "
+"naprawić to poprzez przesunięcie kopii zapasowej na koniec (i usunięcie "
+"starej kopii)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Obie tablice GPT, główna i jej kopia zapasowa, są uszkodzone. Spróbuj "
+"utworzyć nową tablicę oraz użyj opcję 'rescue', aby odzyskać partycje."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Zapasowa tablica GPT jest uszkodzona, ale główna wydaje się być w porządku i "
+"zostanie ona użyta."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Główna tablica GPT jest uszkodzona, ale jej kopia zapasowa wydaje się być w "
+"porządku i zostanie ona użyta."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "niezgodność sumy CRC głównej tablicy partycji"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "nie udało się przetłumaczyć nazwy partycji"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Nieprawidłowy podpis %x dla etykiet dysków Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Mapa partycji nie posiada wpisu mapy partycji!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s jest zbyt mały dla etykiety dysku Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partycja %d posiada nieprawidłowy podpis %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partycja %d posiada nieprawidłową długość 0 bajtów!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Obszar danych nie rozpoczyna siÄ™ na poczÄ…tku partycji."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Obszar rozruchowy partycji nie okupuje całej partycji."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Obszar danych partycji nie okupuje całej partycji."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Dziwny rozmiar bloku w deskryptorze urządzenia: %d bajtów nie jest podzielne "
+"przez 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Deskryptor napędu mówi, że fizyczny rozmiar bloku wynosi %d bajtów, ale "
+"Linux mówi, że wynosi %d bajtów."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nie znaleziono prawidłowej mapy partycji."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Wystąpił konflikt między rozmiarami wpisów mapy partycji! Wpis 1 mówi, że "
+"jest %d, ale wpis %d mówi, że jest %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Dziwne! IstniejÄ… 2 wpisy map partycji!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Zmiana nazwy partycji root lub wymiany spowoduje, że Linux jej nie rozpozna."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Nie można dodać kolejnej partycji -- mapa partycji jest zbyt mała!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Nieprawidłowa tablica partycji na %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partycja %d nie jest wyrównana do granic cylindra. Nadal nie jest to "
+"wspierane."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Nie można dodać kolejnej partycji."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"długość partycji %jd sektorów przekracza maksimum tablicy partycji %s "
+"wynoszÄ…ce %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"poczÄ…tkowy numer sektora %jd przekracza maksimum tablicy partycji %s "
+"wynoszÄ…ce %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Nieprawidłowa suma kontrolna bloku %llu typu %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Nie znaleziono bloku rdb, co nie powinno się zdarzyć."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Wykryto pętlę na bloku %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Lista %s wydaje się być uszkodzona na bloku %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Nie powiodło się wypisanie uszkodzonych bloków."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Wypisanie bloków partycji nie powiodło się."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Wypisanie bloków systemu plików nie powiodło się."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Nie powiodło się wypisanie bloków rozruchowych."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Nie powiódł się zapis bloku partycji na %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Wykryto uszkodzonÄ… etykietÄ™ dysku Sun."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometria dysku CHS (%d,%d,%d), zgłoszona przez system operacyjny, nie "
+"pasuje do geometrii przechowywanej w etykiecie dysku (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Etykieta dysku opisuje dysk większy niż %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+"Dysk posiada %d cylindrów, co stanowi więcej niż dopuszczalny limit 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Partycja całego dysku jest jedyną jaka pozostała. Generalnie nie jest to "
+"dobry pomysł, aby ją nadpisać inną, prawdziwą. System Solaris może się bez "
+"niej nie uruchomić, zaś SILO (program ładujący SPARC) również ją doceni."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Etykieta dysku Sun jest pełna."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "otwieranie urządzenia nie powiodło się"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "ustawianie pozycji na urządzeniu nie powiodło się"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "zapis na urządzeniu nie powiódł się"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "odczyt z urządzenia nie powiódł się"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Nie udało się odczytać etykiety wolumenu."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Nie udało się zapisać etykiety wolumenu."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Nie udało się odczytać etykiet VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Nie udało się odczytać VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Nie udało się odczytać VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Nie udało się odczytać VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Nie udało się odczytać VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Nie udało się zapisać etykiet VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Nie udało się zapisać VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Nie udało się zapisać VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Nie udało się zapisać VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Nie udało się zapisać VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Nie udało się zapisać VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Brak pamięci."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"Nie można pobrać rozmiaru jednostki dla specjalnej jednostki 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" posiada nieprawidłową składnię dla lokacji."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Maksymalna wartość głowicy wynosi %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Maksymalna wartość sektora wynosi %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Lokacja %s jest poza urzÄ…dzeniem %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Nieprawidłowy numer."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Użycie mniejszej jednostki zamiast wartości < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Nie powiodło się przydzielanie bloku partycji\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Nie powiodło się przydzielanie bloku\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Nie udało się odczytać bloku startowego %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Nie udało się odczytać bloku głównego %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Nie powiodło się przydzielanie elementu id listy\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Nie udało się odczytać bloku %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Nieprawidłowa suma kontrolna bloku %llu typu %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Nie udało się zapisać bloku %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Nie powiodło się przydzielanie bloku rdb disk_specific\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Nie znaleziono bloku rdb, co nie powinno się zdarzyć\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Nie powiódł się odczyt bloku partycji %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"Program GNU Parted został nieprawidłowo zbudowany: sektor rozruchowy FAT "
+"powinien mieć 512 bajtów. Wsparcie dla FAT zostaje wyłączone."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "System plików posiada nieprawidłowy podpis dla systemu plików FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"System plików posiada nieprawidłowy rozmiar sektora dla systemu plików FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"System plików posiada nieprawidłowy rozmiar klastra dla systemu plików FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"System plików posiada nieprawidłową ilość zarezerwowanych sektorów dla "
+"systemu plików FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "System plików posiada nieprawidłową ilość FAT-ów."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Geometria CHS systemu plików to (%d, %d, %d), co jest błędne. Geometria CHS "
+"tablicy partycji to (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Sektor rozruchowy FAT mówi, że rozmiar sektora logicznego jest 0. Dziwne."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Sektor rozruchowy FAT mówi, że nie ma żadnych tablic FAT. Dziwne."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Sektor rozruchowy FAT mówi, że klastry zajmują 0 sektorów. Dziwne."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Systemem plików jest FAT12, który nie jest wspierany."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Nierozpoznany podpis linuksowej partycji wymiany starego typu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Nierozpoznany podpis linuksowej partycji wymiany nowego typu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Nierozpoznany podpis linuksowej partycji wymiany swsusp '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted nie może używać systemów plików HFS na dyskach z rozmiarem sektora "
+"innym niż %d bajtów."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Geometrią CHS systemu pliku jest (%d, %d, %d), która nie jest prawidłowa. "
+"Geometrią CHS tablicy partycji jest (%d, %d, %d). Jeśli zignorujesz, to "
+"geometria CHS systemu pliku pozostanie niezmieniona. Jeśli zdecydujesz się "
+"naprawić, geometria CHS systemu plików zostanie dopasowana do geometrii CHS "
+"tablicy partycji."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Sektor informacyjny posiada nieprawidłowy podpis (%x). Na razie poniechaj "
+"aktualną operację i wyślij raport dotyczący błędów. Ewentualnie zignoruj "
+"całą sytuację."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Potrzeba %s wolnego miejsca, aby zmniejszyć tę partycję do tego rozmiaru. "
+"Teraz wolne jest tylko %s."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Różnica początku klastra = %d, co nie jest wielokrotnością rozmiaru klastra "
+"%d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Błędny wpis katalogu dla %s: pierwszy klaster jest znacznikiem końca pliku."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Błędny FAT: nie zakończony łańcuch dla pliku %s. Należy uruchomić program "
+"dosfsck lub scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Błędny FAT: klaster %d poza systemem plików w łańcuchu dla pliku %s. Należy "
+"uruchomić program dosfsck lub scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Błędny FAT: klaster %d dla pliku %s pokrywa się z innym plikiem. Należy "
+"uruchomić program dosfsck lub scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s ma %dk, ale ma klastrów: %d (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partycja za duża/za mała dla systemu plików %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Tablice FAT różnią się. Jeżeli nie jest to jasny przypadek, należy anulować "
+"operację, uruchomić program scandisk na tym systemie plików i wtedy wrócić "
+"do Parteda"
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Brak możliwych konfiguracji dla tego rodzaju FAT-u."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"System plików nie ma oczekiwanych rozmiarów lubianych przez Windows. Rozmiar "
+"klastra to %dk (oczekiwano %dk); liczba klastrów to %d (oczekiwano %d); "
+"rozmiar FAT-ów w sektorach to %d (oczekiwano %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "System plików zgłasza wolne miejsce w klastrach jako %d, a nie %d."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Za mało miejsca w głównym katalogu na wszystkie pliki. Można anulować lub "
+"zignorować, co spowoduje utratę plików."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Błąd zapisu w katalogu głównym."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Jeżeli system plików pozostanie jako FAT16, nie będzie problemów."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"W przypadku konwersji do FAT16, jeśli na partycji zainstalowany jest MS "
+"Windows, trzeba przeinstalować rekord startowy MS Windows. W tym celu należy "
+"zasięgnąć rady w podręczniku Parteda (lub swojej dystrybucji)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Jeżeli system plików pozostanie jako FAT32, nie powstaną żadne nowe problemy."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"W przypadku konwersji do FAT32, jeśli na partycji zainstalowany jest MS "
+"Windows, trzeba przeinstalować rekord startowy MS Windows. W tym celu należy "
+"zasięgnąć rady w podręczniku Parteda (lub swojej dystrybucji). Ponadto "
+"konwersja do FAT32 uczyni system plików nieczytelnym dla systemów MS DOS, MS "
+"Windows 95a i MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Czy użyć FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"System plików można powiększyć do tego rozmiaru tylko konwertując go do "
+"FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"System plików można powiększyć do tego rozmiaru tylko konwertując go do "
+"FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted nie jest w stanie zmienić rozmiaru partycji do tego rozmiaru. "
+"Pracujemy nad tym!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d nośnik %x nie odpowiada nośnikowi %x w sektorze rozruchowym. Należy "
+"prawdopodobnie uruchomić program scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: klaster %ld poza systemem plików"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: klaster %ld poza systemem plików"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: brak wolnych klastrów"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Nie udało się wykryć systemu plików."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "zmiana rozmiaru systemów plików %s nie jest obsługiwana"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "System plików jest większy niż jego wolumen!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "System plików zawiera błędy."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Nie można odczytać wadliwych bloków."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Próba zarejestrowania ekstentu zaczynającego się od bloku 0x%X, ale inny już "
+"istnieje w tym miejscu. Proszę sprawdzić system plików!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Próba przeniesienia ekstentu z bloku 0x%X do bloku 0x%X, ale inny już "
+"istnieje w tym miejscu. To się nie powinno zdarzyć!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Nie udało się uaktualnić pamięci podręcznej ekstentów dla pliku HFS o CNID "
+"%X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Próba odczytu pliku HFS o CNID %X za końcem pliku."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Nie udało się odnaleźć sektora %lli pliku HFS o CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Próba zapisu pliku HFS o CNID %X za końcem pliku."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Nie udało się uaktualnić pamięci podręcznej ekstentów dla pliku HFS+ o CNID "
+"%X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Próba odczytu pliku HFS+ o CNID %X za końcem pliku."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Nie udało się odnaleźć sektora %lli pliku HFS+ o CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Próba zapisu pliku HFS+ o CNID %X za końcem pliku."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Niestety nie można jeszcze zmienić rozmiaru HFS-a w ten sposób."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "zmniejszanie"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Relokacja danych nie powiodła się."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Po relokacji danych pozostała część danych na końcu wolumenu."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "zapis głównego bloku katalogu HFS (Master Directory Block)"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Nie znaleziono poprawnej sygnatury HFS[+X] podczas otwierania."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Wersja %d systemu plików HFS+ nie jest obsługiwana."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Wersja %d systemu plików HFSX nie jest obsługiwana."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Po relokacji danych pozostała część danych na końcu wolumenu."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "BÅ‚Ä…d podczas zapisu pliku alokacji."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+"Błąd podczas zapisu części pliku alokacji przeznaczonej dla kompatybilności."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "zapis nagłówka wolumenu HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Podczas szukania obowiązkowego pliku wadliwych bloków wystąpił błąd."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Prawdopodobnie jest błąd w obudowaniu HFS: plik wadliwych bloków nie zawiera "
+"osadzonego wolumenu HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+"Niestety nie można jeszcze zmienić rozmiaru systemu plików HFS+ w ten sposób."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "zmniejszanie osadzonego wolumenu HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Zmiana rozmiaru wolumenu HFS+ nie powiodła się."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "zmniejszanie obudowania HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Uaktualnianie obudowania HFS nie powiodło się."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"To nie jest prawdziwe sprawdzenie systemu plików %s, a jedynie wydobycie "
+"specjalnych plików niskopoziomowych do celów diagnostycznych."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Błędna suma kontrolna nagłówka listy bloków."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Błędny rozmiar bloku transakcji w trakcie odtwarzania kroniki (bajtów: %i)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Kronika przechowywana poza wolumenem nie jest obsługiwana. Proszę spróbować "
+"wyłączyć kronikę i uruchomić ponownie Parteda."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Położenie lub rozmiar kroniki nie jest wielokrotnością rozmiaru sektora."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Nieprawidłowe wartości magiczne w nagłówku kroniki."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Niezgodność rozmiaru kroniki między blokiem informacyjnym kroniki a "
+"nagłówkiem kroniki."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Niektóre pola nagłówka nie są wielokrotnością rozmiaru sektora."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Rozmiar sektora zapisany w kronice jest inny niż 512 bajtów. Parted "
+"obsługuje tylko sektory o długości 512 bajtów."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Błędna suma kontrolna kroniki."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Kronika nie jest pusta. Parted musi odtworzyć transakcje przed otworzeniem "
+"systemu plików - system plików zostanie zmodyfikowany."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Nagłówek wolumenu w bloku głównego katalogu zmienił się przy odtwarzaniu "
+"kroniki. Należy uruchomić ponownie Parteda."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Ekstent nie został zrelokowany."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Odwołanie do ekstentu pochodzi z niewłaściwego miejsca. Proszę sprawdzić "
+"system plików!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Ten wolumen HFS nie ma pliku katalogu. To bardzo niezwykłe!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "Ten wolumen HFS nie ma pliku przepełnień ekstenów. To dość niezwykłe!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Plik przepełnień ekstentów nie powinien zawierać własnych ekstentów! Proszę "
+"sprawdzić system plików."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Nie udało się zbuforować systemu plików w pamięci."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Nie udało się wczytać listy wadliwych bloków."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Wystąpił błąd w trakcie relokacji ekstentów."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Ten wolumen HFS+ nie zawiera pliku katalogu. To bardzo niezwykłe!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ten wolumen HFS+ nie zawiera pliku przepełnień ekstentów. To dość niezwykłe!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "wyświetla tę oto pomoc"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "wypisuje rozkład partycji na wszystkich wykrytych urządzeniach"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "wyświetla dane w formacie czytelnym dla maszyny"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "wyświetla dane w formacie JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nigdy nie prosi użytkownika o interwencję"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "w trybie skryptu poprawia zamiast kończenia po zapytaniu"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "wyświetla numer wersji"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "wyrównanie dla nowych partycji"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMER oznacza numer partycji używanej przez Linuksa. Dla etykiet dysków MS-"
+"DOS liczba partycji głównych mieści się w przedziale 1-4, zaś partycje "
+"logiczne zajmujÄ… kolejne numery poczÄ…wszy od 5.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TYP-ETYKIETY stanowi jedną z następujących wartości: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAGA stanowi jedną z następujących wartości: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "JEDNOSTKA stanowi jedną z następujących wartości: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "pożądane wyrównanie: minimalne lub optymalne"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr ""
+"TYP-PARTYCJI stanowi jedną z następujących wartości: główna, logiczna, "
+"rozszerzona\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "SYSTEM-PLIKÓW stanowi jedną z następujących wartości: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"POCZĄTEK i KONIEC oznaczają położenia na dysku, np. 4GB lub 10%. Ujemne "
+"wartości są liczone od końca dysku. Na przykład -1s oznacza dokładnie "
+"ostatni sektor.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"KONIEC to miejsce na dysku, np. 4GB lub 10%. Ujemne wartości są liczone od "
+"końca dysku. Na przykład -1s oznacza dokładnie ostatni sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STAN jest reprezentowany poprzez: włączony, wyłączony\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "URZÄ„DZENIEM jest zwykle /dev/hda lub /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAZWA jest dowolnym słowem jakie chcesz\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Program ten jest wolnodostępny, zgodnie z Powszechną Licencją Publiczną "
+"GNU.\n"
+"\n"
+"Program ten udostępniany jest w nadziei, że będzie przydatny, ale BEZ\n"
+"ŻADNEJ GWARANCJI, nawet bez domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo\n"
+"PRZYDATNOŚCI DO KONKRETNYCH ZASTOSOWAŃ. Więcej szczegółów znajduje się\n"
+"w Powszechnej Licencji Publicznej GNU.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(czas do końca %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partycja %s jest używana. Czy na pewno kontynuować?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partycja (partycje) na %s są używane."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"IstniejÄ…ca etykieta dysku na %s zostanie zniszczona, a wszystkie dane na tym "
+"dysku zostaną utracone. Kontynuować?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Nowy typ etykiety dysku?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Typ partycji?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nazwa partycji?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Typ systemu plików?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "PoczÄ…tek?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Koniec?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Wybrano partycję od %s do %s (sektorów: %llu..%llu).\n"
+"Najbliższa z jaką Parted może sobie poradzić jest od %s do %s (sektorów: "
+"%llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Czy jest to do przyjęcia?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Partycja wynikowa nie jest wyrównana właściwie dla najlepszej wydajności: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "nieznana (malloc nie powiódł się)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Etykiety dysku %s nie obsługują nazwy partycji."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Numer partycji?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Etykiety dysku %s nie obsługują nazwy partycji."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Typ partycji?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Nieprawidłowy numer."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Typ partycji?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Nieprawidłowy numer."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Geometria BIOS cylinder,głowica,sektor: %d,%d,%d. Każdy cylinder ma %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Dysk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Rozmiar sektora (logiczny/fizyczny): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tablica partycji: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Flagi dysku: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Numer"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "PoczÄ…tek"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Koniec"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Rozmiar"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Typ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "System plików"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nazwa"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flaga"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Wolne miejsce"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Partycja %s %s została znaleziona na %s -> %s. Czy chcesz ją dodać do "
+"tablicy partycji?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "szukam systemów plików"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Polecenie zmiany rozmiaru zostało usunięte w partedzie 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Zmniejszenie rozmiaru partycji może spowodować utratę danych, czy na pewno "
+"kontynuować?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nowe urzÄ…dzenie?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "rodzaj wyrównania(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d wyrównana\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d nie wyrównana: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flaga do przestawienia?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nowy stan?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Jednostka?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "sprawdź-wyrównanie"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"sprawdź-wyrównanie TYP N sprawdzenie wyrównania TYP(min|opt) "
+"partycji N"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "pomoc"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"pomoc [POLECENIE] wyświetla pomoc ogólną lub dotyczącą POLECENIA"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TYP-ETYKIETY tworzy nowÄ… etykietÄ™ dysku (tablicÄ™ partycji)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TYP-PARTYCJI [SYSTEM-PLIKÓW] POCZĄTEK KONIEC tworzy partycję"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"Polecenie 'mkpart' tworzy partycję bez tworzenia nowego systemu plików na "
+"tej partycji. Opcjonalny SYSTEM-PLIKÓW może zostać podany do określenia "
+"właściwego identyfikatora partycji.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "nazwa"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name NUMER NAZWA nadaje NAZWĘ partycji NUMER"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "drukuj"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] wyświetla tablicę partycji, "
+"dostępne urządzenia, wolne miejsce lub wszystkie znalezione partycje"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Bez argumentów 'print' wyświetla całą tablicę partycji. Jednak z "
+"następującymi parametrami wykonuje różne inne akcje:\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : wyświetla wszystkie aktywne urządzenia blokowe\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : wyświetla informacje o wolnym, niespartycjonowanym miejscu na "
+"aktualnym urzÄ…dzeniu blokowym\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : wyświetla tablice partycji wszystkich aktywnych urządzeń "
+"blokowych\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "koniec"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit kończy pracę programu"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "uratuj"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue POCZÄ„TEK KONIEC odzyskuje utraconÄ… partycjÄ™ blisko POCZÄ„TKU i "
+"KOŃCA"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "zmień-rozmiar"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Polecenie zmiany rozmiaru zostało usunięte w partedzie 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart NUMER KONIEC zmienia rozmiar partycji NUMER"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "usuń"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMER usuwa partycjÄ™ NUMER"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "wybierz"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select URZÄ„DZENIE wybiera urzÄ…dzenie do edycji"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "ustaw_dysk"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_set FLAGA STAN zmienia flagÄ™ na wybranym urzÄ…dzeniu"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "przełącz_dysk"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAGA] przestawia stan FLAGI na wybranym urzÄ…dzeniu"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "ustaw"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set NUMER FLAGA STAN zmienia flagÄ™ na partycji NUMER"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "przestaw"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr "toggle [NUMER [FLAGA]] przestawia stan FLAGI na partycji NUMER"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "jednostka"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "unit JEDNOSTKA ustawia domyślną jednostkę"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "wersja"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version wyświetla numer wersji GNU Parteda i "
+"informacje o prawach autorskich"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' wyświetla informacje o prawach autorskich i wersji dla tej kopii "
+"GNU Parteda\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Składnia: %s [-hlmsfv] [-a<wyrównanie>] [URZĄDZENIE [POLECENIE "
+"[PARAMETRY]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nie znaleziono urzÄ…dzenia"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "UWAGA: Nie jesteś superużytkownikiem. Uważaj na uprawnienia.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Należy przeinstalować program ładujący (boot loader) przed ponownym "
+"uruchomieniem komputera. Przeczytaj rozdział 4 dokumentacji użytkownika "
+"Parted, aby uzyskać więcej informacji."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Może wystąpić potrzeba aktualizacji /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Witamy w GNU Partedzie! Listę poleceń można zobaczyć po napisaniu 'help'.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Składnia: parted [OPCJA]... [URZĄDZENIE [POLECENIE [PARAMETRY]...]...]\n"
+"Wykonuje POLECENIA z PARAMETRAMI dla URZĄDZENIA. Jeśli nie podano POLECEŃ,\n"
+"program zostanie uruchomiony w trybie interaktywnym.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Znalazłeś błąd w programie GNU Parted! Poniżej znajduje się instrukcja\n"
+"postępowania:\n"
+"\n"
+"Nie panikuj! Błąd najprawdopodobniej nie dotknął żadnych twoich danych.\n"
+"Pomóż nam poprawić ten błąd wykonując następujące czynności:\n"
+"\n"
+"Sprawdź, czy błąd został już poprawiony sprawdzając najnowszą wersję GNU\n"
+"Parteda dostępną pod adresem:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Proszę sprawdzić tę wersję przed zgłaszaniem błędu.\n"
+"\n"
+"Jeśli błąd nie został jeszcze poprawiony lub nie wiesz, jak to sprawdzić,\n"
+"proszę odwiedzić stronę GNU Parteda:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"gdzie znajduje się więcej informacji.\n"
+"\n"
+"Zgłoszenie błędu powinno zawierać wersję tego wydania (%s)\n"
+"wraz z poniższym komunikatem o błędzie, wyjściem polecenia\n"
+"\n"
+"\tparted URZÄ„DZENIE unit co print unit s print\n"
+"\n"
+"i następującą historią wprowadzonych poleceń.\n"
+"Dołącz także dodatkowe informacje o konfiguracji, które uważasz\n"
+"za istotne.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Historia poleceń:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: SEGV_MAPERR (Adres nie odwzorowany na obiekcie)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Błąd: SEGV_ACCERR (Nieprawidłowe uprawnienia dla odwzorowanego obiektu)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Błąd: Wystąpił ogólny sygnał SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Błąd: FPE_INTDIV (dzielenie przez zero na liczbach całkowitych)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Błąd: FPE_INTOVF (przepełnienie dla liczby całkowitej)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: FPE_FLTDIV (dzielenie przez zero na liczbach zmiennoprzecinkowych)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Błąd: FPE_FLTOVF (przepełnienie dla liczby zmiennoprzecinkowej)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Błąd: FPE_FLTUND (niedopełnienie dla liczby zmiennoprzecinkowej)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Błąd: FPE_FLTRES (niedokładny wynik dla liczb zmiennoprzecinkowych)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Błąd: FPE_FLTINV (nieprawidłowa operacja dla liczb zmiennoprzecinkowych)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: FPE_FLTSUB (indeks spoza zakresu dla liczb zmiennoprzecinkowych)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Błąd: Wystąpił ogólny sygnał SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: ILL_ILLOPC (niedozwolony kod instrukcji)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: ILL_ILLOPN (niedozwolony operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: ILL_ILLADR (niedozwolony tryb adresowania)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Błąd: ILL_ILLTRP (niedozwolona pułapka)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: ILL_PRVOPC (uprzywilejowany kod instrukcji)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"BÅ‚Ä…d: ILL_PRVREG (uprzywilejowany rejestr)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Błąd: ILL_COPROC (błąd koprocesora)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Błąd: ILL_BADSTK (wewnętrzny błąd stosu)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Błąd: Wystąpił ogólny sygnał SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "nieprawidłowy token: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Oczekiwany był numer partycji."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partycja nie istnieje."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Oczekiwany był typ systemu plików."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Nieznany typ systemu plików \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Oczekiwany był typ etykiety dysku."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Brak obsługiwanych flag"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Nie można utworzyć więcej partycji."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Oczekiwany był typ partycji."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "włączone"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "wyłączone"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optymalne"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimalne"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPCJE:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "POLECENIA:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Prosimy zgłaszać błędy na adres <%s>.\n"
+"Błędy w tłumaczeniu prosimy zgłaszać na adres: <translation-team-pl@lists."
+"sourceforge.net>.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Użycie %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "To polecenie nie ma sensu w trybie nieinteraktywnym.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Rozszerzone partycje nie mogą być ukryte na etykietach dysków msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Rozszerzone partycje nie mogą być partycjami odzyskiwania na etykietach "
+#~ "dysków msdos."
diff --git a/po/pt.gmo b/po/pt.gmo
new file mode 100644
index 0000000..ccb5d7a
--- /dev/null
+++ b/po/pt.gmo
Binary files differ
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..d8e3d0a
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,3594 @@
+# Portuguese messages for GNU parted.
+# Copyright (C) 2001 Free Software Foundation, Inc.
+# Gonçalo Silva <goncalo.silva@caixamagica.pt>, 2001.
+# Based on pt_BR.po made by Eliphas Levy Theodoro.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 1.4.20\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2001-10-16 20:16+02:00\n"
+"Last-Translator: Gonçalo Silva <goncalo.silva@caixamagica.org>\n"
+"Language-Team: Portuguese <pt@li.org>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:193
+#, fuzzy
+msgid "Unknown system error"
+msgstr "Tipo de sistema de ficheiros desconhecido."
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr ""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr ""
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr ""
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr ""
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr ""
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr ""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr ""
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr ""
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr ""
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr ""
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr ""
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr ""
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr ""
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr ""
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr ""
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ""
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr ""
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr ""
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr ""
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Erro abrindo %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Não posso abrir %s para gravação (%s). %s foi aberto somente para leitura."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s durante procura para leitura em %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s durante leitura em %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Não posso gravar em %s, pois ela foi aberta como somente para leitura."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s durante procura para escrita em %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s durante escrita em %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr ""
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr ""
+
+#: libparted/arch/gnu.c:130
+#, fuzzy
+msgid "Unable to probe store."
+msgstr "Impossível alinhar a partição."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr ""
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Não foi possível inicializar o dispositivo %s - %s."
+
+#: libparted/arch/linux.c:690
+#, fuzzy, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Impossível determinar tamanho de %s (%s)"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, fuzzy, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Impossível determinar tamanho de %s (%s)"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr ""
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Não foi possível obter a identificação do dispositivo %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Erro inicializando dispositivo SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+
+#: libparted/arch/linux.c:1349
+#, fuzzy, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Impossível determinar a geometria do ficheiro/dispositivo. Não deve utilizar "
+"o Parted a não ser que REALMENTE saiba o que está a fazer!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controlador RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controlador ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controlador I20"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr ""
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipo de dispositivo não suportado"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, fuzzy, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Erro abrindo %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Impossível determinar tamanho de %s (%s)"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, fuzzy, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Não pode ter o fim da partição antes do início."
+
+#: libparted/cs/geom.c:379
+#, fuzzy, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Tentativa de escrever sectores %ld-%ld fora da partição em %s"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr ""
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, fuzzy, c-format
+msgid "%s: unrecognised disk label"
+msgstr "Impossível abrir %s - rótulo de disco desconhecido."
+
+#: libparted/disk.c:487
+#, fuzzy, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr "Não posso gravar em %s, pois ela foi aberta como somente para leitura."
+
+#: libparted/disk.c:632
+#, fuzzy, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "A partição é muito pequena para um sistema de ficheiros FAT"
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "boot"
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Sinalizador de partição desconhecido, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Rótulos de disco %s não suportam partições extendidas."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Rótulos de disco %s não suportam partições lógicas ou extendidas."
+
+#: libparted/disk.c:2003
+#, fuzzy
+msgid "Too many primary partitions."
+msgstr "Muitas páginas inválidas."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Não posso adicionar uma partição lógica em %s, pois não há uma partição "
+"extendida."
+
+#: libparted/disk.c:2036
+#, fuzzy, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Não se pode haver mais de uma partição extendida em %s"
+
+#: libparted/disk.c:2046
+#, fuzzy
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr ""
+"Não posso adicionar uma partição lógica fora da partição extendida em %s."
+
+#: libparted/disk.c:2071
+#, fuzzy, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Não posso adicionar uma partição lógica fora da partição extendida em %s."
+
+#: libparted/disk.c:2081
+#, fuzzy
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Não posso adicionar uma partição primária dentro de uma extendida."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Não pode ter uma partição fora do disco!."
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+#, fuzzy
+msgid "Can't have overlapping partitions."
+msgstr "Não posso copiar para uma partição sobreposta."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr ""
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "livre"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extendida"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lógica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primária"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "escondida"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr ""
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr ""
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr ""
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr ""
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr ""
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Sim"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, fuzzy, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Sinalizador de partição desconhecido, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informação"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Aviso"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Erro"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Sem Implementação"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Arranjar"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sim"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Não"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Repetir"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+#, fuzzy
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/aix.c:103
+#, fuzzy
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/aix.c:116
+#, fuzzy
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/aix.c:126
+#, fuzzy
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/aix.c:144
+#, fuzzy
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/aix.c:154
+#, fuzzy
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para criar sistema de ficheiros %s não foi implementado ainda."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Não posso copiar partições extendidas."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+#, fuzzy
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Impossível alinhar a partição."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+#, fuzzy
+msgid "Unable to allocate a partition number."
+msgstr "Impossível alinhar a partição."
+
+#: libparted/labels/bsd.c:588
+#, fuzzy
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Impossível localizar um rotulo de disco bsd"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+#, fuzzy
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Impossível localizar um rotulo de disco bsd"
+
+#: libparted/labels/dos.c:1159
+#, fuzzy, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabela de partições inválida em %s - assinatura errada %x"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabela de partições inválida - partição recursiva em %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Não posso copiar partições extendidas."
+
+#: libparted/labels/dvh.c:183
+#, fuzzy, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr ""
+"Não posso redimensionar uma partição extendida, sem excluir uma partição "
+"lógica."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+
+#: libparted/labels/dvh.c:614
+#, fuzzy
+msgid "Only primary partitions can be root partitions."
+msgstr "Não posso adicionar uma partição primária dentro de uma extendida."
+
+#: libparted/labels/dvh.c:628
+#, fuzzy
+msgid "Only primary partitions can be swap partitions."
+msgstr "Não posso adicionar uma partição primária dentro de uma extendida."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr ""
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+
+#: libparted/labels/dvh.c:812
+#, fuzzy
+msgid "Too many primary partitions"
+msgstr "Muitas páginas inválidas."
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+#, fuzzy
+msgid "Unsupported disk type"
+msgstr "ped_device_new() Tipo de dispositivo não suportado"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr ""
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr ""
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr ""
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+#, fuzzy
+msgid "Fatal error"
+msgstr "Fatal"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+#, fuzzy
+msgid "No room for partition info."
+msgstr "Nenhum mapa de partições válido foi encontrado."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Não foi possível detectar o sistema de Ficheiros."
+
+#: libparted/labels/fdasd.c:1029
+#, fuzzy
+msgid "Could not retrieve disk geometry information."
+msgstr "Não foi possível ler a geometria de %s - %s"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr ""
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Impossível alinhar a partição."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Assinatura inválida %x para rótulos de disco Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Mapa de partições não tem nenhuma entrada!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s é muito pequeno para um rótulo de disco Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "A partição %d tem uma assinatura inválida %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "A partição %d tem um tamanho inválido de 0 bytes!"
+
+#: libparted/labels/mac.c:555
+#, fuzzy
+msgid "The data region doesn't start at the start of the partition."
+msgstr "A região de dados não começa no início da partição"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "A região de inicialização da partição não a ocupa inteiramente."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "A região de dados da partição não a ocupa inteiramente."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"tamanho de bloco estranho no descritor de dispositivo: %d bytes não são "
+"divisíveis por 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"O descritor do driver informa que o tamanho físico de bloco é %d bytes, mas "
+"o Linux informa que é %d bytes."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nenhum mapa de partições válido foi encontrado."
+
+#: libparted/labels/mac.c:775
+#, fuzzy, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Conflito nos tamanhos de mapa de partição! Entrada 1 informa que é %d, mas "
+"entrada %d informa que é %d!"
+
+#: libparted/labels/mac.c:806
+#, fuzzy
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Estranho - 2 entradas no mapa de partição"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Mudar o nome de uma partição root ou swap irá impedir o Linux de reconhecê-"
+"la como tal."
+
+#: libparted/labels/mac.c:1444
+#, fuzzy
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Não posso adicionar outra partição - o mapa de partições é muito pequeno!"
+
+#: libparted/labels/pc98.c:285
+#, fuzzy, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabela de partições inválida em %s"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, fuzzy, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"A partição %d não está alinhada com o limite do cilindro. Preciso adicionar "
+"suporte para isso."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Não posso adicionar outra partição."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, fuzzy, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "Impossível alinhar a partição."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, fuzzy, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Impossível determinar se a partição está montada."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr ""
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "O rotulo do disco afirma que o disco é maior que %s"
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr ""
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+#, fuzzy
+msgid "Could not read volume label."
+msgstr "Não foi possível ler a geometria de %s - %s"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+#, fuzzy
+msgid "Could not write volume label."
+msgstr "Não foi possível detectar o sistema de Ficheiros."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr ""
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Não há memória."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, fuzzy, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Impossível criar partição fora do dispositivo."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, fuzzy, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s durante escrita em %s"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+#, fuzzy
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"O GNU parted foi compilado erradamente: o sector de boot FAT deveria ser de "
+"512 bytes. O suporte a FAT será desabilitado."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Sistema de ficheiros tem uma assinatura inválida para um FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Sistema de ficheiros tem um tamanho de sector inválido para um FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+#, fuzzy
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Sistema de ficheiros tem um tamanho de sector inválido para um FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+#, fuzzy
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Sistema de ficheiros tem um número de setores reservados inválido para um "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+#, fuzzy
+msgid "File system has an invalid number of FATs."
+msgstr "Sistema de ficheiros tem um número inválido de FATS."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "Sector de boot FAT diz que o tamanho lógico do sector é 0. Estranho. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Sector de boot FAT diz que não há tabelas FAT. Estranho. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Sector de boot FAT diz que os clusters têm 0 setores. Estranho. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+#, fuzzy
+msgid "File system is FAT12, which is unsupported."
+msgstr "O sistema de ficheiros é FAT12, que não é suportado."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, fuzzy, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Assinatura linux swap não reconhecida '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, fuzzy, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Assinatura linux swap não reconhecida '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, fuzzy, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Assinatura linux swap não reconhecida '%10s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"O sector de informações tem uma assinatura inválida (%x). Selecione cancelar "
+"agora, e mande um relatório de bug. Se você está desesperado, é provável que "
+"seja seguro ignorar."
+
+#: libparted/fs/r/fat/calc.c:134
+#, fuzzy, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Você precisa de %dM de espaço livre para diminuir esta partição para este "
+"tamanho (você tem somente %dM livres)"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"O cluster inicia em delta = %d, que não é um múltiplo do tamanho de cluster "
+"%d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrada de diretório inválida para %s: o primeiro cluster é o fim do "
+"marcador de ficheiro."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT estragada: cadeia não terminada para %s. Você deveria correr o dosfsck "
+"ou o scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT estragada: cluster %d fora do sistema de ficheiros na cadeia para %s. "
+"Você deveria correr o dosfsck ou o scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT estragada: o cluster %d tem uma referência cruzada para %s. Você deveria "
+"correr o dosfsck ou o scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, fuzzy, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s é %dk, mas tem %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, fuzzy, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "A partição é muito pequena para um sistema de ficheiros FAT"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"As FATs não estão iguais. Se não sabe o que isto significa, seleccione "
+"cancelar, execute o scandisk no sistema de ficheiros, depois volte."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Não há configurações possíveis para este tipo de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"O sistema de ficheiros não tem o tamanho esperado para que o Windows o "
+"utilize. O tamanho do cluster é %dk (%dk esperado); número de clusters é %d "
+"(%d esperado); tamanho da FAT é %d sectores (%d esperado)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"O sistema de ficheiros reporta que o espaço livre é de %d clusters, não de "
+"%d clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+#, fuzzy
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Não há espaço suficiente no diretório raiz para todos os ficheiros. Cancele, "
+"ou ignore para perder os ficheiros."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Erro escrevendo no diretório raiz."
+
+#: libparted/fs/r/fat/resize.c:479
+#, fuzzy
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Se deixar seu sistema de ficheiros como FAT16, não haverá problemas."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Se você converter para FAT16, e o MS Windows está instalado nesta partição, "
+"deverá reinstalar o gestor de boot do MS Windows. Se quiser fazer isso, "
+"consulte o manual do Parted (ou o manual de sua distribuição)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Se deixar seu sistema de ficheiros como FAT32, você não terá mais nenhum "
+"problema novo."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Se você converter para FAT32, e o MS Windows está instalado nesta partição, "
+"deverá reinstalar o gestor de boot do MS Windows. Se quiser fazer isso, "
+"consulte o manual do Parted (ou o manual de sua distribuição). Também, "
+"convertendo para FAT32 fará com que o sistema de ficheiros não seja mais "
+"reconhecido pelo MS DOS, Windows 95a, e MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Você gostaria de usar FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr ""
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"O sistema de ficheiros só pode ser redimensionado para esse tamanho se "
+"convertido para FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"O sistema de ficheiros só pode ser redimensionado para esse tamanho se "
+"convertido para FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+#, fuzzy
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"O GNU Parted não pode redimensionar esta partição para esse tamanho. Estamos "
+"a trabalhar nisso!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d média %x não coincide com o sector de boot médio %x. Você deveria "
+"executar o scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, fuzzy, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld fora do sistema de ficheiros"
+
+#: libparted/fs/r/fat/table.c:301
+#, fuzzy, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld fora do sistema de ficheiros"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: não há clusters livres"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Não foi possível detectar o sistema de Ficheiros."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"Suporte para redimensionar sistema de ficheiros não implementado para %s."
+
+#: libparted/fs/r/filesys.c:171
+#, fuzzy
+msgid "The file system is bigger than its volume!"
+msgstr "O rotulo do disco afirma que o disco é maior que %s"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+#, fuzzy
+msgid "writing HFS Master Directory Block"
+msgstr "Erro escrevendo no diretório raiz."
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+#, fuzzy
+msgid "Error while writing the allocation file."
+msgstr "Erro escrevendo no diretório raiz."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+#, fuzzy
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"O cluster inicia em delta = %d, que não é um múltiplo do tamanho de cluster "
+"%d."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+#, fuzzy
+msgid "Some header fields are not multiple of the sector size."
+msgstr ""
+"O cluster inicia em delta = %d, que não é um múltiplo do tamanho de cluster "
+"%d."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+#, fuzzy
+msgid "Could not cache the file system in memory."
+msgstr "Não foi possível detectar o sistema de Ficheiros."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "mostra esta mensagem de ajuda"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nunca pede intervenção do utulizador"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "mostra a versão"
+
+#: parted/parted.c:145
+#, fuzzy
+msgid "alignment for new partitions"
+msgstr "Não posso copiar partições extendidas."
+
+#: parted/parted.c:158
+#, fuzzy
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"MINOR é o número da partição usado pelo linux. Em rótulos de disco msdos, as "
+"partições primárias são de 1-4, e partições lógicas de 5 adiante.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPO_ROTULO é um de:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG é um de: "
+
+#: parted/parted.c:164
+#, fuzzy
+msgid "UNIT is one of: "
+msgstr "FLAG é um de: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPO-PART é um de: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPO-FS é um de: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ESTADO é um de: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOSITIVO é usualmente /dev/hda ou /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAME é qualquer palavra que desejar\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr ""
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partição(ões) em %s está(ão) a ser utilizada(s)."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+#, fuzzy
+msgid "New disk label type?"
+msgstr "Tipo de rótulo de disco: %s\n"
+
+#: parted/parted.c:692
+#, fuzzy
+msgid "Partition type?"
+msgstr "A partição não existe."
+
+#: parted/parted.c:710 parted/parted.c:914
+#, fuzzy
+msgid "Partition name?"
+msgstr "A partição não existe."
+
+#: parted/parted.c:720
+#, fuzzy
+msgid "File system type?"
+msgstr "SistemaFich "
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr ""
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr ""
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Rótulos de disco %s não suportam partições extendidas."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+#, fuzzy
+msgid "Partition number?"
+msgstr "A partição está a ser utilizada."
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Rótulos de disco %s não suportam partições extendidas."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "A partição não existe."
+
+#: parted/parted.c:972
+msgid "Invalid type-id."
+msgstr ""
+
+#: parted/parted.c:986
+msgid "Partition type-uuid?"
+msgstr ""
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr ""
+
+#: parted/parted.c:1242
+#, fuzzy, c-format
+msgid "Disk %s: %s\n"
+msgstr "Tipo de rótulo de disco: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, fuzzy, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabela de partições inválida em %s"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Tipo de rótulo de disco: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr ""
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr ""
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr ""
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr ""
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr ""
+
+#: parted/parted.c:1398
+#, fuzzy
+msgid "File system"
+msgstr "SistemaFich "
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr ""
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Sinalizador"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr ""
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr ""
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+#, fuzzy
+msgid "New device?"
+msgstr "Nenhum dispositivo encontrado"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr ""
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr ""
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+#, fuzzy
+msgid "align-check"
+msgstr "check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr "print mostra a tabela de partições"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+#, fuzzy
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr "help [COMANDO] mostra ajuda geral, ou ajuda a COMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr ""
+
+#: parted/parted.c:2326
+#, fuzzy
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel TIPO-ROTULO cria um novo rótulo (na tabela de partição)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+#, fuzzy
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPO-PART [FS-TYPE] INICIO FIM cria uma partição"
+
+#: parted/parted.c:2341
+#, fuzzy
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart cria uma partição sem criar um novo sistema de ficheiros na partição. "
+"TIPO-FS deve ser especificado para partições de dados (ao oposto de uma "
+"partição extendida). Este comando é útil se apagou acidentalmente uma "
+"partição.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+#, fuzzy
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name MINOR NAME renomeia a partição MINOR para NAME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+#, fuzzy
+msgid "quit exit program"
+msgstr "quit sair do programa"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr ""
+
+#: parted/parted.c:2381
+#, fuzzy
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr "print mostra a tabela de partições"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "rm MINOR apaga a partição MINOR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+#, fuzzy
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm MINOR apaga a partição MINOR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+#, fuzzy
+msgid "select DEVICE choose the device to edit"
+msgstr "select DEVICE selecciona o dispositivo a editar"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr ""
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+#, fuzzy
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set MINOR FLAG ESTADO muda o sinalizador na partição MINOR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr ""
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr ""
+
+#: parted/parted.c:2463
+#, fuzzy
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "print mostra a tabela de partições"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr ""
+
+#: parted/parted.c:2471
+#, fuzzy
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr "print mostra a tabela de partições"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nenhum dispositivo encontrado"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Deverá reinstalar seu gestor de boot antes de reinicializar. Leia a secção 4 "
+"da documentação do utilizador do Parted para mais informações."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr ""
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+#, fuzzy
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Uso: parted [OPCOES]... [DISPOSITIVO [COMANDO [PARAMETROS]...]...]\n"
+"Aplica COMANDO com os PARAMETROS no DISPOSITIVO. Se não for dado nenhum\n"
+"COMANDO, executa em modo interactivo.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, fuzzy, c-format
+msgid "invalid token: %s"
+msgstr "Tabela de partições inválida em %s"
+
+#: parted/ui.c:1085
+#, fuzzy
+msgid "Expecting a partition number."
+msgstr "A partição destino está a ser utilizada."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "A partição não existe."
+
+#: parted/ui.c:1114
+#, fuzzy
+msgid "Expecting a file system type."
+msgstr "Tipo de sistema de ficheiros desconhecido."
+
+#: parted/ui.c:1121
+#, fuzzy, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipo de sistema de ficheiros desconhecido."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr ""
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+#, fuzzy
+msgid "Can't create any more partitions."
+msgstr "Não posso adicionar outra partição."
+
+#: parted/ui.c:1293
+#, fuzzy
+msgid "Expecting a partition type."
+msgstr "A partição destino não existe."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr ""
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPÇÕES:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMANDOs:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+
+#: parted/ui.c:1609
+#, fuzzy, c-format
+msgid "Using %s\n"
+msgstr ""
+"\n"
+"Usando %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr ""
+
+#, c-format
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than 512 bytes"
+#~ msgstr ""
+#~ "O tamanho do sector em %s é %d bytes. O Parted é conhecido por não "
+#~ "funcionar perfeitamente com discos com sectores diferentes de 512 bytes"
+
+#, c-format
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "Dispositivo %s tem geometria estranha."
+
+#~ msgid "unknown"
+#~ msgstr "desconhecido"
+
+#~ msgid "Unknown SCSI"
+#~ msgstr "SCSI desconhecido"
+
+#, c-format
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "O dispositivo %s não é um drive SCSI ou IDE."
+
+#~ msgid ""
+#~ "The kernel was unable to re-read your partition table, so you need to "
+#~ "reboot before mounting any modified partitions. You also need to "
+#~ "reinstall your boot loader before you reboot (which may require mounting "
+#~ "modified partitions). It is impossible do both things! So you'll need "
+#~ "to boot off a rescue disk, and reinstall your boot loader from the rescue "
+#~ "disk. Read section 4 of the Parted User documentation for more "
+#~ "information."
+#~ msgstr ""
+#~ "O kernel não pôde reler sua tabela de partições, portanto precisa de "
+#~ "reiniciar antes de montar qualquer partição modificada. Voce pode também "
+#~ "precisar reinstalar seu gestor de boot antes de reinicializar (o que pode "
+#~ "requerer a montagem das partições modificadas). É impossível fazer as "
+#~ "duas coisas! Leia a secção 4 da documentação do usuário do Parted para "
+#~ "mais informações."
+
+#, c-format
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux knows nothing about any modifications you made. You should "
+#~ "reboot your computer before doing anything with %s."
+#~ msgstr ""
+#~ "O kernel não conseguiu reler a tabela de partições de %s (%s). Isto "
+#~ "significa que o Linux não sabe nada sobre as modificações que fez. Deverá "
+#~ "reinicializar seu computador antes de fazer qualquer uso de %s."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "A tabela de partições em %s é inconsistente. Há várias razões para isto "
+#~ "ocorrer. A mais certa seria o Linux detectar a geometria da BIOS para %s "
+#~ "incorretamente. O GNU Parted suspeita que a geometria real deveria ser %d/"
+#~ "%d/%d (e não %d/%d/%d). Deverá vefificar a BIOS primeiro, pois isto pode "
+#~ "não estar correcto. Poderá informar o Linux adicionando o parâmetro %s=%d,"
+#~ "%d,%d na linha de comando. Veja a documentação do LILO ou GRUB para "
+#~ "maiores informações. Se acha que a geometria sugeria pelo Parted é a "
+#~ "correcta, pode selecionar Ignorar para continuar (e corrigir o Linux "
+#~ "depois). De outra maneira, seleccione Cancelar (e corrigir o Linux e/ou a "
+#~ "BIOS agora)."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "A tabela de partições em %s é inconsistente. Há várias razões para isto "
+#~ "ocorrer. Muitas vezes, o Linux detecta a geometria da BIOS "
+#~ "incorretamente. Porém, isso não parece ser o caso aqui. É seguro ignorar, "
+#~ "mas isso pode causar problemas (solucionáveis) com alguns gestores de "
+#~ "boot."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Impossível alinhar a partição propriamente. Isso provavelmente significa "
+#~ "que outra ferramenta de particionamento gerou uma tabela de partições "
+#~ "incorreta porque não tinha a geometria na BIOS correta. É seguro ignorar, "
+#~ "mas isto pode causar problemas (solucionáveis) com alguns gestores de "
+#~ "boot."
+
+#~ msgid "GUID Partition Table Header Signature is wrong: "
+#~ msgstr "A GUID no cabeçalho da tabela de partição está incorrecta: "
+
+#~ msgid " should be "
+#~ msgstr " Deveria ser"
+
+#~ msgid "The new partition overlaps with another partition."
+#~ msgstr "A nova partição sobrepõe alguma outra partição"
+
+#~ msgid "The boot region doesn't start at the start of the partition"
+#~ msgstr "A região de inicialização não começa no início da partição"
+
+#~ msgid "Can't set non-Linux partitions as a root device."
+#~ msgstr "Não posso configurar partições não Linux como uma partição root."
+
+#~ msgid "Can't set non-Linux partitions as a swap device."
+#~ msgstr ""
+#~ "Não posso configurar partições não nao sejam Linux como uma partição swap."
+
+#, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "O suporte para abrir sistema de ficheiros %s não foi implementado ainda."
+
+#, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Suporte para verificar sistema de ficheiros não implementado para %s."
+
+#, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "O suporte directo para cópia de sistemas de ficheiros não está "
+#~ "implementado para %s. Entretanto, o suporte para redimensionamento está. "
+#~ "Portanto, o sistema de ficheiros pode ser copiado se a nova partição for "
+#~ "pelo menos tão grande quanto a antiga. Então, diminua a partição que você "
+#~ "está a tentar copiar, ou copie para uma partição maior."
+
+#, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Suporte para copiar sistema de ficheiros não implementado para %s."
+
+#, c-format
+#~ msgid "No get_resize_constraint for %s!"
+#~ msgstr "Não há get_resize_constraint para %s!"
+
+#, c-format
+#~ msgid "The %s file system code doesn't support %s disk labels."
+#~ msgstr ""
+#~ "O código do sistema de ficheiros %s não suporta rótulos de disco %s."
+
+#, c-format
+#~ msgid "Creating new %s disklabels is not implemented yet."
+#~ msgstr "Criação de novos rótulos %s não está implementado ainda."
+
+#, c-format
+#~ msgid "The code to write the partition table hasn't been written for %s yet"
+#~ msgstr ""
+#~ "O código para escrever a tabela de partições ainda não foi escrito para "
+#~ "%s."
+
+#, c-format
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Erro lendo %s (%s) para determinar se a partição está montada."
+
+#~ msgid "Can't grow a partition onto used space."
+#~ msgstr "Não posso aumentar a partição acima de espaço já utilizado."
+
+#, c-format
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "Um bug foi detectado no GNU parted. Por favor, envie um relatório do bug "
+#~ "para bug-parted@gnu.org contendo a versão (%s) e a mensagem abaixo:"
+
+#, c-format
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Tentativa de ler sectores %ld-%ld fora da partição em %s"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Descritores de grupo inconsistentes!"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "Sistema de ficheiros cheio!"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Please use dumpe2fs on "
+#~ "this filesystem and send it to <buytenh@gnu.org>. I won't resize it, "
+#~ "sorry."
+#~ msgstr ""
+#~ "Este sistema de ficheiros ext2 tem uma aparência muito estranha! Por "
+#~ "favor use o dumpe2fs neste sistema e envie-o para <buytenh@dsv.nl>. Eu "
+#~ "não vou redimensioná-lo, desculpe."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr "Superbloco inválido. Tem certeza que isto é um sistema ext2?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "Sistema de ficheiros tem erros! Execute e2fsck primeiro!"
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr ""
+#~ "Sistema de ficheiros não foi desmontado correctamente! Execute e2fsck "
+#~ "primeiro!"
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "Sistema de ficheiros tem características incompatíveis"
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Erro ao determinar o cache temporário."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr ""
+#~ "Encontrado um inode com uma contagem incorreta de ligações. Melhor "
+#~ "executar o e2fsck primeiro."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Não há inodes livres suficientes!"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "Sistema de ficheiros muito ocupado para remover um grupo!"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Sistema de ficheiros tem muitos inodes utilizados para remover um grupo!"
+
+#, c-format
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Seu sistema de ficheiros está muito ocupado para redimensioná-lo para %i "
+#~ "blocos. Desculpe."
+
+#, c-format
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Seu sistema de ficheiros está com muitos inodes ocupados para "
+#~ "redimensioná-lo para %i blocos. Desculpe."
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr ""
+#~ "Encontrados blocos com referência cruzada! Melhor executar e2fsck "
+#~ "primeiro."
+
+#, c-format
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "Bloco %i não tem referência? Estranho"
+
+#, c-format
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "Bloco %i não deveria ter sido marcado!"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "O sistema de ficheiros ext2 passou pelo teste básico. Para um teste mais "
+#~ "profundo, utilize o programa e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Desculpe, não posso mover o início de partições ext2 ainda!"
+
+#~ msgid "Ext2 partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições ext2 não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Não foi possível esvaziar a cache temporária!"
+
+#, c-format
+#~ msgid "Insane! %d clusters!"
+#~ msgstr "Estranho! %d clusters!"
+
+#~ msgid ""
+#~ "The filesystem is going to be too big for FAT16, so FAT32 will be used. "
+#~ "This is not compatible with MS-DOS, early versions of MS-Windows 95 and "
+#~ "Windows NT. If you use these operating systems, then select cancel, and "
+#~ "create a smaller partition. If you only use Linux, BSD, MS Windows 98 "
+#~ "and/or MS Windows 95 B, then select OK."
+#~ msgstr ""
+#~ "O sistema de ficheiros será muito grande para FAT16, o melhor será usar "
+#~ "FAT32. Isto não é compatível com o MS-DOS, versões antigas do MS-Windows "
+#~ "95 e Windows NT. Se utiliza estes sistemas operativos, selecione "
+#~ "cancelar, e crie uma partição menor. Se utiliza somente Linux, BSD, MS-"
+#~ "Windows 98 e/ou MS-Windows 95 B, então selecione OK."
+
+#~ msgid "Weird: fat_calc_sizes() failed for FAT32!"
+#~ msgstr "Estranho: fat_calc_sizes() falhou para a FAT32!"
+
+#~ msgid ""
+#~ "Would you like to use FAT32 for this filesystem? It is much more "
+#~ "efficient with your disk space, but is not compatible with early versions "
+#~ "of Windows 95 and Windows NT. Only select yes if you only use Linux, "
+#~ "BSD, MS Windows 98 and/or MS Windows 95 B."
+#~ msgstr ""
+#~ "Você gostaria de usar a FAT32 para este sistema de ficheiros? É muito "
+#~ "mais eficiente com o espaço em disco, mas não é compatível com versões "
+#~ "antigas do Windows 95 e Windows NT. Seleccione SIM se você só utilizar "
+#~ "Linux, BSD, MS-Windows 98 e/ou MS-Windows 95 B."
+
+#, c-format
+#~ msgid ""
+#~ "File system doesn't have expected sizes for Windows to like it. Number "
+#~ "of clusters is %d (%d expected); size of FATs is %d sectors (%d expected)."
+#~ msgstr ""
+#~ "O sistema de ficheiros não tem o tamanho esperado para que o Windows o "
+#~ "utilize. O tamanho do cluster é %dk (%dk esperado); tamanho da FAT é %d "
+#~ "sectores (%d esperado)."
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "Sistema de ficheiros tem uma assinatura inválida para um FAT."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Este sistema de ficheiros tem um tamanho de sector lógico de %d. O GNU "
+#~ "Parted é conhecido por não funcionar corretamente com sectores diferentes "
+#~ "de 512 bytes."
+
+#, c-format
+#~ msgid ""
+#~ "Partition size (%ld sectors) and filesystem size (%ld sectors) do not "
+#~ "match."
+#~ msgstr ""
+#~ "Tamanho da partição (%ld sectores) e tamanho do sistema de ficheiros (%ld "
+#~ "sectores) não coincidem."
+
+#, c-format
+#~ msgid ""
+#~ "The FATs aren't big enough to describe all clusters! Each FAT is %d "
+#~ "sectors. There are %d clusters, which would require each FAT to be %d "
+#~ "sectors. This is REALLY weird. You might want to write us an email: bug-"
+#~ "parted@gnu.org"
+#~ msgstr ""
+#~ "As FATs não são grandes o suficiente para descrever todos os clusters! "
+#~ "Cada FAT tem %d sectores. Existem %d clusters, os quais requerem que cada "
+#~ "FAT tenha %d setores. Isto é REALMENTE estranho. Você pode querer "
+#~ "escrever um email: bug-parted@gnu.org"
+
+#~ msgid ""
+#~ "This swap partition is not compatible with Linux version 2.1.117 or "
+#~ "earlier. Use a smaller partition (maximum size 128mb) if you want to use "
+#~ "old versions of Linux."
+#~ msgstr ""
+#~ "Esta partição swap não é compatível com o Linux versão 2.1.117 ou "
+#~ "anterior. Utilize uma partição menor (máximo de 128mb) se quiser utilizar "
+#~ "versões antigas do Linux."
+
+#~ msgid "Linux-swap partitions can not be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partições Linux-swap não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Linux-swap partitions can not be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "Partições Linux-swap não podem ser inicializáveis em rótulos de disco "
+#~ "pc98."
+
+#~ msgid "HFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições HFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "JFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições JHS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Reiserfs partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partições Reiserfs não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Reiserfs partitions must be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "Partições Reiserfs não podem ser inicializáveis em rótulos de disco pc98."
+
+#~ msgid "XFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições XFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "quando necessário, pede intervenção do utilizador"
+
+#~ msgid "START and END are in megabytes\n"
+#~ msgstr "INICIO e FIM são em megabytes\n"
+
+#~ msgid "Source partition doesn't exist."
+#~ msgstr "A partição origem não existe."
+
+#, c-format
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Pretende criar uma partiçao em %.3f-%.3fMb. O mais perto que se consegue "
+#~ "será %3f-%.3fMb."
+
+#~ msgid "Can't move extended partitions."
+#~ msgstr "Não posso mover partições extendidas."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Não posso mover a partição sobre ela mesma. Talvez queira redimensionar?"
+
+#, c-format
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Pretende mover a partiçao para %.3f-%.3fMb. O mais perto que se consegue "
+#~ "será %3f-%.3fMb"
+
+#, c-format
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "Geometria de disco para %s: 0.000-%.3f megabytes\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Minor Início Fim "
+
+#~ msgid "Type "
+#~ msgstr "Tipo "
+
+#~ msgid "Name "
+#~ msgstr "Nome "
+
+#, c-format
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Pretende redimensionar a partiçao para %.3f-%.3fMb. O mais perto que se "
+#~ "consegue será %3f-%.3fMb"
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr ""
+#~ "check MINOR faz um teste simples no sistema de ficheiros"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copia o sistema de ficheiros "
+#~ "para outra partição"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs MINOR TIPO-FS cria um sistema TIPO-FS na partição MINOR"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr "mkpartfs TIPO-PART TIPO-FS INICIO FIM cria uma partição TIPO-FS"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START [END] move partition MINOR"
+#~ msgstr "move MINOR INICIO [FIM] redimensiona a partição MINOR"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr "resize MINOR INICIO FIM redimensiona a partição MINOR"
+
+#, c-format
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Você encontrou um bug no GNU parted. Por favor envie um relatório para "
+#~ "bug-parted@gnu.org\n"
+#~ "contendo a versão (%s), e a mensagem abaixo:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ "Você tem partiçoes FAT e nao esta a usar LBA. Se a sua BIOS suporta LBA "
+#~ "entao deverá mudar todas as partiçoes FAT para essa opçao. Caso "
+#~ "contrário, certifique-se que o sistema operativo e a BIOS têm a mesma "
+#~ "geometria antes de fazer o redimensionamento de qualquer partiçao FAT"
+
+#, c-format
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "O sistema Operativo acha que a geometria de %s é %d/%d/%d. Porém, o "
+#~ "cilindro 1024 termina em %.3fM%s. Você devia verificar se isto está "
+#~ "correto com sua \"\"BIOS, antes de usar este programa."
+
+#, c-format
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "O Sistema Operativo detectou que a gemotria em %s é %d/%d/%d.%s"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
new file mode 100644
index 0000000..d5c5646
--- /dev/null
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..f80f8fa
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,3926 @@
+# Brazilian Portuguese translations for parted package
+# Traduções em português brasileiro para o pacote parted
+# Copyright (C) 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Eliphas Levy Theodoro <eliphas@conectiva.com>, 1999.
+# Enrico Nicoletto <liverig@gmail.com>, 2013.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2014-2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.3.52\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2021-04-11 21:49-0300\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"X-Generator: Gtranslator 40.0\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argumento inválido %s para %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argumento ambíguo %s para %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Argumentos válidos são:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "erro de escrita"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Erro desconhecido de sistema"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: a opção \"%s%s\" é ambígua\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opção desconhecida \"%s%s\"\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: a opção \"%s%s\" não permite um argumento\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: a opção \"%s%s\" exige um argumento\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opção invaÌlida -- \"%c\"\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: a opção exige um argumento -- \"%c\"\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Sucesso"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nenhuma ocorrência do padrão"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Expressão regular inválida"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Caractere de combinação inválido"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nome inválido de categoria de caracteres"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Barra invertida no final"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Retrorreferência inválida"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [. ou [= sem correspondente"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( ou \\( sem correspondente"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ sem correspondente"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Conteúdo inválido de \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Fim de intervalo inválido"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memória esgotada"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "A expressão regular precedente é inválida"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Fim prematuro da expressão regular"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Expressão regular grande demais"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") ou \\) sem correspondente"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Nenhuma expressão regular anterior"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[+1SsyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[-0nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Empacotado por %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Empacotado por %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licença GPLv3+: GNU GPL versão 3 ou posterior <%s>\n"
+"Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n"
+"NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Escrito por %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Escrito por %s e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Escrito por %s, %s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, e %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Escrito por %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, e outros.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"Relate erros para: %s\n"
+"Relate erros de tradução para <https://translationproject.org/team/pt_BR."
+"html>\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Relate erros do %s para: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Página do %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Ajuda geral no uso de softwares GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memória esgotada"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Imagem de disco"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Erro ao abrir %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Não foi possível abrir %s para leitura e escrita (%s). %s foi aberto somente-"
+"leitura."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s durante busca para leitura em %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s durante leitura em %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Não é possível escrever em %s, pois foi aberto como somente-leitura."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s durante busca para escrita em %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s durante escrita em %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Tente \"%s --help\" para mais informações.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Uso: %s [OPÇÃO] [DISPOSITIVO]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informa ao sistema operacional sobre alterações na tabela de partição.\n"
+"\n"
+" -d, --dry-run não chega a informar ao sistema operacional\n"
+" -s, --summary exibe um resumo do conteúdo\n"
+" -h, --help exibe esta ajuda e sai\n"
+" -v, --version mostra informações da versão e sai\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Quando nenhum DISPOSITIVO é informado, investiga todas as partições.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Relate erros para <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Não foi possível abrir %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Não foi possível investigar armazenamento."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s tentando sincronizar %s ao disco"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Não foi possível obter estado do dispositivo %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Não foi possível determinar o tipo dm de %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Não foi possível determinar o tamanho do setor para %s: %s.\n"
+"Utilizando tamanho padrão do setor (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Não foi possível determinar o tamanho do setor físico para %s.\n"
+"Utilizando tamanho do setor lógico (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Não foi possível determinar tamanho de %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE genérico"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Não foi possível obter a identificação do dispositivo %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"O dispositivo %s possui múltiplos setores lógicos (%d) por setores físicos.\n"
+"GNU Parted suporta isto de forma EXPERIMENTAL para alguns rótulos de disco/"
+"combinações de sistema de arquivos especiais, ex.: GPT e ext2/3.\n"
+"Por gentileza, consulte o site para informações atualizadas."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Erro ao inicializar dispositivo SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"O dispositivo %s é tão pequeno que possivelmente não pode armazenar um "
+"sistema de arquivos ou tabela de partições. Talvez você selecionou o "
+"dispositivo errado?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Não foi possível determinar a geometria do arquivo/dispositivo %s. Você não "
+"deveria utilizar o Parted a menos que você REALMENTE saiba o que está "
+"fazendo!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Cartão de armazenamento genérico SD/MMC"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Dispositivo NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controlador RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Dispositivo Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA através de dispositivo Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Unidade DASD IBM S390"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "DASD Virtual IBM iSeries"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Dispositivo NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controlador ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controlador I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "Linux UBD modo usuário"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Dispositivo loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Mapeador de dispositivo Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Dispositivo de bloco virtual Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Dispositivo de bloco Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Conjunto RAID por software Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Unidade RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tipo de dispositivo não suportado"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Erro ao chamar fsync/fechar %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s fim de arquivo enquanto lê %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Erro ao informar ao kernel sobre alterações na partição %s -- %s. Isto "
+"significa que o Linux não saberá de qualquer alteração que você tenha feito "
+"em %s até que o computador seja reiniciado -- logo você não deve montá-lo ou "
+"usá-lo de maneira alguma antes de reiniciar."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Não foi possível determinar o início e comprimento de %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"As partição(ões) %s em %s foram escritas, mas não foi possível informar ao "
+"kernel sobre as alterações, provavelmente está(ão) em uso. Como resultado, "
+"a(s) partição(ões) antiga(s) permanecerá(ão) em uso. Você deve "
+"reinicializar agora antes de realizar alterações posteriores."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Não é possível ter o fim antes do início! (setor inicial=%jd comprimento=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Tentativa de escrever setores %ld-%ld fora da partição em %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "verificando por blocos defeituosos"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace possui %d chamadas na pilha:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "A declaração (%s) em %s:%d na função %s() falhou."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: rótulo de disco irreconhecível"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"O libparted não possui suporte para escrita em %s. Talvez isto tenha sido "
+"compilado como somente-leitura."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "A partição %d é %s, mas o sistema de arquivos é %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Opção desconhecida de partição, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Rótulos de disco %s não suportam partições estendidas."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Rótulos de disco %s não suportam partições lógicas ou estendidas."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Há partições primárias demais."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Não posso adicionar uma partição lógica em %s, pois não há uma partição "
+"estendida."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Não pode existir mais de uma partição estendida em %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Partições lógicas não podem existir fora da partição estendida."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Uma partição lógica não pode existir fora da partição estendida em %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr ""
+"Não é possível ter uma partição primária dentro de uma partição estendida."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Não é possível ter uma partição para fora do disco!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Não é possível ter partições que se sobrepõem."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadados"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "livre"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "estendida"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lógica"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primária"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "root"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "escondida"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Opção de partição desconhecida, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informação"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Atenção"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Erro"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatal"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Erro"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Sem implementação"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Arrumar"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Sim"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Não"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Repetir"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorar"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Um erro foi detectado no GNU parted. Visite o site do parted: http://www."
+"gnu.org/software/parted/parted.html para mais informações sobre o que pode "
+"ser útil na hora de submeter um relatório de erro. Por favor, envie um "
+"relatório de erro para %s contendo ao menos a versão (%s) e a seguinte "
+"mensagem: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"O suporte para leitura de rótulos de disco AIX ainda não foi implementado."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"O suporte para escrita de rótulos de disco AIX ainda não foi implementado."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para adicionar partições em rótulos de disco AIX ainda não foi "
+"implementado."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para duplicar partições em rótulos de disco AIX ainda não foi "
+"implementado."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"O suporte para definir o tipo de sistema de partições em rótulos de disco "
+"AIX ainda não foi implementado."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"O suporte para definir as opções em rótulos de disco AIX não foi "
+"implementado ainda."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Não é possível usar tabelas de partição Atari em discos com um tamanho de "
+"setor diferente de %d bytes."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Não é possível usar tabelas de partição Atari em discos com mais de %d "
+"setores."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Muitas partições Atari detectadas. Talvez haja um loop na lista vinculada do "
+"XGM. Abortando."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Nenhuma partição de dados encontrada no ARS no setor %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"A entrada do próximo ARS lógico não é do tipo XGM no ARS no setor %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Não parece haver uma tabela de partição Atari neste disco (%s) ou ela está "
+"corrompida."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "Não há espaço no setor %lli para armazenar ARS da partição lógica %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Não há espaço no setor %lli para armazenar ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"A contagem de setores armazenada na tabela de partição não corresponde ao "
+"tamanho do seu dispositivo. Você deseja corrigir a tabela de partição?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Não há espaço no setor %lli para armazenar BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Restavam partições após preencher a tabela principal AHDI."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"A tabela AHDI principal foi preenchida com todas as partições, mas a tabela "
+"ICD não está vazia, portanto, mais partições de tamanho e posição "
+"desconhecidos serão detectadas pelo software compatível com ICD. Você deseja "
+"invalidar a tabela ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Entradas ICD não podem conter partições estendidas ou lógicas."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Restavam partições após o preenchimento das tabelas."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Você não pode usar uma partição XGM estendida no modo ICD (mais de %d "
+"partições primárias, se XGM for o primeiro, ele conta para duas)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Não foi possível satisfazer todos as restrições na partição."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Você não pode usar mais de %d partições primárias (modo ICD) se usar uma "
+"partição XGM estendida. Se XGM for a primeira partição, ele conta para dois."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Não é possível alocar um número de partição."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Não foi possível alocar uma posição para rótulo de disco bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "A tabela de partição do dispositivo DASD-LDL não pode ser alterada.\n"
+
+# Ponto final acrescentado para seguir as demais frases em volta desta
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Não foi possível alocar uma posição para rótulo de disco dasd."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabela de partições inválida em %s -- assinatura errada %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabela de partições inválida - partição recursiva em %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"O Parted não pode redimensionar partições gerenciadas com o Disco Dinâmico "
+"do Windows."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "não é possível criar mais nenhuma partição"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s não possui partições estendidas (cabeçalho de volume da partição)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"A soma de verificação está errada, indicando que a tabela de partições está "
+"corrompida."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Apenas partições primárias podem ser partições root."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Apenas partições primárias podem ser partições de troca (swap)."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Apenas partições lógicas podem ser um arquivo de inicialização."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"falha ao definir nome de partição dvh para %s:\n"
+"Apenas partições lógicas (arquivos de inicialização) possuem um nome."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Há partições primárias demais"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "erro de abertura"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "erro de busca"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "erro de leitura"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "erro de ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Versão da API não coincide"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tipo de disco sem suporte"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Formato de disco sem suporte"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "O disco está em uso"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Erro de sintaxe no arquivo de configuração"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "O rótulo do volume está corrompido"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Um nome de conjunto de dados está corrompido"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Falha em alocação de memória"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Falha em verificação de dispositivo"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "O dispositivo especificado não é um dispositivo DASD válido"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER não encontrado no dispositivo"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Erro fatal"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Nenhum espaço para rótulo de volume."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Nenhum espaço para informações de partição."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC inválido."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Não foi possível recuperar versão API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"A versão \"%d\" da API atual não coincide com a versão \"%d\" da API da "
+"controladora dasd!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Não foi possível recuperar tamanho de disco."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Não foi possível recuperar informações sobre a geometria do disco."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Não foi possível recuperar informações de tamanho do bloco."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+"A geometria do disco não corresponde a um dispositivo DASD do tipo 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "dispositivo é muito pequeno para GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"A versão do formato da tabela de partição GPT é %x, que é mais recente do "
+"que o Parted pode reconhecer. Por favor, nos relate isso!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Parece que não está sendo usado todo o espaço disponível em %s, você pode "
+"corrigir a GPT para usar todo seu espaço (uns %llu blocos adicionais) ou "
+"continuar com a configuração atual? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"A cópia da tabela GPT não está no fim do disco, como deveria estar. Corrija-"
+"a, movendo a cópia para o fim do disco (e removendo a cópia antiga)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Tanto a tabela GPT primária quanto a sua cópia estão corrompidas. Tente "
+"fazer uma nova tabela, usando os recursos de recuperação do Parted para "
+"recuperar partições."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"A cópia da tabela GPT está corrompida, mas a tabela primária aparece estar "
+"OK, então esta será usada."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"A tabela GPT primária está corrompida, mas a cópia da tabela aparece estar "
+"OK, então esta será usada."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "CRC do conjunto de tabela de partição primária não coincide"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "falha ao traduzir nome de partição"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Assinatura inválida %x para rótulos de disco Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "O mapa de partições não tem nenhuma entrada!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s é muito pequeno para um rótulo de disco Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "A partição %d tem uma assinatura inválida %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "A partição %d tem um tamanho inválido de 0 bytes!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "A região de dados não começa no início da partição."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "A região de inicialização da partição não a ocupa inteiramente."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "A região de dados da partição não a ocupa inteiramente."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"tamanho de bloco estranho no descritor de dispositivo: %d bytes não são "
+"divisíveis por 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"O descritor da controladora (driver) informa que o tamanho físico de bloco é "
+"%d bytes, mas o Linux informa que é %d bytes."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nenhum mapa de partições válido foi encontrado."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Conflito nos tamanhos de entrada do mapa de partições! A entrada 1 diz que "
+"é %d, mas a entrada %d diz que é %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Que estranho! Há 2 entradas no mapa de partições!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Mudar o nome de uma partição root ou swap irá impedir o Linux de reconhecê-"
+"la como tal."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Não é possível adicionar outra partição -- o mapa de partições é muito "
+"pequeno!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabela de partições inválida em %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"A partição %d não está alinhada aos limites do cilindro. Isto ainda não é "
+"suportado."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Não posso adicionar outra partição."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"tamanho de partição de %1$jd setores excede o máximo de %3$jd do imposto "
+"pela tabela de partições %2$s"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"número do setor inicial %1$jd excede o máximo de %3$jd do imposto pela "
+"tabela de partições %2$s"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Soma de verificação ruim no bloco %llu do tipo %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s: Bloco rdb não encontrado, isto nunca deveria acontecer."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Loop detectado no bloco %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : A lista %s parece ruim no bloco %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Falha ao listar blocos defeituosos."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Falha ao listar blocos de partições."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Falha ao listar blocos de sistemas de arquivo."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Falha ao listar blocos de inicialização."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Falha ao escrever bloco de partição em %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Um rótulo de disco Sun corrompido foi detectado."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"A geometria CHS do disco (%d,%d,%d) informada pelo sistema operacional não "
+"coincide com a geometria gravada no rótulo de disco (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "O rótulo de disco descreve um disco maior que %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "O disco possui %d cilindros, número que é maior que o máximo de 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"A partição inteira do disco é a única disponível à esquerda. Geralmente não "
+"é uma boa ideia sobrescrever esta partição com uma real. O Solaris pode não "
+"ser capaz de inicializar sem isto, e o SILO (o carregador de inicialização "
+"sparc) utiliza também."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "O rótulo de disco Sun está cheio."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "falha ao abrir dispositivo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "falha ao buscar em dispositivo"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "falha ao escrever em dispositivo"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "falha ao ler de dispositivo"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Não foi possível ler o rótulo do volume."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Não foi possível escrever o rótulo do volume."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Não foi possível ler rótulos VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Não foi possível ler VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Não foi possível ler VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Não foi possível ler VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Não foi possível ler VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Não foi possível escrever rótulos VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Não foi possível escrever VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Não foi possível escrever VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Não foi possível escrever VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Não foi possível escrever VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Não foi possível escrever VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Memória insuficiente."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"Não foi possível obter o tamanho da unidade para a unidade especial "
+"\"COMPACT\"."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" possui sintaxe inválida para localizações."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "O valor máximo do cabeçalho é %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "O valor máximo do setor é %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "A localização %s está para fora do dispositivo %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Número inválido."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Use uma unidade menor ao invés de usar um valor < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Falha ao alocar bloco de partição\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Falha ao alocar bloco\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Não foi possível ler o bloco de inicialização %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Não foi possível ler o bloco root %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Falha ao alocar id de elemento de lista\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Não foi possível ler o bloco %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Soma de verificação ruim no bloco %llu do tipo %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Não foi possível escrever bloco %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Falha ao alocar bloco rdb de disco_específico\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Não foi encontrado bloco rdb, isto nunca deveria acontecer\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Falha ao ler bloco de partição %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"O GNU Parted não foi mal compilado: o setor de boot FAT deveria ser de 512 "
+"bytes. O suporte a FAT será desabilitado."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "O sistema de arquivos tem uma assinatura inválida para um FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "O sistema de arquivos tem um tamanho de setor inválido para um FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "O sistema de arquivos tem um tamanho de cluster inválido para um FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"O sistema de arquivos tem um número inválido de setores reservados à "
+"sistemas de arquivo FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "O sistema de arquivos tem um número inválido de FATs."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"A geometria CHS do sistema de arquivos é (%d, %d, %d), que é inválida. A "
+"geometria CHS da tabela de partições é (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"O setor de inicialização FAT diz que o tamanho lógico do setor é 0. "
+"Estranho. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "O setor de inicialização FAT diz que não há tabelas FAT. Estranho. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"O setor de inicialização FAT diz que os clusters têm 0 setores. Estranho. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "O sistema de arquivos é FAT12, ao que não há suporte."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Assinatura linux swap estilo antigo não reconhecido '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Assinatura linux swap estilo novo não reconhecido '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Assinatura linux swap swsusp não reconhecido '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"O Parted não pode utilizar sistemas de arquivos HFS em discos com um tamanho "
+"de setor diferente de %d bytes."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"A geometria CHS do sistema de arquivos é (%d, %d, %d), que é inválida. A "
+"geometria CHS da tabela de partições é (%d, %d, %d). Se você selecionar "
+"Ignorar, a geometria CHS do sistema de arquivos permanecerá inalterada. Se "
+"você selecionar Arrumar, a geometria CHS do sistema de arquivos será "
+"definida para coincidir com a geometria CHS da tabela de partições."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"O setor de informações tem uma assinatura inválida (%x). Selecione cancelar "
+"agora, e mande um relatório de erro. Se você está desesperado, é provável "
+"que seja seguro ignorar."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Você precisa de %s de espaço livre em disco para diminuir esta partição a "
+"este tamanho. Atualmente, apenas %s estão livres."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"O cluster inicia em delta = %d, que não é um múltiplo do tamanho de cluster "
+"%d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Entrada de diretório inválida para %s: o primeiro cluster é o fim do "
+"marcador de arquivo."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT ruim: cadeia não terminada para %s. Você deveria rodar o dosfsck ou o "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT ruim: cluster %d fora do sistema de arquivos na cadeia para %s. Você "
+"deveria rodar o dosfsck ou o scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT ruim: o cluster %d tem uma referência cruzada para %s. Você deveria "
+"rodar o dosfsck ou o scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s é %dk, mas ele tem %d clusters (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partição muito grande/pequena para um sistema de arquivos %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"As FATs não estão iguais. Se você não sabe o que isto significa, selecione "
+"cancelar, execute o scandisk no sistema de arquivos, depois volte."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Não há configurações possíveis para este tipo de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"O sistema de arquivos não tem o tamanho esperado para que o Windows utilize. "
+"O tamanho do cluster é %dk (%dk esperado); número de clusters é %d (%d "
+"esperado); tamanho da FAT é %d setores (%d esperado)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"O sistema de arquivos está reportando que o espaço livre é %d clusters, não "
+"%d clusters."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Não há espaço suficiente no diretório raiz para todos os arquivos. Cancele, "
+"ou ignore para perder os arquivos."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Erro ao escrever no diretório raiz."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Se você deixar seu sistema de arquivos como FAT16, não haverá nenhum "
+"problema."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Se você converter para FAT16, e o MS Windows está instalado nesta partição, "
+"você deverá reinstalar o gerenciador de boot do MS Windows. Se quiser fazer "
+"isso, consulte o manual do Parted (ou o manual de sua distribuição)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Se deixar seu sistema de arquivos como FAT32, você não criará mais nenhum "
+"problema novo."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Se você converter para FAT32, e o MS Windows está instalado nesta partição, "
+"você deverá reinstalar o gerenciador de boot do MS Windows. Se quiser fazer "
+"isso, consulte o manual do Parted (ou o manual de sua distribuição). Também, "
+"convertendo para FAT32 fará com que o sistema de arquivos não seja mais "
+"reconhecido pelo MS DOS, Windows 95a, e MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Você gostaria de usar FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"O sistema de arquivos só pode ser redimensionado para este tamanho sendo "
+"convertido para FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"O sistema de arquivos só pode ser redimensionado para este tamanho sendo "
+"convertido para FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"O GNU Parted não pode redimensionar esta partição a este tamanho. Estamos "
+"trabalhando nisto!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d mídia %x não bate com o setor de boot mídia %x. Você deveria executar "
+"o scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld fora do sistema de arquivos"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld fora do sistema de arquivos"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: não há clusters livres"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Não foi possível detectar o sistema de arquivos."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "não é suportado redimensionar sistemas de arquivos %s"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "O sistema de arquivos é maior que seu volume!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "O sistema de arquivos contém erros."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Blocos defeituosos não podem ser lidos."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Tentando registar uma extensão que inicia no bloco 0x%X, mas uma outra já "
+"existe nesta posição. Você deve verificar o sistema de arquivos!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Tentando mover uma extensão do bloco 0x%X para o bloco 0x%X, mas uma outra "
+"já existe nesta posição. Isto não deveria acontecer!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Não foi possível atualizar o cache de extensão de arquivo HFS com CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Tentando ler arquivo HFS com CNID %X atrás do fim do arquivo."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Não foi possível encontrar setor %lli de arquivo HFS com CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Tentando escrever arquivo HFS com CNID %X atrás do fim do arquivo."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Não foi possível atualizar o cache do arquivo de extensão HFS+ com CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Tentando ler arquivo HFS+ com CNID %X atrás do fim do arquivo."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Não foi possível encontrar setor %lli de arquivo HFS+ com CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Tentando escrever arquivo HFS+ com CNID %X atrás do fim do arquivo."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Desculpe, HFS não pode ser redimensionada deste modo ainda."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "encolhendo"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Realocação de dados falhou."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "A realocação de dados deixou alguns dados no final do volume."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "escrevendo bloco de diretório mestre HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Nenhuma assinatura HFS[+X] válida foi encontrada ao abrir."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Não há suporte para a versão %d do HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Não há suporte para a versão %d do HFSX."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "A realocação de dados deixou alguns dados no final do volume."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Erro ao escrever o arquivo de alocação."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Erro ao escrever a parte de compatibilidade do arquivo de alocação."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "escrevendo cabeçalho de volume HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"Ocorreu um erro enquanto era visto o arquivo obrigatório de blocos "
+"defeituosos."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Parece que há um erro no empacotador HFS: o arquivo de blocos defeituosos "
+"não contém um volume HFS+ embutido."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Desculpe, HFS+ não pode ser redimensionada deste modo ainda."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "encolhendo volume HFS+ embutido"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Redimensionamento de volume HFS+ falhou."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "reduzindo empacotador HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Falha na atualização do empacotador HFS."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Isto não é uma verificação %s real. Isto vai extrair arquivos especiais de "
+"baixo nível para propósitos de depuração."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Soma de verificação do cabeçalho de lista de blocos defeituosos."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Tamanho inválido de um bloco de transação ao reproduzir o journal (%i bytes)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Não há suporte a journals armazenados fora do volume. Tente desabilitar o "
+"journal e executar Parted novamente."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"O deslocamento ou tamanho de Journal não é um múltiplo do tamanho do cluster."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valores mágicos incorretos no cabeçalho journal."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Tamanho do Journal não coincide com o bloco de informações e cabeçalho do "
+"journal."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Alguns campos de cabeçalho não são múltiplos do tamanho do setor."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"O tamanho de setor armazenado no journal não é 512 bytes. O Parted suporta "
+"apenas setores com 512 bytes de comprimento."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Soma de verificação de journal ruim."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"O jornal não está vazio. O Parted deve repetir as transações antes de abrir "
+"o sistema de arquivos. Isto irá modificá-lo."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"O cabeçalho do volume ou o bloco de diretório mestre foi modificado quando "
+"repetindo o journal. Você deve reiniciar o Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Uma extensão não foi realocada."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Uma referência para uma extensão vem de um local indevido. Você deve "
+"verificar o sistema de arquivos!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Este volume HFS não possui arquivo de catálogo. Isto é muito incomum!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Este volume HFS não possui nenhum arquivo de estouro de extensão. Isto é "
+"bastante incomum!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"O arquivo de estouro de extensões não deve conter suas próprias extensões! "
+"Você deve verificar o sistema de arquivos."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Não foi possível armazenar em cache o sistema de arquivos em memória."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "A lista de blocos defeituosos não pôde ser carregada."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Ocorreu um erro durante a realocação da extensão."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Este volume HFS+ não possui nenhum arquivo de catálogo. Isto é muito "
+"incomum!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Este volume HFS+ não possui nenhum arquivo de estouro de extensões. Isto é "
+"bastante incomum!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "mostra esta mensagem de ajuda"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "lista modelos de partições em todos os dispositivos de bloco"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "exibe saída analisável por máquina"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "exibe saída analisável por máquina"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nunca pede intervenção do usuário"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "mostra a versão"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "alinhamento para novas partições"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NÚMERO é o número da partição usado pelo Linux. Em rótulos de disco MS-DOS, "
+"as partições primárias são de 1 a 4 e partições lógicas de 5 adiante.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIPO_RÓTULO é um de:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "OPÇÃO é um de: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIDADE é um de: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "alinhamento desejado: mínimo ou ideal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIPO-PART é uma: primária, lógica, estendida\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIPO-FS é um de: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"INÃCIO E FIM são localizações de disco, assim como 4GB ou 10%. Valores "
+"negativos contam a partir do final do disco. Por exemplo, -1s especifica "
+"exatamente o último setor.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"FIM é localização de disco, assim como 4GB ou 10%. Valores negativos contam "
+"a partir do final do disco. Por exemplo, -1s especifica exatamente o último "
+"setor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "ESTADO é um de: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOSITIVO é usualmente /dev/hda ou /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NOME é qualquer palavra que desejar\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Este programa é um software livre, coberto pela Licença Pública Geral GNU.\n"
+"\n"
+"Este programa é distribuído na expectativa de ser útil, mas\n"
+"SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de\n"
+"COMERCIALIZAÇÃO ou de ADEQUAÇÃO A QUALQUER PROPÓSITO EM\n"
+"PARTICULAR. Consulte a Licença Pública Geral GNU para obter\n"
+"mais detalhes.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tempo restante %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "A partição %s está em uso. Você tem certeza que deseja continuar?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partição(ões) em %s está(ão) sendo utilizada(s)."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"O rótulo de disco existente em %s será destruído e todos os dados neste "
+"disco serão perdidos. Você deseja continuar?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Novo tipo de rótulo de disco?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipo da partição?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Nome da partição?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Tipo do sistema de arquivos?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Iniciar?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Terminar?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Você solicitou uma partição de %s até %s (setores %llu..%llu).\n"
+"A localização mais próxima que podemos gerenciar é de %s até %s (setores "
+"%llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Isto é ainda aceitável para você?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"A partição resultante não está propriamente alinhada para melhor "
+"performance: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "desconhecido (malloc falhou)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Rótulos de disco %s não suportam nome de partição."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Número da partição?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Rótulos de disco %s não suportam nome de partição."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipo da partição?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Número inválido."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipo da partição?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Número inválido."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"cilindro pela BIOS,cabeça,geometria do setor: %d,%d,%d. Cada cilindro é "
+"%s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modelo: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disco %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Tamanho do setor (lógico/físico): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabela de partições: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Opções de disco: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Número"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Início"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Fim"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Tamanho"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tipo"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Sistema de arquivos"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nome"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Opções"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Espaço livre"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Uma partição %s %s foi encontrada em %s -> %s. Você deseja adicioná-la a "
+"tabela de partições?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "pesquisando por sistemas de arquivo"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "O comando resize foi removido no parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Reduzir uma partição pode causar perda de dados, você tem certeza que deseja "
+"continuar?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Novo dispositivo?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "tipo de alinhamento(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d alinhado(s)\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d não alinhado: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Opção para inverter?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Novo estado?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Unidade?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TIPO N verifica a partição N para "
+"alinhamento de TIPO(mínimo|ideal)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMANDO] exibe a ajuda geral, ou ajuda para "
+"o COMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TIPO-RÓTULO cria um novo rótulo de disco (na "
+"tabela de partição)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIPO-PART [TIPO-FS] INÃCIO FIM cria uma partição"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart cria uma partição sem criar um novo sistema de arquivos na partição. "
+"TIPO-FS deve ser especificado para partições de dados (ao oposto de uma "
+"partição estendida). Este comando é útil se você apagou acidentalmente uma "
+"partição.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NÚMERO NOME renomeia a partição NÚMERO para NOME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|NÚMERO] exibe a tabela de partições, "
+"dispositivos disponíveis, espaço livre, todas as partições encontradas ou "
+"uma partição específica"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Sem argumentos, \"print\" exibe a tabela de partições inteira. Entretanto, "
+"com os argumentos a seguir, ele executa várias outras ações.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : exibe todos os dispositivos de bloco ativos\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : exibe informações sobre espaço livre não particionado no "
+"dispositivo de bloco atual\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : exibe as tabelas de partições de todos os dispositivos de "
+"bloco ativos\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit sai do programa"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue INÃCIO FIM recupera uma partição perdida "
+"próxima do INÃCIO e FIM"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "O comando resize foi removido no parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NÚMERO FIM redimensiona a partição NÚMERO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NÚMERO apaga a partição NÚMERO"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select DISPOSITIVO escolhe o dispositivo para editar"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set OPÇÃO ESTADO muda o estado de OPÇÃO no "
+"dispositivo selecionado"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [OPÇÃO] alterna o estado de OPÇÃO no "
+"dispositivo selecionado"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NÚMERO OPÇÃO ESTADO muda a OPÇÃO na partição NÚMERO"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NÚMERO [OPÇÃO]] alterna o estado de OPÇÃO no NÚMERO "
+"da partição"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit UNIDADE define como unidade padrão UNIDADE"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version exibe o número da versão e "
+"informações de direitos autorais do GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' exibe informações de versão e direitos autorais correspondentes a "
+"esta cópia do GNU Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Uso: %s [-hlmsv] [-a<alinhamento>] [DISPOSITIVO [COMANDO [PARÂMETROS]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nenhum dispositivo encontrado"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "ATENÇÃO: Você não é super usuário. Tome cuidado com permissões.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Você deve reinstalar seu carregador de inicialização antes de reinicializar. "
+"Leia a seção 4 da documentação do usuário do Parted para mais informações."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Você pode precisar atualizar /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Bem vindo ao GNU Parted! Digite 'help' para ver uma lista de comandos.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Uso: parted [OPCOES]... [DISPOSITIVO [COMANDO [PARÂMETROS]...]...]\n"
+"Aplica COMANDOs com PARÂMETROS para DISPOSITIVO. Se nenhum COMANDO(s) forem\n"
+"informados, executa-se em modo interativo.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Você encontrou um problema no GNU Parted! Eis o que deve fazer:\n"
+"\n"
+"Não entre em pânico! O erro provavelmente não afetou nenhum de seus dados.\n"
+"Ajude-nos a consertar este problema fazendo o seguinte:\n"
+"\n"
+"Confira se o problema já foi resolvido verificando\n"
+"a última versão do GNU Parted disponível em:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Por favor, confira essa versão antes de relatar seu problema.\n"
+"\n"
+"Se ele ainda não tiver sido resolvido, ou se não sabe como verificá-lo,\n"
+"por favor visite a página do GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"para maiores informações.\n"
+"\n"
+"Seu relatório deve conter a versão deste lançamento, Parted (%s),\n"
+"a mensagem de erro abaixo, a saída do comando\n"
+"\n"
+"\tparted DISPOSITIVO unit co print unit s print\n"
+"\n"
+"e o histórico de comandos que você digitou.\n"
+"Isto também inclui quaisquer informações adicionais sobre seu sistema\n"
+"que você considerar relevantes.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Histórico de comandos:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Erro: SEGV_MAPERR (Endereço não mapeado ao objeto)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Erro: SEGV_ACCERR (Permissões inválidas para o objeto mapeado)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Erro: Um sinal geral SIGSEGV foi encontrado.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Error: FPE_INTDIV (Inteiro: divisão por zero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Erro: FPE_INTOVF (Inteiro: estouro)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTDIV (Real: divisão por zero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTOVF (Real: estouro)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTUND (Real: estouro negativo)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTRES (Real: resultado não exato)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTINV (Real: operação inválida)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Erro: FPE_FLTSUB (Real: subscrito fora de alcance)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Erro: Um sinal geral SIGFPE foi encontrado."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Erro: ILL_ILLOPC (Código de operação privilegiado)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Erro: ILL_ILLOPN (Operando ilegal)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Erro: ILL_ILLADR (Modo de endereçamento ilegal)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Erro: ILL_ILLTRP (Interrupção ilegal)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Erro: ILL_PRVOPC (Código de operação privilegiado)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Erro: ILL_PRVREG (Registrador privilegiado)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Erro: ILL_COPROC (Erro do coprocessador)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Erro: ILL_BADSTK (Erro interno da pilha)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Erro: Um sinal geral SIGILL foi encontrado."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "token inválido: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Espera-se um número de partição."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "A partição não existe."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Espera-se um tipo de sistema de arquivos."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tipo de sistema de arquivos \"%s\" desconhecido."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Espera-se um tipo de rótulo de disco."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Nenhuma opção suportada"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Não é possível criar mais nenhuma partição."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Espera-se um tipo de partição."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "ligado"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "desligado"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "ideal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "mínimo"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPÇÕEs:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMANDOs:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Informe erros para %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Usando %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Este comando não faz sentido em modo não interativo.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partições estendidas não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Partições estendidas não podem ser partições recuperadas em rótulos de "
+#~ "disco msdos."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NÚMERO : exibe informações mais detalhadas sobre esta partição "
+#~ "específica\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: opção desconhecido \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Página do %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "argumento inválido para %s%s: \"%s\""
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "sufixo inválido no argumento para %s%s: \"%s\""
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "argumento grande demais para %s%s: \"%s\""
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "A tabela de partições não pde ser lida novamente. Isto significa que você "
+#~ "precisa reiniciar antes de montar qualquer partição modificada. Você "
+#~ "também precisa reinstalar seu carregador de inicialização antes de "
+#~ "reinicializar (o que pode exigir a montagem das partições modificadas). É "
+#~ "impossível fazer as duas coisas! Então você irá precisar inicializar por "
+#~ "um disco de resgate, e reinstalar seu gerenciador de boot a partir deste "
+#~ "disco. Leia a seção 4 da documentação do usuário do Parted para maiores "
+#~ "informações."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "A tabela de partições em %s não pode ser lida novamente (%s). Isto "
+#~ "significa que o GNU Hurd não sabe nada sobre as modificações que você "
+#~ "fez. Você deve reinicializar seu computador antes de fazer qualquer coisa "
+#~ "em %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "A região de inicialização não começa no início da partição."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Este sistema de arquivos tem um tamanho de setor lógico de %d. O GNU "
+#~ "Parted é conhecido por não funcionar corretamente com setores diferentes "
+#~ "de 512 bytes."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "O arquivo %s está marcado como um arquivo de sistema. Isto significa que "
+#~ "movê-lo pode fazer com que alguns programas parem de funcionar."
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Ocorreu falha ao adicionar partição %d (%s)"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "A tabela de partições em %s (%s) não pode ser lida novamente pelo "
+#~ "parted. Isto significa que o Linux não sabe nada sobre as modificações "
+#~ "que você fez."
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s contêm assinaturas GPT, indicando que isto possui uma tabela GPT. "
+#~ "Entretando, ele não tem uma tabela de partição falsa do msdos válida, "
+#~ "como deveria. Talvez tenha sido corrompido -- possivelmente por um "
+#~ "programa que não compreende tabelas de partição GPT. Ou talvez você "
+#~ "excluiu a tabela GPT, e agora está usando uma tabela de partição msdos. "
+#~ "Isto é uma tabela de partição GPT?"
+
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than 512 bytes"
+#~ msgstr ""
+#~ "O tamanho do setor em %s é %d bytes. O Parted é conhecido por não "
+#~ "funcionar perfeitamente com discos com setores diferentes de 512 bytes"
+
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "Dispositivo %s tem uma geometria estranha."
+
+#~ msgid "unknown"
+#~ msgstr "desconhecido"
+
+#~ msgid "Unknown SCSI"
+#~ msgstr "SCSI desconhecido"
+
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "O dispositivo %s não é um drive SCSI ou IDE."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "A tabela de partições em %s é inconsistente. Há várias razões para isto "
+#~ "ocorrer. A mais certa seria o Linux detectar a geometria do BIOS para %s "
+#~ "incorretamente. O GNU Parted suspeita que a geometria real deveria ser %d/"
+#~ "%d/%d (e não %d/%d/%d). Você deve checar com seu BIOS primeiro, pois isto "
+#~ "pode não ser correto. Você pode informar o Linux adicionando o parâmetro "
+#~ "%s=%d,%d,%d na linha de comando. Veja a documentação do LILO ou GRUB para "
+#~ "maiores informações. Se você acha que a geometria sugeria pelo Parted é a "
+#~ "correta, pode selecionar Ignorar para continuar (e arrumar o Linux "
+#~ "depois). De outra maneira, selecione Cancelar (e arrume o Linux e/ou o "
+#~ "BIOS agora)."
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "A tabela de partições em %s está inconsistente. Há várias razões para "
+#~ "isto ocorrer. Muitas vezes, o Linux detecta a geometria do BIOS "
+#~ "incorretamente. Porém, isso não parece ser o caso aqui. É seguro ignorar, "
+#~ "mas isso pode causar problemas (solucionáveis) com alguns gerenciadores "
+#~ "de boot. É recomendável usar LBA."
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Impossível alinhar a partição propriamente. Isso provavelmente significa "
+#~ "que outra ferramenta de particionamento gerou uma tabela de partições "
+#~ "incorreta porque não tinha a geometria na BIOS correta. É seguro ignorar, "
+#~ "mas isto pode causar problemas (solucionáveis) com alguns gerenciadores "
+#~ "de boot."
+
+#~ msgid "GUID Partition Table Header Signature is wrong: "
+#~ msgstr "A Assinatura do Cabeçalho da Tabela de Partições GUID está errada: "
+
+#~ msgid " should be "
+#~ msgstr " deveria ser "
+
+#~ msgid "GPT Header CRC check failed, %x should be %x."
+#~ msgstr "Checagem de CRC no cabeçalho GPT falhou, %x deveria ser %x."
+
+#~ msgid "GPT Partition Entry Array CRC check failed, %x should be %x."
+#~ msgstr ""
+#~ "Checagem de CRC na Matriz de Entradas de Partição GPT falhou, %x deveria "
+#~ "ser %x."
+
+#~ msgid ""
+#~ "This disk contains a valid Primary and Alternate GUID Partition Table but "
+#~ "the Protective MBR is invalid. This generally means that the disk had "
+#~ "GPT partitions on it, but then a legacy partition editing tool was used "
+#~ "to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and rewrite the "
+#~ "PMBR.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk."
+#~ msgstr ""
+#~ "Esse disco contém as Tabelas de Partições GUID primária e alternativa "
+#~ "corretas, mas a Protective MBR é inválida. Isso geralmente significa que "
+#~ "o disco tinha partições GPT, mas um programa padrão de particionamento "
+#~ "foi usado para mudar a tabela de partições gravada na MBR.\n"
+#~ "Quais dados são válidos, GPT ou MBR?\n"
+#~ "Sim: assume que a informação na GPT é a correta, e reescreve a PMBR.\n"
+#~ "Não: assume que a MBR é a correta, e apaga as informações na GPT.\n"
+#~ "Ignorar: assume que a MBR é correta, mas não altera o disco."
+
+#~ msgid ""
+#~ "This disk contains a valid Alternate GUID Partition Table but the Primary "
+#~ "GPT and Protective MBR are invalid. This generally means that the disk "
+#~ "had GPT partitions on it, but then a legacy partition editing tool was "
+#~ "used to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and will rewrite the "
+#~ "PMBR and Primary GPT.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk."
+#~ msgstr ""
+#~ "Esse disco contém uma Tabela de Partição GUID alternativa correta, mas a "
+#~ "GPT primária e a Protective MBR são inválidas. Isso geralmente significa "
+#~ "que o disco tinha partições GPT, mas um programa padrão de "
+#~ "particionamento foi usado para mudar a tabela de partições gravada na "
+#~ "MBR.\n"
+#~ "Quais dados são válidos, GPT ou MBR?\n"
+#~ "Sim: assume que a informação na GPT é a correta, e reescreve a PMBR e a "
+#~ "GPT primária.\n"
+#~ "Não: assume que a MBR é a correta, e apaga as informações na GPT.\n"
+#~ "Ignorar: assume que a MBR é correta, mas não altera o disco."
+
+#~ msgid ""
+#~ "This disk contains a valid Primary GUID Partition Table but the Alternate "
+#~ "GPT and Protective MBR are invalid. This generally means that the disk "
+#~ "had GPT partitions on it, but then a legacy partition editing tool was "
+#~ "used to change the partition table stored in the MBR.\n"
+#~ "Which data is valid, GPT or MBR?\n"
+#~ "Yes will assume that the GPT information is correct, and will rewrite the "
+#~ "PMBR and Alternate GPT.\n"
+#~ "No will assume that the MBR is correct, and erase the GPT information.\n"
+#~ "Ignore will assume that the MBR is correct, but not change the disk.\n"
+#~ msgstr ""
+#~ "Esse disco contém uma Tabela de Partição GUID primária correta, mas a GPT "
+#~ "alternativa e a Protective MBR são inválidas. Isso geralmente significa "
+#~ "que o disco tinha partições GPT, mas um programa padrão de "
+#~ "particionamento foi usado para mudar a tabela de partições gravada na "
+#~ "MBR.\n"
+#~ "Quais dados são válidos, GPT ou MBR?\n"
+#~ "Sim: assume que a informação na GPT é a correta, e reescreve a PMBR e a "
+#~ "GPT alternativa.\n"
+#~ "Não: assume que a MBR é a correta, e apaga as informações na GPT.\n"
+#~ "Ignorar: assume que a MBR é correta, mas não altera o disco.\n"
+
+#~ msgid "The new partition overlaps with another partition."
+#~ msgstr "A nova partição sobrepõe alguma outra partição"
+
+#~ msgid "Can't set non-Linux partitions as a root device."
+#~ msgstr "Não posso configurar partições não Linux como uma partição root."
+
+#~ msgid "Can't set non-Linux partitions as a swap device."
+#~ msgstr "Não posso configurar partições não Linux como uma partição swap."
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "O suporte para abrir sistema de arquivos %s não foi implementado ainda."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "Suporte para checar sistema de arquivos não implementado para %s."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "O suporte direto para cópia de sistemas de arquivos não está implementado "
+#~ "para %s. Entretanto, o suporte para redimensionamento está. Portanto, o "
+#~ "sistema de arquivos pode ser copiado se a nova partição for pelo menos "
+#~ "tão grande quanto a antiga. Então, diminua a partição que você está "
+#~ "tentando copiar, ou copie para uma partição maior."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Suporte para copiar sistema de arquivos não implementado para %s."
+
+#~ msgid "No get_resize_constraint for %s!"
+#~ msgstr "Não há get_resize_constraint para %s!"
+
+#~ msgid "The %s file system code doesn't support %s disk labels."
+#~ msgstr "O código do sistema de arquivos %s não suporta rótulos de disco %s."
+
+#~ msgid "Creating new %s disklabels is not implemented yet."
+#~ msgstr "Criação de novos rótulos %s não está implementado ainda."
+
+#~ msgid "The code to write the partition table hasn't been written for %s yet"
+#~ msgstr ""
+#~ "O código para escrever a tabela de partições ainda não foi escrito para "
+#~ "%s."
+
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Erro lendo %s (%s) para determinar se a partição está montada."
+
+#~ msgid "Can't grow a partition onto used space."
+#~ msgstr "Não posso aumentar a partição acima de algum espaço utilizado."
+
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "Um bug foi detectado no GNU parted. Por favor, envie um relatório de "
+#~ "bugpara bug-parted@gnu.org contendo a versão (%s) e a mensagem abaixo:"
+
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Tentativa de ler setores %ld-%ld fora da partição em %s"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Descritores de grupo inconsistentes!"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "Sistema de arquivos cheio!"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr ""
+#~ "Este sistema de arquivos ext2 tem uma aparência muito estranha! O Parted "
+#~ "não pode redimensioná-lo (ainda)."
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr "Superbloco inválido. Você tem certeza que isto é um sistema ext2?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "Sistema de arquivos tem erros! Execute e2fsck primeiro."
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr ""
+#~ "Sistema de arquivos não foi desmontado corretamente! Execute e2fsck "
+#~ "primeiro."
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "Sistema de arquivos tem uma característica incompatível habilitada"
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Erro determinando o cache temporário."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr ""
+#~ "Encontrado um inode com uma contagem incorreta de ligações. Melhor "
+#~ "executar o e2fsck primeiro."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Não há inodes livres suficientes!"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "Sistema de arquivos muito ocupado para remover um grupo!"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Sistema de arquivos tem muitos inodes utilizados para remover um grupo!"
+
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Seu sistema de arquivos está muito ocupado para redimensioná-lo para %i "
+#~ "blocos. Desculpe."
+
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Seu sistema de arquivos está com muitos inodes ocupados para redimensioná-"
+#~ "lo para %i blocos. Desculpe."
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr ""
+#~ "Encontrados blocos com referência cruzada! Melhor executar e2fsck "
+#~ "primeiro."
+
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "Bloco %i não tem referência? Estranho"
+
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "Bloco %i não deveria ter sido marcado!"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "O sistema de arquivos ext2 passou pelo teste básico. Para um teste mais "
+#~ "compreensivo, utilize o programa e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Desculpe, não posso mover o início de partições ext2 ainda!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Não foi possível esvaziar cache temporário!"
+
+#~ msgid "Insane! %d clusters!"
+#~ msgstr "Insano! %d clusters!"
+
+#~ msgid ""
+#~ "The filesystem is going to be too big for FAT16, so FAT32 will be used. "
+#~ "This is not compatible with MS-DOS, early versions of MS-Windows 95 and "
+#~ "Windows NT. If you use these operating systems, then select cancel, and "
+#~ "create a smaller partition. If you only use Linux, BSD, MS Windows 98 "
+#~ "and/or MS Windows 95 B, then select OK."
+#~ msgstr ""
+#~ "O sistema de arquivos será muito grande para FAT16, então será usado "
+#~ "FAT32. Isto não é compatível com o MS-DOS, versões antigas do MS-Windows "
+#~ "95 e Windows NT. Se você utiliza estes sistemas operacionais, selecione "
+#~ "cancelar, e crie uma partição menor. Se você utiliza somente Linux, BSD, "
+#~ "MS-Windows 98 e/ou MS-Windows 95 B, então selecione OK."
+
+#~ msgid "Weird: fat_calc_sizes() failed for FAT32!"
+#~ msgstr "Estranho: fat_calc_sizes() falhou para a FAT32!"
+
+#~ msgid ""
+#~ "Would you like to use FAT32 for this filesystem? It is much more "
+#~ "efficient with your disk space, but is not compatible with early versions "
+#~ "of Windows 95 and Windows NT. Only select yes if you only use Linux, "
+#~ "BSD, MS Windows 98 and/or MS Windows 95 B."
+#~ msgstr ""
+#~ "Você gostaria de usar a FAT32 para este sistema de arquivos? É muito mais "
+#~ "eficiente com o espaço em disco, mas não é compatível com versões antigas "
+#~ "do Windows 95 e Windows NT. Somente selecione sim se você só utilizar "
+#~ "Linux, BSD, MS-Windows 98 e/ou MS-Windows 95 B."
+
+#~ msgid ""
+#~ "File system doesn't have expected sizes for Windows to like it. Number "
+#~ "of clusters is %d (%d expected); size of FATs is %d sectors (%d expected)."
+#~ msgstr ""
+#~ "O sistema de arquivos não tem o tamanho esperado para que o Windows "
+#~ "utilize. O tamanho do cluster é %dk (%dk esperado); tamanho da FAT é %d "
+#~ "setores (%d esperado)."
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "Sistema de arquivos tem uma assinatura inválida para um FAT."
+
+#~ msgid ""
+#~ "Partition size (%ld sectors) and filesystem size (%ld sectors) do not "
+#~ "match."
+#~ msgstr ""
+#~ "Tamanho de partição (%ld setores) e tamanho do sistema de arquivos (%ld "
+#~ "setores) não batem."
+
+#~ msgid ""
+#~ "The FATs aren't big enough to describe all clusters! Each FAT is %d "
+#~ "sectors. There are %d clusters, which would require each FAT to be %d "
+#~ "sectors. This is REALLY weird. You might want to write us an email: bug-"
+#~ "parted@gnu.org"
+#~ msgstr ""
+#~ "As FATs não são grandes o suficiente para descrever todos os clusters! "
+#~ "Cada FAT tem %d setores. Existem %d clusters, os quais requerem que cada "
+#~ "FAT tenha %d setores. Isto é REALMENTE estranho. Você pode querer nos "
+#~ "escrever um email: bug-parted@gnu.org"
+
+#~ msgid ""
+#~ "This swap partition is not compatible with Linux version 2.1.117 or "
+#~ "earlier. Use a smaller partition (maximum size 128mb) if you want to use "
+#~ "old versions of Linux."
+#~ msgstr ""
+#~ "Esta partição swap não é compatível com o Linux versão 2.1.117 ou "
+#~ "anterior. Utilize uma partição menor (máximo de 128mb) se você quiser "
+#~ "utilizar versões antigas do Linux."
+
+#~ msgid "Linux-swap partitions can not be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partições Linux-swap não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Linux-swap partitions can not be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "Partições Linux-swap não podem ser inicializáveis em rótulos de disco "
+#~ "pc98."
+
+#~ msgid "HFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições HFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "JFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições JFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Reiserfs partitions can't be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partições ReiserFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "Reiserfs partitions must be bootable on pc98 disk labels."
+#~ msgstr ""
+#~ "Partições ReiserFS devem ser inicializáveis em rótulos de disco pc98."
+
+#~ msgid "XFS partitions can't be hidden on msdos disk labels."
+#~ msgstr "Partições XFS não podem ser escondidas em rótulos de disco msdos."
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "quando necessário, pede intervenção do usuário"
+
+#~ msgid "START and END are in megabytes\n"
+#~ msgstr "INICIO e FIM são em megabytes\n"
+
+#~ msgid "Source partition doesn't exist."
+#~ msgstr "A partição origem não existe."
+
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Você comandou a criação de uma partição em %.3f-%.3fMb. O mais perto que "
+#~ "o Parted pode chegar é %.3f-%.3fMb."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Não posso mover a partição sobre ela mesma. Talvez queira redimensionar?"
+
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Você comandou a movimentação da partição para %.3f-%.3fMb. O mais perto "
+#~ "que o Parted pode chegar é %.3f-%.3fMb."
+
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "Geometria de disco para %s: 0.000-%.3f megabytes\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Minor Início Fim "
+
+#~ msgid "Type "
+#~ msgstr "Tipo "
+
+#~ msgid "Name "
+#~ msgstr "Nome "
+
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "Você comandou o redimensionamento da partição para %.3f-%.3fMb. O mais "
+#~ "perto que o Parted pode chegar é %.3f-%.3fMb."
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr ""
+#~ "check MINOR faz um teste simples no sistema de arquivos"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copia o sistema de arquivos "
+#~ "para outra partição"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs MINOR TIPO-FS cria um sistema TIPO-FS na partição MINOR"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr "mkpartfs TIPO-PART TIPO-FS INICIO FIM cria uma partição TIPO-FS"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START [END] move partition MINOR"
+#~ msgstr "move MINOR INICIO [FIM] move a partição MINOR"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr "resize MINOR INICIO FIM redimensiona a partição MINOR"
+
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Você encontrou um bug no GNU parted. Por favor envie um relatório para "
+#~ "bug-parted@gnu.org\n"
+#~ "contendo a versão (%s), e a mensagem abaixo:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ " Você tem partições FAT Windows que não estão usando LBA. Se seu BIOS "
+#~ "suporta LBA, você deveria mudar para LBA ligando o OPÇÃO LBA em todas as "
+#~ "partições FAT. De outro modo, tenha certeza que o sistema operacional e o "
+#~ "BIOS têm a mesma geometria antes de redimensionar quaisquer partições FAT."
+
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "O sistema operacional acha que a geometria de %s é %d/%d/%d. Porém, o "
+#~ "cilindro 1024 termina em %.3fM.%s"
+
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "O sistema operacional acha que a geometria de %s é %d/%d/%d.%s"
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1â€/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“â€/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/ro.gmo b/po/ro.gmo
new file mode 100644
index 0000000..f78eb39
--- /dev/null
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..eb10bd6
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,3536 @@
+# Mesajele în limba română pentru GNU Parted
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# Laurentiu Buzdugan <lbuz@rolix.org>, 2005.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022.
+#
+# Cronologia traducerii fiÈ™ierului „partedâ€:
+# Traducerea inițială, făcută de LB, pentru versiunea parted 1.6.23.
+# Actualizare a codării caracteror, la codarea de caractere UTF-8.
+# Actualizare a diacriticelor de la „cu sedilă†la „cu virgulăâ€.
+# Actualizare a algoritmului formelor de plural (de la „două†la „treiâ€)
+# Eliminare a mesajelor ce-au dispărut în ultima versiune.
+# Actualizare și completare a traducerilor pentru versiunea 3.3.52.
+# Actualizare a traducerilor pentru versiunea 3.4.64.2.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-07 01:11+0200\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "argument nevalid %s pentru %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "argument ambiguu %s pentru %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Argumentele valide sunt:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "eroare de scriere"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Eroare de sistem necunoscută"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: opțiunea „%s%s†este ambiguă\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: opțiunea „%s%s†este ambiguă; posibilități:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: opÈ›iune nerecunoscută „%s%sâ€\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: opÈ›iunea „%s%sâ€, nu permite un argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: opÈ›iunea „%s%sâ€, necesită un argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: opÈ›iune nevalidă -- „%câ€\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: opÈ›iunea necesită un argument -- „%câ€\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Succes"
+
+# R-GC, scrie:
+# sugestie din partea lui DȘ:
+# msgstr "Nepotrivire"
+# -> aici cred că ar trebui: Nicio potrivire
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Nicio potrivire"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Expresie regulată nevalidă"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Caracter de colaționare nevalid"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Nume de clasă de caractere nevalidă"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Bara inversă la sfârșit"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Referință precedentă nevalidă"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[, [^, [:, [., sau [= fără pereche"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( sau \\( fără pereche"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ fără pereche"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Conținut nevalid al \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Final de interval nevalid"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Memorie epuizată"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Expresie regulată precedentă, nevalidă"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Final prematur al expresiei regulate"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Expresie regulată prea lungă"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") sau \\) fără pereche"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Nici o expresie regulată anterioară"
+
+# R-GC, ÃŽNTREABÄ‚:
+# rezultatul rulării acestei comenzi în sistemul meu
+# a fost:
+# „^[+1DdYy]â€
+# e corectă „traducerea†făcută:
+# „^[dDyY]†?
+# =========================
+# DȘ, îmi răspunde:
+# „-> din punct de vedere a expresiei regulate este corectâ€
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[dDyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+# R-GC, scrie:
+# pentru traducerea acestui mesaj, m-am
+# inspirat în traducerile făcute de celelalte echipe;
+# cel mai mult din traducerea făcută de
+# Benno Schulenberg.
+# alte traduceri:
+# - ÃŽmpachetat (de)
+# - Ambalat (de)
+# - Pachet făcut de
+# ========================
+# DȘ, spune:
+# „-> de ce nu 'ÃŽmpachetat de'â€
+# traducerea inițială:
+# „Făcut pachet de ...â€
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "ÃŽmpachetat de %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "ÃŽmpachetat de %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ sugerează:
+# „-> ar putea fi 'sau mai nouă'â€
+# ========================
+# corectare făcută, adevărul e, că „sună†mai
+# bine așa, față de traducerea inițială:
+# „sau mai mareâ€
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licența GPLv3+: GNU GPL versiunea 3 sau mai nouă <%s>.\n"
+"Acesta este software liber: sunteți liber să îl modificați și să îl "
+"redistribuiți.\n"
+"NU există NICIO GARANȚIE, în măsura permisă de lege.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Scris de %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Scris de %s și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Scris de %s, %s, și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, %s și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, %s, %s și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s și %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Scris de %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s și alții.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Raportați erorile la: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Raportați %s erori la: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s pagina principală: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Ajutor general pentru utilizarea software-ului GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "memorie epuizată"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Imaginea discului"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Eroare la deschiderea %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Nu se poate deschide %s pentru citire-scriere (%s). %s a fost deschis ca "
+"numai-citire."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s în timpul căutării pentru citire pe %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s în timpul citirii pe %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Nu se poate scrie pe %s, pentru că este deschis ca numai-citire."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s în timpul căutării pentru scriere pe %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s în timpul scrierii pe %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Încercați «%s --help» pentru mai multe informații.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Utilizare: %s [OPÈšIUNE] [DISPOZITIV]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informează sistemul de operare despre modificările tabelului de partiții.\n"
+"\n"
+" -d, --dry-run nu informează sistemul de operare asupra modificărilor "
+"efectuate\n"
+" -s, --summary imprimă un rezumat al conținutului modificărilor "
+"efectuate\n"
+" -h, --help afișează acest ajutor și iese\n"
+" -v, --version afișează informațiile despre versiune și iese\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Când nu este dat niciun DISPOZITIV, sondează toate partițiile.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Raportați erorile la <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Nu se poate deschide %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Nu se poate explora stocarea."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"AVERTISMENT: nucleul nu a reușit să recitească tabelul de partiții de pe %s "
+"(%s). Ca rezultat, este posibil să nu reflecte toate modificările dvs. "
+"decât după repornire."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Avertisment: nu se poate deschide %s (%s). Ca rezultat, este posibil să nu "
+"reflecte toate modificările dvs. decât după repornire."
+
+# R-GC, scrie:
+# prima frază a mesjului, e posibil să necesite
+# unele retușuri; rămîne așa pînă la următoarea
+# versiune de parted (acum, 3.4.64.2).
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Avertisment: nu s-a putut face translatorul să termine pe %s (%s). Ca "
+"rezultat, este posibil să nu reflecte toate modificările dvs. decât după "
+"repornire."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s încearcă să sincronizeze %s pe disc"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Nu s-a putut stabili starea dispozitivului %s - %s."
+
+# R-GC:
+# Notă:
+# am interpretat (și tradus), acronimul «dm», ca:
+# disk manager = administarator (de) disc
+# Sper să fie interpretarea corectă...
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Nu se poate determina tipul administratorului de disc %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Nu s-a putut determina dimensiunea sectorului pentru %s: %s.\n"
+"Se utilizează dimensiunea implicită a sectorului (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Nu s-a putut determina dimensiunea fizică a sectorului pentru %s.\n"
+"Se utilizează dimensiunea logică a sectorului (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Nu se poate determina dimensiunea lui %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE generic"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Nu se poate obține identificarea dispozitivului %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Dispozitivul %s are mai multe (%d) sectoare logice per sector fizic.\n"
+"GNU Parted suportă acest lucru EXPERIMENTAL pentru unele combinații speciale "
+"de etichete de disc/sistem de fișiere, de exp. GPT și ext2/3.\n"
+"Consultați site-ul web pentru informații actualizate."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Eroare la inițializarea dispozitivului SCSI %s - %s"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „-> evită forma scurtă a lui "este"â€
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Dispozitivul %s este atât de mic încât nu poate stoca un sistem de fișiere "
+"sau un tabel de partiții. Este posibil să fi selectat dispozitivul greșit?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Nu se poate determina geometria fișierului/dispozitivului %s. Nu trebuie să "
+"utilizați Parted decât dacă știți cu ADEVĂRAT ce faceți!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Card de stocare SD/MMC generic"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Dispozitiv NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Controlor RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Dispozitiv Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA via dispozitiv Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "unitate IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "DASD Virtual IBM iSeries"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Dispozitiv NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Controlor ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Controlor I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "Modul utilizator Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Dispozitiv de buclă"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „-> cred că ar trebui la plural: dispozitiveâ€
+# =========================
+# m-am lăsat indus în eroare de traducerea
+# «mot-a-mot†:)
+# normal, că trebuie să fie, „dispozitiveâ€
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Cartograf de dispozitive Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Dispozitiv de bloc virtual Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Necunoscut"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Dispozitiv de bloc Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Setul de software RAID pentru Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "Unitate RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Tip de dispozitiv nesuportat"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Eroare la sincronizarea sau închiderea fișierelor %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s final de fișier în timp ce se citea %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Eroare la informarea nucleului despre modificările făcute partiției %s -- "
+"%s. Aceasta înseamnă că Linux nu va ști nimic despre schimbările pe care le-"
+"ați făcut lui %s până când nu reporniți -- așa că n-ar trebui să îl montați "
+"sau să îl folosiți în vreun fel înainte de a repornii."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Nu se pot determina începutul și lungimea lui %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partițiile %s pe %s au fost scrise, dar nu am reușit să informăm nucleul cu "
+"privire la modificare, probabil pentru că aceasta/ele sunt în uz. Ca "
+"rezultat, vechea partiție va(vechile partiții vor) rămâne în uz. Ar trebui "
+"să reporniți acum înainte de a face alte modificări."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Nu se poate avea sfârșitul înainte de început! (sector de pornire=%jd "
+"lungime=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Încercați să scrieți sectoarele %ld-%ld în afara partiției de pe %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "se verifică pentru blocuri defectuoase"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+"Urmărirea desfășurării execuției(backtrace), are %d apeluri în stivă:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Declarația (%s) la %s:%d în funcția %s() a eșuat."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: etichetă de disc nerecunoscută"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Această bibliotecă libparted nu are suport pentru %s. Probabil că a fost "
+"compilată ca numai-citire."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partiția %d este %s, dar sistemul de fișiere este %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "aliniere_cilindru"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+# R-GC, scrie:
+# aici, flag(s), se referă la:
+# „stilul/tipul†partiției: boot, lba
+# ==========================
+# după revizarea fișierului, DȘ, spune:
+# „-> discul nu este acelaÈ™i lucru cu partiÈ›ia, păstrează "disc" È™i în traducereâ€
+# *****
+# așa este DȘ, aici am fost mai atent să
+# corectez vechea traducere a lui LB,
+# de la „Flag ...†la „Fanion ...â€,
+# decît să citesc/corectez întreaga
+# traducere...
+# De aceea, munca „criticuluiâ€, este cel
+# puțin la fel de importantă ca cea a celui
+# ce face traducerea...
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Fanion de disc necunoscut, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Etichetele discurilor %s nu acceptă partiții extinse."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Etichetele discurilor %s nu suportă partiții logice sau extinse."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Prea multe partiții primare."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Nu se poate adăuga o partiție logică lui %s pentru că aceasta nu este o "
+"partiție extinsă."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Nu puteți avea mai mult de o partiție extinsă pe %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Nu puteți avea partiții logice în afara partiției extinse."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Nu puteți avea o partiție logică în afara partiției extinse pe %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Nu puteți avea o partiție primară într-o partiție extinsă."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Nu se poate avea o partiție în afara discului!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Nu puteți avea partiții care se suprapun."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "liber"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "extinsă"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logică"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primară"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "de pornire"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "rădăcină"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "ascunsă"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Fanion de partiție necunoscut, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informaţii"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Avertisment"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Eroare"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatală"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Eroare"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Neimplementat"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Reparare"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Da"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nu"
+
+# R-GC scrie:
+# Notă:
+# Prefer a traduce Ok = de acord; l-am lăsat așa,
+# pentru a fi în „consonanță†cu Da și Nu...
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "Ok"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Reîncercați"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorare"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Anulare"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"O eroare a fost detectată în GNU Parted. Consultați site-ul web al parted "
+"http://www.gnu.org/software/parted/parted.html pentru mai multe informații "
+"despre ceea ce ar putea fi util pentru trimiterea erorilor! Trimiteți prin "
+"e-mail un raport cu eroarea găsită către %s, care să conțină cel puțin "
+"versiunea (%s) și următorul mesaj: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr ""
+"Suportul pentru citirea etichetelor discurilor AIX nu este încă implementat."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr ""
+"Suportul pentru scrierea etichetelor de disc AIX nu este încă implementat."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Suportul pentru adăugarea de partiții la etichetele discurilor AIX nu este "
+"încă implementat."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Suportul pentru duplicarea partițiilor în etichetele discurilor AIX nu este "
+"încă implementat."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Suportul pentru configurarea tipului de sistem de partiții în etichetele "
+"discurilor AIX nu este încă implementat."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Suportul pentru configurarea fanioanelor în etichetele discurilor AIX nu "
+"este încă implementat."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Nu se pot utiliza tabelele de partiții Atari pe discuri cu o dimensiune a "
+"sectorului care nu este egală cu %d octeți."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Nu se pot utiliza tabelele de partiții Atari pe discuri cu mai mult de %d "
+"sectoare."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Au fost detectate prea multe partiții Atari. Poate că există o buclă în "
+"lista conexă XGM. Se renunță."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Nu a fost găsită nicio partiție de date în ARS la sectorul %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Intrarea următorului ARS logic nu este de tip XGM în ARS la sectorul %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Nu pare să existe un tabel de partiții Atari pe acest disc (%s), sau acesta "
+"este corupt."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"Nu există spațiu în sectorul %lli pentru a stoca ARS-ul partiției logice %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Nu există spațiu în sectorul %lli pentru a stoca ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Numărul de sectoare care este stocat în tabelul de partiții nu corespunde cu "
+"dimensiunea dispozitivului dvs. Doriți să remediați tabelul de partiții?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Nu există spațiu în sectorul %lli pentru a stoca BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Au mai rămas partiții după completarea tabelului principal AHDI."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Tabelul AHDI principal a fost completat cu toate partițiile, dar tabelul ICD "
+"nu este gol, așa că mai multe partiții de dimensiune și poziție necunoscute "
+"vor fi detectate de software-ul compatibil ICD. Doriți să invalidați "
+"tabelul ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Intrările ICD nu pot conține partiții logice sau extinse."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Au mai rămas partiții după completarea tabelelor."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Nu puteți folosi o partiție XGM extinsă în modul ICD (mai mult de %d "
+"partiții primare, dacă XGM este prima, aceasta contează pentru două)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Nu se pot satisface toate constrângerile asupra partiției."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Nu puteți utiliza mai mult de %d partiții primare (mod ICD) dacă utilizați o "
+"partiție XGM extinsă. Dacă XGM este prima partiție, aceasta contează pentru "
+"două."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Nu se poate aloca un număr de partiție."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Nu se poate aloca un slot pentru etichetă de disc bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+"Tabelul de partiții al dispozitivului DASD-LDL nu poate fi modificat.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Nu se poate aloca un slot pentru etichetă de disc dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Tabel de partiții nevalid pe %s -- semnătură greșită %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Tabel de partiții nevalid - partiție recursivă pe %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted nu poate redimensiona partițiile gestionate de Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "nu se mai poate crea nici o partiție în plus"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s nu are nicio partiție extinsă (partiția antetului volumului)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Suma de verificare este greșită, indicând faptul că tabelul de partiții este "
+"corupt."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Doar partițiile primare pot fi partiții rădăcină."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Doar partițiile primare pot fi partiții swap."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Doar partițiile logice pot fi un fișier de pornire."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"nu s-a putut stabili numele partiției dvh la %s:n\n"
+"Numai partițiile logice (fișierele de pornire) au un nume."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Prea multe partiții primare"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "eroare la deschidere"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "eroare în timpul căutării"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "eroare la citire"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "eroare ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Versiunea API nu corespunde"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Tip de disc neacceptat"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Format de disc neacceptat"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Discul este în uz"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Eroare de sintaxă în fișierul de configurare"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Eticheta de volum este coruptă"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Numele unui set de date este corupt"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Alocarea memoriei a eșuat"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Verificarea dispozitivului a eșuat"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Dispozitivul specificat nu este un dispozitiv DASD valid"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER nu a fost găsit pe dispozitiv"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Eroare fatală"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Nu există spațiu pentru eticheta de volum."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Nu există spațiu pentru informații despre partiții."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC nevalid."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Nu s-a putut obține versiunea API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Versiunea actuală a API „%d†nu se potrivește cu versiunea API a driver-ului "
+"dasd „%dâ€!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Nu s-a putut obține dimensiunea discului."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Nu s-au putut obține informațiile despre geometria discului."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Nu s-au putut obține informații despre dimensiunea blocului."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Geometria discului nu corespunde unui dispozitiv DASD de tip 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "dispozitivul este prea mic pentru GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formatul tabelului de partiții GPT este versiunea %x, care este mai nouă "
+"decât ceea ce Parted poate recunoaște. Vă rugăm să raportați acest lucru!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Nu tot spațiul disponibil pentru %s pare să fie folosit; puteți repara GPT-"
+"ul pentru a utiliza tot spațiul (%llu blocuri suplimentare) sau, puteți "
+"continua cu setarea curentă! Ce decideți? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Tabelul GPT de rezervă nu se află la sfârșitul discului, așa cum ar trebui "
+"să fie. Remediați, prin mutarea copiei de rezervă la sfârșitul discului (și "
+"eliminând copia de rezervă veche)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Atât tabelul primar GPT cât și cel de rezervă sunt corupte. Încercați să "
+"faceți un tabel nou și să utilizați caracteristica de salvare a lui Parted "
+"pentru a recupera partițiile."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Tabelul GPT de rezervă este corupt, dar principalul pare să fie corect, așa "
+"că va fi folosit."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Tabelul GPT principal este corupt, dar copia de rezervă pare să fie corectă, "
+"așa că va fi folosit acesta."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "nepotrivire CRC a matricei de tabel de partiții primare"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "nu s-a putut traduce numele partiției"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Semnătură nevalidă %x pentru etichetele de disc pentru Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Harta partiției nu are nicio intrare în harta de partiții!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s este prea mic pentru o etichetă de disc pentru Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partiția %d are o semnătură nevalidă %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partiția %d are o lungime nevalidă de 0 octeți!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Regiunea de date nu începe la începutul partiției."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Regiunea de pornire a partiției nu ocupă întreaga partiție."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Regiunea de date a partiției nu ocupă întreaga partiție."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Dimensiune de bloc ciudată pe descriptorul dispozitivului: %d octeți nu este "
+"divizibil cu 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Descriptorul de driver spune că dimensiunea fizică a blocului este %d de "
+"octeți, dar Linux spune că este %d de octeți."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nu a fost găsită nici o hartă de partiție validă."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Dimensiuni în conflict ale intrărilor din harta partițiilor! Intrarea 1 "
+"spune că aceasta este de %d, dar intrarea %d spune că este de %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Ciudat! Există 2 intrări în harta partiției!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Schimbarea numelui unei partiții rădăcină sau de swap va împiedica ca Linux "
+"să o recunoască ca atare."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Nu se poate adăuga o altă partiție -- harta partițiilor este prea mică!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Tabel de partiții nevalid pe %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partiția %d nu este aliniată la limitele cilindrului. Acest lucru este încă "
+"neacceptat."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Nu se poate adăuga o altă partiție."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"lungimea partiției cu %1$jd sectoare depășește maximul de %3$jd impus de "
+"tabelul de partiții %2$s"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"numărul sectorului de pornire, %1$jd depășește maximul de %3$jd impus de "
+"tabelul de partiții %2$s"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Sumă de verificare greșită în blocul %llu de tip %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s: Nu a fost găsit blocul rdb, nu ar trebui să se întâmple niciodată."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Buclă detectată în blocul %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Lista %s pare greșită în blocul %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Nu s-au putut enumera blocurile defecte."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Nu s-au putut enumera blocurile de partiții."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Nu s-au putut enumera blocurile sistemului de fișiere."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Nu s-au putut enumera blocurile de pornire."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Nu s-a putut scrie blocul de partiții la %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "S-a detectat o etichetă coruptă a discului Sun."
+
+# R-GC, scrie:
+# CHS = Cylinder Head Sector ==>
+# Cilindru Cap Sector = CCS
+# ***
+# NB: sistemul CCS/CHS, este limitat
+# la dicuri dure, de pînă la 8GB
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometria CCS(CHS în engleză) a discului (%d,%d,%d) raportată de sistemul de "
+"operare nu se potrivește cu geometria stocată pe eticheta discului (%d,%d,"
+"%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Eticheta discului descrie un disc mai mare de %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Discul are %d cilindri, ceea ce este mai mult decât maximul de 65536."
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „-> "fără ea" în loc de "fără el"â€
+# ***
+# corect, (data viitoare, fi mai atent, R-GC și
+# citește tot mesajul, odată ce-ai terminat de tradus!).
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Partiția «Whole Disk» este singura disponibilă rămasă. În general, nu este "
+"o idee bună să suprascrieți această partiție cu una reală. Este posibil ca "
+"Solaris să nu poată porni fără ea, iar SILO (încărcătorul de pornire sparc) "
+"o folosește, de asemenea."
+
+# R-GC, scrie:
+# nu știu ce mă face să cred că traducerea corectă,
+# ar fi:
+# „Eticheta discului Sun este pe deplin completată.â€
+# ***
+# Opinii / Idei ?
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Eticheta discului Sun este plină."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "deschiderea dispozitivului a eșuat"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "căutarea pe dispozitiv a eșuat"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "scrierea pe dispozitiv a eșuat"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "citirea de pe dispozitiv a eșuat"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Nu s-a putut citi eticheta de volum."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Nu s-a putut scrie eticheta de volum."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Nu s-au putut citi etichetele VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Nu s-a putut citi VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Nu s-a putut citi VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Nu s-a putut citi VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Nu s-a putut citi VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Nu s-au putut scrie etichetele VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Nu s-a putut scrie VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Nu s-a putut scrie VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Nu s-a putut scrie VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Nu s-a putut scrie VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Nu s-a putut scrie VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Memorie insuficientă."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+"Nu se poate obÈ›ine dimensiunea unității pentru unitatea specială „COMPACTâ€."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "„%s†are o sintaxă nevalidă pentru locații."
+
+# R-GC, scrie:
+# luînd în considerare, referința pe care o are
+# mesajul «libparted/unit.c:394», am considerat
+# că traducerea directă „mote-a-moteâ€, este o
+# traducere înșelătoare/greșită.
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Numărul maxim de capete este de %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Valoarea maximă a sectorului este %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Locația %s se află în afara dispozitivului %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Număr nevalid."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Utilizați o unitate mai mică de măsură în loc de o valoare < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Nu s-a reușit alocarea blocului de partiții\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Nu s-a reușit alocarea blocului\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Nu s-a putut citi blocul de pornire %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Nu s-a putut citi blocul rădăcină %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Nu s-a putut aloca elementul din lista de ID-uri\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Nu s-a putut citi blocul %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Sumă de verificare greșită pe blocul %llu de tip %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Nu s-a putut scrie blocul %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+"%s : Nu s-a putut aloca memorie pentru blocul „rdb(ram_disk_block)†specific "
+"discului\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+"%s : Nu s-a găsit niciun bloc „rdb(ram_disk_block)†- nu ar trebui să se "
+"întâmple niciodată\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Nu s-a putut citi blocul de partiție %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted a fost compilat greșit: sectorul de pornire FAT ar trebui să aibă "
+"512 octeți. Suportul FAT va fi dezactivat."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr ""
+"Sistemul de fișiere are o semnătură nevalidă pentru un sistem de fișiere FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Sistemul de fișiere are o dimensiune de sector nevalidă pentru un sistem de "
+"fișiere FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Sistemul de fișiere are o dimensiune de cluster nevalidă pentru un sistem de "
+"fișiere FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Sistemul de fișiere are un număr nevalid de sectoare rezervate pentru un "
+"sistem de fișiere FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Sistemul de fișiere are un număr nevalid de tabele FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Geometria CCS(CHS) a sistemului de fișiere este (%d, %d, %d), care este "
+"nevalidă. Geometria CCS(CHS) a tabelului de partiții este (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Sectorul de pornire FAT spune că dimensiunea sectorului logic este 0. Acest "
+"lucru este ciudat. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Sectorul de pornire FAT spune că nu există tabele FAT. Acest lucru este "
+"ciudat. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Sectorul de pornire FAT spune că, clusterele au 0 sectoare. Acest lucru "
+"este ciudat. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Sistemul de fișiere este FAT12, care nu este suportat."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Semnătură a spațiului memoriei de interschimb(swap) în stilul linux vechi "
+"nerecunoscută „%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Semnătură a spațiului memoriei de interschimb(swap) în stilul linux nou "
+"nerecunoscută „%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr ""
+"Semnătură a spațiului memoriei de interschimb(swap) linux pentru comutarea "
+"suspendării(swsusp), nerecunoscută „%9sâ€."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted nu poate utiliza sisteme de fișiere HFS pe discuri cu o dimensiune a "
+"sectorului care nu este egală cu %d octeți."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Geometria CCS(CHS) a sistemului de fișiere este (%d, %d, %d), care este "
+"nevalidă. Geometria CCS(CHS) a tabelului de partiții este (%d, %d, %d). "
+"Dacă selectați «Ignorare», geometria CCS(CHS) a sistemului de fișiere va "
+"rămâne neschimbată. Dacă selectați «Reparare», geometria CCS(CHS) a "
+"sistemului de fișiere va fi setată pentru a se potrivi cu geometria CCS(CHS) "
+"a tabelului de partiții."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Sectorul de informații are o semnătură greșită (%x). Pentru moment, alegeți "
+"«Anulare» și trimiteți un raport de eroare la <bug-parted@gnu.org>. Dacă "
+"sunteți cu adevărat disperat, probabil că este sigur să alegeți «Ignorare»."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Aveți nevoie de %s spațiu liber pe disc pentru a micșora această partiție la "
+"această dimensiune. În prezent, numai %s este liber."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Clusterul începe la delta = %d, care nu este un multiplu al dimensiunii "
+"clusterului %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Intrare greșită în director pentru %s: primul cluster este marcatorul de "
+"sfârșit al fișierului."
+
+# R-GC, scrie:
+# după revizuirea fișierului, DȘ, spune:
+# „-> propun "FAT degradat" (deteriorat)â€
+# ***
+# „deterioratâ€, mi se pare o bună substituÈ›ie,
+# pentru „incorectâ€, iniÈ›ial.
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"FAT deteriorat: lanț neterminat pentru %s. Ar trebui să rulați dosfsck sau "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Tabel FAT incorect: clusterul %d din lanțul pentru %s este în afara "
+"sistemului de fișiere. Ar trebui să rulați dosfsck sau scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Tabel FAT incorect: clusterul %d are o referință încrucișată la %s. Ar "
+"trebui să rulați dosfsck sau scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s este %dk, dar are %d clustere (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partiție prea mică/mare pentru un sistem de fișiere %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Tabelele FAT nu se potrivesc. Dacă nu știți ce înseamnă acest lucru, "
+"selectați «Anulare», rulați scandisk pe sistemul de fișiere și apoi reveniți."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Nu există configurații posibile pentru acest tip de FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Sistemul de fișiere nu are dimensiunea așteptată pentru a fi compatibil cu "
+"Windows. Dimensiunea clusterului este %dk (se așteaptă %dk); numărul de "
+"clustere este %d (se așteaptă %d); dimensiunea FAT-urilor este de %d "
+"sectoare (se așteaptă %d)."
+
+# R-GC, scrie:
+# lipsește forma de plural.
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Sistemul de fișiere raportează spațiul liber ca fiind %d (de) clustere, nu "
+"%d (de) clustere."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Nu există suficient spațiu în directorul rădăcină pentru toate fișierele. "
+"Fie anulați, fie ignorați pentru și veți pierde fișierele."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Eroare la scrierea în directorul rădăcină."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Dacă lăsați sistemul de fișiere ca FAT16, atunci nu veți avea probleme."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Dacă convertiți la FAT16 și MS Windows este instalat pe această partiție, "
+"atunci va trebui să reinstalați încărcătorul de pornire MS Windows. Dacă "
+"doriți să faceți acest lucru, ar trebui să consultați manualul Parted (sau "
+"manualul distribuției dvs.)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Dacă lăsați sistemul de fișiere ca FAT32, atunci nu veți introduce probleme "
+"noi."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Dacă convertiți la FAT32 și MS Windows este instalat pe această partiție, "
+"atunci va trebui să reinstalați încărcătorul de pornire MS Windows. Dacă "
+"doriți să faceți acest lucru, ar trebui să consultați manualul Parted (sau "
+"manualul distribuției dvs.). De asemenea, conversia la FAT32 va face ca "
+"sistemul de fișiere să nu fie citit de MS DOS, MS Windows 95a și MS Windows "
+"NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Doriți să utilizați FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Sistemul de fișiere poate fi redimensionat la această dimensiune numai prin "
+"conversia la FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Sistemul de fișiere poate fi redimensionat la această dimensiune numai prin "
+"conversia la FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted, nu poate redimensiona această partiție, la această dimensiune. "
+"Lucrăm pentru a rezolva această problemă!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"Tipul de FAT %d din suportul media %x nu se potrivește cu sectoarele de "
+"pornire ale suportului media %x. Probabil ar trebui să rulați scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: cluster %ld în afara sistemului de fișiere"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: cluster %ld în afara sistemului de fișiere"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: nu există clustere libere"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Nu s-a putut detecta sistemul de fișiere."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "redimensionarea sistemelor de fișiere %s nu este suportată"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Sistemul de fișiere este mai mare decât volumul său!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Sistemul de fișiere conține erori."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Blocurile deteriorate nu au putut fi citite."
+
+# R-GC, scrie:
+# Daniel, urmărește, te rog, evoluția traducerii
+# lui «extent», de-a lungul fișierului, și comentariile lăsate, și spune-mi ce părere ai
+# despre asta.
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Se încearcă înregistrarea unei extensii care să înceapă de la blocul 0x% X, "
+"dar există deja una în această poziție. Ar trebui să verificați sistemul de "
+"fișiere!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Se încearcă mutarea unei extensii de la blocul 0x%X la blocul 0x%X, dar "
+"există deja una în această poziție. Acest lucru nu ar trebui să se întâmple!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Nu s-a putut actualiza memoria tampon a extinderii pentru fișierul HFS cu "
+"CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+"Se încearcă să se citească fișierul HFS cu CNID %X după sfârșitul fișierului."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Nu s-a putut găsi sectorul %lli al fișierului HFS cu CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+"Se încearcă să se scrie fișierul HFS cu CNID %X după sfârșitul fișierului."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Nu s-a putut actualiza memoria tampon a extinderii pentru fișierul HFS+ cu "
+"CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Se încearcă să se citească fișierul HFS+ cu CNID %X după sfârșitul "
+"fișierului."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Nu s-a putut găsi sectorul %lli al fișierului HFS+ cu CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Se încearcă să se scrie fișierul HFS+ cu CNID %X după sfârșitul fișierului."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Ne pare rău, HFS nu poate fi redimensionat încă în acest fel."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "se micșorează"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Mutarea datelor a eșuat."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Mutarea datelor a lăsat câteva date la sfârșitul volumului."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "se scrie blocul directorului principal HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Nu a fost găsită nicio semnătură HFS[+X] validă în timpul deschiderii."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Versiunea %d de HFS+ nu este suportată."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Versiunea %d de HFSX nu este suportată."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Mutarea datelor a lăsat câteva date la sfârșitul volumului."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Eroare în timpul scrierii fișierului de alocare."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+"Eroare în timpul scrierii părții de compatibilitate a fișierului de alocare."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "se scrie antetul volumului HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"A apărut o eroare în timpul căutării fișierului obligatoriu de blocuri "
+"defectuoase."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Se pare că există o eroare în pachetul HFS: fișierul cu blocuri defectuoase "
+"nu conține volumul HFS+ încorporat."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Ne pare rău, HFS+ nu poate fi redimensionat încă în acest fel."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "se micșorează volumul HFS+ încorporat"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Redimensionarea volumului HFS+ a eșuat."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "se micșorează pachetul HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Actualizarea pachetului HFS a eșuat."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Aceasta nu este o verificare reală %s. Aceasta va extrage fișiere speciale "
+"de nivel scăzut pentru scopuri de depanare."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Suma de verificare a antetului listei de blocuri este greșită."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Dimensiune nevalidă a unui bloc de tranzacții în timpul reluării jurnalului "
+"(%i octeți)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Jurnalele stocate în afara volumului nu sunt suportate. Încercați să "
+"dezactivați jurnalul și rulați din nou Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr ""
+"Decalajul sau dimensiunea jurnalului nu este un multiplu al dimensiunii "
+"sectorului."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Valori magice incorecte în antetul jurnalului."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Dimensiunea jurnalului nu este aceeași în blocul de informații din jurnal și "
+"în antetul jurnalului."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Unele câmpuri din antet nu sunt multipli ai dimensiunii sectorului."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Dimensiunea sectorului stocat în jurnal nu este de 512 octeți. Parted "
+"acceptă numai sectoare cu lungimea de 512 octeți."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Suma de control a jurnalului este greșită."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Jurnalul nu este gol. Parted trebuie să reia tranzacțiile înainte de a "
+"deschide sistemul de fișiere. Acest lucru va modifica sistemul de fișiere."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Antetul volumului sau blocul directorului principal, s-a modificat în timpul "
+"reluării jurnalului. Ar trebui să reporniți Parted."
+
+# R-GC, scrie:
+# care dintre cele două variante,
+# reprezintă traducerea corectă?
+# Eu, înclin, spre cea de-a doua...
+# ***
+# Referința mesajului, este:
+# libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+# ***
+# Opinii / Idei ?
+# PS: mai jos, am lăsat «extent», neatins, cu o explicație
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+"O extensie nu a fost realocată.\n"
+"O „întindere†nu a fost mutată."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"O referire la o anumită „întindere†vine dintr-un loc din care nu ar trebui. "
+"Ar trebui să verificați sistemul de fișiere!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+"Acest volum HFS nu are fișier de catalog. Acest lucru este foarte neobișnuit!"
+
+# R-GC, scrie:
+# cred că:
+# „extents overflow fileâ€, vrea să zică:
+# «fișier de depășire de zone», conform
+# explicațiilor găsite în pagina:
+# <https://en.wikipedia.org/wiki/Hierarchical_File_System>, cum nu sunt sigur
+# de această traducere, prefer să las:
+# „extents overflow†netraduse...
+# ***
+# Opinii / Idei ?
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Acest volum HFS nu are un fiÈ™ier „extents overflowâ€. Acest lucru este "
+"destul de neobișnuit!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"FiÈ™ierul „extents overflow†nu trebuie să conÈ›ină propriile „extentsâ€! Ar "
+"trebui să verificați sistemul de fișiere."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Nu s-a putut stoca în memoria tampon sistemul de fișiere."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Nu s-a putut încărca lista de blocuri defectuoase."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "A apărut o eroare în timpul mutării „extentâ€."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+"Acest volum HFS+ nu are fișier de catalog. Acest lucru este foarte "
+"neobișnuit!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Acest volum HFS+ nu are un fiÈ™ier „extents overflowâ€. Acest lucru este "
+"destul de neobișnuit!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "afișează acest mesaj de ajutor"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "enumeră etichetele partițiilor de pe toate dispozitivele bloc"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "afișează ieșirea analizabilă a mașinii"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "afișează ieșirea JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nu solicită niciodată intervenția utilizatorului"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "în modul script, remediați în loc să anulați atunci când vi se cere"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "afișează versiunea"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "aliniere pentru partiții noi"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMĂR este numărul partiției folosit de Linux. Pe etichetele discurilor MS-"
+"DOS, partițiile primare sunt numărate de la 1 la 4, partițiile logice de la "
+"5 încolo.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TIP-ETICHETÄ‚ este unul dintre: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FANION este unul dintre: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNITATEA este una dintre: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "alinierea dorită: minimă sau optimă"
+
+# R-GC, scrie:
+# știu că acordul gramatical, lipsește,
+# este greșit, dar mesajul se referă la:
+# ÃŽ: „PartiÈ›ia ca tip, de care e?â€, È™i nu la:
+# „De ce tip este partiÈ›ia?â€
+# R: „Partiție primară, partiție logică și
+# partiÈ›ie extinsăâ€
+# ***
+# Opinii /Idei?
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TIP-PARTIȚIE este una dintre: primară, logică, extinsă\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TIP-SF este unul dintre: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START și SFÂRȘIT sunt locații de disc, cum ar fi 4GB sau 10%. Valorile "
+"negative sunt calculate de la sfârșitul discului. De exemplu, -1s specifică "
+"exact ultimul sector.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"SFÂRȘIT este locația discului, cum ar fi 4GB sau 10%. Valoarea negativă se "
+"calculează de la sfârșitul discului. De exemplu, -1s specifică exact ultimul "
+"sector.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STARE este una dintre: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DISPOZITIV este de obicei /dev/hda or /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NUME este orice cuvânt pe care îl doriți\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright © 1998 - 2006 Free Software Foundation, Inc.\n"
+"Acest program e software liber, distribuit sub Licența publică generală "
+"GNU. \n"
+"\n"
+"Acest program este distribuit cu speranța că va fi folositor, dar FĂRĂ NICI\n"
+"O GARANȚIE; chiar şi fără garanția implicită de VÂNZARE sau POTRIVIRE\n"
+"PENTRU UN SCOP ANUME. Vedeți Licența Publică Generală GNU (GNU GPL)\n"
+"pentru detalii suplimentare.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%% (timpul rămas %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partiția %s este utilizată. Sigur doriți să continuați?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partiția(ile) de pe %s este(sunt) utilizată(e)."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Eticheta de disc existentă pe %s va fi distrusă și toate datele de pe acest "
+"disc se vor pierde. Doriți să continuați?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Nou tip de etichetă de disc?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Tipul partiției?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Numele partiției?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Tipul sistemului de fișiere?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "ÃŽncepe(de unde)?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Termină(până unde)?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Ați solicitat o partiție de la %s la %s (sectoare %llu..%llu).\n"
+"Cea mai apropiată locație pe care o puteți utiliza este %s la %s (sectoarele "
+"%llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Este aceasta acceptabil pentru tine?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Partiția rezultată nu este aliniată corect pentru o performanță optimă: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "necunoscută (malloc a eșuat, memorie disponibilă insuficientă)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "etichetele de disc %s nu acceptă numele partiției."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Numărul partiției?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "etichetele de disc %s nu acceptă numele partiției."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Tipul partiției?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Număr nevalid."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Tipul partiției?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Număr nevalid."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Dispunerea logică a discului conform BIOS: %d,%d,%d (cilindri,capete,"
+"sectoare). Fiecare cilindru este de %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disc %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Dimensiunea sectorului (logică/fizică): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabel de partiții: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Fanioane disc: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Număr"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Start"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Sfârşit"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Dimensiune"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tip"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Sistem de fișiere"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Nume"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Fanioane"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Spațiu liber"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"O partiție %s %s a fost găsită la %s -> %s. Doriți s-o adăugați la tabelul "
+"de partiții?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "se caută după sisteme de fișiere"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Comanda „resize†a fost eliminată în parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Micșorarea unei partiții poate provoca pierderi de date; sunteți sigur că "
+"doriți să continuați?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Dispozitiv nou?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "tipul de aliniere (minimă/optimă)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d aliniat\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d nealiniat: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Fanion pentru inversare?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Stare nouă?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Unitate?"
+
+# R-GC, scrie:
+# autorii de Parted, oferă posibilitatea traducerii
+# comenzilor utilizate în cadrul programului, dar
+# din următoarele motive, n-am făcut-o, ordinea
+# e arbitrară:
+# - necunoașterii poziției diacriticelor pe tastatură
+# - necunoașterii formei de ale folosi (Alt Gr + *)
+# - dorința uniformizării (de exp: dacă pentru cele-
+# lalte programe, folosim (--)help pentru ca să se
+# afișeze ajutorul pentru programul respectiv, aici
+# să rămînă la fel, nu tastînd «ajutor»
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TIP N verifică partiția N pentru "
+"alinierea TIP(min|opt)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+# R-GC, scrie:
+# Notă:
+# acest mesaj, face parte din mesajele de ajutor,
+# afișate la lansarea comenzii «parted --help», așa
+# că, vă rog, nu-i modificați structura...
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMANDĂ] afișează informații de ajutor "
+"general, sau despre COMANDÄ‚"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable TIP-ETICHETĂ creează o nouă etichetă de disc "
+"(tabel de partiții)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TIP-PART [TIP-SF] START SFÂRȘIT creează o partiție"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"«mkpart» creează o partiție fără să creeze un nou sistem de fișiere pe acea "
+"partiție. TIP-SF poate fi specificat pentru a stabili un anumit ID de "
+"partiție.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMĂR NUME numește partiția NUMĂR ca NUME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] afișează tabelul de partiții, "
+"dispozitivele disponibile,\n"
+" spațiul liber "
+"sau toate partițiile găsite"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Fără argumente, «print» afișează întregul tabel de partiţii. Cu următoarele "
+"argumente arată informații mai specifice: \n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : afișează toate dispozitivele bloc active\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : afișează informații despre spațiul liber nepartiționat pe "
+"dispozitivul bloc curent\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : afișează tabelele de partiții ale tuturor dispozitivelor bloc "
+"active\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit ieșire din program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue START SFÂRȘIT recuperează o partiție pierdută "
+"aflată între START și SFÂRȘIT"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Comanda „resize†a fost eliminată în parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart NUMĂR SFÂRȘIT redimensionează partiția NUMĂR"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMĂR șterge partiția NUMĂR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select UNITATE alege unitatea de editat"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FANION STARE schimbă FANION(ul) de pe "
+"dispozitivul selectat"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FANION] comută starea FANION(ului) pe "
+"dispozitivul selectat"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMĂR FANION STARE schimbă FANION(ul) pe partiția NUMĂR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMĂR [FANION]] comută starea FANION(ului) pe "
+"partiția NUMĂR"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit UNITATE setează unitatea implicită ca "
+"UNITATE"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version afișează numărul versiunii și "
+"informațiile despre drepturile de autor ale GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"„version†afișează informații despre drepturile de autor și versiunea "
+"corespunzătoare a acestei copii de GNU Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Utilizare: %s [-hlmsfv] [-a<align>] [DISPOZITIV [COMANDÄ‚ [PARAMETRII]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nu a fost găsit niciun dispozitiv"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "AVERTISMENT: Nu sunteți superutilizator. Atenție la permisiuni.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Ar trebui să reinstalați încărcătorul de pornire înainte de a reporni. "
+"Citiți secțiunea 4 din documentația utilizatorului Parted pentru mai multe "
+"informații."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Este posibil să fie nevoie să actualizați /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Bine ați venit la GNU Parted! Tastați „help†pentru a vedea o listă de "
+"comenzi.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Utilizare: parted [OPÈšIUNE]... {UNITATE [COMANDÄ‚ [PARAMETRII]...]...]\n"
+"Aplică COMANDA cu PARAMETRII la UNITATE. Dacă nu este dată nici o COMANDĂ,\n"
+"rulează în mod interactiv.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Ați găsit o eroare în GNU Parted! Iată ce trebuie să faceți:\n"
+"\n"
+"Nu intrați în panică! Eroarea, cel mai probabil, nu a afectat niciuna\n"
+"dintre datele dumneavoastră.\n"
+"Ajutați-ne să remediam această eroare făcând următoarele:\n"
+"\n"
+"Verificați dacă eroarea a fost deja remediată verificând ultima\n"
+"versiune de GNU Parted pe care o puteți găsi la:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Verificați această versiune înainte de raportarea erorilor.\n"
+"\n"
+"Dacă acest lucru nu a fost remediat încă sau dacă nu știți cum\n"
+"să verificați, vizitați site-ul web GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"pentru informații suplimentare.\n"
+"\n"
+"Raportul dvs. ar trebui să conțină versiunea acestei ediții (%s)\n"
+"împreună cu mesajul de eroare de mai jos, ieșirea comenzii:\n"
+"\n"
+"\t«parted DEVICE unit co print unit s print»\n"
+"\n"
+"urmat de istoricul comenzilor pe care le-ați introdus.\n"
+"Includeți, de asemenea, orice informații suplimentare despre\n"
+"configurarea dvs. pe care le considerați importante.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Istoricul comenzilor:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Eroare: SEGV_MAPERR (Adresa nu este cartografiată la obiect)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Eroare: SEGV_ACCERR (permisiuni nevalide pentru obiectul cartografiat)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Eroare: A fost întâlnit un semnal SIGSEGV general.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Eroare: FPE_INTDIV (Număr întreg: împărțire la zero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Eroare: FPE_INTOVF (Număr întreg: depășire)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTDIV (Virgulă flotantă: împărțire la zero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTOVF (Virgulă flotantă: depășire)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTUND (Virgulă flotantă: subnivel)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTRES (Virgulă flotantă: rezultat inexact)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTINV (Virgulă flotantă: operație nevlidă)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Eroare: FPE_FLTSUB (virgulă flotantă: sub-indice în afara intervalului)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Eroare: A fost întâlnit un semnal SIGFPE general."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Eroare: ILL_ILLOPC (Cod operațional ilegal)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Eroare: ILL_ILLOPN (Operand ilegal)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Eroare: ILL_ILLADR (Mod de adresare ilegal)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Eroare: ILL_ILLTRP (Capturare ilegală)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Eroare: ILL_PRVOPC (Cod operațional privilegiat)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Eroare: ILL_PRVREG (Registrare privilegiată)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Eroare: ILL_COPROC (Eroare coprocesor)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Eroare: ILL_BADSTK (Eroare internă de stivă)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Eroare: A fost întâlnit un semnal SIGILL general."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "simbol nevalid: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Se așteaptă un număr de partiție."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partiția nu există."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Se așteaptă un tip de sistem de fișiere."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Tip de sistem de fișiere necunoscut \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Se așteaptă un tip de etichetă de disc."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Nu sunt suportate fanioane"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Nu se mai poate crea nici o partiție."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Se așteaptă un tip de partiție."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "pornit"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "oprit"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optim"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minim"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "OPÈšIUNI:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "COMENZI:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Raportați erorile la %s.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Se utilizează %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Această comandă nu are sens în modul neinteractiv.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr ""
+#~ "Partițiile extinse nu pot fi ascunse pe etichetele discurilor msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Partițiile extinse nu pot fi partiții de recuperare pe etichetele de disc "
+#~ "msdos."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMĂR : afișează informații mai detaliate despre această partiție "
+#~ "particulară\n"
diff --git a/po/ru.gmo b/po/ru.gmo
new file mode 100644
index 0000000..b598429
--- /dev/null
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..793b868
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,3355 @@
+# Translation of parted to Russian
+# Copyright (C) 1999, 2007, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# Dmitry S. Sivachenko <dima@Chg.RU>, 1999.
+# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2007, 2008.
+# Pavel Maryanov <acid@jack.kiev.ua>, 2014.
+# Yuri Kozlov <yuray@komyakino.ru>, 2014, 2018, 2021, 2022.
+# Galina Anikina <merilaga@yandex.ru>, 2018.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-23 07:13+0300\n"
+"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
+"Language-Team: Russian <gnu@d07.ru>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 20.12.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "недопуÑтимый аргумент %s Ð´Ð»Ñ %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначный аргумент %s Ð´Ð»Ñ %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "ДопуÑтимые аргументы:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "ошибка запиÑи"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÑиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: двуÑмыÑленный параметр «%s%s»\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: двуÑмыÑленный параметр «%s%s»; возможные варианты:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: нераÑпознанный параметр «%s%s»\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: у параметра «%s%s» не может быть аргумента\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «%s%s» требуетÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: недопуÑтимый параметр — '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° нужен аргумент — «%c»\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "«"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "»"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "УÑпешно"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ðет ÑоответÑтвиÑ"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ðеправильное регулÑрное выражение"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ðеправильный Ñимвол ÑопоÑтавлениÑ"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ðеправильное название клаÑÑа Ñимвола"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Ð—Ð°Ð²ÐµÑ€ÑˆÐ°ÑŽÑ‰Ð°Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÐºÐ¾ÑÐ°Ñ Ñ‡ÐµÑ€Ñ‚Ð°"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑÑылка"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "ÐÐµÐ¿Ð°Ñ€Ð½Ð°Ñ [, [^, [:, [. или [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Ðет ÑоответÑÑ‚Ð²Ð¸Ñ ( или \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Ðет ÑоответÑÑ‚Ð²Ð¸Ñ \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Ðеправильное Ñодержимое \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ðеправильный конец облаÑти"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "ЗакончилаÑÑŒ памÑÑ‚ÑŒ"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ðеправильное предыдущее регулÑрное выражение"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Ðеожиданный конец регулÑрного выражениÑ"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Слишком большое регулÑрное выражение"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Ðет ÑоответÑÑ‚Ð²Ð¸Ñ ) или \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Ðет предыдущего регулÑрного выражениÑ"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yYдД]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nNнÐ]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Упаковщик: %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Упаковщик: %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ GPLv3+: GNU GPL верÑии 3 или новее <%s>.\n"
+"Это Ñвободное ПО: вы можете изменÑÑ‚ÑŒ и раÑпроÑтранÑÑ‚ÑŒ его.\n"
+"Ðет ÐИКÐКИХ ГÐРÐÐТИЙ в пределах дейÑтвующего законодательÑтва.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Ðвтор программы — %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Ðвторы программы — %s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Ðвторы программы — %s, %s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s\n"
+"и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s, %s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s, %s, %s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Ðвторы программы — %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s и другие.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Об ошибках Ñообщайте по адреÑу: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Об ошибках %s Ñообщайте по адреÑу: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "ДомашнÑÑ Ñтраница %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Справка по работе Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°Ð¼Ð¸ GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "закончилаÑÑŒ памÑÑ‚ÑŒ"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Образ диÑка"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Ðе удалоÑÑŒ открыть %s на чтение-запиÑÑŒ (%s). %s открыт только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð½Ð° %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s во Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð½Ð° %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð·Ð°Ð¿Ð¸Ñать на %s, так как он открыт только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¾Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи на %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿Ð¸Ñи на %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Попробуйте `%s --help' Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "ИÑпользование: %s [ПÐРÐМЕТР] [УСТРОЙСТВО]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Информировать операционную ÑиÑтему о изменении таблицы разделов.\n"
+"\n"
+" -d, --dry-run не информировать операционную ÑиÑтему\n"
+" -s, --summary напечатать Ñводку Ñодержимого\n"
+" -h, --help отобразить Ñправку и выйти\n"
+" -v, --version вывеÑти информацию о верÑии и выйти\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"ЕÑли УСТРОЙСТВО не указано, проверÑÑ‚ÑŒ вÑе разделы.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Сообщайте об ошибках на <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Ðе удалоÑÑŒ открыть %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Ðе удалоÑÑŒ обÑледовать хранилище."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"ПРЕДУПРЕЖДЕÐИЕ: Ñдру не удалоÑÑŒ перечитать таблицу разделов на %s (%s). Из-"
+"за Ñтого до перезагрузки машины могут отображатьÑÑ Ð½Ðµ вÑе изменениÑ."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Предупреждение: не удалоÑÑŒ открыть %s (%s). Из-за Ñтого до перезагрузки "
+"машины могут отображатьÑÑ Ð½Ðµ вÑе изменениÑ."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Предупреждение: не удалоÑÑŒ ÑброÑить транÑлÑтор Ð´Ð»Ñ %s (%s). Из-за Ñтого до "
+"перезагрузки машины могут отображатьÑÑ Ð½Ðµ вÑе изменениÑ."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s пытаетÑÑ Ð·Ð°Ð¿Ð¸Ñать %s на диÑк"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÑтройÑтва %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ тип dm Ð´Ð»Ñ %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Ðе удалоÑÑŒ определить размер Ñектора Ð´Ð»Ñ %s: %s.\n"
+"ИÑпользую Ñтандартный размер Ñектора (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Ðе удалоÑÑŒ определить физичеÑкий размер Ñектора Ð´Ð»Ñ %s.\n"
+"Будет иÑпользоватьÑÑ Ñтандартный размер Ñектора (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ размер %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Обычный IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ идентификатор уÑтройÑтва %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"УÑтройÑтво %s Ñодержит неÑколько (%d) логичеÑких Ñекторов на один "
+"физичеÑкий.\n"
+"GNU Parted поддерживает Ñто ЭКСПЕРИМЕÐТÐЛЬÐО Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñпециальных "
+"комбинаций меток/файловых ÑиÑтем, например GPT и ext2/3.\n"
+"За дополнительной информацией обращайтеÑÑŒ на Ñайт программы."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Ошибка инициализации SCSI-уÑтройÑтва %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"УÑтройÑтво %s Ñлишком мало и поÑтому не может Ñодержать файловую ÑиÑтему или "
+"таблицу разделов. Возможно вы выбрали неправильное уÑтройÑтво?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ геометрию файла/уÑтройÑтва %s. Ð’Ñ‹ не должны "
+"иÑпользовать Parted, еÑли вы не знаете ÐÐВЕРÐЯКÐ, что делаете!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "УниверÑÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° памÑти SD/MMC"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "УÑтройÑтво NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID контроллер"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "SATA уÑтройÑтво Promise SX8"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "УÑтройÑтво ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD привод"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "УÑтройÑтво NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID Контроллер"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O Контроллер"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "УÑтройÑтво типа loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Виртуальное блочное уÑтройÑтво Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "ÐеизвеÑтный"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Блочное уÑтройÑтво Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Программный RAID-маÑÑив Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM-диÑк"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Ðе поддерживаемый тип уÑтройÑтва"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Ошибка Ñинхронизации или Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sконец файла при чтении %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Ðе удалоÑÑŒ Ñообщить Ñдру об изменениÑÑ… раздела %s: %s. Ð’ Ñтом Ñлучае Linux "
+"не узнает об изменениÑÑ… %s до перезагрузки, поÑтому не пытайтеÑÑŒ "
+"примонтировать или каким либо образом иÑпользовать его до перезагрузки."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ начало и длину %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Был запиÑан раздел(Ñ‹) %s на %s, но об Ñтом изменении не удалоÑÑŒ "
+"проинформировать Ñдро, вероÑтно, из-за занÑтоÑти раздела. Ð’ результате "
+"Ñтарый раздел вÑÑ‘ ещё иÑпользуетÑÑ. Чтобы выполнить дальнейшие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð°Ð¼ "
+"нужно перезагрузить ÑиÑтему."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Ðевозможно перемеÑтить конец раздела за начало! (начальный Ñектор =%jd "
+"длина=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Попытка запиÑи Ñекторов %ld-%ld за пределы раздела на %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "проверка на плохие блоки"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace имеет %d вызовов из Ñтека:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Проверка уÑÐ»Ð¾Ð²Ð¸Ñ (%s) на %s:%d в функции %s() не удалаÑÑŒ."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: метка диÑка не определена"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Эта библиотеке libparted не Ñодержит поддержки запиÑи Ð´Ð»Ñ %s. Ðаверное "
+"Ñкомпилирована только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Раздел %d Ñодержит %s, но Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "ÐеизвеÑтный флаг диÑка, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "ПодпиÑи к диÑкам %s не поддерживают раÑширенные разделы."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"ПодпиÑи к диÑкам %s не поддерживают логичеÑкие или раÑширенные разделы."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Слишком много оÑновных разделов."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Ðевозможно добавить логичеÑкий раздел на %s, потому что нет раÑширенного "
+"раздела."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Ðевозможно Ñоздать больше одного раÑширенного раздела на %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Ðевозможно Ñоздать логичеÑкий раздел больше раÑширенного раздела."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Ðевозможно Ñоздать логичеÑкий раздел больше раÑширенного раздела на %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Ðевозможно Ñоздать оÑновной раздел внутри раÑширенного."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Ðевозможно Ñоздать раздел за пределами уÑтройÑтва!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Ðевозможно Ñоздавать переÑекающиеÑÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ñ‹."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "метаданные"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "Ñвободно"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "раÑширенный"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "логичеÑкий"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "оÑновной"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "загрузочный"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "корневой"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "подкачка"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "Ñкрытый"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "ÐеизвеÑтный флаг раздела, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "ИнформациÑ"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Ошибка"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Ð¤Ð°Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Ошибка"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Ðет реализации"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "ИÑправить"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Да"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Ðет"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Повторить"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Игнорировать"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Отменить"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Ð’ GNU parted была обнаружена ошибка. ОбратитеÑÑŒ за информацией на Ñайт "
+"parted http://www.gnu.org/software/parted/parted.html за дополнительной "
+"информацией отноÑительно отправки Ñообщение об ошибке! Пошлите по адреÑу %s "
+"Ñообщение об ошибке, Ñодержащее Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ верÑию (%s) и Ñледующую информацию:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Поддержка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ðº диÑка AIX пока не реализована."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Поддержка запиÑи меток диÑка AIX пока не реализована."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "Поддержка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² к меткам диÑка AIX пока не реализована."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Поддержка Ð´ÑƒÐ±Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð² в метках диÑка AIX пока не реализована."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Поддержка Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° ÑиÑтемы на метках диÑка AIX пока не реализована."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "Поддержка запиÑи флагов на метках диÑка AIX пока не реализована."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Ðевозможно иÑпользовать таблицы разделов Atari на диÑках Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ Ñектора "
+"не равным %d байт."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Ðевозможно иÑпользовать таблицы разделов Atari на диÑках Ñ Ð±Ð¾Ð»ÐµÐµ чем %d "
+"Ñекторами."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Ðайдено Ñлишком много разделов Atari. Возможно зацикливание в ÑвÑзном ÑпиÑке "
+"XGM. Прекращение работы."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Ðет раздела данных в ARS в Ñекторе %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Тип Ñлемента Ñледующего логичеÑкого ARS не равен XGM в ARS в Ñекторе %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr "Ðа Ñтом диÑке (%s) таблица разделов не похожа на Atari или повреждена."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "Ðет меÑта в Ñекторе %lli Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ARS логичеÑкого раздела %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Ðет меÑта в Ñекторе %lli Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Счётчик Ñекторов из таблицы разделов не ÑоответÑтвует размеру уÑтройÑтва. "
+"ИÑправить таблицу разделов?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Ðет меÑта в Ñекторе %lli Ð´Ð»Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "ПоÑле Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ таблицы AHDI оÑталиÑÑŒ ещё разделы."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° AHDI заполнена вÑеми разделами, но таблица ICD не пуÑта, "
+"поÑтому ÑовмеÑтимое Ñ ICD ПО будет находить дополнительные разделы "
+"неизвеÑтного размера и раÑположениÑ. Ðннулировать таблицу ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Элементы ICD не могут Ñодержать раÑширенные или логичеÑкие разделы."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "ПоÑле Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ† оÑталиÑÑŒ разделы."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Ð’Ñ‹ не можете иÑпользовать раÑширенный раздел XGM в режиме ICD (больше %d "
+"первичных разделов, еÑли XGM Ñтоит первым, то ÑчитаетÑÑ Ð·Ð° два)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Ðе удалоÑÑŒ удовлетворить вÑе Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Ð’Ñ‹ не можете иÑпользовать более %d первичных разделов (режим ICD), еÑли "
+"иÑпользуете раÑширенный раздел XGM. ЕÑли XGM Ñтоит первым, то ÑчитаетÑÑ Ð·Ð° "
+"два."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Ðе удалоÑÑŒ назначить номер раздела."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Ðе удалоÑÑŒ назначить Ñлот подпиÑи к диÑку bsd."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Таблицу разделов уÑтройÑтва DASD-LDL Ð½ÐµÐ»ÑŒÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Ðе удалоÑÑŒ назначить Ñлот подпиÑи к диÑку dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° разделов на %s: неправильный идентификатор %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° разделов - рекурÑивный раздел на %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted не может изменÑÑ‚ÑŒ размер разделов управлÑемых Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "не удаётÑÑ Ñоздать дополнительные разделы"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s не Ñодержит раÑширенного раздела (заголовка раÑширенного раздела)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма, значит таблица разделов иÑпорчена."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Только оÑновные разделы могут быть root разделами."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Только оÑновные разделы могут быть swap разделами."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Только логичеÑкие разделы могут быть загрузочными файлами."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"ошибка при задании имени %s Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð° dvh:\n"
+"Только логичеÑкие разделы (загрузочные файлы) могут иметь имÑ."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Слишком много оÑновных разделов"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "ошибка открытиÑ"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "ошибка при поиÑке дорожки"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "ошибка чтениÑ"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ошибка ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "ÐеÑоответÑтвие верÑий API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Ðе поддерживаемый тип диÑка"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Ðе поддерживаемый формат диÑка"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ДиÑк иÑпользуетÑÑ"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Ошибка ÑинтакÑиÑа конфигурационного файла"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Метка тома повреждена"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ð˜Ð¼Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° данных повреждено"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Ошибка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼Ñти"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Ошибка проверки уÑтройÑтва"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Указанное уÑтройÑтво не ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼ DASD уÑтройÑтвом"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "Ðа уÑтройÑтве не найден VOLSER"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ðет меÑта Ð´Ð»Ñ Ð¼ÐµÑ‚ÐºÐ¸ тома."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Ðет меÑта Ð´Ð»Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о разделе."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ðеправильный VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Ðе удалоÑÑŒ получить верÑию API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ API '%d' не ÑоответÑтвует верÑии API dasd драйвера '%d'!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Ðе удалоÑÑŒ получить размер диÑка."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Ðе удалоÑÑŒ получить информацию о геометрии диÑка."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Ðе удалоÑÑŒ получить информацию о размере блока."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð´Ð¸Ñка не ÑоответÑтвует уÑтройÑтву DASD Ñ Ñ‚Ð¸Ð¿Ð¾Ð¼ 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "уÑтройÑтво Ñлишком маленькое Ð´Ð»Ñ GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Формат таблицы разделов GPT верÑии %x новее, чем Parted может раÑпознать. "
+"Сообщите об Ñтом!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Похоже, что не вÑÑ‘ меÑто доÑтупное Ð´Ð»Ñ %s иÑпользуетÑÑ, вы можете иÑправить "
+"таблицу GPT Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñего меÑта (дополнительно %llu блоков) или "
+"продолжить Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼Ð¸ наÑтройками? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GPT находитÑÑ Ð½Ðµ в конце диÑка, как должно быть. "
+"ИÑправить Ñто, передвинув резервную копию в конец диÑка (и удалив Ñтарую)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Обе — и главнаÑ, и Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ GPT — повреждены. Попробуйте Ñоздать "
+"новую и иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Parted Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¾Ð²."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Ð ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° GPT повреждена, но Ð³Ð»Ð°Ð²Ð½Ð°Ñ ÐºÐ°Ð¶ÐµÑ‚ÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹, поÑтому она "
+"и будет иÑпользоватьÑÑ."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° GPT повреждена, но Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ ÐºÐ°Ð¶ÐµÑ‚ÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹, "
+"поÑтому она и будет иÑпользоватьÑÑ."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "ошибка CRC маÑÑива таблицы оÑновных разделов"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "ошибка при транÑлÑции имени раздела"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ðеправильный идентификатор %x Ð´Ð»Ñ Ð´Ð¸Ñковых меток Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Карта разделов не Ñодержит запиÑи карты раздела!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s Ñлишком меленький Ð´Ð»Ñ Ð¼ÐµÑ‚ÐºÐ¸ диÑка Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Раздел %d Ñодержит неправильный идентификатор %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Раздел %d имеет неправильную длину 0 байт!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "ОблаÑÑ‚ÑŒ данных не начинаетÑÑ Ð² начале раздела."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ÑŒ загрузки раздела занимает не целый раздел."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ÑŒ данных раздела занимает не целый раздел."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "Ðеправильный размер блока на уÑтройÑтве: %d байт не делитÑÑ Ð½Ð° 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Драйвер говорит,что размер физичеÑкого блока равен %d байт, но Linux "
+"говорит, что он %d байт."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Ðе найдено правильной карты разделов."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Конфликт размеров запиÑей карты разделов! Ð’ запиÑи 1 указан %d, но в %d "
+"указано %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "УжаÑ! СущеÑтвует 2 запиÑи таблицы разделов!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Изменение имени корневого раздела или раздела подкачки ÑоздаÑÑ‚ проблемы Ñ Ð¸Ñ… "
+"раÑпознаванием в Linux."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Ðе удалоÑÑŒ Ñоздать другой раздел -- Ñлишком Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ ÐºÐ°Ñ€Ñ‚Ð° разделов!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° разделов на %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "Раздел %d не выровнен к краю цилиндра. Это вÑÑ‘ ещё не поддерживаетÑÑ."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Ðевозможно добавить другой раздел."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"длина раздела в %jd Ñекторов превышает макÑимальное значение, налагаемое "
+"типом таблицы разделов %s (%jd)"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"номер начального Ñектора %jd превышает макÑимальный, налагаемый типом "
+"таблицы разделов %s (%jd)"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма %llu типа %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Ðе найден rdb блок, такого не должно было ÑлучитьÑÑ."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Обнаружена закольцовка на блоке %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : ВероÑтно, некорректный ÑпиÑок %s на блоке %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Ðе удалоÑÑŒ вывеÑти ÑпиÑок плохих блоков."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Ðе удалоÑÑŒ вывеÑти ÑпиÑок блоков раздела."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Ðе удалоÑÑŒ вывеÑти ÑпиÑок блоков файловой ÑиÑтемы."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Ðе удалоÑÑŒ вывеÑти ÑпиÑок загрузочных блоков."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Ðе удалоÑÑŒ запиÑать блок раздела на %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Обнаружена Ð¿Ð¾Ð²Ñ€ÐµÐ¶Ð´Ñ‘Ð½Ð½Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° диÑка Sun."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ð´Ð¸Ñка (%d,%d,%d) предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¾Ð¹ ÑиÑтемой не "
+"Ñовпадает Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸ÐµÐ¹, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑодержитÑÑ Ð² метке диÑка (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Метка диÑка указывает на диÑк больший чем %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "ДиÑк Ñодержит %d цилиндров, что больше макÑимума 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Раздел ВеÑÑŒ диÑк доÑтупен только Ñлева. Вообще-то - Ñто Ð¿Ð»Ð¾Ñ…Ð°Ñ Ð¸Ð´ÐµÑ "
+"перепиÑывать Ñтот раздел реальным. Solaris, возможно, может не загрузитьÑÑ "
+"без него и SILO (загрузчик sparc) оценивает Ñто также."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Метка диÑка Sun переполнена."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "не удалоÑÑŒ открыть уÑтройÑтво"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "не удалоÑÑŒ перемеÑтитьÑÑ Ð¿Ð¾ уÑтройÑтву"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "не удалоÑÑŒ запиÑать на уÑтройÑтво"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "не удалоÑÑŒ прочеÑÑ‚ÑŒ Ñ ÑƒÑтройÑтва"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ метку тома."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Ðе удалоÑÑŒ запиÑать метку тома."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ VTOC метки."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC метки."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Ðе удалоÑÑŒ запиÑать VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "ÐедоÑтаточно памÑти."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ размер Ñпециальной единицы Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" Ñодержит неправильный ÑинтакÑÐ¸Ñ Ñ€Ð°Ñположений."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "МакÑимальное количеÑтво головок %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "МакÑимальное количеÑтво Ñекторов %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "РаÑположение %s вне уÑтройÑтва %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ðеправильный номер."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "ИÑпользуйте меньшую единицу Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ñ Ð²Ð¼ÐµÑто значений < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Ðе удалоÑÑŒ выделить блок раздела\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Ðе удалоÑÑŒ выделить блок\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ загрузочный блок %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ корневой блок %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Ðе удалоÑÑŒ выделить Ñлемент ÑпиÑка идентификаторов\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ блок %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма блока %llu типа %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Ðе удалоÑÑŒ запиÑать блок %d.\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Ðе удалоÑÑŒ выделить Ñпецифичный_длÑ_диÑка блок rdb\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Ðе найден rdb блок, такого не должно было ÑлучитьÑÑ\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Ðе удалоÑÑŒ прочеÑÑ‚ÑŒ блок раздела %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted был неправильно Ñкомпилирован: загрузочный Ñектор FAT должен "
+"занимать 512 байт. Поддержка FAT будет отключена."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет неверный идентификатор Ð´Ð»Ñ FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет неверный Ð´Ð»Ñ FAT размер Ñектора."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет неверный Ð´Ð»Ñ FAT размер клаÑтера."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет неверное Ð´Ð»Ñ FAT чиÑло зарезервированных Ñекторов."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет неверное количеÑтво FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы (%d, %d, %d) некорректна. CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ "
+"таблицы разделов — (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Загрузочный Ñектор FAT Ñодержит размер логичеÑкого Ñектора, равный 0. Это "
+"Ñтранно. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Ð’ загрузочном Ñекторе FAT не ÑодержитÑÑ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о таблицах FAT. Это "
+"Ñтранно. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"Ð’ ÑоответÑтвии Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¾Ñ‡Ð½Ñ‹Ð¼ Ñектором FAT, клаÑтер Ñодержит 0 Ñекторов. Это "
+"Ñтранно. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема FAT12, не поддерживаетÑÑ."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "ÐераÑпознанный идентификатор подкачки linux «%10s» в Ñтаром формате."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "ÐераÑпознанный идентификатор подкачки linux «%10s» в новом формате."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "ÐераÑпознанный идентификатор подкачки swsusp linux «%9s»."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted не может работать Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ñ‹Ð¼Ð¸ ÑиÑтемами HFS, на диÑках Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ "
+"Ñектора не равным %d байт."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы (%d, %d, %d), что не ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼. "
+"CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹ раздела (%d, %d, %d). ЕÑли вы выберете Игнорировать, "
+"CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы оÑтанетÑÑ Ð±ÐµÐ· изменений. ЕÑли вы выберете "
+"ИÑправить, CHS Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы будет изменена Ð´Ð»Ñ ÑоглаÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñ "
+"CHS геометрией таблицы раздела."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Информационный Ñектор Ñодержит некорректный идентификатор (%x). Выберите "
+"отмену, и пошлите Ñообщение об ошибке. ЕÑли вы доведены до отчаÑньÑ, то "
+"вероÑтно разумнее будет проигнорировать."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Вам требуетÑÑ %s Ñвободного проÑтранÑтва, чтобы уменьшить данный раздел до "
+"такого размера. Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñвободно только %s."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"КлаÑтер начинаетÑÑ Ñо Ñмещением %d, что не ÑвлÑетÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом клаÑтеров "
+"размера %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Плохой Ñлемент каталога Ð´Ð»Ñ %s: первый клаÑтер ÑвлÑетÑÑ ÐºÐ¾Ð½Ñ†Ð¾Ð¼ маркера файла."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Ошибка в FAT: Ð½ÐµÐ·Ð°Ð²ÐµÑ€ÑˆÑ‘Ð½Ð½Ð°Ñ Ñ†ÐµÐ¿Ð¾Ñ‡ÐºÐ° Ð´Ð»Ñ %s. Ð’Ñ‹ должны запуÑтить dosfsck или "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Ошибка в FAT: клаÑтер %d находитÑÑ Ð²Ð½Ðµ файловой ÑиÑтемы в цепочке Ð´Ð»Ñ %s. "
+"Ð’Ñ‹ должны запуÑтить dosfsck или scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Ошибка в FAT: клаÑтер %d имеет ÑÑылку на %s. Ð’Ñ‹ должны запуÑтить dosfsck "
+"или scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s ÑвлÑетÑÑ %dk, но он Ñодержит %d клаÑтеров (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Раздел Ñлишком большой/маленький Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Таблицы Ñ€Ð°Ð·Ð¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² FAT не Ñовпадают. ЕÑли вы не знаете, что Ñто "
+"означает, выберите отмену, запуÑтите scandisk Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемы, и затем "
+"возвращайтеÑÑŒ."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Ð”Ð»Ñ Ñтого типа FAT допуÑтимых конфигураций нет."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Windows не может работать Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ð¹ ÑиÑтемой, имеющей такие размеры. "
+"Размер клаÑтера %dk (ожидаемый %dk); чиÑло клаÑтеров %d (ожидаемое %d); "
+"размер FAT %d Ñекторов (ожидаемый %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема Ñообщает о Ñвободном проÑтранÑтве в %d клаÑтеров, а не в %d "
+"клаÑтеров."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Ð”Ð»Ñ Ð²Ñех файлов не хватает меÑта в корневом каталоге. Либо отмените, либо "
+"игнорируйте и потерÑете файлы."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Ошибка запиÑи в корневой каталог."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "ЕÑли вы оÑтавите файловую ÑиÑтему как FAT16, проблем не будет."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"ЕÑли вы конвертируете в FAT16, и на Ñтом разделе уÑтановлена MS Windows, то "
+"нужно будет переуÑтановить загрузчик MS Windows. ЕÑли вы хотите Ñто Ñделать, "
+"обратитеÑÑŒ к руководÑтву Parted (или руководÑтву вашего диÑтрибутива)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"ЕÑли вы оÑтавите файловую ÑиÑтему как FAT32, то никаких новых проблем не "
+"возникнет."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"ЕÑли вы конвертируете в FAT32, и на Ñтом разделе уÑтановлена MS Windows, то "
+"нужно будет переуÑтановить загрузчик MS Windows. ЕÑли вы хотите Ñто Ñделать, "
+"обратитеÑÑŒ к руководÑтву Parted (или руководÑтву вашего диÑтрибутива). "
+"Также, преобразование в FAT32 Ñделает файловую ÑиÑтему нечитаемой из MS DOS, "
+"MS Windows 95a и MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Ð’Ñ‹ хотите иÑпользовать FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Изменение размера файловой ÑиÑтемы до Ñтого размера возможно только поÑле "
+"Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÑ‘ в FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Изменение размера файловой ÑиÑтемы до Ñтого размера возможно только поÑле "
+"Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÑ‘ в FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted не может изменить размер раздела до Ñтой величины. Мы работаем "
+"над Ñтим!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d ноÑитель %x не Ñовпадает Ñ Ð½Ð¾Ñителем загрузочного Ñектора %x. "
+"Возможно, вам Ñледует запуÑтить scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: клаÑтер %ld находитÑÑ Ð²Ð½Ðµ файловой ÑиÑтемы"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: клаÑтер %ld находитÑÑ Ð²Ð½Ðµ файловой ÑиÑтемы"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: нет Ñвободных клаÑтеров"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Ðе удаётÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ файловую ÑиÑтему."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "изменение размера файловой ÑиÑтемы %s не реализовано"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема больше раздела, на котором раÑположена!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема Ñодержит ошибки."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Плохие блоки не могут быть прочитаны."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"При попытке зарегиÑтрировать extent, начинающийÑÑ Ñ Ð±Ð»Ð¾ÐºÐ° 0x%X, обнаружен "
+"другой блок в Ñтой позиции. Проверьте файловую ÑиÑтему на ошибки!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"При попытке перемеÑтить extent из блока 0x%X в блок 0x%X, обнаружен другой "
+"блок в Ñтой позиции. Этого не должно было ÑлучитьÑÑ!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Ðе удалоÑÑŒ обновить кÑш extent Ð´Ð»Ñ HFS файла Ñ CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "ВыполнÑетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ HFS файла Ñ CNID %X за EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Ðе удалоÑÑŒ найти Ñектор %lli Ð´Ð»Ñ HFS файла Ñ CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "ВыполнÑетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° запиÑи HFS файла Ñ CNID %X за EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Ðе удалоÑÑŒ обновить кÑш extent Ð´Ð»Ñ HFS+ файла Ñ CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "ВыполнÑетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° Ñ‡Ñ‚ÐµÐ½Ð¸Ñ HFS+ файла Ñ CNID %X за EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Ðе удалоÑÑŒ найти Ñектор %lli Ð´Ð»Ñ HFS+ файла Ñ CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "ВыполнÑетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° запиÑи HFS+ файла Ñ CNID %X за EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+"Извините, но в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ HFS не может быть изменён таким "
+"образом."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "уменьшение"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Ошибка перераÑÐ¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"При перераÑпределении данных некоторые данные оÑталиÑÑŒ в конце раздела."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "запиÑÑŒ HFS Master Directory Block (главный блок каталога)"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "При открытии не найден правильный идентификатор HFS[+X]."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема HFS+ верÑии %d не поддерживаетÑÑ."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема HFSX верÑии %d не поддерживаетÑÑ."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"При перераÑпределении данных некоторые данные оÑталиÑÑŒ у конца раздела."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Ошибка запиÑи в выделенный файл."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Ошибка запиÑи ÑовмеÑтимой чаÑти в выделенный файл."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "запиÑÑŒ HFS+ Volume Header (заголовок раздела)"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Ошибка при поиÑке обÑзательного файла плохих блоков."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Похоже, ошибка в оболочке HFS: файл плохих блоков не Ñодержит вÑтроенный "
+"HFS+ раздел."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+"Извините, но в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€ HFS+ не может быть изменён таким "
+"образом."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "выполнÑетÑÑ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ðµ размера вÑтроенного HFS+ раздела"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Ошибка при изменении размера раздела HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "выполнÑетÑÑ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ðµ размера оболочки HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Ошибка при обновлении оболочки HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Это не наÑтоÑÑ‰Ð°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° %s. Это делаетÑÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñпециальных "
+"низкоуровневых файлов Ð´Ð»Ñ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¸."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма заголовка ÑпиÑка блоков."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ðеправильный размер блока транзакций при проигрывании журнала (%i байт)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Хранение журнала вне тома не поддерживаетÑÑ. Попробуйте отключить журнал и "
+"запуÑтить Parted Ñнова."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Смещение журнала или его размер не кратен размеру Ñектора."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Ðеправильное значение идентификатора в заголовке журнала."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"ÐеÑовпадение размера журнала в блоке информации журнала и заголовке журнала."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Ðекоторые Ð¿Ð¾Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° не кратны размеру Ñектора."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Размер хранÑщихÑÑ Ð² журнале Ñекторов не равен 512 байтам. Parted может "
+"работать только Ñ Ñекторами размером 512 байт."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»ÑŒÐ½Ð°Ñ Ñумма журнала."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Журнал не пуÑÑ‚. Parted должен повторить транзакции перед открытием файловой "
+"ÑиÑтемы. Это изменит файловую ÑиÑтему."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Заголовок раздела или блок главного каталога был изменён при проигрывании "
+"журнала. ПерезапуÑтите Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "extent не был перемещён."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"СÑылка на extent указывает на меÑто, где его быть не должно. Проверьте "
+"файловую ÑиÑтему!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Этот раздел HFS не Ñодержит файла каталога. Очень необычно!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Этот раздел HFS не Ñодержит файла размеров перегрузки. ДоÑтаточно необычно!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Файл размеров перегрузки не должен Ñодержать Ñвои размеры! Проверьте "
+"файловую ÑиÑтему."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Ðе удалоÑÑŒ кÑшировать файловую ÑиÑтему в памÑти."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Ðе удалоÑÑŒ загрузить ÑпиÑок плохих блоков."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Возникла ошибка при перемещении extent."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Этот раздел HFS+ не Ñодержит файла каталога. Очень необычно!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Этот раздел HFS+ не Ñодержит файла размеров перегрузки. ДоÑтаточно необычно!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "отображает Ñто Ñправочное Ñообщение"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "выводит раÑкладку разделов вÑех блочных уÑтройÑтв"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "отображает вывод Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ компьютером"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "отображает вывод JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "никогда не запрашивает вмешательÑтво пользователÑ"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "режиме ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð°ÑˆÐ¸Ð²Ð°ÐµÑ‚ÑÑ Ð¸Ñправление, а не прерывание работы"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "отображает верÑию"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "выравнивание новых разделов"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"ÐОМЕР — Ñто номер раздела, иÑпользуемый в Linux. Ð’ ÑиÑтеме MS-DOS диÑки "
+"помечаютÑÑ Ñ‚Ð°Ðº: номерами первичных разделов могут быть Ñ 1 по 4, Ñ 5 и далее "
+"Ñледуют номера логичеÑких разделов.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "ТИП_МЕТКИ один из: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "ФЛÐГ один из: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ЕДИÐИЦРодна из: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "предпочитаемое выравнивание: минимальное или оптимальное"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "ТИП_РÐЗД один из: оÑновной, логичеÑкий, раÑширенный\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "ТИП_ФС один из: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ÐÐЧÐЛО и КОÐЕЦ — Ñто меÑтоположение на диÑке, например 4GB или 10%. "
+"Отрицательные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑчитываютÑÑ Ð¾Ñ‚ конца диÑка. Ðапример, -1s "
+"обозначает поÑледний Ñектор.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"КОÐЕЦ — Ñто меÑтоположение на диÑке, например 4GB или 10%. Отрицательные "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÑчитываютÑÑ Ð¾Ñ‚ конца диÑка. Ðапример, -1s обозначает поÑледний "
+"Ñектор.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "СОСТОЯÐИЕ одно из двух: on, off (активно, неактивно)\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "УСТРОЙСТВОМ обычно ÑвлÑетÑÑ /dev/hda или /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "ИМЯ — любое Ñлово, какое захотите\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Это ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð°, на неё раÑпроÑтранÑетÑÑ Ð£Ð½Ð¸Ð²ÐµÑ€ÑÐ°Ð»ÑŒÐ½Ð°Ñ ÐžÐ±Ñ‰ÐµÑтвеннаÑ\n"
+"Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ GNU.\n"
+"\n"
+"Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезной, но БЕЗ\n"
+"КÐКИХ-ЛИБО ГÐРÐÐТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕÐÐОСТИ "
+"или ПРИГОДÐОСТИ ДЛЯ КОÐКРЕТÐОЙ ЦЕЛИ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной "
+"информации Ñмотрите УниверÑальную ОбщеÑтвенную Лицензию GNU.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(времени прошло %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Раздел %s иÑпользуетÑÑ. Ð’Ñ‹ уверены что хотите продолжить?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Разделы на %s иÑпользуютÑÑ."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"СущеÑÑ‚Ð²ÑƒÑŽÑ‰Ð°Ñ Ð¼ÐµÑ‚ÐºÐ° диÑка на %s будет уничтожена и вÑе данные на Ñтом диÑке "
+"будут потерÑны. ДейÑтвительно продолжить?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Ðовый тип метки диÑка?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Тип раздела?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Ð˜Ð¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Тип файловой ÑиÑтемы?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Ðачало?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Конец?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Ð’Ñ‹ запроÑили раздел от %s до %s (Ñектора %llu..%llu).\n"
+"Ближайшие точки, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ мы можем работать, от %s до %s (Ñектора %llu.."
+"%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Это Ð²Ð°Ñ ÑƒÑтраивает?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Полученный раздел не выровнен Ð´Ð»Ñ Ð¾Ð±ÐµÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ Ð»ÑƒÑ‡ÑˆÐµÐ¹ производительноÑти: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "неизвеÑтно (ошибка malloc)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Метки диÑков %s не поддерживают Ð¸Ð¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Ðомер раздела?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Метки диÑков %s не поддерживают Ð¸Ð¼Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð°."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Тип раздела?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ðеправильный номер."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Тип раздела?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ðеправильный номер."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ Ñ†Ð¸Ð»Ð¸Ð½Ð´Ñ€Ð¾Ð², головок, Ñекторов BIOS: %d,%d,%d. Каждый цилиндр %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Модель: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ДиÑк %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Размер Ñектора (логич./физич.): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Таблица разделов: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Флаги диÑка: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Ðомер"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Ðачало"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Конец"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Размер"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Тип"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Ð¤Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "ИмÑ"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Флаги"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Свободное меÑто"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr "Раздел %s %s найден на %s -> %s. Добавить его в таблицу разделов?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "поиÑк файловых ÑиÑтем"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Команда resize была удалена в parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Уменьшение раздела может привеÑти к потере данных, вы дейÑтвительно хотите "
+"продолжить?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ðовое уÑтройÑтво?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "тип Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d выровнен\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d не выровнен: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Флаг Ð´Ð»Ñ Ð¸Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ð¸?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Ðовое ÑоÑтоÑние?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Единица?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check ТИП N проверить, что раздел N выровнен ÑоглаÑно "
+"ТИПУ(min|opt)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [КОМÐÐДÐ] раÑпечатать общую Ñправку или Ñправку по "
+"КОМÐÐДЕ"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ТИП_МЕТКИ Ñоздать новую метку диÑка (таблицу раздела)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart ТИП_РÐЗД [ТИП_ФС] ÐÐЧ КОРÑоздать раздел"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart делает раздел без ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð° нём новой файловой ÑиÑтемы. ТИП_ФС "
+"должен быть указан Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи идентификатора раздела\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name ÐОМЕР ИМЯ назначить ИМЯ разделу Ñ ÐОМЕРом"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] отобразить таблицу разделов, "
+"доÑтупные уÑтройÑтва, Ñвободное меÑто или вÑе найденные разделы"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Без параметров, «print» отображает вÑÑŽ таблицу разделов. Ðо Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ "
+"могут выполнÑÑ‚ÑŒÑÑ Ð¸ некоторые другие дейÑтвиÑ.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : отобразить вÑе активные блочные уÑтройÑтва\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : отображает информацию о Ñвободном, не разбитом проÑтранÑтве на "
+"текущем блочном уÑтройÑтве\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : отображает таблицы разделов на вÑех активных блочных "
+"уÑтройÑтвах\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit выйти из программы"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "resize"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ÐÐЧÐЛО КОÐЕЦ воÑÑтановить потерÑнный раздел в промежутке "
+"от ÐÐЧÐЛРдо КОÐЦÐ"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Команда resize была удалена в parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart ÐОМЕР КОÐЕЦ изменить размер раздела ÐОМЕР"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm ÐОМЕР удалить раздел ÐОМЕР"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select УСТРОЙСТВО выбор уÑтройÑтва Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_set ФЛÐГ СОСТОЯÐИЕ изменить ФЛÐГ на выбранном уÑтройÑтве"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [ФЛÐГ] переключить ÑоÑтоÑние ФЛÐГРна выбранном "
+"уÑтройÑтве"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set ÐОМЕР ФЛÐГ СОСТОЯÐИЕ изменить ФЛÐГ на разделе ÐОМЕР"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [ÐОМЕР [ФЛÐГ]] переключить ÑоÑтоÑние ФЛÐГРна разделе ÐОМЕР"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit ЕДИÐИЦРиÑпользовать Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÑ€ÐµÐ½Ð¸Ð¹ данную ЕДИÐИЦУ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version отображает текущую верÑию GNU "
+"Parted и информацию о лицензии"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"version отображает информацию о лицензии и верÑии Ñтой копии GNU Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"ИÑпользование: %s [-hlmsfv] [-a<align>] [УСТРОЙСТВО [КОМÐÐДР[ПÐРÐМЕТРЫ]]…]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "УÑтройÑтво не найдено"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "Ð’ÐИМÐÐИЕ: у Ð²Ð°Ñ Ð½ÐµÑ‚ прав админиÑтратора. Могут возникнуть проблемы.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Ðужно переуÑтановить загрузчик перед перезагрузкой. Прочтите раздел 4 "
+"РуководÑтва Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Parted Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Ðе забудьте обновить /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Добро пожаловать в GNU Parted! Ðаберите 'help' Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра ÑпиÑка команд.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"ИÑпользование: parted [КЛЮЧ]... [УСТРОЙСТВО [КОМÐÐДР[ПÐРÐМЕТРЫ]...]...]\n"
+"ПрименÑет КОМÐÐДУ Ñ ÐŸÐРÐМЕТРÐМИ к УСТРОЙСТВУ. ЕÑли ни одной КОМÐÐДЫ не "
+"задано,\n"
+"программа работает в интерактивном режиме.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Вы нашли ошибку в GNU Parted! Вот, что нужно делать:\n"
+"\n"
+"Ðе паникуйте! Эта ошибка Ñкорее вÑего не повлиÑет на ваши данные.\n"
+"Помогите нам иÑправить Ñту ошибку Ð´ÐµÐ»Ð°Ñ Ð²Ð¾Ñ‚ что:\n"
+"\n"
+"Проверьте, не иÑправлена ли уже ошибка, загрузив\n"
+"поÑледнюю верÑию GNU Parted, которую вы\n"
+"можете найти на:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"ПожалуйÑта, проверьте новую верÑию, перед Ñообщением об ошибке.\n"
+"\n"
+"ЕÑли ошибка ещё не иÑправлена или вы не знаете как\n"
+"Ñто проверить поÑетите Ñайт GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"за дополнительной информацией.\n"
+"\n"
+"Ваше Ñообщение должно Ñодержать номер верÑии (%s),\n"
+"а также Ñообщение об ошибке ниже и вывод команд\n"
+"\n"
+"\tparted УСТРОЙСТВО unit co print unit s print\n"
+"\n"
+"и команды, вводимые вами ранее, до Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¸.\n"
+"Ртакже любую дополнительную информацию о вашей конфигурации,\n"
+"еÑли вы поÑчитаете Ñто важным.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Ошибка: SEGV_MAPERR (Ð°Ð´Ñ€ÐµÑ Ð½Ðµ назначен объекту)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Ошибка: SEGV_ACCERR (недопуÑтимые права Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ объекта)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Ошибка: получен обычный Ñигнал SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Ошибка: FPE_INTDIV (Integer: деление на ноль)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Ошибка: FPE_INTOVF (Integer: переполнение)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTDIV (Float: деление на ноль)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTOVF (Float: переполнение)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTUND (Float: Ð¿Ð¾Ñ‚ÐµÑ€Ñ Ð·Ð½Ð°Ñ‡Ð¸Ð¼Ð¾Ñти)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTRES (Float: неточный ответ)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTINV (Float: Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Ошибка: FPE_FLTSUB (Float: выражение вне облаÑти)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Ошибка: получен обычный Ñигнал SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Ошибка: ILL_ILLOPC (неправильный Opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Ошибка: ILL_ILLOPN (неправильный операнд)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Ошибка: ILL_ILLADR (неправильный режим адреÑации)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Ошибка: ILL_ILLTRP (Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð»Ð¾Ð²ÑƒÑˆÐºÐ°)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Ошибка: ILL_PRVOPC (привилегированный Opcode)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Ошибка: ILL_PRVREG (привилегированный региÑÑ‚Ñ€)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Ошибка: ILL_COPROC (ошибка ÑопроцеÑÑора)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Ошибка: ILL_BADSTK (ошибка внутреннего Ñтека)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Ошибка: получен обычный Ñигнал SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "недопуÑтимый ключ: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "ОжидаетÑÑ Ð½Ð¾Ð¼ÐµÑ€ раздела."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Раздел не ÑущеÑтвует."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "ОжидаетÑÑ Ñ‚Ð¸Ð¿ файловой ÑиÑтемы."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "ÐеизвеÑтный тип файловой ÑиÑтемы «%s»."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "ОжидаетÑÑ Ñ‚Ð¸Ð¿ метки диÑка."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Флаги не поддерживаютÑÑ"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Больше разделов Ñоздать нельзÑ."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "ОжидаетÑÑ Ñ‚Ð¸Ð¿ раздела."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "вкл"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "выкл"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "оптимальный"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "минимальный"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "КЛЮЧИ:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "КОМÐÐДЫ:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Об ошибках Ñообщайте по адреÑу: %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "ИÑпользуетÑÑ %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Эта команда ничего не делает в не-интерактивном режиме.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "РаÑширенные разделы не могут быть Ñкрыты при msdos метках диÑка."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "РаÑширенные разделы не могут быть разделами воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ msdos "
+#~ "метках диÑка."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " ÐОМЕР : отображает более детальную информацию о требуемом разделе\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр '--%s' не может иметь аргументы\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: нераÑпознанный параметр '--%s'\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: параметр «-W %s» не должен иметь аргументы\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: Ð´Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° «-W %s» нужны аргументы\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "ДомашнÑÑ Ñтраница %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "недопуÑтимый аргумент %s%s '%s'"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "недопуÑтимый ÑÑƒÑ„Ñ„Ð¸ÐºÑ Ð² аргументе %s%s '%s'"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "Ñлишком большой аргумент %s%s '%s'"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Ðевозможно перечитать таблицу разделов. Это означает, что Ð´Ð»Ñ "
+#~ "Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð»ÑŽÐ±Ð¾Ð³Ð¾ из изменённых разделов требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° "
+#~ "компьютера. Ðо до перезагрузки ещё требуетÑÑ Ð¿ÐµÑ€ÐµÑƒÑтановить загрузчик (на "
+#~ "что может потребоватьÑÑ Ð¼Ð¾Ð½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ изменённых разделов). Обе Ñти вещи "
+#~ "невозможно Ñделать одновременно! ПоÑтому необходимо загрузитьÑÑ Ñ Ð´Ð¸Ñка "
+#~ "воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ переуÑтановить загрузчик Ñ ÐµÐ³Ð¾ помощью. Дополнительную "
+#~ "информацию можно найти в разделе 4 из руководÑтва Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Parted."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Таблица разделов %s не может быть перечитана (%s). Это означает, что "
+#~ "Ñделанные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÐºÐ° недоÑтупны Ð´Ð»Ñ Hurd. ТребуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ "
+#~ "компьютер перед тем, как что-либо делать Ñ %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "ОблаÑÑ‚ÑŒ загрузки не начинаетÑÑ Ð² начале раздела."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Эта Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑтема имеет размер логичеÑкого Ñектора %d. СчитаетÑÑ, что "
+#~ "GNU Parted работает неправильно Ñ Ñекторами, размер которых отличен от "
+#~ "512 байт."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Файл %s помечен как ÑиÑтемный. Это значит, что его перемещение может "
+#~ "привеÑти к прекращению работы некоторых программ."
diff --git a/po/rw.gmo b/po/rw.gmo
new file mode 100644
index 0000000..f64056b
--- /dev/null
+++ b/po/rw.gmo
Binary files differ
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..b107345
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,3570 @@
+# Kinyarwanda translations for parted package.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 1.6.6\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2005-04-04 10:55-0700\n"
+"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"Language: rw\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr ""
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr ""
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr ""
+
+#: lib/error.c:193
+#, fuzzy
+msgid "Unknown system error"
+msgstr "IDOSIYE Sisitemu Ubwoko"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr ""
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr ""
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr ""
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr ""
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr ""
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr ""
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr ""
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr ""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr ""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr ""
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr ""
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr ""
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr ""
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr ""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr ""
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr ""
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr ""
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr ""
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr ""
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr ""
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr ""
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr ""
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr ""
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr ""
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr ""
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ""
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr ""
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr ""
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr ""
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr ""
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr ""
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr ""
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr ""
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr ""
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr ""
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, fuzzy, c-format
+msgid "Error opening %s: %s"
+msgstr "Hari ikibazo mu gufungura %s%S"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, fuzzy, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr "Kuri Gufungura Gusoma Kwandika Gusoma"
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, fuzzy, c-format
+msgid "%s during seek for read on %s"
+msgstr "%skugirango Gusoma ku"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, fuzzy, c-format
+msgid "%s during read on %s"
+msgstr "%sGusoma ku"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, fuzzy, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Kwandika Kuri ni Gusoma"
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, fuzzy, c-format
+msgid "%s during seek for write on %s"
+msgstr "%skugirango Kwandika ku"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, fuzzy, c-format
+msgid "%s during write on %s"
+msgstr "%sKwandika ku"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr ""
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+
+#: libparted/arch/gnu.c:110
+#, fuzzy, c-format
+msgid "Unable to open %s."
+msgstr "Kuri Gufungura"
+
+#: libparted/arch/gnu.c:130
+#, fuzzy
+msgid "Unable to probe store."
+msgstr "Kuri"
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, fuzzy, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%sKuri Kuri"
+
+#: libparted/arch/linux.c:633
+#, fuzzy, c-format
+msgid "Could not stat device %s - %s."
+msgstr "OYA APAREYE"
+
+#: libparted/arch/linux.c:690
+#, fuzzy, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Kuri i Ingano Bya"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+
+#: libparted/arch/linux.c:855
+#, fuzzy, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Kuri i Ingano Bya"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr ""
+
+#: libparted/arch/linux.c:963
+#, fuzzy, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "OYA Kubona Ikiranga Bya APAREYE"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+
+#: libparted/arch/linux.c:1172
+#, fuzzy, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "APAREYE"
+
+#: libparted/arch/linux.c:1236
+#, fuzzy, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"APAREYE ni Zeru Uburebure Na a IDOSIYE Sisitemu Cyangwa imbonerahamwe# "
+"Byahiswemo i APAREYE"
+
+#: libparted/arch/linux.c:1349
+#, fuzzy, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr "Kuri Iyigamashusho Bya IDOSIYE APAREYE OYA Gukoresha"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr ""
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "APAREYE"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr ""
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr ""
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr ""
+
+#: libparted/arch/linux.c:1546
+#, fuzzy
+msgid "Loopback device"
+msgstr "APAREYE"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr ""
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr ""
+
+# filter/source\xsltdialog\xmlfilterdialogstrings.src:STR_UNKNOWN_APPLICATION.text
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Kitazwi"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr ""
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+#, fuzzy
+msgid "ped_device_new() Unsupported device type"
+msgstr "APAREYE Ubwoko"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, fuzzy, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Hari ikibazo mu gufungura %s%S"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr ""
+
+#: libparted/arch/linux.c:2691
+#, fuzzy, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"i Ibyerekeye Kuri Ibyerekeye Amahinduka Kuri Cyangwa Gukoresha in Mbere"
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Kuri i Ingano Bya"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+
+#: libparted/cs/geom.c:163
+#, fuzzy, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "i Impera Mbere i Gutangira"
+
+#: libparted/cs/geom.c:379
+#, fuzzy, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Kuri Kwandika Hanze Bya ku"
+
+#: libparted/cs/geom.c:419
+#, fuzzy
+msgid "checking for bad blocks"
+msgstr "kugirango"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr ""
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr ""
+
+#: libparted/disk.c:194
+#, fuzzy, c-format
+msgid "%s: unrecognised disk label"
+msgstr "Kuri Gufungura Akarango"
+
+#: libparted/disk.c:487
+#, fuzzy, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr "Kwandika Gushigikira kugirango Gusoma"
+
+#: libparted/disk.c:632
+#, fuzzy, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "ni i IDOSIYE Sisitemu ni"
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr ""
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr ""
+
+#: libparted/disk.c:848
+#, fuzzy, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ibendera Ibendera"
+
+#: libparted/disk.c:1320
+#, fuzzy, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%sUturango... OYA Gushigikira Byongerewe..."
+
+#: libparted/disk.c:1990
+#, fuzzy, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%sUturango... Gushigikira Bijyanye n'inyurabwenge Cyangwa Byongerewe..."
+
+#: libparted/disk.c:2003
+#, fuzzy
+msgid "Too many primary partitions."
+msgstr "Amapaji"
+
+#: libparted/disk.c:2012
+#, fuzzy, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "Kongeramo a Bijyanye n'inyurabwenge Kuri ni Oya Byongerewe..."
+
+#: libparted/disk.c:2036
+#, fuzzy, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Birenzeho Byongerewe... ku"
+
+#: libparted/disk.c:2046
+#, fuzzy
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Bijyanye n'inyurabwenge Hanze Bya i Byongerewe..."
+
+#: libparted/disk.c:2071
+#, fuzzy, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "a Bijyanye n'inyurabwenge Hanze Bya i Byongerewe... ku"
+
+#: libparted/disk.c:2081
+#, fuzzy
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "a Mo Imbere Byongerewe..."
+
+#: libparted/disk.c:2090
+#, fuzzy
+msgid "Can't have a partition outside the disk!"
+msgstr "a Hanze i"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+#, fuzzy
+msgid "Can't have overlapping partitions."
+msgstr "iyorosa"
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr ""
+
+# svx/source\dialog\labdlg.src:RID_SVXPAGE_CAPTION.LB_WINKEL.1.text
+#: libparted/disk.c:2522
+#, fuzzy
+msgid "free"
+msgstr "Kigenga"
+
+# 2175
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+#, fuzzy
+msgid "extended"
+msgstr "cya/ byagutse"
+
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\formdlg\dwfunctr.src:FID_FUNCTION_BOX.CB_CAT.7.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\formdlg\formdlgs.src:RID_SCTAB_FUNCTION.LB_CATEGORY.7.text
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+#, fuzzy
+msgid "logical"
+msgstr "Bijyanye n'inyurabwenge"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr ""
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr ""
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr ""
+
+# 5214
+#: libparted/disk.c:2548
+#, fuzzy
+msgid "root"
+msgstr "Imizi"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr ""
+
+# sc/source\ui\navipi\navipi.src:RID_SCDLG_NAVIGATOR.STR_HIDDEN.text
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "gihishwe"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr ""
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr ""
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr ""
+
+#: libparted/disk.c:2560
+#, fuzzy
+msgid "hp-service"
+msgstr "Serivisi"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr ""
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr ""
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr ""
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr ""
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr ""
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr ""
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Yego"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr ""
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, fuzzy, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ibendera Ibendera"
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Ibisobanuro"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Iburira"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Ikosa"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr ""
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr ""
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr ""
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr ""
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Yego"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Oya"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OKE"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Ongera ugerageze"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Kureka"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Kureka"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+
+#: libparted/labels/aix.c:92
+#, fuzzy
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/aix.c:103
+#, fuzzy
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/aix.c:116
+#, fuzzy
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/aix.c:126
+#, fuzzy
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/aix.c:144
+#, fuzzy
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/aix.c:154
+#, fuzzy
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Gukoporora Byongerewe..."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+#, fuzzy
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Kuri Byose ku i"
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+#, fuzzy
+msgid "Unable to allocate a partition number."
+msgstr "a Umubare"
+
+#: libparted/labels/bsd.c:588
+#, fuzzy
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Kuri a"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+#, fuzzy
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Kuri a"
+
+#: libparted/labels/dos.c:1159
+#, fuzzy, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "imbonerahamwe# ku Isinya"
+
+#: libparted/labels/dos.c:1187
+#, fuzzy, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "imbonerahamwe# ku"
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Kurema Birenzeho"
+
+#: libparted/labels/dvh.c:183
+#, fuzzy, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%sOya Byongerewe... Igice Umutwempangano Kwirengagiza Hanyuma Cyasibwe"
+
+#: libparted/labels/dvh.c:309
+#, fuzzy
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "ni i imbonerahamwe# ni"
+
+#: libparted/labels/dvh.c:614
+#, fuzzy
+msgid "Only primary partitions can be root partitions."
+msgstr "Imizi"
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr ""
+
+#: libparted/labels/dvh.c:642
+#, fuzzy
+msgid "Only logical partitions can be a boot file."
+msgstr "Bijyanye n'inyurabwenge a IDOSIYE"
+
+#: libparted/labels/dvh.c:719
+#, fuzzy, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr "Bijyanye n'inyurabwenge Idosiye a Izina:"
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr ""
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr ""
+
+#: libparted/labels/fdasd.c:156
+#, fuzzy
+msgid "Unsupported disk type"
+msgstr "APAREYE Ubwoko"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr ""
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr ""
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr ""
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr ""
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr ""
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr ""
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr ""
+
+#: libparted/labels/fdasd.c:251
+#, fuzzy
+msgid "No room for partition info."
+msgstr "Byemewe Byabonetse"
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr ""
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr ""
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "OYA IDOSIYE Sisitemu"
+
+#: libparted/labels/fdasd.c:1029
+#, fuzzy
+msgid "Could not retrieve disk geometry information."
+msgstr "OYA Gusoma Iyigamashusho Bya"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr ""
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Idosiye Sisitemu Gitoya kugirango"
+
+#: libparted/labels/gpt.c:791
+#, fuzzy, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr "Imiterere Bya i imbonerahamwe# ni Verisiyo ni RW org"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Inyibutsa imbonerahamwe# ni OYA ku i Impera Bya i Nka Impuzandengo- Sisitemu "
+"i ni Gitoya ku i Inyibutsa Kuri i Impera Na i ki/ bishaje Inyibutsa"
+
+#: libparted/labels/gpt.c:1044
+#, fuzzy
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr "i Na Inyibutsa Imbonerahamwe a imbonerahamwe# Na ikoresha Kuri"
+
+#: libparted/labels/gpt.c:1055
+#, fuzzy
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr "imbonerahamwe# ni i Inyibutsa YEGO"
+
+#: libparted/labels/gpt.c:1067
+#, fuzzy
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr "imbonerahamwe# ni i Inyibutsa YEGO"
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr ""
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Umubare"
+
+#: libparted/labels/mac.c:185
+#, fuzzy, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Isinya kugirango Uturango..."
+
+#: libparted/labels/mac.c:232
+#, fuzzy
+msgid "Partition map has no partition map entry!"
+msgstr "Oya Icyinjijwe"
+
+#: libparted/labels/mac.c:280
+#, fuzzy, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%sni Gitoya kugirango a Akarango"
+
+#: libparted/labels/mac.c:507
+#, fuzzy, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Sibyo Isinya"
+
+#: libparted/labels/mac.c:524
+#, fuzzy, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Sibyo Uburebure Bya 0 Bayite"
+
+#: libparted/labels/mac.c:555
+#, fuzzy
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Ibyatanzwe Gutangira ku i Gutangira Bya i"
+
+#: libparted/labels/mac.c:572
+#, fuzzy
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "i"
+
+#: libparted/labels/mac.c:583
+#, fuzzy
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Ibyatanzwe i"
+
+#: libparted/labels/mac.c:635
+#, fuzzy, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "Funga Ingano ku APAREYE Bayite ni OYA ku"
+
+#: libparted/labels/mac.c:648
+#, fuzzy, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr "Musomyi: i Ifatika Funga Ingano ni Bayite ni Bayite"
+
+#: libparted/labels/mac.c:701
+#, fuzzy
+msgid "No valid partition map found."
+msgstr "Byemewe Byabonetse"
+
+#: libparted/labels/mac.c:775
+#, fuzzy, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr "Icyinjijwe 1. Icyinjijwe"
+
+#: libparted/labels/mac.c:806
+#, fuzzy
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "2. Ibyinjijwe"
+
+#: libparted/labels/mac.c:1345
+#, fuzzy
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr "i Izina: Bya a Imizi Cyangwa Bivuye Nka"
+
+#: libparted/labels/mac.c:1444
+#, fuzzy
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Kongeramo ni Gitoya"
+
+#: libparted/labels/pc98.c:285
+#, fuzzy, c-format
+msgid "Invalid partition table on %s."
+msgstr "imbonerahamwe# ku"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, fuzzy, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "si Kuri Umwiburungushure Kuri Kongeramo Gushigikira kugirango iyi"
+
+#: libparted/labels/pc98.c:729
+#, fuzzy
+msgid "Can't add another partition."
+msgstr "Kongeramo"
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr ""
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr ""
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr ""
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr ""
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr ""
+
+#: libparted/labels/sun.c:162
+#, fuzzy
+msgid "Corrupted Sun disk label detected."
+msgstr "Akarango"
+
+#: libparted/labels/sun.c:277
+#, fuzzy, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr "Iyigamashusho OYA BIHUYE i Iyigamashusho ku i Akarango"
+
+#: libparted/labels/sun.c:299
+#, fuzzy, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Akarango a"
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr ""
+
+#: libparted/labels/sun.c:813
+#, fuzzy
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"ni i Bihari Ibumoso: ni OYA a Kuri Guhindura iyi Na: a Gicurasi OYA Kuri Na "
+"i Nka"
+
+#: libparted/labels/sun.c:828
+#, fuzzy
+msgid "Sun disk label is full."
+msgstr "Akarango ni"
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr ""
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+#, fuzzy
+msgid "Could not read volume label."
+msgstr "OYA Gusoma Iyigamashusho Bya"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+#, fuzzy
+msgid "Could not write volume label."
+msgstr "OYA IDOSIYE Sisitemu"
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr ""
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr ""
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr ""
+
+#: libparted/libparted.c:247
+#, fuzzy
+msgid "Out of memory."
+msgstr "Ububiko bwarenzwe"
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr ""
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr ""
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr ""
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr ""
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr ""
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr ""
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:212
+#, fuzzy, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%sKwandika ku"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr ""
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr ""
+
+#: libparted/fs/fat/fat.c:149
+#, fuzzy
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr "i Bayite Gushigikira Yahagaritswe"
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+#, fuzzy
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Idosiye Sisitemu Sibyo Isinya kugirango a IDOSIYE Sisitemu"
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+#, fuzzy
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Idosiye Sisitemu Sibyo Ingano kugirango a IDOSIYE Sisitemu"
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+#, fuzzy
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Idosiye Sisitemu Sibyo Ingano kugirango a IDOSIYE Sisitemu"
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+#, fuzzy
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr "Idosiye Sisitemu Sibyo Umubare Bya kugirango a"
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+#, fuzzy
+msgid "File system has an invalid number of FATs."
+msgstr "Idosiye Sisitemu Sibyo Umubare Bya"
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+#, fuzzy
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "Bijyanye n'inyurabwenge Ingano ni 0 ni"
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+#, fuzzy
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Oya Imbonerahamwe ni"
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+#, fuzzy
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "0 ni"
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+#, fuzzy
+msgid "File system is FAT12, which is unsupported."
+msgstr "ni ni"
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, fuzzy, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Isinya"
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, fuzzy, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Isinya"
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, fuzzy, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Isinya"
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, fuzzy, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Ibisobanuro i Isinya Kureka kugirango NONEAHA Na Kohereza in a Icyegeranyo "
+"Kuri Kwirengagiza"
+
+#: libparted/fs/r/fat/calc.c:134
+#, fuzzy, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr "Bya Kigenga Umwanya Kuri Kugabanuka iyi Kuri iyi Ingano Kigenga"
+
+#: libparted/fs/r/fat/context.c:56
+#, fuzzy, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Gutangira DELTA ni OYA a Igikubo Bya i Ingano"
+
+#: libparted/fs/r/fat/count.c:84
+#, fuzzy, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "bushyinguro Icyinjijwe kugirango Itangira ni i Impera Bya IDOSIYE"
+
+#: libparted/fs/r/fat/count.c:97
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr "kugirango Gukoresha Cyangwa"
+
+#: libparted/fs/r/fat/count.c:106
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr "Hanze in kugirango Gukoresha Cyangwa"
+
+#: libparted/fs/r/fat/count.c:116
+#, fuzzy, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr "ni Kwambukiranya kugirango Gukoresha Cyangwa"
+
+#: libparted/fs/r/fat/count.c:135
+#, fuzzy, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%sni"
+
+#: libparted/fs/r/fat/fat.c:244
+#, fuzzy, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Gitoya kugirango a IDOSIYE Sisitemu"
+
+#: libparted/fs/r/fat/fat.c:410
+#, fuzzy
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"BIHUYE iyi Hanyuma Guhitamo Kureka Gukoresha ku i IDOSIYE Sisitemu Na "
+"Hanyuma Inyuma"
+
+#: libparted/fs/r/fat/fat.c:450
+#, fuzzy
+msgid "There are no possible configurations for this FAT type."
+msgstr "Oya Amaboneza kugirango iyi Ubwoko"
+
+#: libparted/fs/r/fat/fat.c:462
+#, fuzzy, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Idosiye Sisitemu Ikitezwe: kugirango Kuri nka Ingano ni Ikitezwe: Umubare "
+"Bya ni Ikitezwe: Ingano Bya ni Ikitezwe:"
+
+#: libparted/fs/r/fat/fat.c:485
+#, fuzzy, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Idosiye Sisitemu ni i Kigenga Umwanya Nka OYA"
+
+#: libparted/fs/r/fat/resize.c:159
+#, fuzzy
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"OYA in i Imizi bushyinguro kugirango Byose Bya i Idosiye Kureka Cyangwa "
+"Kwirengagiza Kuri i Idosiye"
+
+#: libparted/fs/r/fat/resize.c:303
+#, fuzzy
+msgid "Error writing to the root directory."
+msgstr "Kuri i Imizi bushyinguro"
+
+#: libparted/fs/r/fat/resize.c:479
+#, fuzzy
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "IDOSIYE Sisitemu Nka Hanyuma Oya"
+
+#: libparted/fs/r/fat/resize.c:482
+#, fuzzy
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"GUHINDURA Kuri Na ni ku iyi Hanyuma Kwinjiza porogaramu i Kuri iyi i Bikorwa "
+"Cyangwa Bikorwa"
+
+#: libparted/fs/r/fat/resize.c:490
+#, fuzzy
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "IDOSIYE Sisitemu Nka Hanyuma OYA Gishya"
+
+#: libparted/fs/r/fat/resize.c:494
+#, fuzzy
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"GUHINDURA Kuri Na ni ku iyi Hanyuma Kwinjiza porogaramu i Kuri iyi i Bikorwa "
+"Cyangwa Bikorwa Guhindura.... Kuri Ubwoko i IDOSIYE Sisitemu ku Na"
+
+# desktop/source\app\ssodlg.src:DLG_SSOLOGIN.text
+#: libparted/fs/r/fat/resize.c:508
+#, fuzzy, c-format
+msgid "%s %s %s"
+msgstr "%s%s%s"
+
+#: libparted/fs/r/fat/resize.c:509
+#, fuzzy
+msgid "Would you like to use FAT32?"
+msgstr "nka Kuri Gukoresha"
+
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, fuzzy, c-format
+msgid "%s %s"
+msgstr "%s%s"
+
+#: libparted/fs/r/fat/resize.c:541
+#, fuzzy
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "IDOSIYE Sisitemu Kuri iyi Ingano ku Guhindura.... Kuri"
+
+#: libparted/fs/r/fat/resize.c:557
+#, fuzzy
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "IDOSIYE Sisitemu Kuri iyi Ingano ku Guhindura.... Kuri"
+
+#: libparted/fs/r/fat/resize.c:570
+#, fuzzy
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr "OYA Ihindurangero iyi Kuri iyi Ingano ku"
+
+#: libparted/fs/r/fat/table.c:137
+#, fuzzy, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr "Ibitangazamakuru BIHUYE i Ibitangazamakuru Gukoresha"
+
+#: libparted/fs/r/fat/table.c:269
+#, fuzzy, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "Hanze"
+
+#: libparted/fs/r/fat/table.c:301
+#, fuzzy, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "Hanze"
+
+#: libparted/fs/r/fat/table.c:343
+#, fuzzy
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "Oya Kigenga"
+
+#: libparted/fs/r/filesys.c:152
+#, fuzzy
+msgid "Could not detect file system."
+msgstr "OYA IDOSIYE Sisitemu"
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "kugirango IDOSIYE ni OYA"
+
+#: libparted/fs/r/filesys.c:171
+#, fuzzy
+msgid "The file system is bigger than its volume!"
+msgstr "IDOSIYE Sisitemu ni Igice"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr ""
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr ""
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:300
+#, fuzzy
+msgid "writing HFS Master Directory Block"
+msgstr "Kuri i Imizi bushyinguro"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:664
+#, fuzzy
+msgid "Error while writing the allocation file."
+msgstr "Kuri i Imizi bushyinguro"
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr ""
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:271
+#, fuzzy
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Gutangira DELTA ni OYA a Igikubo Bya i Ingano"
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:314
+#, fuzzy
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Gutangira DELTA ni OYA a Igikubo Bya i Ingano"
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+#, fuzzy
+msgid "Could not cache the file system in memory."
+msgstr "OYA IDOSIYE Sisitemu"
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr ""
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+
+#: parted/parted.c:138
+#, fuzzy
+msgid "displays this help message"
+msgstr "iyi Ifashayobora Ubutumwa"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr ""
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr ""
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr ""
+
+#: parted/parted.c:142
+#, fuzzy
+msgid "never prompts for user intervention"
+msgstr "Nta narimwe kugirango Ukoresha:"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+#, fuzzy
+msgid "displays the version"
+msgstr "i Verisiyo"
+
+#: parted/parted.c:145
+#, fuzzy
+msgid "alignment for new partitions"
+msgstr "Gukoporora Byongerewe..."
+
+#: parted/parted.c:158
+#, fuzzy
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"ni i Umubare ku Uturango... i Umubare Bivuye 1. 4. Na Bijyanye "
+"n'inyurabwenge 5"
+
+#: parted/parted.c:161
+#, fuzzy
+msgid "LABEL-TYPE is one of: "
+msgstr "ni Bya"
+
+#: parted/parted.c:162 parted/parted.c:163
+#, fuzzy
+msgid "FLAG is one of: "
+msgstr "ni Bya"
+
+#: parted/parted.c:164
+#, fuzzy
+msgid "UNIT is one of: "
+msgstr "ni Bya"
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr ""
+
+#: parted/parted.c:166
+#, fuzzy
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "ni Bya Bijyanye n'inyurabwenge"
+
+#: parted/parted.c:168
+#, fuzzy
+msgid "FS-TYPE is one of: "
+msgstr "ni Bya"
+
+#: parted/parted.c:169
+#, fuzzy
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr "Na in Uduciro IBARA Bivuye i Impera Bya i"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+
+#: parted/parted.c:175
+#, fuzzy
+msgid "STATE is one of: on, off\n"
+msgstr "ni Bya ku"
+
+#: parted/parted.c:176
+#, fuzzy
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "ni Cyangwa"
+
+#: parted/parted.c:177
+#, fuzzy
+msgid "NAME is any word you want\n"
+msgstr "ni ijambo"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+#, fuzzy
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"C Porogaramu ni Kigenga ku i Porogaramu ni in i ATARIIGIHARWE i Bya Cyangwa "
+"A i kugirango Birenzeho Birambuye"
+
+#: parted/parted.c:232
+#, fuzzy, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr ""
+"%0.Project- Id- Version: basctl\n"
+"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+"Content- Type: text/ plain; charset= UTF- 8\n"
+"Content- Transfer- Encoding: 8bit\n"
+"X- Generator: KBabel 1. 0\n"
+". 2D."
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "ni ni in Gukoresha"
+
+#: parted/parted.c:272
+#, fuzzy, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "S ku"
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+
+#: parted/parted.c:545
+#, fuzzy
+msgid "New disk label type?"
+msgstr "Akarango Ubwoko"
+
+#: parted/parted.c:692
+#, fuzzy
+msgid "Partition type?"
+msgstr "Ubwoko"
+
+#: parted/parted.c:710 parted/parted.c:914
+#, fuzzy
+msgid "Partition name?"
+msgstr "Izina:"
+
+#: parted/parted.c:720
+#, fuzzy
+msgid "File system type?"
+msgstr "Idosiye Sisitemu Ubwoko"
+
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\navipi\navipi.src:RID_SCDLG_NAVIGATOR.TBX_CMD.IID_UP.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_PROB.6.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_BETA_DIST.8.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_BETA_INV.8.text
+#: parted/parted.c:725 parted/parted.c:1815
+#, fuzzy
+msgid "Start?"
+msgstr "Gutangira"
+
+# officecfg/registry\schema\org\openoffice\Office\DataAccess.xcs:....FormSearchOptions.SearchPosition..end-of-field.text
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+#, fuzzy
+msgid "End?"
+msgstr "Impera"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%sUturango... OYA Gushigikira Byongerewe..."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+#, fuzzy
+msgid "Partition number?"
+msgstr "Umubare"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%sUturango... OYA Gushigikira Byongerewe..."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Ubwoko"
+
+#: parted/parted.c:972
+msgid "Invalid type-id."
+msgstr ""
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Ubwoko"
+
+#: parted/parted.c:993
+msgid "Invalid type-uuid."
+msgstr ""
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr ""
+
+#: parted/parted.c:1242
+#, fuzzy, c-format
+msgid "Disk %s: %s\n"
+msgstr "Akarango Ubwoko"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr ""
+
+#: parted/parted.c:1255
+#, fuzzy, c-format
+msgid "Partition Table: %s\n"
+msgstr "Izina:"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Akarango Ubwoko"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr ""
+
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\navipi\navipi.src:RID_SCDLG_NAVIGATOR.TBX_CMD.IID_UP.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_PROB.6.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_BETA_DIST.8.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\src\scfuncs.src:RID_SC_FUNCTION_DESCRIPTIONS2.SC_OPCODE_BETA_INV.8.text
+#: parted/parted.c:1388 parted/parted.c:1391
+#, fuzzy
+msgid "Start"
+msgstr "Gutangira"
+
+# officecfg/registry\schema\org\openoffice\Office\DataAccess.xcs:....FormSearchOptions.SearchPosition..end-of-field.text
+#: parted/parted.c:1389 parted/parted.c:1392
+#, fuzzy
+msgid "End"
+msgstr "Impera"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr ""
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr ""
+
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Save.URL.FileSystem.text
+#: parted/parted.c:1398
+#, fuzzy
+msgid "File system"
+msgstr "Idosiye ya sisitemu"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr ""
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Amabendera"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr ""
+
+#: parted/parted.c:1702
+#, fuzzy, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr "A Byabonetse ku Kuri Kongeramo Kuri i imbonerahamwe#"
+
+#: parted/parted.c:1745
+#, fuzzy
+msgid "searching for file systems"
+msgstr "Ishakisha kugirango IDOSIYE"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+#, fuzzy
+msgid "New device?"
+msgstr "APAREYE"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr ""
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr ""
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr ""
+
+#: parted/parted.c:2080 parted/parted.c:2117
+#, fuzzy
+msgid "Flag to Invert?"
+msgstr "Kuri Guhindura>>"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+#, fuzzy
+msgid "New state?"
+msgstr "Leta"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr ""
+
+#: parted/parted.c:2303
+#, fuzzy
+msgid "align-check"
+msgstr "genzura"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+
+#: parted/parted.c:2314
+#, fuzzy
+msgid "help"
+msgstr "Ifashayobora"
+
+#: parted/parted.c:2317
+#, fuzzy
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr "Ifashayobora Rusange Ifashayobora Cyangwa Ifashayobora ku"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr ""
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr ""
+
+#: parted/parted.c:2326
+#, fuzzy
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr "Kurema a Gishya imbonerahamwe#"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr ""
+
+#: parted/parted.c:2335
+#, fuzzy
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "Ubwoko a"
+
+#: parted/parted.c:2341
+#, fuzzy
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr "a a Gishya IDOSIYE Sisitemu ku i Gicurasi Kuri Gushyiraho"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "izina"
+
+#: parted/parted.c:2349
+#, fuzzy
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "Izina: Izina:"
+
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+#: parted/parted.c:2354
+#, fuzzy
+msgid "print"
+msgstr "Gucapa"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr "Gucapa Kugaragaza i imbonerahamwe# Cyangwa a"
+
+#: parted/parted.c:2361
+#, fuzzy
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"ingingo Gucapa i imbonerahamwe# Umubare ni Hanyuma Birenzeho Ibisobanuro ni"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+
+#: parted/parted.c:2370
+#, fuzzy
+msgid "quit"
+msgstr "Kuvamo"
+
+#: parted/parted.c:2373
+#, fuzzy
+msgid "quit exit program"
+msgstr "Kuvamo Gusohoka Porogaramu"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr ""
+
+#: parted/parted.c:2381
+#, fuzzy
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr "a Na"
+
+# starmath/source\smres.src:RID_TOOLBOXWINDOW.6.RID_SIZEXY.text
+#: parted/parted.c:2387
+#, fuzzy
+msgid "resize"
+msgstr "Kuringaniza"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+# starmath/source\smres.src:RID_TOOLBOXWINDOW.6.RID_SIZEXY.text
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "Kuringaniza"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "Gusiba"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr ""
+
+#: parted/parted.c:2404
+#, fuzzy
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "Gusiba"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "guhitamo"
+
+#: parted/parted.c:2412
+#, fuzzy
+msgid "select DEVICE choose the device to edit"
+msgstr "Guhitamo Guhitamo i APAREYE Kuri Guhindura"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr ""
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+
+#: parted/parted.c:2434
+#, fuzzy
+msgid "set"
+msgstr "Gushyiraho"
+
+#: parted/parted.c:2437
+#, fuzzy
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "Gushyiraho Guhindura>> a Ibendera ku"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr ""
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr ""
+
+#: parted/parted.c:2463
+#, fuzzy
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "Kuvamo Gusohoka Porogaramu"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr ""
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+
+#: parted/parted.c:2589
+#, fuzzy
+msgid "No device found"
+msgstr "APAREYE Byabonetse"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+
+#: parted/parted.c:2659
+#, fuzzy
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr "Mbere Icyiciro 4. Bya i kugirango Birenzeho Ibisobanuro"
+
+#: parted/parted.c:2666
+#, fuzzy
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Kuri Kuvugurura NIBA"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+
+#: parted/ui.c:167
+#, fuzzy
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr "Na: Kuri Oya S Ubwoko"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+
+#: parted/ui.c:904
+#, fuzzy, c-format
+msgid "invalid token: %s"
+msgstr "imbonerahamwe# ku"
+
+#: parted/ui.c:1085
+#, fuzzy
+msgid "Expecting a partition number."
+msgstr "a Umubare"
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr ""
+
+#: parted/ui.c:1114
+#, fuzzy
+msgid "Expecting a file system type."
+msgstr "a IDOSIYE Sisitemu Ubwoko"
+
+#: parted/ui.c:1121
+#, fuzzy, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "IDOSIYE Sisitemu Ubwoko"
+
+#: parted/ui.c:1142
+#, fuzzy
+msgid "Expecting a disk label type."
+msgstr "a Akarango Ubwoko"
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+#, fuzzy
+msgid "Can't create any more partitions."
+msgstr "Kurema Birenzeho"
+
+#: parted/ui.c:1293
+#, fuzzy
+msgid "Expecting a partition type."
+msgstr "a Ubwoko"
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "kuri"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\svdraw\svdstr.src:STR_ItemValOFF.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\svdraw\svdstr.src:STR_ItemValTEXTANI_NONE.text
+#: parted/ui.c:1443
+msgid "off"
+msgstr "bidakora"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr ""
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr ""
+
+# crashrep/source\all\crashrep.lng:%OPTIONS_BUTTON%.text
+#: parted/ui.c:1594
+#, fuzzy
+msgid "OPTIONs:"
+msgstr "Amahitamo..."
+
+# sfx2/source\doc\docvor.src:DLG_ORGANIZE.BTN_EDIT.text
+#: parted/ui.c:1599
+#, fuzzy
+msgid "COMMANDs:"
+msgstr "Amabwiriza"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+
+#: parted/ui.c:1609
+#, fuzzy, c-format
+msgid "Using %s\n"
+msgstr "ikoresha"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr ""
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes"
+#~ msgstr "Ingano ku ni Bayite ni OYA Kuri Akazi Na: Na: Ikindi Bayite"
+
+#, fuzzy, c-format
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "Iyigamashusho"
+
+#, fuzzy, c-format
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "ni a Porogaramu- shoboza"
+
+#, fuzzy, c-format
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "Kuri NIBA ni"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to determine if partitions are mounted via /proc/mounts or /etc/"
+#~ "mtab. Make sure you don't attempt to resize or modify mounted file "
+#~ "systems. (Even read-only mounted)"
+#~ msgstr ""
+#~ "Kuri NIBA Biturutse Cyangwa Kuri Ihindurangero Cyangwa Guhindura IDOSIYE "
+#~ "Gusoma"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything nothing about the modifications you made "
+#~ "until you reboot. You should reboot your computer before doing anything "
+#~ "with %s."
+#~ msgstr "Kuri Gusoma i imbonerahamwe# ku Ibyerekeye i Mbere Na:"
+
+#, fuzzy
+#~ msgid ""
+#~ "The partition table was unable to be reread, as such, you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "imbonerahamwe# Kuri Nka Kuri Mbere Byahinduwe Kuri Mbere Gicurasi "
+#~ "Byahinduwe ni Byombi Kuri Bidakora a Na Bivuye i Icyiciro 4. Bya i "
+#~ "kugirango Birenzeho Ibisobanuro"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The partition table on %s (%s). This means the Hurd knows nothing about "
+#~ "any modifications you made. You should reboot your computer before doing "
+#~ "anything with %s."
+#~ msgstr "imbonerahamwe# ku i Ibyerekeye Mbere Na:"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "imbonerahamwe# ku ni iyi i i ni i Iyigamashusho kugirango i Iyigamashusho "
+#~ "OYA Kugenzura... Na: Itangira Nka iyi Gicurasi OYA ku Wongera i Kuri i "
+#~ "Komandi: Umurongo i Cyangwa kugirango Birenzeho Ibisobanuro Iyigamashusho "
+#~ "ni Gicurasi Guhitamo Kuri urifuzagukomeza Na Guhitamo Na Na Cyangwa i "
+#~ "NONEAHA"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "imbonerahamwe# ku ni iyi i i ni i Iyigamashusho iyi OYA Kugaragara Kuri i "
+#~ "ni Kuri Kwirengagiza Gicurasi Na: Na Gicurasi Na: IDOSIYE ni"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "Kuri Gutondeka imbonerahamwe# i Iyigamashusho ni Kuri Kwirengagiza "
+#~ "Gicurasi Na:"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted - possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%sKirimo a imbonerahamwe# OYA a Byemewe imbonerahamwe# Nka ku a "
+#~ "Porogaramu Imbonerahamwe Cyasibwe i imbonerahamwe# Na NONEAHA ikoresha "
+#~ "imbonerahamwe# iyi a imbonerahamwe#"
+
+#, fuzzy
+#~ msgid "The boot region doesn't start at the start of the partition"
+#~ msgstr "Gutangira ku i Gutangira Bya i"
+
+#, fuzzy, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "kugirango Gufungura %s%S IDOSIYE ni OYA"
+
+#, fuzzy, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "kugirango IDOSIYE ni OYA"
+
+#, fuzzy
+#~ msgid "raw block copying"
+#~ msgstr "Funga"
+
+#, fuzzy
+#~ msgid "growing file system"
+#~ msgstr "IDOSIYE Sisitemu"
+
+#, fuzzy
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Gukoporora iyorosa"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Gushigikira kugirango IDOSIYE ni OYA kugirango Gushigikira kugirango i "
+#~ "IDOSIYE Sisitemu NIBA i Gishya ni ku Nka Nka i ki/ bishaje Kugabanuka i "
+#~ "Kuri Gukoporora Cyangwa Gukoporora Kuri a"
+
+#, fuzzy, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "kugirango IDOSIYE ni OYA"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr "A in imeli a Icyegeranyo Kuri org i Verisiyo Na i Ubutumwa"
+
+#, fuzzy, c-format
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "Kuri Gusoma Hanze Bya ku"
+
+#, fuzzy
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Itsinda"
+
+#, fuzzy
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr "a Imigaragarire Ihindurangero iyi"
+
+#, fuzzy
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr "iyi ni"
+
+#, fuzzy
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "Amakosa Gukoresha"
+
+#, fuzzy
+#~ msgid ""
+#~ "Filesystem was not cleanly unmounted! You should e2fsck. Modifying an "
+#~ "unclean filesystem could cause severe corruption."
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "Bikora"
+
+#, fuzzy
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Ubwihisho"
+
+#, fuzzy
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr "Na: a Ihuza IBARA Gyayo Gukoresha Itangira"
+
+#, fuzzy
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Kigenga"
+
+#, fuzzy
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "ni Kuri Gukuraho... a Itsinda"
+
+#, fuzzy
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr "Kuri Gukuraho... a Itsinda"
+
+#, fuzzy
+#~ msgid "adding groups"
+#~ msgstr "Wongera Amatsinda"
+
+#, fuzzy, c-format
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr "ni Kuri Ihindurangero Kuri"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr "Kuri Ihindurangero Kuri"
+
+#, fuzzy
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr "OYA"
+
+#, fuzzy
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "IDOSIYE Sisitemu i Bikora Ihindurangero i IDOSIYE Sisitemu NIBA iyi "
+#~ "Gushoboza ku Na Hanyuma"
+
+#, fuzzy
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr "Byabonetse Gyayo Gukoresha Itangira"
+
+#, fuzzy, c-format
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "Oya Indango"
+
+#, fuzzy, c-format
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "cy/ byagarajwe"
+
+#, fuzzy
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "a BASIC Kugenzura... a Birenzeho Kugenzura... Gukoresha i Porogaramu"
+
+#, fuzzy
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Kwimura i Gutangira Bya"
+
+#, fuzzy
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Ubwihisho"
+
+#, fuzzy
+#~ msgid "writing per-group metadata"
+#~ msgstr "Itsinda"
+
+#, fuzzy
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "Idosiye Sisitemu Sibyo Isinya kugirango a IDOSIYE"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "IDOSIYE Sisitemu a Bijyanye n'inyurabwenge Ingano Bya ni OYA Kuri Akazi "
+#~ "Na: Ikindi Bayite"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "IDOSIYE ni cy/ byagarajwe Nka a Sisitemu IDOSIYE Porogaramu Kuri "
+#~ "Guhagarara"
+
+#, fuzzy
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "kugirango Ukoresha:"
+
+#, fuzzy
+#~ msgid "Source partition number?"
+#~ msgstr "Umubare"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr "Kuri Kurema a ku kuyobora ni"
+
+#, fuzzy
+#~ msgid "Extended partitions can't have file systems. Did you want mkpart?"
+#~ msgstr "IDOSIYE"
+
+#, fuzzy
+#~ msgid "Can't move extended partitions."
+#~ msgstr "Kwimura Byongerewe..."
+
+#, fuzzy
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr "Kwimura a ikoresha Ihindurangero"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr "Kuri Kwimura i Kuri kuyobora ni"
+
+# svx/source\gallery2\galtheme.src:RID_GALLERYSTR_THEME_FLAGS.text
+#, fuzzy
+#~ msgid "Flags: "
+#~ msgstr "Amabendera"
+
+# officecfg/registry\schema\org\openoffice\Office\Common.xcs:....Save.URL.FileSystem.text
+#, fuzzy, c-format
+#~ msgid "File System: %s\n"
+#~ msgstr "Idosiye ya sisitemu"
+
+#, fuzzy, c-format
+#~ msgid "Minimum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Ingano"
+
+#, fuzzy, c-format
+#~ msgid "Maximum size: %10.3fMb (%d%%)\n"
+#~ msgstr "Ingano"
+
+#, fuzzy, c-format
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "000."
+
+#, fuzzy
+#~ msgid "Minor Start End "
+#~ msgstr "Gutangira Impera"
+
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+#, fuzzy
+#~ msgid "Type "
+#~ msgstr "Ubwoko"
+
+#, fuzzy
+#~ msgid "Name "
+#~ msgstr "Izina"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr "Kuri Ihindurangero i Kuri kuyobora ni"
+
+#, fuzzy
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr "Kugenzura... a Byoroheje Kugenzura... ku i"
+
+#, fuzzy
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr "Gukoporora Kuri"
+
+#, fuzzy
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr "Ubwoko a ku"
+
+#, fuzzy
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr "Ubwoko a Na: a"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_UNDO_MOVE.text
+#, fuzzy
+#~ msgid "move"
+#~ msgstr "Kwimura"
+
+#, fuzzy
+#~ msgid "move MINOR START END move partition MINOR"
+#~ msgstr "Kwimura Kwimura"
+
+#, fuzzy
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr "Ihindurangero Ihindurangero ku"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "Byabonetse a in imeli a Icyegeranyo Kuri org i Verisiyo Na i Ubutumwa"
+
+#, fuzzy
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ "S OYA ikoresha Hanyuma Hindura Kuri ku Igenamiterere i Ibendera ku Byose "
+#~ "Ubwoko i Sisitemu Na i i Iyigamashusho Mbere"
+
+#, fuzzy, c-format
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr "Sisitemu i Iyigamashusho ku ni Umwiburungushure ku"
+
+#, fuzzy, c-format
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "Sisitemu i Iyigamashusho ku ni"
diff --git a/po/sk.gmo b/po/sk.gmo
new file mode 100644
index 0000000..faf23e8
--- /dev/null
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..2eaab23
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,3831 @@
+# Slovak translation of parted.
+# Copyright (C) 2001, 2004, 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Ivan Masár <helix84@centrum.sk>, 2007, 2008, 2009, 2010, 2011, 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.0.136\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2012-02-19 16:31+0100\n"
+"Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
+"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "neplatný argument %s pre %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "nejednoznaÄný argument %s pre %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Platné argumenty sú:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "chyba zápisu"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Neznáma systémová chyba"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: voľba „-W %s“ je nejednoznaÄná\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: voľba „%s“ je nejednoznaÄná; možnosti:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: nerozpoznaná voľba „%c%s“\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: voľba „%c%s“ nepovoľuje argument\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: voľba „--%s“ vyžaduje argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neplatná voľba -- %c\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: voľba vyžaduje argument -- %c\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "“"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Úspešné"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Bez zhody"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Neplatný regulárny výraz"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Neplatný znak triedenia"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Neplatný názov triedy znakov"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Lomka na konci"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Neplatný spätný odkaz"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[ alebo [^ bez náprotivku"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( alebo \\( bez náprotivku"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ bez náprotivku"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Neplatný obsah \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Neplatné ukonÄenie rozsahu"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Pamäť bola vyÄerpaná"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Neplatný predchádzajúci regulárny výraz"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "PredÄasný koniec regulárneho výrazu"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Regulárny výraz je príliš veľký"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") alebo \\) bez náprotivku"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Žiaden predchádzajúci regulárny výraz"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[aAáÃyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Balík vytvoril %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Balík vytvoril %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Licencia GPLv3+: GNU GPL verzie 3 alebo neskoršia <http://gnu.org/licenses/"
+"gpl.html>\n"
+"Toto je slobodný softvér: môžete ho slobodne meniť a redistribuovať.\n"
+"Neexistuje ŽIADNA ZÃRUKA do rozsahu, aký pripúšťa zákon.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Napísal %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Napísal %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Napísal %s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s\n"
+"a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s, %s, %s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s a %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Napísal %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s a Äalší.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Chyby hláste <%s>.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Chyby %s hláste %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Domovská stránka %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+"Všeobecná pomoc s použitím softvéru GNU: <http://www.gnu.org/gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "pamäť je vyÄerpaná"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Obraz disku"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Chyba pri otváraní %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Nemôžem otvoriÅ¥ %s na Äítanie/zápis (%s). %s bol otvorený len na Äítanie."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s pri vyhľadávaní pre Äítanie na %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s pri Äítaní %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Nemôžem zapisovaÅ¥ na %s, pretože je tvorený len na Äítanie."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s pri pri vyhľadávaní pre zápis na %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s pri zápise na %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Viac informácií získate po napísaní „%s --help“.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Použitie: %s [VOĽBA] [ZARIADENIE]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informovať OS o zmenách tabuľky oblastí.\n"
+"\n"
+" -d, --no-update v skutoÄnosti neinformovaÅ¥ OS\n"
+" -s, --summary vypísať zhrnutie obsahu\n"
+" -h, --help zobraziÅ¥ tento návod a skonÄiÅ¥\n"
+" -v, --version vypísaÅ¥ info o verzii a skonÄiÅ¥\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Bez zadaného ZARIADENIA skúsi všetky oblasti.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Chyby hláste <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Nemôžem otvoriť %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Nemôžem preskúmať úložný priestor."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"UPOZORNENIE: jadru sa nepodarilo znova naÄítaÅ¥ tabuľku oblastí na %s (%s). V "
+"dôsledku toho menusí reflektovať všetky vaše zmeny dovtedy, kým nevykonáte "
+"reštart."
+
+#: libparted/arch/gnu.c:261
+#, fuzzy, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"UPOZORNENIE: jadru sa nepodarilo znova naÄítaÅ¥ tabuľku oblastí na %s (%s). V "
+"dôsledku toho menusí reflektovať všetky vaše zmeny dovtedy, kým nevykonáte "
+"reštart."
+
+#: libparted/arch/gnu.c:274
+#, fuzzy, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"UPOZORNENIE: jadru sa nepodarilo znova naÄítaÅ¥ tabuľku oblastí na %s (%s). V "
+"dôsledku toho menusí reflektovať všetky vaše zmeny dovtedy, kým nevykonáte "
+"reštart."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s pri pokuse o sync %s na disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Nemôžem získať stat zariadenia %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Nepodarilo sa urÄiÅ¥ typ dm %s"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Nebolo možné urÄiÅ¥ veľkosÅ¥ sektora %s: %s.\n"
+"Používam štandardnú veľkosť sektora (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Nebolo možné urÄiÅ¥ veľkosÅ¥ sektora %s.\n"
+"Použije sa štandardná veľkosť sektora (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Nepodarilo sa urÄiÅ¥ veľkosÅ¥ %s (%s)"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Všeobecný IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Nemôžem získat identitu zariadenia %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Zariadenie %s má viacero (%d) logických sektorov na fyzický sektor.\n"
+"GNU Parted oto podporuje EXPERIMENTÃLNE pre niektoré Å¡peciálne kombinácie "
+"zväzkov/súborových systémov, napr. GPT a ext2/3.\n"
+"Prosím, pozrite si aktuálne informácie na webe."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Chyba pri inicializácii zariadenia SCSI %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Zariadenie %s je také malé, že nemôže obsahovať systém súborov ani tabuľku "
+"oblastí. Možno ste vybrali chybné zariadenie?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Nemôžem urÄiÅ¥ geometriu súboru/zariadenia %s. Nemali by ste používaÅ¥ Parted, "
+"ak NAOZAJ neviete, Äo robíte!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Všeobecná úložná karta SD/MMC"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Nové zariadenie?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "radiÄ RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 zariadenie SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Zariadenie ATA over Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "jednotka IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "radiÄ ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "radiÄ I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Zariadenie loopback"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "mapovaÄ zariadení Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Virtuálne blokové zariadenie Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Neznámy"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Blokové zariadenie Vistio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linuxové softvérové pole RAID"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Nepodporovaný typ zariadenia"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Chyba pri fsync/zatváraní %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0send súboru poÄas Äítania %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Chyba pri informování jadra o zmenách oddielu %s - %s. To znamená, že Linux "
+"nebude vedieť o zmenách, ktoré ste na %s vykonali, pokým nereštartujete "
+"systém - takže by ste ho nemali pripájať ani ho pred reštartom akokoľvek "
+"používať."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Nepodarilo sa urÄiÅ¥ zaÄiatok a dĺžku %s"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Oblasti %s na %s boli zapísané, ale nepodarilo sa informovať jadro o tejto "
+"zmene, pravdepodobne preto, že sa oblasti používajú. V dôsledku toho sa "
+"naÄalej budú používaÅ¥ staré oblasti. Pred vykonaním Äalších zmien by ste "
+"mali reštartovať systém."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Nemožno maÅ¥ koniec pred zaÄiatkom! (poÄiat. sektor=%jd dĺžka=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Pokus o zápis sektorov %ld-%ld mimo oblasti na %s"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "hľadám chybné bloky"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Backtrace: %d volaní na zásobníku:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Zlyhal predpoklad (%s) v %s:%d vo funkcii %s()."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: nerozpoznaná menovka disku."
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Táto libparted nemá podporu pre zápis na %s. Možno bola skompilovaná len na "
+"Äítanie."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Oblasť %d má %s, ale systém súborov má %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Neznámý príznak disku, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Menovky disku %s nepodporujú rozšírené oblasti."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Menovky disku %s nepodporujú logické alebo rozšírené oblasti."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Príliš veľa primárnych oblastí."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Nemožno pridať logickú oblasť do %s, pretože neexistuje rozšírená oblasť."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Nie je možné mať na %s viac než jednu rozšírenú oblasť."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Logické oblasti nemôžu byť mimo rozšírenej oblasti."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Logická oblasť nemôže byť mimo rozšírenej oblasti na %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Primárna oblasť nemôže byť vnútri rozšírenej oblasti."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Nemožno mať oblasť mimo disku!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Nie je možné mať prekrývajúce se oblasti."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadáta"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "voľné"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "rozšírený"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logický"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primárny"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "zavádzací"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "koreňový"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "odkladací"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "skrytý"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "RAID"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "LVM"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "LBA"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metadáta"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "zastaralé_zavádzanie"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Ãno"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Neznámy príznak oblasti, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Informácia"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Upozornenie"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Chyba"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Fatálna chyba"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Chyba"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Neimplementované"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Oprava"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ãno"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nie"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Znovu"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorovať"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Bola zistená chyba v GNU parted. Podrobnosti o tom, Äo by mohlo byÅ¥ užitoÄné "
+"pri ohlasovaní chyby sa dozviete na http://www.gnu.org/software/parted/"
+"parted.html. Prosím, pošlite emailom hlásenie o chybe na %s obsahujúce "
+"minimálne Äíslo verzie (%s) a nasledujúcu správu:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Podpora Äítania menoviek disku AIX eÅ¡te nie je implementovaná."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Podpora zápisu menoviek disku AIX ešte nie je implementovaná."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora pridávania oblastí do menoviek disku AIX ešte nie je implementovaná."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora kopírovania oblastí v menovkách disku AIX ešte nie je implementovaná."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Podpora nastavovania typu systému oblastí v menovkách disku AIX ešte nie je "
+"implementovaná."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Podpora nastavovania príznakov v menovkách disku AIX ešte nie je "
+"implementovaná."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Parted nedokáže používať súborové systémy HFS na diskoch s veľkosťou sektora "
+"inou ako %d bajtov."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Nie je možné kopírovať rozšírené oblasti."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Nemožno splniť všetky obmedzenia na oddiel."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Nepodarilo sa alokovaÅ¥ Äíslo oblasti."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Nie je možné alokovať položku menovky disku BSD."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Nie je možné alokovať položku menovky disku dasd."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Neplatná tabuľka oblastí na %s - nesprávny podpis %x"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Neplatná tabuľka oblastí - rekurzívna oblasť na %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted nemôže zmeniť veľkosť oblastí, ktoré spravuje Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "nie je možné vytvoriÅ¥ žiadne ÄalÅ¡ie oblasti"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s nemá rozšírenú oblasÅ¥ (oblasÅ¥ hlaviÄky zväzku)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Kontrolný súÄet je zlý, Äo indikuje, že tabuľka oblastí je poÅ¡kodená."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Iba primárne oblasti môžu byť koreňové oblasti."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Iba primárne oblasti môžu byť odkladacie oblasti."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Iba logické oblasti môžu býť zavázací súbor."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"nepodarilo sa nastaviť názov dvh oblasti na %s:\n"
+"Iba logické oblasti (zavádzacie súbory) majú název."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Príliš veľa primárnych oblastí"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "chyba otvárania"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "chyba hľadania"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "chyba Äítania"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "chyba ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "nezhoda verzií API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nepodporovaný typ disku"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nepodporovaný formát disku"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disk sa používa"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Chyba syntaxe v konfiguraÄnom súbore"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Menovka zväzku je poškodená"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Názov dátovej množiny je poškodený"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Nepodarilo sa alokovať pamäť"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Nepodarilo sa overiť zariadenie"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Uvedené zariadenie nie je platné zariadenie DASD"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Osudová chyba"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Pre menovku oddielu nie je miesto."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Na informácie o oblastiach nie je dostatok miesta."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Neplatný VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Nebolo možné zistiť informácie o API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr "SúÄasná verzia API „%d“ nezodpovedá API verzii dasd ovládaÄa „%d“!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Nebolo možné zistiť informácie o disku."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Nebolo možné zistiť informácie o geometrii disku."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Nebolo možné zistiť informácie o veľkosti bloku."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Systém súborov je príliš malý na %lu blokov."
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formát tabuľky oblastí GPT je verzie %x, Äo je novší, než ktorý dokáže "
+"rozpoznať Parted. Prosím, pošlite nám o tom hlásenie!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Zdá sa, že nie všetko miesto dostupné pre %s je využité. Môžete opraviť GPT, "
+"aby využívalo vÅ¡etok dostupný priestor (Äalších %llu blokov) alebo "
+"pokraÄovaÅ¥ s aktuálnym nastavením? "
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Záložná tabuľka GPT nie je na konci disku, ako by mala byť. To možná "
+"znamená, že iný operaÄný systém si myslí, že disk je menší. Mám to opraviÅ¥ "
+"presunutím zálohy na koniec (a odstránením starej zálohy)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Primárna aj záložná tabuľka GPT je poškodená. Skúste vytvoriť novú tabuľku a "
+"obnoviť oblasti pomocou možnosti Partedu rescue."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Záložná tabuľka GPT je poškodená, ale primárna sa zdá byť v poriadku, takže "
+"sa použije primárna."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Primárna tabuľka GPT je poškodená, ale záloha sa zdá byť v poriadku, takže "
+"sa použije záloha."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "nezodpovedá CRC poľa primárnej tabuľky oblastí"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Nepodarilo sa alokovaÅ¥ Äíslo oblasti."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Neplatný podpis %x pre menovky disku Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Mapa oblastí nemá žiadnu položku mapy oblastí!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s je príliš malý pro menovku disku Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Oblasť %d má neplatný podpis %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Oblasť %d má neplatnú dĺžku 0 bajtov."
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Dátová ÄasÅ¥ nezaÄína na zaÄiatku oblasti."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Zavádzacia ÄasÅ¥ diskovej oblasti nezaberá celú oblasÅ¥."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Dátová ÄasÅ¥ oblasti nezaberá celú oblasÅ¥."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Čudná veľkosť bloku v deskriptore zariadenia: %d bajtov nie je deliteľné 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Deskriptor ovládaÄa vraví, že fyzická veľkosÅ¥ bloku je %d bajtov, ale Linux "
+"vraví, že je to %d bajtov."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Nebola nájdená platná mapa oblastí."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Kolidujúce veľkosti položek mapy oblastí! Položka 1 vraví, že je to %d, ale "
+"položka %d vraví, že je to %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Čudné! 2 položky mapy oblastí!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Zmena názvu koreňového alebo odkladacej oblasti zabráni Linuxu v jej "
+"rozpoznaní."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Nemôžem pridaÅ¥ ÄalÅ¡iu oblasÅ¥ - mapa oblastí je príliÅ¡ malá!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Neplatná tabuľka oblastí na %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Oblasť %d nie je zarovnaná na hranice cylindra. Toto zatiaľ nie je "
+"podporované."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Nemožno pridaÅ¥ ÄalÅ¡iu oblasÅ¥."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"dĺžka oblasti of %jd sektorov prekraÄuje maximum stanovené tabuľkou oblastí "
+"%s v dĺžke %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"Äíslo poÄiatoÄného sektora, %jd prekraÄuje prekraÄuje maximum stanovené "
+"tabuľkou oblastí %s %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Chybný kontrolný súÄet na bloku %llu typu %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Nebol nájdený rdb blok, toto by sa nemalo nikdy stať."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Na bloku %d bola detekovaná sluÄka."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Zoznam %s sa zdá byť chybný na bloku %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Nepodarilo sa vypísať zoznam chybných blokov."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Nepodarilo sa vypísať zoznam blokov oblasti."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Nepodarilo sa vypísať zoznam blokov súborového systému."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Nepodarilo sa vypísať zoznam zavádzacích blokov."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Nepodarilo sa zapísať blok oblasti na %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Detekovaná poškodená menovka disku Sun."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Geometria disku CHS (%d,%d,%d) nezodpovedá geometrii uloženej v menovke "
+"disku (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Menovka disku popisuje disk väÄší než %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disk má %d cylindrov, Äo je viac ako maximálny poÄet 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Jediná zostávajúca oblasť je oblasť Celý disk. Vo všeobecnosti nie je dobrý "
+"nápad túto oblasti prepísaÅ¥ skutoÄnou oblasÅ¥ou. Bez nej možno nebude možné "
+"zaviesÅ¥ Solaris a SILO (zavádzaÄ systému pre sparc) ju tiež ocení."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Menovka disku Sun je plná."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "%s otváranie zariadenia zlyhalo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "vyhľadávanie na zariadení zlyhalo"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "zápis na zariadenie zlyhal"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "Äítanie zo zariadenia zlyhalo"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Nebolo možné preÄítaÅ¥ Å¡títok zväzku."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Nebolo možné zapísať štítok zväzku."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Nebolo možné preÄítaÅ¥ Å¡títky VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Nebolo možné preÄítaÅ¥ VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Nebolo možné preÄítaÅ¥ VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Nebolo možné preÄítaÅ¥ VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Nebolo možné preÄítaÅ¥ VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Nebolo možné zapísať štítky VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Nebolo možné zapísať VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Nebolo možné zapísať VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Nebolo možné zapísať VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Nebolo možné zapísať VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+#, fuzzy
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Nebolo možné zapísať VTOC FMT1 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Nedostatok pamäte."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Nebolo možné získať veľkosť špeciálnej jednotky „COMPACT“."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "„%s“ má neplatnú syntax lokácií."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Maximálna hodnota hlaviÄiek je %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Maximálna hodnota sektorov je %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Lokácia %s sa nachádza mimo zariadenia %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Neplatné Äíslo."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Použiť menšiu jednotku namiesto hodnoty < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Nepodarilo sa alokovať blok oblasti\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Nepodarilo sa alokovať blok\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Nebolo možné preÄítaÅ¥ Å¡tartovací blok %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Nebolo možné preÄítaÅ¥ koreňový blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : nepodarilo sa alokovať prvok zoznamu ID\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Nepodarilo sa preÄítaÅ¥ blok %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Chybný kontrolný súÄet bloku %llu typu %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Nepodarilo sa zapísať blok %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : Nepodarilo sa alokovať disk_specific rdb blok\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Nebol nájdený rdb blok, to by sa nikdy nemalo stať\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Nepodarilo sa naÄítaÅ¥ blok oblasti %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted bol nesprávne preložený; štartovací sektor FAT by mal mať 512 "
+"bajtov. Podpora FAT bude vypnutá."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Systém súborov nemá platný podpis systému súborov FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Systém súborov má neplatnú veľkost sektora pre systém súborov FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Systém súborov má neplatnú veľkost klastra pre systém súborov FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Systém súborov má neplatný poÄet rezervovaných sektorov pre systém súborov "
+"FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Súborový systém má má neplatný poÄet FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Geometria CHS súborového systému je (%d, %d, %d), Äo nie je platná hodnota. "
+"Geometria CHS tabuľky oblastí je (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Štartovací sektor FAT vraví, že logická veľkosť sektoru je 0. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"Štartovací sektor FAT vraví, že neexistuje žiadna tabuľka FAT. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Štartovací sektor FAT vraví, že klaster je 0 sektorov. To je divné. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Súborový systém je FAT12, ktorý nie je podporovaný."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Nerozpoznaný podpis odkladacieho oddielu Linuxu v starom štýle „%10s“."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Nerozpoznaný podpis odkladacieho oddielu Linuxu v novom štýle „%10s“."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Nerozpoznaný podpis odkladacieho oddielu Linuxu swsusp „%10s“."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted nedokáže používať súborové systémy HFS na diskoch s veľkosťou sektora "
+"inou ako %d bajtov."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"CHS geometria tohto systému je (%d, %d, %d), Äo nie je platná hodnota. CHS "
+"geometria tabuľky oddielov je (%d, %d, %d). Ak zvolíte Ignorovať, CHS "
+"geometria systému sa nezmení. Ak zvolíte Opraviť, CHS geometria systému sa "
+"zmení na CHS geometriu tabuľky oblastí."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Sektor informácií má nesprávný podpis (%x). Nateraz zvoľte Zrušiť a pošlite "
+"hlásenie o chybe. Ak ste v úzkych, môžete to pravdepodobne bez obáv "
+"ignorovať."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Na zmenšenie tejto oblasti na túto veľkosť potrebujete %s voľného miesta "
+"(momentálne máte voľných iba %s)"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Zmena zaÄiatku klastra = %d, Äo nie je násobok veľikosti klastra %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "Chybná položka adresára pre %s: prvý klaster je znaÄka konca súboru."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Chybná FAT: neukonÄený reÅ¥azec pre %s. Mali by ste spustiÅ¥ dosfsck alebo "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Chybná FAT: klaster %d sa nachádza mimo systému súborov v reťezci pro %s. "
+"Mali by ste spustiť dosfsck alebo scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Chybná FAT: klaster %d má vymenené odkazy s %s. Mali by ste spustiť dosfsck "
+"alebo scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s je %dk, ale má %d klastrov (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Oblasť je príliš veľká/malá pre súborový systém %s"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Tabuľky FAT si nezodpovedajú. Ak neviete, Äo to znamená, zvoľte ZruÅ¡iÅ¥, "
+"spustite na systéme súborov scandisk a potom sa vráťte."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Pro tento typ FAT neexistuje možná konfigurácia."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Systém súborov nemá oÄekávané veľkosti, aby ho Windows mali radi. VeľkosÅ¥ "
+"klastra je %dk (oÄakáva sa %dk); poÄet klastrov je %d (oÄakáva sa %d); "
+"veľkosÅ¥ FAT je %d sektorov (oÄakáva sa %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Systém súborov oznamuje voľné miesto %d klastrov, nie %d klastrov."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"V koreňovom adresári nie je dostatok miesta na vÅ¡etky súbory. Zvoľte buÄ "
+"ZruÅ¡iÅ¥, alebo IgnorovaÅ¥, Äím sa tieto súbory stratia."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Chyba pri zapisování do koreňového adresára."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Ak ponecháte svoj systém súborov vo formáte FAT16, nespôsobíte žiadné nové "
+"problémy."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Ak prevediete oblasť na FAT16 a sú na nej nainštalované MS Windows, musíte "
+"znova nainÅ¡talovaÅ¥ zavádzaÄ systému MS Windows. Ak to chcete urobiÅ¥, mali by "
+"ste si preÄítaÅ¥ príruÄku Parted (alebo príruÄku svojej distribúcie)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Ak ponecháte svoj systém súborov vo formáte FAT32, nespôsobíte žiadné nové "
+"problémy."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Ak prevediete oblasť na FAT32 a sú na nej nainštalované MS Windows, musíte "
+"znova nainÅ¡talovaÅ¥ zavádzaÄ systému MS Windows. Ak to chcete urobiÅ¥, mali by "
+"ste si preÄítaÅ¥ príruÄku Parted (alebo príruÄku svojej distribúcie). "
+"Prevedenie na FAT32 tiež urobí systém súborov neÄitateľný pre MS-DOS, MS "
+"Windows 95a a MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Chcete použiť FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Veľkosť systému súborov je možné túto hodnotu zmeniť iba prevodom na FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Veľkosť systému súborov je možné túto hodnotu zmeniť iba prevodom na FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted nedokáže zmeniť veľkosť tejto oblasti na túto hodnotu. Pracujeme "
+"na tom!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d media %x nezdpovedá media %x štartovacieho sektoru. Pravdepodobne by "
+"ste mali spustiť scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: klaster %ld sa nachádza mimo súborového systému"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: klaster %ld sa nachádza mimo súborového systému"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: nie sú voľné klastre"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Nebolo možné detekovať systém súborov."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "zmena veľkosti súborových systémov %s nie je podporovaná"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Systém súborov je väÄší než zväzok, na ktorom sa nachádza!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Súborový systém obsahuje chyby."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Nebolo možné preÄítaÅ¥ chybné bloky."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Prebieha pokus o registráciu rozsahu poÄínajúc blokom 0x%X, ale iný už na "
+"tejto pozícii existuje. Mali by ste skontrolovať súborový systém!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Prebieha pokus o presunutie rozsahu z bloku 0x%X na blok 0x%X, ale iný už na "
+"tejto pozícii existuje. Toto by sa nemalo stať!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Nebolo možné aktualizovať vyrovnávaciu pamäť rozsahov súboru HFS s CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Pokus o Äítanie súboru HFS s CNID %X za znakom konca súboru."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Nebol nájdený sektor %lli súboru HFS s CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Pokus o zápis súboru HFS s CNID %X za znakom konca súboru."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Nebolo možné aktualizovať vyrovnávaciu pamäť rozsahov súboru HFS+ s CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Pokus o Äítanie súboru HFS+ s CNID %X za znakom konca súboru."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Nebol nájdený sektor %lli súboru HFS+ s CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Pokus o zápis súboru HFS+ s CNID %X za znakom konca súboru."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "PrepáÄte, veľkosÅ¥ HFS nie je zatiaľ možné týmto spôsobom zmeniÅ¥."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "zmenšujem"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Relokácia údajov zlyhala."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Relokácia údajov zanechala na konci zväzku nejaké údaje."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "zapisuje sa HFS Master Directory Block"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "PoÄas otvárania nebol nájdený platný podpis HFS[+X]."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Verzia %d HFS+ nie je podporovaná."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Verzia %d HFSX nie je podporovaná."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Relokácia údajov zanechala na konci zväzku nejaké údaje."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Chyba pri zapisování alokaÄného súboru."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Chyba pri zápise do Äasti pre komaptibilitu alokaÄného súboru."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "zapisuje sa HlaviÄka zväzku HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Vyskytla sa chyba pri hľadaní povinného súboru chybných blokov."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Zdá sa, že sa vyskytla chyba v HFS wrapperi: súbor chybných blokov "
+"neobsahuje vnorený zväzok HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "PrepáÄte, veľkosÅ¥ HFS+ nie je zatiaľ možné týmto spôsobom zmeniÅ¥."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "zmenšuje sa vnorený zväzok HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Zmena veľkosti HFS+ zlyhala."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "zmenšuje sa HPS wrapper"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Aktualizácia HFS wrappera zlyhala."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Toto nie je skutoÄná kontrola %s. Týmto sa získajú Å¡peciálne nízkoúrovňové "
+"súbory pre úÄely ladenia."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Chybný kontrolný súÄet zoznamu blokov."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Neplatná veľkosÅ¥ bloku transakcií poÄas prehrávania žurnálu (%i bajtov)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Žurnál uložený mimo zväzku nie je podporovaný. Pokúste sa deaktivovať žurnál "
+"a znova spustiť Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Ofset žurnálu nie je násobkom veľkosti sektora."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Neplatné magické hodnoty v hlaviÄke žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"VeľkosÅ¥ žurnálu sa nezhoduje v info bloku žurnálu a v hlaviÄke žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Niektoré polia hlaviÄky nie sú násobkom veľkosti sektora."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Veľkosť sektora uložená v žurnále nie je 512 bajtov. Parted podporuje iba "
+"sektory s dĺžkou 512 bajtov."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Chybný kontrolný súÄet žurnálu."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Žurnál nie je prázdny. Parted musí prehrať transakcie pred otvorením "
+"súsborového systému. Týmto sa súborový systém zmení."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"HlaviÄka zväazku hlavného bloku adresárov sa v dôsledku prehrania žurnálu "
+"zmenila. Mali by ste znova spustiť Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Rozsah nebol premiestnený."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Odkaz na rozsah pochádza z miesta, odkiaľ by nemal. Mali by ste skontrolovať "
+"súborový systém!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Tento zväzok HFS nemá katalógový súbor. To je veľmi nezvyÄajné!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "Tento zväzok HFS nemá súbor preteÄení rozsahov. To je dosÅ¥ nezvyÄajné!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Súbor preteÄení rozsahov by nemal obsahovaÅ¥ svoje vlastné rozsahy! Mali by "
+"ste skontrolovať súborový systém!"
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Nebolo možné udržiavať kópiu systému súborov v pamäti."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Zoznam chybných blokov nebolo možné naÄítaÅ¥."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Vyskytla sa chyba pri premiestňovaní rozsahov."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Tento zväzok HFS+ nemá katalógový súbor. To je veľmi nezvyÄajné!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Tento zväzok HFS+ nemá súbor preteÄení rozsahov. To je dosÅ¥ nezvyÄajné!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "zobrazí túto správu pomocníka"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "vypíše rozloženie oblastí na všetkých blokových zariadeniach"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "zobrazí strojovo Äitateľný výstup"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "zobrazí strojovo Äitateľný výstup"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nikdy nežiada o zásah používateľa"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "zobrazí verziu"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "zarovnanie nových oblastí"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"ÄŒÃSLO je Äíslo oblasti, ktorú používa Linux. Na menovkách disku msdos majú "
+"primárne oblasti Äísla 1-4 a logické oblasti sú od 5 Äalej.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "TYP-JMENOVKY je jeden z: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "PREPÃNAÄŒ je jeden z: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "JEDNOTKA je jedno z: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "požadovan zarovnanie: minimálne alebo optimálne"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "TYP-ODDIELU je jeden z: primary, logical, extended\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "TYP-FS je jeden z: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ZAČIATOK a KONIEC sú pozície na disku, napr 4 GB alebo 10%. Záporné hodnoty "
+"sa poÄítajú od konca disku. Napríklad -1s znamená presne posledný sektor.\n"
+
+#: parted/parted.c:172
+#, fuzzy
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"ZAČIATOK a KONIEC sú pozície na disku, napr 4 GB alebo 10%. Záporné hodnoty "
+"sa poÄítajú od konca disku. Napríklad -1s znamená presne posledný sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STAV je jeden z: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "zariadenie je obvykle /dev/hda alebo /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NÃZEV je ľubovoľné slovo\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Toto je slobodný softvér pod Všeobecnou verejnou licenciou GNU.\n"
+"\n"
+"Tento program je šírený v nadeji, že bude užitoÄný, ale\n"
+"BEZ AKEJKOĽVEK ZÃRUKY; bez i implicitnej záruky PREDAJNOSTI\n"
+"Äi VHODNOSTI NA URÄŒITà ÚČEL. ÄŽalÅ¡ie podrobnosti nájdete v\n"
+"GNU General Public License.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(zostávajúci Äas %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Oblasť %s sa používa. Predtým, než vykonáte zmeny pomocou Parted ju musíte "
+"odpojiť."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Oblasti na %s sa používajú."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Existujúca menovka disku na %s sa zniÄí a vÅ¡etky dáta na oddiele sa stratia. "
+"Chcete pokraÄovaÅ¥?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Typ novej menovky disku?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Typ oblasti?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Názov oblasti?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Typ súborového systému?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "ZaÄiatok?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Koniec?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Vyžiadali ste oblasť od %s do %s (sektory %llu..%llu).\n"
+"Najbližšie možné miesto je od %s do %s (sektory %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Je to pre vás ešte prijateľné?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Výsledná oblasÅ¥ nie je správne zarovnaná, Äo sa prejaví zhorÅ¡eným výkonom."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Menovky disku %s nepodporujú rozšírené oblasti."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Číslo oblasti?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Menovky disku %s nepodporujú rozšírené oblasti."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Typ oblasti?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Neplatné Äíslo."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Typ oblasti?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Neplatné Äíslo."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS geometria cylinder,hlava,sektor: %d,%d,%d. Každý cylinder má %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Veľkosť sektora (logická/fyzická): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Tabuľka oblastí: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Príznaky disku: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Číslo"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "ZaÄiatok"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Koniec"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Veľkosť"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Typ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Súborový systém"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Názov"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "PrepínaÄe"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Voľné miesto"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Bola nájdená oblasť %s %s na %s -> %s. Chcete ju pridať do tabuľky oblastí?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "hľadám systémy súborov"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nové zariadenie?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "typ zarovnania(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d zarovnané\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d nezarovnané\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "PrepínaÄ, který sa má zmeniÅ¥?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nový stav?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Jednotka?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "kontrola-zarovnania"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TYP N skontrolovať zarovnanie TYP(min|"
+"opt) na oblasti N"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [PRÃKAZ] vypíše vÅ¡eobecného pomocníka alebo "
+"pomocníka o PRÃKAZE"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel TYP-MENOVKY vytvorí novú menovku disku (tabuľku "
+"oblastí)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart TYP-ODDIELU [TYP-FS] ZAČIATOK KONIEC vytvorí oblasť"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"„mkpart“ vytvorí oblasť bez toho, aby vytvoril nový systém súborov na nej. "
+"TYP-FS môže špecifikovať zodpovedajúci ID oblasti.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name MINOR NÃZOV nazvaÅ¥ oblasÅ¥ MINOR NÃZVOM"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|ÄŒÃSLO] zobrazí tabuľku oblastí, dostupné "
+"zariadenia, voľné miesto, všetky nájdené oblasti alebo konkrétnu oblasť"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"„print“ bez argumentov zobrazí celú tabuľku oblastí. S nasledovnými "
+"argumentami vÅ¡ak vykoná rôzne iné Äinnosti.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : zobrazí všetky aktívne blokové zariadenia\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : zobrazí informácie o voľnom mieste nerozdelenom medzi oblasti "
+"na aktuálnom blokovom zariadení\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : zobrazí tabuľky oblastí všetkých aktívnych blokových "
+"zariadení\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit ukonÄiÅ¥ program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ZAČIATOK KONIEC zachrániť stratenú oblasť v "
+"blízkosti ZAČIATKU a KONCA"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "move ÄŒÃSLO ZAÄŒIATOK KONIEC presunúť oblasÅ¥ ÄŒÃSLO"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm MINOR odstrániť oblasť MINOR"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr ""
+"select zariadenie zvoliť zariadenie, ktoré sa má "
+"upravovať"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "sada_diskov"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "sada_diskov PREPÃNAÄŒ STAV zmeniÅ¥ voľbu na oblasti MINOR"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [PRÃZNAK] prepnúť PRÃZNAK na vybranom zariadení"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set MINOR PREPÃNAÄŒ STAV zmeniÅ¥ voľbu na oblasti MINOR"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [ÄŒÃSLO [PRÃZNAK]] prepnúť PRÃZNAK na oblasti ÄŒÃSLO"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+#, fuzzy
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr "move ÄŒÃSLO ZAÄŒIATOK KONIEC presunúť oblasÅ¥ ÄŒÃSLO"
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit JEDNOTKA nastaviť predvolenú jednotku na "
+"JEDNOTKA"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version zobrazí verziu a informácie o "
+"autorských právach GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"„version“ zobrazí informácie o autorských právach a verzii tejto kópie GNU "
+"Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Použitie: %s [-hlmsv] [-a<zarovnanie>] [ZARIADENIE [PRÃKAZ [PARAMETRE]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Nebolo nájdené žiadne zariadenie"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "UPOZORNENIE: Nie ste superpoužívateľ. Dávajte pozor na oprávnenia.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Pred reÅ¡tartom by ste mali reinÅ¡talovaÅ¥ svoj zavádzaÄ systému. Viac "
+"informáci nájdete v kapitole 4 Používateľskej dokumentácie Parted."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Môže byť potrebné aktualizovať /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Vitajte v GNU Parted! Zoznam príkazov zobrazíte napísaním „help“.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Použitie: parted [PREPÃNAÄŒ]... [ZARIADENIE [PRÃKAZ [PARAMETRE]...]...]\n"
+"VykonaÅ¥ PRÃKAZy s PARAMETRami na ZARIADENIE. Ak nie je zadaný PRÃKAZ, beží v "
+"interaktívnom režime.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"našli ste chybu v GNU Parted! Musíte spraviť nasledovné:\n"
+"\n"
+"Nepanikárte! Chyba pravdepodobne neovplyvnila vaše údaje.\n"
+"Pomôžte nám opraviť ju tým, že urobíte nasledovné:\n"
+"\n"
+"Skontrolujte, Äi chyba už nebola opravená v poslednej verzii\n"
+"GNU Parted, ktorú nájdete na:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Prosím, pred oznámením chyby ju overte v tejto verzii.\n"
+"\n"
+"Ak chyba nebola zatiaľ opravená alebo neviete ako ju overiť,\n"
+"navštívte prosím webstránku GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"Vaše hlásenie by malo obsahovať verziu tohto vydania (%s)\n"
+"spolu s nižšie zobrazeným chybovým hlásením, výstup\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"a históriu príkazov, ktoré ste zadali. Tiež doplňte akékoľvek\n"
+"ÄalÅ¡ie informácie o vaÅ¡om systéme, ktoré považujete za\n"
+"relevantné.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"História príkazov:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Chyba: SEGV_MAPERR (Adresa nemá mapovanie na objekt)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Chyba: SEGV_ACCERR (Neplatné oprávnenia mapovaného objektu)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Chyba: Vyskytol sa všeobecný signál SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Chyba: FPE_INTDIV (Celé Äíslo: delenie nulou)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_INTOVF (Celé Äíslo: preteÄenie)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTDIV (Desatinné Äíslo: delenie nulou)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTOVF (Desatinné Äíslo: preteÄenie)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTUND (Desatinné Äíslo: podteÄenie)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTRES (Desatinné Äíslo: nepresný výsledok)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTINV (Desatinné Äíslo: neplatná operácia)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Chyba: FPE_FLTSUB (Desatinné Äíslo: dolný index mimo rozsahu)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Chyba: Vyskytol sa všeobecný signál SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLOPC (Neplatný opkód)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLOPN (Neplatný operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLADR (Neplatný režim adresácie)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Chyba: ILL_ILLTRP (Neplatné zachytenie)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Chyba: ILL_PRVOPC (Privilegovaný opkód)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Chyba: ILL_PRVREG (Privilegovaný register)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Chyba: ILL_COPROC (Chyba koprocesora)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Chyba: ILL_BADSTK (Vnútorná chyba zásobníka)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Chyba: Vyskytol sa všeobecný signál SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "neplatný token: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "OÄakáva sa Äíslo oblasti."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Oblasť neexistuje."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "OÄakáva sa typ systému súborov."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Neznámy typ systému súborov „%s“."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "OÄakáva sa typ menovky disku."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Nie je možné vytvoriÅ¥ ÄalÅ¡ie oblasti."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "OÄakáva sa typ oblasti."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "zap"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "vyp"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimálne"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimálne"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "VOĽBY:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "PRÃKAZy:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Chyby hláste <%s>.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Používa sa %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Príkaz nedáva zmysel v neinteraktívnom režime.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: voľba „--%s“ nepovoľuje argument\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: nerozpoznaná voľba „--%s“\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: voľba „-W %s“ nepovoľuje argument\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: voľba „-W %s“ vyžaduje argument\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Domovská stránka %s: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "neplatný %s%s argument „%s“"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "neplatná prípona v %s%s argument „%s“"
+
+#, c-format
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s argument „%s“ príliš veľký"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Nebolo možné znovu naÄítaÅ¥ tabuľku oblastí, takže budete musieÅ¥ pred "
+#~ "pripojením zmenených oblastí reÅ¡tartovaÅ¥ poÄítaÄ. Tiež musíte pred "
+#~ "reÅ¡tartom znovu nainÅ¡talovaÅ¥ svoj zavádzaÄ systému (Äo môže vyžadovaÅ¥ "
+#~ "pripojenie zmenených oblastí). Nie je možné vykonať oboje! Takže budete "
+#~ "musieť zaviesť systém zo záchranného disku a znovu nainštalovať svoj "
+#~ "zavádzaÄ systému odtiaľ. PodrobnejÅ¡ie informácie sa doÄítate v kapitole 4 "
+#~ "Používateľskej dokumentácie Parted."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Tabuľku oblastí na %s nie je možné znovu naÄítaÅ¥ (%s). To znamená, že "
+#~ "Hurd nevie niÄ o zmenách, ktoré ste vykonali. Než budete Äokoľvek robiÅ¥ s "
+#~ "%s, mali by ste reÅ¡tartovaÅ¥ svoj poÄítaÄ."
+
+#, c-format
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Nepodarilo sa pridať oblasť %d (%s)"
+
+#, c-format
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "Jádro nedokázalo znovu naÄítaÅ¥ tabuľku oblastí na %s (%s). To znamená, že "
+#~ "Linux vedieť o zmenách, ktoré ste vykonali."
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Rozšírené oblasti nie je možné skryť na štítkoch diskov msdos."
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s obsahuje podpisy GPT, Äo znamená, že obsahuje tabuľku GPT. Nemá ale "
+#~ "platnú falošnú tabuľku oddielov DOS, ktorú by mal mať. Možno bola "
+#~ "poškodená - napr. programom, ktorý nerozumie tabuľkám oblastí GPT. Alebo "
+#~ "ste možno odstránili tabuľku oblastí GPT a teraz používate tabuľku "
+#~ "oblastí DOS. Je toto tabuľka oblastí GPT?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Å tartovacia oblasÅ¥ nezaÄína na zaÄiatku oblasti."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Systém súborov má logickú veľkost sektora %d. Je známe, že GNU Parted "
+#~ "nepracuje správne s veľkosťou sektora inou ako 512 bajtov."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "súbor %s je oznaÄený ako systémový súbor. To znamená, že jeho presun môže "
+#~ "zpôsobiť, že niektoré programy prestanú fungovať."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " ÄŒÃSLO : zobrazí podrobnejÅ¡ie informácie o tejto konkrétnej oblasti\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Použitie: %s [VOĽBA]\n"
+#~ " alebo: %s ZARIADENIE MINOR\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "VyÄistiÅ¥ nevyužité miesto na oblasti FAT (a nástroj na testovanie GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help zobraziÅ¥ tohto pomocníka a skonÄiÅ¥\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version vypísaÅ¥ informácie o verzii a skonÄiÅ¥\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "príliš málo argumentov"
+
+#~ msgid "too many arguments"
+#~ msgstr "príliš veľa argumentov"
+
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "neplatn0 vedľajÅ¡ie Äíslo zariadenia: %s"
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pro otváranie súborových systémov %s ešte nie je implementovaná."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pre vytváranie súborových systémov %s ešte nie je implementovaná."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pre kontrolu súborových systémov %s ešte nie je implementovaná."
+
+#~ msgid "raw block copying"
+#~ msgstr "priame kopírovánie blokov"
+
+#~ msgid "growing file system"
+#~ msgstr "zväÄÅ¡ovanie systému súborov"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Nemožno kopírovať do prekrývajúcej sa oblasti."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Priama podpora pre kopírovanie súborových systémov zatiaľ nie je "
+#~ "implementovaná pre %s. Ale je implementovaná podpora zmeny veľkosti. "
+#~ "Preto nie je možné skopírovať súborový systém ak je nová oblasť najmenej "
+#~ "taká veľká ako tá stará. Takže buÄ zmenÅ¡ite oblasÅ¥, ktorú sa pokúšate "
+#~ "kopírovaÅ¥ alebo kopírujte na väÄÅ¡iu oblasÅ¥."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Podpora pre kopírovánie súborových systémov %s ešte nie je implementovaná."
+
+#~ msgid "creating"
+#~ msgstr "vytvára sa"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "Systém súborov je v neplatnom stave. Že by bol pripojený?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr "Súborový systém má starý formát (nie je možné meniť jeho veľkosť)."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr "Neplatný poÄet voľných blokov. Najprv spustite reiserfsck --check."
+
+#~ msgid "checking"
+#~ msgstr "kontroluje sa"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Zdá sa, že Reiserfs strom je poškodený. Najpv spustite reiserfsck --"
+#~ "check."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Systém súborov reiserfs absolvoval základnú kontrolu. Pre podrobnejšiu "
+#~ "kontrolu použite reiserfsck --check."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Ľutujem, zatiaľ nie je možné presúvaÅ¥ zaÄiatok oblastí reiserfs."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr ""
+#~ "Nebolo možné znovu otvoriÅ¥ abstrakÄnú vrstvu zariadenia pre Äítanie/zápis."
+
+#~ msgid "expanding"
+#~ msgstr "zväÄÅ¡uje sa"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Nebolo možné vytvoriÅ¥ abstrakÄnú vrstvu reiserfs zariadenia."
+
+#~ msgid "copying"
+#~ msgstr "kopíruje sa"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Nebolo možné preložiť symbol %s. Chyba: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted našiel neplatnú knižnicu libreiserfs."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted zistil nezhodu verzií rozhrania libreiserfs. Nájdená %d-%d, "
+#~ "požadovaná %d. Podpora ReiserFS bude vypnutá."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Nekonzistentné deskriptory skupín!"
+
+#~ msgid "File system full!"
+#~ msgstr "Súborový systém je plný!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr "Neplatný superblok. Ste si istý, že toto je systém súborov ext2?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Systém súborov má chyby! Mali by ste spustiť e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Systém súborov nebol Äisto odpojený! Mali by ste spustiÅ¥ e2fsck. Úpravy "
+#~ "neÄistého systému súborov môžu spôsobiÅ¥ jeho vážne poÅ¡kodenie."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "Súborový systém má zapnutú nekompatibilnú vlastnosť. Kompatibilné "
+#~ "vlastnosti sú has_journal, dir_index, filetype, sparse_super a "
+#~ "large_file. Na odstránenie vlastností použite tune2fs alebo debugfs."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Chyba pri alokácii buffer cache."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Bol nájdený inode s nesprávnym poÄtom odkazov. RadÅ¡ej najskôr spustite "
+#~ "e2fsck!"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Nedostatok voľných inodov!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr ""
+#~ "Systém súborov je príliš plný na to, aby bolo možné odstrániť skupinu!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Systém súborov má príliš mnoho alokovaných inodov na to, aby bolo možné "
+#~ "odstrániť skupinu!"
+
+#~ msgid "adding groups"
+#~ msgstr "pridávam skupiny"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Váš systém súborov je príliš plný na to, aby bolo možné zmeniť jeho "
+#~ "veľkosť na %d blokov. Ľutujem."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Váš systém súborov má príliš mnoho použitých inodov na to, aby bolo možné "
+#~ "zmeniť jeho veľkosť na %i blokov. Ľutujem."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "Systém súborov nebol správne odpojený! Mali by ste spustiť e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Systém súborov má zapnutú schopnosť „dir_index“. Parted môže zmeniť "
+#~ "veľkosť súborového systému, iba ak túto schopnosť zakáže. Môžete ju "
+#~ "neskôr povoliť spustením „tune2fs -O dir_index zariadenie“ a potom "
+#~ "„e2fsck -fD zariadenie“."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Operácia zmeny veľkosti na tomto disku použije EXPERIMENTÃLNY kód,\n"
+#~ "ktorý ho MôŽE POŠKODIŤ (hoci zatiaľ nikto také poškodenie neoznámil).\n"
+#~ "Mali by ste predtým minimálne svoje dáta zálohovať a spustiť „e2fsck -f“\n"
+#~ "potom."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Boli nájdené bloky s krížovými odkazmi! Radšej najskôr spustite e2fsck!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Blok %i nemá odkaz? Čudné."
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Blok %i nemal byÅ¥ oznaÄený (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Súborový systém ext2 absolvoval základnú kontrolu. Pre podrobnejšiu "
+#~ "kontrolu použite program e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Ľutujem, zatiaľ nie je možné presúvaÅ¥ zaÄiatok oddielov ext2!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Nemôžem vyprázdniť vyrovnávaciu pamäť!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "zapisujem metadáta skupín"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Systém súborov príliš malý pre ext2."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Príliš veľa zlých stránok."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "Oblasť musí mať jeden z nasledovných TYP-FS: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Existujúci súborový systém sa zniÄí a vÅ¡etky dáta na oblasti sa stratia. "
+#~ "Chcete pokraÄovaÅ¥?"
+
+#~ msgid ""
+#~ "WARNING: you are attempting to use %s to operate on (%s) a file system.\n"
+#~ "%s's file system manipulation code is not as robust as what you'll find "
+#~ "in\n"
+#~ "dedicated, file-system-specific packages like e2fsprogs. We recommend\n"
+#~ "you use %s only to manipulate partition tables, whenever possible.\n"
+#~ "Support for performing most operations on most types of file systems\n"
+#~ "will be removed in an upcoming release.\n"
+#~ msgstr ""
+#~ "UPOZORNENIE: pokúšate sa použiť %s na pracovanie na (%s) súborovom "
+#~ "systéme.\n"
+#~ "manipulácia so súborovým systémom %s nie je taká robustná ako tá, ktorú "
+#~ "nájdete\n"
+#~ "v na to urÄených balíkoch Å¡pecifických pre súborový systém ako "
+#~ "e2fsprogs.\n"
+#~ "OdporúÄame, aby ste používali %s iba na manipuláciu s tabuľkami oblastí\n"
+#~ "vždy, keÄ je to možné. Podpora vykonávania väÄÅ¡iny operácií na väÄÅ¡ine\n"
+#~ "typov súborových systémov bude v nasledovnom vydaní odstránená.\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Číslo zdrojovej oblasti?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Číslo cieľovej oblasti?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr "Rozšírené oblasti nemôžu mať súborový systém. Chceli ste mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Nie je možné presunúť rozšírenú oblasť."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr "Nie je možné presunúť oblasti na seba. Možno skúste použiť resize?"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Drobné: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "PrepínaÄe: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Systém súborov: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Veľkosť: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Minimálna veľkosť: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Maximálna veľkosť: "
+
+#~ msgid "check"
+#~ msgstr "check"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check ÄŒÃSLO vykonaÅ¥ jednoduchú kontrolu "
+#~ "systému súborov"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [OD-ZARIADENIE] OD-ÄŒÃSLO DO-ÄŒÃSLO skopírovaÅ¥ systém súborov na inú "
+#~ "oblasť"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partition NUMBER"
+#~ msgstr ""
+#~ "mkfs ÄŒÃSLO TYP-FS vytvorí systém súborov FS-TYPE "
+#~ "na oblasti ÄŒÃSLO"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs TYP-ODDIELU TYP-FS ZAČ KONIEC vytvoriť oblasť se systémom "
+#~ "súborov"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "rescue ÄŒÃSLO ZAÄŒIATOK KONIEC zmeniÅ¥ veľkosÅ¥ oblasti ÄŒÃSLO a "
+#~ "jej súborového systému"
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "Toto nie je ECKD disk! Tento typ disku nie je podporovaný!"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Zariadenie %s má veľkosÅ¥ logického sektora %lld. Nie vÅ¡etky Äasti GNU "
+#~ "Parted to momentálne podporujú a pracovný kód je VYSOKO EXPERIMENTÃLNY.\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: neprípustná voľba -- %c\n"
+
+#~ msgid ""
+#~ "Could not determine minimum io size for %s: %s.\n"
+#~ "Using the default size (%lld)."
+#~ msgstr ""
+#~ "Nebolo možné urÄiÅ¥ minimálnu veľkosÅ¥ io pre %s: %s.\n"
+#~ "Používa sa štandardná veľkosť sektora (%lld)."
+
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything about the modifications you made until "
+#~ "you reboot. You should reboot your computer before doing anything with "
+#~ "%s."
+#~ msgstr ""
+#~ "Jadro nemohlo znovu naÄítaÅ¥ tabuľku oddielov na %s (%s). To znamená, že "
+#~ "Linux nebude vedieť o zmenách, ktoré ste vykonali, pokým nereštartujete "
+#~ "systém - takže by ste nemali %s pripájať ani ho pred reštartom akokoľvek "
+#~ "používať."
+
+#~ msgid "Unable to determine the block size of this dasd"
+#~ msgstr "Nie je možné urÄiÅ¥ veľkosÅ¥ bloku tohto dasd."
+
+#~ msgid "File system has an incompatible feature enabled."
+#~ msgstr "Systém súborov má povolenou nekompatibilnú vlastnosť."
+
+#~ msgid "Unrecognised linux swap signature '%10s'."
+#~ msgstr "Nerozpoznaný podpis odkladacieho oddielu Linuxu „%10s“."
+
+#~ msgid ""
+#~ "%s read error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s chyba Äítania\n"
+#~ "%s\n"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s write error\n"
+#~ "%s\n"
+#~ msgstr "%s pri zápise na %s"
+
+#~ msgid ""
+#~ "%s IOCTL error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s chyba IOCTL\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s Config file syntax error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s Chyba syntaxe konfiguraÄného súboru.\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s space allocation\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s alokácia miesta\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s Fatal error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s Osudová chyba\n"
+#~ "%s\n"
+
+#~ msgid "File system?"
+#~ msgstr "Systém súborov?"
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "ak je treba, požiada o zásah používateľa"
+
+#, fuzzy
+#~ msgid ""
+#~ "Without arguments, print displays the entire partition table. With "
+#~ "'free'\n"
+#~ "argument, information about free space will be displayed otherwise if a\n"
+#~ "partition number is given, then more detailed information is displayed\n"
+#~ "about that partition. If the 'all' argument is passed instead, partition\n"
+#~ "information for all devices will be displayed.\n"
+#~ msgstr ""
+#~ "print bez argumentov zobrazí celú tabuľku oddielov. Je-li zadáno Äíslo "
+#~ "oddielu, zobrazí se o tomto oddielu podrobnejší informace.\n"
diff --git a/po/sl.gmo b/po/sl.gmo
new file mode 100644
index 0000000..bd54b92
--- /dev/null
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 0000000..6dbb050
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,3782 @@
+# Slovenian translation for parted
+# Copyright (c) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Andrej ŽnidarÅ¡iÄ <andrej.znidarsic@gmail.com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 2.3\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2010-11-11 19:44+0000\n"
+"Last-Translator: Andrej ŽnidarÅ¡iÄ <andrej.znidarsic@gmail.com>\n"
+"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
+"Language: sl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || "
+"n%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "neveljaven argument %s za %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "dvoumen argument %s za %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Veljavni argumenti so:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "napaka pisanja"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Neznana sistemska napaka"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: možnost '%s' je dvoumna\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: možnost '%s' je dvoumna\n"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: neprepoznana možnost '%c%s'\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: možnost '%c%s' ne dovoljuje argumenta\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: možnost '--%s' zahteva argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: neveljavna možnost -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: možnost zahteva argument -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "\""
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "\""
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Uspeh"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ni zadetkov"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Neveljaven logiÄni izraz"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Neveljaven znak za primerjavo"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Neveljavno ime razreda znakov"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "ZakljuÄna obratna poÅ¡evnica"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Neveljaven povratni sklic"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "NezakljuÄen [ ali [^"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "NezakljuÄen ( ali \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "NezakljuÄen \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Neveljavna vsebina \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Neveljaven konec razpona"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Pomnilnik je izÄrpan"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Neveljaven predhodni logiÄni izraz"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Prehiter konec logiÄnega izraza"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "LogiÄni izraz je prevelik"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "OdveÄni ) ali \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "ManjkajoÄ predhodni logiÄni izraz"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[jJdD]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Paket je pripravil %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Paket je pripravil %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"GPLv3+: GNU GPL, razliÄica 3 ali poznejÅ¡a <http://www.gnu.org/licenses/gpl."
+"html>.\n"
+"To je prost program; lahko ga redistribuirate in/ali spreminjate.\n"
+"Za izdelek ni NOBENEGA JAMSTVA, do z zakonom dovoljene meje.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Avtor: %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Avtorja: %s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Avtorji: %s, %s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s\n"
+"in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s in %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Avtorji: %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s in drugi.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"HroÅ¡Äe prijavite na: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "HroÅ¡Äe programa %s prijavite na: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "DomaÄa stran %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+"SploÅ¡na pomoÄ za uporabo programov GNU: <http://www.gnu.org/gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "pomnilnik je porabljen"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Odtis diska"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Napaka med odpiranjem %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%s ni mogoÄe odpreti za branje in pisanje (%s). %s je odprt samo za branje."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s med iskanjem za branje na %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s med branjem na %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Pisanje v %s ni mogoÄe, ker je odprt samo za branje."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s med iskanjem za pisanje na %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s med pisanjem na %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Poskusite `%s --help' za veÄ podrobnosti.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Uporaba: %s [MOŽNOSTI] [NAPRAVE] ...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Operacijski sistem obvesti o spremembah v preglednici razdelkov.\n"
+"\n"
+" -d, --dry-run v resnici ne obvesti operacijskega sistema\n"
+" -s, --summary izpiše povzetek vsebine\n"
+" -h, --help prikaže to pomoÄ in konÄa\n"
+" -v, --version prikaže podrobnosti o razliÄici in konÄa\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Ko NAPRAVA ni podana, preiÅ¡Äe vse razdelke.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"HroÅ¡Äe prijavite na <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Ni bilo mogoÄe odpreti %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Zaloge ni mogoÄe preveriti."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s poizkus usklajevanja %s z diskom"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Ni mogoÄe izvesti ukaza stat na napravi %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Vrste dm za %s ni mogoÄe doloÄiti."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Velikosti sektorja %s ni mogoÄe doloÄiti: %s.\n"
+"Uporabljena bo privzeta velikost sektorja (%lld):"
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"FiziÄne velikosti sektorja za %s ni mogoÄe doloÄiti.\n"
+"Uporabljena bo logiÄna velikost sektorja (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Velikosti %s ni mogoÄe doloÄiti (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Izvorni IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Identitete naprave %s ni mogoÄe dobiti - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Naprava %s ima veÄ (%d) logiÄnih sektorjev na vsakem fiziÄnem sektorju.\n"
+"GNU Parted PREIZKUSNO podpira nekatere kombinacije oznak diskov/datoteÄnih "
+"sistemov. Naprimer GPT in ext2/3.\n"
+"Za trenutne podatke preverite spletno stran."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Napaka med zaÄenjanjem SCSI naprave %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, fuzzy, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Naprava %s ima niÄelno dolžino, zato ne more shraniti datoteÄnega sistema "
+"ali preglednice razdelkov. Morda ste izbrali napaÄno napravo?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Ni mogoÄe doloÄiti geometrije datoteke/naprave %s. Parted uporabite le, Äe "
+"RESNIÄŒNO veste kaj poÄnete!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Izvorna kartica shrambe SD/MMC"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Nova naprava?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID krmilnik"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Naprava Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Naprava ATA preko Eternet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "Pogon IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Krmilnik ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Krmilnik I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UporabniÅ¡Äi naÄin Linux UBD"
+
+#: libparted/arch/linux.c:1546
+#, fuzzy
+msgid "Loopback device"
+msgstr "Izvorna naprava?"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux preslikovalnik naprav (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Naprava Xen Virtual Block"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Neznano"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Naprava Virtio Block"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Polje Linux Software RAID"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Nepodprta vrsta naprave"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Napaka med opravilom fsyncing/zapiranjem %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, fuzzy, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "konec datoteke med branjem %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Napaka med obveÅ¡Äanjem jedra o spremembah razdelka %s -- %s. Linux ne bo "
+"imel podatkov o spremembah %s do ponovnega zagona -- razdelka ne "
+"priklapljajte ali uporabljajte do ponovnega zagona."
+
+#: libparted/arch/linux.c:2811
+#, fuzzy, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Velikosti in dolžine %s ni mogoÄe doloÄiti."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Razdelek(ki) %s na %s je/so bil(i) zapisan(i), vendar jedra ni bilo mogoÄe "
+"obvestiti o spremembi, najverjetneje zato ker je/so v uporabi. Zaradi tega "
+"je/so stari razdelek(ki) Å¡e vedno v uporabi. Pred nadaljnjimi spremembami "
+"priporoÄamo ponoven zagon."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Konec ne more biti pred zaÄetkom! (zaÄetni sektor=%jd dolžina=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Poskus zapisovanja sektorjev %ld-%ld zunaj razdelka na %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "preverjanje slabih blokov"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Ukaz backtrace ima %d klicev na skladu:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Trditev (%s) na %s:%d v funkciji %s() ni uspela."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: neprepoznana oznaka diska"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"libparted ne podpira zapisovanja na %s. Morda je bil preveden samo za branje."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Razdelek %d je %s, vendar je datoteÄni sistem %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "poravnava_cilindrov"
+
+#: libparted/disk.c:843
+#, fuzzy
+msgid "pmbr_boot"
+msgstr "zagon"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Neznana zastavica diska, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "oznake diska %s ne podpirajo razširjenih razdelkov."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "oznake diska %s ne podpirajo logiÄnih ali razÅ¡irjenih razdelkov."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "PreveÄ osnovnih razdelkov."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Dodajanje logiÄnega razdelka na %s ni mogoÄe, ker razÅ¡irjeni razdelek ne "
+"obstaja."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Ni mogoÄe imeti veÄ kot enega razÅ¡irjenega razdelka na %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "LogiÄni razdelek ne sme biti zunaj razÅ¡irjenega razdelka."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "LogiÄni razdelek ne sme biti zunaj razÅ¡irjenega razdelka na %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Osnovni razdelek ne more biti znotraj razširjenega razdelka."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Razdelek izven diska ni mogoÄ!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Razdelki se ne smejo prekrivati."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metapodatki"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "prosto"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "razširjen"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logiÄni"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "osnovni"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "zagon"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "korenski"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "izmenjalni razdelek"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "skrito"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+#, fuzzy
+msgid "msftdata"
+msgstr "metapodatki"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr ""
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr ""
+
+#: libparted/disk.c:2578
+#, fuzzy
+msgid "esp"
+msgstr "Da"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "zagon"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Neznana zastavica razdelka, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Podrobnosti"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Opozorilo"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Napaka"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Usodno"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "HroÅ¡Ä"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Ni podprto"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Popravi"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Da"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Ne"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "V redu"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Poskusi znova"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Prezri"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "PrekliÄi"
+
+#: libparted/exception.c:134
+#, fuzzy, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"V GNU Parted je bil zaznan hroÅ¡Ä. Na spletni strani parted http://www.gnu."
+"org/software/parted/parted.html lahko pridobite veÄ podrobnosti o tem kaj bi "
+"bilo uporabno za poÅ¡iljanje hroÅ¡Äa! Prosimo, poÅ¡ljite poroÄilo o hroÅ¡Äu na "
+"bug-parted@gnu.org vsaj s podatki o razliÄici (%s) in naslednjim "
+"sporoÄilom: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Podpora za branje diskov oznake AIX Å¡e ni dodana."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Podpora za pisanje diskov oznake AIX Å¡e ni dodana."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "Podpora za dodajanje razdelkov diskom oznake AIX Å¡e ni dodana."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "Podpora za podvajanje razdelkov diskov oznake AIX Å¡e ni dodana."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Podpora za nastavljanje vrste sistema razdelkov v diskih oznake AIX Å¡e ni "
+"dodana."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "Podpora za nastavljanje zastavic diskov oznake AIX Å¡e ni dodana."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Parted ne more uporabiti datoteÄnega sistema HFS na disku z velikostjo "
+"sektorja razliÄno od %d bajtov."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "RazÅ¡irjenega razdelka ni mogoÄe prekopirati."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Vsem omejitvam razdelka ni mogoÄe zadostiti."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Dodeljevanje Å¡tevilke razdelka ni uspelo."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Dodeljevanje reže bsd disklabel ni uspelo."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Dodeljevanje reže dasd disklabel ni uspelo."
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Neveljavna preglednica razdelka na %s -- napaÄen podpis %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Neveljavna preglednica razdelka - rekurzivni razdelek na %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted ne more spremeniti velikosti razdelka, ki ga upravlja Windows Dynamic "
+"Disk."
+
+#: libparted/labels/dos.c:2532
+#, fuzzy
+msgid "cannot create any more partitions"
+msgstr "Novih razdelkov ni mogoÄe ustvariti."
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s ne vsebuje razširjenega razdelka (razdelek glave nosilca)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Nadzorna vsota je napaÄna, kar kaže na okvaro v preglednici razdelkov."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Samo osnovni razdelki so lahko korenski razdeleki."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Samo osnovni razdelki so lahko izmenjevalni razdelki."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Samo logiÄni razdelki so lahko zagonske datoteke."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"nastavljanje imena razdelka dvh na %s ni uspelo:\n"
+"Samo logiÄni razdelki (zagonske datoteke) imajo ime."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "PreveÄ osnovnih razdelkov"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "napaka med odpiranjem"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "napaka med iskanjem"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "napaka med branjem"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "napaka ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Neujemanje razliÄice API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Nepodprta vrsta diska"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Nepodprta oblika diska"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disk je v uporabi"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Skladenjska napaka v nastevitveni datoteki"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Oznaka nosilca je pokvarjena"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ime množice podatkov je pokvarjeno"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Dodeljevanje pomnilnika ni uspelo"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Preverjanje naprave ni uspelo"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "DoloÄena naprava ni veljavna naprava DASD"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Usodna napaka"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ni prostora za oznako nosilca."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Ni prostora za podrobnosti o razdelku."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Neveljaven VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "RazliÄice API ni mogoÄe pridobiti."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Trenuten API razliÄice '%d' se ne ujema z API gonilnika dasd razliÄica '%d'!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Podrobnosti o disku ni mogoÄe pridobiti."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Podrobnosti o geometriji diska ni mogoÄe pridobiti."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Podrobnosti o velikosti bloka ni mogoÄe pridobiti."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+#, fuzzy
+msgid "device is too small for GPT"
+msgstr "Naprava je premajhna za %lu blokov."
+
+#: libparted/labels/gpt.c:791
+#, fuzzy, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Oblika GTP preglednice razdelkov je razliÄica %x, kar je novejÅ¡e kot lahko "
+"Parted prepozna. SporoÄite nam! bug-parted@gnu.org"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Ves prostor, ki je na voljo %s, ni v uporabi, GTP lahko popravite, da se bo "
+"uporabljal ves prostor (dodatnih %llu blokov) ali pa nadaljujte s trenutnimi "
+"nastavitvami. "
+
+#: libparted/labels/gpt.c:1026
+#, fuzzy
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Varnostna kopija preglednice GPT ni na koncu diska, kot bi morala biti. To "
+"najverjetneje pomeni, da drug operacijski sistem verjame, da je velikost "
+"diska manjša. Ali želite to popraviti s premikom varnostne kopije na konec "
+"diska (in izbrisom stare varnostne kopije)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Tako osnovna kot varnostna kopija preglednice GPT sta pokvarjeni. Poskusite "
+"narediti svežo preglednico in z reševalno možnostjo programa Parted obnoviti "
+"razdelke."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Varnostna kopija preglednice GPT je pokvarjena, vendar je osnovna videti v "
+"redu, zato bo uporabljena."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Osnovna preglednica GPT je pokvarjena, vendar je varnostna kopija v redu, "
+"zato bo uporabljena."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "polje osnovne preglednice razdelka ima nujemajoÄ CRC"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+#, fuzzy
+msgid "failed to translate partition name"
+msgstr "Dodeljevanje Å¡tevilke razdelka ni uspelo."
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Neveljaven podpis %x na oznaki diska Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Preslikava razdelkov ne vsebuje vnosov preslikave razdelkov!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s je premajhen za oznako diska Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Razdelek %d ima neveljaven podpis %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Razdelek %d ima neveljavno dolžino 0 bajtov!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "PodroÄje podatkov se ne zaÄne na zaÄetku razdelka."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Zagonsko podroÄje razdelka ne zaseda celotnega razdelka."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Podatkovno podroÄje razdelka ne zaseda celotnega razdelka."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"ÄŒudna velikost bloka na opisovalniku naprave: %d bajtov ni deljivih z 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Opisovalnik naprave pravi, da je fiziÄni blok velik %d bajtov, vendar Linux "
+"pravi, da je %d bajtov."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Preslikave razdelka ni mogoÄe najti."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Sporne velikosti vnosov preslikave razdelka! Vnos 1 pravi %d, vendar vnos %d "
+"pravi %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "ÄŒudno! Obstajata 2 vnosa preslikave particij!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Spreminjanje imena korenskega ali izmenjevalnega razdelka bo sistemu Linux "
+"prepreÄilo prepoznavo the razdelkov."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Dodatnega razdelka ni mogoÄe dodati - naÄrt razdelkov je premajhen!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Neveljavna preglednica razdelkov na %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "Razdelek %d ni poravnan z mejo cilindrov. To ni podprto."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Dodatnega razdelka ni mogoÄe dodati."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"razdelek dolžine %jd sektorjev presega najveÄjo vrednosti doloÄeno v %s "
+"tebeli razdelkov %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"Å¡tevilka zaÄetnega sektorja %jd presega najveÄjo vrednosti doloÄeno v %s "
+"tebeli razdelkov %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s: Slaba nadzorna vsota na bloku %llu vrste %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s: Bloka rdb ni mogoÄe najti, kar se ne sme zgoditi."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s: Na bloku %d je bila zaznana zanka."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s: Zdi se, da je seznam %s na bloku %s slab."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s: Naštevanje slabih blokov ni uspelo."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Naštevanje blokov razdelkov ni uspelo."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s: Izpis blokov sistemskih datotek ni uspel."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s: Izpis zagonskih blokov ni uspel."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Zapisovanje bloka razdelka na %d ni uspelo."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Zaznana je bila pokvarjena oznaka diska Sun"
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"CHS geometrija diska (%d,%d,%d) sporoÄena iz operacijskega sistema se ne "
+"ujema z geometrijo shranjeno v oznaki diska (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Oznaka diska opisuje disk veÄji kot %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disk ima %d cilindrov, kar je veÄ kot najveÄja vrednost 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Na voljo je samo še razdelek Whole Disk. V splošnem prepis tega razdelka ni "
+"dobra zamisel. Solaris se brez tega razdelka morda ne bo mogel zagnati in "
+"tudi SILO (zagonski nalagalnik sparc) uporablja ta razdelek."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Oznaka diska Sun je polna."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "odpiranje naprave ni uspelo"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "iskanje na napravi ni uspelo"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "zapisovanje na napravo ni uspelo"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "branje iz naprave ni uspelo"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Oznake nosilca ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Oznake nosilca ni mogoÄe zapisati."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Oznake VTOC ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB ni mogoÄe prebrati."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Oznake VTOC ni mogoÄe zapisati."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB ni mogoÄe zapisati."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB ni mogoÄe zapisati."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB ni mogoÄe napisati."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB ni mogoÄe zapisati."
+
+#: libparted/labels/vtoc.c:622
+#, fuzzy
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT1 DSCB ni mogoÄe zapisati."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Zmanjkalo je pomnilnika."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Velikosti enote za posebno enoto 'COMPACT' ni mogoÄe dobiti."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" ima neveljavno skladnjo za mesto."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "NajveÄja vrednost glave je %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "NajveÄja vrednost sektorja je %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Mesto %s je zunaj naprave %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Neveljavno Å¡tevilo."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr ""
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Dodeljevanje bloka razdelka ni uspelo\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s: Dodeljevanje bloka ni uspelo\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s: Branje zagonskega bloka %llu ni uspelo\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s: Branje korenskega bloka %llu ni uspelo\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s: Dodeljevanje elementa id seznama ni uspelo\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Branje bloka %llu ni uspelo\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s: Slaba nadzorna vsota na bloku %llu vrste %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: Zapisovanje bloka %d ni uspelo\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: Dodeljevanje bloka disk_specific rdb ni uspelo\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : bloka rdb ni mogoÄe najti, kar se ne sme zgoditi\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s: Branje bloka razdelka %llu ni uspelo\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted ni bil pravilno preveden: FAT zaganjalni sektor bi moral biti 512 "
+"bajtov. Podpora FAT bo onemogoÄena."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "DatoteÄni sistem ima neveljaven podpis za datoteÄni sistem FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"DatoteÄni sistem ima neveljavno velikost sektorjev za datoteÄni sistem FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "DatoteÄni sistem ima neveljavno velikost gruÄ za datoteÄni sistem FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"DatoteÄni sistem ima neveljavno Å¡tevilo rezerviranih sektorjev za datoteÄni "
+"sistem FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "DatoteÄni sistem ima neveljavno Å¡tevilo FAT-ov."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT zagonski sektor pravi, da je logiÄna velikost sektorja 0. To je "
+"nenavadno. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"FAT zagonski sektor pravi, da preglednica FAT ne obstaja. To je nenavadno. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"FAT zagonski sektor pravi, da gruÄe vsebujejo 0 sektorjev. To je nenavadno. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "DatoteÄni sistem je FAT12. Ta datoteÄni sistem ni podprt."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr ""
+"Neprepoznaven podpis linux izmenjevalnega razdelka v starem slogu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr ""
+"Neprepoznaven podpis linux izmenjevalnega razdelka v novem slogu '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Neprepoznaven podpis linux izmenjevalnega razdelka '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted ne more uporabiti datoteÄnega sistema HFS na disku z velikostjo "
+"sektorja razliÄno od %d bajtov."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Geometrija CHS datoteÄnega sistema (%d, %d, %d) je neveljavna. Geometrija "
+"CHS tabele razdelka je (%d, %d, %d). ÄŒe izberete prezri, bo geometrija CHS "
+"datoteÄnega sistema ostala nespremenjena. ÄŒe izberete popravi, bo geometrija "
+"CHS datoteÄnega sistema nastavljena na vrednosti iz preglednice razdelkov."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Podatkovni sektor ima napaÄen podpis (%x). Izberite prekliÄi in poÅ¡ljite "
+"poroÄilo o hroÅ¡Äu. ÄŒe ste obupani, je to opozorilo najverjetneje varno "
+"prezreti."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Da bi razdelek skrÄili na to velikost, potrebujete %s nezasedenega prostora "
+"na disku. Trenutno je na voljo le %s nezasedenega prostora."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "ZaÄetek gruÄe delta = %d, ki ni veÄkratnik velikosti gruÄe %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "Slab vnos mape %s: prva gruÄa je konec datoteÄnega oznaÄevalnika."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Slab FAT: nezakljuÄena veriga %s: Treba je zagnati ukaz dosfsck ali scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Slab FAT: gruÄa %d je zunaj datoteÄnega sistema v verigi %s. Treba je "
+"zagnati ukaz dosfsck ali scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Slab FAT: gruÄa %d je navzkrižno povezana v %s. Treba je zagnati ukaz "
+"dosfsck ali scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s je %dk, vendar ima %d gruÄ (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Razdelek je prevelik/premajhen za datoteÄni sistem %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT-i se ne ujemajo. ÄŒe ne veste kaj to pomeni, izberite prekliÄi, zaženite "
+"ukaz scandisk na datoteÄnem sistemu in nato poskusite znova."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Za to vrsto FAT ni veljavnih nastavitev."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"DatoteÄni sistem ni priÄakovane velikosti, ki bi ustrezala OS Windows. "
+"Velikost gruÄe je %dk (priÄakovana %dk); Å¡tevilo gruÄ je %d (priÄakovano "
+"%d); velikost FAT je %d sektorjev (priÄakovana %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"DatoteÄni sistem sporoÄa prosti prostor velikosti %d gruÄ in ne %d gruÄ."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"V korenski mapi ni dovolj prostora za vse datoteke. PrekliÄite ali pa "
+"prezrite in s tem izgubite datoteke."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Napaka med zapisovanjem v korensko mapo."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "ÄŒe pustite datoteÄni sistem FAT16, ne boste imeli težav."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"ÄŒe pretvorite v FAT16 in so na tem razdelku nameÅ¡Äeni MS Windows, potem "
+"boste morali znova namestiti zagonski nalagalnik MS Windows. Če želite to "
+"storiti, preverite podrobnosti v priroÄniku Parted (ali v priroÄniku svoje "
+"distribucije)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"ÄŒe pustite datoteÄni sistem FAT32, ne boste uvedli nobenih novih težav."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"ÄŒe pretvorite v FAT32 in so na tem razdelku nameÅ¡Äeni MS Windows, potem "
+"boste morali znova namestiti zagonski nalagalnik MS Windows. Če želite to "
+"storiti, preverite podrobnosti v priroÄniku Parted (ali v priroÄniku svoje "
+"distribucije). Pretvorba v FAT32 bo povzroÄila, da bo datoteÄni sistem "
+"nemogoÄe brati iz MS DOS, MS Windosw 95 in MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Želite uporabiti FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"DatoteÄnemu sistemu je mogoÄe spremeniti velikost na to vrednost le, Äe bo "
+"pretvorjen v FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"DatoteÄnemu sistemu je mogoÄe spremeniti velikost na to vrednost le, Äe bo "
+"pretvorjen v FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted velikosti razdelka ne more spremeniti na to vrednost. Delamo na "
+"tem!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d medij %x ne ustreza mediju %x zaganjalnega sektorja. Najverjetneje je "
+"treba zagnati scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: gruÄa %ld je zunaj datoteÄnega sistema"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: gruÄa %ld je zunaj datoteÄnega sistema"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: ni prostih gruÄ"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "DatoteÄnega sistema ni mogoÄe zaznati."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, fuzzy, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "Podpora za spremembo velikosti datoteÄnega sistem %s Å¡e ni dodana."
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "DatoteÄni sistem je veÄji kot njegov nosilec!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "DatoteÄni sistem vsebuje napake."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Slabega bloka ni mogoÄe prebrati."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Poskus vpisa segmenta extent, ki se zaÄenja z blokom Ox%X, vendar na tem "
+"mestu eden že obstaja. Treba je preveriti datoteÄni sistem!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Poskus premikanja segmenta extent iz bloka Ox%X v blok Ox%X, vendar na tem "
+"mestu eden že obstaja. To se ne sme zgoditi!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr ""
+"Predpomnilnika segmenta extent ni bilo mogoÄe posodobiti za HFS datoteke s "
+"CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Poskus branja datoteke HFS s CNID %X za EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Sektorja %lli datoteke HFS s CNID %X ni bilo mogoÄe najti."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Poskus pisanja datoteke HFS s CNID %X za EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr ""
+"Predpomnilnika segmenta extent za HFS+ datoteko s CNID %X ni bilo mogoÄe "
+"posodobiti."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Poskus branja HFS+ datoteke s CNID %X za EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Sektorja %lli HFS+ datoteke s CNID %X ni bilo mogoÄe najti."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Poskus pisanja HFS+ datoteke s CNID %X za EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Oprostite, HFS-ju ni mogoÄe spremeniti velikosti na takÅ¡en naÄin."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "krÄenje"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Prestavljanje podatkov ni uspelo."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Prestavljanje podatkov je pustilo nekaj podatkov na koncu nosilca."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "pisanje bloka glavnege mape"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Med odpiranjem ni bilo mogoÄe najti veljavnega podpisa HFS[+X]."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "HFS+ razliÄica %d ni podprta."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "HFSX razliÄica %d ni podprta."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Prestavljanje podatkov je pustilo nekaj podatkov na koncu nosilca."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Napaka med zapisovanjem dodelitvene datoteke."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Napaka med zapisovanjem združljivostnega dela dodelitvene datoteke."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "zapisovanje glave nosilca HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Napaka med iskanjem obvezne datoteke slabih blokov."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Kot kaže je v ovijalniku HFS napaka: datoteka slabih blokov ne vsebuje "
+"vstavljenega nosilca HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Oprostite, HFS+ ni mogoÄe spreminiti velikosti na ta naÄin."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "krÄenje vstavljenega nosilca HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Spreminjanje velikosti nosilca HFS+ ni uspelo."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "krÄenje ovijalnika HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Posodabljanje ovijalnika HFS ni uspelo."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"To ni pravo preverjanje %s. To bo pridobilo posebne nizkonivojske datoteke "
+"za razhroÅ¡Äevanje."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Slaba nadzorna vsota glave seznama blokov."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Neveljavna velikost transakcijskih blokov med predvajanjem dnevnika (%i "
+"bajtov)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Dnevniki shranjeni izven nosilca niso podprti. Poskusite izkljuÄiti dnevnik "
+"in znova zaženite Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Odmik ali velikost dnevnika ni veÄkratnik velikosti sektorja."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Nepravilne Äarobne vrednosti v glavi dnevnika."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Neujemanje velikosti dnevnika med info blokom dnevnika in glavo dnevnika."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Nekatera polja glave niso veÄkratnik velikosti sektorja."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Velikost sektorja shranjena v dnevniku ni 512 bajtov. Parted podpira samo "
+"sektorje dolžine 512 bajtov."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Slaba nadzorna vsota dnevnika."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Dnevnik ni prazen. Parted mora ponoviti transakcije pred odprtjem "
+"datoteÄnega sistema. To bo spremenilo datoteÄni sistem."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Glava nosilca ali blok glavne mape se je med ponavljanjem dnevnika "
+"spremenil. PriporoÄamo vam ponoven zagon programa Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Segment extent ni bil prestavljen."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Sklic za segment extent prihaja iz prostora kjer ne bi smel. Preverite "
+"datoteÄni sistem!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Ta nosilec HFS nima datoteke kataloga. To je zelo nenavadno!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ta nosilec HFS nima datoteke preliva segmentov extents. To je zelo nenavadno!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Datoteka preliva segmentov extents ne sme vsebovati lastnih segmentov "
+"extents! Preverite datoteÄni sistem."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "DatoteÄnega sistema ni bilo mogoÄe naložiti v pomnilnik."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Seznama slabih blokov ni mogoÄe naložiti."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Napaka med prestavljanjem segmenta extent."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Ta nosilec HFS+ nima datoteke kataloga. To je zelo nenavadno!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Ta nosilec HFS+ nima datoteke preliva segmentov extents. To je zelo "
+"nenavadno!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "prikaže to sporoÄilo pomoÄi"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "prikaže postavitev razdelkov na vseh blokovnih napravah"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "prikaže izhodne podatke, ki s raÄunalniÅ¡ko razÄlenjivi"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "prikaže izhodne podatke, ki s raÄunalniÅ¡ko razÄlenjivi"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "nikoli ne pozovi za uporabniško posredovanje"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "prikaže razliÄico"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "poravnava novih razdelkov"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"Å TEVILKA je Å¡tevilka razdelka uporabljena na OS Linux. Na oznakah diskov MS-"
+"DOS so Å¡tevilke osnovnih razdelkov od 1 do 4, logiÄnih razdelkov pa od 5 "
+"naprej.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "VRSTA_OZNAKA je ena od: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "ZASTAVICA je ena od: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ENOTA je ena od: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "zaželjena poravnava: najmanjša ali optimalna"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "VRSTA-RAZDELKA je ena od: osnovna, logiÄna, razÅ¡irjena\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "VRSTA-DS je ena od: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ZAÄŒETEK in KONEC sta mesti na disku, kot na-primer 4GB ali 10%. Negativne "
+"vrednosti se Å¡tejejo od konca diska. Na primer, -1s doloÄa natanko zadnji "
+"sektor.\n"
+
+#: parted/parted.c:172
+#, fuzzy
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"ZAÄŒETEK in KONEC sta mesti na disku, kot na-primer 4GB ali 10%. Negativne "
+"vrednosti se Å¡tejejo od konca diska. Na primer, -1s doloÄa natanko zadnji "
+"sektor.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "Stanje je eno od: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "NAPRAVA je ponavadi /dev/hda ali /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "IME je katerakoli beseda, ki jo hoÄete\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Avtorske pravice (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Ta program je prosta programska oprema krita z licenco GNU General Public "
+"License.\n"
+"\n"
+"Program je razširjan v upanju da bo uporaben,\n"
+"vendar BREZ KAKRÅ NEKOLI GARANCIJE; tudi brez posredne garancije na\n"
+"PRODAJO ali PRIMERNOST ZA KAKRÅ ENKOLI DOLOÄŒEN NAMEN. \n"
+"Oglejte si licenco GNU General Public License za podrobnosti.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(Äas do konca %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, fuzzy, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Razdelek %s je v uporabi. Pred spreminjanjem s Parted ga je treba odklopiti."
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Razdel-ek(ki) na %s so v uporabi."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"ObstojeÄa oznaka diska na %s bo uniÄena in vsi podatki na disku bodo "
+"izgubljeni. Želite nadaljevati?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Nova vrsta oznake diska?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Vrsta razdelka?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Ime razdelka?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Vrsta datoteÄnega sistema?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "ZaÄetek?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Konec?"
+
+#: parted/parted.c:794
+#, fuzzy, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Zahtevali ste razdelek od %s do %s.\n"
+"Najbližje mogoÄe mesto je od %s do %s.%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Je to za vas sprejemljivo?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "Ciljni razdelek ni pravilno poravnan za najboljšo zmogljivost."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "oznake diska %s ne podpirajo razširjenih razdelkov."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Å tevilka razdelka?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "oznake diska %s ne podpirajo razširjenih razdelkov."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Vrsta razdelka?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Neveljavno Å¡tevilo."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Vrsta razdelka?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Neveljavno Å¡tevilo."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"cilinder BIOS,glava,geometrija sektorja: %d,%d,%d. Vsak cilinder je %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Velikost sektorja (logiÄna/fiziÄna): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Preglednica razdelkov: %s\n"
+
+#: parted/parted.c:1256
+#, fuzzy, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Å tevilo"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "ZaÄetek"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Konec"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Velikost"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Vrsta"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "DatoteÄni sistem"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Ime"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Zastavice"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Nezaseden prostor"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"razdelek %s %s je bil najden na %s -> %s. Ga želite dodati k preglednici "
+"razdelkov?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "iskanje datoteÄnega sistema"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr ""
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Nova naprava?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "vrsta poravnave (min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d je poravnan\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d ni poravnan\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "OznaÄi za obrat?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Novo stanje?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Enota?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check VRSTA Å TEVILKA preveri poravnanost vrste VRSTA "
+"(min|opt) razdelka Å TEVILKA"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [UKAZ] izpiÅ¡e sploÅ¡no pomoÄ ali pomoÄ o "
+"ukazu UKAZ"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable OZNAKA-VRSTA ustvari novo oznako diska "
+"(preglednica razdelkov)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart VRSTA-RAZDELKA [VRSTA-DS] ZAÄŒETEK KONEC naredi razdelek"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' naredi razdelek brez ustvarjanja novega datoteÄnega sistema na "
+"razdelku. VRSTA-DS je lahko doloÄena za nastavitev primernega ID-ja "
+"razdelka.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name Å TEVILKA IME razdelek Å TEVILKA poimenuj z IME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all|ŠTEVILKA] prikaži preglednico razdelkov, "
+"naprave, ki so na voljo, nezaseden prostor, vse najdene razdelke ali doloÄen "
+"razdelek"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Brez argumentov, 'print' prikaže celotno preglednico razdelkov. Z "
+"naslednjimi argumenti pa izvede razliÄna druga dejanja.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : prikaže vse dejavne blokovne naprave\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : prikaže podatke o nezasedenem nerazdeljenem prostoru na "
+"trenutni blokovni napravi\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : prikaže preglednico razdelkov vseh dejavnih blokovnih naprav\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit konÄa program"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ZAČETEK KONEC reši izgubljen razdelek blizu "
+"ZAÄŒETKA in KONCA"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr ""
+
+#: parted/parted.c:2393
+#, fuzzy
+msgid "resizepart"
+msgstr "resize"
+
+#: parted/parted.c:2396
+#, fuzzy
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "move Å TEVILKA ZAÄŒETEK KONEC premakne razdelek Å TEVILKA"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm ŠTEVILKA izbriše razdelek ŠTEVILKA"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select NAPRAVA izbere napravo za urejanje"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr ""
+
+#: parted/parted.c:2420
+#, fuzzy
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"set Å TEVILKA ZASTAVICA STANJE spremeni ZASTAVICO na razdelku "
+"Å TEVILKA"
+
+#: parted/parted.c:2425
+#, fuzzy
+msgid "disk_toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2428
+#, fuzzy
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"toggle [Å TEVILKA [ZASTAVICA]] preklopi stanje ZASTAVICE na "
+"razdelku Å TEVILKA"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set Å TEVILKA ZASTAVICA STANJE spremeni ZASTAVICO na razdelku "
+"Å TEVILKA"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [Å TEVILKA [ZASTAVICA]] preklopi stanje ZASTAVICE na "
+"razdelku Å TEVILKA"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+#, fuzzy
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr "move Å TEVILKA ZAÄŒETEK KONEC premakne razdelek Å TEVILKA"
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit ENOTA nastavi privzeto enoto na ENOTA"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "razliÄica"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version prikaže Å¡tevilko razliÄice in "
+"podrobnosti o avtorskih pravicah programa GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"'version' prikaže avtorske pravice in podrobnosti o razliÄici, ki ustrezajo "
+"tej kopiji programa GNU Parted\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Uporaba: %s [-hlmsv] [-a<poravnava>] [NAPRAVA [UKAZ [PARAMETRI]] ...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Naprave ni mogoÄe najti"
+
+#: parted/parted.c:2626
+#, fuzzy
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "OPOZORILO: Niste superuporabnik. Pazite na dovoljenja."
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Pred ponovnim zagonom priporoÄamo ponovno namestitev zagonskega nalagalnika. "
+"Za veÄ podrobnosti si preberite odstavek 4 v uporabniÅ¡ki dokumentaciji "
+"Parted."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Morda boste morali posodobiti /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Dobrodošli v GNU Parted! Vpišite 'help' za ogled seznama ukazov.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Uporaba: parted [MOŽNOSTI] ... [NAPRAVA [UKAZ [PARAMETRI] ...] ...]\n"
+"Uveljavi UKAZE s PARAMETRI za NAPRAVO. Če UKAZ ni podan poženi v vzajemnem "
+"naÄinu.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"NaÅ¡li ste hroÅ¡Äa v GNU Parted! Tukaj piÅ¡e kaj storiti:\n"
+"\n"
+"Brez panike! HroÅ¡Ä najverjetneje ni vplival na vaÅ¡e podatke.\n"
+"Ta hroÅ¡Ä nam pomagajte popraviti tako da storite naslednje:\n"
+"\n"
+"Preverite ali je bil hroÅ¡Ä Å¾e popravljen tako, da preverite zadnjo razliÄico "
+"GNU Parted, ki jo lahko najdete na:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Prosimo preverite to razliÄico preden sporoÄite hroÅ¡Äa.\n"
+"\n"
+"ÄŒe Å¡e ni bil popravljen, ali pa tega ne znate preveriti\n"
+"obiÅ¡Äite spletno stran GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"za veÄ podrobnosti.\n"
+"\n"
+"VaÅ¡e sporoÄilo bi moralo vsebovati razliÄico izdaje (%s)\n"
+"skupaj s sporoÄilom napake spodaj, izhod\n"
+"\n"
+"\tparted NAPRAVA unit co print unit s print\n"
+"\n"
+"in zgodovino ukazov, ki ste jih vnesli.\n"
+"Ravno-tako vkljuÄite vse dodatne podrobnosti o svojih nastavitvah, \n"
+"ki se vam zdijo pomembne.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Zgodovina ukazov:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Napaka: SEGV_MAPERR (Naslov ni preslikan na predmet)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Error: SEGV_ACCERR (neveljavne pravice preslikanega objekta)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Napaka: Zaznan je bil splošni signal SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Napaka: FPE_INTDIV (Celo Å¡tevilo: deljenje z 0)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Napaka: FPE_INTOVF (Celo Å¡tevilo: preliv)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTDIV (Decimalno Å¡tevilo: deljenje z 0)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTOVF (Decimalno Å¡tevilo: prekoraÄitev)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTUND (Decimalno Å¡tevilo: prekoraÄitev spodnje meje)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTRES (Decimalno Å¡tevilo: netoÄen rezultat)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTINV (Decimalno Å¡tevilo: neveljavno opravilo)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Napaka: FPE_FLTSUB (Decimalno Å¡tevilo: indeks zunaj obsega)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Napaka: Zaznan je bil splošni signal SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Napaka: ILL_ILLOPC (Neveljavna koda opravila)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Napaka: ILL_ILLOPN (Neveljaven operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Napaka: ILL_ILLADR (Neveljaven naÄin naslavljanja)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Napaka: ILL_ILLTRP (Neveljavna past)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Napaka: ILL_PRVOPC (Opcode s povišanimi pravicami)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Napaka: ILL_PRVREG (Register s povišanimi pravicami)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Napaka: ILL_COPROC (Napaka soopravilnika)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Napaka: ILL_BADSTK (Napaka notranjega sklada)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Napaka: Zaznan je bil splošni signal SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "neveljaven žeton %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "PriÄakovana je Å¡tevilka razdelka."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Razdelek ne obstaja."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "PriÄakovana je vrsta datoteÄnega sistema."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Neznan datoteÄni sistem vrste \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "PriÄakuje se vrsta oznake diska."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Novih razdelkov ni mogoÄe ustvariti."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "PriÄakuje se vrsta razdelka."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "vkljuÄeno"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "izkljuÄeno"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimalno"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "najmanjše"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "MOŽNOSTI:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "UKAZI:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"HroÅ¡Äe sporoÄite na %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Uporablja %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Ta ukaz nima smisla v ne-vzajemnem naÄinu.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: možnost '--%s' ne dovoljuje argumenta\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: neprepoznana možnost '--%s'\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' is ambiguous\n"
+#~ msgstr "%s: možnost '-W %s' je dvoumna\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: možnost '-W %s' ne dovoljuje argumenta\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: možnost '-W %s' zahteva argument\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "DomaÄa stran %s: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument `%s'"
+#~ msgstr "neveljaven %s%s argument `%s'"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument `%s'"
+#~ msgstr "neveljavna pripona v %s%s argument `%s'"
+
+#, c-format
+#~ msgid "%s%s argument `%s' too large"
+#~ msgstr "%s%s: argument `%s' je prevelik"
+
+#, c-format
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Uporaba: %s [MOŽNOST]\n"
+#~ " ali: %s NAPRAVA MANJÅ E-Å TEVILO\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "PoÄisti neuporabljen prostor na razdelku FAT (GNU Parted preizkusno "
+#~ "orodje).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help prikaže to pomoÄ in konÄa\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version izpiÅ¡e podrobnosti o razliÄici in konÄa\n"
+
+#, c-format
+#~ msgid "too few arguments"
+#~ msgstr "premalo argumentov"
+
+#, c-format
+#~ msgid "too many arguments"
+#~ msgstr "preveÄ argumentov"
+
+#, c-format
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "napaÄno manjÅ¡e Å¡tevilo naprave: %s"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Preglednice razdelkov ni bilo mogoÄe znova prebrati. To pomeni, da je "
+#~ "potreben ponoven zagon pred priklapljanjem spremenjenih razdelkov. Pred "
+#~ "ponovnim zagonom je treba tudi znova namestiti zagonski nalagalnik (kar "
+#~ "morda zahteva priklapljanje spremenjenih razdelkov). NemogoÄe je storiti "
+#~ "oboje! Sistem boste morali zagnati z reševalnega diska in z njega znova "
+#~ "namestiti zagonski nalagalnik. Za veÄ podrobnosti si preberite poglavje 4 "
+#~ "v uporabniÅ¡kem priroÄniku Parted."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Preglednice razdelkov na %s ni mogoÄe znova prebrati (%s). To pomeni, da "
+#~ "Hurd ne ve niÄ o vaÅ¡ih spremembah. RaÄunalnik morate pred nadaljnjim "
+#~ "delom znova zagnati z %s."
+
+#, c-format
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Dodajanje razdelka %d ni uspelo (%s)"
+
+#, c-format
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "Ponovno branje preglednice razdelkov na %s ni uspelo (%s). Linux ne ve "
+#~ "niÄesar o pravkar narejenih spremembah. "
+
+#, c-format
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "Podpora za odpiranje datoteÄnega sistem %s Å¡e ni dodana."
+
+#, c-format
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr "Podpora za ustvarjanje datoteÄnega sistem %s Å¡e ni dodana."
+
+#, c-format
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "Podpora za preverjanje datoteÄnega sistem %s Å¡e ni dodana."
+
+#~ msgid "raw block copying"
+#~ msgstr "kopiranje surovih blokov"
+
+#~ msgid "growing file system"
+#~ msgstr "rastoÄ datoteÄni sistem"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Kopiranje na prekrivajoÄ razdelek ni mogoÄe."
+
+#, c-format
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Neposredna podpora za kopiranje datoteÄnega sistema za %s Å¡e ni podprta. "
+#~ "Podpora za spreminjanje velikosti pa je vgrajena. Zato je datoteÄni "
+#~ "sistem mogoÄe kopirati, Äe je nov razdelek vsaj tako velik kot stari. "
+#~ "Torej zmanjšajte velikost razdelka, ki ga poskušate kopirati, ali pa ga "
+#~ "prekopirajte na veÄji razdelek."
+
+#, c-format
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Podpora za kopiranje datoteÄnega sistem %s Å¡e ni dodana."
+
+#~ msgid "creating"
+#~ msgstr "ustvarjanje"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "DatoteÄni sistem je v neveljavnem stanju. Morda je priklopljen?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr "DatoteÄni sistem je stare (nespreminjajoÄe) oblike."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Neveljavno število prostih blokov. Najprej zaženite ukaz reiserfsck --"
+#~ "check."
+
+#~ msgid "checking"
+#~ msgstr "preverjanje"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Drevo Reiserfs je morda pokvarjeno. Najprej zaženite ukaz reiserfsck -- "
+#~ "check."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "DatoteÄni sistem reiserfs je opravil osnovni pregled. Za bolj podroben "
+#~ "pregled zaženite ukaz reiserfsck --check."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Oprostite, zaÄetka razdelka reiserfs Å¡e ni mogoÄe premakniti."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr ""
+#~ "Abstraktne plasti naprave ni mogoÄe ponovno odpreti za barnje/pisanje."
+
+#~ msgid "expanding"
+#~ msgstr "razširjanje"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "RoÄnika abstrakcije naprave reiserfs ni mogoÄe ustvariti."
+
+#~ msgid "copying"
+#~ msgstr "kopiranje"
+
+#, c-format
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Simbola %s ni mogoÄe razreÅ¡iti. Napaka: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted je našel neveljavno knjižnico libreiserfs."
+
+#, c-format
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted je zaznal neujemanje razliÄic vmesnika libreiserfs. Najdeno %d-"
+#~ "%d, priÄakovano %d. Podpora za ReiserFS bo onemogoÄena."
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Razširjeni razdelki ne morejo biti skriti na msdos oznakah diska."
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "To ni disk EKCD! Ta vrsta diska ni podprta!"
+
+#, c-format
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s vsebuje podpise GPT, kar nakazuje da ima GPT preglednico. Vendar ne "
+#~ "vsebuje lažne msdos preglednice razdelkov, kot bi jo moral. Morda je "
+#~ "prišlo do okvare -- najverjetneje s strani programa, ki ne razume GPT "
+#~ "preglednic razdelkov. Morda ste izbrisali GPT preglednico in sedaj "
+#~ "uporabljate msdos preglednico razdelkov. Ali je to GPT preglednica "
+#~ "razdelkov?"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Zagonsko podroÄje se ne zaÄne na zaÄetku razdelka."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Nedosledni opisovalnik skupin!"
+
+#~ msgid "File system full!"
+#~ msgstr "DatoteÄni sistem je poln!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Neveljaven superblok. Ste prepriÄani, da je to datoteÄni sistem ext2?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "DatoteÄni sistem ima napake! Poženite ukaz e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "DatoteÄni sistem ni bil odklopljen Äisto! Poženite ukaz e2fsck. "
+#~ "Spreminjanje neÄistega datoteÄnega sistema lahko povzroÄi hude okvare."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "DatoteÄni sistem ima omogoÄeno nezdružljivo zmožnost. Združljive "
+#~ "zmožnosti so has_journal, dir_index, filetype, sparse_super in "
+#~ "large_file. Uporabite ukaz tune2fs ali debugfs za odstranitev zmožnosti."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Napaka med dodeljevanjem predpomnilnika medpomnilniku."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Najdeno je bilo Å¡tevilo inode z nepravilnim Å¡tetjem povezav. PriporoÄamo "
+#~ "vam, da prej poženete ukaz e2fsck!"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Ni dovolj prostih Å¡tevil inode!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "DatoteÄni sistem je prepoln za odstranitev skupine!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "DatoteÄni sistem ima preveÄ dodeljenih Å¡tevil inode za odstranitev "
+#~ "skupine!"
+
+#~ msgid "adding groups"
+#~ msgstr "dodajanje skupin"
+
+#, c-format
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "DatoteÄni sistem je prepoln za spremembo velikosti na %i blokov. "
+#~ "Oprostite."
+
+#, c-format
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "DatoteÄni sistem ima preveÄ zasedenih Å¡tevil inode za spremembo velikosti "
+#~ "na %i blokov. Oprostite."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "DatoteÄni sistem ni bil Äisto odklopljen. Zaženite ukaz e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "DatoteÄni sistem ima vklopljeno zmožnost 'dir_index'. Parted lahko "
+#~ "spremeni velikost datoteÄnega sistema le, Äe se ta zmožnost izklopi. "
+#~ "Pozneje jo lahko vklopite z ukazom 'tune2fs -O dir_index NAPRAVA' in nato "
+#~ "'e2fsck -fD NAPRAVA'."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Opravilo spreminjanja velikosti na tem datoteÄnem sistemu bo uporabilo "
+#~ "PREIZKUSNO kodo,\n"
+#~ "ki LAHKO datoteÄni sistem POKVARI (Äeprav takÅ¡ne Å¡kode ni Å¡e nihÄe "
+#~ "prijavil).\n"
+#~ "Pred zaÄetkom bi morali narediti vsaj varnostno kopijo podatkov in "
+#~ "zagnati ukaz 'e2fsck -f'"
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Najdene so navzkrižne povezave blokov! PriporoÄamo vam, da najprej "
+#~ "zaženete ukaz e2fsck!"
+
+#, c-format
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Blok %i nima sklica? ÄŒudno."
+
+#, c-format
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Blok %i bi moral biti oznaÄen (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "DatoteÄni sistem ext2 je prestal osnovno preverjanje. Za bolj poglobljeno "
+#~ "preverjanje uporabite program e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Oprostite, zaÄetka ext2 razdelka Å¡e ni mogoÄe premakniti!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Predpomnilnika medpomnilnika ni mogoÄe poÄistiti!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "zapisovanje metapodatkov za skupine"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "DatoteÄni sistem je premajhen za ext2."
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "DatoteÄni sistem ima logiÄno velikost sektorja %d. Znano je, da GNU "
+#~ "Parted ne deluje pravilno z velikostjo sektorjev drugaÄno od 512 bajtov."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Datoteka %s je oznaÄena kot sistemska datoteka. To pomeni, da bi njen "
+#~ "premik lahko povzroÄil nedelovanje nekaterih programov."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "PreveÄ slabih strani."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr ""
+#~ "Razdelek mora imeti enega od naslednjih datoteÄnih sistemov VRSTA_DS: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "ObstojeÄi datoteÄni sistem bo uniÄen in vsi podatki na razdelku bodo "
+#~ "izgubljeni. Želite nadaljevati?"
+
+#, c-format
+#~ msgid ""
+#~ "WARNING: you are attempting to use %s to operate on (%s) a file system.\n"
+#~ "%s's file system manipulation code is not as robust as what you'll find "
+#~ "in\n"
+#~ "dedicated, file-system-specific packages like e2fsprogs. We recommend\n"
+#~ "you use %s only to manipulate partition tables, whenever possible.\n"
+#~ "Support for performing most operations on most types of file systems\n"
+#~ "will be removed in an upcoming release.\n"
+#~ msgstr ""
+#~ "OPOZORILO: poskuÅ¡ate uporabiti %s za uporabo na datoteÄnem sistemu (%s).\n"
+#~ "Koda, ki spreminja datoteÄni sistem na %s ni tako dobro preverjena kot "
+#~ "v \n"
+#~ "posebnih doloÄenih paketih kot na primer e2fsprog. PriporoÄamo,\n"
+#~ "da uporabite %s samo za spreminjanje tabel razdelkov, Äe je to mogoÄe.\n"
+#~ "Podpora za veÄino opravil na veÄini vrst datoteÄnih sistemov\n"
+#~ "bo odstranjena v prihajajoÄi izdaji.\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Å tevilka izvornega razdelka?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Å tevilka ciljnega razdelka?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr ""
+#~ "RazÅ¡irjen razdelek ne more vsebovati datoteÄnega sistema. Ste morda "
+#~ "želeli mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "RazÅ¡irjenega razdelka ni mogoÄe premakniti."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Razdelka ni mogoÄe premakniti nase. Poskusite uporabiti spreminjanje "
+#~ "velikosti."
+
+#, c-format
+#~ msgid "Minor: %d\n"
+#~ msgstr "Manjše število: %d\n"
+
+#, c-format
+#~ msgid "Flags: %s\n"
+#~ msgstr "Zastavice: %s\n"
+
+#, c-format
+#~ msgid "File System: %s\n"
+#~ msgstr "DatoteÄni sistem: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Velikost: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Najmanjša velikost: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "NajveÄja velikost: "
+
+#~ msgid "check"
+#~ msgstr "check"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check Å TEVILO izvede enostavno preverjanje "
+#~ "datoteÄnega sistema"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [IZ-NAPRAVA] IZ-Å TEVILKA V-Å TEVILKA prekopira datoteÄni sistem na "
+#~ "drug razdelek"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partition NUMBER"
+#~ msgstr ""
+#~ "mkfs Å TEVILKA VRSTA-DS naredi datoteÄni sistem vrste "
+#~ "VRSTA-DS na razdelku Å TEVILKA"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs VRSTA-RAZDELKA VRSTA-DS ZAÄŒETEK KONEC naredi razdelek z "
+#~ "datoteÄnim sistemom"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr " Å TEVILKA : prikaže podrobne podatke o doloÄenem razdelku\n"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "resize Å TEVILKA ZAÄŒETEK KONEC spremeni velikost razdelka "
+#~ "Å TEVILKA in njegovega datoteÄnega sistema"
diff --git a/po/sr.gmo b/po/sr.gmo
new file mode 100644
index 0000000..5d0c3be
--- /dev/null
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..6ceda9b
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,3383 @@
+# Serbian translations for GNU parted package.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2011—2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted-3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-09-08 19:55+0200\n"
+"Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n"
+"Language-Team: Serbian <(nothing)>\n"
+"Language: sr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неиÑправан аргумент %s за %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "двоÑмиÑлени аргумент %s за %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "ИÑправни аргументи Ñу:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "грешка у пиÑању"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Ðепозната грешка ÑиÑтема"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: опција „%s%s“ је нејаÑна\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: опција „%s%s“ је нејаÑна; могућноÑти:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: непозната опција „%s%s“\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: опција „%s%s“ не дозвољава аргумент\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: опција „%s%s“ захтева аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: неиÑправна опција -- „%c“\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: опција захтева аргумент -- „%c“\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "„"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "“"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "УÑпешно"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ðема подударања"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "ÐеиÑправан регуларни израз"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "ÐеиÑправан знак поретка"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "ÐеиÑправан назив клаÑе знака"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Водећа контра коÑа црта"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "ÐеиÑправна повратна упута"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Ðе одговара [, [^, [:, [., или [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Ðе одговара ( или \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Ðе одговара \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "ÐеиÑправан Ñадржај \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "ÐеиÑправан крај опÑега"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Меморија је потрошена"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "ÐеиÑправан регуларни израз који претходи"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Прерани крај регуларног израза"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Регуларни израз је превелик"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Ðеодговара ) или \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Ðема претходног регуларног израза"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Запаковао је %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Запаковао је %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или новије <%s>.\n"
+"Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете.\n"
+"Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "ÐапиÑао је %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "ÐапиÑали Ñу %s и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "ÐапиÑали Ñу %s, %s, и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, %s, и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, %s, %s, и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, и %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"ÐапиÑали Ñу %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, и други.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Грешке пријавите на: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Грешке %s пријавите на: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s матична Ñтраница: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Општа помоћ кориÑтећи ГÐУ Ñофтвер: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "меморија је потрошена"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Слика диÑка"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Грешка у отварању %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Ðе могу да отворим %s Ñамо за читање (%s). %s је отворен Ñамо за читање."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s за време претраге за читањем на %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s за време читања на %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Ðе могу да пишем у %s, зато што је отворен Ñамо за читање."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s за време претраге за пиÑањем на %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s за време пиÑања на %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Пробајте „%s --help“ за више информација.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Употреба: %s [ОПЦИЈÐ] [УРЕЂÐЈ]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Обавештава оперативни ÑиÑтем о изменама у табели партиција.\n"
+"\n"
+" -d, --dry-run заправо не обавештава оперативни ÑиÑтем\n"
+" -s, --summary штампа Ñажетак Ñадржаја\n"
+" -h, --help приказује ову помоћ и излази\n"
+" -v, --version иÑпиÑује податке о издању и излази\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Када није дат УРЕЂÐЈ, иÑпробава Ñве партиције.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Грешке пријавите на <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Ðе могу да отворим %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Ðе могу да иÑпитам Ñкладиште."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"УПОЗОРЕЊЕ: кернел није уÑпео поново да прочита партициону табелу на "
+"„%s“ (%s). Као резултат, неће моћи да одрази Ñве ваше измене Ñве до "
+"поновног подизања ÑиÑтема."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Упозорење: не могу да отворим „%s“ (%s). Као резултат, неће моћи да одрази "
+"Ñве ваше измене Ñве до поновног подизања ÑиÑтема."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Упозорење: ниÑам уÑпео да учиним да преводилац оде на „%s“ (%s). Као "
+"резултат, неће моћи да одрази Ñве ваше измене Ñве до поновног подизања "
+"ÑиÑтема."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s покушава да уÑаглаÑи %s Ñа диÑком"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Ðе могу да добавим Ñтање датотека уређаја %s — %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Ðе могу да одредим дм врÑту %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Ðе могу да одредим величину Ñектора за %s: %s.\n"
+"КориÑтим величину оÑновног Ñектора (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Ðе могу да одредим величину физичког Ñектора за %s.\n"
+"КориÑтим величину логичког Ñектора (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Ðе могу да одредим величину %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Општи ИДЕ"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Ðе могу да добавим идентитет уређаја %s — %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Уређај %s има више (%d) логичких Ñектора по физичком Ñектору.\n"
+"ГÐУ Партед подржава ово ЕКСПЕРИМЕÐТÐЛÐО за неке поÑебне комбинације натпиÑа "
+"диÑка/ÑиÑтема датотека, нпр. ГПТ и екÑÑ‚2/3.\n"
+"Молим потражите на веб Ñајту најÑвежије податке."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Грешка при покретању СЦСИ уређаја %s — %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Уређај %s је премали тако да не може да Ñадржи ÑиÑтем датотека или табелу "
+"партиција. Можда Ñте изабрали погрешан уређај?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Ðе могу да одредим геометрију датотеке/уређаја %s. Ðе биÑте требали да "
+"кориÑтите Партед оÑим ако СТВÐРÐО знате шта радите!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Општа СД/ММС меморијÑка картица"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "ÐВМе уређај"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "ДÐЦ960 РÐИД управљач"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "ПромиÑе СХ8 СÐТРуређај"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ÐТРпреко мрежног уређаја"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "ИБМ С390 ДÐСД уређај"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "Виртуелни ДÐСД ИБМ иСерије"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Компаков паметни низ"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "ÐВДИММ уређај"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ÐТÐРÐИД управљач"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "И20 управљач"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "КориÑничког режима УБД ЛинукÑ"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Уређај повратне петље"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "ЛинукÑов мапер уређаја (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "КÑенов виртуелни блок уређај"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Ðепознато"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Виртио блок уређај"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "РÐИД низ Ð›Ð¸Ð½ÑƒÐºÑ Ñофтвера"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "РÐÐœ диÑк"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Ðеподржана врÑта уређаја"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Грешка при уÑклађивању датотека/затварању %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sкрај датотеке за време читања %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Грешка приликом обавештавања језгра о изменама на партицији %s —— %s. Ово "
+"значи да Ð›Ð¸Ð½ÑƒÐºÑ Ð½ÐµÑ›Ðµ знати о изменама које Ñте направили на %s Ñве док "
+"поново не учитате —— зато не биÑте требали да је монтирате или да је "
+"кориÑтите на било који начин пре него што поново учитате ÑиÑтем."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Ðе могу да одредим почетак и дужину %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Партиција „%s“ на „%s“ је запиÑана, али ниÑмо били у могућноÑти да "
+"обавеÑтимо језгро о измени, вероватно зато што је у употреби. Као резултат, "
+"Ñтара партиција ће оÑтати у употреби. Требате поново да учитате пре него што "
+"начините додатне измене."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Ðе можете имати крај пре почетка! (почетни Ñектор=%jd дужина=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Покушај упиÑивања Ñектора %ld-%ld изван партиције на %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "тражим лоше Ñекторе"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Повратни траг има %d позива на Ñтеку:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Утврђивање (%s) на %s:%d у функцији %s() није уÑпело."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: непрепознатљив Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñка"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Овај либпартед нема подршку пиÑања за %s. Вероватно је преведен Ñамо за "
+"читање."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Партиција %d је %s, али ÑиÑтем датотека је %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "поравнање_цилиндра"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "пмбр_подизна"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ðепозната заÑтавица диÑка, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s натпиÑи диÑка не подржавају проширене партиције."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s натпиÑи диÑка не подржавају логичке или проширене партиције."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Превише примарних партиција."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Ðе могу да додам логичку партицију на %s, зато што не поÑтоји проширена "
+"партиција."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Ðе можете имати више од једне проширене партиције на %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Ðе можете имати логичке партиције изван проширене партиције."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Ðе можете имати логичку партицију изван проширене партиције на %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Ðе можете имати примарну партицију унутар проширене партиције."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Ðе можете имати партицију изван диÑка!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Ðе можете имати партицију преко партиције."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "метаподаци"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "Ñлободно"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "проширена"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "логичка"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "примарна"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "подизна"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "биоÑ_груб"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "корена"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "помоћна"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "Ñкривена"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "раид"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "лвм"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "лба"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "хп-уÑлуга"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "пало"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "преп"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "мÑфтреÑ"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "мÑфтподаци"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "атврецв"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "диаг"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "легаÑи_подизна"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "ирÑÑ‚"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "еÑп"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "хромоÑ_кернел"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "блÑ_подизна"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "линукÑ-лична"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ðепозната заÑтавица партиције, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Подаци"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Упозорење"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Грешка"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Кобно"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Буба"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Без примене"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "ИÑправи"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Yes"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "No"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "У реду"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Покушај поново"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Занемари"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Откажи"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Откривена је грешка у ГÐУ Партеду. Погледајте на веб Ñајту партеда „http://"
+"www.gnu.org/software/parted/parted.html“ шта би било кориÑно за пријављивање "
+"грешке! Извештај о грешци пошаљите ел. поштом на „%s“ који ће Ñадржати барем "
+"издање (%s) и Ñледећу поруку: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Подршка за читање натпиÑа ÐИКС диÑка није још примењена."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Подршка за пиÑање натпиÑа ÐИКС диÑка није још примењена."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Подршка за додавање партиција на натпиÑе ÐИКС диÑка није још примењена."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Подршка за дуплирање партиција у натпиÑима ÐИКС диÑка није још примењена."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Подршка за подешавање врÑте ÑиÑтема партиција у натпиÑима ÐИКС диÑка није "
+"још примењена."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Подршка за подешавање заÑтавица у натпиÑима ÐИКС диÑка није још примењена."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Ðе могу да кориÑтим табеле Ðтари партиција на диÑковима на којима величина "
+"Ñектора Ñе разликује од %d бајта."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Ðе могу да кориÑтим табеле Ðтари партиција на диÑковима Ñа више од %d "
+"Ñектора."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Превише Ðтари партиција је откривено. Можада поÑтоји петља у ИкÑГМ повезаном "
+"ÑпиÑку. Прекидам."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "ÐиÑам нашао партицију података у ÐРС-у на Ñектору %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr "Ð£Ð½Ð¾Ñ Ñледећег логичког ÐРС-а није врÑте ИкÑГМ у ÐРС-у на Ñектору %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Изгледа да нема табеле Ðтари партиције на овом диÑку (%s), или је оштећена."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "Ðема меÑта на Ñектору %lli за Ñмештај ÐРС-а логичке партиције %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Ðема меÑта на Ñектору %lli за Ñмештај ÐРС-а."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Број Ñектора који је Ñмештен у табели партиције не одговара величини вашег "
+"уређаја. Да ли желите да поправите табелу партиција?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Ðема меÑта на Ñектору %lli за Ñмештај БСЛ-а."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "ПреоÑтале Ñу неке партиције након попуњавања главне ÐХДИ табеле."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Главна ÐХДИ табела је попуњена Ñвим партицијама али ИЦД табела није празна "
+"тако да ће још партиција непознатих величина и положаја бити откривено ИЦД "
+"ÑаглаÑним Ñофтвером. Да ли желите да онеÑпоÑобите ИЦД табелу?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ИЦД уноÑи не могу да Ñадрже проширене или логичке партиције."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "ПреоÑтале Ñу неке партиције након попуњавања табела."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Ðе можете кориÑтити проширену ИкÑГМ партицију у ИЦД режиму (више од %d "
+"примарне партиције, ако је ИкÑГМ прва броји Ñе као две)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Ðе могу да задовољим Ñва ограничења на партицији."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Ðе можете кориÑтити више од %d примарне партиције (ИЦД режим) ако кориÑтите "
+"проширену ИкÑГМ партицију. Ðко је ИкÑГМ прва партиција броји Ñе као две."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Ðе могу да доделим број партиције."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Ðе могу да доделим бÑд прикључак натпиÑа диÑка."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Партициона табела ДÐСД_ЛДЛ уређаја Ñе не може изменити.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Ðе могу да доделим даÑд прикључак натпиÑа диÑка"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "ÐеиÑправна табела партиција на %s —— погрешан Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "ÐеиÑправна табела партиција — дубинÑка партиција на %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Партед не може да промени величину партиција којима управља Виндоузов "
+"динамички диÑк."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "не могу да направим више ни једну партицију"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s нема проширену партицију (партиција заглавља волумена)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Провера Ñуме је погрешна, указујућа табела партиција је оштећена."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Само примарне партиције могу бити корене партиције."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Само примарне партиције могу бити партиције помоћне меморије."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Само логичке партиције могу бити датотеке учитавања."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"ниÑам уÑпео да поÑтавим назив двх партиције на %s:\n"
+"Само логичке партиције (датотеке учитавања) имају назив."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Превише примарних партиција"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "грешка отварања"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "грешка премотавања"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "грешка читања"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "„ioctl()“ грешка"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Издање ÐПИ-ја не одговара"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Ðеподржана врÑта диÑка"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Ðеподржани облик датотеке"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ДиÑк је у употреби"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "СинтакÑичка грешка у датотеци подешавања"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñка је оштећен"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ðазив подешавања података је оштећен"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "РаÑподела меморије није уÑпела"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Ðије уÑпела провера уређаја"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Ðаведени уређај није иÑправан ДÐСД уређај"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "ÐиÑам нашао ВОЛСЕР на уређају"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Кобна грешка"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ðема меÑта за Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð²Ð¾Ð»ÑƒÐ¼ÐµÐ½Ð°."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Ðема меÑта за податке о партицији."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "ÐеиÑправан ВТОЦ."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Ðе могу да добавим издање ÐПИ-ја."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Тренутно издање ÐПИ-ја „%d“ Ñе не подудара Ñа издањем ÐПИ-ја „%d“ даÑд "
+"управљачког програма!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Ðе могу да добавим величину диÑка."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Ðе могу да добавим податке о геометрији диÑка."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Ðе могу да добавим податке о величини диÑка."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Геометрија диÑка не одговара ДÐСД уређају врÑте 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "уређај је премали за ГПТ"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Облик ГПТ табеле партиција је издања %x које је новије од оног које Партед "
+"може да препозна. Молим пријавите ово!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Сав проÑтор који је доÑтупан на %s није приказан као заузет, можете да "
+"иÑправите ГПТ да кориÑти Ñав проÑтор (додатних %llu блокова) или да "
+"наÑтавите Ñа тренутним подешавањем? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Резервна ГПТ табела није на крају диÑка, као што би требало. Да иÑправим, "
+"премештајући резерву на крај (и уклањајући Ñтару резерву)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Обе ГПТ табеле, и примарна и резервна, Ñу оштећене. Покушаћу да направим "
+"Ñвежу табелу, и кориÑтићу Партедову функцију Ñпашавања да бих опоравио "
+"партиције."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Резервна ГПТ табела је оштећена, али примарна изгледа у реду, тако да ће "
+"иÑта бити коришћена."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Примарна ГПТ табела је оштећена, али резервна изгледа у реду, тако да ће "
+"иÑта бити коришћена."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "ЦРЦ низа табеле примарне партиције не одговара"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "ниÑам уÑпео да преведем назив партиције"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "ÐеиÑправна Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ %x за Ð½Ð°Ñ‚Ð¿Ð¸Ñ ÐœÐ°Ðº диÑка."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Мапа партиције нема Ñтавку мапе партиције!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s је премала за Ð½Ð°Ñ‚Ð¿Ð¸Ñ ÐœÐ°Ðº диÑка!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Партиција %d има неиÑправан Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Партиција %d има неиÑправну дужину од 0 бајта!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "ОблаÑÑ‚ података не почиње на почетку партиције."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ учитавања партиције не заузима целу партицију."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ података партиције не заузима целу партицију."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Ðеобична величина блока на опиÑнику уређаја: %d бајта није дељиво Ñа 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"ОпиÑник уређаја каже да је величина физичког блока %d бајта, али Ð›Ð¸Ð½ÑƒÐºÑ ÐºÐ°Ð¶Ðµ "
+"да је %d бајта."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "ÐиÑам пронашао иÑправну мапу партиције."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Величине Ñтавке мапе партиција Ñу у Ñукобу! Ставка 1 каже да је %d, али "
+"Ñтавка %d каже да је %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Ðеобично! ПоÑтоје 2 Ñтавке мапе партиција!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Измена назива корене или партиције помоћне меморије ће Ñпречити Ð›Ð¸Ð½ÑƒÐºÑ Ð´Ð° "
+"иÑту препозна као такву."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Ðе могу да додам још једну партицију —— мапа партиције је премала!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "ÐеиÑправна табела партиција на %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Партиција %d није поравната на границе цилиндра. Ово још увек није подржано."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Ðе могу да додам још једну партицију."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"дужина партиције од %jd Ñектора превазилази %s—табелом—партиција—поÑтављени "
+"макÑимум од %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"број почетног Ñектора, %jd превазилази %s—табелом—партиција—поÑтављени "
+"макÑимум од %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Лоша Ñума провере на блоку %llu врÑте %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : ÐиÑам пронашао рдб блок, ово није требало да Ñе деÑи."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Откривена је петља на блоку %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : %s ÑпиÑак изгледа лош на блоку %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : ÐиÑам уÑпео да излиÑтам лоше блокове."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : ÐиÑам уÑпео да излиÑтам блокове партиције."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : ÐиÑам уÑпео да излиÑтам блокове ÑиÑтема датотека."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : ÐиÑам уÑпео да излиÑтам блокове учитавања."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "ÐиÑам уÑпео да запишем блок партиције на %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Откривен је оштећени Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð¡Ð°Ð½Ð¾Ð²Ð¾Ð³ диÑка."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"ЦХС геометрија диÑка (%d,%d,%d) о којој извештава оперативни ÑиÑтем Ñе не "
+"подудара Ñа геометријом Ñачуваном на натпиÑу диÑка (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñка опиÑује диÑк већи од %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "ДиÑк има %d цилиндра, што је више од дозвољених 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"ПреоÑтала је Ñамо једна доÑтупна партиција целог диÑка. Уопштено, није добра "
+"идеја препиÑати ову партицију једном Ñтварном. Ð¡Ð¾Ð»Ð°Ñ€Ð¸Ñ Ð¼Ð¾Ð¶Ð´Ð° неће бити у "
+"Ñтању да Ñе покрене без ње, а и СИЛО (Ñпарков покретачки програм) је такође "
+"кориÑти."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "ÐÐ°Ñ‚Ð¿Ð¸Ñ Ð¡Ð°Ð½Ð¾Ð²Ð¾Ð³ диÑка је пун."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "отварање уређаја није уÑпело"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "претраживање на уређају није уÑпело"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "запиÑивање на уређају није уÑпело"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "читање Ñа уређаја није уÑпело"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Ðе могу да прочитам Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð²Ð¾Ð»ÑƒÐ¼ÐµÐ½Ð°."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Ðе могу да запишем Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð²Ð¾Ð»ÑƒÐ¼ÐµÐ½Ð°."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Ðе могу да прочитам натпиÑе ВТОЦ-а."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Ðе могу да прочитам ВТОЦ ФМТ1 ДСЦБ."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Ðе могу да прочитам ВТОЦ ФМТ4 ДСЦБ."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Ðе могу да прочитам ВТОЦ ФМТ5 ДСЦБ."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Ðе могу да прочитам ВТОЦ ФМТ7 ДСЦБ."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Ðе могу да запишем натпиÑе ВТОЦ-а."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Ðе могу да запишем ВТОЦ ФМТ1 ДСЦБ."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Ðе могу да запишем ВТОЦ ФМТ4 ДСЦБ."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Ðе могу да запишем ВТОЦ ФМТ5 ДСЦБ."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Ðе могу да запишем ВТОЦ ФМТ7 ДСЦБ."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Ðе могу да запишем ВТОЦ ФМТ9 ДСЦБ."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "ПонеÑтало је меморије."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Ðе могу да добвим величину јединице за поÑебну јединицу „COMPACT“."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "„%s“ има неиÑправану ÑинтакÑу за меÑта."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Ðајвећа вредноÑÑ‚ глава је %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Ðајвећа вредноÑÑ‚ Ñектора је %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "МеÑто %s Ñе налази ван уређаја %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "ÐеиÑправан број."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "КориÑти мању јединицу умеÑто вредноÑти < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : ÐиÑам уÑпео да доделим блок партиције\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : ÐиÑам уÑпео да доделим блок\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Ðе могу да прочитам блок учитавања %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Ðе могу да прочитам блок корена %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : ÐиÑам уÑпео да доделим елемент ид ÑпиÑка\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Ðе могу да прочитам блок %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Лоша Ñума провере на блоку %llu врÑте %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Ðе могу да запишем блок %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : ÐиÑам уÑпео да доделим диÑка_поÑебан рдб блок\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : ÐиÑам пронашао рдб блок, ово није требало да Ñе деÑи\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : ÐиÑам уÑпео да прочитам блок партиције %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"ГÐУ Паретд је лоше преведен: ФÐТ Ñектор учитавања треба да буде 512 бајта. "
+"Подршка за ФÐТ ће бити иÑкључена."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "СиÑтем датотека има неиÑправан Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð·Ð° ФÐТ ÑиÑтем датотека."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"СиÑтем датотека има неиÑправну величину Ñектора за ФÐТ ÑиÑтем датотека."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"СиÑтем датотека има неиÑправну величину клаÑтера за ФÐТ ÑиÑтем датотека."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"СиÑтем датотека има неиÑправан број резервиÑаних Ñектора за ФÐТ ÑиÑтем "
+"датотека."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "СиÑтем датотека има неиÑправан број ФÐТ-ова."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"ЦХС геометрија ÑиÑтема датотека је (%d, %d, %d), што је неиÑправно. ЦХС "
+"геометрија партиционе табеле је (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"ФÐТ Ñектор учитавања каже да је величина логичког Ñектора 0. То је чудно. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "ФÐТ Ñектор каже да не поÑтоје ФÐТ табеле. То је чудно. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "ФÐТ Ñектор учитавања каже да Ñу клаÑтери 0 Ñектора. То је необично. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "СиÑтем датотека је ФÐТ12, који није подржан."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Ðепрепознатљиви Ñтари Ñтил потпиÑа помоћне меморије линукÑа „%10s“."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Ðепрепознатљиви нови Ñтил потпиÑа помоћне меморије линукÑа „%10s“."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Ðепознат Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ñ›Ð½Ðµ меморије ÑвÑуÑп линукÑа „%9s“."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Партед не може да кориÑти ХФС ÑиÑтем датотека на диÑковима на којима "
+"величина Ñектора Ñе разликује од %d бајта."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"ЦХС геометрија ÑиÑтема датотека је (%d, %d, %d), која је неиÑправна. ЦХС "
+"геометрија табеле партиција је (%d, %d, %d). Ðко изаберете „Занемари“, ЦХС "
+"геометрија ÑиÑтема датотека ће бити оÑтављена неизмењена. Ðко изаберете "
+"„Поправи“, ЦХС геометрија ÑиÑтема датотека ће бити подешена да одговара ЦХС "
+"геометрији табеле партиција."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Сектор података има погрешан Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ (%x). Изаберите откажи за Ñада, и "
+"пошаљите у извештају о грешци. Ðко Ñте очајни, највероватније да је најбоље "
+"да занемарите."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Потребно вам је %s Ñлободног проÑтора на диÑку да биÑте Ñкупили ову "
+"партицију на ову величину. Тренутно, Ñамо %s је Ñлободно."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Делта почетка клаÑтера = %d, што није умножак величине клаÑтера %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Лош ÑƒÐ½Ð¾Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ˜ÑƒÐ¼Ð° за %s: први клаÑтер јеÑте крај означивача датотеке."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Лош ФÐТ: беÑконачан ланац за %s. Треба да покренете „dosfsck“ или "
+"„scandisk“."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Лош ФÐТ: клаÑтер %d је изван ÑиÑтема датотека у ланцу за %s. Треба да "
+"покренете „dosfsck“ или „scandisk“."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Лош ФÐТ: клаÑтер %d је унакрÑно повезан за %s. Треба да покренете „dosfsck“ "
+"или „scandisk“."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s је %dk, али има %d клаÑтера (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Партиција је превелика/премала за „%s“ ÑиÑтем датотека."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"ФÐТ-ови Ñе не подударају. Ðко не знате шта значи ово, онда изаберите "
+"отказивање, покрените „scandisk“ на ÑиÑтему датотека, и након тога Ñе "
+"вратите."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Ðе поÑтоје могућа подешавања за ову врÑту ФÐТ-а."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"СиÑтем датотека нема очекиване величине које би одговарале Виндоузу. "
+"Величина клаÑтера је %dk (очекивано је %dk); број клаÑтера је %d (очекивано "
+"је %d); величина ФÐТ-ова је %d Ñектора (очекивано је %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"СиÑтем датотека обавештава о Ñлободном проÑтору од %d клаÑтера, а не %d."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Ðема довољно проÑтора у кореном директоријуму за Ñве датотеке. Или "
+"откажите, или занемарите да биÑте изгубили датотеке."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Грешка пиÑања у корени директоријум."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Ðко оÑтавите ваш ÑиÑтем датотека као ФÐТ16, онда нећете имати проблема."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Ðко претворите у ФÐТ16, а МС Виндоуз је инÑталиран на тој партицији, онда "
+"ћете морати поново да инÑталирате покретачки програм МС Виндоуза. Ðко "
+"желите ово да урадите, требало би да прочитате упутÑтво Партеда (или "
+"упутÑтво ваше диÑтрибуције)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Ðко оÑтавите ваш ÑиÑтем датотека као ФÐТ32, онда нећете Ñтворити никаквих "
+"нових проблема."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Ðко претворите у ФÐТ32, а МС Виндоуз је инÑталиран на тој партицији, онда "
+"ћете морати поново да инÑталирате покретачки програм МС Виндоуза. Ðко "
+"желите ово да урадите, требало би да прочитате упутÑтво Партеда (или "
+"упутÑтво ваше диÑтрибуције). Такође, претварање у ФÐТ32 ће учинити ÑиÑтем "
+"датотека нечитљивим за МС ДОС, МС Виндоуз 95а, и МС Виндоуз ÐТ."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Да ли биÑте желели да кориÑтите ФÐТ32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"СиÑтему датотека може бити промењена величина Ñамо на ову величину "
+"претварањем у ФÐТ16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"СиÑтему датотека може бити промењена величина Ñамо на ову величину "
+"претварањем у ФÐТ32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"ГÐУ Партед не може да промени величину ове партиције на ову величину. "
+"Радимо на томе! *_*"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"ФÐТ %d медиј %x не одговара медију Ñектора учитавања %x. Вероватно треба да "
+"покренете „scandisk“."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: клаÑтер %ld је изван ÑиÑтема датотека"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: клаÑтер %ld је изван ÑиÑтема датотека"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: нема Ñлободних клаÑтера"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Ðе могу да откријем ÑиÑтем датотека."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "промена величине „%s“ ÑиÑтема датотека није подржана"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "СиÑтем датотека је већи од Ñвог волумена!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "СиÑтем датотека Ñадржи грешке."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Лоши блокови не могу бити прочитани."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Покушавам да забележим опÑег почевши од блока 0x%X, али већ поÑтоји један на "
+"том положају. Треба да проверите ÑиÑтем датотека!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Покушавам да премеÑтим опÑег Ñа блока 0×%X на блок 0×%X, али већ поÑтоји "
+"један на том положају. Ово није требало да Ñе деÑи!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Ðе могу да оÑвежим оÑтаву опÑега за ХФС датотеку Ñа ЦÐИД-ом %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Покушавам да прочитам ХФС датотеку Ñа ЦÐИД-ом %X изван краја датотеке."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Ðемогу да пронађем Ñектор %lli ХФС датотеке Ñа ЦÐИД-ом %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Покушавам да упишем ХФС датотеку Ñа ЦÐИД-ом %X изван краја датотеке."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Ðе могу да оÑвежим оÑтаву опÑега за ХФС+ датотеку Ñа ЦÐИД-ом %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr ""
+"Покушавам да прочитам ХФС+ датотеку Ñа ЦÐИД-ом %X изван краја датотеке."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Ðемогу да пронађем Ñектор %lli ХФС+ датотеке Ñа ЦÐИД-ом %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Покушавам да упишем ХФС+ датотеку Ñа ЦÐИД-ом %X изван краја датотеке."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Извините, ХФС-у не може бити промењена величина на тај начин још увек."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "Ñкупљам"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Премештај датотека није уÑпео."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Премештај датотека је оÑтавио неке податке при крају волумена."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "запиÑујем блок главног директоријума ХФС-а"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Ðије пронађен иÑправан ХФС[+ИкÑ] Ð¿Ð¾Ñ‚Ð¿Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¸ÐºÐ¾Ð¼ отварања."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Издање ХФС+ %d није подржано."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Издање Ð¥Ð¤Ð¡Ð˜ÐºÑ %d није подржано."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Премештај датотека је оÑтавио неке податке на крај волумена."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Грешка приликом запиÑивања датотеке раÑподеле."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Грешка приликом запиÑивања дела ÑаглаÑноÑти датотеке раÑподеле."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "запиÑујем заглавље ХФС+ волумена"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Дошло је до грешке приликом тражења обавезне датотеке лоших блокова."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Изгледа да поÑтоји грешка у ХФС омотачу: датотека лоших блокова не Ñадржи "
+"угнежђен ХФС+ волумен."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr ""
+"Извините, ХФС-у+ не може бити промењена величина на тај начин још увек."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "Ñкупљам угнежђени ХФС+ волумен"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Промена величине ХФС+ волумена није уÑпела."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "Ñкупљам ХФС омотач"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "ОÑвежавање ХФС омотача није уÑпело."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Ово није Ñтварна „%s“ провера. Ово ће извући поÑебне датотеке ниÑког нивоа "
+"за Ñврхе уклањања грешака."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Лоша Ñума провере заглавља ÑпиÑка блока."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"ÐеиÑправна величина блока преноÑа приликом одговарања журнала (%i бајта)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Журнал уÑкладиштен изван волумена није подржан. Покушајте да иÑкључите "
+"журнал и поново да покренете Партед."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Померај журнала или величина није умножак величине Ñектора."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "ÐеиÑправне вредноÑти магије у заглављу журнала."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Величина журнала Ñе не поклапа између блока података журнала и заглавља "
+"журнала."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Ðека поља заглавља ниÑу умношци величине Ñектора."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Величина Ñектора Ñмештена у журналу није 512 бајта. Партед подржава Ñамо "
+"Ñекторе дужине 512 бајта."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Лоша Ñума провере журнала."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Журнал није празан. Партед мора да понови преноÑе пре отварања ÑиÑтема "
+"датотека. Ово ће изменити ÑиÑтем датотека."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Заглавље волумена или блок главног директоријума Ñе изменио приликом "
+"понављања журнала. Треба поново да покренете Партед."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Један опÑег није премештен."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Указивање на опÑег долази Ñа меÑта које то није. Треба да проверите ÑиÑтем "
+"датотека!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Овај ХФС волумен нема датотеку каталога. Ово је врло необично!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Овај ХФС волумен нема датотеку прекорачења опÑега. Ово је поприлично "
+"необично!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Датотека прекорачења опÑега не треба да Ñадржи ÑопÑтвене опÑеге! Треба да "
+"проверите ÑиÑтем датотека."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Ðе могу да ÑмеÑтим ÑиÑтем датотека у меморију."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "СпиÑак лоших блокова не може бити учитан."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Дошло је до грешке приликом премештања опÑега."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Овај ХФС+ волумен нема датотеку каталога. Ово је врло необично!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Овај ХФС+ волумен нема датотеку прекорачења опÑега. Ово је поприлично "
+"необично!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "приказује ову поруку помоћи"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "иÑпиÑује раÑпоред партиције на Ñвим уређајима блока"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "приказује машинама обрадив излаз"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "приказује ЈСОРизлаз"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "никада не поÑтавља за кориÑничко деловање"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "у режиму Ñкрипте, поправља умеÑто да прекида када Ñе тражи"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "приказује издање"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "поравнање за нове партиције"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"БРОЈ је број партиције који кориÑти ЛинукÑ. Ðа натпиÑима МС-ДОС диÑка, за "
+"примарне партиције Ñе кориÑте бројеви од 1 до 4, за логичке партиције од 5 "
+"на даље.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "ВРСТЗÐÐТПИСРможе бити: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "ЗÐСТÐВИЦРможе бити: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ЈЕДИÐИЦРможе бити: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "жељено поравнање: најмање или одговарајуће"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "ВРСТЗПÐРТИЦИЈЕ може бити: примарна, логичка, проширена\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "ВРСТЗС.ДÐТ. може бити: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ПОЧЕТÐК и КРÐЈ Ñу меÑта на диÑку, као што је 4GB или 10%. Ðегативне "
+"вредноÑти почињу од краја диÑка. Ðа пример, -1 означава тачно поÑледњи "
+"Ñектор.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"КРÐЈ је меÑто на диÑку, као што је 4GB или 10%. Ðегативне вредноÑти почињу "
+"од краја диÑка. Ðа пример, -1 означава тачно поÑледњи Ñектор.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "СТÐЊЕ може бити: укљ., иÑкљ.\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "УРЕЂÐЈ је обично „/dev/hda“ или „/dev/sda“\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "ÐÐЗИВ је било која реч коју изаберете\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"ÐуторÑка права © 1998-2006 Задужбина Ñлободног Ñофтвера, Инц.\n"
+"Овај програм је Ñлободан Ñофтвер, заштићен Гнуовом општом јавном лиценцом.\n"
+"\n"
+"Овај програм Ñе раÑподељује у нади да ће бити кориÑтан,\n"
+"али БЕЗ ИКÐКВЕ ГÐРÐÐЦИЈЕ; чак и без примењене гаранције\n"
+"ТРЖИШÐЕ ВРЕДÐОСТИ или ПРИЛÐГОЂЕÐОСТИ ОДРЕЂЕÐОЈ ÐÐМЕÐИ.\n"
+"Погледајте Гнуову општу јавну лиценцу за више детаља.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(преоÑтало време %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr ""
+"Партиција „%s“ је била коришћена. Да ли Ñте Ñигурни да желите да наÑтавите?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Партиције на „%s“ Ñу биле коришћене."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"ПоÑтојећи Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñка на %s ће бити уништен и Ñви подаци на диÑку ће бити "
+"изгубљени. Да ли желите да наÑтавите?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Ðова врÑта натпиÑа диÑка?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Ð’Ñ€Ñта партиције?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Ðазив партиције?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Ð’Ñ€Ñта ÑиÑтема датотека?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Почетак?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Крај?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Затражили Ñте партицију од %s до %s (Ñектори %llu..%llu).\n"
+"Ðајближе меÑто којим можемо да управљамо је од %s до %s (Ñектори %llu..%llu)."
+"%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Да ли вам је ово прихватљиво?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Резултирајућа партиција није иÑправно поравната за најбоље резултате: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "непозната (неуÑпела додела меморије)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "ÐатпиÑи „%s“ диÑка не подржавају назив партиције."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Број партиције?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "ÐатпиÑи „%s“ диÑка не подржавају назив партиције."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Ð’Ñ€Ñта партиције?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "ÐеиÑправан број."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Ð’Ñ€Ñта партиције?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "ÐеиÑправан број."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"БИОС геометрија цилиндара,главе,Ñектора: %d,%d,%d. Сваки цилиндар је %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Модел: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ДиÑк %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Величина Ñектора (логички/физички): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Табела партиција: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Опције диÑка: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Број"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Почетак"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Крај"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Величина"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Ð’Ñ€Ñта"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "СиÑтем датотека"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Ðазив"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "ЗаÑтавице"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Слободан проÑтор"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"%s %s партиција је пронађена на %s —> %s. Да ли желите да је додате у "
+"табелу партиција?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "тражим ÑиÑтеме датотека"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Ðаредба промене величине је уклоњена у партеду 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Скупљање партиције може да доведе до губитка података, да ли Ñте Ñигурни да "
+"желите да наÑтавите?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ðови уређај?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "врÑта поравнања(најм./опц.)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d је поравната\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d није поравнато: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Ознака за преокренути?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Ðово Ñтање?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Јединица?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check ВРСТРN врши проверу "
+"партиције N за ВРСТОМ(min|opt) поравнања"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [ÐÐРЕДБÐ] штампа општу помоћ, или "
+"помоћ при ÐÐРЕДБИ"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ВРСТÐ-ÐÐТПИСРÑтвара нови Ð½Ð°Ñ‚Ð¿Ð¸Ñ Ð´Ð¸Ñка "
+"(табелу партиција)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart ВРСТÐ-ПÐРТИЦ [ВРСТÐ-СИС.ДÐТ.] ПОЧЕТÐК КРÐЈ Ñтвара партицију"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"„mkpart“ прави партицију без Ñтварања новог ÑиÑтема датотека на партицији. "
+"ВРСТЗСИС.ДÐТ. може бити наведена за подешавање одговарајућег ИБ-а "
+"партиције.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name БРОЈ ÐÐЗИВ именује партицију БРОЈ "
+"као ÐÐЗИВ"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [уређаји|Ñлободно|ÑпиÑак,Ñве] приказује табелу партиција, или "
+"доÑтупне уређаје, или Ñлободан проÑтор, Ñве пронађене партиције"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Без аргумената, „print“ приказује читаву табелу партиција. Међутим Ñа "
+"Ñледећим аргументима обавља различите друге радње.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : приказује Ñве активне блок уређаје\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : приказује податке о Ñлободном непартициониÑаном проÑтору на "
+"текућем блок уређају\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : приказује табеле партиција Ñвих активних блок уређаја\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit излази из програма"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ПОЧЕТÐК КРÐЈ Ñпашава изгубљену партицију близу "
+"ПОЧЕТКРи КРÐЈÐ"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Ðаредба промене величине је уклоњена у партеду 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart БРОЈ КРÐЈ мења величину партиције БРОЈ"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm БРОЈ брише партицију БРОЈ"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select УРЕЂÐЈ бира уређај за уређивање"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set СТÐЊЕ ОПЦИЈЕ мења ОПЦИЈУ на изабраном уређају"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [ОПЦИЈÐ] пребацује Ñтање ОПЦИЈЕ на изабраном "
+"уређају"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set БРОЈ ЗÐСТÐВИЦРСТÐЊЕ мења ЗÐСТÐВИЦУ на партицији БРОЈ"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [БРОЈ [ЗÐСТÐВИЦÐ]] пребацује Ñтање ЗÐСТÐВИЦЕ на "
+"партицији БРОЈ"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit ЈЕДИÐИЦРпоÑтавља оÑновну јединицу на "
+"ЈЕДИÐИЦУ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version приказује број издања и податке о "
+"ауторÑким правима ГÐУ Партеда"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"„version“ приказује ауторÑка права и податке о издању које одговара овом "
+"примерку ГÐУ Партеда\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Коришћење: %s [-hlmsfv] [-a<align>] [УРЕЂÐЈ [ÐÐРЕДБР[ПÐРÐМЕТРИ]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "ÐиÑам пронашао уређај"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "УПОЗОРЕЊЕ: Ви ниÑте админиÑтратор. Затражите овлашћења.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Треба да поново инÑталирате покретачки програм пре него што поново "
+"покренете. Прочитајте одељак 4 кориÑничке документације Партеда за више "
+"података."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Мораћете да оÑвежите /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "Добродошли у ГÐУ Партед! Упишите „help“ да видите ÑпиÑак наредби.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Коришћење: parted [ОПЦИЈÐ]... [УРЕЂÐЈ [ÐÐРЕДБР[ПÐРÐМЕТРИ]...]...]\n"
+"Примењује ÐÐРЕДБУ/е Ñа ПÐРÐМЕТРИМРнад УРЕЂÐЈЕМ. Ðко није дата ÐÐРЕДБÐ, ради "
+"у\n"
+"режиму међудејÑтва.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Пронашли Ñте грешку у ГÐУ Партеду! Ево шта треба да урадите:\n"
+"\n"
+"Ðе узрујавајте Ñе! Грешка највероватније није нашкодила вашим подацима.\n"
+"Помозите нам да иÑправимо грешку тако што ћете урадити Ñледеће:\n"
+"\n"
+"Проверите да ли је грешка већ иÑправљена тако што ћете\n"
+"проверити поÑледње издање ГÐУ Партеда које можете наћи на:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Молим проверите ово издање у Ñкладу Ñа извештајем о грешци.\n"
+"\n"
+"Ðко то није још увек иÑправљено или ако не знате како да проверите,\n"
+"молим поÑетите веб Ñајт ГÐУ Партеда:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"за даља обавештења.\n"
+"\n"
+"Ваш извештај треба да Ñадржи верзију овог издања (%s)\n"
+"уз поруку о грешци, иÑÐ¿Ð¸Ñ Ñледећег\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"и Ñледећи иÑторијат наредби које Ñте унели.\n"
+"Такође укључите Ñваки додатни детаљ о вашем подешавању који\n"
+"Ñматрате важним.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"ИÑторијат наредби:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Грешка: SEGV_MAPERR (ÐдреÑа није мапирана у објекту)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Грешка: SEGV_ACCERR (ÐеиÑправна овлашћења за мапирани објекат)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Грешка: Ðаиђох на општи SIGSEGV Ñигнал.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Грешка: FPE_INTDIV (Цео број: подели нулом)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Грешка: FPE_INTOVF (Цео број: прекорачење)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTDIV (Цео број: подели нулом)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTOVF (Децимални број: прекорачење)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTUND (Децимални број: поткорачење)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTRES (Децимални број: нетачан резултат)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTINV (Децимални број: неиÑправна операција)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Грешка: FPE_FLTSUB (Децимални број: Ð¸Ð½Ð´ÐµÐºÑ Ñ˜Ðµ изван опÑега)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Грешка: Ðаиђох на општи SIGFPE Ñигнал."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Грешка: ILL_ILLOPC (ÐеиÑправан опкод)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Грешка: ILL_ILLOPN (ÐеиÑправан операнд)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Грешка: ILL_ILLADR (ÐеиÑправан режим адреÑирања)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Грешка: ILL_ILLTRP (ÐеиÑправан прекид)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Грешка: ILL_PRVOPC (Привилеговани опкод)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Грешка: ILL_PRVREG (Привилеговани региÑтар)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Грешка: ILL_COPROC (Грешка копроцеÑора)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Грешка: ILL_BADSTK (Унутрашња грешка Ñтека)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Грешка: Ðаиђох на општи SIGILL Ñигнал."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "неиÑправан чин: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Очекујем број партиције."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Партиција не поÑтоји."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Очекујем врÑту ÑиÑтема датотека."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Ðепозната врÑта ÑиÑтема датотека „%s“."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Очекујем врÑту натпиÑа диÑка."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "ЗаÑтавице ниÑу подржане"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Ðе могу да направим више ни једну партицију."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Очекујем врÑту партиције."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "укљ"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "иÑкљ"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "најбоље"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "најмање"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "ОПЦИЈÐ/е:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "ÐÐРЕДБÐ/е:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Грешке пријавите на %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "КориÑтим %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Ова наредба нема ÑмиÑла у немеђудејÑтвеном режиму.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Проширене партиције не могу бити Ñкривене на натпиÑима мÑÐ´Ð¾Ñ Ð´Ð¸Ñка."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Проширене партиције не могу бити партиције опоравка на натпиÑима мÑÐ´Ð¾Ñ "
+#~ "диÑка."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " БРОЈ : приказује детаљније податке о тој поÑебној партицији\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: непозната опција „--%s“\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: опција „-W %s“ захтева аргумент\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s матична Ñтраница: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "неиÑправан %s%s аргумент „%s“"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "неиÑправан ÑÑƒÑ„Ð¸ÐºÑ Ñƒ %s%s аргументу „%s“"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s аргумент „%s“ је превелик"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Табела партиција не може бити прочитана. Ово значи да морате поново да "
+#~ "учитате пре него што монтирате било коју измењену партицију. Морате "
+#~ "такође поново да инÑталирате покретачки програм пре него што поново "
+#~ "покренете (који може затражити монтирање измењених партиција). Ðије "
+#~ "могуће урадити обе Ñтвари! Тако да морате да избаците диÑк за Ñпашавање, "
+#~ "и да поново инÑталирате покретачки програм Ñа диÑка за Ñпашавање. "
+#~ "Прочитајте одељак 4 из кориÑничке документације Партеда за више података."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Табела партиција на %s не може бити прочитана (%s). Ово значи да Хурд не "
+#~ "зна ништа о изменама које Ñте начинили. Треба да поново покренете ваш "
+#~ "рачунар пре него што урадите било шта Ñа %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "ОблаÑÑ‚ учитавања не почиње на почетку партиције."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Овај ÑиÑтем датотека има величину логичког Ñектора од %d. Познато је да "
+#~ "ГÐУ Партед не ради иÑправно Ñа величинама Ñектора које ниÑу 512 бајта."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Датотека „%s“ је означена као ÑиÑтем датотека. Ово значи да њено "
+#~ "премештање може да изазове преÑтанак рада неких програма."
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "ÐиÑам уÑпео да додам партицију %d (%s)"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "партед није могао поново да прочита табелу партиција на %s (%s). Ово "
+#~ "значи да Ð›Ð¸Ð½ÑƒÐºÑ Ð½ÐµÑ›Ðµ знати ништа о изменама које Ñте начинили."
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s Ñадржи ГПТ потпиÑе, који указују да има ГПТ табелу. Међутим, нема "
+#~ "иÑправну лажну мÑÐ´Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ñƒ партиција, као што би требало. Можда је "
+#~ "оштећена —— вероватно програмом који не разуме ГПТ табеле партиција. Или "
+#~ "Ñте можда ви обриÑали ГПТ табелу, и Ñада кориÑтите мÑÐ´Ð¾Ñ Ñ‚Ð°Ð±ÐµÐ»Ñƒ "
+#~ "партиција. Да ли је ово ГПТ табела партиција?"
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/sv.gmo b/po/sv.gmo
new file mode 100644
index 0000000..dc43d7c
--- /dev/null
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..017acc1
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,3732 @@
+# Swedish messages for parted
+# Copyright © 2001, 2009, 2016, 2017, 2021 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Jörgen Tegnér <jorgen.tegner@telia.com>, 2001.
+# Daniel Nylander <po@danielnylander.se>, 2009.
+# Sebastian Rasmussen <sebras@gmail.com>, 2016, 2017.
+# Luna Jernberg <droidbittin@gmail.com>, 2021, 2022.
+# Anders Jonsson <anders.jonsson@norsjovallen.se>, 2021.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-12-24 00:33+0100\n"
+"Last-Translator: Luna Jernberg <droidbittin@gmail.com>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.2.2\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "ogiltigt argument %s för %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "tvetydigt argument %s för %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Giltiga argument är:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "skrivfel"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Okänt systemfel"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: flaggan â€%s%s†är tvetydig\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: flaggan â€%s%s†är tvetydig; möjligheter:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: okänd flagga â€%s%sâ€\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: flaggan â€%s%s†tillÃ¥ter inget argument\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: flaggan â€%s%s†kräver ett argument\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: ogiltig flagga -- â€%câ€\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: flaggan kräver ett argument -- â€%câ€\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "â€"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Lyckades"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ingen träff"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ogiltigt reguljärt uttryck"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ogiltigt sorteringstecken"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ogiltigt teckenklassnamn"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Efterföljande omvänt snedstreck"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Ogiltig bakåtreferens"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Omatchat [, [^, [:, [. eller [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Omatchat ( eller \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Omatchat \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Ogiltigt innehåll i \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ogiltigt intervallslut"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Slut på minne"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ogiltigt föregående reguljärt uttryck"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "För tidigt slut på reguljärt uttryck"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Reguljärt uttryck är för stort"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Omatchat ) eller \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Inga tidigare reguljära uttryck"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[jJ]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Paketerat av %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Paketerat av %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Licens GPLv3+: GNU GPL version 3 eller senare <%s>.\n"
+"Detta är fri programvara: du får ändra och distribuera den.\n"
+"Det finns INGEN GARANTI, så långt som lagen tillåter.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Skrivet av %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Skrivet av %s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Skrivet av %s, %s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s\n"
+"och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s, %s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s, %s, %s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s och %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Skrivet av %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s och andra.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"Rapportera fel till: %s\n"
+"Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Rapportera fel i %s till: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Webbplats för %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Allmän hjälp för hur man använder GNU-programvara: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "slut på minne"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Diskavbildning"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Ett fel uppstod när %s öppnades: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Kunde inte öppna %s för både läsning och skrivning (%s). %s öppnades i "
+"läsläge."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s under positionering för att läsa på %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s under läsning på %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Kan inte skriva till %s eftersom den är öppnad som skrivskyddad."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s under positionering för att skriva på %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s under skrivning på %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Prova â€%s --help†för mer information.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Användning: %s [FLAGGA] [ENHET]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Informera operativsystemet om ändringar i partitionstabell.\n"
+"\n"
+" -d, --dry-run testa med informera inte operativsystemet\n"
+" -s, --summary skriv ut ett sammandrag av innehållet\n"
+" -h, --help visa denna hjälp och avsluta\n"
+" -v, --version skriv ut versionsinformation och avsluta\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"När ingen ENHET har angivits, undersök alla partitioner.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Rapportera fel till <%s>.\n"
+"Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Kunde inte öppna %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Kan inte avsöka lagring."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"VARNING: kärnan kunde inte läsa om partitionstabellen på %s (%s). Som ett "
+"resultat kan det hända att det inte återspeglar alla dina ändringar förrän "
+"efter omstart."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Varning: Kunde inte öppna %s (%s). Som ett resultat kan det hända att det "
+"inte återspeglar alla dina ändringar förrän efter omstart."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Varning: misslyckades att få översättaren att försvinna på %s (%s). Som ett "
+"resultat kan det hända att det inte återspeglar alla dina ändringar förrän "
+"efter omstart."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s försöker att synkronisera %s till disk"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Kunde inte ta status på enheten %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Kunde inte fastställa dm-typen på %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Kunde inte fastställa sektorstorlek för %s: %s.\n"
+"Använder standardsektorstorleken (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Kunde inte fastställa fysisk sektorstorlek för %s.\n"
+"Använder standardsektorstorleken (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Kunde inte fastställa storleken på %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Allmän IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Kunde inte hitta identitet för enhet %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Enheten %s har flera (%d) logiska sektorer per fysisk sektor.\n"
+"GNU Parted har EXPERIMENTELLT stöd för detta för vissa speciella "
+"kombinationer av disketikett/filsystem, t.ex. GPT och ext2/3.\n"
+"Referera till webbsidan för uppdaterad information."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Ett fel uppstod vid initiering av SCSI-enheten %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Enheten %s är så liten att den kan omöjligt lagra ett filsystem eller "
+"partitionstabell. Du kanske valde fel enhet?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Kunde inte fastställa geometrin på filen/enheten %s. Du bör inte använda "
+"Parted såvida inte du VERKLIGEN vet vad du gör!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Allmänt SD/MMC-lagringskort"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe-enhet"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Styrkort för DAC960 RAID"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA-enhet"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA över Ethernet-enhet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD-enhet"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries virtuell DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM-enhet"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Styrkort för ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Styrkort för I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "Linux användarläges UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Loopenhet"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux device-mapper (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen virtuell blockenhet"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Okänd"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio-blockenhet"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux programvaru-RAID-array"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM-enhet"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Stöd saknas för den här enhetstypen"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Fel uppstod när fsync/close %s kördes: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sfilavslut under läsning av %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Fel när kärnan inte kunde informera om modifieringar av partition %s -- %s. "
+"Detta betyder att Linux inte vet nånting om de ändringar du gjort av %s "
+"tills du startar om datorn -- så du bör inte montera den eller använda den "
+"på något sätt innan omstart."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Kunde inte fastställa början och längden för %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Partitioner %s på %s har skrivits, men vi kunde inte informera kärnan om "
+"ändringen, antagligen för att de används. Som ett resultat kommer de gamla "
+"partitionerna att finnas kvar i bruk. Du bör starta om nu innan du gör fler "
+"ändringar."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Kan inte ha slutet före början! (startsektor=%jd längd=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Försökte skriva sektorerna %ld-%ld utanför partitionen på %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "letar efter felaktiga block"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Stackspårning har %d anrop på stacken:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Försäkran (%s) på %s:%d i funktionen %s() misslyckades."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: okänd disketikett"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Denna libparted saknar skrivstöd för %s. Kanske kompilerades den utan "
+"skrivstöd."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Partition %d är %s, men filsystemet är %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_justering"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Okänd diskflagga, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s-disketiketter saknar stöd för utökade partitioner."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s-disketiketter saknar stöd för logiska eller utökade partitioner."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "För många primära partitioner."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Kan inte lägga till en logisk partition till %s, eftersom det saknas en "
+"utökad partition."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Kan inte ha fler än en utökad partition på %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Kan inte ha logiska partitioner utanför den utökade partitionen."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Kan inte ha en logisk partition utanför den utökade partitionen på %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Kan inte ha en primär partition inuti en utökad partition."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Kan inte ha en partition utanför hårddisken!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Kan inte ha överlappande partitioner."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metadata"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "ledigt"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "utökad"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "logisk"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "primär"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "startbar"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "rot"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "växlingsutrymme"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "dold"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-service"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Okänd partitionsflagga, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Information"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Varning"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Fel"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Ödesdiger"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Programfel"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Inte implementerat"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Reparera"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Ja"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Nej"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Försök igen"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ignorera"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Ett fel har upptäckts i GNU Parted. Referera till webbsidan för parted "
+"http://www.gnu.org/software/parted/parted.html för mer information om vad "
+"som kan vara användbar information för en felrapport! Skicka in "
+"felrapporten till %s och inkludera åtminstone versionsnumret (%s) och "
+"följande meddelande: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Stöd för att läsa AIX-disketiketter är inte implementerat än."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Stöd för att skriva AIX-disketiketter är inte implementerat än."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Stöd för att lägga till partitioner till AIX-disketiketter är inte "
+"implementerat än."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Stöd för att duplicera partitioner i AIX-disketiketter är inte implementerat "
+"än."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Stöd för att ställa in systemtyp för partitioner i AIX-disketiketter är inte "
+"implementerat än."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Stöd för att ställa in flaggor i AIX-disketiketter är inte implementerat än."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Kan inte använda Atari-partitionstabeller på diskar med en sektorstorlek som "
+"inte är lika med %d byte."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Kan inte använda Atari-partitionstabeller på diskar med mer än %d sektorer."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"För många Atari-partitioner upptäcktes. Kanske finns det en loop i den XGM-"
+"länkade listan. Avbryter."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Ingen datapartition hittades i ARS på sektor %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Posten för nästa logiska ARS är inte av typen XGM i ARS på sektor %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Det verkar inte finnas en Atari-partitionstabell på den här disken (%s), "
+"eller så är den skadad."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+"Inget utrymme på sektor %lli för att lagra ARS för logisk partition %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Inget utrymme på sektor %lli för att lagra ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Sektorantalet som lagras i partitionstabellen motsvarar inte storleken på "
+"din enhet. Vill du reparera partitionstabellen?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Inget utrymme på sektor %lli för att lagra BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+"Det fanns kvarstående partitioner efter att AHDI-huvudtabellen fylldes."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"AHDI-huvudtabellen har fyllts med alla partitioner men ICD-tabellen är inte "
+"tom, så fler partitioner av okänd storlek och position kommer upptäckas av "
+"ICD-kompatibel programvara. Vill du ogiltigförklara ICD-tabellen?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ICD-poster kan inte innehålla utökade eller logiska partitioner."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Det fanns kvarstående partitioner efter att tabellerna fylldes."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Du kan inte använda en utökad XGM-partition i ICD-läge (mer än %d primära "
+"partitioner, om XGM är den första räknas den som två)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Kunde inte uppfylla alla begränsningar på partitionen."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Du kan inte använda mer än %d primära partitioner (ICD-läge) om du använder "
+"en utökad XGM-partition. Om XGM är den första partitionen räknas den som "
+"två."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Kunde inte allokera ett partitionsnummer."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Kunde inte allokera en plats i bsd-disketiketten."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Partitionstabellen för DASD-LDL-enheten kan inte ändras.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Kunde inte allokera en plats i dasd-disketiketten"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ogiltig partitionstabell på %s -- felaktig signatur %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ogiltig partitionstabell - rekursiv partition på %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted kan inte ändra storlek på partitioner som hanteras av Windows Dynamic "
+"Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "kan inte skapa några fler partitioner"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s har ingen utökad partition (partition för volymhuvud)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Kontrollsumman är felaktig, vilket indikerar att partitionstabellen är "
+"skadad."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Endast primära partitioner kan vara rotpartitioner."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Endast primära partitioner kan vara växlingspartitioner."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Endast logiska partitioner kan vara en uppstartsfil."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"misslyckades med att ställa in dvh-partitionsnamnet till %s:\n"
+"Endast logiska partitioner (uppstartsfiler) har ett namn."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "För många primära partitioner"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "öppningsfel"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "sökningsfel"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "läsfel"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl()-fel"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API-versionen stämmer inte"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Disktypen stöds inte"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Diskformatet stöds inte"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disken används"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Syntaxfel i konfigurationsfilen"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Volymetiketten är skadad"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ett namn på en datauppsättning är korrupt"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Minnesallokeringen misslyckades"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Enhetsverifieringen misslyckades"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Den angivna enheten är inte en giltig DASD-enhet"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER hittades inte på enheten"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Ödesdigert fel"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ingen plats för volymetikett."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Inget utrymme för partitionsinformation."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ogiltig VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Kunde inte läsa av API-versionen."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Den aktuella API-versionen â€%d†stämmer inte med API-versionen â€%d†för dasd-"
+"drivrutinen!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Kunde inte läsa av diskstorlek."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Kunde inte läsa av information om diskgeometri."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Kunde inte läsa av information om blockstorlek."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Diskgeometri matchar inte en DASD-enhet av typ 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "enheten är för liten för GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Formatet på GPT-partitionstabellen är version %x vilket är nyare än vad "
+"Parted kan känna igen. Rapportera detta!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Inte allt utrymme tillgängligt för %s verkar vara använt, du kan fixa GPT:n "
+"så att allt utrymme används (%llu block extra) eller fortsätta med de "
+"aktuella inställningar? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Säkerhetskopian av GPT-tabellen finns inte i slutet på disken som den "
+"borde. Fixa detta genom att flytta säkerhetskopia till slutet (och ta bort "
+"den gamla säkerhetskopian)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Både den primära och säkerhetskopian av GPT:n är korrupta. Försök att skapa "
+"en ny tabell och använd Parteds räddningsfunktion för att återskapa "
+"partitioner."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Säkerhetskopian av GPT:n är korrupt, men den primära verkar vara OK, så den "
+"används."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Den primära GPT:n är korrupt, men säkerhetskopian verkar vara OK, så den "
+"används."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "crc-fel i primär partitionstabellsvektor"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "kunde inte översätta partitionsnamn"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ogiltig signatur %x för en Mac-disketikett."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Partitionstabellen saknar uppgift om sig själv!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s är för liten för en Mac-disketikett!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Partition %d har en ogiltig signatur %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Partition %d har en ogiltig längd, 0 byte!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Dataområdet börjar inte vid partitionens början."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Partitionens startområde tar inte upp hela partitionens utrymme."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Partitionens dataområde tar inte upp hela partitionens utrymme."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Konstig blockstorlek på enhetens handtag: %d byte är inte jämnt delbart med "
+"512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Enhetens handtag påstår att den fysiska blockstorleken är %d byte, men Linux "
+"påstår att den är %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Ingen giltig partitionstabell kunde hittas."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Motsägelsefulla storleksdata i partitionstabellen! Post 1 påstår att den är "
+"%d, men post %d påstår att den är %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Konstigt! Det finns 2 poster i partitionstabellen!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Att ändra namnet på en rot- eller växlingspartition gör att Linux inte kan "
+"känna igen dem."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr ""
+"Kan inte lägga till ytterligare en partition -- partitionstabellen är för "
+"liten!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ogiltig partitionstabell på %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Partition %d ligger inte på jämna cylindergränser. Detta stöds fortfarande "
+"inte."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Kan inte lägga till ännu en partition."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"partitionslängden på %jd sektorer överstiger maximum för %s-partition-table-"
+"imposed på %jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"sektornumret för början, %jd överstiger maximum för %s-partition-table-"
+"imposed maximum på %jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Felaktig kontrollsumma på block %llu av typen %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Hittade inte rdb-blocket, detta ska aldrig hända."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Slinga upptäcktes på block %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : %s-listan verkar vara felaktig på block %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Misslyckades med att lista felaktiga block."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Misslyckades med att lista partitionsblock."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Misslyckades med att lista filsystemsblock."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Misslyckades med att lista uppstartsblock."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Misslyckades med att skriva partitionsblock på %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Skadad Sun-disketikett upptäcktes."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"CHS-geometrin för disken (%d, %d, %d) som rapporterats av operativsystemet "
+"matchar inte geometrin som sparats i disketiketten (%d, %d, %d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Disketiketten beskriver en disk som är större än %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disken har %d cylindrar, vilket är större än maximum som är 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Hela disken-partitionen är den enda som finns kvar. I allmänhet är det inte "
+"en bra idé att skriva över denna partition med en riktig. Solaris kanske "
+"inte kan starta utan den och SILO (sparcs uppstartsprogram) tycker inte "
+"heller om det."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun-disketikett är full."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "öppning av enheten misslyckades"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "sökning på enheten misslyckades"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "skrivning till enheten misslyckades"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "läsning från enheten misslyckades"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Kunde inte läsa volymetikett."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Kunde inte skriva volymetikett."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Kunde inte läsa VTOC-etiketter."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Kunde inte läsa VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Kunde inte läsa VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Kunde inte läsa VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Kunde inte läsa VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Kunde inte skriva VTOC-etiketter."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Kunde inte skriva VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Kunde inte skriva VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Kunde inte skriva VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Kunde inte skriva VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Kunde inte skriva VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Slut på minne."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Kan inte hämta enhetsstorlek för speciell enhet â€COMPACTâ€."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "â€%s†innehÃ¥ller en ogiltig syntax för platser."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Det maximala värdet för huvud är %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Det maximala värdet för sektorer är %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Platsen %s är utanför enheten %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ogiltigt nummer."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Använd en mindre enhet istället för ett värde < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Misslyckades med att allokera partitionsblock\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Misslyckades med att allokera block\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Kunde inte läsa startblock %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Kunde inte läsa rotblock %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s: Misslyckades med att allokera element i id-lista\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Kunde inte läsa block %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Felaktig kontrollsumma på block %llu av typen %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Kunde inte skriva block %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: Misslyckades med att allokera disk_specific rdb-block\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s: Kunde inte hitta rdb-block, bör inte inträffa\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Misslyckades med att läsa partitionsblock %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted kompilerades felaktigt: FAT-startsektorn skall vara 512 byte. "
+"Stödet för FAT kommer att inaktiveras."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Filsystemet har en ogiltig signatur för filsystem av typen FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Filsystemet har en ogiltig sektorstorlek för ett filsystem av typen FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Filsystemet har en ogiltig klusterstorlek för ett filsystem av typen FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Filsystemet har ett ogiltigt antal reserverade sektorer för ett filsystem av "
+"typen FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Filsystemet har ett ogiltigt antal filallokeringstabeller."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Filsystemets CHS-geometri är (%d, %d, %d) vilket är ogiltigt. "
+"Partitionstabellens CHS-geometri är (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT-startsektorn menar att den logiska sektorstorleken är 0. Detta är "
+"märkligt. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"FAT-startsektorn menar att det saknas FAT-tabeller. Detta är märkligt. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"FAT-startsektorn menar att ett kluster består av 0 sektorer. Detta är "
+"märkligt. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Filsystemet är FAT12, som inte stöds."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Okänd signatur för förÃ¥ldrat Linux växlingsutrymme â€%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Okänd signatur för nytt Linux växlingsutrymme â€%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Okänd signatur för swsusp Linux växlingsutrymme â€%9sâ€."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted kan inte använda HFS-filsystem på diskar med en sektorstorlek som "
+"inte är %d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Filsystemets CHS-geometri är (%d, %d, %d), vilket är ogiltigt. "
+"Partitionstabellens CHS-geometri är (%d, %d, %d). Om du väljer Ignorera så "
+"kommer filsystemets CHS-geometri inte att ändras. Om du väljer Reparera så "
+"kommer filsystemets CHS-geometri att ställas in för att matcha "
+"partitionstabellens CHS-geometri."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Informationssektorn har fel signatur (%x). Välj avbryt och skicka in en "
+"felrapport. Om du är desperat så är det troligen säkert att strunta i felet."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Du behöver %s ledigt diskutrymme för att minska storleken på den här "
+"partitionen till angiven storlek. För närvarande är det endast %s."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Klustrets startdifferens är %d, vilket inte är en multipel av "
+"klusterstorleken %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "Felaktig katalogpost för %s: första klustret är en filslutsmarkering."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Trasig filallokeringstabell: ej avslutad kedja för %s. Du bör köra dosfsck "
+"eller scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Trasig filallokeringstabell: kluster %d ligger utanför filsystemet i kedja "
+"för %s. Du bör köra dosfsck eller scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Trasig filallokeringstabell: kluster %d är korslänkad för %s. Du bör köra "
+"dosfsck eller scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s är %dk, men den har %d kluster (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Partitionen för stor/liten för ett filsystem av typen %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Filallokeringstabellerna stämmer inte överens. Om du inte vet vad detta "
+"betyder, välj avbryt, kör scandisk på filsystemet och försök igen."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Det finns inga möjliga kombinationer för den här sortens FAT."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Filsystemet har inte en storlek som Windows gillar. Klusterstorleken är %dk "
+"(%dk förväntas); antalet kluster är %d (%d förväntas); storleken på FAT:arna "
+"är %d sektorer (%d förväntas)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Filsystemet menar att det fria utrymmet är %d kluster, inte %d."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Det finns inte tillräckligt med utrymme för alla filer i rotkatalogen. Välj "
+"antingen att avbryta, eller ignorera och förlora filerna."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Ett fel uppstod vid skrivning till rotkatalogen."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Om du låter filsystemet fortsätta vara FAT16 så kommer du inte att få några "
+"problem."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Om du konverterar till FAT16 och MS Windows är installerad på den här "
+"partitionen så måste du installera om MS Windows starthanterare. Om du gör "
+"det bör du studera Parteds manual (eller din distributions manual)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Om du låter filsystemet fortsätta vara FAT32 kommer du inte att introducera "
+"några nya problem."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Om du konverterar till FAT32 och MS Windows är installerad på den här "
+"partitionen måste du installera om MS Windows starthanterare. Om du gör det "
+"bör du studera Parteds manual (eller din distributions manual). Märk att "
+"genom att konvertera filsystemet till FAT32 kommer det inte att kunna läsas "
+"av MS DOS, MS Windows 95a och MS Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Vill du använda FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Filsystemet kan bara ändras till den här storleken genom att konvertera till "
+"FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Filsystemet kan bara ändras till den här storleken genom att konvertera till "
+"FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted kan inte ändra partitionen till den här storleken. Vi arbetar på "
+"en lösning!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d media %x passar inte med startsektorns media %x. Du bör antagligen "
+"köra scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: kluster %ld ligger utanför filsystemet"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: kluster %ld ligger utanför filsystemet"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: inga lediga kluster"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Kunde inte hitta något filsystem."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "storleksändring av %s-filsystem stöds inte"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Filsystemet är större än dess volym!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Filsystemet innehåller fel."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Felaktiga block kunde inte läsas."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Försöker att registrera en utsträckning som börjar på block 0x%X, men det "
+"finns redan en på denna position. Du bör kontrollera filsystemet!"
+
+# sebras: Ox should be 0x
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Försöker att flytta en utsträckning från block 0x%X till block 0x%X, men det "
+"finns redan en på denna position. Detta bör inte inträffa!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Kunde inte uppdatera utsträckningscachen för HFS-filen med CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Försöker att läsa HFS-fil med CNID %X efter EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Kunde inte hitta sektor %lli för HFS-fil med CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Försöker skriva HFS-fil med CNID %X efter EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Kunde inte uppdatera utsträckningscachen för HFS+-fil med CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Försöker att läsa HFS+-fil med CNID %X efter filslut."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Kunde inte hitta sektor %lli för HFS+-fil med CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Försöker att skriva HFS+-fil med CNID %X efter EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Det går inte att ändra storlek på HFS än."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "minskar"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Dataomplacering misslyckades."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Dataomplacering lämnade viss data på slutet av volymen."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "skriver HFS huvudkatalogblock"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Ingen giltig HFS[+X]-signatur har hittats under öppningen."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Version %d av HFS+ stöds inte."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Version %d av HFSX stöds inte."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Omplacering av data lämnade viss data i slutet på volymen."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Fel vid skrivning av allokeringsfilen."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Fel vid skrivning av kompatibilitetsdelen av allokeringsfilen."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "skriver HFS+-volymhuvud"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr ""
+"Ett fel inträffade under sökning efter den obligatoriska filen med dåliga "
+"block."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Det verkar som om det finns ett fel i HFS-omslaget: filen med dåliga block "
+"innehåller inte den inbäddade HFS+-volymen."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Det går inte att ändra storlek på HFS+ på det sättet än."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "minskar inbäddad HFS+-volym"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Storleksändring av HFS+-volymen misslyckades."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "minskar HFS-omslut"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Uppdatering av HFS-omslutet har misslyckats."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Detta är inte en riktig %s-kontroll. Detta kommer att extrahera speciella "
+"lågnivåfiler för felsökningsmöjligheter."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Kontrollsumma för lista över dåliga block."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ogiltig storlek för transaktionsblock vid återuppspelning av journalen (%i "
+"byte)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Att lagra journalen utanför volymen stöds inte. Försök att inaktivera "
+"journalen och kör Parted igen."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Journalposition eller storlek är inte en multipel av sektorstorleken."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Felaktiga magiska värden i journalhuvudet."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Journalstorleken skiljer sig mellan journalinfoblocket och journalhuvudet."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Vissa huvudfält är inte en multipel av sektorstorleken."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Sektorstorleken som lagrats i journalen är inte 512 byte. Parted har bara "
+"stöd för 512 byte stora sektorer."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Felaktig journalkontrollsumma."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Journalen är inte tom. Parted måste spela upp transaktionerna före det "
+"öppnar filsystemet. Detta kommer att modifiera filsystemet."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Volymhuvudet eller huvudkatalogblocket har ändrats under återuppspelning av "
+"journalen. Du bör starta om Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "En utsträckning har inte omplacerats."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"En referens till en utsträckning kommer från en plats den inte borde. Du "
+"bör kontrollera filsystemet!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Denna HFS-volym har ingen katalogfil. Detta är väldigt ovanligt!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Denna HFS-volym har ingen överspillsfil för utsträckningar. Detta är "
+"väldigt ovanligt!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Överspillsfilen för utsträckningar bör inte innehålla sina egna "
+"utsträckningar! Du bör kontrollera filsystemet."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Kunde inte mellanlagra filsystemet i minnet."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Listan över felaktiga block kunde inte läsas in."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Ett fel inträffade under omplacering av utsträckningar."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Denna HFS+-volym har ingen katalogfil. Detta är väldigt ovanligt!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr ""
+"Denna HFS+-volym har ingen överspillsfil för utsträckningar. Detta är "
+"väldigt ovanligt!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "visa den här hjälptexten"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "listar partitionslayout för alla blockenheter"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "visar utskriften som maskintolkningsbar"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "visar JSON-utdata"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "frågar aldrig användaren om alternativ"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "i skriptläge, fixa istället för att avbryta när du tillfrågas"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "visar versionen"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "justering för nya partitioner"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMMER är partitionsnumret som Linux använder. På disketiketter av typen MS-"
+"DOS är de primära partitionerna numrerade från 1 till 4, och de logiska "
+"partitionerna från 5 och uppåt.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "PART-TYP är en av: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAGGA är en av: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ENHET är en av: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "önskad justering: minimum eller optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYP är en av: primär, logisk, utökad\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYP är en av: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"BÖRJAN och SLUT är platser på disken, såsom 4GB eller 10%. Negativa värden "
+"räknas från slutet på disken. Till exempel, -1s anger exakt den sista "
+"sektorn.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"SLUT är en plats på disken, såsom 4GB eller 10%. Negativa värden räknas "
+"från slutet på disken. Till exempel, -1s anger exakt den sista sektorn.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "TILLSTÅND är ett av: på, av\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "ENHET är vanligen /dev/hda eller /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAMN är vilket ord du vill\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Upphovsrätt © 1998-2006 Free Software Foundation, Inc.\n"
+"Detta program är fri programvara och innefattas av GNU General Public "
+"License.\n"
+"\n"
+"Följande text är en informell översättning som enbart tillhandahålls i\n"
+"informativt syfte. För alla juridiska tolkningar gäller den engelska "
+"original-\n"
+"texten.\n"
+"\n"
+"Detta program distribueras i hopp om att det ska vara användbart, men UTAN\n"
+"NÅGON SOM HELST GARANTI, även utan underförstådd garanti om SÄLJBARHET "
+"eller\n"
+"LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU General Public License för\n"
+"ytterligare information.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(tid kvar %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Partitionen %s används. Är du säker på att du vill fortsätta?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Partitionen på %s är i bruk."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Den befintliga disketiketten på %s kommer att förstöras och all data på "
+"denna disk kommer att gå förlorad. Vill du fortsätta?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Ny typ av disketikett?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Partitionsnamn?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Filsystemstyp?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Början?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Slut?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Du begärde en partition från %s till %s (sektorerna %llu..%llu).\n"
+"Den närmsta platsen vi kan hantera är %s till %s (sektorerna %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Är detta fortfarande godtagbart för dig?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Den resulterande partitionen är inte korrekt justerad för bästa prestanda: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "okänd (malloc misslyckades)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s-disketiketter stöder inte partitionsnamn."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Partitionsnummer?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s-disketiketter stöder inte partitionsnamn."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ogiltigt nummer."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Partitionstyp?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ogiltigt nummer."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS-geometri för cylinder,huvud,sektor: %d,%d,%d. Varje cylinder är %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Modell: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sektorstorlek (logisk/fysisk): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Partitionstabell: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Diskflaggor: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Nummer"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Början"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Slut"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Storlek"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Typ"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Filsystem"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Namn"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Flaggor"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Ledigt utrymme"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"En %s %s-partition hittades på %s -> %s. Vill du lägga till den till "
+"partitionstabellen?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "söker efter filsystem"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Kommandot ändra_storlek har tagits bort i parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Att minska storlek för en partition kan orsaka dataförlust, är du säker på "
+"att du vill fortsätta?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ny enhet?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "justeringstyp(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d justerad\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d inte justerad: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Flagga att invertera?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Nytt tillstånd?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Enhet?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "justeringskontroll"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"justeringskontroll TYP N kontrollera TYP(min|opt)-justering "
+"för partition N"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "hjälp"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"hjälp [KOMMANDO] skriver ut allmän hjälp eller hjälp "
+"för KOMMANDO"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ETIKETT-TYP skapa en ny disketikett "
+"(partitionstabell)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYP [FS-TYP] BÖRJAN SLUT skapa en partition"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"\"mkpart\" skapar en partition utan att skapa ett nytt filsystem på "
+"partitionen. FS-TYP måste anges för att ställa in ett lämpligt partitions-"
+"id.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "namn"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"namn NUMMER NAMN ge namnet NAMN till partition NUMMER"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "visa"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"visa [devices|free|list,all] visa partitionstabellen, "
+"tillgängliga enheter, ledigt utrymme, alla partitioner som hittats, eller en "
+"specifik partition"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Utan argument så skriver \"visa\" ut hela partitionstabellen. Dock kan "
+"diverse andra åtgärder genomföras med följande argument.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : visa alla aktiva blockenheter\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : visa information om ledigt, opartitionerat utrymme på den "
+"aktuella blockenheten\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr " list, all : visa partitionstabellerna på alla aktiva blockenheter\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "avsluta"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "avsluta avsluta programmet"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rädda"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rädda BÖRJAN SLUT rädda en förlorad partition nära "
+"BÖRJAN och SLUT"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "ändra_storlek"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Kommandot ändra_storlek har tagits bort i parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "ändra_partstorlek"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"ändra_partstorlek NUMMER SLUT ändra storlek för partition NUMMER"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "ta_bort"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "ta_bort NUMMER ta bort partition NUMMER"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "välj"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "välj ENHET välj enheten att redigera"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_inställning"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_inställning FLAGGA TILLSTÅND ändra FLAGGA för vald enhet"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_växla"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_växla [FLAGGA] växla tillståndet för FLAGGA på "
+"vald enhet"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "ställ_in"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"ställ_in NUMMER FLAGGA TILLSTÅND ändra FLAGGAn på partition NUMMER"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "växla"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"växla [NUMMER [FLAGGA]] växla tillståndet för FLAGGA på "
+"partition NUMMER"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "enhet"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"enhet ENHET ställ in standardenheten till ENHET"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version visa versionsnumret och "
+"upphovsrättslig information om GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"\"version\" visar information om version och upphovsrätt för denna kopia av "
+"GNU Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Användning: %s [-hlmsfv] [-a<justering>] [ENHET [KOMMANDO [PARAMETRAR]]…]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Ingen enhet hittades"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "VARNING: Du är inte superanvändare. Se upp för rättighetsproblem.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Du bör installera om startprogrammet innan du startar om. Läs avsnitt fyra "
+"i Parteds användardokumentation för mer information."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Du kan behöva att uppdatera /etc/fstab.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Välkommen till GNU Parted! Skriv \"hjälp\" för att visa en lista över "
+"kommandon.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Användning: parted [FLAGGA]... [ENHET [KOMMANDO [PARAMETRAR]...]...]\n"
+"Tillämpa KOMMANDOn med PARAMETRAR på ENHET. Om inga KOMMANDO(n) anges\n"
+"körs programmet i interaktivt läge.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Du har hittat ett fel i GNU Parted! Det här behöver du göra:\n"
+"\n"
+"Få inte panik! Felet har antagligen inte påverkat något av ditt data.\n"
+"Hjälp oss att rätta till detta fel genom att göra följande:\n"
+"\n"
+"Kontrollera huruvida felet redan har rättats till genom att kontrollera\n"
+"den senaste versionen av GNU Parted som du kan hitta på:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Kontrollera med denna version innan du rapporterar felet.\n"
+"\n"
+"Om det inte har rättats till än, eller om du inte vet hur du ska\n"
+"kontrollera det, så besök webbsidan för GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"för ytterligare information.\n"
+"\n"
+"Din rapport bör innehålla versionsnumret för denna utgåva (%s)\n"
+"tillsammans med felmeddelandet nedan samt utskriften från\n"
+"\n"
+"\tparted ENHET unit co print unit s print\n"
+"\n"
+"och följande kommandohistorik som du angav.\n"
+"Inkludera även ytterligare information om din konfiguration som\n"
+"du anser vara viktigt att veta.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Kommandohistorik:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Fel: SEGV_MAPERR (Address not mapped to object)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Fel: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Fel: En allmän SIGSEGV-signal påträffades.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Fel: FPE_INTDIV (Integer: divide by zero)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Fel: FPE_INTOVF (Integer: overflow)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTDIV (Float: divide by zero)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTOVF (Float: overflow)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTUND (Float: underflow)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTRES (Float: inexact result)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTINV (Float: invalid operation)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Fel: FPE_FLTSUB (Float: subscript out of range)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Fel: A general SIGFPE signal was encountered."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Fel: ILL_ILLOPC (Illegal Opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Fel: ILL_ILLOPN (Illegal Operand)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Fel: ILL_ILLADR (Illegal addressing mode)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Fel: ILL_ILLTRP (Illegal Trap)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Fel: ILL_PRVOPC (Privileged Opcode)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Fel: ILL_PRVREG (Privileged Register)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Fel: ILL_COPROC (Coprocessor Error)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Fel: ILL_BADSTK (Internal Stack Error)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Fel: En allmän SIGILL-signal påträffades."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "ogiltigt token: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Förväntade ett partitionsnummer."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Partitionen finns inte."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Förväntade en filsystemstyp."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Okänd filsystemstyp â€%sâ€."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Förväntade en typ av disketikett."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Inga flaggor stöds"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Kan inte skapa några fler partitioner."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Förväntade en partitionstyp."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "på"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "av"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "FLAGGOR:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "KOMMANDON:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Rapportera fel till: %s\n"
+"Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Använder %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Detta kommando är meningslöst i icke-interaktivt läge.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Utökade partitioner kan inte gömmas i disketiketter av typen msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Utökade partitioner kan inte vara återställningspartitioner på msdos-"
+#~ "disketiketter."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMMER : visa mer detaljerad information om denna specifika "
+#~ "partition\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: flaggan \"--%s\" tillåter inget argument\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: okänd flagga \"--%s\"\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: flaggan \"-W %s\" tillåter inget argument\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: flaggan â€-W %s†kräver ett argument\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Webbsida för %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "ogiltigt %s%s-argument â€%sâ€"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "ogiltigt suffix i %s%s-argumentet â€%sâ€"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s-argumentet â€%s†är för stort"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Partitionstabellen kunde inte läsas om. Det betyder att du behöver starta "
+#~ "om datorn innan du kan montera några ändrade partitioner. Du måste också "
+#~ "installera om starthanteraren innan du startar om (vilket kan innebära "
+#~ "montering av ändrade partitioner). Det är omöjligt att göra båda! Du "
+#~ "måste starta från en räddningsskiva och installera om starthanteraren "
+#~ "från den. Läs kapitel fyra i Parteds användardokumentation för mer "
+#~ "information."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Partitionstabellen på %s kan inte läsas om (%s). Det betyder att Hurd "
+#~ "inte vet nånting om de ändringar du gjort. Du bör starta om datorn innan "
+#~ "du gör nånting med %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Startområdet börjar inte vid partitionens början."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Filsystemet har en logisk sektorstorlek på %d. Det är känt att GNU Parted "
+#~ "inte fungerar bra med andra sektorstorlekar än 512 byte."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Filen %s är markerad som en systemfil. Det betyder att om den flyttas så "
+#~ "kan det orsaka att vissa program slutar att fungera."
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Användning: %s [FLAGGA]\n"
+#~ " eller: %s ENHET UNDRE\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Töm oanvänt utrymme på en FAT-partition (ett testverktyg för GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help visa denna hjälp och avsluta\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version skriv ut versionsinformation och avsluta\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "för få argument"
+
+#~ msgid "too many arguments"
+#~ msgstr "för många argument"
+
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "ogiltigt undre enhetsnummer: %s"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Enheten %s har en logisk sektor-storlek på %lld. Inte alla delar av GNU "
+#~ "Parted har stöd för detta för stunden, och den fungerande programkoden "
+#~ "för detta är MYCKET EXPERIMENTIELL.\n"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted kunde inte läsa om partitionstabellen på %s (%s). Det betyder att "
+#~ "Linux inte vet nånting om de ändringar du gjort."
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "Stöd för att öppna filsystem av typ %s är inte implementerat än."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr "Stöd för att skapa filsystem av typ %s är inte implementerat än."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "Stöd för att kontrollera filsystem av typ %s är inte implementerat än."
+
+#~ msgid "growing file system"
+#~ msgstr "växande filsystem"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Kan inte kopiera till en överlappande partition."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Direkt stöd för att kopiera filsystem är inte implementerat än för %s. "
+#~ "Dock finns det stöd för att ändra storleken. Därför kan filsystemet "
+#~ "kopieras om den nya partitionen är minst lika stor som den gamla. Så "
+#~ "antingen får du minska partitionen som du försöker kopiera, eller så "
+#~ "kopierar du till en större partition."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Stöd för att kopiera filsystem av typ %s är inte implementerat än."
+
+#~ msgid "creating"
+#~ msgstr "skapar"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr ""
+#~ "Filsystemet befinner sig i ett ogiltigt tillstånd. Kanske är det monterat?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr ""
+#~ "Filsystemet använder ett gammalt format (inte möjligt att ändra storlek "
+#~ "på)."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr "Ogiltigt antal lediga block. Kör reiserfsck --check först."
+
+#~ msgid "checking"
+#~ msgstr "kontrollerar"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr "Reiserfs-trädet verkar vara skadat. Kör reiserfsck --check först."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Filsystemet (reiserfs) klarade en grundläggande kontroll. För en mer "
+#~ "genomgående kontroll, kör reiserfsck --check."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Tyvärr, kan inte flytta början av reiserfs-partitioner än."
+
+#~ msgid "expanding"
+#~ msgstr "expanderar"
+
+#~ msgid "copying"
+#~ msgstr "kopierar"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Kunde inte slå upp symbolen %s. Fel: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted hittade ett ogiltigt libreiserfs-bibliotek."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted har upptäckt ett versionsfel i gränssnittet mot libreiserfs. "
+#~ "Hittade %d-%d, men kräver %d. ReiserFS-stödet kommer att vara inaktiverat."
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "Detta är inte en ECKD-disk! Denna disktyp stöds inte!"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Inkonsistenta grupphandtag!"
+
+#~ msgid "File system full!"
+#~ msgstr "Filsystemet är fullt!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Ogiltigt superblock. Är du säker på att det här är ett ext2-filsystem?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Filsystemet innehåller fel! Du bör köra e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Filsystemet har inte avmonterats på rätt sätt! Du bör köra e2fsck. "
+#~ "Ändring på ett inkorrekt filsystem kan orsaka allvarliga skador."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "Filsystemet har en inkompatibel funktion aktiverad. Kompatibla "
+#~ "funktioner är has_journal, dir_index, filetype, sparse_super och "
+#~ "large_file. Använd tune2fs eller debugfs för att ta bort funktioner."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Kunde inte reservera buffercache"
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Hittade en inode med felaktigt antal länkar. Bäst att du kör e2fsck först!"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Det finns inte tillräckligt många fria inoder!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Filsystemet är för fullt för att ta bort en grupp!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Filsystemet har för många allokerade inoder för att ta bort en grupp!"
+
+#~ msgid "adding groups"
+#~ msgstr "lägger till grupper"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Filsystemet är för fullt för att ändra dess storlek till %i block. Tyvärr."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Ditt filsystem har för många upptagna inoder för att ändra dess storlek "
+#~ "till %i block. Tyvärr."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "Filsystemet har inte avmonterats på rätt sätt! Du bör köra e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Filsystemet har funktionen \"dir_index\" aktiverad. Parted kan endast "
+#~ "ändra storlek på filsystemet om denna funktion är inaktiverad. Du kan "
+#~ "aktivera den senare genom att köra \"tune2fs -O dir_index ENHET\" och "
+#~ "sedan \"e2fsck -fD ENHET\"."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr "Korslänkade block hittades! Bäst att du kör e2fsck först!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Block %i har ingen referens? Konstigt."
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Block %i borde inte ha markerats (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Filsystemet (e2fs) klarade en grundläggande kontroll. För en mer "
+#~ "genomgående kontroll så använd programmet e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Kan inte flytta en ext2-partitions början ännu!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Kunde inte rensa buffercachen!"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Filsystemet är för litet för ext2."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "För många dåliga sidor."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "Partitionen måste ha en av följande FS-TYPer: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Det befintliga filsystemet kommer att förstöras och all data på "
+#~ "partitionen kommer att gå förlorad. Vill du fortsätta?"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Partitionsnummer för källan?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Partitionsnummer för målet?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr ""
+#~ "En utökad partition kan inte innehålla ett filsystem. Ville du verkligen "
+#~ "köra mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Kan inte flytta en utökad partition."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Kan inte flytta en partition till sig själv. Prova att ändra storleken "
+#~ "istället."
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Mindre: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "Flaggor: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Filsystem: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Storlek: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Minsta storlek: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Största storlek: "
+
+#~ msgid "check"
+#~ msgstr "kontrollera"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "kontrollera NUMMER gör en enkel kontroll av "
+#~ "filsystemet"
+
+#~ msgid "cp"
+#~ msgstr "kopiera"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "kopiera [FRÃ…N ENHET] FRÃ…N-NUMMER TILL-NUMMER kopiera ett filsystem till "
+#~ "en annan partition"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs PART-TYP FS-TYP BÖRJAN SLUT skapa en partition med ett "
+#~ "filsystem"
+
+#~ msgid "move"
+#~ msgstr "flytta"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "ändra_storlek NUMMER BÖRJAN SLUT ändra storlek på partition "
+#~ "NUMMER och dess filsystem"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: otillåten flagga -- %c\n"
+
+#~ msgid "Unable to determine the block size of this dasd"
+#~ msgstr "Kunde inte fastställa blockstorleken på denna dasd"
+
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than 512 bytes"
+#~ msgstr ""
+#~ "Sektorstorleken på %s är %d byte. Parted fungerar inte bra på skivor med "
+#~ "annan sektorstorlek än 512 byte"
+
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "Enheten %s har märklig geometri."
+
+#~ msgid "unknown"
+#~ msgstr "okänd"
diff --git a/po/tr.gmo b/po/tr.gmo
new file mode 100644
index 0000000..4a09ee9
--- /dev/null
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..049be23
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,3748 @@
+# translation of parted-3.1.po to Turkish
+# This file is distributed under the same license as the parted package.
+# Copyright (C) 2011 Free Software Foundation, Inc.
+# parted-3.1.po'nun Türkçe çevirisi
+# Eyüp Hakan Duran <hakan_duran@hotmail.com>, 2010, 2011, 2012.
+# Volkan Gezer <volkangezer@gmail.com>, 2017.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted-3.1.90\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2017-04-03 15:08+0100\n"
+"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
+"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "%2$s için geçersiz argüman %1$s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "%2$s için belirsiz argüman %1$s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Geçerli argümanlar şunlardır:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "yazma hatası"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Bilinmeyen sistem hatası"
+
+#: lib/getopt.c:278
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: '-W %s' seçeneği belirsiz\n"
+
+#: lib/getopt.c:284
+#, fuzzy, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: '%s' seçeneği belirsiz; olasılıklar:"
+
+#: lib/getopt.c:319
+#, fuzzy, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: '%c%s' seçeneği bilinmiyor\n"
+
+#: lib/getopt.c:345
+#, fuzzy, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: '%c%s' seçeneği argümansız kullanılır\n"
+
+#: lib/getopt.c:360
+#, fuzzy, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: '--%s' seçeneği için bir argüman gerekli\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: geçersiz seçenek -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: seçenek için bir argüman gerekli -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Başarılı"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "EÅŸleÅŸme yok"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Geçersiz düzenli ifade"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Geçersiz harmanlama karakteri"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Geçersiz karakter sınıfı ismi"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "İzleyen tersbölü"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Geçersiz geriye başvuru"
+
+#: lib/regcomp.c:143
+#, fuzzy
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "[ ya da [^ eÅŸleÅŸmiyor"
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "( ya da \\( eÅŸleÅŸmiyor"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "\\{ eÅŸleÅŸmiyor"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "\\{\\} in içeriği geçersiz"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Geçersiz kapsam sonu"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Bellek tükendi"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Geçersiz önceki düzenli ifade"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Düzenli ifadenin sonu eksik"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Düzenli ifade çok büyük"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr ") ya da \\) eÅŸleÅŸmiyor"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Daha önce düzenli ifade yok"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[eE]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[hH]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "%s (%s) tarafından paketlendi\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "%s tarafından paketlendi\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, fuzzy, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"\n"
+"Lisans GPLv3+: GNU GPL sürüm 3 ya da sonrası <http://gnu.org/licenses/gpl."
+"html>\n"
+"Bu özgür yazılımdır: değiştirmek ve yeniden dağıtmakta özgürsünüz.\n"
+"Yasal olarak izin verildiği ölçüde GARANTİ YOKTUR.\n"
+"\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "%s tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "%s ve %s tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "%s, %s ve %s taraından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%s, %s, %s ve %s\n"
+"tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%s, %s, %s, %s ve %s\n"
+"tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"%1$s, %2$s, %3$s, %4$s,\n"
+"%5$s ve %6$s tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"%1$s, %2$s, %3$s, %4$s,\n"
+"%5$s, %6$s ve %7$s tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"%1$s, %2$s, %3$s, %4$s,\n"
+"%5$s %6$s, %7$s ve %8$s\n"
+"tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"%1$s, %2$s, %3$s, %4$s,\n"
+"%5$s %6$s, %7$s, %8$s ve\n"
+"%9$s tarafından yazıldı.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"%1$s, %2$s, %3$s, %4$s,\n"
+"%5$s %6$s, %7$s, %8$s,\n"
+"%9$s ve diğerleri tarafından yazıldı.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, fuzzy, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"\n"
+"Yazılım hatalarını %s'e bildirin.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "%s hatalarını %s'e bildirin.\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s başlangıç sayfası: <%s>\n"
+
+#: lib/version-etc.c:260
+#, fuzzy, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "GNU yazılımı kullanmada genel yardım: <http://www.gnu.org/gethelp/>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "bellek tükendi"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Disk Görüntüsü"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "%1$s açarken hata: %2$s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"%1$s oku-yaz şeklinde açılamıyor (%2$s). %3$s salt-okunur olarak açıldı."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%2$s'te okuma için arama sırasında %1$s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%2$s'i okuma sırasında %1$s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "%s'e yazılamıyor, çünkü salt-okunur olarak açılmış."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%2$s'e yazma için arama sırasında %1$s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%2$s'e yazma sırasında %1$s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Kullanım: %s [SEÇENEK] [AYGIT]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"İşletim sistemini disk bölümleme tablosu değişikliklerinden haberdar eder.\n"
+"\n"
+" -d, --dry-run iÅŸletim sistemini haberdar etmez\n"
+" -s, --summary içeriğin bir özetini basar\n"
+" -h, --help bu yardımı görüntüler ve çıkar\n"
+" -v, --version sürüm bilgisini çıkartır ve çıkar\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"AYGIT verilmediğinde, tüm disk bölümlerini yokla.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Yazılım hatalarını <%s>'e bildirin.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "%s açılamadı."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Depo sondalanamadı."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"UYARI: Çekirdek %1$s (%2$s) üzerindeki bölümleme tablosunu yeniden "
+"okuyamadı. Bunun sonucu olarak, bilgisayarı yeniden başlatmadan tüm "
+"değişikliklerinizi yansıtmayabilir."
+
+#: libparted/arch/gnu.c:261
+#, fuzzy, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"UYARI: Çekirdek %1$s (%2$s) üzerindeki bölümleme tablosunu yeniden "
+"okuyamadı. Bunun sonucu olarak, bilgisayarı yeniden başlatmadan tüm "
+"değişikliklerinizi yansıtmayabilir."
+
+#: libparted/arch/gnu.c:274
+#, fuzzy, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"UYARI: Çekirdek %1$s (%2$s) üzerindeki bölümleme tablosunu yeniden "
+"okuyamadı. Bunun sonucu olarak, bilgisayarı yeniden başlatmadan tüm "
+"değişikliklerinizi yansıtmayabilir."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%1$s %2$s diske eşzamanlanmaya çalışılıyor"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Dosya durum bilgisi alınamayan aygıt %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "%s'in dm türü belirlenemedi."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"%1$s: %2$s için sektör boyutu belirlenemiyor.\n"
+"Öntanımlı sektör boyutu (%3$lld) kullanılacak."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"%s için fiziksel sektör boyutu belirlenemiyor.\n"
+"Mantıksal sektör boyutu (%lld) kullanılacak."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "%1$s (%2$s)'in boyutu belirlenemedi"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Genel IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "%s - %s aygıtının kimliği alınamadı "
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Aygıt %s fiziksel sektör başına çok sayıda (%d) mantıksal sektör içeriyor.\n"
+"GNU Parted bunu DENEYSEL olarak bazı disk etiketi/dosya sistemi "
+"kombinasyonları için destekliyor, örneğin GPT ve ext2/3.\n"
+"Lütfen güncel bilgi için web sitesine başvurun."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "%s - %s SCSI aygıtını ilklendirmede hata"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"%s aygıtı.çok küçük olduğundan muhtemelen bir dosya sistemi ya da bölümleme "
+"tablosu depolayamıyor. Yanlış aygıtı seçmiş olmayasınız?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"%s Dosya/aygıtının geometrisi belirlenemedi. CİDDEN ne yaptığınızı "
+"bilmiyorsanız Parted kullanmamalısınız!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Genel SD/MMC Bellek Kartı"
+
+#: libparted/arch/linux.c:1423
+#, fuzzy
+msgid "NVMe Device"
+msgstr "Yeni aygıt?"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID denetleyici"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA Aygıtı"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "Ethernet Aygıtı üzerinde ATA"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD sürücüsü"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Akıllı Dizi"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr ""
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID Denetleyici"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I20 Denetleyici"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "Kullanıcı Kipi Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Geri dönüşlü aygıt"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux aygıt-eşlemleyicisi (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen Sanal Blok Aygıtı"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio Blok Aygıtı"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux Yazılımı RAID Dizisi"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr ""
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Desteklenmeyen aygıt türü"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "%s fsyncleme/kapamada hata: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%s okunurken %0.0s dosya sonu"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Kernel'i %1$s -- %2$s disk bölümü değişikliklerinden haberdar etmede hata. "
+"Bu, siz (bilgisayarı) yeniden açana dek %3$s'de yaptığınız değişiklikleri "
+"Linux'un bilmemesi demek -- dolayısıyla bilgisayarınızı yeniden açmadan "
+"diski bağlamak dahil hiçbir şekilde kullanmamalısınız."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "%s'nin başlangıç ve uzunluğu belirlenemedi."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"%2$s üzerindeki %1$s bölüm(ler)ü yazıldı, fakat muhtemelen kullanılmakta "
+"olduğundan kernel değişiklikten haberdar edilemedi. Sonuç olarak, eski "
+"bölüm(ler) kullanımda kalacak. Daha fazla değişiklik yapmadan "
+"bilgisayarınızı şimdi yeniden başlatmalısınız."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "Başlangıçtan önce son gelemez! (başlangıç sektörü=%jd uzunluk=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr ""
+"%3$s üzerindeki disk bölümünün dışında yeralan %1$ld-%2$ld sektörlere "
+"yazmaya çalışılıyor."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "hatalı blok aranıyor"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Geriye doğru iz sürme yığınında %d çağrı var:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "%2$s'deki iddia (%1$s):%4$s() işlevindeki %3$d başarısız."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: tanınmayan disk etiketi"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Bu libparted'in %s için yazma desteği yok. Belki de salt-okunur olarak "
+"derlenmiÅŸtir."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "%1$d disk bölümü %2$s, fakat dosya sistemi %3$s'dir."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "silindir_hizalaması"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Bilinmeyen disk bayrağı, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s disk etiketleri ek disk bölümlerini desteklemiyor."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s disk etiketleri mantıksal ya da ek disk bölümlerini desteklemiyor."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Çok fazla birincil disk bölümü"
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "%s'e mantıksal disk bölümü eklenemez, çünkü ek disk bölümü yok."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%s üzerinde birden fazla ek disk bölümü olamaz"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Ek disk bölümü dışında mantıksal disk bölümleri olamaz."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s üzerinde ek disk bölümü dışında mantıksal disk bölümleri olamaz."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Bir ek disk bölümü içinde birincil disk bölümü bulunamaz."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Disk bölümü disk dışında bulunamaz!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Örtüşen disk bölümleri olamaz"
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "metaverisi"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "kullanılmamış"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "ek"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "mantıksal"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "birincil"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "önyükleme"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "kök"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "takas"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "gizli"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-servisi"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "kalıtılmış yeniden başlatma"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr ""
+
+#: libparted/disk.c:2582
+#, fuzzy
+msgid "bls_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr ""
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Bilinmeyen.disk bölümü bayrağı, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Bilgi"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Uyarı"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Hata"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Ölümcül"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Yazılım hatası"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Uyarlama yok"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Onar"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Evet"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Hayır"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "Tamam"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Yeniden dene"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Yoksay"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Vazgeç"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"GNU parted'da bir yazılım hatası saptandı. Hata bildirmek için daha fazla "
+"bilgiye ulaşmak üzere parted'ın web sitesine başvurun: http://www.gnu.org/"
+"software/parted/parted.html! Lütfen %s'e en azından sürüm (%s) ve aşağıdaki "
+"mesajı içeren bir yazılım hatası raporu gönderin: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "AIX disk etiketlerini okuma desteği henüz sağlanmamıştır."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "AIX disk etiketlerini yazma desteği henüz sağlanmamıştır."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "AIX disk etiketlerine disk bölümü ekleme desteği henüz sağlanmamıştır."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"AIX disk etiketlerinde disk bölümü çoğaltma desteği henüz sağlanmamıştır."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"AIX disk etiketlerinde sistem türü disk bölümü kurma desteği henüz "
+"sağlanmamıştır."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "AIX disk etiketlerinde bayrak kurma desteği henüz sağlanmamıştır."
+
+#: libparted/labels/atari.c:278
+#, fuzzy, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Parted sektör boyutu %d bayta eşit olmayan disklerde HFS dosya sistemi "
+"kullanamaz."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr ""
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr ""
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr ""
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr ""
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+
+#: libparted/labels/atari.c:1169
+#, fuzzy
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Ek disk bölümleri kopyalanamıyor."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr ""
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Disk bölümü üzerindeki tüm koşullar karşılanamadı."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Bir disk bölümü numarası atanamadı."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Bir bsd disk etiketi yuvası tahsis edilemedi"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr ""
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Bir dasd disk etiketi yuvası tahsis edilemedi"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "%1$s üzerinde geçersiz disk bölümleme tablosu - yanlış imza %2$x"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr ""
+"Geçersiz disk bölümleme tablosu - %s üzerinde özyinelemeli disk bölümü."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted, Windows Dinamik Disk tarafından yönetilen bölümleri yeniden "
+"boyutlayamaz."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "Başka disk bölümü oluşturulamıyor"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s'in ek disk bölümü (oylum başlığı disk bölümü) yok."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Sağlama toplamı, disk bölümleme tablosunun bozuk olduğunu belirtir şekilde "
+"yanlış."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Yalnızca birincil disk bölümleri kök disk bölümü olabilir."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Yalnızca birincil disk bölümleri takas disk bölümleri olabilir."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Yalnızca mantıksal disk bölümleri bir önyükleme dosyası olabilir."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"%s'e dvh bölümleme adı atanması başarısız:\n"
+"Yalnızca mantıksal disk bölümlerinin (önyükleme dosyaları) bir adı olabilir."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Çok fazla birincil disk bölümü"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "açma hatası"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "arama hatası"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "okuma hatası"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() hatası"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API sürüm uyuşmazlığı"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Desteklenmeyen disk türü"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Desteklenmeyen disk biçemi"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "Disk kullanımda"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Config dosyasında sözdizim hatası"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Oylum etiketi bozuk"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Bir veri küme adı bozuk"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Bellek tahsisi başarısız"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Aygıt doğrulaması başarısız"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Belirtilen aygıt geçerli bir DASD aygıtı değil"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr ""
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Ölümcül hata"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Oylum etiketi için yer yok"
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Disk bölümü bilgisi için yer yok"
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Geçersiz VTOC."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "API sürümü belirlenemiyor."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr "Mevcut API sürümü '%d' dasd sürücüsü API sürümüyle '%d' uyuşmuyor!"
+
+#: libparted/labels/fdasd.c:1020
+#, fuzzy
+msgid "Could not retrieve disk size."
+msgstr "Disk bilgisi alınamıyor."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Disk geometrisi bilgisi alınamıyor."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Blok boyutu bilgisi alınamıyor."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr ""
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "GPT için aygıt çok küçük."
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"GPT disk bölümleme tablosu biçemi sürüm %x olup, Parted'ın "
+"tanıyabileceğinden daha yenidir. Lütfen bize bildirin!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"%s için kullanılabilir boşluğun tamamı kullanılmamış görünüyor, GPT'yi "
+"ayarlayıp tüm mevcut boşluğu (%llu ek blok) kullanabilir ya da mevcut ayarla "
+"devam edebilirsiniz?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"GPT tablosunun yedeği, olması gerektiği gibi diskin sonunda değil. Yedeği "
+"sona taşıyarak (ve eski yedeği silerek) onar?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Hem birincil, hem de yedek GPT tablosu bozuk. Yeni bir tablo oluşturmayı ve "
+"Parted'ın kurtarma özelliğini kullanarak disk bölümlerini kurtarmayı deneyin."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Yedek GPT tablosu bozuk, ama birincil tamam görünüyor, dolayısıyla o "
+"kullanılacak."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Birincil GPT tablosu bozuk, ama yedek tamam görünüyor, dolayısıyla yedek "
+"kullanılacak."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "birincil bölümleme tablosu dizisi CRC uyumsuzluğu"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "disk bölümü adı çevrilemedi"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Mac disk etiketleri için geçersiz imza %x."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Disk bölümü eşleminin disk bölümü eşlem girdisi yok!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s, bir Mac disk etiketi için çok küçük!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "%d disk bölümü geçersiz imzaya sahip %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "%d disk bölümü 0 baytlık geçersiz uzunluğa sahip!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Veri bölgesi, disk bölümünün başından başlamıyor"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Disk bölümünün önyükleme bölgesi tüm disk bölümünü kaplamıyor."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Disk bölümünün veri bölgesi tüm disk bölümünü kaplamıyor."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "Aygıt tanımlayıcısında tuhaf blok boyutu: %d bayt, 512'ye bölünemiyor."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Sürücü tanımlayıcısı fiziksel blok boyutunun %d bayt olduğunu, Linux %d bayt "
+"olduÄŸunu bildiriyor.."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Geçerli disk bölümü eşlemi bulunamadı."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Çelişen disk bölümü eşlem girdi boyutları! 1. Girdi %1$d olduğunu, ancak "
+"%2$d. girdi %3$d olduÄŸunu bildiriyor!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Tuhaf!- 2 disk bölümü eşlem girdisi mevcut!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Bir kök ya da takas disk bölümünün adını değiştirmek, Linux'un onu olduğu "
+"gibi tanımasını engelleyecek."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Bir başka disk bölümü eklenemiyor -- disk bölüm eşlemi çok küçük!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "%s üzerinde geçersiz disk bölümleme tablosu."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"%d disk bölümü silindir sınırlarına hizalanmamış. Bu hala desteklenmiyor."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Bir başka disk bölümü eklenemiyor."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"%jd sektörün bölümleme uzunluğu %s bölümleme tablosunca zorlanan maksimum "
+"%jd'i aşıyor"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"başlangıç sektör numarası %jd,%s bölümleme tablosunca zorlanan maksimum "
+"%jd'i aşıyor"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%1$s : %3$s türündeki %2$llu bloğunda bozuk sağlama toplamı"
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : rdb bloğu bulunamadı, asla olmamalı(ydı)."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%1$s : Blok %2$d'de döngü saptandı."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%1$s : %2$s listesi %3$s bloğunda bozuk görünüyor."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Hatalı blokları listeleme başarısız."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Bölümleme bloklarını listeleme başarısız."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Dosya sistemi bloklarını listeleme başarısız"
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Önyükleme bloklarını listeleme başarısız."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "%d'ye bölümleme bloğu yazımı başarısız."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Bozuk Sun disk etiketi saptandı."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Disk CHS geometrisi (%d,%d,%d), disk etiketinde saklanan geometriye (%d,%d,"
+"%d).uymuyor."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Disk etiketi, %s'den daha büyük bir disk tanımlıyor."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "Disk %d silindire sahip ki bu maksimum 65536'dan daha çok."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Geride yalnızca Tüm Disk disk bölümü kaldı. Genellikle, bu disk bölümünün "
+"üzerine bir gerçeğini yazmak iyi bir fikir değildir. Solaris onsuz "
+"açılmayabilir, ve SILO da (sparc önyükleyicisi) ona değer verir."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun disk etiketi doldu."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "aygıtın açılması başarısız"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "aygıtta arama başarısız"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "aygıta yazma başarısız"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "aygıttan okuma başarısız"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Oylum etiketi okunamıyor."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Oylum etiketi yazılamıyor."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "VTOC etiketleri okunamıyor."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB okunamıyor."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB okunamıyor."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB okunamıyor."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB okunamıyor."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "VTOC etiketleri yazılamıyor."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "VTOC FMT1 DSCB yazılamıyor."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "VTOC FMT4 DSCB yazılamıyor."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "VTOC FMT5 DSCB yazılamıyor."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "VTOC FMT7 DSCB yazılamıyor."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "VTOC FMT9 DSCB yazılamadı."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Yetersiz bellek"
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Özel birim 'COMPACT' için birim boyutu alınamıyor."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" yerleşimler için geçersiz yazıma sahip."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Maksimum kafa deÄŸeri %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Maksimum sektör değeri %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "%1$s yerleşimi %2$s aygıtının dışında."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Geçersiz numara."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "< 1 bir değer yerine daha küçük bir birim kullanın"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Bölümleme bloğunu atama başarısız\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Boluğu atama başarısız\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s: Önyükleme bloğu %llu okunamıyor\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s: Kök bloğu %llu okunamıyor\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Id listesi öğesi atanamıyor\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s: %llu bloğu okunamıyor\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s: %llu bloğunda yanlış sağlama toplamı türü %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: %d bloğu yazılamıyor\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: Diske özgün rdb bloğu atanamıyor\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : rdb bloğu bulunamadı, asla olmamalı(ydı)\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : %llu bölümleme bloğunu okuma başarısız\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted yanlış derlenmiş: FAT önyükleme sektörü 512 bayt olmalı. FAT "
+"desteği devre dışı bırakılacak."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Dosya sistemi, FAT dosya sistemi için geçersiz bir imzaya sahip.."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Dosya sistemi, FAT dosya sistemi için geçersiz bir sektör boyutuna sahip."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Dosya sistemi, FAT dosya sistemi için geçersiz bir küme boyutuna sahip."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Dosya sistemi, FAT dosya sistemi için geçersiz bir ayrılmış sektör sayısına "
+"sahip."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Dosya sistemi, geçersiz FATS sayısına sahip."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Dosya sisteminin CHS geometrisi (%d, %d, %d) olup, bu geçersizdir. Bölümleme "
+"tablosunun CHS geometrisi (%d, %d, %d)'dir."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"FAT önyükleme sektörü mantıksal sektör boyutunun 0 olduğunu söylüyor. Bu "
+"tuhaf. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT önyükleme sektörü FAT tablosunun olmadığını söylüyor. Bu tuhaf. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"FAT önyükleme sektörü kümelerin 0 sektör olduğunu söylüyor. Bu tuhaf. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Dosya sistemi FAT12, ki desteklenmiyor."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Tanınmayan ezki tarz linux takas imzası '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Tanınmayan yeni tarz linux takas imzası '%10s'."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Tanınmayan swsusp linux takas imzası '%9s'."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted sektör boyutu %d bayta eşit olmayan disklerde HFS dosya sistemi "
+"kullanamaz."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Dosya sisteminin CHS geometrisi (%d, %d, %d), ki bu geçersiz. Bölümleme "
+"tablosunun CHS geometrisi (%d ,%d ,%d). Yoksay'ı seçerseniz dosya "
+"sisteminin CHS geometrisi değiştirilmeyecek. Onar'ı seçerseniz dosya "
+"sisteminin CHS geometrisi, bölümleme tablosunun CHS geometrisiyle uyuşacak "
+"ÅŸekilde ayarlanacak."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Bilgi sektörü yanlış imzaya sahip. (%x). Şimdilik vazgeçi seçin ve bir "
+"yazılım hatası raporu gönderin. Çaresizseniz, yoksaymak muhtemelen güvenli."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Bu disk bölümünü bu boyuta küçültmek için %1$s'lik boş yere gereksiniminiz "
+"var. Halen yalnızca %2$s kadarı boş."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "Küme başlangıcı delta = %d, küme boyutu olan %d'nin katsayısı değil."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "%s için bozuk dizin girişi: ilk küme dosya belirtecinin sonunda."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Bozuk FAT: %s için sonlandırılmamış zincir. dosfsck ya da scandisk "
+"yürütmelisiniz."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Bozuk FAT: %d kümesi %s için dosya sistemi zincirinin dışında. dosfsck ya "
+"da scandisk yürütmelisiniz."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Bozuk FAT: %d kümesi %s için çapraz bağlı. dosfsck ya da scandisk "
+"yürütmelisiniz."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s %dkdır, fakat %d kümeye (%dk) sahip."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Disk bölümü, bir %s dosya sistemi için çok büyük/küçük"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT'lar uyuşmuyor. Eğer bunun ne demek olduğunu bilmiyorsanız, Vazgeç'i "
+"seçin, dosya sisteminde scandisk'i yürütün, ve buraya dönün."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Bu FAT türü için olası yapılandırma yok."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Dosya sistemi, Windows'un hoşlanması beklenen boyutlara sahip değil. Küme "
+"boyutu %dk (%dk beklenirdi); küme sayısı %d (%d beklenirdi); FAT boyutları "
+"%d sektördür (%d beklenirdi)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "Dosya sistemi boşluğun %d küme olduğunu bildiriyor, %d küme değil."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Kök dizininde tüm dosyalara yetecek yer yok. Ya iptal edin, ya da dosyaları "
+"yitirmek için yoksayın."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Kök dizinine yazmada hata."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Eğer dosya sisteminizi FAT16 olarak bırakırsanız sorununuz olmaz."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Eğer FAT16'ya dönüştürürseniz ve bu disk bölümüne MS Windows yüklenmişse, MS "
+"Windows önyükleyicisini yeniden yüklemelisiniz. Eğer bunu yapmak "
+"isterseniz, Parted el kitabına (ya da dağıtımınızın el kitabına) "
+"başvurmalısınız."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Eğer dosya sisteminizi FAT32 olarak bırakırsanız yeni bir sorunla "
+"karşılaşmayacaksınız."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Eğer FAT32'ye dönüştürürseniz ve bu disk bölümüne MS Windows yüklenmişse, MS "
+"Windows önyükleyicisini yeniden yüklemelisiniz. Eğer bunu yapmak "
+"isterseniz, Parted el kitabına (ya da dağıtımınızın el kitabına) "
+"başvurmalısınız. Ayrıca FAT32'ye dönüşüm, dosya sisteminin MS DOS, MS "
+"Windows 95a ve MS Windows NT tarafından okunamaz olmasına yol açacaktır."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "FAT32 kullanmak ister misiniz?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Dosya sistemi, yalnızca FAT16'ya dönüştürülerek bu boyuta yeniden "
+"boyutlandırılabilir."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Dosya sistemi, yalnızca FAT32'ye dönüştürülerek bu boyuta yeniden "
+"boyutlandırılabilir."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted bu disk bölümünü bu boyuta yeniden boyutlandıramaz. Üzerinde "
+"çalışıyoruz!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d ortam %x önyükleme sektörünün ortamı %x'le uyuşmamakta. Muhtemelen "
+"scandisk yürütmelisiniz."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: %ld kümesi dosya sisteminin dışında"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: %ld kümesi dosya sisteminin dışında"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: boş küme yok"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Dosya sistemi saptanamıyor."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "%s dosya sistemlerini yeniden boyutlandırma desteklenmemektedir"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Dosya sistemi oylumundan daha büyük!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Dosya sistemi hatalar içeriyor."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Hatalı bloklar okunamıyor."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Blok 0x%X'den başlayacak şekilde bir aralık kaydedilmeye çalışılıyor, fakat "
+"bu konumda bir başkası zaten mevcut. Dosya sistemini kontrol etmelisiniz!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, fuzzy, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Blok Ox%X'den Ox%X'e bir aralık taşınmaya çalışılıyor, fakat bu konumda bir "
+"başkası zaten mevcut. Bu olmamalı!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Aralık önbelleği CNID %X'li HFS dosyası için güncellenemedi."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "EOF arkasında CNID %X'li HFS dosyası okunmaya çalışılıyor."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "CNID %2$X li HFS dosyasının %1$lli sektörü bulunamadı."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "EOF arkasında CNID %X'li HFS dosyası yazılmaya çalışılıyor."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Aralık önbelleği CNID %X'li HFS+ dosyası için güncellenemedi."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "EOF arkasında CNID %X'li HFS+ dosyası okunmaya çalışılıyor."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "CNID %2$X li HFS+ dosyasının %1$lli sektörü bulunamadı."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "EOF arkasında CNID %X'li HFS+ dosyası yazılmaya çalışılıyor."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Üzgünüm, HFS henüz o şekilde yeniden boyutlandırılamıyor."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "küçültülüyor"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Veri yeniden konumlandırılması başarısız."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "Veri yeniden konumladırılması oylumun sonunda bazı verileri bıraktı."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "HFS Ana Dizin Bloğu yazılıyor"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Açarken, geçerli HFS[+X] imzası bulunamadı."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "HFS+'in %d sürümü desteklenmiyor."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "HFSX'in %d sürümü desteklenmiyor."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "Veri yeniden konumladırılması oylumun sonunda bazı verileri bıraktı."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Atama dosyasına yazmada hata."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Atama dosyasının uyumluluk bölümüne yazmada hata."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "HFS+ Oylum Başlığı yazılıyor"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Zorunlu hatalı bloklar dosyası aranırken bir hata oluştu."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"HFS sarmalayıcısında hata var gibi görünüyor: hatalı blok dosyası, gömülü "
+"HFS+ oylumunu içermiyor."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Üzgünüm, HFS+ henüz o şekilde yeniden boyutlandırılamıyor."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "gömülü HFS+ oylumu küçültülüyor"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "HFS+ oylumunun yeniden boyutlandırılması başarısız."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "HFS sarmalayıcısı küçültülüyor"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "HFS sarmalayıcısının göncellenmesi başarısız."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Bu geçek bir %s kontrolü değil. Hata ayıklama amacıyla düşük düzey dosyalar "
+"özütlenecek."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Hatalı blok liste başlığı sağlama toplamı"
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr "Günlük tekrar okunurken geçersiz bir işlem boyut bloğu (%i bayt)."
+
+#: libparted/fs/r/hfs/journal.c:260
+#, fuzzy
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Oylum dışında depolanan günlükler desteklenmiyor. Günlüğü etkisiz kılmayı "
+"ve Parted'ı yeniden çalıştırmayı deneyin."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Günlük başlangıcı ya da boyutu sektör boyutunun katı değil."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Günlük başlığında geçersiz sihirli değerler."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "Günlük bilgi bloğu ve başlığı arasında günlük boyutu örtüşmüyor."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Bazı başlık alanları sektör boyutunun katı değil."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Günlükte kayıtlı sektör boyutu 512 bayt değil. Parted yalnızca 512 bayt "
+"uzunluktaki sektörleri destekler."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Bozuk günlük sağlama toplamı."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Günlük boş. Parted, dosya sistemini açmadan işlemleri yinelemeli. Bu, "
+"dosya sistemini deÄŸiÅŸtirecek."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Günlük yinelenirken ana dizin bloğunun oylum başlığı değişti. Parted'ı "
+"yeniden başlatmalısınız."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Bir aralık yeniden konumlanmadı."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Bir aralığın başvurusu gelmemesi gereken bir yerden geliyor. Dosya "
+"sistemini kontrol etmelisiniz!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Bu HFS oylumunun katalog dosyası yok. Bu çok sıradışı!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "Bu HFS oylumunun aralık taşması dosyası yok. Bu oldukça sıradışı!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Aralık taşması dosyası, kendi aralıklarını içermemeli! Dosya sistemini "
+"kontrol etmelisiniz."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Dosya sistemi önbelleğe alınamıyor."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Hatalı blok listesi yüklenemedi."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Aralık yeniden konumlandırılması sırasında bir hata oluştu."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Bu HFS+ oylumunun katalog dosyası yok. Bu çok sıradışı!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr "Bu HFS+ oylumunun aralık taşması dosyası yok. Bu oldukça sıradışı!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "bu yardım mesajını görüntüler"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "tüm blok aygıtların bölümleme yerleşimlerini listeler"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "makinece ayrıştırılabilir çıktıyı gösterir"
+
+#: parted/parted.c:141
+#, fuzzy
+msgid "displays JSON output"
+msgstr "makinece ayrıştırılabilir çıktıyı gösterir"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "kullanıcı müdahalesi için asla istemde bulunmaz"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr ""
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "sürümü görüntüler"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "yeni disk bölümleri için hizalama"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMBER, Linux tarafından kullanılan disk bölümü numarasıdır. Msdos disk "
+"etiketlerinde birincil disk bölümü numarası 1-4 arası, mantıksal disk "
+"bölümleri de 5 ve üstüdür.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE ÅŸunlardan biridir: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG ÅŸunlardan biridir: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIT ÅŸunlardan biridir: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "arzulanan hizalama: minimum ya da optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE şunlardan biridir: birincil, mantıksal, ek\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYPE ÅŸunlardan biridir: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START ve END disk konumlarıdır, 4GB ya da %10 gibi. Eksi değerler, diskin "
+"sonuna uzaklığı belirtir. Örneğin -1s tam olarak son sektörü belirtir.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"SON disk konumudur, 4GB ya da %10 gibi. Eksi deÄŸerler, diskin sonuna "
+"uzaklığı belirtir. Örneğin -1s tam olarak son sektörü belirtir.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STATE şunlardan biridir: açık, kapalı\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DEVICE sıklıkla /dev/hda ya da /dev/sda'dır\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAME istediğiniz herhangi bir sözcüktür\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Telifhakkı (C) 1998 - 2006 Özgür Yazılım Kuruluşu, A.Ş.\n"
+"Bu program, GNU Genel Kamu Lisansı'nca kapsanan özgür yazılımdır.\n"
+"\n"
+"Bu program, yararlı olacağı ümidiyle dağıtılmış olup, SATILABİLİRLİK ya da\n"
+"BELLİ BİR AMACA UYGUNLUK garantileri de dahil olmak üzere\n"
+"HERHANGİ BİR GARANTİ içermez. Daha fazla ayrıntı için\n"
+"GNU Genel Kamu Lisansı'na bakınız.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(kalan süre %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "%s disk bölümü kullanılıyor. Devam etmek istediğinizden emin misiniz?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "%s üzerindeki disk bölümü(leri) kullanılıyor."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"%s üzerindeki mevcut disk etiketi silinecek ve bu disk üzerindeki tüm veri "
+"kaybolacak. Devam etmek istiyor musunuz?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Yeni disk etiketi türü?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Disk bölümü türü?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Disk bölümü adı?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Dosya sistemi türü?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Başlangıç?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "BitiÅŸ?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"%1$s'den %2$s'e bir bölüm istediniz (sektör %3$llu..%4$llu).\n"
+"Becerebildiğimiz buna en yakın konum %5$s'den %6$s'e (sektör %7$llu..%8$llu)."
+"%9$s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Bu sizin için hala kabul edilebilir mi?"
+
+#: parted/parted.c:826
+#, fuzzy, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Ortaya çıkan disk bölümü en iyi performansı elde etmek için ayarlanmamış."
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr ""
+
+#: parted/parted.c:906
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s disk etiketleri ek disk bölümlerini desteklemiyor."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Disk bölümü numarası?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s disk etiketleri ek disk bölümlerini desteklemiyor."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Disk bölümü türü?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Geçersiz numara."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Disk bölümü türü?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Geçersiz numara."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr ""
+"BIOS silindiri, kafa, sektör geometrisi: %d,%d,%d. Herbir silindir %s'tir.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Model: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "Disk %1$s: %2$s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Sektör boyutu (mantıksal/fiziksel): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Disk bölümü Tablosu: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Disk Bayrakları: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Numara"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Başlangıç"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Son"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Boyut"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Tür"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Dosya sistemi"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Ä°sim"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Bayraklar"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "BoÅŸ Alan"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"%3$s -> %4$s'de bir %1$s %2$s disk bölümü bulundu. Bunu disk bölümü "
+"tablosuna eklemeyi ister misiniz?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "dosya"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "resize komutu parted 3.0'da kaldırıldı"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Bir birimi sıkıştırmak veri kaybına yol açabilir, devam etmek istiyor "
+"musunuz?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Yeni aygıt?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "hizalama türü(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d hizalandı\n"
+
+#: parted/parted.c:2055
+#, fuzzy, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d hizalanmadı\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Tersine çevirmek üzere bayrakla?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Yeni durum?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Birim?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+#, fuzzy
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TÜR N disk bölümü N'yi hiza TÜRü(min|opt) "
+"için kontrol et"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMMAND] genel yardımı ya da KOMUT yardımını "
+"yazdırır"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable LABEL-TYPE yeni bir disk etiketi (disk bölümü "
+"tablosu) oluÅŸtur"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYPE [FS-TYPE] START END bir disk bölümü yap"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"mkpart, disk bölümü üzerinde yeni bir dosya sistemi oluşturmadan bir disk "
+"bölümü yapar. DS-TÜRÜ, uygun bir disk bölümü ID atamak için "
+"belirtilebilir.\n"
+"\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name NUMBER NAME NUMBER. disk bölümünü NAME'le adlandır"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+#, fuzzy
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [aygıtlar|boşluk|liste,tümü|NUMARA] bölümleme tablosu, mevcut "
+"aygıtlar, boşluk, tüm bulunan bölümler ya da belli bir bölümü gösterir"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Argümansız olduğunda print tüm bölümleme tablosunnu gösterir. Aşağıdaki "
+"argümanlarla kullanıldığında diğer çeşitli eylemleri uygular.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : tüm aktif blok aygıtları gösterir\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : mevcut blok aygıt üzerindeki boş bölümlenmemiş alan bilgisini "
+"gösterir\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : tüm aktif blok aygıtların bölümleme tablolarını gösterir\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit programdan çık"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue START END START ve END arasındaki kayıp disk "
+"bölümlerini kurtar"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "resize komutu parted 3.0'da kaldırıldı\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart SAYI SON SAYI disk bölümünü taşı"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMBER NUMBER. disk bölümünü sil"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select DEVICE düzenlenecek aygıtı seç"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set FLAG STATE seçili aygıt üzerindeki bayrağı "
+"deÄŸiÅŸtir"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [FLAG] seçili aygıt üzerindeki BAYRAK "
+"durumunu deÄŸiÅŸtir"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr ""
+"set NUMBER FLAG STATE NUMBER. disk bölümü üzerindeki bayrağı "
+"deÄŸiÅŸtir"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "seçmece / değiştir"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMBER [FLAG] NUMBER. disk bölümü üzerindeki "
+"BAYRAK durumunu deÄŸiÅŸtir"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "birim"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "birim UNIT öntanımlı birimi UNIT'e ayarla"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "sürüm"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version GNU Parted'in sürüm numarasını ve "
+"telif hakkı bilgisini görüntüler"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"sürüm, GNU Parted'in bu kopyasının telif hakkı ve sürüm bilgisini "
+"görüntüler\n"
+
+#: parted/parted.c:2545
+#, fuzzy, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr "Kullanım: %s [-hlmsv] [-a<align>] [AYGIT [KOMUT [PARAMETRELER]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Aygıt bulunamadı"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "UYARI: Süper kullanıcı değilsiniz. İzinlere dikkat edin.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Yeniden açmadan önce önyükleyicinizi yeniden kurmalısınız. Daha fazla bilgi "
+"için Parted Kullanıcı belgesinin 4. bölümünü okuyunuz."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "/etc/fstab'i güncellemeniz gerekebilir.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"GNU Parted'a hoşgeldiniz! Komutların bir listesini görmek için 'help' "
+"yazınız.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Kullanım: parted [SEÇENEK]... [AYGIT [KOMUT [PARAMETRELER]...]...]\n"
+"KOMUTLARI PARAMETRELERle AYGITa uygular. EÄŸer KOMUT(lar) verilmezse,\n"
+"etkileşimli kipte çalışır.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"GNU Parted'da bir yazılım hatası buldunuz! Yapmanız gereken şunlardır:\n"
+"\n"
+"Paniğe kapılmayın! Yazılım hatası büyük olasılıkla verinizi etkilemedi.\n"
+"Bu hatayı onarmak için bize şunları yaparak yardım edin:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"adresinde bulabileceğiniz GNU Parted'in son sürümünü kontrol\n"
+"ederek hatanın zaten düzeltilmiş olup olmadığını kontrol edin.\n"
+"Hatayı rapor etmeden önce lütfen bu sürümü kontrol edin.\n"
+"\n"
+"Eğer hata onarılmamışsa ya da nasıl kontrol edeceğinizi bilmiyorsanız,\n"
+"lütfen GNU Parted web sitesini\n"
+"daha fazla bilgi için ziyaret edin:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"Raporunuz bu dağıtımın sürüm numarasını (%s)\n"
+"aşağıdaki hata mesajını,\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"komutunun çıktısını ve aşağıdaki girdiğiniz komut tarihçesini içermelidir.\n"
+"Ayrıca kurulumunuz hakkında önemli olduğunu düşündüğünüz ek bilgileri\n"
+"ekleyiniz.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Komut Tarihçesi:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Hata: SEGV_MAPERR (Adres nesneye eÅŸlenmedi)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Hata: SEGV_ACCERR (Eşlenmiş nesne için geçersiz izinler)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Hata: Genel bir SIGSEGV sinyaliyle karşılaşıldı.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Hata: FPE_INTDIV (Tamsayı: sıfırla bölünme)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Hata: FPE_INTOVF (Tamsayı: taşma)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTDIV (Kayan: sıfırla bölünme)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTOVF (Kayan: taÅŸma)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTUND (Kayan: boÅŸalma)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTRES (Kayan: kesin olmayan sonuç)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTINV (Kayan: geçersiz işlem)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Hata: FPE_FLTSUB (Kayan: altsimge erim dışı)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Hata: Genel bir SIGFPE sinyaliyle karşılaşıldı."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Hata: ILL_ILLOPC (Kuraldışı Opcode)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Hata: ILL_ILLOPN (Kuraldışı İşlenen)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Hata: ILL_ILLADR (Kuraldışı adresleme kipi)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Hata: ILL_ILLTRP (Kuraldışı Tuzak)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Hata: ILL_PRVOPC (Ayrıcalıklı Opcode)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Hata: ILL_PRVREG (Ayrıcalıklı Yazmaç)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Hata: ILL_COPROC (Eşişlemci Hatası)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Hata: ILL_BADSTK (Dahili Yığın Hatası)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Hata: Genel bir SIGILL sinyaliyle karşılaşıldı."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "geçersiz andaç: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Bir disk bölümü numarası bekleniyor."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Disk bölümü yok."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Bir dosya sistemi türü bekleniyor."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Bilinmeyen dosya sistemi türü \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Bir disk etiketi türü bekleniyor."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr ""
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Başka disk bölümü oluşturulamıyor."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Bir disk bölümü türü bekleniyor."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "açık"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "kapalı"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "SEÇENEKler:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "KOMUTlar:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Yazılım hatalarını %s'e bildirin\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "%s kullanılıyor\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Bu komut etkileşimsiz kipte anlamsız.\n"
+
+#, c-format
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: '--%s' seçeneği argümansız kullanılır\n"
+
+#, c-format
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: '--%s' seçeneği bilinmiyor\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: '-W %s' seçeneği argümansız kullanılır\n"
+
+#, c-format
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: '-W %s' seçeneği için bir argüman gerekli\n"
+
+#, c-format
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s başlangıç sayfası: <http://www.gnu.org/software/%s/>\n"
+
+#, c-format
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "geçersiz %s%s argüman '%s'"
+
+#, c-format
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "%s%s argümanında geçersiz sonek '%s'"
+
+#, c-format
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s argümanı '%s' çok büyük"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Disk bölümleme tablosu yeniden okunamadı, bu nedenle değiştirilmiş "
+#~ "herhangi bir disk bölümünü bağlamadan (bilgisayarı) yeniden açmalısınız. "
+#~ "Yeniden açmadan önce önyükleyicinizi de yeniden kurmalısınız (ki bu "
+#~ "değiştirilmiş disk bölümlerini bağlamayı gerektirebilir). İki şeyi "
+#~ "birden yapmak olanaksız! Dolayısıyla, bir kurtarma diskiyle açmanız ve "
+#~ "önyükleyicinizi bu diskten yeniden kurmanız gerekecek. Daha fazla bilgi "
+#~ "için Parted Kullanıcı belgesinin 4. bölümünü okuyunuz."
+
+#, c-format
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "%1$s (%2$s) üzerindeki disk bölümleme tablosu. Bu, sizin yaptığınız "
+#~ "değişiklikleri Hurd bilmiyor anlamına gelir. %3$s ile ilgili hiçbir şey "
+#~ "yapmadan önce bilgisayarınızı yeniden açmalısınız."
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Msdos disk etiketlerinde ek disk bölümleri gizli olamaz."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Önyükleme bölgesi, disk bölümünün başından başlamıyor"
+
+#, c-format
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Bu dosya sistemi %d mantıksal sektör boyutuna sahip. GNU Parted'in 512 "
+#~ "bayttan farklı sektör boyutlarıyla düzgün çalışmadığı bilinmektedir."
+
+#, c-format
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "%s dosyası bir sistem dosyası olarak işaretlenmiş. Bu, onu taşımanın "
+#~ "bazı programların çalışmasını durdurmaya yolaçacağı anlamına gelir."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " NUMBER : bu belirtilmiş bölüm hakkında daha ayrıntılı bilgi "
+#~ "gösterir\n"
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "%d (%s) disk bölümü eklenemedi"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted, %1$s (%2$s) üzerindeki disk bölümleme tablosunu yeniden "
+#~ "okuyamadı. Bu, siz (bilgisayarı) yeniden açana dek yaptığınız "
+#~ "deÄŸiÅŸiklikleri Linux'un bilmemesi demek. "
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s, GPT tablosu içerdiğini belirten GPT imzalarına sahip. Ayrıca, olması "
+#~ "gerekenin aksine, geçerli sahte msdos disk bölümleme tablosu yok. Belki "
+#~ "GPT disk bölümleme tablolarından anlamayan bir program tarafından "
+#~ "bozulmuÅŸtur. Ya da belki siz GPT tablosunu sildiniz ve ÅŸimdi bir msdos "
+#~ "disk bölümleme tablosu kullanmaktasınız. Bu bir GPT disk bölümleme "
+#~ "tablosu mu?"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Kullanım: %s [SEÇENEK]\n"
+#~ " ya da: %s AYGIT MÄ°NOR\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Bir FAT disk bölümündeki kullanılmayan boşluğu silin (bir GNU Parted "
+#~ "deneme aracı).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help bu yardımı görüntüler ve çıkar\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version sürüm bilgisi çıkartır ve çıkar\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "argüman sayısı yetersiz"
+
+#~ msgid "too many arguments"
+#~ msgstr "çok fazla argüman"
+
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "geçersiz minör aygıt numarası: %s"
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "%s dosya sistemlerini açmak için destek henüz sağlanmamıştır."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr "%s dosya sistemlerini oluşturmak için destek henüz sağlanmamıştır."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr ""
+#~ "%s dosya sistemlerini kontrol etmek için destek henüz sağlanmamıştır."
+
+#~ msgid "raw block copying"
+#~ msgstr "ham blok kopyalama"
+
+#~ msgid "growing file system"
+#~ msgstr "büyüyen dosya sistemi"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Çakışan disk bölümlerinin üzerine kopyalanamıyor."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "%s için dosya sistemlerini kopyalamaya direkt destek henüz "
+#~ "sağlanmamıştır. Ancak yeniden boyutlandırma desteği mevcut. Bu nedenle, "
+#~ "eğer yeni disk bölümü en az eskisi kadar büyükse, dosya sistemi "
+#~ "kopyalanabilir. Dolayısıyla, ya kopyalamaya çalıştığınız disk bölümünü "
+#~ "küçültün, ya da daha büyük bir disk bölümüne kopyalayın."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "%s dosya sistemlerini kopyalamak için destek henüz sağlanmamıştır."
+
+#~ msgid "creating"
+#~ msgstr "oluÅŸturuluyor"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "Dosya sistemi geçersiz bir durumda. Bağlı olabilir mi?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr "Dosya sistemi eski (yeniden boyutlanamayan) biçemde."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr "Geçersiz serbest blok sayısı. Önce reiserfsck --check yürütün."
+
+#~ msgid "checking"
+#~ msgstr "kontrol ediliyor"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr "Reiserfs ağacı bozuk görünüyor. Önce reiserfsck --check yürütün."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "reiserfs dosya sistemi temel bir kontrolü geçti. Daha kapsamlı bir "
+#~ "kontrol için reiserfsck --check yürütünüz."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Üzgünüm, henüz reiserfs disk bölümlerinin başlangıcı taşınamıyor."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr "Aygıt özetleme katmanı oku/yaz için yeniden açılamıyor."
+
+#~ msgid "expanding"
+#~ msgstr "geniÅŸletiliyor"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Reiserfs aygıt özetleme işleyici oluşturulamıyor."
+
+#~ msgid "copying"
+#~ msgstr "kopyalıyor"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Simge %s çözümlenemiyor. Hata: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted geçersiz bir libreiserfs kütüphanesi buldu."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted libreiserfs arayüz sürüm uyumsuzluğu tespit etti. %d-%d "
+#~ "buldu, %d gerekiyordu. ReiserFS desteÄŸi etkisizleÅŸtirilecek."
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Tutarsız grup tanımlayıcıları!"
+
+#~ msgid "File system full!"
+#~ msgstr "Dosya sistemi dolu!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Geçersiz süperblok. Bunun bir ext2 dosya sistemi olduğundan emin misiniz?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Dosya sisteminde hatalar var! e2fsck'yi yürütün."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Dosya sistemi temizce ayrılmadı! e2fsck'lamalısınız. Temiz olmayan "
+#~ "dosya sistemini değiştirmek ciddi sorunlara yol açabilir."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "Dosya sisteminin uyumsuz bir özelliği etkin durumda. Uyumlu özellikler "
+#~ "has_journal, dir_index, filetype, sparse_super ve lrage_file'dır. "
+#~ "Özellikleri silmek için tune2fs ya da debugfs kullanın."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Tampon önbellek atamada hata."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Yanlış link sayısına sahip bir dosya indeksi bulundu. İyisi mi önce bir "
+#~ "e2fsck yürütün."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Yeterli serbest dosya indeksi yok!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Dosya sistemi bir grubu silmek için çok dolu!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "Dosya sistemi bir grubu silmek için çok sayıda dosya indeksine sahip!"
+
+#~ msgid "adding groups"
+#~ msgstr "gruplar ekleniyor"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Dosya sisteminiz %i bloğa yeniden boyutlandırılmak için çok dolul. "
+#~ "Üzgünüm."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Dosya sisteminiz %i bloğa yeniden boyutlandırmak için çok sayıda dolu "
+#~ "dosya indeksine sahip. Üzgünüm."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "Dosya sistemi temizce ayrılmadı! e2fsck çalıştırmalısınız."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Dosya sisteminin 'dir_index' özelliği etkin halde... Parted, dosya "
+#~ "sistemini ancak bu özelliği devre dışı bırakarak yeniden "
+#~ "boyutlandırabilir. Daha sonra 'tune2fs -O dir_index' ve sonrasında "
+#~ "'e2fsck -fD AYGIT' komutlarıyla yeniden etkinleştirebilirsiniz."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Bu dosya sistemindeki yeniden boyutlama iÅŸlemi DENEYSEL kod kullanacak\n"
+#~ "bu, dosya sisteminde BOZULMAYA YOL AÇABİLİR (şimdiye dek kimse bunu rapor "
+#~ "etmediyse de).\n"
+#~ "En azından önce verinizi yedeklemeli, sonra da 'e2fsck -f' yürütmelisiniz."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr "Çapraz bağlı bloklar bulundu! İiyisi mi önce gibip e2fsck yürütün!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "%i bloÄŸunun baÅŸvurusu yok? Tuhaf"
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "%i bloğu işaretlenmemiş olmalıydı (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "ext2 dosya sistemi temel bir kontrolü geçti. Daha kapsamlı bir kontrol "
+#~ "için e2fsck programını kullanınız."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Üzgünüm, henüz ext2 disk bölümlerinin başlangıcı taşınamıyor!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Tampon önbellek boşaltılamadı!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "grup bazında metaverisi yazılıyor"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "ext2 için dosya sistemi çok küçük."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Çok sayıda bozuk sayfa."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "Disk bölümü aşağıdaki FS-TYPE'larından birine sahip olmalıdır: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Mevcut dosya sistemi silinecek ve disk bölümündeki tüm veri kaybolacak. "
+#~ "Devam etmek istiyor musunuz?"
+
+#~ msgid ""
+#~ "WARNING: you are attempting to use %s to operate on (%s) a file system.\n"
+#~ "%s's file system manipulation code is not as robust as what you'll find "
+#~ "in\n"
+#~ "dedicated, file-system-specific packages like e2fsprogs. We recommend\n"
+#~ "you use %s only to manipulate partition tables, whenever possible.\n"
+#~ "Support for performing most operations on most types of file systems\n"
+#~ "will be removed in an upcoming release.\n"
+#~ msgstr ""
+#~ "UYARI: (%s) dosya sistemi üzerinde işlem yapmak üzere %s kullanma "
+#~ "giriÅŸiminde bulunuyorsunuz.\n"
+#~ "%s'nin dosya sistemi işleme kodu, e2fsprogs gibi adanmış, dosya sistemine "
+#~ "özgün\n"
+#~ "paketlerde bulabileceğiniz kadar sağlam değildir. Biz, %s 'i mümkünse "
+#~ "yalnızca\n"
+#~ "bölümleme tablolarını işlemek için kullanmanızı öneririz.\n"
+#~ "Gelecek bir sürümde dosya sistemleri üzerinde yapılabilen işlemler ve "
+#~ "türlerine\n"
+#~ "verilen destek kaldırılacaktır.\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Kaynak disk bölümü numarası?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Hedef disk bölümü numarası?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr "Bir ek disk bölümünün dosya sistemi olamaz. mkpart mı istediniz?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Bir ek disk bölümü taşınamaz."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Bir disk bölümü kendi üzerine taşınamaz. Belki yeniden boyutlandırmayı "
+#~ "dener misiniz?"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Minor: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "Bayraklar: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Dosya Sistemi: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Boyut: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Minimum boyut: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Maksimum boyut: "
+
+#~ msgid "check"
+#~ msgstr "check"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check NUMBER dosya sistemi üzerinde basit bir kontrol yap"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER dosya sistemini bir baÅŸka disk "
+#~ "bölümüne kopyala"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partition NUMBER"
+#~ msgstr ""
+#~ "mkfs NUMBER FS-TYPE NUMBER disk bölümü üzerinde FS-TYPE dosya "
+#~ "sistemini yap"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END dosya sistemi olan bir disk "
+#~ "bölümü yap"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "resize NUMBER START END NUMBER. disk bölümünü ve üzerindeki "
+#~ "dosya sistemini yeniden boyutlandır"
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr "Bu bir ECKD diski değil! Bu disk türü desteklenmiyor!"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "%s aygıtının mantıksal sektör boyutu %lld'dir. GNU parted'in tüm "
+#~ "bölümleri bunu henüz desteklememekte olup çalışan kod OLDUKÇA "
+#~ "DENEYSELDÄ°R.\n"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: kuraldışı seçenek -- %c\n"
+
+#~ msgid ""
+#~ "Could not determine minimum io size for %s: %s.\n"
+#~ "Using the default size (%lld)."
+#~ msgstr ""
+#~ "%1$s için minimum girdi/çıktı boyutu belirlenemiyor:%2$s.\n"
+#~ "Öntanımlı boyut (%3$lld) kullanılacak."
+
+#~ msgid "Unable to determine the block size of this dasd"
+#~ msgstr "Bu dasd'in blok boyutu belirlenemedi"
diff --git a/po/uk.gmo b/po/uk.gmo
new file mode 100644
index 0000000..554d778
--- /dev/null
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..3a25fca
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,3784 @@
+# Ukrainian translation to parted.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+#
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
+# Yuri Chornoivan <yurchor@ukr.net>, 2012, 2014, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-06 12:12+0300\n"
+"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 20.12.0\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "неправильний аргумент %s Ð´Ð»Ñ %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "неоднозначний аргумент %s Ð´Ð»Ñ %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "СпиÑок коректних аргументів:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "помилка запиÑу"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Ðевідома ÑиÑтемна помилка"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: параметр «%s%s» не є однозначним\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: неоднозначний параметр «%s%s»; можливі варіанти:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: невідомий параметр «%s%s»\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «%s%s» не передбачено\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: до параметра «%s%s» Ñлід додати аргумент\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: некоректний параметр — «%c»\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: до параметра Ñлід додати аргумент — «%c»\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "`"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "'"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Виконано"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Ðемає збігів"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Ðеправильний регулÑрний вираз"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ðеправильне порівнÑÐ½Ð½Ñ Ñимволів"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Ðазва логічного тому міÑтить неправильний Ñимвол \"%s\""
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Завершальний backslash"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "ÐеприпуÑтиме зворотне поÑиланнÑ"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Вираз без парних [, [^, [:, [. або [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Ðевідповідні дужки ( чи \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Ðевідповідні дужки \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "ÐеприпуÑтимий вміÑÑ‚ \\{\\}"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Ðеправильний кінець діапазону"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Пам'ÑÑ‚ÑŒ вичерпано"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Ðеправильний попередній регулÑрний вираз"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "ПередчаÑно закінчений регулÑрний вираз"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "РегулÑрний вираз надто великий"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Ðевідповідні дужки ) чи \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "ВідÑутній попередній регулÑрний вираз"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yYТт]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nNÐн]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, <%s>\n"
+"Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати "
+"його.\n"
+"Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених "
+"законодавÑтвом.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Ðвтор %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Ðвтори %s та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Ðвтори %s, %s та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"%s, та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"%s, %s, та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s.\n"
+"%s, %s, %s та %s\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, та %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Ðвтори %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, та інші.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "ПовідомлÑйте про вади на адреÑу: %s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Про вади у %s повідомлÑйте на адреÑу %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr ""
+"Загальна довідкова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ "
+"GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "пам'ÑÑ‚ÑŒ вичерпано"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Образ диÑка"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr ""
+"Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ-запиÑу (%s). %s відкрито у режимі лише-"
+"читаннÑ."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s при вÑтановленні позиції Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð½Ð° %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s при читанні з %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати на %s, тому що він відкритий лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s при вÑтановленні позиції Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу на %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s при запиÑÑ– на %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Спробуйте `%s --help' Ð´Ð»Ñ Ð¾Ð´ÐµÑ€Ð¶Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "ВикориÑтаннÑ: %s [КЛЮЧ] [ПРИСТРІЙ]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Інформувати ОС про зміни у таблиці розділів.\n"
+"\n"
+" -d, --dry-run теÑтовий запуÑк без Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… ОС\n"
+" -s, --summary вивеÑти Ð·Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ñту\n"
+" -h, --help показати це довідкове Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– вийти\n"
+" -v, --version показати дані щодо верÑÑ–Ñ— Ñ– вийти\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Якщо не вказано ПРИСТРІЙ, виконуєтьÑÑ Ð·Ð¾Ð½Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ–Ñ… розділів.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"ВідÑилати звіти про помилки до <%s>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ Ñховище."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"УВÐГÐ! Ядру не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ повторне Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розділів на %s "
+"(%s). У результаті, там може бути відтворено не уÑÑ– внеÑені вами зміни, аж "
+"до моменту піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"Увага! Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s (%s). У результаті, там може бути відтворено "
+"не уÑÑ– внеÑені вами зміни, аж до моменту піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"Увага! Ðе вдалоÑÑ Ð¿Ð¾Ð·Ð±ÑƒÑ‚Ð¸ÑÑ Ñ‚Ñ€Ð°Ð½ÑлÑтора на %s (%s). У результаті, там може "
+"бути відтворено не уÑÑ– внеÑені вами зміни, аж до моменту піÑÐ»Ñ "
+"перезавантаженнÑ."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s при Ñпробі Ñинхронізації %s на диÑк"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Ðе вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ñ€Ð¸Ñтрою %s - %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ тип dm %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір Ñектора Ð´Ð»Ñ %s: %s.\n"
+"ВикориÑтовуєтьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ розмір Ñектора (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір фізичного Ñектора Ð´Ð»Ñ %s.\n"
+"ВикориÑтовуєтьÑÑ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€ логічного Ñектора (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "Загальний IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Ðе вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ідентифікатор приÑтрою %s - %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"ПриÑтрій %s має декілька (%d) логічних Ñерверів на фізичний Ñектор.\n"
+"Підтримка цього у GNU Parted Ñ” ЕКСПЕРИМЕÐТÐЛЬÐОЮ Ð´Ð»Ñ Ð´ÐµÑких Ñпеціальних "
+"комбінацій позначка диÑка/файлова ÑиÑтема, наприклад. GPT та ext2/3.\n"
+"Додаткову інформацію шукайте на веб-Ñайті."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Помилка ініціалізації SCSI приÑтрою %s - %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"ПриÑтрій %s Ñ” замалим Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми або таблиці розділів. "
+"Можливо, ви вибрали неправильний приÑтрій?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ геометрію файлу/приÑтрою %s. Ðе Ñлід викориÑтовувати "
+"Parted, хіба що ви ДІЙСÐО знаєте, що ви робите!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Типова картка Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… SD/MMC"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "ПриÑтрій NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID контролер"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "ПриÑтрій Promise SX8 SATA"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ПриÑтрій ATA на оÑнові Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "ПриÑтрій IBM S390 DASD"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries Virtual DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq Smart Array"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "ПриÑтрій NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID контролер"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O контролер"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "User-Mode Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "ПриÑтрій зворотної петлі (loopback)"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "device-mapper Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Віртуальний блоковий приÑтрій xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Ðевідомий"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Блоковий приÑтрій віртуального введеннÑ-виведеннÑ"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Програмний маÑив RAID Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "ДиÑк у RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() тип приÑтрою не підтримуєтьÑÑ"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñинхронізації або Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0sкінець файла під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Помилка ÑÐ¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñдра про зміни у розділі %s -- %s. Це означає, що Linux "
+"не враховуватиме внеÑені у %s зміни до Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ - тому до "
+"Ð¿ÐµÑ€ÐµÐ·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñлід підключати розділ чи викориÑтовувати будь-Ñким "
+"іншим чином."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ початок Ñ– довжину %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"Розділи %s було запиÑано на %s, але надати інформацію щодо них Ñдру не "
+"вдалоÑÑ, ймовірно, через те, що ці розділи викориÑтовуютьÑÑ. Через це "
+"ÑиÑтема продовжуватиме викориÑтовувати заÑтарілі дані щодо розділів. Перш "
+"ніж вноÑити подальші зміни, вам Ñлід перезавантажити операційну ÑиÑтему."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"ÐеприпуÑтимо, щоб кінець розділу був перед початком! (початковий Ñектор=%jd, "
+"довжина=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Спроба запиÑати Ñектори %ld-%ld за межами розділу на %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "пошук пошкоджених блоків"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "У розгортці Ñтеку Ñ” %d викликів:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Помилка у твердженні (%s) у точці %s:%d функції %s()."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: непридатна до Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð¼Ñ–Ñ‚ÐºÐ° диÑка"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ libparted не підтримує Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° %s. Можливо програму зібрано з "
+"підтримкою лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Розмір %d %s, але файлова ÑиÑтема %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "вирівнюваннÑ_циліндрів"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Ðевідомий прапорець диÑка, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s етикетки диÑків Ð´Ð»Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ… розділів не підтримуютьÑÑ."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr ""
+"%s етикетки диÑків Ð´Ð»Ñ Ð»Ð¾Ð³Ñ–Ñ‡Ð½Ð¸Ñ… або розширених розділів не підтримуютьÑÑ."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Занадто багато оÑновних розділів."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Ðе вдаєтьÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ логічний розділ до %s, тому що немає розширеного розділу."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Ðе можна мати більше одного розширеного розділу на %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Ðе вдаєтьÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€Ð¸Ñ‚Ð¸ логічний розділ за межі розширеного розділу."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr ""
+"Ðе вдаєтьÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€Ð¸Ñ‚Ð¸ логічний розділ за межі розширеного розділу на %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Ðе можна додавати оÑновний розділ у розширений розділ."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "ÐеприпуÑтимо, щоб розділ виходив за межі диÑка!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Ðе можна мати розділи, Ñкі перекриваютьÑÑ."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "метадані"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "вільно"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "розширений"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "логічний"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "оÑновний"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "boot"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "кореневий"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "swap"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "Ñхований"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-ÑервіÑ"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "заÑтарілий_завантажувальний"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Ðевідома ознака розділу, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "ІнформаціÑ"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "ПопередженнÑ"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Помилка"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Критична помилка"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Помилка"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Ðе реалізовано"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Виправити"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Так"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "ÐÑ–"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "Гаразд"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Повторити"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Ігнорувати"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "СкаÑувати"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Ви зіткнулиÑÑ Ð· помилкою у GNU parted. Ðа веб-Ñайті http://www.gnu.org/"
+"software/parted/parted.html можна знайти дані щодо того, Ñка Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
+"знадобитьÑÑ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÐ°Ð¼ Ð´Ð»Ñ Ñ—Ñ— уÑуваннÑ. Будь лаÑка, \n"
+"надішліть звіт щодо помилки електронною поштою на адреÑу %s, не забудьте "
+"вказати верÑÑ–ÑŽ (%s) та додати таке повідомленнÑ:"
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "Підтримка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡Ð¾Ðº диÑків у Ñтилі AIX ще не реалізована."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Підтримка запиÑу позначок диÑків у Ñтилі AIX ще не реалізована."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr ""
+"Підтримка Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡Ð¾Ðº диÑків у Ñтилі AIX ще не "
+"реалізована."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr ""
+"Підтримка Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡Ð¾Ðº диÑків у Ñтилі AIX ще не "
+"реалізована."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Підтримка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ розділів Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡Ð¾Ðº диÑків у Ñтилі AIX ще не "
+"реалізована."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr ""
+"Підтримка вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð·Ð½Ð°Ðº Ð´Ð»Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡Ð¾Ðº диÑків у Ñтилі AIX ще не "
+"реалізована."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Ðе можна викориÑтовувати таблиці розділів Atari на диÑках, де розмір Ñектора "
+"не дорівнює %d байтів."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Ðе можна викориÑтовувати таблиці розділів Atari на диÑках, де кількіÑÑ‚ÑŒ "
+"Ñекторів перевищує %d."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"ВиÑвлено надто багато розділів Atari. Ймовірно, ÑпиÑок XGM зациклено. "
+"Перериваємо обробку."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Ðе знайдено розділу даних у ARS, Ñектор %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Ð—Ð°Ð¿Ð¸Ñ Ð½Ð°Ñтупного логічного ARS не належить до типу XGM в ARS, Ñектор %lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"ЗдаєтьÑÑ Ð½Ð° цьому диÑку (%s) немає таблиці розділів Atari або цю таблицю "
+"розділів пошкоджено."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "У Ñекторі %lli немає міÑÑ†Ñ Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ ARS логічного розділу %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "У Ñекторі %lli немає міÑÑ†Ñ Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ° Ñекторів, Ñке зберігаєтьÑÑ Ñƒ таблиці розділів, не "
+"відповідає розміру вашого приÑтрою. Хочете виправити таблицю розділів?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "У Ñекторі %lli немає міÑÑ†Ñ Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "ВиÑвлено залишкові розділи піÑÐ»Ñ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¾Ñновної таблиці AHDI."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"ОÑновну таблицю AHDI заповнено уÑіма розділами, але Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ ICD не Ñ” "
+"порожньою. Через це ÑуміÑним із ICD програмним забезпеченнÑм буде виÑвлено "
+"додаткові розділи невідомого розміру та розташуваннÑ. Хочете ÑкаÑувати "
+"чинніÑÑ‚ÑŒ таблиці ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ЗапиÑи ICD не можуть міÑтити розширених Ñ– логічних розділів."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "ПіÑÐ»Ñ Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÑŒ лишилиÑÑ Ð·Ð°Ð»Ð¸ÑˆÐºÐ¾Ð²Ñ– розділи."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Ðе можна викориÑтовувати розширений розділ XGM у режимі ICD (понад %d "
+"оÑновних розділів; Ñкщо XGM Ñ” першим, його буде пораховано Ñк два)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð´Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¸Ñ‚Ð¸ вÑÑ– Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð° розділ."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Ðе можна викориÑтовувати понад %d оÑновних розділів (режим ICD), Ñкщо ви "
+"викориÑтовуєте розділ XGM. Якщо розділ XGM Ñ” першим, його буде пораховано Ñк "
+"два розділи."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "ОчікуєтьÑÑ Ð½Ð¾Ð¼ÐµÑ€ розділу."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Ðе вдаєтьÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ Ñлот bsd етикетки диÑка."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Ðе можна змінювати таблицю розділів приÑтрою DASD-LDL.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Ðе вдаєтьÑÑ Ñ€Ð¾Ð·Ð¿Ð¾Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ Ñлот етикетки диÑка dasd"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Ðеправильна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² на %s - неправильна Ñигнатура %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Ðеправильна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² - рекурÑивні розділи на %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr "Parted не може змінювати розділи, Ñкі Ñтворені Windows Dynamic Disk."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "Ñтворити додаткові розділи неможливо"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s не міÑтить розширеного розділу (розділу заголовків томів)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr ""
+"Ðеправильна контрольна Ñума, це означає, що Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² пошкоджена."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Лише оÑновні розділи можуть бути завантажувальними."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Лише оÑновні розділи можуть бути розділами підкачки."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Лише логічні розділи можуть бути завантажувальним файлом."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"не вдалоÑÑ Ð²Ñтановити назву розділу dvh %s:\n"
+"Лише логічні розділи (файли завантаженнÑ) можуть мати назви."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Занадто багато оÑновних розділів"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "помилка відкриттÑ"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "помилка позиціюваннÑ"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "помилка читаннÑ"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "помилка ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "невідповідніÑÑ‚ÑŒ верÑій API"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Ðепідтримуваний тип диÑка"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Ðепідтримуваний формат диÑка"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ДиÑк зайнÑтий"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "СинтакÑична помилку у файлі налаштувань"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Мітку тому пошкоджено"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Ðазва набору даних пошкоджено"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ міÑце у пам'ÑÑ‚Ñ–"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби перевірити приÑтрій"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Вказаний приÑтрій не Ñ” коректним приÑтроєм DASD"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "на приÑтрої не знайдено VOLSER"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Критична помилка"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Ðемає міÑÑ†Ñ Ð´Ð»Ñ Ð¼Ñ–Ñ‚ÐºÐ¸ тому."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "ÐедоÑтатньо міÑÑ†Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð¸Ñ… щодо розділу."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "Ðекоректна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² тому (VTOC)."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані щодо верÑÑ–Ñ— програмного інтерфейÑу"
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Поточна верÑÑ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ інтерфейÑу, «%d», не збігаєтьÑÑ Ð· верÑією "
+"програмного інтерфейÑу драйвера dasd, «%d»!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані щодо розміру диÑка."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані щодо геометрії диÑка."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ дані щодо розміру блоків."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ Ð´Ð¸Ñка не відповідає приÑтрою DASD типу 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "приÑтрій Ñ” замалим Ð´Ð»Ñ GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Маємо формат таблиці розділів GPT верÑÑ–Ñ— %x. Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ Ñ” новішою за ту, "
+"підтримку Ñкої передбачено у Parted. Будь лаÑка, повідомте нам про цю "
+"помилку!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Ðа %s викориÑтовуєтьÑÑ Ð½Ðµ веÑÑŒ доÑтупний проÑÑ‚Ñ–Ñ€, виправити GPT, щоб "
+"викориÑтовувавÑÑ Ð²ÐµÑÑŒ проÑÑ‚Ñ–Ñ€ (додатково %llu блоків) або продовжити з "
+"вказаними параметрами?."
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Резервна GPT-Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð½Ðµ знаходитьÑÑ Ð½Ð°Ð¿Ñ€Ð¸ÐºÑ–Ð½Ñ†Ñ– диÑка, хоча повинна там "
+"знаходитиÑÑŒ. Виправити це шлÑхом Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ ÐºÐ¾Ð¿Ñ–Ñ— таблиці у кінець (та "
+"видалити Ñтару копію)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Пошкоджено Ñк головну, так Ñ– резервну таблицю GPT. Спробуйте Ñтворити чиÑту "
+"таблицю, та викориÑтовуйте функцію Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¸ Parted, щоб "
+"повернути розділи."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Резервну таблицю GPT пошкоджено, оÑновна, здаєтьÑÑ Ñ” правильною, тому буде "
+"викориÑтано оÑновну таблицю."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"ОÑновна GPT-Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð°, але резервна виглÑдає правильною, тому буде "
+"викориÑтовуватиÑÑŒ Ñаме вона."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "невідповідніÑÑ‚ÑŒ контрольних Ñум (CRC) маÑивів оÑновної таблиці"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ½ÐµÑти назву розділу"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Ðеправильна Ñигнатура %x Ð´Ð»Ñ Macintosh-етикетки диÑка."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Карта розділів не міÑтить елементу карти розділів!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s занадто мале Ð´Ð»Ñ Macintosh-етикетки диÑка!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Розділ %d має неправильну Ñигнатуру %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Розділ %d має неправильну довжину 0 байт!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "ОблаÑÑ‚ÑŒ даних не починаєтьÑÑ Ð· початку розділу."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ÑŒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñƒ не займає веÑÑŒ розділ."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "ОблаÑÑ‚ÑŒ даних розділу не займає веÑÑŒ розділ."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Дивний розмір блоку у деÑкрипторі приÑтрою: %d байт не ділитьÑÑ Ð½Ð° 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"У деÑкрипторі драйвера зазначено, що розмір фізичного блоку дорівнює %d "
+"байтів, але Linux вважає, що він %d байтів."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Ðе знайдено правильної карти розділів."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Конфлікт розмірів у елементах карти розділів! У елементі 1 вказано %d, але у "
+"елементі %d вказано %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Фатально! Дивна помилка - 2 елементи карти розділів!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Зміна назви кореневого розділу чи розділу підкачки заважатиме Linux "
+"розпізнати їх."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Ðе вдаєтьÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ інший розділ - карта розділів надто маленька!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Ðеправильна Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð² у %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Розділ %d не вирівнÑний на межі циліндру. Ðеобхідно додати підтримку Ð´Ð»Ñ "
+"цього випадку."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Ðе вдаєтьÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ інший розділ."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"довжина розділу у Ñекторах, %jd, перевищує макÑимум Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розділу %s, "
+"%jd"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"номер початкового Ñектора, %jd, перевищує макÑимум Ð´Ð»Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розділу %s, "
+"%jd"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s : Ðеправильна контрольна Ñума на блоці %llu типу %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ блок rdb, цього не повинно було ÑтатиÑÑ."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : виÑвлено цикл у блоці %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : СпиÑок %s має пошкоджений блок %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок пошкоджених блоків."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок блоків розділу."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок блоків файлової ÑиÑтеми."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок завантажувальних блоків."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати блок розділу у %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Знайдено пошкоджену Sun-етикетку диÑка."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"ЦГС(CHS) Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ Ð´Ð¸Ñка (%d,%d,%d) Ñку видає операційна ÑиÑтема не "
+"відповідає геометрії, що зберігаєтьÑÑ Ñƒ позначці диÑка (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Етикетка диÑка опиÑує диÑк більшого розміру ніж %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "ДиÑк має %d циліндрів, що більше ніж макÑимальне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Розділ \"ВеÑÑŒ диÑк\" - єдиний наÑвний. Зазвичай, небажано перезапиÑувати цей "
+"розділ реальним розділом. Solaris, можливо, не буде здатний завантажитиÑÑŒ "
+"без нього, це також вплине на SILO (завантажувач sparc)."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun-етикетка диÑка заповнена."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "помилка під Ñ‡Ð°Ñ Ñпроби Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ñтрою"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "помилка під Ñ‡Ð°Ñ Ð¿Ð¾Ð·Ð¸Ñ†Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð½Ð° приÑтрої"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу на приÑтрій"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "помилка при читанні з приÑтрою"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ мітку тому."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати мітку тому."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ позначки VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC labels."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "ÐедоÑтатньо пам'ÑÑ‚Ñ–."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Ðе вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ одиницю розміру Ð´Ð»Ñ Ñпеціального блоку 'COMPACT'."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "\"%s\" має неправильний ÑинтакÑÐ¸Ñ Ð°Ð´Ñ€ÐµÑ."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "МакÑимальний номер головки - %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "МакÑимальний номер Ñектора - %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "ÐдреÑа %s поза межами приÑтрою %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Ðеправильне чиÑло."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "СкориÑтайтеÑÑ Ð¼ÐµÐ½ÑˆÐ¾ÑŽ одиницею виміру заміÑÑ‚ÑŒ значень < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s : Помилка при виділенні блоку розділу\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s : Помилка при виділенні блоку\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ завантажувальний блок %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ кореневий блок %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s : Помилка при виділенні елементу ідентифікатора ÑпиÑку\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ блок %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s : Ðеправильна контрольна Ñума у блоці %llu типу %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð·Ð°Ð¿Ð¸Ñати блок %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s : не вдаєтьÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ disk_specific блок rdb\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ блок rdb, цього не повинно було ÑтатиÑÑ\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s : Ðе вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ блок розділу %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU parted зібрано неправильно: завантажувальний Ñектор FAT повинен мати "
+"розмір 512 байтів. Підтримка FAT вимкнена."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Файлова ÑиÑтема міÑтить неправильну Ñигнатуру файлової ÑиÑтеми FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "Файлова ÑиÑтема має неправильний розмір Ñектора файлової ÑиÑтеми FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "Файлова ÑиÑтема має неправильний розмір клаÑтера файлової ÑиÑтеми FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr "У файловій ÑиÑтемі неправильна кількіÑÑ‚ÑŒ резервних Ñекторів FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "У файловій ÑиÑтемі неправильне чиÑло копій FAT."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ CHS файлової ÑиÑтеми Ñтановить (%d, %d, %d), що Ñ” неправильним. "
+"Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ CHS таблиці розділів Ñтановить (%d, %d, %d). Якщо ви виберете "
+"Ігнорувати, геометрію CHS файлової ÑиÑтеми буде залишено без змін."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr ""
+"Завантажувальний Ñектор FAT міÑтить розмір логічного Ñектора, що дорівнює 0. "
+"Це дивно."
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr ""
+"У завантажувальному Ñекторі FAT не міÑтитьÑÑ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ таблиці FAT. Це "
+"дивно."
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr ""
+"У відповідноÑÑ‚Ñ– до завантажувального Ñектора FAT, клаÑтер міÑтить 0 "
+"Ñекторів. Це дивно."
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Файлові ÑиÑтеми типу FAT12 не підтримуютьÑÑ."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Ðевідома Ñтара Ñигнатура '%10s' розділу підкачки linux."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Ðевідома нова Ñигнатура '%10s' розділу підкачки linux."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Ðевідома Ñигнатура '%10s' розділу swsusp підкачки linux."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted не може викориÑтовувати файлові ÑиÑтеми HFS на диÑках з розміром "
+"Ñектора, що некратний %d байтів."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ CHS файлової ÑиÑтеми Ñтановить (%d, %d, %d), що Ñ” неправильним. "
+"Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ CHS таблиці розділів Ñтановить (%d, %d, %d). Якщо ви виберете "
+"«Ігнорувати», геометрію CHS файлової ÑиÑтеми буде залишено без змін. Якщо ви "
+"виберете «Виправити» (Fix), геометрію CHS файлової ÑиÑтеми буде приведено у "
+"відповідніÑÑ‚ÑŒ до геометрії таблиці розділів CHS."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Інформаційний Ñектор міÑтить неправильну Ñигнатуру (%x). Виберіть "
+"\"СкаÑувати\" та відправте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку. Якщо ви втратили надію, "
+"тоді можна проігнорувати цю проблему."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"Ðеобхідно %s вільного проÑтору, щоб зменшити розділ до такого розміру (зараз "
+"у Ð²Ð°Ñ Ð²Ñ–Ð»ÑŒÐ½Ð¾ лише %s)."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"КлаÑтер починаєтьÑÑ Ð·Ñ– зÑувом %d, що не Ñ” цілим чиÑлом клаÑтерів розміру %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Ðеправильний елемент каталогу %s: перший клаÑтер Ñ” кінцем маркера файла."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"Помилка у FAT: незавершений ланцюг Ð´Ð»Ñ %s. Потрібно запуÑтити dosfsck або "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"Помилка у FAT: клаÑтер %d знаходитьÑÑ Ð¿Ð¾Ð·Ð° межами файлової ÑиÑтеми у ланцюгу "
+"Ð´Ð»Ñ %s. Потрібно запуÑтити dosfsck або scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"Помилка у FAT: перехреÑне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñƒ клаÑтері %d Ð´Ð»Ñ %s. Потрібно запуÑтити "
+"dosfsck або scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s дорівнює %dk, але має %d клаÑтерів (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Розділ надто великий/малий Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми типу %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Копії FAT не збігаютьÑÑ. Якщо ви не знаєте, що це означає, виберіть "
+"\"СкаÑувати\", запуÑÑ‚Ñ–Ñ‚ÑŒ scandisk Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми, а потім повторіть цю "
+"команду."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ типу FAT немає допуÑтимих конфігурацій."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Windows не підтримує файлову ÑиÑтему, що має такі розміри. Розмір клаÑтера "
+"%dk (очікувалоÑÑŒ %dk); кількіÑÑ‚ÑŒ клаÑтерів %d (очікувалоÑÑŒ %d); розмір FAT "
+"%d Ñекторів (очікувалоÑÑŒ %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Файлова ÑиÑтема повідомлÑÑ” про вільний проÑÑ‚Ñ–Ñ€ %d клаÑтерів, а не %d "
+"клаÑтерів."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Ðе виÑтачає проÑтору Ð´Ð»Ñ Ð²ÑÑ–Ñ… файлів в кореневому каталозі. Виберіть "
+"\"СкаÑувати\", Ñкщо проігноруєте, це призведе до втрати файлів."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Помилка запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ кореневий каталог."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr ""
+"Якщо залишити файлову ÑиÑтему Ñк FAT16, тоді у Ð²Ð°Ñ Ð½Ðµ виникатиме проблем."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Якщо ви перетворюєте файлову ÑиÑтему розділу з Windows у розділ FAT16, буде "
+"потрібно перевÑтановити завантажувач MS Windows. Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñлід переглÑнути "
+"довідку з Parted (або поÑібник з вашого диÑтрибутиву)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr ""
+"Якщо ви залишаєте файлову ÑиÑтему Ñк FAT32, тоді не виникне ніÑких нових "
+"проблем."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Якщо ви перетворите файлову ÑиÑтему розділу з MS Windows у розділ FAT32,буде "
+"потрібно перевÑтановити завантажувач MS Windows. Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñлід переглÑнути "
+"довідку з Parted (або поÑібник з вашого диÑтрибутиву). ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñƒ FAT32 "
+"унеможливить Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми під MS DOS, MS Windows 95a, та MS "
+"Windows NT."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Бажаєте викориÑтовувати FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Змінити розмір файлової ÑиÑтеми на вказаний розмір можна лише при "
+"перетворенні на FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Змінити розмір файлової ÑиÑтеми на вказаний розмір можна лише при "
+"перетворенні на FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted нездатний змінити розмір розділу на вказане значеннÑ. Ми над цим "
+"працюємо!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d ноÑій %x не відповідає завантажувальним Ñекторам ноÑÑ–Ñ %x. Потрібно "
+"запуÑтити dosfsck або scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: клаÑтер %ld знаходитьÑÑ Ð¿Ð¾Ð·Ð° межами файлової ÑиÑтеми"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: клаÑтер %ld знаходитьÑÑ Ð¿Ð¾Ð·Ð° межами файлової ÑиÑтеми"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: немає вільних клаÑтерів"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ñвити файлову ÑиÑтему."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "підтримки зміни розмірів файлових ÑиÑтем %s не передбачено"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Файлова ÑиÑтема більша ніж том!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Файлова ÑиÑтема міÑтить помилки."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Пошкоджені блоки не вдаєтьÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Спроба зареєÑтрувати екÑтент, о починаєтьÑÑ Ð· блоку 0x%X, але в цій позиції "
+"вже Ñ–Ñнує інший. Слід перевірити файлову ÑиÑтему!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Спроба переміÑтити Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð· блоку 0x%X у блок 0x%X, але в цій позиції "
+"вже Ñ–Ñнує інший блок. Цього не повинно бути!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Ðе вдаєтьÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ кеш екÑтенту Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ HFS з CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Спроба прочитати файл HFS з CNID %X перед EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñектор %lli з файлу HFS з CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Спроба запиÑати файл HFS з CNID %X перед EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Ðе вдаєтьÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ кеш екÑтенту Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ HFS+ з CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Спроба прочитати файл HFS+ з CNID %X перед EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñектор %lli з файлу HFS+ з CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Спроба запиÑати файл HFS+ з CNID %X перед EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Розмір HFS не можна змінювати таким ÑпоÑобом."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "ÑкороченнÑ"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Помилка переноÑу даних."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "При переноÑÑ– даних чаÑтина даних залишилаÑÑŒ наприкінці тому."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "запиÑуєтьÑÑ Ð³Ð¾Ð»Ð¾Ð²Ð½Ð¸Ð¹ блок каталогу"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "При відкриванні не виÑвлено правильну Ñигнатуру HFS[+X]."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "ВерÑÑ–Ñ %d ÑиÑтеми HFS+ не підтримуєтьÑÑ."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "ВерÑÑ–Ñ %d ÑиÑтеми HFSX не підтримуєтьÑÑ."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "При переноÑÑ– даних наприкінці розділу залишилиÑÑŒ деÑкі дані."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Помилка запиÑу виділеного файлу."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Помилка запиÑу чаÑтини ÑуміÑноÑÑ‚Ñ– виділеного файлу."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ тому HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Помилка пошуку файлу відомих пошкоджених блоків."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Помилка у обробнику HFS: файл пошкоджених блоків не міÑтить вбудований том "
+"HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Розмір HFS+ не можна змінювати таким ÑпоÑобом."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ тому HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Помилка зміни розміру тому HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "оболонка ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° оболонки HFS."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Це не ÑÐ¿Ñ€Ð°Ð²Ð¶Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° %s. ВідбуваєтьÑÑ Ð»Ð¸ÑˆÐµ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñпеціальних "
+"ньзькорівневих файлів Ð´Ð»Ñ Ð½Ð°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Ðеправильна контрольна Ñума заголовка ÑпиÑку блоків."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Ðеправильний розмір блоку транзакції при повторному накладанні журналу (%i "
+"байтів)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Журнал розміщено поза межами тому не підтримуєтьÑÑ. Слід вимкнути журнал та "
+"перезапуÑтити Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Початок чи розмір журналу не Ñ” цілим чиÑлом Ñекторів."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Ðеправильні Ñигнатури у заголовку журналу."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Розмір журналу не відповідає значенню у інформаційному блоці журналу та "
+"заголовку журналу."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Розмір деÑких полів заголовку не Ñкладає ціле чиÑло Ñекторів."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Розмір Ñектора, що зберігаєтьÑÑ Ñƒ журналі, не дорівнює 512 байтам. Parted "
+"підтримує лише Ñектори розміром 512 байтів."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Ðеправильна контрольна Ñума журналу."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Журнал не порожній. Parted маж наклаÑти транзакції перед Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ "
+"файлової ÑиÑтеми. Це призведе до зміни файлової ÑиÑтеми."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"При накладанні журналу змінивÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº тому чи блок головного каталогу. "
+"Слід перезапуÑтити Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "ЕкÑтент не був переміщений."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° екÑтент з міÑцÑ, з Ñкого не має бути поÑиланнÑ. Слід перевірити "
+"файлову ÑиÑтему!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Цей том HFS не міÑтить файл каталогу. ДоÑить дивно!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "Цей том HFS не міÑтить файлу Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ ÐµÐºÑтентів. ДоÑить дивно!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Файл Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ ÐµÐºÑтентів не має міÑтить влаÑних екÑтентів! Слід "
+"перевірити файлову ÑиÑтему."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Ðе вдаєтьÑÑ Ð·Ð°Ð½ÐµÑти у кеш файлову ÑиÑтему у пам'ÑÑ‚Ñ–."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "СпиÑок неправильних блоків не було завантажено."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Помилка при переміщенні екÑтенту."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Цей том HFS+ не міÑтить файлу каталогу. ДоÑить дивно!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr "Цей том HFS+ не міÑтить файлу Ð¿ÐµÑ€ÐµÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ ÐµÐºÑтентів. ДоÑить дивно!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "відображає це повідомленнÑ"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "вивеÑти ÑпиÑок таблиць розділів на уÑÑ–Ñ… приÑтроÑÑ…"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "відображає вивід у форматі Ð´Ð»Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð½Ð¾Ð³Ð¾ розбору"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "показує Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñƒ форматі JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "ніколи не запитувати Ð²Ñ‚Ñ€ÑƒÑ‡Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "у режимі Ñкрипту, виправити заміÑÑ‚ÑŒ Ð¿ÐµÑ€ÐµÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð½Ð° запит"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "відображає верÑÑ–ÑŽ"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… розділів"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"ÐОМЕР - це номер розділу, що викориÑтовуєтьÑÑ Linux. У етикетках диÑка MS-"
+"DOS, оÑновні розділи мають номери 1-4, а логічні - 5 та далі.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "ТИП-ЕТИКЕТКИ один з: "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "ОЗÐÐКРодне з: "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "БЛОК одне з: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "бажане вирівнюваннÑ: minimum або optimal"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "ТИП-РОЗДІЛУ один з: оÑновний, логічний, розширений\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "ТИП-ФС один з: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ПОЧÐТОК та КІÐЕЦЬ - це міÑÑ†Ñ Ð½Ð° диÑку, наприклад 4GB чи 10%. Від'ємні "
+"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñ€Ð°Ñ…Ð¾Ð²ÑƒÑŽÑ‚ÑŒÑÑ Ð²Ñ–Ð´ ÐºÑ–Ð½Ñ†Ñ Ð´Ð¸Ñка. Ðаприклад, -1s вказує на оÑтанній "
+"Ñектор диÑка.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"КІÐЕЦЬ - це міÑце на диÑку, наприклад 4GB чи 10%. Від'ємні Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ "
+"відраховуютьÑÑ Ð²Ñ–Ð´ ÐºÑ–Ð½Ñ†Ñ Ð´Ð¸Ñка. Ðаприклад, -1s вказує на оÑтанній Ñектор "
+"диÑка.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "СТÐРодин з: on, off\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "ПРИСТРІЙ - зазвичай /dev/hda чи /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "ÐÐЗВР- будь-Ñке Ñлово на ваш вибір\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° Ñ” вільною під ліцензією УніверÑальна Публічна Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ GNU.\n"
+"\n"
+"Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° розповÑюджуєтьÑÑ Ð·Ñ– ÑподіваннÑм,що вона буде кориÑною,\n"
+"але БЕЗ БУДЬ-ЯКИХ ГÐРÐÐТІЙ; навіть без неÑвної гарантії КОМЕРЦІЙÐОЇ\n"
+"ЦІÐÐОСТІ чи ПРИДÐТÐОСТІ ДЛЯ ПЕВÐОЇ МЕТИ. Докладнішу інформацію про це\n"
+"дивітьÑÑ Ñƒ УніверÑальній Публічній Ліцензії GNU.\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(залишилоÑÑŒ чаÑу %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Розділ %s наразі викориÑтовуєтьÑÑ. Ви Ñправді хочете виконати цю дію?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Розділи на %s наразі зайнÑÑ‚Ñ–."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"ІÑнуюча позначка диÑка на %s буде знищена разом з уÑіма даними на ній. "
+"Продовжити?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Ðова етикетка диÑка?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Тип розділу?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Ðазва розділу?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Тип файлової ÑиÑтеми?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Початок?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Кінець?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"Ви вказали межі розділу від %s до %s (Ñектори від %llu до %llu).\n"
+"Ðайближчим придатним відповідником вказаних значень можуть бути межі від %s "
+"до %s (Ñектори від %llu до %llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Чи Ñ” це Ð´Ð»Ñ Ð²Ð°Ñ Ð¿Ñ€Ð¸Ð¹Ð½Ñтним?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr ""
+"Отриманий у результаті розділ не буде вирівнÑно з метою Ð¿Ñ–Ð´Ð²Ð¸Ñ‰ÐµÐ½Ð½Ñ "
+"швидкодії: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "невідомий (помилка malloc)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "У мітках диÑків %s не передбачено підтримки назв розділів."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Ðомер розділу?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "У мітках диÑків %s не передбачено підтримки назв розділів."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Тип розділу?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Ðеправильне чиÑло."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Тип розділу?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Ðеправильне чиÑло."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS циліндр,головка,Ñектор геометріÑ: %d,%d,%d. Кожен циліндр %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Модель: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ДиÑк %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Розмір Ñектора (логічний/фізичний): %lldБ/%lldБ\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ñ–Ð²: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Прапорці диÑка: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Ðомер"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Початок"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Кінець"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Розмір"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Тип"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Файлова ÑиÑтема"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Ðазва"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Ознаки"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Вільний проÑÑ‚Ñ–Ñ€"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Знайдено розділ %s %s у межах від %s -> %s. Бажаєте додати його до таблиці "
+"розділів?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "пошук файлових ÑиÑтем"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Команду resize було уÑунуто починаючи з верÑÑ–Ñ— parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Ð—Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð² розділу може призвеÑти до втрат даних. Ви Ñправді хочете "
+"виконати цю дію?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Ðовий приÑтрій?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "тип Ð²Ð¸Ñ€Ñ–Ð²Ð½ÑŽÐ²Ð°Ð½Ð½Ñ type(min/opt)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d вирівнÑно\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d не вирівнÑно: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "Ознака, Ñку інвертувати?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Ðове значеннÑ?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "Блок?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check ТИП N перевірити розділ N щодо ТИПу(min|"
+"opt) вирівнюваннÑ"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [КОМÐÐДÐ] вивеÑти загальну довідку, або довідку про "
+"КОМÐÐДÐ"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable ТИП_ЕТИКЕТКИ Ñтворити нову позначку диÑка (таблицю розділів)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart ТИП-РОЗДІЛУ [ТИП-ФС] ПОЧÐТОК КІÐЕЦЬ Ñтворити розділ"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"'mkpart' Ñтворити розділ без ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ñ— файлової ÑиÑтеми у ньому. Можна "
+"вказати ТИП-ФС Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð¾Ð³Ð¾ ідентифікатора розділу.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name ÐОМЕР ÐÐЗВРпризначити назву ÐÐЗВРрозділу ÐОМЕР"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] показати таблицю розділів, доÑтупні "
+"приÑтрої, вільне міÑце або вÑÑ– знайдені розділи"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Без аргументів, 'print' відображає вÑÑŽ таблицю розділів. Проте, з наÑтупними "
+"аргументами виконуютьÑÑ Ñ–Ð½ÑˆÑ– дії.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : відображаютьÑÑ Ð²ÑÑ– активні блочні приÑтрої\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : відображаєтьÑÑ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ нерозподілений проÑÑ‚Ñ–Ñ€ на "
+"поточному блочному приÑтрої\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : відображаютьÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ– розділів на вÑÑ–Ñ… активних блочних "
+"приÑтроÑÑ…\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit вихід з програми"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ПОЧÐТОК КІÐЕЦЬ знайти втрачені розділи між ПОЧÐТОК та КІÐЕЦЬ"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Команду resize було уÑунуто починаючи з верÑÑ–Ñ— parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr ""
+"resizepart ÐОМЕР КІÐЕЦЬ змінити розмір розділу з номером "
+"ÐОМЕР"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm ÐОМЕР видалити розділ з номером ÐОМЕР"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select ПРИСТРІЙ вибирати приÑтрій Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "набір_диÑків"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set ПРÐПОРЕЦЬ СТÐРзмінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐŸÐ ÐПОРЦЯ Ð´Ð»Ñ "
+"вибраного приÑтрою"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [ПРÐПОРЕЦЬ] перемкнути Ñтан ПРÐПОРЦЯ на "
+"вибраному приÑтрої"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set ÐОМЕР ОЗÐÐКРСТÐРзмінити ознаку розділу з номером ÐОМЕР"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [ÐОМЕР [ОЗÐÐКÐ]] перемикнути ознаку ОЗÐÐКРрозділу з номером "
+"ÐОМЕР"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit БЛОК вÑтановити Ð´Ð»Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¾Ð³Ð¾ блоку Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð‘Ð›ÐžÐš"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version вивеÑти поточну верÑÑ–ÑŽ GNU Parted та "
+"інформацію про авторÑьке право"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"команда version виводить інформацію про верÑÑ–ÑŽ цієї програми GNU Parted\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"КориÑтуваннÑ: %s [-hlmsfv] [-a<вирівнюваннÑ>] [ПРИСТРІЙ [КОМÐÐДР"
+"[ПÐРÐМЕТРИ]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "ПриÑтрій не знайдено"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"ПОПЕРЕДЖЕÐÐЯ: у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” адмініÑтративних прав доÑтупу. Спочатку вам Ñлід "
+"отримати ці права.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Ðеобхідно перевÑтановити ваш завантажувач перед перезавантаженнÑм. Додаткову "
+"інформацію знайдете у розділі 4 документації з Parted."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Ðе забудьте оновити /etc/fstab, Ñкщо це необхідно.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"ЛаÑкаво проÑимо до GNU Parted! Перелік команд виводитьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾ÑŽ 'help'.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"ВикориÑтаннÑ: parted [КЛЮЧ]... [ПРИСТРІЙ [КОМÐÐДР[ПÐРÐМЕТРИ]...]...]\n"
+"Виконати КОМÐÐДРз параметрами ПÐРÐМЕТРИ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ñтрою ПРИСТРІЙ. Якщо\n"
+"КОМÐÐДРне вказана, запуÑкаєтьÑÑ Ñƒ інтерактивному режимі.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Ви знайшли помилку у GNU Parted! Рекомендації щодо подальших дій:\n"
+"\n"
+"Ðе панікуйте! Швидше за вÑе помилка не впливає на ваші дані.\n"
+"Допоможіть нам виправити помилку, Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾:\n"
+"\n"
+"Перевірте чи не була помилка вже виправлена у оÑтанній верÑÑ–Ñ—\n"
+"GNU Parted, Ñку можна знайти за адреÑою:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Перевірте цю верÑÑ–ÑŽ, перш ніж надÑилати звіт про помилку.\n"
+"\n"
+"Якщо помилка не виправлена чи ви не знаєте Ñк це перевірити,\n"
+"подальшу інформацію шукайте на веб-Ñайті GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"У вашому звіті Ñлід вказати верÑÑ–ÑŽ випуÑку (%s),\n"
+"наведене нижче Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку, вивід команди\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"та наÑтупний ÑпиÑок команд, Ñкі ви вводили.\n"
+"Також включіть додаткову інформацію про параметри, Ñкі вважаєте важливими.\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"ІÑÑ‚Ð¾Ñ€Ñ–Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Помилка: SEGV_MAPERR (ÐдреÑа не прив'Ñзана до об'єкту)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Помилка: SEGV_ACCERR (Ðеправильні права доÑтупу Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²'Ñзаного об'єкту)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Помилка: ВиÑвлено загальний Ñигнал SIGSEGV.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Помилка: FPE_INTDIV (Ціле: Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Помилка: FPE_INTOVF (Ціле чиÑло: переповненнÑ)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Помилка: FPE_INTDIV (ЧиÑло з рухомою комою: Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð½Ð° нуль)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Помилка: FPE_FLTOVF (ЧиÑло з рухомою комою: переповненнÑ)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Помилка: FPE_FLTUND (ЧиÑло з рухомою комою: дуже мале значеннÑ)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Помилка: FPE_FLTRES (ЧиÑло з рухомою комою: неточний результат)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Помилка: FPE_FLTINV (ЧиÑло з рухомою комою: неправильна операціÑ)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Помилка: FPE_FLTSUB (ЧиÑло з рухомою комою: Ð¿Ñ–Ð´Ð¿Ð¸Ñ Ð¿Ð¾Ð·Ð° межами)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Помилка: ВиÑвлено загальний Ñигнал SIGFPE."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Помилка: ILL_ILLOPC (ÐедопуÑтимий код операцій)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Помилка: ILL_ILLOPN (Ðеправильний операнд)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Помилка: ILL_ILLADR (Ðеправильний режим адреÑації)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Помилка: ILL_ILLTRP (Ðеправильна паÑтка)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Помилка: ILL_PRVOPC (Код привілейованої операції)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Помилка: ILL_PRVREG (Привілейований регіÑÑ‚Ñ€)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Помилка: ILL_COPROC (Помилка ÑпівпроцеÑора)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Помилка: ILL_BADSTK (Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñтеку)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Помилка: ВиÑвлено загальний Ñигнал SIGILL."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "некоректний елемент: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "ОчікуєтьÑÑ Ð½Ð¾Ð¼ÐµÑ€ розділу."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Розділ не Ñ–Ñнує."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "ОчікуєтьÑÑ Ñ‚Ð¸Ð¿ файлова ÑиÑтема."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Ðевідомий тип файлової ÑиÑтеми \"%s\"."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "ОчікуєтьÑÑ Ñ‚Ð¸Ð¿ диÑкової етикетки."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Підтримки прапорців не передбачено"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Ðе вдаєтьÑÑ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾ Ñтворити розділи."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "ОчікуєтьÑÑ Ñ‚Ð¸Ð¿ розділу."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "on"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "off"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "optimal"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "minimal"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "КЛЮЧІ:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "КОМÐÐДИ:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Про вади повідомлÑйте на цю адреÑу: %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "ВикориÑтовуєтьÑÑ %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° не має ÑенÑу у неінтерактивному режимі.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Розширені розділи не можуть бути на диÑкових етикетках msdos."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Розширені розділи не можуть бути розділами Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ð° диÑкових мітках "
+#~ "msdos."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " ЧИСЛО : відображаєтьÑÑ Ð´Ð¾ÐºÐ»Ð°Ð´Ð½Ð° Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ розділ з вказаним "
+#~ "номером\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «--%s» не передбачено\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: невідомий параметр «--%s»\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «-W %s» не передбачено\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: до параметра «-W %s» Ñлід додати аргумент\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "некоректний аргумент %s%s — '%s'"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "некоректний ÑÑƒÑ„Ñ–ÐºÑ Ñƒ аргументі %s%s: '%s'"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s, аргумент «%s» є занадто об’ємним"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Ðе вдаєтьÑÑ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ таблицю розділів, Ñлід перезавантажитиÑÑŒ перш ніж "
+#~ "підключати змінені розділи. Також перед перезавантаженнÑм необхідно "
+#~ "перевÑтановити завантажувач (що вимагає Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½ÐµÐ½Ð¸Ñ… розділів). "
+#~ "Ðеможливо виконати одночаÑно обидві дії! Тому Ñлід завантажитиÑÑŒ з "
+#~ "завантажувального диÑка, та перевÑтановити завантажувач. Додаткову "
+#~ "інформацію знайдете у розділі 4 документації з Parted."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Таблицю розділів на %s не вдаєтьÑÑ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ (%s). Це означає, що Hurd "
+#~ "нічого не знає про внеÑені вами зміни. Ðеобхідно перезавантажити ваш "
+#~ "комп'ютер перед виконаннÑм будь-Ñких дій з %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "ОблаÑÑ‚ÑŒ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ починаєтьÑÑ Ð· початку розділу."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Файлова ÑиÑтема має логічний розмір Ñектора %d. ВважаєтьÑÑ, що GNU Parted "
+#~ "працює неправильно з Ñекторами, розмір Ñких не дорівнює 512 байт."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Файл %s позначений Ñк ÑиÑтемний файл. Це означає, що його Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ "
+#~ "може призвеÑти до Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ деÑких програм."
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Ðе вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ розділ %d (%s)"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted не може перечитати таблицю розділів на %s (%s). Це означає, що "
+#~ "Linux не враховуватиме внеÑені зміни. "
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s міÑтить GPT Ñигнатуру, це означає, що він міÑтить GPT-таблицю. Ðле, "
+#~ "він не міÑтить правильної імітації msdos-ÑуміÑної таблиці розділів, хоча "
+#~ "Ñ– повинен міÑтити. Можливо він пошкоджений програмою Ñка не розуміє GPT-"
+#~ "таблиці розділів. Ðбо, можливо, ви видалили GPT-таблицю, а тепер "
+#~ "викориÑтовуєте msdos-ÑуміÑну таблицю розділів. Ðа цьому розділі Ñ” GPT-"
+#~ "таблицÑ?"
+
+#~ msgid "%s: illegal option -- %c\n"
+#~ msgstr "%s: неправильний ключ -- %c\n"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "ВикориÑтаннÑ: %s [КЛЮЧ]\n"
+#~ " або: %s ПРИСТРІЙ МЕÐШИЙÐОМЕР\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "ОчиÑтити невикориÑтаний проÑÑ‚Ñ–Ñ€ у розділі FAT (інÑтрументі теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help вивеÑти довідку та завершити роботу\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr ""
+#~ " --version вивеÑти інформацію про верÑÑ–ÑŽ та вийти\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "надто мало параметрів"
+
+#~ msgid "too many arguments"
+#~ msgstr "надто багато аргументів"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Розмір логічного Ñектору Ð´Ð»Ñ %s Ñкладає %lld. Ðаразі не вÑÑ– компоненти "
+#~ "GNU Parted це підтримують.\n"
+
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything about the modifications you made until "
+#~ "you reboot. You should reboot your computer before doing anything with "
+#~ "%s."
+#~ msgstr ""
+#~ "Ядро не може перечитати таблицю розділів на %s (%s). Це означає, що Linux "
+#~ "не враховуватиме внеÑені зміни до перезавантаженнÑ. Ðеобхідно "
+#~ "перезавантажити ваш комп'ютер перш ніж ÑкоÑÑŒ викориÑтовувати %s."
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "Підтримка Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ %s файлових ÑиÑтем ще не реалізована."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr "Підтримка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ %s файлових ÑиÑтем ще не реалізована."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "Підтримка перевірки %s файлових ÑиÑтем ще не реалізована."
+
+#~ msgid "raw block copying"
+#~ msgstr "ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
+
+#~ msgid "growing file system"
+#~ msgstr "Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¾Ñ— ÑиÑтеми"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Ðе можна копіювати на розділи, що перекриваютьÑÑ."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "БезпоÑÐµÑ€ÐµÐ´Ð½Ñ Ð¿Ñ–Ð´Ñ‚Ñ€Ð¸Ð¼ÐºÐ° файлових ÑиÑтем ще не реалізована Ð´Ð»Ñ %s. Ðле, "
+#~ "реалізована підтримка зміни розміру. Таким чином файлову ÑиÑтему можна "
+#~ "Ñкопіювати на новий розділ більшого розміру ніж Ñ–Ñнуючий. Тому або "
+#~ "зменшіть розділ, Ñкий ви намагаєтеÑÑŒ Ñкопіювати, або копіюйте на більший "
+#~ "розділ."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Підтримка ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²Ð¸Ñ… ÑиÑтем типу %s ще не підтримуєтьÑÑ."
+
+#~ msgid "creating"
+#~ msgstr "ÑтвореннÑ"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "Файлова ÑиÑтема у некоректному Ñтані. Можливо вона підключена?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr "Файлова ÑиÑтема має Ñтарий формат (зміна розміру не підтримуєтьÑÑ)."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Ðеправильна кількіÑÑ‚ÑŒ вільних блоків. Спочатку запуÑÑ‚Ñ–Ñ‚ÑŒ reiserfsck --"
+#~ "check"
+
+#~ msgid "checking"
+#~ msgstr "перевірка"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Дерево Reiserfs Ñхоже пошкоджене. Спочатку запуÑÑ‚Ñ–Ñ‚ÑŒ reiserfsck --check"
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Файлова ÑиÑтема reiserfs пройшла загальну перевірку. Ð”Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ докладної "
+#~ "перевірки запуÑÑ‚Ñ–Ñ‚ÑŒ reiserfsck --check."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ розділів типу reiserfs ще не підтримуєтьÑÑ."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr ""
+#~ "Ðе вдаєтьÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾ відкрити шар абÑтракції приÑтроїв Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ/запиÑу."
+
+#~ msgid "expanding"
+#~ msgstr "розширеннÑ"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Ðе вдаєтьÑÑ Ñтворити обробник абÑтрактних приÑтроїв reiserfs."
+
+#~ msgid "copying"
+#~ msgstr "копіюваннÑ"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Ðе вдаєтьÑÑ Ñ€Ð¾Ð·Ð²'Ñзати Ñимвол %s. Помилка: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted виÑвив некоректну бібліотеку libreiserfs."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted виÑвив невідповідніÑÑ‚ÑŒ верÑій libreiserfs. ВиÑвлено %d-%d, "
+#~ "потрібна %d. Підтримку ReiserFS вимкнено."
+
+#~ msgid "Unable to determine the block size of this dasd"
+#~ msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір блоку Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ dasd"
+
+#~ msgid ""
+#~ "%s read error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s помилка при читанні\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s write error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s помилка при запиÑÑ–\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s IOCTL error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s помилка IOCTL\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s Config file syntax error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s СинтакÑична помилка у конфігураційному файлі\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s space allocation\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñтору\n"
+#~ "%s\n"
+
+#~ msgid ""
+#~ "%s Fatal error\n"
+#~ "%s\n"
+#~ msgstr ""
+#~ "%s Фатальна помилка\n"
+#~ "%s\n"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Суперечлива група деÑкрипторів!"
+
+#~ msgid "File system full!"
+#~ msgstr "Файлова ÑиÑтема повна!"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Ðеправильний Ñуперблок. Ви впевнені, що це файлова ÑиÑтема типу ext2?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Файлова ÑиÑтема міÑтить помилки! Ðеобхідно запуÑтити e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Файлова ÑиÑтема не була правильно відключена! Ðеобхідно запуÑтити e2fsck. "
+#~ "Зміни до неціліÑної файлової ÑиÑтеми можуть призвеÑти до Ñерйозних "
+#~ "пошкоджень."
+
+#~ msgid "File system has an incompatible feature enabled."
+#~ msgstr "У файловій ÑиÑтемі ввімкнено неÑуміÑну влаÑтивіÑÑ‚ÑŒ."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Помилка розподілу буфера кеша."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Знайдено вузол (inode) з неправильною кількіÑÑ‚ÑŽ поÑилань. РекомендуєтьÑÑ "
+#~ "Ñпочатку запуÑтити e2fsck."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "ÐедоÑтатньо вільних вузлів (inode)!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Файлова ÑиÑтема надто заповнена, щоб видалити групу!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr ""
+#~ "У файловій ÑиÑтемі виділено надто багато вузлів (inode), щоб видалити "
+#~ "групу!"
+
+#~ msgid "adding groups"
+#~ msgstr "Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr "Файлова ÑиÑтема надто заповнена щоб змінити Ñ—Ñ— розмір до %i блоків."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "У файловій ÑиÑтемі надто багато зайнÑтих i-вузлів, щоб змінити Ñ—Ñ— розмір "
+#~ "до %i блоків."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr ""
+#~ "Файлова ÑиÑтема була неправильно відключена! Ðеобхідно запуÑтити e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "У файловій ÑиÑтемі ввімкнено влаÑтивіÑÑ‚ÑŒ 'dir_index'. Parted може "
+#~ "змінювати розмір лише у файлових ÑиÑтем, у Ñких Ñ†Ñ Ð²Ð»Ð°ÑтивіÑÑ‚ÑŒ вимкнена. "
+#~ "Ви можете увімкнути її пізніше, командою 'tune2fs -O dir_index DEVICE', "
+#~ "піÑÐ»Ñ Ñ‡Ð¾Ð³Ð¾ Ñлід запуÑтити 'e2fsck -fD DEVICE'."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "ÐžÐ¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð¼Ñ–Ð½Ð¸ розміру на цій файловій ÑиÑтемі викориÑтовує\n"
+#~ "ЕКСПЕРИМЕÐТÐЛЬÐИЙ код та МОЖЕ ПОШКОДИТИ Ñ—Ñ— (хоча цього доÑÑ– не було\n"
+#~ "помічено). Принаймні, Ñлід зробити резервну копію даних та запуÑтити\n"
+#~ "'e2fsck -f' піÑÐ»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð¸ розміру."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "ВиÑвлено блоки з перехреÑними поÑиланнÑми! Краще Ñпочатку запуÑтити "
+#~ "e2fsck!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Блок %i не має поÑиланнÑ? Дивно"
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Блок %i не повинен бути відміченим (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Файлова ÑиÑтема ext2 пройшла загальну перевірку. Ð”Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ докладної "
+#~ "перевірки кориÑтуйтеÑÑŒ програмою e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ розділів типу ext2 ще не підтримуєтьÑÑ!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Ðе вдаєтьÑÑ Ð¾Ñ‡Ð¸Ñтити буфер кешу!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "запиÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð¸Ñ… груп"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Файлова ÑиÑтема занадто маленька Ð´Ð»Ñ ext2."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Ðадто багато пошкоджених Ñторінок."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr "Розділ повинен мати один з наÑтупних типів FS-TYPE: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "ІÑнуюча файлова ÑиÑтема буде знищена разом з уÑіма даними на ній. "
+#~ "Продовжити?"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Ðомер вихідного розділу?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Ðомер цільового розділу?"
+
+#~ msgid "File system?"
+#~ msgstr "Файлова ÑиÑтема?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr "Розширений розділ не може мати файлову ÑиÑтему. Виконати mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "ÐŸÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ… розділів не підтримуєтьÑÑ."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr "Ðе можна переміщувати розділ Ñам у Ñебе. Може Ñпробувати resize?"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Ðомер: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "Ознаки: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Файлова ÑиÑтема: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Розмір: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Мінімальний розмір: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "МакÑимальний розмір: "
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check ÐОМЕР виконати проÑту перевірку файлової ÑиÑтеми"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [З-ПРИСТРОЮ] З-ÐОМЕР У-ÐОМЕР копіювати файлову ÑиÑтему у інший "
+#~ "розділ"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partititon NUMBER"
+#~ msgstr ""
+#~ "mkfs ÐОМЕР ТИП-ФС Ñтворити файлову ÑиÑтему ТИП-ФС у розділі "
+#~ "ÐОМЕР"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs ТИП-РОЗДІЛУ ТИП-ФС ПОЧÐТОК КІÐЕЦЬ Ñтворити розділ з файловою "
+#~ "ÑиÑтемою"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr "resize ÐОМЕР ПОЧÐТОК КІÐЕЦЬ змінити розмір розділу ÐОМЕР"
diff --git a/po/vi.gmo b/po/vi.gmo
new file mode 100644
index 0000000..38f7f55
--- /dev/null
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..ac4abc4
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,3750 @@
+# Vietnamese translation for Parted.
+# Bản dịch tiếng Việt dành cho parted.
+# Copyright © 2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Trần Thị Hoàng Quyá»n <banhdauxanhhaiduong@gmail.com>, 2005.
+# Clytie Siddall <clytie@riverland.net.au>, 2009, 2010.
+# Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2014, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-18 07:41+0700\n"
+"Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n"
+"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "đối số không hợp lệ %s cho %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "đối số không rõ ràng %s cho %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "Các đối số hợp lệ là:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "lá»—i ghi nhá»›"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "Gặp lỗi hệ thống không rõ"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s: tùy chá»n “-%s%s†chÆ°a rõ ràng\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s: tùy chá»n “%s%s†chÆ°a rõ ràng; khả năng là:"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s: không nhận ra tùy chá»n “%s%sâ€\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s: tùy chá»n “%s%s†không không cho phép má»™t đối số\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s: tùy chá»n “%s%s†cần má»™t đối số\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s: tùy chá»n không hợp lệ -- “%câ€\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s: tùy chá»n yêu cầu má»™t đối số -- “%câ€\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "Thành công"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "Không tìm thấy"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "Biểu thức chính quy không hợp lệ"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "Ký tự đối chiếu không hợp lệ"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "Sai đặt tên lớp ký tự"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "Có dấu chéo ngược theo sau"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "Sai đặt tham chiếu ngược"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "Chưa khớp cặp [, [^, [:, [., hoặc [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "Có một ký tự “(†hay “\\(†lẻ đôi"
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "Có ký tự “\\{†lẻ đôi"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "Nội dung của “\\{\\}†không hợp lệ"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "Sai kết thúc phạm vi"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "Cạn bộ nhớ"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "Sai đặt biểu thức chính quy đi trước"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "Kết thúc sớm biểu thức chính quy"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "Biểu thức chính quy quá lớn"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "Có một ký tự “)†hay “\\)†lẻ đôi"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "Không có biểu thức chính quy đi trước"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[cCyY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[kKnN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "Äóng gói bởi %s (%s)\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "Äóng gói bởi %s\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Giấy phép GPL pb3+: Giấy phép Công cộng GNU phiên bản 3 hay sau\n"
+"<%s>\n"
+"Äây là phần má»m tá»± do: bạn có quyá»n sá»­a đổi và phát hành lại nó.\n"
+"KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u khiển được pháp luật cho phép.\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Viết bởi %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "Viết bởi %s và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "Viết bởi %s, %s và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, %s, và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, %s, %s, và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, %s, %s, %s.\n"
+"và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, %s, %s, %s.\n"
+"%s, và %s.\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"Viết bởi %s, %s, %s,.\n"
+"%s, %s, %s, %s.\n"
+"%s, %s, và những ngÆ°á»i khác.\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"Gửi báo cáo lỗi tới: <%s>\n"
+"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "Thông báo lỗi %s nào cho: %s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "Trang chủ %s: <%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "Trợ giúp chung vá» cách sá»­ dụng phần má»m GNU: <%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "hết bộ nhớ"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "Ảnh ÄÄ©a"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "Lỗi mở %s: %s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr "Không mở được %s Ä‘á»c-ghi (%s). %s đã được mở ở tình trạng chỉ Ä‘á»c."
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "%s trong khi tìm nÆ¡i để Ä‘á»c trên %s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "%s trong khi Ä‘á»c trên %s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "Không thể ghi nhá»› vào %s, vì nó đã được mở ở tình trạng chỉ Ä‘á»c."
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "%s trong khi tìm nơi để ghi trên %s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "%s trong khi ghi trên %s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Hãy thử chạy câu lệnh trợ giúp “%s --help†để biết thêm thông tin.\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "Cách dùng: %s [TÙY_CHỌN] [THIẾT_BỊ]...\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"Báo hệ Ä‘iá»u hành biết vá» thay đổi trong bảng phân vùng.\n"
+"\n"
+" -d, --dry-run chạy thử (không thực sự báo)\n"
+" -s, --summary in ra bản tóm tắt nội dung\n"
+" -h, --help hiển thị trợ giúp này, sau đó thoát\n"
+" -v, --version xuất thông tin vỠphiên bản, sau đó thoát\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"Không Ä‘Æ°a ra THIẾT_BỊ thì thăm dò má»i phân vùng.\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"Gửi báo cáo lỗi tới <%s>.\n"
+"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "Không thể mở %s."
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "Không thể thăm dò kho lưu trữ."
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"CẢNH BÃO: hạt nhân không Ä‘á»c lại được bảng phân vùng trên %s (%s). Kết quả "
+"là bạn có thể cần phải khởi Ä‘á»™ng lại để má»i thay đổi có tác dụng."
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr ""
+"CẢNH BÃO: không thể mở %s (%s). Kết quả là bạn có thể cần phải khởi Ä‘á»™ng lại "
+"để má»i thay đổi có tác dụng."
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"CẢNH BÃO: gặp lá»—i khi làm cho bá»™ dịch ra Ä‘i trên %s (%s). Kết quả là bạn có "
+"thể cần phải khởi Ä‘á»™ng lại để má»i thay đổi có tác dụng."
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s đang thử đồng bộ hoá %s với đĩa"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "Không thể lấy trạng thái vỠthiết bị %s — %s."
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "Không thể xác định kiểu dm của %s."
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"Không thể quyết định kích cỡ cung từ đối với %s: %s\n"
+"nên dùng kích cỡ cung từ mặc định (%lld)."
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"Không thể quyết định kích cỡ cung từ vật lý đối với %s\n"
+"nên dùng kích cỡ cung từ lô-gíc (%lld)."
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "Không thể quyết định kích cỡ của %s (%s)."
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "IDE giống loài"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "Không thể nhận diện thiết bị %s — %s"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"Thiết bị %s có nhiá»u (%d) cung từ lô-gíc trên má»—i cung từ vật lý.\n"
+"ChÆ°Æ¡ng trình GNU Parted há»— trợ trÆ°á»ng hợp này má»™t cách VẪN THá»°C NGHIỆM\n"
+"đối với một số tổ hợp nhãn đĩa/hệ thống tập tin, v.d. GPT và ext2/3.\n"
+"Hãy thăm trang chủ Web để tìm thông tin đã cập nhật."
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "Gặp lỗi khi sơ khởi thiết bị SCSI %s — %s"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"Thiết bị %s quá nhá», và không thể dùng để cất giữ má»™t hệ thống tập tin hay "
+"bảng phân vùng. Có thể bạn đã chá»n nhầm thiết bị?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"Không nhận ra cấu trúc hình há»c của tập tin/thiết bị %s. Không được sá»­ dụng "
+"Parted trừ khi THỰC SỰ biết mình đang làm gì!"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "Bo mạch lưu trữ SD/MMC giống loài"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "Thiết bị NVMe"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "Bá»™ Ä‘iá»u khiển RAID DAC960"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Thiết bị SATA SX8 Promise"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "ATA qua thiết bị Ethernet"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "á»” Ä‘Ä©a DASD S390 IBM"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "DASD Ảo iSeries IBM"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Mảng Khéo Compaq"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "Thiết bị NVDIMM"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "Bá»™ Ä‘iá»u khiển ATARAID"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "Bá»™ Ä‘iá»u khiển I2O"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "UBD Linux Chế Ä‘á»™ NgÆ°á»i dùng"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "Thiết bị vòng lặp"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Bộ ánh xạ thiết bị Linux (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Thiết bị Khối Ảo Xen"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "Không rõ"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Thiết bị khối Virtio"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Mảng RAID phần má»m Linux"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "ÄÄ©a RAM"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() Kiểu thiết bị không được hỗ trợ"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "Lỗi fsync hay đóng %s: %s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "% 0.0scuối của tệp tin trong khi Ä‘á»c %s"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"Gặp lỗi khi cho hạt nhân biết vỠsự sửa đổi trong phân vùng %s — %s. Có "
+"nghĩa là Linux không biết vỠthay đổi nào bạn đã làm trong %s đến khi bạn "
+"khởi động lại, thì bạn không nên gắn kết nó hoặc sử dụng nó bằng cách nào cả "
+"trước khi khởi động lại."
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "Không thể xác định điểm bắt đầu và độ dài của %s."
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"(Các) phiên bản %s trên %s đã được ghi nhớ, nhưng mà không thể cho hạt nhân "
+"biết vỠthay đổi này, rất có thể vì phiên bản đó đang được sử dụng. Kết quả "
+"là (các) phiên bản cũ còn lại được sử dụng. Bạn nên khởi động lại ngay bây "
+"giỠmà không làm thay đổi thêm nào."
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr ""
+"Không thể có kết thúc đứng trước bắt đầu! (bắt đầu rãnh_ghi=%jd "
+"chiá»u_dài=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "Cố ghi các cung từ %ld-%ld nằm ngoài phân vùng trên %s."
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "Ä‘ang kiểm tra tìm khối há»ng"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "Truy ngược có %d lá»i gá»i trên ngăn xếp:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "Khẳng định (%s) tại %s:%d trong hàm %s() bị lỗi."
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: không nhận ra nhãn đĩa"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr ""
+"Thư viện libparted này không hỗ trợ ghi vào %s. Có thể đã biên dịch nó chỉ "
+"Ä‘á»c."
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "Phân vùng %d là %s, nhưng hệ thống tập tin là %s."
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "Không nhận ra cỠđĩa, %d."
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "Nhãn đĩa %s không hỗ trợ phiên bản mở rộng."
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "Nhãn đĩa %s không hỗ trợ phiên bản kiểu mở rộng hay lô-gíc."
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "Quá nhiá»u phân vùng chính."
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr ""
+"Không thể thêm vào %s một phân vùng lô-gíc, vì không có phân vùng mở rộng."
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "Không cho phép nhiá»u hÆ¡n má»™t phân vùng mở rá»™ng trên %s."
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "Không cho phép phân vùng lô-gíc nằm ngoài phân vùng mở rộng."
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "Không cho phép phân vùng lô-gíc nằm ngoài phân vùng mở rộng trên %s."
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "Không cho phép phân vùng chính nằm trong phân vùng mở rộng."
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "Không thể có phân vùng nằm ngoài đĩa!"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "Không cho phép các phân vùng chồng chéo lên nhau."
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "siêu dữ liệu"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "trống"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "mở rộng"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "lô-g"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "chính"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "khởi động"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "gốc"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "trao đổi"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "ẩn"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "dịch vụ HP"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "chuẩn bị"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "Không nhận ra cỠphân vùng, %d."
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "Thông tin"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "Lá»—i"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "Nghiêm trá»ng"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Lá»—i"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "Không thi hành"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "Sá»­a"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "Có"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "Không"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "OK"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "Thử lại"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "Bá» qua"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "Thôi"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"Phát hiện ra một lỗi trong GNU parted. Hãy thăm trang chủ Web của parted "
+"(http://www.gnu.org/software/parted/parted.html) để biết thêm vỠthông tin "
+"thích hợp với báo cáo lỗi! Xin hãy gửi thư thông báo tới %s kèm theo ít "
+"nhất là số phiên bản (%s) và thông tin sau đây: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "ChÆ°a thá»±c hiện há»— trợ Ä‘á»c nhãn Ä‘Ä©a AIX."
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "Chưa thực hiện hỗ trợ ghi nhãn đĩa AIX."
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "Chưa thực hiện hỗ trợ thêm phân vùng vào nhãn đĩa AIX."
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "Chưa thực hiện hỗ trợ nhân đôi phân vùng trong nhãn đĩa AIX."
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr ""
+"Chưa thực hiện hỗ trợ đặt loại hệ thống của phân vùng trong nhãn đĩa AIX."
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "Chưa thực hiện hỗ trợ đặt cỠtrong nhãn đĩa AIX."
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr ""
+"Không thể dùng bảng phân Atari vùng trên đĩa với cỡ cung từ không bằng %d "
+"byte."
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr ""
+"Không thể sá»­ dụng bảng phân vùng Atari trên Ä‘Ä©a nếu nhiá»u hÆ¡n %d cung từ."
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr ""
+"Dò tìm thấy quá nhiá»u phân vùng Atari. Cói lẽ ở đây có lẽ lặp quẩn tròn "
+"trong danh sách liên kết XGM. Nên bãi bá»."
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "Không tìm thấy dữ liệu phân vùng trong ARS tại cung từ %lli."
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr ""
+"Mục tin của ARS lôgíc kế tiếp không phải là kiểu XGM trong ARS tại cung từ "
+"%lli."
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr ""
+"Äây có vẻ không phải là má»™t bảng phân vùng Atari trên Ä‘Ä©a này (%s), hoặc là "
+"nó bị há»ng."
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "Không có chỗ ở cung từ %lli để lưu ARS của phân vùng lôgíc %d."
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "Không có chỗ ở cung từ %lli để lưu ARS."
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr ""
+"Số lượng cung từ cái mà được lưu trong bảng phân vùng không tương ứng với "
+"kích thước của thiết bị của bạn. Bạn có muốn sửa bảng phân vùng?"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "Không có chỗ ở cung từ %lli để lưu BSL."
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "Ở đây vẫn còn các phân vùng sau khi Ä‘iá»n đầy bảng AHDI chính."
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"Bảng DHDI chính được lá»c ra vá»›i má»i phân vùng nhÆ°ng bảng ICD không trống vậy "
+"có các phân vùng khác không biết cỡ và vị trí sẽ được dò tìm ra bởi phần má»m "
+"tương thích ICD. Bạn có muốn bất hoạt bảng ICD?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "Mục tin ICD không thể chứa phân vùng mở rộng hay lôgíc."
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "Ở đây vẫn còn các phân vùng sau khi Ä‘iá»n đầy bảng."
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"Bạn không thể sá»­ dụng má»™t phân vùng XGM mở rá»™ng trong chế Ä‘á»™ ICD (nhiá»u hÆ¡n "
+"%d phân vùng chính, nếu XGM là phân vùng đầu nó sẽ đếm là hai)."
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "Không thể thoả má»i ràng buá»™c trên phân vùng."
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"Bạn không thể sá»­ dụng nhiá»u hÆ¡n %d phân vùng chính (chế Ä‘á»™ ICD) nếu bạn sá»­ "
+"dụng phân vùng XGM mở rộng. Nếu XGM là phân vùng đầu tiên nó đếm thành hai."
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "Không thể cấp phát một số thứ tự phân vùng."
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "Không thể cấp phát một khe nhãn đĩa sai."
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "Bảng phân vùng của thiết bị DASD-LDL không thể thay đổi.\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "Không thể cấp phát một khe nhãn đĩa DASD"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "Gặp bảng phân vùng sai trên %s -- chữ ký không đúng %x."
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "Bảng phân vùng sai -- phiên bản đệ quy trên %s."
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr ""
+"Parted không thể thay đổi kích cỡ của phân vùng bị Windows Dynamic Disk quản "
+"lý."
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "không thể tạo phân vùng thêm nữa"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s không có phân vùng mở rộng (phân vùng phần đầu của khối tin)."
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "Sai kiểm tổng (checksum) thì bảng phân vùng bị há»ng."
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "Chỉ phân vùng chính có thể là phân vùng gốc."
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "Chỉ phân vùng chính có thể là phân vùng trao đổi."
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "Chỉ phân vùng lô-gíc có thể là một tập tin khởi động."
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"lỗi đặt tên phân vùng DVH thành %s:\n"
+"Chỉ phân vùng lôgíc (tập tin khởi động) có một tên."
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "Quá nhiá»u phân vùng chính"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "lỗi mở"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "lá»—i di chuyển vị trí Ä‘á»c"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "lá»—i Ä‘á»c"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "lá»—i ioctl()"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "Phiên bản API không tương ứng"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "Loại đĩa không được hỗ trợ"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "Äịnh dạng Ä‘Ä©a không được há»— trợ"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ÄÄ©a Ä‘ang được sá»­ dụng"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "Gặp lỗi cú pháp trong tập tin cấu hình"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "Nhãn khối tin bị há»ng"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "Má»™t tên tập hợp dữ liệu bị há»ng"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "Lỗi cấp phát bộ nhớ"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "Lỗi thẩm tra thiết bị"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "Thiết bị đã ghi rõ không phải là một thiết bị DASD hợp lệ"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "VOLSER không tìm thấy trên thiết bị"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "Lá»—i nghiêm trá»ng"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "Không còn chỗ trống cho nhãn khối tin."
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "Không có chỗ trống cho thông tin vỠphân vùng."
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "VTOC không hợp lệ."
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "Không thể lấy phiên bản API."
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr ""
+"Phiên bản API hiện thá»i “%d†không tÆ°Æ¡ng ứng vá»›i phiên bản API trình Ä‘iá»u "
+"khiển DASD “%dâ€!"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "Không thể lấy kích cỡ đĩa."
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "Không thể lấy thông tin vá» cấu trúc hình há»c của Ä‘Ä©a."
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "Không thể lấy thông tin vỠkích cỡ khối."
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "Cấu trúc hình thể đĩa không khớp với thiết bị DASD của kiểu 3390."
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "thiết bị quá nhỠcho GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"Äịnh dạng của bảng phân vùng GPT có phiên bản %x, má»›i hÆ¡n so vá»›i phiên bản "
+"Parted có thể nhận ra. Xin hãy báo cáo Ä‘iá»u này cho chúng tôi biết!"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"Không phải toàn bộ sức chứa sẵn sàng cho %s hình như được sử dụng, bạn có "
+"thể sửa GPT để sử dụng toàn bộ sức chứa (%llu khối bổ sung) hoặc tiếp tục "
+"với cài đặt hiện tại? "
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"Bảng GPT sao lưu không nằm tại cuối đĩa như yêu cầu. Sửa bằng cách di chuyển "
+"phần sao lưu tới cuối (và xóa bỠsao lưu cũ)?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"Cả bảng GPT chính và sao lÆ°u Ä‘á»u há»ng. Hãy thá»­ tạo má»™t bảng má»›i, và sá»­ dụng "
+"tính năng cứu nguy của Parted để phục hồi các phân vùng."
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr ""
+"Bảng GPT sao lÆ°u bị há»ng, nhÆ°ng bảng chính hình nhÆ° vẫn tốt, vì thế sẽ sá»­ "
+"dụng bảng chính."
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr ""
+"Bảng GPT chính bị há»ng, nhÆ°ng sao lÆ°u hình nhÆ° vẫn tốt, vì thế sẽ sá»­ dụng "
+"sao lÆ°u."
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "sai khớp CRC mảng bảng phân vùng chính"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "gặp lỗi khi dịch tên phân vùng"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "Chữ ký sai %x đối với nhãn đĩa Mac."
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "Sơ đồ phân vùng không có mục nhập sơ đồ phân vùng!"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s quá nhỠcho một nhãn đĩa Mac!"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "Phân vùng %d có một chữ ký sai %x."
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "Phân vùng %d có chiá»u dài sai 0 byte!"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "Vùng dữ liệu không bắt đầu ở đầu của phân vùng."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "Vùng khởi động của phân vùng không chiếm toàn bộ phân vùng."
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "Vùng dữ liệu của phân vùng không chiếm toàn bộ phân vùng."
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr ""
+"Kích thước khối kỳ lạ trên mô tả thiết bị: %d byte không chia hết cho 512."
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr ""
+"Mô tả của trình Ä‘iá»u khiển cho biết kích thÆ°á»›c khối là %d byte, nhÆ°ng Linux "
+"nói nó %d byte."
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "Không tìm thấy sơ đồ phân vùng hợp lệ."
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr ""
+"Xung đột kích thước mục sơ đồ phân vùng! Mục 1 nói là %d, nhưng mục %d nói "
+"là %d!"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "Kỳ lạ - có hai mục sơ đồ phân vùng!"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr ""
+"Thay đổi tên của một phân vùng gốc hay trao đổi sẽ khiến Linux không nhận ra "
+"chúng như trước."
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "Không thêm được phân vùng bổ sung - sÆ¡ đồ phân vùng quá nhá»!"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "Bảng phân vùng sai trên %s."
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr ""
+"Phân vùng %d không căn hàng vá»›i biên trụ. TrÆ°á»ng hợp này vẫn còn không được "
+"hỗ trợ."
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "Không thêm được phân vùng bổ sung."
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"chiá»u dài phân vùng %1$jd vượt quá chiá»u dài tối Ä‘a %3$jd bị bảng phân vùng "
+"%2$s ép buộc"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr ""
+"bắt đầu ở số thứ tá»± cung từ, %1$jd vượt quá chiá»u dài tối Ä‘a %3$jd bị bảng "
+"phân vùng %2$s ép buộc"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s: Sai kiểm tổng (checksum) trên khối %llu có loại %s."
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s : Không tìm thấy khối rdb, không bao giỠnên xảy ra."
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s : Phát hiện vòng lặp tại khối %d."
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%s : Danh sách %s hình như sai tại khối %s."
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s : Lỗi liệt kê các khối sai."
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s : Lỗi liệt kê các khối phân vùng."
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s : Lỗi liệt kê các khối hệ thống tập tin."
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s : Lỗi liệt kê các khối khởi động."
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "Lỗi ghi khối phân vùng tại %d."
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "Nhận ra má»™t nhãn Ä‘Ä©a Sun bị há»ng."
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"Cấu trúc hình há»c CHS của Ä‘Ä©a (%d,%d,%d) được hệ Ä‘iá»u hành thông báo không "
+"tương ứng cấu trúc chứa trong nhãn đĩa (%d,%d,%d)."
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "Nhãn đĩa mô tả một đĩa lớn hơn %s."
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "ÄÄ©a có %d trụ, mà lá»›n hÆ¡n số tối Ä‘a 65536."
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"Phân vùng Toàn bá»™ ÄÄ©a (Whole Disk) là phân vùng sẵn sàng còn lại duy nhất. "
+"Nói chung, không nên ghi chèn phân vùng này bằng một phân vùng thực sự. "
+"Solaris có thể sẽ không khởi động khi không có nó, và SILO (trình khởi động "
+"sparc) cũng cần phân vùng này."
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Nhán đĩa Sun đầy."
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "lỗi mở thiết bị"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "lỗi tìm nơi trên thiết bị"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "lỗi ghi vào thiết bị"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "lá»—i Ä‘á»c từ thiết bị"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "Không thể Ä‘á»c nhãn khối tin."
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "Không thể ghi nhãn khối tin."
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "Không thể Ä‘á»c các nhãn VTOC."
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "Không thể Ä‘á»c VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "Không thể Ä‘á»c VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "Không thể Ä‘á»c VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "Không thể Ä‘á»c VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "Không thể ghi nhãn VTOC."
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "Không thể ghi VTOC FMT1 DSCB."
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "Không thể ghi VTOC FMT4 DSCB."
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "Không thể ghi VTOC FMT5 DSCB."
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "Không thể ghi VTOC FMT7 DSCB."
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "Không thể ghi VTOC FMT9 DSCB."
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "Không đủ bộ nhớ."
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "Không thể lấy kích cỡ Ä‘Æ¡n vị cho Ä‘Æ¡n vị đặc biệt “COMPACTâ€."
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "“%s†sai cú pháp đối với vị trí."
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "Giá trị đầu tối đa là %d."
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "Giá trị cung từ tối đa là %d."
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "Vị trí %s nằm ngoài thiết bị %s."
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "Con số không hợp lệ."
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "Sử dụng một đơn vị nhỠhơn thay vì giá trị < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s: Lỗi cấp phát khối phân vùng\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s: Lỗi cấp phát khối\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s: Không thể Ä‘á»c khối khởi Ä‘á»™ng %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s: Không thể Ä‘á»c khối khởi Ä‘á»™ng %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s: Lỗi cấp phát phần tử danh sách mã số\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s: Không thể Ä‘á»c khối %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s: Sai kiểm tổng (checksum) trên khối %llu có loại %s\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s: Không thể ghi khối %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s: Lỗi cấp phát khối rdb disk_specific (đặc trưng cho đĩa)\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s: Không tìm thấy khối rdb, không bao giỠnên xảy ra\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s: Lá»—i Ä‘á»c khối phân vùng %llu\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr ""
+"GNU Parted bị biên dịch sai: cung từ khởi động FAT nên là 512 byte. Vì thế "
+"tắt hỗ trợ FAT."
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "Hệ thống tập tin có chữ ký sai cho hệ thống tập tin kiểu FAT."
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr ""
+"Hệ thống tập tin có kích thước cung từ sai cho hệ thống tập tin kiểu FAT."
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr ""
+"Hệ thống tập tin có kích thước liên cung sai cho hệ thống tập tin kiểu FAT."
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr ""
+"Hệ thống tập tin có số cung từ dự trữ sai cho hệ thống tập tin kiểu FAT."
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "Hệ thống tập tin có số FAT sai."
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"Hình thái há»c (CHS) hệ thống tệp tin là (%d, %d, %d), mà nó thì không hợp "
+"lệ. Hình thái há»c CHS của bảng phân vùng lại là (%d, %d, %d)."
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "Cung từ khởi động FAT nói kích thước cung từ lô-gíc là 0. Kỳ lạ. "
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "Cung từ khởi động FAT nói không có bảng FAT. Kỳ lạ. "
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "Cung từ khởi động FAT nói liên cung là 0 cung từ. Kỳ lạ. "
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "Hệ thống tập tin là FAT12, mà không được hỗ trợ."
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "Chữ ký trao đổi linux kiểu cÅ© không nhận ra “%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "Chữ ký trao đổi linux kiểu má»›i không nhận ra “%10sâ€."
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "Chữ ký trao đổi linux swsusp không nhận ra “%9sâ€."
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr ""
+"Parted không dùng được hệ thống tập tin HFS trên đĩa có kích cỡ cung từ khác "
+"%d byte."
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"Cấu trúc hình há»c CHS của hệ thống tập tin là (%d, %d, %d) mà sai. Cấu trúc "
+"hình há»c CHS của bảng phân vùng là (%d, %d, %d). Nếu ngÆ°á»i dùng chá»n “Bá» "
+"qua†thì không thay đổi cấu trúc hình há»c CHS của hệ thống tập tin. Chá»n "
+"“Sá»­a†thì cấu trúc hình há»c CHS của hệ thống tập tin được đặt để tÆ°Æ¡ng ứng "
+"vá»›i cấu trúc hình há»c CHS của bảng phân vùng."
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"Cung từ thông tin có chữ ký sai (%x). Hãy chá»n “Thôiâ€, và gá»­i má»™t báo cáo "
+"lá»—i. Nếu liá»u lÄ©nh, thì có thể lá» Ä‘i."
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"NgÆ°á»i dùng cần %s không gian trống để rút ngắn phân vùng tá»›i kích thÆ°á»›c này "
+"(hiện thá»i chỉ có %s trống)."
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr ""
+"Delta bắt đầu liên cung = %d, mà không phải là bội số của kích thước liên "
+"cung %d."
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr ""
+"Mục thư mục xấu cho %s: liên cung đầu tiên là cuối của đánh dấu tập tin."
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr "FAT xấu: chuỗi không kết thúc cho %s. Cần chạy dosfsck hoặc scandisk."
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"FAT xấu: liên cung %d ngoài hệ thống tập tin trong chuỗi cho %s. Cần chạy "
+"dosfsck hoặc scandisk."
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"FAT xấu: liên cung %d là liên kết chồng chéo cho %s. Cần chạy dosfsck hoặc "
+"scandisk."
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s là %dk, nhưng nó có %d liên cung (%dk)."
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "Phân vùng quá lớn/nhỠđối với hệ thống tập tin %s."
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"Các FAT không tÆ°Æ¡ng ứng. Nếu không biết ý nghÄ©a của nó, thì hãy chá»n cancel "
+"(Thôi), chạy scandisk trên hệ thống tập tin, sau đó quay lại."
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "Không có cấu hình có thể làm cho kiểu FAT này."
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"Hệ thống tập tin không có kích thước Windows mong đợi. Kích thước liên cung "
+"là %dk (mong đợi %dk); số liên cung là %d (mong đợi %d); kích thước FAT là "
+"%d cung từ (mong đợi %d)."
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr ""
+"Hệ thống tập tin cho biết không gian trống là %d liên cung, không phải %d."
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr ""
+"Không đủ chỗ trống trong thư mục gốc để chứa tất cả các tập tin. Hoặc Thôi "
+"(cancel), hoặc BỠqua (ignore) và sẽ mất các tập tin."
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "Gặp lỗi khi ghi vào thư mục gốc."
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "Nếu để hệ thống tập tin là FAT16, thì sẽ không có vấn đỠgì."
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"Nếu chuyển thành FAT16, và cài đặt MS Windows trên phân vùng này, thì sẽ "
+"phải cài đặt lại trình khởi động của MS Windows. Nếu muốn thực hiện, thì "
+"cần xem tài liệu ngÆ°á»i dùng của Parted (hoặc tài liệu của nhà phân phối)."
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "Nếu dể hệ thống là FAT32, thì sẽ không có vấn đỠmới nào xảy ra."
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"Nếu chuyển thành FAT32, và cài đặt MS Windows trên phân vùng này, thì sẽ "
+"phải cài đặt lại trình khởi động của MS Windows. Nếu muốn thực hiện, thì "
+"cần xem tài liệu ngÆ°á»i dùng của Parted (hoặc tài liệu của nhà phân phối). "
+"Äồng thá»i, chuyển thành FAT32 sẽ khiến MS DOS, MS Windows 95a, và MS Windows "
+"NT không Ä‘á»c được chúng."
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "Bạn có muốn dùng FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr ""
+"Chỉ thay đổi được kích thước của hệ thống tập tin thành kích thước này khi "
+"chuyển thành FAT16."
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr ""
+"Chỉ thay đổi được kích thước của hệ thống tập tin thành kích thước này khi "
+"chuyển thành FAT32."
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr ""
+"GNU Parted không thay đổi được kích thước của phân vùng này thành kích thước "
+"chỉ ra. Chúng tôi đang thực hiện việc đó!"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d vật chứa %x không tương ứng vật chứa cung từ khởi động %x. Có thể "
+"cần chạy scandisk."
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set: liên cung %ld ngoài hệ thống tập tin"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get: liên cung %ld nằm ở ngoài hệ thống tập tin"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster: không còn liên cung trống"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "Không thể phát hiện hệ thống tập tin."
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr ""
+"đưa trở lại kích thước yêu cầu %s hệ thống tệp tin là không được hỗ trợ"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "Hệ thống tập tin lớn hơn khối tin!"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "Hệ thống tập tin chứa lỗi."
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "Không thể Ä‘á»c khối xấu."
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"Äang cố đăng ký má»™t khu vá»±c bắt đầu tại khối 0x%X, nhÆ°ng má»™t khu vá»±c khác đã "
+"có tại vị trí này. NgÆ°á»i dùng cần kiểm tra hệ thống tập tin!"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"Äang cố di chuyển má»™t khu vá»±c từ khối 0x%X sang khối 0x%X, nhÆ°ng má»™t khu vá»±c "
+"khác đã có tại vị trí này. TrÆ°á»ng hợp này không nên xảy ra!"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "Không thể cập nhật vùng nhớ tạm tầm cho tập tin HFS với CNID %X."
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "Äang thá»­ Ä‘á»c tập tin HFS vá»›i CNID %X đằng sau EOF."
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "Không tìm thấy cung từ %lli của tập tin HFS với CNID %X."
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "Äang thá»­ ghi tập tin HFS vá»›i CNID %X đằng sau EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "Không thể cập nhật vùng nhớ tạm tầm cho tập tin HFS+ với CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "Äang thá»­ Ä‘á»c tập tin HFS+ vá»›i CNID %X đằng sau EOF."
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "Không tìm thấy cung từ %lli của tập tin HFS+ với CNID %X."
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "Äang thá»­ ghi tập tin HFS+ vá»›i CNID %X đằng sau EOF."
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "Tiếc là chưa có thể thay đổi kích cỡ HFS bằng cách đó."
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "đang co lại"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "Lỗi định vị lại dữ liệu."
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr ""
+"Tiến trình định vị lại dữ liệu đã để lại một số dữ liệu ở cuối khối tin."
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "đang ghi Khối Thư mục Chủ HFS"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "Không tìm thấy chữ ký HFS[+X] đúng trong khi mở."
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "Phiên bản %d của HFS+ vẫn chưa được hỗ trợ."
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "Phiên bản %d của HFSX vẫn chưa được hỗ trợ."
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr ""
+"Tiến trình định vị lại dữ liệu đã để lại một số dữ liệu ở cuối khối tin."
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "Gặp lỗi khi ghi tập tin phân phối."
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "Gặp lỗi khi ghi phần tính tương thích của tập tin phân phối."
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "đang ghi Phần đầu Khối tin HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "Gặp lỗi trong khi tìm tập tin khối xấu bắt buộc phải có."
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"Có vẻ là gặp lá»—i trong bá»™ bao bá»c HFS: tập tin khối xấu không chứa khối tin "
+"HFS+ nhúng."
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "Tiếc là chưa có thể thay đổi kích cỡ HFS bằng cách đó."
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "đang rút ngắn khối tin HFS+"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "Lỗi thay đổi kích cỡ của khối tin HFS+."
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "Ä‘ang rút ngắn bá»™ bao bá»c HFS"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "Lá»—i cập nhật bá»™ bao bá»c HFS."
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr ""
+"Äây không phải là má»™t kiểm tra %s thật. Tiến trình này sẽ tách các tập tin "
+"cấp thấp đặc biệt cho mục đích gỡ lỗi."
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "Sai kiểm tổng (checksum) phần đầu danh sách khối xấu."
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr ""
+"Gặp kích cỡ sai của khối giao dịch trong khi phát lại nhật ký (%i byte)."
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr ""
+"Nhật ký nằm ngoài khối tin thì không được hỗ trợ. Hãy thử tắt nhật ký, sau "
+"đó chạy lại Parted."
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "Hiệu hay kích cỡ của nhất ký không phải là bội số cho kích cỡ cung từ."
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "Gặp giá trị ma thuật sai trong phần đầu nhật ký."
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr ""
+"Kích cỡ nhật ký không tương ứng giữa khối thông tin nhật ký và phần đầu nhật "
+"ký."
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "Má»™t số trÆ°á»ng phần đầu không phải là bá»™i số cho kích cỡ cung từ."
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"Kích cỡ cung từ được cất giữ trong nhật ký không phải là 512 byte. Parted "
+"chỉ há»— trợ cung từ có chiá»u dài 512 byte."
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "Lỗi tổng kiểm tra nhật ký."
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"Nhật ký không trống. Parted phải phát lại các giao dịch trước khi mở hệ "
+"thống tập tin. Tiến trình này sẽ sửa đổi hệ thống tập tin."
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr ""
+"Phần đầu khối tin hoặc khối thư mục chủ bị thay đổi trong khi phát lại nhật "
+"ký. Cần khởi chạy lại Parted."
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "Một tầm chưa được định vị lại."
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr ""
+"Tham chiếu đến một tầm đến từ vị trí không đúng. Cần kiểm tra hệ thống tập "
+"tin!"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "Khối tin HFS không có tập tin phân loại. Rất lạ!"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "Khối tin HFS không có tập tin tràn mở rộng. Hơi lạ!"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr ""
+"Tập tin trản tầm không nên chứa các tầm của mình. Cần kiểm tra hệ thống tập "
+"tin."
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "Không thể nhớ tạm hệ thống tập tin trong bộ nhớ."
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "Không thể nạp danh sách khối xấu."
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "Gặp lỗi trong khi định vị lại tầm."
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "Khối tin HFS+ không có tập tin phần loại. Rất lạ!"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr "Khối tin HFS+ không có tập tin tràn mở rộng. Hơi lạ!"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "hiển thị trợ giúp này"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "liệt kê bố trí phân vùng trên má»i thiết bị khối"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "hiển thị kết xuất cho máy phân tích được"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "hiển thị kết xuất JSON"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "không bao giá» nhắc ngÆ°á»i dùng làm gì"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "trong chế Ä‘á»™ kịch bản, sá»­a thay cho bãi bá» khi được há»i"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "hiển thị phiên bản"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "căn hàng các phân vùng mới"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"SỠlà số thứ tự phân vùng sử dụng bởi Linux. Trên nhãn đĩa MS-DOS, các phân "
+"vùng chính có số từ 1 đến 4, và phân vùng lô-gíc từ 5 trở đi.\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "KIỂU_NHÃN là một trong số : "
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "CỜ là một trong số : "
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "ÄÆ N_VỊ là má»™t trong số: "
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "căn hàng đã muốn: tối thiểu hay quang"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr ""
+"KIỂU_PHẦN là một trong số:\n"
+" • primary\t\tchính\n"
+" • logical\t\tlô-gíc\n"
+" • extended\tmở rộng\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "KIỂU_HTTT là một trong số: "
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"ÄẦU và CUá»I là vị trí trên Ä‘Ä©a, v.d. 4GB hay 10%. Giá trị âm đếm từ cuối "
+"đĩa. Ví dụ, “-1s†chỉ ra chính xác cung từ cuối cùng.\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"CUá»I là vị trí trên Ä‘Ä©a, v.d. 4GB hay 10%. Giá trị âm đếm từ cuối Ä‘Ä©a. Ví "
+"dụ, “-1s†chỉ ra chính xác cung từ cuối cùng.\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr ""
+"TÌNH_TRẠNG là một trong số:\n"
+" • on\t\tbật\n"
+" • off\t\ttắt\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "THIẾT_BỊ thÆ°á»ng là /dev/hda hoặc /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "TÊN là bất kỳ từ gì theo ý muốn\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Tác quyá»n © năm 1998-2006 của Tổ chức Phần má»m Tá»± do.\n"
+"ChÆ°Æ¡ng trình này là phần má»m tá»± do, được bao quát bởi Giấy Phép Công Cá»™ng "
+"GNU (GPL).\n"
+"\n"
+"Chương trình này được phát hành vì mong muốn nó có ích,\n"
+"nhÆ°ng KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, THẬM CHà KHÔNG CÓ BẢO ÄẢM\n"
+"ÄƯỢC NGỤ à KHẢ NÄ‚NG BÃN HAY KHẢ NÄ‚NG LÀM ÄƯỢC VIỆC DỨT KHOÃT.\n"
+"Xem Giấy Phép Công Cộng GNU để biết thêm chi tiết.\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(còn lại %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "Phân vùng %s đang được dùng. Bạn có thực sự muốn tiếp tục không?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "Phân vùng trên %s đang được dùng."
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"Nhãn đĩa đã tồn tại trên %s sẽ bị hủy và tắt cả các dữ liệu trên đĩa này sẽ "
+"bị mất hoàn toàn. Bạn vẫn còn muốn tiếp tục không?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "Kiểu nhãn đĩa mới?"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "Kiểu phân vùng?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "Tên phân vùng?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "Kiểu hệ thống tập tin?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "Äầu?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "Cuối?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"NgÆ°á»i dùng đã yêu cầu má»™t phân vùng từ %s đến %s (cung từ %llu..%llu).\n"
+"Vùng gần nhất có thể quản lý là %s đến %s (cung từ %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"Vẫn tốt?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "Phân vùng kết quả chưa được căn hàng cho hiệu suất tốt nhất: %s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "chưa biết (malloc gặp lỗi)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "Nhãn đĩa %s không hỗ trợ tên phân vùng."
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "Số thứ tự phân vùng?"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "Nhãn đĩa %s không hỗ trợ tên phân vùng."
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "Kiểu phân vùng?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "Con số không hợp lệ."
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "Kiểu phân vùng?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "Con số không hợp lệ."
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "Dạng hình trụ,đầu,cung từ BIOS: %d,%d,%d. Mỗi trụ là %s.\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "Mô hình: %s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ÄÄ©a %s: %s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "Kích cỡ cung từ (lô-gíc/vật lý): %lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "Bảng Phân Vùng: %s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "Các cỠcủa đĩa: %s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "Số"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "Äầu"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "Cuối"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "Kích cỡ"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "Kiểu"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "Hê thống tập tin"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "Tên"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "Cá»"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "Chỗ trống"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"Tìm thấy một phân vùng %s %s tại %s -> %s. Thêm nó vào bảng phân vùng?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "đang tìm kiếm hệ thống tập tin"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "Lệnh resize đã bị gỡ bỠtrong parted 3.0"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr ""
+"Co nhỠmột phân vùng có thể làm dữ liệu bị mất, bạn có thực sự muốn tiếp tục "
+"không?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "Thiết bị mới?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "cách căn hàng (tiểu/quang)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d đã căn chỉnh\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d chưa căn chỉnh: %s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "CỠcần đảo ngược?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "Tình trạng mới?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "ÄÆ¡n vị?"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check KIỂU N kiểm tra phân vùng SỠcó căn hàng "
+"KIỂU (min|opt)"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "trợ giúp"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [LỆNH] in trợ giúp chung, hoặc trợ giúp "
+"trên câu LỆNH"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "tạo nhãn"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "tạo bảng"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr ""
+"mklabel,mktable KIỂU_NHÃN tạo một nhãn đĩa mới (bảng phân "
+"vùng)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "tạo phân vùng"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart KIỂU_PV [KIỂU_HTTT] ÄẦU CUá»I tạo má»™t phân vùng"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"“mkpart†tạo một phân vùng mà không tạo một hệ thống tập tin mới trên phân "
+"vùng đó. Có thể chỉ ra KIỂU_HTTT (kiểu hệ thống tập tin) để đặt một mã số "
+"phân vùng thích hợp.\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "tên"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name SỠTÊN đặt tên phân vùng SỠlà TÊN"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "in"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] hiển thị bảng phân vùng, thiết bị sẵn "
+"có, hoặc không gian còn trống hoặc là tất cả các phân vùng tìm thấy.\n"
+" • devices các thiết bị sẵn sàng\n"
+" • free chỗ còn trống\n"
+" • list,all tất cả các phân vùng tìm thấy"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"Khi không có đối số, “print†hiển thị toàn bộ bảng phân vùng. Nếu đưa ra "
+"các đối số theo sau, thì nó làm một số hành vi khác.\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : hiển thị tất cả các thiết bị khối vẫn hoạt động\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr ""
+" free : hiển thị thông tin vỠchỗ còn trống chưa phân vùng trên thiết "
+"bị khối hiện thá»i\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : hiển thị các bảng phân vùng của má»i thiết bị khối vẫn hoạt "
+"Ä‘á»™ng\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "thoát"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit thoát khá»i chÆ°Æ¡ng trình"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "cứu"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue ÄẦU CUá»I phục hồi má»™t phân vùng đã mất cạnh "
+"ÄẦU và CUá»I"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "đổi cỡ"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "Lệnh resize đã bị gỡ bỠtrong parted 3.0\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart Sá» CUá»I đổi cỡ phân vùng Sá»"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "bá»"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm Sá» xóa bá» phân vùng Sá»"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "chá»n"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select THIẾT_BỊ chá»n thiết bị cần sá»­a"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr ""
+"disk_set TRẠNG_THÃI_CỜ thay đổi CỜ trên thiết bị đã chá»n"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr ""
+"disk_toggle [CỜ] bật/tắt tình trạng của CỜ trên "
+"thiết bị đã chá»n"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "đặt"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set Sá» CỜ TÃŒNH TRẠNG thay đổi CỜ trên phân vùng Sá»"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "bật/tắt"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [SỠ[CỜ]] bật/tắt tình trạng của CỜ trên phân "
+"vùng Sá»"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "đơn vị"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr ""
+"unit ÄÆ N_VỊ đặt Ä‘Æ¡n vị mặc định thành ÄÆ N_VỊ"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "phiên bản"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version hiển thị số thứ tự phiên bản và "
+"thông tin tác quyá»n vá» GNU Parted"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"“version†hiển thị thông tin vá» tác quyá»n và phiên bản tÆ°Æ¡ng ứng vá»›i bản sao "
+"GNU Parted này\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr ""
+"Cách dùng: %s [-hlmsfv] [-a<sắp_hàng>] [THIẾT_BỊ [LỆNH [THAM_Sá»]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "Không tìm thấy thiết bị"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr ""
+"CẢNH BÃO: bạn không phải là siêu ngÆ°á»i dùng. Hãy để ý đến các quyá»n truy "
+"cập.\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"Cần cài đặt lại trình khởi Ä‘á»™ng trÆ°á»›c khi khởi Ä‘á»™ng lại. Hãy Ä‘á»c phần 4 của "
+"tài liệu hÆ°á»›ng dẫn NgÆ°á»i dùng Parted để biết thêm chi tiết."
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "Có thể cần cập nhật tập tin “/etc/fstabâ€.\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr ""
+"Chào mừng bạn đến với GNU Parted! Hãy gõ “help†để xem danh sách các câu "
+"lệnh.\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"Cách dùng: parted [TÙY_CHỌN]... [THIẾT_BỊ [LỆNH [THAM_Sá»]...]...]\n"
+"Ãp dụng các câu LỆNH vá»›i các THAM_Sá» cho THIẾT_BỊ. Nếu\n"
+"không có câu LỆNH nào thì chạy trong chế Ä‘á»™ há»i đáp.\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"Bạn đã tìm má»™t lá»—i trong phần má»m GNU Parted! Hãy bình tÄ©nh, rất có thể là "
+"lỗi này không có tác động dữ liệu của bạn.\n"
+"\n"
+"Xin hãy giúp chúng tôi sửa chữa lỗi này bằng cách theo những bước theo đây:\n"
+"\n"
+"1. \tKiểm tra nếu phiên bản GNU Parted mới nhất:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"\tđã sửa chữa lỗi này chưa. Nếu chưa, hãy tiếp tục:\n"
+"\n"
+"2.\tÄể biết thêm thông tin, hãy thăm trang chủ GNU Parted:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"3.\tHãy gửi một báo cáo lỗi cho địa chỉ <bug-parted@gnu.org>. Báo cáo này "
+"nên chứa:(a)\tsố thứ tự phiên bản (%s)(b)\tthông điệp lỗi dưới đây, kết xuất "
+"của câu lệnh:\n"
+"\n"
+"\tparted THIẾT_BỊ unit co print unit s print\n"
+"\n"
+"(c)\tlược sử các câu lệnh bạn đã gõ vào\n"
+"(d)\tthông tin bổ sung nào vá» cấu hình máy tính và hệ Ä‘iá»u hành mà bạn thấy "
+"là quan trá»ng.\n"
+"\n"
+"Má»™t khi bạn làm những bÆ°á»›c trên, cám Æ¡n bạn giúp phát triển phần má»m GNU "
+"Parted tốt hơn! :)\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"Lịch sử các lệnh:\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"Lá»—i: SEGV_MAPERR (Äịa chỉ không được ánh xạ tá»›i đối tượng)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"Lá»—i: SEGV_ACCERR (Quyá»n truy cập sai cho đối tượng đã ánh xạ\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"Lỗi: gặp một tín hiệu SIGSEGV chung.\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"Lỗi: FPE_INTDIV (Số nguyên: chia cho không)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"Lỗi: FPE_INTOVF (Số nguyên: tràn)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTDIV (Số thực dấu chấm động: chia cho không)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTOVF (Số thực dấu chấm động: tràn)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTUND (Số thực dấu chấm động: tràn ngược)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTRES (Số thực dấu chấm động: kết quả không chính xác)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTINV (Số thực dấu chấm động: thao tác sai)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"Lỗi: FPE_FLTSUB (Số thực dấu chấm động: chữ thấp ở ngoại phạm vi)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"Lỗi: gặp một tín hiệu SIGFPE chung."
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"Lỗi: ILL_ILLOPC (Mã thao tác cấm)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"Lỗi: ILL_ILLOPN (Toán hạng cấm)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"Lỗi: ILL_ILLADR (Chế độ đặt địa chỉ cấm)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"Lỗi: ILL_ILLTRP (Bẫy cấm)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"Lá»—i: ILL_PRVOPC (Mã thao tác có quyá»n đặc biệt)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"Lá»—i: ILL_PRVREG (Thanh ghi có quyá»n đặc biệt)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"Lỗi: ILL_COPROC (Lỗi tiến trình đồng chạy)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"Lỗi: ILL_BADSTK (Lỗi ngăn xếp nội bộ)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"Lỗi: gặp một tín hiệu SIGILL chung."
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "hiệu bài sai: %s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "Mong đợi số thứ tự phân vùng."
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "Phân vùng không tồn tại."
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "Cần kiểu hệ thống tập tin."
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "Không rõ kiểu hệ thống tập tin “%sâ€."
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "Mong đợi kiểu nhãn đĩa."
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "Không hỗ trợ cỠnào"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "Không thể tạo phân vùng thêm nữa."
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "Cần một kiểu phân vùng."
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "bật"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "tắt"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "tối ưu"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "tối thiểu"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "TÙY CHỌN:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "LỆNH:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"Gửi báo cáo lỗi tới %s\n"
+"Thông báo lỗi dịch cho: <https://translationproject.org/team/vi.html>.\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "Dùng %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "Câu lệnh này không có ý nghĩa trong chế độ không tương tác.\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "Phân vùng mở rộng không thể bị ẩn trên nhãn đĩa MSDOS."
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr ""
+#~ "Phân vùng mở rộng không thể được khôi phục các phân vùng trên nhãn đĩa "
+#~ "MSDOS."
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s: tùy chá»n “--%s†không cho phép đối số\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s: không nhận ra tùy chá»n “--%sâ€\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s: tùy chá»n “-W %s†không cho phép đối số\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s: tùy chá»n “-W %s†yêu cầu má»™t đối số\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "Trang chủ %s: <http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "đối số %s%s không hợp lệ “%sâ€"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "gặp hậu tố không hợp lệ trong %s%s đối số “%sâ€"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s đối số “%s†quá lớn"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "Không Ä‘á»c lại được bảng phân vùng, vì thế, cần khởi Ä‘á»™ng lại trÆ°á»›c khi "
+#~ "gắn bất ký phân vùng đã sá»­a đổi nào. NgÆ°á»i dùng cÅ©ng cần cài đặt lại "
+#~ "trình khởi động của mình trước khi khởi động lại (thao tác này có thể yêu "
+#~ "cầu gắn phân vùng đã sửa đổi). Không thể thực hiện cả hai thao tác! Vì "
+#~ "thế ngÆ°á»i dùng sẽ cần khởi Ä‘á»™ng bẳng Ä‘Ä©a dá»± phòng, và cài đặt lại trình "
+#~ "khởi Ä‘á»™ng từ đó. Hãy Ä‘á»c phần 4 của tài liệu hÆ°á»›ng dẫn NgÆ°á»i dùng Parted "
+#~ "để biết thêm chi tiết."
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "Bảng phân vùng trên %s không Ä‘á»c lại được (%s). Có nghÄ©a là Hurd không "
+#~ "biết gì vá» những thay đổi đã tạo ra. NgÆ°á»i dùng cần khởi Ä‘á»™ng lại máy "
+#~ "tính trước khi thực hiện bất kỳ thao tác nào với %s."
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "Vùng khởi động không bắt đầu ở đầu của phân vùng."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "Hệ thống tập tin có kích thước rãnh ghi lô-gíc là %d. GNU Parted không "
+#~ "làm việc chính xác với kích thước rãnh ghi khác 512 byte."
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr ""
+#~ "Tập tin %s có dấu hiệu của tập tin hệ thống. Có nghĩa di chuyển tập tin "
+#~ "này có thể khiến một số chương trình dừng làm việc."
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr ""
+#~ " Sá» : hiển thị nhiá»u thông tin hÆ¡n nữa vá» phân vùng này\n"
+
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "Không thêm được phân vùng %d (%s)"
+
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "Parted không Ä‘á»c lại được bảng phân vùng trên %s (%s). Có nghÄ©a là Linux "
+#~ "sẽ không biết vỠnhững thay đổi đã tạo ra."
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s chứa chữ ký GPT, chỉ ra nó có bảng GPT. Tuy nhiên, nó không có một "
+#~ "bảng phân vùng giả msdos cần thiết. Có thể nó đã bị làm há»ng bởi má»™t "
+#~ "chÆ°Æ¡ng trình không hiểu bảng phân vùng GPT. Hoặc có thể ngÆ°á»i dùng đã "
+#~ "xoá bảng GPT, và bây giá» Ä‘ang sá»­ dụng má»™t bảng phân vùng msdos. Äây có "
+#~ "phải là một bảng phân vùng GPT?"
+
+#~ msgid ""
+#~ "Usage: %s [OPTION]\n"
+#~ " or: %s DEVICE MINOR\n"
+#~ msgstr ""
+#~ "Cách dùng: %s [TÙY_CHỌN]\n"
+#~ " hoặc: %s THIẾT_BỊ PHỤ\n"
+
+#~ msgid ""
+#~ "Clear unused space on a FAT partition (a GNU Parted testing tool).\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Xoá sạch sức chứa không dùng trên một phân vùng FAT (một công cụ thử GNU "
+#~ "Parted).\n"
+#~ "\n"
+
+#~ msgid " --help display this help and exit\n"
+#~ msgstr " --help hiển thị trợ giúp này rồi thoát\n"
+
+#~ msgid " --version output version information and exit\n"
+#~ msgstr " --version đưa ra thông tin phiên bản rồi thoát\n"
+
+#~ msgid "too few arguments"
+#~ msgstr "quá ít đối số"
+
+#~ msgid "too many arguments"
+#~ msgstr "quá nhiá»u đối số"
+
+#~ msgid "invalid minor device number: %s"
+#~ msgstr "sai số nhỠcủa thiết bị: %s"
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "Chưa thực hiện hỗ trợ mở hệ thống tập tin %s."
+
+#~ msgid "Support for creating %s file systems is not implemented yet."
+#~ msgstr "Chưa thực hiện hỗ trợ tạo hệ thống tập tin %s."
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "Chưa thực hiện hỗ trợ kiểm tra hệ thống tập tin %s."
+
+#~ msgid "raw block copying"
+#~ msgstr "đang sao chép khối thô"
+
+#~ msgid "growing file system"
+#~ msgstr "Ä‘ang má»c hê thống tập tin"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "Không thể sao chép vào một phân vùng chồng lấp."
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing is implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "Hỗ trợ thẳng để sao chép hệ thống tập tin chưa được thực hiện cho %s. "
+#~ "Tuy nhiên, đã có hỗ trợ thay đổi kích thước. Vì thế, có thể sao chép hệ "
+#~ "thống tập tin nếu phân vùng mới có kích thước không nhỠhơn phân vùng "
+#~ "cũ. Vì vậy, hoặc rút ngắn phân vùng cần sao chép, hoặc sao chép tới một "
+#~ "phân vùng lớn hơn."
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "Chưa thực hiện hỗ trợ sao chép hệ thống tập tin %s."
+
+#~ msgid "creating"
+#~ msgstr "đang tạo"
+
+#~ msgid "The file system is in an invalid state. Perhaps it is mounted?"
+#~ msgstr "Hệ thống tập tin có tình trạng không hợp lệ. Có thể là nó bị gắn?"
+
+#~ msgid "The file system is in old (unresizeable) format."
+#~ msgstr ""
+#~ "Hệ thống tập tin theo một định dạng cũ (không thể thay đổi kích cỡ)."
+
+#~ msgid "Invalid free blocks count. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Äếm sai số các khối trống. TrÆ°á»›c tiên hãy chạy câu lệnh kiểm tra "
+#~ "“reiserfsck --checkâ€."
+
+#~ msgid "checking"
+#~ msgstr "đang kiểm tra"
+
+#~ msgid "Reiserfs tree seems to be corrupted. Run reiserfsck --check first."
+#~ msgstr ""
+#~ "Có vẻ là cây reiserfs bị há»ng. TrÆ°á»›c tiên hãy chạy câu lệnh kiểm tra "
+#~ "“reiserfsck --checkâ€."
+
+#~ msgid ""
+#~ "The reiserfs file system passed a basic check. For a more comprehensive "
+#~ "check, run reiserfsck --check."
+#~ msgstr ""
+#~ "Hệ thống tập tin reiserfs đã qua kiểm tra cÆ¡ bản. Äể kiểm tra kỹ hÆ¡n, "
+#~ "hãy chạy câu lệnh kiểm tra “reiserfsck --checkâ€."
+
+#~ msgid "Sorry, can't move the start of reiserfs partitions yet."
+#~ msgstr "Tiếc là chưa có thể di chuyển đầu của phân vùng reiserfs."
+
+#~ msgid "Couldn't reopen device abstraction layer for read/write."
+#~ msgstr "Không thể mở lại lá»›p nhìn trừu tượng thiết bị để Ä‘á»c/ghi."
+
+#~ msgid "expanding"
+#~ msgstr "đang giãn ra"
+
+#~ msgid "Couldn't create reiserfs device abstraction handler."
+#~ msgstr "Không thể tạo bộ quản lý sự nhìn trừu tượng thiết bị reiserfs."
+
+#~ msgid "copying"
+#~ msgstr "đang sao chép"
+
+#~ msgid "Couldn't resolve symbol %s. Error: %s."
+#~ msgstr "Không thể quyết định ký hiệu %s. Lỗi: %s."
+
+#~ msgid "GNU Parted found an invalid libreiserfs library."
+#~ msgstr "GNU Parted tìm thấy một thư viện libreiserfs không hợp lệ."
+
+#~ msgid ""
+#~ "GNU Parted has detected libreiserfs interface version mismatch. Found %d-"
+#~ "%d, required %d. ReiserFS support will be disabled."
+#~ msgstr ""
+#~ "GNU Parted phát hiện được phiên bản giao diện libreiserfs không tương "
+#~ "ứng. Tìm %d-%d, cần %d. Vì thế phải tắt hỗ trợ ReiserFS."
+
+#~ msgid "This is not an ECKD disk! This disk type is not supported!"
+#~ msgstr ""
+#~ "Äây không phải là má»™t Ä‘Ä©a ECKD! Loại Ä‘Ä©a này không phải được há»— trợ!"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "Các mô tả nhóm không đồng nhất!"
+
+#~ msgid "File system full!"
+#~ msgstr "Hê thống tập tin đầy"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 file system?"
+#~ msgstr ""
+#~ "Siêu khối sai. Bạn có chắc rằng đây là một hệ thống tập tin loại ext2 "
+#~ "không?"
+
+#~ msgid "File system has errors! You should run e2fsck."
+#~ msgstr "Hệ thống tập tin có lỗi! Cần chạy e2fsck."
+
+#~ msgid ""
+#~ "File system was not cleanly unmounted! You should run e2fsck. Modifying "
+#~ "an unclean file system could cause severe corruption."
+#~ msgstr ""
+#~ "Hệ thống tập tin chưa được bỠgắn một cách đúng đắn! Cần chạy e2fsck. "
+#~ "Sá»­a đổi hệ thống tin đó có thể gây trÆ°á»ng hợp rất bị há»ng."
+
+#~ msgid ""
+#~ "File system has an incompatible feature enabled. Compatible features are "
+#~ "has_journal, dir_index, filetype, sparse_super and large_file. Use "
+#~ "tune2fs or debugfs to remove features."
+#~ msgstr ""
+#~ "Hệ thống tập tin đã hiệu lực một tính năng không tương thích. Những tính "
+#~ "năng tương thích:\n"
+#~ " • has_journal\t\tcó nhật ký\n"
+#~ " • dir_index\t\tthư mục phụ lục\n"
+#~ " • sparse_super\tsiêu sparse\n"
+#~ " • large_file\t\ttập tin lớn\n"
+#~ "Hãy sử dụng tune2fs hay debugfs để gỡ bỠtính năng."
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "Gặp lỗi khi phân cấp vùng nhớ tạm bộ đệm."
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Tìm thấy một nút inode với số đếm liên kết sai. Tốt nhất hãy chạy e2fsck "
+#~ "trÆ°á»›c."
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "Không đủ inode còn rảnh!"
+
+#~ msgid "File system is too full to remove a group!"
+#~ msgstr "Hệ thống tập tin quá đầy để gỡ bỠmột nhóm!"
+
+#~ msgid "File system has too many allocated inodes to remove a group!"
+#~ msgstr "Hệ thống tập tin có quá nhiá»u inode phân phối để xóa má»™t nhóm!"
+
+#~ msgid "adding groups"
+#~ msgstr "đang thêm nhóm"
+
+#~ msgid "Your file system is too full to resize it to %i blocks. Sorry."
+#~ msgstr ""
+#~ "Hệ thống tập tin quá đầy để thay đổi kích thước thành %i khối. Rất tiếc."
+
+#~ msgid ""
+#~ "Your file system has too many occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "Hệ thống tập tin có quá nhiá»u nút inode bận để thay đổi kích thÆ°á»›c thành "
+#~ "%i khối. Rất tiếc."
+
+#~ msgid "File system was not cleanly unmounted! You should run e2fsck."
+#~ msgstr "Hệ thống tập tin chưa được bỠgắn đúng! Cần chạy e2fsck."
+
+#~ msgid ""
+#~ "The file system has the 'dir_index' feature enabled. Parted can only "
+#~ "resize the file system if it disables this feature. You can enable it "
+#~ "later by running 'tune2fs -O dir_index DEVICE' and then 'e2fsck -fD "
+#~ "DEVICE'."
+#~ msgstr ""
+#~ "Hệ thống tập tin có tính năng “dir_index†bật dùng. Parted chỉ có thể "
+#~ "thay đổi kích thước của hệ thống tập tin nếu tắt bỠtính năng này. Có "
+#~ "thể bật dùng lại tính năng sau này bằng “tune2fs -O dir_index THIẾT_BỊ†"
+#~ "và sau đó “e2fsck -fD THIẾT_BỊâ€."
+
+#~ msgid ""
+#~ "A resize operation on this file system will use EXPERIMENTAL code\n"
+#~ "that MAY CORRUPT it (although no one has reported any such damage yet).\n"
+#~ "You should at least backup your data first, and run 'e2fsck -f' "
+#~ "afterwards."
+#~ msgstr ""
+#~ "Thao tác thay đổi kích cỡ trên hệ thống tập tin này thì dùng mã nguồn VẪN "
+#~ "THá»°C NGHIỆM mà CÓ THỂ LÀM HỎNG nó (dù chÆ°a có ngÆ°á»i dùng thông báo trÆ°á»ng "
+#~ "hợp này).\n"
+#~ "ít nhất ngÆ°á»i dùng nên sao lÆ°u dữ liệu trÆ°á»›c, và chạy “e2fsck -f†sau."
+
+#~ msgid "Cross-linked blocks found! Better go run e2fsck first!"
+#~ msgstr ""
+#~ "Tìm thấy các khối liên kết chồng chéo! Tốt nhất hãy chạy e2fsck trước!"
+
+#~ msgid "Block %i has no reference? Weird."
+#~ msgstr "Khối %i không có tham chiếu? Kỳ lạ."
+
+#~ msgid "Block %i shouldn't have been marked (%d, %d)!"
+#~ msgstr "Khối %i không nên bị đánh dấu (%d, %d)!"
+
+#~ msgid ""
+#~ "The ext2 file system passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr ""
+#~ "Hệ thống tập tin ext2 đã qua kiểm tra cÆ¡ bản. Äể kiểm tra kỹ hÆ¡n, hãy "
+#~ "dùng chương trình e2fsck."
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "Tiếc là chưa có thể di chuyển đầu của phân vùng ext2!"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "Không thể chuyển hết ra ngoài vùng nhớ tạm bộ đệm!"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "đang ghi siêu dữ liệu từng nhóm"
+
+#~ msgid "File system too small for ext2."
+#~ msgstr "Hệ thống tập tin quá nhỠđối với ext2."
+
+#~ msgid "Too many bad pages."
+#~ msgstr "Quá nhiá»u trang xấu."
+
+#~ msgid "The partition must have one of the following FS-TYPEs: "
+#~ msgstr ""
+#~ "Phân vùng phải có một của những kiểu hệ thống tập tin (KIỂU_HTTT) theo "
+#~ "đây: "
+
+#~ msgid ""
+#~ "The existing file system will be destroyed and all data on the partition "
+#~ "will be lost. Do you want to continue?"
+#~ msgstr ""
+#~ "Hệ thống tập tin đã tồn tại sẽ bị hủy và tắt cả các dữ liệu trên phân "
+#~ "vùng sẽ bị mất hoàn toàn. Bạn vẫn còn muốn tiếp tục không?"
+
+#~ msgid ""
+#~ "WARNING: you are attempting to use %s to operate on (%s) a file system.\n"
+#~ "%s's file system manipulation code is not as robust as what you'll find "
+#~ "in\n"
+#~ "dedicated, file-system-specific packages like e2fsprogs. We recommend\n"
+#~ "you use %s only to manipulate partition tables, whenever possible.\n"
+#~ "Support for performing most operations on most types of file systems\n"
+#~ "will be removed in an upcoming release.\n"
+#~ msgstr ""
+#~ "CẢNH BÃO: bạn Ä‘ang thá»­ sá»­ dụng %s để thao tác má»™t hệ thống tập tin (%s).\n"
+#~ "Mã nguồn thao tác hệ thống tập tin của %s không phải cùng mạnh\n"
+#~ "với gói dành cho hệ thống tập tin như e2fsprogs.\n"
+#~ "Khuyên bạn chỉ sử dụng %s để thao tác bảng phân vùng, khi nào có thể.\n"
+#~ "Hơn nữa, một phiên bản sau của gói này sẽ gỡ bỠkhả năng hỗ trợ thao tác\n"
+#~ "đối với gần tất cả các kiểu hệ thống tập tin.\n"
+
+#~ msgid "Source partition number?"
+#~ msgstr "Số thứ tự phân vùng nguồn?"
+
+#~ msgid "Destination partition number?"
+#~ msgstr "Số thứ tự phân vùng đích?"
+
+#~ msgid ""
+#~ "An extended partition cannot hold a file system. Did you want mkpart?"
+#~ msgstr "Phân vùng mở rộng không thể có hệ thống tập tin. Bạn muốn mkpart?"
+
+#~ msgid "Can't move an extended partition."
+#~ msgstr "Không thể di chuyển phân vùng mở rộng."
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr ""
+#~ "Không thể di chuyển một phân vùng lên chính nó. Có thể, hãy thử thay đổi "
+#~ "kích thước?"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Phụ: %d\n"
+
+#~ msgid "Flags: %s\n"
+#~ msgstr "Cá»: %s\n"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "Hệ thống Tập tin: %s\n"
+
+#~ msgid "Size: "
+#~ msgstr "Cỡ: "
+
+#~ msgid "Minimum size: "
+#~ msgstr "Kích cỡ tối thiểu: "
+
+#~ msgid "Maximum size: "
+#~ msgstr "Kích cỡ tối đa: "
+
+#~ msgid "check"
+#~ msgstr "kiểm"
+
+#~ msgid ""
+#~ "check NUMBER do a simple check on the file "
+#~ "system"
+#~ msgstr ""
+#~ "check SỠthực hiện một kiểm tra đơn giản trên hệ thống "
+#~ "tập tin"
+
+#~ msgid "cp"
+#~ msgstr "chép"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER copy file system to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [TỪ THIẾT BỊ] TỪ_Sá» ÄẾN_Sá» sao chép hệ thống tập tin tá»›i phân "
+#~ "vùng khác"
+
+#~ msgid "mkfs"
+#~ msgstr "tạo hệ thống tập tin"
+
+#~ msgid ""
+#~ "mkfs NUMBER FS-TYPE make a FS-TYPE file system on "
+#~ "partition NUMBER"
+#~ msgstr ""
+#~ "mkfs SỠKIỂU tạo một hệ thống tập tin KIỂU này trên phân vùng "
+#~ "SỠthứ tự này"
+
+#~ msgid "mkpartfs"
+#~ msgstr "tạo phân vùng có hệ thống tập tin"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a file "
+#~ "system"
+#~ msgstr ""
+#~ "mkpartfs KIỂU_PV KIỂU_HTTT ÄẦU CUá»I tạo má»™t phân vùng vá»›i má»™t hệ "
+#~ "thống tập tin"
+
+#~ msgid "move"
+#~ msgstr "dá»i"
+
+#~ msgid ""
+#~ "resize NUMBER START END resize partition NUMBER and its "
+#~ "file system"
+#~ msgstr ""
+#~ "resize Sá» ÄẦU CUá»I thay đổi kích cỡ của phân vùng số và hệ "
+#~ "thống tập tin của nó"
+
+#~ msgid ""
+#~ "Device %s has a logical sector size of %lld. Not all parts of GNU Parted "
+#~ "support this at the moment, and the working code is HIGHLY EXPERIMENTAL.\n"
+#~ msgstr ""
+#~ "Thiết bị %s có kích cỡ rãnh ghi lô-gíc %lld. Vẫn còn có phần của chương "
+#~ "trình GNU Parted mà không hỗ trợ tính năng này, và mã nguồn làm việc vẫn "
+#~ "RẤT THỰC NGHIỆM.\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
new file mode 100644
index 0000000..4f5498d
--- /dev/null
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..52e69ac
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,3581 @@
+# Simplified Chinese Messages for parted.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Wang Li <charles@linux.net.cn>, 2003.
+# Wei-Lun Chao <william.chao@ossii.com.tw>, 2011.
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2012, 2013.
+# Mingye Wang <arthur200126@gmail.com>, 2015.
+# Boyuan Yang <073plan@gmail.com>, 2022.
+# Wenbin Lv <wenbin816@gmail.com>, 2022.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-11 14:14+0800\n"
+"Last-Translator: Wenbin Lv <wenbin816@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "无效的å‚æ•° %s 被用于 %s"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "模糊的å‚æ•° %s 被用于 %s"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "有效的å‚数是:"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "写入错误"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "未知的系统错误"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s:选项“%s%sâ€æœ‰æ­§ä¹‰\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s:选项“%s%sâ€æœ‰æ­§ä¹‰ï¼›å¯èƒ½æ˜¯ï¼š"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s:无法识别的选项“%s%sâ€\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s:选项“%s%sâ€ä¸å…许有å‚æ•°\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s:选项“%s%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:无效的选项 --“%câ€\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° --“%câ€\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "“"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "â€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "æˆåŠŸ"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "无匹é…"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "无效的正则表达å¼"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "无效的定åºå­—符"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "无效字符类别å称"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "结尾åæ–œæ "
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "无效的åå‘引用"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "未匹é…çš„ [, [^, [:, [., 或 [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "未匹é…çš„ ( 或 \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "未匹é…çš„ \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "无效的 \\{\\} 内容"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "无效的范围结æŸç¬¦"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "内存耗尽"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "无效的å‰ç»§æ­£åˆ™è¡¨è¾¾å¼"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "过早结æŸçš„正则表达å¼"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "正则表达å¼å¤ªå¤§"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "未匹é…çš„ ) 或 \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "æ— å‰ä¸€ä¸ªæ­£åˆ™è¡¨è¾¾å¼"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY是]"
+
+# Breaks at contents like “ä¸æ˜¯â€”—的å义è¯â€”—æ‰æ€ªâ€”—并éžâ€”—å¥å·â€
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nNä¸å¦]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "软件包由 %s (%s) 所打包\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "软件包由 %s 所打包\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "©"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"æŽˆæƒ GPLv3+: GNU GPL 第三版或åŽç»­ç‰ˆæœ¬ <%s>\n"
+"这是自由软件:您å¯ä»¥è‡ªç”±å˜æ›´å’Œå†å‘布它。\n"
+"在法律所å…许的范围内ä¸åšä»»ä½•æ‹…ä¿ã€‚\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "由 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "由 %s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "由 %s, %s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s\n"
+"和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s, %s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s, %s, %s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s, %s, %s, %s\n"
+"和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s 和 %s 编写。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"ç”± %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s 和其他人编写。\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr ""
+"报告软件缺陷到:%s\n"
+"报告翻译错误到:<https://translationproject.org/team/zh_CN.html>\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "将 %s 错误报告给:%s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 首页:<%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "使用 GNU 软件的一般说明:<%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "内存耗尽"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "ç£ç›˜æ˜ åƒ"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "打开 %s 出错:%s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr "无法以读写方å¼æ‰“å¼€ %s (%s)。%s 已按照åªè¯»æ–¹å¼æ‰“开。"
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "åœ¨ä¸ºè¯»å– %2$s 而调用 seek æ—¶ %1$s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "åœ¨è¯»å– %2$s 期间 %1$s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "由于 %s 是以åªè¯»æ–¹å¼æ‰“开的,因此无法写入。"
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "在为写入 %2$s 调用 seek 时 %1$s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "在写入 %2$s 时 %1$s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "å°è¯•â€œ%s --helpâ€ä»¥èŽ·å¾—更多信æ¯ã€‚\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "用法:%s [选项] [设备]…\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"将分区表的å˜æ›´é€šæŠ¥æ“作系统。\n"
+"\n"
+" -d, --dry-run 并éžçœŸçš„通报æ“作系统\n"
+" -s, --summary å°å‡ºå†…容的概è¦\n"
+" -h, --help 显示这个说明然åŽç¦»å¼€\n"
+" -v, --version 输出版本信æ¯ç„¶åŽç¦»å¼€\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"如果没有指定任何设备,探查所有分区。\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"将错误报告给 <%s>。\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "无法打开 %s。"
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "无法探测存储设备。"
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"警告:内核é‡æ–°è¯»å– %s 的分区表失败 (%s)。因此,部分å˜æ›´å¯èƒ½éœ€è¦é‡å¯æ‰èƒ½ç”Ÿæ•ˆã€‚"
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr "警告:无法打开 %s (%s)。因此,部分å˜æ›´å¯èƒ½éœ€è¦é‡å¯æ‰èƒ½ç”Ÿæ•ˆã€‚"
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr "警告:无法移除 %s 的翻译器 (%s)。因此,部分å˜æ›´å¯èƒ½éœ€è¦é‡å¯æ‰èƒ½ç”Ÿæ•ˆã€‚"
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s 试图将 %s åŒæ­¥åˆ°ç£ç›˜ä¸Š"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "无法对设备 %s - %s åš stat æ“作。"
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "无法决定 %s 的 dm 类型。"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"无法决定用于 %s:%s 的扇区大å°ã€‚\n"
+"使用缺çœæ‰‡åŒºå¤§å° (%lld)。"
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"无法决定 %s 的物ç†æ‰‡åŒºå¤§å°ã€‚\n"
+"å°†ä½¿ç”¨é€»è¾‘æ‰‡åŒºå¤§å° (%lld)。"
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "无法确定 %s (%s) 的大å°ã€‚"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "一般 IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "无法获å–设备 %s - %s 的标识"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"设备 %s çš„æ¯ä¸€ç‰©ç†æ‰‡åŒºå…·æœ‰å¤šä¸ª (%d) 逻辑扇区。\n"
+"GNU Parted 对æŸäº›ç‰¹å®šç£ç›˜å·æ ‡/文件系统组åˆè¿˜æ˜¯[实验性]支æŒï¼Œåƒæ˜¯ GPT å’Œ "
+"ext2/3。\n"
+"请å‚照网页以获得最新的信æ¯ã€‚"
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "åˆå§‹åŒ– SCSI 设备 %s - %s 出错"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"设备 %s 太å°ï¼Œå› æ­¤å¯èƒ½æ— æ³•ä¿å­˜æ–‡ä»¶ç³»ç»Ÿæˆ–分区表。也许您选择了错误的设备?"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"无法决定文件/设备 %s 的几何ä½ç½®ã€‚您ä¸åº”使用 Parted 除éžæ‚¨çœŸçš„知é“在åšä»€ä¹ˆï¼"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "通用 SD/MMC 记忆å¡"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe 设备"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID 控制器"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA 设备"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "以太网 ATA 设备"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD ç£ç›˜æœº"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries 虚拟 DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq 智能阵列"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM 设备"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID 控制器"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O 控制器"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "ç”¨æˆ·æ¨¡å¼ Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "回环设备"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux è®¾å¤‡æ˜ å°„ç¨‹åº (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen 虚拟å—设备"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "未知"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio å—设备"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux 软件 RAID 数组"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "内存盘"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() ä¸æ”¯æŒçš„设备类型"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "文件åŒæ­¥/关闭 %s æ—¶å‘生错误:%s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s å‡ºçŽ°æ–‡ä»¶ç»“å°¾äºŽè¯»å– %s æ—¶"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"通知内核关于分区 %s -- %s 的修改时出错。这æ„å‘³ç€ Linux 在é‡æ–°å¯åŠ¨ä¹‹å‰æ— æ³•çŸ¥é“"
+"您针对 %s 所作的任何修改 - 所以您也ä¸èƒ½åœ¨é‡æ–°å¯åŠ¨ä¹‹å‰æŒ‚载或以任何方å¼ä½¿ç”¨å®ƒã€‚"
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "无法决定 %s 的起始和长度。"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"%2$s 上的分区 %1$s 已被写入,但是我们并无法将å˜æ›´é€šæŠ¥å†…核,或许是因为它/它们"
+"正在使用中。这将造æˆç»§ç»­ä½¿ç”¨æ—§çš„分区。在进行进一步的å˜æ›´ä¹‹å‰ï¼Œæ‚¨åº”该立刻é‡æ–°"
+"å¯åŠ¨ã€‚"
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "结æŸä¸å¯ä½äºŽå¼€å§‹ä¹‹å‰ï¼(起始扇区=%jd 长度=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "试图写入 %3$s 上分区之外的扇区 %1$ld-%2$ld。"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "检查åå—"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "回溯区有 %d 个调用在堆栈上:\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "断言 (%s) 于 %s:%d 在函数 %s() 中失败。"
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: 无法辨识的ç£ç›˜å·æ ‡"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr "这个 libparted ä¸æ”¯æŒå¯¹ %s 的写æ“作。å¯èƒ½å®ƒæ˜¯æŒ‰åªè¯»æ–¹å¼ç¼–译的。"
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "分区 %d 大å°ä¸º %s,但文件系统大å°ä¸º %s。"
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "未知的ç£ç›˜æ——标,%d。"
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s ç£ç›˜å·æ ‡ä¸æ”¯æŒæ‰©å±•åˆ†åŒºã€‚"
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s ç£ç›˜å·æ ‡ä¸æ”¯æŒé€»è¾‘或扩展分区。"
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "主分区过多。"
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "由于没有扩展分区,无法将逻辑分区添加到 %s。"
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%s 上ä¸èƒ½å«æœ‰å¤šäºŽä¸€ä¸ªçš„拓展分区。"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "逻辑分区ä¸èƒ½å¤„于扩展分区之外。"
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s 上的逻辑分区ä¸èƒ½å¤„于扩展分区之外。"
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "扩展分区中ä¸èƒ½å«æœ‰ä¸»åˆ†åŒºã€‚"
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "无法让分区超出ç£ç›˜ï¼"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "分区ä¸èƒ½é‡å ã€‚"
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "元数æ®"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "空闲"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "扩展"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "逻辑"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "主分区"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "å¯åŠ¨"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "æ ¹"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "交æ¢"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "éšè—"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-æœåŠ¡"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "诊断"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "旧版å¯åŠ¨"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "未知的分区旗标,%d。"
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "ä¿¡æ¯"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "警告"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "错误"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "致命错误"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "Bug"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "未实现"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "修正"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "是"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "å¦"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "确认"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "é‡è¯•"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "忽略"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "放弃"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"å‘现 GNU Parted 中的程åºé”™è¯¯ã€‚å‚ç…§ parted çš„ç½‘å€ http://www.gnu.org/software/"
+"parted/parted.html 以获得更多有关æ交错误报告的有用信æ¯ï¼è¯·å°†è‡³å°‘å«æœ‰ç‰ˆæœ¬ "
+"(%2$s) 和以下信æ¯çš„错误报告å‘é€åˆ° %1$s: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "尚未支æŒè¯»å– AIX ç£ç›˜å·æ ‡ã€‚"
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "尚未支æŒå†™å…¥ AIX ç£ç›˜å·æ ‡ã€‚"
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "尚未支æŒåŠ å…¥åˆ†åŒºåˆ° AIX ç£ç›˜å·æ ‡ã€‚"
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "尚未支æŒåœ¨ AIX ç£ç›˜å·æ ‡ä¸­é‡åˆ¶åˆ†åŒºã€‚"
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "尚未支æŒåœ¨ AIX ç£ç›˜å·æ ‡ä¸­è®¾ç½®åˆ†åŒºçš„系统类型。"
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "尚未支æŒåœ¨ AIX ç£ç›˜å·æ ‡ä¸­è®¾ç½®æ——标。"
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr "无法在扇区大å°ä¸ç­‰äºŽ %d 字节的ç£ç›˜ä¸Šä½¿ç”¨ Atari 分区表。"
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr "无法在扇区多于 %d çš„ç£ç›˜ä¸Šä½¿ç”¨ Atari 分区表。"
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr "探测到了太多 Atari 分区。å¯èƒ½ XGM 链表中存在循环。中止æ“作。"
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "未在扇区 %lli 处的 ARS 中找到数æ®åˆ†åŒºã€‚"
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr "扇区 %lli 处的 ARS 中,下一个逻辑 ARS 的项的类型ä¸æ˜¯ XGM。"
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr "æ­¤ç£ç›˜ (%s) 上似乎没有 Atari 分区表,或者分区表已ç»æŸå。"
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "扇区 %lli 没有空间储存逻辑分区 %d 的 ARS。"
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "扇区 %lli 没有空间储存 ARS。"
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr "分区表中储存的扇区数和设备的大å°ä¸åŒ¹é…。您是å¦æƒ³è¦ä¿®å¤åˆ†åŒºè¡¨ï¼Ÿ"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "扇区 %lli 没有空间储存 BSL。"
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "填充主 AHDI 表之åŽä»æœ‰å‰©ä½™çš„分区。"
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"已将所有分区填入主 AHDI 表,但 ICD 表ä¸ä¸ºç©ºï¼Œå› æ­¤å…¼å®¹ ICD 的软件将会检测到é¢"
+"外的ã€å¤§å°å’Œä½ç½®å‡æœªçŸ¥çš„分区。您是å¦æƒ³è¦ä½¿ ICD 表失效?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ICD æ¡ç›®ä¸èƒ½åŒ…å«æ‰©å±•æˆ–逻辑分区。"
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "填入分区表åŽä»å­˜åœ¨å‰©ä½™åˆ†åŒºã€‚"
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"您ä¸èƒ½åœ¨ ICD 模å¼ä¸‹ä½¿ç”¨æ‰©å±• XGM 分区(多于 %d 个主分区,如果 XGM 是第一个的è¯"
+"则为 2)。"
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "无法满足分区的所有é™åˆ¶ã€‚"
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"如果您使用扩展 XGM 分区,您ä¸èƒ½ä½¿ç”¨å¤šäºŽ %d 个主分区(ICD 模å¼ï¼‰ã€‚如果 XGM 是"
+"第一个分区则é™åˆ¶ä¸º 2。"
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "无法分é…分区编å·ã€‚"
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "æ— æ³•å®šä½ bsd ç£ç›˜å·æ ‡æ§½ã€‚"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "无法更改 DASD-LDL 设备的分区表。\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "æ— æ³•åˆ†é… dasd ç£ç›˜å·æ ‡æ§½"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "%s 上的分区表无效 - 错误的签å %x。"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "无效的分区表 - %s 出现递归分区。"
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr "Parted 无法改å˜ç”±â€œWindows 动æ€ç£ç›˜â€æ‰€ç®¡ç†çš„分区大å°ã€‚"
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "无法å†åˆ›å»ºä»»ä½•åˆ†åŒº"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s 没有拓展分区 (å·å¤´åˆ†åŒº)。"
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "校验和错误,标明分区表已æŸå。"
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "åªæœ‰ä¸»åˆ†åŒºå¯ä»¥æ˜¯æ ¹åˆ†åŒºã€‚"
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "åªæœ‰ä¸»åˆ†åŒºå¯ä»¥æ˜¯äº¤æ¢åˆ†åŒºã€‚"
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "åªæœ‰é€»è¾‘分区å¯ä»¥æ˜¯å¯åŠ¨æ–‡ä»¶ã€‚"
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"设置 dvh 分区å称为 %s 时失败:\n"
+"åªæœ‰é€»è¾‘分区 (å¯åŠ¨æ–‡ä»¶) 拥有å称。"
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "过多的主分区"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "打开错误"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "寻é“错误"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "读å–错误"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() 错误"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API 版本ä¸ç¬¦"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "ä¸æ”¯æŒçš„ç£ç›˜ç±»åž‹"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "ä¸æ”¯æŒçš„ç£ç›˜æ ¼å¼"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ç£ç›˜æ­£è¢«ä½¿ç”¨"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "é…置文件语法错误"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "å·æ ‡å·²æŸå"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "æ•°æ®é›†å称已æŸå"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "内存é…置失败"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "设备验è¯å¤±è´¥"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "指定设备并éžæœ‰æ•ˆçš„ DASD 设备"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "未在设备上找到 VOLSER"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "致命错误"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "没有空间å¯ç”¨äºŽå·æ ‡ã€‚"
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "没有空间å¯ç”¨äºŽåˆ†åŒºä¿¡æ¯ã€‚"
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "无效的 VTOC。"
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "æ— æ³•èŽ·å– API 版本。"
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr "ç›®å‰çš„ API 版本“%dâ€ä¸åŒ¹é… dasd é©±åŠ¨ç¨‹åº API 版本“%dâ€ï¼"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "无法获å–ç£ç›˜å¤§å°ã€‚"
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "无法获å–ç£ç›˜å‡ ä½•ä½ç½®ä¿¡æ¯ã€‚"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "无法获å–区å—大å°ä¿¡æ¯ã€‚"
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "ç£ç›˜å‡ ä½•ä½ç½®ä¿¡æ¯ä¸Žç±»åž‹ä¸º 3390 çš„ DASD 设备ä¸åŒ¹é…。"
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "设备对 GPT æ¥è¯´å¤ªå°"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"GPT 分区表的格å¼ç‰ˆæœ¬ä¸º %x,它比 Parted 所能辨识的版本è¦æ–°ã€‚请报告这个状况ï¼"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"并éžæ‰€æœ‰å¯ç”¨äºŽ %s 的空间都被用到了,您å¯ä»¥ä¿®æ­£ GPT 以使用所有的空间 (é¢å¤–çš„ "
+"%llu 个区å—),还是说è¦ç»§ç»­ä½¿ç”¨ç›®å‰çš„设置?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"备份 GPT 分区表ä¸å¦‚它应当的那样在ç£ç›˜æœ«ç«¯ã€‚è¦é€šè¿‡ç§»åŠ¨è¿‡åŽ»ï¼ˆå¹¶ä¸”删除旧备份)的"
+"æ–¹å¼ä¿®å¤å—?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"主 GPT 和备份 GPT 都æŸå了。试ç€åˆ›å»ºæ–°è¡¨ï¼Œç„¶åŽä½¿ç”¨ Parted 的急救功能以修å¤åˆ†"
+"区表。"
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr "备份 GPT 表æŸå,但主表似乎是正确的,所以使用备份。"
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr "主 GPT 表æŸå,但备份似乎是正确的,所以使用备份。"
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "主分区表的数组循环冗余检查 (CRC) 值ä¸åŒ¹é…"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "未能转æ¢åˆ†åŒºå称"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "无效的 Mac ç£ç›˜å·æ ‡ç­¾å %x。"
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "分区映射ä¸å«æœ‰åˆ†åŒºæ˜ å°„æ¡ç›®ï¼"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s 对 Mac ç£ç›˜å·æ ‡æ¥è¯´å¤ªå°äº†ï¼"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "分区 %d å«æœ‰æ— æ•ˆçš„ç­¾å %x。"
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "分区 %d å«æœ‰æ— æ•ˆçš„长度 0 字节ï¼"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "æ•°æ®åŒºå¹¶æœªä»Žåˆ†åŒºçš„起点开始."
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "分区的å¯åŠ¨åŒºåŸŸå¹¶æœªå ç”¨æ•´ä¸ªåˆ†åŒºã€‚"
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "分区的数æ®åŒºåŸŸå¹¶æœªå ç”¨æ•´ä¸ªåˆ†åŒºã€‚"
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "设备æ述中出现å¤æ€ªçš„å—大å°ï¼š%d 字节ä¸èƒ½è¢« 512 整除。"
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr "ç£ç›˜æ述表明物ç†å—大å°ä¸º %d 字节,但 Linux 认为它是 %d 字节。"
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "找ä¸åˆ°æœ‰æ•ˆçš„分区映射。"
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr "分区映射æ¡ç›®å¤§å°å†²çªï¼æ¡ç›® 1 说它是 %d,但æ¡ç›® %d 说它是 %dï¼"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "奇怪 - 有两个分区映射æ¡ç›®ï¼"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr "改å˜æ ¹åˆ†åŒºæˆ–交æ¢åˆ†åŒºçš„å称将导致 Linux 无法识别它。"
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "无法添加å¦ä¸€ä¸ªåˆ†åŒº -- 分区图过å°ï¼"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "%s 的分区表无效。"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "分区 %d 未对é½åˆ°æŸ±é¢è¾¹ç•Œã€‚此功能尚未被支æŒã€‚"
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "无法添加其它分区。"
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr "分区的 %1$jd 扇区长度超出 %3$jd 的 %2$s-partition-table-imposed 最大值"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr "èµ·å§‹æ‰‡åŒºç¼–å· %1$jd 超出 %3$jd çš„ %2$s-partition-table-imposed 最大值"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%sï¼šåŒºå— %llu 的类型 %s 有ä¸å½“的校验和。"
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s:无法找到 rdb 区å—,这ä¸è¯¥å‘生。"
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%sï¼šäºŽåŒºå— %d 侦测到循环。"
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%1$sï¼šåŒºå— %3$s 处似有ä¸å½“ %2$s 列表。"
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s:列出åå—时失败。"
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s:列出分区区å—时失败。"
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s:列出文件系统区å—时失败。"
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s:列出å¯åŠ¨åŒºå—时失败。"
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "å†™å…¥åˆ†åŒºåŒºå— %d 时失败。"
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "检测到æŸå了的 Sun ç£ç›˜å·æ ‡ã€‚"
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"ç”±æ“作系统报告的ç£ç›˜ CHS 几何结构 (%d,%d,%d) 与ä¿å­˜åœ¨ç£ç›˜å·æ ‡ä¸­çš„几何结构 "
+"(%d,%d,%d) ä¸ç¬¦åˆã€‚"
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "ç£ç›˜å·æ ‡æè¿°çš„ç£ç›˜å¤§äºŽ %s。"
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "该ç£ç›˜å…·æœ‰ %d 圈柱é¢ï¼Œå·²è¶…过 65536 的最大é™åˆ¶ã€‚"
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"整个ç£ç›˜åˆ†åŒºæ˜¯æƒŸä¸€è¿˜ç•™ä¸‹çš„å¯ç”¨åŒºå—。一般而言,以真实的区å—æ¥è¦†å†™è¿™å—分区并ä¸"
+"是个好主æ„。没有了它,Solaris 也许就无法å¯åŠ¨ï¼Œå¹¶ä¸” SILO (sparc å¯åŠ¨å¼•å¯¼ç¨‹åº) "
+"也需è¦å®ƒã€‚"
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun ç£ç›˜å·æ ‡å·²æ»¡ã€‚"
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "设备打开时失败"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "设备寻找时失败"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "设备写入时失败"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "从设备读å–时失败"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "无法读å–å·æ ‡ã€‚"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "无法写入å·æ ‡ã€‚"
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "æ— æ³•è¯»å– VTOC å·æ ‡ã€‚"
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "æ— æ³•è¯»å– VTOC FMT1 DSCB。"
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "æ— æ³•è¯»å– VTOC FMT4 DSCB。"
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "æ— æ³•è¯»å– VTOC FMT5 DSCB。"
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "æ— æ³•è¯»å– VTOC FMT7 DSCB。"
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "无法写入 VTOC å·æ ‡ã€‚"
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "无法写入 VTOC FMT1 DSCB。"
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "无法写入 VTOC FMT4 DSCB。"
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "无法写入 VTOC FMT5 DSCB。"
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "无法写入 VTOC FMT7 DSCB。"
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "无法写入 VTOC FMT9 DSCB。"
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "内存耗尽。"
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "无法获得特殊å•ä½â€œCOMPACTâ€æ‰€ç”¨çš„大å°ã€‚"
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "定ä½â€œ%sâ€æ—¶è¯­æ³•æ— æ•ˆã€‚"
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "ç£å¤´æ•°é‡çš„最大值为 %d。"
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "扇区数é‡çš„最大值为 %d。"
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "ä½ç½® %s 超出设备 %s 的范围。"
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "无效的数字。"
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "使用较å°å•ä½ä»¥ä»£æ›¿ < 1 的值"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s:é…置分区区å—时失败\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s:é…置区å—时失败\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s:无法读å–å¯åŠ¨åŒºå— %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s:无法读å–æ ¹åŒºå— %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s:é…ç½® ID 列表元素时失败\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s:无法读å–åŒºå— %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%sï¼šåŒºå— %llu 的类型 %s 有ä¸å½“的校验和\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%sï¼šæ— æ³•å†™å…¥åŒºå— %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s:é…ç½®ç£ç›˜ç‰¹å®šçš„ rdb 区å—时失败\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s:无法找到 rdb 区å—,这ä¸åº”该å‘生\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s:读å–åˆ†åŒºåŒºå— %llu 时失败\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr "GNU parted 编译时有误:FAT å¯åŠ¨æ‰‡åŒºåº”为 512 字节。FAT 支æŒå°†è¢«å…³é—­ã€‚"
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "文件系统å«æœ‰æ— æ•ˆçš„ FAT 文件系统签å。"
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "文件系统的扇区大å°å¯¹ FAT 文件系统æ¥è¯´æ— æ•ˆã€‚"
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "文件系统的簇大å°å¯¹ FAT 文件系统æ¥è¯´æ— æ•ˆã€‚"
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr "文件系统的ä¿ç•™æ‰‡åŒºæ•°å¯¹ FAT 文件系统æ¥è¯´æ— æ•ˆã€‚"
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "文件系统的文件分é…表 (FATs) æ•°é‡æ— æ•ˆã€‚"
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"文件系统的 CHS 几何数æ®æ˜¯ (%d, %d, %d),该项无效。分区表的 CHS ä½ç½®ä¸Žå°ºå¯¸æ˜¯ "
+"(%d, %d, %d)。"
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "FAT å¯åŠ¨æ‰‡åŒºå£°ç§°é€»è¾‘扇区的大å°ä¸ºé›¶ã€‚这很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT å¯åŠ¨æ‰‡åŒºå£°ç§°æ²¡æœ‰ FAT 表。这很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "FAT å¯åŠ¨æ‰‡åŒºå£°ç§°ç°‡æ˜¯é›¶æ‰‡åŒºã€‚这很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "文件系统为 FAT12,ä¸æ”¯æŒã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "æ— æ³•è¾¨è¯†çš„æ—§å¼ linux 交æ¢ç­¾å“%10sâ€ã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "æ— æ³•è¾¨è¯†çš„æ–°å¼ linux 交æ¢ç­¾å“%10sâ€ã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "无法辨识的 swsusp linux 交æ¢ç­¾å“%9sâ€ã€‚"
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr "Parted 无法在其扇区大å°ä¸ç­‰äºŽ %d 字节的ç£ç›˜ä¸Šä½¿ç”¨ HFS 文件系统。"
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"文件系统的 CHS 几何结构为 (%d, %d, %d),而其无效。分区表的 CHS 几何结构为 "
+"(%d, %d, %d)。如果您选择忽略,文件系统的 CHS 几何结构将会ä¿ç•™ä¸å˜ã€‚如果您选择"
+"ä¿®å¤ï¼Œæ–‡ä»¶ç³»ç»Ÿçš„ CHS 几何结构将会被设置以符åˆåˆ†åŒºè¡¨çš„ CHS 几何结构。"
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"ä¿¡æ¯æ‰‡åŒºçš„ç­¾å错误 (%x)。现在选择放弃,并å‘é€ bug 报告。如果您ä¸é¡¾ä¸€åˆ‡ï¼Œé€‰æ‹©"
+"忽略有å¯èƒ½æ˜¯â€œå®‰å…¨â€çš„。"
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"æ‚¨éœ€è¦ %s çš„å¯ç”¨ç£ç›˜ç©ºé—´ä»¥æ”¶ç¼©è¿™ä¸ªåˆ†åŒºåˆ°è¿™ä¸ªå¤§å°ã€‚ç›®å‰ï¼Œåªæœ‰ %s 为å¯ç”¨ã€‚"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "簇起始å移 = %d,ä¸æ˜¯ç°‡å¤§å° %d çš„æ•´æ•°å€ã€‚"
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "%s 的目录æ¡ç›®é”™è¯¯ï¼šç¬¬ä¸€ä¸ªç°‡å°±æ˜¯æ–‡ä»¶æ ‡å¿—的结æŸã€‚"
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr "错误的 FAT:%s 的链未终止。您应该è¿è¡Œ dosfsck 或 scandisk。"
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"ä¸å½“çš„ FAT 分区表:%2$s 的链中有簇 %1$d ä½äºŽæ–‡ä»¶ç³»ç»Ÿä¹‹å¤–。您应该è¿è¡Œ dosfsck "
+"或 scandisk。"
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr "错误的 FAT:簇 %d åŒ %s 的链交å‰äº†ã€‚您应该è¿è¡Œ dosfsck 或 scandisk。"
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s 为 %dk,但å«æœ‰ %d 个簇 (%dk)。"
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "对于 %s 文件系统而言,分区太大/太å°ã€‚"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT ä¸åŒ¹é…。如果你ä¸çŸ¥é“它的å«ä¹‰ï¼Œè¯·é€‰æ‹©æ”¾å¼ƒï¼Œå¹¶å¯¹æ–‡ä»¶ç³»ç»Ÿè¿è¡Œ scandisk,而åŽ"
+"在回到这里æ¥ã€‚"
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "对于此 FAT 类型没有å¯èƒ½çš„é…置。"
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"文件系统的大å°ä¸æ˜¯ Windows 所希望的。簇大å°ä¸º %dk (期望 %dk);簇数é‡ä¸º %d (期"
+"望 %d)ï¼›FAT 的大å°ä¸º %d 扇区 (期望 %d)。"
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "文件系统报告空闲空间为 %d 簇,而ä¸æ˜¯ %d 簇。"
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr "在根目录中空间ä¸è¶³ä»¥ç”¨äºŽæ‰€æœ‰çš„文件。你å¯é€‰æ‹©å–消,或是忽略而é—失文件。"
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "写入根目录错误。"
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "如果您ä¿ç•™æ–‡ä»¶ç³»ç»Ÿä¸º FAT16, 那么将ä¸ä¼šæœ‰é—®é¢˜ã€‚"
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"如果您转æ¢ä¸º FAT16,并将 MS Windows 安装到这个分区,那么您必须é‡æ–°å®‰è£… MS "
+"Windows å¯åŠ¨ç®¡ç†å™¨ã€‚如果您打算这么åšï¼Œæ‚¨åº”该å‚阅 Parted 的手册 (或您的å‘行版"
+"的手册)。"
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "如果您ä¿æŒæ–‡ä»¶ç³»ç»Ÿç±»åž‹ä¸º FAT32 ä¸å˜ï¼Œé‚£ä¹ˆæ‚¨å°†ä¸ä¼šé‡åˆ°ä»»ä½•æ–°é—®é¢˜ã€‚"
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"如果您转æ¢ä¸º FAT32,并且 MS Windows 安装在这个分区,那么您必须é‡æ–°å®‰è£… MS "
+"Windows çš„å¯åŠ¨ç®¡ç†å™¨ã€‚如果您打算这样作,您应该å‚阅 Parted 的手册 (或者您的å‘"
+"行版的手册)。此外,将文件系统转æ¢ä¸º FAT32,文件系统就ä¸èƒ½å¤Ÿè¢« MS DOSã€MS "
+"Windows 95a 和 MS Windows NT 所访问了。"
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "您是å¦æ„¿æ„使用 FAT32?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "文件系统的大å°åªèƒ½é€šè¿‡è½¬æ¢ä¸º FAT16 改å˜åˆ°è¿™ä¸€å¤§å°ã€‚"
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "文件系统的大å°åªèƒ½é€šè¿‡è½¬æ¢ä¸º FAT32 改å˜åˆ°è¿™ä¸€å¤§å°ã€‚"
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr "GNU Parted 无法调整这个分区为这样的大å°ã€‚我们正为此努力ï¼"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT %d 媒体 %x å’Œå¯åŠ¨æ‰‡åŒºæ‰€åœ¨çš„媒体 %x ä¸åŒ¹é…。您å¯èƒ½åº”该è¿è¡Œ scandisk。"
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set:簇 %ld ä½äºŽæ–‡ä»¶ç³»ç»Ÿä¹‹å¤–"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get:簇 %ld ä½äºŽæ–‡ä»¶ç³»ç»Ÿä¹‹å¤–"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster:没有空闲簇"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "无法检测文件系统。"
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "ä¸æ”¯æŒè°ƒæ•´ %s 文件系统大å°"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "文件系统大于其所在的å·ï¼"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "文件系统å«æœ‰é”™è¯¯ã€‚"
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "无法读å–ä¸å½“的区å—。"
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"å°è¯•ç™»è®°ä¸€ä¸ªå¼€å§‹äºŽ 0x%X 的延伸区å—,但是å¦ä¸€ä¸ªå·²ç»å­˜åœ¨äºŽæ­¤ä½ç½®ã€‚您应该检查一"
+"下文件系统ï¼"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"å°è¯•å°†å»¶ä¼¸åŒºå—从 0x%X 移动到 0x%X,但是å¦ä¸€ä¸ªå·²ç»å­˜åœ¨äºŽæ­¤ä½ç½®ã€‚这件事ä¸åº”该å‘"
+"生ï¼"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "无法更新具有 CNID %X 的 HFS 文件延伸缓存。"
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "å°è¯•è¯»å– EOF 之åŽå…·æœ‰ CNID %X çš„ HFS 文件。"
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "找ä¸åˆ°å…·æœ‰ CNID %2$X çš„ HFS 文件扇区 %1$lli。"
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "å°è¯•å†™å…¥ EOF 之åŽå…·æœ‰ CNID %X çš„ HFS 文件。"
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "无法更新具有 CNID %X 的 HFS+ 文件延伸缓存。"
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "å°è¯•è¯»å– EOF 之åŽå…·æœ‰ CNID %X çš„ HFS+ 文件。"
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "找ä¸åˆ°å…·æœ‰ CNID %2$X çš„ HFS+ 文件扇区 %1$lli。"
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "å°è¯•å†™å…¥ EOF 之åŽå…·æœ‰ CNID %X çš„ HFS+ 文件。"
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "抱歉,HFS 尚无法以该ç§æ–¹å¼è°ƒæ•´å¤§å°ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "正在缩å°"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "æ•°æ®é‡å¯»å€å¤±è´¥ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "æ•°æ®é‡å¯»å€åœ¨å·æœ«ç«¯ç•™ä¸‹ä¸€äº›æ•°æ®ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "正写入 HFS 主目录区å—"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "打开时找ä¸åˆ°ä»»ä½•æœ‰æ•ˆçš„ HFS[+X] ç­¾å。"
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "ä¸æ”¯æŒ HFS+ 的版本 %d。"
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "ä¸æ”¯æŒ HFSX 的版本 %d。"
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "æ•°æ®é‡å¯»å€åœ¨å·æœ«ç«¯ç•™ä¸‹ä¸€äº›æ•°æ®ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "写入é…é¢æ–‡ä»¶æ—¶å‘生错误。"
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "写入é…é¢æ–‡ä»¶çš„兼容部分时å‘生错误。"
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "正写入 HFS+ å·æ ‡å¤´"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "找寻必è¦çš„åå—文件时å‘生了错误。"
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr "在 HFS 包装程åºä¸­ä¼¼ä¹Žå‡ºçŽ°é”™è¯¯ï¼šåå—文件未包å«åµŒå…¥å¼ HFS+ å·ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "抱歉,HFS+ 尚无法以该ç§æ–¹å¼è°ƒæ•´å¤§å°ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "æ­£æ”¶ç¼©åµŒå…¥å¼ HFS+ å·"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "调整 HFS+ å·å¤§å°å¤±è´¥ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "正收缩 HFS 包装程åº"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "正更新 HFS 包装程åºå¤±è´¥ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr "è¿™ä¸æ˜¯çœŸå®žçš„ %s 检查。这是为了调试的目的而抽出特殊的低级文件。"
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "ä¸å½“çš„å—清å•æ ‡å¤´æ ¡éªŒå’Œã€‚"
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr "é‡æ’­æ—¥å¿—时出现无效的事务作业区å—å¤§å° (%i 字节)。"
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr "ä¸æ”¯æŒä¿å­˜äºŽå·ä¹‹å¤–的日志。请å°è¯•åœç”¨æ—¥å¿—并å†æ¬¡è¿è¡Œ Parted。"
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "日志的å移值或大å°å¹¶éžæ‰‡åŒºå¤§å°çš„å€æ•°ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "日志标头中有ä¸æ­£ç¡®çš„幻数。"
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "日志信æ¯åŒºå—与日志标头中的日志大å°ä¸åŒ¹é…。"
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "æŸäº›æ ‡å¤´å­—段ä¸æ˜¯æ‰‡åŒºå¤§å°çš„å€æ•°ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"ä¿å­˜åœ¨æ—¥å¿—中的扇区大å°ä¸æ˜¯ 512 字节。Parted åªæ”¯æŒ 512 字节长度的扇区。"
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ä¸å½“的日志校验和。"
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"日志éžç©ºã€‚Parted 必须于打开文件系统之å‰é‡æ’­äº‹åŠ¡ä½œä¸šã€‚这将会修改文件系统。"
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr "é‡æ’­æ—¥å¿—时,å·æ ‡å¤´æˆ–主目录区å—å·²å˜æ›´ã€‚您应该é‡æ–°å¯åŠ¨ Parted。"
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "æŸä¸ªå»¶ä¼¸æœªè¢«é‡å¯»å€ã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr "æŸä¸ªå»¶ä¼¸çš„å‚考æ¥è‡ªå®ƒä¸è¯¥æ¥çš„地方。您应该检查一下文件系统ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "这个 HFS å·æ²¡æœ‰ä»»ä½•ç›®å½•æ–‡ä»¶ã€‚这是很ä¸å¯»å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "这个 HFS å·æ²¡æœ‰ä»»ä½•å»¶ä¼¸æº¢å‡ºæ–‡ä»¶ã€‚这是相当ä¸å¯»å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr "延伸溢出文件ä¸åº”该包å«å…¶æœ¬èº«çš„å»¶ä¼¸ï¼ æ‚¨åº”è¯¥æ£€æŸ¥ä¸€ä¸‹æ–‡ä»¶ç³»ç»Ÿã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "无法将文件系统缓存在内存中。"
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "无法加载åå—清å•ã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "在延伸é‡å¯»å€çš„期间å‘生了错误。"
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "这个 HFS+ å·æ²¡æœ‰ä»»ä½•ç±»åˆ«æ–‡ä»¶ã€‚这是很ä¸å¯»å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr "这个 HFS+ å·æ²¡æœ‰ä»»ä½•å»¶ä¼¸æº¢å‡ºæ–‡ä»¶ã€‚这是相当ä¸å¯»å¸¸çš„ï¼"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "显示此求助信æ¯"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "列出所有å—设备的分区é…ç½®"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "显示机器å¯è§£æžçš„输出"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "显示 JSON 输出"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "从ä¸æ示用户"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "处于脚本模å¼æ—¶ï¼Œéœ€è¦è¯¢é—®æ—¶å°è¯•ä¿®å¤è€Œéžä¸­æ­¢æ‰§è¡Œ"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "显示版本"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "新分区的对é½"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMBER 是 Linux 使用的分区编å·ã€‚在 MS-DOS ç£ç›˜å·æ ‡ä¸­ï¼Œä¸»åˆ†åŒºç¼–å·ä¸º 1 - 4,逻"
+"辑分区从 5 开始。\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "“å·æ ‡ç±»åž‹â€æ˜¯ä»¥ä¸‹ä»»æ„一项:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "“标志â€æ˜¯ä»¥ä¸‹ä»»æ„一项:"
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIT 是以下任æ„一项:"
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "预想获得的对é½ï¼šæœ€å°æˆ–最佳化"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "“分区类型â€æ˜¯ä¸»åˆ†åŒºã€é€»è¾‘分区ã€æ‰©å±•åˆ†åŒºä¹‹ä¸€\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "“文件系统类型â€æ˜¯ä»¥ä¸‹ä»»æ„一项:"
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START å’Œ END 都是ç£ç›˜ä½ç½®ï¼Œå¦‚ 4 GB 或 10%。负值从ç£ç›˜çš„末尾数起。例如,-1s 指"
+"定确切的最åŽçŽ¯èŠ‚。\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"END 指的是ç£ç›˜ä½ç½®ï¼Œä¾‹å¦‚ 4GB 或 10%。负数值将从ç£ç›˜æœ«ç«¯å€’数过æ¥ã€‚例如,-1s 指"
+"定最åŽä¸€ä¸ªæ‰‡åŒºã€‚\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "状æ€ä¸ºï¼šå¼€ã€å…³\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DEVICE 通常为 /dev/hda 或 /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAME 是您需è¦çš„任何å•è¯\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"Copyright © 1998 - 2006 自由软件基金会。\n"
+"本程åºä¸ºè‡ªç”±è½¯ä»¶ï¼Œå— GNU 通用公共许å¯è¯è§„范。\n"
+"\n"
+"å‘行本程åºæ˜¯å¸Œæœ›å®ƒèƒ½å¤Ÿæœ‰ç”¨ï¼Œä½†æ˜¯ä¸å«ä»»ä½•æ‹…ä¿ï¼›\n"
+"甚至ä¸åŒ…括éšå«çš„适销性和适åˆç‰¹å®šç”¨é€”çš„ä¿è¯ã€‚\n"
+"详情请å‚è§ GNU 通用公共许å¯è¯ã€‚\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(剩余时间 %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "分区 %s 正被使用。你确定è¦ç»§ç»­å—?"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "正在使用 %s 上的分区。"
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"现有 %s 上的ç£ç›˜å·æ ‡å°†è¢«é”€æ¯ï¼Œè€Œæ‰€æœ‰åœ¨è¿™ä¸ªç£ç›˜ä¸Šçš„æ•°æ®å°†ä¼šä¸¢å¤±ã€‚您è¦ç»§ç»­å—?"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "æ–°çš„ç£ç›˜å·æ ‡ç±»åž‹ï¼Ÿ"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "分区类型?"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "分区å称?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "文件系统类型?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "起始点?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "结æŸç‚¹ï¼Ÿ"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"您è¦æ±‚将分区从 %s 移动到 %s (扇区 %llu..%llu)。\n"
+"我们å¯ä»¥ç®¡ç†çš„最近的分区是从 %s 到 %s (扇区 %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"这样您还å¯ä»¥æŽ¥å—å—?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "所产生的分区没有适当为获得最佳性能而对é½ï¼š%s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "未知(malloc 失败)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s ç£ç›˜å·æ ‡ä¸æ”¯æŒåˆ†åŒºå称。"
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "分区编å·ï¼Ÿ"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s ç£ç›˜å·æ ‡ä¸æ”¯æŒåˆ†åŒºå称。"
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "分区类型?"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "无效的数字。"
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "分区类型?"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "无效的数字。"
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS 的柱é¢ã€ç£å¤´ã€æ‰‡åŒºå‡ ä½•ç»“构:%d,%d,%d。æ¯åœˆæŸ±é¢æ˜¯ %s。\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "åž‹å·ï¼š%s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ç£ç›˜ %s:%s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "æ‰‡åŒºå¤§å° (逻辑/物ç†):%lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "分区表:%s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "ç£ç›˜æ ‡å¿—:%s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "ç¼–å·"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "起始点"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "结æŸç‚¹"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "大å°"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "类型"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "文件系统"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "å称"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "标志"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "å¯ç”¨ç©ºé—´"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"在 %3$s -> %4$s 处找到一个 %1$s %2$s 分区。您希望将其添加到分区表中å—?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "正在æœç´¢æ–‡ä»¶ç³»ç»Ÿ"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "resize 命令已在 parted 3.0 移除"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr "缩å°åˆ†åŒºå¯å¯¼è‡´æ•°æ®ä¸¢å¤±ï¼Œä½ ç¡®å®šè¦ç»§ç»­å—?"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "新设备?"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "对é½ç±»åž‹ (最å°/最佳)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d 已对é½\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d 未对é½ï¼š%s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "è¦å转的标志?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "新状æ€ï¼Ÿ"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "å•ä½ï¼Ÿ"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "对é½æ£€æŸ¥"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check 类型 N 检查分区 N 是å¦ä¸º (最å°=min|最佳"
+"=opt) 对é½ç±»åž‹"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMMAND] 打å°é€šç”¨æ±‚助信æ¯ï¼Œæˆ– COMMAND 的帮助"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr "mklabel,mktable LABEL-TYPE 创建新的ç£ç›˜å·æ ‡ (分区表)"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart 分区类型 [文件系统类型] 起始点 结æŸç‚¹ 创建一个分区"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"“mkpartâ€åˆ›å»ºåˆ†åŒºè€Œä¸åœ¨åˆ†åŒºä¸Šåˆ›å»ºæ–°æ–‡ä»¶ç³»ç»Ÿã€‚“文件系统类型â€å¯ä»¥ç”¨äºŽè®¾ç½®é€‚当的"
+"分区辨识å·ã€‚\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr ""
+"name ç¼–å· å称 将指定“编å·â€çš„分区命å为“å称â€"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] 显示分区表ã€å¯ç”¨è®¾å¤‡ã€å‰©ä½™ç©ºé—´æˆ–所有"
+"分区"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"“printâ€ä¸åŠ å‚æ•°å¯æ˜¾ç¤ºæ•´ä¸ªåˆ†åŒºè¡¨ã€‚然而借由下列å‚数它能è¿è¡Œå„ç§å…¶ä»–动作。\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices :显示所有作用中的å—设备\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr " free :显示在目å‰å—设备上未分区的å¯ç”¨ç©ºé—´ä¿¡æ¯\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr " list, all : 显示所有作用中å—设备的分区表\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit 退出程åº"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue 起始点 终止点 挽救临近“起始点â€ã€â€œç»ˆæ­¢ç‚¹â€çš„é—失的"
+"分区"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "resize 命令已在 parted 3.0 移除\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart NUMBER END æ”¹å˜ NUMBER 的大å°"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMBER 删除编å·ä¸º NUMBER 的分区"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select 设备 选择è¦ç¼–辑的设备"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_set æ——æ ‡ çŠ¶æ€ å˜æ›´å·²é€‰è®¾å¤‡ä¸Šçš„æ——æ ‡"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr "disk_toggle [æ——æ ‡] 切æ¢å·²é€‰è®¾å¤‡ä¸Šçš„旗标状æ€"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set ç¼–å· æ——æ ‡ çŠ¶æ€ æ”¹å˜æŒ‡å®šâ€œç¼–å·â€åˆ†åŒºçš„æ——æ ‡"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr "toggle [ç¼–å· [æ——æ ‡]] 切æ¢â€œç¼–å·â€åˆ†åŒºä¸Šçš„“旗标â€çŠ¶æ€"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "unit å•ä½ 设置缺çœçš„“å•ä½â€"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version æ˜¾ç¤ºç›®å‰ GNU Parted 的版本与版æƒä¿¡æ¯"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr "'version' 显示此份 GNU Parted 的版æƒä¸Žç‰ˆæœ¬ä¿¡æ¯\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr "用法:%s [-hlmsfv] [-a<align>] [设备 [命令 [å‚æ•°]]...]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "未找到设备"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "警告:您ä¸æ˜¯è¶…级用户。注æ„æƒé™é—®é¢˜ã€‚\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"您应该在é‡æ–°å¯åŠ¨ä¹‹å‰é‡æ–°å®‰è£…您的å¯åŠ¨ç®¡ç†å™¨ã€‚详情请阅读 Parted 用户文档的第四"
+"节。"
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "ä½ å¯èƒ½éœ€è¦ /etc/fstab。\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "欢迎使用 GNU Partedï¼è¾“å…¥ 'help' æ¥æŸ¥çœ‹å‘½ä»¤åˆ—表。\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"用法:parted [选项]... [设备 [命令 [å‚æ•°]...]...]\n"
+"将命令带ç€å‚数应用于“设备â€ã€‚如果没有给出“命令â€ï¼Œåˆ™ä»¥äº¤äº’模å¼è¿è¡Œã€‚\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"您找到了 GNU Parted 中的一个错误ï¼ä»¥ä¸‹æ˜¯æ‚¨å¿…须进行的事:\n"
+"\n"
+"ä¸å¿…慌张ï¼æ­¤ä¸€é”™è¯¯ä¸å¤ªå¯èƒ½ä¼šå½±å“到您的任何数æ®ã€‚\n"
+"请用以下方法æ¥å¸®åŠ©æˆ‘们修正这个错误:\n"
+"\n"
+"从这里获å–最新版 GNU parted:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"确认这个错误是å¦å·²è¢«ä¿®æ­£ã€‚\n"
+"请于报告错误å‰å…ˆæ£€æŸ¥æ­¤ä¸€ç‰ˆæœ¬ã€‚\n"
+"\n"
+"如果这尚未被修正,或是您ä¸çŸ¥é“如何去检查,\n"
+"请访问 GNU Parted 网å€ï¼š\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"以获得进一步的信æ¯ã€‚\n"
+"\n"
+"您的报告应该è¦åŒ…å«å‘å¸ƒçš„ç‰ˆæœ¬ç¼–å· (%s)\n"
+"以åŠå…¶ä¸‹çš„错误消æ¯ï¼Œä¸‹åˆ—命令\n"
+"\n"
+"\tparted <设备> unit co print unit s print\n"
+"\n"
+"的输出结果和其他您认为é‡è¦çš„设置信æ¯ã€‚\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"命令历å²ï¼š\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"错误:SEGV_MAPERR (地å€æœªå¯¹åº”到对象)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"错误:SEGV_ACCERR (对应的对象æƒé™æ— æ•ˆ)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"错误: é‡åˆ°ä¸€èˆ¬çš„ SIGSEGV ä¿¡å·ã€‚\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"错误: FPE_INTDIV (整数: 除零)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"错误: FPE_INTOVF (整数: 上溢)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"错误:FPE_FLTDIV (浮点数: 除零)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"错误: FPE_FLTOVF (浮点数: 上溢)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"错误: FPE_FLTUND (浮点数: 下溢)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"错误: FPE_FLTRES (浮点数: ä¸ç²¾ç¡®çš„结果)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"错误: FPE_FLTINV (浮点数: 无效的æ“作)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"错误: FPE_FLTSUB (浮点数: 注标超出范围)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"错误: é‡åˆ°ä¸€èˆ¬çš„ SIGFPE ä¿¡å·ã€‚"
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"错误: ILL_ILLOPC (ä¸åˆæ³•çš„æ“作ç )"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"错误: ILL_ILLOPN (ä¸åˆæ³•çš„算符)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"错误: ILL_ILLADR (ä¸åˆæ³•çš„寻å€æ¨¡å¼)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"错误: ILL_ILLTRP (ä¸åˆæ³•çš„陷阱)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"错误: ILL_PRVOPC (需è¦ç‰¹æƒçš„æ“作ç )"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"错误: ILL_PRVREG (需è¦ç‰¹æƒçš„寄存器)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"错误: ILL_COPROC (辅助处ç†å™¨é”™è¯¯)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"错误: ILL_BADSTK (内部堆栈错误)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"错误: é‡åˆ°ä¸€èˆ¬çš„ SIGILL ä¿¡å·ã€‚"
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "无效的字组:%s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "需è¦åˆ†åŒºç¼–å·ã€‚"
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "分区ä¸å­˜åœ¨ã€‚"
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "需è¦æ–‡ä»¶ç³»ç»Ÿç±»åž‹ã€‚"
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "未知的文件系统类型“%sâ€ã€‚"
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "需è¦ç£ç›˜å·æ ‡ç±»åž‹ã€‚"
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "ä¸æ”¯æŒæ——æ ‡"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "无法创建更多分区。"
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "需è¦åˆ†åŒºç±»åž‹ã€‚"
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "å¼€"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "å…³"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "最佳"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "最å°"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "选项:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "命令:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"将错误报告给 %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "使用 %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "这个命令在éžäº¤äº’模å¼ä¸­ä¸å…·ä»»ä½•æ„义。\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "拓展分区无法éšè—且使用 msdos ç£ç›˜å·æ ‡ã€‚"
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr "拓展分区ä¸èƒ½æ˜¯ä½¿ç”¨ msdos ç£ç›˜å·æ ‡çš„æ¢å¤åˆ†åŒºã€‚"
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr " æ•°å­— : 显示此一特殊分区更详细的信æ¯\n"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s:选项“--%sâ€ä¸å…许有å‚æ•°\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s:无法辨识的选项“--%sâ€\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:选项“-W %sâ€ä¸å…许有å‚æ•°\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s:选项“-W %sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s 首页:<http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "无效的 %s%s å‚æ•° %s"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "在 %s%s çš„å‚æ•° %s 中有无效的åŽç¼€"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s å‚æ•° %s 太大"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "无法é‡æ–°è¯»å…¥åˆ†åŒºè¡¨ã€‚è¿™æ„味ç€æ‚¨å¿…须在挂载任何修改过的分区之å‰é‡æ–°å¯åŠ¨ã€‚您还"
+#~ "需è¦åœ¨æ‚¨é‡æ–°å¯åŠ¨ä¹‹å‰é‡æ–°å®‰è£…å¯åŠ¨å¼•å¯¼ç¨‹åº (它å¯èƒ½éœ€è¦æŒ‚载修改过的分区)。åŒ"
+#~ "æ—¶åšè¿™ä¸¤ä»¶äº‹æ˜¯ä¸å¯èƒ½çš„ï¼æ‰€ä»¥æ‚¨éœ€è¦ä»Žæ¢å¤ç›˜ç‰‡å¯åŠ¨ï¼Œå¹¶ä»Žæ¢å¤ç›˜ç‰‡é‡æ–°å®‰è£…您的"
+#~ "å¯åŠ¨å¼•å¯¼ç¨‹åºã€‚更多详情请å‚阅 Parted 用户文档的第四节。"
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "%s 上的分区表无法被é‡æ–°è¯»å– (%s)。这æ„å‘³ç€ Hurd ä¸çŸ¥é“任何您所作的修改。您"
+#~ "应该在对 %s åšä»»ä½•æ“作之å‰é‡æ–°å¯åŠ¨æ‚¨çš„电脑。"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "å¯åŠ¨åŒºåŸŸå¹¶æœªä»Žåˆ†åŒºçš„起点开始."
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "此文件系统的逻辑扇区大å°ä¸º %d。GNU Parted ä¸èƒ½åœ¨æ‰‡åŒºå¤§å°ä¸æ˜¯ 512 字节的情"
+#~ "况下正确工作。"
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr "文件 %s 被标记为系统文件。这æ„味ç€ç§»åŠ¨å®ƒå¯èƒ½å¯¼è‡´æŸäº›ç¨‹åºåœæ­¢å·¥ä½œã€‚"
+
+#, fuzzy
+#~ msgid "Failed to add partition %d (%s)"
+#~ msgstr "加入分割区 %d (%s) 时失败"
+
+#, fuzzy
+#~ msgid ""
+#~ "parted was unable to re-read the partition table on %s (%s). This means "
+#~ "Linux won't know anything about the modifications you made. "
+#~ msgstr ""
+#~ "parted 无法é‡æ–°è¯»å– %s (%s) 上的分割表区表。 è¿™æ„å‘³ç€ Linux 在您é‡æ–°å¯åŠ¨ä¹‹"
+#~ "å‰æ— æ³•çŸ¥é“任何修改。"
+
+#, fuzzy
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted -- possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s å«æœ‰ GPT ç­¾å,标明它å«æœ‰ GPT 表。然而,它并ä¸åƒåº”该的那样å«æœ‰æœ‰æ•ˆçš„伪 "
+#~ "msdos 分割区表。å¯èƒ½å®ƒå·²ç»æŸå - å¯èƒ½æ˜¯ä¸ç†è§£ GPT 分割区表的程åºæ‰€å¯¼è‡´çš„。"
+#~ "或者您删除了 GPT 表,而现在使用 msdos 分割区表。这是 GPT 分割区表å—?"
+
+#~ msgid ""
+#~ "The sector size on %s is %d bytes. Parted is known not to work properly "
+#~ "with drives with sector sizes other than %d bytes"
+#~ msgstr ""
+#~ "%s 上的扇区大å°ä¸º %d å­—èŠ‚ã€‚ç›®å‰ Parted ä¸èƒ½åœ¨æ‰‡åŒºå¤§å°ä¸æ˜¯ %d 字节的ç£ç›˜ä¸Š"
+#~ "正确工作。"
+
+#~ msgid "Device %s has dodgey geometry."
+#~ msgstr "设备 %s 的几何结构很奇怪。"
+
+#~ msgid "IDE"
+#~ msgstr "IDE"
+
+#~ msgid "SCSI"
+#~ msgstr "SCSI"
+
+#~ msgid "Device %s is neither a SCSI nor IDE drive."
+#~ msgstr "设备 %s å³ä¸æ˜¯ SCSI ç£ç›˜ä¹Ÿä¸æ˜¯ IDE ç£ç›˜ã€‚"
+
+#~ msgid "Error reading %s (%s) to determine if partition is mounted."
+#~ msgstr "为确定分区是å¦åŠ è½½è€Œè¯»å– %s (%s) 时出错。"
+
+#~ msgid ""
+#~ "Unable to determine if partitions are mounted via /proc/mounts or /etc/"
+#~ "mtab. Make sure you don't attempt to resize or modify mounted file "
+#~ "systems. (Even read-only mounted)"
+#~ msgstr ""
+#~ "无法确定分区是å¦æ˜¯é€šè¿‡ /proc/mounts 或 /etc/mtab 加载的。请确认您ä¸ä¼šè¯•å›¾"
+#~ "改å˜æ–‡ä»¶ç³»ç»Ÿçš„大å°æˆ–者修改加载的文件系统。(å³ä½¿æŒ‰åªè¯»æ–¹å¼åŠ è½½ä¹Ÿä¸è¡Œ)"
+
+#~ msgid ""
+#~ "The kernel was unable to re-read the partition table on %s (%s). This "
+#~ "means Linux won't know anything nothing about the modifications you made "
+#~ "until you reboot. You should reboot your computer before doing anything "
+#~ "with %s."
+#~ msgstr ""
+#~ "内核无法é‡æ–°è¯»å– %s (%s) 上的分区表。这æ„味这 Linux 在您é‡æ–°å¯åŠ¨ä¹‹å‰æ— æ³•çŸ¥"
+#~ "é“任何修改。您应该在对 %s åšä»»ä½•æ“作 之å‰é‡æ–°å¯åŠ¨æ‚¨çš„计算机。"
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. However, the most likely reason is that Linux "
+#~ "detected the BIOS geometry for %s incorrectly. GNU Parted suspects the "
+#~ "real geometry should be %d/%d/%d (not %d/%d/%d). You should check with "
+#~ "your BIOS first, as this may not be correct. You can inform Linux by "
+#~ "adding the parameter %s=%d,%d,%d to the command line. See the LILO or "
+#~ "GRUB documentation for more information. If you think Parted's suggested "
+#~ "geometry is correct, you may select Ignore to continue (and fix Linux "
+#~ "later). Otherwise, select Cancel (and fix Linux and/or the BIOS now)."
+#~ msgstr ""
+#~ "%s 上的分区ä¸å调。产生这ç§æƒ…况的原因很多。然而,最å¯èƒ½çš„原因是 Linux 检测"
+#~ "到的 BIOS 关于 %s 的几何结构是错误的。GNU Parted 怀疑实际的几何结构为 %d/"
+#~ "%d/%d (而ä¸æ˜¯ %d/%d/%d)。因为 BIOS å¯èƒ½ä¸æ­£ç¡®ï¼Œæ‚¨åº”该首先检查您的 BIOS。您"
+#~ "å¯ä»¥é€šè¿‡åœ¨å‘½ä»¤è¡Œä¸­æ·»åŠ å‚æ•° %s=%d,%d,%d æ¥é€šçŸ¥ Linux。详情请å‚è§ LILO 或 "
+#~ "GRUB 的文档。如果您认为 Parted 所建议的几何结构是正确的,您å¯ä»¥å¿½ç•¥å¹¶ç»§ç»­ "
+#~ "(并在以åŽä¿®æ­£ Linux)。å¦åˆ™ï¼Œé€‰æ‹©æ”¾å¼ƒ (并马上修正 Linux 并且/或者 BIOS)。"
+
+#~ msgid ""
+#~ "The partition table on %s is inconsistent. There are many reasons why "
+#~ "this might be the case. Often, the reason is that Linux detected the "
+#~ "BIOS geometry incorrectly. However, this does not appear to be the case "
+#~ "here. It is safe to ignore,but ignoring may cause (fixable) problems "
+#~ "with some boot loaders, and may cause problems with FAT file systems. "
+#~ "Using LBA is recommended."
+#~ msgstr ""
+#~ "%s 上的分区表ä¸å调。å¯èƒ½å¯¼è‡´è¿™ç§æƒ…况的原因有很多。通常,原因是 Linux 检测"
+#~ "到的 BIOS 几何结构是错误的。然而,现在似乎并ä¸æ˜¯è¿™ç§æƒ…况。忽略是安全的,但"
+#~ "是忽略å¯èƒ½å¯¼è‡´æŸäº›å¯åŠ¨ç®¡ç†å™¨çš„问题 (å¯ä¿®å¤çš„),还å¯èƒ½å¯¼è‡´ FAT 文件系统出现"
+#~ "问题。建议使用 LBA。"
+
+#~ msgid ""
+#~ "Unable to align partition properly. This probably means that another "
+#~ "partitioning tool generated an incorrect partition table, because it "
+#~ "didn't have the correct BIOS geometry. It is safe to ignore,but ignoring "
+#~ "may cause (fixable) problems with some boot loaders."
+#~ msgstr ""
+#~ "无法正确地对é½åˆ†åŒºã€‚è¿™å¯èƒ½æ„味ç€å…¶å®ƒåˆ†åŒºå·¥å…·ç”±äºŽæ²¡æœ‰å¾—到正确的 BIOS 几何结"
+#~ "构而生æˆäº†é”™è¯¯çš„分区表。忽略是安全的,但忽略å¯èƒ½å¯¼è‡´æŸäº›å¯åŠ¨ç®¡ç†å™¨å‡ºçŽ°å¯ä¿®"
+#~ "å¤çš„问题。"
+
+#~ msgid ""
+#~ "%s contains GPT signatures, indicating that it has a GPT table. However, "
+#~ "it does not have a valid fake msdos partition table, as it should. "
+#~ "Perhaps it was corrupted - possibly by a program that doesn't understand "
+#~ "GPT partition tables. Or perhaps you deleted the GPT table, and are now "
+#~ "using an msdos partition table. Is this a GPT partition table?"
+#~ msgstr ""
+#~ "%s å«æœ‰ GPT ç­¾å,标明它å«æœ‰ GPT 表。然而,它并ä¸åƒåº”该的那样å«æœ‰æœ‰æ•ˆçš„伪 "
+#~ "msdos 分区表。å¯èƒ½å®ƒå·²ç»æŸå - å¯èƒ½æ˜¯ä¸ç†è§£ GPT 分区表的程åºå¯¼è‡´çš„。或者您"
+#~ "删除了 GPT 表,现在使用 msdos 分区表。这是 GPT 分区表å—?"
+
+#~ msgid "Support for opening %s file systems is not implemented yet."
+#~ msgstr "关于打开 %s 文件系统的支æŒå°šæœªå®žçŽ°ã€‚"
+
+#~ msgid "Support for checking %s file systems is not implemented yet."
+#~ msgstr "关于检查 %s 文件系统的支æŒå°šæœªå®žçŽ°ã€‚"
+
+#~ msgid "raw block copying"
+#~ msgstr "原始å—å¤åˆ¶"
+
+#~ msgid "growing file system"
+#~ msgstr "正在扩大文件系统"
+
+#~ msgid "Can't copy onto an overlapping partition."
+#~ msgstr "无法å¤åˆ¶åˆ°é‡å çš„分区。"
+
+#~ msgid ""
+#~ "Direct support for copying file systems is not yet implemented for %s. "
+#~ "However, support for resizing implemented. Therefore, the file system "
+#~ "can be copied if the new partition is at least as big as the old one. "
+#~ "So, either shrink the partition you are trying to copy, or copy to a "
+#~ "bigger partition."
+#~ msgstr ""
+#~ "对 %s æ¥è¯´å°šä¸æ”¯æŒç›´æŽ¥çš„文件系统å¤åˆ¶ã€‚但支æŒæ”¹å˜å¤§å°ã€‚因此,åªè¦æ–°åˆ†åŒºæ¯”原"
+#~ "分区大,就能够å¤åˆ¶æ–‡ä»¶ç³»ç»Ÿã€‚所以,缩å°æ‚¨è¯•å›¾å¤åˆ¶çš„分区,或å¤åˆ¶åˆ°è¾ƒå¤§çš„分"
+#~ "区。"
+
+#~ msgid "Support for copying %s file systems is not implemented yet."
+#~ msgstr "关于å¤åˆ¶ %s 文件系统的支æŒå°šæœªå®žçŽ°ã€‚"
+
+#~ msgid ""
+#~ "A bug has been detected in GNU parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s) and the following message:"
+#~ msgstr ""
+#~ "å‘现 GNU Parted 中的 bug。请将å«æœ‰ç‰ˆæœ¬ (%s) 和以下信æ¯çš„ bug 报告å‘é€åˆ° "
+#~ "bug-parted@gnu.org:"
+
+#~ msgid "Attempt to read sectors %ld-%ld outside of partition on %s"
+#~ msgstr "è¯•å›¾è¯»å– %3$s 上分区之外的扇区 %1$ld-%2$ld"
+
+#~ msgid "Inconsistent group descriptors!"
+#~ msgstr "ä¸ä¸€è‡´çš„组æ述符ï¼"
+
+#~ msgid "Filesystem full!"
+#~ msgstr "文件系统已满ï¼"
+
+#~ msgid ""
+#~ "This ext2 filesystem has a rather strange layout! Parted can't resize "
+#~ "this (yet)."
+#~ msgstr "该 ext2 文件系统的布局相当奇怪ï¼Parted 尚且无法改å˜å®ƒçš„大å°ã€‚"
+
+#~ msgid "Invalid superblock. Are you sure this is an ext2 filesystem?"
+#~ msgstr "无效的超å—。您确认它是一个 ext2 文件系统?"
+
+#~ msgid "Filesystem has errors! You should run e2fsck."
+#~ msgstr "文件系统错误ï¼æ‚¨åº”该è¿è¡Œ e2fsck。"
+
+#~ msgid ""
+#~ "Filesystem was not cleanly unmounted! You should e2fsck. Modifying an "
+#~ "unclean filesystem could cause severe corruption."
+#~ msgstr ""
+#~ "文件系统没有被干净地å¸è½½ï¼æ‚¨åº”该è¿è¡Œ e2fsck。修改ä¸å¹²å‡€çš„文件系统将导致严"
+#~ "é‡çš„æŸå。"
+
+#~ msgid "Filesystem has incompatible feature enabled"
+#~ msgstr "文件系统å¯ç”¨äº†ä¸å…¼å®¹çš„功能"
+
+#~ msgid "Error allocating buffer cache."
+#~ msgstr "分é…缓冲区 cache 错误。"
+
+#~ msgid ""
+#~ "Found an inode with a incorrect link count. Better go run e2fsck first."
+#~ msgstr "找到带有错误连接计数的 inode。最好先è¿è¡Œ e2fsck。"
+
+#~ msgid "Not enough free inodes!"
+#~ msgstr "没有足够的空闲 inodesï¼"
+
+#~ msgid "Filesystem is too occupied to remove a group!"
+#~ msgstr "文件系统被过渡å ç”¨ä»¥è‡´æ— æ³•åˆ é™¤ç»„ï¼"
+
+#~ msgid "Filesystem has too many allocated inodes to remove a group!"
+#~ msgstr "文件系统中已使用的 inode 过多以致无法删除组ï¼"
+
+#~ msgid "adding groups"
+#~ msgstr "添加组"
+
+#~ msgid "Your filesystem is too occupied to resize it to %i blocks. Sorry."
+#~ msgstr "您的文件系统被过渡å ç”¨ä»¥è‡´æ— æ³•å°†å®ƒçš„大å°æ”¹å˜ä¸º %i 个å—。抱歉。"
+
+#~ msgid ""
+#~ "Your filesystem has too much occupied inodes to resize it to %i blocks. "
+#~ "Sorry."
+#~ msgstr ""
+#~ "您的文件系统中已使用的 inode 过多以致无法将其大å°æ”¹å˜ä¸º %i 个å—。抱歉。"
+
+#~ msgid "Filesystem was not cleanly unmounted! You should e2fsck."
+#~ msgstr "文件系统没有干净地å¸è½½ï¼æ‚¨åº”该è¿è¡Œ e2fsck。"
+
+#~ msgid "Cross-linked blocks found! better go run e2fsck first!"
+#~ msgstr "å‘现交å‰è¿žæŽ¥å—ï¼æœ€å¥½å…ˆè¿è¡Œ e2fsckï¼"
+
+#~ msgid "Block %i has no reference? Weird"
+#~ msgstr "å— %i 没有引用?奇怪"
+
+#~ msgid "Block %i shouldn't have been marked!"
+#~ msgstr "å— %i ä¸åº”该已被标记ï¼"
+
+#~ msgid ""
+#~ "The ext2 filesystem passed a basic check. For a more comprehensive "
+#~ "check, use the e2fsck program."
+#~ msgstr "ext2 文件系统通过基本检查。至于更负载的检查,使用 e2fsck 程åºã€‚"
+
+#~ msgid "Sorry, can't move the start of ext2 partitions yet!"
+#~ msgstr "错误,尚无法移动 ext2 分区的起点ï¼"
+
+#~ msgid "Couldn't flush buffer cache!"
+#~ msgstr "无法刷新缓冲区 cacheï¼"
+
+#~ msgid "writing per-group metadata"
+#~ msgstr "写入æ¯ä¸ªç»„都有的元数æ®"
+
+#~ msgid "File system has an invalid signature for a FAT file systems."
+#~ msgstr "文件系统å«æœ‰æ— æ•ˆçš„ FAT 文件系统签å。"
+
+#~ msgid "Too many bad pages."
+#~ msgstr "过多的å页。"
+
+#~ msgid "where necessary, prompts for user intervention"
+#~ msgstr "在必è¦æ—¶ï¼Œæ示用户"
+
+#~ msgid "Source partition number?"
+#~ msgstr "æºåˆ†åŒºç¼–å·ï¼Ÿ"
+
+#~ msgid ""
+#~ "You requested to create a partition at %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "您è¦æ±‚在 %.3f - %.3fMb çš„ä½ç½®åˆ›å»ºåˆ†åŒºã€‚å¯ç®¡ç†çš„最相近分区为 %.3f-%.3fMb。"
+
+#~ msgid "Extended partitions can't have file systems. Did you want mkpart?"
+#~ msgstr "扩展分区ä¸èƒ½å«æœ‰æ–‡ä»¶ç³»ç»Ÿã€‚您是è¦ç”¨ mkpart å§ï¼Ÿ"
+
+#~ msgid "Can't move a partition onto itself. Try using resize, perhaps?"
+#~ msgstr "无法将分区移动到它自身。试用改å˜å¤§å°ï¼Œå¯èƒ½ï¼Ÿ"
+
+#~ msgid ""
+#~ "You requested to move the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "您请求将分区移动到 %.3f - %.3fMb。å¯ç®¡ç†æœ€è´´è¿‘的分区为 %.3f - %.3fMB。"
+
+#~ msgid "Minor: %d\n"
+#~ msgstr "Minor:%d\n"
+
+#~ msgid "Flags: "
+#~ msgstr "标志:"
+
+#~ msgid "File System: %s\n"
+#~ msgstr "文件系统:%s\n"
+
+#~ msgid "Size: %10.3fMb (%d%%)\n"
+#~ msgstr "大å°ï¼š %10.3fMb (%d%%)\n"
+
+#~ msgid "Minimum size: %10.3fMb (%d%%)\n"
+#~ msgstr "最å°å°ºå¯¸ï¼š %10.3fMb (%d%%)\n"
+
+#~ msgid "Maximum size: %10.3fMb (%d%%)\n"
+#~ msgstr "最大尺寸: %10.3fMb (%d%%)\n"
+
+#~ msgid "Disk geometry for %s: 0.000-%.3f megabytes\n"
+#~ msgstr "%s çš„ç£ç›˜å‡ ä½•ç»“构:0.000-%.3f 兆字节\n"
+
+#~ msgid "Minor Start End "
+#~ msgstr "Minor 起始点 终止点 "
+
+#~ msgid "Type "
+#~ msgstr "类型 "
+
+#~ msgid "Filesystem "
+#~ msgstr "文件系统 "
+
+#~ msgid "Name "
+#~ msgstr "å称 "
+
+#~ msgid ""
+#~ "You requested to resize the partition to %.3f-%.3fMb. The closest Parted "
+#~ "can manage is %.3f-%.3fMb."
+#~ msgstr ""
+#~ "您è¦æ±‚将分区改å˜å¤§å°å¹¶ä¿å­˜åˆ° %.3f - %.3fMb。å¯ç®¡ç†æœ€æŽ¥è¿‘的分区为 %.3f - "
+#~ "%.3fMb。"
+
+#~ msgid "check MINOR do a simple check on the filesystem"
+#~ msgstr "检查 MINOR 对文件系统进行一个简å•çš„检查"
+
+#~ msgid "cp"
+#~ msgstr "cp"
+
+#~ msgid ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR copy filesystem to another "
+#~ "partition"
+#~ msgstr ""
+#~ "cp [FROM-DEVICE] FROM-MINOR TO-MINOR 将文件系统å¤åˆ¶åˆ°å¦ä¸€ä¸ªåˆ†åŒº"
+
+#~ msgid "mkfs"
+#~ msgstr "mkfs"
+
+#~ msgid ""
+#~ "mkfs MINOR FS-TYPE make a filesystem FS-TYPE on partititon "
+#~ "MINOR"
+#~ msgstr ""
+#~ "mkfs MINOR 文件系统类型 在 MINOR 创建类型为“文件系统类型â€çš„文件系统"
+
+#~ msgid "mkpartfs"
+#~ msgstr "mkpartfs"
+
+#~ msgid ""
+#~ "mkpartfs PART-TYPE FS-TYPE START END make a partition with a "
+#~ "filesystem"
+#~ msgstr ""
+#~ "mkpartfs 分区类型 文件系统类型 起始点 终止点 创建一个带有文件系统的分区"
+
+#~ msgid "move"
+#~ msgstr "move"
+
+#~ msgid "move MINOR START END move partition MINOR"
+#~ msgstr "move MINOR 起始点 终止点 移动编å·ä¸º MINOR 的分区"
+
+#~ msgid ""
+#~ "print [MINOR] display the partition table, or a partition"
+#~ msgstr "print [MINOR] 打å°åˆ†åŒºè¡¨ï¼Œæˆ–者分区"
+
+#~ msgid "resize MINOR START END resize filesystem on partition MINOR"
+#~ msgstr ""
+#~ "resize MINOR 起始点 终止点 改å˜ä½äºŽç¼–å·ä¸º MINOR 的分区中文件系统的大å°"
+
+#~ msgid ""
+#~ "You found a bug in GNU Parted. Please email a bug report to bug-"
+#~ "parted@gnu.org containing the version (%s), and the following message:\n"
+#~ msgstr ""
+#~ "您找到了 GNU Parted çš„ bug。请将å«æœ‰ç‰ˆæœ¬ (%s) 和以下信æ¯çš„ bug 报告å‘é€åˆ° "
+#~ "bug-parted@gnu.org:\n"
+
+#~ msgid ""
+#~ " You have Windows FAT partition(s) that are not using LBA. If your BIOS "
+#~ "supports LBA, then you should switch to LBA by setting the LBA flag on "
+#~ "all FAT partitions. Otherwise, make sure the operating system and the "
+#~ "BIOS have the same geometry before resizing any FAT partitions."
+#~ msgstr ""
+#~ "您使用了ä¸ä½¿ç”¨ LBA çš„ Windows FAT 分区。如果您的 BIOS æ”¯æŒ LBA,那么您应该"
+#~ "通过在所有 FAT 分区上设置 LBA 标志以切æ¢åˆ° LBA 模å¼ã€‚å¦åˆ™ï¼Œåœ¨æ”¹å˜ä»»ä½• FAT "
+#~ "分区大å°çš„时候确认æ“作系统和 BIOS 使用相åŒçš„几何结构。"
+
+#~ msgid ""
+#~ "The operating system thinks the geometry on %s is %d/%d/%d. Therefore, "
+#~ "cylinder 1024 ends at %.3fM.%s"
+#~ msgstr ""
+#~ "æ“作系统认为 %s 的几何结构为 %d/%d/%dã€‚å› æ­¤ï¼ŒæŸ±é¢ 1024 结æŸäºŽ %.3fM.%s"
+
+#~ msgid "The operating system thinks the geometry on %s is %d/%d/%d.%s"
+#~ msgstr "æ“作系统认为 %s 的几何结构 %d/%d/%d.%s"
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
new file mode 100644
index 0000000..85d4233
--- /dev/null
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..a093820
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,3215 @@
+# Traditional Chinese Messages for parted.
+# Copyright (C) 2003, 05, 06 Free Software Foundation, Inc.
+# This file is distributed under the same license as the parted package.
+# Wang Li <charles@linux.net.cn>, 2003.
+# Wei-Lun Chao <bluebat@member.fsf.org>, 2011, 2012, 2013, 2015, 2016.
+# pan93412 <pan93412@gmail.com>, 2019.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: parted 3.4.64.2\n"
+"Report-Msgid-Bugs-To: bug-parted@gnu.org\n"
+"POT-Creation-Date: 2023-04-10 15:50-0700\n"
+"PO-Revision-Date: 2022-04-07 11:46+0800\n"
+"Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
+"Language-Team: Chinese (traditional) <zh-l10n@lists.linux.org.tw>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.0.1\n"
+
+#: lib/argmatch.c:145
+#, c-format
+msgid "invalid argument %s for %s"
+msgstr "傳入 %2$s 之åƒæ•¸ %1$s 無效"
+
+#: lib/argmatch.c:146
+#, c-format
+msgid "ambiguous argument %s for %s"
+msgstr "傳入 %2$s 之åƒæ•¸ %1$s ä¸æ˜Žç¢º"
+
+#: lib/argmatch.c:165 lib/argmatch.h:237
+msgid "Valid arguments are:"
+msgstr "有效的åƒæ•¸ç‚ºï¼š"
+
+#: lib/closeout.c:121 libparted/labels/fdasd.c:145
+msgid "write error"
+msgstr "寫入時發生錯誤"
+
+#: lib/error.c:193
+msgid "Unknown system error"
+msgstr "未知系統錯誤"
+
+#: lib/getopt.c:278
+#, c-format
+msgid "%s: option '%s%s' is ambiguous\n"
+msgstr "%s:「%s%sã€é¸é …模稜兩å¯\n"
+
+#: lib/getopt.c:284
+#, c-format
+msgid "%s: option '%s%s' is ambiguous; possibilities:"
+msgstr "%s:「%s%sã€é¸é …模稜兩å¯ã€‚å¯èƒ½æ˜¯ï¼š"
+
+#: lib/getopt.c:319
+#, c-format
+msgid "%s: unrecognized option '%s%s'\n"
+msgstr "%s:無法辨識「%s%sã€é¸é …\n"
+
+#: lib/getopt.c:345
+#, c-format
+msgid "%s: option '%s%s' doesn't allow an argument\n"
+msgstr "%s:「%s%sã€é¸é …ä¸å…許傳入引數\n"
+
+#: lib/getopt.c:360
+#, c-format
+msgid "%s: option '%s%s' requires an argument\n"
+msgstr "%s:「%s%sã€é¸é …需è¦å‚³å…¥å¼•æ•¸\n"
+
+#: lib/getopt.c:621
+#, c-format
+msgid "%s: invalid option -- '%c'\n"
+msgstr "%s:無效é¸é … -- '%c'\n"
+
+#: lib/getopt.c:636 lib/getopt.c:682
+#, c-format
+msgid "%s: option requires an argument -- '%c'\n"
+msgstr "%s:é¸é …需è¦åƒæ•¸ -- '%c'\n"
+
+#. TRANSLATORS:
+#. Get translations for open and closing quotation marks.
+#. The message catalog should translate "`" to a left
+#. quotation mark suitable for the locale, and similarly for
+#. "'". For example, a French Unicode local should translate
+#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
+#. QUOTATION MARK), respectively.
+#.
+#. If the catalog has no translation, we will try to
+#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
+#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
+#. current locale is not Unicode, locale_quoting_style
+#. will quote 'like this', and clocale_quoting_style will
+#. quote "like this". You should always include translations
+#. for "`" and "'" even if U+2018 and U+2019 are appropriate
+#. for your locale.
+#.
+#. If you don't know what to put here, please see
+#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
+#. and use glyphs suitable for your language.
+#: lib/quotearg.c:354
+msgid "`"
+msgstr "「"
+
+#: lib/quotearg.c:355
+msgid "'"
+msgstr "ã€"
+
+#: lib/regcomp.c:122
+msgid "Success"
+msgstr "æˆåŠŸ"
+
+#: lib/regcomp.c:125
+msgid "No match"
+msgstr "無符åˆé …ç›®"
+
+#: lib/regcomp.c:128
+msgid "Invalid regular expression"
+msgstr "æ­£è¦è¡¨ç¤ºå¼ç„¡æ•ˆ"
+
+#: lib/regcomp.c:131
+msgid "Invalid collation character"
+msgstr "定åºå­—元無效"
+
+#: lib/regcomp.c:134
+msgid "Invalid character class name"
+msgstr "字元類型å稱無效"
+
+#: lib/regcomp.c:137
+msgid "Trailing backslash"
+msgstr "末尾å斜線"
+
+#: lib/regcomp.c:140
+msgid "Invalid back reference"
+msgstr "å‘後åƒè€ƒç„¡æ•ˆ"
+
+#: lib/regcomp.c:143
+msgid "Unmatched [, [^, [:, [., or [="
+msgstr "ä¸å°ç¨±çš„ [ã€[^ã€[:ã€[.,或 [="
+
+#: lib/regcomp.c:146
+msgid "Unmatched ( or \\("
+msgstr "ä¸å°ç¨±çš„ ( 或 \\("
+
+#: lib/regcomp.c:149
+msgid "Unmatched \\{"
+msgstr "ä¸å°ç¨±çš„ \\{"
+
+#: lib/regcomp.c:152
+msgid "Invalid content of \\{\\}"
+msgstr "\\{\\} 中內容無效"
+
+#: lib/regcomp.c:155
+msgid "Invalid range end"
+msgstr "çµæŸç¯„åœç„¡æ•ˆ"
+
+#: lib/regcomp.c:158
+msgid "Memory exhausted"
+msgstr "記憶體用盡"
+
+#: lib/regcomp.c:161
+msgid "Invalid preceding regular expression"
+msgstr "å‰ç½®æ­£è¦è¡¨ç¤ºå¼ç„¡æ•ˆ"
+
+#: lib/regcomp.c:164
+msgid "Premature end of regular expression"
+msgstr "æ­£è¦è¡¨ç¤ºå¼éŽæ—©çµæŸ"
+
+#: lib/regcomp.c:167
+msgid "Regular expression too big"
+msgstr "æ­£è¦è¡¨ç¤ºå¼éŽé•·"
+
+#: lib/regcomp.c:170
+msgid "Unmatched ) or \\)"
+msgstr "ä¸å°ç¨±çš„ ) 或 \\)"
+
+#: lib/regcomp.c:650
+msgid "No previous regular expression"
+msgstr "沒有上一個正è¦è¡¨ç¤ºå¼"
+
+#. TRANSLATORS: A regular expression testing for an affirmative answer
+#. (english: "yes"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^yesexpr='
+#: lib/rpmatch.c:149
+msgid "^[yY]"
+msgstr "^[yY]"
+
+#. TRANSLATORS: A regular expression testing for a negative answer
+#. (english: "no"). Testing the first character may be sufficient.
+#. Take care to consider upper and lower case.
+#. To enquire the regular expression that your system uses for this
+#. purpose, you can use the command
+#. locale -k LC_MESSAGES | grep '^noexpr='
+#: lib/rpmatch.c:162
+msgid "^[nN]"
+msgstr "^[nN]"
+
+#: lib/version-etc.c:73
+#, c-format
+msgid "Packaged by %s (%s)\n"
+msgstr "由 %s (%s) 打包\n"
+
+#: lib/version-etc.c:76
+#, c-format
+msgid "Packaged by %s\n"
+msgstr "由 %s 打包\n"
+
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale. Otherwise, do not translate "(C)"; leave it as-is.
+#: lib/version-etc.c:83
+msgid "(C)"
+msgstr "(C)"
+
+#. TRANSLATORS: The %s placeholder is the web address of the GPL license.
+#: lib/version-etc.c:88
+#, c-format
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <%s>.\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"授權 GPLv3+:GNU GPL 第 3 或更新版本 <%s>。\n"
+"這是自由軟體:您å¯ä»¥è‡ªç”±è®Šæ›´åŠé‡æ–°æ•£ä½ˆã€‚\n"
+"在法律准許之範åœå…§ä¸é™„帶ä¿è­‰ã€‚\n"
+
+#. TRANSLATORS: %s denotes an author name.
+#: lib/version-etc.c:105
+#, c-format
+msgid "Written by %s.\n"
+msgstr "由 %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:109
+#, c-format
+msgid "Written by %s and %s.\n"
+msgstr "由 %s 和 %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#: lib/version-etc.c:113
+#, c-format
+msgid "Written by %s, %s, and %s.\n"
+msgstr "ç”± %sã€%s å’Œ %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:120
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%s\n"
+"和 %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:127
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€\n"
+"%s 和 %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:134
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€\n"
+"%sã€%s å’Œ %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:142
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€%sã€\n"
+"%sã€%s å’Œ %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:150
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€%sã€\n"
+"%sã€%sã€%s å’Œ %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:159
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, and %s.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€%s\n"
+"和 %s 編寫。\n"
+
+#. TRANSLATORS: Each %s denotes an author name.
+#. You can use line breaks, estimating that each author name occupies
+#. ca. 16 screen columns and that a screen line has ca. 80 columns.
+#: lib/version-etc.c:170
+#, c-format
+msgid ""
+"Written by %s, %s, %s,\n"
+"%s, %s, %s, %s,\n"
+"%s, %s, and others.\n"
+msgstr ""
+"ç”± %sã€%sã€%sã€%sã€\n"
+"%sã€%sã€%sã€%s\n"
+"和 %s 等人編寫。\n"
+
+#. TRANSLATORS: The placeholder indicates the bug-reporting address
+#. for this package. Please add _another line_ saying
+#. "Report translation bugs to <...>\n" with the address for translation
+#. bugs (typically your translation team's web or email address).
+#: lib/version-etc.c:249
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "回報臭蟲至:%s\n"
+
+#: lib/version-etc.c:251
+#, c-format
+msgid "Report %s bugs to: %s\n"
+msgstr "請將 %s 的臭蟲匯報至:%s\n"
+
+#: lib/version-etc.c:255 lib/version-etc.c:257
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s 首é ï¼š<%s>\n"
+
+#: lib/version-etc.c:260
+#, c-format
+msgid "General help using GNU software: <%s>\n"
+msgstr "GNU 軟體用法的一般說明:<%s>\n"
+
+#: lib/xalloc-die.c:34
+msgid "memory exhausted"
+msgstr "記憶體用盡"
+
+#: libparted/arch/beos.c:246
+msgid "Disk Image"
+msgstr "ç£ç¢Ÿå½±åƒ"
+
+#: libparted/arch/beos.c:347 libparted/arch/gnu.c:349
+#: libparted/arch/linux.c:1732
+#, c-format
+msgid "Error opening %s: %s"
+msgstr "開啟 %s 時出錯:%s"
+
+#: libparted/arch/beos.c:358 libparted/arch/gnu.c:359
+#: libparted/arch/linux.c:1743
+#, c-format
+msgid "Unable to open %s read-write (%s). %s has been opened read-only."
+msgstr "無法開啟 %s 以讀寫 (%s)。%s 已用唯讀的方å¼é–‹å•Ÿã€‚"
+
+#: libparted/arch/beos.c:420 libparted/arch/linux.c:1908
+#, c-format
+msgid "%s during seek for read on %s"
+msgstr "åœ¨ç‚ºè®€å– %2$s è€Œå‘¼å« seek 時 %1$s"
+
+#: libparted/arch/beos.c:453 libparted/arch/gnu.c:497 libparted/arch/gnu.c:596
+#: libparted/arch/gnu.c:724 libparted/arch/linux.c:1868
+#: libparted/arch/linux.c:1950
+#, c-format
+msgid "%s during read on %s"
+msgstr "åœ¨è®€å– %2$s 期間 %1$s"
+
+#: libparted/arch/beos.c:489 libparted/arch/gnu.c:557
+#: libparted/arch/linux.c:2027
+#, c-format
+msgid "Can't write to %s, because it is opened read-only."
+msgstr "由於 %s 是以唯讀方å¼é–‹å•Ÿï¼Œå› æ­¤ç„¡æ³•å¯«å…¥ã€‚"
+
+#: libparted/arch/beos.c:505 libparted/arch/linux.c:2052
+#, c-format
+msgid "%s during seek for write on %s"
+msgstr "在為寫入 %2$s å‘¼å« seek 時 %1$s"
+
+#: libparted/arch/beos.c:542 libparted/arch/gnu.c:633 libparted/arch/gnu.c:678
+#: libparted/arch/gnu.c:755 libparted/arch/linux.c:2000
+#: libparted/arch/linux.c:2095 libparted/arch/linux.c:2168
+#, c-format
+msgid "%s during write on %s"
+msgstr "在寫入 %2$s 時 %1$s"
+
+#: partprobe/partprobe.c:149
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "嘗試「%s --helpã€ä»¥ç²å¾—更多資訊。\n"
+
+#: partprobe/partprobe.c:153
+#, c-format
+msgid "Usage: %s [OPTION] [DEVICE]...\n"
+msgstr "用法:%s [é¸é …] [è£ç½®]…\n"
+
+#: partprobe/partprobe.c:154
+msgid ""
+"Inform the operating system about partition table changes.\n"
+"\n"
+" -d, --dry-run do not actually inform the operating system\n"
+" -s, --summary print a summary of contents\n"
+" -h, --help display this help and exit\n"
+" -v, --version output version information and exit\n"
+msgstr ""
+"通報作業系統關於分割表的變更。\n"
+"\n"
+" -d, --dry-run 並éžçœŸçš„通報作業系統\n"
+" -s, --summary å°å‡ºå…§å®¹çš„概è¦\n"
+" -h, --help 顯示這個說明然後離開\n"
+" -v, --version 輸出版本資訊然後離開\n"
+
+#: partprobe/partprobe.c:162
+msgid ""
+"\n"
+"When no DEVICE is given, probe all partitions.\n"
+msgstr ""
+"\n"
+"如果沒有指定任何è£ç½®ï¼Œå°±æŽ¢æŸ¥æ‰€æœ‰åˆ†å‰²å€ã€‚\n"
+
+#: partprobe/partprobe.c:166
+#, c-format
+msgid ""
+"\n"
+"Report bugs to <%s>.\n"
+msgstr ""
+"\n"
+"將錯誤回報給 <%s>。\n"
+
+#: libparted/arch/gnu.c:110
+#, c-format
+msgid "Unable to open %s."
+msgstr "無法開啟 %s。"
+
+#: libparted/arch/gnu.c:130
+msgid "Unable to probe store."
+msgstr "無法åµæ¸¬å„²å­˜è£ç½®ã€‚"
+
+#: libparted/arch/gnu.c:235
+#, c-format
+msgid ""
+"WARNING: the kernel failed to re-read the partition table on %s (%s). As a "
+"result, it may not reflect all of your changes until after reboot."
+msgstr ""
+"警告:內核無法é‡æ–°è®€å– %s (%s) 上的分割表。因此å¯èƒ½è¦é‡æ–°å•Ÿå‹•ï¼Œæ‰èƒ½å映您所有"
+"的更動。"
+
+#: libparted/arch/gnu.c:261
+#, c-format
+msgid ""
+"Warning: unable to open %s (%s). As a result, it may not reflect all of your "
+"changes until after reboot."
+msgstr "警告:無法開啟 %s (%s)。因此å¯èƒ½è¦é‡æ–°å•Ÿå‹•ï¼Œæ‰èƒ½å映您所有的更動。"
+
+#: libparted/arch/gnu.c:274
+#, c-format
+msgid ""
+"Warning: failed to make translator go away on %s (%s). As a result, it may "
+"not reflect all of your changes until after reboot."
+msgstr ""
+"警告:無法讓轉譯器 (translator) 離開 %s (%s)。因此å¯èƒ½è¦é‡æ–°å•Ÿå‹•ï¼Œæ‰èƒ½å映您"
+"所有的更動。"
+
+#: libparted/arch/gnu.c:820
+#, c-format
+msgid "%s trying to sync %s to disk"
+msgstr "%s 試圖將 %s åŒæ­¥åˆ°ç£ç¢Ÿä¸Š"
+
+#: libparted/arch/linux.c:633
+#, c-format
+msgid "Could not stat device %s - %s."
+msgstr "無法å°è£ç½® %s - %s 進行 stat æ“作。"
+
+#: libparted/arch/linux.c:690
+#, c-format
+msgid "Unable to determine the dm type of %s."
+msgstr "無法決定 %s 的 dm 型態。"
+
+#: libparted/arch/linux.c:774 libparted/arch/linux.c:907
+#, c-format
+msgid ""
+"Could not determine sector size for %s: %s.\n"
+"Using the default sector size (%lld)."
+msgstr ""
+"無法決定用於 %s:%s çš„ç£å€å¤§å°ã€‚\n"
+"使用é è¨­ç£å€å¤§å° (%lld)。"
+
+#: libparted/arch/linux.c:795
+#, c-format
+msgid ""
+"Could not determine physical sector size for %s.\n"
+"Using the logical sector size (%lld)."
+msgstr ""
+"無法決定 %s 的實體ç£å€å¤§å°ã€‚\n"
+"將使用é‚輯ç£å€å¤§å° (%lld)。"
+
+#: libparted/arch/linux.c:855
+#, c-format
+msgid "Unable to determine the size of %s (%s)."
+msgstr "無法確定 %s (%s) 的大å°ã€‚"
+
+#: libparted/arch/linux.c:958 libparted/arch/linux.c:973
+msgid "Generic IDE"
+msgstr "一般 IDE"
+
+#: libparted/arch/linux.c:963
+#, c-format
+msgid "Could not get identity of device %s - %s"
+msgstr "無法ç²å–è£ç½® %s - %s 的標識"
+
+#: libparted/arch/linux.c:994
+#, c-format
+msgid ""
+"Device %s has multiple (%d) logical sectors per physical sector.\n"
+"GNU Parted supports this EXPERIMENTALLY for some special disk label/file "
+"system combinations, e.g. GPT and ext2/3.\n"
+"Please consult the web site for up-to-date information."
+msgstr ""
+"è£ç½® %s çš„æ¯ä¸€ç‰©ç†ç£å€å…·æœ‰å¤šå€‹ (%d) é‚輯ç£å€ã€‚\n"
+"GNU Parted å°æŸäº›ç‰¹å®šç£ç¢Ÿæ¨™ç±¤/檔案系統組åˆé‚„是[實驗性]支æ´ï¼Œåƒæ˜¯ GPT å’Œ "
+"ext2/3。\n"
+"è«‹åƒç…§ç¶²é ä»¥ç²å¾—最新的資訊。"
+
+#: libparted/arch/linux.c:1172
+#, c-format
+msgid "Error initialising SCSI device %s - %s"
+msgstr "åˆå§‹åŒ– SCSI è£ç½® %s - %s 時出錯"
+
+#: libparted/arch/linux.c:1236
+#, c-format
+msgid ""
+"The device %s is so small that it cannot possibly store a file system or "
+"partition table. Perhaps you selected the wrong device?"
+msgstr ""
+"è£ç½® %s 太å°ï¼Œå› æ­¤å¯èƒ½ç„¡æ³•å„²å­˜æª”案系統或分割å€è¡¨ã€‚ 也許您é¸æ“‡äº†éŒ¯èª¤çš„è£ç½®ï¼Ÿ"
+
+#: libparted/arch/linux.c:1349
+#, c-format
+msgid ""
+"Unable to determine geometry of file/device %s. You should not use Parted "
+"unless you REALLY know what you're doing!"
+msgstr ""
+"無法決定檔案/è£ç½® %s 的幾何ä½ç½®ã€‚您ä¸æ‡‰ä½¿ç”¨ Parted 除éžæ‚¨çœŸçš„知é“在åšä»€éº¼ï¼"
+
+#: libparted/arch/linux.c:1409
+msgid "Generic SD/MMC Storage Card"
+msgstr "通用 SD/MMC 記憶å¡"
+
+#: libparted/arch/linux.c:1423
+msgid "NVMe Device"
+msgstr "NVMe è£ç½®"
+
+#: libparted/arch/linux.c:1484
+msgid "DAC960 RAID controller"
+msgstr "DAC960 RAID 控制器"
+
+#: libparted/arch/linux.c:1489
+msgid "Promise SX8 SATA Device"
+msgstr "Promise SX8 SATA è£ç½®"
+
+#: libparted/arch/linux.c:1494
+msgid "ATA over Ethernet Device"
+msgstr "乙太網路 ATA è£ç½®"
+
+#: libparted/arch/linux.c:1500
+msgid "IBM S390 DASD drive"
+msgstr "IBM S390 DASD ç£ç¢Ÿæ©Ÿ"
+
+#: libparted/arch/linux.c:1506
+msgid "IBM iSeries Virtual DASD"
+msgstr "IBM iSeries 虛擬 DASD"
+
+#: libparted/arch/linux.c:1511
+msgid "Compaq Smart Array"
+msgstr "Compaq 智慧型陣列"
+
+#: libparted/arch/linux.c:1521
+msgid "NVDIMM Device"
+msgstr "NVDIMM è£ç½®"
+
+#: libparted/arch/linux.c:1526
+msgid "ATARAID Controller"
+msgstr "ATARAID 控制器"
+
+#: libparted/arch/linux.c:1531
+msgid "I2O Controller"
+msgstr "I2O 控制器"
+
+#: libparted/arch/linux.c:1536
+msgid "User-Mode Linux UBD"
+msgstr "ä½¿ç”¨è€…æ¨¡å¼ Linux UBD"
+
+#: libparted/arch/linux.c:1546
+msgid "Loopback device"
+msgstr "è¿´è·¯è£ç½®"
+
+#: libparted/arch/linux.c:1554
+#, c-format
+msgid "Linux device-mapper (%s)"
+msgstr "Linux è£ç½®æ˜ å°„ç¨‹å¼ (%s)"
+
+#: libparted/arch/linux.c:1565
+msgid "Xen Virtual Block Device"
+msgstr "Xen 虛擬å€æ®µè£ç½®"
+
+#: libparted/arch/linux.c:1570
+msgid "Unknown"
+msgstr "ä¸æ˜Ž"
+
+#: libparted/arch/linux.c:1579
+msgid "Virtio Block Device"
+msgstr "Virtio å€å¡Šè£ç½®"
+
+#: libparted/arch/linux.c:1584
+msgid "Linux Software RAID Array"
+msgstr "Linux 軟體 RAID 陣列"
+
+#: libparted/arch/linux.c:1589
+msgid "RAM Drive"
+msgstr "RAM ç£ç¢Ÿæ©Ÿ"
+
+#: libparted/arch/linux.c:1596
+msgid "ped_device_new() Unsupported device type"
+msgstr "ped_device_new() ä¸æ”¯æ´çš„è£ç½®é¡žåž‹"
+
+#: libparted/arch/linux.c:1690 libparted/arch/linux.c:1775
+#, c-format
+msgid "Error fsyncing/closing %s: %s"
+msgstr "檔案åŒæ­¥/關閉 %s 時發生錯誤:%s"
+
+#: libparted/arch/linux.c:1949
+#, c-format
+msgid "%0.0send of file while reading %s"
+msgstr "%0.0s 出ç¾æª”案çµå°¾æ–¼è®€å– %s 時"
+
+#: libparted/arch/linux.c:2691
+#, c-format
+msgid ""
+"Error informing the kernel about modifications to partition %s -- %s. This "
+"means Linux won't know about any changes you made to %s until you reboot -- "
+"so you shouldn't mount it or use it in any way before rebooting."
+msgstr ""
+"é€šçŸ¥æ ¸å¿ƒé—œæ–¼åˆ†å‰²å€ %s -- %s 的修改時出錯。這æ„味著 Linux 在é‡æ–°å•Ÿå‹•ä¹‹å‰ç„¡æ³•çŸ¥"
+"é“您é‡å° %s 所作的任何修改 - 所以您也ä¸èƒ½åœ¨é‡æ–°å•Ÿå‹•ä¹‹å‰æŽ›è¼‰æˆ–以任何方å¼ä½¿ç”¨"
+"它。"
+
+#: libparted/arch/linux.c:2811
+#, c-format
+msgid "Unable to determine the start and length of %s."
+msgstr "無法決定 %s 的起點和長度。"
+
+#: libparted/arch/linux.c:3225
+#, c-format
+msgid ""
+"Partition(s) %s on %s have been written, but we have been unable to inform "
+"the kernel of the change, probably because it/they are in use. As a result, "
+"the old partition(s) will remain in use. You should reboot now before "
+"making further changes."
+msgstr ""
+"%2$s ä¸Šçš„åˆ†å‰²å€ %1$s 已被寫入,但是我們並無法將變更通報內核,或許是因為它/它"
+"們正在使用中,çµæžœé€ æˆç¹¼çºŒä½¿ç”¨èˆŠçš„分割å€ã€‚在進行進一步的變更之å‰ï¼Œæ‚¨æ‡‰è©²ç«‹åˆ»"
+"é‡æ–°é–‹æ©Ÿã€‚"
+
+#: libparted/cs/geom.c:163
+#, c-format
+msgid "Can't have the end before the start! (start sector=%jd length=%jd)"
+msgstr "終點ä¸å¯ä½æ–¼èµ·é»žä¹‹å‰ï¼(ç£å€èµ·é»ž=%jd 長度=%jd)"
+
+#: libparted/cs/geom.c:379
+#, c-format
+msgid "Attempt to write sectors %ld-%ld outside of partition on %s."
+msgstr "試圖寫入 %3$s 上分割å€ä¹‹å¤–çš„ç£å€ %1$ld-%2$ld。"
+
+#: libparted/cs/geom.c:419
+msgid "checking for bad blocks"
+msgstr "檢查壞å€å¡Š"
+
+#: libparted/debug.c:97
+#, c-format
+msgid "Backtrace has %d calls on stack:\n"
+msgstr "回溯å€æœ‰ %d 個呼å«é—œæ–¼å †ç–Šï¼š\n"
+
+#: libparted/debug.c:110
+#, c-format
+msgid "Assertion (%s) at %s:%d in function %s() failed."
+msgstr "判定 (%s) æ–¼ %s:%d åœ¨å‡½å¼ %s() 中失敗。"
+
+#: libparted/disk.c:194
+#, c-format
+msgid "%s: unrecognised disk label"
+msgstr "%s: 無法辨識的ç£ç¢Ÿæ¨™ç±¤"
+
+#: libparted/disk.c:487
+#, c-format
+msgid ""
+"This libparted doesn't have write support for %s. Perhaps it was compiled "
+"read-only."
+msgstr "這個 libparted ä¸æ”¯æ´å° %s 的寫入æ“作。也許它是以唯讀方å¼ç·¨è­¯ã€‚"
+
+#: libparted/disk.c:632
+#, c-format
+msgid "Partition %d is %s, but the file system is %s."
+msgstr "åˆ†å‰²å€ %d 大å°ç‚º %s,但檔案系統大å°ç‚º %s。"
+
+#: libparted/disk.c:841
+msgid "cylinder_alignment"
+msgstr "cylinder_alignment"
+
+#: libparted/disk.c:843
+msgid "pmbr_boot"
+msgstr "pmbr_boot"
+
+#: libparted/disk.c:848
+#, c-format
+msgid "Unknown disk flag, %d."
+msgstr "ä¸æ˜Žçš„ç£ç¢Ÿæ——標,%d。"
+
+#: libparted/disk.c:1320
+#, c-format
+msgid "%s disk labels do not support extended partitions."
+msgstr "%s ç£ç¢Ÿæ¨™ç±¤ä¸æ”¯æ´æ“´å……分割å€ã€‚"
+
+#: libparted/disk.c:1990
+#, c-format
+msgid "%s disk labels don't support logical or extended partitions."
+msgstr "%s ç£ç¢Ÿæ¨™ç±¤ä¸æ”¯æ´é‚輯或擴充分割å€ã€‚"
+
+#: libparted/disk.c:2003
+msgid "Too many primary partitions."
+msgstr "éŽå¤šçš„主分割å€ã€‚"
+
+#: libparted/disk.c:2012
+#, c-format
+msgid ""
+"Can't add a logical partition to %s, because there is no extended partition."
+msgstr "由於沒有擴充分割å€ï¼Œç„¡æ³•å°‡é‚輯分割å€æ–°å¢žåˆ° %s。"
+
+#: libparted/disk.c:2036
+#, c-format
+msgid "Can't have more than one extended partition on %s."
+msgstr "%s 上ä¸èƒ½å«æœ‰å¤šæ–¼ä¸€å€‹çš„擴充分割å€ã€‚"
+
+#: libparted/disk.c:2046
+msgid "Can't have logical partitions outside of the extended partition."
+msgstr "é‚輯分割å€ä¸èƒ½ä½æ–¼æ“´å……分割å€ä¹‹å¤–。"
+
+#: libparted/disk.c:2071
+#, c-format
+msgid "Can't have a logical partition outside of the extended partition on %s."
+msgstr "%s 上的é‚輯分割å€ä¸èƒ½ä½æ–¼æ“´å……分割å€ä¹‹å¤–。"
+
+#: libparted/disk.c:2081
+msgid "Can't have a primary partition inside an extended partition."
+msgstr "擴充分割å€ä¸­ä¸èƒ½å«æœ‰ä¸»åˆ†å‰²å€ã€‚"
+
+#: libparted/disk.c:2090
+msgid "Can't have a partition outside the disk!"
+msgstr "無法讓分割å€è¶…出ç£ç¢Ÿï¼"
+
+#: libparted/disk.c:2141 libparted/disk.c:2319
+msgid "Can't have overlapping partitions."
+msgstr "分割å€ä¸èƒ½é‡ç–Šã€‚"
+
+#: libparted/disk.c:2520
+msgid "metadata"
+msgstr "中繼資料"
+
+#: libparted/disk.c:2522
+msgid "free"
+msgstr "自由空間"
+
+#: libparted/disk.c:2524 parted/ui.c:1274 parted/ui.c:1302
+msgid "extended"
+msgstr "擴充分割å€"
+
+#: libparted/disk.c:2526 parted/ui.c:1278 parted/ui.c:1306
+msgid "logical"
+msgstr "é‚輯分割å€"
+
+#: libparted/disk.c:2528 parted/ui.c:1270 parted/ui.c:1298
+msgid "primary"
+msgstr "主分割å€"
+
+#: libparted/disk.c:2544
+msgid "boot"
+msgstr "å•Ÿå‹•"
+
+#: libparted/disk.c:2546
+msgid "bios_grub"
+msgstr "bios_grub"
+
+#: libparted/disk.c:2548
+msgid "root"
+msgstr "æ ¹"
+
+#: libparted/disk.c:2550
+msgid "swap"
+msgstr "交æ›åˆ†å‰²å€"
+
+#: libparted/disk.c:2552
+msgid "hidden"
+msgstr "éš±è—分割å€"
+
+#: libparted/disk.c:2554
+msgid "raid"
+msgstr "raid"
+
+#: libparted/disk.c:2556
+msgid "lvm"
+msgstr "lvm"
+
+#: libparted/disk.c:2558
+msgid "lba"
+msgstr "lba"
+
+#: libparted/disk.c:2560
+msgid "hp-service"
+msgstr "hp-æœå‹™"
+
+#: libparted/disk.c:2562
+msgid "palo"
+msgstr "palo"
+
+#: libparted/disk.c:2564
+msgid "prep"
+msgstr "prep"
+
+#: libparted/disk.c:2566
+msgid "msftres"
+msgstr "msftres"
+
+#: libparted/disk.c:2568
+msgid "msftdata"
+msgstr "msftdata"
+
+#: libparted/disk.c:2570
+msgid "atvrecv"
+msgstr "atvrecv"
+
+#: libparted/disk.c:2572
+msgid "diag"
+msgstr "diag"
+
+#: libparted/disk.c:2574
+msgid "legacy_boot"
+msgstr "legacy_boot"
+
+#: libparted/disk.c:2576
+msgid "irst"
+msgstr "irst"
+
+#: libparted/disk.c:2578
+msgid "esp"
+msgstr "esp"
+
+#: libparted/disk.c:2580
+msgid "chromeos_kernel"
+msgstr "chromeos_kernel"
+
+#: libparted/disk.c:2582
+msgid "bls_boot"
+msgstr "bls_boot"
+
+#: libparted/disk.c:2584
+msgid "linux-home"
+msgstr "linux-home"
+
+#: libparted/disk.c:2586
+msgid "no_automount"
+msgstr ""
+
+#: libparted/disk.c:2592
+#, c-format
+msgid "Unknown partition flag, %d."
+msgstr "ä¸æ˜Žçš„分割å€æ——標,%d。"
+
+#: libparted/exception.c:79
+msgid "Information"
+msgstr "資訊"
+
+#: libparted/exception.c:80
+msgid "Warning"
+msgstr "警告"
+
+#: libparted/exception.c:81
+msgid "Error"
+msgstr "錯誤"
+
+#: libparted/exception.c:82
+msgid "Fatal"
+msgstr "致命錯誤"
+
+#: libparted/exception.c:83
+msgid "Bug"
+msgstr "臭蟲"
+
+#: libparted/exception.c:84
+msgid "No Implementation"
+msgstr "未實作"
+
+#: libparted/exception.c:88
+msgid "Fix"
+msgstr "修正"
+
+#: libparted/exception.c:89
+msgid "Yes"
+msgstr "是"
+
+#: libparted/exception.c:90
+msgid "No"
+msgstr "å¦"
+
+#: libparted/exception.c:91
+msgid "OK"
+msgstr "確èª"
+
+#: libparted/exception.c:92
+msgid "Retry"
+msgstr "é‡è©¦"
+
+#: libparted/exception.c:93
+msgid "Ignore"
+msgstr "忽略"
+
+#: libparted/exception.c:94
+msgid "Cancel"
+msgstr "å–消"
+
+#: libparted/exception.c:134
+#, c-format
+msgid ""
+"A bug has been detected in GNU Parted. Refer to the web site of parted "
+"http://www.gnu.org/software/parted/parted.html for more information of what "
+"could be useful for bug submitting! Please email a bug report to %s "
+"containing at least the version (%s) and the following message: "
+msgstr ""
+"ç™¼ç¾ GNU Parted 中的程å¼éŒ¯èª¤ã€‚åƒç…§ parted çš„ç¶²å€ http://www.gnu.org/software/"
+"parted/parted.html 以ç²å¾—更多有關æ交錯誤報告的有用資訊ï¼è«‹ç™¼é€çµ¦ %s 至少å«æœ‰"
+"版本 (%s) 和以下資訊的錯誤報告: "
+
+#: libparted/labels/aix.c:92
+msgid "Support for reading AIX disk labels is is not implemented yet."
+msgstr "尚未實作支æ´è®€å– AIX ç£ç¢Ÿæ¨™ç±¤ã€‚"
+
+#: libparted/labels/aix.c:103
+msgid "Support for writing AIX disk labels is is not implemented yet."
+msgstr "尚未實作支æ´å¯«å…¥ AIX ç£ç¢Ÿæ¨™ç±¤ã€‚"
+
+#: libparted/labels/aix.c:116
+msgid ""
+"Support for adding partitions to AIX disk labels is not implemented yet."
+msgstr "尚未實作支æ´åŠ å…¥åˆ†å‰²å€åˆ° AIX ç£ç¢Ÿæ¨™ç±¤ã€‚"
+
+#: libparted/labels/aix.c:126
+msgid ""
+"Support for duplicating partitions in AIX disk labels is not implemented yet."
+msgstr "尚未實作支æ´åœ¨ AIX ç£ç¢Ÿæ¨™ç±¤ä¸­é‡è£½åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/aix.c:144
+msgid ""
+"Support for setting system type of partitions in AIX disk labels is not "
+"implemented yet."
+msgstr "尚未實作支æ´åœ¨ AIX ç£ç¢Ÿæ¨™ç±¤ä¸­è¨­å®šåˆ†å‰²å€çš„系統類型。"
+
+#: libparted/labels/aix.c:154
+msgid "Support for setting flags in AIX disk labels is not implemented yet."
+msgstr "尚未實作支æ´åœ¨ AIX ç£ç¢Ÿæ¨™ç±¤ä¸­è¨­å®šæ——標。"
+
+#: libparted/labels/atari.c:278
+#, c-format
+msgid ""
+"Can't use Atari partition tables on disks with a sector size not equal to %d "
+"bytes."
+msgstr "無法在ç£å€å¤§å°ä¸ç­‰æ–¼ %d ä½å…ƒçµ„çš„ç£ç¢Ÿä¸Šä½¿ç”¨ Atari 分割表。"
+
+#: libparted/labels/atari.c:290
+#, c-format
+msgid "Can't use Atari partition tables on disks with more than %d sectors."
+msgstr "無法在多於 %d 個ç£å€çš„ç£ç¢Ÿä¸Šä½¿ç”¨ Atari 分割表。"
+
+#: libparted/labels/atari.c:403
+msgid ""
+"Too many Atari partitions detected. Maybe there is a loop in the XGM linked "
+"list. Aborting."
+msgstr "åµæ¸¬åˆ°éŽå¤š Atari 分割å€ã€‚有å¯èƒ½æ˜¯å› ç‚º XGM éˆçµä¸²åˆ—中發生循環。中止。"
+
+#: libparted/labels/atari.c:601
+#, c-format
+msgid "No data partition found in the ARS at sector %lli."
+msgstr "在ä½æ–¼ %lli ç£å€çš„ ARS 中,找ä¸åˆ°è³‡æ–™åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/atari.c:622
+#, c-format
+msgid ""
+"The entry of the next logical ARS is not of type XGM in ARS at sector %lli."
+msgstr "在ä½æ–¼ %lli ç£å€çš„ ARS 中,下一個é‚輯 ARS 的項目,類型ä¸å±¬æ–¼ XGM。"
+
+#: libparted/labels/atari.c:653
+#, c-format
+msgid ""
+"There doesn't seem to be an Atari partition table on this disk (%s), or it "
+"is corrupted."
+msgstr "本ç£ç¢Ÿ (%s) 似乎沒有 Atari 分割表,或是分割表æ壞。"
+
+#: libparted/labels/atari.c:883
+#, c-format
+msgid "No room at sector %lli to store ARS of logical partition %d."
+msgstr "%lli ç£å€æ²’有空間儲存é‚è¼¯åˆ†å‰²å€ %d çš„ ARS。"
+
+#: libparted/labels/atari.c:890
+#, c-format
+msgid "No room at sector %lli to store ARS."
+msgstr "%lli ç£å€æ²’有空間儲存 ARS。"
+
+#: libparted/labels/atari.c:967
+msgid ""
+"The sector count that is stored in the partition table does not correspond "
+"to the size of your device. Do you want to fix the partition table?"
+msgstr "儲存在分割表的ç£å€æ•¸ï¼Œæœªå°æ‡‰åˆ°æ‚¨è£ç½®çš„空間。是å¦è¦ä¿®æ­£åˆ†å‰²è¡¨ï¼Ÿ"
+
+#: libparted/labels/atari.c:1008
+#, c-format
+msgid "No room at sector %lli to store BSL."
+msgstr "%lli ç£å€æ²’有空間儲存 BSL。"
+
+#: libparted/labels/atari.c:1116
+msgid "There were remaining partitions after filling the main AHDI table."
+msgstr "填充主 AHDI 表後,ä»æœ‰å‰©é¤˜åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/atari.c:1135
+msgid ""
+"The main AHDI table has been filled with all partitions but the ICD table is "
+"not empty so more partitions of unknown size and position will be detected "
+"by ICD compatible software. Do you want to invalidate the ICD table?"
+msgstr ""
+"主 AHDI 表已經用所有分割å€å¡«å……,但 ICD 表有資料,因此更多有未知大å°æˆ–ä½ç½®çš„分"
+"割å€ï¼Œæœƒè¢«ç›¸å®¹ ICD 的軟體åµæ¸¬åˆ°ã€‚是å¦è¦ä½¿ ICD 表失效?"
+
+#: libparted/labels/atari.c:1169
+msgid "ICD entries can't contain extended or logical partitions."
+msgstr "ICD 項目無法包å«æ“´å……或é‚輯分割å€ã€‚"
+
+#: libparted/labels/atari.c:1191
+msgid "There were remaining partitions after filling the tables."
+msgstr "填充分割表後,ä»æœ‰å‰©é¤˜åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/atari.c:1231
+#, c-format
+msgid ""
+"You can't use an extended XGM partition in ICD mode (more than %d primary "
+"partitions, if XGM is the first one it counts for two)."
+msgstr ""
+"您無法在 ICD 模å¼ï¼ˆå¤šæ–¼ %d 個主分割å€ï¼›å¦‚æžœ XGM 是第一分割å€ï¼Œå‰‡ç®— 2 個分割"
+"å€ï¼‰ä½¿ç”¨æ“´å…… XGM 分割å€"
+
+#: libparted/labels/atari.c:1662 libparted/labels/bsd.c:563
+#: libparted/labels/dasd.c:893 libparted/labels/dos.c:2294
+#: libparted/labels/dvh.c:770 libparted/labels/gpt.c:1891
+#: libparted/labels/loop.c:244 libparted/labels/mac.c:1409
+#: libparted/labels/pc98.c:697 libparted/labels/rdb.c:1054
+#: libparted/labels/sun.c:781
+msgid "Unable to satisfy all constraints on the partition."
+msgstr "無法滿足分割å€çš„所有é™åˆ¶ã€‚"
+
+#: libparted/labels/atari.c:1762
+#, c-format
+msgid ""
+"You can't use more than %d primary partitions (ICD mode) if you use an "
+"extended XGM partition. If XGM is the first partition it counts for two."
+msgstr ""
+"您若使用擴充 XGM 分割å€ï¼Œå°±ç„¡æ³•ä½¿ç”¨ %d 個以上的主分割å€ï¼ˆICD 模å¼ï¼‰ã€‚如果 "
+"XGM 是第一個分割å€ï¼Œå‰‡ç®—æˆ 2 個。"
+
+#: libparted/labels/atari.c:1828 libparted/labels/rdb.c:1082
+msgid "Unable to allocate a partition number."
+msgstr "無法定ä½åˆ†å‰²å€ç·¨è™Ÿã€‚"
+
+#: libparted/labels/bsd.c:588
+msgid "Unable to allocate a bsd disklabel slot."
+msgstr "ç„¡æ³•å®šä½ bsd ç£ç¢Ÿæ¨™ç±¤æ§½ã€‚"
+
+#: libparted/labels/dasd.c:634
+msgid "The partition table of DASD-LDL device cannot be changed.\n"
+msgstr "ä¸èƒ½æ›´æ”¹ DASD-LDL è£ç½®çš„分割表。\n"
+
+#: libparted/labels/dasd.c:919
+msgid "Unable to allocate a dasd disklabel slot"
+msgstr "無法é…ç½® dasd ç£ç¢Ÿæ¨™ç±¤æ§½"
+
+#: libparted/labels/dos.c:1159
+#, c-format
+msgid "Invalid partition table on %s -- wrong signature %x."
+msgstr "%s 上的分割å€è¡¨ç„¡æ•ˆ - 錯誤的簽å %x。"
+
+#: libparted/labels/dos.c:1187
+#, c-format
+msgid "Invalid partition table - recursive partition on %s."
+msgstr "無效的分割å€è¡¨ - %s 出ç¾éžè¿´åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/dos.c:2276
+msgid "Parted can't resize partitions managed by Windows Dynamic Disk."
+msgstr "Parted 無法改變由「視窗動態ç£ç¢Ÿã€æ‰€ç®¡ç†çš„分割å€å¤§å°ã€‚"
+
+#: libparted/labels/dos.c:2532
+msgid "cannot create any more partitions"
+msgstr "無法å†å»ºç«‹ä»»ä½•åˆ†å‰²å€"
+
+#: libparted/labels/dvh.c:183
+#, c-format
+msgid "%s has no extended partition (volume header partition)."
+msgstr "%s æ²’æœ‰æ“´å……åˆ†å‰²å€ (å·é ­åˆ†å‰²å€)。"
+
+#: libparted/labels/dvh.c:309
+msgid "Checksum is wrong, indicating the partition table is corrupt."
+msgstr "總和檢查錯誤,標明分割å€è¡¨å·²æ壞。"
+
+#: libparted/labels/dvh.c:614
+msgid "Only primary partitions can be root partitions."
+msgstr "åªæœ‰ä¸»åˆ†å‰²å€å¯ä»¥åšç‚ºæ ¹åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/dvh.c:628
+msgid "Only primary partitions can be swap partitions."
+msgstr "åªæœ‰ä¸»åˆ†å‰²å€å¯ä»¥æ˜¯äº¤æ›åˆ†å‰²å€ã€‚"
+
+#: libparted/labels/dvh.c:642
+msgid "Only logical partitions can be a boot file."
+msgstr "åªæœ‰é‚輯分割å€å¯ä»¥æ˜¯å€‹é–‹æ©Ÿæª”案。"
+
+#: libparted/labels/dvh.c:719
+#, c-format
+msgid ""
+"failed to set dvh partition name to %s:\n"
+"Only logical partitions (boot files) have a name."
+msgstr ""
+"設定 dvh 分割å稱為 %s 時失敗:\n"
+"åªæœ‰é‚è¼¯åˆ†å‰²å€ (開機檔案) æ“有å稱。"
+
+#: libparted/labels/dvh.c:812
+msgid "Too many primary partitions"
+msgstr "éŽå¤šçš„主分割å€"
+
+#: libparted/labels/fdasd.c:136
+msgid "open error"
+msgstr "開啟錯誤"
+
+#: libparted/labels/fdasd.c:139
+msgid "seek error"
+msgstr "尋找錯誤"
+
+#: libparted/labels/fdasd.c:142
+msgid "read error"
+msgstr "讀å–錯誤"
+
+#: libparted/labels/fdasd.c:148
+msgid "ioctl() error"
+msgstr "ioctl() 錯誤"
+
+#: libparted/labels/fdasd.c:152
+msgid "API version mismatch"
+msgstr "API 版本ä¸ç¬¦"
+
+#: libparted/labels/fdasd.c:156
+msgid "Unsupported disk type"
+msgstr "ä¸æ”¯æ´çš„ç£ç¢Ÿåž‹æ…‹"
+
+#: libparted/labels/fdasd.c:160
+msgid "Unsupported disk format"
+msgstr "ä¸æ”¯æ´çš„ç£ç¢Ÿæ ¼å¼"
+
+#: libparted/labels/fdasd.c:164
+msgid "Disk is in use"
+msgstr "ç£ç¢Ÿç‚ºæ­£åœ¨ä½¿ç”¨ä¸­"
+
+#: libparted/labels/fdasd.c:168
+msgid "Syntax error in config file"
+msgstr "組é…檔案中語法錯誤"
+
+#: libparted/labels/fdasd.c:172
+msgid "Volume label is corrupted"
+msgstr "ç£ç¢Ÿå€æ¨™ç±¤å·²æ壞"
+
+#: libparted/labels/fdasd.c:176
+msgid "A data set name is corrupted"
+msgstr "資料集å稱已æ壞"
+
+#: libparted/labels/fdasd.c:180
+msgid "Memory allocation failed"
+msgstr "記憶體é…置失敗"
+
+#: libparted/labels/fdasd.c:184
+msgid "Device verification failed"
+msgstr "è£ç½®æŸ¥æ ¸å¤±æ•—"
+
+#: libparted/labels/fdasd.c:185
+msgid "The specified device is not a valid DASD device"
+msgstr "指定è£ç½®ä¸¦éžæœ‰æ•ˆçš„ DASD è£ç½®"
+
+#: libparted/labels/fdasd.c:188
+msgid "VOLSER not found on device"
+msgstr "è£ç½®ä¸Šæ‰¾ä¸åˆ° VOLSER"
+
+#: libparted/labels/fdasd.c:191 libparted/labels/vtoc.c:179
+msgid "Fatal error"
+msgstr "åš´é‡éŒ¯èª¤"
+
+#: libparted/labels/fdasd.c:243
+msgid "No room for volume label."
+msgstr "沒有空間å¯ç”¨æ–¼ç£ç¢Ÿå€æ¨™ç±¤ã€‚"
+
+#: libparted/labels/fdasd.c:251
+msgid "No room for partition info."
+msgstr "沒有空間å¯ç”¨æ–¼åˆ†å‰²å€è³‡è¨Šã€‚"
+
+#: libparted/labels/fdasd.c:828
+msgid "Invalid VTOC."
+msgstr "無效的 VTOC。"
+
+#: libparted/labels/fdasd.c:912
+msgid "Could not retrieve API version."
+msgstr "無法å–回 API 版本。"
+
+#: libparted/labels/fdasd.c:915
+#, c-format
+msgid ""
+"The current API version '%d' doesn't match dasd driver API version '%d'!"
+msgstr "ç›®å‰çš„ API 版本「%dã€ä¸å»åˆ dasd é©…å‹•ç¨‹å¼ API 版本「%dã€ï¼"
+
+#: libparted/labels/fdasd.c:1020
+msgid "Could not retrieve disk size."
+msgstr "無法å–回ç£ç¢Ÿå¤§å°ã€‚"
+
+#: libparted/labels/fdasd.c:1029
+msgid "Could not retrieve disk geometry information."
+msgstr "無法å–回ç£ç¢Ÿå¹¾ä½•ä½ç½®è³‡è¨Šã€‚"
+
+#: libparted/labels/fdasd.c:1035
+msgid "Could not retrieve blocksize information."
+msgstr "無法å–回å€å¡Šå¤§å°è³‡è¨Šã€‚"
+
+#: libparted/labels/fdasd.c:1045
+msgid "Disk geometry does not match a DASD device of type 3390."
+msgstr "ç£ç¢Ÿç‰ˆé¢ä¸ç¬¦ 3390 é¡žåž‹çš„ DASD è£ç½®ã€‚"
+
+#: libparted/labels/gpt.c:589
+msgid "device is too small for GPT"
+msgstr "è£ç½®å¤ªå°ä¸é©ç”¨ GPT"
+
+#: libparted/labels/gpt.c:791
+#, c-format
+msgid ""
+"The format of the GPT partition table is version %x, which is newer than "
+"what Parted can recognise. Please report this!"
+msgstr ""
+"GPT 分割å€è¡¨çš„æ ¼å¼ç‰ˆæœ¬ç‚º %x,它比 Parted 所能辨識的版本è¦æ–°ã€‚請回報這個狀æ³ï¼"
+
+#: libparted/labels/gpt.c:827
+#, c-format
+msgid ""
+"Not all of the space available to %s appears to be used, you can fix the GPT "
+"to use all of the space (an extra %llu blocks) or continue with the current "
+"setting? "
+msgstr ""
+"並éžä½¿ç”¨äº†æ‰€æœ‰å¯ç”¨æ–¼ %s 的空間,您å¯ä»¥ä¿®æ­£ GPT 以使用所有的空間 (é¡å¤–çš„ %llu "
+"å€å¡Š),或是繼續使用目å‰çš„設定?"
+
+#: libparted/labels/gpt.c:1026
+msgid ""
+"The backup GPT table is not at the end of the disk, as it should be. Fix, "
+"by moving the backup to the end (and removing the old backup)?"
+msgstr ""
+"備份 GPT 表ä¸åƒæ‡‰è©²çš„那樣出ç¾åœ¨ç£ç¢Ÿçš„末尾。經由將備份移動到末尾 (並刪除舊備"
+"份) 來修正它?"
+
+#: libparted/labels/gpt.c:1044
+msgid ""
+"Both the primary and backup GPT tables are corrupt. Try making a fresh "
+"table, and using Parted's rescue feature to recover partitions."
+msgstr ""
+"主 GPT 和備份 GPT 都æ壞了。ç¾åœ¨è©¦åœ–建立新表,並使用 Parted 的回覆功能以é‡å»º"
+"分割å€è¡¨ã€‚"
+
+#: libparted/labels/gpt.c:1055
+msgid ""
+"The backup GPT table is corrupt, but the primary appears OK, so that will be "
+"used."
+msgstr "GPT 備份表æ壞,但是主表似乎是正確的,所以將會使用它。"
+
+#: libparted/labels/gpt.c:1067
+msgid ""
+"The primary GPT table is corrupt, but the backup appears OK, so that will be "
+"used."
+msgstr "主 GPT 表æ壞,但備份似乎是正確的,所以將會使用它。"
+
+#: libparted/labels/gpt.c:1091
+msgid "primary partition table array CRC mismatch"
+msgstr "主分割表的陣列循環冗餘檢查ä¸ç¬¦åˆ"
+
+#: libparted/labels/gpt.c:1722 libparted/labels/gpt.c:1749
+msgid "failed to translate partition name"
+msgstr "無法翻譯分割å€å稱。"
+
+#: libparted/labels/mac.c:185
+#, c-format
+msgid "Invalid signature %x for Mac disk labels."
+msgstr "無效的 Mac ç£ç¢Ÿæ¨™ç±¤ç°½å %x。"
+
+#: libparted/labels/mac.c:232
+msgid "Partition map has no partition map entry!"
+msgstr "分割å€æ˜ å°„ä¸å«æœ‰åˆ†å‰²å€æ˜ å°„æ¢ç›®ï¼"
+
+#: libparted/labels/mac.c:280
+#, c-format
+msgid "%s is too small for a Mac disk label!"
+msgstr "%s å° Mac ç£ç¢Ÿæ¨™ç±¤ä¾†èªªå¤ªå°äº†ï¼"
+
+#: libparted/labels/mac.c:507
+#, c-format
+msgid "Partition %d has an invalid signature %x."
+msgstr "åˆ†å‰²å€ %d å«æœ‰ç„¡æ•ˆçš„ç°½å %x。"
+
+#: libparted/labels/mac.c:524
+#, c-format
+msgid "Partition %d has an invalid length of 0 bytes!"
+msgstr "åˆ†å‰²å€ %d å«æœ‰ç„¡æ•ˆçš„長度 0 ä½å…ƒçµ„ï¼"
+
+#: libparted/labels/mac.c:555
+msgid "The data region doesn't start at the start of the partition."
+msgstr "資料å€ä¸¦æœªå¾žåˆ†å‰²å€çš„起點開始。"
+
+#: libparted/labels/mac.c:572
+msgid "The partition's boot region doesn't occupy the entire partition."
+msgstr "分割å€çš„å•Ÿå‹•å€åŸŸä¸¦æœªä½”用整個分割å€ã€‚"
+
+#: libparted/labels/mac.c:583
+msgid "The partition's data region doesn't occupy the entire partition."
+msgstr "分割å€çš„資料å€åŸŸä¸¦æœªä½”用整個分割å€ã€‚"
+
+#: libparted/labels/mac.c:635
+#, c-format
+msgid ""
+"Weird block size on device descriptor: %d bytes is not divisible by 512."
+msgstr "è£ç½®æ述中出ç¾æ€ªç•°çš„å€å¡Šå¤§å°ï¼š%d ä½å…ƒçµ„ä¸èƒ½è¢« 512 整除。"
+
+#: libparted/labels/mac.c:648
+#, c-format
+msgid ""
+"The driver descriptor says the physical block size is %d bytes, but Linux "
+"says it is %d bytes."
+msgstr "ç£ç¢Ÿæ述表明物ç†å€å¡Šå¤§å°ç‚º %d ä½å…ƒçµ„,但 Linux èªç‚ºå®ƒæ˜¯ %d ä½å…ƒçµ„。"
+
+#: libparted/labels/mac.c:701
+msgid "No valid partition map found."
+msgstr "找ä¸åˆ°æœ‰æ•ˆçš„分割å€æ˜ å°„。"
+
+#: libparted/labels/mac.c:775
+#, c-format
+msgid ""
+"Conflicting partition map entry sizes! Entry 1 says it is %d, but entry %d "
+"says it is %d!"
+msgstr "分割å€æ˜ å°„æ¢ç›®å¤§å°ç™¼ç”Ÿè¡çªï¼æ¢ç›® 1 說它是 %d,但æ¢ç›® %d 說它是 %dï¼"
+
+#: libparted/labels/mac.c:806
+msgid "Weird! There are 2 partitions map entries!"
+msgstr "奇怪ï¼å…©å€‹åˆ†å‰²å€æ˜ å°„æ¢ç›®ï¼"
+
+#: libparted/labels/mac.c:1345
+msgid ""
+"Changing the name of a root or swap partition will prevent Linux from "
+"recognising it as such."
+msgstr "改變根分割å€æˆ–交æ›åˆ†å‰²å€çš„å稱將導致 Linux 無法辨識它。"
+
+#: libparted/labels/mac.c:1444
+msgid "Can't add another partition -- the partition map is too small!"
+msgstr "無法新增å¦ä¸€å€‹åˆ†å‰²å€ -- 分割å€æ˜ å°„éŽå°ï¼"
+
+#: libparted/labels/pc98.c:285
+#, c-format
+msgid "Invalid partition table on %s."
+msgstr "%s 的分割å€è¡¨ç„¡æ•ˆã€‚"
+
+#: libparted/labels/pc98.c:338 libparted/labels/pc98.c:416
+#, c-format
+msgid ""
+"Partition %d isn't aligned to cylinder boundaries. This is still "
+"unsupported."
+msgstr "åˆ†å‰²å€ %d 並未å°é½Šåˆ°ç£æŸ±é‚Šç•Œã€‚此功能ä»ç„¶å°šæœªè¢«æ”¯æ´ã€‚"
+
+#: libparted/labels/pc98.c:729
+msgid "Can't add another partition."
+msgstr "無法新增其它分割å€ã€‚"
+
+#: libparted/labels/pt-tools.c:134
+#, c-format
+msgid ""
+"partition length of %jd sectors exceeds the %s-partition-table-imposed "
+"maximum of %jd"
+msgstr ""
+"分割å€çš„ %1$jd ç£å€é•·åº¦è¶…出 %3$jd çš„ %2$s-partition-table-imposed 最大值"
+
+#: libparted/labels/pt-tools.c:147
+#, c-format
+msgid ""
+"starting sector number, %jd exceeds the %s-partition-table-imposed maximum "
+"of %jd"
+msgstr "ç£å€èµ·é»žç·¨è™Ÿ %1$jd 超出 %3$jd çš„ %2$s-partition-table-imposed 最大值"
+
+#: libparted/labels/rdb.c:170
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s."
+msgstr "%s:å€å¡Š %llu çš„é¡žåž‹ %s 有ä¸ç•¶çš„總和檢查值。"
+
+#: libparted/labels/rdb.c:486
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen."
+msgstr "%s:無法找到 rdb å€å¡Šï¼Œé€™ä¸æ‡‰è©²ç™¼ç”Ÿã€‚"
+
+#: libparted/labels/rdb.c:575
+#, c-format
+msgid "%s : Loop detected at block %d."
+msgstr "%s:於å€å¡Š %d åµæ¸¬åˆ°è¿´åœˆã€‚"
+
+#: libparted/labels/rdb.c:594
+#, c-format
+msgid "%s : The %s list seems bad at block %s."
+msgstr "%1$s:å€å¡Š %3$s 處似有ä¸ç•¶ %2$s 列表。"
+
+#: libparted/labels/rdb.c:693
+#, c-format
+msgid "%s : Failed to list bad blocks."
+msgstr "%s:列舉ä¸ç•¶å€å¡Šæ™‚失敗。"
+
+#: libparted/labels/rdb.c:701
+#, c-format
+msgid "%s : Failed to list partition blocks."
+msgstr "%s:列舉分割å€å€å¡Šæ™‚失敗。"
+
+#: libparted/labels/rdb.c:709
+#, c-format
+msgid "%s : Failed to list file system blocks."
+msgstr "%s:列舉檔案系統å€å¡Šæ™‚失敗。"
+
+#: libparted/labels/rdb.c:717
+#, c-format
+msgid "%s : Failed to list boot blocks."
+msgstr "%s:列舉開機å€å¡Šæ™‚失敗。"
+
+#: libparted/labels/rdb.c:744
+#, c-format
+msgid "Failed to write partition block at %d."
+msgstr "寫入分割å€å€å¡Š %d 時失敗。"
+
+#: libparted/labels/sun.c:162
+msgid "Corrupted Sun disk label detected."
+msgstr "åµæ¸¬åˆ°æ壞的 Sun ç£ç¢Ÿæ¨™ç±¤ã€‚"
+
+#: libparted/labels/sun.c:277
+#, c-format
+msgid ""
+"The disk CHS geometry (%d,%d,%d) reported by the operating system does not "
+"match the geometry stored on the disk label (%d,%d,%d)."
+msgstr ""
+"由作業系統回報的ç£ç¢Ÿ CHS 幾何çµæ§‹ (%d,%d,%d) 與儲存在ç£ç¢Ÿæ¨™ç±¤ä¸­çš„幾何çµæ§‹ "
+"(%d,%d,%d) ä¸ç¬¦åˆã€‚"
+
+#: libparted/labels/sun.c:299
+#, c-format
+msgid "The disk label describes a disk bigger than %s."
+msgstr "ç£ç¢Ÿæ¨™ç±¤æè¿°çš„ç£ç¢Ÿå¤§æ–¼ %s。"
+
+#: libparted/labels/sun.c:474
+#, c-format
+msgid "The disk has %d cylinders, which is greater than the maximum of 65536."
+msgstr "該ç£ç¢Ÿå…·æœ‰ %d 圈ç£æŸ±ï¼Œå·²è¶…éŽ 65536 的最大é™åˆ¶ã€‚"
+
+#: libparted/labels/sun.c:813
+msgid ""
+"The Whole Disk partition is the only available one left. Generally, it is "
+"not a good idea to overwrite this partition with a real one. Solaris may "
+"not be able to boot without it, and SILO (the sparc boot loader) appreciates "
+"it as well."
+msgstr ""
+"整個ç£ç¢Ÿåˆ†å‰²å€æ˜¯æƒŸä¸€é‚„留下的å¯ç”¨å€å¡Šã€‚一般而言,以真實的å€å¡Šä¾†è¦†å¯«é€™å¡Šåˆ†å‰²å€"
+"並ä¸æ˜¯å€‹å¥½ä¸»æ„。沒有了它,Solaris 也許就無法開機,並且 SILO (sparc 開機載入程"
+"å¼) 也會因此而感激的。"
+
+#: libparted/labels/sun.c:828
+msgid "Sun disk label is full."
+msgstr "Sun ç£ç¢Ÿæ¨™ç±¤å·²æ»¿ã€‚"
+
+#: libparted/labels/vtoc.c:164
+msgid "opening of device failed"
+msgstr "è£ç½®é–‹å•Ÿæ™‚失敗"
+
+#: libparted/labels/vtoc.c:168
+msgid "seeking on device failed"
+msgstr "è£ç½®å°‹æ‰¾æ™‚失敗"
+
+#: libparted/labels/vtoc.c:172
+msgid "writing to device failed"
+msgstr "è£ç½®å¯«å…¥æ™‚失敗"
+
+#: libparted/labels/vtoc.c:176
+msgid "reading from device failed"
+msgstr "從è£ç½®è®€å–時失敗"
+
+#: libparted/labels/vtoc.c:371 libparted/labels/vtoc.c:378
+#: libparted/labels/vtoc.c:399 libparted/labels/vtoc.c:406
+msgid "Could not read volume label."
+msgstr "無法讀å–ç£ç¢Ÿå€æ¨™ç±¤ã€‚"
+
+#: libparted/labels/vtoc.c:426 libparted/labels/vtoc.c:431
+msgid "Could not write volume label."
+msgstr "無法寫入ç£ç¢Ÿå€æ¨™ç±¤ã€‚"
+
+#: libparted/labels/vtoc.c:537
+msgid "Could not read VTOC labels."
+msgstr "ç„¡æ³•è®€å– VTOC 標籤。"
+
+#: libparted/labels/vtoc.c:543
+msgid "Could not read VTOC FMT1 DSCB."
+msgstr "ç„¡æ³•è®€å– VTOC FMT1 DSCB。"
+
+#: libparted/labels/vtoc.c:550
+msgid "Could not read VTOC FMT4 DSCB."
+msgstr "ç„¡æ³•è®€å– VTOC FMT4 DSCB。"
+
+#: libparted/labels/vtoc.c:557
+msgid "Could not read VTOC FMT5 DSCB."
+msgstr "ç„¡æ³•è®€å– VTOC FMT5 DSCB。"
+
+#: libparted/labels/vtoc.c:564
+msgid "Could not read VTOC FMT7 DSCB."
+msgstr "ç„¡æ³•è®€å– VTOC FMT7 DSCB。"
+
+#: libparted/labels/vtoc.c:585
+msgid "Could not write VTOC labels."
+msgstr "無法寫入 VTOC 標籤。"
+
+#: libparted/labels/vtoc.c:591
+msgid "Could not write VTOC FMT1 DSCB."
+msgstr "無法寫入 VTOC FMT1 DSCB。"
+
+#: libparted/labels/vtoc.c:598
+msgid "Could not write VTOC FMT4 DSCB."
+msgstr "無法寫入 VTOC FMT4 DSCB。"
+
+#: libparted/labels/vtoc.c:605
+msgid "Could not write VTOC FMT5 DSCB."
+msgstr "無法寫入 VTOC FMT5 DSCB。"
+
+#: libparted/labels/vtoc.c:612
+msgid "Could not write VTOC FMT7 DSCB."
+msgstr "無法寫入 VTOC FMT7 DSCB。"
+
+#: libparted/labels/vtoc.c:622
+msgid "Could not write VTOC FMT9 DSCB."
+msgstr "無法寫入 VTOC FMT9 DSCB。"
+
+#: libparted/libparted.c:247
+msgid "Out of memory."
+msgstr "記憶體耗盡。"
+
+#: libparted/unit.c:140
+msgid "Cannot get unit size for special unit 'COMPACT'."
+msgstr "無法ç²å¾—特殊單ä½ã€ŒCOMPACTã€æ‰€ç”¨çš„大å°ã€‚"
+
+#: libparted/unit.c:386
+#, c-format
+msgid "\"%s\" has invalid syntax for locations."
+msgstr "定ä½ã€Œ%sã€æ™‚語法無效。"
+
+#: libparted/unit.c:394
+#, c-format
+msgid "The maximum head value is %d."
+msgstr "ç£é ­æ•¸é‡çš„最大值為 %d。"
+
+#: libparted/unit.c:401
+#, c-format
+msgid "The maximum sector value is %d."
+msgstr "ç£å€æ•¸é‡çš„最大值為 %d。"
+
+#: libparted/unit.c:413 libparted/unit.c:565
+#, c-format
+msgid "The location %s is outside of the device %s."
+msgstr "ä½ç½® %s 超出è£ç½® %s 的範åœã€‚"
+
+#: libparted/unit.c:527
+msgid "Invalid number."
+msgstr "無效的編號。"
+
+#: libparted/unit.c:533
+msgid "Use a smaller unit instead of a value < 1"
+msgstr "使用較å°å–®ä½ä»¥ä»£æ›¿å€¼ < 1"
+
+#: libparted/fs/amiga/affs.c:64 libparted/fs/amiga/apfs.c:58
+#: libparted/fs/amiga/asfs.c:72
+#, c-format
+msgid "%s : Failed to allocate partition block\n"
+msgstr "%s:é…置分割å€å€å¡Šæ™‚失敗\n"
+
+#: libparted/fs/amiga/affs.c:78 libparted/fs/amiga/apfs.c:71
+#: libparted/fs/amiga/asfs.c:84
+#, c-format
+msgid "%s : Failed to allocate block\n"
+msgstr "%s:é…ç½®å€å¡Šæ™‚失敗\n"
+
+#: libparted/fs/amiga/affs.c:83 libparted/fs/amiga/apfs.c:76
+#, c-format
+msgid "%s : Couldn't read boot block %llu\n"
+msgstr "%s:無法讀å–å•Ÿå‹•å€å¡Š %llu\n"
+
+#: libparted/fs/amiga/affs.c:97 libparted/fs/amiga/apfs.c:87
+#: libparted/fs/amiga/asfs.c:90 libparted/fs/amiga/asfs.c:104
+#, c-format
+msgid "%s : Couldn't read root block %llu\n"
+msgstr "%s:無法讀å–æ ¹å€å¡Š %llu\n"
+
+#: libparted/fs/amiga/amiga.c:72
+#, c-format
+msgid "%s : Failed to allocate id list element\n"
+msgstr "%s:é…置辨識清單元件時失敗\n"
+
+#: libparted/fs/amiga/amiga.c:189
+#, c-format
+msgid "%s : Couldn't read block %llu\n"
+msgstr "%s:無法讀å–å€å¡Š %llu\n"
+
+#: libparted/fs/amiga/amiga.c:202
+#, c-format
+msgid "%s : Bad checksum on block %llu of type %s\n"
+msgstr "%s:å€å¡Š %llu çš„é¡žåž‹ %s 有ä¸ç•¶çš„總和檢查值\n"
+
+#: libparted/fs/amiga/amiga.c:212
+#, c-format
+msgid "%s : Couldn't write block %d\n"
+msgstr "%s:無法寫入å€å¡Š %d\n"
+
+#: libparted/fs/amiga/amiga.c:279
+#, c-format
+msgid "%s : Failed to allocate disk_specific rdb block\n"
+msgstr "%s:é…ç½®ç£ç¢Ÿç‰¹å®šçš„ rdb å€å¡Šæ™‚失敗\n"
+
+#: libparted/fs/amiga/amiga.c:290
+#, c-format
+msgid "%s : Didn't find rdb block, should never happen\n"
+msgstr "%s:無法找到 rdb å€å¡Šï¼Œé€™ä¸æ‡‰è©²ç™¼ç”Ÿ\n"
+
+#: libparted/fs/amiga/amiga.c:319
+#, c-format
+msgid "%s : Failed to read partition block %llu\n"
+msgstr "%s:讀å–分割å€å€å¡Š %llu 時失敗\n"
+
+#: libparted/fs/fat/fat.c:149
+msgid ""
+"GNU Parted was miscompiled: the FAT boot sector should be 512 bytes. FAT "
+"support will be disabled."
+msgstr "GNU parted 編譯錯誤:FAT å•Ÿå‹•ç£å€æ‡‰ç‚º 512 ä½å…ƒçµ„。FAT 支æ´å°‡è¢«é—œé–‰ã€‚"
+
+#: libparted/fs/fat/bootsector.c:50 libparted/fs/r/fat/bootsector.c:49
+msgid "File system has an invalid signature for a FAT file system."
+msgstr "檔案系統å«æœ‰ç„¡æ•ˆçš„ FAT 檔案系統簽å。"
+
+#: libparted/fs/fat/bootsector.c:58 libparted/fs/r/fat/bootsector.c:57
+msgid "File system has an invalid sector size for a FAT file system."
+msgstr "檔案系統的ç£å€å¤§å°å° FAT 檔案系統來說無效。"
+
+#: libparted/fs/fat/bootsector.c:65 libparted/fs/r/fat/bootsector.c:64
+msgid "File system has an invalid cluster size for a FAT file system."
+msgstr "檔案系統的ç£ç°‡å¤§å°å° FAT 檔案系統來說無效。"
+
+#: libparted/fs/fat/bootsector.c:72 libparted/fs/r/fat/bootsector.c:71
+msgid ""
+"File system has an invalid number of reserved sectors for a FAT file system."
+msgstr "檔案系統的ä¿ç•™ç£å€æ•¸å° FAT 檔案系統來說無效。"
+
+#: libparted/fs/fat/bootsector.c:79 libparted/fs/r/fat/bootsector.c:78
+msgid "File system has an invalid number of FATs."
+msgstr "檔案系統的 FAT 數é‡ç„¡æ•ˆã€‚"
+
+#: libparted/fs/fat/bootsector.c:162
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d)."
+msgstr ""
+"檔案系統的 CHS ä½ç½®èˆ‡å°ºå¯¸æ˜¯ (%d, %d, %d),該項無效。 分割表的 CHS ä½ç½®èˆ‡å°ºå¯¸"
+"是 (%d, %d, %d)。"
+
+#: libparted/fs/fat/bootsector.c:197 libparted/fs/r/fat/bootsector.c:194
+msgid "FAT boot sector says logical sector size is 0. This is weird. "
+msgstr "FAT å•Ÿå‹•ç£å€è²ç¨±é‚輯ç£å€çš„大å°ç‚ºé›¶ã€‚這很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:203 libparted/fs/r/fat/bootsector.c:200
+msgid "FAT boot sector says there are no FAT tables. This is weird. "
+msgstr "FAT å•Ÿå‹•ç£å€è²ç¨±æ²’有 FAT 表。這很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:209 libparted/fs/r/fat/bootsector.c:206
+msgid "FAT boot sector says clusters are 0 sectors. This is weird. "
+msgstr "FAT å•Ÿå‹•ç£å€è²ç¨±ç£ç°‡å…·æœ‰é›¶ç£å€ã€‚這很奇怪。"
+
+#: libparted/fs/fat/bootsector.c:219 libparted/fs/r/fat/bootsector.c:216
+msgid "File system is FAT12, which is unsupported."
+msgstr "檔案系統為 FAT12,ä¸æ”¯æ´ã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:231
+#, c-format
+msgid "Unrecognised old style linux swap signature '%10s'."
+msgstr "ç„¡æ³•è¾¨è­˜çš„èˆŠå¼ linux 交æ›ç°½å「%10sã€ã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:269
+#, c-format
+msgid "Unrecognised new style linux swap signature '%10s'."
+msgstr "ç„¡æ³•è¾¨è­˜çš„æ–°å¼ linux 交æ›ç°½å「%10sã€ã€‚"
+
+#: libparted/fs/linux_swap/linux_swap.c:309
+#, c-format
+msgid "Unrecognised swsusp linux swap signature '%9s'."
+msgstr "無法辨識的 swsusp linux 交æ›ç°½å「%9sã€ã€‚"
+
+#: libparted/fs/hfs/probe.c:51 libparted/fs/r/hfs/probe.c:51
+#, c-format
+msgid ""
+"Parted can't use HFS file systems on disks with a sector size not equal to "
+"%d bytes."
+msgstr "Parted 無法在其ç£å€å¤§å°ä¸ç­‰æ–¼ %d ä½å…ƒçµ„çš„ç£ç¢Ÿä¸Šä½¿ç”¨ HFS 檔案系統。"
+
+#: libparted/fs/r/fat/bootsector.c:145
+#, c-format
+msgid ""
+"The file system's CHS geometry is (%d, %d, %d), which is invalid. The "
+"partition table's CHS geometry is (%d, %d, %d). If you select Ignore, the "
+"file system's CHS geometry will be left unchanged. If you select Fix, the "
+"file system's CHS geometry will be set to match the partition table's CHS "
+"geometry."
+msgstr ""
+"檔案系統的 CHS 幾何çµæ§‹ç‚º (%d, %d, %d),而其為無效。分割å€è¡¨çš„ CHS 幾何çµæ§‹"
+"為 (%d, %d, %d)。如果您é¸æ“‡å¿½ç•¥ï¼Œæª”案系統的 CHS 幾何çµæ§‹å°‡æœƒä¿ç•™ä¸è®Šã€‚如果您"
+"é¸æ“‡ä¿®å¾©ï¼Œæª”案系統的 CHS 幾何çµæ§‹å°‡æœƒè¢«è¨­å®šä»¥ç¬¦åˆåˆ†å‰²å€è¡¨çš„ CHS 幾何çµæ§‹ã€‚"
+
+#: libparted/fs/r/fat/bootsector.c:398
+#, c-format
+msgid ""
+"The information sector has the wrong signature (%x). Select cancel for now, "
+"and send in a bug report. If you're desperate, it's probably safe to ignore."
+msgstr ""
+"資訊ç£å€çš„ç°½å錯誤 (%x)。ç¾åœ¨é¸æ“‡å–消,並發é€ç¨‹å¼éŒ¯èª¤å ±å‘Šã€‚如果您ä¸é¡§ä¸€åˆ‡ï¼Œé¸"
+"擇忽略有å¯èƒ½æ˜¯ã€Œå®‰å…¨ã€çš„。"
+
+#: libparted/fs/r/fat/calc.c:134
+#, c-format
+msgid ""
+"You need %s of free disk space to shrink this partition to this size. "
+"Currently, only %s is free."
+msgstr ""
+"æ‚¨éœ€è¦ %s çš„å¯ç”¨ç£ç¢Ÿç©ºé–“以收縮這個分割å€åˆ°é€™å€‹å¤§å°ã€‚ ç›®å‰ï¼Œåªæœ‰ %s 為å¯ç”¨ã€‚"
+
+#: libparted/fs/r/fat/context.c:56
+#, c-format
+msgid ""
+"Cluster start delta = %d, which is not a multiple of the cluster size %d."
+msgstr "ç£ç°‡èµ·é»ž delta = %d,它並éžç£ç°‡å¤§å° %d çš„å€æ•¸ã€‚"
+
+#: libparted/fs/r/fat/count.c:84
+#, c-format
+msgid "Bad directory entry for %s: first cluster is the end of file marker."
+msgstr "%s 有ä¸ç•¶çš„目錄æ¢ç›®ï¼šç¬¬ä¸€å€‹ç£ç°‡æ˜¯æª”案標記的çµå°¾ã€‚"
+
+#: libparted/fs/r/fat/count.c:97
+#, c-format
+msgid ""
+"Bad FAT: unterminated chain for %s. You should run dosfsck or scandisk."
+msgstr ""
+"ä¸ç•¶çš„ FAT 分割表:%s 有未終çµçš„連çµã€‚ 您應該執行 dosfsck 或 scandisk。"
+
+#: libparted/fs/r/fat/count.c:106
+#, c-format
+msgid ""
+"Bad FAT: cluster %d outside file system in chain for %s. You should run "
+"dosfsck or scandisk."
+msgstr ""
+"ä¸ç•¶çš„ FAT 分割表:%2$s 的連çµä¸­æœ‰ç£ç°‡ %1$d ä½æ–¼æª”案系統之外。 您應該執行 "
+"dosfsck 或 scandisk。"
+
+#: libparted/fs/r/fat/count.c:116
+#, c-format
+msgid ""
+"Bad FAT: cluster %d is cross-linked for %s. You should run dosfsck or "
+"scandisk."
+msgstr ""
+"ä¸ç•¶çš„ FAT 分割表:%2$s 有ç£ç°‡ %1$d 被交å‰é€£çµã€‚ 您應該執行 dosfsck 或 "
+"scandisk。"
+
+#: libparted/fs/r/fat/count.c:135
+#, c-format
+msgid "%s is %dk, but it has %d clusters (%dk)."
+msgstr "%s 是 %dk,但是它有 %d 個ç£ç°‡ (%dk)。"
+
+#: libparted/fs/r/fat/fat.c:244
+#, c-format
+msgid "Partition too big/small for a %s file system."
+msgstr "å°æ–¼ %s 檔案系統而言,分割å€å¤ªå¤§/太å°ã€‚"
+
+#: libparted/fs/r/fat/fat.c:410
+msgid ""
+"The FATs don't match. If you don't know what this means, then select "
+"cancel, run scandisk on the file system, and then come back."
+msgstr ""
+"FAT 分割表ä¸ç¬¦åˆã€‚ 如果您ä¸çŸ¥é“這表示什麼,就請é¸å–å–消ã€åœ¨æª”案系統上執行 "
+"scandisk,然後回來。"
+
+#: libparted/fs/r/fat/fat.c:450
+msgid "There are no possible configurations for this FAT type."
+msgstr "å°æ–¼é€™å€‹ FAT 分割表類型沒有å¯èƒ½çš„組態。"
+
+#: libparted/fs/r/fat/fat.c:462
+#, c-format
+msgid ""
+"File system doesn't have expected sizes for Windows to like it. Cluster "
+"size is %dk (%dk expected); number of clusters is %d (%d expected); size of "
+"FATs is %d sectors (%d expected)."
+msgstr ""
+"檔案系統ä¸å…·æœ‰å¯è®“ Windows 喜歡的é æœŸå¤§å°ã€‚ ç£ç°‡å¤§å°æ˜¯ %dk (é æœŸç‚º %dk)ï¼›ç£ç°‡"
+"數é‡æ˜¯ %d (é æœŸç‚º %d)ï¼›FAT 分割表的大å°æ˜¯ %d ç£å€ (é æœŸç‚º %d)。"
+
+#: libparted/fs/r/fat/fat.c:485
+#, c-format
+msgid ""
+"File system is reporting the free space as %d clusters, not %d clusters."
+msgstr "檔案系統報告指出剩餘空間為 %d ç£ç°‡ï¼Œä¸¦éž %d ç£ç°‡ã€‚"
+
+#: libparted/fs/r/fat/resize.c:159
+msgid ""
+"There's not enough room in the root directory for all of the files. Either "
+"cancel, or ignore to lose the files."
+msgstr "在根目錄中空間ä¸è¶³ä»¥ç”¨æ–¼æ‰€æœ‰çš„檔案。 å¯é¸æ“‡å–消,或是忽略而éºå¤±æª”案。"
+
+#: libparted/fs/r/fat/resize.c:303
+msgid "Error writing to the root directory."
+msgstr "寫入根目錄時發生錯誤。"
+
+#: libparted/fs/r/fat/resize.c:479
+msgid "If you leave your file system as FAT16, then you will have no problems."
+msgstr "如果您ä¿ç•™æª”案系統為 FAT16, 那麼將ä¸æœƒæœ‰å•é¡Œã€‚"
+
+#: libparted/fs/r/fat/resize.c:482
+msgid ""
+"If you convert to FAT16, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual)."
+msgstr ""
+"如果您轉æ›åˆ° FAT16,而 MS Windows 已被安è£æ–¼é€™å€‹åˆ†å‰²ï¼Œé‚£éº¼æ‚¨å¿…é ˆé‡æ–°å®‰è£ MS "
+"Windows 的開機載入器。 如果您è¦é€™æ¨£åšï¼Œæ‚¨æ‡‰è©²æŸ¥è©¢ä¸€ä¸‹ Parted 手冊 (或是發行版"
+"手冊)。"
+
+#: libparted/fs/r/fat/resize.c:490
+msgid ""
+"If you leave your file system as FAT32, then you will not introduce any new "
+"problems."
+msgstr "如果您ä¿ç•™æª”案系統為 FAT32, 那麼您將ä¸æœƒå¼•å…¥ä»»ä½•æ–°å•é¡Œã€‚"
+
+#: libparted/fs/r/fat/resize.c:494
+msgid ""
+"If you convert to FAT32, and MS Windows is installed on this partition, then "
+"you must re-install the MS Windows boot loader. If you want to do this, you "
+"should consult the Parted manual (or your distribution's manual). Also, "
+"converting to FAT32 will make the file system unreadable by MS DOS, MS "
+"Windows 95a, and MS Windows NT."
+msgstr ""
+"如果您轉æ›åˆ° FAT32,而 MS Windows 已被安è£æ–¼é€™å€‹åˆ†å‰²ï¼Œé‚£éº¼æ‚¨å¿…é ˆé‡æ–°å®‰è£ MS "
+"Windows 的開機載入器。 如果您è¦é€™æ¨£åšï¼Œæ‚¨æ‡‰è©²æŸ¥è©¢ä¸€ä¸‹ Parted 手冊 (或是發行版"
+"手冊)。 åŒæ™‚,轉æ›åˆ° FAT32 將使得檔案系統無法讓 MS DOSã€MS Windows 95a å’Œ MS "
+"Windows NT 讀å–。"
+
+#: libparted/fs/r/fat/resize.c:508
+#, c-format
+msgid "%s %s %s"
+msgstr "%s %s %s"
+
+#: libparted/fs/r/fat/resize.c:509
+msgid "Would you like to use FAT32?"
+msgstr "您想è¦ä½¿ç”¨ FAT32 嗎?"
+
+#: libparted/fs/r/fat/resize.c:540 libparted/fs/r/fat/resize.c:556
+#, c-format
+msgid "%s %s"
+msgstr "%s %s"
+
+#: libparted/fs/r/fat/resize.c:541
+msgid ""
+"The file system can only be resized to this size by converting to FAT16."
+msgstr "檔案系統åªèƒ½è—‰ç”±è½‰æ›åˆ° FAT16 以調整為這樣的大å°ã€‚"
+
+#: libparted/fs/r/fat/resize.c:557
+msgid ""
+"The file system can only be resized to this size by converting to FAT32."
+msgstr "檔案系統åªèƒ½è—‰ç”±è½‰æ›åˆ° FAT32 以調整為這樣的大å°ã€‚"
+
+#: libparted/fs/r/fat/resize.c:570
+msgid ""
+"GNU Parted cannot resize this partition to this size. We're working on it!"
+msgstr "GNU Parted 無法調整這個分割å€ç‚ºé€™æ¨£çš„大å°ã€‚ 我們正在努力中ï¼"
+
+#: libparted/fs/r/fat/table.c:137
+#, c-format
+msgid ""
+"FAT %d media %x doesn't match the boot sector's media %x. You should "
+"probably run scandisk."
+msgstr ""
+"FAT 分割表 %d 媒體 %x 並ä¸ç¬¦åˆé–‹æ©Ÿç£å€çš„媒體 %x。 您或許應該執行 scandisk。"
+
+#: libparted/fs/r/fat/table.c:269
+#, c-format
+msgid "fat_table_set: cluster %ld outside file system"
+msgstr "fat_table_set:ç£ç°‡ %ld ä½æ–¼æª”案系統之外"
+
+#: libparted/fs/r/fat/table.c:301
+#, c-format
+msgid "fat_table_get: cluster %ld outside file system"
+msgstr "fat_table_get:ç£ç°‡ %ld ä½æ–¼æª”案系統之外"
+
+#: libparted/fs/r/fat/table.c:343
+msgid "fat_table_alloc_cluster: no free clusters"
+msgstr "fat_table_alloc_cluster:沒有å¯ç”¨çš„ç£ç°‡"
+
+#: libparted/fs/r/filesys.c:152
+msgid "Could not detect file system."
+msgstr "無法åµæ¸¬æª”案系統。"
+
+#: libparted/fs/r/filesys.c:159 libparted/fs/r/filesys.c:285
+#, c-format
+msgid "resizing %s file systems is not supported"
+msgstr "ä¸æ”¯æ´èª¿æ•´ %s 檔案系統大å°"
+
+#: libparted/fs/r/filesys.c:171
+msgid "The file system is bigger than its volume!"
+msgstr "檔案系統大於所屬的ç£ç¢Ÿå€ï¼"
+
+#: libparted/fs/r/hfs/advfs.c:123 libparted/fs/r/hfs/advfs_plus.c:122
+#: libparted/fs/r/hfs/reloc.c:417 libparted/fs/r/hfs/reloc.c:513
+#: libparted/fs/r/hfs/reloc_plus.c:540 libparted/fs/r/hfs/reloc_plus.c:660
+#: libparted/fs/r/hfs/reloc_plus.c:774
+msgid "The file system contains errors."
+msgstr "檔案系統å«æœ‰éŒ¯èª¤ã€‚"
+
+#: libparted/fs/r/hfs/advfs_plus.c:287
+msgid "Bad blocks could not be read."
+msgstr "無法讀å–ä¸ç•¶çš„å€å¡Šã€‚"
+
+#: libparted/fs/r/hfs/cache.c:137
+#, c-format
+msgid ""
+"Trying to register an extent starting at block 0x%X, but another one already "
+"exists at this position. You should check the file system!"
+msgstr ""
+"嘗試登記一個起點在 0x%X 的延伸å€å¡Šï¼Œä½†æ˜¯å¦ä¸€å€‹å·²ç¶“存在於此ä½ç½®ã€‚ 您應該檢查一"
+"下檔案系統ï¼"
+
+#: libparted/fs/r/hfs/cache.c:214
+#, c-format
+msgid ""
+"Trying to move an extent from block 0x%X to block 0x%X, but another one "
+"already exists at this position. This should not happen!"
+msgstr ""
+"嘗試將延伸å€å¡Šå¾ž 0x%X 移動到 0x%X,但是å¦ä¸€å€‹å€å¡Šå·²ç¶“存在本ä½ç½®ã€‚這ä¸è©²ç™¼ç”Ÿï¼"
+
+#: libparted/fs/r/hfs/file.c:143
+#, c-format
+msgid "Could not update the extent cache for HFS file with CNID %X."
+msgstr "無法更新具有 CNID %X çš„ HFS 檔案延伸快å–。"
+
+#: libparted/fs/r/hfs/file.c:180
+#, c-format
+msgid "Trying to read HFS file with CNID %X behind EOF."
+msgstr "å˜—è©¦è®€å– EOF 之後具有 CNID %X çš„ HFS 檔案。"
+
+#: libparted/fs/r/hfs/file.c:190 libparted/fs/r/hfs/file.c:220
+#, c-format
+msgid "Could not find sector %lli of HFS file with CNID %X."
+msgstr "找ä¸åˆ°å…·æœ‰ CNID %2$X çš„ HFS 檔案ç£å€ %1$lli。"
+
+#: libparted/fs/r/hfs/file.c:210
+#, c-format
+msgid "Trying to write HFS file with CNID %X behind EOF."
+msgstr "嘗試寫入 EOF 之後具有 CNID %X 的 HFS 檔案。"
+
+#: libparted/fs/r/hfs/file_plus.c:157
+#, c-format
+msgid "Could not update the extent cache for HFS+ file with CNID %X."
+msgstr "無法更新具有 CNID %X çš„ HFS+ 檔案延伸快å–。"
+
+#: libparted/fs/r/hfs/file_plus.c:202
+#, c-format
+msgid "Trying to read HFS+ file with CNID %X behind EOF."
+msgstr "å˜—è©¦è®€å– EOF 之後具有 CNID %X çš„ HFS+ 檔案。"
+
+#: libparted/fs/r/hfs/file_plus.c:213 libparted/fs/r/hfs/file_plus.c:256
+#, c-format
+msgid "Could not find sector %lli of HFS+ file with CNID %X."
+msgstr "找ä¸åˆ°å…·æœ‰ CNID %2$X çš„ HFS+ 檔案ç£å€ %1$lli。"
+
+#: libparted/fs/r/hfs/file_plus.c:245
+#, c-format
+msgid "Trying to write HFS+ file with CNID %X behind EOF."
+msgstr "嘗試寫入 EOF 之後具有 CNID %X 的 HFS+ 檔案。"
+
+#: libparted/fs/r/hfs/hfs.c:212
+msgid "Sorry, HFS cannot be resized that way yet."
+msgstr "抱歉,HFS 尚無法以該種方å¼èª¿æ•´å¤§å°ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:230 libparted/fs/r/hfs/hfs.c:573
+msgid "shrinking"
+msgstr "收縮"
+
+#: libparted/fs/r/hfs/hfs.c:242 libparted/fs/r/hfs/hfs.c:585
+msgid "Data relocation has failed."
+msgstr "資料é‡å®šå€å·²å¤±æ•—。"
+
+#: libparted/fs/r/hfs/hfs.c:261
+msgid "Data relocation left some data in the end of the volume."
+msgstr "資料é‡å®šå€åœ¨ç£ç¢Ÿå€æœ«ç«¯ç•™ä¸‹ä¸€äº›è³‡æ–™ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:300
+msgid "writing HFS Master Directory Block"
+msgstr "寫入 HFS 主目錄å€å¡Š"
+
+#: libparted/fs/r/hfs/hfs.c:412
+msgid "No valid HFS[+X] signature has been found while opening."
+msgstr "開啟時找ä¸åˆ°ä»»ä½•æœ‰æ•ˆçš„ HFS[+X] ç°½å。"
+
+#: libparted/fs/r/hfs/hfs.c:422
+#, c-format
+msgid "Version %d of HFS+ isn't supported."
+msgstr "ä¸æ”¯æ´ HFS+ 的版本 %d。"
+
+#: libparted/fs/r/hfs/hfs.c:433
+#, c-format
+msgid "Version %d of HFSX isn't supported."
+msgstr "ä¸æ”¯æ´ HFSX 的版本 %d。"
+
+#: libparted/fs/r/hfs/hfs.c:616
+msgid "Data relocation left some data at the end of the volume."
+msgstr "資料é‡å®šå€åœ¨ç£ç¢Ÿå€æœ«ç«¯ç•™ä¸‹ä¸€äº›è³‡æ–™ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:664
+msgid "Error while writing the allocation file."
+msgstr "寫入é…é¡æª”案時發生錯誤。"
+
+#: libparted/fs/r/hfs/hfs.c:679
+msgid "Error while writing the compatibility part of the allocation file."
+msgstr "寫入é…é¡æª”案的相容部分時發生錯誤。"
+
+#: libparted/fs/r/hfs/hfs.c:694
+msgid "writing HFS+ Volume Header"
+msgstr "寫入 HFS+ ç£ç¢Ÿå€æ¨™é ­"
+
+#: libparted/fs/r/hfs/hfs.c:794
+msgid "An error occurred while looking for the mandatory bad blocks file."
+msgstr "找尋必è¦çš„ä¸ç•¶å€å¡Šæª”案時發生了錯誤。"
+
+#: libparted/fs/r/hfs/hfs.c:847
+msgid ""
+"It seems there is an error in the HFS wrapper: the bad blocks file doesn't "
+"contain the embedded HFS+ volume."
+msgstr ""
+"在 HFS 包è£ç¨‹å¼ä¸­ä¼¼ä¹Žå‡ºç¾éŒ¯èª¤ï¼šä¸ç•¶å€å¡Šæª”案並未包å«åµŒå…¥å¼ HFS+ ç£ç¢Ÿå€ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:883
+msgid "Sorry, HFS+ cannot be resized that way yet."
+msgstr "抱歉,HFS+ 尚無法以該種方å¼èª¿æ•´å¤§å°ã€‚"
+
+#: libparted/fs/r/hfs/hfs.c:918
+msgid "shrinking embedded HFS+ volume"
+msgstr "æ”¶ç¸®åµŒå…¥å¼ HFS+ ç£ç¢Ÿå€"
+
+#: libparted/fs/r/hfs/hfs.c:935
+msgid "Resizing the HFS+ volume has failed."
+msgstr "調整 HFS+ ç£ç¢Ÿå€å¤§å°å·²å¤±æ•—。"
+
+#: libparted/fs/r/hfs/hfs.c:942
+msgid "shrinking HFS wrapper"
+msgstr "收縮 HFS 包è£ç¨‹å¼"
+
+#: libparted/fs/r/hfs/hfs.c:951
+msgid "Updating the HFS wrapper has failed."
+msgstr "æ›´æ–° HFS 包è£ç¨‹å¼å·²å¤±æ•—。"
+
+#: libparted/fs/r/hfs/hfs.c:1053 libparted/fs/r/hfs/hfs.c:1138
+#, c-format
+msgid ""
+"This is not a real %s check. This is going to extract special low level "
+"files for debugging purposes."
+msgstr "這ä¸æ˜¯çœŸå¯¦çš„ %s 檢查。 這是為了åµéŒ¯çš„目的而抽出特殊的低階檔案。"
+
+#: libparted/fs/r/hfs/journal.c:155
+msgid "Bad block list header checksum."
+msgstr "ä¸ç•¶å€å¡Šæ¸…單標頭總和檢查碼。"
+
+#: libparted/fs/r/hfs/journal.c:168
+#, c-format
+msgid ""
+"Invalid size of a transaction block while replaying the journal (%i bytes)."
+msgstr "é‡æ’­æ—¥èªŒæ™‚出ç¾ç„¡æ•ˆçš„異動作業å€å¡Šå¤§å° (%i ä½å…ƒçµ„)。"
+
+#: libparted/fs/r/hfs/journal.c:260
+msgid ""
+"Journal stored outside of the volume are not supported. Try to deactivate "
+"the journal and run Parted again."
+msgstr "ä¸æ”¯æ´å°‡æ—¥èªŒå„²å­˜æ–¼ç£ç¢Ÿå€å¤–。請嘗試åœç”¨æ—¥èªŒï¼Œç„¶å¾Œå†æ¬¡å•Ÿå‹• Parted。"
+
+#: libparted/fs/r/hfs/journal.c:271
+msgid "Journal offset or size is not multiple of the sector size."
+msgstr "日誌的å移值或大å°ä¸¦éžç£å€å¤§å°çš„å€æ•¸ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:292
+msgid "Incorrect magic values in the journal header."
+msgstr "日誌標頭中有ä¸æ­£ç¢ºçš„魔術值。"
+
+#: libparted/fs/r/hfs/journal.c:302
+msgid "Journal size mismatch between journal info block and journal header."
+msgstr "日誌資訊å€å¡Šèˆ‡æ—¥èªŒæ¨™é ­ä¸­çš„日誌大å°ä¸ç¬¦åˆã€‚"
+
+#: libparted/fs/r/hfs/journal.c:314
+msgid "Some header fields are not multiple of the sector size."
+msgstr "æŸäº›æ¨™é ­æ¬„ä½ä¸æ˜¯ç£å€å¤§å°çš„å€æ•¸ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:323
+msgid ""
+"The sector size stored in the journal is not 512 bytes. Parted only "
+"supports 512 bytes length sectors."
+msgstr ""
+"儲存在日誌中的ç£å€å¤§å°ä¸æ˜¯ 512 ä½å…ƒçµ„。 Parted åªæ”¯æ´ 512 ä½å…ƒçµ„長度的ç£å€ã€‚"
+
+#: libparted/fs/r/hfs/journal.c:335
+msgid "Bad journal checksum."
+msgstr "ä¸ç•¶çš„日誌總和檢查碼。"
+
+#: libparted/fs/r/hfs/journal.c:355
+msgid ""
+"The journal is not empty. Parted must replay the transactions before "
+"opening the file system. This will modify the file system."
+msgstr ""
+"日誌並éžç‚ºç©ºã€‚ Parted 必須於開啟檔案系統之å‰é‡æ’­ç•°å‹•ä½œæ¥­ã€‚ 這將會修改檔案系"
+"統。"
+
+#: libparted/fs/r/hfs/journal.c:383
+msgid ""
+"The volume header or the master directory block has changed while replaying "
+"the journal. You should restart Parted."
+msgstr "é‡æ’­æ—¥èªŒæ™‚,ç£ç¢Ÿå€æ¨™é ­æˆ–主目錄å€å¡Šå·²è®Šæ›´ã€‚ 您應該é‡æ–°å•Ÿå‹• Parted。"
+
+#: libparted/fs/r/hfs/reloc.c:151 libparted/fs/r/hfs/reloc_plus.c:155
+msgid "An extent has not been relocated."
+msgstr "延伸未被é‡å®šå€ã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:251 libparted/fs/r/hfs/reloc_plus.c:307
+msgid ""
+"A reference to an extent comes from a place it should not. You should check "
+"the file system!"
+msgstr "å°æ–¼ä¸€å€‹å»¶ä¼¸æœ‰å®ƒä¸æ‡‰è©²ä¾†è‡ªçš„åƒè€ƒåœ°æ–¹ã€‚ 您應該檢查一下檔案系統ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:382
+msgid "This HFS volume has no catalog file. This is very unusual!"
+msgstr "這個 HFS ç£ç¢Ÿå€æ²’有任何類別檔。 這是很ä¸å°‹å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:479
+msgid "This HFS volume has no extents overflow file. This is quite unusual!"
+msgstr "這個 HFS ç£ç¢Ÿå€æ²’有任何延伸溢ä½æª”案。 這是相當ä¸å°‹å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc.c:522 libparted/fs/r/hfs/reloc_plus.c:670
+msgid ""
+"The extents overflow file should not contain its own extents! You should "
+"check the file system."
+msgstr "延伸溢ä½æª”案ä¸æ‡‰è©²åŒ…å«å…¶æœ¬èº«çš„å»¶ä¼¸ï¼ æ‚¨æ‡‰è©²æª¢æŸ¥ä¸€ä¸‹æª”æ¡ˆç³»çµ±ã€‚"
+
+#: libparted/fs/r/hfs/reloc.c:579 libparted/fs/r/hfs/reloc_plus.c:849
+msgid "Could not cache the file system in memory."
+msgstr "無法將檔案系統快å–在記憶體中。"
+
+#: libparted/fs/r/hfs/reloc.c:640 libparted/fs/r/hfs/reloc_plus.c:910
+msgid "Bad blocks list could not be loaded."
+msgstr "無法載入ä¸ç•¶å€å¡Šæ¸…單。"
+
+#: libparted/fs/r/hfs/reloc.c:654 libparted/fs/r/hfs/reloc_plus.c:926
+msgid "An error occurred during extent relocation."
+msgstr "在延伸é‡å®šå€çš„期間發生了錯誤。"
+
+#: libparted/fs/r/hfs/reloc_plus.c:495
+msgid "This HFS+ volume has no catalog file. This is very unusual!"
+msgstr "這個 HFS+ ç£ç¢Ÿå€æ²’有任何類別檔。 這是很ä¸å°‹å¸¸çš„ï¼"
+
+#: libparted/fs/r/hfs/reloc_plus.c:620
+msgid "This HFS+ volume has no extents overflow file. This is quite unusual!"
+msgstr "這個 HFS+ ç£ç¢Ÿå€æ²’有任何延伸溢ä½æª”案。 這是相當ä¸å°‹å¸¸çš„ï¼"
+
+#: parted/parted.c:138
+msgid "displays this help message"
+msgstr "顯示此求助資訊"
+
+#: parted/parted.c:139
+msgid "lists partition layout on all block devices"
+msgstr "列出所有å€æ®µè£ç½®çš„分割å€é…ç½®"
+
+#: parted/parted.c:140
+msgid "displays machine parseable output"
+msgstr "顯示機器å¯è§£æžçš„輸出"
+
+#: parted/parted.c:141
+msgid "displays JSON output"
+msgstr "顯示 JSON 輸出"
+
+#: parted/parted.c:142
+msgid "never prompts for user intervention"
+msgstr "從ä¸æ示使用者介入"
+
+#: parted/parted.c:143
+msgid "in script mode, fix instead of abort when asked"
+msgstr "在指令碼模å¼ï¼Œè©¢å•æ™‚直接修正而éžä¸­æ­¢"
+
+#: parted/parted.c:144
+msgid "displays the version"
+msgstr "顯示版本"
+
+#: parted/parted.c:145
+msgid "alignment for new partitions"
+msgstr "新分割å€çš„å°é½Šé¡žåž‹"
+
+#: parted/parted.c:158
+msgid ""
+"NUMBER is the partition number used by Linux. On MS-DOS disk labels, the "
+"primary partitions number from 1 to 4, logical partitions from 5 onwards.\n"
+msgstr ""
+"NUMBER 是 Linux 使用的分割å€ç·¨è™Ÿã€‚在 MS-DOS ç£ç¢Ÿæ¨™ç±¤ä¸­ï¼Œä¸»åˆ†å‰²å€ç·¨è™Ÿç‚º 1 - "
+"4,é‚輯分割å€å¾ž 5 開始。\n"
+
+#: parted/parted.c:161
+msgid "LABEL-TYPE is one of: "
+msgstr "LABEL-TYPE 是以下任æ„一項:"
+
+#: parted/parted.c:162 parted/parted.c:163
+msgid "FLAG is one of: "
+msgstr "FLAG 是以下任æ„一項:"
+
+#: parted/parted.c:164
+msgid "UNIT is one of: "
+msgstr "UNIT 是以下任æ„一項:"
+
+#: parted/parted.c:165
+msgid "desired alignment: minimum or optimal"
+msgstr "設想的å°é½Šï¼šæœ€å°æˆ–最佳化"
+
+#: parted/parted.c:166
+msgid "PART-TYPE is one of: primary, logical, extended\n"
+msgstr "PART-TYPE 是主分割å€ã€é‚輯分割å€ã€æ“´å……分割å€ä¹‹ä¸€\n"
+
+#: parted/parted.c:168
+msgid "FS-TYPE is one of: "
+msgstr "FS-TYPE 是以下任æ„一項:"
+
+#: parted/parted.c:169
+msgid ""
+"START and END are disk locations, such as 4GB or 10%. Negative values count "
+"from the end of the disk. For example, -1s specifies exactly the last "
+"sector.\n"
+msgstr ""
+"START å’Œ END 是ç£ç¢Ÿç”¨é‡ï¼Œåƒæ˜¯ 4GB 或 10%。負數值則是從ç£ç¢Ÿæœ«ç«¯èµ·ç®—。例"
+"如,-1s 指定最後一個ç£å€ã€‚\n"
+
+#: parted/parted.c:172
+msgid ""
+"END is disk location, such as 4GB or 10%. Negative value counts from the "
+"end of the disk. For example, -1s specifies exactly the last sector.\n"
+msgstr ""
+"END 是ç£ç¢Ÿç”¨é‡ï¼Œåƒæ˜¯ 4GB 或 10%。負數值則是從ç£ç¢Ÿæœ«ç«¯èµ·ç®—。例如,-1s 指定最後"
+"一個ç£å€ã€‚\n"
+
+#: parted/parted.c:175
+msgid "STATE is one of: on, off\n"
+msgstr "STATE 為:開ã€é—œ\n"
+
+#: parted/parted.c:176
+msgid "DEVICE is usually /dev/hda or /dev/sda\n"
+msgstr "DEVICE 通常為 /dev/hda 或 /dev/sda\n"
+
+#: parted/parted.c:177
+msgid "NAME is any word you want\n"
+msgstr "NAME 是您需è¦çš„任何單詞\n"
+
+#: parted/parted.c:178
+msgid "TYPE_ID is a value between 0x01 and 0xff, TYPE_UUID is a UUID\n"
+msgstr ""
+
+#: parted/parted.c:182
+msgid ""
+"Copyright (C) 1998 - 2006 Free Software Foundation, Inc.\n"
+"This program is free software, covered by the GNU General Public License.\n"
+"\n"
+"This program is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+"\n"
+msgstr ""
+"著作權©1998 - 2006 自由軟體基金會。\n"
+"本程å¼ç‚ºè‡ªç”±è»Ÿé«”ï¼Œå— GNU 通用公共授權所è¦ç¯„。\n"
+"\n"
+"發行本程å¼æ˜¯å¸Œæœ›å®ƒèƒ½å¤ æœ‰ç”¨ï¼Œ\n"
+"但是沒有任何擔ä¿ï¼›ç”šè‡³ä¸åŒ…括隱å«çš„é©éŠ·å’Œ\n"
+"é©åˆç‰¹å®šç”¨é€”çš„ä¿è­‰ã€‚詳情請åƒè¦‹\n"
+"GNU 通用公共授權。\n"
+"\n"
+
+#: parted/parted.c:232
+#, c-format
+msgid "%0.f%%\t(time left %.2d:%.2d)"
+msgstr "%0.f%%\t(剩餘時間 %.2d:%.2d)"
+
+#: parted/parted.c:251
+#, c-format
+msgid "Partition %s is being used. Are you sure you want to continue?"
+msgstr "æ­£åœ¨ä½¿ç”¨åˆ†å‰²å€ %s。您確定è¦ç¹¼çºŒå—Žï¼Ÿ"
+
+#: parted/parted.c:272
+#, c-format
+msgid "Partition(s) on %s are being used."
+msgstr "正在使用 %s 上的分割å€ã€‚"
+
+#: parted/parted.c:284
+#, c-format
+msgid ""
+"The existing disk label on %s will be destroyed and all data on this disk "
+"will be lost. Do you want to continue?"
+msgstr ""
+"ç¾æœ‰ %s 上的ç£ç¢Ÿæ¨™ç±¤å°‡è¢«éŠ·æ¯€ï¼Œè€Œæ‰€æœ‰åœ¨é€™å€‹ç£ç¢Ÿä¸Šçš„資料將會失去。您è¦ç¹¼çºŒå—Žï¼Ÿ"
+
+#: parted/parted.c:545
+msgid "New disk label type?"
+msgstr "æ–°çš„ç£ç¢Ÿæ¨™ç±¤é¡žåž‹ï¼Ÿ"
+
+#: parted/parted.c:692
+msgid "Partition type?"
+msgstr "分割å€é¡žåž‹ï¼Ÿ"
+
+#: parted/parted.c:710 parted/parted.c:914
+msgid "Partition name?"
+msgstr "分割å€å稱?"
+
+#: parted/parted.c:720
+msgid "File system type?"
+msgstr "檔案系統類型?"
+
+#: parted/parted.c:725 parted/parted.c:1815
+msgid "Start?"
+msgstr "起點?"
+
+#: parted/parted.c:727 parted/parted.c:1817 parted/parted.c:1900
+msgid "End?"
+msgstr "終點?"
+
+#: parted/parted.c:794
+#, c-format
+msgid ""
+"You requested a partition from %s to %s (sectors %llu..%llu).\n"
+"The closest location we can manage is %s to %s (sectors %llu..%llu).%s"
+msgstr ""
+"您è¦æ±‚將分割å€å¾ž %s 移動到 %s (ç£å€ %llu..%llu)。\n"
+"我們å¯ä»¥ç®¡ç†çš„最接近分割å€æ˜¯å¾ž %s 到 %s (ç£å€ %llu..%llu).%s"
+
+#: parted/parted.c:803
+msgid ""
+"\n"
+"Is this still acceptable to you?"
+msgstr ""
+"\n"
+"這樣您還å¯ä»¥æŽ¥å—嗎?"
+
+#: parted/parted.c:826
+#, c-format
+msgid ""
+"The resulting partition is not properly aligned for best performance: %s"
+msgstr "產生的分割å€ä¸¦æœªç‚ºæœ€å¤§åŒ–效能進行é©ç•¶å°é½Šï¼š%s"
+
+#: parted/parted.c:828 parted/parted.c:2057
+msgid "unknown (malloc failed)"
+msgstr "未知 (malloc 失敗)"
+
+#: parted/parted.c:906
+#, c-format
+msgid "%s disk labels do not support partition name."
+msgstr "%s ç£ç¢Ÿæ¨™ç±¤ä¸æ”¯æ´åˆ†å‰²å€å稱。"
+
+#: parted/parted.c:911 parted/parted.c:955 parted/parted.c:1880
+#: parted/parted.c:1946 parted/parted.c:2040 parted/parted.c:2115
+msgid "Partition number?"
+msgstr "分割å€ç·¨è™Ÿï¼Ÿ"
+
+#: parted/parted.c:949
+#, fuzzy, c-format
+msgid "%s disk labels do not support partition type."
+msgstr "%s ç£ç¢Ÿæ¨™ç±¤ä¸æ”¯æ´åˆ†å‰²å€å稱。"
+
+#: parted/parted.c:965
+#, fuzzy
+msgid "Partition type-id?"
+msgstr "分割å€é¡žåž‹ï¼Ÿ"
+
+#: parted/parted.c:972
+#, fuzzy
+msgid "Invalid type-id."
+msgstr "無效的編號。"
+
+#: parted/parted.c:986
+#, fuzzy
+msgid "Partition type-uuid?"
+msgstr "分割å€é¡žåž‹ï¼Ÿ"
+
+#: parted/parted.c:993
+#, fuzzy
+msgid "Invalid type-uuid."
+msgstr "無效的編號。"
+
+#: parted/parted.c:1146
+#, c-format
+msgid "BIOS cylinder,head,sector geometry: %d,%d,%d. Each cylinder is %s.\n"
+msgstr "BIOS çš„ç£æŸ±ã€ç£é ­ã€ç£å€å¹¾ä½•çµæ§‹ï¼š%d,%d,%d。æ¯åœˆç£æŸ±æ˜¯ %s。\n"
+
+#: parted/parted.c:1240
+#, c-format
+msgid "Model: %s (%s)\n"
+msgstr "型號:%s (%s)\n"
+
+#: parted/parted.c:1242
+#, c-format
+msgid "Disk %s: %s\n"
+msgstr "ç£ç¢Ÿ %s:%s\n"
+
+#: parted/parted.c:1243
+#, c-format
+msgid "Sector size (logical/physical): %lldB/%lldB\n"
+msgstr "ç£å€å¤§å° (é‚輯/物ç†):%lldB/%lldB\n"
+
+#: parted/parted.c:1255
+#, c-format
+msgid "Partition Table: %s\n"
+msgstr "分割å€ï¼š%s\n"
+
+#: parted/parted.c:1256
+#, c-format
+msgid "Disk Flags: %s\n"
+msgstr "ç£ç¢Ÿæ——標:%s\n"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Number"
+msgstr "編號"
+
+#: parted/parted.c:1388 parted/parted.c:1391
+msgid "Start"
+msgstr "起點"
+
+#: parted/parted.c:1389 parted/parted.c:1392
+msgid "End"
+msgstr "終點"
+
+#: parted/parted.c:1392
+msgid "Size"
+msgstr "大å°"
+
+#: parted/parted.c:1396
+msgid "Type"
+msgstr "é¡žåž‹"
+
+#: parted/parted.c:1398
+msgid "File system"
+msgstr "檔案系統"
+
+#: parted/parted.c:1401
+msgid "Name"
+msgstr "å稱"
+
+#: parted/parted.c:1403
+msgid "Flags"
+msgstr "旗標"
+
+#: parted/parted.c:1461
+msgid "Free Space"
+msgstr "å¯ç”¨ç©ºé–“"
+
+#: parted/parted.c:1702
+#, c-format
+msgid ""
+"A %s %s partition was found at %s -> %s. Do you want to add it to the "
+"partition table?"
+msgstr ""
+"在 %3$s -> %4$s 處找到一個 %1$s %2$s 分割å€ã€‚您希望將其新增到分割表中嗎?"
+
+#: parted/parted.c:1745
+msgid "searching for file systems"
+msgstr "正在æœå°‹æª”案系統"
+
+#: parted/parted.c:1852
+msgid "The resize command has been removed in parted 3.0"
+msgstr "resize 指令已自 parted 3.0 中移除"
+
+#: parted/parted.c:1914
+msgid ""
+"Shrinking a partition can cause data loss, are you sure you want to continue?"
+msgstr "收縮分割å€å¯èƒ½æœƒé€ æˆè³‡æ–™æ¼å¤±ï¼Œæ‚¨ç¢ºå®šè¦ç¹¼çºŒå—Žï¼Ÿ"
+
+#: parted/parted.c:1970
+msgid "New device?"
+msgstr "æ–°è£ç½®ï¼Ÿ"
+
+#: parted/parted.c:2038
+msgid "alignment type(min/opt)"
+msgstr "å°é½Šåž‹æ…‹ (最å°/最佳)"
+
+#: parted/parted.c:2053
+#, c-format
+msgid "%d aligned\n"
+msgstr "%d å·²å°é½Š\n"
+
+#: parted/parted.c:2055
+#, c-format
+msgid "%d not aligned: %s\n"
+msgstr "%d 未å°é½Šï¼š%s\n"
+
+#: parted/parted.c:2080 parted/parted.c:2117
+msgid "Flag to Invert?"
+msgstr "è¦åå‘的旗標?"
+
+#: parted/parted.c:2085 parted/parted.c:2122
+msgid "New state?"
+msgstr "新狀態?"
+
+#: parted/parted.c:2168
+msgid "Unit?"
+msgstr "å–®ä½ï¼Ÿ"
+
+#: parted/parted.c:2303
+msgid "align-check"
+msgstr "align-check"
+
+#: parted/parted.c:2306
+msgid ""
+"align-check TYPE N check partition N for TYPE(min|opt) "
+"alignment"
+msgstr ""
+"align-check TYPE N æª¢æŸ¥åˆ†å‰²å€ N 是å¦ç‚º TYPE(min|opt) å°"
+"齊模å¼"
+
+#: parted/parted.c:2314
+msgid "help"
+msgstr "help"
+
+#: parted/parted.c:2317
+msgid ""
+"help [COMMAND] print general help, or help on "
+"COMMAND"
+msgstr ""
+"help [COMMAND] 輸出一般性或 COMMAND 的求助訊æ¯"
+
+#: parted/parted.c:2323
+msgid "mklabel"
+msgstr "mklabel"
+
+#: parted/parted.c:2323
+msgid "mktable"
+msgstr "mktable"
+
+#: parted/parted.c:2326
+msgid ""
+"mklabel,mktable LABEL-TYPE create a new disklabel (partition "
+"table)"
+msgstr "mklabel,mktable LABEL-TYPE 建立新的ç£ç¢Ÿæ¨™ç±¤ï¼ˆåˆ†å‰²è¡¨ï¼‰"
+
+#: parted/parted.c:2332
+msgid "mkpart"
+msgstr "mkpart"
+
+#: parted/parted.c:2335
+msgid "mkpart PART-TYPE [FS-TYPE] START END make a partition"
+msgstr "mkpart PART-TYPE [FS-TYPE] START END 建立分割å€"
+
+#: parted/parted.c:2341
+msgid ""
+"'mkpart' makes a partition without creating a new file system on the "
+"partition. FS-TYPE may be specified to set an appropriate partition ID.\n"
+msgstr ""
+"「mkpartã€åªå»ºç«‹åˆ†å‰²å€ï¼Œè€Œä¸åœ¨åˆ†å‰²å€ä¸Šå»ºç«‹æ–°æª”案系統。å¯ä»¥æŒ‡å®šã€ŒFS-TYPEã€ï¼Œä¾†"
+"設定é©ç•¶çš„分割å€è­˜åˆ¥ ID。\n"
+
+#: parted/parted.c:2346
+msgid "name"
+msgstr "name"
+
+#: parted/parted.c:2349
+msgid "name NUMBER NAME name partition NUMBER as NAME"
+msgstr "name NUMBER NAME å°‡åˆ†å‰²å€ NUMBER 命å為 NAME"
+
+#: parted/parted.c:2354
+msgid "print"
+msgstr "print"
+
+#: parted/parted.c:2357
+msgid ""
+"print [devices|free|list,all] display the partition table, or "
+"available devices, or free space, or all found partitions"
+msgstr ""
+"print [devices|free|list,all] 顯示分割表ã€å¯ç”¨è£ç½®ã€å‰©é¤˜ç©ºé–“,或找"
+"到的所有分割å€"
+
+#: parted/parted.c:2361
+msgid ""
+"Without arguments, 'print' displays the entire partition table. However with "
+"the following arguments it performs various other actions.\n"
+msgstr ""
+"「printã€ä¸åŠ å¼•æ•¸å¯é¡¯ç¤ºæ•´å€‹åˆ†å‰²è¡¨ã€‚然而傳入下列引數,它能執行å„種其他動作。\n"
+
+#: parted/parted.c:2363
+msgid " devices : display all active block devices\n"
+msgstr " devices : 顯示所有作用中å€å¡Šè£ç½®\n"
+
+#: parted/parted.c:2364
+msgid ""
+" free : display information about free unpartitioned space on the "
+"current block device\n"
+msgstr " free : 顯示在目å‰å€å¡Šè£ç½®ä¸Šæœªåˆ†å‰²å¯ç”¨ç©ºé–“的資訊\n"
+
+#: parted/parted.c:2366
+msgid ""
+" list, all : display the partition tables of all active block devices\n"
+msgstr ""
+" list, all : 顯示所有作用中å€å¡Šè£ç½®çš„分割表\n"
+"\n"
+
+#: parted/parted.c:2370
+msgid "quit"
+msgstr "quit"
+
+#: parted/parted.c:2373
+msgid "quit exit program"
+msgstr "quit 離開程å¼"
+
+#: parted/parted.c:2378
+msgid "rescue"
+msgstr "rescue"
+
+#: parted/parted.c:2381
+msgid ""
+"rescue START END rescue a lost partition near START "
+"and END"
+msgstr ""
+"rescue START END æ•‘æ´ START 到 END 附近的éºå¤±åˆ†å‰²è¡¨"
+
+#: parted/parted.c:2387
+msgid "resize"
+msgstr "resize"
+
+#: parted/parted.c:2390
+msgid "The resize command was removed in parted 3.0\n"
+msgstr "resize 指令已自 parted 3.0 中移除\n"
+
+#: parted/parted.c:2393
+msgid "resizepart"
+msgstr "resizepart"
+
+#: parted/parted.c:2396
+msgid "resizepart NUMBER END resize partition NUMBER"
+msgstr "resizepart NUMBER END è®Šæ›´åˆ†å‰²å€ NUMBER 的大å°"
+
+#: parted/parted.c:2401
+msgid "rm"
+msgstr "rm"
+
+#: parted/parted.c:2404
+msgid "rm NUMBER delete partition NUMBER"
+msgstr "rm NUMBER åˆªé™¤åˆ†å‰²å€ NUMBER"
+
+#: parted/parted.c:2409
+msgid "select"
+msgstr "select"
+
+#: parted/parted.c:2412
+msgid "select DEVICE choose the device to edit"
+msgstr "select DEVICE é¸æ“‡è¦ç·¨è¼¯çš„è£ç½®"
+
+#: parted/parted.c:2417
+msgid "disk_set"
+msgstr "disk_set"
+
+#: parted/parted.c:2420
+msgid ""
+"disk_set FLAG STATE change the FLAG on selected device"
+msgstr "disk_set FLAG STATE 變更é¸å–è£ç½®çš„ FLAG"
+
+#: parted/parted.c:2425
+msgid "disk_toggle"
+msgstr "disk_toggle"
+
+#: parted/parted.c:2428
+msgid ""
+"disk_toggle [FLAG] toggle the state of FLAG on "
+"selected device"
+msgstr "disk_toggle [FLAG] 切æ›é¸å–è£ç½®ä¸Š FLAG 的狀態"
+
+#: parted/parted.c:2434
+msgid "set"
+msgstr "set"
+
+#: parted/parted.c:2437
+msgid ""
+"set NUMBER FLAG STATE change the FLAG on partition NUMBER"
+msgstr "set NUMBER FLAG STATE è®Šæ›´åˆ†å‰²å€ NUMBER 上的 FLAG"
+
+#: parted/parted.c:2443
+msgid "toggle"
+msgstr "toggle"
+
+#: parted/parted.c:2446
+msgid ""
+"toggle [NUMBER [FLAG]] toggle the state of FLAG on "
+"partition NUMBER"
+msgstr ""
+"toggle [NUMBER [FLAG]] è®Šæ›´åˆ†å‰²å€ NUMBER 上的 FLAG 狀態"
+
+#: parted/parted.c:2452
+msgid "type"
+msgstr ""
+
+#: parted/parted.c:2455
+msgid ""
+"type NUMBER TYPE-ID or TYPE-UUID type set TYPE-ID or TYPE-UUID of "
+"partition NUMBER"
+msgstr ""
+
+#: parted/parted.c:2460
+msgid "unit"
+msgstr "unit"
+
+#: parted/parted.c:2463
+msgid "unit UNIT set the default unit to UNIT"
+msgstr "unit UNIT å°‡é è¨­å–®ä½è¨­å®šç‚º UNIT"
+
+#: parted/parted.c:2468
+msgid "version"
+msgstr "version"
+
+#: parted/parted.c:2471
+msgid ""
+"version display the version number and "
+"copyright information of GNU Parted"
+msgstr ""
+"version é¡¯ç¤ºç›®å‰ GNU Parted 的版本號碼åŠç‰ˆæ¬Š"
+"資訊"
+
+#: parted/parted.c:2475
+msgid ""
+"'version' displays copyright and version information corresponding to this "
+"copy of GNU Parted\n"
+msgstr ""
+"「versionã€é¡¯ç¤ºå°æ‡‰æœ¬ GNU Parted 複本之版權åŠç‰ˆæœ¬è³‡è¨Š\n"
+"\n"
+
+#: parted/parted.c:2545
+#, c-format
+msgid "Usage: %s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]...]\n"
+msgstr "用法:%s [-hlmsfv] [-a<align>] [DEVICE [COMMAND [PARAMETERS]]…]\n"
+
+#: parted/parted.c:2589
+msgid "No device found"
+msgstr "找ä¸åˆ°è£ç½®"
+
+#: parted/parted.c:2626
+msgid "WARNING: You are not superuser. Watch out for permissions.\n"
+msgstr "警告:您ä¸æ˜¯ç³»çµ±ç®¡ç†è€…。 當心權é™ã€‚\n"
+
+#: parted/parted.c:2659
+msgid ""
+"You should reinstall your boot loader before rebooting. Read section 4 of "
+"the Parted User documentation for more information."
+msgstr ""
+"您應該在é‡æ–°å•Ÿå‹•ä¹‹å‰é‡æ–°å®‰è£æ‚¨çš„開機載入程å¼ã€‚詳情請閱讀 Parted 使用者文件的"
+"第四節。"
+
+#: parted/parted.c:2666
+msgid "You may need to update /etc/fstab.\n"
+msgstr "您也許會需è¦æ›´æ–° /etc/fstab。\n"
+
+#: parted/ui.c:164
+msgid "Welcome to GNU Parted! Type 'help' to view a list of commands.\n"
+msgstr "歡迎使用 GNU Partedï¼è¼¸å…¥ 'help' 來檢視指令列表。\n"
+
+#: parted/ui.c:167
+msgid ""
+"Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]\n"
+"Apply COMMANDs with PARAMETERS to DEVICE. If no COMMAND(s) are given, run "
+"in\n"
+"interactive mode.\n"
+msgstr ""
+"用法:parted [é¸é …]… [è£ç½® [指令 [åƒæ•¸]…]…]\n"
+"將帶有「åƒæ•¸ã€çš„「指令ã€æ‡‰ç”¨æ–¼ã€Œè£ç½®ã€ã€‚如果沒有指定「指令ã€ï¼Œå‰‡ä»¥äº¤è«‡æ¨¡å¼åŸ·"
+"行。\n"
+
+#: parted/ui.c:172
+#, c-format
+msgid ""
+"\n"
+"\n"
+"You found a bug in GNU Parted! Here's what you have to do:\n"
+"\n"
+"Don't panic! The bug has most likely not affected any of your data.\n"
+"Help us to fix this bug by doing the following:\n"
+"\n"
+"Check whether the bug has already been fixed by checking\n"
+"the last version of GNU Parted that you can find at:\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"Please check this version prior to bug reporting.\n"
+"\n"
+"If this has not been fixed yet or if you don't know how to check,\n"
+"please visit the GNU Parted website:\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"for further information.\n"
+"\n"
+"Your report should contain the version of this release (%s)\n"
+"along with the error message below, the output of\n"
+"\n"
+"\tparted DEVICE unit co print unit s print\n"
+"\n"
+"and the following history of commands you entered.\n"
+"Also include any additional information about your setup you\n"
+"consider important.\n"
+msgstr ""
+"\n"
+"\n"
+"您找到了 GNU Parted 中的一個錯誤ï¼ä»¥ä¸‹æ˜¯æ‚¨å¿…須進行的事:\n"
+"\n"
+"ä¸å¿…慌張ï¼æ­¤ä¸€éŒ¯èª¤ä¸å¤ªå¯èƒ½æœƒå½±éŸ¿åˆ°æ‚¨çš„任何資料。\n"
+"請用以下方法來幫助我們修正這個錯誤:\n"
+"\n"
+"藉由檢查ä½æ–¼ï¼š\n"
+"\n"
+"\thttp://ftp.gnu.org/gnu/parted/\n"
+"\n"
+"的最新版 GNU Parted,您å¯ä»¥ç¢ºèªæ˜¯å¦é€™å€‹éŒ¯èª¤å·²ç¶“被修正了。\n"
+"請於回報錯誤å‰å…ˆæª¢æŸ¥æ­¤ä¸€ç‰ˆæœ¬ã€‚\n"
+"\n"
+"如果這尚未被修正,或是您ä¸çŸ¥é“如何去檢查,\n"
+"è«‹åƒè¨ª GNU Parted 網å€ï¼š\n"
+"\n"
+"\thttp://www.gnu.org/software/parted\n"
+"\n"
+"以ç²å¾—進一步的資訊。\n"
+"\n"
+"您的回報應該è¦åŒ…å«é‡‹å‡ºçš„版本編號 (%s)\n"
+"以åŠå…¶ä¸‹çš„錯誤訊æ¯ï¼Œç³»åˆ—指令\n"
+"\n"
+"\tparted è£ç½® unit co print unit s print\n"
+"\n"
+"的輸出çµæžœå’Œå…¶ä»–您èªç‚ºé‡è¦çš„設定資訊。\n"
+
+#: parted/ui.c:293
+msgid ""
+"\n"
+"Command History:\n"
+msgstr ""
+"\n"
+"指令歷å²ï¼š\n"
+
+#: parted/ui.c:356
+msgid ""
+"\n"
+"Error: SEGV_MAPERR (Address not mapped to object)\n"
+msgstr ""
+"\n"
+"錯誤:SEGV_MAPERR (ä½å€ä¸¦æœªå°æ‡‰åˆ°ç‰©ä»¶)\n"
+
+#: parted/ui.c:362
+msgid ""
+"\n"
+"Error: SEGV_ACCERR (Invalid permissions for mapped object)\n"
+msgstr ""
+"\n"
+"錯誤:SEGV_ACCERR (å°æ‡‰çš„物件權é™ç„¡æ•ˆ)\n"
+
+#: parted/ui.c:367
+msgid ""
+"\n"
+"Error: A general SIGSEGV signal was encountered.\n"
+msgstr ""
+"\n"
+"錯誤: é‡åˆ°ä¸€èˆ¬çš„ SIGSEGV 訊號。\n"
+
+#: parted/ui.c:391
+msgid ""
+"\n"
+"Error: FPE_INTDIV (Integer: divide by zero)"
+msgstr ""
+"\n"
+"錯誤: FPE_INTDIV (整數: 被零除)"
+
+#: parted/ui.c:396
+msgid ""
+"\n"
+"Error: FPE_INTOVF (Integer: overflow)"
+msgstr ""
+"\n"
+"錯誤: FPE_INTOVF (整數: å‘上溢ä½)"
+
+#: parted/ui.c:401
+msgid ""
+"\n"
+"Error: FPE_FLTDIV (Float: divide by zero)"
+msgstr ""
+"\n"
+"錯誤:FPE_FLTDIV (浮點數: 被零除)"
+
+#: parted/ui.c:406
+msgid ""
+"\n"
+"Error: FPE_FLTOVF (Float: overflow)"
+msgstr ""
+"\n"
+"錯誤: FPE_FLTOVF (浮點數: å‘上溢ä½)"
+
+#: parted/ui.c:411
+msgid ""
+"\n"
+"Error: FPE_FLTUND (Float: underflow)"
+msgstr ""
+"\n"
+"錯誤: FPE_FLTUND (浮點數: å‘下溢ä½)"
+
+#: parted/ui.c:416
+msgid ""
+"\n"
+"Error: FPE_FLTRES (Float: inexact result)"
+msgstr ""
+"\n"
+"錯誤: FPE_FLTRES (浮點數: ä¸æ˜Žç¢ºçš„çµæžœ)"
+
+#: parted/ui.c:421
+msgid ""
+"\n"
+"Error: FPE_FLTINV (Float: invalid operation)"
+msgstr ""
+"\n"
+"錯誤: FPE_FLTINV (浮點數: 無效的æ“作)"
+
+#: parted/ui.c:426
+msgid ""
+"\n"
+"Error: FPE_FLTSUB (Float: subscript out of range)"
+msgstr ""
+"\n"
+"錯誤: FPE_FLTSUB (浮點數: 註標超出範åœ)"
+
+#: parted/ui.c:431
+msgid ""
+"\n"
+"Error: A general SIGFPE signal was encountered."
+msgstr ""
+"\n"
+"錯誤: é‡åˆ°ä¸€èˆ¬çš„ SIGFPE 訊號。"
+
+#: parted/ui.c:455
+msgid ""
+"\n"
+"Error: ILL_ILLOPC (Illegal Opcode)"
+msgstr ""
+"\n"
+"錯誤: ILL_ILLOPC (ä¸åˆæ³•çš„æ“作碼)"
+
+#: parted/ui.c:460
+msgid ""
+"\n"
+"Error: ILL_ILLOPN (Illegal Operand)"
+msgstr ""
+"\n"
+"錯誤: ILL_ILLOPN (ä¸åˆæ³•çš„é‹ç®—å…ƒ)"
+
+#: parted/ui.c:465
+msgid ""
+"\n"
+"Error: ILL_ILLADR (Illegal addressing mode)"
+msgstr ""
+"\n"
+"錯誤: ILL_ILLADR (ä¸åˆæ³•çš„定å€æ¨¡å¼)"
+
+#: parted/ui.c:470
+msgid ""
+"\n"
+"Error: ILL_ILLTRP (Illegal Trap)"
+msgstr ""
+"\n"
+"錯誤: ILL_ILLTRP (ä¸åˆæ³•çš„陷阱)"
+
+#: parted/ui.c:475
+msgid ""
+"\n"
+"Error: ILL_PRVOPC (Privileged Opcode)"
+msgstr ""
+"\n"
+"錯誤: ILL_PRVOPC (具優先權的æ“作碼)"
+
+#: parted/ui.c:480
+msgid ""
+"\n"
+"Error: ILL_PRVREG (Privileged Register)"
+msgstr ""
+"\n"
+"錯誤: ILL_PRVREG (具優先權的暫存器)"
+
+#: parted/ui.c:485
+msgid ""
+"\n"
+"Error: ILL_COPROC (Coprocessor Error)"
+msgstr ""
+"\n"
+"錯誤: ILL_COPROC (輔助處ç†å™¨éŒ¯èª¤)"
+
+#: parted/ui.c:490
+msgid ""
+"\n"
+"Error: ILL_BADSTK (Internal Stack Error)"
+msgstr ""
+"\n"
+"錯誤: ILL_BADSTK (內部堆疊錯誤)"
+
+#: parted/ui.c:495
+msgid ""
+"\n"
+"Error: A general SIGILL signal was encountered."
+msgstr ""
+"\n"
+"錯誤: é‡åˆ°ä¸€èˆ¬çš„ SIGILL 訊號。"
+
+#: parted/ui.c:904
+#, c-format
+msgid "invalid token: %s"
+msgstr "無效的字組:%s"
+
+#: parted/ui.c:1085
+msgid "Expecting a partition number."
+msgstr "需è¦åˆ†å‰²å€ç·¨è™Ÿã€‚"
+
+#: parted/ui.c:1094
+msgid "Partition doesn't exist."
+msgstr "分割å€ä¸å­˜åœ¨ã€‚"
+
+#: parted/ui.c:1114
+msgid "Expecting a file system type."
+msgstr "需è¦æª”案系統類型。"
+
+#: parted/ui.c:1121
+#, c-format
+msgid "Unknown file system type \"%s\"."
+msgstr "ä¸æ˜Žçš„檔案系統類型「%sã€ã€‚"
+
+#: parted/ui.c:1142
+msgid "Expecting a disk label type."
+msgstr "需è¦ç£ç¢Ÿæ¨™ç±¤é¡žåž‹ã€‚"
+
+#: parted/ui.c:1173 parted/ui.c:1209
+msgid "No flags supported"
+msgstr "沒有支æ´çš„旗標"
+
+#: parted/ui.c:1283
+msgid "Can't create any more partitions."
+msgstr "無法建立更多分割å€ã€‚"
+
+#: parted/ui.c:1293
+msgid "Expecting a partition type."
+msgstr "需è¦åˆ†å‰²å€é¡žåž‹ã€‚"
+
+#: parted/ui.c:1442
+msgid "on"
+msgstr "é–‹"
+
+#: parted/ui.c:1443
+msgid "off"
+msgstr "關"
+
+#: parted/ui.c:1460
+msgid "optimal"
+msgstr "最佳"
+
+#: parted/ui.c:1461
+msgid "minimal"
+msgstr "最å°"
+
+#: parted/ui.c:1594
+msgid "OPTIONs:"
+msgstr "é¸é …:"
+
+#: parted/ui.c:1599
+msgid "COMMANDs:"
+msgstr "指令:"
+
+#: parted/ui.c:1602
+#, c-format
+msgid ""
+"\n"
+"Report bugs to %s\n"
+msgstr ""
+"\n"
+"將錯誤回報給 %s\n"
+
+#: parted/ui.c:1609
+#, c-format
+msgid "Using %s\n"
+msgstr "使用 %s\n"
+
+#: parted/ui.c:1689
+msgid "This command does not make sense in non-interactive mode.\n"
+msgstr "這個指令在éžäº¤è«‡æ¨¡å¼ä¸­ä¸å…·ä»»ä½•æ„義。\n"
+
+#~ msgid "Extended partitions cannot be hidden on msdos disk labels."
+#~ msgstr "擴充分割å€ç„¡æ³•éš±è—æ–¼ msdos ç£ç¢Ÿæ¨™ç±¤ä¹‹ä¸Šã€‚"
+
+#~ msgid ""
+#~ "Extended partitions cannot be recovery partitions on msdos disk labels."
+#~ msgstr "擴充分割å€ä¸èƒ½æ˜¯ msdos ç£ç¢Ÿæ¨™ç±¤ä¸Šçš„æ•‘æ´åˆ†å‰²å€ã€‚"
+
+#~ msgid "%s: option '--%s' doesn't allow an argument\n"
+#~ msgstr "%s:é¸é …「--%sã€ä¸å…許有引數\n"
+
+#~ msgid "%s: unrecognized option '--%s'\n"
+#~ msgstr "%s:無法辨識的é¸é …「--%sã€\n"
+
+#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
+#~ msgstr "%s:é¸é …「-W %sã€ä¸å…許有引數\n"
+
+#~ msgid "%s: option '-W %s' requires an argument\n"
+#~ msgstr "%s:é¸é …「-W %sã€éœ€è¦ä¸€å€‹å¼•æ•¸\n"
+
+#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
+#~ msgstr "%s 首é ï¼š<http://www.gnu.org/software/%s/>\n"
+
+#~ msgid "invalid %s%s argument '%s'"
+#~ msgstr "%s%s åƒæ•¸ã€Œ%sã€ç„¡æ•ˆ"
+
+#~ msgid "invalid suffix in %s%s argument '%s'"
+#~ msgstr "%s%s åƒæ•¸ã€Œ%sã€æœ‰ç„¡æ•ˆå¾Œç¶´"
+
+#~ msgid "%s%s argument '%s' too large"
+#~ msgstr "%s%s åƒæ•¸ã€Œ%sã€éŽé•·"
+
+#~ msgid ""
+#~ "The partition table cannot be re-read. This means you need to reboot "
+#~ "before mounting any modified partitions. You also need to reinstall your "
+#~ "boot loader before you reboot (which may require mounting modified "
+#~ "partitions). It is impossible do both things! So you'll need to boot "
+#~ "off a rescue disk, and reinstall your boot loader from the rescue disk. "
+#~ "Read section 4 of the Parted User documentation for more information."
+#~ msgstr ""
+#~ "無法é‡æ–°è®€å…¥åˆ†å‰²å€è¡¨ã€‚åŒæ¨£ï¼Œæ‚¨å¿…須在掛載任何修改éŽçš„分割å€ä¹‹å‰é‡æ–°å•Ÿå‹•ã€‚您"
+#~ "還需è¦åœ¨æ‚¨é‡æ–°å•Ÿå‹•ä¹‹å‰é‡æ–°å®‰è£é–‹æ©Ÿè¼‰å…¥ç¨‹å¼ (它å¯èƒ½éœ€è¦æŽ›è¼‰ä¿®æ”¹éŽçš„分割"
+#~ "å€)。åŒæ™‚åšé€™å…©ä»¶äº‹æ˜¯ä¸å¯èƒ½çš„ï¼æ‰€ä»¥æ‚¨å°±éœ€è¦å¾žå›žå¾©ç¢Ÿç‰‡å•Ÿå‹•ï¼Œä¸¦å¾žå›žå¾©ç¢Ÿç‰‡é‡"
+#~ "新安è£æ‚¨çš„開機載入程å¼ã€‚更多詳情請åƒé–± Parted 使用者文件的第四節。"
+
+#~ msgid ""
+#~ "The partition table on %s cannot be re-read (%s). This means the Hurd "
+#~ "knows nothing about any modifications you made. You should reboot your "
+#~ "computer before doing anything with %s."
+#~ msgstr ""
+#~ "%s 上的分割å€è¡¨ç„¡æ³•è¢«é‡æ–°è®€å– (%s)。這æ„味著 Hurd ä¸çŸ¥é“任何您所作的修改。"
+#~ "æ‚¨æ‡‰è©²åœ¨å° %s åšä»»ä½•æ“作之å‰é‡æ–°å•Ÿå‹•æ‚¨çš„電腦。"
+
+#~ msgid "The boot region doesn't start at the start of the partition."
+#~ msgstr "å•Ÿå‹•å€åŸŸä¸¦æœªå¾žåˆ†å‰²å€çš„起點開始。"
+
+#~ msgid ""
+#~ "This file system has a logical sector size of %d. GNU Parted is known "
+#~ "not to work properly with sector sizes other than 512 bytes."
+#~ msgstr ""
+#~ "此檔案系統的é‚輯ç£å€å¤§å°ç‚º %d。GNU Parted 無法在ç£å€å¤§å°ä¸æ˜¯ 512 ä½å…ƒçµ„çš„"
+#~ "情æ³ä¸‹æ­£ç¢ºå·¥ä½œã€‚"
+
+#~ msgid ""
+#~ "The file %s is marked as a system file. This means moving it could cause "
+#~ "some programs to stop working."
+#~ msgstr "檔案 %s 被標記為系統檔案。 這表示移動它å¯èƒ½æœƒé€ æˆæŸäº›ç¨‹å¼åœæ­¢ä½œç”¨ã€‚"
+
+#~ msgid ""
+#~ " NUMBER : display more detailed information about this particular "
+#~ "partition\n"
+#~ msgstr " 數字 :顯示此一特殊分割å€æ›´è©³ç´°çš„資訊\n"
diff --git a/scripts/data/abi/baseline_symbols.txt b/scripts/data/abi/baseline_symbols.txt
new file mode 100644
index 0000000..69abd82
--- /dev/null
+++ b/scripts/data/abi/baseline_symbols.txt
@@ -0,0 +1,451 @@
+FUNC:__efi_crc32
+FUNC:_amiga_add_id
+FUNC:_amiga_free_ids
+FUNC:_amiga_id_in_list
+FUNC:_copy_hidden_sectors
+FUNC:_fini
+FUNC:_init
+FUNC:_ped_device_probe
+FUNC:_ped_disk_alloc
+FUNC:_ped_disk_free
+FUNC:_ped_partition_alloc
+FUNC:_ped_partition_attempt_align
+FUNC:_ped_partition_free
+FUNC:_update_stats
+FUNC:abs_mod
+FUNC:amiga_find_part
+FUNC:ext2_bcache_deinit
+FUNC:ext2_bcache_dump
+FUNC:ext2_bcache_flush
+FUNC:ext2_bcache_flush_range
+FUNC:ext2_bcache_init
+FUNC:ext2_bcache_sync
+FUNC:ext2_bcreate
+FUNC:ext2_block_relocate
+FUNC:ext2_bread
+FUNC:ext2_brelse
+FUNC:ext2_close
+FUNC:ext2_commit_metadata
+FUNC:ext2_copy_block
+FUNC:ext2_destroy_dev_handle
+FUNC:ext2_do_inode
+FUNC:ext2_find_free_block
+FUNC:ext2_find_free_inode
+FUNC:ext2_get_block_state
+FUNC:ext2_get_inode_offset
+FUNC:ext2_get_inode_state
+FUNC:ext2_inode_relocate
+FUNC:ext2_is_group_sparse
+FUNC:ext2_make_dev_handle_from_parted_geometry
+FUNC:ext2_metadata_push
+FUNC:ext2_mkfs
+FUNC:ext2_move_blocks
+FUNC:ext2_open
+FUNC:ext2_read_blocks
+FUNC:ext2_read_inode
+FUNC:ext2_resize_fs
+FUNC:ext2_set_block_state
+FUNC:ext2_set_inode_state
+FUNC:ext2_sync
+FUNC:ext2_write_blocks
+FUNC:ext2_write_inode
+FUNC:ext2_zero_blocks
+FUNC:ext2_zero_inode
+FUNC:extended_euclid
+FUNC:fat_alloc
+FUNC:fat_alloc_buffers
+FUNC:fat_boot_sector_analyse
+FUNC:fat_boot_sector_generate
+FUNC:fat_boot_sector_probe_type
+FUNC:fat_boot_sector_read
+FUNC:fat_boot_sector_set_boot_code
+FUNC:fat_boot_sector_write
+FUNC:fat_calc_align_sectors
+FUNC:fat_calc_resize_sizes
+FUNC:fat_calc_sizes
+FUNC:fat_check
+FUNC:fat_check_resize_geometry
+FUNC:fat_clobber
+FUNC:fat_close
+FUNC:fat_cluster_to_frag
+FUNC:fat_cluster_to_sector
+FUNC:fat_collect_cluster_info
+FUNC:fat_copy
+FUNC:fat_create
+FUNC:fat_create_fat16
+FUNC:fat_create_fat32
+FUNC:fat_dir_entry_get_first_cluster
+FUNC:fat_dir_entry_get_length
+FUNC:fat_dir_entry_get_name
+FUNC:fat_dir_entry_has_first_cluster
+FUNC:fat_dir_entry_is_active
+FUNC:fat_dir_entry_is_directory
+FUNC:fat_dir_entry_is_file
+FUNC:fat_dir_entry_is_null_term
+FUNC:fat_dir_entry_is_system_file
+FUNC:fat_dir_entry_set_first_cluster
+FUNC:fat_duplicate_clusters
+FUNC:fat_frag_to_cluster
+FUNC:fat_frag_to_sector
+FUNC:fat_free
+FUNC:fat_free_buffers
+FUNC:fat_get_cluster_flag
+FUNC:fat_get_cluster_usage
+FUNC:fat_get_copy_constraint
+FUNC:fat_get_create_constraint_fat16
+FUNC:fat_get_create_constraint_fat32
+FUNC:fat_get_fragment_flag
+FUNC:fat_get_resize_constraint
+FUNC:fat_info_sector_generate
+FUNC:fat_info_sector_read
+FUNC:fat_info_sector_write
+FUNC:fat_is_fragment_active
+FUNC:fat_is_sector_in_clusters
+FUNC:fat_max_cluster_count
+FUNC:fat_max_cluster_size
+FUNC:fat_min_cluster_count
+FUNC:fat_min_cluster_size
+FUNC:fat_min_reserved_sector_count
+FUNC:fat_op_context_create_initial_fat
+FUNC:fat_op_context_destroy
+FUNC:fat_op_context_map_cluster
+FUNC:fat_op_context_map_fragment
+FUNC:fat_op_context_map_static_cluster
+FUNC:fat_op_context_map_static_fragment
+FUNC:fat_op_context_new
+FUNC:fat_open
+FUNC:fat_probe
+FUNC:fat_probe_fat16
+FUNC:fat_probe_fat32
+FUNC:fat_read_cluster
+FUNC:fat_read_clusters
+FUNC:fat_read_fragment
+FUNC:fat_read_fragments
+FUNC:fat_recommend_min_cluster_size
+FUNC:fat_resize
+FUNC:fat_sector_to_cluster
+FUNC:fat_sector_to_frag
+FUNC:fat_set_frag_sectors
+FUNC:fat_table_alloc_check_cluster
+FUNC:fat_table_alloc_cluster
+FUNC:fat_table_clear
+FUNC:fat_table_compare
+FUNC:fat_table_count_stats
+FUNC:fat_table_destroy
+FUNC:fat_table_duplicate
+FUNC:fat_table_entry_size
+FUNC:fat_table_get
+FUNC:fat_table_is_active
+FUNC:fat_table_is_available
+FUNC:fat_table_is_bad
+FUNC:fat_table_is_empty
+FUNC:fat_table_is_eof
+FUNC:fat_table_new
+FUNC:fat_table_read
+FUNC:fat_table_set
+FUNC:fat_table_set_avail
+FUNC:fat_table_set_bad
+FUNC:fat_table_set_cluster_count
+FUNC:fat_table_set_eof
+FUNC:fat_table_write
+FUNC:fat_table_write_all
+FUNC:fat_traverse_begin
+FUNC:fat_traverse_complete
+FUNC:fat_traverse_directory
+FUNC:fat_traverse_entries_per_buffer
+FUNC:fat_traverse_mark_dirty
+FUNC:fat_traverse_next_dir_entry
+FUNC:fat_write_cluster
+FUNC:fat_write_clusters
+FUNC:fat_write_fragment
+FUNC:fat_write_fragments
+FUNC:fat_write_sync_cluster
+FUNC:fat_write_sync_clusters
+FUNC:fat_write_sync_fragment
+FUNC:fat_write_sync_fragments
+FUNC:findit
+FUNC:geom_dal_create
+FUNC:geom_dal_free
+FUNC:geom_dal_reopen
+FUNC:hfs_and_wrapper_probe
+FUNC:hfs_btree_search
+FUNC:hfs_file_close
+FUNC:hfs_file_open
+FUNC:hfs_file_read_sector
+FUNC:hfs_file_write_sector
+FUNC:hfs_find_start_pack
+FUNC:hfs_free_bad_blocks_list
+FUNC:hfs_get_empty_end
+FUNC:hfs_is_bad_block
+FUNC:hfs_pack_free_space_from_block
+FUNC:hfs_probe
+FUNC:hfs_read_bad_blocks
+FUNC:hfs_update_mdb
+FUNC:hfsc_cache_add_extent
+FUNC:hfsc_cache_move_extent
+FUNC:hfsc_cache_search_extent
+FUNC:hfsc_can_use_geom
+FUNC:hfsc_delete_cache
+FUNC:hfsc_new_cache
+FUNC:hfsj_replay_journal
+FUNC:hfsj_update_jib
+FUNC:hfsj_update_jl
+FUNC:hfsplus_btree_search
+FUNC:hfsplus_file_close
+FUNC:hfsplus_file_open
+FUNC:hfsplus_file_read
+FUNC:hfsplus_file_write
+FUNC:hfsplus_find_start_pack
+FUNC:hfsplus_free_bad_blocks_list
+FUNC:hfsplus_get_empty_end
+FUNC:hfsplus_get_min_size
+FUNC:hfsplus_is_bad_block
+FUNC:hfsplus_pack_free_space_from_block
+FUNC:hfsplus_probe
+FUNC:hfsplus_read_bad_blocks
+FUNC:hfsplus_update_vh
+FUNC:hfsx_probe
+FUNC:mac_alloc
+FUNC:ped_alignment_align_down
+FUNC:ped_alignment_align_nearest
+FUNC:ped_alignment_align_up
+FUNC:ped_alignment_destroy
+FUNC:ped_alignment_duplicate
+FUNC:ped_alignment_init
+FUNC:ped_alignment_intersect
+FUNC:ped_alignment_is_aligned
+FUNC:ped_alignment_new
+FUNC:ped_assert
+FUNC:ped_calloc
+FUNC:ped_constraint_any
+FUNC:ped_constraint_destroy
+FUNC:ped_constraint_done
+FUNC:ped_constraint_duplicate
+FUNC:ped_constraint_exact
+FUNC:ped_constraint_init
+FUNC:ped_constraint_intersect
+FUNC:ped_constraint_is_solution
+FUNC:ped_constraint_new
+FUNC:ped_constraint_new_from_max
+FUNC:ped_constraint_new_from_min
+FUNC:ped_constraint_new_from_min_max
+FUNC:ped_constraint_solve_max
+FUNC:ped_constraint_solve_nearest
+FUNC:ped_debug
+FUNC:ped_debug_set_handler
+FUNC:ped_device_begin_external_access
+FUNC:ped_device_check
+FUNC:ped_device_close
+FUNC:ped_device_destroy
+FUNC:ped_device_end_external_access
+FUNC:ped_device_free_all
+FUNC:ped_device_get
+FUNC:ped_device_get_constraint
+FUNC:ped_device_get_next
+FUNC:ped_device_is_busy
+FUNC:ped_device_open
+FUNC:ped_device_probe_all
+FUNC:ped_device_read
+FUNC:ped_device_sync
+FUNC:ped_device_sync_fast
+FUNC:ped_device_write
+FUNC:ped_disk_add_partition
+FUNC:ped_disk_amiga_done
+FUNC:ped_disk_amiga_init
+FUNC:ped_disk_bsd_done
+FUNC:ped_disk_bsd_init
+FUNC:ped_disk_check
+FUNC:ped_disk_clobber
+FUNC:ped_disk_commit
+FUNC:ped_disk_commit_to_dev
+FUNC:ped_disk_commit_to_os
+FUNC:ped_disk_delete_all
+FUNC:ped_disk_delete_partition
+FUNC:ped_disk_destroy
+FUNC:ped_disk_duplicate
+FUNC:ped_disk_dvh_done
+FUNC:ped_disk_dvh_init
+FUNC:ped_disk_extended_partition
+FUNC:ped_disk_get_last_partition_num
+FUNC:ped_disk_get_max_partition_geometry
+FUNC:ped_disk_get_max_primary_partition_count
+FUNC:ped_disk_get_partition
+FUNC:ped_disk_get_partition_by_sector
+FUNC:ped_disk_get_primary_partition_count
+FUNC:ped_disk_gpt_done
+FUNC:ped_disk_gpt_init
+FUNC:ped_disk_loop_done
+FUNC:ped_disk_loop_init
+FUNC:ped_disk_mac_done
+FUNC:ped_disk_mac_init
+FUNC:ped_disk_maximize_partition
+FUNC:ped_disk_minimize_extended_partition
+FUNC:ped_disk_msdos_done
+FUNC:ped_disk_msdos_init
+FUNC:ped_disk_new
+FUNC:ped_disk_new_fresh
+FUNC:ped_disk_next_partition
+FUNC:ped_disk_pc98_done
+FUNC:ped_disk_pc98_init
+FUNC:ped_disk_print
+FUNC:ped_disk_probe
+FUNC:ped_disk_remove_partition
+FUNC:ped_disk_set_partition_geom
+FUNC:ped_disk_sun_done
+FUNC:ped_disk_sun_init
+FUNC:ped_disk_type_check_feature
+FUNC:ped_disk_type_get
+FUNC:ped_disk_type_get_next
+FUNC:ped_disk_type_register
+FUNC:ped_disk_type_unregister
+FUNC:ped_div_round_to_nearest
+FUNC:ped_div_round_up
+FUNC:ped_exception_catch
+FUNC:ped_exception_fetch_all
+FUNC:ped_exception_get_option_string
+FUNC:ped_exception_get_type_string
+FUNC:ped_exception_leave_all
+FUNC:ped_exception_rethrow
+FUNC:ped_exception_set_handler
+FUNC:ped_exception_throw
+FUNC:ped_file_system_amiga_done
+FUNC:ped_file_system_amiga_init
+FUNC:ped_file_system_check
+FUNC:ped_file_system_clobber
+FUNC:ped_file_system_close
+FUNC:ped_file_system_copy
+FUNC:ped_file_system_create
+FUNC:ped_file_system_ext2_done
+FUNC:ped_file_system_ext2_init
+FUNC:ped_file_system_fat_done
+FUNC:ped_file_system_fat_init
+FUNC:ped_file_system_get_copy_constraint
+FUNC:ped_file_system_get_create_constraint
+FUNC:ped_file_system_get_resize_constraint
+FUNC:ped_file_system_hfs_done
+FUNC:ped_file_system_hfs_init
+FUNC:ped_file_system_jfs_done
+FUNC:ped_file_system_jfs_init
+FUNC:ped_file_system_linux_swap_done
+FUNC:ped_file_system_linux_swap_init
+FUNC:ped_file_system_ntfs_done
+FUNC:ped_file_system_ntfs_init
+FUNC:ped_file_system_open
+FUNC:ped_file_system_probe
+FUNC:ped_file_system_probe_specific
+FUNC:ped_file_system_reiserfs_done
+FUNC:ped_file_system_reiserfs_init
+FUNC:ped_file_system_resize
+FUNC:ped_file_system_type_get
+FUNC:ped_file_system_type_get_next
+FUNC:ped_file_system_type_register
+FUNC:ped_file_system_type_unregister
+FUNC:ped_file_system_udf_init
+FUNC:ped_file_system_udf_done
+FUNC:ped_file_system_ufs_done
+FUNC:ped_file_system_ufs_init
+FUNC:ped_file_system_xfs_done
+FUNC:ped_file_system_xfs_init
+FUNC:ped_geometry_check
+FUNC:ped_geometry_destroy
+FUNC:ped_geometry_duplicate
+FUNC:ped_geometry_init
+FUNC:ped_geometry_intersect
+FUNC:ped_geometry_map
+FUNC:ped_geometry_new
+FUNC:ped_geometry_read
+FUNC:ped_geometry_set
+FUNC:ped_geometry_set_end
+FUNC:ped_geometry_set_start
+FUNC:ped_geometry_sync
+FUNC:ped_geometry_sync_fast
+FUNC:ped_geometry_test_equal
+FUNC:ped_geometry_test_inside
+FUNC:ped_geometry_test_overlap
+FUNC:ped_geometry_test_sector_inside
+FUNC:ped_geometry_write
+FUNC:ped_get_version
+FUNC:ped_greatest_common_divisor
+FUNC:ped_malloc
+FUNC:ped_partition_destroy
+FUNC:ped_partition_flag_get_by_name
+FUNC:ped_partition_flag_get_name
+FUNC:ped_partition_flag_next
+FUNC:ped_partition_get_flag
+FUNC:ped_partition_get_name
+FUNC:ped_partition_get_path
+FUNC:ped_partition_is_active
+FUNC:ped_partition_is_busy
+FUNC:ped_partition_is_flag_available
+FUNC:ped_partition_new
+FUNC:ped_partition_print
+FUNC:ped_partition_set_flag
+FUNC:ped_partition_set_name
+FUNC:ped_partition_set_system
+FUNC:ped_partition_type_get_name
+FUNC:ped_register_disk_type
+FUNC:ped_round_down_to
+FUNC:ped_round_to_nearest
+FUNC:ped_round_up_to
+FUNC:ped_set_architecture
+FUNC:ped_timer_destroy
+FUNC:ped_timer_destroy_nested
+FUNC:ped_timer_new
+FUNC:ped_timer_new_nested
+FUNC:ped_timer_reset
+FUNC:ped_timer_set_state_name
+FUNC:ped_timer_touch
+FUNC:ped_timer_update
+FUNC:ped_unit_format
+FUNC:ped_unit_format_byte
+FUNC:ped_unit_format_custom
+FUNC:ped_unit_format_custom_byte
+FUNC:ped_unit_get_by_name
+FUNC:ped_unit_get_default
+FUNC:ped_unit_get_name
+FUNC:ped_unit_get_size
+FUNC:ped_unit_parse
+FUNC:ped_unit_parse_custom
+FUNC:ped_unit_set_default
+FUNC:ped_unregister_disk_type
+FUNC:raw_part_parse
+NOTYPE:__bss_start
+NOTYPE:_edata
+NOTYPE:_end
+OBJECT:12:linux_disk_ops
+OBJECT:16:_affs0_type
+OBJECT:16:_affs1_type
+OBJECT:16:_affs2_type
+OBJECT:16:_affs3_type
+OBJECT:16:_affs4_type
+OBJECT:16:_affs5_type
+OBJECT:16:_affs6_type
+OBJECT:16:_affs7_type
+OBJECT:16:_amufs0_type
+OBJECT:16:_amufs1_type
+OBJECT:16:_amufs2_type
+OBJECT:16:_amufs3_type
+OBJECT:16:_amufs4_type
+OBJECT:16:_amufs5_type
+OBJECT:16:_amufs_type
+OBJECT:16:_apfs1_type
+OBJECT:16:_apfs2_type
+OBJECT:16:_asfs_type
+OBJECT:16:fat16_type
+OBJECT:16:fat32_type
+OBJECT:1:fat16
+OBJECT:24:ops
+OBJECT:324:xfsstats
+OBJECT:4:ext2_buffer_cache_pool_size
+OBJECT:4:ext2_hash_bits
+OBJECT:4:ext2_relocator_pool_size
+OBJECT:4:hfs_block
+OBJECT:4:hfs_block_count
+OBJECT:4:hfsp_block
+OBJECT:4:hfsp_block_count
+OBJECT:4:ped_alignment_any
+OBJECT:4:ped_alignment_none
+OBJECT:4:ped_architecture
+OBJECT:4:ped_exception
+OBJECT:8:_bitmap
+OBJECT:8:ped_linux_arch
diff --git a/scripts/extract_symvers b/scripts/extract_symvers
new file mode 100755
index 0000000..7e87baa
--- /dev/null
+++ b/scripts/extract_symvers
@@ -0,0 +1,66 @@
+#!/bin/sh
+
+# Copyright (C) 2002-2003, 2007, 2009-2014, 2019-2023 Free Software Foundation,
+# Inc.
+#
+# This file is part of the GNU ISO C++ Library. This library is free
+# software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this library. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, you may use this file as part of a free software
+# library without restriction. Specifically, if other files instantiate
+# templates or use macros or inline functions from this file, or you compile
+# this file and link it with other files to produce an executable, this
+# file does not by itself cause the resulting executable to be covered by
+# the GNU General Public License. This exception does not however
+# invalidate any other reasons why the executable file might be covered by
+# the GNU General Public License.
+
+
+if test ${#} -lt 2 || test $1 = '--help'; then
+ echo "Usage: extract_symvers shared_lib output_file" 1>&2
+ exit 1
+fi
+
+lib=$1
+output=$2
+
+# GNU binutils, somewhere after version 2.11.2, requires -W/--wide to avoid
+# default line truncation. -W is not supported and truncation did not occur
+# by default before that point.
+readelf="readelf --symbols"
+if readelf --help | grep -- --wide > /dev/null; then
+ readelf="$readelf --wide"
+fi
+
+# This avoids weird sorting problems later.
+LC_ALL=C
+export LC_ALL
+LANG=C
+export LANG
+
+tmp=extract.$$
+
+${readelf} ${lib} | sed '/\.dynsym/,/^$/p;d' | egrep -v ' (LOCAL|UND) ' |\
+awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
+ printf "%s:%s\n", $4, $8;
+ else if ($4 == "OBJECT")
+ printf "%s:%s:%s\n", $4, $3, $8;
+ }' | sort | uniq > $tmp 2>&1
+# else printf "Huh? What is %s?\n", $8;
+
+
+# I think we'll be doing some more with this file, but for now, dump.
+mv $tmp $output
+
+exit 0
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..fa27b44
--- /dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,150 @@
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+
+TESTS = \
+ help-version.sh \
+ t0000-basic.sh \
+ t0001-tiny.sh \
+ t0010-script-no-ctrl-chars.sh \
+ t0100-print.sh \
+ t0101-print-empty.sh \
+ t0200-gpt.sh \
+ t0201-gpt.sh \
+ t0202-gpt-pmbr.sh \
+ t0203-gpt-tiny-device-abort.sh \
+ t0203-gpt-shortened-device-primary-valid.sh \
+ t0203-gpt-create-on-min-sized-device.sh \
+ t0205-gpt-list-clobbers-pmbr.sh \
+ t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh \
+ t0207-IEC-binary-notation.sh \
+ t0208-mkpart-end-in-IEC.sh \
+ t0209-gpt-pmbr_boot.sh \
+ t0210-gpt-resized-partition-entry-array.sh \
+ t0211-gpt-rewrite-header.sh \
+ t0212-gpt-many-partitions.sh \
+ t0213-mkpart-start-negative.sh \
+ t0215-gpt-attrs.sh \
+ t0220-gpt-msftres.sh \
+ t0250-gpt.sh \
+ t0251-gpt-unicode.sh \
+ t0280-gpt-corrupt.sh \
+ t0281-gpt-grow.sh \
+ t0282-gpt-move-backup.sh \
+ t0283-overlap-partitions.sh \
+ t0290-gpt-name.sh \
+ t0300-dos-on-gpt.sh \
+ t0301-overwrite-gpt-pmbr.sh \
+ t0350-mac-PT-increases-sector-size.sh \
+ t0400-loop-clobber-infloop.sh \
+ t0500-dup-clobber.sh \
+ t0501-duplicate.sh \
+ t0800-json-gpt.sh \
+ t0801-json-msdos.sh \
+ t0900-type-gpt.sh \
+ t0901-type-gpt-invalid.sh \
+ t0910-type-dos.sh \
+ t0911-type-dos-invalid.sh \
+ t1100-busy-label.sh \
+ t1101-busy-partition.sh \
+ t1102-loop-label.sh \
+ t1104-remove-and-add-partition.sh \
+ t1700-probe-fs.sh \
+ t1701-rescue-fs.sh \
+ t2200-dos-label-recog.sh \
+ t2201-pc98-label-recog.sh \
+ t2300-dos-label-extended-bootcode.sh \
+ t2310-dos-extended-2-sector-min-offset.sh \
+ t2320-dos-extended-noclobber.sh \
+ t2400-dos-hfs-partition-type.sh \
+ t2410-dos-udf-partition-type.sh \
+ t2500-probe-corrupt-hfs.sh \
+ t3000-resize-fs.sh \
+ t3200-resize-partition.sh \
+ t3200-type-change.sh \
+ t3210-gpt-type-change.sh \
+ t3300-palo-prep.sh \
+ t3310-flags.sh \
+ t3400-whole-disk-FAT-partition.sh \
+ t4000-sun-raid-type.sh \
+ t4001-sun-vtoc.sh \
+ t4100-msdos-partition-limits.sh \
+ t4100-dvh-partition-limits.sh \
+ t4100-msdos-starting-sector.sh \
+ t4200-partprobe.sh \
+ t4300-nilfs2-tiny.sh \
+ t4301-nilfs2-badsb2.sh \
+ t4302-nilfs2-lessbadsb2.sh \
+ t5000-tags.sh \
+ t6000-dm.sh \
+ t6001-psep.sh \
+ t6002-dm-busy.sh \
+ t6003-dm-hide.sh \
+ t6004-dm-many-partitions.sh \
+ t6005-dm-uuid.sh \
+ t6006-dm-512b-sectors.sh \
+ t6100-mdraid-partitions.sh \
+ t7000-scripting.sh \
+ t8000-loop.sh \
+ t8001-loop-blkpg.sh \
+ t9010-big-sector.sh \
+ t9020-alignment.sh \
+ t9021-maxima.sh \
+ t9022-one-unit-snap.sh \
+ t9023-value-lt-one.sh \
+ t9024-msdos-1s-partition.sh \
+ t9025-gpt-1s-partition.sh \
+ t9030-align-check.sh \
+ t9040-many-partitions.sh \
+ t9041-undetected-in-use-16th-partition.sh \
+ t9042-dos-partition-limit.sh \
+ t9050-partition-table-types.sh \
+ t9060-gpt-grow-script-fix.sh
+
+EXTRA_DIST = \
+ $(TESTS) t-local.sh t-lvm.sh \
+ init.cfg init.sh t-lib-helpers.sh gpt-header-munge \
+ gpt-header-move msdos-overlap gpt-attrs
+
+check_PROGRAMS = print-align print-flags print-max dup-clobber duplicate \
+ fs-resize
+fs_resize_LDADD = \
+ $(top_builddir)/libparted/fs/libparted-fs-resize.la \
+ $(top_builddir)/libparted/libparted.la
+
+LDADD = \
+ $(top_builddir)/libparted/libparted.la
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+
+parted_dir = $(abs_top_builddir)/parted
+pp_dir = $(abs_top_builddir)/partprobe
+sep = $(PATH_SEPARATOR)
+
+# Note that the first lines are statements. They ensure that environment
+# variables that can perturb tests are unset or set to expected values.
+# The rest are envvar settings that propagate build-related Makefile
+# variables to test scripts.
+TESTS_ENVIRONMENT = \
+ tmp__=$$TMPDIR; test -d "$$tmp__" || tmp__=.; \
+ TMPDIR=$$tmp__; export TMPDIR; \
+ export \
+ abs_top_builddir='$(abs_top_builddir)' \
+ abs_top_srcdir='$(abs_top_srcdir)' \
+ abs_srcdir='$(abs_srcdir)' \
+ built_programs=parted \
+ srcdir='$(srcdir)' \
+ top_srcdir='$(top_srcdir)' \
+ AWK='$(AWK)' \
+ PACKAGE_BUGREPORT='$(PACKAGE_BUGREPORT)' \
+ PACKAGE_VERSION=$(PACKAGE_VERSION) \
+ CONFIG_HEADER='$(abs_top_builddir)/lib/config.h' \
+ ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER) \
+ PARTED_TEST_NAME=`basename '$(abs_srcdir)'`,`echo $$tst|sed 's,^\./,,;s,/,-,g'`\
+ PATH='$(abs_top_builddir)/parted$(PATH_SEPARATOR)'"$$PATH" \
+ VERSION=$(VERSION) \
+ ; 9>&2
+
+VERBOSE = yes
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644
index 0000000..d8546d2
--- /dev/null
+++ b/tests/Makefile.in
@@ -0,0 +1,2518 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = print-align$(EXEEXT) print-flags$(EXEEXT) \
+ print-max$(EXEEXT) dup-clobber$(EXEEXT) duplicate$(EXEEXT) \
+ fs-resize$(EXEEXT)
+subdir = tests
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/__inline.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
+ $(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/assert.m4 \
+ $(top_srcdir)/m4/assert_h.m4 $(top_srcdir)/m4/btowc.m4 \
+ $(top_srcdir)/m4/build-to-host.m4 \
+ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/c-bool.m4 \
+ $(top_srcdir)/m4/calloc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/clock_time.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/config-h.m4 \
+ $(top_srcdir)/m4/configmake.m4 $(top_srcdir)/m4/ctype_h.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
+ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
+ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
+ $(top_srcdir)/m4/error_h.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+ $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
+ $(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
+ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/free.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fsync.m4 \
+ $(top_srcdir)/m4/ftruncate.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \
+ $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/getrandom.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/iconv.m4 \
+ $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_pton.m4 \
+ $(top_srcdir)/m4/intl-thread-locale.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/inttypes.m4 \
+ $(top_srcdir)/m4/ioctl.m4 $(top_srcdir)/m4/isblank.m4 \
+ $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \
+ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ignore.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
+ $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \
+ $(top_srcdir)/m4/localename.m4 $(top_srcdir)/m4/lock.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \
+ $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \
+ $(top_srcdir)/m4/mempcpy.m4 $(top_srcdir)/m4/minmax.m4 \
+ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkstemp.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
+ $(top_srcdir)/m4/netinet_in_h.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/o-direct.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
+ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/perror.m4 \
+ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/priv-set.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/m4/pselect.m4 $(top_srcdir)/m4/pthread-thread.m4 \
+ $(top_srcdir)/m4/pthread_h.m4 \
+ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
+ $(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
+ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
+ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/rawmemchr.m4 \
+ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rpmatch.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/sched_h.m4 \
+ $(top_srcdir)/m4/sched_yield.m4 $(top_srcdir)/m4/select.m4 \
+ $(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/setenv.m4 \
+ $(top_srcdir)/m4/setlocale.m4 \
+ $(top_srcdir)/m4/setlocale_null.m4 \
+ $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/socketlib.m4 $(top_srcdir)/m4/sockets.m4 \
+ $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/sockpfaf.m4 \
+ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \
+ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \
+ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdio_h.m4 \
+ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strerror_r.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtoll.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/symlink.m4 \
+ $(top_srcdir)/m4/sys_ioctl_h.m4 \
+ $(top_srcdir)/m4/sys_random_h.m4 \
+ $(top_srcdir)/m4/sys_select_h.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
+ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/thread.m4 \
+ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/time.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ $(top_srcdir)/m4/unlink.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/usleep.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xstrtol.m4 \
+ $(top_srcdir)/m4/yield.m4 $(top_srcdir)/m4/zzgnulib.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+dup_clobber_SOURCES = dup-clobber.c
+dup_clobber_OBJECTS = dup-clobber.$(OBJEXT)
+dup_clobber_LDADD = $(LDADD)
+dup_clobber_DEPENDENCIES = $(top_builddir)/libparted/libparted.la
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+duplicate_SOURCES = duplicate.c
+duplicate_OBJECTS = duplicate.$(OBJEXT)
+duplicate_LDADD = $(LDADD)
+duplicate_DEPENDENCIES = $(top_builddir)/libparted/libparted.la
+fs_resize_SOURCES = fs-resize.c
+fs_resize_OBJECTS = fs-resize.$(OBJEXT)
+fs_resize_DEPENDENCIES = \
+ $(top_builddir)/libparted/fs/libparted-fs-resize.la \
+ $(top_builddir)/libparted/libparted.la
+print_align_SOURCES = print-align.c
+print_align_OBJECTS = print-align.$(OBJEXT)
+print_align_LDADD = $(LDADD)
+print_align_DEPENDENCIES = $(top_builddir)/libparted/libparted.la
+print_flags_SOURCES = print-flags.c
+print_flags_OBJECTS = print-flags.$(OBJEXT)
+print_flags_LDADD = $(LDADD)
+print_flags_DEPENDENCIES = $(top_builddir)/libparted/libparted.la
+print_max_SOURCES = print-max.c
+print_max_OBJECTS = print-max.$(OBJEXT)
+print_max_LDADD = $(LDADD)
+print_max_DEPENDENCIES = $(top_builddir)/libparted/libparted.la
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/dup-clobber.Po \
+ ./$(DEPDIR)/duplicate.Po ./$(DEPDIR)/fs-resize.Po \
+ ./$(DEPDIR)/print-align.Po ./$(DEPDIR)/print-flags.Po \
+ ./$(DEPDIR)/print-max.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = dup-clobber.c duplicate.c fs-resize.c print-align.c \
+ print-flags.c print-max.c
+DIST_SOURCES = dup-clobber.c duplicate.c fs-resize.c print-align.c \
+ print-flags.c print-max.c
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.sh.log=.log)
+SH_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+SH_LOG_COMPILE = $(SH_LOG_COMPILER) $(AM_SH_LOG_FLAGS) $(SH_LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+ $(top_srcdir)/build-aux/depcomp \
+ $(top_srcdir)/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkgdatadir = @pkgdatadir@
+pkgincludedir = @pkgincludedir@
+pkglibdir = @pkglibdir@
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+ASSERT_H = @ASSERT_H@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BUILDINFO = @BUILDINFO@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+CHECK_CFLAGS = @CHECK_CFLAGS@
+CHECK_LIBS = @CHECK_LIBS@
+CLOCK_TIME_LIB = @CLOCK_TIME_LIB@
+CONFIG_INCLUDE = @CONFIG_INCLUDE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DM_LIBS = @DM_LIBS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENABLE_DEVICE_MAPPER = @ENABLE_DEVICE_MAPPER@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+ERROR_H = @ERROR_H@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FILECMD = @FILECMD@
+GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
+GETOPT_H = @GETOPT_H@
+GETRANDOM_LIB = @GETRANDOM_LIB@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@
+GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@
+GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@
+GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@
+GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@
+GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@
+GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@
+GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@
+GL_GNULIB_BIND = @GL_GNULIB_BIND@
+GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@
+GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@
+GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@
+GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@
+GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@
+GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@
+GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@
+GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@
+GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@
+GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@
+GL_GNULIB_CREAT = @GL_GNULIB_CREAT@
+GL_GNULIB_CTIME = @GL_GNULIB_CTIME@
+GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@
+GL_GNULIB_DUP = @GL_GNULIB_DUP@
+GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@
+GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@
+GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@
+GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@
+GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@
+GL_GNULIB_EXECL = @GL_GNULIB_EXECL@
+GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@
+GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@
+GL_GNULIB_EXECV = @GL_GNULIB_EXECV@
+GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@
+GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@
+GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@
+GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@
+GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@
+GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@
+GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@
+GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@
+GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@
+GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@
+GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@
+GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@
+GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@
+GL_GNULIB_FFSL = @GL_GNULIB_FFSL@
+GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@
+GL_GNULIB_FGETC = @GL_GNULIB_FGETC@
+GL_GNULIB_FGETS = @GL_GNULIB_FGETS@
+GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@
+GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@
+GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@
+GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@
+GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@
+GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@
+GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@
+GL_GNULIB_FREAD = @GL_GNULIB_FREAD@
+GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@
+GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@
+GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@
+GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@
+GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@
+GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@
+GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@
+GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@
+GL_GNULIB_FTELL = @GL_GNULIB_FTELL@
+GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@
+GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@
+GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@
+GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@
+GL_GNULIB_GETC = @GL_GNULIB_GETC@
+GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@
+GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@
+GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@
+GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@
+GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@
+GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@
+GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@
+GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@
+GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@
+GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@
+GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@
+GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@
+GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@
+GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@
+GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@
+GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@
+GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@
+GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@
+GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@
+GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@
+GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@
+GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@
+GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@
+GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@
+GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@
+GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@
+GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@
+GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@
+GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@
+GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@
+GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@
+GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@
+GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@
+GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@
+GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@
+GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@
+GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@
+GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@
+GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@
+GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@
+GL_GNULIB_LINK = @GL_GNULIB_LINK@
+GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@
+GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@
+GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@
+GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@
+GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@
+GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@
+GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@
+GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@
+GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@
+GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@
+GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@
+GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@
+GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@
+GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@
+GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@
+GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@
+GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@
+GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@
+GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@
+GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@
+GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@
+GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@
+GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@
+GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@
+GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@
+GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@
+GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@
+GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@
+GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@
+GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@
+GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@
+GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@
+GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@
+GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@
+GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@
+GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@
+GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@
+GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@
+GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@
+GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@
+GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@
+GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@
+GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@
+GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@
+GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@
+GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@
+GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@
+GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@
+GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@
+GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@
+GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@
+GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@
+GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@
+GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@
+GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@
+GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@
+GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@
+GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@
+GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@
+GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@
+GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@
+GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@
+GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@
+GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@
+GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@
+GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@
+GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
+GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
+GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@
+GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
+GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
+GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
+GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
+GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
+GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@
+GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@
+GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@
+GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@
+GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@
+GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@
+GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@
+GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@
+GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@
+GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@
+GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@
+GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@
+GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@
+GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@
+GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@
+GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@
+GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@
+GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@
+GL_GNULIB_OPEN = @GL_GNULIB_OPEN@
+GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@
+GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@
+GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@
+GL_GNULIB_PERROR = @GL_GNULIB_PERROR@
+GL_GNULIB_PIPE = @GL_GNULIB_PIPE@
+GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@
+GL_GNULIB_POPEN = @GL_GNULIB_POPEN@
+GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@
+GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@
+GL_GNULIB_PREAD = @GL_GNULIB_PREAD@
+GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@
+GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@
+GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@
+GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@
+GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@
+GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
+GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@
+GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@
+GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@
+GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@
+GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@
+GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@
+GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@
+GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@
+GL_GNULIB_PUTC = @GL_GNULIB_PUTC@
+GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@
+GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@
+GL_GNULIB_PUTS = @GL_GNULIB_PUTS@
+GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@
+GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@
+GL_GNULIB_RAISE = @GL_GNULIB_RAISE@
+GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@
+GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@
+GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@
+GL_GNULIB_READ = @GL_GNULIB_READ@
+GL_GNULIB_READLINK = @GL_GNULIB_READLINK@
+GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@
+GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@
+GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@
+GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@
+GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@
+GL_GNULIB_RECV = @GL_GNULIB_RECV@
+GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@
+GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@
+GL_GNULIB_RENAME = @GL_GNULIB_RENAME@
+GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@
+GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@
+GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@
+GL_GNULIB_SCANF = @GL_GNULIB_SCANF@
+GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@
+GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@
+GL_GNULIB_SELECT = @GL_GNULIB_SELECT@
+GL_GNULIB_SEND = @GL_GNULIB_SEND@
+GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@
+GL_GNULIB_SETENV = @GL_GNULIB_SETENV@
+GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@
+GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@
+GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@
+GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@
+GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@
+GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@
+GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@
+GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@
+GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@
+GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@
+GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@
+GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@
+GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@
+GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@
+GL_GNULIB_STAT = @GL_GNULIB_STAT@
+GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@
+GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@
+GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@
+GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
+GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
+GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
+GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
+GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
+GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
+GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
+GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
+GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
+GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
+GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@
+GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@
+GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@
+GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@
+GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@
+GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@
+GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@
+GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@
+GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@
+GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@
+GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@
+GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@
+GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@
+GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@
+GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@
+GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@
+GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@
+GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@
+GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@
+GL_GNULIB_TIME = @GL_GNULIB_TIME@
+GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@
+GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@
+GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@
+GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@
+GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@
+GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@
+GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@
+GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@
+GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@
+GL_GNULIB_TZSET = @GL_GNULIB_TZSET@
+GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@
+GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@
+GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@
+GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@
+GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@
+GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@
+GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@
+GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@
+GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@
+GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@
+GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@
+GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@
+GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@
+GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@
+GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@
+GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@
+GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@
+GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@
+GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@
+GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@
+GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@
+GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@
+GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@
+GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@
+GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@
+GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@
+GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@
+GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@
+GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@
+GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@
+GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@
+GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@
+GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@
+GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@
+GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@
+GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@
+GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@
+GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@
+GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@
+GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@
+GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@
+GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@
+GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@
+GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@
+GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@
+GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@
+GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@
+GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@
+GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@
+GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@
+GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@
+GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@
+GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@
+GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@
+GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@
+GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@
+GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@
+GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
+GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GREP = @GREP@
+HARD_LOCALE_LIB = @HARD_LOCALE_LIB@
+HAVE_ACCEPT4 = @HAVE_ACCEPT4@
+HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
+HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
+HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
+HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_GETW = @HAVE_DECL_GETW@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
+HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
+HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_PUTW = @HAVE_DECL_PUTW@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_ERROR = @HAVE_ERROR@
+HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@
+HAVE_ERROR_H = @HAVE_ERROR_H@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_EXECVPE = @HAVE_EXECVPE@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FREELOCALE = @HAVE_FREELOCALE@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETENTROPY = @HAVE_GETENTROPY@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETPASS = @HAVE_GETPASS@
+HAVE_GETPROGNAME = @HAVE_GETPROGNAME@
+HAVE_GETRANDOM = @HAVE_GETRANDOM@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GETUMASK = @HAVE_GETUMASK@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_IMAXABS = @HAVE_IMAXABS@
+HAVE_IMAXDIV = @HAVE_IMAXDIV@
+HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
+HAVE_INITSTATE = @HAVE_INITSTATE@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISBLANK = @HAVE_ISBLANK@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MBTOWC = @HAVE_MBTOWC@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
+HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PSELECT = @HAVE_PSELECT@
+HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
+HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
+HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
+HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
+HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
+HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
+HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
+HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
+HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
+HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
+HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
+HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
+HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
+HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
+HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
+HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
+HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
+HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
+HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
+HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
+HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
+HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
+HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
+HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
+HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
+HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
+HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
+HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
+HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
+HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
+HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
+HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
+HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
+HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
+HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
+HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
+HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
+HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
+HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
+HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
+HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
+HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
+HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
+HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
+HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
+HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
+HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
+HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
+HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
+HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
+HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
+HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
+HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
+HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_QSORT_R = @HAVE_QSORT_R@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
+HAVE_SCHED_H = @HAVE_SCHED_H@
+HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SETSTATE = @HAVE_SETSTATE@
+HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOL = @HAVE_STRTOL@
+HAVE_STRTOLD = @HAVE_STRTOLD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOUL = @HAVE_STRTOUL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
+HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@
+HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
+HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@
+HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__EXIT = @HAVE__EXIT@
+IGNORE_UNUSED_LIBRARIES_CFLAGS = @IGNORE_UNUSED_LIBRARIES_CFLAGS@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INET_PTON_LIB = @INET_PTON_LIB@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLINCS = @INTLINCS@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPMULTITHREAD = @LIBPMULTITHREAD@
+LIBPTHREAD = @LIBPTHREAD@
+LIBS = @LIBS@
+LIBSOCKET = @LIBSOCKET@
+LIBSTDTHREAD = @LIBSTDTHREAD@
+LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
+LIBTHREAD = @LIBTHREAD@
+LIBTOOL = @LIBTOOL@
+LIB_BLKID = @LIB_BLKID@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_GETRANDOM = @LIB_GETRANDOM@
+LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
+LIB_MBRTOWC = @LIB_MBRTOWC@
+LIB_NANOSLEEP = @LIB_NANOSLEEP@
+LIB_NL_LANGINFO = @LIB_NL_LANGINFO@
+LIB_PTHREAD = @LIB_PTHREAD@
+LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
+LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
+LIB_SELECT = @LIB_SELECT@
+LIB_SEMAPHORE = @LIB_SEMAPHORE@
+LIB_SETLOCALE = @LIB_SETLOCALE@
+LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
+LIMITS_H = @LIMITS_H@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTALLOCA = @LTALLOCA@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBTHREAD = @LTLIBTHREAD@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_RELEASE = @LT_RELEASE@
+LT_REVISION = @LT_REVISION@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MBRTOWC_LIB = @MBRTOWC_LIB@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NANOSLEEP_LIB = @NANOSLEEP_LIB@
+NETINET_IN_H = @NETINET_IN_H@
+NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
+NEXT_ASSERT_H = @NEXT_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
+NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@
+NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
+NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
+NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_CTYPE_H = @NEXT_CTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_ERROR_H = @NEXT_ERROR_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
+NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
+NEXT_SCHED_H = @NEXT_SCHED_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@
+NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@
+NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
+NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS = @OS@
+OS_LIBS = @OS_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PARTEDLDFLAGS = @PARTEDLDFLAGS@
+PARTED_LIBS = @PARTED_LIBS@
+PARTED_USABLE_TEST_DIR = @PARTED_USABLE_TEST_DIR@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACCESS = @REPLACE_ACCESS@
+REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@
+REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHMOD = @REPLACE_CHMOD@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@
+REPLACE_CREAT = @REPLACE_CREAT@
+REPLACE_CTIME = @REPLACE_CTIME@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUP3 = @REPLACE_DUP3@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_ERROR = @REPLACE_ERROR@
+REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@
+REPLACE_EXECL = @REPLACE_EXECL@
+REPLACE_EXECLE = @REPLACE_EXECLE@
+REPLACE_EXECLP = @REPLACE_EXECLP@
+REPLACE_EXECV = @REPLACE_EXECV@
+REPLACE_EXECVE = @REPLACE_EXECVE@
+REPLACE_EXECVP = @REPLACE_EXECVP@
+REPLACE_EXECVPE = @REPLACE_EXECVPE@
+REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
+REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDATASYNC = @REPLACE_FDATASYNC@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FFSLL = @REPLACE_FFSLL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREE = @REPLACE_FREE@
+REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETENTROPY = @REPLACE_GETENTROPY@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETPASS = @REPLACE_GETPASS@
+REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@
+REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@
+REPLACE_GETRANDOM = @REPLACE_GETRANDOM@
+REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_IMAXABS = @REPLACE_IMAXABS@
+REPLACE_IMAXDIV = @REPLACE_IMAXDIV@
+REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
+REPLACE_INET_PTON = @REPLACE_INET_PTON@
+REPLACE_INITSTATE = @REPLACE_INITSTATE@
+REPLACE_IOCTL = @REPLACE_IOCTL@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
+REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@
+REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MEMPCPY = @REPLACE_MEMPCPY@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKNODAT = @REPLACE_MKNODAT@
+REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@
+REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_PIPE2 = @REPLACE_PIPE2@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
+REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PSELECT = @REPLACE_PSELECT@
+REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
+REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
+REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
+REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
+REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
+REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
+REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
+REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
+REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
+REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
+REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
+REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
+REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
+REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
+REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
+REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
+REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
+REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
+REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
+REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
+REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
+REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
+REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
+REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
+REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
+REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
+REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
+REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
+REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
+REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
+REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
+REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
+REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
+REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
+REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
+REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
+REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
+REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
+REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
+REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
+REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
+REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
+REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
+REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
+REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
+REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM = @REPLACE_RANDOM@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@
+REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@
+REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
+REPLACE_SELECT = @REPLACE_SELECT@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SETSTATE = @REPLACE_SETSTATE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPCPY = @REPLACE_STPCPY@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRFTIME = @REPLACE_STRFTIME@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOL = @REPLACE_STRTOL@
+REPLACE_STRTOLD = @REPLACE_STRTOLD@
+REPLACE_STRTOLL = @REPLACE_STRTOLL@
+REPLACE_STRTOUL = @REPLACE_STRTOUL@
+REPLACE_STRTOULL = @REPLACE_STRTOULL@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIME = @REPLACE_TIME@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_TZSET = @REPLACE_TZSET@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSTOK = @REPLACE_WCSTOK@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@
+REPLACE_WRITE = @REPLACE_WRITE@
+REPLACE__EXIT = @REPLACE__EXIT@
+SCHED_YIELD_LIB = @SCHED_YIELD_LIB@
+SED = @SED@
+SELECT_LIB = @SELECT_LIB@
+SETLOCALE_LIB = @SETLOCALE_LIB@
+SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDARG_H = @STDARG_H@
+STDCKDINT_H = @STDCKDINT_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@
+SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_NLS = @USE_NLS@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YIELD_LIB = @YIELD_LIB@
+abs_aux_dir = @abs_aux_dir@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+bindir_c = @bindir_c@
+bindir_c_make = @bindir_c_make@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datadir_c = @datadir_c@
+datadir_c_make = @datadir_c_make@
+datarootdir = @datarootdir@
+datarootdir_c = @datarootdir_c@
+datarootdir_c_make = @datarootdir_c_make@
+docdir = @docdir@
+docdir_c = @docdir_c@
+docdir_c_make = @docdir_c_make@
+dvidir = @dvidir@
+dvidir_c = @dvidir_c@
+dvidir_c_make = @dvidir_c_make@
+exec_prefix = @exec_prefix@
+exec_prefix_c = @exec_prefix_c@
+exec_prefix_c_make = @exec_prefix_c_make@
+gl_LIBOBJDEPS = @gl_LIBOBJDEPS@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+htmldir_c = @htmldir_c@
+htmldir_c_make = @htmldir_c_make@
+includedir = @includedir@
+includedir_c = @includedir_c@
+includedir_c_make = @includedir_c_make@
+infodir = @infodir@
+infodir_c = @infodir_c@
+infodir_c_make = @infodir_c_make@
+install_sh = @install_sh@
+libdir = @libdir@
+libdir_c = @libdir_c@
+libdir_c_make = @libdir_c_make@
+libexecdir = @libexecdir@
+libexecdir_c = @libexecdir_c@
+libexecdir_c_make = @libexecdir_c_make@
+lispdir = @lispdir@
+lispdir_c = @lispdir_c@
+lispdir_c_make = @lispdir_c_make@
+localedir = @localedir@
+localedir_c = @localedir_c@
+localedir_c_make = @localedir_c_make@
+localstatedir = @localstatedir@
+localstatedir_c = @localstatedir_c@
+localstatedir_c_make = @localstatedir_c_make@
+mandir = @mandir@
+mandir_c = @mandir_c@
+mandir_c_make = @mandir_c_make@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+oldincludedir_c = @oldincludedir_c@
+oldincludedir_c_make = @oldincludedir_c_make@
+pdfdir = @pdfdir@
+pdfdir_c = @pdfdir_c@
+pdfdir_c_make = @pdfdir_c_make@
+pkgdatadir_c = @pkgdatadir_c@
+pkgdatadir_c_make = @pkgdatadir_c_make@
+pkgincludedir_c = @pkgincludedir_c@
+pkgincludedir_c_make = @pkgincludedir_c_make@
+pkglibdir_c = @pkglibdir_c@
+pkglibdir_c_make = @pkglibdir_c_make@
+pkglibexecdir_c = @pkglibexecdir_c@
+pkglibexecdir_c_make = @pkglibexecdir_c_make@
+prefix = @prefix@
+prefix_c = @prefix_c@
+prefix_c_make = @prefix_c_make@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psdir_c = @psdir_c@
+psdir_c_make = @psdir_c_make@
+runstatedir = @runstatedir@
+runstatedir_c = @runstatedir_c@
+runstatedir_c_make = @runstatedir_c_make@
+sbindir = @sbindir@
+sbindir_c = @sbindir_c@
+sbindir_c_make = @sbindir_c_make@
+sharedstatedir = @sharedstatedir@
+sharedstatedir_c = @sharedstatedir_c@
+sharedstatedir_c_make = @sharedstatedir_c_make@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+sysconfdir_c = @sysconfdir_c@
+sysconfdir_c_make = @sysconfdir_c_make@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TEST_EXTENSIONS = .sh
+SH_LOG_COMPILER = $(SHELL)
+TESTS = \
+ help-version.sh \
+ t0000-basic.sh \
+ t0001-tiny.sh \
+ t0010-script-no-ctrl-chars.sh \
+ t0100-print.sh \
+ t0101-print-empty.sh \
+ t0200-gpt.sh \
+ t0201-gpt.sh \
+ t0202-gpt-pmbr.sh \
+ t0203-gpt-tiny-device-abort.sh \
+ t0203-gpt-shortened-device-primary-valid.sh \
+ t0203-gpt-create-on-min-sized-device.sh \
+ t0205-gpt-list-clobbers-pmbr.sh \
+ t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh \
+ t0207-IEC-binary-notation.sh \
+ t0208-mkpart-end-in-IEC.sh \
+ t0209-gpt-pmbr_boot.sh \
+ t0210-gpt-resized-partition-entry-array.sh \
+ t0211-gpt-rewrite-header.sh \
+ t0212-gpt-many-partitions.sh \
+ t0213-mkpart-start-negative.sh \
+ t0215-gpt-attrs.sh \
+ t0220-gpt-msftres.sh \
+ t0250-gpt.sh \
+ t0251-gpt-unicode.sh \
+ t0280-gpt-corrupt.sh \
+ t0281-gpt-grow.sh \
+ t0282-gpt-move-backup.sh \
+ t0283-overlap-partitions.sh \
+ t0290-gpt-name.sh \
+ t0300-dos-on-gpt.sh \
+ t0301-overwrite-gpt-pmbr.sh \
+ t0350-mac-PT-increases-sector-size.sh \
+ t0400-loop-clobber-infloop.sh \
+ t0500-dup-clobber.sh \
+ t0501-duplicate.sh \
+ t0800-json-gpt.sh \
+ t0801-json-msdos.sh \
+ t0900-type-gpt.sh \
+ t0901-type-gpt-invalid.sh \
+ t0910-type-dos.sh \
+ t0911-type-dos-invalid.sh \
+ t1100-busy-label.sh \
+ t1101-busy-partition.sh \
+ t1102-loop-label.sh \
+ t1104-remove-and-add-partition.sh \
+ t1700-probe-fs.sh \
+ t1701-rescue-fs.sh \
+ t2200-dos-label-recog.sh \
+ t2201-pc98-label-recog.sh \
+ t2300-dos-label-extended-bootcode.sh \
+ t2310-dos-extended-2-sector-min-offset.sh \
+ t2320-dos-extended-noclobber.sh \
+ t2400-dos-hfs-partition-type.sh \
+ t2410-dos-udf-partition-type.sh \
+ t2500-probe-corrupt-hfs.sh \
+ t3000-resize-fs.sh \
+ t3200-resize-partition.sh \
+ t3200-type-change.sh \
+ t3210-gpt-type-change.sh \
+ t3300-palo-prep.sh \
+ t3310-flags.sh \
+ t3400-whole-disk-FAT-partition.sh \
+ t4000-sun-raid-type.sh \
+ t4001-sun-vtoc.sh \
+ t4100-msdos-partition-limits.sh \
+ t4100-dvh-partition-limits.sh \
+ t4100-msdos-starting-sector.sh \
+ t4200-partprobe.sh \
+ t4300-nilfs2-tiny.sh \
+ t4301-nilfs2-badsb2.sh \
+ t4302-nilfs2-lessbadsb2.sh \
+ t5000-tags.sh \
+ t6000-dm.sh \
+ t6001-psep.sh \
+ t6002-dm-busy.sh \
+ t6003-dm-hide.sh \
+ t6004-dm-many-partitions.sh \
+ t6005-dm-uuid.sh \
+ t6006-dm-512b-sectors.sh \
+ t6100-mdraid-partitions.sh \
+ t7000-scripting.sh \
+ t8000-loop.sh \
+ t8001-loop-blkpg.sh \
+ t9010-big-sector.sh \
+ t9020-alignment.sh \
+ t9021-maxima.sh \
+ t9022-one-unit-snap.sh \
+ t9023-value-lt-one.sh \
+ t9024-msdos-1s-partition.sh \
+ t9025-gpt-1s-partition.sh \
+ t9030-align-check.sh \
+ t9040-many-partitions.sh \
+ t9041-undetected-in-use-16th-partition.sh \
+ t9042-dos-partition-limit.sh \
+ t9050-partition-table-types.sh \
+ t9060-gpt-grow-script-fix.sh
+
+EXTRA_DIST = \
+ $(TESTS) t-local.sh t-lvm.sh \
+ init.cfg init.sh t-lib-helpers.sh gpt-header-munge \
+ gpt-header-move msdos-overlap gpt-attrs
+
+fs_resize_LDADD = \
+ $(top_builddir)/libparted/fs/libparted-fs-resize.la \
+ $(top_builddir)/libparted/libparted.la
+
+LDADD = \
+ $(top_builddir)/libparted/libparted.la
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/lib \
+ -I$(top_builddir)/include \
+ -I$(top_srcdir)/include
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+parted_dir = $(abs_top_builddir)/parted
+pp_dir = $(abs_top_builddir)/partprobe
+sep = $(PATH_SEPARATOR)
+
+# Note that the first lines are statements. They ensure that environment
+# variables that can perturb tests are unset or set to expected values.
+# The rest are envvar settings that propagate build-related Makefile
+# variables to test scripts.
+TESTS_ENVIRONMENT = \
+ tmp__=$$TMPDIR; test -d "$$tmp__" || tmp__=.; \
+ TMPDIR=$$tmp__; export TMPDIR; \
+ export \
+ abs_top_builddir='$(abs_top_builddir)' \
+ abs_top_srcdir='$(abs_top_srcdir)' \
+ abs_srcdir='$(abs_srcdir)' \
+ built_programs=parted \
+ srcdir='$(srcdir)' \
+ top_srcdir='$(top_srcdir)' \
+ AWK='$(AWK)' \
+ PACKAGE_BUGREPORT='$(PACKAGE_BUGREPORT)' \
+ PACKAGE_VERSION=$(PACKAGE_VERSION) \
+ CONFIG_HEADER='$(abs_top_builddir)/lib/config.h' \
+ ENABLE_DEVICE_MAPPER=$(ENABLE_DEVICE_MAPPER) \
+ PARTED_TEST_NAME=`basename '$(abs_srcdir)'`,`echo $$tst|sed 's,^\./,,;s,/,-,g'`\
+ PATH='$(abs_top_builddir)/parted$(PATH_SEPARATOR)'"$$PATH" \
+ VERSION=$(VERSION) \
+ ; 9>&2
+
+VERBOSE = yes
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .sh .sh$(EXEEXT) .trs
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+dup-clobber$(EXEEXT): $(dup_clobber_OBJECTS) $(dup_clobber_DEPENDENCIES) $(EXTRA_dup_clobber_DEPENDENCIES)
+ @rm -f dup-clobber$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(dup_clobber_OBJECTS) $(dup_clobber_LDADD) $(LIBS)
+
+duplicate$(EXEEXT): $(duplicate_OBJECTS) $(duplicate_DEPENDENCIES) $(EXTRA_duplicate_DEPENDENCIES)
+ @rm -f duplicate$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(duplicate_OBJECTS) $(duplicate_LDADD) $(LIBS)
+
+fs-resize$(EXEEXT): $(fs_resize_OBJECTS) $(fs_resize_DEPENDENCIES) $(EXTRA_fs_resize_DEPENDENCIES)
+ @rm -f fs-resize$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(fs_resize_OBJECTS) $(fs_resize_LDADD) $(LIBS)
+
+print-align$(EXEEXT): $(print_align_OBJECTS) $(print_align_DEPENDENCIES) $(EXTRA_print_align_DEPENDENCIES)
+ @rm -f print-align$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(print_align_OBJECTS) $(print_align_LDADD) $(LIBS)
+
+print-flags$(EXEEXT): $(print_flags_OBJECTS) $(print_flags_DEPENDENCIES) $(EXTRA_print_flags_DEPENDENCIES)
+ @rm -f print-flags$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(print_flags_OBJECTS) $(print_flags_LDADD) $(LIBS)
+
+print-max$(EXEEXT): $(print_max_OBJECTS) $(print_max_DEPENDENCIES) $(EXTRA_print_max_DEPENDENCIES)
+ @rm -f print-max$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(print_max_OBJECTS) $(print_max_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-clobber.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/duplicate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fs-resize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-align.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-flags.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-max.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+ @$(MKDIR_P) $(@D)
+ @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS)
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+.sh.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.sh$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(SH_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SH_LOG_DRIVER_FLAGS) $(SH_LOG_DRIVER_FLAGS) -- $(SH_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -f ./$(DEPDIR)/dup-clobber.Po
+ -rm -f ./$(DEPDIR)/duplicate.Po
+ -rm -f ./$(DEPDIR)/fs-resize.Po
+ -rm -f ./$(DEPDIR)/print-align.Po
+ -rm -f ./$(DEPDIR)/print-flags.Po
+ -rm -f ./$(DEPDIR)/print-max.Po
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f ./$(DEPDIR)/dup-clobber.Po
+ -rm -f ./$(DEPDIR)/duplicate.Po
+ -rm -f ./$(DEPDIR)/fs-resize.Po
+ -rm -f ./$(DEPDIR)/print-align.Po
+ -rm -f ./$(DEPDIR)/print-flags.Po
+ -rm -f ./$(DEPDIR)/print-max.Po
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \
+ cscopelist-am ctags ctags-am distclean distclean-compile \
+ distclean-generic distclean-libtool distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/tests/dup-clobber.c b/tests/dup-clobber.c
new file mode 100644
index 0000000..4e7add2
--- /dev/null
+++ b/tests/dup-clobber.c
@@ -0,0 +1,103 @@
+/* Demonstrate that setting disk->needs_clobber in ped_disk_duplicate
+ is necessary. With that, this test passes. Without it, the last
+ sectors of the disk are cleared, and this test fails. */
+#include <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "closeout.h"
+#include "progname.h"
+
+static void
+seek_to_final_sector (int fd, PedSector ss)
+{
+ /* Seek to EOF. */
+ off_t off = lseek (fd, 0, SEEK_END);
+
+ /* That had better succeed and determine that the size is > 2 sectors
+ and an exact multiple of ss. */
+ assert (2 * ss < off);
+ assert (off % ss == 0);
+
+ /* Back up one sector. */
+ off = lseek (fd, -ss, SEEK_CUR);
+ assert (0 < off);
+}
+
+static void
+scribble_on_final_sector (char const *file_name, PedSector ss)
+{
+ assert (0 < ss);
+ assert (ss % 512 == 0);
+ int fd = open (file_name, O_WRONLY);
+ assert (0 <= fd);
+
+ seek_to_final_sector (fd, ss);
+
+ /* Fill the final sector with ascii 'G's. */
+ char *buf = malloc (ss);
+ assert (buf);
+ memset (buf, 'G', ss);
+ assert (write (fd, buf, ss) == ss);
+ free (buf);
+ assert (close (fd) == 0);
+}
+
+int
+main (int argc, char **argv)
+{
+ atexit (close_stdout);
+ set_program_name (argv[0]);
+
+ if (argc != 1)
+ return EXIT_FAILURE;
+
+ char const *dev_name = "dev-file";
+
+ /* Create a file. */
+ int fd = open (dev_name, O_CREAT|O_TRUNC|O_WRONLY, 0644);
+ assert (0 <= fd);
+ off_t size = 8 * 1024 * 1024;
+ assert (ftruncate (fd, size) == 0);
+ assert (close (fd) == 0);
+
+ PedDevice *dev = ped_device_get (dev_name);
+ assert (dev);
+
+ PedDisk *disk = ped_disk_new_fresh (dev, ped_disk_type_get ("msdos"));
+ assert (disk);
+
+ assert (ped_disk_commit(disk));
+
+ PedSector ss = dev->sector_size;
+ scribble_on_final_sector (dev_name, ss);
+
+ /* Before the fix, this ped_disk_duplicate call would always set
+ copy->needs_clobber, thus causing the subsequent commit to
+ mistakenly clobber 9KiB at each end of the disk. */
+ PedDisk *copy = ped_disk_duplicate (disk);
+ assert (ped_disk_commit(copy));
+
+ ped_disk_destroy (copy);
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+
+ /* Read the final sector and ensure it's still all 'G's. */
+ fd = open (dev_name, O_RDONLY);
+ assert (0 <= fd);
+ seek_to_final_sector (fd, ss);
+ char *buf = malloc (ss);
+ assert (buf);
+ assert (read (fd, buf, ss) == ss);
+ unsigned int i;
+ for (i = 0; i < ss; i++)
+ assert (buf[i] == 'G');
+ free (buf);
+
+ return EXIT_SUCCESS;
+}
diff --git a/tests/duplicate.c b/tests/duplicate.c
new file mode 100644
index 0000000..129875e
--- /dev/null
+++ b/tests/duplicate.c
@@ -0,0 +1,159 @@
+/* Demonstrate that ped_disk_duplicate is working correctly.
+*/
+#include <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+
+#include "closeout.h"
+#include "progname.h"
+
+int
+main (int argc, char **argv)
+{
+ atexit (close_stdout);
+ set_program_name (argv[0]);
+
+ if (argc != 2)
+ return EXIT_FAILURE;
+
+ char const *dev_name = "dev-file";
+
+ /* Create a file. */
+ int fd = open (dev_name, O_CREAT|O_TRUNC|O_WRONLY, 0644);
+ assert (0 <= fd);
+ off_t size = 32 * 1024 * 1024;
+ assert (ftruncate (fd, size) == 0);
+ assert (close (fd) == 0);
+
+ PedDevice *dev = ped_device_get (dev_name);
+ assert (dev);
+
+ PedDisk *disk = ped_disk_new_fresh (dev, ped_disk_type_get (argv[1]));
+ assert (disk);
+ assert (ped_disk_commit(disk));
+ ped_disk_destroy (disk);
+
+ /* re-open the disk */
+ disk = ped_disk_new (dev);
+ assert (disk);
+
+ /* Create a partition */
+ const PedFileSystemType *fs_type = ped_file_system_type_get ("ext2");
+ assert (fs_type);
+ PedPartitionType part_type = PED_PARTITION_NORMAL;
+ const PedGeometry *geometry = ped_geometry_new (dev, 2048, 1024);
+ assert (geometry);
+ PedPartition *part = ped_partition_new (disk, part_type, fs_type,
+ geometry->start, geometry->end);
+ assert (part);
+ PedConstraint *constraint = ped_constraint_exact (geometry);
+ assert (constraint);
+
+ if (ped_partition_is_flag_available (part, PED_PARTITION_BOOT))
+ assert (ped_partition_set_flag (part, PED_PARTITION_BOOT, 1));
+
+ assert (ped_disk_add_partition (disk, part, constraint));
+ ped_constraint_destroy (constraint);
+
+ assert (ped_partition_set_system (part, fs_type));
+ if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
+ ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
+
+ /* Add a 2nd partition with a name (when supported) */
+ geometry = ped_geometry_new (dev, 4096, 1024);
+ assert (geometry);
+ part = ped_partition_new (disk, part_type, fs_type,
+ geometry->start, geometry->end);
+ assert (part);
+ constraint = ped_constraint_exact (geometry);
+ assert (constraint);
+ assert (ped_disk_add_partition (disk, part, constraint));
+ ped_constraint_destroy (constraint);
+ assert (ped_partition_set_system (part, fs_type));
+ if (ped_partition_is_flag_available (part, PED_PARTITION_LBA))
+ ped_partition_set_flag (part, PED_PARTITION_LBA, 1);
+ if (ped_disk_type_check_feature (part->disk->type, PED_DISK_TYPE_PARTITION_NAME))
+ ped_partition_set_name(part, "foobarbaz");
+
+ assert (ped_disk_commit(disk));
+
+ /* Duplicate it */
+ PedDisk *copy = ped_disk_duplicate (disk);
+ assert (ped_disk_commit(copy));
+
+ /* Compare the two copies */
+
+ /* Check the device */
+ assert (strcmp (disk->dev->model, copy->dev->model) == 0);
+ assert (strcmp (disk->dev->path, copy->dev->path) == 0);
+ assert (disk->dev->sector_size == copy->dev->sector_size);
+ assert (disk->dev->phys_sector_size == copy->dev->phys_sector_size);
+ assert (disk->dev->length == copy->dev->length);
+
+ /* Check the type */
+ assert (strcmp (disk->type->name, copy->type->name) == 0);
+ assert (disk->type->features == copy->type->features);
+
+ /* Check the flags */
+ for (PedDiskFlag flag = PED_DISK_FIRST_FLAG; flag <= PED_DISK_LAST_FLAG;
+ flag++) {
+ if (!ped_disk_is_flag_available(disk, flag))
+ continue;
+ assert (ped_disk_get_flag (disk, flag) == ped_disk_get_flag (copy, flag));
+ }
+
+ /* Check the partitions */
+ PedPartition *disk_part, *copy_part;
+ for ( disk_part = disk->part_list, copy_part = copy->part_list;
+ disk_part && copy_part;
+ disk_part = disk_part->next, copy_part = copy_part->next)
+ {
+ /* Only active partitions are duplicated */
+ if (!ped_partition_is_active (disk_part))
+ continue;
+
+ assert (disk_part->geom.start == copy_part->geom.start);
+ assert (disk_part->geom.end == copy_part->geom.end);
+ assert (disk_part->geom.length == copy_part->geom.length);
+ assert (disk_part->num == copy_part->num);
+ assert (disk_part->type == copy_part->type);
+
+ if (disk_part->fs_type && disk_part->fs_type->name) {
+ assert (strcmp (disk_part->fs_type->name, copy_part->fs_type->name) == 0);
+ }
+
+ /* Check the flags */
+ for (PedPartitionFlag flag = PED_PARTITION_FIRST_FLAG;
+ flag <= PED_PARTITION_LAST_FLAG; flag++)
+ {
+ if (!ped_partition_is_flag_available(disk_part, flag))
+ continue;
+ fprintf (stderr, "Checking partition flag %u\n", flag);
+ fprintf (stderr, "%d ? %d\n", ped_partition_get_flag (disk_part, flag),
+ ped_partition_get_flag (copy_part, flag));
+ assert (ped_partition_get_flag (disk_part, flag)
+ == ped_partition_get_flag (copy_part, flag));
+ }
+
+ /* Check the name, if supported */
+ if (ped_disk_type_check_feature (part->disk->type, PED_DISK_TYPE_PARTITION_NAME))
+ {
+ const char *disk_name = ped_partition_get_name(disk_part);
+ const char *copy_name = ped_partition_get_name(copy_part);
+ assert (strcmp (disk_name, copy_name) == 0);
+ }
+ }
+
+ /* Cleanup the mess */
+ ped_disk_destroy (copy);
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+
+ return EXIT_SUCCESS;
+}
diff --git a/tests/fs-resize.c b/tests/fs-resize.c
new file mode 100644
index 0000000..bc66178
--- /dev/null
+++ b/tests/fs-resize.c
@@ -0,0 +1,75 @@
+#include <config.h>
+
+#include <parted/parted.h>
+#include <parted/debug.h>
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+
+#include "progname.h"
+
+int
+main (int argc, char **argv)
+{
+ set_program_name (argv[0]);
+
+ PedSector start = 0, len = 0;
+ PedGeometry geom, new_geom;
+ PedDevice *dev;
+ PedFileSystem *fs;
+ PedTimer *g_timer = NULL;
+
+ if (argc != 2 && argc != 4) {
+ fprintf(stderr, "usage: %s <device>\n"
+ " %s <device> <start> <length>\n",
+ argv[0], argv[0]);
+ return 1;
+ }
+
+ dev = ped_device_get(argv[1]);
+ if (!dev) {
+ fprintf(stderr, "cannot create device %s\n", argv[1]);
+ return 1;
+ }
+
+ if (!ped_device_open(dev)) {
+ fprintf(stderr, "cannot open device %s\n", argv[1]);
+ return 1;
+ }
+
+ if (!ped_geometry_init(&geom, dev, 0, dev->length)) {
+ fprintf(stderr, "cannot initialize geometry\n");
+ return 1;
+ }
+
+ if (argc > 2) {
+ start = strtoll(argv[2], NULL, 0);
+ len = strtoll(argv[3], NULL, 0);
+ } else {
+ start = 0;
+ len = dev->length;
+ }
+
+ if (!ped_geometry_init(&new_geom, dev, start, len)) {
+ fprintf(stderr, "cannot initialize new geometry\n");
+ return 1;
+ }
+
+ fs = ped_file_system_open(&geom);
+ if (!fs) {
+ fprintf(stderr, "cannot read fs\n");
+ return 1;
+ }
+
+ if (!ped_file_system_resize(fs, &new_geom, g_timer)) {
+ fprintf(stderr, "cannot resize filesystem\n");
+ return 1;
+ }
+
+ ped_file_system_close(fs);
+ return 0;
+}
diff --git a/tests/gpt-attrs b/tests/gpt-attrs
new file mode 100755
index 0000000..0a01447
--- /dev/null
+++ b/tests/gpt-attrs
@@ -0,0 +1,72 @@
+#!/usr/bin/python3
+
+# Copyright (C) 2021 SUSE LLC
+
+# program to show gpt partition attributes or set attributes of
+# partition 1
+
+# only works with 512 sectors and standard GPT header layout (128
+# partition entires with 128 bytes each, secondary header at end of
+# device)
+
+
+from struct import unpack_from, pack_into
+from zipfile import crc32
+import array
+import sys
+
+
+class Gpt:
+
+ # Calculate and insert the CRCs of the partition entires and the
+ # header.
+ def calc_crcs(self, header, entries):
+ # compute crc of partition entries
+ crc2 = crc32(entries) & 0xFFFFFFFF
+ pack_into('<L', header, 88, crc2)
+
+ # compute crc of header
+ pack_into('<L', header, 16, 0)
+ crc1 = crc32(header[:92]) & 0xFFFFFFFF
+ pack_into('<L', header, 16, crc1)
+
+ def read(self, name):
+ self.name = name
+
+ file = open(name, 'rb+')
+
+ file.seek(512)
+ self.primary_header = array.array('B', file.read(512))
+ self.primary_entries = array.array('B', file.read(32 * 512))
+
+ file.seek(-33 * 512, 2)
+ self.secondary_entries = array.array('B', file.read(32 * 512))
+ self.secondary_header = array.array('B', file.read(512))
+
+ def write(self):
+ file = open(self.name, 'rb+')
+
+ self.calc_crcs(self.primary_header, self.primary_entries)
+ file.seek(512)
+ file.write(self.primary_header)
+ file.write(self.primary_entries)
+
+ self.calc_crcs(self.secondary_header, self.secondary_entries)
+ file.seek(-33 * 512, 2)
+ file.write(self.secondary_entries)
+ file.write(self.secondary_header)
+
+
+gpt = Gpt()
+
+gpt.read(sys.argv[1])
+
+if sys.argv[2] == "show":
+ attrs = unpack_from('<Q', gpt.primary_entries, 48)[0]
+ print(hex(attrs))
+
+if sys.argv[2] == "set":
+ attrs = int(sys.argv[3], 0)
+ pack_into('<Q', gpt.primary_entries, 48, attrs)
+ pack_into('<Q', gpt.secondary_entries, 48, attrs)
+ gpt.write()
diff --git a/tests/gpt-header-move b/tests/gpt-header-move
new file mode 100755
index 0000000..18f58d0
--- /dev/null
+++ b/tests/gpt-header-move
@@ -0,0 +1,42 @@
+#!/usr/bin/python3
+
+# open img file, subtract 33 from altlba address, and move the last 33 sectors
+# back by 33 sectors
+
+from struct import unpack_from, pack_into
+from zipfile import crc32
+import array
+import sys
+
+file = open(sys.argv[1],'rb+')
+file.seek(512)
+gptheader = file.read(512)
+altlba = unpack_from('<q', gptheader, offset=32)[0]
+gptheader = array.array('B', gptheader)
+pack_into('<Q', gptheader, 32, altlba-33)
+#zero header crc
+pack_into('<L', gptheader, 16, 0)
+#compute new crc
+newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+pack_into('<L', gptheader, 16, newcrc)
+file.seek(512)
+file.write(gptheader)
+file.seek(512*altlba)
+gptheader = file.read(512)
+file.seek(512*(altlba-32))
+backup = file.read(512*32)
+altlba -= 33
+gptheader = array.array('B',gptheader)
+#update mylba
+pack_into('<Q', gptheader, 24, altlba)
+#update table lba
+pack_into('<Q', gptheader, 72, altlba-32)
+#zero header crc
+pack_into('<L', gptheader, 16, 0)
+#compute new crc
+newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+pack_into('<L', gptheader, 16, newcrc)
+file.seek(512*(altlba-32))
+file.write(backup)
+file.write(gptheader)
+file.write(b"\0" * (512 * 33))
diff --git a/tests/gpt-header-munge b/tests/gpt-header-munge
new file mode 100755
index 0000000..5c0dd80
--- /dev/null
+++ b/tests/gpt-header-munge
@@ -0,0 +1,285 @@
+#!/usr/bin/perl -w
+# Change the size of a GPT image's partition array.
+
+# The vast majority of GPT partition tables have an 128-entry partition array.
+# However, we get reports of ZFS-related arrays with a mere 9 entries, and
+# some others with 140, and parted could not handle either of those because
+# it was effectively hard-coding the 128.
+# This script takes as input a GPT image that might be created by
+# parted itself, and transforms it into one with a different number, N,
+# of partition array entries. That involves the following steps:
+# - poke that value of N into the 4-byte "Number of partition entries" slot,
+# - compute the crc32 of the N partition table entries,
+# - poke the resulting value into its slot,
+# - recompute the GPT header's CRC32 checksum and poke that into its slot.
+# Do the above for both the primary and the backup GPT headers.
+
+use strict;
+use warnings;
+use Digest::CRC qw(crc32);
+use List::Util qw(max);
+
+(my $ME = $0) =~ s|.*/||;
+my $VERSION = '1.0';
+
+# Technically we shouldn't hard-code this, since it's specified
+# as the little-endian number in bytes 12..15 of the GPT header.
+my $gpt_header_len = 92;
+
+# Size of a partition array entry, in bytes.
+# This too is specified in the GPT header, but AFAIK, no one changes it.
+my $pe_size = 128;
+
+# Sector size.
+my $ss;
+
+# Sector number of the backup GPT header, to be read from the primary header.
+my $backup_LBA;
+
+# Given a GPT header $B, extract the my_LBA/backup_LBA sector number.
+sub curr_LBA($) { my ($b) = @_; unpack ('Q<', substr ($b, 24, 8)) }
+sub backup_LBA($) { my ($b) = @_; unpack ('Q<', substr ($b, 32, 8)) }
+
+# Given a GPT header $B, return its "partition entries starting LBA".
+sub pe_start_LBA($) { my ($b) = @_; unpack ('Q<', substr ($b, 72, 8)) }
+
+sub round_up_to_ss ($)
+{
+ my ($n) = @_;
+ return $n + $ss - $n % $ss;
+}
+
+# Return the byte offset of the start of the specified partition array.
+sub partition_array_start_offset ($$)
+{
+ my ($pri_or_backup, $n_pe) = @_;
+ $pri_or_backup eq 'primary'
+ and return 2 * $ss;
+
+ # Backup
+ return $backup_LBA * $ss - round_up_to_ss ($n_pe * $pe_size);
+}
+
+# Calculate and return the specified partition array crc32 checksum.
+sub partition_array_crc ($$$)
+{
+ my ($pri_or_backup, $n_pe, $in) = @_;
+ local *F;
+ open F, '<', $in
+ or die "$ME: failed to open $in: $!\n";
+
+ # Seek to start of partition array.
+ my $off = partition_array_start_offset $pri_or_backup, $n_pe;
+ sysseek (F, $off, 0)
+ or die "$ME: $in: failed to seek to $off: $!\n";
+
+ # Read the array.
+ my $p;
+ my $pe_buf;
+ my $n = $n_pe * $pe_size;
+ ($p = sysread F, $pe_buf, $n) && $p == $n
+ or die "$ME: $in: failed to read $pri_or_backup partition array:($p:$n) $!\n";
+
+ return crc32 $pe_buf;
+}
+
+# Verify the initial CRC of BUF.
+sub check_GPT_header ($$$)
+{
+ my ($pri_or_backup, $in, $buf) = @_;
+
+ my $curr = curr_LBA $buf;
+ my $backup = backup_LBA $buf;
+ ($pri_or_backup eq 'primary') == ($curr == 1)
+ or die "$ME: $in: invalid curr_LBA($curr) in $pri_or_backup header\n";
+ ($pri_or_backup eq 'primary') == (34 < $backup)
+ or die "$ME: $in: invalid backup_LBA($backup) in $pri_or_backup header\n";
+
+ $pri_or_backup eq 'backup' && $backup != 1
+ and die "$ME: $in: the backup_LBA in the backup header must be 1\n";
+
+ # A primary partition's "partition entries starting LBA" must be 2.
+ if ($pri_or_backup eq 'primary')
+ {
+ my $p = pe_start_LBA $buf;
+ $p == 2
+ or die "$ME: $in: primary header's PE start LBA is $p (should be 2)\n";
+ }
+
+ # Save a copy of the CRC, then zero that field, bytes 16..19:
+ my $orig_crc = unpack ('L<', substr ($buf, 16, 4));
+ substr ($buf, 16, 4) = "\0" x 4;
+
+ # Compute CRC32 of header: it'd better match.
+ my $crc = crc32($buf);
+ $orig_crc == $crc
+ or die "$ME: $in: cannot reproduce $pri_or_backup GPT header's CRC32\n";
+}
+
+# Poke the $N_PE value into $$BUF's number-of-partition-entries slot.
+sub poke_n_pe ($$)
+{
+ my ($buf, $n_pe) = @_;
+
+ # Poke the little-endian value into place.
+ substr ($$buf, 80, 4) = pack ('L<', $n_pe);
+}
+
+# Compute/set partition-array CRC (given $N_PE), then compute a new
+# header-CRC and poke it into its position, too.
+sub set_CRCs ($$$$)
+{
+ my ($pri_or_backup, $buf, $in, $n_pe) = @_;
+
+ # Compute CRC of primary partition array and put it in substr ($pri, 88, 4)
+ my $pa_crc = partition_array_crc $pri_or_backup, $n_pe, $in;
+ substr ($$buf, 88, 4) = pack ('L<', $pa_crc);
+
+ # In the backup header, we must also set the 8-byte "Partition entries
+ # starting LBA number" field to reflect our new value of $n_pe.
+ if ($pri_or_backup eq 'backup')
+ {
+ my $off = partition_array_start_offset $pri_or_backup, $n_pe;
+ $off % $ss == 0
+ or die "$ME: internal error: starting LBA byte offset($off) is"
+ . " not a multiple of $ss\n";
+ my $lba = $off / $ss;
+ substr ($$buf, 72, 8) = pack ('Q<', $lba);
+ }
+
+ # Before we compute the checksum, we must zero-out the 4-byte
+ # slot into which we'll store the result.
+ substr ($$buf, 16, 4) = "\0" x 4;
+ my $crc = crc32($$buf);
+ substr ($$buf, 16, 4) = pack ('L<', $crc);
+}
+
+sub usage ($)
+{
+ my ($exit_code) = @_;
+ my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+ if ($exit_code != 0)
+ {
+ print $STREAM "Try `$ME --help' for more information.\n";
+ }
+ else
+ {
+ print $STREAM <<EOF;
+Usage: $ME [OPTIONS] FILE
+Change the number of GPT partition array entries in FILE.
+
+This option must be specified:
+
+ --n-partition-array-entries=N FIXME
+
+The following are optional:
+
+ --sector-size=N assume sector size of N bytes (default: 512)
+ --help display this help and exit
+ --version output version information and exit
+
+EXAMPLE:
+
+ dd if=/dev/null of=F bs=1 seek=6MB
+ parted -s F mklabel gpt
+ $ME --n=9 F
+
+EOF
+ }
+ exit $exit_code;
+}
+
+{
+ my $n_partition_entries;
+
+ use Getopt::Long;
+ GetOptions
+ (
+ 'n-partition-array-entries=i' => \$n_partition_entries,
+ 'sector-size=i' => \$ss,
+
+ help => sub { usage 0 },
+ version => sub { print "$ME version $VERSION\n"; exit },
+ ) or usage 1;
+
+ defined $n_partition_entries
+ or (warn "$ME: --n-partition-array-entries=N not specified\n"), usage 1;
+
+ defined $ss
+ or $ss = 512;
+
+ # Require sensible number:
+ # It must either be <= 128, or else a multiple of 4 so that at 128 bytes each,
+ # this array fully occupies a whole number of 512-byte sectors.
+ 1 <= $n_partition_entries
+ && ($n_partition_entries <= 128
+ || $n_partition_entries % 4 == 0)
+ or die "$ME: invalid number of partition entries: $n_partition_entries\n";
+
+ @ARGV == 1
+ or (warn "$ME: no file specified\n"), usage 1;
+
+ my $in = $ARGV[0];
+ local *F;
+ open F, '<', $in
+ or die "$ME: failed to open $in: $!\n";
+
+ # Get length and perform some basic sanity checks.
+ my $len = sysseek (F, 0, 2);
+ defined $len
+ or die "$ME: $in: failed to seek to EOF: $!\n";
+ my $min_n_sectors = 34 + 33 + ($n_partition_entries * $pe_size + $ss - 1) / $ss;
+ my $n_sectors = int (($len + $ss - 1) / $ss);
+ $n_sectors < $min_n_sectors
+ and die "$ME: $in: image file is too small to contain a GPT image\n";
+ $len % $ss == 0
+ or die "$ME: $in: size is not a multiple of $ss: $!\n";
+
+ # Skip 1st sector.
+ sysseek (F, $ss, 0)
+ or die "$ME: $in: failed to seek to byte $ss: $!\n";
+
+ # Read the primary GPT header.
+ my $p;
+ my $pri;
+ ($p = sysread F, $pri, $gpt_header_len) && $p == $gpt_header_len
+ or die "$ME: $in: failed to read the primary GPT header: $!\n";
+
+ $backup_LBA = unpack ('Q<', substr ($pri, 32, 8));
+
+ # Seek-to and read the backup GPT header.
+ sysseek (F, $backup_LBA * $ss, 0)
+ or die "$ME: $in: failed to seek to backup LBA $backup_LBA: $!\n";
+ my $backup;
+ ($p = sysread F, $backup, $gpt_header_len) && $p == $gpt_header_len
+ or die "$ME: $in: read failed: $!\n";
+
+ close F;
+
+ check_GPT_header ('primary', $in, $pri);
+ check_GPT_header ('backup', $in, $backup);
+
+ poke_n_pe (\$pri, $n_partition_entries);
+ poke_n_pe (\$backup, $n_partition_entries);
+
+ # set both PE CRC and header CRCs:
+ set_CRCs 'primary', \$pri, $in, $n_partition_entries;
+ set_CRCs 'backup', \$backup, $in, $n_partition_entries;
+
+ # Write both headers back to the file:
+ open F, '+<', $in
+ or die "$ME: failed to open $in: $!\n";
+
+ sysseek (F, $ss, 0)
+ or die "$ME: $in: failed to seek to byte $ss: $!\n";
+ syswrite F, $pri
+ or die "$ME: $in: failed to write primary header: $!\n";
+
+ sysseek (F, $backup_LBA * $ss, 0)
+ or die "$ME: $in: failed to seek to backup LBA $backup_LBA: $!\n";
+ syswrite F, $backup
+ or die "$ME: $in: failed to write backup header: $!\n";
+
+ close F
+ or die "$ME: failed to close $in: $!\n";
+ }
diff --git a/tests/help-version.sh b/tests/help-version.sh
new file mode 100755
index 0000000..e88cd13
--- /dev/null
+++ b/tests/help-version.sh
@@ -0,0 +1,282 @@
+#! /bin/sh
+# Make sure all these programs work properly
+# when invoked with --help or --version.
+
+# Copyright (C) 2000-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Ensure that $SHELL is set to *some* value and exported.
+# This is required for dircolors, which would fail e.g., when
+# invoked via debuild (which removes SHELL from the environment).
+test "x$SHELL" = x && SHELL=/bin/sh
+export SHELL
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+expected_failure_status_chroot=125
+expected_failure_status_env=125
+expected_failure_status_nice=125
+expected_failure_status_nohup=125
+expected_failure_status_stdbuf=125
+expected_failure_status_su=125
+expected_failure_status_timeout=125
+expected_failure_status_printenv=2
+expected_failure_status_tty=3
+expected_failure_status_sort=2
+expected_failure_status_expr=3
+expected_failure_status_lbracket=2
+expected_failure_status_dir=2
+expected_failure_status_ls=2
+expected_failure_status_vdir=2
+
+expected_failure_status_cmp=2
+expected_failure_status_zcmp=2
+expected_failure_status_sdiff=2
+expected_failure_status_diff3=2
+expected_failure_status_diff=2
+expected_failure_status_zdiff=2
+expected_failure_status_zgrep=2
+expected_failure_status_zegrep=2
+expected_failure_status_zfgrep=2
+
+expected_failure_status_grep=2
+expected_failure_status_egrep=2
+expected_failure_status_fgrep=2
+
+test "$built_programs" \
+ || fail_ "built_programs not specified!?!"
+
+test "$VERSION" \
+ || fail_ "set envvar VERSION; it is required for a PATH sanity-check"
+
+# Extract version from --version output of the first program
+for i in $built_programs; do
+ v=$(env $i --version | sed -n '1s/.* //p;q')
+ break
+done
+
+# Ensure that it matches $VERSION.
+test "x$v" = "x$VERSION" \
+ || fail_ "--version-\$VERSION mismatch"
+
+for lang in C fr da; do
+ for i in $built_programs; do
+
+ # Skip `test'; it doesn't accept --help or --version.
+ test $i = test && continue;
+
+ # false fails even when invoked with --help or --version.
+ if test $i = false; then
+ env LC_MESSAGES=$lang $i --help >/dev/null && fail=1
+ env LC_MESSAGES=$lang $i --version >/dev/null && fail=1
+ continue
+ fi
+
+ # The just-built install executable is always named `ginstall'.
+ test $i = install && i=ginstall
+
+ # Make sure they exit successfully, under normal conditions.
+ env $i --help > h-$i || fail=1
+ env $i --version >/dev/null || fail=1
+
+ # Make sure they mention the bug-reporting address in --help output.
+ grep "$PACKAGE_BUGREPORT" h-$i > /dev/null || fail=1
+ rm -f h-$i
+
+ # Make sure they fail upon `disk full' error.
+ if test -w /dev/full && test -c /dev/full; then
+ env $i --help >/dev/full 2>/dev/null && fail=1
+ env $i --version >/dev/full 2>/dev/null && fail=1
+ status=$?
+ test $i = [ && prog=lbracket || prog=$i
+ eval "expected=\$expected_failure_status_$prog"
+ test x$expected = x && expected=1
+ if test $status = $expected; then
+ : # ok
+ else
+ fail=1
+ echo "*** $i: bad exit status \`$status' (expected $expected)," 1>&2
+ echo " with --help or --version output redirected to /dev/full" 1>&2
+ fi
+ fi
+ done
+done
+
+bigZ_in=bigZ-in.Z
+zin=zin.gz
+zin2=zin2.gz
+
+tmp=tmp-$$
+tmp_in=in-$$
+tmp_in2=in2-$$
+tmp_dir=dir-$$
+tmp_out=out-$$
+mkdir $tmp || fail=1
+cd $tmp || fail=1
+
+comm_setup () { args="$tmp_in $tmp_in"; }
+csplit_setup () { args="$tmp_in //"; }
+cut_setup () { args='-f 1'; }
+join_setup () { args="$tmp_in $tmp_in"; }
+tr_setup () { args='a a'; }
+
+chmod_setup () { args="a+x $tmp_in"; }
+# Punt on these.
+chgrp_setup () { args=--version; }
+chown_setup () { args=--version; }
+mkfifo_setup () { args=--version; }
+mknod_setup () { args=--version; }
+# Punt on uptime, since it fails (e.g., failing to get boot time)
+# on some systems, and we shouldn't let that stop `make check'.
+uptime_setup () { args=--version; }
+
+# Create a file in the current directory, not in $TMPDIR.
+mktemp_setup () { args=mktemp.XXXX; }
+
+cmp_setup () { args="$tmp_in $tmp_in2"; }
+
+# Tell dd not to print the line with transfer rate and total.
+# The transfer rate would vary between runs.
+dd_setup () { args=status=noxfer; }
+
+zdiff_setup () { args="$zin $zin2"; }
+zcmp_setup () { args="$zin $zin2"; }
+zcat_setup () { args=$zin; }
+gunzip_setup () { args=$zin; }
+zmore_setup () { args=$zin; }
+zless_setup () { args=$zin; }
+znew_setup () { args=$bigZ_in; }
+zforce_setup () { args=$zin; }
+zgrep_setup () { args="z $zin"; }
+zegrep_setup () { args="z $zin"; }
+zfgrep_setup () { args="z $zin"; }
+gzexe_setup () { args=$tmp_in; }
+
+# We know that $tmp_in contains a "0"
+grep_setup () { args="0 $tmp_in"; }
+egrep_setup () { args="0 $tmp_in"; }
+fgrep_setup () { args="0 $tmp_in"; }
+
+diff_setup () { args="$tmp_in $tmp_in2"; }
+sdiff_setup () { args="$tmp_in $tmp_in2"; }
+diff3_setup () { args="$tmp_in $tmp_in2 $tmp_in2"; }
+cp_setup () { args="$tmp_in $tmp_in2"; }
+ln_setup () { args="$tmp_in ln-target"; }
+ginstall_setup () { args="$tmp_in $tmp_in2"; }
+mv_setup () { args="$tmp_in $tmp_in2"; }
+mkdir_setup () { args=$tmp_dir/subdir; }
+rmdir_setup () { args=$tmp_dir; }
+rm_setup () { args=$tmp_in; }
+shred_setup () { args=$tmp_in; }
+touch_setup () { args=$tmp_in2; }
+truncate_setup () { args="--reference=$tmp_in $tmp_in2"; }
+
+mkid_setup () { printf 'f(){}\ntypedef int t;\n' > f.c; args=. ; }
+lid_setup () { args=; }
+fid_setup () { args=f.c; }
+fnid_setup () { args=; }
+xtokid_setup () { args=; }
+aid_setup () { args=f; }
+eid_setup () { args=--version; }
+gid_setup () { args=f; }
+defid_setup () { args=t; }
+
+basename_setup () { args=$tmp_in; }
+dirname_setup () { args=$tmp_in; }
+expr_setup () { args=foo; }
+
+# Punt, in case GNU `id' hasn't been installed yet.
+groups_setup () { args=--version; }
+
+pathchk_setup () { args=$tmp_in; }
+yes_setup () { args=--version; }
+logname_setup () { args=--version; }
+nohup_setup () { args=--version; }
+printf_setup () { args=foo; }
+seq_setup () { args=10; }
+sleep_setup () { args=0; }
+su_setup () { args=--version; }
+stdbuf_setup () { args="-oL true"; }
+timeout_setup () { args=--version; }
+
+# I'd rather not run sync, since it spins up disks that I've
+# deliberately caused to spin down (but not unmounted).
+sync_setup () { args=--version; }
+
+test_setup () { args=foo; }
+
+# This is necessary in the unusual event that there is
+# no valid entry in /etc/mtab.
+df_setup () { args=/; }
+
+# This is necessary in the unusual event that getpwuid (getuid ()) fails.
+id_setup () { args=-u; }
+
+# Use env to avoid invoking built-in sleep of Solaris 11's /bin/sh.
+kill_setup () {
+ env sleep 10m &
+ args=$!
+}
+
+link_setup () { args="$tmp_in link-target"; }
+unlink_setup () { args=$tmp_in; }
+
+readlink_setup () {
+ ln -s . slink
+ args=slink;
+}
+
+stat_setup () { args=$tmp_in; }
+unlink_setup () { args=$tmp_in; }
+lbracket_setup () { args=": ]"; }
+
+parted_setup () { args="-s $tmp_in mklabel gpt"
+ dd if=/dev/null of=$tmp_in seek=2000; }
+
+# Ensure that each program "works" (exits successfully) when doing
+# something more than --help or --version.
+for i in $built_programs; do
+ # Skip these.
+ case $i in chroot|stty|tty|false|chcon|runcon) continue;; esac
+
+ rm -rf $tmp_in $tmp_in2 $tmp_dir $tmp_out $bigZ_in $zin $zin2
+ echo z |gzip > $zin
+ cp $zin $zin2
+ cp $zin $bigZ_in
+
+ # This is sort of kludgey: use numbers so this is valid input for factor,
+ # and two tokens so it's valid input for tsort.
+ echo 2147483647 0 > $tmp_in
+ # Make $tmp_in2 identical. Then, using $tmp_in and $tmp_in2 as arguments
+ # to the likes of cmp and diff makes them exit successfully.
+ cp $tmp_in $tmp_in2
+ mkdir $tmp_dir
+ # echo ================== $i
+ test $i = [ && prog=lbracket || prog=$i
+ if type ${prog}_setup > /dev/null 2>&1; then
+ ${prog}_setup
+ else
+ args=
+ fi
+ if env $i $args < $tmp_in > $tmp_out; then
+ : # ok
+ else
+ echo FAIL: $i
+ fail=1
+ fi
+ rm -rf $tmp_in $tmp_in2 $tmp_out $tmp_dir
+done
+
+Exit $fail
diff --git a/tests/init.cfg b/tests/init.cfg
new file mode 100644
index 0000000..dc8b2bc
--- /dev/null
+++ b/tests/init.cfg
@@ -0,0 +1,132 @@
+# This file is sourced by init.sh, *before* its initialization.
+
+# This goes hand in hand with the "exec 9>&2;" in tests/Makefile.am's
+# TESTS_ENVIRONMENT definition.
+stderr_fileno_=9
+
+# For repeatability, reset the environment to known value.
+LANG=C
+LC_ALL=C
+TZ=UTC
+export LANG LC_ALL TZ
+export PARTED_SUPPRESS_FILE_SYSTEM_MANIPULATION_WARNING=1
+
+# Protect ourselves from common misconfiguration to export
+# CDPATH into the environment
+unset CDPATH
+
+# Suppress readline initialization garbage.
+unset TERM
+
+sector_size_=${PARTED_SECTOR_SIZE:-512}
+
+require_512_byte_sector_size_()
+{
+ test $sector_size_ = 512 || skip_ 'FS test with sector size != 512'
+}
+
+# Having an unsearchable directory in PATH causes execve to fail with EACCES
+# when applied to an unresolvable program name, contrary to the desired ENOENT.
+# Avoid the problem by rewriting PATH to exclude unsearchable directories.
+# Also, if PATH lacks /sbin and/or /usr/sbin, append it/them.
+sanitize_path_()
+{
+ # FIXME: remove double quotes around $IFS when all tests use init.sh.
+ # They constitute a work-around for a bug in FreeBSD 8.1's /bin/sh.
+ local saved_IFS="$IFS"
+ IFS=:
+ set -- $PATH
+ IFS=$saved_IFS
+
+ local d d1
+ local colon=
+ local new_path=
+ for d in "$@"; do
+ test -z "$d" && d1=. || d1=$d
+ if ls -d "$d1/." > /dev/null 2>&1; then
+ new_path="$new_path$colon$d"
+ colon=':'
+ fi
+ done
+
+ for d in /sbin /usr/sbin ; do
+ case ":$new_path:" in
+ *:$d:*) ;;
+ *) new_path="$new_path:$d" ;;
+ esac
+ done
+
+ PATH=$new_path
+ export PATH
+}
+
+require_udevadm_settle_()
+{
+ udevadm --help > /dev/null \
+ || skip_ 'udevadm command is required for this test'
+}
+
+require_perl_digest_crc_()
+{
+ local ok=0
+ local t
+ t=$(perl -le 'use Digest::CRC qw(crc32); print crc32("123")') \
+ && test $t = 2286445522 && ok=1
+ test $ok = 1 \
+ || skip_ "this test requires Perl's Digest::CRC module"
+}
+
+# We need two cleanup functions. One, cleanup_final_, is sometimes
+# used (transparently) via t-local.sh's modprobe/rmmod code.
+# The other is used e.g., to unmount.
+cleanup_final_() { :; }
+cleanup_fn_() { :; }
+cleanup_() { cleanup_fn_; cleanup_final_; }
+
+# Use this for a test that requires an actual hardware device, e.g., a real
+# disk, a USB key, or a CD-RW. The envvars $DEVICE_TO_ERASE and
+# $DEVICE_TO_ERASE_SIZE must be set properly. Otherwise, skip the test.
+require_erasable_()
+{
+ # Skip quietly if both envvars are not specified.
+ test -n "$DEVICE_TO_ERASE" && test -n "$DEVICE_TO_ERASE_SIZE" \
+ || skip_ 'This test requires an erasable device and you have not properly' \
+ 'set the $DEVICE_TO_ERASE and $DEVICE_TO_ERASE_SIZE envvars.'
+
+ # Since testing a drive with parted destroys all data on that drive,
+ # we have rather draconian safety requirements that should help avoid
+ # accidents. If $dev_ is the name of the device,
+ # - running "parted -s $dev_ print" must succeed, and
+ # - its output must include a line matching /^Disk $dev_: $DEV_SIZE$/
+ # - Neither $dev_ nor any $dev_[0-9]* may be mounted.
+ dev_=$DEVICE_TO_ERASE
+ sz=$DEVICE_TO_ERASE_SIZE
+ parted_output=$(parted -s $dev_ print) || fail_ "no such device: $dev_"
+ parted -s $dev_ print|grep "^Disk $dev_: $sz$" \
+ > /dev/null || fail_ "actual device size is not $sz"
+ # Try to see if $dev_ or any of its partitions is mounted.
+ # This is not reliable. FIXME: find a better way.
+ # Maybe expose parted's own test for whether a disk is in use.
+ # The following assume that $dev_ is canonicalized, e.g., that $dev_
+ # contains no "//" or "/./" components.
+
+ # Prefer df --local, if it works, so we don't waste time
+ # enumerating lots of automounted file systems.
+ ( df --local / > /dev/null 2>&1 ) && df='df --local' || df=df
+ $df | grep "^$dev_" && fail_ "$dev_ is already mounted"
+ $df | grep "^$dev_[0-9]" && fail_ "a partition of $dev_ is already mounted"
+}
+
+# At least Fedora 16 (kernel 3.1.6-1.fc16.x86_64) fails this test.
+require_partitionable_loop_device_()
+{
+ local f=/sys/devices/virtual/block/$(basename $1)/ext_range
+ case $(cat "$f") in
+ ''|0|1) skip_ your system is not configured to partition loop devices;;
+ esac
+}
+
+sanitize_path_
+
+. "$abs_top_srcdir/tests/t-lib-helpers.sh"
+. "$abs_top_srcdir/tests/t-local.sh"
diff --git a/tests/init.sh b/tests/init.sh
new file mode 100644
index 0000000..e857272
--- /dev/null
+++ b/tests/init.sh
@@ -0,0 +1,589 @@
+# source this file; set up for tests
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Using this file in a test
+# =========================
+#
+# The typical skeleton of a test looks like this:
+#
+# #!/bin/sh
+# . "${srcdir=.}/init.sh"; path_prepend_ .
+# Execute some commands.
+# Note that these commands are executed in a subdirectory, therefore you
+# need to prepend "../" to relative filenames in the build directory.
+# Note that the "path_prepend_ ." is useful only if the body of your
+# test invokes programs residing in the initial directory.
+# For example, if the programs you want to test are in src/, and this test
+# script is named tests/test-1, then you would use "path_prepend_ ../src",
+# or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH"
+# to all tests via automake's TESTS_ENVIRONMENT.
+# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure.
+# Use the skip_ and fail_ functions to print a diagnostic and then exit
+# with the corresponding exit code.
+# Exit $?
+
+# Executing a test that uses this file
+# ====================================
+#
+# Running a single test:
+# $ make check TESTS=test-foo.sh
+#
+# Running a single test, with verbose output:
+# $ make check TESTS=test-foo.sh VERBOSE=yes
+#
+# Running a single test, with single-stepping:
+# 1. Go into a sub-shell:
+# $ bash
+# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the
+# Makefile:
+# $ export srcdir=../../tests # this is an example
+# 3. Execute the commands from the test, copy&pasting them one by one:
+# $ . "$srcdir/init.sh"; path_prepend_ .
+# ...
+# 4. Finally
+# $ exit
+
+ME_=`expr "./$0" : '.*/\(.*\)$'`
+
+# We use a trap below for cleanup. This requires us to go through
+# hoops to get the right exit status transported through the handler.
+# So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests.
+# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
+# sh inside this function.
+Exit () { set +e; (exit $1); exit $1; }
+
+# Print warnings (e.g., about skipped and failed tests) to this file number.
+# Override by defining to say, 9, in init.cfg, and putting say,
+# export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2
+# in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file.
+# This is useful when using automake's parallel tests mode, to print
+# the reason for skip/failure to console, rather than to the .log files.
+: ${stderr_fileno_=2}
+
+# Note that correct expansion of "$*" depends on IFS starting with ' '.
+# Always write the full diagnostic to stderr.
+# When stderr_fileno_ is not 2, also emit the first line of the
+# diagnostic to that file descriptor.
+warn_ ()
+{
+ # If IFS does not start with ' ', set it and emit the warning in a subshell.
+ case $IFS in
+ ' '*) printf '%s\n' "$*" >&2
+ test $stderr_fileno_ = 2 \
+ || { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;;
+ *) (IFS=' '; warn_ "$@");;
+ esac
+}
+fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; }
+skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; }
+fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; }
+framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; }
+
+# Sanitize this shell to POSIX mode, if possible.
+DUALCASE=1; export DUALCASE
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+ esac
+fi
+
+# We require $(...) support unconditionally.
+# We require a few additional shell features only when $EXEEXT is nonempty,
+# in order to support automatic $EXEEXT emulation:
+# - hyphen-containing alias names
+# - we prefer to use ${var#...} substitution, rather than having
+# to work around lack of support for that feature.
+# The following code attempts to find a shell with support for these features.
+# If the current shell passes the test, we're done. Otherwise, test other
+# shells until we find one that passes. If one is found, re-exec it.
+# If no acceptable shell is found, skip the current test.
+#
+# The "...set -x; P=1 true 2>err..." test is to disqualify any shell that
+# emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do.
+#
+# Use "9" to indicate success (rather than 0), in case some shell acts
+# like Solaris 10's /bin/sh but exits successfully instead of with status 2.
+
+# Eval this code in a subshell to determine a shell's suitability.
+# 10 - passes all tests; ok to use
+# 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score
+# ? - not ok
+gl_shell_test_script_='
+test $(echo y) = y || exit 1
+score_=10
+if test "$VERBOSE" = yes; then
+ test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9
+fi
+test -z "$EXEEXT" && exit $score_
+shopt -s expand_aliases
+alias a-b="echo zoo"
+v=abx
+ test ${v%x} = ab \
+ && test ${v#a} = bx \
+ && test $(a-b) = zoo \
+ && exit $score_
+'
+
+if test "x$1" = "x--no-reexec"; then
+ shift
+else
+ # Assume a working shell. Export to subshells (setup_ needs this).
+ gl_set_x_corrupts_stderr_=false
+ export gl_set_x_corrupts_stderr_
+
+ # Record the first marginally acceptable shell.
+ marginal_=
+
+ # Search for a shell that meets our requirements.
+ for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \
+ /bin/sh bash dash zsh pdksh fail
+ do
+ test "$re_shell_" = no_shell && continue
+
+ # If we've made it all the way to the sentinel, "fail" without
+ # finding even a marginal shell, skip this test.
+ if test "$re_shell_" = fail; then
+ test -z "$marginal_" && skip_ failed to find an adequate shell
+ re_shell_=$marginal_
+ break
+ fi
+
+ # When testing the current shell, simply "eval" the test code.
+ # Otherwise, run it via $re_shell_ -c ...
+ if test "$re_shell_" = __current__; then
+ # 'eval'ing this code makes Solaris 10's /bin/sh exit with
+ # $? set to 2. It does not evaluate any of the code after the
+ # "unexpected" first '('. Thus, we must run it in a subshell.
+ ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1
+ else
+ "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null
+ fi
+
+ st_=$?
+
+ # $re_shell_ works just fine. Use it.
+ if test $st_ = 10; then
+ gl_set_x_corrupts_stderr_=false
+ break
+ fi
+
+ # If this is our first marginally acceptable shell, remember it.
+ if test "$st_:$marginal_" = 9: ; then
+ marginal_="$re_shell_"
+ gl_set_x_corrupts_stderr_=true
+ fi
+ done
+
+ if test "$re_shell_" != __current__; then
+ # Found a usable shell. Preserve -v and -x.
+ case $- in
+ *v*x* | *x*v*) opts_=-vx ;;
+ *v*) opts_=-v ;;
+ *x*) opts_=-x ;;
+ *) opts_= ;;
+ esac
+ exec "$re_shell_" $opts_ "$0" --no-reexec "$@"
+ echo "$ME_: exec failed" 1>&2
+ exit 127
+ fi
+fi
+
+# If this is bash, turn off all aliases.
+test -n "$BASH_VERSION" && unalias -a
+
+# Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to
+# PROG_NAME.exe), we want to support hyphen-containing names like test-acos.
+# That is part of the shell-selection test above. Why use aliases rather
+# than functions? Because support for hyphen-containing aliases is more
+# widespread than that for hyphen-containing function names.
+test -n "$EXEEXT" && shopt -s expand_aliases
+
+# Enable glibc's malloc-perturbing option.
+# This is useful for exposing code that depends on the fact that
+# malloc-related functions often return memory that is mostly zeroed.
+# If you have the time and cycles, use valgrind to do an even better job.
+: ${MALLOC_PERTURB_=87}
+export MALLOC_PERTURB_
+
+# This is a stub function that is run upon trap (upon regular exit and
+# interrupt). Override it with a per-test function, e.g., to unmount
+# a partition, or to undo any other global state changes.
+cleanup_ () { :; }
+
+# Emit a header similar to that from diff -u; Print the simulated "diff"
+# command so that the order of arguments is clear. Don't bother with @@ lines.
+emit_diff_u_header_ ()
+{
+ printf '%s\n' "diff -u $*" \
+ "--- $1 1970-01-01" \
+ "+++ $2 1970-01-01"
+}
+
+# Arrange not to let diff or cmp operate on /dev/null,
+# since on some systems (at least OSF/1 5.1), that doesn't work.
+# When there are not two arguments, or no argument is /dev/null, return 2.
+# When one argument is /dev/null and the other is not empty,
+# cat the nonempty file to stderr and return 1.
+# Otherwise, return 0.
+compare_dev_null_ ()
+{
+ test $# = 2 || return 2
+
+ if test "x$1" = x/dev/null; then
+ test -s "$2" || return 0
+ emit_diff_u_header_ "$@"; sed 's/^/+/' "$2"
+ return 1
+ fi
+
+ if test "x$2" = x/dev/null; then
+ test -s "$1" || return 0
+ emit_diff_u_header_ "$@"; sed 's/^/-/' "$1"
+ return 1
+ fi
+
+ return 2
+}
+
+if diff_out_=`exec 2>/dev/null; diff -u "$0" "$0" < /dev/null` \
+ && diff -u Makefile "$0" 2>/dev/null | grep '^[+]#!' >/dev/null; then
+ # diff accepts the -u option and does not (like AIX 7 'diff') produce an
+ # extra space on column 1 of every content line.
+ if test -z "$diff_out_"; then
+ compare_ () { diff -u "$@"; }
+ else
+ compare_ ()
+ {
+ if diff -u "$@" > diff.out; then
+ # No differences were found, but Solaris 'diff' produces output
+ # "No differences encountered". Hide this output.
+ rm -f diff.out
+ true
+ else
+ cat diff.out
+ rm -f diff.out
+ false
+ fi
+ }
+ fi
+elif diff_out_=`exec 2>/dev/null; diff -c "$0" "$0" < /dev/null`; then
+ if test -z "$diff_out_"; then
+ compare_ () { diff -c "$@"; }
+ else
+ compare_ ()
+ {
+ if diff -c "$@" > diff.out; then
+ # No differences were found, but AIX and HP-UX 'diff' produce output
+ # "No differences encountered" or "There are no differences between the
+ # files.". Hide this output.
+ rm -f diff.out
+ true
+ else
+ cat diff.out
+ rm -f diff.out
+ false
+ fi
+ }
+ fi
+elif ( cmp --version < /dev/null 2>&1 | grep GNU ) > /dev/null 2>&1; then
+ compare_ () { cmp -s "$@"; }
+else
+ compare_ () { cmp "$@"; }
+fi
+
+# Usage: compare EXPECTED ACTUAL
+#
+# Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more.
+# Otherwise, propagate $? to caller: any diffs have already been printed.
+compare ()
+{
+ # This looks like it can be factored to use a simple "case $?"
+ # after unchecked compare_dev_null_ invocation, but that would
+ # fail in a "set -e" environment.
+ if compare_dev_null_ "$@"; then
+ return 0
+ else
+ case $? in
+ 1) return 1;;
+ *) compare_ "$@";;
+ esac
+ fi
+}
+
+# An arbitrary prefix to help distinguish test directories.
+testdir_prefix_ () { printf gt; }
+
+# Run the user-overridable cleanup_ function, remove the temporary
+# directory and exit with the incoming value of $?.
+remove_tmp_ ()
+{
+ __st=$?
+ cleanup_
+ # cd out of the directory we're about to remove
+ cd "$initial_cwd_" || cd / || cd /tmp
+ chmod -R u+rwx "$test_dir_"
+ # If removal fails and exit status was to be 0, then change it to 1.
+ rm -rf "$test_dir_" || { test $__st = 0 && __st=1; }
+ exit $__st
+}
+
+# Given a directory name, DIR, if every entry in it that matches *.exe
+# contains only the specified bytes (see the case stmt below), then print
+# a space-separated list of those names and return 0. Otherwise, don't
+# print anything and return 1. Naming constraints apply also to DIR.
+find_exe_basenames_ ()
+{
+ feb_dir_=$1
+ feb_fail_=0
+ feb_result_=
+ feb_sp_=
+ for feb_file_ in $feb_dir_/*.exe; do
+ # If there was no *.exe file, or there existed a file named "*.exe" that
+ # was deleted between the above glob expansion and the existence test
+ # below, just skip it.
+ test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \
+ && continue
+ # Exempt [.exe, since we can't create a function by that name, yet
+ # we can't invoke [ by PATH search anyways due to shell builtins.
+ test "x$feb_file_" = "x$feb_dir_/[.exe" && continue
+ case $feb_file_ in
+ *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;;
+ *) # Remove leading file name components as well as the .exe suffix.
+ feb_file_=${feb_file_##*/}
+ feb_file_=${feb_file_%.exe}
+ feb_result_="$feb_result_$feb_sp_$feb_file_";;
+ esac
+ feb_sp_=' '
+ done
+ test $feb_fail_ = 0 && printf %s "$feb_result_"
+ return $feb_fail_
+}
+
+# Consider the files in directory, $1.
+# For each file name of the form PROG.exe, create an alias named
+# PROG that simply invokes PROG.exe, then return 0. If any selected
+# file name or the directory name, $1, contains an unexpected character,
+# define no alias and return 1.
+create_exe_shims_ ()
+{
+ case $EXEEXT in
+ '') return 0 ;;
+ .exe) ;;
+ *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;;
+ esac
+
+ base_names_=`find_exe_basenames_ $1` \
+ || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; }
+
+ if test -n "$base_names_"; then
+ for base_ in $base_names_; do
+ alias "$base_"="$base_$EXEEXT"
+ done
+ fi
+
+ return 0
+}
+
+# Use this function to prepend to PATH an absolute name for each
+# specified, possibly-$initial_cwd_-relative, directory.
+path_prepend_ ()
+{
+ while test $# != 0; do
+ path_dir_=$1
+ case $path_dir_ in
+ '') fail_ "invalid path dir: '$1'";;
+ /*) abs_path_dir_=$path_dir_;;
+ *) abs_path_dir_=$initial_cwd_/$path_dir_;;
+ esac
+ case $abs_path_dir_ in
+ *:*) fail_ "invalid path dir: '$abs_path_dir_'";;
+ esac
+ PATH="$abs_path_dir_:$PATH"
+
+ # Create an alias, FOO, for each FOO.exe in this directory.
+ create_exe_shims_ "$abs_path_dir_" \
+ || fail_ "something failed (above): $abs_path_dir_"
+ shift
+ done
+ export PATH
+}
+
+setup_ ()
+{
+ if test "$VERBOSE" = yes; then
+ # Test whether set -x may cause the selected shell to corrupt an
+ # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh
+ # from SunOS 5.11, OpenBSD 4.7 and Irix 5.x and 6.5.
+ # If enabling verbose output this way would cause trouble, simply
+ # issue a warning and refrain.
+ if $gl_set_x_corrupts_stderr_; then
+ warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr"
+ else
+ set -x
+ fi
+ fi
+
+ initial_cwd_=$PWD
+ fail=0
+
+ pfx_=`testdir_prefix_`
+ test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \
+ || fail_ "failed to create temporary directory in $initial_cwd_"
+ cd "$test_dir_" || fail_ "failed to cd to temporary directory"
+
+ # As autoconf-generated configure scripts do, ensure that IFS
+ # is defined initially, so that saving and restoring $IFS works.
+ gl_init_sh_nl_='
+'
+ IFS=" "" $gl_init_sh_nl_"
+
+ # This trap statement, along with a trap on 0 below, ensure that the
+ # temporary directory, $test_dir_, is removed upon exit as well as
+ # upon receipt of any of the listed signals.
+ for sig_ in 1 2 3 13 15; do
+ eval "trap 'Exit $(expr $sig_ + 128)' $sig_"
+ done
+}
+
+# Create a temporary directory, much like mktemp -d does.
+# Written by Jim Meyering.
+#
+# Usage: mktempd_ /tmp phoey.XXXXXXXXXX
+#
+# First, try to use the mktemp program.
+# Failing that, we'll roll our own mktemp-like function:
+# - try to get random bytes from /dev/urandom
+# - failing that, generate output from a combination of quickly-varying
+# sources and gzip. Ignore non-varying gzip header, and extract
+# "random" bits from there.
+# - given those bits, map to file-name bytes using tr, and try to create
+# the desired directory.
+# - make only $MAX_TRIES_ attempts
+
+# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9.
+rand_bytes_ ()
+{
+ n_=$1
+
+ # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first?
+ # But if they have openssl, they probably have mktemp, too.
+
+ chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
+ dev_rand_=/dev/urandom
+ if test -r "$dev_rand_"; then
+ # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194.
+ dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \
+ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
+ return
+ fi
+
+ n_plus_50_=`expr $n_ + 50`
+ cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n'
+ data_=` (eval "$cmds_") 2>&1 | gzip `
+
+ # Ensure that $data_ has length at least 50+$n_
+ while :; do
+ len_=`echo "$data_"|wc -c`
+ test $n_plus_50_ -le $len_ && break;
+ data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip `
+ done
+
+ echo "$data_" \
+ | dd bs=1 skip=50 count=$n_ 2>/dev/null \
+ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
+}
+
+mktempd_ ()
+{
+ case $# in
+ 2);;
+ *) fail_ "Usage: mktempd_ DIR TEMPLATE";;
+ esac
+
+ destdir_=$1
+ template_=$2
+
+ MAX_TRIES_=4
+
+ # Disallow any trailing slash on specified destdir:
+ # it would subvert the post-mktemp "case"-based destdir test.
+ case $destdir_ in
+ /) ;;
+ */) fail_ "invalid destination dir: remove trailing slash(es)";;
+ esac
+
+ case $template_ in
+ *XXXX) ;;
+ *) fail_ \
+ "invalid template: $template_ (must have a suffix of at least 4 X's)";;
+ esac
+
+ # First, try to use mktemp.
+ d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` \
+ || fail=1
+
+ # The resulting name must be in the specified directory.
+ case $d in "$destdir_"*);; *) fail=1;; esac
+
+ # It must have created the directory.
+ test -d "$d" || fail=1
+
+ # It must have 0700 permissions. Handle sticky "S" bits.
+ perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1
+ case $perms in drwx------*) ;; *) fail=1;; esac
+
+ test $fail = 0 && {
+ echo "$d"
+ return
+ }
+
+ # If we reach this point, we'll have to create a directory manually.
+
+ # Get a copy of the template without its suffix of X's.
+ base_template_=`echo "$template_"|sed 's/XX*$//'`
+
+ # Calculate how many X's we've just removed.
+ template_length_=`echo "$template_" | wc -c`
+ nx_=`echo "$base_template_" | wc -c`
+ nx_=`expr $template_length_ - $nx_`
+
+ err_=
+ i_=1
+ while :; do
+ X_=`rand_bytes_ $nx_`
+ candidate_dir_="$destdir_/$base_template_$X_"
+ err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \
+ && { echo "$candidate_dir_"; return; }
+ test $MAX_TRIES_ -le $i_ && break;
+ i_=`expr $i_ + 1`
+ done
+ fail_ "$err_"
+}
+
+# If you want to override the testdir_prefix_ function,
+# or to add more utility functions, use this file.
+test -f "$srcdir/init.cfg" \
+ && . "$srcdir/init.cfg"
+
+setup_ "$@"
+# This trap is here, rather than in the setup_ function, because some
+# shells run the exit trap at shell function exit, rather than script exit.
+trap remove_tmp_ 0
diff --git a/tests/msdos-overlap b/tests/msdos-overlap
new file mode 100755
index 0000000..b2b03e6
--- /dev/null
+++ b/tests/msdos-overlap
@@ -0,0 +1,24 @@
+#!/usr/bin/python3
+"""
+ Write an overlapping partition to a msdos disk
+
+ Call with disk image/device to mangle
+"""
+import sys
+
+BAD_ENTRY = (0x72, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x10, 0x83, 0x03, 0x20, 0x4f, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x50, 0x83, 0x00, 0x0a, 0x7a, 0xff, 0x27,
+ 0x00, 0x00, 0x0a, 0x15, 0x00, 0x00, 0x00, 0x00 )
+OFFSET = 0x1b8
+
+if len(sys.argv) < 2:
+ print("%s: <image or device>" % sys.argv[0])
+ sys.exit(1)
+
+with open(sys.argv[1], "rb+") as f:
+ f.seek(OFFSET, 0)
+ f.write(bytes(bytearray(BAD_ENTRY)))
+
+sys.exit(0)
diff --git a/tests/print-align.c b/tests/print-align.c
new file mode 100644
index 0000000..e012fb3
--- /dev/null
+++ b/tests/print-align.c
@@ -0,0 +1,50 @@
+#include <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "closeout.h"
+#include "progname.h"
+
+int
+main (int argc, char **argv)
+{
+ atexit (close_stdout);
+ set_program_name (argv[0]);
+
+ if (argc != 2)
+ return EXIT_FAILURE;
+
+ char const *dev_name = argv[1];
+ PedDevice *dev = ped_device_get (dev_name);
+ if (dev == NULL)
+ return EXIT_FAILURE;
+
+ PedAlignment *pa_min = ped_device_get_minimum_alignment (dev);
+ if (pa_min)
+ printf ("minimum: %lld %lld\n", pa_min->offset, pa_min->grain_size);
+ else
+ printf ("minimum: - -\n");
+ free (pa_min);
+
+ PedAlignment *pa_opt = ped_device_get_optimum_alignment (dev);
+ if (pa_opt)
+ printf ("optimal: %lld %lld\n", pa_opt->offset, pa_opt->grain_size);
+ else
+ printf ("optimal: - -\n");
+ free (pa_opt);
+
+ PedDisk *disk = ped_disk_new (dev);
+ if (disk == NULL)
+ return EXIT_FAILURE;
+
+ PedAlignment *part_align = ped_disk_get_partition_alignment (disk);
+ if (part_align == NULL)
+ return EXIT_FAILURE;
+
+ printf ("partition alignment: %lld %lld\n",
+ part_align->offset, part_align->grain_size);
+
+ ped_device_destroy (dev);
+ return EXIT_SUCCESS;
+}
diff --git a/tests/print-flags.c b/tests/print-flags.c
new file mode 100644
index 0000000..db088e8
--- /dev/null
+++ b/tests/print-flags.c
@@ -0,0 +1,58 @@
+/* Print the available flags for a particular partition. */
+
+#include <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "progname.h"
+
+int
+main (int argc, char **argv)
+{
+ PedDevice *dev;
+ PedDisk *disk;
+ PedPartition *part;
+ int partnum;
+
+ set_program_name (argv[0]);
+
+ if (argc != 3 ) {
+ fprintf (stderr, "Usage: %s <device> <ptnnum>\n", argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ dev = ped_device_get(argv[1]);
+ if (!dev) {
+ fprintf (stderr, "Error: failed to create device %s\n",
+ argv[1]);
+ return EXIT_FAILURE;
+ }
+ if (!ped_device_open (dev)) {
+ fprintf (stderr, "Error: failed to open device %s\n", argv[1]);
+ return EXIT_FAILURE;
+ }
+ disk = ped_disk_new (dev);
+ if (!disk) {
+ fprintf (stderr,
+ "Error: failed to read partition table from device %s\n",
+ argv[1]);
+ return EXIT_FAILURE;
+ }
+
+ partnum = atoi (argv[2]);
+ part = ped_disk_get_partition (disk, partnum);
+ if (!part) {
+ fprintf (stderr,
+ "Error: failed to get partition %d from device %s\n",
+ partnum, argv[1]);
+ return EXIT_FAILURE;
+ }
+
+ for (PedPartitionFlag flag = PED_PARTITION_FIRST_FLAG;
+ flag <= PED_PARTITION_LAST_FLAG; flag++)
+ {
+ if (ped_partition_is_flag_available (part, flag))
+ puts (ped_partition_flag_get_name (flag));
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/tests/print-max.c b/tests/print-max.c
new file mode 100644
index 0000000..41aa8c6
--- /dev/null
+++ b/tests/print-max.c
@@ -0,0 +1,45 @@
+#include <config.h>
+#include <parted/parted.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "closeout.h"
+#include "progname.h"
+#include "error.h"
+
+int
+main (int argc, char **argv)
+{
+ atexit (close_stdout);
+ set_program_name (argv[0]);
+
+ if (argc != 2)
+ return EXIT_FAILURE;
+
+ char const *dev_name = argv[1];
+ PedDevice *dev = ped_device_get (dev_name);
+ if (dev == NULL)
+ return EXIT_FAILURE;
+ PedDisk *disk = ped_disk_new (dev);
+ if (disk == NULL)
+ return EXIT_FAILURE;
+
+ PedSector max_length = ped_disk_max_partition_length (disk);
+ PedSector max_start_sector = ped_disk_max_partition_start_sector (disk);
+
+ if (!ped_device_open(dev))
+ error (EXIT_FAILURE, errno, "failed to open %s\n", dev_name);
+ int max_n_partitions;
+ bool ok = ped_disk_get_max_supported_partition_count (disk,
+ &max_n_partitions);
+
+ printf ("max len: %llu\n", (unsigned long long) max_length);
+ printf ("max start sector: %llu\n", (unsigned long long) max_start_sector);
+ printf ("max number of partitions: %d\n",
+ ok ? max_n_partitions : -1);
+
+ ped_disk_destroy (disk);
+ ped_device_destroy (dev);
+ return EXIT_SUCCESS;
+}
diff --git a/tests/t-lib-helpers.sh b/tests/t-lib-helpers.sh
new file mode 100644
index 0000000..a1d3c30
--- /dev/null
+++ b/tests/t-lib-helpers.sh
@@ -0,0 +1,430 @@
+# Functions sourced via testing framework.
+
+getlimits_()
+{
+ eval $(getlimits)
+ test "$INT_MAX" ||
+ error_ "Error running getlimits"
+}
+
+require_acl_()
+{
+ getfacl --version < /dev/null > /dev/null 2>&1 \
+ && setfacl --version < /dev/null > /dev/null 2>&1 \
+ || skip_ "This test requires getfacl and setfacl."
+
+ id -u bin > /dev/null 2>&1 \
+ || skip_ "This test requires a local user named bin."
+}
+
+require_hfs_()
+{
+ mkfs.hfs 2>&1 | grep '^usage:' \
+ || skip_ "mkfs.hfs: command not found"
+}
+
+require_fat_()
+{
+ mkfs.vfat 2>&1 | grep '^Usage:' \
+ || skip_ "mkfs.vfat: command not found"
+}
+
+# Skip this test if we're not in SELinux "enforcing" mode.
+require_selinux_enforcing_()
+{
+ test "$(getenforce)" = Enforcing \
+ || skip_ "This test is useful only with SELinux in Enforcing mode."
+}
+
+
+require_openat_support_()
+{
+ # Skip this test if your system has neither the openat-style functions
+ # nor /proc/self/fd support with which to emulate them.
+ test -z "$CONFIG_HEADER" \
+ && skip_ 'internal error: CONFIG_HEADER not defined'
+
+ _skip=yes
+ grep '^#define HAVE_OPENAT' "$CONFIG_HEADER" > /dev/null && _skip=no
+ test -d /proc/self/fd && _skip=no
+ if test $_skip = yes; then
+ skip_ 'this system lacks openat support'
+ fi
+}
+
+require_ulimit_()
+{
+ ulimit_works=yes
+ # Expect to be able to exec a program in 10MB of virtual memory,
+ # but not in 20KB. I chose "date". It must not be a shell built-in
+ # function, so you can't use echo, printf, true, etc.
+ # Of course, in coreutils, I could use $top_builddir/src/true,
+ # but this should be able to work for other projects, too.
+ ( ulimit -v 10000; date ) > /dev/null 2>&1 || ulimit_works=no
+ ( ulimit -v 20; date ) > /dev/null 2>&1 && ulimit_works=no
+
+ test $ulimit_works = no \
+ && skip_ "this shell lacks ulimit support"
+}
+
+require_readable_root_()
+{
+ test -r / || skip_ "/ is not readable"
+}
+
+# Skip the current test if strace is not available or doesn't work
+# with the named syscall. Usage: require_strace_ unlink
+require_strace_()
+{
+ test $# = 1 || framework_failure
+
+ strace -V < /dev/null > /dev/null 2>&1 ||
+ skip_ 'no strace program'
+
+ strace -qe "$1" echo > /dev/null 2>&1 ||
+ skip_ 'strace -qe "'"$1"'" does not work'
+}
+
+# Require a controlling input `terminal'.
+require_controlling_input_terminal_()
+{
+ tty -s || have_input_tty=no
+ test -t 0 || have_input_tty=no
+ if test "$have_input_tty" = no; then
+ skip_ 'requires controlling input terminal
+This test must have a controlling input "terminal", so it may not be
+run via "batch", "at", or "ssh". On some systems, it may not even be
+run in the background.'
+ fi
+}
+
+uid_is_privileged_()
+{
+ # Make sure id -u succeeds.
+ my_uid=$(id -u) \
+ || { echo "$0: cannot run \`id -u'" 1>&2; return 1; }
+
+ # Make sure it gives valid output.
+ case $my_uid in
+ 0) ;;
+ *[!0-9]*)
+ echo "$0: invalid output (\`$my_uid') from \`id -u'" 1>&2
+ return 1 ;;
+ *) return 1 ;;
+ esac
+}
+
+get_process_status_()
+{
+ sed -n '/^State:[ ]*\([[:alpha:]]\).*/s//\1/p' /proc/$1/status
+}
+
+# Convert an ls-style permission string, like drwxr----x and -rw-r-x-wx
+# to the equivalent chmod --mode (-m) argument, (=,u=rwx,g=r,o=x and
+# =,u=rw,g=rx,o=wx). Ignore ACLs.
+rwx_to_mode_()
+{
+ case $# in
+ 1) rwx=$1;;
+ *) echo "$0: wrong number of arguments" 1>&2
+ echo "Usage: $0 ls-style-mode-string" 1>&2
+ return;;
+ esac
+
+ case $rwx in
+ [ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-]) ;;
+ [ld-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxsS-][rwx-][rwx-][rwxtT-][+.]) ;;
+ *) echo "$0: invalid mode string: $rwx" 1>&2; return;;
+ esac
+
+ # Perform these conversions:
+ # S s
+ # s xs
+ # T t
+ # t xt
+ # The `T' and `t' ones are only valid for `other'.
+ s='s/S/@/;s/s/x@/;s/@/s/'
+ t='s/T/@/;s/t/x@/;s/@/t/'
+
+ u=`echo $rwx|sed 's/^.\(...\).*/,u=\1/;s/-//g;s/^,u=$//;'$s`
+ g=`echo $rwx|sed 's/^....\(...\).*/,g=\1/;s/-//g;s/^,g=$//;'$s`
+ o=`echo $rwx|sed 's/^.......\(...\).*/,o=\1/;s/-//g;s/^,o=$//;'$s';'$t`
+ echo "=$u$g$o"
+}
+
+require_selinux_()
+{
+ case `ls -Zd .` in
+ '? .'|'unlabeled .')
+ skip_ "this system (or maybe just" \
+ "the current file system) lacks SELinux support"
+ ;;
+ esac
+}
+
+very_expensive_()
+{
+ if test "$RUN_VERY_EXPENSIVE_TESTS" != yes; then
+ skip_ 'very expensive: disabled by default
+This test is very expensive, so it is disabled by default.
+To run it anyway, rerun make check with the RUN_VERY_EXPENSIVE_TESTS
+environment variable set to yes. E.g.,
+
+ env RUN_VERY_EXPENSIVE_TESTS=yes make check
+'
+ fi
+}
+
+expensive_()
+{
+ if test "$RUN_EXPENSIVE_TESTS" != yes; then
+ skip_ 'expensive: disabled by default
+This test is relatively expensive, so it is disabled by default.
+To run it anyway, rerun make check with the RUN_EXPENSIVE_TESTS
+environment variable set to yes. E.g.,
+
+ env RUN_EXPENSIVE_TESTS=yes make check
+'
+ fi
+}
+
+require_root_()
+{
+ uid_is_privileged_ || skip_ "must be run as root"
+ NON_ROOT_USERNAME=${NON_ROOT_USERNAME=nobody}
+ NON_ROOT_GROUP=${NON_ROOT_GROUP=$(id -g $NON_ROOT_USERNAME)}
+}
+
+skip_if_root_() { uid_is_privileged_ && skip_ "must be run as non-root"; }
+error_() { echo "$0: $@" 1>&2; Exit 1; }
+framework_failure() { error_ 'failure in testing framework'; }
+
+# Set `groups' to a space-separated list of at least two groups
+# of which the user is a member.
+require_membership_in_two_groups_()
+{
+ test $# = 0 || framework_failure
+
+ groups=${COREUTILS_GROUPS-`(id -G || /usr/xpg4/bin/id -G) 2>/dev/null`}
+ case "$groups" in
+ *' '*) ;;
+ *) skip_ 'requires membership in two groups
+this test requires that you be a member of more than one group,
+but running `id -G'\'' either failed or found just one. If you really
+are a member of at least two groups, then rerun this test with
+COREUTILS_GROUPS set in your environment to the space-separated list
+of group names or numbers. E.g.,
+
+ env COREUTILS_GROUPS='users cdrom' make check
+
+'
+ ;;
+ esac
+}
+
+# Is /proc/$PID/status supported?
+require_proc_pid_status_()
+{
+ sleep 2 &
+ local pid=$!
+ sleep .5
+ grep '^State:[ ]*[S]' /proc/$pid/status > /dev/null 2>&1 ||
+ skip_ "/proc/$pid/status: missing or 'different'"
+ kill $pid
+}
+
+# Does the current (working-dir) file system support sparse files?
+require_sparse_support_()
+{
+ test $# = 0 || framework_failure
+ # Test whether we can create a sparse file.
+ # For example, on Darwin6.5 with a file system of type hfs, it's not possible.
+ # NTFS requires 128K before a hole appears in a sparse file.
+ t=sparse.$$
+ dd bs=1 seek=128K of=$t < /dev/null 2> /dev/null
+ set x `du -sk $t`
+ kb_size=$2
+ rm -f $t
+ if test $kb_size -ge 128; then
+ skip_ 'this file system does not support sparse files'
+ fi
+}
+
+mkfifo_or_skip_()
+{
+ test $# = 1 || framework_failure
+ if ! mkfifo "$1"; then
+ # Make an exception of this case -- usually we interpret framework-creation
+ # failure as a test failure. However, in this case, when running on a SunOS
+ # system using a disk NFS mounted from OpenBSD, the above fails like this:
+ # mkfifo: cannot make fifo `fifo-10558': Not owner
+ skip_ 'NOTICE: unable to create test prerequisites'
+ fi
+}
+
+# Disable the current test if the working directory seems to have
+# the setgid bit set.
+skip_if_setgid_()
+{
+ setgid_tmpdir=setgid-$$
+ (umask 77; mkdir $setgid_tmpdir)
+ perms=$(stat --printf %A $setgid_tmpdir)
+ rmdir $setgid_tmpdir
+ case $perms in
+ drwx------);;
+ drwxr-xr-x);; # Windows98 + DJGPP 2.03
+ *) skip_ 'this directory has the setgid bit set';;
+ esac
+}
+
+skip_if_mcstransd_is_running_()
+{
+ test $# = 0 || framework_failure
+
+ # When mcstransd is running, you'll see only the 3-component
+ # version of file-system context strings. Detect that,
+ # and if it's running, skip this test.
+ __ctx=$(stat --printf='%C\n' .) || framework_failure
+ case $__ctx in
+ *:*:*:*) ;; # four components is ok
+ *) # anything else probably means mcstransd is running
+ skip_ "unexpected context '$__ctx'; turn off mcstransd" ;;
+ esac
+}
+
+# Skip the current test if umask doesn't work as usual.
+# This test should be run in the temporary directory that ends
+# up being removed via the trap commands.
+working_umask_or_skip_()
+{
+ umask 022
+ touch file1 file2
+ chmod 644 file2
+ perms=`ls -l file1 file2 | sed 's/ .*//' | uniq`
+ rm -f file1 file2
+
+ case $perms in
+ *'
+ '*) skip_ 'your build directory has unusual umask semantics'
+ esac
+}
+
+emit_superuser_warning()
+{
+ uid=`id -u` || uid=1
+ test "$uid" != 0 &&
+ echo 'WARNING: You are not superuser. Watch out for permissions.' || :
+}
+
+require_mdadm_()
+{
+ mdadm --version || skip_ "find mdadm executable"
+}
+
+# Will look for an md number that is not in use and create a md device with
+# that number. If the system has more than 9 md devices, it will fail.
+mdadm_create_linear_device_()
+{
+ lo_dev=$1
+ mdd=$G_dev_/md0
+ for i in 0 1 2 3 4 5 6 7 8 9 ; do
+ mdd=$G_dev_/md$i
+ mdadm --create --force $mdd --level=linear --raid-devices=1 $lo_dev \
+ > /dev/null 2>&1 \
+ && break
+
+ if [ $i -eq 9 ]; then echo $mdd ; return 1 ; fi
+ done
+
+ echo $mdd
+ return 0
+}
+
+# Often, when parted cannot use the specified size or start/endpoints
+# of a partition, it outputs a warning or error like this:
+#
+# Error: You requested a partition from 512B to 50.7kB (...).
+# The closest location we can manage is 17.4kB to 33.8kB (...).
+#
+# But those numbers depend on sector size, so
+# replace the specific values with place-holders,
+# so tests do not depend on sector size.
+normalize_part_diag_()
+{
+ local file=$1
+ sed 's/ [0-9.k]*B to [0-9.k]*B (sectors .*$/ X to Y./' $file > $file.t \
+ && mv $file.t $file && return 0
+ return 1
+}
+
+require_xfs_()
+{
+ mkfs.xfs -V || skip_ "this test requires XFS support"
+}
+
+require_dvhtool_()
+{
+ dvhtool --help \
+ || skip_ 'dvhtool is required for this test'
+}
+
+# Helper function: wait 2s (via .1s increments) for FILE to appear.
+# Usage: wait_for_dev_to_appear_ /dev/sdg
+# Return 0 upon success, 1 upon failure.
+wait_for_dev_to_appear_()
+{
+ local file=$1
+ local i=0
+ local incr=1
+ while :; do
+ udevadm settle
+ ls "$file" > /dev/null 2>&1 && return 0
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i = 20 && break
+ done
+ return 1
+}
+
+# Like the above, but don't hard-code the max timeout.
+wait_for_dev_to_disappear_()
+{
+ local file=$1
+ local n_sec=$2
+ local i=0
+ local incr=1
+ while :; do
+ udevadm settle
+ ls "$file" > /dev/null 2>&1 || return 0
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i -ge $(expr $n_sec \* 10) && break
+ done
+ return 1
+}
+
+device_mapper_required_()
+{
+ . "$abs_top_srcdir/tests/t-lvm.sh"
+ lvm_init_root_dir_ || fail_ "device mapper setup failed"
+}
+
+# Require a 64bit system
+require_64bit_()
+{
+ case $(uname -m) in
+ aarch64|mips64|ppc64|x86_64)
+ return 0;;
+ *)
+ skip_ "This test requires a 64 bit system"
+ ;;
+ esac
+}
+
+# Check if the specified filesystem is either built into the kernel, or can be loaded
+# as a module
+# Usage: has_filesystem vfat
+# Ruturns 0 if the filesystem is available, otherwise skips the test
+require_filesystem_()
+{
+ grep $1 /proc/filesystems >/dev/null && return 0
+ modprobe --quiet --dry-run $1 || skip_ "this test requires kernel support for $1"
+}
diff --git a/tests/t-local.sh b/tests/t-local.sh
new file mode 100644
index 0000000..2ba7ee1
--- /dev/null
+++ b/tests/t-local.sh
@@ -0,0 +1,196 @@
+# Put test-related bits that are parted-specific here.
+# This file is sourced from the testing framework.
+sector_size_=${PARTED_SECTOR_SIZE:-512}
+
+scsi_debug_lock_dir_="$abs_srcdir/scsi_debug.lock"
+
+require_scsi_debug_module_()
+{
+ require_udevadm_settle_
+ # check for scsi_debug module
+ modprobe -n scsi_debug ||
+ skip_ "you lack the scsi_debug kernel module"
+}
+
+scsi_debug_modprobe_succeeded_=
+
+# Always run this cleanup function.
+cleanup_final_() { scsi_debug_cleanup_; }
+
+scsi_debug_cleanup_()
+{
+ # This function must always release the lock.
+ # If modprobe succeeded, it must be sure to run rmmod.
+ if test -n "$scsi_debug_modprobe_succeeded_"; then
+ # We have to insist. Otherwise, a single rmmod usually fails to remove it,
+ # due either to "Resource temporarily unavailable" or to
+ # "Module scsi_debug is in use".
+ i=0
+ udevadm settle
+ while [ $i -lt 40 ] ; do
+ rmmod scsi_debug \
+ && { test "$VERBOSE" = yes && warn_ $ME_ rmmod scsi_debug...; break; }
+ sleep .2 || sleep 1
+ i=$((i + 1))
+ done
+ udevadm settle
+ test $i = 40 && framework_failure_ rmmod scsi_debug failed.
+ fi
+ rm -fr $scsi_debug_lock_dir_
+}
+
+# Helper function: wait 2s (via .1s increments) for FILE to appear.
+# Usage: wait_for_dev_to_appear_ /dev/sdg
+# Return 0 upon success, 1 upon failure.
+wait_for_dev_to_appear_()
+{
+ local file=$1
+ local i=0
+ local incr=1
+ while :; do
+ udevadm settle
+ ls "$file" > /dev/null 2>&1 && return 0
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i = 20 && break
+ done
+ return 1
+}
+
+# Tests that uses "modprobe scsi_debug ..." must not be run in parallel.
+scsi_debug_acquire_lock_()
+{
+ local retries=20
+ local lock_timeout_stale_seconds=120
+
+ # If it was created more than $lock_timeout_stale_seconds ago, remove it.
+ # FIXME: implement this
+
+ local i=0
+ local incr=1
+ while :; do
+ mkdir "$scsi_debug_lock_dir_" && return 0
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i = $(expr $retries \* 10) && break
+ done
+
+ warn_ "$ME_: failed to acquire lock: $scsi_debug_lock_dir_"
+ return 1
+}
+
+# If there is a scsi_debug device, print the corresponding "sdN" and return 0.
+# Otherwise, return 1.
+new_sdX_()
+{
+ local m; m=$(grep -lw scsi_debug /sys/block/sd*/device/model) || return 1
+
+ # Remove the /sys/block/ prefix, and then the /device/model suffix.
+ m=${m#/sys/block/}
+ m=${m%/device/model}
+ echo "$m"
+ return 0
+}
+
+# Create a device using the scsi_debug module with the options passed to
+# this function as arguments. Upon success, print the name of the new device.
+scsi_debug_setup_()
+{
+ scsi_debug_acquire_lock_
+
+ # It is not trivial to determine the name of the device we're creating.
+ # Record the names of all /sys/block/sd* devices *before* probing:
+ touch stamp
+ modprobe scsi_debug opt_blks=64 "$@" || { rm -f stamp; return 1; }
+ scsi_debug_modprobe_succeeded_=1
+ test "$VERBOSE" = yes \
+ && echo $ME_ modprobe scsi_debug succeeded 1>&2
+
+ # Wait up to 2s (via .1s increments) for the list of devices to change.
+ # Sleeping for a fraction of a second requires GNU sleep, so fall
+ # back on sleeping 2x1s if that fails.
+ # FIXME-portability: using "cmp - ..." probably requires GNU cmp.
+ local incr=1
+ local i=0
+ local new_dev
+ while :; do
+ udevadm settle
+ new_dev=$(new_sdX_) && break
+ sleep .1 2>/dev/null || { sleep 1; incr=10; }
+ i=$(expr $i + $incr); test $i = 20 && break
+ done
+
+ case $new_dev in
+ sd[a-z]) ;;
+ sd[a-z][a-z]) ;;
+ *) warn_ $ME_ unexpected device name: $new_dev; return 1 ;;
+ esac
+ local t=/dev/$new_dev
+ wait_for_dev_to_appear_ $t
+ echo $t
+ return 0
+}
+
+require_512_byte_sector_size_()
+{
+ test $sector_size_ = 512 \
+ || skip_ FS test with sector size != 512
+}
+
+peek_()
+{
+ case $# in 2) ;; *) echo "usage: peek_ FILE 0_BASED_OFFSET" >&2; exit 1;; esac
+ case $2 in *[^0-9]*) echo "peek_: invalid offset: $2" >&2; exit 1 ;; esac
+ dd if="$1" bs=1 skip="$2" count=1
+}
+
+poke_()
+{
+ case $# in 3) ;; *) echo "usage: poke_ FILE 0_BASED_OFFSET BYTE" >&2; exit 1;;
+ esac
+ case $2 in *[^0-9]*) echo "poke_: invalid offset: $2" >&2; exit 1 ;; esac
+ case $3 in ?) ;; *) echo "poke_: invalid byte: '$3'" >&2; exit 1 ;; esac
+ printf %s "$3" | dd of="$1" bs=1 seek="$2" count=1 conv=notrunc
+}
+
+# byte 56 of the partition entry is the first byte of its 72-byte name field
+gpt1_pte_name_offset_()
+{
+ local ss=$1
+ case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+ expr $ss \* 2 + 56
+ return 0
+}
+
+# Change the name of the first partition in the primary GPT table,
+# thus invalidating the PartitionEntryArrayCRC32 checksum.
+gpt_corrupt_primary_table_()
+{
+ case $# in 2) ;; *) echo "$0: expected 2 args, got $#" >&2; return 1;; esac
+ local dev=$1
+ local ss=$2
+ case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+
+ # get the first byte of the name
+ local orig_pte_name_byte
+ orig_pte_name_byte=$(peek_ $dev $(gpt1_pte_name_offset_ $ss)) || return 1
+
+ local new_byte
+ test x"$orig_pte_name_byte" = xA && new_byte=B || new_byte=A
+
+ # Replace with a different byte
+ poke_ $dev $(gpt1_pte_name_offset_ $ss) "$new_byte" || return 1
+
+ printf %s "$orig_pte_name_byte"
+ return 0
+}
+
+gpt_restore_primary_table_()
+{
+ case $# in 3) ;; *) echo "$0: expected 2 args, got $#" >&2; return 1;; esac
+ local dev=$1
+ local ss=$2
+ case $ss in *[^0-9]*) echo "$0: invalid sector size: $ss">&2; return 1;; esac
+ local orig_byte=$3
+ poke_ $dev $(gpt1_pte_name_offset_ $ss) "$orig_byte" || return 1
+}
+
+. "$abs_top_srcdir/tests/t-lvm.sh"
diff --git a/tests/t-lvm.sh b/tests/t-lvm.sh
new file mode 100644
index 0000000..001523b
--- /dev/null
+++ b/tests/t-lvm.sh
@@ -0,0 +1,82 @@
+# Put lvm-related utilities here.
+# This file is sourced from test infrastructure.
+
+# Copyright (C) 2007-2012 Red Hat, Inc. All rights reserved.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+export LVM_SUPPRESS_FD_WARNINGS=1
+
+loop_setup_()
+{
+ file=$1
+ dd if=/dev/null of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
+ || { warn_ "loop_setup_ failed: Unable to create tmp file $file"; return 1; }
+
+ # NOTE: this requires a new enough version of losetup
+ dev=$(losetup --show -f "$file") \
+ || { warn_ "loop_setup_ failed: Unable to create loopback device"; return 1; }
+
+ echo "$dev"
+ return 0;
+}
+
+# set up private /dev and /etc
+lvm_init_root_dir_()
+{
+ test -z "$test_dir_" \
+ && skip_ "Internal error: called lvm_init_root_dir_ before" \
+ "defining \$test_dir_"
+
+ # Define these two globals.
+ G_root_=$test_dir_/root
+ G_dev_=$G_root_/dev
+
+ export LVM_SYSTEM_DIR=$G_root_/etc
+ export DM_DEV_DIR=$G_dev_
+
+ # Only the first caller does anything.
+ mkdir -p $G_root_/etc $G_dev_ $G_dev_/mapper $G_root_/lib
+ for i in 0 1 2 3 4 5 6 7; do
+ mknod $G_root_/dev/loop$i b 7 $i
+ done
+ for i in $abs_top_builddir/dmeventd/mirror/*.so \
+ $abs_top_builddir/dmeventd/snapshot/*.so
+ do
+ # NOTE: This check is necessary because the loop above will give us the
+ # value "$abs_top_builddir/dmeventd/mirror/*.so" if no files ending in
+ # 'so' exist. This is the best way I could quickly determine to skip
+ # over this bogus value.
+ if [ -f $i ]; then
+ echo Setting up symlink from $i to $G_root_/lib
+ ln -s $i $G_root_/lib
+ fi
+ done
+ cat > $G_root_/etc/lvm.conf <<-EOF
+ devices {
+ dir = "$G_dev_"
+ scan = "$G_dev_"
+ filter = [ "a/loop/", "a/mirror/", "a/mapper/", "r/.*/" ]
+ cache_dir = "$G_root_/etc"
+ sysfs_scan = 0
+ }
+ log {
+ verbose = $verboselevel
+ syslog = 0
+ indent = 1
+ }
+ backup {
+ backup = 0
+ archive = 0
+ }
+ global {
+ library_dir = "$G_root_/lib"
+ }
+EOF
+}
diff --git a/tests/t0000-basic.sh b/tests/t0000-basic.sh
new file mode 100755
index 0000000..d81dd0c
--- /dev/null
+++ b/tests/t0000-basic.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Ensure that a simple command using -s succeeds with no prompt
+
+# Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+parted --version || fail_ 'You have not built parted yet.'
+
+# FIXME: is id -u portable enough?
+uid=`id -u` || uid=1
+
+# create a file of size N bytes
+N=1M
+dev=loop-file
+
+# create the test file
+dd if=/dev/null of=$dev bs=1 seek=$N 2> /dev/null || fail=1
+
+# run parted -s FILE mklabel msdos
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# ----------------------------------------------
+# Now, ensure that a simple mklabel command succeeds.
+# Since there's no -s option, there are prompts -- sometimes.
+
+# erase the left-over label
+dd if=/dev/zero of=$dev bs=4K count=1 conv=notrunc 2> /dev/null || fail=1
+
+# First iteration works with no prompting, since there is no preexisting label.
+# run parted mklabel (without -s) on a blank disk
+parted $dev mklabel msdos > out 2>&1 || fail=1
+
+# create expected output file
+emit_superuser_warning > exp || fail=1
+
+# check its "interactive" output
+compare exp out || fail=1
+
+# create interactive input
+printf 'y\n' > in || fail=1
+
+# Now that there's a label, rerunning the same command is interactive.
+# rerun that same command, but now with a preexisting label
+parted ---pretend-input-tty $dev mklabel msdos < in > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,on /.*/$dev,on DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# Create expected output file.
+{ emit_superuser_warning > exp; } || fail=1
+cat <<EOF >> exp || fail=1
+Warning: The existing disk label on DEVICE will be destroyed and all\
+ data on this disk will be lost. Do you want to continue?
+Yes/No? y
+EOF
+
+# check its output -- slightly different here, due to prompts
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0001-tiny.sh b/tests/t0001-tiny.sh
new file mode 100755
index 0000000..6a78de4
--- /dev/null
+++ b/tests/t0001-tiny.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# operate on a very small (1-sector) "disk"
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+dev=loop-file
+
+for opt in '' -s; do
+
+ dd if=/dev/null of=$dev bs=1 seek=$ss || framework_failure
+
+ # create an msdos partition table:
+ # Before parted-2.1, without -s, this would fail with a bogus diagnostic:
+ # Error: Success during read on .../tests/loop-file
+ # Retry/Ignore/Cancel? ^C
+ parted $opt $dev mklabel msdos ---pretend-input-tty </dev/null > out 2>&1 \
+ || fail=1
+ # expect no output
+ sed 's/.*WARNING: You are not superuser.*//;/^$/d' out > k && mv k out \
+ || fail=1
+ # When run as root, there are just curses-related control chars. Remove them.
+ sed 's/^.\{1,12\}$//;/^$/d' out > k && mv k out \
+ || fail=1
+ compare /dev/null out || fail=1
+
+ parted -s $dev p || fail=1
+ rm -f $dev
+
+done
+
+Exit $fail
diff --git a/tests/t0010-script-no-ctrl-chars.sh b/tests/t0010-script-no-ctrl-chars.sh
new file mode 100755
index 0000000..c62e15e
--- /dev/null
+++ b/tests/t0010-script-no-ctrl-chars.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# Ensure that printing with -s outputs no readline control chars
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=5000
+dev=loop-file
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# print partition table in --script mode
+TERM=xterm parted -m -s $dev u s p > out 2>&1 || fail=1
+
+sed "s,.*/$dev:,$dev:," out > k && mv k out || fail=1
+printf "BYT;\n$dev:${n_sectors}s:file:$ss:$ss:msdos::;\n" > exp || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0100-print.sh b/tests/t0100-print.sh
new file mode 100755
index 0000000..a69daa9
--- /dev/null
+++ b/tests/t0100-print.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+# the most basic 'print' test
+# Copyright (C) 2007, 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+ss=$sector_size_
+dev=loop-file
+
+{
+ cat <<EOF
+Model: (file)
+Disk .../$dev: 8s
+Sector size (logical/physical): ${ss}B/${ss}B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+
+EOF
+} > exp || framework_failure
+
+# Using msdos_magic='\x55\xaa' looks nicer, but isn't portable.
+# dash's builtin printf doesn't recognize such \xHH hexadecimal escapes.
+msdos_magic='\125\252'
+
+# The extra 3KB+ zero bytes at the end are to avoid triggering a failure
+# on linux-2.6.8 that's probably related to opening with O_DIRECT.
+# Note that the minimum number of appended zero bytes required to avoid
+# the failure was 3465. Here, we append a little more to make the resulting
+# file have a total size of exactly 8 sectors.
+# setup: create the most basic partition table, manually
+{ dd if=/dev/zero bs=510 count=1; printf "$msdos_magic"
+ dd if=/dev/zero bs=$(expr 8 '*' $ss - 510) count=1; } > $dev || fail=1
+
+# print the empty table
+parted -s $dev unit s print >out 2>&1 || fail=1
+
+# prepare actual and expected output
+sed 's/ $//' out > k && mv k out || fail=1 # Remove trailing blank.
+mv out o2 && sed "s,^Disk .*/$dev:,Disk .../$dev:," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0101-print-empty.sh b/tests/t0101-print-empty.sh
new file mode 100755
index 0000000..bd328e3
--- /dev/null
+++ b/tests/t0101-print-empty.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# test 'parted $dev print' on empty device (without label)
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+ss=$sector_size_
+dev=loop-file
+
+{
+ cat <<EOF
+Error: .../$dev: unrecognised disk label
+Model: (file)
+Disk .../$dev: 8s
+Sector size (logical/physical): ${ss}B/${ss}B
+Partition Table: unknown
+Disk Flags:
+EOF
+} > exp || framework_failure
+
+# create 'empty' device
+dd if=/dev/zero of=$dev bs=$(expr 8 '*' $ss) count=1 >/dev/null 2>&1 || fail=1
+
+# print the empty table; expect nonzero exit status
+parted -s $dev unit s print >out 2>&1 && fail=1
+
+# prepare actual and expected output
+sed 's/ $//' out > k && mv k out || fail=1 # Remove trailing blank.
+mv out o2 && sed "s,^Disk .*/$dev:,Disk .../$dev:,; \
+ s,^Error: .*/$dev:,Error: .../$dev:," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0200-gpt.sh b/tests/t0200-gpt.sh
new file mode 100755
index 0000000..cc0daaa
--- /dev/null
+++ b/tests/t0200-gpt.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Ensure that printing a GPT partition table does not modify it.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+N=2M
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# save a copy of the original primary GPT table
+dd if=$dev of=before count=1 skip=1 || fail=1
+
+# extend the backing file by 1 byte
+printf x >> $dev || fail=1
+
+# use parted simply to print the partition table
+parted -m -s $dev u s p > out 2> err || fail=1
+# don't bother comparing stdout
+# expect no stderr
+compare /dev/null err || fail=1
+
+# extract the primary GPT table again
+dd if=$dev of=after count=1 skip=1 || fail=1
+
+# compare partition tables (they had better be identical)
+compare before after || fail=1
+
+Exit $fail
diff --git a/tests/t0201-gpt.sh b/tests/t0201-gpt.sh
new file mode 100755
index 0000000..1a90d40
--- /dev/null
+++ b/tests/t0201-gpt.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+# avoid failed assertion when creating a GPT on top of an old one for a
+# larger device
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+# create a backing file large enough for a GPT partition table
+dd if=/dev/null of=$dev seek=4001 2> /dev/null || fail=1
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# shrink the backing file
+dd if=/dev/null of=$dev seek=4000 2> /dev/null || fail=1
+
+# create a new GPT table on top of the shrunken backing file
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+Exit $fail
diff --git a/tests/t0202-gpt-pmbr.sh b/tests/t0202-gpt-pmbr.sh
new file mode 100755
index 0000000..1b475bf
--- /dev/null
+++ b/tests/t0202-gpt-pmbr.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Preserve first 446B of the Protected MBR for gpt partitions.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+bootcode_size=446
+
+dd if=/dev/null of=$dev bs=1 seek=1M || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Fill the first $bootcode_size bytes with 0's.
+# This affects only the protective MBR, so doesn't affect validity of gpt table.
+printf %0${bootcode_size}d 0 > in || fail=1
+dd of=$dev bs=1 seek=0 count=$bootcode_size conv=notrunc < in || fail=1
+
+parted -s $dev p || fail=1
+
+# create a GPT partition table on top of the existing one.
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Extract the first $bootcode_size Bytes after GPT creation
+dd if=$dev of=after bs=1c count=$bootcode_size > /dev/null 2>&1 || fail=1
+
+# Compare the before and after
+compare in after || fail=1
+
+Exit $fail
diff --git a/tests/t0203-gpt-create-on-min-sized-device.sh b/tests/t0203-gpt-create-on-min-sized-device.sh
new file mode 100644
index 0000000..82b2a89
--- /dev/null
+++ b/tests/t0203-gpt-create-on-min-sized-device.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+# parted 3.1 and prior would exit with no diagnostic when failing
+# to create a GPT partition table on a device that was too small.
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+ss=$sector_size_
+
+# Create the smallest file that can accommodate a GPT partition table.
+dd if=/dev/null of=$dev bs=$ss seek=68 || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Create a file that is 1 sector smaller, and require failure,
+# *with* a diagnostic.
+rm -f $dev
+dd if=/dev/null of=$dev bs=$ss seek=67 || framework_failure
+
+echo Error: device is too small for GPT > exp || framework_failure
+
+# Try to create a GPT partition table in too little space. This must fail.
+parted -s $dev mklabel gpt > out 2>&1 && fail=1
+# There must be a diagnostic.
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0203-gpt-shortened-device-primary-valid.sh b/tests/t0203-gpt-shortened-device-primary-valid.sh
new file mode 100755
index 0000000..91e52ed
--- /dev/null
+++ b/tests/t0203-gpt-shortened-device-primary-valid.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Demonstrate that placing a valid gpt-labeled image on a shorter device
+# does not invalidate the primary GPT header.
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+dev=dev-file
+dd if=/dev/null of=$dev bs=$ss seek=100 || fail=1
+parted -s -- $dev mklabel gpt || fail=1
+
+# Chop off the last two sectors.
+dd if=/dev/null of=$dev bs=$ss seek=98 || fail=1
+printf 'ignore\nok\n' > in
+parted -m ---pretend-input-tty $dev u s p < in > out 2> err || fail=1
+
+# Remove abs name of $dev_file.
+sed "s, [^ ]*/$dev, $dev," err > k && mv k err || fail=1
+# Compare only the last line, to avoid control chars of interactive mode.
+tail -1 out > k && mv k out || fail=1
+sed "s,.*/$dev:,$dev:," out > k && mv k out || fail=1
+
+emit_superuser_warning > err.exp || fail=1
+cat <<EOF >> err.exp || fail=1
+Error: end of file while reading $dev
+Error: The backup GPT table is corrupt, but the primary appears OK, so that will be used.
+EOF
+
+echo "$dev:98s:file:$ss:$ss:gpt::;" > out.exp || fail=1
+
+compare err.exp err || fail=1
+compare out.exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0203-gpt-tiny-device-abort.sh b/tests/t0203-gpt-tiny-device-abort.sh
new file mode 100644
index 0000000..e1aae12
--- /dev/null
+++ b/tests/t0203-gpt-tiny-device-abort.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# parted before 3.1 could abort while reading a pathologically small device
+# with a valid primary GPT header but no room for the backup header.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+N=2M
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# truncate it to 34 sectors.
+for i in 33 34 35 67 68 69 101 102 103; do
+ dd if=$dev of=bad count=$i
+
+ # Print the partition table. Before, this would evoke a failed assertion.
+ printf 'i\no\n' > in
+ parted ---pretend-input-tty bad u s p < in > out 2> err || { fail=1; cat err; }
+ # don't bother comparing stdout
+done
+
+Exit $fail
diff --git a/tests/t0205-gpt-list-clobbers-pmbr.sh b/tests/t0205-gpt-list-clobbers-pmbr.sh
new file mode 100644
index 0000000..7bb79f9
--- /dev/null
+++ b/tests/t0205-gpt-list-clobbers-pmbr.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+# Ensure that printing a GPT partition table does not modify the pMBR.
+# Due to a bug in parted-2.1, "parted /dev/... print" would do just that.
+# Not a problem for most, but if you have a hybrid, e.g., gptsync'd
+# GPT/MBR table, merely listing the table with Parted-2.1 would clobber
+# the MBR part.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=400
+dev=dev-file
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted -s $dev mklabel gpt || fail=1
+parted -s $dev mkpart p1 101s 150s || fail=1
+parted -s $dev mkpart p2 151s 200s || fail=1
+parted -s $dev mkpart p3 201s 250s || fail=1
+
+parted -m -s $dev u s p || fail=1
+
+# Write non-NUL bytes all over the MBR, so we're likely to see any change.
+# However, be careful to leave the type of the first partition, 0xEE,
+# as well as the final two magic bytes.
+printf '%0450d\xee%059d\x55\xaa' 0 0 | dd of=$dev count=1 conv=notrunc || fail=1
+
+dd if=$dev of=before count=1 || fail=1
+
+chmod a-w $dev
+parted -m -s $dev u s p || fail=1
+
+dd if=$dev of=after count=1 || fail=1
+
+cmp before after || fail=1
+
+Exit $fail
diff --git a/tests/t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh b/tests/t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh
new file mode 100755
index 0000000..6611158
--- /dev/null
+++ b/tests/t0206-gpt-print-with-corrupt-primary-clobbers-pmbr.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+# Ensure that printing a GPT partition table does not modify the pMBR.
+# Much like t0205, but with the addition of a corrupt PTE in primary table,
+# "parted $device print" would modify $device.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=400
+dev=dev-file
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted -s $dev mklabel gpt || fail=1
+parted -s $dev mkpart p1 128s 255s || fail=1
+
+parted -m -s $dev u s p || fail=1
+
+# Write non-NUL bytes all over the MBR, so we're likely to see any change.
+# However, be careful to leave the type of the first partition, 0xEE,
+# as well as the final two magic bytes.
+printf '%0450d\xee%059d\x55\xaa' 0 0 | dd of=$dev count=1 conv=notrunc || fail=1
+
+dd if=$dev of=before count=1 || fail=1
+
+orig_byte=$(gpt_corrupt_primary_table_ $dev $ss) || fail=1
+
+parted -m -s $dev u s p || fail=1
+
+dd if=$dev of=after count=1 || fail=1
+
+cmp before after || fail=1
+
+Exit $fail
diff --git a/tests/t0207-IEC-binary-notation.sh b/tests/t0207-IEC-binary-notation.sh
new file mode 100644
index 0000000..9d18ae8
--- /dev/null
+++ b/tests/t0207-IEC-binary-notation.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+# Show how parted treats a starting or ending sector number w/IEC units.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=3000
+dev=dev-file
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel gpt mkpart p1 $((64*1024))B $((1024*1024-$ss))B \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > exp || fail=1
+
+# Test using MiB
+rm $dev
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel gpt mkpart p1 64KiB 1MiB \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > out || fail=1
+
+compare exp out || fail=1
+
+# Test using lower case kib and mib
+rm $dev
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel gpt mkpart p1 64kib 1mib \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > out || fail=1
+
+compare exp out || fail=1
+
+# Test using KiB
+rm $dev
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel gpt mkpart p1 64KiB 1024KiB \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > out || fail=1
+
+compare exp out || fail=1
+
+# Test using kiB
+rm $dev
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel gpt mkpart p1 64kiB 1024kiB \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > out || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0208-mkpart-end-in-IEC.sh b/tests/t0208-mkpart-end-in-IEC.sh
new file mode 100644
index 0000000..198cccb
--- /dev/null
+++ b/tests/t0208-mkpart-end-in-IEC.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Make sure parted mkpart ends the partition one sector before the specified
+# value if end is specified with IEC units.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_512_byte_sector_size_
+n_mbs=8
+dev=dev-file
+
+dd if=/dev/null of=$dev bs=1M seek=$n_mbs || fail=1
+# create 1st partition
+parted --align=none -s $dev mklabel gpt mkpart p1 1MiB 2048KiB > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+#parted -m -s $dev u s p > exp || fail=1
+
+# create 2nd partition - they should not overlap
+# this time specify default unit
+parted --align=none -s $dev unit MiB mkpart p2 2 3 > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# create 3rd partition - expect no overlap
+# specify default unit, but explicitly override it
+parted --align=none -s $dev unit TB mkpart p3 3MiB 4MiB > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# Specify default unit of MiB, yet use explicit ending sector number.
+parted --align=none -s $dev unit MiB mkpart p4 4MiB 10239s > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# check boundaries of the partitions
+parted -m -s $dev u s p > out || fail=1
+
+# prepare expected output
+cat <<EOF > exp || framework_failure
+1:2048s:4095s:2048s::p1:;
+2:4096s:6143s:2048s::p2:;
+3:6144s:8191s:2048s::p3:;
+4:8192s:10239s:2048s::p4:;
+EOF
+
+# compare expected and actual outputs
+sed -e "1,2d" out > k; mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0209-gpt-pmbr_boot.sh b/tests/t0209-gpt-pmbr_boot.sh
new file mode 100755
index 0000000..ceecf33
--- /dev/null
+++ b/tests/t0209-gpt-pmbr_boot.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Ensure that pmbr_boot flag can be set
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+N=2M
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Set the pmbr_boot flag on the PMBR
+parted -s $dev disk_set pmbr_boot on
+
+# Check to see if the flag is set
+parted -m -s $dev u s p > out 2> err || fail=1
+grep "$dev:.*:gpt::pmbr_boot;" out || { cat out; fail=1; }
+
+Exit $fail
diff --git a/tests/t0210-gpt-resized-partition-entry-array.sh b/tests/t0210-gpt-resized-partition-entry-array.sh
new file mode 100755
index 0000000..4d85f77
--- /dev/null
+++ b/tests/t0210-gpt-resized-partition-entry-array.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# exercise GPT handling of n_partition_array_entries != 128
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+require_perl_digest_crc_
+
+# gpt-header-munge won't work on 32bit systems
+require_64bit_
+
+ss=$sector_size_
+
+N=2M
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+gpt-header-munge --sector-size=$ss --n=9 $dev || fail=1
+
+parted -m -s $dev u s p > out 2>&1 || fail=1
+sed 's/.*:gpt:/:gpt:/' out > k && mv k out
+printf 'BYT;\n:gpt::;\n' > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0211-gpt-rewrite-header.sh b/tests/t0211-gpt-rewrite-header.sh
new file mode 100644
index 0000000..d0f286f
--- /dev/null
+++ b/tests/t0211-gpt-rewrite-header.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+# exercise parted's gpt-rewriting code
+# When it encounters a GPT device with backup not at the end,
+# parted (without -s) offers to correct that by moving the backup
+# header to the end of the device. Before parted-3.1, when it attempted
+# to do that, starting with a 9-PTE array, it would render the result invalid.
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+require_perl_digest_crc_
+
+# gpt-header-munge won't work on 32bit systems
+require_64bit_
+
+ss=$sector_size_
+
+ns=100 # Initial number of sectors.
+ns2=$((ns+64)) # Some larger number of sectors.
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=$ss seek=$ns || framework_failure
+
+# create a GPT partition table with 9 partitions in a standard 128-entry table.
+parted -a min -s $dev mklabel gpt \
+ mkpart p1 34s 34s \
+ mkpart p2 35s 35s \
+ mkpart p3 36s 36s \
+ mkpart p4 37s 37s \
+ mkpart p5 38s 38s \
+ mkpart p6 39s 39s \
+ mkpart p7 40s 40s \
+ mkpart p8 41s 41s \
+ mkpart p9 42s 42s \
+ > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Adjust the GPT table to have only 9 PTEs.
+gpt-header-munge --sector-size=$ss --n=9 $dev || fail=1
+
+# Extend size of the device.
+dd if=/dev/null of=$dev bs=$ss seek=$ns2 || fail=1
+
+printf '%s\n' f f > in || fail=1
+
+# This would always succeed, even before.
+parted ---pretend-input-tty $dev u s p < in || fail=1
+
+printf '%s\n' \
+ 'BYT;' \
+ "...:${ns2}s:file:$ss:$ss:gpt::;" \
+ '1:34s:34s:1s::p1:;' \
+ '2:35s:35s:1s::p2:;' \
+ '3:36s:36s:1s::p3:;' \
+ '4:37s:37s:1s::p4:;' \
+ '5:38s:38s:1s::p5:;' \
+ '6:39s:39s:1s::p6:;' \
+ '7:40s:40s:1s::p7:;' \
+ '8:41s:41s:1s::p8:;' \
+ '9:42s:42s:1s::p9:;' \
+ > exp || fail=1
+
+# Before parted-3.1, this would fail, reporting that both tables are corrupt.
+parted -m -s $dev u s p > out 2>&1 || fail=1
+sed '2s/^[^:]*:/...:/' out > k && mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0212-gpt-many-partitions.sh b/tests/t0212-gpt-many-partitions.sh
new file mode 100644
index 0000000..2fead57
--- /dev/null
+++ b/tests/t0212-gpt-many-partitions.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# gpt: create many partitions
+# Before parted-3.1, this would provoke an invalid free.
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+
+ss=$sector_size_
+
+ns=300
+n_partitions=128
+dev=dev-file
+start_sector=34
+
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=$ss seek=$ns || framework_failure
+
+cmd=
+i=1
+while :; do
+ s=$((start_sector + i - 1))
+ cmd="$cmd mkpart p$i ${s}s ${s}s"
+ test $i = $n_partitions && break; i=$((i+1))
+done
+parted -m -a min -s $dev mklabel gpt $cmd u s p > out 2>&1 || fail=1
+
+nl='
+'
+exp=$(printf '%s\n' 'BYT;' "...:${ns}s:file:$ss:$ss:gpt::;")"$nl"
+
+i=1
+while :; do
+ s=$((start_sector + i - 1))
+ exp="$exp$i:${s}s:${s}s:1s::p$i:;$nl"
+ test $i = $n_partitions && break; i=$((i+1))
+done
+printf %s "$exp" > exp || fail=1
+
+sed '2s/^[^:]*:/...:/' out > k && mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0213-mkpart-start-negative.sh b/tests/t0213-mkpart-start-negative.sh
new file mode 100755
index 0000000..27f21dd
--- /dev/null
+++ b/tests/t0213-mkpart-start-negative.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+# Make sure parted mkpart ends the partition one sector before the specified
+# value if end is specified with IEC units.
+
+# Copyright (C) 2011-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_512_byte_sector_size_
+n_mbs=8
+dev=dev-file
+
+dd if=/dev/null of=$dev bs=1M seek=$n_mbs || fail=1
+# start negative, end positive
+parted --align=none -s $dev -- mklabel gpt mkpart p1 -7MiB 2MiB > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# start negative, end negative
+parted --align=none -s $dev -- mkpart p2 -6MiB -5MiB > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# check boundaries of the partitions
+parted -m -s $dev u s p > out || fail=1
+
+# prepare expected output
+cat <<EOF > exp || framework_failure
+1:2048s:4095s:2048s::p1:;
+2:4096s:6143s:2048s::p2:;
+EOF
+
+# compare expected and actual outputs
+sed -e "1,2d" out > k; mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0215-gpt-attrs.sh b/tests/t0215-gpt-attrs.sh
new file mode 100644
index 0000000..216a966
--- /dev/null
+++ b/tests/t0215-gpt-attrs.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# Test that GUID specific bits are preserved
+
+# Copyright (C) 2021 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create gpt label and one partitions
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" mkpart "test1" ext4 0% 10% > out 2>&1 || fail=1
+
+# set guid specific bit
+gpt-attrs "$dev" set 0x100000000000000 || fail=1
+
+# create additional partition
+parted --script "$dev" mkpart "test2" ext4 10% 20% > out 2>&1 || fail=1
+
+cat <<EOF > exp || fail=1
+0x100000000000000
+EOF
+
+# check guid specific bit
+gpt-attrs "$dev" show > out || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0220-gpt-msftres.sh b/tests/t0220-gpt-msftres.sh
new file mode 100755
index 0000000..160ae0f
--- /dev/null
+++ b/tests/t0220-gpt-msftres.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+# gpt default "flag" for a partition must not be msftres
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+dev=loop-file
+
+# FIXME: should be able to use "ufs" here, too, but that doesn't work.
+fs_types='
+ext2
+fat16
+fat32
+hfs
+hfs+
+hfsx
+linux-swap
+NTFS
+reiserfs
+'
+
+start=2048
+part_size=2048
+n_types=$(echo "$fs_types"|wc -w)
+
+# Create a "disk" with enough room for one partition per FS type,
+# and the overhead required for a GPT partition table.
+# 32 is the number of 512-byte sectors required to accommodate the
+# minimum size of the secondary GPT header at the end of the disk.
+n_sectors=$(expr $start + $n_types \* $part_size + 1 + 32)
+
+# create a test file large enough for one partition per FS type
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# create a gpt partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+printf "BYT;\n$dev:${n_sectors}s:file:$ss:$ss:gpt::;\n" > exp
+i=1
+for type in $fs_types; do
+ end=$(expr $start + $part_size - 1)
+ case $type in
+ fat*|NTFS) flag=msftdata;;
+ linux-swap) flag=swap;;
+ *) flag=;;
+ esac
+ echo "$i:${start}s:${end}s:${part_size}s::$type:$flag;" >> exp || fail=1
+ parted -s $dev mkpart p-name $type ${start}s ${end}s > err 2>&1 || fail=1
+ compare /dev/null err || fail=1
+ parted -s $dev name $i $type > err 2>&1 || fail=1
+ compare /dev/null err || fail=1
+ start=$(expr $end + 1)
+ i=$(expr $i + 1)
+done
+
+# print partition table
+parted -m -s $dev u s p > out 2>&1 || fail=1
+
+sed "s,.*/$dev:,$dev:," out > k && mv k out && ok=1 || ok=0
+# match against expected output
+test $ok = 1 && { compare exp out || fail=1; }
+
+Exit $fail
diff --git a/tests/t0250-gpt.sh b/tests/t0250-gpt.sh
new file mode 100755
index 0000000..3390ca8
--- /dev/null
+++ b/tests/t0250-gpt.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# very basic GPT table
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+nb=512
+n_sectors=$(expr $nb '*' 512 / $sector_size_)
+
+# create zeroed device
+dd if=/dev/zero bs=512 count=$nb of=$dev || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+
+# ensure there was no output
+compare /dev/null empty || fail=1
+
+# print the empty table
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${n_sectors}s:file:$sector_size_:$sector_size_:gpt::;\n" \
+ > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0251-gpt-unicode.sh b/tests/t0251-gpt-unicode.sh
new file mode 100755
index 0000000..a87cd36
--- /dev/null
+++ b/tests/t0251-gpt-unicode.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Test unicode partition names
+# Copyright (C) 2013-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+
+# create zeroed device
+truncate -s 10m $dev || fail=1
+
+LC_ALL=$(locale -a | grep en_US.utf8)
+if [ -z "$LC_ALL" ]; then
+ LC_ALL=C.UTF-8
+fi
+export LC_ALL="$LC_ALL"
+# create gpt label with named partition
+part_name=$(printf 'foo\341\264\244')
+parted -s $dev mklabel gpt mkpart primary ext2 1MiB 2MiB name 1 $part_name > empty 2>&1 || fail=1
+
+# ensure there was no output
+compare /dev/null empty || fail=1
+
+# check for expected output
+dd if=$dev bs=1 skip=$(($sector_size_+$sector_size_+56)) count=10 2>/dev/null | od -An -tx1 > out || fail=1
+echo ' 66 00 6f 00 6f 00 24 1d 00 00' >> exp
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0280-gpt-corrupt.sh b/tests/t0280-gpt-corrupt.sh
new file mode 100755
index 0000000..376de2f
--- /dev/null
+++ b/tests/t0280-gpt-corrupt.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+# corrupt a GPT table; ensure parted takes notice
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+
+ss=$sector_size_
+n_sectors=5000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+compare /dev/null empty || fail=1
+
+# print the empty table
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${n_sectors}s:file:$sector_size_:$sector_size_:gpt::;\n" \
+ > exp || fail=1
+compare exp out || fail=1
+
+# create a partition
+parted -s $dev mkpart sw linux-swap 2048s 4095s > empty 2>&1 || fail=1
+compare /dev/null empty || fail=1
+
+# We're going to change the name of the first partition,
+# thus invalidating the PartitionEntryArrayCRC32 checksum.
+orig_byte=$(gpt_corrupt_primary_table_ $dev $ss) || fail=1
+
+# printing the table must succeed, but with a scary diagnostic.
+parted -s $dev print > err 2>&1 || fail=1
+grep Error: err > k && mv k err || fail=1
+
+# check for expected diagnostic
+echo 'Error: The primary GPT table is corrupt, but the backup appears OK,' \
+ 'so that will be used.' > exp || fail=1
+compare exp err || fail=1
+
+# ----------------------------------------------------------
+# Now, restore things, and corrupt the MyLBA in the alternate GUID table.
+
+# Restore original byte
+gpt_restore_primary_table_ $dev $ss "$orig_byte" || fail=1
+
+# print the table
+parted -s $dev print > out 2> err || fail=1
+compare /dev/null err || fail=1
+
+# The MyLBA member of the alternate table is in the last sector,
+# $n_sectors, 8-byte field starting at offset 24.
+alt_my_lba_offset=$(expr $n_sectors \* $ss - $ss + 24)
+# get the first byte of MyLBA
+byte=$(peek_ $dev $alt_my_lba_offset) || fail=1
+
+# Perturb it.
+test x"$byte" = xA && new_byte=B || new_byte=A
+
+# Replace good byte with the bad one.
+poke_ $dev $alt_my_lba_offset "$new_byte" || fail=1
+
+# attempting to set partition name must print a diagnostic
+parted -m -s $dev name 1 foo > err 2>&1 || fail=1
+
+# check for expected diagnostic
+echo 'Error: The backup GPT table is corrupt, but the primary appears OK,' \
+ 'so that will be used.' > exp || fail=1
+compare exp err || fail=1
+
+# corruption is fixed; printing the table now elicits no diagnostic
+parted -m -s $dev u s print > out 2>&1 || fail=1
+
+# check for expected output
+printf "BYT;\nfile\n1:2048s:4095s:2048s::foo:swap;\n" > exp || fail=1
+sed "s/.*gpt::;/file/" out > k && mv k out || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0281-gpt-grow.sh b/tests/t0281-gpt-grow.sh
new file mode 100644
index 0000000..03b8486
--- /dev/null
+++ b/tests/t0281-gpt-grow.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+# grow a gpt disk, ensure that parted offers to update the gpt size
+
+# Copyright (C) 2009-2012, 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+dev=loop-file
+
+ss=$sector_size_
+n_sectors=5000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+compare /dev/null empty || fail=1
+
+# print the empty table
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${n_sectors}s:file:$sector_size_:$sector_size_:gpt::;\n" \
+ > exp || fail=1
+compare exp out || fail=1
+
+# grow disk
+n_sectors=5500
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# printing must warn, but not fix in script mode
+parted -s $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+cat <<EOF > exp || fail=1
+Warning: Not all of the space available to DEVICE appears to be used, you can fix the GPT to use all of the space (an extra 500 blocks) or continue with the current setting?
+Model: (file)
+Disk DEVICE: 2816kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+# now we fix
+printf 'f\n' | parted ---pretend-input-tty $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+emit_superuser_warning > exp || fail=1
+cat <<EOF >> exp || fail=1
+Warning: Not all of the space available to DEVICE appears to be used, you can fix the GPT to use all of the space (an extra 500 blocks) or continue with the current setting?
+Fix/Ignore? f
+Model: (file)
+Disk DEVICE: 2816kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+
+# Now should not warn
+
+parted -s $dev print > err 2>&1 || fail=1
+grep Warning: err > k ; mv k err
+compare /dev/null err || fail=1
+
+Exit $fail
diff --git a/tests/t0282-gpt-move-backup.sh b/tests/t0282-gpt-move-backup.sh
new file mode 100644
index 0000000..56bd0d4
--- /dev/null
+++ b/tests/t0282-gpt-move-backup.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+# put backup copy gpt in the wrong place, ensure that
+# parted offers to fix
+
+# Copyright (C) 2009-2012, 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+require_512_byte_sector_size_
+dev=loop-file
+
+ss=$sector_size_
+n_sectors=5000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+compare /dev/null empty || fail=1
+
+# print the empty table
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${n_sectors}s:file:$sector_size_:$sector_size_:gpt::;\n" \
+ > exp || fail=1
+compare exp out || fail=1
+
+# move the backup
+gpt-header-move $dev || fail=1
+
+# printing must warn, but not fix in script mode
+parted -s $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+cat <<EOF > exp || fail=1
+Error: The backup GPT table is not at the end of the disk, as it should be. Fix, by moving the backup to the end (and removing the old backup)?
+Model: (file)
+Disk DEVICE: 2560kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+# now we fix
+printf 'f\n' | parted ---pretend-input-tty $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+emit_superuser_warning > exp || fail=1
+cat <<EOF >> exp || fail=1
+Error: The backup GPT table is not at the end of the disk, as it should be. Fix, by moving the backup to the end (and removing the old backup)?
+Fix/Ignore? f
+Model: (file)
+Disk DEVICE: 2560kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+
+# Now should not warn
+
+parted -s $dev print > err 2>&1 || fail=1
+grep Error: err > k ; mv k err
+compare /dev/null err || fail=1
+
+Exit $fail
diff --git a/tests/t0283-overlap-partitions.sh b/tests/t0283-overlap-partitions.sh
new file mode 100644
index 0000000..dc98203
--- /dev/null
+++ b/tests/t0283-overlap-partitions.sh
@@ -0,0 +1,105 @@
+#!/bin/sh
+# ensure parted can ignore partitions that overlap or are
+# longer than the disk and remove them
+
+# Copyright (C) 2009-2012, 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted $srcdir
+require_512_byte_sector_size_
+dev=loop-file
+
+truncate -s 10m $dev || framework_failure
+parted -s $dev mklabel msdos || framework_failure
+msdos-overlap $dev || framework_failure
+
+# print the empty table
+parted ---pretend-input-tty $dev <<EOF > out 2>&1 || fail=1
+print
+ignore
+rm
+2
+EOF
+
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," -e "s/^GNU Parted .*$/GNU Parted VERSION/" o2 > out
+
+# check for expected output
+emit_superuser_warning > exp || fail=1
+cat <<EOF >> exp || fail=1
+GNU Parted VERSION
+Using DEVICE
+Welcome to GNU Parted! Type 'help' to view a list of commands.
+(parted) print
+Error: Can't have overlapping partitions.
+Ignore/Cancel? ignore
+Model: (file)
+Disk DEVICE: 10.5MB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 5243kB 4194kB primary
+ 2 5242kB 8000kB 2758kB primary
+
+(parted) rm
+Partition number? 2
+(parted)
+EOF
+compare exp out || fail=1
+
+truncate -s 3m $dev || fail=1
+
+# print the table, verify error, ignore it, and remove the partition
+parted ---pretend-input-tty $dev <<EOF > out 2>&1 || fail=1
+print
+ignore
+rm
+1
+EOF
+
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," -e "s/^GNU Parted .*$/GNU Parted VERSION/" o2 > out
+
+# check for expected output
+emit_superuser_warning > exp || fail=1
+cat <<EOF >> exp || fail=1
+GNU Parted VERSION
+Using DEVICE
+Welcome to GNU Parted! Type 'help' to view a list of commands.
+(parted) print
+Error: Can't have a partition outside the disk!
+Ignore/Cancel? ignore
+Model: (file)
+Disk DEVICE: 3146kB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 1049kB 5243kB 4194kB primary
+
+(parted) rm
+Partition number? 1
+(parted)
+EOF
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0290-gpt-name.sh b/tests/t0290-gpt-name.sh
new file mode 100755
index 0000000..26041b6
--- /dev/null
+++ b/tests/t0290-gpt-name.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+# Test setting empty GPT partition name in non-interactive mode
+
+# Copyright (C) 2021 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+
+truncate --size 50MiB "$dev" || fail=1
+
+# create partition with empty name
+parted --script "$dev" mklabel gpt mkpart '""' ext4 1MiB 49MiB > out 2>&1 || fail=1
+parted --script --machine "$dev" unit MiB print > out 2>&1 || fail=1
+grep 'MiB:::;' out || fail=1
+
+# set a non-empty name
+parted --script "$dev" name 1 "test" > out 2>&1 || fail=1
+parted --script --machine "$dev" unit MiB print > out 2>&1 || fail=1
+grep 'MiB::test:;' out || fail=1
+
+# set empty name
+parted --script "$dev" name 1 "''" > out 2>&1 || fail=1
+parted --script --machine "$dev" unit MiB print > out 2>&1 || fail=1
+grep 'MiB:::;' out || fail=1
+
+Exit $fail
diff --git a/tests/t0300-dos-on-gpt.sh b/tests/t0300-dos-on-gpt.sh
new file mode 100755
index 0000000..001af23
--- /dev/null
+++ b/tests/t0300-dos-on-gpt.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# avoid segfault creating a dos PT on top of a gpt one
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+dev=loop-file
+# create a backing file large enough for a GPT partition table
+dd if=/dev/null of=$dev bs=$ss seek=80 2> /dev/null || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# create a DOS partition table on top of it
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+Exit $fail
diff --git a/tests/t0301-overwrite-gpt-pmbr.sh b/tests/t0301-overwrite-gpt-pmbr.sh
new file mode 100755
index 0000000..90b318d
--- /dev/null
+++ b/tests/t0301-overwrite-gpt-pmbr.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Test creating a msdos partition over a GPT partition with
+# fdisk which doesn't remove the GPT partitions, only the PMBR
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+dev=loop-file
+
+# Create a GPT partition table.
+dd if=/dev/null of=$dev bs=$ss seek=80 2> /dev/null || framework_failure
+parted -s $dev mklabel gpt > out 2>&1 || framework_failure_
+compare /dev/null out || framework_failure_
+
+# Create an MSDOS partition table in another file.
+dd if=/dev/null of=m bs=$ss seek=80 2> /dev/null || framework_failure
+parted -s m mklabel msdos > out 2>&1 || framework_failure_
+compare /dev/null out || framework_failure_
+
+# Transplant the MSDOS MBR into the GPT-formatted image.
+dd if=m of=$dev bs=$ss count=1 conv=notrunc || framework_failure_
+
+# Now, try to create a GPT partition table in $dev.
+# Before, parted would prompt, asking about the apparent inconsistency.
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+Exit $fail
diff --git a/tests/t0350-mac-PT-increases-sector-size.sh b/tests/t0350-mac-PT-increases-sector-size.sh
new file mode 100644
index 0000000..b065728
--- /dev/null
+++ b/tests/t0350-mac-PT-increases-sector-size.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# With parted-3.1, a MAC partition table that specified a sector size (B)
+# larger than what the kernel told us (SS) would cause parted to read B
+# bytes into a smaller, SS-byte buffer, clobbering heap storage.
+
+# Copyright (C) 2012-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+ss=$sector_size_
+
+dd if=/dev/null of=$dev bs=$ss seek=2000 || framework_failure
+parted -s $dev mklabel mac > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Poke a big-endian 1024 into the 2-byte block_size slot.
+perl -e 'print pack("S>", 1024)'|dd of=$dev bs=1 seek=2 count=2 conv=notrunc \
+ || fail=1
+
+printf 'ignore\ncancel\n' > in || framework_failure
+
+cat <<EOF > exp
+BYT;
+FILE:2000s:file:1024:512:unknown::;
+EOF
+
+parted -m ---pretend-input-tty $dev u s p < in > err 2>&1 || fail=1
+sed 's, * ,,g;s!^/[^:]*:!FILE:!' err \
+ | grep -Evi '^(ignore|fix|error|warning)' \
+ > k && mv k err || fail=1
+compare exp err || fail=1
+
+Exit $fail
diff --git a/tests/t0400-loop-clobber-infloop.sh b/tests/t0400-loop-clobber-infloop.sh
new file mode 100644
index 0000000..6f6dbc6
--- /dev/null
+++ b/tests/t0400-loop-clobber-infloop.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+# do not infloop in loop_clobber
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+( mkswap -V ) >/dev/null 2>&1 || skip_ "no mkswap program"
+
+N=1M
+dev=loop-file
+
+cleanup_() {
+ rm -f $dev;
+}
+
+dd if=/dev/zero of=$dev bs=$N count=1 || fail=1
+
+mkswap $dev || fail=1
+
+# There was a small interval (no release) during which this would infloop.
+# create a dos partition table
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+
+compare /dev/null out || fail=1
+
+Exit $fail
diff --git a/tests/t0500-dup-clobber.sh b/tests/t0500-dup-clobber.sh
new file mode 100644
index 0000000..cd9081c
--- /dev/null
+++ b/tests/t0500-dup-clobber.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+# Drive the dup-clobber program.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+PATH="..:$PATH"
+export PATH
+
+dup-clobber || fail=1
+
+Exit $fail
diff --git a/tests/t0501-duplicate.sh b/tests/t0501-duplicate.sh
new file mode 100644
index 0000000..1beb345
--- /dev/null
+++ b/tests/t0501-duplicate.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Drive the dup-clobber program.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted .
+
+for t in msdos gpt bsd sun atari mac pc98; do
+ case $t in
+ atari) [ $ss -ne 512 ] && continue
+ ;;
+ *) duplicate $t || fail=1
+ ;;
+ esac
+done
+
+Exit $fail
diff --git a/tests/t0800-json-gpt.sh b/tests/t0800-json-gpt.sh
new file mode 100755
index 0000000..f6a3fb9
--- /dev/null
+++ b/tests/t0800-json-gpt.sh
@@ -0,0 +1,99 @@
+#!/bin/sh
+
+# Test JSON output with GPT label
+
+# Copyright (C) 2021 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create gpt label and some partitions
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" disk_set pmbr_boot on > out 2>&1 || fail=1
+parted --script "$dev" mkpart "test1" ext4 10% 20% > out 2>&1 || fail=1
+parted --script "$dev" mkpart "test2" xfs 20% 60% > out 2>&1 || fail=1
+parted --script "$dev" set 2 raid on > out 2>&1 || fail=1
+
+# print with json format, replace non-deterministic uuids
+parted --script --json "$dev" unit s print free | sed -E 's/"uuid": "[0-9a-f-]{36}"/"uuid": "<uuid>"/' > out 2>&1 || fail=1
+
+cat <<EOF > exp || fail=1
+{
+ "disk": {
+ "path": "loop-file",
+ "size": "102400s",
+ "model": "",
+ "transport": "file",
+ "logical-sector-size": 512,
+ "physical-sector-size": 512,
+ "label": "gpt",
+ "uuid": "<uuid>",
+ "max-partitions": 128,
+ "flags": [
+ "pmbr_boot"
+ ],
+ "partitions": [
+ {
+ "number": 0,
+ "start": "34s",
+ "end": "10239s",
+ "size": "10206s",
+ "type": "free"
+ },{
+ "number": 1,
+ "start": "10240s",
+ "end": "20479s",
+ "size": "10240s",
+ "type": "primary",
+ "type-uuid": "0fc63daf-8483-4772-8e79-3d69d8477de4",
+ "uuid": "<uuid>",
+ "name": "test1"
+ },{
+ "number": 2,
+ "start": "20480s",
+ "end": "61439s",
+ "size": "40960s",
+ "type": "primary",
+ "type-uuid": "a19d880f-05fc-4d3b-a006-743f0f84911e",
+ "uuid": "<uuid>",
+ "name": "test2",
+ "flags": [
+ "raid"
+ ]
+ },{
+ "number": 0,
+ "start": "61440s",
+ "end": "102366s",
+ "size": "40927s",
+ "type": "free"
+ }
+ ]
+ }
+}
+EOF
+
+# remove full path of device from actual output
+mv out o2 && sed "s,\"/.*/$dev\",\"$dev\"," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0801-json-msdos.sh b/tests/t0801-json-msdos.sh
new file mode 100755
index 0000000..c5446d8
--- /dev/null
+++ b/tests/t0801-json-msdos.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+# Test JSON output with MS-DOS label
+
+# Copyright (C) 2021 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create msdos label and some partitions
+parted --script "$dev" mklabel msdos > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary ext4 10% 20% > out 2>&1 || fail=1
+parted --script "$dev" mkpart extended 20% 60% > out 2>&1 || fail=1
+parted --script "$dev" mkpart logical ext4 20% 40% > out 2>&1 || fail=1
+parted --script "$dev" set 5 lvm on > out 2>&1 || fail=1
+
+# print with json format
+parted --script --json "$dev" unit MiB print > out 2>&1 || fail=1
+
+cat <<EOF > exp || fail=1
+{
+ "disk": {
+ "path": "loop-file",
+ "size": "50.0MiB",
+ "model": "",
+ "transport": "file",
+ "logical-sector-size": 512,
+ "physical-sector-size": 512,
+ "label": "msdos",
+ "max-partitions": 4,
+ "partitions": [
+ {
+ "number": 1,
+ "start": "5.00MiB",
+ "end": "10.0MiB",
+ "size": "5.00MiB",
+ "type": "primary",
+ "type-id": "0x83"
+ },{
+ "number": 2,
+ "start": "10.0MiB",
+ "end": "30.0MiB",
+ "size": "20.0MiB",
+ "type": "extended",
+ "type-id": "0x0f",
+ "flags": [
+ "lba"
+ ]
+ },{
+ "number": 5,
+ "start": "10.0MiB",
+ "end": "20.0MiB",
+ "size": "10.0MiB",
+ "type": "logical",
+ "type-id": "0x8e",
+ "flags": [
+ "lvm"
+ ]
+ }
+ ]
+ }
+}
+EOF
+
+# remove full path of device from actual output
+mv out o2 && sed "s,\"/.*/$dev\",\"$dev\"," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0900-type-gpt.sh b/tests/t0900-type-gpt.sh
new file mode 100755
index 0000000..03febba
--- /dev/null
+++ b/tests/t0900-type-gpt.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+# Test type command with GPT label
+
+# Copyright (C) 2022 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create gpt label and one partition
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" mkpart "''" "linux-swap" 10% 20% > out 2>&1 || fail=1
+
+# set type-uuid
+parted --script "$dev" type 1 "deadfd6d-a4ab-43c4-84e5-0933c84b4f4f" || fail=1
+
+# print with json format, replace non-deterministic uuids
+parted --script --json "$dev" unit s print | sed -E 's/"uuid": "[0-9a-f-]{36}"/"uuid": "<uuid>"/' > out 2>&1 || fail=1
+
+cat <<EOF > exp || fail=1
+{
+ "disk": {
+ "path": "loop-file",
+ "size": "102400s",
+ "model": "",
+ "transport": "file",
+ "logical-sector-size": 512,
+ "physical-sector-size": 512,
+ "label": "gpt",
+ "uuid": "<uuid>",
+ "max-partitions": 128,
+ "partitions": [
+ {
+ "number": 1,
+ "start": "10240s",
+ "end": "20479s",
+ "size": "10240s",
+ "type": "primary",
+ "type-uuid": "deadfd6d-a4ab-43c4-84e5-0933c84b4f4f",
+ "uuid": "<uuid>"
+ }
+ ]
+ }
+}
+EOF
+
+# remove full path of device from actual output
+mv out o2 && sed "s,\"/.*/$dev\",\"$dev\"," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0901-type-gpt-invalid.sh b/tests/t0901-type-gpt-invalid.sh
new file mode 100755
index 0000000..681df3a
--- /dev/null
+++ b/tests/t0901-type-gpt-invalid.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Test type command with GPT label
+
+# Copyright (C) 2022 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create gpt label and one partition
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" mkpart "''" "linux-swap" 10% 20% > out 2>&1 || fail=1
+
+# set type-uuid
+parted --script "$dev" type 1 "invalidd-a4ab-43c4-84e5-0933c84b4f4f" && fail=1
+
+Exit $fail
diff --git a/tests/t0910-type-dos.sh b/tests/t0910-type-dos.sh
new file mode 100755
index 0000000..d7cc37f
--- /dev/null
+++ b/tests/t0910-type-dos.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# Test type command with MS-DOS label
+
+# Copyright (C) 2022 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create msdos label and one partition
+parted --script "$dev" mklabel msdos > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary "linux-swap" 10% 20% > out 2>&1 || fail=1
+
+# set type-id
+parted --script "$dev" type 1 "0x83" || fail=1
+
+# print with json format
+parted --script --json "$dev" unit s print > out 2>&1 || fail=1
+
+cat <<EOF > exp || fail=1
+{
+ "disk": {
+ "path": "loop-file",
+ "size": "102400s",
+ "model": "",
+ "transport": "file",
+ "logical-sector-size": 512,
+ "physical-sector-size": 512,
+ "label": "msdos",
+ "max-partitions": 4,
+ "partitions": [
+ {
+ "number": 1,
+ "start": "10240s",
+ "end": "20479s",
+ "size": "10240s",
+ "type": "primary",
+ "type-id": "0x83"
+ }
+ ]
+ }
+}
+EOF
+
+# remove full path of device from actual output
+mv out o2 && sed "s,\"/.*/$dev\",\"$dev\"," o2 > out || fail=1
+
+# check for expected output
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t0911-type-dos-invalid.sh b/tests/t0911-type-dos-invalid.sh
new file mode 100755
index 0000000..f1036d1
--- /dev/null
+++ b/tests/t0911-type-dos-invalid.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Test type command with MS-DOS label
+
+# Copyright (C) 2022 SUSE LLC
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+
+# create device
+truncate --size 50MiB "$dev" || fail=1
+
+# create msdos label and one partition
+parted --script "$dev" mklabel msdos > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary "linux-swap" 10% 20% > out 2>&1 || fail=1
+
+# set type-id
+parted --script "$dev" type 1 "0x101" && fail=1
+
+Exit $fail
diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh
new file mode 100755
index 0000000..e1a8bb9
--- /dev/null
+++ b/tests/t1100-busy-label.sh
@@ -0,0 +1,80 @@
+#!/bin/sh
+# partitioning (parted -s DEV mklabel) a busy disk must fail.
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_root_
+require_scsi_debug_module_
+require_fat_
+require_filesystem_ vfat
+
+ss=$sector_size_
+
+scsi_debug_setup_ sector_size=$ss dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+dev=$(cat dev-name)
+
+parted -s "$dev" mklabel msdos mkpart primary fat32 1 4 > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+wait_for_dev_to_appear_ ${dev}1 || fail=1
+mkfs.vfat ${dev}1 || fail=1
+
+mount_point="`pwd`/mnt"
+
+# Be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
+
+# create mount point dir. and mount the just-created partition on it
+mkdir $mount_point || fail=1
+mount "${dev}1" $mount_point || fail=1
+
+# now that a partition is mounted, mklabel attempt must fail
+parted -s "$dev" mklabel msdos > out 2>&1; test $? = 1 || fail=1
+
+# create expected output file
+echo "Error: Partition(s) on $dev are being used." > exp
+compare exp out || fail=1
+
+# Adding a partition must succeed, even though another
+# on this same device is mounted (active).
+parted -s "$dev" mkpart primary fat32 5 10 > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+parted -s "$dev" u s print
+
+# ==================================================
+# Repeat the test in interactive mode.
+# create input file
+echo c > in
+
+# as above, this mklabel attempt must fail
+parted ---pretend-input-tty "$dev" mklabel msdos < in > out 2>&1
+test $? = 1 || fail=1
+
+cat <<EOF > exp || fail=1
+Warning: Partition(s) on $dev are being used.
+Ignore/Cancel? c
+EOF
+
+# Transform the actual output, removing ^M ...^M.
+# normalize the actual output
+mv out o2 && sed -e 's, * ,,g;s, $,,;s/^.*Warning/Warning/' \
+ -e 's,^.*/lt-parted: ,parted: ,' o2 > out
+
+# check for expected failure diagnostic
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t1101-busy-partition.sh b/tests/t1101-busy-partition.sh
new file mode 100755
index 0000000..cb66b4a
--- /dev/null
+++ b/tests/t1101-busy-partition.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+# test for Debian bug #582818 (http://bugs.debian.org/582818); forbid
+# the removal of a mounted partition.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+test "$VERBOSE" = yes && parted --version
+
+require_root_
+require_scsi_debug_module_
+require_fat_
+require_filesystem_ vfat
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+dev=$(cat dev-name)
+
+cat <<EOF > exp-error || framework_failure
+Warning: Partition ${dev}2 is being used. Are you sure you want to continue?
+EOF
+
+parted -s "$dev" mklabel msdos > out 2>&1 || fail=1
+
+# expect no output
+compare /dev/null out || fail=1
+
+parted -s "$dev" mkpart primary fat32 1 4 > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+parted -s "$dev" mkpart primary fat32 4 10 > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# wait for new partition device to appear
+wait_for_dev_to_appear_ ${dev}2 || fail_ ${dev}2 did not appear
+
+mkfs.vfat -F 32 ${dev}2 || skip_ mkfs.vfat failed
+
+# be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { umount "${dev}2" > /dev/null 2>&1; }
+
+mount_point=$(pwd)/mnt
+
+mkdir $mount_point || fail=1
+mount "${dev}2" "$mount_point" || fail=1
+
+# Removal of unmounted partition must succeed.
+parted -s "$dev" rm 1 > out 2>&1 || fail=1
+
+# Removal of mounted partition must fail.
+parted -s "$dev" rm 2 > out 2>&1 && fail=1
+
+# expect error
+compare exp-error out || fail=1
+
+Exit $fail
diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh
new file mode 100644
index 0000000..1ad4ccd
--- /dev/null
+++ b/tests/t1102-loop-label.sh
@@ -0,0 +1,88 @@
+#!/bin/sh
+# make sure that loop labels work correctly
+# create an actual partition
+
+# Copyright (C) 2013-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+path_prepend_ ../partprobe
+require_root_
+require_scsi_debug_module_
+ss=$sector_size_
+
+scsi_debug_setup_ sector_size=$ss dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+dev=$(cat dev-name)
+
+mke2fs -F $dev
+parted -s "$dev" print > out 2>&1 || fail=1
+cat <<EOF > exp
+Model: Linux scsi_debug (scsi)
+Disk DEVICE: 10.5MB
+Sector size (logical/physical): ${ss}B/${ss}B
+Partition Table: loop
+Disk Flags:
+
+Number Start End Size File system Flags
+ 1 0.00B 10.5MB 10.5MB ext2
+
+EOF
+mv out o2 && sed -e "s,$dev,DEVICE,;s/ *$//" o2 > out
+
+compare exp out || fail=1
+parted -s $dev rm 1 || fail=1
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
+partprobe $dev || fail=1
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
+
+mount_point="`pwd`/mnt"
+
+# Be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { umount "$mount_point" > /dev/null 2>&1; }
+
+# create mount point dir. and mount the just-created partition on it
+mkdir $mount_point || fail=1
+mount -t ext2 "${dev}" $mount_point || fail=1
+
+# now that a partition is mounted, mklabel attempt must fail
+parted -s "$dev" mklabel msdos > out 2>&1; test $? = 1 || fail=1
+
+# create expected output file
+echo "Error: Partition(s) on $dev are being used." > exp
+compare exp out || fail=1
+
+# make sure partition busy check works ( mklabel checks whole disk )
+parted -s "$dev" rm 1 > out 2>&1; test $? = 1 || fail=1
+# create expected output file
+echo "Warning: Partition ${dev} is being used. Are you sure you want to continue?" > exp
+compare exp out || fail=1
+
+umount "$mount_point"
+
+# make sure partprobe cleans up stale partition devices
+parted -s $dev mklabel msdos mkpart primary ext2 0% 100% || fail=1
+wait_for_dev_to_appear_ ${dev}1 || fail=1
+
+mke2fs -F $dev
+partprobe $dev || fail=1
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
+
+# make sure new loop label removes old partitions > 1
+parted -s $dev mklabel msdos mkpart primary ext2 0% 50% mkpart primary ext2 50% 100% || fail=1
+parted -s $dev mklabel loop || fail=1
+wait_for_dev_to_disappear_ ${dev}2 2 || fail=1
+
+Exit $fail
diff --git a/tests/t1104-remove-and-add-partition.sh b/tests/t1104-remove-and-add-partition.sh
new file mode 100644
index 0000000..657b180
--- /dev/null
+++ b/tests/t1104-remove-and-add-partition.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+# make sure that removing a higher numbered partition and adding a lower
+# one using that space at the same time works
+
+# Copyright (C) 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+path_prepend_ ../partprobe
+require_root_
+ss=$sector_size_
+
+d1= f1=
+cleanup_fn_()
+{
+ test -n "$d1" && losetup -d "$d1"
+ rm -f "$f1"
+}
+
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
+ || skip_ "is this partition mounted with 'nodev'?"
+
+require_partitionable_loop_device_ $d1
+
+# create one big partition
+parted -s $d1 mklabel msdos mkpart primary ext2 1m 10m || fail=1
+
+# save this table
+dd if=$d1 of=saved count=1 || fail=1
+
+# create two small partitions
+parted -s $d1 mklabel msdos mkpart primary ext2 1m 5m mkpart primary ext2 5m 10m || fail=1
+
+# restore first table and make sure partprobe works
+dd if=saved of=$d1 || fail=1
+partprobe $d1 || fail=1
+
+Exit $fail
diff --git a/tests/t1700-probe-fs.sh b/tests/t1700-probe-fs.sh
new file mode 100755
index 0000000..7557f92
--- /dev/null
+++ b/tests/t1700-probe-fs.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+# Probe Ext2, Ext3 and Ext4 file systems
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev=loop-file
+ss=$sector_size_
+n_sectors=$((512*1024))
+
+for type in ext2 ext3 ext4 btrfs xfs nilfs2 ntfs vfat hfsplus udf f2fs; do
+
+ ( mkfs.$type 2>&1 | grep -i '^usage' ) > /dev/null \
+ || { warn_ "$ME: no $type support"; continue; }
+
+ fsname=$type
+ force=
+ case $type in
+ ext*) force=-F;;
+ xfs) force=-f;;
+ nilfs2) force=-f;;
+ ntfs) force=-F;;
+ vfat) fsname=fat16;;
+ hfsplus) fsname=hfs+;;
+ esac
+
+ # create an $type file system, creation failures are not parted bugs,
+ # skip the filesystem instead of failing the test.
+ if [ "$type" = "xfs" ]; then
+ # XFS requires at least 300M which is > 1024 sectors with 8192b sector size
+ mkfs.xfs -ssize=$ss -dfile,name=$dev,size=300m || { warn_ "$ME: mkfs.$type failed, skipping"; continue; }
+ else
+ dd if=/dev/null of=$dev bs=$ss seek=$n_sectors >/dev/null || { warn_ "$ME: dd failed, skipping $type"; continue; }
+ mkfs.$type $force $dev || { warn_ "$ME: mkfs.$type failed skipping"; continue; }
+ fi
+
+ # probe the $type file system
+ parted -m -s $dev u s print >out 2>&1 || fail=1
+ grep '^1:.*:'$fsname'::;$' out || { cat out; fail=1; }
+ rm $dev
+done
+
+# Some features should indicate ext4 by themselves.
+for feature in uninit_bg flex_bg; do
+ # create an ext3 file system
+ dd if=/dev/null of=$dev bs=1024 seek=8192 >/dev/null || skip_ "dd failed"
+ mkfs.ext3 -F $dev >/dev/null || skip_ "mkfs.ext3 failed"
+
+ # set the feature
+ tune2fs -O $feature $dev || skip_ "tune2fs failed"
+
+ # probe the file system, which should now be ext4
+ parted -m -s $dev u s print >out 2>&1 || fail=1
+ grep '^1:.*:ext4::;$' out || fail=1
+ rm $dev
+done
+
+Exit $fail
diff --git a/tests/t1701-rescue-fs.sh b/tests/t1701-rescue-fs.sh
new file mode 100644
index 0000000..90ec684
--- /dev/null
+++ b/tests/t1701-rescue-fs.sh
@@ -0,0 +1,53 @@
+#!/bin/sh
+# rescue ext4 file system
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+require_root_
+require_scsi_debug_module_
+
+# create memory-backed device
+scsi_debug_setup_ sector_size=$sector_size_ dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+( mkfs.ext4 2>&1 | grep -i '^usage' ) > /dev/null \
+ || { warn_ "$ME: no ext4 support"; Exit $fail; }
+
+parted -s $scsi_dev mklabel msdos mkpart primary ext2 1m 100%
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
+mkfs.ext4 ${scsi_dev}1 || { warn_ $ME: mkfs.ext4 failed; fail=1; Exit $fail; }
+
+# remove the partition
+parted -s $scsi_dev rm 1 || fail=1
+
+# rescue the partition
+echo yes | parted ---pretend-input-tty $scsi_dev rescue 1m 100% > out 2>&1
+cat > exp <<EOF
+Information: A ext4 primary partition was found at 1049kB -> 10.5MB. Do you want to add it to the partition table?
+Yes/No/Cancel? yes
+Information: You may need to update /etc/fstab.
+EOF
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+echo '' >> exp
+compare exp out || fail=1
+Exit $fail
diff --git a/tests/t2200-dos-label-recog.sh b/tests/t2200-dos-label-recog.sh
new file mode 100755
index 0000000..92b8a5e
--- /dev/null
+++ b/tests/t2200-dos-label-recog.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# improved MSDOS partition-table recognition
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+######################################################################
+# With vestiges of a preceding FAT file system boot sector in the MBR,
+# parted 1.8.8.1.29 and earlier would fail to recognize a DOS
+# partition table.
+######################################################################
+ss=$sector_size_
+N=8192
+dev=loop-file
+
+# create a file to simulate the underlying device
+dd if=/dev/null of=$dev bs=$ss seek=$N 2> /dev/null || fail=1
+
+# label the test disk
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # expect no output
+
+# create two partitions
+parted -s $dev mkpart primary 2048s 4095s \
+ mkpart primary 4096s 8191s > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # expect no output
+
+# write "FAT" where it would cause trouble
+printf FAT | dd bs=1c seek=82 count=3 of=$dev conv=notrunc || fail=1
+
+# print the partition table
+parted -m -s $dev unit s p > out || fail=1
+tail -2 out > k && mv k out || fail=1
+printf "1:2048s:4095s:2048s:::;\n2:4096s:8191s:4096s:::;\n" > exp || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t2201-pc98-label-recog.sh b/tests/t2201-pc98-label-recog.sh
new file mode 100755
index 0000000..be44952
--- /dev/null
+++ b/tests/t2201-pc98-label-recog.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+# Recognize PC98 labeled disks
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_512_byte_sector_size_
+
+ss=$sector_size_
+N=8192
+dev=loop-file
+
+# create a file to simulate the underlying device
+dd if=/dev/null of=$dev bs=$ss seek=$N 2> /dev/null || fail=1
+
+# label the test disk
+parted -s $dev mklabel pc98 > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # expect no output
+
+parted -s $dev p | grep "^Partition Table: pc98" || fail=1
+
+for s in "Linux 98" "GRUB/98 "; do
+ printf "$s" | dd bs=1c seek=4 of=$dev conv=notrunc || fail=1
+ parted -s $dev p | grep "^Partition Table: pc98" || fail=1
+done
+
+Exit $fail
diff --git a/tests/t2300-dos-label-extended-bootcode.sh b/tests/t2300-dos-label-extended-bootcode.sh
new file mode 100755
index 0000000..e3dfaf7
--- /dev/null
+++ b/tests/t2300-dos-label-extended-bootcode.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# Ensure parted preserves bootcode in extended partition.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_512_byte_sector_size_
+
+dev=loop-file
+bootcode_size=446
+
+# Create the test file
+dd if=/dev/zero of=$dev bs=1M count=4 || fail=1
+
+# Create msdos label
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # Expect no output
+
+# Create extended partition
+parted -s $dev mkpart extended 2048s 8191s > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # Expect no output
+
+# Create logical partition
+parted -s $dev mkpart logical 4096s 8191s > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # Expect no output
+
+# Install fake bootcode
+printf %0${bootcode_size}d 0 > in || fail=1
+dd if=in of=$dev bs=1c seek=1M count=$bootcode_size \
+ conv=notrunc > /dev/null 2>&1 || fail=1
+
+# Save fake bootcode for later comparison
+dd if=$dev of=before bs=1 skip=1M count=$bootcode_size || fail=1
+
+# Do something to the label
+parted -s $dev rm 5 > out 2>&1 || fail=1
+compare /dev/null out || fail=1 # Expect no output
+
+# Extract the bootcode for comparison
+dd if=$dev of=after bs=1 skip=1M count=$bootcode_size || fail=1
+
+# Expect bootcode has not changed
+compare before after || fail=1
+
+Exit $fail
diff --git a/tests/t2310-dos-extended-2-sector-min-offset.sh b/tests/t2310-dos-extended-2-sector-min-offset.sh
new file mode 100644
index 0000000..b86dadc
--- /dev/null
+++ b/tests/t2310-dos-extended-2-sector-min-offset.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+# Ensure that parted allows a single sector between the beginning
+# of an extended partition and the first logical partition.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+# create memory-backed device
+ss=$sector_size_
+scsi_debug_setup_ sector_size=$ss dev_size_mb=1 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+p1=${scsi_dev}1
+p5=${scsi_dev}5
+
+cat <<EOF > exp || framework_failure
+BYT;
+$scsi_dev:$((2048*512/$ss))s:scsi:$ss:$ss:msdos:Linux scsi_debug:;
+1:64s:128s:65s:::lba;
+5:65s:128s:64s:::;
+EOF
+
+# Create a DOS label with an extended partition starting at sector 64.
+parted -s $scsi_dev mklabel msdos || fail=1
+parted --align=min -s $scsi_dev mkpart extended 64s 128s> out 2>&1 || fail=1
+parted -m -s $scsi_dev u s print
+compare /dev/null out || fail=1
+
+# Trying to create a partition that starts just
+# one sector after the start of the extended partition.
+parted --align=min -s $scsi_dev mkpart logical 65s 128s > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+parted -m -s $scsi_dev u s print > out 2>&1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t2320-dos-extended-noclobber.sh b/tests/t2320-dos-extended-noclobber.sh
new file mode 100644
index 0000000..ac84cd5
--- /dev/null
+++ b/tests/t2320-dos-extended-noclobber.sh
@@ -0,0 +1,49 @@
+#!/bin/sh
+# Ensure that the extended partition reports the correct length
+# after adding another partition.
+
+# Copyright (C) 2015, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+# create memory-backed device
+ss=$sector_size_
+scsi_debug_setup_ sector_size=$ss dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# Create a DOS label with an extended partition and a primary partition
+parted -s $scsi_dev mklabel msdos || fail=1
+parted -s $scsi_dev mkpart extended 1 5 > out 2>&1 || fail=1
+parted -s $scsi_dev mkpart primary 5 10 > out 2>&1 || fail=1
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
+
+# Make sure the size of the extended partition is correct.
+# 2 sectors for 512b and 1 sector for larger. /sys/.../size is in
+# 512b blocks so convert accordingly.
+dev=${scsi_dev#/dev/}
+ext_len=$(cat /sys/block/$dev/${dev}1/size)
+if [ $ss -eq 512 ]; then
+ expected_len=2
+else
+ expected_len=$((ss / 512))
+fi
+[ $ext_len -eq $expected_len ] || fail=1
+
+Exit $fail
diff --git a/tests/t2400-dos-hfs-partition-type.sh b/tests/t2400-dos-hfs-partition-type.sh
new file mode 100644
index 0000000..6b0a9a4
--- /dev/null
+++ b/tests/t2400-dos-hfs-partition-type.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+# Ensure that an HFS partition in a dos table gets the right ID
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+ss=$sector_size_
+n_sectors=8000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || framework_failure
+
+# create a MS-DOS partition table
+parted -s $dev mklabel msdos \
+ mkpart pri hfs 2048s 4095s \
+ mkpart pri hfs+ 4096s 6143s > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Extract the "type" byte of the first partition.
+od -An -j450 -tx1 -N1 $dev > out || fail=1
+od -An -j466 -tx1 -N1 $dev >> out || fail=1
+printf ' af\n af\n' > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t2410-dos-udf-partition-type.sh b/tests/t2410-dos-udf-partition-type.sh
new file mode 100644
index 0000000..fa10d72
--- /dev/null
+++ b/tests/t2410-dos-udf-partition-type.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+# Ensure that an UDF partition in a dos table gets the right ID
+
+# Copyright (C) 2018-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+ss=$sector_size_
+n_sectors=8000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || framework_failure
+
+# create a GPT partition table
+parted -s $dev mklabel msdos \
+ mkpart pri udf 2048s 4095s > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Extract the "type" byte of the first partition.
+od -An -j450 -tx1 -N1 $dev > out || fail=1
+printf ' 07\n' > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t2500-probe-corrupt-hfs.sh b/tests/t2500-probe-corrupt-hfs.sh
new file mode 100755
index 0000000..5d64d90
--- /dev/null
+++ b/tests/t2500-probe-corrupt-hfs.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+# Do not misbehave when probing a corrupt HFS partition.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+N=3M
+dev=loop-file
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+parted -s "$dev" mklabel gpt mkpart p1 1MiB 2MiB > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+parted -s "$dev" u s p || fail=1
+
+# Poke an HFS+ signature into place
+printf '\x48\x2b' | dd of=$dev seek=$((2048+2)) conv=notrunc || fail=1
+
+# Or, if starting from a valid HFS/HFS+ file system, poke these:
+# offset 18 total_blocks=0(16b)
+# offset 20 vh->block_size=0(32b)
+
+parted -s "$dev" u s p || fail=1
+
+Exit $fail
diff --git a/tests/t3000-resize-fs.sh b/tests/t3000-resize-fs.sh
new file mode 100755
index 0000000..5939eeb
--- /dev/null
+++ b/tests/t3000-resize-fs.sh
@@ -0,0 +1,156 @@
+#!/bin/sh
+# exercise the resize library; FAT and HFS+ only
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted .
+require_root_
+require_scsi_debug_module_
+require_512_byte_sector_size_
+
+
+FSTYPES=""
+
+# Is mkfs.hfsplus available?
+mkfs.hfsplus 2>&1 | grep '^usage:' && FSTYPES="hfs+"
+
+# Is mkfs.vfat available?
+mkfs.vfat 2>&1 | grep '^Usage:' && FSTYPES="$FSTYPES fat32 fat16"
+
+[ -n "$FSTYPES" ] || skip_ "Neither mkfs.hfsplus nor mkfs.vfat installed"
+
+
+ss=$sector_size_
+
+start=63s
+default_end=546147s
+ new_end=530144s
+
+# create memory-backed device. Must be > 256MB+8MB
+scsi_debug_setup_ dev_size_mb=267 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+dev=$(cat dev-name)
+
+fail=0
+
+parted -s $dev mklabel gpt > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# ensure that the disk is large enough
+dev_n_sectors=$(parted -s $dev u s p|sed -n '2s/.* \([0-9]*\)s$/\1/p')
+device_sectors_required=$(echo $default_end | sed 's/s$//')
+# Ensure that $dev is large enough for this test
+test $device_sectors_required -le $dev_n_sectors || fail=1
+
+# create mount point dir
+mount_point="`pwd`/mnt"
+mkdir "$mount_point" || fail=1
+
+# be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
+
+for fs_type in $FSTYPES; do
+ echo "fs_type=$fs_type"
+
+ # create an empty $fs_type partition, cylinder aligned, size > 256 MB
+ parted -a min -s $dev mkpart p1 $start $default_end > out 2>&1 || fail=1
+ compare /dev/null out || fail=1
+
+ # print partition table
+ parted -m -s $dev u s p > out 2>&1 || fail=1
+
+ # wait for new partition device to appear
+ wait_for_dev_to_appear_ ${dev}1
+
+ case $fs_type in
+ fat16) mkfs_cmd='mkfs.vfat -F 16'; fsck='fsck.vfat -v';;
+ fat32) mkfs_cmd='mkfs.vfat -F 32'; fsck='fsck.vfat -v';;
+ hfs*) mkfs_cmd='mkfs.hfsplus'; fsck=fsck.hfsplus;;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+
+ # create the file system
+ $mkfs_cmd ${dev}1 || fail=1
+
+ # create 500 deep directory tree with longest name 4000 characters
+ # to catch core dump in libparted/fs/r/fat/count.c flag_traverse_dir()
+ # overflowing 512 byte file_name local buffer.
+ mount "${dev}1" "$mount_point" || fail=1
+ cat /dev/null > exp
+ ( cd "$mount_point"; for d in `seq 500`; do mkdir TESTDIR; cd TESTDIR; done ) > out
+ compare exp out || fail=1 # Ensure no errors creating directory tree
+ umount "${dev}1" || fail=1
+
+ # NOTE: shrinking is the only type of resizing that works.
+ # resize that file system to be one cylinder (8MiB) smaller
+ fs-resize ${dev}1 0 $new_end > out 2>&1 || fail=1
+
+ # check for expected output
+ case $fs_type in
+ fat16) cat << EOF > exp || framework_failure
+Information: Would you like to use FAT32? If you leave your file system as FAT16, then you will have no problems. If you convert to FAT32, and MS Windows is installed on this partition, then you must re-install the MS Windows boot loader. If you want to do this, you should consult the Parted manual (or your distribution's manual). Also, converting to FAT32 will make the file system unreadable by MS DOS, MS Windows 95a, and MS Windows NT.
+EOF
+ ;;
+ fat32) cat /dev/null > exp || framework_failure;; # expect no output
+ hfs*) cat /dev/null > exp || framework_failure;; # expect no output
+ esac
+ compare exp out || fail=1
+
+ # This is known to segfault with fsck.hfs from
+ # Fedora 16's hfsplus-tools-332.14-12.fc15.x86_64.
+ # You can build a working version from
+ # git://cavan.codon.org.uk/hfsplus-tools.git
+
+ # Skip the fsck.hfs test unless it understands the -v option.
+ skip=0
+ case $fs_type in
+ hfs*) $fsck -v || { warn_ skipping $fsck test; skip=1; } ;; esac
+
+ if test $skip = 0; then
+ $fsck ${dev}1 > out || fail=1
+ cat out
+ # Oops. Currently, fsck.hfs reports this:
+ # Executing fsck_hfs (version 540.1-Linux).
+ # ** Checking non-journaled HFS Plus Volume.
+ # The volume name is untitled
+ # ** Checking extents overflow file.
+ # ** Checking catalog file.
+ # ** Checking multi-linked files.
+ # ** Checking catalog hierarchy.
+ # ** Checking volume bitmap.
+ # Volume bitmap needs minor repair for orphaned blocks
+ # ** Checking volume information.
+ # Invalid volume free block count
+ # (It should be 67189 instead of 65197)
+ # Volume header needs minor repair
+ # (2, 0)
+ # FIXME: This means the HFS resizing code is wrong.
+
+ # FIXME: parse "out" for FS size and verify that it's the new, smaller size
+ fi
+
+ # Remove the partition explicitly, so that mklabel doesn't evoke a warning.
+ parted -s $dev rm 1 || fail=1
+
+ # Create a clean partition table for the next iteration.
+ parted -s $dev mklabel gpt > out 2>&1 || fail=1
+ # expect no output
+ compare /dev/null out || fail=1
+
+done
+
+Exit $fail
diff --git a/tests/t3200-resize-partition.sh b/tests/t3200-resize-partition.sh
new file mode 100755
index 0000000..846fbc3
--- /dev/null
+++ b/tests/t3200-resize-partition.sh
@@ -0,0 +1,127 @@
+#!/bin/sh
+# exercise the resize sub-command
+# based on t3000-resize-fs.sh test
+
+# Copyright (C) 2009-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+ss=$sector_size_
+
+default_start=1024s
+default_end=2048s
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=5 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+dev=$(cat dev-name)
+
+# TODO test simple shrink
+# TODO test expand past end of the disk
+# TODO test expand past begin of next partition
+# TODO test shrink before start
+# TODO test everything with GPT
+# TODO more tests with extended/logical partitions
+
+parted -s $dev mklabel msdos > out 2> err || fail=1
+# expect no output
+compare /dev/null out || fail=1
+compare /dev/null err || fail=1
+
+# ensure that the disk is large enough
+dev_n_sectors=$(parted -s $dev u s p|sed -n '2s/.* \([0-9]*\)s$/\1/p')
+device_sectors_required=$(echo $default_end | sed 's/s$//')
+# Ensure that $dev is large enough for this test
+test $device_sectors_required -le $dev_n_sectors || fail=1
+
+# create an empty partition
+parted -a minimal -s $dev mkpart primary $default_start $default_end > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# print partition table
+parted -m -s $dev u s p > out 2>&1 || fail=1
+
+# FIXME: check expected output
+
+# wait for new partition device to appear
+wait_for_dev_to_appear_ ${dev}1 || { warn_ "${dev}1 did not appear" fail=1; }
+sleep 1
+
+# Running it without end should not core-dump or prompt
+parted -s $dev resizepart 1 > out 2> err || fail=1
+
+# extend the filesystem to end on sector 2048
+new_end=2048s
+parted -s $dev resizepart 1 $new_end > out 2> err || fail=1
+# expect no output
+compare /dev/null out || fail=1
+compare /dev/null err || fail=1
+
+# print partition table
+parted -m -s $dev u s p > out 2>&1 || fail=1
+
+sed -n 3p out > k && mv k out || fail=1
+printf "1:$default_start:$new_end:1025s:::$ms;\n" > exp || fail=1
+compare exp out || fail=1
+
+## Make sure resizing a busy partition works when user answers 'yes'
+# Format the partition and mount it for the busy check
+mkfs.ext4 "${dev}1" || skip_ mkfs.ext4 failed
+
+# be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
+
+mount_point=$(pwd)/mnt
+
+mkdir $mount_point || fail=1
+mount "${dev}1" "$mount_point" || fail=1
+
+# extend the filesystem to end on sector 4096
+new_end=4096s
+echo yes | parted ---pretend-input-tty $dev resizepart 1 $new_end > out 2>&1
+cat > exp <<EOF
+Warning: Partition ${dev}1 is being used. Are you sure you want to continue?
+Yes/No? yes
+Information: You may need to update /etc/fstab.
+
+EOF
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s, * ,,g;s, $,," o2 > out
+compare exp out || fail=1
+
+# print partition table
+parted -m -s $dev u s p > out 2>&1 || fail=1
+
+sed -n 3p out > k && mv k out || fail=1
+printf "1:$default_start:$new_end:3073s:ext2::$ms;\n" > exp || fail=1
+compare exp out || fail=1
+
+umount "${dev}1" || fail=1
+
+# Remove the partition explicitly, so that mklabel doesn't evoke a warning.
+parted -s $dev rm 1 || fail=1
+
+# Create a clean partition table for the next iteration.
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+Exit $fail
diff --git a/tests/t3200-type-change.sh b/tests/t3200-type-change.sh
new file mode 100755
index 0000000..a57ad70
--- /dev/null
+++ b/tests/t3200-type-change.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+# Ensure parted doesn't change the type of a partition to match its FS.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# Create an empty partition of "type fat32", and then create an actual
+# ext2 partition in it. Then "unset" the already unset LVM flag on that
+# partition and ensure that parted doesn't "helpfully" change the partition
+# type to match the newly-detected FS type.
+
+parted -s $scsi_dev mklabel msdos mkpart primary fat32 1MiB 100% || fail=1
+
+parted -s $scsi_dev u s p
+
+p1=${scsi_dev}1
+wait_for_dev_to_appear_ $p1 || fail=1
+mkfs.ext2 $p1 || fail=1
+
+# print as hex, the type of the first partition
+msdos_p1_type() { od -An --skip=450 -N1 -tx1 "$1"; }
+
+# Initially, it is 0x0c (FAT32).
+type=$(msdos_p1_type $scsi_dev) || fail=1
+type=${type# } # remove leading space
+case $type in
+ 0c) ;;
+ *) fail_ "expected initial type of 0c (FAT32)";;
+esac
+
+parted -s $scsi_dev u s p
+parted -s $scsi_dev set 1 lvm off || fail=1
+
+# Before parted-2.1, the above would mistakenly change it to 0x83,
+# to match the file system now residing in that partition.
+type=$(msdos_p1_type $scsi_dev) || fail=1
+type=${type# } # remove leading space
+case $type in
+ 0c) ;;
+ *) fail_ "parted changed the type of partition 1 from 0c to $type";;
+esac
+
+# Ensure that setting the "lvm" flag still works.
+parted -s $scsi_dev set 1 lvm on || fail=1
+parted -s $scsi_dev u s p > out || fail=1
+grep lvm out || { fail=1; cat out; }
+
+Exit $fail
diff --git a/tests/t3210-gpt-type-change.sh b/tests/t3210-gpt-type-change.sh
new file mode 100755
index 0000000..46d6cc2
--- /dev/null
+++ b/tests/t3210-gpt-type-change.sh
@@ -0,0 +1,107 @@
+#!/bin/sh
+# Ensure parted changes GUID back to match its FS.
+
+# Copyright (C) 2021-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+# What filesystem tools are present?
+FSTYPES=""
+
+# Is mkfs.hfsplus available?
+mkfs.hfsplus 2>&1 | grep '^usage:' && FSTYPES="hfs+"
+
+# Is mkfs.vfat available?
+mkfs.vfat 2>&1 | grep '^Usage:' && FSTYPES="$FSTYPES fat32"
+
+# Is mkswap available?
+mkswap -V 2>&1 | grep '^mkswap' && FSTYPES="$FSTYPES linux-swap"
+
+[ -n "$FSTYPES" ] || skip_ "No supported filesystem tools (vfat, hfs+, swap) installed"
+
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=25 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# Create a formatted partition.
+# Set a different partition type on it, eg. lvm, then unset it.
+# The partition flag should return to the detected filesystem type.
+
+for fs_type in $FSTYPES; do
+ echo "fs_type=$fs_type"
+
+
+ parted -s $scsi_dev mklabel gpt mkpart first $fs_type 1MB 25MB > out 2>&1 || fail=1
+ # expect no output
+ compare /dev/null out || fail=1
+
+ p1=${scsi_dev}1
+ wait_for_dev_to_appear_ $p1 || fail=1
+
+ case $fs_type in
+ fat32) mkfs.vfat $p1 || fail=1 ;;
+ hfs*) mkfs.hfsplus $p1 || fail=1;;
+ linux-swap) mkswap $p1 || fail=1;;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+
+ # Confirm the filesystem and flags are as expected
+ parted -s $scsi_dev u s p > out || fail=1
+ case $fs_type in
+ fat32) grep 'fat16.*msftdata$' out || { fail=1; cat out; } ;;
+ hfs*) grep 'hfs+.*first$' out || { fail=1; cat out; } ;;
+ linux-swap) grep 'linux-swap.*swap$' out || { fail=1; cat out; } ;;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+
+ # Set the lvm GUID on the partition
+ parted -s $scsi_dev set 1 lvm on > out 2>&1 || fail=1
+ # expect no output
+ compare /dev/null out || fail=1
+
+ # Confirm filesystem probe is the same, but flags are now lvm
+ parted -s $scsi_dev u s p > out || fail=1
+ case $fs_type in
+ fat32) grep 'fat16.*lvm$' out || { fail=1; cat out; } ;;
+ hfs*) grep 'hfs+.*lvm$' out || { fail=1; cat out; } ;;
+ linux-swap) grep 'linux-swap.*lvm$' out || { fail=1; cat out; } ;;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+
+ # Unset the lvm GUID on both partitions
+ parted -s $scsi_dev set 1 lvm off > out 2>&1 || fail=1
+ # expect no output
+ compare /dev/null out || fail=1
+
+ # Confirm the filesystem and flags are as expected
+ parted -s $scsi_dev u s p > out || fail=1
+ case $fs_type in
+ fat32) grep 'fat16.*msftdata$' out || { fail=1; cat out; } ;;
+ hfs*) grep 'hfs+.*first$' out || { fail=1; cat out; } ;;
+ linux-swap) grep 'linux-swap.*swap$' out || { fail=1; cat out; } ;;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+done
+
+Exit $fail
diff --git a/tests/t3300-palo-prep.sh b/tests/t3300-palo-prep.sh
new file mode 100755
index 0000000..fc9e8f6
--- /dev/null
+++ b/tests/t3300-palo-prep.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Ensure that palo and prep types work properly.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+cat > exp <<EOF || framework_failure
+1:2048s:4095s:2048s:ext2::palo;
+1:2048s:4095s:2048s:ext2::prep;
+1:2048s:4095s:2048s:ext2::palo;
+EOF
+
+dev=dev-file
+
+n_sectors=5000
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+parted -m -s $dev mklabel msdos \
+ mkpart pri ext2 $((1*2048))s $((2*2048-1))s \
+ set 1 palo on u s print \
+ set 1 prep on u s print \
+ set 1 palo on u s print \
+ > out 2> err || fail=1
+
+grep -E '^1:2048s:4095s:2048s:ext2::p...;$' out > k; mv k out
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t3310-flags.sh b/tests/t3310-flags.sh
new file mode 100644
index 0000000..8614c32
--- /dev/null
+++ b/tests/t3310-flags.sh
@@ -0,0 +1,134 @@
+#!/bin/sh
+# Exercise partition flags.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted .
+ss=$sector_size_
+dev=dev-file
+
+extract_flags()
+{
+ perl -nle '/^[^:]*:4096s:6143s:2048s::[^:]*:(.+);$/ and print $1' "$@"
+}
+
+for table_type in aix amiga atari bsd dvh gpt mac msdos pc98 sun loop; do
+ ptn_num=1
+
+ case $table_type in
+ aix) # Support for writing AIX disk labels and adding partitions
+ # is not yet implemented.
+ continue
+ ;;
+ amiga) primary_or_name='PTNNAME'
+ ;;
+ atari) primary_or_name='primary'
+ # atari only supports 512b sectors
+ [ $ss -ne 512 ] && continue
+ ;;
+ bsd) primary_or_name=''
+ ;;
+ dvh) primary_or_name='primary'
+ ;;
+ gpt) primary_or_name='PTNNAME'
+ ;;
+ mac) primary_or_name='PTNNAME'
+ # MAC table has the partition map partition as the first
+ # partition so the created test partition will be number 2.
+ ptn_num=2
+ ;;
+ msdos) primary_or_name='primary'
+ ;;
+ pc98) primary_or_name='PTNNAME'
+ # pc98 only supports 512b sectors
+ [ $ss -ne 512 ] && continue
+ ;;
+ sun) primary_or_name=''
+ ;;
+ loop) # LOOP table doesn't support creation of a partition nor any
+ # flags.
+ continue
+ ;;
+ esac
+
+ n_sectors=8192
+ dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+ parted -s $dev mklabel $table_type \
+ mkpart $primary_or_name ext2 $((4*1024))s $((6*1024-1))s \
+ > out 2> err || fail=1
+ compare /dev/null out || fail=1
+
+ # Query libparted for the available flags for this test partition.
+ flags=`print-flags $dev $ptn_num` \
+ || { warn_ "$ME_: $table_type: failed to get available flags";
+ fail=1; continue; }
+ case $table_type in
+ dvh) # FIXME: Exclude boot flag as that can only be set on logical
+ # partitions in the DVH disk label and this test only uses
+ # primary partitions.
+ flags=`echo "$flags" | egrep -v 'boot'`
+ ;;
+ mac) # FIXME: Setting root or swap flags also sets the partition
+ # name to root or swap respectively. Probably intended
+ # behaviour. Setting lvm or raid flags after root or swap
+ # takes two goes to clear the lvm or raid flag. Is this
+ # intended? For now don't test lvm or raid flags as this
+ # test only tries to clear the flags once which causes this
+ # test to fail.
+ flags=`echo "$flags" | egrep -v 'lvm|raid'`
+ ;;
+ msdos) # FIXME: Exclude flags that can only be set in combination
+ # with certain other flags.
+ flags=`echo "$flags" | egrep -v 'hidden|lba'`
+ ;;
+ esac
+
+ for mode in on_only on_and_off ; do
+ for flag in $flags; do
+ # Turn on each flag, one at a time.
+ parted -m -s $dev set $ptn_num $flag on unit s print > raw 2> err || fail=1
+ extract_flags raw > out
+ grep -w "$flag" out \
+ || { warn_ "$ME_: $table_type: flag '$flag' not turned on: $(cat out)"; fail=1; }
+ compare /dev/null err || fail=1
+
+ if test $mode = on_and_off; then
+ # Turn it off
+ parted -m -s $dev set $ptn_num $flag off unit s print > raw 2> err || fail=1
+ extract_flags raw > out
+ grep -w "$flag" out \
+ && { warn_ "$ME_: $table_type: flag '$flag' not turned off: $(cat out)"; fail=1; }
+ compare /dev/null err || fail=1
+ fi
+ done
+ done
+done
+
+# loop filesystems support no flags. Make sure this doesn't crash
+
+if [ $ss = 512 ]; then
+ # only test on 512 byte ss since mke2fs assumes this on a file
+ truncate -s 5m img || framework_failure
+ mke2fs img || framework_failure
+ echo Error: No flags supported > out.exp
+ parted -s img set 1 foo on > out 2>&1
+ compare out.exp out || fail=1
+ parted -s img disk_set foo on > out 2>&1
+ compare out.exp out || fail=1
+fi
+
+Exit $fail
diff --git a/tests/t3400-whole-disk-FAT-partition.sh b/tests/t3400-whole-disk-FAT-partition.sh
new file mode 100755
index 0000000..e65894a
--- /dev/null
+++ b/tests/t3400-whole-disk-FAT-partition.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Ensure that a whole-disk FAT partition is detected.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+
+dev_file=dev-file
+
+echo '1:0s:81919s:81920s:fat16::;' > exp || framework_failure_
+dd if=/dev/null of=$dev_file bs=1 seek=40M || framework_failure_
+mkfs.vfat -F 16 $dev_file || skip_ "mkfs.vfat failed"
+
+parted -m -s $dev_file u s print > out 2>&1 || fail=1
+grep '^1:' out > k; mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t4000-sun-raid-type.sh b/tests/t4000-sun-raid-type.sh
new file mode 100755
index 0000000..94e0edd
--- /dev/null
+++ b/tests/t4000-sun-raid-type.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# RAID support on sun disk type
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Tom "spot" Callaway <tcallawa@redhat.com>
+# Derived from an example by Jim Meyering <jim@meyering.net>
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+N=2000 # number of sectors
+dev=sun-disk-file
+exp="BYT;\n---:${N}s:file:$ss:$ss:sun::;\n1:0s:127s:128s"
+# create an empty file as a test disk
+dd if=/dev/zero of=$dev bs=${ss}c count=$N 2> /dev/null || fail=1
+
+# label the test disk as a sun disk
+parted -s $dev mklabel sun > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# create a single partition
+parted -s $dev unit s mkpart ext2 0s 127s > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# print the partition data in machine readable format
+parted -m -s $dev unit s p > out 2>&1 || fail=1
+sed "s,^.*/$dev:,---:," out > k && mv k out
+
+# check for expected values for the partition
+printf "$exp:::;\n" > exp || fail=1
+compare exp out || fail=1
+
+# set the raid flag
+parted -s $dev set 1 raid >out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# print the partition data in machine readable format again
+parted -m -s $dev unit s p > out 2>&1 || fail=1
+sed "s,^.*/$dev:,---:," out > k && mv k out || fail=1
+
+# check for expected values (including raid flag) for the partition
+printf "$exp:::raid;\n" > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t4001-sun-vtoc.sh b/tests/t4001-sun-vtoc.sh
new file mode 100755
index 0000000..acd8099
--- /dev/null
+++ b/tests/t4001-sun-vtoc.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Ensure that Sun VTOC is properly initialized.
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Written by Karel Zak <kzak@redhat.com>
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+N=2M
+dev=loop-file
+# create a file to simulate the underlying device
+dd if=/dev/null of=$dev bs=1 seek=$N || framework_failure
+
+# label the test disk
+parted -s $dev mklabel sun > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# extract version
+od -t x1 -An -j128 -N4 $dev > out || fail=1
+echo " 00 00 00 01" > exp || fail=1
+# expect it to be 00 00 00 01, not 00 00 00 00
+compare exp out || fail=1
+
+# extract nparts
+od -t x1 -An -j140 -N2 $dev > out || fail=1
+echo " 00 08" > exp || fail=1
+
+# expect it to be 00 08, not 00 00
+compare exp out || fail=1
+
+# extract sanity magic
+od -t x1 -An -j188 -N4 $dev > out || fail=1
+echo " 60 0d de ee" > exp
+# expect it to be 60 0d de ee, not 00 00 00 00
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t4100-dvh-partition-limits.sh b/tests/t4100-dvh-partition-limits.sh
new file mode 100755
index 0000000..fec7576
--- /dev/null
+++ b/tests/t4100-dvh-partition-limits.sh
@@ -0,0 +1,166 @@
+#!/bin/sh
+# enforce limits on partition start sector and length
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_root_
+require_xfs_
+ss=$sector_size_
+
+# On a 32-bit system, we must skip this test when $ss >= 4096.
+# Otherwise, due to an inherent 32-bit-XFS limit, dd would fail to
+# create the file of size > 16TiB
+if test $(uname -m) != x86_64; then
+ test $ss -le 2048 || skip_ 'this test works only on a 64-bit system'
+fi
+
+####################################################
+# Create and mount a file system capable of dealing with >=2TB files.
+# We must be able to create a file with an apparent length of 2TB or larger.
+# It needn't be a large file system.
+fs=fs_file
+mp=`pwd`/mount-point
+n=4096
+
+# create an XFS file system
+mkfs.xfs -dfile,name=$fs,size=300m || fail=1
+mkdir "$mp" || fail=1
+
+# Unmount upon interrupt, failure, etc., as well as upon normal completion.
+cleanup_fn_() { cd "$test_dir_" && umount "$mp" > /dev/null 2>&1; }
+
+# mount it
+mount -o loop $fs "$mp" || fail=1
+cd "$mp" || fail=1
+
+dev=loop-file
+
+do_mkpart()
+{
+ set +x # Turn off tracing; otherwise, we pollute stderr.
+ start_sector=$1
+ end_sector=$2
+ # echo '********' $(echo $end_sector - $start_sector + 1 |bc)
+ dd if=/dev/zero of=$dev bs=$ss count=2k seek=$end_sector 2> /dev/null &&
+ parted -s $dev mklabel $table_type &&
+ parted -s $dev mkpart p xfs ${start_sector}s ${end_sector}s
+}
+
+# Specify the starting sector number and length in sectors,
+# rather than start and end.
+do_mkpart_start_and_len()
+{
+ set +x # Turn off tracing; otherwise, we pollute stderr.
+ start_sector=$1
+ len=$2
+ end_sector=$(echo $start_sector + $len - 1|bc)
+ do_mkpart $start_sector $end_sector
+}
+
+for table_type in dvh; do
+
+# a partition length of 2^32-1 works.
+end=$(echo $n+2^32-2|bc) || fail=1
+do_mkpart $n $end || fail=1
+
+# print the result
+parted -s $dev unit s p > out 2>&1 || fail=1
+sed -n "/^ *1 *$n/s/ */ /gp" out|sed "s/ *\$//" > k && mv k out || fail=1
+echo " 1 ${n}s ${end}s 4294967295s primary" > exp || fail=1
+compare exp out || fail=1
+
+# a partition length of exactly 2^32 sectors provokes failure.
+do_mkpart $n $(echo $n+2^32-1|bc) > err 2>&1
+test $? = 1 || fail=1
+
+bad_part_length()
+{ echo "Error: partition length of $1 sectors exceeds the"\
+ "$table_type-partition-table-imposed maximum of 4294967295"; }
+
+# check for new diagnostic
+bad_part_length 4294967296 > exp || fail=1
+compare exp err || fail=1
+
+# FIXME: investigate this.
+# Unexpectedly to me, both of these failed with this same diagnostic:
+#
+# Error: partition length of 4294967296 sectors exceeds the \
+# DOS-partition-table-imposed maximum of 2^32-1" > exp &&
+#
+# I expected the one below to fail with a length of _4294967297_.
+# Debugging, I see that _check_partition *does* detect this,
+# but the diagnostic doesn't get displayed because of the wonders
+# of parted's exception mechanism.
+
+# a partition length of 2^32+1 sectors must provoke failure.
+do_mkpart $n $(echo $n+2^32|bc) > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_part_length 4294967297 > exp || fail=1
+compare exp err || fail=1
+
+# =========================================================
+# Now consider partition starting sector numbers.
+bad_start_sector()
+{ echo "Error: starting sector number, $1 exceeds the"\
+ "$table_type-partition-table-imposed maximum of 4294967295"; }
+
+# a partition start sector number of 2^32-1 works.
+do_mkpart_start_and_len $(echo 2^32-1|bc) 1000 || fail=1
+
+# FIXME: this partition number 9 (not requested!) looks totally bogus
+# FIXME: For now, we just expect what the code produces.
+# FIXME: In the long run, figure out if it's sensible.
+cat > exp <<EOF
+Model: (file)
+Disk $dev: 4294970342s
+Sector size (logical/physical): ${ss}B/${ss}B
+Partition Table: $table_type
+Disk Flags:
+
+Number Start End Size Type File system Name Flags
+ 9 0s 4095s 4096s extended
+ 1 4294967295s 4294968294s 1000s primary
+
+EOF
+
+# print the result
+parted -s $dev unit s p > out 2>&1 || fail=1
+sed "s/^Disk .*\($dev: [0-9][0-9]*s\)$/Disk \1/;s/ *$//" out > k \
+ && mv k out || fail=1
+compare exp out || fail=1
+
+# a partition start sector number of 2^32 must fail
+do_mkpart_start_and_len $(echo 2^32|bc) 1000 > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_start_sector 4294967296 > exp || fail=1
+compare exp err || fail=1
+
+# a partition start sector number of 2^32+1 must fail, too.
+do_mkpart_start_and_len $(echo 2^32+1|bc) 1000 > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_start_sector 4294967297 > exp || fail=1
+compare exp err || fail=1
+
+done
+
+Exit $fail
diff --git a/tests/t4100-msdos-partition-limits.sh b/tests/t4100-msdos-partition-limits.sh
new file mode 100755
index 0000000..2bebfb9
--- /dev/null
+++ b/tests/t4100-msdos-partition-limits.sh
@@ -0,0 +1,152 @@
+#!/bin/sh
+# enforce limits on partition start sector and length
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_root_
+require_xfs_
+ss=$sector_size_
+
+# On a 32-bit system, we must skip this test when $ss >= 4096.
+# Otherwise, due to an inherent 32-bit-XFS limit, dd would fail to
+# create the file of size > 16TiB
+if test $(uname -m) != x86_64; then
+ test $ss -le 2048 || skip_ 'this test works only on a 64-bit system'
+fi
+
+####################################################
+# Create and mount a file system capable of dealing with >=2TB files.
+# We must be able to create a file with an apparent length of 2TB or larger.
+# It needn't be a large file system.
+fs=fs_file
+mp=`pwd`/mount-point
+n=4096
+
+# create an XFS file system
+mkfs.xfs -dfile,name=$fs,size=300m || fail=1
+mkdir "$mp" || fail=1
+
+# Unmount upon interrupt, failure, etc., as well as upon normal completion.
+cleanup_fn_() { cd "$test_dir_" && umount "$mp" > /dev/null 2>&1; }
+
+# mount it
+mount -o loop $fs "$mp" || fail=1
+cd "$mp" || fail=1
+
+dev=loop-file
+
+do_mkpart()
+{
+ set +x # Turn off tracing; otherwise, we pollute stderr.
+ start_sector=$1
+ end_sector=$2
+ # echo '********' $(echo $end_sector - $start_sector + 1 |bc)
+ dd if=/dev/zero of=$dev bs=$ss count=2k seek=$end_sector 2> dd-err ||
+ { cat dd-err 1>&2; return 1; }
+ parted -s $dev mklabel $table_type &&
+ parted -s $dev mkpart p xfs ${start_sector}s ${end_sector}s
+}
+
+# Specify the starting sector number and length in sectors,
+# rather than start and end.
+do_mkpart_start_and_len()
+{
+ set +x # Turn off tracing; otherwise, we pollute stderr.
+ start_sector=$1
+ len=$2
+ end_sector=$(echo $start_sector + $len - 1|bc)
+ do_mkpart $start_sector $end_sector
+}
+
+for table_type in msdos; do
+
+# a partition length of 2^32-1 works.
+end=$(echo $n+2^32-2|bc) || fail=1
+do_mkpart $n $end || fail=1
+
+# print the result
+parted -s $dev unit s p > out 2>&1 || fail=1
+sed -n "/^ *1 *$n/s/ */ /gp" out|sed "s/ *\$//" > k && mv k out || fail=1
+echo " 1 ${n}s ${end}s 4294967295s primary" > exp || fail=1
+compare exp out || fail=1
+
+# a partition length of exactly 2^32 sectors provokes failure.
+do_mkpart $n $(echo $n+2^32-1|bc) > err 2>&1
+test $? = 1 || fail=1
+
+bad_part_length()
+{ echo "Error: partition length of $1 sectors exceeds the"\
+ "$table_type-partition-table-imposed maximum of 4294967295"; }
+
+# check for new diagnostic
+bad_part_length 4294967296 > exp || fail=1
+compare exp err || fail=1
+
+# a partition length of 2^32+1 sectors must provoke failure.
+do_mkpart $n $(echo $n+2^32|bc) > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_part_length 4294967297 > exp || fail=1
+compare exp err || fail=1
+
+# =========================================================
+# Now consider partition starting sector numbers.
+bad_start_sector()
+{ echo "Error: starting sector number, $1 exceeds the"\
+ "$table_type-partition-table-imposed maximum of 4294967295"; }
+
+# a partition start sector number of 2^32-1 works.
+do_mkpart_start_and_len $(echo 2^32-1|bc) 1000 || fail=1
+
+cat > exp <<EOF
+Model: (file)
+Disk $dev: 4294970342s
+Sector size (logical/physical): ${ss}B/${ss}B
+Partition Table: $table_type
+Disk Flags:
+
+Number Start End Size Type File system Flags
+ 1 4294967295s 4294968294s 1000s primary
+
+EOF
+
+# print the result
+parted -s $dev unit s p > out 2>&1 || fail=1
+sed "s/^Disk .*\($dev: [0-9][0-9]*s\)$/Disk \1/;s/ *$//" out > k \
+ && mv k out || fail=1
+compare exp out || fail=1
+
+# a partition start sector number of 2^32 must fail
+do_mkpart_start_and_len $(echo 2^32|bc) 1000 > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_start_sector 4294967296 > exp || fail=1
+compare exp err || fail=1
+
+# a partition start sector number of 2^32+1 must fail, too.
+do_mkpart_start_and_len $(echo 2^32+1|bc) 1000 > err 2>&1
+test $? = 1 || fail=1
+
+# check for new diagnostic
+bad_start_sector 4294967297 > exp || fail=1
+compare exp err || fail=1
+
+done
+
+Exit $fail
diff --git a/tests/t4100-msdos-starting-sector.sh b/tests/t4100-msdos-starting-sector.sh
new file mode 100755
index 0000000..e933060
--- /dev/null
+++ b/tests/t4100-msdos-starting-sector.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+# Consistency in msdos free space starting sector.
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+######################################################################
+# parted 1.8.8.1 and earlier was inconsistent when calculating the
+# start sector for free space in msdos type lables. parted was not
+# consistent in the use of metadata padding for msdos labels.
+######################################################################
+
+N=4096 # number of sectors
+dev=loop-file
+# create a file to simulate the underlying device
+dd if=/dev/zero of=$dev bs=${ss}c count=$N 2> /dev/null || fail=1
+
+# label the test disk
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+# expect no output
+compare /dev/null out || fail=1
+
+# Test the output of print free with no partitions.
+cat <<EOF > exp || fail=1
+BYT;
+path:${N}s:file:$ss:$ss:msdos::;
+1:32s:4095s:4064s:free;
+EOF
+
+# create expected output file' 'test $fail = 0'
+
+# display output of label without partitions
+parted -m -s $dev unit s print free > out 2>&1 || fail=1
+
+# check for expected output
+sed "2s/^[^:]*:/path:/" < out > k; mv k out
+compare exp out || fail=1
+
+# Test the output of print free with one partition.
+cat <<EOF > exp || fail=1
+BYT;
+path:${N}s:file:$ss:$ss:msdos::;
+1:32s:2047s:2016s:free;
+1:2048s:4095s:2048s:::;
+EOF
+
+# create a partition at the end of the label
+parted -s $dev mkpart primary 2048s 4095s || fail=1
+
+# display output of label with partition
+parted -m -s $dev unit s print free > out 2>&1 || fail=1
+
+# check for expected output
+sed "2s/^[^:]*:/path:/" < out > k; mv k out
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t4200-partprobe.sh b/tests/t4200-partprobe.sh
new file mode 100755
index 0000000..a2731f2
--- /dev/null
+++ b/tests/t4200-partprobe.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+# partprobe must not examine more than 16 partitions
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_erasable_
+require_root_
+require_dvhtool_
+
+dev=$DEVICE_TO_ERASE
+
+# setup: create a DVH partition table on $dev"
+dd if=/dev/zero of=$dev bs=512 count=1 seek=10000 || fail=1
+parted -s $dev mklabel dvh || fail=1
+
+# setup: use dvhtool to create a 17th (invalid?) partition"
+dd if=/dev/zero of=d bs=1 count=4k || fail=1
+dvhtool -d $dev --unix-to-vh d data || fail=1
+
+# Here's sample output from the parted...print command below:
+# BYT;
+# /dev/sdd:128880s:scsi:512:512:dvh: Flash Disk:;
+# 9:0s:4095s:4096s:::;
+# 17:4s:11s:8s::data:;
+
+# ensure that dvhtool did what we want"
+parted -m -s $dev unit s print > out 2>&1 || fail=1
+grep "^17:.*::data:;\$" out || fail=1
+
+# Parted 1.8.9 and earlier would mistakenly try to access partition #17.
+# ensure that partprobe succeeds and produces no output"
+partprobe -s $dev > out 2>err || fail=1
+compare /dev/null err || fail=1
+echo "$dev: dvh partitions 9 <17>" > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t4300-nilfs2-tiny.sh b/tests/t4300-nilfs2-tiny.sh
new file mode 100755
index 0000000..28ccb7e
--- /dev/null
+++ b/tests/t4300-nilfs2-tiny.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Trigger a nilfs2-related bug.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+n_sectors=200
+dev=dev-file
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || framework_failure_
+
+# Create a tiny, 7-sector partition.
+parted -s $dev mklabel gpt mkpart p1 64s 70s || framework_failure_
+
+# This used to make parted abort.
+parted -s $dev u s p || fail=1
+
+Exit $fail
diff --git a/tests/t4301-nilfs2-badsb2.sh b/tests/t4301-nilfs2-badsb2.sh
new file mode 100755
index 0000000..2a1205b
--- /dev/null
+++ b/tests/t4301-nilfs2-badsb2.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Trigger a nilfs2-related bug.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+len=32
+dev=dev-file
+
+dd if=/dev/zero of=$dev bs=512 count=$(($len+$ss/512)) || framework_failure_
+
+end=$(($len * 512 / $ss))
+parted -s $dev mklabel msdos mkpart primary 1s ${end}s || framework_failure_
+
+# Write a secondary superblock with the nilfs magic number and a nilfs
+# superblock length (s_bytes) field of only 10 bytes.
+# struct nilfs2_super_block starts with these four fields...
+# uint32_t s_rev_level;
+# uint16_t s_minor_rev_level;
+# uint16_t s_magic;
+# uint16_t s_bytes;
+sb2_offset=$(( 24 / ($ss / 512) + 1))
+perl -e "print pack 'LSSS.', 0, 0, 0x3434, 10, $ss" |
+ dd of=$dev bs=$ss seek=$sb2_offset count=1 conv=notrunc
+
+# This used to give parted a sigsegv.
+parted -s $dev print || fail=1
+
+Exit $fail
diff --git a/tests/t4302-nilfs2-lessbadsb2.sh b/tests/t4302-nilfs2-lessbadsb2.sh
new file mode 100755
index 0000000..1857b29
--- /dev/null
+++ b/tests/t4302-nilfs2-lessbadsb2.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+# Trigger a nilfs2-related bug.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test is like t4301-nilfsbadsb2 except with an s_bytes field of
+# 1024 instead of 10. This exercises a less obvious bug.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+len=32
+dev=dev-file
+
+dd if=/dev/zero of=$dev bs=512 count=$(($len+$ss/512)) || framework_failure_
+
+end=$(($len * 512 / $ss))
+parted -s $dev mklabel msdos mkpart primary 1s ${end}s || framework_failure_
+
+# Write a secondary superblock with the nilfs magic number and a nilfs
+# superblock length (s_bytes) field of only 10 bytes.
+# struct nilfs2_super_block starts with these four fields...
+# uint32_t s_rev_level;
+# uint16_t s_minor_rev_level;
+# uint16_t s_magic;
+# uint16_t s_bytes;
+sb2_offset=$(( 24 / ($ss / 512) + 1))
+perl -e "print pack 'LSSS.', 0, 0, 0x3434, 1024, $ss" |
+ dd of=$dev bs=$ss seek=$sb2_offset count=1 conv=notrunc
+
+# This used to read past the part of the stack allocated by alloca, but
+# may or may not cause a segmentation fault as a result.
+parted -s $dev print || fail=1
+
+Exit $fail
diff --git a/tests/t5000-tags.sh b/tests/t5000-tags.sh
new file mode 100755
index 0000000..6291657
--- /dev/null
+++ b/tests/t5000-tags.sh
@@ -0,0 +1,81 @@
+#!/bin/sh
+# test bios_grub flag in gpt labels
+
+# Copyright (C) 2007-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+dev=loop-file
+N=4200 # number of sectors
+
+part_sectors=2048
+start_sector=2048
+end_sector=$(expr $start_sector + $part_sectors - 1)
+
+# setup: reasonable params
+test $end_sector -lt $N || fail=1
+
+# setup: create zeroed device
+dd if=/dev/zero of=$dev bs=${ss}c count=$N 2> /dev/null || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+
+# ensure there was no output
+compare /dev/null empty || fail=1
+
+# print the table (before adding a partition)
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${N}s:file:$ss:$ss:gpt::;\n" > exp || fail=1
+compare exp out || fail=1
+
+# add a partition
+parted -s $dev u s mkpart name1 ${start_sector} ${end_sector} >out 2>&1 \
+ || fail=1
+
+# print the table before modification
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t >> out || fail=1
+
+# set the new bios_grub attribute
+parted -m -s $dev set 1 bios_grub on || fail=1
+
+# print the table after modification
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t >> out || fail=1
+
+gen_exp()
+{
+ cat <<EOF
+BYT;
+$dev:${N}s:file:$ss:$ss:gpt::;
+1:${start_sector}s:${end_sector}s:${part_sectors}s::name1:;
+BYT;
+$dev:${N}s:file:$ss:$ss:gpt::;
+1:${start_sector}s:${end_sector}s:${part_sectors}s::name1:bios_grub;
+EOF
+}
+
+# check for expected output
+gen_exp > exp || fail=1
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t6000-dm.sh b/tests/t6000-dm.sh
new file mode 100755
index 0000000..980094d
--- /dev/null
+++ b/tests/t6000-dm.sh
@@ -0,0 +1,98 @@
+#!/bin/sh
+# ensure that parted can distinguish device map types: linear, multipath
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+lvm_init_root_dir_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$
+mpath_=mpath-$$
+
+d1= d2= d3=
+f1= f2= f3=
+cleanup_fn_() {
+ dmsetup remove $linear_
+ dmsetup remove $mpath_
+ test -n "$d1" && losetup -d "$d1"
+ test -n "$d2" && losetup -d "$d2"
+ test -n "$d3" && losetup -d "$d3"
+ rm -f "$f1" "$f2" "$f3";
+}
+
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
+ || skip_ "is this partition mounted with 'nodev'?"
+
+# setup: create loop devices
+f2=$(pwd)/2 && d2=$(loop_setup_ "$f2") || fail=1
+f3=$(pwd)/3 && d3=$(loop_setup_ "$f3") || fail=1
+
+# In the output of parted's print -s command,
+# replace (possibly varying) $dev name with '...'.
+sanitize() {
+ sed 's,^Disk .*: \([0-9][0-9]*\),Disk ...: \1,;s/ *$//' "$@"
+}
+
+# This loop used to include "multipath", but lvm2 changed
+# in such a way that that no longer works with loop devices.
+# FIXME: use two scsi_debug devices instead.
+for type in linear ; do
+
+ case $type in
+ linear)
+ type_kwd=$linear_
+ dmsetup_cmd="0 1024 linear $d1 0"
+ ;;
+ *)
+ type_kwd=$mpath_
+ dmsetup_cmd="0 1024 multipath 0 0 1 1 round-robin 0 2 0 $d2 $d3"
+ ;;
+ esac
+
+ # setup: create a mapping
+ echo "$dmsetup_cmd" | dmsetup create "$type_kwd" || fail=1
+ dev="$DM_DEV_DIR/mapper/$type_kwd"
+
+ # Create msdos partition table
+ parted -s $dev mklabel msdos > out 2>&1 || fail=1
+ compare /dev/null out || fail=1
+
+ parted -s "$dev" print > out 2>&1 || fail=1
+ sanitize out > k && mv k out || fail=1
+
+ # Create expected output file.
+ cat <<EOF >> exp || fail=1
+Model: Linux device-mapper ($type) (dm)
+Disk ...: 524kB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+Disk Flags:
+
+Number Start End Size Type File system Flags
+
+EOF
+
+ compare exp out || fail=1
+done
+
+Exit $fail
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
new file mode 100644
index 0000000..be0b7ee
--- /dev/null
+++ b/tests/t6001-psep.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# ensure that parted names partitions on dm disks correctly
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_udevadm_settle_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$
+linear2_=plinear-$$foo
+
+d1= d2=
+f1= f2=
+cleanup_fn_() {
+ dmsetup remove ${linear_}p1
+ dmsetup remove $linear_
+ dmsetup remove ${linear2_}1
+ dmsetup remove $linear2_
+ test -n "$d1" && losetup -d "$d1"
+ test -n "$d2" && losetup -d "$d2"
+ rm -f "$f1 $f2";
+}
+
+loop_file_1=loop-file-1-$$
+loop_file_2=loop-file-2-$$
+
+d1=$(loop_setup_ $loop_file_1) || framework_failure
+d1_size=$(blockdev --getsz $d1)
+d2=$(loop_setup_ $loop_file_2) || framework_failure
+d2_size=$(blockdev --getsz $d2)
+
+dmsetup create $linear_ --table "0 $d1_size linear $d1 0" || framework_failure
+dev="/dev/mapper/$linear_"
+
+# Create msdos partition table
+parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+#make sure device name is correct
+wait_for_dev_to_appear_ ${dev}p1 || fail=1
+
+#repeat on name not ending in a digit
+# setup: create a mapping
+dmsetup create $linear2_ --table "0 $d2_size linear $d2 0" || framework_failure
+dev="/dev/mapper/$linear2_"
+
+# Create msdos partition table
+parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+#make sure device name is correct
+wait_for_dev_to_appear_ ${dev}1 || fail=1
+
+if [ -n "$fail" ]; then
+ ls /dev/mapper
+fi
+
+Exit $fail
diff --git a/tests/t6002-dm-busy.sh b/tests/t6002-dm-busy.sh
new file mode 100644
index 0000000..27b462d
--- /dev/null
+++ b/tests/t6002-dm-busy.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+# ensure that parted can alter a partition on a dmraid disk
+# while another one is mounted
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+
+# We could make this work for arbitrary sector size, but I'm lazy.
+require_512_byte_sector_size_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$
+
+d1=
+f1=
+dev=
+cleanup_fn_() {
+ umount "${dev}p2" > /dev/null 2>&1
+ dmsetup remove ${linear_}p1
+ dmsetup remove ${linear_}p2
+ dmsetup remove $linear_
+ test -n "$d1" && losetup -d "$d1"
+ rm -f "$f1"
+}
+
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
+ || fail=1
+
+# setup: create a mapping
+n=204800
+echo "0 $n linear $d1 0" | dmsetup create $linear_ || fail=1
+dev="/dev/mapper/$linear_"
+
+# Create msdos partition table
+parted -s $dev mklabel msdos > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+parted -s $dev -a none mkpart primary fat32 1s 1000s > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+parted -s $dev -a none mkpart primary fat32 1001s 200000s > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# wait for new partition device to appear
+wait_for_dev_to_appear_ ${dev}p2 || fail_ ${dev}p2 did not appear
+
+mkfs.vfat -F 32 ${dev}p2 || fail_ mkfs.vfat failed
+
+mount_point=$(pwd)/mnt
+
+mkdir $mount_point || fail=1
+mount "${dev}p2" "$mount_point" || fail=1
+
+# Removal of unmounted partition must succeed.
+parted -s "$dev" rm 1 > /dev/null 2>&1 || fail=1
+
+# Removal of mounted partition must fail.
+parted -s "$dev" rm 2 > /dev/null 2>&1 && fail=1
+
+parted -m -s "$dev" u s print > out 2>&1 || fail=1
+sed "s,^$dev,DEV," out > k; mv k out
+
+# Create expected output file.
+cat <<EOF >> exp || fail=1
+BYT;
+DEV:${n}s:dm:512:512:msdos:Linux device-mapper (linear):;
+2:1001s:200000s:199000s:fat32::lba;
+EOF
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t6003-dm-hide.sh b/tests/t6003-dm-hide.sh
new file mode 100644
index 0000000..6e03622
--- /dev/null
+++ b/tests/t6003-dm-hide.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# ensure that parted -l only shows dmraid device-mapper devices
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$
+
+d1=
+f1=
+dev=
+cleanup_fn_() {
+ # Insist. Sometimes the initial removal fails (race?).
+ # When that happens, a second removal appears to be sufficient.
+ dmsetup remove $linear_ || dmsetup remove $linear_
+
+ test -n "$d1" && losetup -d "$d1"
+ rm -f "$f1"
+}
+
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
+ || fail=1
+
+# setup: create a mapping
+echo 0 2048 linear $d1 0 | dmsetup create $linear_ || fail=1
+dev=/dev/mapper/$linear_
+
+# No "DMRAID-" UUID prefix, hence the device should not show up.
+parted -s -l >out 2>&1
+grep "^Disk $dev:" out && fail=1
+
+# Unless we perform both dmsetup-remove *and* losetup -d,
+# the following dmsetup-create would fail with EBUSY.
+dmsetup remove $linear_
+losetup -d "$d1" || fail=1
+# Reopen (or get new) loop device.
+d1=$(loop_setup_ "$f1") || fail=1
+
+# This time, use a fake UUID.
+echo 0 2048 linear $d1 0 | dmsetup create $linear_ -u "DMRAID-fake-$$" || fail=1
+
+# Thus, the device should now show up.
+parted -s -l >out 2>&1
+grep "^Disk $dev:" out || fail=1
+
+Exit $fail
diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh
new file mode 100755
index 0000000..d9a3012
--- /dev/null
+++ b/tests/t6004-dm-many-partitions.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+# device-mapper: create many partitions
+# This would not create partitions > 16 when using device-mapper
+
+# Copyright (C) 2012, 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_udevadm_settle_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+ss=$sector_size_
+ns=300
+n_partitions=20
+start_sector=34
+loop_file=loop-file-$$
+dm_name=dm-test-$$
+
+cleanup_() {
+ dmsetup remove $dm_name
+ test -n "$dev" && losetup -d "$dev"
+ rm -f $loop_file;
+}
+
+# create a file large enough to hold a GPT partition table
+dd if=/dev/null of=$loop_file bs=$ss seek=$ns || framework_failure
+dev=$(losetup --show -f $loop_file) || framework_failure
+dmsetup create $dm_name --table "0 $ns linear $dev 0" || framework_failure
+
+cmd=
+for ((i=1; i<=$n_partitions; i+=1)); do
+ s=$((start_sector + i - 1))
+ cmd="$cmd mkpart p$i ${s}s ${s}s"
+done
+parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1
+
+# Make sure all the partitions appeared under /dev/mapper/
+for ((i=1; i<=$n_partitions; i+=1)); do
+ wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; }
+
+ # remove the partitions as we go, otherwise cleanup won't work.
+ dmsetup remove /dev/mapper/${dm_name}p$i
+done
+
+Exit $fail
diff --git a/tests/t6005-dm-uuid.sh b/tests/t6005-dm-uuid.sh
new file mode 100755
index 0000000..caa992c
--- /dev/null
+++ b/tests/t6005-dm-uuid.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# device-mapper: preserve uuid
+# The dm's partitions uuid would be removed when creating new partitions
+
+# Copyright (C) 2012, 2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_udevadm_settle_
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+ss=$sector_size_
+ns=300
+n_partitions=3
+start_sector=34
+loop_file=loop-file-$$
+dm_name=dm-test-$$
+
+cleanup_() {
+ dmsetup remove $dm_name
+ test -n "$dev" && losetup -d "$dev"
+ rm -f $loop_file;
+}
+
+# create a file large enough to hold a GPT partition table
+dev=$(loop_setup_ $loop_file) || framework_failure
+dmsetup create $dm_name --table "0 $ns linear $dev 0" || framework_failure
+dmsetup rename $dm_name --setuuid f139317b-f98a-45d7-ab3b-9b4e0a336872 || framework_failure
+
+cmd=
+for ((i=1; i<=$n_partitions; i+=1)); do
+ s=$((start_sector + i - 1))
+ cmd="$cmd mkpart p$i ${s}s ${s}s"
+done
+parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fail=1
+wait_for_dev_to_appear_ /dev/mapper/${dm_name}p${n_partitions} || fail=1
+
+# Make sure all the partitions have UUIDs
+for ((i=1; i<=$n_partitions; i+=1)); do
+ dmsetup info /dev/mapper/${dm_name}p$i | grep UUID || fail=1
+
+ # remove the partitions as we go, otherwise cleanup won't work.
+ dmsetup remove /dev/mapper/${dm_name}p$i
+done
+
+Exit $fail
diff --git a/tests/t6006-dm-512b-sectors.sh b/tests/t6006-dm-512b-sectors.sh
new file mode 100644
index 0000000..5f2f291
--- /dev/null
+++ b/tests/t6006-dm-512b-sectors.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+# device-mapper sector sizes are 512b, make sure partitions are the correct
+# size when using larger sector sizes and a linear dm table.
+
+# Copyright (C) 2015, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+test "x$ENABLE_DEVICE_MAPPER" = xyes \
+ || skip_ "no device-mapper support"
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear-$$test
+
+cleanup_fn_() {
+ i=0
+ udevadm settle
+ while [ $i -lt 10 ] ; do
+ [ -e "/dev/mapper/${linear_}1" ] && dmsetup remove ${linear_}1
+ sleep .2
+ [ -e "/dev/mapper/$linear_" ] && dmsetup remove $linear_
+ sleep .2
+ [ -e "/dev/mapper/${linear_}1" ] || [ -e "/dev/mapper/$linear_" ] || i=10
+ i=$((i + 1))
+ done
+ udevadm settle
+}
+
+# Create a 10M device
+ss=$sector_size_
+scsi_debug_setup_ sector_size=$ss dev_size_mb=11 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# Size of device, in 512b units
+scsi_dev_size=$(blockdev --getsz $scsi_dev) || framework_failure
+
+dmsetup create $linear_ --table "0 $scsi_dev_size linear $scsi_dev 0" || framework_failure
+dev="/dev/mapper/$linear_"
+
+# Create msdos partition table with a partition from 1MiB to 10MiB
+parted -s $dev mklabel msdos mkpart primary ext2 1MiB 100% > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+wait_for_dev_to_appear_ ${dev}1 || fail=1
+
+# The size of the partition should be 10MiB, or 20480 512b sectors
+p1_size=$(blockdev --getsz ${dev}1) || framework_failure
+[ $p1_size == 20480 ] || fail=1
+
+Exit $fail
diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
new file mode 100755
index 0000000..824a4ce
--- /dev/null
+++ b/tests/t6100-mdraid-partitions.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+# verify that new kernel is informed about partitions on mdraid devices
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+require_mdadm_
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=10 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# Arbitrary number, not likely to be used already
+md_name=md99
+md_dev=/dev/$md_name
+
+test -b $md_dev && skip_ "$md_dev already exists"
+
+# Use gpt and create two partitions on the device.
+parted -s "$scsi_dev" mklabel gpt \
+ mkpart p1 ext2 1M 4M \
+ mkpart p2 ext2 5M 8M > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+wait_for_dev_to_appear_ ${scsi_dev}2 || { fail=1; cat /proc/partitions; }
+
+cleanup_fn_() {
+ # stop mdraid array
+ mdadm -S $md_dev || warn_ "Failed to stop MD array, $md_dev"
+}
+
+# create mdraid on top of both partitions with v0.90 metadata
+mdadm -C $md_dev -e0 --force -R -l1 -n2 "${scsi_dev}1" "${scsi_dev}2"
+wait_for_dev_to_appear_ ${md_dev} || { fail=1; cat /proc/partitions; }
+
+# create gpt and two partitions on the raid device
+parted -s $md_dev mklabel gpt \
+ mkpart r1 ext2 1M 2M \
+ mkpart r2 ext2 2M 3M > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# Verify that kernel has been informed about the second device.
+wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; }
+
+# Remove partitions from the raid device.
+parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1
+compare /dev/null out || fail=1
+
+# Verify that kernel has been informed about those removals.
+wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; }
+wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; }
+
+Exit $fail
diff --git a/tests/t7000-scripting.sh b/tests/t7000-scripting.sh
new file mode 100755
index 0000000..cc7b3ee
--- /dev/null
+++ b/tests/t7000-scripting.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# Make sure the scripting option works (-s) properly.
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+N=100 # number of sectors
+
+: ${abs_top_builddir=$(cd ../..; pwd)}
+: ${CONFIG_HEADER="$abs_top_builddir/lib/config.h"}
+
+config_h=$abs_top_srcdir
+grep '^#define HAVE_LIBREADLINE 1' $CONFIG_HEADER > /dev/null \
+ || skip_ "configured without readline support"
+
+# The failure messages.
+cat << EOF > err.expected || fail=1
+Error: You requested a partition from 512B to 50.7kB (sectors 0..0).
+The closest location we can manage is 17.4kB to 33.8kB (sectors 0..0).
+EOF
+
+normalize_part_diag_ err.expected || fail=1
+
+{ emit_superuser_warning
+ sed s/Error/Warning/ err.expected
+ printf 'Is this still acceptable to you?\nYes/No?'; } >> errI || fail=1
+
+for mkpart in mkpart; do
+
+ # Test for mkpart in scripting mode
+ # Create the test file
+ dd if=/dev/zero of=testfile bs=${ss}c count=$N 2> /dev/null || fail=1
+
+ # Test the scripting mode of $mkpart.
+ parted -s testfile -- mklabel gpt "$mkpart" p-name ext3 1s -34s > out 2>&1
+ test $? = 1 || fail=1
+
+ # Compare the real error and the expected one
+ normalize_part_diag_ out || fail=1
+ compare err.expected out || fail=1
+
+ # Test mkpart interactive mode.
+ # Create the test file
+ rm -f testfile
+ dd if=/dev/zero of=testfile bs=${ss}c count=$N 2> /dev/null || fail=1
+ # Test the interactive mode of $mkpart
+ echo n | \
+ parted ---pretend-input-tty -- testfile \
+ mklabel gpt $mkpart p-name ext3 1s -34s > out 2>&1 && fail=1
+
+ # We have to format the output before comparing.
+ # normalize the actual output
+ printf x >> out || fail=1
+ sed "s, * ,,g;s, x$,,;/ n$/ {N;s, n\nx,,}" out > o2 && mv -f o2 out \
+ || fail=1
+ normalize_part_diag_ out || fail=1
+
+ # Compare the real error and the expected one
+ compare out errI || fail=1
+
+done
+
+Exit $fail
diff --git a/tests/t8000-loop.sh b/tests/t8000-loop.sh
new file mode 100755
index 0000000..793e279
--- /dev/null
+++ b/tests/t8000-loop.sh
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Test usage of loop devices
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+lvm_init_root_dir_
+
+d1= f1=
+cleanup_fn_()
+{
+ test -n "$d1" && losetup -d "$d1"
+ rm -f "$f1"
+}
+
+f1=$(pwd)/1; d1=$(loop_setup_ "$f1") \
+ || skip_ "is this partition mounted with 'nodev'?"
+
+require_partitionable_loop_device_ $d1
+
+# Expect this to succeed.
+parted -s $d1 mklabel msdos > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# Create a partition
+parted -s $d1 mkpart primary 1 10 > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+Exit $fail
diff --git a/tests/t8001-loop-blkpg.sh b/tests/t8001-loop-blkpg.sh
new file mode 100755
index 0000000..5b7b891
--- /dev/null
+++ b/tests/t8001-loop-blkpg.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# Test support for partitions on loop devices
+
+# Copyright (C) 2008-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_udevadm_settle_
+lvm_init_root_dir_
+
+cleanup_fn_()
+{
+ test -n "$loopdev" \
+ && { udevadm settle --timeout=3; losetup -d "$loopdev"; }
+}
+
+# Create backing file
+dd if=/dev/zero of=backing_file bs=1M count=4 >/dev/null 2>&1 || fail=1
+
+# Set up loop device on top of backing file
+loopdev=$(loop_setup_ backing_file)
+test -z "$loopdev" && fail=1
+
+# Skip this test if loop devices are not partitionable.
+require_partitionable_loop_device_ $loopdev
+
+# Expect this to succeed
+parted -s "$loopdev" mklabel msdos > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+
+# Create a partition
+parted -s "$loopdev" mkpart primary 1M 2M > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+udevadm settle --timeout=5 || fail=1
+
+# Verify that the partition appeared in /proc/partitions
+entry=$(basename "$loopdev"p1)
+grep "$entry" /proc/partitions || { cat /proc/partitions; fail=1; }
+
+# Remove the partition
+parted -s "$loopdev" rm 1 > err 2>&1 || fail=1
+compare /dev/null err || fail=1 # expect no output
+udevadm settle --timeout=5 || fail=1
+
+# Verify that the partition got removed from /proc/partitions
+grep "$entry" /proc/partitions && fail=1
+
+Exit $fail
diff --git a/tests/t9010-big-sector.sh b/tests/t9010-big-sector.sh
new file mode 100755
index 0000000..4f53533
--- /dev/null
+++ b/tests/t9010-big-sector.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+# check physical sector size as reported by 'print'
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+echo 'Sector size (logical/physical): 4096B/4096B' > exp || framework_failure
+
+# create memory-backed device
+scsi_debug_setup_ dev_size_mb=8 sector_size=4096 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# create partition table and print
+parted -s $scsi_dev mklabel gpt print > out 2>&1 || fail=1
+grep '^Sector' out > k 2>&1 || fail=1
+mv k out || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t9020-alignment.sh b/tests/t9020-alignment.sh
new file mode 100755
index 0000000..85f6ba8
--- /dev/null
+++ b/tests/t9020-alignment.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+# verify that new alignment-querying functions work
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+cat <<EOF > exp || framework_failure
+minimum: 7 8
+optimal: 7 2048
+partition alignment: 0 1
+EOF
+
+# create memory-backed device
+scsi_debug_setup_ physblk_exp=3 lowest_aligned=7 num_parts=4 > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+# print alignment info
+../print-align $scsi_dev > out 2>&1 || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t9021-maxima.sh b/tests/t9021-maxima.sh
new file mode 100755
index 0000000..499af8a
--- /dev/null
+++ b/tests/t9021-maxima.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+# verify that partition maxima-querying functions work
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+dev=dev-file
+PATH="..:$PATH"
+export PATH
+
+max_n_partitions()
+{
+ case $1 in
+
+ # Technically, msdos partition tables have no limit on the maximum number
+ # of partitions, but we pretend it is 64 due to implementation details.
+ msdos) m=64;;
+
+ gpt) m=128;;
+ dvh) m=16;;
+ sun) m=8;;
+ mac) m=65536;;
+ bsd) m=8;;
+ amiga) m=128;;
+ atari) m=12;;
+ loop) m=1;;
+ pc98) case $ss in 512) m=16;; *) m=64;; esac;;
+ *) warn_ invalid partition table type: $1 1>&2; exit 1;;
+ esac
+ echo $m
+}
+
+# FIXME: add aix when/if it's supported again
+for t in msdos gpt dvh sun mac bsd amiga atari loop pc98; do
+ echo $t
+ [ $t = 'atari' ] && [ $ss != 512 ] && continue
+ rm -f $dev
+ dd if=/dev/zero of=$dev bs=$ss count=1 seek=10000 || { fail=1; continue; }
+ parted -s $dev mklabel $t || { fail=1; continue; }
+
+ #case $t in pc98) sleep 999d;; esac
+
+ max_start=4294967295
+ max_len=4294967295
+ case $t in
+ atari) max_start=2147483647; max_len=$max_start;;
+ gpt|loop) max_start=18446744073709551615; max_len=$max_start;;
+ sun) max_start=549755813760;; # 128 * (2^32-1)
+ esac
+
+ print-max $dev > out 2>&1 || fail=1
+ m=$(max_n_partitions $t) || fail=1
+ printf '%s\n' "max len: $max_len" \
+ "max start sector: $max_start" \
+ "max number of partitions: $m" \
+ > exp || fail=1
+ compare exp out || fail=1
+done
+
+Exit $fail
diff --git a/tests/t9022-one-unit-snap.sh b/tests/t9022-one-unit-snap.sh
new file mode 100644
index 0000000..decd41f
--- /dev/null
+++ b/tests/t9022-one-unit-snap.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Confirm that specifying 1 unit snaps to the correct value
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=3000
+dev=dev-file
+
+# Create an example of what the result should look like
+# start should be at 1 sector.
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel msdos mkpart pri 1s $((1000*1000))B \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > exp || fail=1
+
+rm $dev
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel msdos mkpart pri 0 1MB \
+ > err 2>&1 || fail=1
+compare /dev/null err || fail=1
+parted -m -s $dev u s p > out || fail=1
+
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t9023-value-lt-one.sh b/tests/t9023-value-lt-one.sh
new file mode 100644
index 0000000..567f2ba
--- /dev/null
+++ b/tests/t9023-value-lt-one.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+# Confirm that a value between 0 and 1 throws an error
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+ss=$sector_size_
+n_sectors=3000
+dev=dev-file
+
+echo 'Error: Use a smaller unit instead of a value < 1' > exp
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+parted --align=none -s $dev mklabel msdos mkpart pri 0 0.5MB \
+ > err 2>&1
+compare exp err || fail=1
+
+Exit $fail
diff --git a/tests/t9024-msdos-1s-partition.sh b/tests/t9024-msdos-1s-partition.sh
new file mode 100644
index 0000000..cc63476
--- /dev/null
+++ b/tests/t9024-msdos-1s-partition.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Test creating 1s partitions in 1s free space
+
+# Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+
+# create device
+truncate --size 10MiB "$dev" || fail=1
+
+# create msdos label and some partitions with 1s free space between
+parted --script "$dev" mklabel msdos > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary ext4 64s 128s > out 2>&1 || fail=1
+parted --script "$dev" mkpart primary ext4 130s 200s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+# Free space is at 129s
+parted --script "$dev" mkpart primary ext4 129s 129s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+Exit $fail
diff --git a/tests/t9025-gpt-1s-partition.sh b/tests/t9025-gpt-1s-partition.sh
new file mode 100644
index 0000000..04a3e4e
--- /dev/null
+++ b/tests/t9025-gpt-1s-partition.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Test creating 1s partitions in 1s free space
+
+# Copyright (C) 2022-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+dev=loop-file
+
+# create device
+truncate --size 10MiB "$dev" || fail=1
+
+# create msdos label and some partitions with 1s free space between
+parted --script "$dev" mklabel gpt > out 2>&1 || fail=1
+parted --script "$dev" mkpart p1 ext4 64s 128s > out 2>&1 || fail=1
+parted --script "$dev" mkpart p2 ext4 130s 200s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+# Free space is at 129s
+parted --script "$dev" mkpart p3 ext4 129s 129s > out 2>&1 || fail=1
+parted --script "$dev" u s p free
+
+Exit $fail
diff --git a/tests/t9030-align-check.sh b/tests/t9030-align-check.sh
new file mode 100644
index 0000000..4954f44
--- /dev/null
+++ b/tests/t9030-align-check.sh
@@ -0,0 +1,56 @@
+#!/bin/sh
+# exercise the align-check command
+
+# Copyright (C) 2009-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+ss=$sector_size_
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+# create memory-backed device
+scsi_debug_setup_ physblk_exp=3 lowest_aligned=7 sector_size=$ss > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+p1=${scsi_dev}1
+
+parted -s $scsi_dev mklabel gpt || fail=1
+
+i=60
+while :; do
+ parted -s $scsi_dev mkpart p1 ext2 ${i}s 800s || fail=1
+ wait_for_dev_to_appear_ $p1 || fail=1
+ parted -s $scsi_dev align-check min 1 > out 2>&1
+ result=$?
+
+ test $(expr $i % 8) = 7 && exp_result=0 || exp_result=1
+ test $result = $exp_result || fail=1
+ compare /dev/null out || fail=1
+
+ parted -s $scsi_dev rm 1
+ i=$(expr $i + 1)
+ test $i = 70 && break
+
+ # Wait up to 10s for the partition file to disappear.
+ wait_for_dev_to_disappear_ $p1 10 \
+ || { fail=1; warn_ $ME_ $p1 failed to disappear; }
+done
+
+Exit $fail
diff --git a/tests/t9040-many-partitions.sh b/tests/t9040-many-partitions.sh
new file mode 100644
index 0000000..31b6030
--- /dev/null
+++ b/tests/t9040-many-partitions.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# Ensure that creating many partitions works.
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+ss=$sector_size_
+partition_sectors=1 # sectors per partition
+n_partitions=128 # how many partitions to create
+start=34 # start sector for the first partition
+gpt_slop=34 # sectors at end of disk reserved for GPT
+
+n_sectors=$(($start + n_partitions * partition_sectors + gpt_slop))
+
+sectors_per_MiB=$((1024 * 1024 / ss))
+n_MiB=$(((n_sectors + sectors_per_MiB - 1) / sectors_per_MiB))
+# create memory-backed device
+scsi_debug_setup_ sector_size=$ss dev_size_mb=$n_MiB > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+n=$((n_MiB * sectors_per_MiB))
+printf "BYT;\n$scsi_dev:${n}s:scsi:$ss:$ss:gpt:Linux scsi_debug:;\n" \
+ > exp || fail=1
+
+cmd=
+i=1
+while :; do
+ s=$((start + i - 1))
+ e=$((s + partition_sectors - 1))
+ cmd="$cmd mkpart p$i ${s}s ${e}s"
+ test $i = $n_partitions && break; i=$((i+1))
+done
+
+# Time the actual command:
+parted -m -a min -s $scsi_dev mklabel gpt $cmd u s p > out 2>&1 || fail=1
+
+i=1
+while :; do
+ s=$((start + i - 1))
+ e=$((s + partition_sectors - 1))
+ printf "$i:${s}s:${e}s:${partition_sectors}s::p$i:;\n" >> exp
+ test $i = $n_partitions && break; i=$((i+1))
+done
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh
new file mode 100644
index 0000000..a16f14d
--- /dev/null
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
@@ -0,0 +1,99 @@
+#!/bin/sh
+# Ensure that parted knows when N'th (N>=16) partition is mounted
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+ss=$sector_size_
+partition_sectors=512 # sectors per partition
+n_partitions=17 # how many partitions to create
+start=2048 # start sector for the first partition
+gpt_slop=34 # sectors at end of disk reserved for GPT
+
+n_sectors=$(($start + n_partitions * partition_sectors + gpt_slop))
+
+sectors_per_MiB=$((1024 * 1024 / ss))
+n_MiB=$(((n_sectors + sectors_per_MiB - 1) / sectors_per_MiB))
+# create memory-backed device
+scsi_debug_setup_ sector_size=$ss dev_size_mb=$n_MiB > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+n=$((n_MiB * sectors_per_MiB))
+printf "BYT;\n$scsi_dev:${n}s:scsi:$ss:$ss:gpt:Linux scsi_debug:;\n" \
+ > exp || fail=1
+
+parted -s $scsi_dev mklabel gpt || fail=1
+parted -s $scsi_dev u s p || fail=1
+
+i=1
+t0=$(date +%s.%N)
+while :; do
+ end=$((start + partition_sectors - 1))
+ parted -s $scsi_dev mkpart p$i ${start}s ${end}s || fail=1
+ printf "$i:${start}s:${end}s:${partition_sectors}s::p$i:;\n" >> exp
+ test $i = $n_partitions && break
+ start=$((start + partition_sectors))
+ i=$((i+1))
+done
+t_final=$(date +%s.%N)
+
+# Fail the test if it takes too long.
+# On Fedora 13, it takes about 15 seconds.
+# With older kernels, it typically takes more than 150 seconds.
+$AWK "BEGIN {d = $t_final - $t0; n = $n_partitions; st = 60 < d;"\
+' printf "created %d partitions in %.2f seconds\n", n, d; exit st }' /dev/null \
+ || fail=1
+
+parted -m -s $scsi_dev u s p > out || fail=1
+compare exp out || fail=1
+
+wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear
+
+partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16"
+for i in $partitions; do
+ mkfs.ext3 $i || fail=1
+done
+
+# be sure to unmount upon interrupt, failure, etc.
+cleanup_fn_() { for i in $partitions; do umount "$i" > /dev/null 2>&1; done; }
+
+for part_dev in $partitions; do
+ n=${part_dev#$scsi_dev}
+ mount_point=$(pwd)/m-$n
+ mkdir $mount_point || fail=1
+ mount "$part_dev" "$mount_point" || fail=1
+
+ # Removal of mounted partition must fail.
+ parted -s $scsi_dev rm $n > out 2>&1 && fail=1
+
+ echo "Warning: Partition $part_dev is being used." \
+ 'Are you sure you want to continue?' \
+ > exp-error || framework_failure_
+
+ # expect error
+ compare exp-error out || fail=1
+
+done
+
+Exit $fail
diff --git a/tests/t9042-dos-partition-limit.sh b/tests/t9042-dos-partition-limit.sh
new file mode 100644
index 0000000..459cb6b
--- /dev/null
+++ b/tests/t9042-dos-partition-limit.sh
@@ -0,0 +1,74 @@
+#!/bin/sh
+# Ensure that parted enforces msdos partition limit
+
+# Copyright (C) 2010-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+require_root_
+require_scsi_debug_module_
+
+grep '^#define USE_BLKID 1' "$CONFIG_HEADER" > /dev/null ||
+ skip_ 'this system lacks a new-enough libblkid'
+
+ss=$sector_size_
+partition_sectors=256 # sectors per partition
+n_partitions=61 # how many partitions to create
+start=2048 # start sector for the first partition
+
+n_sectors=$(($start + n_partitions * partition_sectors))
+
+sectors_per_MiB=$((1024 * 1024 / ss))
+n_MiB=$(((n_sectors + sectors_per_MiB - 1) / sectors_per_MiB))
+# create memory-backed device
+scsi_debug_setup_ sector_size=$ss dev_size_mb=$n_MiB > dev-name ||
+ skip_ 'failed to create scsi_debug device'
+scsi_dev=$(cat dev-name)
+
+n=$((n_MiB * sectors_per_MiB))
+printf '%s\n' "BYT;" \
+ "$scsi_dev:${n}s:scsi:$ss:$ss:msdos:Linux scsi_debug:;" \
+ "1:$((start-2))s:$((n-1))s:$((n-start+2))s:::lba;" \
+ > exp || fail=1
+
+parted -s -a min $scsi_dev mklabel msdos mkpart extended $((start-2))s 100% || fail=1
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
+
+i=1
+while :; do
+ end=$((start + partition_sectors - 2))
+ parted -s -a min $scsi_dev mkpart logical ${start}s ${end}s || fail=1
+ printf "$((i+4)):${start}s:${end}s:$((end-start+1))s:::;\n" >> exp
+ test $i = $((n_partitions - 1)) && break
+ start=$((start + partition_sectors))
+ i=$((i+1))
+done
+
+parted -m -s $scsi_dev u s p > out || fail=1
+compare exp out || fail=1
+
+start=$((start + partition_sectors))
+end=$((start + partition_sectors - 2))
+
+#try one more partition than allowed, make sure it fails
+
+parted -s -a min $scsi_dev mkpart logical ${start}s ${end}s > out 2>&1
+cat <<EOF > exp
+Error: cannot create any more partitions
+EOF
+compare exp out || fail=1
+
+Exit $fail
diff --git a/tests/t9050-partition-table-types.sh b/tests/t9050-partition-table-types.sh
new file mode 100755
index 0000000..0c2dbe7
--- /dev/null
+++ b/tests/t9050-partition-table-types.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# Ensure that any combination of partition table types works.
+# I.e., write a partition table of type T, and then overwrite it
+# with one of type V, for every permutation of T and V.
+
+# Copyright (C) 2011-2014, 2019-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+
+not_yet='
+aix
+'
+
+types='
+bsd
+msdos
+dvh
+gpt
+loop
+mac
+pc98
+sun
+mkswap
+'
+N=1M
+dev=loop-file
+
+cleanup_() {
+ rm -f $dev;
+}
+
+dd if=/dev/zero of=$dev bs=$N count=30 || framework_failure_
+
+for i in $types; do
+ for j in $types; do
+ echo $i:$j
+ case $i in mkswap) mkswap $dev || fail=1;;
+ *) parted -s $dev mklabel $i || fail=1;; esac
+ case $j in mkswap) continue;; esac
+ parted -s $dev mklabel $j || fail=1
+ done
+done
+
+Exit $fail
diff --git a/tests/t9060-gpt-grow-script-fix.sh b/tests/t9060-gpt-grow-script-fix.sh
new file mode 100755
index 0000000..efdb1e4
--- /dev/null
+++ b/tests/t9060-gpt-grow-script-fix.sh
@@ -0,0 +1,100 @@
+#!/bin/sh
+# grow a gpt disk, ensure that parted offers to update the gpt size
+# do this in script mode with fix
+
+# Copyright (C) 2009-2012, 2014, 2019, 2022-2023 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
+require_512_byte_sector_size_
+dev=loop-file
+
+ss=$sector_size_
+n_sectors=5000
+
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# create gpt label
+parted -s $dev mklabel gpt > empty 2>&1 || fail=1
+compare /dev/null empty || fail=1
+
+# print the empty table
+parted -m -s $dev unit s print > t 2>&1 || fail=1
+sed "s,.*/$dev:,$dev:," t > out || fail=1
+
+# check for expected output
+printf "BYT;\n$dev:${n_sectors}s:file:$sector_size_:$sector_size_:gpt::;\n" \
+ > exp || fail=1
+compare exp out || fail=1
+
+# grow disk
+n_sectors=5500
+dd if=/dev/null of=$dev bs=$ss seek=$n_sectors || fail=1
+
+# printing must warn, but not fix in script mode
+parted -s $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+cat <<EOF > exp || fail=1
+Warning: Not all of the space available to DEVICE appears to be used, you can fix the GPT to use all of the space (an extra 500 blocks) or continue with the current setting?
+Model: (file)
+Disk DEVICE: 2816kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+# now we fix
+parted --script --fix $dev print > out 2>&1 || fail=1
+
+# Transform the actual output, to avoid spurious differences when
+# $PWD contains a symlink-to-dir. Also, remove the ^M ...^M bogosity.
+# normalize the actual output
+mv out o2 && sed -e "s,/.*/$dev,DEVICE,;s, * ,,g;s, $,," \
+ -e "s,^.*/lt-parted: ,parted: ," o2 > out
+
+# check for expected diagnostic
+cat <<EOF > exp || fail=1
+Warning: Not all of the space available to DEVICE appears to be used, you can fix the GPT to use all of the space (an extra 500 blocks) or continue with the current setting?
+Fixing, due to --fix
+Model: (file)
+Disk DEVICE: 2816kB
+Sector size (logical/physical): 512B/512B
+Partition Table: gpt
+Disk Flags:
+
+Number Start End Size File system Name Flags
+
+EOF
+compare exp out || fail=1
+
+
+# Now should not warn
+
+parted -s $dev print > err 2>&1 || fail=1
+grep Warning: err > k ; mv k err
+compare /dev/null err || fail=1
+
+Exit $fail